فهرست منبع

Merge branch 'master' of github.com:jcbrand/converse.js

Conflicts:
	converse.js
JC Brand 12 سال پیش
والد
کامیت
509b2c307c
45فایلهای تغییر یافته به همراه10485 افزوده شده و 1742 حذف شده
  1. 14 0
      .gitignore
  2. 31 23
      CHANGES.rst
  3. 20 0
      Gruntfile.js
  4. 0 251
      Libraries/jarnxmpp.core.handlers.js
  5. 632 0
      Libraries/jed.js
  6. 1 1
      Libraries/strophe.muc.js
  7. 17 35
      Makefile
  8. 9 1
      build.js
  9. 0 0
      converse.0.3.min.css
  10. 0 84
      converse.0.3.min.js
  11. 45 46
      converse.css
  12. 1321 1156
      converse.js
  13. 0 0
      converse.min.css
  14. 139 0
      converse.min.js
  15. BIN
      docs/doctrees/environment.pickle
  16. BIN
      docs/doctrees/index.doctree
  17. 194 21
      docs/html/_sources/index.txt
  18. 159 27
      docs/html/index.html
  19. BIN
      docs/html/objects.inv
  20. 0 0
      docs/html/searchindex.js
  21. 194 21
      docs/source/index.rst
  22. 47 31
      index.html
  23. 459 0
      locale/af/LC_MESSAGES/af.js
  24. 459 0
      locale/af/LC_MESSAGES/converse.json
  25. 488 0
      locale/af/LC_MESSAGES/converse.po
  26. 481 0
      locale/converse.pot
  27. 460 0
      locale/de/LC_MESSAGES/converse.json
  28. 489 0
      locale/de/LC_MESSAGES/converse.po
  29. 459 0
      locale/de/LC_MESSAGES/de.js
  30. 19 0
      locale/en/LC_MESSAGES/en.js
  31. 460 0
      locale/es/LC_MESSAGES/converse.json
  32. 493 0
      locale/es/LC_MESSAGES/converse.po
  33. 459 0
      locale/es/LC_MESSAGES/es.js
  34. 457 0
      locale/hu/LC_MESSAGES/converse.json
  35. 481 0
      locale/hu/LC_MESSAGES/converse.po
  36. 459 0
      locale/hu/LC_MESSAGES/hu.js
  37. 460 0
      locale/it/LC_MESSAGES/converse.json
  38. 489 0
      locale/it/LC_MESSAGES/converse.po
  39. 470 0
      locale/it/LC_MESSAGES/it.js
  40. 38 0
      locale/locales.js
  41. 1 3
      main.js
  42. 19 11
      mock.js
  43. 34 0
      package.json
  44. 9 9
      spec/ChatRoomSpec.js
  45. 19 22
      spec/MainSpec.js

+ 14 - 0
.gitignore

@@ -0,0 +1,14 @@
+*~
+*.mo
+*.kpf
+*.swp
+.*.cfg
+.hg/
+.bzr/
+.svn/
+.project
+.pydevproject
+node_modules
+
+# OSX
+.DS_Store

+ 31 - 23
CHANGES.rst

@@ -1,32 +1,40 @@
 Changelog
 =========
 
+0.5 (Unreleased)
+----------------
+- #22 Fixed compare operator in strophe.muc [sonata82]
+- #23 Add Italian translations [ctrlaltca]
+- #24 Add Spanish translations [macagua]
+- #25 Using span with css instead of img [matheus-morfi]
+- #26 Only the first minute digit shown in chatbox. [jcbrand]
+
+0.4 (2013-06-03)
+----------------
+
+- CSS tweaks: fixed overflowing text in status message and chatrooms list. [jcbrand]
+- Bugfix: Couldn't join chatroom when clicking from a list of rooms. [jcbrand]
+- Add better support for kicking or banning users from chatrooms. [jcbrand]
+- Fixed alignment of chat messages in Firefox. [jcbrand]
+- More intelligent fetching of vCards. [jcbrand]
+- Fixed a race condition bug. Make sure that the roster is populated before sending initial presence. [jcbrand]
+- Reconnect automatically when the connection drops. [jcbrand]
+- Add support for internationalization. [jcbrand]
+
 0.3 (2013-05-21)
 ----------------
 
-- Add vCard support 
-  [jcbrand]
-- Remember custom status messages upon reload. 
-  [jcbrand] 
-- Remove jquery-ui dependency. 
-  [jcbrand]
-- Use backbone.localStorage to store the contacts roster, open chatboxes and
-  chat messages. 
-  [jcbrand]
-- Fixed user status handling, which wasn't 100% according to the spec. 
-  [jcbrand]
-- Separate messages according to day in chats. 
-  [jcbrand]
-- Add support for specifying the BOSH bind URL as configuration setting.
-  [jcbrand]
-- Improve the message counter to only increment when the window is not focused 
-  [witekdev]
-- Make fetching of list of chatrooms on a server a configuration option.
-  [jcbrand]
-- Use service discovery to show all available features on a room.
-  [jcbrand]
-- Multi-user chatrooms are now configurable.
-  [jcbrand]
+- Add vCard support [jcbrand]
+- Remember custom status messages upon reload. [jcbrand]
+- Remove jquery-ui dependency. [jcbrand]
+- Use backbone.localStorage to store the contacts roster, open chatboxes and chat messages. [jcbrand]
+- Fixed user status handling, which wasn't 100% according to the spec. [jcbrand]
+- Separate messages according to day in chats. [jcbrand]
+- Add support for specifying the BOSH bind URL as configuration setting. [jcbrand]
+- #8 Improve the message counter to only increment when the window is not focused [witekdev]
+- Make fetching of list of chatrooms on a server a configuration option. [jcbrand]
+- Use service discovery to show all available features on a room. [jcbrand]
+- Multi-user chatrooms are now configurable. [jcbrand]
 
 
 0.2 (2013-03-28)

+ 20 - 0
Gruntfile.js

@@ -0,0 +1,20 @@
+module.exports = function(grunt) {
+    grunt.initConfig({
+        jshint: {
+        options: {
+            trailing: true
+        },
+        target: {
+            src : [
+                'converse.js',
+                'mock.js',
+                'main.js',
+                'tests_main.js',
+                'spec/*.js'
+            ]
+        }
+        }
+    });
+    grunt.loadNpmTasks('grunt-contrib-jshint');
+    grunt.registerTask('default', ['jshint']);
+};

+ 0 - 251
Libraries/jarnxmpp.core.handlers.js

@@ -1,251 +0,0 @@
-/*global $:false, document:false, window:false, portal_url:false,
-$msg:false, Strophe:false, setTimeout:false, navigator:false, jarn:false, google:false, jarnxmpp:false, jQuery:false, sessionStorage:false, $iq:false, $pres:false, Image:false, */
-
-(function (jarnxmpp, $, portal_url) {
-
-    portal_url = portal_url || '';
-
-    jarnxmpp.Storage = {
-        storage: null,
-        init: function () {
-            try {
-                if ('sessionStorage' in window && window.sessionStorage !== null && JSON in window && window.JSON !== null) {
-                    jarnxmpp.Storage.storage = sessionStorage;
-                    if (!('_user_info' in jarnxmpp.Storage.storage)) {
-                        jarnxmpp.Storage.set('_user_info', {});
-                    }
-                    if (!('_vCards' in jarnxmpp.Storage.storage)) {
-                        jarnxmpp.Storage.set('_vCards', {});
-                    }
-                    if (!('_subscriptions' in jarnxmpp.Storage.storage)) {
-                        jarnxmpp.Storage.set('_subscriptions', null);
-                    }
-                }
-            } catch (e) {}
-        },
-
-        get: function (key) {
-            if (key in sessionStorage) {
-                return JSON.parse(sessionStorage[key]);
-            }
-            return null;
-        },
-
-        set: function (key, value) {
-            sessionStorage[key] = JSON.stringify(value);
-        },
-
-        xmppGet: function (key, callback) {
-            var stanza = $iq({type: 'get'})
-                .c('query', {xmlns: 'jabber:iq:private'})
-                .c('jarnxmpp', {xmlns: 'http://jarn.com/ns/jarnxmpp:prefs:' + key})
-                .tree();
-            jarnxmpp.connection.sendIQ(stanza, function success(result) {
-                callback($('jarnxmpp ' + 'value', result).first().text());
-            });
-        },
-
-        xmppSet: function (key, value) {
-            var stanza = $iq({type: 'set'})
-                .c('query', {xmlns: 'jabber:iq:private'})
-                .c('jarnxmpp', {xmlns: 'http://jarn.com/ns/jarnxmpp:prefs:' + key})
-                .c('value', value)
-                .tree();
-            jarnxmpp.connection.sendIQ(stanza);
-        }
-    };
-
-    jarnxmpp.Storage.init();
-
-    jarnxmpp.Presence = {
-        online: {},
-        _user_info: {},
-
-        onlineCount: function () {
-            var me = Strophe.getNodeFromJid(jarnxmpp.connection.jid),
-                counter = 0,
-                user;
-            for (user in jarnxmpp.Presence.online) {
-                if ((jarnxmpp.Presence.online.hasOwnProperty(user)) && user !== me) {
-                    counter += 1;
-                }
-            }
-            return counter;
-        },
-
-        getUserInfo: function (user_id, callback) {
-            // User info on browsers without storage
-            if (jarnxmpp.Storage.storage === null) {
-                if (user_id in jarnxmpp.Presence._user_info) {
-                    callback(jarnxmpp.Presence._user_info[user_id]);
-                } else {
-                    $.getJSON(portal_url + "/xmpp-userinfo?user_id=" + user_id, function (data) {
-                        jarnxmpp.Presence._user_info[user_id] = data;
-                        callback(data);
-                    });
-                }
-            } else {
-                var _user_info = jarnxmpp.Storage.get('_user_info');
-                if (user_id in _user_info) {
-                    callback(_user_info[user_id]);
-                } else {
-                    $.getJSON(portal_url + "/xmpp-userinfo?user_id=" + user_id, function (data) {
-                        _user_info[user_id] = data;
-                        jarnxmpp.Storage.set('_user_info', _user_info);
-                        callback(data);
-                    });
-                }
-            }
-        }
-    };
-
-    jarnxmpp.vCard = {
-
-        _vCards: {},
-
-        _getVCard: function (jid, callback) {
-            var stanza =
-                $iq({type: 'get', to: jid})
-                .c('vCard', {xmlns: 'vcard-temp'}).tree();
-            jarnxmpp.connection.sendIQ(stanza, function (data) {
-                var result = {};
-                $('vCard[xmlns="vcard-temp"]', data).children().each(function (idx, element) {
-                    result[element.nodeName] = element.textContent;
-                });
-                if (typeof (callback) !== 'undefined') {
-                    callback(result);
-                }
-            });
-        },
-
-        getVCard: function (jid, callback) {
-            jid = Strophe.getBareJidFromJid(jid);
-            if (jarnxmpp.Storage.storage === null) {
-                if (jid in jarnxmpp.vCard._vCards) {
-                    callback(jarnxmpp.vCard._vCards[jid]);
-                } else {
-                    jarnxmpp.vCard._getVCard(jid, function (result) {
-                        jarnxmpp.vCard._vCards[jid] = result;
-                        callback(result);
-                    });
-                }
-            } else {
-                var _vCards = jarnxmpp.Storage.get('_vCards');
-                if (jid in _vCards) {
-                    callback(_vCards[jid]);
-                } else {
-                    jarnxmpp.vCard._getVCard(jid, function (result) {
-                        _vCards[jid] = result;
-                        jarnxmpp.Storage.set('_vCards', _vCards);
-                        callback(result);
-                    });
-                }
-            }
-        },
-
-        setVCard: function (params, photoUrl) {
-            var key,
-                vCard = Strophe.xmlElement('vCard', [['xmlns', 'vcard-temp'], ['version', '2.0']]);
-            for (key in params) {
-                if (params.hasOwnProperty(key)) {
-                    vCard.appendChild(Strophe.xmlElement(key, [], params[key]));
-                }
-            }
-            var send = function () {
-                var stanza = $iq({type: 'set'}).cnode(vCard).tree();
-                jarnxmpp.connection.sendIQ(stanza);
-            };
-            if (typeof (photoUrl) === 'undefined') {
-                send();
-            } else {
-                jarnxmpp.vCard.getBase64Image(photoUrl, function (base64img) {
-                    base64img = base64img.replace(/^data:image\/png;base64,/, "");
-                    var photo = Strophe.xmlElement('PHOTO');
-                    photo.appendChild(Strophe.xmlElement('TYPE', [], 'image/png'));
-                    photo.appendChild(Strophe.xmlElement('BINVAL', [], base64img));
-                    vCard.appendChild(photo);
-                    send();
-                });
-            }
-        },
-
-        getBase64Image: function (url, callback) {
-            // Create the element, then draw it on a canvas to get the base64 data.
-            var img = new Image();
-            $(img).load(function () {
-                var canvas = document.createElement('canvas');
-                canvas.width = img.width;
-                canvas.height = img.height;
-                var ctx = canvas.getContext("2d");
-                ctx.drawImage(img, 0, 0);
-                callback(canvas.toDataURL('image/png'));
-            }).attr('src', url);
-        }
-    };
-
-    jarnxmpp.onConnect = function (status) {
-        if ((status === Strophe.Status.ATTACHED) || (status === Strophe.Status.CONNECTED)) {
-            $(window).bind('beforeunload', function () {
-                $(document).trigger('jarnxmpp.disconnecting');
-                var presence = $pres({type: 'unavailable'});
-                jarnxmpp.connection.send(presence);
-                jarnxmpp.connection.disconnect();
-                jarnxmpp.connection.flush();
-            });
-            $(document).trigger('jarnxmpp.connected');
-        } else if (status === Strophe.Status.DISCONNECTED) {
-            $(document).trigger('jarnxmpp.disconnected');
-        }
-    };
-
-    jarnxmpp.rawInput = function (data) {
-        var event = jQuery.Event('jarnxmpp.dataReceived');
-        event.text = data;
-        $(document).trigger(event);
-    };
-
-    jarnxmpp.rawOutput = function (data) {
-        var event = jQuery.Event('jarnxmpp.dataSent');
-        event.text = data;
-        $(document).trigger(event);
-    };
-
-    $(document).bind('jarnxmpp.connected', function () {
-        // Logging
-        jarnxmpp.connection.rawInput = jarnxmpp.rawInput;
-        jarnxmpp.connection.rawOutput = jarnxmpp.rawOutput;
-    });
-
-    $(document).bind('jarnxmpp.disconnecting', function () {
-        if (jarnxmpp.Storage.storage !== null) {
-            jarnxmpp.Storage.set('online-count', jarnxmpp.Presence.onlineCount());
-        }
-    });
-
-    $(document).ready(function () {
-        var resource = jarnxmpp.Storage.get('xmppresource');
-        if (resource) {
-            data = {'resource': resource};
-        } else {
-            data = {};
-        }
-        $.ajax({
-            'url':portal_url + '/@@xmpp-loader',
-            'dataType': 'json',
-            'data': data,
-            'success': function (data) {
-                if (!(('rid' in data) && ('sid' in data) && ('BOSH_SERVICE' in data))) {
-                    return;
-                }
-                if (!resource) {
-                    jarnxmpp.Storage.set('xmppresource', Strophe.getResourceFromJid(data.jid));
-                }
-                jarnxmpp.BOSH_SERVICE = data.BOSH_SERVICE;
-                jarnxmpp.jid = data.jid;
-                jarnxmpp.connection = new Strophe.Connection(jarnxmpp.BOSH_SERVICE);
-                jarnxmpp.connection.attach(jarnxmpp.jid, data.sid, data.rid, jarnxmpp.onConnect);
-            }
-        });
-    });
-
-})(window.jarnxmpp = window.jarnxmpp || {}, jQuery, portal_url);

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 632 - 0
Libraries/jed.js


+ 1 - 1
Libraries/strophe.muc.js

@@ -180,7 +180,7 @@
                 xmlns: Strophe.NS.CLIENT
             }).t(message);
             msg.up();
-            if (html_message !== null) {
+            if (html_message != null) {
                 msg.c("html", {xmlns: Strophe.NS.XHTML_IM}).c("body", {xmlns: Strophe.NS.XHTML}).h(html_message);
 
                 if (msg.node.childNodes.length === 0) {

+ 17 - 35
Makefile

@@ -11,30 +11,31 @@ ALLSPHINXOPTS   = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) ./d
 # the i18n builder cannot share the environment and doctrees with the others
 I18NSPHINXOPTS  = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) ./docs/source
 
-.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext
+.PHONY: help clean html dirhtml singlehtml json htmlhelp devhelp epub latex latexpdf text changes linkcheck doctest gettext
 
 help:
 	@echo "Please use \`make <target>' where <target> is one of"
-	@echo "  release    to make a new minified release"
-	@echo "  html       to make standalone HTML files"
+	@echo "  changes    to make an overview of all changed/added/deprecated items"
+	@echo "  devhelp    to make HTML files and a Devhelp project"
 	@echo "  dirhtml    to make HTML files named index.html in directories"
-	@echo "  singlehtml to make a single large HTML file"
-	@echo "  pickle     to make pickle files"
+	@echo "  doctest    to run all doctests embedded in the documentation (if enabled)"
+	@echo "  epub       to export the documentation to epub"
+	@echo "  gettext    to make PO message catalogs of the documentation"
+	@echo "  html       to make standalone HTML files of the documentation"
+	@echo "  htmlhelp   to make HTML files and a HTML help project from the documentation"
+	@echo "  info       to make Texinfo files and run them through makeinfo"
 	@echo "  json       to make JSON files"
-	@echo "  htmlhelp   to make HTML files and a HTML help project"
-	@echo "  qthelp     to make HTML files and a qthelp project"
-	@echo "  devhelp    to make HTML files and a Devhelp project"
-	@echo "  epub       to make an epub"
 	@echo "  latex      to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
 	@echo "  latexpdf   to make LaTeX files and run them through pdflatex"
-	@echo "  text       to make text files"
-	@echo "  man        to make manual pages"
-	@echo "  texinfo    to make Texinfo files"
-	@echo "  info       to make Texinfo files and run them through makeinfo"
-	@echo "  gettext    to make PO message catalogs"
-	@echo "  changes    to make an overview of all changed/added/deprecated items"
 	@echo "  linkcheck  to check all external links for integrity"
-	@echo "  doctest    to run all doctests embedded in the documentation (if enabled)"
+	@echo "  pot        generates a gettext POT file to be used for translations"
+	@echo "  release    to make a new minified release"
+	@echo "  singlehtml to make a single large HTML file"
+	@echo "  texinfo    to make Texinfo files"
+	@echo "  text       to make text files"
+
+pot: 
+	xgettext --keyword=__ --keyword=translate --from-code=UTF-8 --output=locale/converse.pot converse.js --package-name=Converse.js --copyright-holder="Jan-Carel Brand" --package-version=0.4 -c --language="python";
 
 release: 
 	r.js -o build.js
@@ -57,11 +58,6 @@ singlehtml:
 	@echo
 	@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
 
-pickle:
-	$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
-	@echo
-	@echo "Build finished; now you can process the pickle files."
-
 json:
 	$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
 	@echo
@@ -73,15 +69,6 @@ htmlhelp:
 	@echo "Build finished; now you can run HTML Help Workshop with the" \
 	      ".hhp project file in $(BUILDDIR)/htmlhelp."
 
-qthelp:
-	$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
-	@echo
-	@echo "Build finished; now you can run "qcollectiongenerator" with the" \
-	      ".qhcp project file in $(BUILDDIR)/qthelp, like this:"
-	@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/sphinx.qhcp"
-	@echo "To view the help file:"
-	@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/sphinx.qhc"
-
 devhelp:
 	$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
 	@echo
@@ -114,11 +101,6 @@ text:
 	@echo
 	@echo "Build finished. The text files are in $(BUILDDIR)/text."
 
-man:
-	$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
-	@echo
-	@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
-
 texinfo:
 	$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
 	@echo

+ 9 - 1
build.js

@@ -2,6 +2,14 @@
     baseUrl: ".",
     paths: {
         "jquery": "Libraries/require-jquery",
+        "jed": "Libraries/jed",
+        "locales": "locale/locales",
+        "af": "locale/af/LC_MESSAGES/af",
+        "en": "locale/en/LC_MESSAGES/en",
+        "de": "locale/de/LC_MESSAGES/de",
+        "es": "locale/es/LC_MESSAGES/es",
+        "hu": "locale/hu/LC_MESSAGES/hu",
+        "it": "locale/it/LC_MESSAGES/it",
         "sjcl": "Libraries/sjcl",
         "tinysort": "Libraries/jquery.tinysort",
         "underscore": "Libraries/underscore",
@@ -14,5 +22,5 @@
         "strophe.disco": "Libraries/strophe.disco"
     },
     name: "main",
-    out: "converse.0.3.min.js"
+    out: "converse.min.js"
 })

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
converse.0.3.min.css


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 84
converse.0.3.min.js


+ 45 - 46
converse.css

@@ -15,29 +15,18 @@ span.spinner {
     display: block;
 }
 
-span.spinner.hor_centered {
-    left: 40%;
-    position: absolute;
-}
-
-
-img.spinner {
-    width: auto;
-    border: none;
-    box-shadow: none;
-    -moz-box-shadow: none;
-    -webkit-box-shadow: none;
-    margin: 0;
-    padding: 0 5px 0 5px;
-}
-
-img.centered {
+span.spinner.centered {
     position: absolute;
     top: 30%;
     left: 50%;
     margin: 0 0 0 -25%;
 }
 
+span.spinner.hor_centered {
+    left: 40%;
+    position: absolute;
+}
+
 #chatpanel {
     z-index: 99; /*--Keeps the panel on top of all other elements--*/
     position: fixed;
@@ -87,7 +76,8 @@ img.centered {
 .chatroom .chat-body {
     height: 272px;
     background-color: white;
-    border-radius: 4px;
+    border-bottom-right-radius: 4px;
+    border-bottom-left-radius: 4px;
 }
 
 .chatroom .chat-area {
@@ -173,31 +163,36 @@ ul.participant-list li.moderator {
     color:#666666;
 }
 
+.chat-message-room,
+.chat-message-them,
 .chat-message-me {
     font-weight: bold;
-    color: #436976;
-}
-
-.chat-message-room {
-    font-weight: bold;
-    color: #4B7003;
-}
-
-.chat-message-them {
-    font-weight: bold;
-    color: #F62817;
     white-space: nowrap;
     max-width: 100px;
     text-overflow: ellipsis;
     overflow: hidden;
     display: inline-block;
+    float: left;
+    padding-right: 3px;
+}
+
+.chat-message-them {
+    color: #F62817;
+}
+
+.chat-message-me {
+    color: #436976;
+}
+
+.chat-message-room {
+    color: #4B7003;
 }
 
-.chat-event, .chat-date, .chat-help {
+.chat-event, .chat-date, .chat-info {
     color: #808080;
 }
 
-li.chat-help {
+li.chat-info {
     padding-left: 10px;
 }
 
@@ -262,7 +257,7 @@ div.chat-title {
 .chat-head-chatbox,
 .chat-head-chatroom {
     background: linear-gradient(top, rgba(206,220,231,1) 0%,rgba(89,106,114,1) 100%);
-    height: 33px;
+    height: 35px;
     position: relative;
 }
 
@@ -304,6 +299,7 @@ dl.add-converse-contact {
     text-overflow: ellipsis;
     white-space: nowrap;
     float: left;
+    width: 130px;
 }
 
 #fancy-xmpp-status-select a.change-xmpp-status-message {
@@ -409,7 +405,8 @@ a.configure-chatroom-button {
 .chat-body p {
     font-size: 14px;
     color: #666;
-    margin: 5px;
+    padding: 5px;
+    margin: 0;
 }
 
 .chatroom-form legend {
@@ -498,17 +495,12 @@ a.configure-chatroom-button {
     margin-top: 0.5em;
 }
 
-#available-chatrooms {
-    height: 183px;
-    overflow-y: auto;
-}
-
 #available-chatrooms dd {
     overflow-x: hidden;
     text-overflow: ellipsis;
     white-space: nowrap;
     display: inline-block;
-    width: 170px;
+    width: 165px;
 }
 
 #available-chatrooms dt,
@@ -517,7 +509,7 @@ a.configure-chatroom-button {
     font-size: 13px;
     color: #666;
     border: none;
-    padding: 0.3em 0.5em 0.3em 0.5em;
+    padding: 0em 0em 0.3em 0.5em;
     text-shadow: 0 1px 0 rgba(250, 250, 250, 1);
 }
 
@@ -530,7 +522,7 @@ dd.available-chatroom,
     font-weight: bold;
     border: none;
     display: block;
-    padding: 0 0.5em 0 0.5em;
+    padding: 0 0em 0 0.5em;
     color: #666;
     text-shadow: 0 1px 0 rgba(250, 250, 250, 1);
 }
@@ -546,6 +538,10 @@ li.room-info {
     margin-left: 5px;
 }
 
+div.room-info {
+    clear: left;
+}
+
 p.room-info {
     margin: 0;
     padding: 0;
@@ -556,13 +552,13 @@ p.room-info {
 a.room-info {
     background: url('images/information.png') no-repeat right top;
     width: 22px;
-    height: 22px;
     float: right;
     display: none;
+    clear: right;
 }
 
 a.open-room {
-    display: inline-block;    
+    float: left;
     white-space: nowrap;
     text-overflow: ellipsis;
     overflow-x: hidden;
@@ -667,13 +663,12 @@ form.set-xmpp-status {
 
 form.add-chatroom {
     background: none;
-    padding: 0.5em;
+    padding: 3px;
 }
 
 form.add-chatroom input[type=text] {
-    width: 172px;
+    width: 95%;
     margin: 3px;
-    padding: 1px;
 }
 
 form.add-chatroom input[type=button],
@@ -748,6 +743,10 @@ div#settings {
     border-bottom-left-radius: 4px;
 }
 
+div#chatrooms {
+    overflow-y: auto;
+}
+
 form.sendXMPPMessage {
     background: white;
     border: 1px solid #999;

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1321 - 1156
converse.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
converse.min.css


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 139 - 0
converse.min.js


BIN
docs/doctrees/environment.pickle


BIN
docs/doctrees/index.doctree


+ 194 - 21
docs/html/_sources/index.txt

@@ -15,22 +15,22 @@ Introduction
 ============
 
 Even though you can connect to public XMPP servers on the `conversejs.org`_
-website, *Converse.js* is not meant to be a "Software-as-a-service" (SaaS) 
+website, *Converse.js* is not really meant to be a "Software-as-a-service" (SaaS) 
 webchat.
 
 Instead, its goal is to provide the means for website owners to add a tightly
 integrated instant messaging service to their own sites.
 
 As a website owner, you are expected to host *Converse.js* yourself, and to do some legwork to
-properly configure and integrated it into your site.
+properly configure and integrate it into your site.
 
 The benefit in doing this, is that your users have a much more streamlined and integrated
 webchat experience and that you have control over the data. The latter being a
 requirement for many sites dealing with sensitive information.
 
 You'll need to set up your own XMPP server and in order to have
-single-signon functionality, whereby users are authenticated once and stay
-logged in to XMPP upon page reload, you will also have to add some server-side
+`Session Support`_ (i.e. single-signon functionality whereby users are authenticated once and stay
+logged in to XMPP upon page reload) you will also have to add some server-side
 code.
 
 The `What you will need`_ section has more information on all these
@@ -46,9 +46,12 @@ An XMPP/Jabber server
 *Converse.js* implements `XMPP`_ as its messaging protocol, and therefore needs
 to connect to an XMPP/Jabber server (Jabber is really just a synonym for XMPP).
 
-You can either set up your own XMPP server, or use a public one. You can find a
-list of public XMPP servers/providers on `xmpp.net`_ and a list of servers that
-you can set up yourself on `xmpp.org`_.
+You can connect to public XMPP servers like ``jabber.org`` but if you want to
+have `Session Support`_ you'll have to set up your own XMPP server.
+
+You can find a list of public XMPP servers/providers on `xmpp.net`_ and a list of
+servers that you can set up yourself on `xmpp.org`_.
+
 
 Connection Manager
 ==================
@@ -96,8 +99,10 @@ website. This will remove the need for any cross-domain XHR support.
 Server-side authentication
 ==========================
 
-Session support (i.e. single site login)
-----------------------------------------
+.. _`Session Support`:
+
+Pre-binding and Single Session Support
+--------------------------------------
 
 It's possible to enable single-site login, whereby users already
 authenticated in your website will also automatically be logged in on the chat server,
@@ -105,26 +110,81 @@ but this will require custom code on your server.
 
 Jack Moffitt has a great `blogpost`_ about this and even provides an `example Django application`_ to demonstrate it.
 
+.. Note::
+   If you want to enable single session support, make sure to pass **prebind: true**
+   when you call **converse.initialize** (see ./index.html).
+
+When you authenticate to the XMPP server on your backend, you'll receive two
+tokens, RID (request ID) and SID (session ID).
+
+These tokens then need to be passed back to the javascript running in your
+browser, where you will need them attach to the existing session.
+
+You can embed the RID and SID tokens in your HTML markup or you can do an
+XMLHttpRequest call to you server and ask it to return them for you.
+
+Below is one example of how this could work. An Ajax call is made to the
+relative URL **/prebind** and it expects to receive JSON data back.
+
+:: 
+
+    $.getJSON('/prebind', function (data) {
+            var connection = new Strophe.Connection(converse.bosh_service_url);
+            connection.attach(data.jid, data.sid, data.rid, function (status) {
+                if ((status === Strophe.Status.ATTACHED) || (status === Strophe.Status.CONNECTED)) {
+                    converse.onConnected(connection)
+                } 
+            });
+        }
+    );
+
+**Here's what's happening:**
+
+The JSON data contains the user's JID (jabber ID), RID and SID. The URL to the
+BOSH connection manager is already set as a configuration setting on the
+*converse* object (see ./main.js), so we can reuse it from there.
+
+A new Strophe.Connection object is instantiated and then *attach* is called with
+the user's JID, the necessary tokens and a callback function.
+
+In the callback function, you call *converse.onConnected* together with the
+connection object.
+
 
 =========================================
 Quickstart (to get a demo up and running)
 =========================================
 
-When you download a specific release of *Converse.js*, say for example version 0.3,
-there will be two minified files inside the zip file.
+When you download a specific release of *Converse.js* there will be two minified files inside the zip file.
 
-For version 0.3 they will be:
+* converse.min.js
+* converse.min.css
 
-* converse.0.3.min.js
-* converse.0.3.min.css
-
-You can include these two files in your website via the *script* and *link*
+You can include these two files inside the *<head>* element of your website via the *script* and *link*
 tags:
 
 ::
 
-    <link rel="stylesheet" type="text/css" media="screen" href="converse.0.3.min.css">
-    <script src="converse.0.3.min.js"></script>
+    <link rel="stylesheet" type="text/css" media="screen" href="converse.min.css">
+    <script src="converse.min.js"></script>
+
+Then, at the bottom of your page, after the closing *</body>* element, put the
+following inline Javascript code:
+
+::
+
+    <script>
+        converse.initialize({
+            auto_list_rooms: false,
+            auto_subscribe: false,
+            bosh_service_url: 'https://bind.opkode.im', // Please use this connection manager only for testing purposes
+            hide_muc_server: false,
+            i18n: locales.en, // Refer to ./locale/locales.js to see which locales are supported
+            prebind: false,
+            show_controlbox_by_default: true,
+            xhr_user_search: false
+        });
+    </script>
 
 The *index.html* file inside the Converse.js folder serves as a nice usable
 example of this.
@@ -137,7 +197,7 @@ You'll most likely want to implement some kind of single-signon solution for
 your website, where users authenticate once in your website and then stay
 logged into their XMPP session upon page reload.
 
-For more info on this, read `Session support (i.e. single site login)`_.
+For more info on this, read: `Pre-binding and Single Session Support`_.
 
 You might also want to have more fine-grained control of what gets included in
 the minified Javascript file. Read `Configuration`_ and `Minification`_ for more info on how to do
@@ -155,6 +215,9 @@ on your website.
 *Converse.js* is passed its configuration settings when you call its
 *initialize* method.
 
+You'll most likely want to call the *initialize* method in your HTML page. For
+an example of how this is done, please see the bottom of the *./index.html* page.
+
 Please refer to the `Configuration variables`_ section below for info on
 all the available configuration settings.
 
@@ -243,6 +306,20 @@ have to write a Javascript snippet to attach to the set up connection::
 The backend must authenticate for you, and then return a SID (session ID) and
 RID (Request ID), which you use when you attach to the connection.
 
+show_controlbox_by_default
+--------------------------
+
+Default = False
+
+The "controlbox" refers to the special chatbox containing your contacts roster,
+status widget, chatrooms and other controls.
+
+By default this box is hidden and can be toggled by clicking on any element in
+the page with class *toggle-online-users*.
+
+If this options is set to true, the controlbox will by default be shown upon
+page load.
+
 
 xhr_user_search
 ---------------
@@ -257,8 +334,6 @@ There are two ways to add users.
 This setting enables the second mechanism, otherwise by default the first will
 be used.
 
-
-
 ============
 Minification
 ============
@@ -299,6 +374,104 @@ CSS can be minimized with Yahoo's yuicompressor tool:
     yui-compressor --type=css converse.css -o converse.min.css
 
 
+============
+Translations
+============
+
+.. Note :: 
+   Translations take up a lot of space and will bloat your minified file.
+   At the time of writing, all the translations add about 50KB of extra data to
+   the minified javascript file. Therefore, make sure to only
+   include those languages that you intend to support and remove from
+   ./locale/locales.js those which you don't need. Remember to rebuild the
+   minified file afterwards.
+
+The gettext POT file located in ./locale/converse.pot is the template
+containing all translations and from which for each language an individual PO
+file is generated.
+
+The POT file contains all translateable strings extracted from converse.js.
+
+To make a user facing string translateable, wrap it in the double underscore helper
+function like so:
+
+::
+
+    __('This string will be translated at runtime');
+
+After adding the string, you'll need to regenerate the POT file, like so:
+
+::
+
+    make pot
+
+You can then create or update the PO file for a specific language by doing the following:
+
+::
+
+    msgmerge ./locale/af/LC_MESSAGES/converse.po ./locale/converse.pot -U
+
+This PO file is then what gets translated.
+
+If you've created a new PO file, please make sure to add the following
+attributes at the top of the file (under *Content-Transfer-Encoding*). They are
+required as configuration settings for Jed, the Javascript translations library
+that we're using.
+
+::
+
+    "domain: converse\n"
+    "lang: af\n"
+    "plural_forms: nplurals=2; plural=(n != 1);\n"
+    
+
+Unfortunately Jed cannot use the PO files directly. We have to generate from it 
+a file in JSON format and then put that in a .js file for the specific
+language.
+
+To generate JSON from a PO file, you'll need po2json for node.js. Run the
+following command to install it (npm being the node.js package manager):
+
+::
+
+    npm install po2json
+    
+You can then convert the translations into JSON format:
+
+::
+
+    po2json locale/af/LC_MESSAGES/converse.po locale/af/LC_MESSAGES/converse.json
+
+Now from converse.json paste the data as a value for the "locale_data" key in the
+object in the language's .js file.
+
+So, if you are for example translating into German (language code 'de'), you'll
+create or update the file ./locale/LC_MESSAGES/de.js with the following code:
+
+::
+
+    (function (root, factory) {
+        define("af", ['jed'], function () {
+            return factory(new Jed({
+                "domain": "converse",
+                "locale_data": {
+                    // Paste the JSON data from converse.json here
+                }
+            })
+        }
+    }(this, function (i18n) { 
+        return i18n; 
+    }));
+
+making sure to also paste the JSON data as value to the "locale_data" key.
+
+.. Note :: 
+    If you are adding translations for a new language that is not already supported,
+    you'll have to make one more edit in ./locale/locales.js to make sure the
+    language is loaded by require.js.
+
+Congratulations, you've now succesfully added your translations. Sorry for all
+those hoops you had to jump through.
 
 
 .. _`conversejs.org`: http://conversejs.org

+ 159 - 27
docs/html/index.html

@@ -73,7 +73,7 @@
 </ul>
 </li>
 <li><a class="reference internal" href="#server-side-authentication" id="id6">Server-side authentication</a><ul>
-<li><a class="reference internal" href="#session-support-i-e-single-site-login" id="id7">Session support (i.e. single site login)</a></li>
+<li><a class="reference internal" href="#pre-binding-and-single-session-support" id="id7">Pre-binding and Single Session Support</a></li>
 </ul>
 </li>
 </ul>
@@ -88,33 +88,35 @@
 <li><a class="reference internal" href="#fullname" id="id15">fullname</a></li>
 <li><a class="reference internal" href="#hide-muc-server" id="id16">hide_muc_server</a></li>
 <li><a class="reference internal" href="#prebind" id="id17">prebind</a></li>
-<li><a class="reference internal" href="#xhr-user-search" id="id18">xhr_user_search</a></li>
+<li><a class="reference internal" href="#show-controlbox-by-default" id="id18">show_controlbox_by_default</a></li>
+<li><a class="reference internal" href="#xhr-user-search" id="id19">xhr_user_search</a></li>
 </ul>
 </li>
 </ul>
 </li>
-<li><a class="reference internal" href="#minification" id="id19">Minification</a><ul>
-<li><a class="reference internal" href="#minifying-javascript" id="id20">Minifying Javascript</a></li>
-<li><a class="reference internal" href="#minifying-css" id="id21">Minifying CSS</a></li>
+<li><a class="reference internal" href="#minification" id="id20">Minification</a><ul>
+<li><a class="reference internal" href="#minifying-javascript" id="id21">Minifying Javascript</a></li>
+<li><a class="reference internal" href="#minifying-css" id="id22">Minifying CSS</a></li>
 </ul>
 </li>
+<li><a class="reference internal" href="#translations" id="id23">Translations</a></li>
 </ul>
 </div>
 <div class="section" id="introduction">
 <h1><a class="toc-backref" href="#id1">Introduction</a><a class="headerlink" href="#introduction" title="Permalink to this headline">¶</a></h1>
 <p>Even though you can connect to public XMPP servers on the <a class="reference external" href="http://conversejs.org">conversejs.org</a>
-website, <em>Converse.js</em> is not meant to be a &#8220;Software-as-a-service&#8221; (SaaS)
+website, <em>Converse.js</em> is not really meant to be a &#8220;Software-as-a-service&#8221; (SaaS)
 webchat.</p>
 <p>Instead, its goal is to provide the means for website owners to add a tightly
 integrated instant messaging service to their own sites.</p>
 <p>As a website owner, you are expected to host <em>Converse.js</em> yourself, and to do some legwork to
-properly configure and integrated it into your site.</p>
+properly configure and integrate it into your site.</p>
 <p>The benefit in doing this, is that your users have a much more streamlined and integrated
 webchat experience and that you have control over the data. The latter being a
 requirement for many sites dealing with sensitive information.</p>
 <p>You&#8217;ll need to set up your own XMPP server and in order to have
-single-signon functionality, whereby users are authenticated once and stay
-logged in to XMPP upon page reload, you will also have to add some server-side
+<a class="reference internal" href="#session-support">Session Support</a> (i.e. single-signon functionality whereby users are authenticated once and stay
+logged in to XMPP upon page reload) you will also have to add some server-side
 code.</p>
 <p>The <a class="reference internal" href="#what-you-will-need">What you will need</a> section has more information on all these
 requirements.</p>
@@ -125,9 +127,10 @@ requirements.</p>
 <h2><a class="toc-backref" href="#id3">An XMPP/Jabber server</a><a class="headerlink" href="#an-xmpp-jabber-server" title="Permalink to this headline">¶</a></h2>
 <p><em>Converse.js</em> implements <a class="reference external" href="https://en.wikipedia.org/wiki/Xmpp">XMPP</a> as its messaging protocol, and therefore needs
 to connect to an XMPP/Jabber server (Jabber is really just a synonym for XMPP).</p>
-<p>You can either set up your own XMPP server, or use a public one. You can find a
-list of public XMPP servers/providers on <a class="reference external" href="http://xmpp.net">xmpp.net</a> and a list of servers that
-you can set up yourself on <a class="reference external" href="http://xmpp.org/xmpp-software/servers/">xmpp.org</a>.</p>
+<p>You can connect to public XMPP servers like <tt class="docutils literal"><span class="pre">jabber.org</span></tt> but if you want to
+have <a class="reference internal" href="#session-support">Session Support</a> you&#8217;ll have to set up your own XMPP server.</p>
+<p>You can find a list of public XMPP servers/providers on <a class="reference external" href="http://xmpp.net">xmpp.net</a> and a list of
+servers that you can set up yourself on <a class="reference external" href="http://xmpp.org/xmpp-software/servers/">xmpp.org</a>.</p>
 </div>
 <div class="section" id="connection-manager">
 <h2><a class="toc-backref" href="#id4">Connection Manager</a><a class="headerlink" href="#connection-manager" title="Permalink to this headline">¶</a></h2>
@@ -164,28 +167,72 @@ website. This will remove the need for any cross-domain XHR support.</p>
 </div>
 <div class="section" id="server-side-authentication">
 <h2><a class="toc-backref" href="#id6">Server-side authentication</a><a class="headerlink" href="#server-side-authentication" title="Permalink to this headline">¶</a></h2>
-<div class="section" id="session-support-i-e-single-site-login">
-<h3><a class="toc-backref" href="#id7">Session support (i.e. single site login)</a><a class="headerlink" href="#session-support-i-e-single-site-login" title="Permalink to this headline">¶</a></h3>
+<div class="section" id="pre-binding-and-single-session-support">
+<span id="session-support"></span><h3><a class="toc-backref" href="#id7">Pre-binding and Single Session Support</a><a class="headerlink" href="#pre-binding-and-single-session-support" title="Permalink to this headline">¶</a></h3>
 <p>It&#8217;s possible to enable single-site login, whereby users already
 authenticated in your website will also automatically be logged in on the chat server,
 but this will require custom code on your server.</p>
 <p>Jack Moffitt has a great <a class="reference external" href="http://metajack.im/2008/10/03/getting-attached-to-strophe">blogpost</a> about this and even provides an <a class="reference external" href="https://github.com/metajack/strophejs/tree/master/examples/attach">example Django application</a> to demonstrate it.</p>
+<div class="admonition note">
+<p class="first admonition-title">Note</p>
+<p class="last">If you want to enable single session support, make sure to pass <strong>prebind: true</strong>
+when you call <strong>converse.initialize</strong> (see ./index.html).</p>
+</div>
+<p>When you authenticate to the XMPP server on your backend, you&#8217;ll receive two
+tokens, RID (request ID) and SID (session ID).</p>
+<p>These tokens then need to be passed back to the javascript running in your
+browser, where you will need them attach to the existing session.</p>
+<p>You can embed the RID and SID tokens in your HTML markup or you can do an
+XMLHttpRequest call to you server and ask it to return them for you.</p>
+<p>Below is one example of how this could work. An Ajax call is made to the
+relative URL <strong>/prebind</strong> and it expects to receive JSON data back.</p>
+<div class="highlight-python"><pre>$.getJSON('/prebind', function (data) {
+        var connection = new Strophe.Connection(converse.bosh_service_url);
+        connection.attach(data.jid, data.sid, data.rid, function (status) {
+            if ((status === Strophe.Status.ATTACHED) || (status === Strophe.Status.CONNECTED)) {
+                converse.onConnected(connection)
+            }
+        });
+    }
+);</pre>
+</div>
+<p><strong>Here&#8217;s what&#8217;s happening:</strong></p>
+<p>The JSON data contains the user&#8217;s JID (jabber ID), RID and SID. The URL to the
+BOSH connection manager is already set as a configuration setting on the
+<em>converse</em> object (see ./main.js), so we can reuse it from there.</p>
+<p>A new Strophe.Connection object is instantiated and then <em>attach</em> is called with
+the user&#8217;s JID, the necessary tokens and a callback function.</p>
+<p>In the callback function, you call <em>converse.onConnected</em> together with the
+connection object.</p>
 </div>
 </div>
 </div>
 <div class="section" id="quickstart-to-get-a-demo-up-and-running">
 <h1><a class="toc-backref" href="#id8">Quickstart (to get a demo up and running)</a><a class="headerlink" href="#quickstart-to-get-a-demo-up-and-running" title="Permalink to this headline">¶</a></h1>
-<p>When you download a specific release of <em>Converse.js</em>, say for example version 0.3,
-there will be two minified files inside the zip file.</p>
-<p>For version 0.3 they will be:</p>
+<p>When you download a specific release of <em>Converse.js</em> there will be two minified files inside the zip file.</p>
 <ul class="simple">
-<li>converse.0.3.min.js</li>
-<li>converse.0.3.min.css</li>
+<li>converse.min.js</li>
+<li>converse.min.css</li>
 </ul>
-<p>You can include these two files in your website via the <em>script</em> and <em>link</em>
+<p>You can include these two files inside the <em>&lt;head&gt;</em> element of your website via the <em>script</em> and <em>link</em>
 tags:</p>
-<div class="highlight-python"><pre>&lt;link rel="stylesheet" type="text/css" media="screen" href="converse.0.3.min.css"&gt;
-&lt;script src="converse.0.3.min.js"&gt;&lt;/script&gt;</pre>
+<div class="highlight-python"><pre>&lt;link rel="stylesheet" type="text/css" media="screen" href="converse.min.css"&gt;
+&lt;script src="converse.min.js"&gt;&lt;/script&gt;</pre>
+</div>
+<p>Then, at the bottom of your page, after the closing <em>&lt;/body&gt;</em> element, put the
+following inline Javascript code:</p>
+<div class="highlight-python"><pre>&lt;script&gt;
+    converse.initialize({
+        auto_list_rooms: false,
+        auto_subscribe: false,
+        bosh_service_url: 'https://bind.opkode.im', // Please use this connection manager only for testing purposes
+        hide_muc_server: false,
+        i18n: locales.en, // Refer to ./locale/locales.js to see which locales are supported
+        prebind: false,
+        show_controlbox_by_default: true,
+        xhr_user_search: false
+    });
+&lt;/script&gt;</pre>
 </div>
 <p>The <em>index.html</em> file inside the Converse.js folder serves as a nice usable
 example of this.</p>
@@ -195,7 +242,7 @@ practical.</p>
 <p>You&#8217;ll most likely want to implement some kind of single-signon solution for
 your website, where users authenticate once in your website and then stay
 logged into their XMPP session upon page reload.</p>
-<p>For more info on this, read <a class="reference internal" href="#session-support-i-e-single-site-login">Session support (i.e. single site login)</a>.</p>
+<p>For more info on this, read: <a class="reference internal" href="#pre-binding-and-single-session-support">Pre-binding and Single Session Support</a>.</p>
 <p>You might also want to have more fine-grained control of what gets included in
 the minified Javascript file. Read <a class="reference internal" href="#configuration">Configuration</a> and <a class="reference internal" href="#minification">Minification</a> for more info on how to do
 that.</p>
@@ -207,6 +254,8 @@ you&#8217;ll want to configure <em>Converse.js</em> to suit your needs before yo
 on your website.</p>
 <p><em>Converse.js</em> is passed its configuration settings when you call its
 <em>initialize</em> method.</p>
+<p>You&#8217;ll most likely want to call the <em>initialize</em> method in your HTML page. For
+an example of how this is done, please see the bottom of the <em>./index.html</em> page.</p>
 <p>Please refer to the <a class="reference internal" href="#configuration-variables">Configuration variables</a> section below for info on
 all the available configuration settings.</p>
 <p>After you have configured <em>Converse.js</em>, you&#8217;ll have to regenerate the minified
@@ -273,8 +322,18 @@ have to write a Javascript snippet to attach to the set up connection:</p>
 <p>The backend must authenticate for you, and then return a SID (session ID) and
 RID (Request ID), which you use when you attach to the connection.</p>
 </div>
+<div class="section" id="show-controlbox-by-default">
+<h3><a class="toc-backref" href="#id18">show_controlbox_by_default</a><a class="headerlink" href="#show-controlbox-by-default" title="Permalink to this headline">¶</a></h3>
+<p>Default = False</p>
+<p>The &#8220;controlbox&#8221; refers to the special chatbox containing your contacts roster,
+status widget, chatrooms and other controls.</p>
+<p>By default this box is hidden and can be toggled by clicking on any element in
+the page with class <em>toggle-online-users</em>.</p>
+<p>If this options is set to true, the controlbox will by default be shown upon
+page load.</p>
+</div>
 <div class="section" id="xhr-user-search">
-<h3><a class="toc-backref" href="#id18">xhr_user_search</a><a class="headerlink" href="#xhr-user-search" title="Permalink to this headline">¶</a></h3>
+<h3><a class="toc-backref" href="#id19">xhr_user_search</a><a class="headerlink" href="#xhr-user-search" title="Permalink to this headline">¶</a></h3>
 <p>Default = False</p>
 <p>There are two ways to add users.</p>
 <ul class="simple">
@@ -287,9 +346,9 @@ be used.</p>
 </div>
 </div>
 <div class="section" id="minification">
-<h1><a class="toc-backref" href="#id19">Minification</a><a class="headerlink" href="#minification" title="Permalink to this headline">¶</a></h1>
+<h1><a class="toc-backref" href="#id20">Minification</a><a class="headerlink" href="#minification" title="Permalink to this headline">¶</a></h1>
 <div class="section" id="minifying-javascript">
-<h2><a class="toc-backref" href="#id20">Minifying Javascript</a><a class="headerlink" href="#minifying-javascript" title="Permalink to this headline">¶</a></h2>
+<h2><a class="toc-backref" href="#id21">Minifying Javascript</a><a class="headerlink" href="#minifying-javascript" title="Permalink to this headline">¶</a></h2>
 <p>We  use <a class="reference external" href="http://requirejs.org">require.js</a> to keep track of <em>Converse.js</em> and its dependencies and to
 to bundle them together in a single minified file fit for deployment to a
 production site.</p>
@@ -305,11 +364,84 @@ manager, NPM.</p>
 <p>You can <a class="reference external" href="http://requirejs.org/docs/optimization.html">read more about require.js&#8217;s optimizer here</a>.</p>
 </div>
 <div class="section" id="minifying-css">
-<h2><a class="toc-backref" href="#id21">Minifying CSS</a><a class="headerlink" href="#minifying-css" title="Permalink to this headline">¶</a></h2>
+<h2><a class="toc-backref" href="#id22">Minifying CSS</a><a class="headerlink" href="#minifying-css" title="Permalink to this headline">¶</a></h2>
 <p>CSS can be minimized with Yahoo&#8217;s yuicompressor tool:</p>
 <div class="highlight-python"><pre>yui-compressor --type=css converse.css -o converse.min.css</pre>
 </div>
 </div>
+</div>
+<div class="section" id="translations">
+<h1><a class="toc-backref" href="#id23">Translations</a><a class="headerlink" href="#translations" title="Permalink to this headline">¶</a></h1>
+<div class="admonition note">
+<p class="first admonition-title">Note</p>
+<p class="last">Translations take up a lot of space and will bloat your minified file.
+At the time of writing, all the translations add about 50KB of extra data to
+the minified javascript file. Therefore, make sure to only
+include those languages that you intend to support and remove from
+./locale/locales.js those which you don&#8217;t need. Remember to rebuild the
+minified file afterwards.</p>
+</div>
+<p>The gettext POT file located in ./locale/converse.pot is the template
+containing all translations and from which for each language an individual PO
+file is generated.</p>
+<p>The POT file contains all translateable strings extracted from converse.js.</p>
+<p>To make a user facing string translateable, wrap it in the double underscore helper
+function like so:</p>
+<div class="highlight-python"><div class="highlight"><pre><span class="n">__</span><span class="p">(</span><span class="s">&#39;This string will be translated at runtime&#39;</span><span class="p">);</span>
+</pre></div>
+</div>
+<p>After adding the string, you&#8217;ll need to regenerate the POT file, like so:</p>
+<div class="highlight-python"><pre>make pot</pre>
+</div>
+<p>You can then create or update the PO file for a specific language by doing the following:</p>
+<div class="highlight-python"><pre>msgmerge ./locale/af/LC_MESSAGES/converse.po ./locale/converse.pot -U</pre>
+</div>
+<p>This PO file is then what gets translated.</p>
+<p>If you&#8217;ve created a new PO file, please make sure to add the following
+attributes at the top of the file (under <em>Content-Transfer-Encoding</em>). They are
+required as configuration settings for Jed, the Javascript translations library
+that we&#8217;re using.</p>
+<div class="highlight-python"><div class="highlight"><pre><span class="s">&quot;domain: converse</span><span class="se">\n</span><span class="s">&quot;</span>
+<span class="s">&quot;lang: af</span><span class="se">\n</span><span class="s">&quot;</span>
+<span class="s">&quot;plural_forms: nplurals=2; plural=(n != 1);</span><span class="se">\n</span><span class="s">&quot;</span>
+</pre></div>
+</div>
+<p>Unfortunately Jed cannot use the PO files directly. We have to generate from it
+a file in JSON format and then put that in a .js file for the specific
+language.</p>
+<p>To generate JSON from a PO file, you&#8217;ll need po2json for node.js. Run the
+following command to install it (npm being the node.js package manager):</p>
+<div class="highlight-python"><pre>npm install po2json</pre>
+</div>
+<p>You can then convert the translations into JSON format:</p>
+<div class="highlight-python"><pre>po2json locale/af/LC_MESSAGES/converse.po locale/af/LC_MESSAGES/converse.json</pre>
+</div>
+<p>Now from converse.json paste the data as a value for the &#8220;locale_data&#8221; key in the
+object in the language&#8217;s .js file.</p>
+<p>So, if you are for example translating into German (language code &#8216;de&#8217;), you&#8217;ll
+create or update the file ./locale/LC_MESSAGES/de.js with the following code:</p>
+<div class="highlight-python"><pre>(function (root, factory) {
+    define("af", ['jed'], function () {
+        return factory(new Jed({
+            "domain": "converse",
+            "locale_data": {
+                // Paste the JSON data from converse.json here
+            }
+        })
+    }
+}(this, function (i18n) {
+    return i18n;
+}));</pre>
+</div>
+<p>making sure to also paste the JSON data as value to the &#8220;locale_data&#8221; key.</p>
+<div class="admonition note">
+<p class="first admonition-title">Note</p>
+<p class="last">If you are adding translations for a new language that is not already supported,
+you&#8217;ll have to make one more edit in ./locale/locales.js to make sure the
+language is loaded by require.js.</p>
+</div>
+<p>Congratulations, you&#8217;ve now succesfully added your translations. Sorry for all
+those hoops you had to jump through.</p>
 </div>
 
 

BIN
docs/html/objects.inv


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
docs/html/searchindex.js


+ 194 - 21
docs/source/index.rst

@@ -15,22 +15,22 @@ Introduction
 ============
 
 Even though you can connect to public XMPP servers on the `conversejs.org`_
-website, *Converse.js* is not meant to be a "Software-as-a-service" (SaaS) 
+website, *Converse.js* is not really meant to be a "Software-as-a-service" (SaaS) 
 webchat.
 
 Instead, its goal is to provide the means for website owners to add a tightly
 integrated instant messaging service to their own sites.
 
 As a website owner, you are expected to host *Converse.js* yourself, and to do some legwork to
-properly configure and integrated it into your site.
+properly configure and integrate it into your site.
 
 The benefit in doing this, is that your users have a much more streamlined and integrated
 webchat experience and that you have control over the data. The latter being a
 requirement for many sites dealing with sensitive information.
 
 You'll need to set up your own XMPP server and in order to have
-single-signon functionality, whereby users are authenticated once and stay
-logged in to XMPP upon page reload, you will also have to add some server-side
+`Session Support`_ (i.e. single-signon functionality whereby users are authenticated once and stay
+logged in to XMPP upon page reload) you will also have to add some server-side
 code.
 
 The `What you will need`_ section has more information on all these
@@ -46,9 +46,12 @@ An XMPP/Jabber server
 *Converse.js* implements `XMPP`_ as its messaging protocol, and therefore needs
 to connect to an XMPP/Jabber server (Jabber is really just a synonym for XMPP).
 
-You can either set up your own XMPP server, or use a public one. You can find a
-list of public XMPP servers/providers on `xmpp.net`_ and a list of servers that
-you can set up yourself on `xmpp.org`_.
+You can connect to public XMPP servers like ``jabber.org`` but if you want to
+have `Session Support`_ you'll have to set up your own XMPP server.
+
+You can find a list of public XMPP servers/providers on `xmpp.net`_ and a list of
+servers that you can set up yourself on `xmpp.org`_.
+
 
 Connection Manager
 ==================
@@ -96,8 +99,10 @@ website. This will remove the need for any cross-domain XHR support.
 Server-side authentication
 ==========================
 
-Session support (i.e. single site login)
-----------------------------------------
+.. _`Session Support`:
+
+Pre-binding and Single Session Support
+--------------------------------------
 
 It's possible to enable single-site login, whereby users already
 authenticated in your website will also automatically be logged in on the chat server,
@@ -105,26 +110,81 @@ but this will require custom code on your server.
 
 Jack Moffitt has a great `blogpost`_ about this and even provides an `example Django application`_ to demonstrate it.
 
+.. Note::
+   If you want to enable single session support, make sure to pass **prebind: true**
+   when you call **converse.initialize** (see ./index.html).
+
+When you authenticate to the XMPP server on your backend, you'll receive two
+tokens, RID (request ID) and SID (session ID).
+
+These tokens then need to be passed back to the javascript running in your
+browser, where you will need them attach to the existing session.
+
+You can embed the RID and SID tokens in your HTML markup or you can do an
+XMLHttpRequest call to you server and ask it to return them for you.
+
+Below is one example of how this could work. An Ajax call is made to the
+relative URL **/prebind** and it expects to receive JSON data back.
+
+:: 
+
+    $.getJSON('/prebind', function (data) {
+            var connection = new Strophe.Connection(converse.bosh_service_url);
+            connection.attach(data.jid, data.sid, data.rid, function (status) {
+                if ((status === Strophe.Status.ATTACHED) || (status === Strophe.Status.CONNECTED)) {
+                    converse.onConnected(connection)
+                } 
+            });
+        }
+    );
+
+**Here's what's happening:**
+
+The JSON data contains the user's JID (jabber ID), RID and SID. The URL to the
+BOSH connection manager is already set as a configuration setting on the
+*converse* object (see ./main.js), so we can reuse it from there.
+
+A new Strophe.Connection object is instantiated and then *attach* is called with
+the user's JID, the necessary tokens and a callback function.
+
+In the callback function, you call *converse.onConnected* together with the
+connection object.
+
 
 =========================================
 Quickstart (to get a demo up and running)
 =========================================
 
-When you download a specific release of *Converse.js*, say for example version 0.3,
-there will be two minified files inside the zip file.
+When you download a specific release of *Converse.js* there will be two minified files inside the zip file.
 
-For version 0.3 they will be:
+* converse.min.js
+* converse.min.css
 
-* converse.0.3.min.js
-* converse.0.3.min.css
-
-You can include these two files in your website via the *script* and *link*
+You can include these two files inside the *<head>* element of your website via the *script* and *link*
 tags:
 
 ::
 
-    <link rel="stylesheet" type="text/css" media="screen" href="converse.0.3.min.css">
-    <script src="converse.0.3.min.js"></script>
+    <link rel="stylesheet" type="text/css" media="screen" href="converse.min.css">
+    <script src="converse.min.js"></script>
+
+Then, at the bottom of your page, after the closing *</body>* element, put the
+following inline Javascript code:
+
+::
+
+    <script>
+        converse.initialize({
+            auto_list_rooms: false,
+            auto_subscribe: false,
+            bosh_service_url: 'https://bind.opkode.im', // Please use this connection manager only for testing purposes
+            hide_muc_server: false,
+            i18n: locales.en, // Refer to ./locale/locales.js to see which locales are supported
+            prebind: false,
+            show_controlbox_by_default: true,
+            xhr_user_search: false
+        });
+    </script>
 
 The *index.html* file inside the Converse.js folder serves as a nice usable
 example of this.
@@ -137,7 +197,7 @@ You'll most likely want to implement some kind of single-signon solution for
 your website, where users authenticate once in your website and then stay
 logged into their XMPP session upon page reload.
 
-For more info on this, read `Session support (i.e. single site login)`_.
+For more info on this, read: `Pre-binding and Single Session Support`_.
 
 You might also want to have more fine-grained control of what gets included in
 the minified Javascript file. Read `Configuration`_ and `Minification`_ for more info on how to do
@@ -155,6 +215,9 @@ on your website.
 *Converse.js* is passed its configuration settings when you call its
 *initialize* method.
 
+You'll most likely want to call the *initialize* method in your HTML page. For
+an example of how this is done, please see the bottom of the *./index.html* page.
+
 Please refer to the `Configuration variables`_ section below for info on
 all the available configuration settings.
 
@@ -243,6 +306,20 @@ have to write a Javascript snippet to attach to the set up connection::
 The backend must authenticate for you, and then return a SID (session ID) and
 RID (Request ID), which you use when you attach to the connection.
 
+show_controlbox_by_default
+--------------------------
+
+Default = False
+
+The "controlbox" refers to the special chatbox containing your contacts roster,
+status widget, chatrooms and other controls.
+
+By default this box is hidden and can be toggled by clicking on any element in
+the page with class *toggle-online-users*.
+
+If this options is set to true, the controlbox will by default be shown upon
+page load.
+
 
 xhr_user_search
 ---------------
@@ -257,8 +334,6 @@ There are two ways to add users.
 This setting enables the second mechanism, otherwise by default the first will
 be used.
 
-
-
 ============
 Minification
 ============
@@ -299,6 +374,104 @@ CSS can be minimized with Yahoo's yuicompressor tool:
     yui-compressor --type=css converse.css -o converse.min.css
 
 
+============
+Translations
+============
+
+.. Note :: 
+   Translations take up a lot of space and will bloat your minified file.
+   At the time of writing, all the translations add about 50KB of extra data to
+   the minified javascript file. Therefore, make sure to only
+   include those languages that you intend to support and remove from
+   ./locale/locales.js those which you don't need. Remember to rebuild the
+   minified file afterwards.
+
+The gettext POT file located in ./locale/converse.pot is the template
+containing all translations and from which for each language an individual PO
+file is generated.
+
+The POT file contains all translateable strings extracted from converse.js.
+
+To make a user facing string translateable, wrap it in the double underscore helper
+function like so:
+
+::
+
+    __('This string will be translated at runtime');
+
+After adding the string, you'll need to regenerate the POT file, like so:
+
+::
+
+    make pot
+
+You can then create or update the PO file for a specific language by doing the following:
+
+::
+
+    msgmerge ./locale/af/LC_MESSAGES/converse.po ./locale/converse.pot -U
+
+This PO file is then what gets translated.
+
+If you've created a new PO file, please make sure to add the following
+attributes at the top of the file (under *Content-Transfer-Encoding*). They are
+required as configuration settings for Jed, the Javascript translations library
+that we're using.
+
+::
+
+    "domain: converse\n"
+    "lang: af\n"
+    "plural_forms: nplurals=2; plural=(n != 1);\n"
+    
+
+Unfortunately Jed cannot use the PO files directly. We have to generate from it 
+a file in JSON format and then put that in a .js file for the specific
+language.
+
+To generate JSON from a PO file, you'll need po2json for node.js. Run the
+following command to install it (npm being the node.js package manager):
+
+::
+
+    npm install po2json
+    
+You can then convert the translations into JSON format:
+
+::
+
+    po2json locale/af/LC_MESSAGES/converse.po locale/af/LC_MESSAGES/converse.json
+
+Now from converse.json paste the data as a value for the "locale_data" key in the
+object in the language's .js file.
+
+So, if you are for example translating into German (language code 'de'), you'll
+create or update the file ./locale/LC_MESSAGES/de.js with the following code:
+
+::
+
+    (function (root, factory) {
+        define("af", ['jed'], function () {
+            return factory(new Jed({
+                "domain": "converse",
+                "locale_data": {
+                    // Paste the JSON data from converse.json here
+                }
+            })
+        }
+    }(this, function (i18n) { 
+        return i18n; 
+    }));
+
+making sure to also paste the JSON data as value to the "locale_data" key.
+
+.. Note :: 
+    If you are adding translations for a new language that is not already supported,
+    you'll have to make one more edit in ./locale/locales.js to make sure the
+    language is loaded by require.js.
+
+Congratulations, you've now succesfully added your translations. Sorry for all
+those hoops you had to jump through.
 
 
 .. _`conversejs.org`: http://conversejs.org

+ 47 - 31
index.html

@@ -5,9 +5,9 @@
     <meta http-equiv="X-UA-Compatible" content="chrome=1" />
     <meta name="description" content="Converse.js: Open Source Browser-Based Instant Messaging" />
     <link rel="stylesheet" type="text/css" media="screen" href="stylesheets/stylesheet.css">
-    <link rel="stylesheet" type="text/css" media="screen" href="converse.0.3.min.css">
-    <script src="converse.0.3.min.js"></script>
-    <!-- For development <script data-main="main" src="Libraries/require-jquery.js"></script> -->
+    <link rel="stylesheet" type="text/css" media="screen" href="converse.css">
+    <!-- <script src="converse.min.js"></script> -->
+    <script data-main="main" src="Libraries/require-jquery.js"></script>
     <title>Converse.js</title>
 </head>
 
@@ -17,10 +17,10 @@
     <header class="inner">
         <a id="forkme_banner" href="https://github.com/jcbrand/converse.js">View on GitHub</a>
         <h1 id="project_title"><a href="http://conversejs.org">Converse.js</a></h1>
-        <h2 id="project_tagline">Browser-based Instant Messaging with Strophe.js and Backbone.js</h2>
+        <h2 id="project_tagline">An XMPP chat client for your website</h2>
         <section id="downloads">
-            <a class="zip_download_link" href="https://github.com/jcbrand/converse.js/archive/v0.3.zip">Download the latest release as a .zip file</a>
-            <a class="tar_download_link" href="https://github.com/jcbrand/converse.js/archive/v0.3.tar.gz">Download the latest release as a tar.gz file</a>
+            <a class="zip_download_link" href="https://github.com/jcbrand/converse.js/archive/v0.4.zip">Download the latest release as a .zip file</a>
+            <a class="tar_download_link" href="https://github.com/jcbrand/converse.js/archive/v0.4.tar.gz">Download the latest release as a tar.gz file</a>
         </section>
     </header>
     </div>
@@ -28,25 +28,27 @@
     <!-- MAIN CONTENT -->
     <div id="main_content_wrap" class="outer">
     <section id="main_content" class="inner">
-    <p><strong>Converse.js</strong> is an open source, web based, <a href="http://xmpp.org" target="_blank">XMPP/Jabber</a> chat client, similar to 
-    <a href="https://www.facebook.com/sitetour/chat.php" target="_blank">Facebook chat</a>, but with added support for multi-user chatrooms.</p>
 
-    <p>It is a Javascript application that you can include in your
-    website, thereby providing it with instant messaging functionality.</p>
+    <p><strong>Converse.js</strong> is an open source, webchat client, that
+    runs in the browser and can be integrated into any website.</p>
 
-    <p>You will also need access to an XMPP/Jabber server. You can connect to any public, federated XMPP server, or you can set one up
-    yourself, thereby maintaining stricter privacy controls.</p>
+    <p>It's similar to <a href="https://www.facebook.com/sitetour/chat.php" target="_blank">Facebook chat</a>, but also supports multi-user chatrooms.</p>
 
-    <p>It's possible to enable single-site login, whereby users already
-    authenticated in your website will also automatically be logged in on the chat server, but this will require custom code on your server.</p>
+    <p><em>Converse.js</em> can connect to any accessible <a href="http://xmpp.org" target="_blank">XMPP/Jabber</a> server, either from a public provider such as
+    <a href="http://jabber.org">jabber.org</a>, or to one you have set up
+    yourself.</a>
+
+    <p>It's possible to enable single-site login, whereby users already authenticated in your website will also automatically be logged in on the chat server,
+    but you will have to pre-authenticate them on your server. You can refer to the <a href="/docs/html/index.html">documentation</a> for more
+    info.</p>
 
     <p>An <a href="http://github.com/collective/collective.xmpp.chat" target="_blank">add-on product</a> that does exactly this,
     already exists for the <a href="http://plone.org" target="_blank">Plone</a> CMS. Hopefully in the future more such add-ons will
     be created for other platforms.
    </p>
 
-    <p>If you have integrated Converse.js into any other CMS or framework,
-    <a href="http://opkode.com/contact" target="_blank">please let me know</a> and I'll mention it on this page.</p>
+    <p>If you have integrated <em>Converse.js</em> into any other CMS or framework,
+    <a href="http://opkode.com/contact.html" target="_blank">please let me know</a> and I'll mention it on this page.</p>
 
     <h2>Features</h2>
     <ul>
@@ -62,6 +64,7 @@
         <li>Custom status messages</li>
         <li>Typing notifications</li>
         <li>Third person messages (/me )</li>
+        <li>i18n aware</li>
     </ul>
 
     <h2>Screencasts</h2>
@@ -75,27 +78,20 @@
     </ul>
 
     <h2>Demo</h2>
-    <p><a href="#" class="chat toggle-online-users">Click this link</a> or click the link on the bottom right corner of this page.</a></p>
-    <p>You can log in with any existing federated Jabber/XMPP account, or create a new one at any of these providers:
-        <ul>
-            <li><a href="http://jabber.org" target="_blank">jabber.org</a></li>
-            <li><a href="https://jappix.com" target="_blank">jappix.com</a></li>
-        </ul>
-        There is also a list of public XMPP providers on <a href="xmpp.net" target="_blank">xmpp.net</a>.
-   </p>
-    <p><b>Note:</b> currently the demo doesn't work in Internet Explorer older
+    <p>You can log in with any existing XMPP account. There is also a list of public XMPP providers on <a href="http://xmpp.net" target="_blank">xmpp.net</a>.</p>
+    <p><em><strong>Note:</strong> currently the demo doesn't work in Internet Explorer older
     than 10. This is due to lacking support for <a href="https://en.wikipedia.org/wiki/Cross-origin_resource_sharing">CORS</a>,
     a standard which enables cross-domain XmlHttpRequests. There are ways
     around this, but it hasn't been a priority for me to implement them for
     this demo.
    </p>
-
    <p>
-    See <a href="/docs/html/index.html#overcoming-cross-domain-request-restrictions" target="_blank">here</a> for more information.
+        See <a href="/docs/html/index.html#overcoming-cross-domain-request-restrictions" target="_blank">here</a> for more information.
     </p>
+    </em>
 
     <h3>Is it secure?</h3>
-    <p>Yes. In this demo <strong>Converse.js</strong> makes an
+    <p>Yes. In this demo <em>Converse.js</em> makes an
     <a href="https://en.wikipedia.org/wiki/Secure_Sockets_Layer" target="_blank">SSL</a> encrypted connection to a secure connection manager. 
     The connection manager then uses SSL and <a href="https://en.wikipedia.org/wiki/Transport_Layer_Security">TLS</a> to connect to an XMPP server.</p>
     That said, the developers don't assume any liability for any loss or damages as a result of using this software or demo. Use this demo at your own risk. 
@@ -107,7 +103,7 @@
         establish an authenticated connection on the server side and then attach to
         this connection in your browser.
    </p>
-    <p><strong>Converse.js</strong> already supports this usecase, but you'll have to do more manual work yourself.</p>
+    <p><em>Converse.js</em> already supports this usecase, but you'll have to do some integration work yourself.</p>
 
 
     <h2>Documentation</h2>
@@ -126,9 +122,10 @@
     <h2>Credits and Dependencies</h2>
     <p><strong>Converse.js</strong> depends on a few third party libraries, including: 
     <ul>
+        <li><a href="http://jquery.com" target="_blank">JQuery</a></li>
         <li><a href="http://strophe.im/strophejs" target="_blank">strophe.js</a></li>
         <li><a href="http://backbonejs.org" target="_blank">backbone.js</a></li>
-        <li><a href="http://requirejs.org" target="_blank">require.js</a></li>
+        <li><a href="http://requirejs.org" target="_blank">require.js</a> (optional dependency)</li>
     </ul>
     </p>
     <p>Some images were taken from <a href="http://plone.org" target="_blank">Plone</a> and the
@@ -137,7 +134,12 @@
     <h2>Licence</h2>
     <p><strong>Converse.js</strong> is released under both the <a href="http://opensource.org/licenses/mit-license.php" target="_blank">MIT</a> 
     and <a href="http://opensource.org/licenses/GPL-2.0" target="_blank">GPL</a> licenses.</p>
+
+    <h2>Contact</h2>
+    <p>My XMPP username is <strong>jc@opkode.im</strong>.</p>
+    <p>You can send me an email via this <a href="http://opkode.com/contact" target="_blank">contact form</a>.</p>
 </section>
+
 </div>
 
 <!-- FOOTER  -->
@@ -151,7 +153,7 @@
     <div id="collective-xmpp-chat-data"></div>
     <div id="toggle-controlbox">
         <a href="#" class="chat toggle-online-users">
-            <strong class="conn-feedback">Click here to chat</strong> <strong style="display: none" id="online-count">(0)</strong>
+            <strong class="conn-feedback">Toggle chat</strong> <strong style="display: none" id="online-count">(0)</strong>
         </a>
     </div>
 </div>
@@ -162,4 +164,18 @@
 </script>
 <script type="text/javascript">try { var pageTracker = _gat._getTracker("UA-2128260-8"); pageTracker._trackPageview(); } catch(err) {}</script>
 </body>
+<script>
+    require(["jquery", "converse"], function ($, converse) {
+        converse.initialize({
+            auto_list_rooms: false,
+            auto_subscribe: false,
+            bosh_service_url: 'https://bind.opkode.im', // Please use this connection manager only for testing purposes
+            hide_muc_server: false,
+            i18n: locales.en, // Refer to ./locale/locales.js to see which locales are supported
+            prebind: false,
+            show_controlbox_by_default: true,
+            xhr_user_search: false
+        });
+    });
+</script>
 </html>

+ 459 - 0
locale/af/LC_MESSAGES/af.js

@@ -0,0 +1,459 @@
+(function (root, factory) {
+    define("af", ['jed'], function () {
+        var af = new Jed({
+            "domain": "converse",
+            "locale_data": {
+                "converse": {
+                    "": {
+                        "domain": "converse",
+                        "lang": "af",
+                        "plural_forms": "nplurals=2; plural=(n != 1);"
+                    },
+                    "Show this menu": [
+                        null,
+                        "Vertoon hierdie keuselys"
+                    ],
+                    "Write in the third person": [
+                        null,
+                        "Skryf in die derde persoon"
+                    ],
+                    "Remove messages": [
+                        null,
+                        "Verwyder boodskappe"
+                    ],
+                    "Personal message": [
+                        null,
+                        "Persoonlike boodskap"
+                    ],
+                    "Contacts": [
+                        null,
+                        "Kontakte"
+                    ],
+                    "Online": [
+                        null,
+                        "Aanlyn"
+                    ],
+                    "Busy": [
+                        null,
+                        "Besig"
+                    ],
+                    "Away": [
+                        null,
+                        "Weg"
+                    ],
+                    "Offline": [
+                        null,
+                        "Aflyn"
+                    ],
+                    "Click to add new chat contacts": [
+                        null,
+                        "Kliek om nuwe kletskontakte by te voeg"
+                    ],
+                    "Add a contact": [
+                        null,
+                        "Voeg 'n kontak by"
+                    ],
+                    "Contact username": [
+                        null,
+                        "Konak gebruikersnaam"
+                    ],
+                    "Add": [
+                        null,
+                        "Voeg by"
+                    ],
+                    "Contact name": [
+                        null,
+                        "Kontaknaam"
+                    ],
+                    "Search": [
+                        null,
+                        "Soek"
+                    ],
+                    "No users found": [
+                        null,
+                        "Geen gebruikers gevind"
+                    ],
+                    "Click to add as a chat contact": [
+                        null,
+                        "Kliek om as kletskontak by te voeg"
+                    ],
+                    "Click to open this room": [
+                        null,
+                        "Kliek om hierdie kletskamer te open"
+                    ],
+                    "Show more information on this room": [
+                        null,
+                        "Wys meer inligting aangaande hierdie kletskamer"
+                    ],
+                    "Description:": [
+                        null,
+                        "Beskrywing:"
+                    ],
+                    "Occupants:": [
+                        null,
+                        "Deelnemers:"
+                    ],
+                    "Features:": [
+                        null,
+                        "Eienskappe:"
+                    ],
+                    "Requires authentication": [
+                        null,
+                        "Benodig magtiging"
+                    ],
+                    "Hidden": [
+                        null,
+                        "Verskuil"
+                    ],
+                    "Requires an invitation": [
+                        null,
+                        "Benodig 'n uitnodiging"
+                    ],
+                    "Moderated": [
+                        null,
+                        "Gemodereer"
+                    ],
+                    "Non-anonymous": [
+                        null,
+                        "Nie-anoniem"
+                    ],
+                    "Open room": [
+                        null,
+                        "Oop kletskamer"
+                    ],
+                    "Permanent room": [
+                        null,
+                        "Permanente kamer"
+                    ],
+                    "Public": [
+                        null,
+                        "Publiek"
+                    ],
+                    "Semi-anonymous": [
+                        null,
+                        "Deels anoniem"
+                    ],
+                    "Temporary room": [
+                        null,
+                        "Tydelike kamer"
+                    ],
+                    "Unmoderated": [
+                        null,
+                        "Ongemodereer"
+                    ],
+                    "Rooms": [
+                        null,
+                        "Kamers"
+                    ],
+                    "Room name": [
+                        null,
+                        "Kamer naam"
+                    ],
+                    "Nickname": [
+                        null,
+                        "Bynaam"
+                    ],
+                    "Server": [
+                        null,
+                        "Bediener"
+                    ],
+                    "Join": [
+                        null,
+                        "Sluit aan"
+                    ],
+                    "Show rooms": [
+                        null,
+                        "Wys kamers"
+                    ],
+                    "No rooms on %1$s": [
+                        null,
+                        "Geen kamers op %1$s"
+                    ],
+                    "Rooms on %1$s": [
+                        null,
+                        "Kamers op %1$s"
+                    ],
+                    "Set chatroom topic": [
+                        null,
+                        "Stel kletskamer onderwerp"
+                    ],
+                    "Kick user from chatroom": [
+                        null,
+                        "Skop gebruiker uit die kletskamer"
+                    ],
+                    "Ban user from chatroom": [
+                        null,
+                        "Verban gebruiker vanuit die kletskamer"
+                    ],
+                    "Message": [
+                        null,
+                        "Boodskap"
+                    ],
+                    "Save": [
+                        null,
+                        "Stoor"
+                    ],
+                    "Cancel": [
+                        null,
+                        "Kanseleer"
+                    ],
+                    "An error occurred while trying to save the form.": [
+                        null,
+                        "A fout het voorgekom terwyl probeer is om die vorm te stoor."
+                    ],
+                    "This chatroom requires a password": [
+                        null,
+                        "Hiedie kletskamer benodig 'n wagwoord"
+                    ],
+                    "Password: ": [
+                        null,
+                        "Wagwoord:"
+                    ],
+                    "Submit": [
+                        null,
+                        "Dien in"
+                    ],
+                    "This room is not anonymous": [
+                        null,
+                        "Hierdie vertrek is nie anoniem nie"
+                    ],
+                    "This room now shows unavailable members": [
+                        null,
+                        "Hierdie vertrek wys nou onbeskikbare lede"
+                    ],
+                    "This room does not show unavailable members": [
+                        null,
+                        "Hierdie vertrek wys nie onbeskikbare lede nie"
+                    ],
+                    "Non-privacy-related room configuration has changed": [
+                        null,
+                        "Nie-privaatheidverwante kamer instellings het verander"
+                    ],
+                    "Room logging is now enabled": [
+                        null,
+                        "Kamer log is nou aangeskakel"
+                    ],
+                    "Room logging is now disabled": [
+                        null,
+                        "Kamer log is nou afgeskakel"
+                    ],
+                    "This room is now non-anonymous": [
+                        null,
+                        "Hiedie kamer is nou nie anoniem nie"
+                    ],
+                    "This room is now semi-anonymous": [
+                        null,
+                        "Hierdie kamer is nou gedeeltelik anoniem"
+                    ],
+                    "This room is now fully-anonymous": [
+                        null,
+                        "Hierdie kamer is nou ten volle anoniem"
+                    ],
+                    "A new room has been created": [
+                        null,
+                        "'n Nuwe kamer is geskep"
+                    ],
+                    "Your nickname has been changed": [
+                        null,
+                        "Jou bynaam is verander"
+                    ],
+                    "<strong>%1$s</strong> has been banned": [
+                        null,
+                        "<strong>%1$s</strong> is verban"
+                    ],
+                    "<strong>%1$s</strong> has been kicked out": [
+                        null,
+                        "<strong>%1$s</strong> is uitgeskop"
+                    ],
+                    "<strong>%1$s</strong> has been removed because of an affiliation change": [
+                        null,
+                        "<strong>%1$s</strong> is verwyder a.g.v 'n verandering van affiliasie"
+                    ],
+                    "<strong>%1$s</strong> has been removed for not being a member": [
+                        null,
+                        "<strong>%1$s</strong> is nie 'n lid nie, en dus verwyder"
+                    ],
+                    "You have been banned from this room": [
+                        null,
+                        "Jy is uit die kamer verban"
+                    ],
+                    "You have been kicked from this room": [
+                        null,
+                        "Jy is uit die kamer geskop"
+                    ],
+                    "You have been removed from this room because of an affiliation change": [
+                        null,
+                        "Jy is vanuit die kamer verwyder a.g.v 'n verandering van affiliasie"
+                    ],
+                    "You have been removed from this room because the room has changed to members-only and you're not a member": [
+                        null,
+                        "Jy is vanuit die kamer verwyder omdat die kamer nou slegs tot lede beperk word en jy nie 'n lid is nie."
+                    ],
+                    "You have been removed from this room because the MUC (Multi-user chat) service is being shut down.": [
+                        null,
+                        "Jy is van hierdie kamer verwyder aangesien die MUC (Multi-user chat) diens nou afgeskakel word."
+                    ],
+                    "You are not on the member list of this room": [
+                        null,
+                        "Jy is nie op die ledelys van hierdie kamer nie"
+                    ],
+                    "No nickname was specified": [
+                        null,
+                        "Geen bynaam verskaf nie"
+                    ],
+                    "You are not allowed to create new rooms": [
+                        null,
+                        "Jy word nie toegelaat om nog kamers te skep nie"
+                    ],
+                    "Your nickname doesn't conform to this room's policies": [
+                        null,
+                        "Jou bynaam voldoen nie aan die kamer se beleid nie"
+                    ],
+                    "Your nickname is already taken": [
+                        null,
+                        "Jou bynaam is reeds geneem"
+                    ],
+                    "This room does not (yet) exist": [
+                        null,
+                        "Hierdie kamer bestaan tans (nog) nie"
+                    ],
+                    "This room has reached it's maximum number of occupants": [
+                        null,
+                        "Hierdie kamer het sy maksimum aantal deelnemers bereik"
+                    ],
+                    "Topic set by %1$s to: %2$s": [
+                        null,
+                        "Onderwerp deur %1$s bygewerk na: %2$s"
+                    ],
+                    "This user is a moderator": [
+                        null,
+                        "Hierdie gebruiker is 'n moderator"
+                    ],
+                    "This user can send messages in this room": [
+                        null,
+                        "Hierdie gebruiker kan boodskappe na die kamer stuur"
+                    ],
+                    "This user can NOT send messages in this room": [
+                        null,
+                        "Hierdie gebruiker kan NIE boodskappe na die kamer stuur nie"
+                    ],
+                    "Click to chat with this contact": [
+                        null,
+                        "Kliek om met hierdie kontak te klets"
+                    ],
+                    "Click to remove this contact": [
+                        null,
+                        "Kliek om hierdie kontak te verwyder"
+                    ],
+                    "Contact requests": [
+                        null,
+                        "Kontak versoeke"
+                    ],
+                    "My contacts": [
+                        null,
+                        "My kontakte"
+                    ],
+                    "Pending contacts": [
+                        null,
+                        "Hangende kontakte"
+                    ],
+                    "Custom status": [
+                        null,
+                        "Doelgemaakte status"
+                    ],
+                    "Click to change your chat status": [
+                        null,
+                        "Kliek om jou klets-status te verander"
+                    ],
+                    "Click here to write a custom status message": [
+                        null,
+                        "Kliek hier om jou eie statusboodskap te skryf"
+                    ],
+                    "online": [
+                        null,
+                        "aanlyn"
+                    ],
+                    "busy": [
+                        null,
+                        "besig"
+                    ],
+                    "away for long": [
+                        null,
+                        "weg vir lank"
+                    ],
+                    "away": [
+                        null,
+                        "weg"
+                    ],
+                    "I am %1$s": [
+                        null,
+                        "Ek is %1$s"
+                    ],
+                    "Sign in": [
+                        null,
+                        "Teken in"
+                    ],
+                    "XMPP/Jabber Username:": [
+                        null,
+                        "XMPP/Jabber Gebruikersnaam:"
+                    ],
+                    "Password:": [
+                        null,
+                        "Wagwoord"
+                    ],
+                    "Log In": [
+                        null,
+                        "Meld aan"
+                    ],
+                    "BOSH Service URL:": [
+                        null,
+                        "BOSH bediener URL"
+                    ],
+                    "Connected": [
+                        null,
+                        "Verbind"
+                    ],
+                    "Disconnected": [
+                        null,
+                        "Ontkoppel"
+                    ],
+                    "Error": [
+                        null,
+                        "Fout"
+                    ],
+                    "Connecting": [
+                        null,
+                        "Verbind tans"
+                    ],
+                    "Connection Failed": [
+                        null,
+                        "Verbinding het gefaal"
+                    ],
+                    "Authenticating": [
+                        null,
+                        "Besig om te bekragtig"
+                    ],
+                    "Authentication Failed": [
+                        null,
+                        "Bekragtiging het gefaal"
+                    ],
+                    "Disconnecting": [
+                        null,
+                        "Besig om te ontkoppel"
+                    ],
+                    "Attached": [
+                        null,
+                        "Geheg"
+                    ],
+                    "Online Contacts": [
+                        null,
+                        "Kontakte aanlyn"
+                    ]
+                }
+            }
+        });
+        return factory(af);
+    });
+}(this, function (af) { 
+    return af; 
+}));

+ 459 - 0
locale/af/LC_MESSAGES/converse.json

@@ -0,0 +1,459 @@
+{
+   "converse": {
+      "": {
+         "Project-Id-Version": "Converse.js 0.4",
+         "Report-Msgid-Bugs-To": "",
+         "POT-Creation-Date": "2013-06-01 23:02+0200",
+         "PO-Revision-Date": "2013-06-02 13:26+0200",
+         "Last-Translator": "JC Brand <jc@opkode.com>",
+         "Language-Team": "Afrikaans",
+         "Language": "af",
+         "MIME-Version": "1.0",
+         "Content-Type": "text/plain; charset=ASCII",
+         "Content-Transfer-Encoding": "8bit",
+         "domain": "converse",
+         "lang": "af",
+         "plural_forms": "nplurals=2; plural=(n != 1);"
+      },
+      "Show this menu": [
+         null,
+         "Vertoon hierdie keuselys"
+      ],
+      "Write in the third person": [
+         null,
+         "Skryf in die derde persoon"
+      ],
+      "Remove messages": [
+         null,
+         "Verwyder boodskappe"
+      ],
+      "Personal message": [
+         null,
+         "Persoonlike boodskap"
+      ],
+      "Contacts": [
+         null,
+         "Kontakte"
+      ],
+      "Online": [
+         null,
+         "Aangemeld"
+      ],
+      "Busy": [
+         null,
+         "Besig"
+      ],
+      "Away": [
+         null,
+         "Afwesig"
+      ],
+      "Offline": [
+         null,
+         "Afgemeld"
+      ],
+      "Click to add new chat contacts": [
+         null,
+         "Kliek om nuwe kletskontakte by te voeg"
+      ],
+      "Add a contact": [
+         null,
+         "Voeg 'n kontak by"
+      ],
+      "Contact username": [
+         null,
+         "Konak gebruikersnaam"
+      ],
+      "Add": [
+         null,
+         "Voeg by"
+      ],
+      "Contact name": [
+         null,
+         "Kontaknaam"
+      ],
+      "Search": [
+         null,
+         "Soek"
+      ],
+      "No users found": [
+         null,
+         "Geen gebruikers gevind"
+      ],
+      "Click to add as a chat contact": [
+         null,
+         "Kliek om as kletskontak by te voeg"
+      ],
+      "Click to open this room": [
+         null,
+         "Kliek om hierdie kletskamer te open"
+      ],
+      "Show more information on this room": [
+         null,
+         "Wys meer inligting aangaande hierdie kletskamer"
+      ],
+      "Description:": [
+         null,
+         "Beskrywing:"
+      ],
+      "Occupants:": [
+         null,
+         "Deelnemers:"
+      ],
+      "Features:": [
+         null,
+         "Eienskappe:"
+      ],
+      "Requires authentication": [
+         null,
+         "Benodig magtiging"
+      ],
+      "Hidden": [
+         null,
+         "Verskuil"
+      ],
+      "Requires an invitation": [
+         null,
+         "Benodig 'n uitnodiging"
+      ],
+      "Moderated": [
+         null,
+         "Gemodereer"
+      ],
+      "Non-anonymous": [
+         null,
+         "Nie-anoniem"
+      ],
+      "Open room": [
+         null,
+         "Oop kletskamer"
+      ],
+      "Permanent room": [
+         null,
+         "Permanente kamer"
+      ],
+      "Public": [
+         null,
+         "Publiek"
+      ],
+      "Semi-anonymous": [
+         null,
+         "Deels anoniem"
+      ],
+      "Temporary room": [
+         null,
+         "Tydelike kamer"
+      ],
+      "Unmoderated": [
+         null,
+         "Ongemodereer"
+      ],
+      "Rooms": [
+         null,
+         "Kamers"
+      ],
+      "Room name": [
+         null,
+         "Kamer naam"
+      ],
+      "Nickname": [
+         null,
+         "Bynaam"
+      ],
+      "Server": [
+         null,
+         "Bediener"
+      ],
+      "Join": [
+         null,
+         "Sluit aan"
+      ],
+      "Show rooms": [
+         null,
+         "Wys kamers"
+      ],
+      "No rooms on %1$s": [
+         null,
+         "Geen kamers op %1$s"
+      ],
+      "Rooms on %1$s": [
+         null,
+         "Kamers op %1$s"
+      ],
+      "Set chatroom topic": [
+         null,
+         "Stel kletskamer onderwerp"
+      ],
+      "Kick user from chatroom": [
+         null,
+         "Skop gebruiker uit die kletskamer"
+      ],
+      "Ban user from chatroom": [
+         null,
+         "Verban gebruiker vanuit die kletskamer"
+      ],
+      "Message": [
+         null,
+         "Boodskap"
+      ],
+      "Save": [
+         null,
+         "Stoor"
+      ],
+      "Cancel": [
+         null,
+         "Kanseleer"
+      ],
+      "An error occurred while trying to save the form.": [
+         null,
+         "A fout het voorgekom terwyl probeer is om die vorm te stoor."
+      ],
+      "This chatroom requires a password": [
+         null,
+         "Hiedie kletskamer benodig 'n wagwoord"
+      ],
+      "Password: ": [
+         null,
+         "Wagwoord:"
+      ],
+      "Submit": [
+         null,
+         "Dien in"
+      ],
+      "This room is not anonymous": [
+         null,
+         "Hierdie vertrek is nie anoniem nie"
+      ],
+      "This room now shows unavailable members": [
+         null,
+         "Hierdie vertrek wys nou onbeskikbare lede"
+      ],
+      "This room does not show unavailable members": [
+         null,
+         "Hierdie vertrek wys nie onbeskikbare lede nie"
+      ],
+      "Non-privacy-related room configuration has changed": [
+         null,
+         "Nie-privaatheidverwante kamer instellings het verander"
+      ],
+      "Room logging is now enabled": [
+         null,
+         "Kamer log is nou aangeskakel"
+      ],
+      "Room logging is now disabled": [
+         null,
+         "Kamer log is nou afgeskakel"
+      ],
+      "This room is now non-anonymous": [
+         null,
+         "Hiedie kamer is nou nie anoniem nie"
+      ],
+      "This room is now semi-anonymous": [
+         null,
+         "Hierdie kamer is nou gedeeltelik anoniem"
+      ],
+      "This room is now fully-anonymous": [
+         null,
+         "Hierdie kamer is nou ten volle anoniem"
+      ],
+      "A new room has been created": [
+         null,
+         "'n Nuwe kamer is geskep"
+      ],
+      "Your nickname has been changed": [
+         null,
+         "Jou bynaam is verander"
+      ],
+      "<strong>%1$s</strong> has been banned": [
+         null,
+         "<strong>%1$s</strong> is verban"
+      ],
+      "<strong>%1$s</strong> has been kicked out": [
+         null,
+         "<strong>%1$s</strong> is uitgeskop"
+      ],
+      "<strong>%1$s</strong> has been removed because of an affiliation change": [
+         null,
+         "<strong>%1$s</strong> is verwyder a.g.v 'n verandering van affiliasie"
+      ],
+      "<strong>%1$s</strong> has been removed for not being a member": [
+         null,
+         "<strong>%1$s</strong> is nie 'n lid nie, en dus verwyder"
+      ],
+      "You have been banned from this room": [
+         null,
+         "Jy is uit die kamer verban"
+      ],
+      "You have been kicked from this room": [
+         null,
+         "Jy is uit die kamer geskop"
+      ],
+      "You have been removed from this room because of an affiliation change": [
+         null,
+         "Jy is vanuit die kamer verwyder a.g.v 'n verandering van affiliasie"
+      ],
+      "You have been removed from this room because the room has changed to members-only and you're not a member": [
+         null,
+         "Jy is vanuit die kamer verwyder omdat die kamer nou slegs tot lede beperk word en jy nie 'n lid is nie."
+      ],
+      "You have been removed from this room because the MUC (Multi-user chat) service is being shut down.": [
+         null,
+         "Jy is van hierdie kamer verwyder aangesien die MUC (Multi-user chat) diens nou afgeskakel word."
+      ],
+      "You are not on the member list of this room": [
+         null,
+         "Jy is nie op die ledelys van hierdie kamer nie"
+      ],
+      "No nickname was specified": [
+         null,
+         "Geen bynaam verskaf nie"
+      ],
+      "You are not allowed to create new rooms": [
+         null,
+         "Jy word nie toegelaat om nog kamers te skep nie"
+      ],
+      "Your nickname doesn't conform to this room's policies": [
+         null,
+         "Jou bynaam voldoen nie aan die kamer se beleid nie"
+      ],
+      "Your nickname is already taken": [
+         null,
+         "Jou bynaam is reeds geneem"
+      ],
+      "This room does not (yet) exist": [
+         null,
+         "Hierdie kamer bestaan tans (nog) nie"
+      ],
+      "This room has reached it's maximum number of occupants": [
+         null,
+         "Hierdie kamer het sy maksimum aantal deelnemers bereik"
+      ],
+      "Topic set by %1$s to: %2$s": [
+         null,
+         "Onderwerp deur %1$s bygewerk na: %2$s"
+      ],
+      "This user is a moderator": [
+         null,
+         "Hierdie gebruiker is 'n moderator"
+      ],
+      "This user can send messages in this room": [
+         null,
+         "Hierdie gebruiker kan boodskappe na die kamer stuur"
+      ],
+      "This user can NOT send messages in this room": [
+         null,
+         "Hierdie gebruiker kan NIE boodskappe na die kamer stuur nie"
+      ],
+      "Click to chat with this contact": [
+         null,
+         "Kliek om met hierdie kontak te klets"
+      ],
+      "Click to remove this contact": [
+         null,
+         "Kliek om hierdie kontak te verwyder"
+      ],
+      "Contact requests": [
+         null,
+         "Kontak versoeke"
+      ],
+      "My contacts": [
+         null,
+         "My kontakte"
+      ],
+      "Pending contacts": [
+         null,
+         "Hangende kontakte"
+      ],
+      "Custom status": [
+         null,
+         "Doelgemaakte status"
+      ],
+      "Click to change your chat status": [
+         null,
+         "Kliek om jou klets-status te verander"
+      ],
+      "Click here to write a custom status message": [
+         null,
+         "Kliek hier om jou eie statusboodskap te skryf"
+      ],
+      "online": [
+         null,
+         "aangemeld"
+      ],
+      "busy": [
+         null,
+         "besig"
+      ],
+      "away for long": [
+         null,
+         "vir lank afwesig"
+      ],
+      "away": [
+         null,
+         "afwesig"
+      ],
+      "I am %1$s": [
+         null,
+         "Ek is %1$s"
+      ],
+      "Sign in": [
+         null,
+         "Teken in"
+      ],
+      "XMPP/Jabber Username:": [
+         null,
+         "XMPP/Jabber Gebruikersnaam:"
+      ],
+      "Password:": [
+         null,
+         "Wagwoord"
+      ],
+      "Log In": [
+         null,
+         "Meld aan"
+      ],
+      "BOSH Service URL:": [
+         null,
+         "BOSH bediener URL"
+      ],
+      "Connected": [
+         null,
+         "Verbind"
+      ],
+      "Disconnected": [
+         null,
+         "Verbindung onderbreek"
+      ],
+      "Error": [
+         null,
+         "Fout"
+      ],
+      "Connecting": [
+         null,
+         "Verbind tans"
+      ],
+      "Connection Failed": [
+         null,
+         "Verbinding het gefaal"
+      ],
+      "Authenticating": [
+         null,
+         "Besig om te bekragtig"
+      ],
+      "Authentication Failed": [
+         null,
+         "Bekragtiging het gefaal"
+      ],
+      "Disconnecting": [
+         null,
+         "Onderbreek verbinding"
+      ],
+      "Attached": [
+         null,
+         "Geheg"
+      ],
+      "Online Contacts": [
+         null,
+         "Kontakte aangemeld"
+      ]
+   }
+}

+ 488 - 0
locale/af/LC_MESSAGES/converse.po

@@ -0,0 +1,488 @@
+# Afrikaans translations for Converse.js package.
+# Copyright (C) 2013 Jan-Carel Brand
+# This file is distributed under the same license as the Converse.js package.
+# JC Brand <jc@opkode.com>, 2013.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Converse.js 0.4\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2013-06-01 23:02+0200\n"
+"PO-Revision-Date: 2013-06-02 13:26+0200\n"
+"Last-Translator: JC Brand <jc@opkode.com>\n"
+"Language-Team: Afrikaans\n"
+"Language: af\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ASCII\n"
+"Content-Transfer-Encoding: 8bit\n"
+"domain: converse\n"
+"lang: af\n"
+"plural_forms: nplurals=2; plural=(n != 1);\n"
+
+# The last three values are needed by Jed (a Javascript translations library)
+#: converse.js:397 converse.js:1128
+msgid "Show this menu"
+msgstr "Vertoon hierdie keuselys"
+
+#: converse.js:398 converse.js:1129
+msgid "Write in the third person"
+msgstr "Skryf in die derde persoon"
+
+#: converse.js:399 converse.js:1133
+msgid "Remove messages"
+msgstr "Verwyder boodskappe"
+
+#: converse.js:539
+msgid "Personal message"
+msgstr "Persoonlike boodskap"
+
+#: converse.js:613
+msgid "Contacts"
+msgstr "Kontakte"
+
+#: converse.js:618
+msgid "Online"
+msgstr "Aangemeld"
+
+#: converse.js:619
+msgid "Busy"
+msgstr "Besig"
+
+#: converse.js:620
+msgid "Away"
+msgstr "Afwesig"
+
+#: converse.js:621
+msgid "Offline"
+msgstr "Afgemeld"
+
+#: converse.js:628
+msgid "Click to add new chat contacts"
+msgstr "Kliek om nuwe kletskontakte by te voeg"
+
+#: converse.js:628
+msgid "Add a contact"
+msgstr "Voeg 'n kontak by"
+
+#: converse.js:637
+msgid "Contact username"
+msgstr "Konak gebruikersnaam"
+
+#: converse.js:638
+msgid "Add"
+msgstr "Voeg by"
+
+#: converse.js:646
+msgid "Contact name"
+msgstr "Kontaknaam"
+
+#: converse.js:647
+msgid "Search"
+msgstr "Soek"
+
+#: converse.js:682
+msgid "No users found"
+msgstr "Geen gebruikers gevind"
+
+#: converse.js:689
+msgid "Click to add as a chat contact"
+msgstr "Kliek om as kletskontak by te voeg"
+
+#: converse.js:753
+msgid "Click to open this room"
+msgstr "Kliek om hierdie kletskamer te open"
+
+#: converse.js:755
+msgid "Show more information on this room"
+msgstr "Wys meer inligting aangaande hierdie kletskamer"
+
+#: converse.js:760
+msgid "Description:"
+msgstr "Beskrywing:"
+
+#: converse.js:761
+msgid "Occupants:"
+msgstr "Deelnemers:"
+
+#: converse.js:762
+msgid "Features:"
+msgstr "Eienskappe:"
+
+#: converse.js:764
+msgid "Requires authentication"
+msgstr "Benodig magtiging"
+
+#: converse.js:767
+msgid "Hidden"
+msgstr "Verskuil"
+
+#: converse.js:770
+msgid "Requires an invitation"
+msgstr "Benodig 'n uitnodiging"
+
+#: converse.js:773
+msgid "Moderated"
+msgstr "Gemodereer"
+
+#: converse.js:776
+msgid "Non-anonymous"
+msgstr "Nie-anoniem"
+
+#: converse.js:779
+msgid "Open room"
+msgstr "Oop kletskamer"
+
+#: converse.js:782
+msgid "Permanent room"
+msgstr "Permanente kamer"
+
+#: converse.js:785
+msgid "Public"
+msgstr "Publiek"
+
+#: converse.js:788
+msgid "Semi-anonymous"
+msgstr "Deels anoniem"
+
+#: converse.js:791
+msgid "Temporary room"
+msgstr "Tydelike kamer"
+
+#: converse.js:794
+msgid "Unmoderated"
+msgstr "Ongemodereer"
+
+#: converse.js:800
+msgid "Rooms"
+msgstr "Kamers"
+
+#: converse.js:804
+msgid "Room name"
+msgstr "Kamer naam"
+
+#: converse.js:805
+msgid "Nickname"
+msgstr "Bynaam"
+
+#: converse.js:806
+msgid "Server"
+msgstr "Bediener"
+
+#: converse.js:807
+msgid "Join"
+msgstr "Sluit aan"
+
+#: converse.js:808
+msgid "Show rooms"
+msgstr "Wys kamers"
+
+#. For translators: %1$s is a variable and will be replaced with the XMPP server name
+#: converse.js:841
+msgid "No rooms on %1$s"
+msgstr "Geen kamers op %1$s"
+
+#. For translators: %1$s is a variable and will be
+#. replaced with the XMPP server name
+#: converse.js:856
+msgid "Rooms on %1$s"
+msgstr "Kamers op %1$s"
+
+#: converse.js:1130
+msgid "Set chatroom topic"
+msgstr "Stel kletskamer onderwerp"
+
+#: converse.js:1131
+msgid "Kick user from chatroom"
+msgstr "Skop gebruiker uit die kletskamer"
+
+#: converse.js:1132
+msgid "Ban user from chatroom"
+msgstr "Verban gebruiker vanuit die kletskamer"
+
+#: converse.js:1159
+msgid "Message"
+msgstr "Boodskap"
+
+#: converse.js:1273 converse.js:2318
+msgid "Save"
+msgstr "Stoor"
+
+#: converse.js:1274
+msgid "Cancel"
+msgstr "Kanseleer"
+
+#: converse.js:1321
+msgid "An error occurred while trying to save the form."
+msgstr "A fout het voorgekom terwyl probeer is om die vorm te stoor."
+
+#: converse.js:1367
+msgid "This chatroom requires a password"
+msgstr "Hiedie kletskamer benodig 'n wagwoord"
+
+#: converse.js:1368
+msgid "Password: "
+msgstr "Wagwoord:"
+
+#: converse.js:1369
+msgid "Submit"
+msgstr "Dien in"
+
+#: converse.js:1383
+msgid "This room is not anonymous"
+msgstr "Hierdie vertrek is nie anoniem nie"
+
+#: converse.js:1384
+msgid "This room now shows unavailable members"
+msgstr "Hierdie vertrek wys nou onbeskikbare lede"
+
+#: converse.js:1385
+msgid "This room does not show unavailable members"
+msgstr "Hierdie vertrek wys nie onbeskikbare lede nie"
+
+#: converse.js:1386
+msgid "Non-privacy-related room configuration has changed"
+msgstr "Nie-privaatheidverwante kamer instellings het verander"
+
+#: converse.js:1387
+msgid "Room logging is now enabled"
+msgstr "Kamer log is nou aangeskakel"
+
+#: converse.js:1388
+msgid "Room logging is now disabled"
+msgstr "Kamer log is nou afgeskakel"
+
+#: converse.js:1389
+msgid "This room is now non-anonymous"
+msgstr "Hiedie kamer is nou nie anoniem nie"
+
+#: converse.js:1390
+msgid "This room is now semi-anonymous"
+msgstr "Hierdie kamer is nou gedeeltelik anoniem"
+
+#: converse.js:1391
+msgid "This room is now fully-anonymous"
+msgstr "Hierdie kamer is nou ten volle anoniem"
+
+#: converse.js:1392
+msgid "A new room has been created"
+msgstr "'n Nuwe kamer is geskep"
+
+#: converse.js:1393
+msgid "Your nickname has been changed"
+msgstr "Jou bynaam is verander"
+
+#. For translations: %1$s will be replaced with the user's nickname
+#. Don't translate "strong"
+#. Example: <strong>jcbrand</strong> has been banned
+#: converse.js:1400
+msgid "<strong>%1$s</strong> has been banned"
+msgstr "<strong>%1$s</strong> is verban"
+
+#. For translations: %1$s will be replaced with the user's nickname
+#. Don't translate "strong"
+#. Example: <strong>jcbrand</strong> has been kicked out
+#: converse.js:1404
+msgid "<strong>%1$s</strong> has been kicked out"
+msgstr "<strong>%1$s</strong> is uitgeskop"
+
+#. For translations: %1$s will be replaced with the user's nickname
+#. Don't translate "strong"
+#. Example: <strong>jcbrand</strong> has been removed because of an affiliasion change
+#: converse.js:1408
+msgid "<strong>%1$s</strong> has been removed because of an affiliation change"
+msgstr "<strong>%1$s</strong> is verwyder a.g.v 'n verandering van affiliasie"
+
+#. For translations: %1$s will be replaced with the user's nickname
+#. Don't translate "strong"
+#. Example: <strong>jcbrand</strong> has been removed for not being a member
+#: converse.js:1412
+msgid "<strong>%1$s</strong> has been removed for not being a member"
+msgstr "<strong>%1$s</strong> is nie 'n lid nie, en dus verwyder"
+
+#: converse.js:1416 converse.js:1478
+msgid "You have been banned from this room"
+msgstr "Jy is uit die kamer verban"
+
+#: converse.js:1417
+msgid "You have been kicked from this room"
+msgstr "Jy is uit die kamer geskop"
+
+#: converse.js:1418
+msgid "You have been removed from this room because of an affiliation change"
+msgstr "Jy is vanuit die kamer verwyder a.g.v 'n verandering van affiliasie"
+
+#: converse.js:1419
+msgid ""
+"You have been removed from this room because the room has changed to members-"
+"only and you're not a member"
+msgstr ""
+"Jy is vanuit die kamer verwyder omdat die kamer nou slegs tot lede beperk "
+"word en jy nie 'n lid is nie."
+
+#: converse.js:1420
+msgid ""
+"You have been removed from this room because the MUC (Multi-user chat) "
+"service is being shut down."
+msgstr ""
+"Jy is van hierdie kamer verwyder aangesien die MUC (Multi-user chat) diens "
+"nou afgeskakel word."
+
+#: converse.js:1476
+msgid "You are not on the member list of this room"
+msgstr "Jy is nie op die ledelys van hierdie kamer nie"
+
+#: converse.js:1482
+msgid "No nickname was specified"
+msgstr "Geen bynaam verskaf nie"
+
+#: converse.js:1486
+msgid "You are not allowed to create new rooms"
+msgstr "Jy word nie toegelaat om nog kamers te skep nie"
+
+#: converse.js:1488
+msgid "Your nickname doesn't conform to this room's policies"
+msgstr "Jou bynaam voldoen nie aan die kamer se beleid nie"
+
+#: converse.js:1490
+msgid "Your nickname is already taken"
+msgstr "Jou bynaam is reeds geneem"
+
+#: converse.js:1492
+msgid "This room does not (yet) exist"
+msgstr "Hierdie kamer bestaan tans (nog) nie"
+
+#: converse.js:1494
+msgid "This room has reached it's maximum number of occupants"
+msgstr "Hierdie kamer het sy maksimum aantal deelnemers bereik"
+
+#. For translators: the %1$s and %2$s parts will get replaced by the user and topic text respectively
+#. Example: Topic set by JC Brand to: Hello World!
+#: converse.js:1571
+msgid "Topic set by %1$s to: %2$s"
+msgstr "Onderwerp deur %1$s bygewerk na: %2$s"
+
+#: converse.js:1587
+msgid "This user is a moderator"
+msgstr "Hierdie gebruiker is 'n moderator"
+
+#: converse.js:1590
+msgid "This user can send messages in this room"
+msgstr "Hierdie gebruiker kan boodskappe na die kamer stuur"
+
+#: converse.js:1593
+msgid "This user can NOT send messages in this room"
+msgstr "Hierdie gebruiker kan NIE boodskappe na die kamer stuur nie"
+
+#: converse.js:1796
+msgid "Click to chat with this contact"
+msgstr "Kliek om met hierdie kontak te klets"
+
+#: converse.js:1797 converse.js:1801
+msgid "Click to remove this contact"
+msgstr "Kliek om hierdie kontak te verwyder"
+
+#: converse.js:2163
+msgid "Contact requests"
+msgstr "Kontak versoeke"
+
+#: converse.js:2164
+msgid "My contacts"
+msgstr "My kontakte"
+
+#: converse.js:2165
+msgid "Pending contacts"
+msgstr "Hangende kontakte"
+
+#: converse.js:2317
+msgid "Custom status"
+msgstr "Doelgemaakte status"
+
+#: converse.js:2323
+msgid "Click to change your chat status"
+msgstr "Kliek om jou klets-status te verander"
+
+#: converse.js:2326
+msgid "Click here to write a custom status message"
+msgstr "Kliek hier om jou eie statusboodskap te skryf"
+
+#: converse.js:2355 converse.js:2363
+msgid "online"
+msgstr "aangemeld"
+
+#: converse.js:2357
+msgid "busy"
+msgstr "besig"
+
+#: converse.js:2359
+msgid "away for long"
+msgstr "vir lank afwesig"
+
+#: converse.js:2361
+msgid "away"
+msgstr "afwesig"
+
+#. For translators: the %1$s part gets replaced with the status
+#. Example, I am online
+#: converse.js:2375 converse.js:2409
+msgid "I am %1$s"
+msgstr "Ek is %1$s"
+
+#: converse.js:2480
+msgid "Sign in"
+msgstr "Teken in"
+
+#: converse.js:2483
+msgid "XMPP/Jabber Username:"
+msgstr "XMPP/Jabber Gebruikersnaam:"
+
+#: converse.js:2485
+msgid "Password:"
+msgstr "Wagwoord"
+
+#: converse.js:2487
+msgid "Log In"
+msgstr "Meld aan"
+
+#: converse.js:2491
+msgid "BOSH Service URL:"
+msgstr "BOSH bediener URL"
+
+#: converse.js:2503
+msgid "Connected"
+msgstr "Verbind"
+
+#: converse.js:2507
+msgid "Disconnected"
+msgstr "Verbindung onderbreek"
+
+#: converse.js:2511
+msgid "Error"
+msgstr "Fout"
+
+#: converse.js:2513
+msgid "Connecting"
+msgstr "Verbind tans"
+
+#: converse.js:2516
+msgid "Connection Failed"
+msgstr "Verbinding het gefaal"
+
+#: converse.js:2518
+msgid "Authenticating"
+msgstr "Besig om te bekragtig"
+
+#: converse.js:2521
+msgid "Authentication Failed"
+msgstr "Bekragtiging het gefaal"
+
+#: converse.js:2523
+msgid "Disconnecting"
+msgstr "Onderbreek verbinding"
+
+#: converse.js:2525
+msgid "Attached"
+msgstr "Geheg"
+
+#: converse.js:2656
+msgid "Online Contacts"
+msgstr "Kontakte aangemeld"

+ 481 - 0
locale/converse.pot

@@ -0,0 +1,481 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Jan-Carel Brand
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Converse.js 0.4\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2013-06-01 23:03+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: converse.js:397 converse.js:1128
+msgid "Show this menu"
+msgstr ""
+
+#: converse.js:398 converse.js:1129
+msgid "Write in the third person"
+msgstr ""
+
+#: converse.js:399 converse.js:1133
+msgid "Remove messages"
+msgstr ""
+
+#: converse.js:539
+msgid "Personal message"
+msgstr ""
+
+#: converse.js:613
+msgid "Contacts"
+msgstr ""
+
+#: converse.js:618
+msgid "Online"
+msgstr ""
+
+#: converse.js:619
+msgid "Busy"
+msgstr ""
+
+#: converse.js:620
+msgid "Away"
+msgstr ""
+
+#: converse.js:621
+msgid "Offline"
+msgstr ""
+
+#: converse.js:628
+msgid "Click to add new chat contacts"
+msgstr ""
+
+#: converse.js:628
+msgid "Add a contact"
+msgstr ""
+
+#: converse.js:637
+msgid "Contact username"
+msgstr ""
+
+#: converse.js:638
+msgid "Add"
+msgstr ""
+
+#: converse.js:646
+msgid "Contact name"
+msgstr ""
+
+#: converse.js:647
+msgid "Search"
+msgstr ""
+
+#: converse.js:682
+msgid "No users found"
+msgstr ""
+
+#: converse.js:689
+msgid "Click to add as a chat contact"
+msgstr ""
+
+#: converse.js:753
+msgid "Click to open this room"
+msgstr ""
+
+#: converse.js:755
+msgid "Show more information on this room"
+msgstr ""
+
+#: converse.js:760
+msgid "Description:"
+msgstr ""
+
+#: converse.js:761
+msgid "Occupants:"
+msgstr ""
+
+#: converse.js:762
+msgid "Features:"
+msgstr ""
+
+#: converse.js:764
+msgid "Requires authentication"
+msgstr ""
+
+#: converse.js:767
+msgid "Hidden"
+msgstr ""
+
+#: converse.js:770
+msgid "Requires an invitation"
+msgstr ""
+
+#: converse.js:773
+msgid "Moderated"
+msgstr ""
+
+#: converse.js:776
+msgid "Non-anonymous"
+msgstr ""
+
+#: converse.js:779
+msgid "Open room"
+msgstr ""
+
+#: converse.js:782
+msgid "Permanent room"
+msgstr ""
+
+#: converse.js:785
+msgid "Public"
+msgstr ""
+
+#: converse.js:788
+msgid "Semi-anonymous"
+msgstr ""
+
+#: converse.js:791
+msgid "Temporary room"
+msgstr ""
+
+#: converse.js:794
+msgid "Unmoderated"
+msgstr ""
+
+#: converse.js:800
+msgid "Rooms"
+msgstr ""
+
+#: converse.js:804
+msgid "Room name"
+msgstr ""
+
+#: converse.js:805
+msgid "Nickname"
+msgstr ""
+
+#: converse.js:806
+msgid "Server"
+msgstr ""
+
+#: converse.js:807
+msgid "Join"
+msgstr ""
+
+#: converse.js:808
+msgid "Show rooms"
+msgstr ""
+
+#. For translators: %1$s is a variable and will be replaced with the XMPP server name
+#: converse.js:841
+msgid "No rooms on %1$s"
+msgstr ""
+
+#. For translators: %1$s is a variable and will be
+#. replaced with the XMPP server name
+#: converse.js:856
+msgid "Rooms on %1$s"
+msgstr ""
+
+#: converse.js:1130
+msgid "Set chatroom topic"
+msgstr ""
+
+#: converse.js:1131
+msgid "Kick user from chatroom"
+msgstr ""
+
+#: converse.js:1132
+msgid "Ban user from chatroom"
+msgstr ""
+
+#: converse.js:1159
+msgid "Message"
+msgstr ""
+
+#: converse.js:1273 converse.js:2318
+msgid "Save"
+msgstr ""
+
+#: converse.js:1274
+msgid "Cancel"
+msgstr ""
+
+#: converse.js:1321
+msgid "An error occurred while trying to save the form."
+msgstr ""
+
+#: converse.js:1367
+msgid "This chatroom requires a password"
+msgstr ""
+
+#: converse.js:1368
+msgid "Password: "
+msgstr ""
+
+#: converse.js:1369
+msgid "Submit"
+msgstr ""
+
+#: converse.js:1383
+msgid "This room is not anonymous"
+msgstr ""
+
+#: converse.js:1384
+msgid "This room now shows unavailable members"
+msgstr ""
+
+#: converse.js:1385
+msgid "This room does not show unavailable members"
+msgstr ""
+
+#: converse.js:1386
+msgid "Non-privacy-related room configuration has changed"
+msgstr ""
+
+#: converse.js:1387
+msgid "Room logging is now enabled"
+msgstr ""
+
+#: converse.js:1388
+msgid "Room logging is now disabled"
+msgstr ""
+
+#: converse.js:1389
+msgid "This room is now non-anonymous"
+msgstr ""
+
+#: converse.js:1390
+msgid "This room is now semi-anonymous"
+msgstr ""
+
+#: converse.js:1391
+msgid "This room is now fully-anonymous"
+msgstr ""
+
+#: converse.js:1392
+msgid "A new room has been created"
+msgstr ""
+
+#: converse.js:1393
+msgid "Your nickname has been changed"
+msgstr ""
+
+#. For translations: %1$s will be replaced with the user's nickname
+#. Don't translate "strong"
+#. Example: <strong>jcbrand</strong> has been banned
+#: converse.js:1400
+msgid "<strong>%1$s</strong> has been banned"
+msgstr ""
+
+#. For translations: %1$s will be replaced with the user's nickname
+#. Don't translate "strong"
+#. Example: <strong>jcbrand</strong> has been kicked out
+#: converse.js:1404
+msgid "<strong>%1$s</strong> has been kicked out"
+msgstr ""
+
+#. For translations: %1$s will be replaced with the user's nickname
+#. Don't translate "strong"
+#. Example: <strong>jcbrand</strong> has been removed because of an affiliasion change
+#: converse.js:1408
+msgid "<strong>%1$s</strong> has been removed because of an affiliation change"
+msgstr ""
+
+#. For translations: %1$s will be replaced with the user's nickname
+#. Don't translate "strong"
+#. Example: <strong>jcbrand</strong> has been removed for not being a member
+#: converse.js:1412
+msgid "<strong>%1$s</strong> has been removed for not being a member"
+msgstr ""
+
+#: converse.js:1416 converse.js:1478
+msgid "You have been banned from this room"
+msgstr ""
+
+#: converse.js:1417
+msgid "You have been kicked from this room"
+msgstr ""
+
+#: converse.js:1418
+msgid "You have been removed from this room because of an affiliation change"
+msgstr ""
+
+#: converse.js:1419
+msgid ""
+"You have been removed from this room because the room has changed to members-"
+"only and you're not a member"
+msgstr ""
+
+#: converse.js:1420
+msgid ""
+"You have been removed from this room because the MUC (Multi-user chat) "
+"service is being shut down."
+msgstr ""
+
+#: converse.js:1476
+msgid "You are not on the member list of this room"
+msgstr ""
+
+#: converse.js:1482
+msgid "No nickname was specified"
+msgstr ""
+
+#: converse.js:1486
+msgid "You are not allowed to create new rooms"
+msgstr ""
+
+#: converse.js:1488
+msgid "Your nickname doesn't conform to this room's policies"
+msgstr ""
+
+#: converse.js:1490
+msgid "Your nickname is already taken"
+msgstr ""
+
+#: converse.js:1492
+msgid "This room does not (yet) exist"
+msgstr ""
+
+#: converse.js:1494
+msgid "This room has reached it's maximum number of occupants"
+msgstr ""
+
+#. For translators: the %1$s and %2$s parts will get replaced by the user and topic text respectively
+#. Example: Topic set by JC Brand to: Hello World!
+#: converse.js:1571
+msgid "Topic set by %1$s to: %2$s"
+msgstr ""
+
+#: converse.js:1587
+msgid "This user is a moderator"
+msgstr ""
+
+#: converse.js:1590
+msgid "This user can send messages in this room"
+msgstr ""
+
+#: converse.js:1593
+msgid "This user can NOT send messages in this room"
+msgstr ""
+
+#: converse.js:1796
+msgid "Click to chat with this contact"
+msgstr ""
+
+#: converse.js:1797 converse.js:1801
+msgid "Click to remove this contact"
+msgstr ""
+
+#: converse.js:2163
+msgid "Contact requests"
+msgstr ""
+
+#: converse.js:2164
+msgid "My contacts"
+msgstr ""
+
+#: converse.js:2165
+msgid "Pending contacts"
+msgstr ""
+
+#: converse.js:2317
+msgid "Custom status"
+msgstr ""
+
+#: converse.js:2323
+msgid "Click to change your chat status"
+msgstr ""
+
+#: converse.js:2326
+msgid "Click here to write a custom status message"
+msgstr ""
+
+#: converse.js:2355 converse.js:2363
+msgid "online"
+msgstr ""
+
+#: converse.js:2357
+msgid "busy"
+msgstr ""
+
+#: converse.js:2359
+msgid "away for long"
+msgstr ""
+
+#: converse.js:2361
+msgid "away"
+msgstr ""
+
+#. For translators: the %1$s part gets replaced with the status
+#. Example, I am online
+#: converse.js:2375 converse.js:2409
+msgid "I am %1$s"
+msgstr ""
+
+#: converse.js:2480
+msgid "Sign in"
+msgstr ""
+
+#: converse.js:2483
+msgid "XMPP/Jabber Username:"
+msgstr ""
+
+#: converse.js:2485
+msgid "Password:"
+msgstr ""
+
+#: converse.js:2487
+msgid "Log In"
+msgstr ""
+
+#: converse.js:2491
+msgid "BOSH Service URL:"
+msgstr ""
+
+#: converse.js:2503
+msgid "Connected"
+msgstr ""
+
+#: converse.js:2507
+msgid "Disconnected"
+msgstr ""
+
+#: converse.js:2511
+msgid "Error"
+msgstr ""
+
+#: converse.js:2513
+msgid "Connecting"
+msgstr ""
+
+#: converse.js:2516
+msgid "Connection Failed"
+msgstr ""
+
+#: converse.js:2518
+msgid "Authenticating"
+msgstr ""
+
+#: converse.js:2521
+msgid "Authentication Failed"
+msgstr ""
+
+#: converse.js:2523
+msgid "Disconnecting"
+msgstr ""
+
+#: converse.js:2525
+msgid "Attached"
+msgstr ""
+
+#: converse.js:2656
+msgid "Online Contacts"
+msgstr ""

+ 460 - 0
locale/de/LC_MESSAGES/converse.json

@@ -0,0 +1,460 @@
+{
+   "converse": {
+      "": {
+         "Project-Id-Version": "Converse.js 0.4",
+         "Report-Msgid-Bugs-To": "",
+         "POT-Creation-Date": "2013-06-01 23:03+0200",
+         "PO-Revision-Date": "2013-06-02 13:58+0200",
+         "Last-Translator": "JC Brand <jc@opkode.com>",
+         "Language-Team": "German",
+         "Language": "de",
+         "MIME-Version": "1.0",
+         "Content-Type": "text/plain; charset=ASCII",
+         "Content-Transfer-Encoding": "8bit",
+         "Plural-Forms": "nplurals=2; plural=(n != 1);",
+         "domain": "converse",
+         "lang": "de",
+         "plural_forms": "nplurals=2; plural=(n != 1);"
+      },
+      "Show this menu": [
+         null,
+         "Dieses Menü anzeigen"
+      ],
+      "Write in the third person": [
+         null,
+         "In der dritten Person schreiben"
+      ],
+      "Remove messages": [
+         null,
+         "Nachrichten entfernen"
+      ],
+      "Personal message": [
+         null,
+         "Persönliche Nachricht"
+      ],
+      "Contacts": [
+         null,
+         "Kontakte"
+      ],
+      "Online": [
+         null,
+         "Online"
+      ],
+      "Busy": [
+         null,
+         "Beschäfticht"
+      ],
+      "Away": [
+         null,
+         "Abwesend"
+      ],
+      "Offline": [
+         null,
+         "Abgemeldet"
+      ],
+      "Click to add new chat contacts": [
+         null,
+         "Klicken Sie, um einen neuen Kontakt hinzuzufügen"
+      ],
+      "Add a contact": [
+         null,
+         "Kontakte hinzufügen"
+      ],
+      "Contact username": [
+         null,
+         "Benutzername"
+      ],
+      "Add": [
+         null,
+         "Hinzufügen"
+      ],
+      "Contact name": [
+         null,
+         "Name des Kontakts"
+      ],
+      "Search": [
+         null,
+         "Suche"
+      ],
+      "No users found": [
+         null,
+         "Keine Benutzer gefunden"
+      ],
+      "Click to add as a chat contact": [
+         null,
+         "Hier klicken um als Kontakt hinzuzufügen"
+      ],
+      "Click to open this room": [
+         null,
+         "Hier klicken um diesen Raum zu öffnen"
+      ],
+      "Show more information on this room": [
+         null,
+         "Mehr Information über diesen Raum zeigen"
+      ],
+      "Description:": [
+         null,
+         "Beschreibung"
+      ],
+      "Occupants:": [
+         null,
+         "Teilnehmer"
+      ],
+      "Features:": [
+         null,
+         "Funktionen:"
+      ],
+      "Requires authentication": [
+         null,
+         "Authentifizierung erforderlich"
+      ],
+      "Hidden": [
+         null,
+         "Versteckt"
+      ],
+      "Requires an invitation": [
+         null,
+         "Einladung erforderlich"
+      ],
+      "Moderated": [
+         null,
+         "Moderiert"
+      ],
+      "Non-anonymous": [
+         null,
+         "Nicht anonym"
+      ],
+      "Open room": [
+         null,
+         "Offener Raum"
+      ],
+      "Permanent room": [
+         null,
+         "Dauerhafter Raum"
+      ],
+      "Public": [
+         null,
+         "Öffentlich"
+      ],
+      "Semi-anonymous": [
+         null,
+         "Teils anonym"
+      ],
+      "Temporary room": [
+         null,
+         "Vorübergehender Raum"
+      ],
+      "Unmoderated": [
+         null,
+         "Unmoderiert"
+      ],
+      "Rooms": [
+         null,
+         "Räume"
+      ],
+      "Room name": [
+         null,
+         "Raumname"
+      ],
+      "Nickname": [
+         null,
+         "Spitzname"
+      ],
+      "Server": [
+         null,
+         "Server"
+      ],
+      "Join": [
+         null,
+         "Beitreten"
+      ],
+      "Show rooms": [
+         null,
+         "Räume anzeigen"
+      ],
+      "No rooms on %1$s": [
+         null,
+         "Keine Räume auf %1$s"
+      ],
+      "Rooms on %1$s": [
+         null,
+         "Räume auf %1$s"
+      ],
+      "Set chatroom topic": [
+         null,
+         "Chatraum Thema festlegen"
+      ],
+      "Kick user from chatroom": [
+         null,
+         "Werfe einen Benutzer aus dem Raum."
+      ],
+      "Ban user from chatroom": [
+         null,
+         "Verbanne einen Benutzer aus dem Raum."
+      ],
+      "Message": [
+         null,
+         "Nachricht"
+      ],
+      "Save": [
+         null,
+         "Speichern"
+      ],
+      "Cancel": [
+         null,
+         "Abbrechen"
+      ],
+      "An error occurred while trying to save the form.": [
+         null,
+         "Beim Speichern der Formular is ein Fehler aufgetreten."
+      ],
+      "This chatroom requires a password": [
+         null,
+         "Passwort wird für die Anmeldung benötigt."
+      ],
+      "Password: ": [
+         null,
+         "Passwort: "
+      ],
+      "Submit": [
+         null,
+         "Einreichen"
+      ],
+      "This room is not anonymous": [
+         null,
+         "Dieser Raum ist nicht anonym"
+      ],
+      "This room now shows unavailable members": [
+         null,
+         "Dieser Raum zeigt jetzt unferfügbare Mitglieder"
+      ],
+      "This room does not show unavailable members": [
+         null,
+         "Dieser Raum zeigt nicht unverfügbare Mitglieder"
+      ],
+      "Non-privacy-related room configuration has changed": [
+         null,
+         "Die Konfiguration, die nicht auf die Privatsphäre bezogen ist, hat sich geändert"
+      ],
+      "Room logging is now enabled": [
+         null,
+         "Zukünftige Nachrichten dieses Raums werden protokolliert."
+      ],
+      "Room logging is now disabled": [
+         null,
+         "Zukünftige Nachrichten dieses Raums werden nicht protokolliert."
+      ],
+      "This room is now non-anonymous": [
+         null,
+         "Dieser Raum ist jetzt nicht anonym"
+      ],
+      "This room is now semi-anonymous": [
+         null,
+         "Dieser Raum ist jetzt teils anonym"
+      ],
+      "This room is now fully-anonymous": [
+         null,
+         "Dieser Raum ist jetzt anonym"
+      ],
+      "A new room has been created": [
+         null,
+         "Einen neuen Raum ist erstellen"
+      ],
+      "Your nickname has been changed": [
+         null,
+         "Spitzname festgelegen"
+      ],
+      "<strong>%1$s</strong> has been banned": [
+         null,
+         "<strong>%1$s</strong> ist verbannt"
+      ],
+      "<strong>%1$s</strong> has been kicked out": [
+         null,
+         "<strong>%1$s</strong> ist hinausgeworfen"
+      ],
+      "<strong>%1$s</strong> has been removed because of an affiliation change": [
+         null,
+         "<strong>%1$s</strong> wurde wegen einer Zugehörigkeitsänderung entfernt"
+      ],
+      "<strong>%1$s</strong> has been removed for not being a member": [
+         null,
+         "<strong>%1$s</strong> ist kein Mitglied und wurde daher entfernt"
+      ],
+      "You have been banned from this room": [
+         null,
+         "Sie sind aus diesem Raum verbannt worden"
+      ],
+      "You have been kicked from this room": [
+         null,
+         "Sie wurden aus diesem Raum hinausgeworfen"
+      ],
+      "You have been removed from this room because of an affiliation change": [
+         null,
+         "Sie wurden wegen einer Zugehörigkeitsänderung entfernt"
+      ],
+      "You have been removed from this room because the room has changed to members-only and you're not a member": [
+         null,
+         "Sie wurden aus diesem Raum entfernt da Sie kein Mitglied sind."
+      ],
+      "You have been removed from this room because the MUC (Multi-user chat) service is being shut down.": [
+         null,
+         "Sie werden aus diesem Raum entfernt da der MUC (Muli-user chat) Dienst gerade abgeschalten wird."
+      ],
+      "You are not on the member list of this room": [
+         null,
+         "Sie sind nicht auf der Mitgliederliste dieses Raums"
+      ],
+      "No nickname was specified": [
+         null,
+         "Kein Spitzname festgelegt"
+      ],
+      "You are not allowed to create new rooms": [
+         null,
+         "Es ist Ihnen nicht erlaubt, neue Räume anzulegen"
+      ],
+      "Your nickname doesn't conform to this room's policies": [
+         null,
+         "Ungültiger Spitzname"
+      ],
+      "Your nickname is already taken": [
+         null,
+         "Ihre Spitzname existiert bereits."
+      ],
+      "This room does not (yet) exist": [
+         null,
+         "Dieser Raum existiert (noch) nicht"
+      ],
+      "This room has reached it's maximum number of occupants": [
+         null,
+         "Dieser Raum hat die maximale Mitgliederanzahl erreicht"
+      ],
+      "Topic set by %1$s to: %2$s": [
+         null,
+         "%1$s hat das Thema zu \"%2$s\" abgeändert"
+      ],
+      "This user is a moderator": [
+         null,
+         "Dieser Benutzer ist ein Moderator"
+      ],
+      "This user can send messages in this room": [
+         null,
+         "Dieser Benutzer kann Nachrichten in diesem Raum verschicken"
+      ],
+      "This user can NOT send messages in this room": [
+         null,
+         "Dieser Benutzer kann keine Nachrichten in diesem Raum verschicken"
+      ],
+      "Click to chat with this contact": [
+         null,
+         "Hier klicken um mit diesem Kontakt zu chatten"
+      ],
+      "Click to remove this contact": [
+         null,
+         "Hier klicken um diesen Kontakt zu entfernen"
+      ],
+      "Contact requests": [
+         null,
+         "Kontaktanfragen"
+      ],
+      "My contacts": [
+         null,
+         "Meine Kontakte"
+      ],
+      "Pending contacts": [
+         null,
+         "Unbestätigte Kontakte"
+      ],
+      "Custom status": [
+         null,
+         "Status-Nachricht"
+      ],
+      "Click to change your chat status": [
+         null,
+         "Klicken Sie, um ihrer Status to ändern"
+      ],
+      "Click here to write a custom status message": [
+         null,
+         "Klicken Sie hier, um ihrer Status-Nachricht to ändern"
+      ],
+      "online": [
+         null,
+         "online"
+      ],
+      "busy": [
+         null,
+         "beschäfticht"
+      ],
+      "away for long": [
+         null,
+         "länger abwesend"
+      ],
+      "away": [
+         null,
+         "abwesend"
+      ],
+      "I am %1$s": [
+         null,
+         "Ich bin %1$s"
+      ],
+      "Sign in": [
+         null,
+         "Anmelden"
+      ],
+      "XMPP/Jabber Username:": [
+         null,
+         "XMPP/Jabber Benutzername"
+      ],
+      "Password:": [
+         null,
+         "Passwort:"
+      ],
+      "Log In": [
+         null,
+         "Anmelden"
+      ],
+      "BOSH Service URL:": [
+         null,
+         "BOSH "
+      ],
+      "Connected": [
+         null,
+         "Verbunden"
+      ],
+      "Disconnected": [
+         null,
+         "Verbindung unterbrochen."
+      ],
+      "Error": [
+         null,
+         "Fehler"
+      ],
+      "Connecting": [
+         null,
+         "Verbindungsaufbau …"
+      ],
+      "Connection Failed": [
+         null,
+         "Entfernte Verbindung fehlgeschlagen"
+      ],
+      "Authenticating": [
+         null,
+         "Authentifizierung"
+      ],
+      "Authentication Failed": [
+         null,
+         "Authentifizierung gescheitert"
+      ],
+      "Disconnecting": [
+         null,
+         "Trenne Verbindung"
+      ],
+      "Attached": [
+         null,
+         "Angehängt"
+      ],
+      "Online Contacts": [
+         null,
+         "Online-Kontakte"
+      ]
+   }
+}

+ 489 - 0
locale/de/LC_MESSAGES/converse.po

@@ -0,0 +1,489 @@
+# German translations for Converse.js package.
+# Copyright (C) 2013 Jan-Carel Brand
+# This file is distributed under the same license as the Converse.js package.
+# JC Brand <jc@opkode.com>, 2013.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Converse.js 0.4\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2013-06-01 23:03+0200\n"
+"PO-Revision-Date: 2013-06-02 13:58+0200\n"
+"Last-Translator: JC Brand <jc@opkode.com>\n"
+"Language-Team: German\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ASCII\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"domain: converse\n"
+"lang: de\n"
+"plural_forms: nplurals=2; plural=(n != 1);\n"
+
+#: converse.js:397 converse.js:1128
+msgid "Show this menu"
+msgstr "Dieses Menü anzeigen"
+
+#: converse.js:398 converse.js:1129
+msgid "Write in the third person"
+msgstr "In der dritten Person schreiben"
+
+#: converse.js:399 converse.js:1133
+msgid "Remove messages"
+msgstr "Nachrichten entfernen"
+
+#: converse.js:539
+msgid "Personal message"
+msgstr "Persönliche Nachricht"
+
+#: converse.js:613
+msgid "Contacts"
+msgstr "Kontakte"
+
+#: converse.js:618
+msgid "Online"
+msgstr "Online"
+
+#: converse.js:619
+msgid "Busy"
+msgstr "Beschäfticht"
+
+#: converse.js:620
+msgid "Away"
+msgstr "Abwesend"
+
+#: converse.js:621
+msgid "Offline"
+msgstr "Abgemeldet"
+
+#: converse.js:628
+msgid "Click to add new chat contacts"
+msgstr "Klicken Sie, um einen neuen Kontakt hinzuzufügen"
+
+#: converse.js:628
+msgid "Add a contact"
+msgstr "Kontakte hinzufügen"
+
+#: converse.js:637
+msgid "Contact username"
+msgstr "Benutzername"
+
+#: converse.js:638
+msgid "Add"
+msgstr "Hinzufügen"
+
+#: converse.js:646
+msgid "Contact name"
+msgstr "Name des Kontakts"
+
+#: converse.js:647
+msgid "Search"
+msgstr "Suche"
+
+#: converse.js:682
+msgid "No users found"
+msgstr "Keine Benutzer gefunden"
+
+#: converse.js:689
+msgid "Click to add as a chat contact"
+msgstr "Hier klicken um als Kontakt hinzuzufügen"
+
+#: converse.js:753
+msgid "Click to open this room"
+msgstr "Hier klicken um diesen Raum zu öffnen"
+
+#: converse.js:755
+msgid "Show more information on this room"
+msgstr "Mehr Information über diesen Raum zeigen"
+
+#: converse.js:760
+msgid "Description:"
+msgstr "Beschreibung"
+
+#: converse.js:761
+msgid "Occupants:"
+msgstr "Teilnehmer"
+
+#: converse.js:762
+msgid "Features:"
+msgstr "Funktionen:"
+
+#: converse.js:764
+msgid "Requires authentication"
+msgstr "Authentifizierung erforderlich"
+
+#: converse.js:767
+msgid "Hidden"
+msgstr "Versteckt"
+
+#: converse.js:770
+msgid "Requires an invitation"
+msgstr "Einladung erforderlich"
+
+#: converse.js:773
+msgid "Moderated"
+msgstr "Moderiert"
+
+#: converse.js:776
+msgid "Non-anonymous"
+msgstr "Nicht anonym"
+
+#: converse.js:779
+msgid "Open room"
+msgstr "Offener Raum"
+
+#: converse.js:782
+msgid "Permanent room"
+msgstr "Dauerhafter Raum"
+
+#: converse.js:785
+msgid "Public"
+msgstr "Öffentlich"
+
+#: converse.js:788
+msgid "Semi-anonymous"
+msgstr "Teils anonym"
+
+#: converse.js:791
+msgid "Temporary room"
+msgstr "Vorübergehender Raum"
+
+#: converse.js:794
+msgid "Unmoderated"
+msgstr "Unmoderiert"
+
+#: converse.js:800
+msgid "Rooms"
+msgstr "Räume"
+
+#: converse.js:804
+msgid "Room name"
+msgstr "Raumname"
+
+#: converse.js:805
+msgid "Nickname"
+msgstr "Spitzname"
+
+#: converse.js:806
+msgid "Server"
+msgstr "Server"
+
+#: converse.js:807
+msgid "Join"
+msgstr "Beitreten"
+
+#: converse.js:808
+msgid "Show rooms"
+msgstr "Räume anzeigen"
+
+#. For translators: %1$s is a variable and will be replaced with the XMPP server name
+#: converse.js:841
+msgid "No rooms on %1$s"
+msgstr "Keine Räume auf %1$s"
+
+#. For translators: %1$s is a variable and will be
+#. replaced with the XMPP server name
+#: converse.js:856
+msgid "Rooms on %1$s"
+msgstr "Räume auf %1$s"
+
+#: converse.js:1130
+msgid "Set chatroom topic"
+msgstr "Chatraum Thema festlegen"
+
+#: converse.js:1131
+msgid "Kick user from chatroom"
+msgstr "Werfe einen Benutzer aus dem Raum."
+
+#: converse.js:1132
+msgid "Ban user from chatroom"
+msgstr "Verbanne einen Benutzer aus dem Raum."
+
+#: converse.js:1159
+msgid "Message"
+msgstr "Nachricht"
+
+#: converse.js:1273 converse.js:2318
+msgid "Save"
+msgstr "Speichern"
+
+#: converse.js:1274
+msgid "Cancel"
+msgstr "Abbrechen"
+
+#: converse.js:1321
+msgid "An error occurred while trying to save the form."
+msgstr "Beim Speichern der Formular is ein Fehler aufgetreten."
+
+#: converse.js:1367
+msgid "This chatroom requires a password"
+msgstr "Passwort wird für die Anmeldung benötigt."
+
+#: converse.js:1368
+msgid "Password: "
+msgstr "Passwort: "
+
+#: converse.js:1369
+msgid "Submit"
+msgstr "Einreichen"
+
+#: converse.js:1383
+msgid "This room is not anonymous"
+msgstr "Dieser Raum ist nicht anonym"
+
+#: converse.js:1384
+msgid "This room now shows unavailable members"
+msgstr "Dieser Raum zeigt jetzt unferfügbare Mitglieder"
+
+#: converse.js:1385
+msgid "This room does not show unavailable members"
+msgstr "Dieser Raum zeigt nicht unverfügbare Mitglieder"
+
+#: converse.js:1386
+msgid "Non-privacy-related room configuration has changed"
+msgstr "Die Konfiguration, die nicht auf die Privatsphäre bezogen ist, hat sich geändert"
+
+#: converse.js:1387
+msgid "Room logging is now enabled"
+msgstr ""
+"Zukünftige Nachrichten dieses Raums werden "
+"protokolliert."
+
+#: converse.js:1388
+msgid "Room logging is now disabled"
+msgstr ""
+"Zukünftige Nachrichten dieses Raums werden nicht "
+"protokolliert."
+
+#: converse.js:1389
+msgid "This room is now non-anonymous"
+msgstr "Dieser Raum ist jetzt nicht anonym"
+
+#: converse.js:1390
+msgid "This room is now semi-anonymous"
+msgstr "Dieser Raum ist jetzt teils anonym"
+
+#: converse.js:1391
+msgid "This room is now fully-anonymous"
+msgstr "Dieser Raum ist jetzt anonym"
+
+#: converse.js:1392
+msgid "A new room has been created"
+msgstr "Einen neuen Raum ist erstellen"
+
+#: converse.js:1393
+msgid "Your nickname has been changed"
+msgstr "Spitzname festgelegen"
+
+#. For translations: %1$s will be replaced with the user's nickname
+#. Don't translate "strong"
+#. Example: <strong>jcbrand</strong> has been banned
+#: converse.js:1400
+msgid "<strong>%1$s</strong> has been banned"
+msgstr "<strong>%1$s</strong> ist verbannt"
+
+#. For translations: %1$s will be replaced with the user's nickname
+#. Don't translate "strong"
+#. Example: <strong>jcbrand</strong> has been kicked out
+#: converse.js:1404
+msgid "<strong>%1$s</strong> has been kicked out"
+msgstr "<strong>%1$s</strong> ist hinausgeworfen"
+
+#. For translations: %1$s will be replaced with the user's nickname
+#. Don't translate "strong"
+#. Example: <strong>jcbrand</strong> has been removed because of an affiliasion change
+#: converse.js:1408
+msgid "<strong>%1$s</strong> has been removed because of an affiliation change"
+msgstr "<strong>%1$s</strong> wurde wegen einer Zugehörigkeitsänderung entfernt"
+
+#. For translations: %1$s will be replaced with the user's nickname
+#. Don't translate "strong"
+#. Example: <strong>jcbrand</strong> has been removed for not being a member
+#: converse.js:1412
+msgid "<strong>%1$s</strong> has been removed for not being a member"
+msgstr "<strong>%1$s</strong> ist kein Mitglied und wurde daher entfernt"
+
+#: converse.js:1416 converse.js:1478
+msgid "You have been banned from this room"
+msgstr "Sie sind aus diesem Raum verbannt worden"
+
+#: converse.js:1417
+msgid "You have been kicked from this room"
+msgstr "Sie wurden aus diesem Raum hinausgeworfen"
+
+#: converse.js:1418
+msgid "You have been removed from this room because of an affiliation change"
+msgstr "Sie wurden wegen einer Zugehörigkeitsänderung entfernt"
+
+#: converse.js:1419
+msgid ""
+"You have been removed from this room because the room has changed to members-"
+"only and you're not a member"
+msgstr "Sie wurden aus diesem Raum entfernt da Sie kein Mitglied sind."
+
+#: converse.js:1420
+msgid ""
+"You have been removed from this room because the MUC (Multi-user chat) "
+"service is being shut down."
+msgstr "Sie werden aus diesem Raum entfernt da der MUC (Muli-user chat) Dienst "
+"gerade abgeschalten wird."
+
+#: converse.js:1476
+msgid "You are not on the member list of this room"
+msgstr "Sie sind nicht auf der Mitgliederliste dieses Raums"
+
+#: converse.js:1482
+msgid "No nickname was specified"
+msgstr "Kein Spitzname festgelegt"
+
+#: converse.js:1486
+msgid "You are not allowed to create new rooms"
+msgstr "Es ist Ihnen nicht erlaubt, neue Räume anzulegen"
+
+#: converse.js:1488
+msgid "Your nickname doesn't conform to this room's policies"
+msgstr "Ungültiger Spitzname"
+
+#: converse.js:1490
+msgid "Your nickname is already taken"
+msgstr "Ihre Spitzname existiert bereits."
+
+#: converse.js:1492
+msgid "This room does not (yet) exist"
+msgstr "Dieser Raum existiert (noch) nicht"
+
+#: converse.js:1494
+msgid "This room has reached it's maximum number of occupants"
+msgstr "Dieser Raum hat die maximale Mitgliederanzahl erreicht"
+
+#. For translators: the %1$s and %2$s parts will get replaced by the user and topic text respectively
+#. Example: Topic set by JC Brand to: Hello World!
+#: converse.js:1571
+msgid "Topic set by %1$s to: %2$s"
+msgstr "%1$s hat das Thema zu \"%2$s\" abgeändert"
+
+#: converse.js:1587
+msgid "This user is a moderator"
+msgstr "Dieser Benutzer ist ein Moderator"
+
+#: converse.js:1590
+msgid "This user can send messages in this room"
+msgstr "Dieser Benutzer kann Nachrichten in diesem Raum verschicken"
+
+#: converse.js:1593
+msgid "This user can NOT send messages in this room"
+msgstr "Dieser Benutzer kann keine Nachrichten in diesem Raum verschicken"
+
+#: converse.js:1796
+msgid "Click to chat with this contact"
+msgstr "Hier klicken um mit diesem Kontakt zu chatten"
+
+#: converse.js:1797 converse.js:1801
+msgid "Click to remove this contact"
+msgstr "Hier klicken um diesen Kontakt zu entfernen"
+
+#: converse.js:2163
+msgid "Contact requests"
+msgstr "Kontaktanfragen"
+
+#: converse.js:2164
+msgid "My contacts"
+msgstr "Meine Kontakte"
+
+#: converse.js:2165
+msgid "Pending contacts"
+msgstr "Unbestätigte Kontakte"
+
+#: converse.js:2317
+msgid "Custom status"
+msgstr "Status-Nachricht"
+
+#: converse.js:2323
+msgid "Click to change your chat status"
+msgstr "Klicken Sie, um ihrer Status to ändern"
+
+#: converse.js:2326
+msgid "Click here to write a custom status message"
+msgstr "Klicken Sie hier, um ihrer Status-Nachricht to ändern"
+
+#: converse.js:2355 converse.js:2363
+msgid "online"
+msgstr "online"
+
+#: converse.js:2357
+msgid "busy"
+msgstr "beschäfticht"
+
+#: converse.js:2359
+msgid "away for long"
+msgstr "länger abwesend"
+
+#: converse.js:2361
+msgid "away"
+msgstr "abwesend"
+
+#. For translators: the %1$s part gets replaced with the status
+#. Example, I am online
+#: converse.js:2375 converse.js:2409
+msgid "I am %1$s"
+msgstr "Ich bin %1$s"
+
+#: converse.js:2480
+msgid "Sign in"
+msgstr "Anmelden"
+
+#: converse.js:2483
+msgid "XMPP/Jabber Username:"
+msgstr "XMPP/Jabber Benutzername"
+
+#: converse.js:2485
+msgid "Password:"
+msgstr "Passwort:"
+
+#: converse.js:2487
+msgid "Log In"
+msgstr "Anmelden"
+
+#: converse.js:2491
+msgid "BOSH Service URL:"
+msgstr "BOSH "
+
+#: converse.js:2503
+msgid "Connected"
+msgstr "Verbunden"
+
+#: converse.js:2507
+msgid "Disconnected"
+msgstr "Verbindung unterbrochen."
+
+#: converse.js:2511
+msgid "Error"
+msgstr "Fehler"
+
+#: converse.js:2513
+msgid "Connecting"
+msgstr "Verbindungsaufbau …"
+
+#: converse.js:2516
+msgid "Connection Failed"
+msgstr "Entfernte Verbindung fehlgeschlagen"
+
+#: converse.js:2518
+msgid "Authenticating"
+msgstr "Authentifizierung"
+
+#: converse.js:2521
+msgid "Authentication Failed"
+msgstr "Authentifizierung gescheitert"
+
+#: converse.js:2523
+msgid "Disconnecting"
+msgstr "Trenne Verbindung"
+
+#: converse.js:2525
+msgid "Attached"
+msgstr "Angehängt"
+
+#: converse.js:2656
+msgid "Online Contacts"
+msgstr "Online-Kontakte"

+ 459 - 0
locale/de/LC_MESSAGES/de.js

@@ -0,0 +1,459 @@
+(function (root, factory) {
+    define("de", ['jed'], function () {
+        var de = new Jed({
+            "domain": "converse",
+            "locale_data": {
+                "converse": {
+                    "": {
+                        "domain": "converse",
+                        "lang": "de",
+                        "plural_forms": "nplurals=2; plural=(n != 1);"
+                    },
+                    "Show this menu": [
+                        null,
+                        "Dieses Menü anzeigen"
+                    ],
+                    "Write in the third person": [
+                        null,
+                        "In der dritten Person schreiben"
+                    ],
+                    "Remove messages": [
+                        null,
+                        "Nachrichten entfernen"
+                    ],
+                    "Personal message": [
+                        null,
+                        "Persönliche Nachricht"
+                    ],
+                    "Contacts": [
+                        null,
+                        "Kontakte"
+                    ],
+                    "Online": [
+                        null,
+                        "Online"
+                    ],
+                    "Busy": [
+                        null,
+                        "Beschäfticht"
+                    ],
+                    "Away": [
+                        null,
+                        "Abwesend"
+                    ],
+                    "Offline": [
+                        null,
+                        "Abgemeldet"
+                    ],
+                    "Click to add new chat contacts": [
+                        null,
+                        "Klicken Sie, um einen neuen Kontakt hinzuzufügen"
+                    ],
+                    "Add a contact": [
+                        null,
+                        "Kontakte hinzufügen"
+                    ],
+                    "Contact username": [
+                        null,
+                        "Benutzername"
+                    ],
+                    "Add": [
+                        null,
+                        "Hinzufügen"
+                    ],
+                    "Contact name": [
+                        null,
+                        "Name des Kontakts"
+                    ],
+                    "Search": [
+                        null,
+                        "Suche"
+                    ],
+                    "No users found": [
+                        null,
+                        "Keine Benutzer gefunden"
+                    ],
+                    "Click to add as a chat contact": [
+                        null,
+                        "Hier klicken um als Kontakt hinzuzufügen"
+                    ],
+                    "Click to open this room": [
+                        null,
+                        "Hier klicken um diesen Raum zu öffnen"
+                    ],
+                    "Show more information on this room": [
+                        null,
+                        "Mehr Information über diesen Raum zeigen"
+                    ],
+                    "Description:": [
+                        null,
+                        "Beschreibung"
+                    ],
+                    "Occupants:": [
+                        null,
+                        "Teilnehmer"
+                    ],
+                    "Features:": [
+                        null,
+                        "Funktionen:"
+                    ],
+                    "Requires authentication": [
+                        null,
+                        "Authentifizierung erforderlich"
+                    ],
+                    "Hidden": [
+                        null,
+                        "Versteckt"
+                    ],
+                    "Requires an invitation": [
+                        null,
+                        "Einladung erforderlich"
+                    ],
+                    "Moderated": [
+                        null,
+                        "Moderiert"
+                    ],
+                    "Non-anonymous": [
+                        null,
+                        "Nicht anonym"
+                    ],
+                    "Open room": [
+                        null,
+                        "Offener Raum"
+                    ],
+                    "Permanent room": [
+                        null,
+                        "Dauerhafter Raum"
+                    ],
+                    "Public": [
+                        null,
+                        "Öffentlich"
+                    ],
+                    "Semi-anonymous": [
+                        null,
+                        "Teils anonym"
+                    ],
+                    "Temporary room": [
+                        null,
+                        "Vorübergehender Raum"
+                    ],
+                    "Unmoderated": [
+                        null,
+                        "Unmoderiert"
+                    ],
+                    "Rooms": [
+                        null,
+                        "Räume"
+                    ],
+                    "Room name": [
+                        null,
+                        "Raumname"
+                    ],
+                    "Nickname": [
+                        null,
+                        "Spitzname"
+                    ],
+                    "Server": [
+                        null,
+                        "Server"
+                    ],
+                    "Join": [
+                        null,
+                        "Beitreten"
+                    ],
+                    "Show rooms": [
+                        null,
+                        "Räume anzeigen"
+                    ],
+                    "No rooms on %1$s": [
+                        null,
+                        "Keine Räume auf %1$s"
+                    ],
+                    "Rooms on %1$s": [
+                        null,
+                        "Räume auf %1$s"
+                    ],
+                    "Set chatroom topic": [
+                        null,
+                        "Chatraum Thema festlegen"
+                    ],
+                    "Kick user from chatroom": [
+                        null,
+                        "Werfe einen Benutzer aus dem Raum."
+                    ],
+                    "Ban user from chatroom": [
+                        null,
+                        "Verbanne einen Benutzer aus dem Raum."
+                    ],
+                    "Message": [
+                        null,
+                        "Nachricht"
+                    ],
+                    "Save": [
+                        null,
+                        "Speichern"
+                    ],
+                    "Cancel": [
+                        null,
+                        "Abbrechen"
+                    ],
+                    "An error occurred while trying to save the form.": [
+                        null,
+                        "Beim Speichern der Formular is ein Fehler aufgetreten."
+                    ],
+                    "This chatroom requires a password": [
+                        null,
+                        "Passwort wird für die Anmeldung benötigt."
+                    ],
+                    "Password: ": [
+                        null,
+                        "Passwort: "
+                    ],
+                    "Submit": [
+                        null,
+                        "Einreichen"
+                    ],
+                    "This room is not anonymous": [
+                        null,
+                        "Dieser Raum ist nicht anonym"
+                    ],
+                    "This room now shows unavailable members": [
+                        null,
+                        "Dieser Raum zeigt jetzt unferfügbare Mitglieder"
+                    ],
+                    "This room does not show unavailable members": [
+                        null,
+                        "Dieser Raum zeigt nicht unverfügbare Mitglieder"
+                    ],
+                    "Non-privacy-related room configuration has changed": [
+                        null,
+                        "Die Konfiguration, die nicht auf die Privatsphäre bezogen ist, hat sich geändert"
+                    ],
+                    "Room logging is now enabled": [
+                        null,
+                        "Zukünftige Nachrichten dieses Raums werden protokolliert."
+                    ],
+                    "Room logging is now disabled": [
+                        null,
+                        "Zukünftige Nachrichten dieses Raums werden nicht protokolliert."
+                    ],
+                    "This room is now non-anonymous": [
+                        null,
+                        "Dieser Raum ist jetzt nicht anonym"
+                    ],
+                    "This room is now semi-anonymous": [
+                        null,
+                        "Dieser Raum ist jetzt teils anonym"
+                    ],
+                    "This room is now fully-anonymous": [
+                        null,
+                        "Dieser Raum ist jetzt anonym"
+                    ],
+                    "A new room has been created": [
+                        null,
+                        "Einen neuen Raum ist erstellen"
+                    ],
+                    "Your nickname has been changed": [
+                        null,
+                        "Spitzname festgelegen"
+                    ],
+                    "<strong>%1$s</strong> has been banned": [
+                        null,
+                        "<strong>%1$s</strong> ist verbannt"
+                    ],
+                    "<strong>%1$s</strong> has been kicked out": [
+                        null,
+                        "<strong>%1$s</strong> ist hinausgeworfen"
+                    ],
+                    "<strong>%1$s</strong> has been removed because of an affiliation change": [
+                        null,
+                        "<strong>%1$s</strong> wurde wegen einer Zugehörigkeitsänderung entfernt"
+                    ],
+                    "<strong>%1$s</strong> has been removed for not being a member": [
+                        null,
+                        "<strong>%1$s</strong> ist kein Mitglied und wurde daher entfernt"
+                    ],
+                    "You have been banned from this room": [
+                        null,
+                        "Sie sind aus diesem Raum verbannt worden"
+                    ],
+                    "You have been kicked from this room": [
+                        null,
+                        "Sie wurden aus diesem Raum hinausgeworfen"
+                    ],
+                    "You have been removed from this room because of an affiliation change": [
+                        null,
+                        "Sie wurden wegen einer Zugehörigkeitsänderung entfernt"
+                    ],
+                    "You have been removed from this room because the room has changed to members-only and you're not a member": [
+                        null,
+                        "Sie wurden aus diesem Raum entfernt da Sie kein Mitglied sind."
+                    ],
+                    "You have been removed from this room because the MUC (Multi-user chat) service is being shut down.": [
+                        null,
+                        "Sie werden aus diesem Raum entfernt da der MUC (Muli-user chat) Dienst gerade abgeschalten wird."
+                    ],
+                    "You are not on the member list of this room": [
+                        null,
+                        "Sie sind nicht auf der Mitgliederliste dieses Raums"
+                    ],
+                    "No nickname was specified": [
+                        null,
+                        "Kein Spitzname festgelegt"
+                    ],
+                    "You are not allowed to create new rooms": [
+                        null,
+                        "Es ist Ihnen nicht erlaubt, neue Räume anzulegen"
+                    ],
+                    "Your nickname doesn't conform to this room's policies": [
+                        null,
+                        "Ungültiger Spitzname"
+                    ],
+                    "Your nickname is already taken": [
+                        null,
+                        "Ihre Spitzname existiert bereits."
+                    ],
+                    "This room does not (yet) exist": [
+                        null,
+                        "Dieser Raum existiert (noch) nicht"
+                    ],
+                    "This room has reached it's maximum number of occupants": [
+                        null,
+                        "Dieser Raum hat die maximale Mitgliederanzahl erreicht"
+                    ],
+                    "Topic set by %1$s to: %2$s": [
+                        null,
+                        "%1$s hat das Thema zu \"%2$s\" abgeändert"
+                    ],
+                    "This user is a moderator": [
+                        null,
+                        "Dieser Benutzer ist ein Moderator"
+                    ],
+                    "This user can send messages in this room": [
+                        null,
+                        "Dieser Benutzer kann Nachrichten in diesem Raum verschicken"
+                    ],
+                    "This user can NOT send messages in this room": [
+                        null,
+                        "Dieser Benutzer kann keine Nachrichten in diesem Raum verschicken"
+                    ],
+                    "Click to chat with this contact": [
+                        null,
+                        "Hier klicken um mit diesem Kontakt zu chatten"
+                    ],
+                    "Click to remove this contact": [
+                        null,
+                        "Hier klicken um diesen Kontakt zu entfernen"
+                    ],
+                    "Contact requests": [
+                        null,
+                        "Kontaktanfragen"
+                    ],
+                    "My contacts": [
+                        null,
+                        "Meine Kontakte"
+                    ],
+                    "Pending contacts": [
+                        null,
+                        "Unbestätigte Kontakte"
+                    ],
+                    "Custom status": [
+                        null,
+                        "Status-Nachricht"
+                    ],
+                    "Click to change your chat status": [
+                        null,
+                        "Klicken Sie, um ihrer Status to ändern"
+                    ],
+                    "Click here to write a custom status message": [
+                        null,
+                        "Klicken Sie hier, um ihrer Status-Nachricht to ändern"
+                    ],
+                    "online": [
+                        null,
+                        "online"
+                    ],
+                    "busy": [
+                        null,
+                        "beschäfticht"
+                    ],
+                    "away for long": [
+                        null,
+                        "länger abwesend"
+                    ],
+                    "away": [
+                        null,
+                        "abwesend"
+                    ],
+                    "I am %1$s": [
+                        null,
+                        "Ich bin %1$s"
+                    ],
+                    "Sign in": [
+                        null,
+                        "Anmelden"
+                    ],
+                    "XMPP/Jabber Username:": [
+                        null,
+                        "XMPP/Jabber Benutzername"
+                    ],
+                    "Password:": [
+                        null,
+                        "Passwort:"
+                    ],
+                    "Log In": [
+                        null,
+                        "Anmelden"
+                    ],
+                    "BOSH Service URL:": [
+                        null,
+                        "BOSH "
+                    ],
+                    "Connected": [
+                        null,
+                        "Verbunden"
+                    ],
+                    "Disconnected": [
+                        null,
+                        "Verbindung unterbrochen."
+                    ],
+                    "Error": [
+                        null,
+                        "Fehler"
+                    ],
+                    "Connecting": [
+                        null,
+                        "Verbindungsaufbau …"
+                    ],
+                    "Connection Failed": [
+                        null,
+                        "Entfernte Verbindung fehlgeschlagen"
+                    ],
+                    "Authenticating": [
+                        null,
+                        "Authentifizierung"
+                    ],
+                    "Authentication Failed": [
+                        null,
+                        "Authentifizierung gescheitert"
+                    ],
+                    "Disconnecting": [
+                        null,
+                        "Trenne Verbindung"
+                    ],
+                    "Attached": [
+                        null,
+                        "Angehängt"
+                    ],
+                    "Online Contacts": [
+                        null,
+                        "Online-Kontakte"
+                    ]
+                }
+            }
+        });
+        return factory(de);
+    });
+}(this, function (de) { 
+    return de; 
+}));

+ 19 - 0
locale/en/LC_MESSAGES/en.js

@@ -0,0 +1,19 @@
+(function (root, factory) {
+    define("en", ['jed'], function () {
+        var en = new Jed({
+            "domain": "converse",
+            "locale_data": {
+                "converse": {
+                    "": {
+                        "domain": "converse",
+                        "lang": "en",
+                        "plural_forms": "nplurals=2; plural=(n != 1);"
+                    }
+                }
+            }
+        });
+        return factory(en);
+    });
+}(this, function (en) { 
+    return en;
+}));

+ 460 - 0
locale/es/LC_MESSAGES/converse.json

@@ -0,0 +1,460 @@
+{
+   "converse": {
+      "": {
+         "Project-Id-Version": "Converse.js 0.4",
+         "Report-Msgid-Bugs-To": "",
+         "POT-Creation-Date": "2013-06-01 23:03+0200",
+         "PO-Revision-Date": "2013-07-22 18:13-0400",
+         "Last-Translator": "Leonardo J. Caballero G. <leonardocaballero@gmail.com>",
+         "Language-Team": "Spanish",
+         "Language": "es",
+         "MIME-Version": "1.0",
+         "Content-Type": "text/plain; charset=ASCII",
+         "Content-Transfer-Encoding": "8bit",
+         "Plural-Forms": "nplurals=2; plural=(n != 1);",
+         "domain": "converse",
+         "lang": "es",
+         "plural_forms": "nplurals=2; plural=(n != 1);"
+      },
+      "Show this menu": [
+         null,
+         "Mostrar este menú"
+      ],
+      "Write in the third person": [
+         null,
+         "Escribir en tercera persona"
+      ],
+      "Remove messages": [
+         null,
+         "Eliminar mensajes"
+      ],
+      "Personal message": [
+         null,
+         "Mensaje personal"
+      ],
+      "Contacts": [
+         null,
+         "Contactos"
+      ],
+      "Online": [
+         null,
+         "En linea"
+      ],
+      "Busy": [
+         null,
+         "Ocupado"
+      ],
+      "Away": [
+         null,
+         "Ausente"
+      ],
+      "Offline": [
+         null,
+         "Desconectado"
+      ],
+      "Click to add new chat contacts": [
+         null,
+         "Haga clic para agregar nuevos contactos al chat"
+      ],
+      "Add a contact": [
+         null,
+         "Agregar un contacto"
+      ],
+      "Contact username": [
+         null,
+         "Nombre de usuario de contacto"
+      ],
+      "Add": [
+         null,
+         "Agregar"
+      ],
+      "Contact name": [
+         null,
+         "Nombre de contacto"
+      ],
+      "Search": [
+         null,
+         "Búsqueda"
+      ],
+      "No users found": [
+         null,
+         "Sin usuarios encontrados"
+      ],
+      "Click to add as a chat contact": [
+         null,
+         "Haga clic para agregar como un contacto de chat"
+      ],
+      "Click to open this room": [
+         null,
+         "Haga clic para abrir esta sala"
+      ],
+      "Show more information on this room": [
+         null,
+         "Mostrar mas información en esta sala"
+      ],
+      "Description:": [
+         null,
+         "Descripción"
+      ],
+      "Occupants:": [
+         null,
+         "Ocupantes:"
+      ],
+      "Features:": [
+         null,
+         "Características:"
+      ],
+      "Requires authentication": [
+         null,
+         "Autenticación requerida"
+      ],
+      "Hidden": [
+         null,
+         "Oculto"
+      ],
+      "Requires an invitation": [
+         null,
+         "Requiere una invitación"
+      ],
+      "Moderated": [
+         null,
+         "Moderado"
+      ],
+      "Non-anonymous": [
+         null,
+         "No usuario anónimo"
+      ],
+      "Open room": [
+         null,
+         "Abrir sala"
+      ],
+      "Permanent room": [
+         null,
+         "Sala permanente"
+      ],
+      "Public": [
+         null,
+         "Publico"
+      ],
+      "Semi-anonymous": [
+         null,
+         "Semi anónimo"
+      ],
+      "Temporary room": [
+         null,
+         "Sala temporal"
+      ],
+      "Unmoderated": [
+         null,
+         "Sin moderar"
+      ],
+      "Rooms": [
+         null,
+         "Salas"
+      ],
+      "Room name": [
+         null,
+         "Nombre de sala"
+      ],
+      "Nickname": [
+         null,
+         "Apodo"
+      ],
+      "Server": [
+         null,
+         "Servidor"
+      ],
+      "Join": [
+         null,
+         "Unirse"
+      ],
+      "Show rooms": [
+         null,
+         "Mostrar salas"
+      ],
+      "No rooms on %1$s": [
+         null,
+         "Sin salas en %1$s"
+      ],
+      "Rooms on %1$s": [
+         null,
+         "Salas en %1$s"
+      ],
+      "Set chatroom topic": [
+         null,
+         "Defina tema de sala de chat"
+      ],
+      "Kick user from chatroom": [
+         null,
+         "Expulsar usuario de sala de chat."
+      ],
+      "Ban user from chatroom": [
+         null,
+         "Bloquear usuario de sala de chat."
+      ],
+      "Message": [
+         null,
+         "Mensaje"
+      ],
+      "Save": [
+         null,
+         "Guardar"
+      ],
+      "Cancel": [
+         null,
+         "Cancelar"
+      ],
+      "An error occurred while trying to save the form.": [
+         null,
+         "Un error ocurrido mientras trataba de guardar el formulario."
+      ],
+      "This chatroom requires a password": [
+         null,
+         "Esta sala de chat requiere una contraseña."
+      ],
+      "Password: ": [
+         null,
+         "Contraseña: "
+      ],
+      "Submit": [
+         null,
+         "Enviar"
+      ],
+      "This room is not anonymous": [
+         null,
+         "Esta sala no es para usuarios anónimos"
+      ],
+      "This room now shows unavailable members": [
+         null,
+         "Esta sala ahora muestra los miembros no disponibles"
+      ],
+      "This room does not show unavailable members": [
+         null,
+         "Esta sala no muestra los miembros no disponibles"
+      ],
+      "Non-privacy-related room configuration has changed": [
+         null,
+         "Configuración de la sala para no relacionada con la privacidad ha sido cambiada"
+      ],
+      "Room logging is now enabled": [
+         null,
+         "El registro de la sala ahora está habilitada"
+      ],
+      "Room logging is now disabled": [
+         null,
+         "El registro de la sala ahora está deshabilitada"
+      ],
+      "This room is now non-anonymous": [
+         null,
+         "Esta sala ahora es para los usuarios no anónimos"
+      ],
+      "This room is now semi-anonymous": [
+         null,
+         "Esta sala ahora es para los usuarios semi-anónimos"
+      ],
+      "This room is now fully-anonymous": [
+         null,
+         "Esta sala ahora es para los usuarios completamente-anónimos"
+      ],
+      "A new room has been created": [
+         null,
+         "Una nueva sala ha sido creada"
+      ],
+      "Your nickname has been changed": [
+         null,
+         "Su apodo ha sido cambiado"
+      ],
+      "<strong>%1$s</strong> has been banned": [
+         null,
+         "<strong>%1$s</strong> ha sido prohibido"
+      ],
+      "<strong>%1$s</strong> has been kicked out": [
+         null,
+         "<strong>%1$s</strong> ha sido expulsado"
+      ],
+      "<strong>%1$s</strong> has been removed because of an affiliation change": [
+         null,
+         "<strong>%1$s</strong> ha sido eliminado debido a un cambio de afiliación"
+      ],
+      "<strong>%1$s</strong> has been removed for not being a member": [
+         null,
+         "<strong>%1$s</strong> ha sido eliminado debido a que no es miembro"
+      ],
+      "You have been banned from this room": [
+         null,
+         "Usted ha sido prohibido de esta sala"
+      ],
+      "You have been kicked from this room": [
+         null,
+         "Usted ha sido expulsado de esta sala"
+      ],
+      "You have been removed from this room because of an affiliation change": [
+         null,
+         "Usted ha sido eliminado de esta sala debido a un cambio de afiliación"
+      ],
+      "You have been removed from this room because the room has changed to members-only and you're not a member": [
+         null,
+         "Usted ha sido eliminado de esta sala debido a que la sala cambio su configuración a solo-miembros y usted no es un miembro"
+      ],
+      "You have been removed from this room because the MUC (Multi-user chat) service is being shut down.": [
+         null,
+         "Usted ha sido eliminado de esta sala debido al servicio MUC (Multi-user chat) está apagado."
+      ],
+      "You are not on the member list of this room": [
+         null,
+         "Usted no está en la lista de miembros de esta sala"
+      ],
+      "No nickname was specified": [
+         null,
+         "Sin apodo especificado"
+      ],
+      "You are not allowed to create new rooms": [
+         null,
+         "A usted no se le permite crear nuevas salas"
+      ],
+      "Your nickname doesn't conform to this room's policies": [
+         null,
+         "Su apodo no se ajusta a la política de esta sala"
+      ],
+      "Your nickname is already taken": [
+         null,
+         "Su apodo ya ha sido tomando por otro usuario"
+      ],
+      "This room does not (yet) exist": [
+         null,
+         "Esta sala (aún) no existe"
+      ],
+      "This room has reached it's maximum number of occupants": [
+         null,
+         "Esta sala ha alcanzado su número máximo de ocupantes"
+      ],
+      "Topic set by %1$s to: %2$s": [
+         null,
+         "Tema fijado por %1$s a: %2$s"
+      ],
+      "This user is a moderator": [
+         null,
+         "Este usuario es un moderador"
+      ],
+      "This user can send messages in this room": [
+         null,
+         "Este usuario puede enviar mensajes en esta sala"
+      ],
+      "This user can NOT send messages in this room": [
+         null,
+         "Este usuario NO puede enviar mensajes en esta"
+      ],
+      "Click to chat with this contact": [
+         null,
+         "Haga clic para conversar con este contacto"
+      ],
+      "Click to remove this contact": [
+         null,
+         "Haga clic para eliminar este contacto"
+      ],
+      "Contact requests": [
+         null,
+         "Solicitudes de contacto"
+      ],
+      "My contacts": [
+         null,
+         "Mi contactos"
+      ],
+      "Pending contacts": [
+         null,
+         "Contactos pendientes"
+      ],
+      "Custom status": [
+         null,
+         "Personalice estatus"
+      ],
+      "Click to change your chat status": [
+         null,
+         "Haga clic para cambiar su estatus de chat"
+      ],
+      "Click here to write a custom status message": [
+         null,
+         "Haga clic para escribir un mensaje de estatus personalizado"
+      ],
+      "online": [
+         null,
+         "en linea"
+      ],
+      "busy": [
+         null,
+         "ocupado"
+      ],
+      "away for long": [
+         null,
+         "lejos por mucho tiempo"
+      ],
+      "away": [
+         null,
+         "ausente"
+      ],
+      "I am %1$s": [
+         null,
+         "Yo soy %1$s"
+      ],
+      "Sign in": [
+         null,
+         "Registro"
+      ],
+      "XMPP/Jabber Username:": [
+         null,
+         "Nombre de usuario XMPP/Jabber"
+      ],
+      "Password:": [
+         null,
+         "Contraseña:"
+      ],
+      "Log In": [
+         null,
+         "Iniciar sesión"
+      ],
+      "BOSH Service URL:": [
+         null,
+         "URL del servicio BOSH:"
+      ],
+      "Connected": [
+         null,
+         "Conectado"
+      ],
+      "Disconnected": [
+         null,
+         "Desconectado"
+      ],
+      "Error": [
+         null,
+         "Error"
+      ],
+      "Connecting": [
+         null,
+         "Conectando"
+      ],
+      "Connection Failed": [
+         null,
+         "Conexión fallo"
+      ],
+      "Authenticating": [
+         null,
+         "Autenticando"
+      ],
+      "Authentication Failed": [
+         null,
+         "Autenticación fallo"
+      ],
+      "Disconnecting": [
+         null,
+         "Desconectando"
+      ],
+      "Attached": [
+         null,
+         "Adjuntado"
+      ],
+      "Online Contacts": [
+         null,
+         "Contactos en linea"
+      ]
+   }
+}

+ 493 - 0
locale/es/LC_MESSAGES/converse.po

@@ -0,0 +1,493 @@
+# Spanish translations for Converse.js package.
+# Copyright (C) 2013 Jan-Carel Brand
+# This file is distributed under the same license as the Converse.js package.
+# Leonardo J. Caballero G. <leonardocaballero@gmail.com>, 2013.
+msgid ""
+msgstr ""
+"Project-Id-Version: Converse.js 0.4\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2013-06-01 23:03+0200\n"
+"PO-Revision-Date: 2013-07-22 18:13-0400\n"
+"Last-Translator: Leonardo J. Caballero G. <leonardocaballero@gmail.com>\n"
+"Language-Team: ES <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"plural_forms: nplurals=2; plural=(n != 1);\n"
+"Language: es\n"
+"lang: es\n"
+"Language-Code: es\n"
+"Language-Name: Español\n"
+"Preferred-Encodings: utf-8 latin1\n"
+"Domain: converse\n"
+"domain: converse\n"
+"X-Is-Fallback-For: es-ar es-bo es-cl es-co es-cr es-do es-ec es-es es-sv es-gt es-hn es-mx es-ni es-pa es-py es-pe es-pr es-us es-uy es-ve\n"
+
+#: converse.js:397
+#: converse.js:1128
+msgid "Show this menu"
+msgstr "Mostrar este menú"
+
+#: converse.js:398
+#: converse.js:1129
+msgid "Write in the third person"
+msgstr "Escribir en tercera persona"
+
+#: converse.js:399
+#: converse.js:1133
+msgid "Remove messages"
+msgstr "Eliminar mensajes"
+
+#: converse.js:539
+msgid "Personal message"
+msgstr "Mensaje personal"
+
+#: converse.js:613
+msgid "Contacts"
+msgstr "Contactos"
+
+#: converse.js:618
+msgid "Online"
+msgstr "En linea"
+
+#: converse.js:619
+msgid "Busy"
+msgstr "Ocupado"
+
+#: converse.js:620
+msgid "Away"
+msgstr "Ausente"
+
+#: converse.js:621
+msgid "Offline"
+msgstr "Desconectado"
+
+#: converse.js:628
+msgid "Click to add new chat contacts"
+msgstr "Haga clic para agregar nuevos contactos al chat"
+
+#: converse.js:628
+msgid "Add a contact"
+msgstr "Agregar un contacto"
+
+#: converse.js:637
+msgid "Contact username"
+msgstr "Nombre de usuario de contacto"
+
+#: converse.js:638
+msgid "Add"
+msgstr "Agregar"
+
+#: converse.js:646
+msgid "Contact name"
+msgstr "Nombre de contacto"
+
+#: converse.js:647
+msgid "Search"
+msgstr "Búsqueda"
+
+#: converse.js:682
+msgid "No users found"
+msgstr "Sin usuarios encontrados"
+
+#: converse.js:689
+msgid "Click to add as a chat contact"
+msgstr "Haga clic para agregar como un contacto de chat"
+
+#: converse.js:753
+msgid "Click to open this room"
+msgstr "Haga clic para abrir esta sala"
+
+#: converse.js:755
+msgid "Show more information on this room"
+msgstr "Mostrar mas información en esta sala"
+
+#: converse.js:760
+msgid "Description:"
+msgstr "Descripción"
+
+#: converse.js:761
+msgid "Occupants:"
+msgstr "Ocupantes:"
+
+#: converse.js:762
+msgid "Features:"
+msgstr "Características:"
+
+#: converse.js:764
+msgid "Requires authentication"
+msgstr "Autenticación requerida"
+
+#: converse.js:767
+msgid "Hidden"
+msgstr "Oculto"
+
+#: converse.js:770
+msgid "Requires an invitation"
+msgstr "Requiere una invitación"
+
+#: converse.js:773
+msgid "Moderated"
+msgstr "Moderado"
+
+#: converse.js:776
+msgid "Non-anonymous"
+msgstr "No usuario anónimo"
+
+#: converse.js:779
+msgid "Open room"
+msgstr "Abrir sala"
+
+#: converse.js:782
+msgid "Permanent room"
+msgstr "Sala permanente"
+
+#: converse.js:785
+msgid "Public"
+msgstr "Publico"
+
+#: converse.js:788
+msgid "Semi-anonymous"
+msgstr "Semi anónimo"
+
+#: converse.js:791
+msgid "Temporary room"
+msgstr "Sala temporal"
+
+#: converse.js:794
+msgid "Unmoderated"
+msgstr "Sin moderar"
+
+#: converse.js:800
+msgid "Rooms"
+msgstr "Salas"
+
+#: converse.js:804
+msgid "Room name"
+msgstr "Nombre de sala"
+
+#: converse.js:805
+msgid "Nickname"
+msgstr "Apodo"
+
+#: converse.js:806
+msgid "Server"
+msgstr "Servidor"
+
+#: converse.js:807
+msgid "Join"
+msgstr "Unirse"
+
+#: converse.js:808
+msgid "Show rooms"
+msgstr "Mostrar salas"
+
+#. For translators: %1$s is a variable and will be replaced with the XMPP server name
+#: converse.js:841
+msgid "No rooms on %1$s"
+msgstr "Sin salas en %1$s"
+
+#. For translators: %1$s is a variable and will be
+#. replaced with the XMPP server name
+#: converse.js:856
+msgid "Rooms on %1$s"
+msgstr "Salas en %1$s"
+
+#: converse.js:1130
+msgid "Set chatroom topic"
+msgstr "Defina tema de sala de chat"
+
+#: converse.js:1131
+msgid "Kick user from chatroom"
+msgstr "Expulsar usuario de sala de chat."
+
+#: converse.js:1132
+msgid "Ban user from chatroom"
+msgstr "Prohibir usuario de sala de chat."
+
+#: converse.js:1159
+msgid "Message"
+msgstr "Mensaje"
+
+#: converse.js:1273
+#: converse.js:2318
+msgid "Save"
+msgstr "Guardar"
+
+#: converse.js:1274
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: converse.js:1321
+msgid "An error occurred while trying to save the form."
+msgstr "Un error ocurrido mientras trataba de guardar el formulario."
+
+#: converse.js:1367
+msgid "This chatroom requires a password"
+msgstr "Esta sala de chat requiere una contraseña."
+
+#: converse.js:1368
+msgid "Password: "
+msgstr "Contraseña: "
+
+#: converse.js:1369
+msgid "Submit"
+msgstr "Enviar"
+
+#: converse.js:1383
+msgid "This room is not anonymous"
+msgstr "Esta sala no es para usuarios anónimos"
+
+#: converse.js:1384
+msgid "This room now shows unavailable members"
+msgstr "Esta sala ahora muestra los miembros no disponibles"
+
+#: converse.js:1385
+msgid "This room does not show unavailable members"
+msgstr "Esta sala no muestra los miembros no disponibles"
+
+#: converse.js:1386
+msgid "Non-privacy-related room configuration has changed"
+msgstr "Configuración de la sala para no relacionada con la privacidad ha sido cambiada"
+
+#: converse.js:1387
+msgid "Room logging is now enabled"
+msgstr "El registro de la sala ahora está habilitada"
+
+#: converse.js:1388
+msgid "Room logging is now disabled"
+msgstr "El registro de la sala ahora está deshabilitada"
+
+#: converse.js:1389
+msgid "This room is now non-anonymous"
+msgstr "Esta sala ahora es para los usuarios no anónimos"
+
+#: converse.js:1390
+msgid "This room is now semi-anonymous"
+msgstr "Esta sala ahora es para los usuarios semi-anónimos"
+
+#: converse.js:1391
+msgid "This room is now fully-anonymous"
+msgstr "Esta sala ahora es para los usuarios completamente-anónimos"
+
+#: converse.js:1392
+msgid "A new room has been created"
+msgstr "Una nueva sala ha sido creada"
+
+#: converse.js:1393
+msgid "Your nickname has been changed"
+msgstr "Su apodo ha sido cambiado"
+
+#. For translations: %1$s will be replaced with the user's nickname
+#. Don't translate "strong"
+#. Example: <strong>jcbrand</strong> has been banned
+#: converse.js:1400
+msgid "<strong>%1$s</strong> has been banned"
+msgstr "<strong>%1$s</strong> ha sido prohibido"
+
+#. For translations: %1$s will be replaced with the user's nickname
+#. Don't translate "strong"
+#. Example: <strong>jcbrand</strong> has been kicked out
+#: converse.js:1404
+msgid "<strong>%1$s</strong> has been kicked out"
+msgstr "<strong>%1$s</strong> ha sido expulsado"
+
+#. For translations: %1$s will be replaced with the user's nickname
+#. Don't translate "strong"
+#. Example: <strong>jcbrand</strong> has been removed because of an affiliasion change
+#: converse.js:1408
+msgid "<strong>%1$s</strong> has been removed because of an affiliation change"
+msgstr "<strong>%1$s</strong> ha sido eliminado debido a un cambio de afiliación"
+
+#. For translations: %1$s will be replaced with the user's nickname
+#. Don't translate "strong"
+#. Example: <strong>jcbrand</strong> has been removed for not being a member
+#: converse.js:1412
+msgid "<strong>%1$s</strong> has been removed for not being a member"
+msgstr "<strong>%1$s</strong> ha sido eliminado debido a que no es miembro"
+
+#: converse.js:1416
+#: converse.js:1478
+msgid "You have been banned from this room"
+msgstr "Usted ha sido prohibido de esta sala"
+
+#: converse.js:1417
+msgid "You have been kicked from this room"
+msgstr "Usted ha sido expulsado de esta sala"
+
+#: converse.js:1418
+msgid "You have been removed from this room because of an affiliation change"
+msgstr "Usted ha sido eliminado de esta sala debido a un cambio de afiliación"
+
+#: converse.js:1419
+msgid "You have been removed from this room because the room has changed to members-only and you're not a member"
+msgstr "Usted ha sido eliminado de esta sala debido a que la sala cambio su configuración a solo-miembros y usted no es un miembro"
+
+#: converse.js:1420
+msgid "You have been removed from this room because the MUC (Multi-user chat) service is being shut down."
+msgstr "Usted ha sido eliminado de esta sala debido al servicio MUC (Multi-user chat) está apagado."
+
+#: converse.js:1476
+msgid "You are not on the member list of this room"
+msgstr "Usted no está en la lista de miembros de esta sala"
+
+#: converse.js:1482
+msgid "No nickname was specified"
+msgstr "Sin apodo especificado"
+
+#: converse.js:1486
+msgid "You are not allowed to create new rooms"
+msgstr "A usted no se le permite crear nuevas salas"
+
+#: converse.js:1488
+msgid "Your nickname doesn't conform to this room's policies"
+msgstr "Su apodo no se ajusta a la política de esta sala"
+
+#: converse.js:1490
+msgid "Your nickname is already taken"
+msgstr "Su apodo ya ha sido tomando por otro usuario"
+
+#: converse.js:1492
+msgid "This room does not (yet) exist"
+msgstr "Esta sala (aún) no existe"
+
+#: converse.js:1494
+msgid "This room has reached it's maximum number of occupants"
+msgstr "Esta sala ha alcanzado su número máximo de ocupantes"
+
+#. For translators: the %1$s and %2$s parts will get replaced by the user and topic text respectively
+#. Example: Topic set by JC Brand to: Hello World!
+#: converse.js:1571
+msgid "Topic set by %1$s to: %2$s"
+msgstr "Tema fijado por %1$s a: %2$s"
+
+#: converse.js:1587
+msgid "This user is a moderator"
+msgstr "Este usuario es un moderador"
+
+#: converse.js:1590
+msgid "This user can send messages in this room"
+msgstr "Este usuario puede enviar mensajes en esta sala"
+
+#: converse.js:1593
+msgid "This user can NOT send messages in this room"
+msgstr "Este usuario NO puede enviar mensajes en esta"
+
+#: converse.js:1796
+msgid "Click to chat with this contact"
+msgstr "Haga clic para conversar con este contacto"
+
+#: converse.js:1797
+#: converse.js:1801
+msgid "Click to remove this contact"
+msgstr "Haga clic para eliminar este contacto"
+
+#: converse.js:2163
+msgid "Contact requests"
+msgstr "Solicitudes de contacto"
+
+#: converse.js:2164
+msgid "My contacts"
+msgstr "Mi contactos"
+
+#: converse.js:2165
+msgid "Pending contacts"
+msgstr "Contactos pendientes"
+
+#: converse.js:2317
+msgid "Custom status"
+msgstr "Personalice estatus"
+
+#: converse.js:2323
+msgid "Click to change your chat status"
+msgstr "Haga clic para cambiar su estatus de chat"
+
+#: converse.js:2326
+msgid "Click here to write a custom status message"
+msgstr "Haga clic para escribir un mensaje de estatus personalizado"
+
+#: converse.js:2355
+#: converse.js:2363
+msgid "online"
+msgstr "en linea"
+
+#: converse.js:2357
+msgid "busy"
+msgstr "ocupado"
+
+#: converse.js:2359
+msgid "away for long"
+msgstr "lejos por mucho tiempo"
+
+#: converse.js:2361
+msgid "away"
+msgstr "ausente"
+
+#. For translators: the %1$s part gets replaced with the status
+#. Example, I am online
+#: converse.js:2375
+#: converse.js:2409
+msgid "I am %1$s"
+msgstr "Yo soy %1$s"
+
+#: converse.js:2480
+msgid "Sign in"
+msgstr "Registro"
+
+#: converse.js:2483
+msgid "XMPP/Jabber Username:"
+msgstr "Nombre de usuario XMPP/Jabber"
+
+#: converse.js:2485
+msgid "Password:"
+msgstr "Contraseña:"
+
+#: converse.js:2487
+msgid "Log In"
+msgstr "Iniciar sesión"
+
+#: converse.js:2491
+msgid "BOSH Service URL:"
+msgstr "URL del servicio BOSH:"
+
+#: converse.js:2503
+msgid "Connected"
+msgstr "Conectado"
+
+#: converse.js:2507
+msgid "Disconnected"
+msgstr "Desconectado"
+
+#: converse.js:2511
+msgid "Error"
+msgstr "Error"
+
+#: converse.js:2513
+msgid "Connecting"
+msgstr "Conectando"
+
+#: converse.js:2516
+msgid "Connection Failed"
+msgstr "Conexión fallo"
+
+#: converse.js:2518
+msgid "Authenticating"
+msgstr "Autenticando"
+
+#: converse.js:2521
+msgid "Authentication Failed"
+msgstr "Autenticación fallo"
+
+#: converse.js:2523
+msgid "Disconnecting"
+msgstr "Desconectando"
+
+#: converse.js:2525
+msgid "Attached"
+msgstr "Adjuntado"
+
+#: converse.js:2656
+msgid "Online Contacts"
+msgstr "Contactos en linea"
+

+ 459 - 0
locale/es/LC_MESSAGES/es.js

@@ -0,0 +1,459 @@
+(function (root, factory) {
+    define("es", ['jed'], function () {
+        var de = new Jed({
+            "domain": "converse",
+            "locale_data": {
+                "converse": {
+                    "": {
+                        "domain": "converse",
+                        "lang": "es",
+                        "plural_forms": "nplurals=2; plural=(n != 1);"
+                    },
+                    "Show this menu": [
+                        null,
+                        "Mostrar este menú"
+                    ],
+                    "Write in the third person": [
+                        null,
+                        "Escribir en tercera persona"
+                    ],
+                    "Remove messages": [
+                        null,
+                        "Eliminar mensajes"
+                    ],
+                    "Personal message": [
+                        null,
+                        "Mensaje personal"
+                    ],
+                    "Contacts": [
+                        null,
+                        "Contactos"
+                    ],
+                    "Online": [
+                        null,
+                        "En linea"
+                    ],
+                    "Busy": [
+                        null,
+                        "Ocupado"
+                    ],
+                    "Away": [
+                        null,
+                        "Ausente"
+                    ],
+                    "Offline": [
+                        null,
+                        "Desconectado"
+                    ],
+                    "Click to add new chat contacts": [
+                        null,
+                        "Haga clic para agregar nuevos contactos al chat"
+                    ],
+                    "Add a contact": [
+                        null,
+                        "Agregar un contacto"
+                    ],
+                    "Contact username": [
+                        null,
+                        "Nombre de usuario de contacto"
+                    ],
+                    "Add": [
+                        null,
+                        "Agregar"
+                    ],
+                    "Contact name": [
+                        null,
+                        "Nombre de contacto"
+                    ],
+                    "Search": [
+                        null,
+                        "Búsqueda"
+                    ],
+                    "No users found": [
+                        null,
+                        "Sin usuarios encontrados"
+                    ],
+                    "Click to add as a chat contact": [
+                        null,
+                        "Haga clic para agregar como un contacto de chat"
+                    ],
+                    "Click to open this room": [
+                        null,
+                        "Haga clic para abrir esta sala"
+                    ],
+                    "Show more information on this room": [
+                        null,
+                        "Mostrar mas información en esta sala"
+                    ],
+                    "Description:": [
+                        null,
+                        "Descripción"
+                    ],
+                    "Occupants:": [
+                        null,
+                        "Ocupantes:"
+                    ],
+                    "Features:": [
+                        null,
+                        "Características:"
+                    ],
+                    "Requires authentication": [
+                        null,
+                        "Autenticación requerida"
+                    ],
+                    "Hidden": [
+                        null,
+                        "Oculto"
+                    ],
+                    "Requires an invitation": [
+                        null,
+                        "Requiere una invitación"
+                    ],
+                    "Moderated": [
+                        null,
+                        "Moderado"
+                    ],
+                    "Non-anonymous": [
+                        null,
+                        "No usuario anónimo"
+                    ],
+                    "Open room": [
+                        null,
+                        "Abrir sala"
+                    ],
+                    "Permanent room": [
+                        null,
+                        "Sala permanente"
+                    ],
+                    "Public": [
+                        null,
+                        "Publico"
+                    ],
+                    "Semi-anonymous": [
+                        null,
+                        "Semi anónimo"
+                    ],
+                    "Temporary room": [
+                        null,
+                        "Sala temporal"
+                    ],
+                    "Unmoderated": [
+                        null,
+                        "Sin moderar"
+                    ],
+                    "Rooms": [
+                        null,
+                        "Salas"
+                    ],
+                    "Room name": [
+                        null,
+                        "Nombre de sala"
+                    ],
+                    "Nickname": [
+                        null,
+                        "Apodo"
+                    ],
+                    "Server": [
+                        null,
+                        "Servidor"
+                    ],
+                    "Join": [
+                        null,
+                        "Unirse"
+                    ],
+                    "Show rooms": [
+                        null,
+                        "Mostrar salas"
+                    ],
+                    "No rooms on %1$s": [
+                        null,
+                        "Sin salas en %1$s"
+                    ],
+                    "Rooms on %1$s": [
+                        null,
+                        "Salas en %1$s"
+                    ],
+                    "Set chatroom topic": [
+                        null,
+                        "Defina tema de sala de chat"
+                    ],
+                    "Kick user from chatroom": [
+                        null,
+                        "Expulsar usuario de sala de chat."
+                    ],
+                    "Ban user from chatroom": [
+                        null,
+                        "Prohibir usuario de sala de chat."
+                    ],
+                    "Message": [
+                        null,
+                        "Mensaje"
+                    ],
+                    "Save": [
+                        null,
+                        "Guardar"
+                    ],
+                    "Cancel": [
+                        null,
+                        "Cancelar"
+                    ],
+                    "An error occurred while trying to save the form.": [
+                        null,
+                        "Un error ocurrido mientras trataba de guardar el formulario."
+                    ],
+                    "This chatroom requires a password": [
+                        null,
+                        "Esta sala de chat requiere una contraseña."
+                    ],
+                    "Password: ": [
+                        null,
+                        "Contraseña: "
+                    ],
+                    "Submit": [
+                        null,
+                        "Enviar"
+                    ],
+                    "This room is not anonymous": [
+                        null,
+                        "Esta sala no es para usuarios anónimos"
+                    ],
+                    "This room now shows unavailable members": [
+                        null,
+                        "Esta sala ahora muestra los miembros no disponibles"
+                    ],
+                    "This room does not show unavailable members": [
+                        null,
+                        "Esta sala no muestra los miembros no disponibles"
+                    ],
+                    "Non-privacy-related room configuration has changed": [
+                        null,
+                        "Configuración de la sala para no relacionada con la privacidad ha sido cambiada"
+                    ],
+                    "Room logging is now enabled": [
+                        null,
+                        "El registro de la sala ahora está habilitada"
+                    ],
+                    "Room logging is now disabled": [
+                        null,
+                        "El registro de la sala ahora está deshabilitada"
+                    ],
+                    "This room is now non-anonymous": [
+                        null,
+                        "Esta sala ahora es para los usuarios no anónimos"
+                    ],
+                    "This room is now semi-anonymous": [
+                        null,
+                        "Esta sala ahora es para los usuarios semi-anónimos"
+                    ],
+                    "This room is now fully-anonymous": [
+                        null,
+                        "Esta sala ahora es para los usuarios completamente-anónimos"
+                    ],
+                    "A new room has been created": [
+                        null,
+                        "Una nueva sala ha sido creada"
+                    ],
+                    "Your nickname has been changed": [
+                        null,
+                        "Su apodo ha sido cambiado"
+                    ],
+                    "<strong>%1$s</strong> has been banned": [
+                        null,
+                        "<strong>%1$s</strong> ha sido prohibido"
+                    ],
+                    "<strong>%1$s</strong> has been kicked out": [
+                        null,
+                        "<strong>%1$s</strong> ha sido expulsado"
+                    ],
+                    "<strong>%1$s</strong> has been removed because of an affiliation change": [
+                        null,
+                        "<strong>%1$s</strong> ha sido eliminado debido a un cambio de afiliación"
+                    ],
+                    "<strong>%1$s</strong> has been removed for not being a member": [
+                        null,
+                        "<strong>%1$s</strong> ha sido eliminado debido a que no es miembro"
+                    ],
+                    "You have been banned from this room": [
+                        null,
+                        "Usted ha sido prohibido de esta sala"
+                    ],
+                    "You have been kicked from this room": [
+                        null,
+                        "Usted ha sido expulsado de esta sala"
+                    ],
+                    "You have been removed from this room because of an affiliation change": [
+                        null,
+                        "Usted ha sido eliminado de esta sala debido a un cambio de afiliación"
+                    ],
+                    "You have been removed from this room because the room has changed to members-only and you're not a member": [
+                        null,
+                        "Usted ha sido eliminado de esta sala debido a que la sala cambio su configuración a solo-miembros y usted no es un miembro"
+                    ],
+                    "You have been removed from this room because the MUC (Multi-user chat) service is being shut down.": [
+                        null,
+                        "Usted ha sido eliminado de esta sala debido al servicio MUC (Multi-user chat) está apagado."
+                    ],
+                    "You are not on the member list of this room": [
+                        null,
+                        "Usted no está en la lista de miembros de esta sala"
+                    ],
+                    "No nickname was specified": [
+                        null,
+                        "Sin apodo especificado"
+                    ],
+                    "You are not allowed to create new rooms": [
+                        null,
+                        "A usted no se le permite crear nuevas salas"
+                    ],
+                    "Your nickname doesn't conform to this room's policies": [
+                        null,
+                        "Su apodo no se ajusta a la política de esta sala"
+                    ],
+                    "Your nickname is already taken": [
+                        null,
+                        "Su apodo ya ha sido tomando por otro usuario"
+                    ],
+                    "This room does not (yet) exist": [
+                        null,
+                        "Esta sala (aún) no existe"
+                    ],
+                    "This room has reached it's maximum number of occupants": [
+                        null,
+                        "Esta sala ha alcanzado su número máximo de ocupantes"
+                    ],
+                    "Topic set by %1$s to: %2$s": [
+                        null,
+                        "Tema fijado por %1$s a: %2$s"
+                    ],
+                    "This user is a moderator": [
+                        null,
+                        "Este usuario es un moderador"
+                    ],
+                    "This user can send messages in this room": [
+                        null,
+                        "Este usuario puede enviar mensajes en esta sala"
+                    ],
+                    "This user can NOT send messages in this room": [
+                        null,
+                        "Este usuario NO puede enviar mensajes en esta"
+                    ],
+                    "Click to chat with this contact": [
+                        null,
+                        "Haga clic para conversar con este contacto"
+                    ],
+                    "Click to remove this contact": [
+                        null,
+                        "Haga clic para eliminar este contacto"
+                    ],
+                    "Contact requests": [
+                        null,
+                        "Solicitudes de contacto"
+                    ],
+                    "My contacts": [
+                        null,
+                        "Mi contactos"
+                    ],
+                    "Pending contacts": [
+                        null,
+                        "Contactos pendientes"
+                    ],
+                    "Custom status": [
+                        null,
+                        "Personalice estatus"
+                    ],
+                    "Click to change your chat status": [
+                        null,
+                        "Haga clic para cambiar su estatus de chat"
+                    ],
+                    "Click here to write a custom status message": [
+                        null,
+                        "Haga clic para escribir un mensaje de estatus personalizado"
+                    ],
+                    "online": [
+                        null,
+                        "en linea"
+                    ],
+                    "busy": [
+                        null,
+                        "ocupado"
+                    ],
+                    "away for long": [
+                        null,
+                        "lejos por mucho tiempo"
+                    ],
+                    "away": [
+                        null,
+                        "ausente"
+                    ],
+                    "I am %1$s": [
+                        null,
+                        "Yo soy %1$s"
+                    ],
+                    "Sign in": [
+                        null,
+                        "Registro"
+                    ],
+                    "XMPP/Jabber Username:": [
+                        null,
+                        "Nombre de usuario XMPP/Jabber"
+                    ],
+                    "Password:": [
+                        null,
+                        "Contraseña:"
+                    ],
+                    "Log In": [
+                        null,
+                        "Iniciar sesión"
+                    ],
+                    "BOSH Service URL:": [
+                        null,
+                        "URL del servicio BOSH:"
+                    ],
+                    "Connected": [
+                        null,
+                        "Conectado"
+                    ],
+                    "Disconnected": [
+                        null,
+                        "Desconectado"
+                    ],
+                    "Error": [
+                        null,
+                        "Error"
+                    ],
+                    "Connecting": [
+                        null,
+                        "Conectando"
+                    ],
+                    "Connection Failed": [
+                        null,
+                        "Conexión fallo"
+                    ],
+                    "Authenticating": [
+                        null,
+                        "Autenticando"
+                    ],
+                    "Authentication Failed": [
+                        null,
+                        "Autenticación fallo"
+                    ],
+                    "Disconnecting": [
+                        null,
+                        "Desconectando"
+                    ],
+                    "Attached": [
+                        null,
+                        "Adjuntado"
+                    ],
+                    "Online Contacts": [
+                        null,
+                        "Contactos en linea"
+                    ]
+                }
+            }
+        });
+        return factory(de);
+    });
+}(this, function (de) { 
+    return de; 
+}));

+ 457 - 0
locale/hu/LC_MESSAGES/converse.json

@@ -0,0 +1,457 @@
+{
+   "converse": {
+      "": {
+         "Project-Id-Version": "Converse.js 0.4",
+         "Report-Msgid-Bugs-To": "",
+         "POT-Creation-Date": "2013-06-01 23:03+0200",
+         "PO-Revision-Date": "2013-06-02 19:45+0200",
+         "Last-Translator": "JC Brand <jc@opkode.com>",
+         "Language-Team": "Hungarian",
+         "Language": "hu",
+         "MIME-Version": "1.0",
+         "Content-Type": "text/plain; charset=ASCII",
+         "Content-Transfer-Encoding": "8bit",
+         "Plural-Forms": "nplurals=2; plural=(n != 1);"
+      },
+      "Show this menu": [
+         null,
+         ""
+      ],
+      "Write in the third person": [
+         null,
+         ""
+      ],
+      "Remove messages": [
+         null,
+         ""
+      ],
+      "Personal message": [
+         null,
+         ""
+      ],
+      "Contacts": [
+         null,
+         ""
+      ],
+      "Online": [
+         null,
+         ""
+      ],
+      "Busy": [
+         null,
+         ""
+      ],
+      "Away": [
+         null,
+         ""
+      ],
+      "Offline": [
+         null,
+         ""
+      ],
+      "Click to add new chat contacts": [
+         null,
+         ""
+      ],
+      "Add a contact": [
+         null,
+         ""
+      ],
+      "Contact username": [
+         null,
+         ""
+      ],
+      "Add": [
+         null,
+         ""
+      ],
+      "Contact name": [
+         null,
+         ""
+      ],
+      "Search": [
+         null,
+         ""
+      ],
+      "No users found": [
+         null,
+         ""
+      ],
+      "Click to add as a chat contact": [
+         null,
+         ""
+      ],
+      "Click to open this room": [
+         null,
+         ""
+      ],
+      "Show more information on this room": [
+         null,
+         ""
+      ],
+      "Description:": [
+         null,
+         ""
+      ],
+      "Occupants:": [
+         null,
+         ""
+      ],
+      "Features:": [
+         null,
+         ""
+      ],
+      "Requires authentication": [
+         null,
+         ""
+      ],
+      "Hidden": [
+         null,
+         ""
+      ],
+      "Requires an invitation": [
+         null,
+         ""
+      ],
+      "Moderated": [
+         null,
+         ""
+      ],
+      "Non-anonymous": [
+         null,
+         ""
+      ],
+      "Open room": [
+         null,
+         ""
+      ],
+      "Permanent room": [
+         null,
+         ""
+      ],
+      "Public": [
+         null,
+         ""
+      ],
+      "Semi-anonymous": [
+         null,
+         ""
+      ],
+      "Temporary room": [
+         null,
+         ""
+      ],
+      "Unmoderated": [
+         null,
+         ""
+      ],
+      "Rooms": [
+         null,
+         ""
+      ],
+      "Room name": [
+         null,
+         ""
+      ],
+      "Nickname": [
+         null,
+         ""
+      ],
+      "Server": [
+         null,
+         ""
+      ],
+      "Join": [
+         null,
+         ""
+      ],
+      "Show rooms": [
+         null,
+         ""
+      ],
+      "No rooms on %1$s": [
+         null,
+         ""
+      ],
+      "Rooms on %1$s": [
+         null,
+         ""
+      ],
+      "Set chatroom topic": [
+         null,
+         ""
+      ],
+      "Kick user from chatroom": [
+         null,
+         ""
+      ],
+      "Ban user from chatroom": [
+         null,
+         ""
+      ],
+      "Message": [
+         null,
+         ""
+      ],
+      "Save": [
+         null,
+         ""
+      ],
+      "Cancel": [
+         null,
+         ""
+      ],
+      "An error occurred while trying to save the form.": [
+         null,
+         ""
+      ],
+      "This chatroom requires a password": [
+         null,
+         ""
+      ],
+      "Password: ": [
+         null,
+         ""
+      ],
+      "Submit": [
+         null,
+         ""
+      ],
+      "This room is not anonymous": [
+         null,
+         ""
+      ],
+      "This room now shows unavailable members": [
+         null,
+         ""
+      ],
+      "This room does not show unavailable members": [
+         null,
+         ""
+      ],
+      "Non-privacy-related room configuration has changed": [
+         null,
+         ""
+      ],
+      "Room logging is now enabled": [
+         null,
+         ""
+      ],
+      "Room logging is now disabled": [
+         null,
+         ""
+      ],
+      "This room is now non-anonymous": [
+         null,
+         ""
+      ],
+      "This room is now semi-anonymous": [
+         null,
+         ""
+      ],
+      "This room is now fully-anonymous": [
+         null,
+         ""
+      ],
+      "A new room has been created": [
+         null,
+         ""
+      ],
+      "Your nickname has been changed": [
+         null,
+         ""
+      ],
+      "<strong>%1$s</strong> has been banned": [
+         null,
+         ""
+      ],
+      "<strong>%1$s</strong> has been kicked out": [
+         null,
+         ""
+      ],
+      "<strong>%1$s</strong> has been removed because of an affiliation change": [
+         null,
+         ""
+      ],
+      "<strong>%1$s</strong> has been removed for not being a member": [
+         null,
+         ""
+      ],
+      "You have been banned from this room": [
+         null,
+         ""
+      ],
+      "You have been kicked from this room": [
+         null,
+         ""
+      ],
+      "You have been removed from this room because of an affiliation change": [
+         null,
+         ""
+      ],
+      "You have been removed from this room because the room has changed to members-only and you're not a member": [
+         null,
+         ""
+      ],
+      "You have been removed from this room because the MUC (Multi-user chat) service is being shut down.": [
+         null,
+         ""
+      ],
+      "You are not on the member list of this room": [
+         null,
+         ""
+      ],
+      "No nickname was specified": [
+         null,
+         ""
+      ],
+      "You are not allowed to create new rooms": [
+         null,
+         ""
+      ],
+      "Your nickname doesn't conform to this room's policies": [
+         null,
+         ""
+      ],
+      "Your nickname is already taken": [
+         null,
+         ""
+      ],
+      "This room does not (yet) exist": [
+         null,
+         ""
+      ],
+      "This room has reached it's maximum number of occupants": [
+         null,
+         ""
+      ],
+      "Topic set by %1$s to: %2$s": [
+         null,
+         ""
+      ],
+      "This user is a moderator": [
+         null,
+         ""
+      ],
+      "This user can send messages in this room": [
+         null,
+         ""
+      ],
+      "This user can NOT send messages in this room": [
+         null,
+         ""
+      ],
+      "Click to chat with this contact": [
+         null,
+         ""
+      ],
+      "Click to remove this contact": [
+         null,
+         ""
+      ],
+      "Contact requests": [
+         null,
+         ""
+      ],
+      "My contacts": [
+         null,
+         ""
+      ],
+      "Pending contacts": [
+         null,
+         ""
+      ],
+      "Custom status": [
+         null,
+         ""
+      ],
+      "Click to change your chat status": [
+         null,
+         ""
+      ],
+      "Click here to write a custom status message": [
+         null,
+         ""
+      ],
+      "online": [
+         null,
+         ""
+      ],
+      "busy": [
+         null,
+         ""
+      ],
+      "away for long": [
+         null,
+         ""
+      ],
+      "away": [
+         null,
+         ""
+      ],
+      "I am %1$s": [
+         null,
+         ""
+      ],
+      "Sign in": [
+         null,
+         ""
+      ],
+      "XMPP/Jabber Username:": [
+         null,
+         ""
+      ],
+      "Password:": [
+         null,
+         ""
+      ],
+      "Log In": [
+         null,
+         ""
+      ],
+      "BOSH Service URL:": [
+         null,
+         ""
+      ],
+      "Connected": [
+         null,
+         ""
+      ],
+      "Disconnected": [
+         null,
+         ""
+      ],
+      "Error": [
+         null,
+         ""
+      ],
+      "Connecting": [
+         null,
+         ""
+      ],
+      "Connection Failed": [
+         null,
+         ""
+      ],
+      "Authenticating": [
+         null,
+         ""
+      ],
+      "Authentication Failed": [
+         null,
+         ""
+      ],
+      "Disconnecting": [
+         null,
+         ""
+      ],
+      "Attached": [
+         null,
+         ""
+      ],
+      "Online Contacts": [
+         null,
+         ""
+      ]
+   }
+}

+ 481 - 0
locale/hu/LC_MESSAGES/converse.po

@@ -0,0 +1,481 @@
+# Hungarian translations for Converse.js package.
+# Copyright (C) 2013 Jan-Carel Brand
+# This file is distributed under the same license as the Converse.js package.
+# JC Brand <jc@opkode.com>, 2013.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Converse.js 0.4\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2013-06-01 23:03+0200\n"
+"PO-Revision-Date: 2013-06-02 19:45+0200\n"
+"Last-Translator: JC Brand <jc@opkode.com>\n"
+"Language-Team: Hungarian\n"
+"Language: hu\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ASCII\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: converse.js:397 converse.js:1128
+msgid "Show this menu"
+msgstr ""
+
+#: converse.js:398 converse.js:1129
+msgid "Write in the third person"
+msgstr ""
+
+#: converse.js:399 converse.js:1133
+msgid "Remove messages"
+msgstr ""
+
+#: converse.js:539
+msgid "Personal message"
+msgstr ""
+
+#: converse.js:613
+msgid "Contacts"
+msgstr ""
+
+#: converse.js:618
+msgid "Online"
+msgstr ""
+
+#: converse.js:619
+msgid "Busy"
+msgstr ""
+
+#: converse.js:620
+msgid "Away"
+msgstr ""
+
+#: converse.js:621
+msgid "Offline"
+msgstr ""
+
+#: converse.js:628
+msgid "Click to add new chat contacts"
+msgstr ""
+
+#: converse.js:628
+msgid "Add a contact"
+msgstr ""
+
+#: converse.js:637
+msgid "Contact username"
+msgstr ""
+
+#: converse.js:638
+msgid "Add"
+msgstr ""
+
+#: converse.js:646
+msgid "Contact name"
+msgstr ""
+
+#: converse.js:647
+msgid "Search"
+msgstr ""
+
+#: converse.js:682
+msgid "No users found"
+msgstr ""
+
+#: converse.js:689
+msgid "Click to add as a chat contact"
+msgstr ""
+
+#: converse.js:753
+msgid "Click to open this room"
+msgstr ""
+
+#: converse.js:755
+msgid "Show more information on this room"
+msgstr ""
+
+#: converse.js:760
+msgid "Description:"
+msgstr ""
+
+#: converse.js:761
+msgid "Occupants:"
+msgstr ""
+
+#: converse.js:762
+msgid "Features:"
+msgstr ""
+
+#: converse.js:764
+msgid "Requires authentication"
+msgstr ""
+
+#: converse.js:767
+msgid "Hidden"
+msgstr ""
+
+#: converse.js:770
+msgid "Requires an invitation"
+msgstr ""
+
+#: converse.js:773
+msgid "Moderated"
+msgstr ""
+
+#: converse.js:776
+msgid "Non-anonymous"
+msgstr ""
+
+#: converse.js:779
+msgid "Open room"
+msgstr ""
+
+#: converse.js:782
+msgid "Permanent room"
+msgstr ""
+
+#: converse.js:785
+msgid "Public"
+msgstr ""
+
+#: converse.js:788
+msgid "Semi-anonymous"
+msgstr ""
+
+#: converse.js:791
+msgid "Temporary room"
+msgstr ""
+
+#: converse.js:794
+msgid "Unmoderated"
+msgstr ""
+
+#: converse.js:800
+msgid "Rooms"
+msgstr ""
+
+#: converse.js:804
+msgid "Room name"
+msgstr ""
+
+#: converse.js:805
+msgid "Nickname"
+msgstr ""
+
+#: converse.js:806
+msgid "Server"
+msgstr ""
+
+#: converse.js:807
+msgid "Join"
+msgstr ""
+
+#: converse.js:808
+msgid "Show rooms"
+msgstr ""
+
+#. For translators: %1$s is a variable and will be replaced with the XMPP server name
+#: converse.js:841
+msgid "No rooms on %1$s"
+msgstr ""
+
+#. For translators: %1$s is a variable and will be
+#. replaced with the XMPP server name
+#: converse.js:856
+msgid "Rooms on %1$s"
+msgstr ""
+
+#: converse.js:1130
+msgid "Set chatroom topic"
+msgstr ""
+
+#: converse.js:1131
+msgid "Kick user from chatroom"
+msgstr ""
+
+#: converse.js:1132
+msgid "Ban user from chatroom"
+msgstr ""
+
+#: converse.js:1159
+msgid "Message"
+msgstr ""
+
+#: converse.js:1273 converse.js:2318
+msgid "Save"
+msgstr ""
+
+#: converse.js:1274
+msgid "Cancel"
+msgstr ""
+
+#: converse.js:1321
+msgid "An error occurred while trying to save the form."
+msgstr ""
+
+#: converse.js:1367
+msgid "This chatroom requires a password"
+msgstr ""
+
+#: converse.js:1368
+msgid "Password: "
+msgstr ""
+
+#: converse.js:1369
+msgid "Submit"
+msgstr ""
+
+#: converse.js:1383
+msgid "This room is not anonymous"
+msgstr ""
+
+#: converse.js:1384
+msgid "This room now shows unavailable members"
+msgstr ""
+
+#: converse.js:1385
+msgid "This room does not show unavailable members"
+msgstr ""
+
+#: converse.js:1386
+msgid "Non-privacy-related room configuration has changed"
+msgstr ""
+
+#: converse.js:1387
+msgid "Room logging is now enabled"
+msgstr ""
+
+#: converse.js:1388
+msgid "Room logging is now disabled"
+msgstr ""
+
+#: converse.js:1389
+msgid "This room is now non-anonymous"
+msgstr ""
+
+#: converse.js:1390
+msgid "This room is now semi-anonymous"
+msgstr ""
+
+#: converse.js:1391
+msgid "This room is now fully-anonymous"
+msgstr ""
+
+#: converse.js:1392
+msgid "A new room has been created"
+msgstr ""
+
+#: converse.js:1393
+msgid "Your nickname has been changed"
+msgstr ""
+
+#. For translations: %1$s will be replaced with the user's nickname
+#. Don't translate "strong"
+#. Example: <strong>jcbrand</strong> has been banned
+#: converse.js:1400
+msgid "<strong>%1$s</strong> has been banned"
+msgstr ""
+
+#. For translations: %1$s will be replaced with the user's nickname
+#. Don't translate "strong"
+#. Example: <strong>jcbrand</strong> has been kicked out
+#: converse.js:1404
+msgid "<strong>%1$s</strong> has been kicked out"
+msgstr ""
+
+#. For translations: %1$s will be replaced with the user's nickname
+#. Don't translate "strong"
+#. Example: <strong>jcbrand</strong> has been removed because of an affiliasion change
+#: converse.js:1408
+msgid "<strong>%1$s</strong> has been removed because of an affiliation change"
+msgstr ""
+
+#. For translations: %1$s will be replaced with the user's nickname
+#. Don't translate "strong"
+#. Example: <strong>jcbrand</strong> has been removed for not being a member
+#: converse.js:1412
+msgid "<strong>%1$s</strong> has been removed for not being a member"
+msgstr ""
+
+#: converse.js:1416 converse.js:1478
+msgid "You have been banned from this room"
+msgstr ""
+
+#: converse.js:1417
+msgid "You have been kicked from this room"
+msgstr ""
+
+#: converse.js:1418
+msgid "You have been removed from this room because of an affiliation change"
+msgstr ""
+
+#: converse.js:1419
+msgid ""
+"You have been removed from this room because the room has changed to members-"
+"only and you're not a member"
+msgstr ""
+
+#: converse.js:1420
+msgid ""
+"You have been removed from this room because the MUC (Multi-user chat) "
+"service is being shut down."
+msgstr ""
+
+#: converse.js:1476
+msgid "You are not on the member list of this room"
+msgstr ""
+
+#: converse.js:1482
+msgid "No nickname was specified"
+msgstr ""
+
+#: converse.js:1486
+msgid "You are not allowed to create new rooms"
+msgstr ""
+
+#: converse.js:1488
+msgid "Your nickname doesn't conform to this room's policies"
+msgstr ""
+
+#: converse.js:1490
+msgid "Your nickname is already taken"
+msgstr ""
+
+#: converse.js:1492
+msgid "This room does not (yet) exist"
+msgstr ""
+
+#: converse.js:1494
+msgid "This room has reached it's maximum number of occupants"
+msgstr ""
+
+#. For translators: the %1$s and %2$s parts will get replaced by the user and topic text respectively
+#. Example: Topic set by JC Brand to: Hello World!
+#: converse.js:1571
+msgid "Topic set by %1$s to: %2$s"
+msgstr ""
+
+#: converse.js:1587
+msgid "This user is a moderator"
+msgstr ""
+
+#: converse.js:1590
+msgid "This user can send messages in this room"
+msgstr ""
+
+#: converse.js:1593
+msgid "This user can NOT send messages in this room"
+msgstr ""
+
+#: converse.js:1796
+msgid "Click to chat with this contact"
+msgstr ""
+
+#: converse.js:1797 converse.js:1801
+msgid "Click to remove this contact"
+msgstr ""
+
+#: converse.js:2163
+msgid "Contact requests"
+msgstr ""
+
+#: converse.js:2164
+msgid "My contacts"
+msgstr ""
+
+#: converse.js:2165
+msgid "Pending contacts"
+msgstr ""
+
+#: converse.js:2317
+msgid "Custom status"
+msgstr ""
+
+#: converse.js:2323
+msgid "Click to change your chat status"
+msgstr ""
+
+#: converse.js:2326
+msgid "Click here to write a custom status message"
+msgstr ""
+
+#: converse.js:2355 converse.js:2363
+msgid "online"
+msgstr ""
+
+#: converse.js:2357
+msgid "busy"
+msgstr ""
+
+#: converse.js:2359
+msgid "away for long"
+msgstr ""
+
+#: converse.js:2361
+msgid "away"
+msgstr ""
+
+#. For translators: the %1$s part gets replaced with the status
+#. Example, I am online
+#: converse.js:2375 converse.js:2409
+msgid "I am %1$s"
+msgstr ""
+
+#: converse.js:2480
+msgid "Sign in"
+msgstr ""
+
+#: converse.js:2483
+msgid "XMPP/Jabber Username:"
+msgstr ""
+
+#: converse.js:2485
+msgid "Password:"
+msgstr ""
+
+#: converse.js:2487
+msgid "Log In"
+msgstr ""
+
+#: converse.js:2491
+msgid "BOSH Service URL:"
+msgstr ""
+
+#: converse.js:2503
+msgid "Connected"
+msgstr ""
+
+#: converse.js:2507
+msgid "Disconnected"
+msgstr ""
+
+#: converse.js:2511
+msgid "Error"
+msgstr ""
+
+#: converse.js:2513
+msgid "Connecting"
+msgstr ""
+
+#: converse.js:2516
+msgid "Connection Failed"
+msgstr ""
+
+#: converse.js:2518
+msgid "Authenticating"
+msgstr ""
+
+#: converse.js:2521
+msgid "Authentication Failed"
+msgstr ""
+
+#: converse.js:2523
+msgid "Disconnecting"
+msgstr ""
+
+#: converse.js:2525
+msgid "Attached"
+msgstr ""
+
+#: converse.js:2656
+msgid "Online Contacts"
+msgstr ""

+ 459 - 0
locale/hu/LC_MESSAGES/hu.js

@@ -0,0 +1,459 @@
+(function (root, factory) {
+    define("hu", ['jed'], function () {
+        var hu = new Jed({
+            "domain": "converse",
+            "locale_data": {
+                "converse": {
+                    "": {
+                        "Content-Type": "text/plain; charset=ASCII",
+                        "Content-Transfer-Encoding": "8bit",
+                        "Plural-Forms": "nplurals=2; plural=(n != 1);"
+                    },
+                    "Show this menu": [
+                        null,
+                        ""
+                    ],
+                    "Write in the third person": [
+                        null,
+                        ""
+                    ],
+                    "Remove messages": [
+                        null,
+                        ""
+                    ],
+                    "Personal message": [
+                        null,
+                        ""
+                    ],
+                    "Contacts": [
+                        null,
+                        ""
+                    ],
+                    "Online": [
+                        null,
+                        ""
+                    ],
+                    "Busy": [
+                        null,
+                        ""
+                    ],
+                    "Away": [
+                        null,
+                        ""
+                    ],
+                    "Offline": [
+                        null,
+                        ""
+                    ],
+                    "Click to add new chat contacts": [
+                        null,
+                        ""
+                    ],
+                    "Add a contact": [
+                        null,
+                        ""
+                    ],
+                    "Contact username": [
+                        null,
+                        ""
+                    ],
+                    "Add": [
+                        null,
+                        ""
+                    ],
+                    "Contact name": [
+                        null,
+                        ""
+                    ],
+                    "Search": [
+                        null,
+                        ""
+                    ],
+                    "No users found": [
+                        null,
+                        ""
+                    ],
+                    "Click to add as a chat contact": [
+                        null,
+                        ""
+                    ],
+                    "Click to open this room": [
+                        null,
+                        ""
+                    ],
+                    "Show more information on this room": [
+                        null,
+                        ""
+                    ],
+                    "Description:": [
+                        null,
+                        ""
+                    ],
+                    "Occupants:": [
+                        null,
+                        ""
+                    ],
+                    "Features:": [
+                        null,
+                        ""
+                    ],
+                    "Requires authentication": [
+                        null,
+                        ""
+                    ],
+                    "Hidden": [
+                        null,
+                        ""
+                    ],
+                    "Requires an invitation": [
+                        null,
+                        ""
+                    ],
+                    "Moderated": [
+                        null,
+                        ""
+                    ],
+                    "Non-anonymous": [
+                        null,
+                        ""
+                    ],
+                    "Open room": [
+                        null,
+                        ""
+                    ],
+                    "Permanent room": [
+                        null,
+                        ""
+                    ],
+                    "Public": [
+                        null,
+                        ""
+                    ],
+                    "Semi-anonymous": [
+                        null,
+                        ""
+                    ],
+                    "Temporary room": [
+                        null,
+                        ""
+                    ],
+                    "Unmoderated": [
+                        null,
+                        ""
+                    ],
+                    "Rooms": [
+                        null,
+                        ""
+                    ],
+                    "Room name": [
+                        null,
+                        ""
+                    ],
+                    "Nickname": [
+                        null,
+                        ""
+                    ],
+                    "Server": [
+                        null,
+                        ""
+                    ],
+                    "Join": [
+                        null,
+                        ""
+                    ],
+                    "Show rooms": [
+                        null,
+                        ""
+                    ],
+                    "No rooms on %1$s": [
+                        null,
+                        ""
+                    ],
+                    "Rooms on %1$s": [
+                        null,
+                        ""
+                    ],
+                    "Set chatroom topic": [
+                        null,
+                        ""
+                    ],
+                    "Kick user from chatroom": [
+                        null,
+                        ""
+                    ],
+                    "Ban user from chatroom": [
+                        null,
+                        ""
+                    ],
+                    "Message": [
+                        null,
+                        ""
+                    ],
+                    "Save": [
+                        null,
+                        ""
+                    ],
+                    "Cancel": [
+                        null,
+                        ""
+                    ],
+                    "An error occurred while trying to save the form.": [
+                        null,
+                        ""
+                    ],
+                    "This chatroom requires a password": [
+                        null,
+                        ""
+                    ],
+                    "Password: ": [
+                        null,
+                        ""
+                    ],
+                    "Submit": [
+                        null,
+                        ""
+                    ],
+                    "This room is not anonymous": [
+                        null,
+                        ""
+                    ],
+                    "This room now shows unavailable members": [
+                        null,
+                        ""
+                    ],
+                    "This room does not show unavailable members": [
+                        null,
+                        ""
+                    ],
+                    "Non-privacy-related room configuration has changed": [
+                        null,
+                        ""
+                    ],
+                    "Room logging is now enabled": [
+                        null,
+                        ""
+                    ],
+                    "Room logging is now disabled": [
+                        null,
+                        ""
+                    ],
+                    "This room is now non-anonymous": [
+                        null,
+                        ""
+                    ],
+                    "This room is now semi-anonymous": [
+                        null,
+                        ""
+                    ],
+                    "This room is now fully-anonymous": [
+                        null,
+                        ""
+                    ],
+                    "A new room has been created": [
+                        null,
+                        ""
+                    ],
+                    "Your nickname has been changed": [
+                        null,
+                        ""
+                    ],
+                    "<strong>%1$s</strong> has been banned": [
+                        null,
+                        ""
+                    ],
+                    "<strong>%1$s</strong> has been kicked out": [
+                        null,
+                        ""
+                    ],
+                    "<strong>%1$s</strong> has been removed because of an affiliation change": [
+                        null,
+                        ""
+                    ],
+                    "<strong>%1$s</strong> has been removed for not being a member": [
+                        null,
+                        ""
+                    ],
+                    "You have been banned from this room": [
+                        null,
+                        ""
+                    ],
+                    "You have been kicked from this room": [
+                        null,
+                        ""
+                    ],
+                    "You have been removed from this room because of an affiliation change": [
+                        null,
+                        ""
+                    ],
+                    "You have been removed from this room because the room has changed to members-only and you're not a member": [
+                        null,
+                        ""
+                    ],
+                    "You have been removed from this room because the MUC (Multi-user chat) service is being shut down.": [
+                        null,
+                        ""
+                    ],
+                    "You are not on the member list of this room": [
+                        null,
+                        ""
+                    ],
+                    "No nickname was specified": [
+                        null,
+                        ""
+                    ],
+                    "You are not allowed to create new rooms": [
+                        null,
+                        ""
+                    ],
+                    "Your nickname doesn't conform to this room's policies": [
+                        null,
+                        ""
+                    ],
+                    "Your nickname is already taken": [
+                        null,
+                        ""
+                    ],
+                    "This room does not (yet) exist": [
+                        null,
+                        ""
+                    ],
+                    "This room has reached it's maximum number of occupants": [
+                        null,
+                        ""
+                    ],
+                    "Topic set by %1$s to: %2$s": [
+                        null,
+                        ""
+                    ],
+                    "This user is a moderator": [
+                        null,
+                        ""
+                    ],
+                    "This user can send messages in this room": [
+                        null,
+                        ""
+                    ],
+                    "This user can NOT send messages in this room": [
+                        null,
+                        ""
+                    ],
+                    "Click to chat with this contact": [
+                        null,
+                        ""
+                    ],
+                    "Click to remove this contact": [
+                        null,
+                        ""
+                    ],
+                    "Contact requests": [
+                        null,
+                        ""
+                    ],
+                    "My contacts": [
+                        null,
+                        ""
+                    ],
+                    "Pending contacts": [
+                        null,
+                        ""
+                    ],
+                    "Custom status": [
+                        null,
+                        ""
+                    ],
+                    "Click to change your chat status": [
+                        null,
+                        ""
+                    ],
+                    "Click here to write a custom status message": [
+                        null,
+                        ""
+                    ],
+                    "online": [
+                        null,
+                        ""
+                    ],
+                    "busy": [
+                        null,
+                        ""
+                    ],
+                    "away for long": [
+                        null,
+                        ""
+                    ],
+                    "away": [
+                        null,
+                        ""
+                    ],
+                    "I am %1$s": [
+                        null,
+                        ""
+                    ],
+                    "Sign in": [
+                        null,
+                        ""
+                    ],
+                    "XMPP/Jabber Username:": [
+                        null,
+                        ""
+                    ],
+                    "Password:": [
+                        null,
+                        ""
+                    ],
+                    "Log In": [
+                        null,
+                        ""
+                    ],
+                    "BOSH Service URL:": [
+                        null,
+                        ""
+                    ],
+                    "Connected": [
+                        null,
+                        ""
+                    ],
+                    "Disconnected": [
+                        null,
+                        ""
+                    ],
+                    "Error": [
+                        null,
+                        ""
+                    ],
+                    "Connecting": [
+                        null,
+                        ""
+                    ],
+                    "Connection Failed": [
+                        null,
+                        ""
+                    ],
+                    "Authenticating": [
+                        null,
+                        ""
+                    ],
+                    "Authentication Failed": [
+                        null,
+                        ""
+                    ],
+                    "Disconnecting": [
+                        null,
+                        ""
+                    ],
+                    "Attached": [
+                        null,
+                        ""
+                    ],
+                    "Online Contacts": [
+                        null,
+                        ""
+                    ]
+                }
+            }
+        });
+        return factory(hu);
+    });
+}(this, function (hu) { 
+    return hu; 
+}));

+ 460 - 0
locale/it/LC_MESSAGES/converse.json

@@ -0,0 +1,460 @@
+{
+   "converse": {
+      "": {
+         "Project-Id-Version": "Converse.js 0.4",
+         "Report-Msgid-Bugs-To": "",
+         "POT-Creation-Date": "2013-07-20 23:03+0200",
+         "PO-Revision-Date": "2013-07-20 13:58+0200",
+         "Last-Translator": "Fabio Bas <ctrlaltca@gmail.com>",
+         "Language-Team": "Italian",
+         "Language": "it",
+         "MIME-Version": "1.0",
+         "Content-Type": "text/plain; charset=ASCII",
+         "Content-Transfer-Encoding": "8bit",
+         "Plural-Forms": "nplurals=2; plural=(n != 1);",
+         "domain": "converse",
+         "lang": "it",
+         "plural_forms": "nplurals=2; plural=(n != 1);"
+      },
+      "Show this menu": [
+         null,
+         "Mostra questo menu"
+      ],
+      "Write in the third person": [
+         null,
+         "Scrivi in terza persona"
+      ],
+      "Remove messages": [
+         null,
+         "Rimuovi messaggi"
+      ],
+      "Personal message": [
+         null,
+         "Messaggio personale"
+      ],
+      "Contacts": [
+         null,
+         "Contatti"
+      ],
+      "Online": [
+         null,
+         "In linea"
+      ],
+      "Busy": [
+         null,
+         "Occupato"
+      ],
+      "Away": [
+         null,
+         "Assente"
+      ],
+      "Offline": [
+         null,
+         "Non in linea"
+      ],
+      "Click to add new chat contacts": [
+         null,
+         "Clicca per aggiungere nuovi contatti alla chat"
+      ],
+      "Add a contact": [
+         null,
+         "Aggiungi un contatto"
+      ],
+      "Contact username": [
+         null,
+         "Nome utente del contatto"
+      ],
+      "Add": [
+         null,
+         "Aggiungi"
+      ],
+      "Contact name": [
+         null,
+         "Nome del contatto"
+      ],
+      "Search": [
+         null,
+         "Cerca"
+      ],
+      "No users found": [
+         null,
+         "Nessun utente trovato"
+      ],
+      "Click to add as a chat contact": [
+         null,
+         "Clicca per aggiungere il contatto alla chat"
+      ],
+      "Click to open this room": [
+         null,
+         "Clicca per aprire questa stanza"
+      ],
+      "Show more information on this room": [
+         null,
+         "Mostra più informazioni su questa stanza"
+      ],
+      "Description:": [
+         null,
+         "Descrizione:"
+      ],
+      "Occupants:": [
+         null,
+         "Utenti presenti:"
+      ],
+      "Features:": [
+         null,
+         "Funzionalità:"
+      ],
+      "Requires authentication": [
+         null,
+         "Richiede autenticazione"
+      ],
+      "Hidden": [
+         null,
+         "Nascosta"
+      ],
+      "Requires an invitation": [
+         null,
+         "Richiede un invito"
+      ],
+      "Moderated": [
+         null,
+         "Moderata"
+      ],
+      "Non-anonymous": [
+         null,
+         "Non-anonima"
+      ],
+      "Open room": [
+         null,
+         "Stanza aperta"
+      ],
+      "Permanent room": [
+         null,
+         "Stanza permanente"
+      ],
+      "Public": [
+         null,
+         "Pubblica"
+      ],
+      "Semi-anonymous": [
+         null,
+         "Semi-anonima"
+      ],
+      "Temporary room": [
+         null,
+         "Stanza temporanea"
+      ],
+      "Unmoderated": [
+         null,
+         "Non moderata"
+      ],
+      "Rooms": [
+         null,
+         "Stanze"
+      ],
+      "Room name": [
+         null,
+         "Nome stanza"
+      ],
+      "Nickname": [
+         null,
+         "Soprannome"
+      ],
+      "Server": [
+         null,
+         "Server"
+      ],
+      "Join": [
+         null,
+         "Entra"
+      ],
+      "Show rooms": [
+         null,
+         "Mostra stanze"
+      ],
+      "No rooms on %1$s": [
+         null,
+         "Nessuna stanza su %1$s"
+      ],
+      "Rooms on %1$s": [
+         null,
+         "Stanze su %1$s"
+      ],
+      "Set chatroom topic": [
+         null,
+         "Cambia oggetto della stanza"
+      ],
+      "Kick user from chatroom": [
+         null,
+         "Espelli utente dalla stanza"
+      ],
+      "Ban user from chatroom": [
+         null,
+         "Bandisci utente dalla stanza"
+      ],
+      "Message": [
+         null,
+         "Messaggio"
+      ],
+      "Save": [
+         null,
+         "Salva"
+      ],
+      "Cancel": [
+         null,
+         "Annulla"
+      ],
+      "An error occurred while trying to save the form.": [
+         null,
+         "Errore durante il salvataggio del modulo"
+      ],
+      "This chatroom requires a password": [
+         null,
+         "Questa stanza richiede una password"
+      ],
+      "Password: ": [
+         null,
+         "Password: "
+      ],
+      "Submit": [
+         null,
+         "Invia"
+      ],
+      "This room is not anonymous": [
+         null,
+         "Questa stanza non è anonima"
+      ],
+      "This room now shows unavailable members": [
+         null,
+         "Questa stanza mostra i membri non disponibili al momento"
+      ],
+      "This room does not show unavailable members": [
+         null,
+         "Questa stanza non mostra i membri non disponibili"
+      ],
+      "Non-privacy-related room configuration has changed": [
+         null,
+         "Una configurazione della stanza non legata alla privacy è stata modificata"
+      ],
+      "Room logging is now enabled": [
+         null,
+         "La registrazione è abilitata nella stanza"
+      ],
+      "Room logging is now disabled": [
+         null,
+         "La registrazione è disabilitata nella stanza"
+      ],
+      "This room is now non-anonymous": [
+         null,
+         "Questa stanza è non-anonima"
+      ],
+      "This room is now semi-anonymous": [
+         null,
+         "Questa stanza è semi-anonima"
+      ],
+      "This room is now fully-anonymous": [
+         null,
+         "Questa stanza è completamente-anonima"
+      ],
+      "A new room has been created": [
+         null,
+         "Una nuova stanza è stata creata"
+      ],
+      "Your nickname has been changed": [
+         null,
+         "Il tuo soprannome è stato cambiato"
+      ],
+      "<strong>%1$s</strong> has been banned": [
+         null,
+         "<strong>%1$s</strong> è stato bandito"
+      ],
+      "<strong>%1$s</strong> has been kicked out": [
+         null,
+         "<strong>%1$s</strong> è stato espulso"
+      ],
+      "<strong>%1$s</strong> has been removed because of an affiliation change": [
+         null,
+         "<strong>%1$s</strong> è stato rimosso a causa di un cambio di affiliazione"
+      ],
+      "<strong>%1$s</strong> has been removed for not being a member": [
+         null,
+         "<strong>%1$s</strong> è stato rimosso in quanto non membro"
+      ],
+      "You have been banned from this room": [
+         null,
+         "Sei stato bandito da questa stanza"
+      ],
+      "You have been kicked from this room": [
+         null,
+         "Sei stato espulso da questa stanza"
+      ],
+      "You have been removed from this room because of an affiliation change": [
+         null,
+         "Sei stato rimosso da questa stanza a causa di un cambio di affiliazione"
+      ],
+      "You have been removed from this room because the room has changed to members-only and you're not a member": [
+         null,
+         "Sei stato rimosso da questa stanza poiché ora la stanza accetta solo membri"
+      ],
+      "You have been removed from this room because the MUC (Multi-user chat) service is being shut down.": [
+         null,
+         "Sei stato rimosso da questa stanza poiché il servizio MUC (Chat multi utente) è in fase di spegnimento"
+      ],
+      "You are not on the member list of this room": [
+         null,
+         "Non sei nella lista dei membri di questa stanza"
+      ],
+      "No nickname was specified": [
+         null,
+         "Nessun soprannome specificato"
+      ],
+      "You are not allowed to create new rooms": [
+         null,
+         "Non ti è permesso creare nuove stanze"
+      ],
+      "Your nickname doesn't conform to this room's policies": [
+         null,
+         "Il tuo soprannome non è conforme alle regole di questa stanza"
+      ],
+      "Your nickname is already taken": [
+         null,
+         "Il tuo soprannome è già utilizzato"
+      ],
+      "This room does not (yet) exist": [
+         null,
+         "Questa stanza non esiste (per ora)"
+      ],
+      "This room has reached it's maximum number of occupants": [
+         null,
+         "Questa stanza ha raggiunto il limite massimo di utenti"
+      ],
+      "Topic set by %1$s to: %2$s": [
+         null,
+         "Topic impostato da %1$s a: %2$s"
+      ],
+      "This user is a moderator": [
+         null,
+         "Questo utente è un moderatore"
+      ],
+      "This user can send messages in this room": [
+         null,
+         "Questo utente può inviare messaggi in questa stanza"
+      ],
+      "This user can NOT send messages in this room": [
+         null,
+         "Questo utente NON può inviare messaggi in questa stanza"
+      ],
+      "Click to chat with this contact": [
+         null,
+         "Clicca per parlare con questo contatto"
+      ],
+      "Click to remove this contact": [
+         null,
+         "Clicca per rimuovere questo contatto"
+      ],
+      "Contact requests": [
+         null,
+         "Richieste dei contatti"
+      ],
+      "My contacts": [
+         null,
+         "I miei contatti"
+      ],
+      "Pending contacts": [
+         null,
+         "Contatti in attesa"
+      ],
+      "Custom status": [
+         null,
+         "Stato personalizzato"
+      ],
+      "Click to change your chat status": [
+         null,
+         "Clicca per cambiare il tuo stato"
+      ],
+      "Click here to write a custom status message": [
+         null,
+         "Clicca qui per scrivere un messaggio di stato personalizzato"
+      ],
+      "online": [
+         null,
+         "in linea"
+      ],
+      "busy": [
+         null,
+         "occupato"
+      ],
+      "away for long": [
+         null,
+         "assente da molto"
+      ],
+      "away": [
+         null,
+         "assente"
+      ],
+      "I am %1$s": [
+         null,
+         "Sono %1$s"
+      ],
+      "Sign in": [
+         null,
+         "Entra"
+      ],
+      "XMPP/Jabber Username:": [
+         null,
+         "Nome utente:"
+      ],
+      "Password:": [
+         null,
+         "Password:"
+      ],
+      "Log In": [
+         null,
+         "Entra"
+      ],
+      "BOSH Service URL:": [
+         null,
+         "Indirizzo servizio BOSH:"
+      ],
+      "Connected": [
+         null,
+         "Connesso"
+      ],
+      "Disconnected": [
+         null,
+         "Disconnesso"
+      ],
+      "Error": [
+         null,
+         "Errore"
+      ],
+      "Connecting": [
+         null,
+         "Connessione in corso"
+      ],
+      "Connection Failed": [
+         null,
+         "Connessione fallita"
+      ],
+      "Authenticating": [
+         null,
+         "Autenticazione in corso"
+      ],
+      "Authentication Failed": [
+         null,
+         "Autenticazione fallita"
+      ],
+      "Disconnecting": [
+         null,
+         "Disconnessione in corso"
+      ],
+      "Attached": [
+         null,
+         "Allegato"
+      ],
+      "Online Contacts": [
+         null,
+         "Contatti in linea"
+      ]
+   }
+}

+ 489 - 0
locale/it/LC_MESSAGES/converse.po

@@ -0,0 +1,489 @@
+# German translations for Converse.js package.
+# Copyright (C) 2013 Jan-Carel Brand
+# This file is distributed under the same license as the Converse.js package.
+# JC Brand <jc@opkode.com>, 2013.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Converse.js 0.4\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2013-07-20 23:03+0200\n"
+"PO-Revision-Date: 2013-07-20 18:53+0100\n"
+"Last-Translator: Fabio Bas <ctrlaltca@gmail.com>\n"
+"Language-Team: Italian\n"
+"Language: it\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ASCII\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"domain: converse\n"
+"lang: it\n"
+"plural_forms: nplurals=2; plural=(n != 1);\n"
+
+#: converse.js:397
+#: converse.js:1128
+msgid "Show this menu"
+msgstr "Mostra questo menu"
+
+#: converse.js:398
+#: converse.js:1129
+msgid "Write in the third person"
+msgstr "Scrivi in terza persona"
+
+#: converse.js:399
+#: converse.js:1133
+msgid "Remove messages"
+msgstr "Rimuovi messaggi"
+
+#: converse.js:539
+msgid "Personal message"
+msgstr "Messaggio personale"
+
+#: converse.js:613
+msgid "Contacts"
+msgstr "Contatti"
+
+#: converse.js:618
+msgid "Online"
+msgstr "In linea"
+
+#: converse.js:619
+msgid "Busy"
+msgstr "Occupato"
+
+#: converse.js:620
+msgid "Away"
+msgstr "Assente"
+
+#: converse.js:621
+msgid "Offline"
+msgstr "Non in linea"
+
+#: converse.js:628
+msgid "Click to add new chat contacts"
+msgstr "Clicca per aggiungere nuovi contatti alla chat"
+
+#: converse.js:628
+msgid "Add a contact"
+msgstr "Aggiungi contatti"
+
+#: converse.js:637
+msgid "Contact username"
+msgstr "Nome utente del contatto"
+
+#: converse.js:638
+msgid "Add"
+msgstr "Aggiungi"
+
+#: converse.js:646
+msgid "Contact name"
+msgstr "Nome del contatto"
+
+#: converse.js:647
+msgid "Search"
+msgstr "Cerca"
+
+#: converse.js:682
+msgid "No users found"
+msgstr "Nessun utente trovato"
+
+#: converse.js:689
+msgid "Click to add as a chat contact"
+msgstr "Clicca per aggiungere il contatto alla chat"
+
+#: converse.js:753
+msgid "Click to open this room"
+msgstr "Clicca per aprire questa stanza"
+
+#: converse.js:755
+msgid "Show more information on this room"
+msgstr "Mostra più informazioni su questa stanza"
+
+#: converse.js:760
+msgid "Description:"
+msgstr "Descrizione:"
+
+#: converse.js:761
+msgid "Occupants:"
+msgstr "Utenti presenti:"
+
+#: converse.js:762
+msgid "Features:"
+msgstr "Funzionalità:"
+
+#: converse.js:764
+msgid "Requires authentication"
+msgstr "Richiede autenticazione"
+
+#: converse.js:767
+msgid "Hidden"
+msgstr "Nascosta"
+
+#: converse.js:770
+msgid "Requires an invitation"
+msgstr "Richiede un invito"
+
+#: converse.js:773
+msgid "Moderated"
+msgstr "Moderata"
+
+#: converse.js:776
+msgid "Non-anonymous"
+msgstr "Non-anonima"
+
+#: converse.js:779
+msgid "Open room"
+msgstr "Stanza aperta"
+
+#: converse.js:782
+msgid "Permanent room"
+msgstr "Stanza permanente"
+
+#: converse.js:785
+msgid "Public"
+msgstr "Pubblica"
+
+#: converse.js:788
+msgid "Semi-anonymous"
+msgstr "Semi-anonima"
+
+#: converse.js:791
+msgid "Temporary room"
+msgstr "Stanza temporanea"
+
+#: converse.js:794
+msgid "Unmoderated"
+msgstr "Non moderata"
+
+#: converse.js:800
+msgid "Rooms"
+msgstr "Stanze"
+
+#: converse.js:804
+msgid "Room name"
+msgstr "Nome stanza"
+
+#: converse.js:805
+msgid "Nickname"
+msgstr "Soprannome"
+
+#: converse.js:806
+msgid "Server"
+msgstr "Server"
+
+#: converse.js:807
+msgid "Join"
+msgstr "Entra"
+
+#: converse.js:808
+msgid "Show rooms"
+msgstr "Mostra stanze"
+
+#. For translators: %1$s is a variable and will be replaced with the XMPP server name
+#: converse.js:841
+msgid "No rooms on %1$s"
+msgstr "Nessuna stanza su %1$s"
+
+#. For translators: %1$s is a variable and will be
+#. replaced with the XMPP server name
+#: converse.js:856
+msgid "Rooms on %1$s"
+msgstr "Stanze su %1$s"
+
+#: converse.js:1130
+msgid "Set chatroom topic"
+msgstr "Cambia oggetto della stanza"
+
+#: converse.js:1131
+msgid "Kick user from chatroom"
+msgstr "Espelli utente dalla stanza"
+
+#: converse.js:1132
+msgid "Ban user from chatroom"
+msgstr "Bandisci utente dalla stanza"
+
+#: converse.js:1159
+msgid "Message"
+msgstr "Messaggio"
+
+#: converse.js:1273
+#: converse.js:2318
+msgid "Save"
+msgstr "Salva"
+
+#: converse.js:1274
+msgid "Cancel"
+msgstr "Annulla"
+
+#: converse.js:1321
+msgid "An error occurred while trying to save the form."
+msgstr "Errore durante il salvataggio del modulo"
+
+#: converse.js:1367
+msgid "This chatroom requires a password"
+msgstr "Questa stanza richiede una password"
+
+#: converse.js:1368
+msgid "Password: "
+msgstr "Password: "
+
+#: converse.js:1369
+msgid "Submit"
+msgstr "Invia"
+
+#: converse.js:1383
+msgid "This room is not anonymous"
+msgstr "Questa stanza non è anonima"
+
+#: converse.js:1384
+msgid "This room now shows unavailable members"
+msgstr "Questa stanza mostra i membri non disponibili al momento"
+
+#: converse.js:1385
+msgid "This room does not show unavailable members"
+msgstr "Questa stanza non mostra i membri non disponibili"
+
+#: converse.js:1386
+msgid "Non-privacy-related room configuration has changed"
+msgstr "Una configurazione della stanza non legata alla privacy è stata modificata"
+
+#: converse.js:1387
+msgid "Room logging is now enabled"
+msgstr "La registrazione è abilitata nella stanza"
+
+#: converse.js:1388
+msgid "Room logging is now disabled"
+msgstr "La registrazione è disabilitata nella stanza"
+
+#: converse.js:1389
+msgid "This room is now non-anonymous"
+msgstr "Questa stanza è non-anonima"
+
+#: converse.js:1390
+msgid "This room is now semi-anonymous"
+msgstr "Questa stanza è semi-anonima"
+
+#: converse.js:1391
+msgid "This room is now fully-anonymous"
+msgstr "Questa stanza è completamente-anonima"
+
+#: converse.js:1392
+msgid "A new room has been created"
+msgstr "Una nuova stanza è stata creata"
+
+#: converse.js:1393
+msgid "Your nickname has been changed"
+msgstr "Il tuo soprannome è stato cambiato"
+
+#. For translations: %1$s will be replaced with the user's nickname
+#. Don't translate "strong"
+#. Example: <strong>jcbrand</strong> has been banned
+#: converse.js:1400
+msgid "<strong>%1$s</strong> has been banned"
+msgstr "<strong>%1$s</strong> è stato bandito"
+
+#. For translations: %1$s will be replaced with the user's nickname
+#. Don't translate "strong"
+#. Example: <strong>jcbrand</strong> has been kicked out
+#: converse.js:1404
+msgid "<strong>%1$s</strong> has been kicked out"
+msgstr "<strong>%1$s</strong> è stato espulso"
+
+#. For translations: %1$s will be replaced with the user's nickname
+#. Don't translate "strong"
+#. Example: <strong>jcbrand</strong> has been removed because of an affiliasion change
+#: converse.js:1408
+msgid "<strong>%1$s</strong> has been removed because of an affiliation change"
+msgstr "<strong>%1$s</strong> è stato rimosso a causa di un cambio di affiliazione"
+
+#. For translations: %1$s will be replaced with the user's nickname
+#. Don't translate "strong"
+#. Example: <strong>jcbrand</strong> has been removed for not being a member
+#: converse.js:1412
+msgid "<strong>%1$s</strong> has been removed for not being a member"
+msgstr "<strong>%1$s</strong> è stato rimosso in quanto non membro"
+
+#: converse.js:1416
+#: converse.js:1478
+msgid "You have been banned from this room"
+msgstr "Sei stato bandito da questa stanza"
+
+#: converse.js:1417
+msgid "You have been kicked from this room"
+msgstr "Sei stato espulso da questa stanza"
+
+#: converse.js:1418
+msgid "You have been removed from this room because of an affiliation change"
+msgstr "Sei stato rimosso da questa stanza a causa di un cambio di affiliazione"
+
+#: converse.js:1419
+msgid "You have been removed from this room because the room has changed to members-only and you're not a member"
+msgstr "Sei stato rimosso da questa stanza poiché ora la stanza accetta solo membri"
+
+#: converse.js:1420
+msgid "You have been removed from this room because the MUC (Multi-user chat) service is being shut down."
+msgstr "Sei stato rimosso da questa stanza poiché il servizio MUC (Chat multi utente) è in fase di spegnimento"
+
+#: converse.js:1476
+msgid "You are not on the member list of this room"
+msgstr "Non sei nella lista dei membri di questa stanza"
+
+#: converse.js:1482
+msgid "No nickname was specified"
+msgstr "Nessun soprannome specificato"
+
+#: converse.js:1486
+msgid "You are not allowed to create new rooms"
+msgstr "Non ti è permesso creare nuove stanze"
+
+#: converse.js:1488
+msgid "Your nickname doesn't conform to this room's policies"
+msgstr "Il tuo soprannome non è conforme alle regole di questa stanza"
+
+#: converse.js:1490
+msgid "Your nickname is already taken"
+msgstr "Il tuo soprannome è già utilizzato"
+
+#: converse.js:1492
+msgid "This room does not (yet) exist"
+msgstr "Questa stanza non esiste (per ora)"
+
+#: converse.js:1494
+msgid "This room has reached it's maximum number of occupants"
+msgstr "Questa stanza ha raggiunto il limite massimo di utenti"
+
+#. For translators: the %1$s and %2$s parts will get replaced by the user and topic text respectively
+#. Example: Topic set by JC Brand to: Hello World!
+#: converse.js:1571
+msgid "Topic set by %1$s to: %2$s"
+msgstr "Topic impostato da %1$s a: %2$s"
+
+#: converse.js:1587
+msgid "This user is a moderator"
+msgstr "Questo utente è un moderatore"
+
+#: converse.js:1590
+msgid "This user can send messages in this room"
+msgstr "Questo utente può inviare messaggi in questa stanza"
+
+#: converse.js:1593
+msgid "This user can NOT send messages in this room"
+msgstr "Questo utente NON può inviare messaggi in questa stanza"
+
+#: converse.js:1796
+msgid "Click to chat with this contact"
+msgstr "Clicca per parlare con questo contatto"
+
+#: converse.js:1797
+#: converse.js:1801
+msgid "Click to remove this contact"
+msgstr "Clicca per rimuovere questo contatto"
+
+#: converse.js:2163
+msgid "Contact requests"
+msgstr "Richieste dei contatti"
+
+#: converse.js:2164
+msgid "My contacts"
+msgstr "I miei contatti"
+
+#: converse.js:2165
+msgid "Pending contacts"
+msgstr "Contatti in attesa"
+
+#: converse.js:2317
+msgid "Custom status"
+msgstr "Stato personalizzato"
+
+#: converse.js:2323
+msgid "Click to change your chat status"
+msgstr "Clicca per cambiare il tuo stato"
+
+#: converse.js:2326
+msgid "Click here to write a custom status message"
+msgstr "Clicca qui per scrivere un messaggio di stato personalizzato"
+
+#: converse.js:2355
+#: converse.js:2363
+msgid "online"
+msgstr "in linea"
+
+#: converse.js:2357
+msgid "busy"
+msgstr "occupato"
+
+#: converse.js:2359
+msgid "away for long"
+msgstr "assente da molto"
+
+#: converse.js:2361
+msgid "away"
+msgstr "assente"
+
+#. For translators: the %1$s part gets replaced with the status
+#. Example, I am online
+#: converse.js:2375
+#: converse.js:2409
+msgid "I am %1$s"
+msgstr "Sono %1$s"
+
+#: converse.js:2480
+msgid "Sign in"
+msgstr "Accesso"
+
+#: converse.js:2483
+msgid "XMPP/Jabber Username:"
+msgstr "Nome utente:"
+
+#: converse.js:2485
+msgid "Password:"
+msgstr "Password:"
+
+#: converse.js:2487
+msgid "Log In"
+msgstr "Entra"
+
+#: converse.js:2491
+msgid "BOSH Service URL:"
+msgstr "Indirizzo servizio BOSH:"
+
+#: converse.js:2503
+msgid "Connected"
+msgstr "Connesso"
+
+#: converse.js:2507
+msgid "Disconnected"
+msgstr "Disconnesso"
+
+#: converse.js:2511
+msgid "Error"
+msgstr "Errore"
+
+#: converse.js:2513
+msgid "Connecting"
+msgstr "Connessione in corso"
+
+#: converse.js:2516
+msgid "Connection Failed"
+msgstr "Connessione fallita"
+
+#: converse.js:2518
+msgid "Authenticating"
+msgstr "Autenticazione in corso"
+
+#: converse.js:2521
+msgid "Authentication Failed"
+msgstr "Autenticazione fallita"
+
+#: converse.js:2523
+msgid "Disconnecting"
+msgstr "Disconnessione in corso"
+
+#: converse.js:2525
+msgid "Attached"
+msgstr "Allegato"
+
+#: converse.js:2656
+msgid "Online Contacts"
+msgstr "Contatti in linea"
+

+ 470 - 0
locale/it/LC_MESSAGES/it.js

@@ -0,0 +1,470 @@
+(function (root, factory) {
+    define("it", ['jed'], function () {
+        var it = new Jed({
+            "domain": "converse",
+            "locale_data": {
+               "converse": {
+                  "": {
+                     "Project-Id-Version": "Converse.js 0.4",
+                     "Report-Msgid-Bugs-To": "",
+                     "POT-Creation-Date": "2013-07-20 23:03+0200",
+                     "PO-Revision-Date": "2013-07-20 13:58+0200",
+                     "Last-Translator": "Fabio Bas <ctrlaltca@gmail.com>",
+                     "Language-Team": "Italian",
+                     "Language": "it",
+                     "MIME-Version": "1.0",
+                     "Content-Type": "text/plain; charset=ASCII",
+                     "Content-Transfer-Encoding": "8bit",
+                     "Plural-Forms": "nplurals=2; plural=(n != 1);",
+                     "domain": "converse",
+                     "lang": "it",
+                     "plural_forms": "nplurals=2; plural=(n != 1);"
+                  },
+                  "Show this menu": [
+                     null,
+                     "Mostra questo menu"
+                  ],
+                  "Write in the third person": [
+                     null,
+                     "Scrivi in terza persona"
+                  ],
+                  "Remove messages": [
+                     null,
+                     "Rimuovi messaggi"
+                  ],
+                  "Personal message": [
+                     null,
+                     "Messaggio personale"
+                  ],
+                  "Contacts": [
+                     null,
+                     "Contatti"
+                  ],
+                  "Online": [
+                     null,
+                     "In linea"
+                  ],
+                  "Busy": [
+                     null,
+                     "Occupato"
+                  ],
+                  "Away": [
+                     null,
+                     "Assente"
+                  ],
+                  "Offline": [
+                     null,
+                     "Non in linea"
+                  ],
+                  "Click to add new chat contacts": [
+                     null,
+                     "Clicca per aggiungere nuovi contatti alla chat"
+                  ],
+                  "Add a contact": [
+                     null,
+                     "Aggiungi un contatto"
+                  ],
+                  "Contact username": [
+                     null,
+                     "Nome utente del contatto"
+                  ],
+                  "Add": [
+                     null,
+                     "Aggiungi"
+                  ],
+                  "Contact name": [
+                     null,
+                     "Nome del contatto"
+                  ],
+                  "Search": [
+                     null,
+                     "Cerca"
+                  ],
+                  "No users found": [
+                     null,
+                     "Nessun utente trovato"
+                  ],
+                  "Click to add as a chat contact": [
+                     null,
+                     "Clicca per aggiungere il contatto alla chat"
+                  ],
+                  "Click to open this room": [
+                     null,
+                     "Clicca per aprire questa stanza"
+                  ],
+                  "Show more information on this room": [
+                     null,
+                     "Mostra più informazioni su questa stanza"
+                  ],
+                  "Description:": [
+                     null,
+                     "Descrizione:"
+                  ],
+                  "Occupants:": [
+                     null,
+                     "Utenti presenti:"
+                  ],
+                  "Features:": [
+                     null,
+                     "Funzionalità:"
+                  ],
+                  "Requires authentication": [
+                     null,
+                     "Richiede autenticazione"
+                  ],
+                  "Hidden": [
+                     null,
+                     "Nascosta"
+                  ],
+                  "Requires an invitation": [
+                     null,
+                     "Richiede un invito"
+                  ],
+                  "Moderated": [
+                     null,
+                     "Moderata"
+                  ],
+                  "Non-anonymous": [
+                     null,
+                     "Non-anonima"
+                  ],
+                  "Open room": [
+                     null,
+                     "Stanza aperta"
+                  ],
+                  "Permanent room": [
+                     null,
+                     "Stanza permanente"
+                  ],
+                  "Public": [
+                     null,
+                     "Pubblica"
+                  ],
+                  "Semi-anonymous": [
+                     null,
+                     "Semi-anonima"
+                  ],
+                  "Temporary room": [
+                     null,
+                     "Stanza temporanea"
+                  ],
+                  "Unmoderated": [
+                     null,
+                     "Non moderata"
+                  ],
+                  "Rooms": [
+                     null,
+                     "Stanze"
+                  ],
+                  "Room name": [
+                     null,
+                     "Nome stanza"
+                  ],
+                  "Nickname": [
+                     null,
+                     "Soprannome"
+                  ],
+                  "Server": [
+                     null,
+                     "Server"
+                  ],
+                  "Join": [
+                     null,
+                     "Entra"
+                  ],
+                  "Show rooms": [
+                     null,
+                     "Mostra stanze"
+                  ],
+                  "No rooms on %1$s": [
+                     null,
+                     "Nessuna stanza su %1$s"
+                  ],
+                  "Rooms on %1$s": [
+                     null,
+                     "Stanze su %1$s"
+                  ],
+                  "Set chatroom topic": [
+                     null,
+                     "Cambia oggetto della stanza"
+                  ],
+                  "Kick user from chatroom": [
+                     null,
+                     "Espelli utente dalla stanza"
+                  ],
+                  "Ban user from chatroom": [
+                     null,
+                     "Bandisci utente dalla stanza"
+                  ],
+                  "Message": [
+                     null,
+                     "Messaggio"
+                  ],
+                  "Save": [
+                     null,
+                     "Salva"
+                  ],
+                  "Cancel": [
+                     null,
+                     "Annulla"
+                  ],
+                  "An error occurred while trying to save the form.": [
+                     null,
+                     "Errore durante il salvataggio del modulo"
+                  ],
+                  "This chatroom requires a password": [
+                     null,
+                     "Questa stanza richiede una password"
+                  ],
+                  "Password: ": [
+                     null,
+                     "Password: "
+                  ],
+                  "Submit": [
+                     null,
+                     "Invia"
+                  ],
+                  "This room is not anonymous": [
+                     null,
+                     "Questa stanza non è anonima"
+                  ],
+                  "This room now shows unavailable members": [
+                     null,
+                     "Questa stanza mostra i membri non disponibili al momento"
+                  ],
+                  "This room does not show unavailable members": [
+                     null,
+                     "Questa stanza non mostra i membri non disponibili"
+                  ],
+                  "Non-privacy-related room configuration has changed": [
+                     null,
+                     "Una configurazione della stanza non legata alla privacy è stata modificata"
+                  ],
+                  "Room logging is now enabled": [
+                     null,
+                     "La registrazione è abilitata nella stanza"
+                  ],
+                  "Room logging is now disabled": [
+                     null,
+                     "La registrazione è disabilitata nella stanza"
+                  ],
+                  "This room is now non-anonymous": [
+                     null,
+                     "Questa stanza è non-anonima"
+                  ],
+                  "This room is now semi-anonymous": [
+                     null,
+                     "Questa stanza è semi-anonima"
+                  ],
+                  "This room is now fully-anonymous": [
+                     null,
+                     "Questa stanza è completamente-anonima"
+                  ],
+                  "A new room has been created": [
+                     null,
+                     "Una nuova stanza è stata creata"
+                  ],
+                  "Your nickname has been changed": [
+                     null,
+                     "Il tuo soprannome è stato cambiato"
+                  ],
+                  "<strong>%1$s</strong> has been banned": [
+                     null,
+                     "<strong>%1$s</strong> è stato bandito"
+                  ],
+                  "<strong>%1$s</strong> has been kicked out": [
+                     null,
+                     "<strong>%1$s</strong> è stato espulso"
+                  ],
+                  "<strong>%1$s</strong> has been removed because of an affiliation change": [
+                     null,
+                     "<strong>%1$s</strong> è stato rimosso a causa di un cambio di affiliazione"
+                  ],
+                  "<strong>%1$s</strong> has been removed for not being a member": [
+                     null,
+                     "<strong>%1$s</strong> è stato rimosso in quanto non membro"
+                  ],
+                  "You have been banned from this room": [
+                     null,
+                     "Sei stato bandito da questa stanza"
+                  ],
+                  "You have been kicked from this room": [
+                     null,
+                     "Sei stato espulso da questa stanza"
+                  ],
+                  "You have been removed from this room because of an affiliation change": [
+                     null,
+                     "Sei stato rimosso da questa stanza a causa di un cambio di affiliazione"
+                  ],
+                  "You have been removed from this room because the room has changed to members-only and you're not a member": [
+                     null,
+                     "Sei stato rimosso da questa stanza poiché ora la stanza accetta solo membri"
+                  ],
+                  "You have been removed from this room because the MUC (Multi-user chat) service is being shut down.": [
+                     null,
+                     "Sei stato rimosso da questa stanza poiché il servizio MUC (Chat multi utente) è in fase di spegnimento"
+                  ],
+                  "You are not on the member list of this room": [
+                     null,
+                     "Non sei nella lista dei membri di questa stanza"
+                  ],
+                  "No nickname was specified": [
+                     null,
+                     "Nessun soprannome specificato"
+                  ],
+                  "You are not allowed to create new rooms": [
+                     null,
+                     "Non ti è permesso creare nuove stanze"
+                  ],
+                  "Your nickname doesn't conform to this room's policies": [
+                     null,
+                     "Il tuo soprannome non è conforme alle regole di questa stanza"
+                  ],
+                  "Your nickname is already taken": [
+                     null,
+                     "Il tuo soprannome è già utilizzato"
+                  ],
+                  "This room does not (yet) exist": [
+                     null,
+                     "Questa stanza non esiste (per ora)"
+                  ],
+                  "This room has reached it's maximum number of occupants": [
+                     null,
+                     "Questa stanza ha raggiunto il limite massimo di utenti"
+                  ],
+                  "Topic set by %1$s to: %2$s": [
+                     null,
+                     "Topic impostato da %1$s a: %2$s"
+                  ],
+                  "This user is a moderator": [
+                     null,
+                     "Questo utente è un moderatore"
+                  ],
+                  "This user can send messages in this room": [
+                     null,
+                     "Questo utente può inviare messaggi in questa stanza"
+                  ],
+                  "This user can NOT send messages in this room": [
+                     null,
+                     "Questo utente NON può inviare messaggi in questa stanza"
+                  ],
+                  "Click to chat with this contact": [
+                     null,
+                     "Clicca per parlare con questo contatto"
+                  ],
+                  "Click to remove this contact": [
+                     null,
+                     "Clicca per rimuovere questo contatto"
+                  ],
+                  "Contact requests": [
+                     null,
+                     "Richieste dei contatti"
+                  ],
+                  "My contacts": [
+                     null,
+                     "I miei contatti"
+                  ],
+                  "Pending contacts": [
+                     null,
+                     "Contatti in attesa"
+                  ],
+                  "Custom status": [
+                     null,
+                     "Stato personalizzato"
+                  ],
+                  "Click to change your chat status": [
+                     null,
+                     "Clicca per cambiare il tuo stato"
+                  ],
+                  "Click here to write a custom status message": [
+                     null,
+                     "Clicca qui per scrivere un messaggio di stato personalizzato"
+                  ],
+                  "online": [
+                     null,
+                     "in linea"
+                  ],
+                  "busy": [
+                     null,
+                     "occupato"
+                  ],
+                  "away for long": [
+                     null,
+                     "assente da molto"
+                  ],
+                  "away": [
+                     null,
+                     "assente"
+                  ],
+                  "I am %1$s": [
+                     null,
+                     "Sono %1$s"
+                  ],
+                  "Sign in": [
+                     null,
+                     "Entra"
+                  ],
+                  "XMPP/Jabber Username:": [
+                     null,
+                     "Nome utente:"
+                  ],
+                  "Password:": [
+                     null,
+                     "Password:"
+                  ],
+                  "Log In": [
+                     null,
+                     "Entra"
+                  ],
+                  "BOSH Service URL:": [
+                     null,
+                     "Indirizzo servizio BOSH:"
+                  ],
+                  "Connected": [
+                     null,
+                     "Connesso"
+                  ],
+                  "Disconnected": [
+                     null,
+                     "Disconnesso"
+                  ],
+                  "Error": [
+                     null,
+                     "Errore"
+                  ],
+                  "Connecting": [
+                     null,
+                     "Connessione in corso"
+                  ],
+                  "Connection Failed": [
+                     null,
+                     "Connessione fallita"
+                  ],
+                  "Authenticating": [
+                     null,
+                     "Autenticazione in corso"
+                  ],
+                  "Authentication Failed": [
+                     null,
+                     "Autenticazione fallita"
+                  ],
+                  "Disconnecting": [
+                     null,
+                     "Disconnessione in corso"
+                  ],
+                  "Attached": [
+                     null,
+                     "Allegato"
+                  ],
+                  "Online Contacts": [
+                     null,
+                     "Contatti in linea"
+                  ]
+               }
+            }
+        });
+        return factory(it);
+    });
+}(this, function (it) { 
+    return it; 
+}));

+ 38 - 0
locale/locales.js

@@ -0,0 +1,38 @@
+/*
+ * This file specifies the language dependencies.
+ *
+ * Translations take up a lot of space and you are therefore advised to remove
+ * from here any languages that you don't need.
+ */
+
+(function (root, factory) {
+    require.config({
+        paths: {
+            "jed": "Libraries/jed",
+            "af": "locale/af/LC_MESSAGES/af",
+            "en": "locale/en/LC_MESSAGES/en",
+            "es": "locale/es/LC_MESSAGES/es",
+            "de": "locale/de/LC_MESSAGES/de",
+            "hu": "locale/hu/LC_MESSAGES/hu",
+            "it": "locale/it/LC_MESSAGES/it"
+        }
+    });
+
+    define("locales", [
+        'jed',
+        'af',
+        'en',
+        'es',
+        'de',
+        'hu',
+        "it"
+        ], function (jed, af, en, es, de, hu, it) {
+            root.locales = {};
+            root.locales.af = af;
+            root.locales.en = en;
+            root.locales.es = es;
+            root.locales.de = de;
+            root.locales.hu = hu;
+            root.locales.it = it;
+        });
+})(this);

+ 1 - 3
main.js

@@ -1,5 +1,3 @@
 require(["jquery", "converse"], function($, converse) {
-    converse.initialize({
-        bosh_service_url: 'https://bind.opkode.im' // Please use this connection manager only for testing purposes
-    });
+    window.converse = converse;
 });

+ 19 - 11
mock.js

@@ -1,8 +1,8 @@
 (function (root, factory) {
-    define("mock", 
-        ['converse'], 
-        function() { 
-            return factory(); 
+    define("mock",
+        ['converse'],
+        function() {
+            return factory();
         });
 }(this, function (converse) {
     var mock_connection = {
@@ -10,10 +10,11 @@
             'listRooms': function () {},
             'join': function () {},
             'leave': function () {},
-            'removeRoom': function () {}
+            'removeRoom': function () {},
+            'rooms': {}
         },
         'jid': 'dummy@localhost',
-        'addHandler': function (handler, ns, name, type, id, from, options) { 
+        'addHandler': function (handler, ns, name, type, id, from, options) {
             return function () {};
         },
         'send': function () {},
@@ -25,15 +26,22 @@
             'subscribe': function () {},
             'registerCallback': function () {}
         },
-        'vcard': { 
+        'vcard': {
             'get': function (callback, jid) {
-                var name = jid.split('@')[0].replace('.', ' ').split(' ');
-                var firstname = name[0].charAt(0).toUpperCase()+name[0].slice(1);
-                var lastname = name[1].charAt(0).toUpperCase()+name[1].slice(1);
+                var firstname, lastname;
+                if (!jid) {
+                    jid = 'dummy@localhost';
+                    firstname = 'Max';
+                    lastname = 'Mustermann';
+                } else {
+                    var name = jid.split('@')[0].replace('.', ' ').split(' ');
+                    firstname = name[0].charAt(0).toUpperCase()+name[0].slice(1);
+                    lastname = name[1].charAt(0).toUpperCase()+name[1].slice(1);
+                }
                 var fullname = firstname+' '+lastname;
                 var vcard = $iq().c('vCard').c('FN').t(fullname);
                 callback(vcard.tree());
-            } 
+            }
         },
         'disco': {
             'info': function () {},

+ 34 - 0
package.json

@@ -0,0 +1,34 @@
+{
+  "name": "converse.js",
+  "version": "0.5.0",
+  "description": "Browser based XMPP instant messaging client",
+  "main": "main.js",
+  "directories": {
+    "doc": "docs"
+  },
+  "scripts": {
+    "test": ""
+  },
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/jcbrand/converse.js.git"
+  },
+  "keywords": [
+    "XMPP",
+    "Jabber",
+    "chat",
+    "messaging",
+    "chatrooms",
+    "webchat"
+  ],
+  "author": "JC Brand",
+  "license": "MIT",
+  "bugs": {
+    "url": "https://github.com/jcbrand/converse.js/issues"
+  },
+  "devDependencies": {
+    "grunt-cli": "~0.1.9",
+    "grunt": "~0.4.1",
+    "grunt-contrib-jshint": "~0.6.0"
+  }
+}

+ 9 - 9
spec/ChatRoomSpec.js

@@ -147,7 +147,7 @@
                     expect(converse.connection.muc.removeRoom).toHaveBeenCalled();
                     expect(view.renderPasswordForm).toHaveBeenCalled();
                     expect($chat_body.find('form.chatroom-form').length).toBe(1);
-                    expect($chat_body.find('legend').text()).toBe('This chat room requires a password');
+                    expect($chat_body.find('legend').text()).toBe('This chatroom requires a password');
                 });
             }, converse));
 
@@ -162,7 +162,7 @@
                     .c('registration-required').attrs({xmlns:'urn:ietf:params:xml:ns:xmpp-stanzas'}).nodeTree;
                 var view = this.chatboxesview.views['problematic@muc.localhost'];
                 spyOn(converse.connection.muc, 'removeRoom');
-                spyOn(view, 'renderErrorMessage').andCallThrough();
+                spyOn(view, 'showErrorMessage').andCallThrough();
                 view.onChatRoomPresence(presence, {'nick': 'dummy'});
                 expect(converse.connection.muc.removeRoom).toHaveBeenCalled();
                 expect(view.$el.find('.chat-body p').text()).toBe('You are not on the member list of this room');
@@ -179,7 +179,7 @@
                     .c('forbidden').attrs({xmlns:'urn:ietf:params:xml:ns:xmpp-stanzas'}).nodeTree;
                 var view = this.chatboxesview.views['problematic@muc.localhost'];
                 spyOn(converse.connection.muc, 'removeRoom');
-                spyOn(view, 'renderErrorMessage').andCallThrough();
+                spyOn(view, 'showErrorMessage').andCallThrough();
                 view.onChatRoomPresence(presence, {'nick': 'dummy'});
                 expect(converse.connection.muc.removeRoom).toHaveBeenCalled();
                 expect(view.$el.find('.chat-body p').text()).toBe('You have been banned from this room');
@@ -196,7 +196,7 @@
                     .c('jid-malformed').attrs({xmlns:'urn:ietf:params:xml:ns:xmpp-stanzas'}).nodeTree;
                 var view = this.chatboxesview.views['problematic@muc.localhost'];
                 spyOn(converse.connection.muc, 'removeRoom');
-                spyOn(view, 'renderErrorMessage').andCallThrough();
+                spyOn(view, 'showErrorMessage').andCallThrough();
                 view.onChatRoomPresence(presence, {'nick': 'dummy'});
                 expect(converse.connection.muc.removeRoom).toHaveBeenCalled();
                 expect(view.$el.find('.chat-body p').text()).toBe('No nickname was specified');
@@ -213,7 +213,7 @@
                     .c('not-allowed').attrs({xmlns:'urn:ietf:params:xml:ns:xmpp-stanzas'}).nodeTree;
                 var view = this.chatboxesview.views['problematic@muc.localhost'];
                 spyOn(converse.connection.muc, 'removeRoom');
-                spyOn(view, 'renderErrorMessage').andCallThrough();
+                spyOn(view, 'showErrorMessage').andCallThrough();
                 view.onChatRoomPresence(presence, {'nick': 'dummy'});
                 expect(converse.connection.muc.removeRoom).toHaveBeenCalled();
                 expect(view.$el.find('.chat-body p').text()).toBe('You are not allowed to create new rooms');
@@ -230,7 +230,7 @@
                     .c('not-acceptable').attrs({xmlns:'urn:ietf:params:xml:ns:xmpp-stanzas'}).nodeTree;
                 var view = this.chatboxesview.views['problematic@muc.localhost'];
                 spyOn(converse.connection.muc, 'removeRoom');
-                spyOn(view, 'renderErrorMessage').andCallThrough();
+                spyOn(view, 'showErrorMessage').andCallThrough();
                 view.onChatRoomPresence(presence, {'nick': 'dummy'});
                 expect(converse.connection.muc.removeRoom).toHaveBeenCalled();
                 expect(view.$el.find('.chat-body p').text()).toBe("Your nickname doesn't conform to this room's policies");
@@ -247,7 +247,7 @@
                     .c('conflict').attrs({xmlns:'urn:ietf:params:xml:ns:xmpp-stanzas'}).nodeTree;
                 var view = this.chatboxesview.views['problematic@muc.localhost'];
                 spyOn(converse.connection.muc, 'removeRoom');
-                spyOn(view, 'renderErrorMessage').andCallThrough();
+                spyOn(view, 'showErrorMessage').andCallThrough();
                 view.onChatRoomPresence(presence, {'nick': 'dummy'});
                 expect(converse.connection.muc.removeRoom).toHaveBeenCalled();
                 expect(view.$el.find('.chat-body p').text()).toBe("Your nickname is already taken");
@@ -264,7 +264,7 @@
                     .c('item-not-found').attrs({xmlns:'urn:ietf:params:xml:ns:xmpp-stanzas'}).nodeTree;
                 var view = this.chatboxesview.views['problematic@muc.localhost'];
                 spyOn(converse.connection.muc, 'removeRoom');
-                spyOn(view, 'renderErrorMessage').andCallThrough();
+                spyOn(view, 'showErrorMessage').andCallThrough();
                 view.onChatRoomPresence(presence, {'nick': 'dummy'});
                 expect(converse.connection.muc.removeRoom).toHaveBeenCalled();
                 expect(view.$el.find('.chat-body p').text()).toBe("This room does not (yet) exist");
@@ -281,7 +281,7 @@
                     .c('service-unavailable').attrs({xmlns:'urn:ietf:params:xml:ns:xmpp-stanzas'}).nodeTree;
                 var view = this.chatboxesview.views['problematic@muc.localhost'];
                 spyOn(converse.connection.muc, 'removeRoom');
-                spyOn(view, 'renderErrorMessage').andCallThrough();
+                spyOn(view, 'showErrorMessage').andCallThrough();
                 view.onChatRoomPresence(presence, {'nick': 'dummy'});
                 expect(converse.connection.muc.removeRoom).toHaveBeenCalled();
                 expect(view.$el.find('.chat-body p').text()).toBe("This room has reached it's maximum number of occupants");

+ 19 - 22
spec/MainSpec.js

@@ -54,7 +54,7 @@
                 expect($("div#controlbox").is(':visible')).toBe(true);
             }, converse);
             it("can be opened by clicking a DOM element with class 'toggle-online-users'", open_controlbox);
-            
+
             describe("The Status Widget", $.proxy(function () {
                 it("can be used to set the current user's chat status", $.proxy(function () {
                     var view = this.xmppstatusview;
@@ -121,7 +121,7 @@
                     var i, t, is_last;
                     spyOn(this.rosterview, 'render').andCallThrough();
                     for (i=0; i<pend_names.length; i++) {
-                        is_last = i==(pend_names.length-1);
+                        is_last = i===(pend_names.length-1);
                         this.roster.create({
                             jid: pend_names[i].replace(' ','.').toLowerCase() + '@localhost',
                             subscription: 'none',
@@ -129,7 +129,7 @@
                             fullname: pend_names[i],
                             is_last: is_last
                         });
-                        // For performance reasons, the roster should only be shown once 
+                        // For performance reasons, the roster should only be shown once
                         // the last contact has been added.
                         if (is_last) {
                             expect(this.rosterview.$el.is(':visible')).toEqual(true);
@@ -162,7 +162,7 @@
                             subscription: 'both',
                             ask: null,
                             fullname: cur_names[i],
-                            is_last: i==(cur_names.length-1)
+                            is_last: i===(cur_names.length-1)
                         });
                         expect(this.rosterview.render).toHaveBeenCalled();
                         // Check that they are sorted alphabetically
@@ -291,7 +291,7 @@
                             subscription: 'none',
                             ask: 'request',
                             fullname: req_names[i],
-                            is_last: i==(req_names.length-1)
+                            is_last: i===(req_names.length-1)
                         });
                         expect(this.rosterview.render).toHaveBeenCalled();
                         // Check that they are sorted alphabetically
@@ -335,7 +335,7 @@
                     expect(this.rosterview.removeRosterItem).toHaveBeenCalled();
                     expect(this.connection.roster.unauthorize).toHaveBeenCalled();
                     // There should now be one less contact
-                    expect(this.roster.length).toEqual(num_contacts-1); 
+                    expect(this.roster.length).toEqual(num_contacts-1);
                 }, converse));
             }, converse));
 
@@ -368,7 +368,7 @@
 
                 afterEach($.proxy(function () {
                     // Contacts retrieved from localStorage have chat_status of
-                    // "offline". 
+                    // "offline".
                     // In the next test suite, we need some online contacts, so
                     // we make some online now
                     for (i=0; i<5; i++) {
@@ -456,7 +456,7 @@
                 expect(newchatboxes.length).toEqual(0);
 
                 // Lets open the controlbox again, purely for visual feedback
-                open_controlbox(); 
+                open_controlbox();
             }, converse));
 
             describe("A Chat Message", $.proxy(function () {
@@ -465,14 +465,12 @@
                     var sender_jid = cur_names[0].replace(' ','.').toLowerCase() + '@localhost';
                         msg = $msg({
                             from: sender_jid,
-                            to: this.connection.jid, 
-                            type: 'chat', 
+                            to: this.connection.jid,
+                            type: 'chat',
                             id: (new Date()).getTime()
                         }).c('body').t(message).up()
                           .c('active', {'xmlns': 'http://jabber.org/protocol/chatstates'}).tree();
 
-                    spyOn(this, 'getVCard').andCallThrough();
-
                     // We don't already have an open chatbox for this user
                     expect(this.chatboxes.get(sender_jid)).not.toBeDefined();
 
@@ -483,10 +481,6 @@
                     }, converse));
                     waits(500);
                     runs($.proxy(function () {
-                        // Since we didn't already have an open chatbox, one
-                        // will asynchronously created inside a callback to
-                        // getVCard
-                        expect(this.getVCard).toHaveBeenCalled();
                         // Check that the chatbox and its view now exist
                         var chatbox = this.chatboxes.get(sender_jid);
                         var chatboxview = this.chatboxesview.views[sender_jid];
@@ -504,8 +498,11 @@
                         expect(msg_obj.get('delayed')).toEqual(false);
                         // Now check that the message appears inside the
                         // chatbox in the DOM
-                        var txt = chatboxview.$el.find('.chat-content').find('.chat-message').find('.chat-message-content').text();
-                        expect(txt).toEqual(message);
+                        var $chat_content = chatboxview.$el.find('.chat-content');
+                        var msg_txt = $chat_content.find('.chat-message').find('.chat-message-content').text();
+                        expect(msg_txt).toEqual(message);
+                        var sender_txt = $chat_content.find('span.chat-message-them').text();
+                        expect(sender_txt.match(/^[0-9][0-9]:[0-9][0-9] /)).toBeTruthy();
                     }, converse));
                 }, converse));
 
@@ -537,8 +534,8 @@
                 var sender_jid = cur_names[0].replace(' ','.').toLowerCase() + '@localhost';
                     msg = $msg({
                         from: sender_jid,
-                        to: this.connection.jid, 
-                        type: 'chat', 
+                        to: this.connection.jid,
+                        type: 'chat',
                         id: (new Date()).getTime()
                     }).c('body').t(message).up()
                       .c('active', {'xmlns': 'http://jabber.org/protocol/chatstates'}).tree();
@@ -566,8 +563,8 @@
                 var sender_jid = cur_names[0].replace(' ','.').toLowerCase() + '@localhost';
                     msg = $msg({
                         from: sender_jid,
-                        to: this.connection.jid, 
-                        type: 'chat', 
+                        to: this.connection.jid,
+                        type: 'chat',
                         id: (new Date()).getTime()
                     }).c('body').t(message).up()
                       .c('active', {'xmlns': 'http://jabber.org/protocol/chatstates'}).tree();

برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است