From fd918a52437d2548818e8ec8bfab55b243d7a960 Mon Sep 17 00:00:00 2001 From: Pete Nicholls Date: Tue, 10 Dec 2013 23:28:22 +1300 Subject: [PATCH 01/33] Support using OTR by default --- converse.js | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/converse.js b/converse.js index fceac4529..a4b75693d 100644 --- a/converse.js +++ b/converse.js @@ -144,6 +144,7 @@ this.xhr_custom_status_url = ''; this.xhr_user_search = false; this.xhr_user_search_url = ''; + this.use_otr_by_default = false; // Allow only whitelisted configuration attributes to be overwritten _.extend(this, _.pick(settings, [ @@ -171,12 +172,16 @@ 'xhr_custom_status', 'xhr_custom_status_url', 'xhr_user_search', - 'xhr_user_search_url' + 'xhr_user_search_url', + 'use_otr_by_default' ])); // Only allow OTR if we have the capability this.allow_otr = this.allow_otr && HAS_CRYPTO; + // Only use OTR by default if allow OTR is enabled to begin with + this.use_otr_by_default = this.use_otr_by_default && this.allow_otr; + // Translation machinery // --------------------- var __ = $.proxy(function (str) { @@ -836,9 +841,14 @@ this.updateVCard(); this.$el.appendTo(converse.chatboxesview.$el); this.render().show().model.messages.fetch({add: true}); + if (this.model.get('status')) { this.showStatusMessage(this.model.get('status')); } + + if (converse.use_otr_by_default) { + this.model.initiateOTR(); + } }, render: function () { From 201004f815b94099a5becd73c46c48e857198158 Mon Sep 17 00:00:00 2001 From: Pete Nicholls Date: Thu, 19 Dec 2013 12:01:06 +1300 Subject: [PATCH 02/33] Order options alphabetically --- converse.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/converse.js b/converse.js index a4b75693d..24539f396 100644 --- a/converse.js +++ b/converse.js @@ -139,12 +139,12 @@ this.show_only_online_users = false; this.show_emoticons = true; this.show_toolbar = true; + this.use_otr_by_default = false; this.use_vcards = true; this.xhr_custom_status = false; this.xhr_custom_status_url = ''; this.xhr_user_search = false; this.xhr_user_search_url = ''; - this.use_otr_by_default = false; // Allow only whitelisted configuration attributes to be overwritten _.extend(this, _.pick(settings, [ @@ -168,12 +168,12 @@ 'show_only_online_users', 'show_toolbar', 'sid', + 'use_otr_by_default', 'use_vcards', 'xhr_custom_status', 'xhr_custom_status_url', 'xhr_user_search', - 'xhr_user_search_url', - 'use_otr_by_default' + 'xhr_user_search_url' ])); // Only allow OTR if we have the capability From cf22003a97050dc2769006713dc5917858036a18 Mon Sep 17 00:00:00 2001 From: JC Brand Date: Wed, 22 Jan 2014 17:07:50 +0200 Subject: [PATCH 03/33] Regenerated Pot file. --- locale/converse.pot | 340 ++++++++++++++++++++++---------------------- 1 file changed, 170 insertions(+), 170 deletions(-) diff --git a/locale/converse.pot b/locale/converse.pot index ca715ab46..b4d21a5d5 100644 --- a/locale/converse.pot +++ b/locale/converse.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: Converse.js 0.4\n" +"Project-Id-Version: Converse.js 0.7.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-09-15 22:06+0200\n" +"POT-Creation-Date: 2014-01-22 17:07+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,66 +17,94 @@ msgstr "" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: converse.js:125 +#: converse.js:217 msgid "unencrypted" msgstr "" -#: converse.js:126 +#: converse.js:218 msgid "unverified" msgstr "" -#: converse.js:127 +#: converse.js:219 msgid "verified" msgstr "" -#: converse.js:128 +#: converse.js:220 msgid "finished" msgstr "" -#: converse.js:161 +#: converse.js:223 +msgid "This contact is busy" +msgstr "" + +#: converse.js:224 +msgid "This contact is online" +msgstr "" + +#: converse.js:225 +msgid "This contact is offline" +msgstr "" + +#: converse.js:226 +msgid "This contact is unavailable" +msgstr "" + +#: converse.js:227 +msgid "This contact is away for an extended period" +msgstr "" + +#: converse.js:228 +msgid "This contact is away" +msgstr "" + +#: converse.js:321 msgid "Disconnected" msgstr "" -#: converse.js:165 +#: converse.js:331 msgid "Error" msgstr "" -#: converse.js:167 +#: converse.js:333 msgid "Connecting" msgstr "" -#: converse.js:170 +#: converse.js:336 msgid "Connection Failed" msgstr "" -#: converse.js:172 +#: converse.js:338 msgid "Authenticating" msgstr "" -#: converse.js:175 +#: converse.js:341 msgid "Authentication Failed" msgstr "" -#: converse.js:177 +#: converse.js:343 msgid "Disconnecting" msgstr "" -#: converse.js:332 +#: converse.js:479 +msgid "Online Contacts" +msgstr "" + +#: converse.js:540 msgid "Re-establishing encrypted session" msgstr "" -#: converse.js:340 +#: converse.js:548 msgid "" "Your browser needs to generate a private key, which will be used in your " "encrypted chat session. This can take up to 30 seconds during which your " "browser might freeze and become unresponsive." msgstr "" -#: converse.js:349 +#: converse.js:557 msgid "Private key generated." msgstr "" -#: converse.js:380 +#: converse.js:588 msgid "" "Authentication request from %1$s\n" "\n" @@ -86,71 +114,71 @@ msgid "" "%2$s" msgstr "" -#: converse.js:389 +#: converse.js:597 msgid "Could not verify this user's identify." msgstr "" -#: converse.js:537 +#: converse.js:750 msgid "Personal message" msgstr "" -#: converse.js:559 +#: converse.js:795 msgid "Start encrypted conversation" msgstr "" -#: converse.js:562 +#: converse.js:798 msgid "Refresh encrypted conversation" msgstr "" -#: converse.js:563 +#: converse.js:799 msgid "End encrypted conversation" msgstr "" -#: converse.js:564 +#: converse.js:800 msgid "Verify with SMP" msgstr "" -#: converse.js:567 +#: converse.js:803 msgid "Verify with fingerprints" msgstr "" -#: converse.js:569 +#: converse.js:805 msgid "What's this?" msgstr "" -#: converse.js:641 +#: converse.js:906 msgid "me" msgstr "" -#: converse.js:757 converse.js:1552 +#: converse.js:1022 converse.js:1864 msgid "Show this menu" msgstr "" -#: converse.js:758 converse.js:1553 +#: converse.js:1023 converse.js:1865 msgid "Write in the third person" msgstr "" -#: converse.js:759 converse.js:1557 +#: converse.js:1024 converse.js:1869 msgid "Remove messages" msgstr "" -#: converse.js:830 +#: converse.js:1110 msgid "Your message could not be sent" msgstr "" -#: converse.js:833 +#: converse.js:1113 msgid "We received an unencrypted message" msgstr "" -#: converse.js:836 +#: converse.js:1116 msgid "We received an unreadable encrypted message" msgstr "" -#: converse.js:845 +#: converse.js:1125 msgid "This user has requested an encrypted session." msgstr "" -#: converse.js:863 +#: converse.js:1147 msgid "" "Here are the fingerprints, please confirm them with %1$s, outside of this " "chat.\n" @@ -163,7 +191,7 @@ msgid "" "Cancel." msgstr "" -#: converse.js:876 +#: converse.js:1160 msgid "" "You will be prompted to provide a security question and then an answer to " "that question.\n" @@ -172,471 +200,443 @@ msgid "" "exact same answer (case sensitive), their identity will have been verified." msgstr "" -#: converse.js:877 +#: converse.js:1161 msgid "What is your security question?" msgstr "" -#: converse.js:879 +#: converse.js:1163 msgid "What is the answer to the security question?" msgstr "" -#: converse.js:883 +#: converse.js:1167 msgid "Invalid authentication scheme provided" msgstr "" -#: converse.js:953 +#: converse.js:1248 msgid "Your messages are not encrypted anymore" msgstr "" -#: converse.js:955 +#: converse.js:1250 msgid "" "Your messages are now encrypted but your buddy's identity has not been " "verified." msgstr "" -#: converse.js:957 +#: converse.js:1252 msgid "Your buddy's identify has been verified." msgstr "" -#: converse.js:959 +#: converse.js:1254 msgid "Your buddy has ended encryption on their end, you should do the same." msgstr "" -#: converse.js:968 +#: converse.js:1263 msgid "Your messages are not encrypted. Click here to enable OTR encryption." msgstr "" -#: converse.js:970 +#: converse.js:1265 msgid "Your messages are encrypted, but your buddy has not been verified." msgstr "" -#: converse.js:972 +#: converse.js:1267 msgid "Your messages are encrypted and your buddy verified." msgstr "" -#: converse.js:974 +#: converse.js:1269 msgid "" "Your buddy has closed their end of the private session, you should do the " "same" msgstr "" -#: converse.js:1049 +#: converse.js:1354 msgid "Contacts" msgstr "" -#: converse.js:1054 +#: converse.js:1359 msgid "Online" msgstr "" -#: converse.js:1055 +#: converse.js:1360 msgid "Busy" msgstr "" -#: converse.js:1056 +#: converse.js:1361 msgid "Away" msgstr "" -#: converse.js:1057 +#: converse.js:1362 msgid "Offline" msgstr "" -#: converse.js:1064 +#: converse.js:1372 msgid "Click to add new chat contacts" msgstr "" -#: converse.js:1065 +#: converse.js:1373 msgid "Add a contact" msgstr "" -#: converse.js:1074 +#: converse.js:1382 msgid "Contact username" msgstr "" -#: converse.js:1075 +#: converse.js:1383 msgid "Add" msgstr "" -#: converse.js:1083 +#: converse.js:1391 msgid "Contact name" msgstr "" -#: converse.js:1084 +#: converse.js:1392 msgid "Search" msgstr "" -#: converse.js:1124 +#: converse.js:1439 msgid "No users found" msgstr "" -#: converse.js:1131 +#: converse.js:1446 msgid "Click to add as a chat contact" msgstr "" -#: converse.js:1191 +#: converse.js:1498 msgid "Click to open this room" msgstr "" -#: converse.js:1193 +#: converse.js:1500 msgid "Show more information on this room" msgstr "" -#: converse.js:1199 +#: converse.js:1506 msgid "Description:" msgstr "" -#: converse.js:1200 +#: converse.js:1507 msgid "Occupants:" msgstr "" -#: converse.js:1201 +#: converse.js:1508 msgid "Features:" msgstr "" -#: converse.js:1203 +#: converse.js:1510 msgid "Requires authentication" msgstr "" -#: converse.js:1206 +#: converse.js:1513 msgid "Hidden" msgstr "" -#: converse.js:1209 +#: converse.js:1516 msgid "Requires an invitation" msgstr "" -#: converse.js:1212 +#: converse.js:1519 msgid "Moderated" msgstr "" -#: converse.js:1215 +#: converse.js:1522 msgid "Non-anonymous" msgstr "" -#: converse.js:1218 +#: converse.js:1525 msgid "Open room" msgstr "" -#: converse.js:1221 +#: converse.js:1528 msgid "Permanent room" msgstr "" -#: converse.js:1224 +#: converse.js:1531 msgid "Public" msgstr "" -#: converse.js:1227 +#: converse.js:1534 msgid "Semi-anonymous" msgstr "" -#: converse.js:1230 +#: converse.js:1537 msgid "Temporary room" msgstr "" -#: converse.js:1233 +#: converse.js:1540 msgid "Unmoderated" msgstr "" -#: converse.js:1239 +#: converse.js:1546 msgid "Rooms" msgstr "" -#: converse.js:1243 +#: converse.js:1550 msgid "Room name" msgstr "" -#: converse.js:1244 +#: converse.js:1551 msgid "Nickname" msgstr "" -#: converse.js:1245 +#: converse.js:1552 msgid "Server" msgstr "" -#: converse.js:1246 +#: converse.js:1553 msgid "Join" msgstr "" -#: converse.js:1247 +#: converse.js:1554 msgid "Show rooms" msgstr "" #. For translators: %1$s is a variable and will be replaced with the XMPP server name -#: converse.js:1282 +#: converse.js:1589 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:1297 +#: converse.js:1604 msgid "Rooms on %1$s" msgstr "" -#: converse.js:1554 +#: converse.js:1866 msgid "Set chatroom topic" msgstr "" -#: converse.js:1555 +#: converse.js:1867 msgid "Kick user from chatroom" msgstr "" -#: converse.js:1556 +#: converse.js:1868 msgid "Ban user from chatroom" msgstr "" -#: converse.js:1583 +#: converse.js:1898 msgid "Message" msgstr "" -#: converse.js:1697 converse.js:2783 +#: converse.js:2013 converse.js:3168 msgid "Save" msgstr "" -#: converse.js:1698 +#: converse.js:2014 msgid "Cancel" msgstr "" -#: converse.js:1745 +#: converse.js:2061 msgid "An error occurred while trying to save the form." msgstr "" -#: converse.js:1791 +#: converse.js:2107 msgid "This chatroom requires a password" msgstr "" -#: converse.js:1792 +#: converse.js:2108 msgid "Password: " msgstr "" -#: converse.js:1793 +#: converse.js:2109 msgid "Submit" msgstr "" -#: converse.js:1807 +#: converse.js:2123 msgid "This room is not anonymous" msgstr "" -#: converse.js:1808 +#: converse.js:2124 msgid "This room now shows unavailable members" msgstr "" -#: converse.js:1809 +#: converse.js:2125 msgid "This room does not show unavailable members" msgstr "" -#: converse.js:1810 +#: converse.js:2126 msgid "Non-privacy-related room configuration has changed" msgstr "" -#: converse.js:1811 +#: converse.js:2127 msgid "Room logging is now enabled" msgstr "" -#: converse.js:1812 +#: converse.js:2128 msgid "Room logging is now disabled" msgstr "" -#: converse.js:1813 +#: converse.js:2129 msgid "This room is now non-anonymous" msgstr "" -#: converse.js:1814 +#: converse.js:2130 msgid "This room is now semi-anonymous" msgstr "" -#: converse.js:1815 +#: converse.js:2131 msgid "This room is now fully-anonymous" msgstr "" -#: converse.js:1816 +#: converse.js:2132 msgid "A new room has been created" msgstr "" -#: converse.js:1817 +#: converse.js:2133 msgid "Your nickname has been changed" msgstr "" -#: converse.js:1831 +#: converse.js:2147 msgid "%1$s has been banned" msgstr "" -#: converse.js:1832 +#: converse.js:2148 msgid "%1$s has been kicked out" msgstr "" -#: converse.js:1833 +#: converse.js:2149 msgid "%1$s has been removed because of an affiliation change" msgstr "" -#: converse.js:1834 +#: converse.js:2150 msgid "%1$s has been removed for not being a member" msgstr "" -#: converse.js:1838 converse.js:1898 +#: converse.js:2154 converse.js:2214 msgid "You have been banned from this room" msgstr "" -#: converse.js:1839 +#: converse.js:2155 msgid "You have been kicked from this room" msgstr "" -#: converse.js:1840 +#: converse.js:2156 msgid "You have been removed from this room because of an affiliation change" msgstr "" -#: converse.js:1841 +#: converse.js:2157 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:1842 +#: converse.js:2158 msgid "" "You have been removed from this room because the MUC (Multi-user chat) " "service is being shut down." msgstr "" -#: converse.js:1896 +#: converse.js:2212 msgid "You are not on the member list of this room" msgstr "" -#: converse.js:1902 +#: converse.js:2218 msgid "No nickname was specified" msgstr "" -#: converse.js:1906 +#: converse.js:2222 msgid "You are not allowed to create new rooms" msgstr "" -#: converse.js:1908 +#: converse.js:2224 msgid "Your nickname doesn't conform to this room's policies" msgstr "" -#: converse.js:1910 +#: converse.js:2226 msgid "Your nickname is already taken" msgstr "" -#: converse.js:1912 +#: converse.js:2228 msgid "This room does not (yet) exist" msgstr "" -#: converse.js:1914 +#: converse.js:2230 msgid "This room has reached it's maximum number of occupants" msgstr "" -#: converse.js:1993 +#: converse.js:2309 msgid "Topic set by %1$s to: %2$s" msgstr "" -#: converse.js:2009 +#: converse.js:2330 msgid "This user is a moderator" msgstr "" -#: converse.js:2012 +#: converse.js:2333 msgid "This user can send messages in this room" msgstr "" -#: converse.js:2015 +#: converse.js:2336 msgid "This user can NOT send messages in this room" msgstr "" -#: converse.js:2225 +#: converse.js:2562 msgid "Click to chat with this contact" msgstr "" -#: converse.js:2228 converse.js:2232 +#: converse.js:2565 converse.js:2569 msgid "Click to remove this contact" msgstr "" -#: converse.js:2263 -msgid "This contact is busy" -msgstr "" - -#: converse.js:2264 -msgid "This contact is online" -msgstr "" - -#: converse.js:2265 -msgid "This contact is offline" -msgstr "" - -#: converse.js:2266 -msgid "This contact is unavailable" -msgstr "" - -#: converse.js:2267 -msgid "This contact is away for an extended period" -msgstr "" - -#: converse.js:2268 -msgid "This contact is away" -msgstr "" - -#: converse.js:2622 +#: converse.js:2919 msgid "Contact requests" msgstr "" -#: converse.js:2623 +#: converse.js:2922 msgid "My contacts" msgstr "" -#: converse.js:2624 +#: converse.js:2925 msgid "Pending contacts" msgstr "" -#: converse.js:2782 +#: converse.js:3167 msgid "Custom status" msgstr "" -#: converse.js:2788 +#: converse.js:3173 msgid "Click to change your chat status" msgstr "" -#: converse.js:2792 +#: converse.js:3177 msgid "Click here to write a custom status message" msgstr "" -#: converse.js:2821 converse.js:2829 +#: converse.js:3206 converse.js:3214 msgid "online" msgstr "" -#: converse.js:2823 +#: converse.js:3208 msgid "busy" msgstr "" -#: converse.js:2825 +#: converse.js:3210 msgid "away for long" msgstr "" -#: converse.js:2827 +#: converse.js:3212 msgid "away" msgstr "" #. For translators: the %1$s part gets replaced with the status #. Example, I am online -#: converse.js:2841 converse.js:2878 +#: converse.js:3226 converse.js:3263 msgid "I am %1$s" msgstr "" -#: converse.js:2949 +#: converse.js:3334 msgid "Sign in" msgstr "" -#: converse.js:2952 +#: converse.js:3338 msgid "XMPP/Jabber Username:" msgstr "" -#: converse.js:2954 +#: converse.js:3340 msgid "Password:" msgstr "" -#: converse.js:2956 +#: converse.js:3342 msgid "Log In" msgstr "" -#: converse.js:2960 +#: converse.js:3346 msgid "BOSH Service URL:" msgstr "" - -#: converse.js:3113 -msgid "Online Contacts" -msgstr "" From 777f03bbf3bad83e08d40f2715bd75f2fbd278f4 Mon Sep 17 00:00:00 2001 From: GreenLunar Date: Fri, 24 Jan 2014 16:01:13 +0200 Subject: [PATCH 04/33] add Hebrew po --- locale/he/LC_MESSAGES/converse.po | 671 ++++++++++++++++++++++++++++++ 1 file changed, 671 insertions(+) create mode 100644 locale/he/LC_MESSAGES/converse.po diff --git a/locale/he/LC_MESSAGES/converse.po b/locale/he/LC_MESSAGES/converse.po new file mode 100644 index 000000000..9c1542dcf --- /dev/null +++ b/locale/he/LC_MESSAGES/converse.po @@ -0,0 +1,671 @@ +# Language HE translations for Converse.js package. +# Copyright (C) 2013 Jan-Carel Brand +# This file is distributed under the same license as the Converse.js package. +# GreenLunar , 2014. +# +msgid "" +msgstr "" +"Project-Id-Version: Converse.js 0.7.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-01-22 17:07+0200\n" +"PO-Revision-Date: 2014-01-24 15:40+0200\n" +"Last-Translator: GreenLunar \n" +"Language-Team: Rahut \n" +"Language: he\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.5.1\n" + +#: converse.js:217 +msgid "unencrypted" +msgstr "לא מוצפנת" + +#: converse.js:218 +msgid "unverified" +msgstr "לא מאומתת" + +#: converse.js:219 +msgid "verified" +msgstr "מאומתת" + +#: converse.js:220 +msgid "finished" +msgstr "מוגמרת" + +# איש קשר זה הינו +#: converse.js:223 +msgid "This contact is busy" +msgstr "איש קשר זה עסוק" + +#: converse.js:224 +msgid "This contact is online" +msgstr "איש קשר זה מקוון" + +# איש קשר זה אינו +#: converse.js:225 +msgid "This contact is offline" +msgstr "איש קשר זה לא מקוון" + +#: converse.js:226 +msgid "This contact is unavailable" +msgstr "איש קשר זה לא זמין" + +#: converse.js:227 +msgid "This contact is away for an extended period" +msgstr "איש קשר זה נעדר למשך זמן ממושך" + +#: converse.js:228 +msgid "This contact is away" +msgstr "איש קשר זה הינו נעדר" + +#: converse.js:321 +msgid "Disconnected" +msgstr "מנותק" + +#: converse.js:331 +msgid "Error" +msgstr "שגיאה" + +#: converse.js:333 +msgid "Connecting" +msgstr "כעת מתחבר" + +#: converse.js:336 +msgid "Connection Failed" +msgstr "חיבור נכשל" + +#: converse.js:338 +msgid "Authenticating" +msgstr "כעת מאמת" + +#: converse.js:341 +msgid "Authentication Failed" +msgstr "אימות נכשל" + +#: converse.js:343 +msgid "Disconnecting" +msgstr "כעת מתנתק" + +#: converse.js:479 +msgid "Online Contacts" +msgstr "אנשי קשר מקוונים" + +#: converse.js:540 +msgid "Re-establishing encrypted session" +msgstr "בסס מחדש ישיבה מוצפנת" + +#: converse.js:548 +msgid "" +"Your browser needs to generate a private key, which will be used in your " +"encrypted chat session. This can take up to 30 seconds during which your " +"browser might freeze and become unresponsive." +msgstr "" +"על הדפדפן שלך להפיק מפתח פרטי, אשר ישמש אותך בישיבות שיחה מוצפנות. פעולה זו " +"יכולה לקחת למעלה מן 30 שניות אשר במהלכה הדפדפן שלך עשוי לקפוא ולהפוך לחסר " +"תגובה." + +#: converse.js:557 +msgid "Private key generated." +msgstr "מפתח פרטי הופק." + +#: converse.js:588 +msgid "" +"Authentication request from %1$s\n" +"\n" +"Your buddy is attempting to verify your identity, by asking you the question " +"below.\n" +"\n" +"%2$s" +msgstr "" +"בקשת אימות מאת %1$s\n" +"\n" +"האישיות שכנגד מנסה לאמת את הזהות שלך, בעזרת שאילת שאלה להלן.\n" +"\n" +"%2$s" + +#: converse.js:597 +msgid "Could not verify this user's identify." +msgstr "לא היתה אפשרות לאמת את זהות משתמש זה." + +#: converse.js:750 +msgid "Personal message" +msgstr "הודעה אישית" + +#: converse.js:795 +msgid "Start encrypted conversation" +msgstr "התחל ישיבה מוצפנת" + +#: converse.js:798 +msgid "Refresh encrypted conversation" +msgstr "רענן ישיבה מוצפנת" + +#: converse.js:799 +msgid "End encrypted conversation" +msgstr "סיים ישיבה מוצפנת" + +#: converse.js:800 +msgid "Verify with SMP" +msgstr "אמת בעזרת SMP" + +#: converse.js:803 +msgid "Verify with fingerprints" +msgstr "אמת בעזרת טביעות אצבע" + +#: converse.js:805 +msgid "What's this?" +msgstr "מה זה?" + +#: converse.js:906 +msgid "me" +msgstr "אני" + +#: converse.js:1022 converse.js:1864 +msgid "Show this menu" +msgstr "הצג את תפריט זה" + +#: converse.js:1023 converse.js:1865 +msgid "Write in the third person" +msgstr "כתוב בגוף השלישי" + +#: converse.js:1024 converse.js:1869 +msgid "Remove messages" +msgstr "הסר הודעות" + +#: converse.js:1110 +msgid "Your message could not be sent" +msgstr "ההודעה שלך לא היתה יכולה להישלח" + +#: converse.js:1113 +msgid "We received an unencrypted message" +msgstr "אנחנו קיבלנו הודעה לא מוצפנת" + +#: converse.js:1116 +msgid "We received an unreadable encrypted message" +msgstr "אנחנו קיבלנו הודעה מוצפנת לא קריאה" + +#: converse.js:1125 +msgid "This user has requested an encrypted session." +msgstr "משתמש זה ביקש ישיבה מוצפנת." + +#: converse.js:1147 +msgid "" +"Here are the fingerprints, please confirm them with %1$s, outside of this " +"chat.\n" +"\n" +"Fingerprint for you, %2$s: %3$s\n" +"\n" +"Fingerprint for %1$s: %4$s\n" +"\n" +"If you have confirmed that the fingerprints match, click OK, otherwise click " +"Cancel." +msgstr "" +"הרי טביעות האצבע, אנא אמת אותן עם %1$s, מחוץ לשיחה זו.\n" +"\n" +"טביעת אצבע עבורך, %2$s: %3$s\n" +"\n" +"טביעת אצבע עבור %1$s: %4$s\n" +"\n" +"היה ואימתת כי טביעות האצבע תואמות, לחץ אישור (OK), אחרת לחץ ביטול (Cancel)." + +# הקצה השני +#: converse.js:1160 +msgid "" +"You will be prompted to provide a security question and then an answer to " +"that question.\n" +"\n" +"Your buddy will then be prompted the same question and if they type the " +"exact same answer (case sensitive), their identity will have been verified." +msgstr "" +"אתה תתבקש לספק שאלת אבטחה ולאחריה תשובה לשאלה הזו.\n" +"\n" +"האישיות שכנגד תתבקש עובר זאת לאותה שאלת אבטחה ואם זו תקלידו את את אותה " +"התשובה במדויק (case sensitive), זהותה תאומת." + +#: converse.js:1161 +msgid "What is your security question?" +msgstr "מהי שאלת האבטחה שלך?" + +#: converse.js:1163 +msgid "What is the answer to the security question?" +msgstr "מהי התשובה לשאלת האבטחה?" + +# תרשים +#: converse.js:1167 +msgid "Invalid authentication scheme provided" +msgstr "סופקה סכימת אימות שגויה" + +#: converse.js:1248 +msgid "Your messages are not encrypted anymore" +msgstr "ההודעות שלך אינן מוצפנות עוד" + +#: converse.js:1250 +msgid "" +"Your messages are now encrypted but your buddy's identity has not been " +"verified." +msgstr "ההודעות שלך מוצפנות כעת אך זהות האישיות שכנגד טרם אומתה." + +#: converse.js:1252 +msgid "Your buddy's identify has been verified." +msgstr "זהות האישיות שכנגד אומתה." + +#: converse.js:1254 +msgid "Your buddy has ended encryption on their end, you should do the same." +msgstr "האישיות שכנגד סיימה הצפנה בקצה שלה, עליך לעשות את אותו הדבר." + +#: converse.js:1263 +msgid "Your messages are not encrypted. Click here to enable OTR encryption." +msgstr "ההודעות שלך אינן וצפנות. לחץ כאן כדי לאפשר OTR." + +#: converse.js:1265 +msgid "Your messages are encrypted, but your buddy has not been verified." +msgstr "ההודעות שלך מוצפנות כעת, אך האישיות שכנגד טרם אומתה." + +#: converse.js:1267 +msgid "Your messages are encrypted and your buddy verified." +msgstr "ההודעות שלך מוצפנות כעת והאישיות שכנגד אומתה." + +#: converse.js:1269 +msgid "" +"Your buddy has closed their end of the private session, you should do the " +"same" +msgstr "האישיות שכנגד סגרה את קצה הישיבה הפרטית שלה, עליך לעשות את אותו הדבר." + +#: converse.js:1354 +msgid "Contacts" +msgstr "אנשי קשר" + +#: converse.js:1359 +msgid "Online" +msgstr "מקוון" + +#: converse.js:1360 +msgid "Busy" +msgstr "עסוק" + +#: converse.js:1361 +msgid "Away" +msgstr "נעדר" + +#: converse.js:1362 +msgid "Offline" +msgstr "בלתי מקוון" + +#: converse.js:1372 +msgid "Click to add new chat contacts" +msgstr "לחץ כדי להוסיף אנשי קשר שיחה חדשים" + +#: converse.js:1373 +msgid "Add a contact" +msgstr "הוסף איש קשר" + +#: converse.js:1382 +msgid "Contact username" +msgstr "שם משתמש איש קשר" + +#: converse.js:1383 +msgid "Add" +msgstr "הוסף" + +#: converse.js:1391 +msgid "Contact name" +msgstr "שם איש קשר" + +#: converse.js:1392 +msgid "Search" +msgstr "חיפוש" + +#: converse.js:1439 +msgid "No users found" +msgstr "לא נמצאו משתמשים" + +#: converse.js:1446 +msgid "Click to add as a chat contact" +msgstr "לחץ כדי להוסיף בתור איש קשר שיחה" + +#: converse.js:1498 +msgid "Click to open this room" +msgstr "לחץ כדי לפתוח את חדר זה" + +#: converse.js:1500 +msgid "Show more information on this room" +msgstr "הצג עוד מידע אודות חדר זה" + +#: converse.js:1506 +msgid "Description:" +msgstr "תיאור:" + +#: converse.js:1507 +msgid "Occupants:" +msgstr "נוכחים:" + +#: converse.js:1508 +msgid "Features:" +msgstr "תכונות:" + +#: converse.js:1510 +msgid "Requires authentication" +msgstr "מצריך אישור" + +#: converse.js:1513 +msgid "Hidden" +msgstr "נסתר" + +#: converse.js:1516 +msgid "Requires an invitation" +msgstr "מצריך הזמנה" + +#: converse.js:1519 +msgid "Moderated" +msgstr "מבוקר" + +#: converse.js:1522 +msgid "Non-anonymous" +msgstr "לא אנונימי" + +#: converse.js:1525 +msgid "Open room" +msgstr "פתח חדר" + +#: converse.js:1528 +msgid "Permanent room" +msgstr "חדר צמיתה" + +#: converse.js:1531 +msgid "Public" +msgstr "פומבי" + +#: converse.js:1534 +msgid "Semi-anonymous" +msgstr "אנונימי למחצה" + +#: converse.js:1537 +msgid "Temporary room" +msgstr "חדר זמני" + +#: converse.js:1540 +msgid "Unmoderated" +msgstr "לא מבוקר" + +#: converse.js:1546 +msgid "Rooms" +msgstr "חדרים" + +#: converse.js:1550 +msgid "Room name" +msgstr "שם חדר" + +#: converse.js:1551 +msgid "Nickname" +msgstr "שם כינוי" + +#: converse.js:1552 +msgid "Server" +msgstr "שרת" + +#: converse.js:1553 +msgid "Join" +msgstr "הצטרף" + +#: converse.js:1554 +msgid "Show rooms" +msgstr "הצג חדרים" + +#. For translators: %1$s is a variable and will be replaced with the XMPP server name +#: converse.js:1589 +msgid "No rooms on %1$s" +msgstr "אין חדרים על %1$s" + +#. For translators: %1$s is a variable and will be +#. replaced with the XMPP server name +#: converse.js:1604 +msgid "Rooms on %1$s" +msgstr "חדרים על %1$s" + +#: converse.js:1866 +msgid "Set chatroom topic" +msgstr "רבע נושא חדר שיחה" + +#: converse.js:1867 +msgid "Kick user from chatroom" +msgstr "בעט משתמש מתוך חדר שיחה" + +#: converse.js:1868 +msgid "Ban user from chatroom" +msgstr "אסור משתמש מתוך חדר שיחה" + +#: converse.js:1898 +msgid "Message" +msgstr "הודעה" + +#: converse.js:2013 converse.js:3168 +msgid "Save" +msgstr "שמור" + +#: converse.js:2014 +msgid "Cancel" +msgstr "ביטול" + +#: converse.js:2061 +msgid "An error occurred while trying to save the form." +msgstr "אירעה שגיאה במהלך ניסיון שמירת הטופס." + +#: converse.js:2107 +msgid "This chatroom requires a password" +msgstr "חדר שיחה זה מצריך סיסמה" + +#: converse.js:2108 +msgid "Password: " +msgstr "סיסמה: " + +#: converse.js:2109 +msgid "Submit" +msgstr "שלח" + +#: converse.js:2123 +msgid "This room is not anonymous" +msgstr "חדר זה אינו אנונימי" + +#: converse.js:2124 +msgid "This room now shows unavailable members" +msgstr "חדר זה כעת מציג חברים לא זמינים" + +#: converse.js:2125 +msgid "This room does not show unavailable members" +msgstr "חדר זה לא מציג חברים לא זמינים" + +#: converse.js:2126 +msgid "Non-privacy-related room configuration has changed" +msgstr "תצורת חדר אשר לא-קשורה-בפרטיות שונתה" + +#: converse.js:2127 +msgid "Room logging is now enabled" +msgstr "יומן חדר הינו מופעל כעת" + +#: converse.js:2128 +msgid "Room logging is now disabled" +msgstr "יומן חדר הינו מנוטרל כעת" + +#: converse.js:2129 +msgid "This room is now non-anonymous" +msgstr "חדר זה אינו אנונימי כעת" + +#: converse.js:2130 +msgid "This room is now semi-anonymous" +msgstr "חדר זה הינו אנונימי למחצה כעת" + +#: converse.js:2131 +msgid "This room is now fully-anonymous" +msgstr "חדר זה הינו אנונימי לחלוטין כעת" + +#: converse.js:2132 +msgid "A new room has been created" +msgstr "חדר חדש נוצר" + +#: converse.js:2133 +msgid "Your nickname has been changed" +msgstr "שם הכינוי שלך שונה" + +#: converse.js:2147 +msgid "%1$s has been banned" +msgstr "%1$s נאסר(ה)" + +#: converse.js:2148 +msgid "%1$s has been kicked out" +msgstr "%1$s נבעט(ה)" + +#: converse.js:2149 +msgid "%1$s has been removed because of an affiliation change" +msgstr "%1$s הוסרה(ה) משום שינוי שיוך" + +# היותו(ה) +#: converse.js:2150 +msgid "%1$s has been removed for not being a member" +msgstr "%1$s הוסר(ה) משום אי הימצאות במסגרת מעמד של חבר" + +#: converse.js:2154 converse.js:2214 +msgid "You have been banned from this room" +msgstr "נאסרת מתוך חדר זה" + +#: converse.js:2155 +msgid "You have been kicked from this room" +msgstr "נבעטת מתוך חדר זה" + +#: converse.js:2156 +msgid "You have been removed from this room because of an affiliation change" +msgstr "הוסרת מתוך חדר זה משום שינוי שיוך" + +#: converse.js:2157 +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:2158 +msgid "" +"You have been removed from this room because the MUC (Multi-user chat) " +"service is being shut down." +msgstr "" +"הוסרת מתוך חדר זה משום ששירות שמ״מ (שיחה מרובת משתמשים) זה כעת מצוי בהליכי " +"סגירה." + +#: converse.js:2212 +msgid "You are not on the member list of this room" +msgstr "אינך ברשימת החברים של חדר זה" + +# אף שם כינוי לא צוין +#: converse.js:2218 +msgid "No nickname was specified" +msgstr "לא צוין שום שם כינוי" + +# אינך מורשה +#: converse.js:2222 +msgid "You are not allowed to create new rooms" +msgstr "אין לך רשות ליצור חדרים חדשחם" + +#: converse.js:2224 +msgid "Your nickname doesn't conform to this room's policies" +msgstr "שם הכינוי שלך לא תואם את המדינויות של חדר זה" + +# נלקח כבר +#: converse.js:2226 +msgid "Your nickname is already taken" +msgstr "שם הכינוי שלך הינו תפוס" + +#: converse.js:2228 +msgid "This room does not (yet) exist" +msgstr "חדר זה (עדיין) לא קיים" + +#: converse.js:2230 +msgid "This room has reached it's maximum number of occupants" +msgstr "חדר זה הגיע לסף הנוכחים המרבי שלו" + +#: converse.js:2309 +msgid "Topic set by %1$s to: %2$s" +msgstr "נושא חדר זה נקבע על ידי %1$s אל: %2$s" + +#: converse.js:2330 +msgid "This user is a moderator" +msgstr "משתמש זה הינו אחראי" + +#: converse.js:2333 +msgid "This user can send messages in this room" +msgstr "משתמש זה מסוגל לשלוח הודעות בתוך חדר זה" + +#: converse.js:2336 +msgid "This user can NOT send messages in this room" +msgstr "משתמש זה ﬥﬡ מסוגל לשלוח הודעות בתוך חדר זה" + +#: converse.js:2562 +msgid "Click to chat with this contact" +msgstr "לחץ כדי לשוחח עם איש קשר זה" + +#: converse.js:2565 converse.js:2569 +msgid "Click to remove this contact" +msgstr "לחץ כדי להסיר את איש קשר זה" + +#: converse.js:2919 +msgid "Contact requests" +msgstr "בקשות איש קשר" + +#: converse.js:2922 +msgid "My contacts" +msgstr "אנשי הקשר שלי" + +#: converse.js:2925 +msgid "Pending contacts" +msgstr "אנשי קשר ממתינים" + +#: converse.js:3167 +msgid "Custom status" +msgstr "מצב מותאם" + +#: converse.js:3173 +msgid "Click to change your chat status" +msgstr "לחץ כדי לשנות את הודעת השיחה שלך" + +#: converse.js:3177 +msgid "Click here to write a custom status message" +msgstr "לחץ כאן כדי לכתוב הודעת מצב מותאמת" + +#: converse.js:3206 converse.js:3214 +msgid "online" +msgstr "מקוון" + +#: converse.js:3208 +msgid "busy" +msgstr "עסוק" + +#: converse.js:3210 +msgid "away for long" +msgstr "נעדר לזמן מה" + +#: converse.js:3212 +msgid "away" +msgstr "נעדר" + +#. For translators: the %1$s part gets replaced with the status +#. Example, I am online +#: converse.js:3226 converse.js:3263 +msgid "I am %1$s" +msgstr "אני במצב %1$s" + +#: converse.js:3334 +msgid "Sign in" +msgstr "התחברות" + +#: converse.js:3338 +msgid "XMPP/Jabber Username:" +msgstr "שם משתמש XMPP/Jabber:" + +#: converse.js:3340 +msgid "Password:" +msgstr "סיסמה:" + +#: converse.js:3342 +msgid "Log In" +msgstr "כניסה" + +#: converse.js:3346 +msgid "BOSH Service URL:" +msgstr "כתובת שירות BOSH:" From 0ae80be24448a0b950ac46cbf855a423731abda4 Mon Sep 17 00:00:00 2001 From: Priyadi Iman Nurcahyo Date: Sat, 25 Jan 2014 14:51:51 +0000 Subject: [PATCH 05/33] Added Indonesian translations --- locale/id/LC_MESSAGES/converse.json | 1 + locale/id/LC_MESSAGES/converse.po | 677 ++++++++++++++++++++++++++++ locale/id/LC_MESSAGES/id.js | 173 +++++++ locale/locales.js | 5 +- 4 files changed, 855 insertions(+), 1 deletion(-) create mode 100644 locale/id/LC_MESSAGES/converse.json create mode 100644 locale/id/LC_MESSAGES/converse.po create mode 100644 locale/id/LC_MESSAGES/id.js diff --git a/locale/id/LC_MESSAGES/converse.json b/locale/id/LC_MESSAGES/converse.json new file mode 100644 index 000000000..8ddcd1378 --- /dev/null +++ b/locale/id/LC_MESSAGES/converse.json @@ -0,0 +1 @@ +{"":{"project-id-version":"Converse.js 0.7.0","report-msgid-bugs-to":"","pot-creation-date":"2014-01-22 17:07+0200","po-revision-date":"2014-01-25 21:30+0700","last-translator":"Priyadi Iman Nurcahyo ","language-team":"Bahasa Indonesia","mime-version":"1.0","content-type":"text/plain; charset=UTF-8","content-transfer-encoding":"8bit","language":"id"},"unencrypted":[null,"tak dienkripsi"],"unverified":[null,"tak diverifikasi"],"verified":[null,"diverifikasi"],"finished":[null,"selesai"],"This contact is busy":[null,"Teman ini sedang sibuk"],"This contact is online":[null,"Teman ini terhubung"],"This contact is offline":[null,"Teman ini tidak terhubung"],"This contact is unavailable":[null,"Teman ini tidak tersedia"],"This contact is away for an extended period":[null,"Teman ini tidak di tempat untuk waktu yang lama"],"This contact is away":[null,"Teman ini tidak di tempat"],"Disconnected":[null,"Terputus"],"Error":[null,"Kesalahan"],"Connecting":[null,"Menyambung"],"Connection Failed":[null,"Gagal Menyambung"],"Authenticating":[null,"Melakukan otentikasi"],"Authentication Failed":[null,"Otentikasi gagal"],"Disconnecting":[null,"Memutuskan hubungan"],"Online Contacts":[null,"Teman yang Terhubung"],"Re-establishing encrypted session":[null,"Menyambung kembali sesi terenkripsi"],"Your browser needs to generate a private key, which will be used in your encrypted chat session. This can take up to 30 seconds during which your browser might freeze and become unresponsive.":[null,"Perambah anda perlu membuat kunci privat, yang akan digunakan pada sesi perbincangan anda. Ini akan membutuhkan waktu sampai 30 detik, dan selama itu perambah mungkin akan tidak responsif."],"Private key generated.":[null,"Kunci privat berhasil dibuat."],"Authentication request from %1$s\n\nYour buddy is attempting to verify your identity, by asking you the question below.\n\n%2$s":[null,"Permintaan otentikasi dari %1$s\n\nTeman anda mencoba untuk melakukan verifikasi identitas anda dengan cara menanyakan pertanyaan di bawah ini.\n\n%2$s"],"Could not verify this user's identify.":[null,"Tak dapat melakukan verifikasi identitas pengguna ini."],"Personal message":[null,"Pesan pribadi"],"Start encrypted conversation":[null,"Mulai sesi terenkripsi"],"Refresh encrypted conversation":[null,"Setel ulang percakapan terenkripsi"],"End encrypted conversation":[null,"Sudahi percakapan terenkripsi"],"Verify with SMP":[null,"Verifikasi menggunakan SMP"],"Verify with fingerprints":[null,"Verifikasi menggunakan sidik jari"],"What's this?":[null,"Apakah ini?"],"me":[null,"saya"],"Show this menu":[null,"Tampilkan menu ini"],"Write in the third person":[null,"Tulis ini menggunakan bahasa pihak ketiga"],"Remove messages":[null,"Hapus pesan"],"Your message could not be sent":[null,"Pesan anda tak dapat dikirim"],"We received an unencrypted message":[null,"Kami menerima pesan terenkripsi"],"We received an unreadable encrypted message":[null,"Kami menerima pesan terenkripsi yang gagal dibaca"],"This user has requested an encrypted session.":[null,"Pengguna ini meminta sesi terenkripsi"],"Here are the fingerprints, please confirm them with %1$s, outside of this chat.\n\nFingerprint for you, %2$s: %3$s\n\nFingerprint for %1$s: %4$s\n\nIf you have confirmed that the fingerprints match, click OK, otherwise click Cancel.":[null,"Ini adalah sidik jari anda, konfirmasikan bersama mereka dengan %1$s, di luar percakapan ini.\n\nSidik jari untuk anda, %2$s: %3$s\n\nSidik jari untuk %1$s: %4$s\n\nJika anda bisa mengkonfirmasi sidik jadi cocok, klik Lanjutkan, jika tidak klik Batal."],"You will be prompted to provide a security question and then an answer to that question.\n\nYour buddy will then be prompted the same question and if they type the exact same answer (case sensitive), their identity will have been verified.":[null,"Anda akan ditanyakan pertanyaan untuk keamanan beserta jawaban untuk pertanyaan tersebut.\n\nTeman anda akan ditanyakan pertanyaan yang sama dan jika dia memberikan jawaban yang sama (huruf kapital diperhatikan), identitas mereka diverifikasi."],"What is your security question?":[null,"Apakah pertanyaan keamanan anda?"],"What is the answer to the security question?":[null,"Apa jawaban dari pertanyaan keamanan tersebut?"],"Invalid authentication scheme provided":[null,"Skema otentikasi salah"],"Your messages are not encrypted anymore":[null,"Pesan anda tidak lagi terenkripsi"],"Your messages are now encrypted but your buddy's identity has not been verified.":[null,"Pesan anda sekarang terenkripsi, namun identitas teman anda belum dapat diverifikasi."],"Your buddy's identify has been verified.":[null,"Identitas teman anda telah diverifikasi."],"Your buddy has ended encryption on their end, you should do the same.":[null,"Teman anda menghentikan percakapan terenkripsi, anda sebaiknya melakukan hal yang sama."],"Your messages are not encrypted. Click here to enable OTR encryption.":[null,"Pesan anda tak terenkripsi. Klik di sini untuk menyalakan enkripsi OTR."],"Your messages are encrypted, but your buddy has not been verified.":[null,"Pesan anda terenkripsi, tetapi teman anda belum diverifikasi."],"Your messages are encrypted and your buddy verified.":[null,"Pesan anda terenkripsi dan teman anda telah diverifikasi."],"Your buddy has closed their end of the private session, you should do the same":[null,"Teman anda telah mematikan sesi terenkripsi, dan anda juga sebaiknya melakukan hal yang sama"],"Contacts":[null,"Teman"],"Online":[null,"Terhubung"],"Busy":[null,"Sibuk"],"Away":[null,"Pergi"],"Offline":[null,"Tak Terhubung"],"Click to add new chat contacts":[null,"Klik untuk menambahkan teman baru"],"Add a contact":[null,"Tambah teman"],"Contact username":[null,"Username teman"],"Add":[null,"Tambah"],"Contact name":[null,"Nama teman"],"Search":[null,"Cari"],"No users found":[null,"Pengguna tak ditemukan"],"Click to add as a chat contact":[null,"Klik untuk menambahkan sebagai teman"],"Click to open this room":[null,"Klik untuk membuka ruangan ini"],"Show more information on this room":[null,"Tampilkan informasi ruangan ini"],"Description:":[null,"Keterangan:"],"Occupants:":[null,"Penghuni:"],"Features:":[null,"Fitur:"],"Requires authentication":[null,"Membutuhkan otentikasi"],"Hidden":[null,"Tersembunyi"],"Requires an invitation":[null,"Membutuhkan undangan"],"Moderated":[null,"Dimoderasi"],"Non-anonymous":[null,"Tidak anonim"],"Open room":[null,"Ruangan terbuka"],"Permanent room":[null,"Ruangan permanen"],"Public":[null,"Umum"],"Semi-anonymous":[null,"Semi-anonim"],"Temporary room":[null,"Ruangan sementara"],"Unmoderated":[null,"Tak dimoderasi"],"Rooms":[null,"Ruangan"],"Room name":[null,"Nama ruangan"],"Nickname":[null,"Nama panggilan"],"Server":[null,"Server"],"Join":[null,"Ikuti"],"Show rooms":[null,"Perlihatkan ruangan"],"No rooms on %1$s":[null,"Tak ada ruangan di %1$s"],"Rooms on %1$s":[null,"Ruangan di %1$s"],"Set chatroom topic":[null,"Setel topik ruangan"],"Kick user from chatroom":[null,"Tendang pengguna dari ruangan"],"Ban user from chatroom":[null,"Larang pengguna dari ruangan"],"Message":[null,"Pesan"],"Save":[null,"Simpan"],"Cancel":[null,"Batal"],"An error occurred while trying to save the form.":[null,"Kesalahan terjadi saat menyimpan formulir ini."],"This chatroom requires a password":[null,"Ruangan ini membutuhkan kata sandi"],"Password: ":[null,"Kata sandi: "],"Submit":[null,"Kirim"],"This room is not anonymous":[null,"Ruangan ini tidak anonim"],"This room now shows unavailable members":[null,"Ruangan ini menampilkan anggota yang tak tersedia"],"This room does not show unavailable members":[null,"Ruangan ini tidak menampilkan anggota yang tak tersedia"],"Non-privacy-related room configuration has changed":[null,"Konfigurasi ruangan yang tak berhubungan dengan privasi telah diubah"],"Room logging is now enabled":[null,"Pencatatan di ruangan ini sekarang dinyalakan"],"Room logging is now disabled":[null,"Pencatatan di ruangan ini sekarang dimatikan"],"This room is now non-anonymous":[null,"Ruangan ini sekarang tak-anonim"],"This room is now semi-anonymous":[null,"Ruangan ini sekarang semi-anonim"],"This room is now fully-anonymous":[null,"Ruangan ini sekarang anonim"],"A new room has been created":[null,"Ruangan baru telah dibuat"],"Your nickname has been changed":[null,"Nama panggilan anda telah diubah"],"%1$s has been banned":[null,"%1$s telah dicekal"],"%1$s has been kicked out":[null,"%1$s telah ditendang keluar"],"%1$s has been removed because of an affiliation change":[null,"%1$s telah dihapus karena perubahan afiliasi"],"%1$s has been removed for not being a member":[null,"%1$s telah dihapus karena bukan anggota"],"You have been banned from this room":[null,"Anda telah dicekal dari ruangan ini"],"You have been kicked from this room":[null,"Anda telah ditendang dari ruangan ini"],"You have been removed from this room because of an affiliation change":[null,"Anda telah dihapus dari ruangan ini karena perubahan afiliasi"],"You have been removed from this room because the room has changed to members-only and you're not a member":[null,"Anda telah dihapus dari ruangan ini karena ruangan ini hanya terbuka untuk anggota dan anda bukan anggota"],"You have been removed from this room because the MUC (Multi-user chat) service is being shut down.":[null,"Anda telah dihapus dari ruangan ini karena layanan MUC (Multi-user chat) telah dimatikan."],"You are not on the member list of this room":[null,"Anda bukan anggota dari ruangan ini"],"No nickname was specified":[null,"Nama panggilan belum ditentukan"],"You are not allowed to create new rooms":[null,"Anda tak diizinkan untuk membuat ruangan baru"],"Your nickname doesn't conform to this room's policies":[null,"Nama panggilan anda tidak sesuai aturan ruangan ini"],"Your nickname is already taken":[null,"Nama panggilan anda telah digunakan orang lain"],"This room does not (yet) exist":[null,"Ruangan ini belum dibuat"],"This room has reached it's maximum number of occupants":[null,"Ruangan ini telah mencapai jumlah penghuni maksimum"],"Topic set by %1$s to: %2$s":[null,"Topik diganti oleh %1$s menjadi: %2$s"],"This user is a moderator":[null,"Pengguna ini adalah moderator"],"This user can send messages in this room":[null,"Pengguna ini dapat mengirim pesan di ruangan ini"],"This user can NOT send messages in this room":[null,"Pengguna ini tak dapat mengirim pesan di ruangan ini"],"Click to chat with this contact":[null,"Klik untuk mulai perbinjangan dengan teman ini"],"Click to remove this contact":[null,"Klik untuk menghapus teman ini"],"Contact requests":[null,"Permintaan pertemanan"],"My contacts":[null,"Teman saya"],"Pending contacts":[null,"Teman yang menunggu"],"Custom status":[null,"Status kustom"],"Click to change your chat status":[null,"Klik untuk mengganti status"],"Click here to write a custom status message":[null,"Klik untuk menulis status kustom"],"online":[null,"terhubung"],"busy":[null,"sibuk"],"away for long":[null,"lama tak di tempat"],"away":[null,"tak di tempat"],"I am %1$s":[null,"Saya %1$s"],"Sign in":[null,"Masuk"],"XMPP/Jabber Username:":[null,"Nama pengguna XMPP/Jabber:"],"Password:":[null,"Kata sandi:"],"Log In":[null,"Masuk"],"BOSH Service URL:":[null,"URL Layanan BOSH:"]} \ No newline at end of file diff --git a/locale/id/LC_MESSAGES/converse.po b/locale/id/LC_MESSAGES/converse.po new file mode 100644 index 000000000..165a5d449 --- /dev/null +++ b/locale/id/LC_MESSAGES/converse.po @@ -0,0 +1,677 @@ +# Bahasa Indonesia translations for Converse.js package. +# Copyright (C) 2014 Jan-Carel Brand +# Copyright (C) 2014 Priyadi Iman Nurcahyo +# This file is distributed under the same license as the Converse.js package. +# Priyadi Iman Nurcahyo , 2014. +# +msgid "" +msgstr "" +"Project-Id-Version: Converse.js 0.7.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-01-22 17:07+0200\n" +"PO-Revision-Date: 2014-01-25 21:30+0700\n" +"Last-Translator: Priyadi Iman Nurcahyo \n" +"Language-Team: Bahasa Indonesia\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: id\n" + +#: converse.js:217 +msgid "unencrypted" +msgstr "tak dienkripsi" + +#: converse.js:218 +msgid "unverified" +msgstr "tak diverifikasi" + +#: converse.js:219 +msgid "verified" +msgstr "diverifikasi" + +#: converse.js:220 +msgid "finished" +msgstr "selesai" + +#: converse.js:223 +msgid "This contact is busy" +msgstr "Teman ini sedang sibuk" + +#: converse.js:224 +msgid "This contact is online" +msgstr "Teman ini terhubung" + +#: converse.js:225 +msgid "This contact is offline" +msgstr "Teman ini tidak terhubung" + +#: converse.js:226 +msgid "This contact is unavailable" +msgstr "Teman ini tidak tersedia" + +#: converse.js:227 +msgid "This contact is away for an extended period" +msgstr "Teman ini tidak di tempat untuk waktu yang lama" + +#: converse.js:228 +msgid "This contact is away" +msgstr "Teman ini tidak di tempat" + +#: converse.js:321 +msgid "Disconnected" +msgstr "Terputus" + +#: converse.js:331 +msgid "Error" +msgstr "Kesalahan" + +#: converse.js:333 +msgid "Connecting" +msgstr "Menyambung" + +#: converse.js:336 +msgid "Connection Failed" +msgstr "Gagal Menyambung" + +#: converse.js:338 +msgid "Authenticating" +msgstr "Melakukan otentikasi" + +#: converse.js:341 +msgid "Authentication Failed" +msgstr "Otentikasi gagal" + +#: converse.js:343 +msgid "Disconnecting" +msgstr "Memutuskan hubungan" + +#: converse.js:479 +msgid "Online Contacts" +msgstr "Teman yang Terhubung" + +#: converse.js:540 +msgid "Re-establishing encrypted session" +msgstr "Menyambung kembali sesi terenkripsi" + +#: converse.js:548 +msgid "" +"Your browser needs to generate a private key, which will be used in your " +"encrypted chat session. This can take up to 30 seconds during which your " +"browser might freeze and become unresponsive." +msgstr "" +"Perambah anda perlu membuat kunci privat, yang akan digunakan pada sesi " +"perbincangan anda. Ini akan membutuhkan waktu sampai 30 detik, dan selama " +"itu perambah mungkin akan tidak responsif." + +#: converse.js:557 +msgid "Private key generated." +msgstr "Kunci privat berhasil dibuat." + +#: converse.js:588 +msgid "" +"Authentication request from %1$s\n" +"\n" +"Your buddy is attempting to verify your identity, by asking you the question " +"below.\n" +"\n" +"%2$s" +msgstr "" +"Permintaan otentikasi dari %1$s\n" +"\n" +"Teman anda mencoba untuk melakukan verifikasi identitas anda dengan cara " +"menanyakan pertanyaan di bawah ini.\n" +"\n" +"%2$s" + +#: converse.js:597 +msgid "Could not verify this user's identify." +msgstr "Tak dapat melakukan verifikasi identitas pengguna ini." + +#: converse.js:750 +msgid "Personal message" +msgstr "Pesan pribadi" + +#: converse.js:795 +msgid "Start encrypted conversation" +msgstr "Mulai sesi terenkripsi" + +#: converse.js:798 +msgid "Refresh encrypted conversation" +msgstr "Setel ulang percakapan terenkripsi" + +#: converse.js:799 +msgid "End encrypted conversation" +msgstr "Sudahi percakapan terenkripsi" + +#: converse.js:800 +msgid "Verify with SMP" +msgstr "Verifikasi menggunakan SMP" + +#: converse.js:803 +msgid "Verify with fingerprints" +msgstr "Verifikasi menggunakan sidik jari" + +#: converse.js:805 +msgid "What's this?" +msgstr "Apakah ini?" + +#: converse.js:906 +msgid "me" +msgstr "saya" + +#: converse.js:1022 converse.js:1864 +msgid "Show this menu" +msgstr "Tampilkan menu ini" + +#: converse.js:1023 converse.js:1865 +msgid "Write in the third person" +msgstr "Tulis ini menggunakan bahasa pihak ketiga" + +#: converse.js:1024 converse.js:1869 +msgid "Remove messages" +msgstr "Hapus pesan" + +#: converse.js:1110 +msgid "Your message could not be sent" +msgstr "Pesan anda tak dapat dikirim" + +#: converse.js:1113 +msgid "We received an unencrypted message" +msgstr "Kami menerima pesan terenkripsi" + +#: converse.js:1116 +msgid "We received an unreadable encrypted message" +msgstr "Kami menerima pesan terenkripsi yang gagal dibaca" + +#: converse.js:1125 +msgid "This user has requested an encrypted session." +msgstr "Pengguna ini meminta sesi terenkripsi" + +#: converse.js:1147 +msgid "" +"Here are the fingerprints, please confirm them with %1$s, outside of this " +"chat.\n" +"\n" +"Fingerprint for you, %2$s: %3$s\n" +"\n" +"Fingerprint for %1$s: %4$s\n" +"\n" +"If you have confirmed that the fingerprints match, click OK, otherwise click " +"Cancel." +msgstr "" +"Ini adalah sidik jari anda, konfirmasikan bersama mereka dengan %1$s, di " +"luar percakapan ini.\n" +"\n" +"Sidik jari untuk anda, %2$s: %3$s\n" +"\n" +"Sidik jari untuk %1$s: %4$s\n" +"\n" +"Jika anda bisa mengkonfirmasi sidik jadi cocok, klik Lanjutkan, jika tidak " +"klik Batal." + +#: converse.js:1160 +msgid "" +"You will be prompted to provide a security question and then an answer to " +"that question.\n" +"\n" +"Your buddy will then be prompted the same question and if they type the " +"exact same answer (case sensitive), their identity will have been verified." +msgstr "" +"Anda akan ditanyakan pertanyaan untuk keamanan beserta jawaban untuk " +"pertanyaan tersebut.\n" +"\n" +"Teman anda akan ditanyakan pertanyaan yang sama dan jika dia memberikan " +"jawaban yang sama (huruf kapital diperhatikan), identitas mereka " +"diverifikasi." + +#: converse.js:1161 +msgid "What is your security question?" +msgstr "Apakah pertanyaan keamanan anda?" + +#: converse.js:1163 +msgid "What is the answer to the security question?" +msgstr "Apa jawaban dari pertanyaan keamanan tersebut?" + +#: converse.js:1167 +msgid "Invalid authentication scheme provided" +msgstr "Skema otentikasi salah" + +#: converse.js:1248 +msgid "Your messages are not encrypted anymore" +msgstr "Pesan anda tidak lagi terenkripsi" + +#: converse.js:1250 +msgid "" +"Your messages are now encrypted but your buddy's identity has not been " +"verified." +msgstr "" +"Pesan anda sekarang terenkripsi, namun identitas teman anda belum dapat " +"diverifikasi." + +#: converse.js:1252 +msgid "Your buddy's identify has been verified." +msgstr "Identitas teman anda telah diverifikasi." + +#: converse.js:1254 +msgid "Your buddy has ended encryption on their end, you should do the same." +msgstr "" +"Teman anda menghentikan percakapan terenkripsi, anda sebaiknya melakukan hal " +"yang sama." + +#: converse.js:1263 +msgid "Your messages are not encrypted. Click here to enable OTR encryption." +msgstr "" +"Pesan anda tak terenkripsi. Klik di sini untuk menyalakan enkripsi OTR." + +#: converse.js:1265 +msgid "Your messages are encrypted, but your buddy has not been verified." +msgstr "Pesan anda terenkripsi, tetapi teman anda belum diverifikasi." + +#: converse.js:1267 +msgid "Your messages are encrypted and your buddy verified." +msgstr "Pesan anda terenkripsi dan teman anda telah diverifikasi." + +#: converse.js:1269 +msgid "" +"Your buddy has closed their end of the private session, you should do the " +"same" +msgstr "" +"Teman anda telah mematikan sesi terenkripsi, dan anda juga sebaiknya " +"melakukan hal yang sama" + +#: converse.js:1354 +msgid "Contacts" +msgstr "Teman" + +#: converse.js:1359 +msgid "Online" +msgstr "Terhubung" + +#: converse.js:1360 +msgid "Busy" +msgstr "Sibuk" + +#: converse.js:1361 +msgid "Away" +msgstr "Pergi" + +#: converse.js:1362 +msgid "Offline" +msgstr "Tak Terhubung" + +#: converse.js:1372 +msgid "Click to add new chat contacts" +msgstr "Klik untuk menambahkan teman baru" + +#: converse.js:1373 +msgid "Add a contact" +msgstr "Tambah teman" + +#: converse.js:1382 +msgid "Contact username" +msgstr "Username teman" + +#: converse.js:1383 +msgid "Add" +msgstr "Tambah" + +#: converse.js:1391 +msgid "Contact name" +msgstr "Nama teman" + +#: converse.js:1392 +msgid "Search" +msgstr "Cari" + +#: converse.js:1439 +msgid "No users found" +msgstr "Pengguna tak ditemukan" + +#: converse.js:1446 +msgid "Click to add as a chat contact" +msgstr "Klik untuk menambahkan sebagai teman" + +#: converse.js:1498 +msgid "Click to open this room" +msgstr "Klik untuk membuka ruangan ini" + +#: converse.js:1500 +msgid "Show more information on this room" +msgstr "Tampilkan informasi ruangan ini" + +#: converse.js:1506 +msgid "Description:" +msgstr "Keterangan:" + +#: converse.js:1507 +msgid "Occupants:" +msgstr "Penghuni:" + +#: converse.js:1508 +msgid "Features:" +msgstr "Fitur:" + +#: converse.js:1510 +msgid "Requires authentication" +msgstr "Membutuhkan otentikasi" + +#: converse.js:1513 +msgid "Hidden" +msgstr "Tersembunyi" + +#: converse.js:1516 +msgid "Requires an invitation" +msgstr "Membutuhkan undangan" + +#: converse.js:1519 +msgid "Moderated" +msgstr "Dimoderasi" + +#: converse.js:1522 +msgid "Non-anonymous" +msgstr "Tidak anonim" + +#: converse.js:1525 +msgid "Open room" +msgstr "Ruangan terbuka" + +#: converse.js:1528 +msgid "Permanent room" +msgstr "Ruangan permanen" + +#: converse.js:1531 +msgid "Public" +msgstr "Umum" + +#: converse.js:1534 +msgid "Semi-anonymous" +msgstr "Semi-anonim" + +#: converse.js:1537 +msgid "Temporary room" +msgstr "Ruangan sementara" + +#: converse.js:1540 +msgid "Unmoderated" +msgstr "Tak dimoderasi" + +#: converse.js:1546 +msgid "Rooms" +msgstr "Ruangan" + +#: converse.js:1550 +msgid "Room name" +msgstr "Nama ruangan" + +#: converse.js:1551 +msgid "Nickname" +msgstr "Nama panggilan" + +#: converse.js:1552 +msgid "Server" +msgstr "Server" + +#: converse.js:1553 +msgid "Join" +msgstr "Ikuti" + +#: converse.js:1554 +msgid "Show rooms" +msgstr "Perlihatkan ruangan" + +#. For translators: %1$s is a variable and will be replaced with the XMPP server name +#: converse.js:1589 +msgid "No rooms on %1$s" +msgstr "Tak ada ruangan di %1$s" + +#. For translators: %1$s is a variable and will be +#. replaced with the XMPP server name +#: converse.js:1604 +msgid "Rooms on %1$s" +msgstr "Ruangan di %1$s" + +#: converse.js:1866 +msgid "Set chatroom topic" +msgstr "Setel topik ruangan" + +#: converse.js:1867 +msgid "Kick user from chatroom" +msgstr "Tendang pengguna dari ruangan" + +#: converse.js:1868 +msgid "Ban user from chatroom" +msgstr "Larang pengguna dari ruangan" + +#: converse.js:1898 +msgid "Message" +msgstr "Pesan" + +#: converse.js:2013 converse.js:3168 +msgid "Save" +msgstr "Simpan" + +#: converse.js:2014 +msgid "Cancel" +msgstr "Batal" + +#: converse.js:2061 +msgid "An error occurred while trying to save the form." +msgstr "Kesalahan terjadi saat menyimpan formulir ini." + +#: converse.js:2107 +msgid "This chatroom requires a password" +msgstr "Ruangan ini membutuhkan kata sandi" + +#: converse.js:2108 +msgid "Password: " +msgstr "Kata sandi: " + +#: converse.js:2109 +msgid "Submit" +msgstr "Kirim" + +#: converse.js:2123 +msgid "This room is not anonymous" +msgstr "Ruangan ini tidak anonim" + +#: converse.js:2124 +msgid "This room now shows unavailable members" +msgstr "Ruangan ini menampilkan anggota yang tak tersedia" + +#: converse.js:2125 +msgid "This room does not show unavailable members" +msgstr "Ruangan ini tidak menampilkan anggota yang tak tersedia" + +#: converse.js:2126 +msgid "Non-privacy-related room configuration has changed" +msgstr "Konfigurasi ruangan yang tak berhubungan dengan privasi telah diubah" + +#: converse.js:2127 +msgid "Room logging is now enabled" +msgstr "Pencatatan di ruangan ini sekarang dinyalakan" + +#: converse.js:2128 +msgid "Room logging is now disabled" +msgstr "Pencatatan di ruangan ini sekarang dimatikan" + +#: converse.js:2129 +msgid "This room is now non-anonymous" +msgstr "Ruangan ini sekarang tak-anonim" + +#: converse.js:2130 +msgid "This room is now semi-anonymous" +msgstr "Ruangan ini sekarang semi-anonim" + +#: converse.js:2131 +msgid "This room is now fully-anonymous" +msgstr "Ruangan ini sekarang anonim" + +#: converse.js:2132 +msgid "A new room has been created" +msgstr "Ruangan baru telah dibuat" + +#: converse.js:2133 +msgid "Your nickname has been changed" +msgstr "Nama panggilan anda telah diubah" + +#: converse.js:2147 +msgid "%1$s has been banned" +msgstr "%1$s telah dicekal" + +#: converse.js:2148 +msgid "%1$s has been kicked out" +msgstr "%1$s telah ditendang keluar" + +#: converse.js:2149 +msgid "%1$s has been removed because of an affiliation change" +msgstr "%1$s telah dihapus karena perubahan afiliasi" + +#: converse.js:2150 +msgid "%1$s has been removed for not being a member" +msgstr "%1$s telah dihapus karena bukan anggota" + +#: converse.js:2154 converse.js:2214 +msgid "You have been banned from this room" +msgstr "Anda telah dicekal dari ruangan ini" + +#: converse.js:2155 +msgid "You have been kicked from this room" +msgstr "Anda telah ditendang dari ruangan ini" + +#: converse.js:2156 +msgid "You have been removed from this room because of an affiliation change" +msgstr "Anda telah dihapus dari ruangan ini karena perubahan afiliasi" + +#: converse.js:2157 +msgid "" +"You have been removed from this room because the room has changed to members-" +"only and you're not a member" +msgstr "" +"Anda telah dihapus dari ruangan ini karena ruangan ini hanya terbuka untuk " +"anggota dan anda bukan anggota" + +#: converse.js:2158 +msgid "" +"You have been removed from this room because the MUC (Multi-user chat) " +"service is being shut down." +msgstr "" +"Anda telah dihapus dari ruangan ini karena layanan MUC (Multi-user chat) " +"telah dimatikan." + +#: converse.js:2212 +msgid "You are not on the member list of this room" +msgstr "Anda bukan anggota dari ruangan ini" + +#: converse.js:2218 +msgid "No nickname was specified" +msgstr "Nama panggilan belum ditentukan" + +#: converse.js:2222 +msgid "You are not allowed to create new rooms" +msgstr "Anda tak diizinkan untuk membuat ruangan baru" + +#: converse.js:2224 +msgid "Your nickname doesn't conform to this room's policies" +msgstr "Nama panggilan anda tidak sesuai aturan ruangan ini" + +#: converse.js:2226 +msgid "Your nickname is already taken" +msgstr "Nama panggilan anda telah digunakan orang lain" + +#: converse.js:2228 +msgid "This room does not (yet) exist" +msgstr "Ruangan ini belum dibuat" + +#: converse.js:2230 +msgid "This room has reached it's maximum number of occupants" +msgstr "Ruangan ini telah mencapai jumlah penghuni maksimum" + +#: converse.js:2309 +msgid "Topic set by %1$s to: %2$s" +msgstr "Topik diganti oleh %1$s menjadi: %2$s" + +#: converse.js:2330 +msgid "This user is a moderator" +msgstr "Pengguna ini adalah moderator" + +#: converse.js:2333 +msgid "This user can send messages in this room" +msgstr "Pengguna ini dapat mengirim pesan di ruangan ini" + +#: converse.js:2336 +msgid "This user can NOT send messages in this room" +msgstr "Pengguna ini tak dapat mengirim pesan di ruangan ini" + +#: converse.js:2562 +msgid "Click to chat with this contact" +msgstr "Klik untuk mulai perbinjangan dengan teman ini" + +#: converse.js:2565 converse.js:2569 +msgid "Click to remove this contact" +msgstr "Klik untuk menghapus teman ini" + +#: converse.js:2919 +msgid "Contact requests" +msgstr "Permintaan pertemanan" + +#: converse.js:2922 +msgid "My contacts" +msgstr "Teman saya" + +#: converse.js:2925 +msgid "Pending contacts" +msgstr "Teman yang menunggu" + +#: converse.js:3167 +msgid "Custom status" +msgstr "Status kustom" + +#: converse.js:3173 +msgid "Click to change your chat status" +msgstr "Klik untuk mengganti status" + +#: converse.js:3177 +msgid "Click here to write a custom status message" +msgstr "Klik untuk menulis status kustom" + +#: converse.js:3206 converse.js:3214 +msgid "online" +msgstr "terhubung" + +#: converse.js:3208 +msgid "busy" +msgstr "sibuk" + +#: converse.js:3210 +msgid "away for long" +msgstr "lama tak di tempat" + +#: converse.js:3212 +msgid "away" +msgstr "tak di tempat" + +#. For translators: the %1$s part gets replaced with the status +#. Example, I am online +#: converse.js:3226 converse.js:3263 +msgid "I am %1$s" +msgstr "Saya %1$s" + +#: converse.js:3334 +msgid "Sign in" +msgstr "Masuk" + +#: converse.js:3338 +msgid "XMPP/Jabber Username:" +msgstr "Nama pengguna XMPP/Jabber:" + +#: converse.js:3340 +msgid "Password:" +msgstr "Kata sandi:" + +#: converse.js:3342 +msgid "Log In" +msgstr "Masuk" + +#: converse.js:3346 +msgid "BOSH Service URL:" +msgstr "URL Layanan BOSH:" diff --git a/locale/id/LC_MESSAGES/id.js b/locale/id/LC_MESSAGES/id.js new file mode 100644 index 000000000..2ccfe2a24 --- /dev/null +++ b/locale/id/LC_MESSAGES/id.js @@ -0,0 +1,173 @@ +(function(root, factory) { + define("de", ['jed'], function() { + return factory(new Jed({ + "domain": "converse", + "locale_data": { + { + "": { + "project-id-version": "Converse.js 0.7.0", + "report-msgid-bugs-to": "", + "pot-creation-date": "2014-01-22 17:07+0200", + "po-revision-date": "2014-01-25 21:30+0700", + "last-translator": "Priyadi Iman Nurcahyo ", + "language-team": "Bahasa Indonesia", + "mime-version": "1.0", + "content-type": "text/plain; charset=UTF-8", + "content-transfer-encoding": "8bit", + "language": "id" + }, + "unencrypted": [null, "tak dienkripsi"], + "unverified": [null, "tak diverifikasi"], + "verified": [null, "diverifikasi"], + "finished": [null, "selesai"], + "This contact is busy": [null, "Teman ini sedang sibuk"], + "This contact is online": [null, "Teman ini terhubung"], + "This contact is offline": [null, "Teman ini tidak terhubung"], + "This contact is unavailable": [null, "Teman ini tidak tersedia"], + "This contact is away for an extended period": [null, "Teman ini tidak di tempat untuk waktu yang lama"], + "This contact is away": [null, "Teman ini tidak di tempat"], + "Disconnected": [null, "Terputus"], + "Error": [null, "Kesalahan"], + "Connecting": [null, "Menyambung"], + "Connection Failed": [null, "Gagal Menyambung"], + "Authenticating": [null, "Melakukan otentikasi"], + "Authentication Failed": [null, "Otentikasi gagal"], + "Disconnecting": [null, "Memutuskan hubungan"], + "Online Contacts": [null, "Teman yang Terhubung"], + "Re-establishing encrypted session": [null, "Menyambung kembali sesi terenkripsi"], + "Your browser needs to generate a private key, which will be used in your encrypted chat session. This can take up to 30 seconds during which your browser might freeze and become unresponsive.": [null, "Perambah anda perlu membuat kunci privat, yang akan digunakan pada sesi perbincangan anda. Ini akan membutuhkan waktu sampai 30 detik, dan selama itu perambah mungkin akan tidak responsif."], + "Private key generated.": [null, "Kunci privat berhasil dibuat."], + "Authentication request from %1$s\n\nYour buddy is attempting to verify your identity, by asking you the question below.\n\n%2$s": [null, "Permintaan otentikasi dari %1$s\n\nTeman anda mencoba untuk melakukan verifikasi identitas anda dengan cara menanyakan pertanyaan di bawah ini.\n\n%2$s"], + "Could not verify this user's identify.": [null, "Tak dapat melakukan verifikasi identitas pengguna ini."], + "Personal message": [null, "Pesan pribadi"], + "Start encrypted conversation": [null, "Mulai sesi terenkripsi"], + "Refresh encrypted conversation": [null, "Setel ulang percakapan terenkripsi"], + "End encrypted conversation": [null, "Sudahi percakapan terenkripsi"], + "Verify with SMP": [null, "Verifikasi menggunakan SMP"], + "Verify with fingerprints": [null, "Verifikasi menggunakan sidik jari"], + "What's this?": [null, "Apakah ini?"], + "me": [null, "saya"], + "Show this menu": [null, "Tampilkan menu ini"], + "Write in the third person": [null, "Tulis ini menggunakan bahasa pihak ketiga"], + "Remove messages": [null, "Hapus pesan"], + "Your message could not be sent": [null, "Pesan anda tak dapat dikirim"], + "We received an unencrypted message": [null, "Kami menerima pesan terenkripsi"], + "We received an unreadable encrypted message": [null, "Kami menerima pesan terenkripsi yang gagal dibaca"], + "This user has requested an encrypted session.": [null, "Pengguna ini meminta sesi terenkripsi"], + "Here are the fingerprints, please confirm them with %1$s, outside of this chat.\n\nFingerprint for you, %2$s: %3$s\n\nFingerprint for %1$s: %4$s\n\nIf you have confirmed that the fingerprints match, click OK, otherwise click Cancel.": [null, "Ini adalah sidik jari anda, konfirmasikan bersama mereka dengan %1$s, di luar percakapan ini.\n\nSidik jari untuk anda, %2$s: %3$s\n\nSidik jari untuk %1$s: %4$s\n\nJika anda bisa mengkonfirmasi sidik jadi cocok, klik Lanjutkan, jika tidak klik Batal."], + "You will be prompted to provide a security question and then an answer to that question.\n\nYour buddy will then be prompted the same question and if they type the exact same answer (case sensitive), their identity will have been verified.": [null, "Anda akan ditanyakan pertanyaan untuk keamanan beserta jawaban untuk pertanyaan tersebut.\n\nTeman anda akan ditanyakan pertanyaan yang sama dan jika dia memberikan jawaban yang sama (huruf kapital diperhatikan), identitas mereka diverifikasi."], + "What is your security question?": [null, "Apakah pertanyaan keamanan anda?"], + "What is the answer to the security question?": [null, "Apa jawaban dari pertanyaan keamanan tersebut?"], + "Invalid authentication scheme provided": [null, "Skema otentikasi salah"], + "Your messages are not encrypted anymore": [null, "Pesan anda tidak lagi terenkripsi"], + "Your messages are now encrypted but your buddy's identity has not been verified.": [null, "Pesan anda sekarang terenkripsi, namun identitas teman anda belum dapat diverifikasi."], + "Your buddy's identify has been verified.": [null, "Identitas teman anda telah diverifikasi."], + "Your buddy has ended encryption on their end, you should do the same.": [null, "Teman anda menghentikan percakapan terenkripsi, anda sebaiknya melakukan hal yang sama."], + "Your messages are not encrypted. Click here to enable OTR encryption.": [null, "Pesan anda tak terenkripsi. Klik di sini untuk menyalakan enkripsi OTR."], + "Your messages are encrypted, but your buddy has not been verified.": [null, "Pesan anda terenkripsi, tetapi teman anda belum diverifikasi."], + "Your messages are encrypted and your buddy verified.": [null, "Pesan anda terenkripsi dan teman anda telah diverifikasi."], + "Your buddy has closed their end of the private session, you should do the same": [null, "Teman anda telah mematikan sesi terenkripsi, dan anda juga sebaiknya melakukan hal yang sama"], + "Contacts": [null, "Teman"], + "Online": [null, "Terhubung"], + "Busy": [null, "Sibuk"], + "Away": [null, "Pergi"], + "Offline": [null, "Tak Terhubung"], + "Click to add new chat contacts": [null, "Klik untuk menambahkan teman baru"], + "Add a contact": [null, "Tambah teman"], + "Contact username": [null, "Username teman"], + "Add": [null, "Tambah"], + "Contact name": [null, "Nama teman"], + "Search": [null, "Cari"], + "No users found": [null, "Pengguna tak ditemukan"], + "Click to add as a chat contact": [null, "Klik untuk menambahkan sebagai teman"], + "Click to open this room": [null, "Klik untuk membuka ruangan ini"], + "Show more information on this room": [null, "Tampilkan informasi ruangan ini"], + "Description:": [null, "Keterangan:"], + "Occupants:": [null, "Penghuni:"], + "Features:": [null, "Fitur:"], + "Requires authentication": [null, "Membutuhkan otentikasi"], + "Hidden": [null, "Tersembunyi"], + "Requires an invitation": [null, "Membutuhkan undangan"], + "Moderated": [null, "Dimoderasi"], + "Non-anonymous": [null, "Tidak anonim"], + "Open room": [null, "Ruangan terbuka"], + "Permanent room": [null, "Ruangan permanen"], + "Public": [null, "Umum"], + "Semi-anonymous": [null, "Semi-anonim"], + "Temporary room": [null, "Ruangan sementara"], + "Unmoderated": [null, "Tak dimoderasi"], + "Rooms": [null, "Ruangan"], + "Room name": [null, "Nama ruangan"], + "Nickname": [null, "Nama panggilan"], + "Server": [null, "Server"], + "Join": [null, "Ikuti"], + "Show rooms": [null, "Perlihatkan ruangan"], + "No rooms on %1$s": [null, "Tak ada ruangan di %1$s"], + "Rooms on %1$s": [null, "Ruangan di %1$s"], + "Set chatroom topic": [null, "Setel topik ruangan"], + "Kick user from chatroom": [null, "Tendang pengguna dari ruangan"], + "Ban user from chatroom": [null, "Larang pengguna dari ruangan"], + "Message": [null, "Pesan"], + "Save": [null, "Simpan"], + "Cancel": [null, "Batal"], + "An error occurred while trying to save the form.": [null, "Kesalahan terjadi saat menyimpan formulir ini."], + "This chatroom requires a password": [null, "Ruangan ini membutuhkan kata sandi"], + "Password: ": [null, "Kata sandi: "], + "Submit": [null, "Kirim"], + "This room is not anonymous": [null, "Ruangan ini tidak anonim"], + "This room now shows unavailable members": [null, "Ruangan ini menampilkan anggota yang tak tersedia"], + "This room does not show unavailable members": [null, "Ruangan ini tidak menampilkan anggota yang tak tersedia"], + "Non-privacy-related room configuration has changed": [null, "Konfigurasi ruangan yang tak berhubungan dengan privasi telah diubah"], + "Room logging is now enabled": [null, "Pencatatan di ruangan ini sekarang dinyalakan"], + "Room logging is now disabled": [null, "Pencatatan di ruangan ini sekarang dimatikan"], + "This room is now non-anonymous": [null, "Ruangan ini sekarang tak-anonim"], + "This room is now semi-anonymous": [null, "Ruangan ini sekarang semi-anonim"], + "This room is now fully-anonymous": [null, "Ruangan ini sekarang anonim"], + "A new room has been created": [null, "Ruangan baru telah dibuat"], + "Your nickname has been changed": [null, "Nama panggilan anda telah diubah"], + "%1$s has been banned": [null, "%1$s telah dicekal"], + "%1$s has been kicked out": [null, "%1$s telah ditendang keluar"], + "%1$s has been removed because of an affiliation change": [null, "%1$s telah dihapus karena perubahan afiliasi"], + "%1$s has been removed for not being a member": [null, "%1$s telah dihapus karena bukan anggota"], + "You have been banned from this room": [null, "Anda telah dicekal dari ruangan ini"], + "You have been kicked from this room": [null, "Anda telah ditendang dari ruangan ini"], + "You have been removed from this room because of an affiliation change": [null, "Anda telah dihapus dari ruangan ini karena perubahan afiliasi"], + "You have been removed from this room because the room has changed to members-only and you're not a member": [null, "Anda telah dihapus dari ruangan ini karena ruangan ini hanya terbuka untuk anggota dan anda bukan anggota"], + "You have been removed from this room because the MUC (Multi-user chat) service is being shut down.": [null, "Anda telah dihapus dari ruangan ini karena layanan MUC (Multi-user chat) telah dimatikan."], + "You are not on the member list of this room": [null, "Anda bukan anggota dari ruangan ini"], + "No nickname was specified": [null, "Nama panggilan belum ditentukan"], + "You are not allowed to create new rooms": [null, "Anda tak diizinkan untuk membuat ruangan baru"], + "Your nickname doesn't conform to this room's policies": [null, "Nama panggilan anda tidak sesuai aturan ruangan ini"], + "Your nickname is already taken": [null, "Nama panggilan anda telah digunakan orang lain"], + "This room does not (yet) exist": [null, "Ruangan ini belum dibuat"], + "This room has reached it's maximum number of occupants": [null, "Ruangan ini telah mencapai jumlah penghuni maksimum"], + "Topic set by %1$s to: %2$s": [null, "Topik diganti oleh %1$s menjadi: %2$s"], + "This user is a moderator": [null, "Pengguna ini adalah moderator"], + "This user can send messages in this room": [null, "Pengguna ini dapat mengirim pesan di ruangan ini"], + "This user can NOT send messages in this room": [null, "Pengguna ini tak dapat mengirim pesan di ruangan ini"], + "Click to chat with this contact": [null, "Klik untuk mulai perbinjangan dengan teman ini"], + "Click to remove this contact": [null, "Klik untuk menghapus teman ini"], + "Contact requests": [null, "Permintaan pertemanan"], + "My contacts": [null, "Teman saya"], + "Pending contacts": [null, "Teman yang menunggu"], + "Custom status": [null, "Status kustom"], + "Click to change your chat status": [null, "Klik untuk mengganti status"], + "Click here to write a custom status message": [null, "Klik untuk menulis status kustom"], + "online": [null, "terhubung"], + "busy": [null, "sibuk"], + "away for long": [null, "lama tak di tempat"], + "away": [null, "tak di tempat"], + "I am %1$s": [null, "Saya %1$s"], + "Sign in": [null, "Masuk"], + "XMPP/Jabber Username:": [null, "Nama pengguna XMPP/Jabber:"], + "Password:": [null, "Kata sandi:"], + "Log In": [null, "Masuk"], + "BOSH Service URL:": [null, "URL Layanan BOSH:"] + } + + } + }) + } + }(this, function(i18n) { + return i18n; + })); diff --git a/locale/locales.js b/locale/locales.js index 2513b5429..e67511c24 100644 --- a/locale/locales.js +++ b/locale/locales.js @@ -15,6 +15,7 @@ "es": "locale/es/LC_MESSAGES/es", "fr": "locale/fr/LC_MESSAGES/fr", "hu": "locale/hu/LC_MESSAGES/hu", + "id": "locale/id/LC_MESSAGES/id", "it": "locale/it/LC_MESSAGES/it", "ja": "locale/ja/LC_MESSAGES/ja", "nl": "locale/nl/LC_MESSAGES/nl", @@ -31,12 +32,13 @@ 'es', 'fr', 'hu', + 'id', 'it', 'ja', 'nl', 'pt_BR', 'ru' - ], function (jed, af, de, en, es, fr, hu, it, ja, nl, pt_BR, ru) { + ], function (jed, af, de, en, es, fr, hu, id, it, ja, nl, pt_BR, ru) { root.locales = { 'af': af, 'de': de, @@ -44,6 +46,7 @@ 'es': es, 'fr': fr, 'hu': hu, + 'id': id, 'it': it, 'ja': ja, 'nl': nl, From ee07226e8ff2d5661ee0ebcf00cbcfe676fc8d7b Mon Sep 17 00:00:00 2001 From: JC Brand Date: Tue, 28 Jan 2014 03:48:43 +0200 Subject: [PATCH 06/33] Fix RST typo --- docs/source/index.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/source/index.rst b/docs/source/index.rst index 14b027bc7..793db5af1 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -387,6 +387,7 @@ If you don't have grunt installed globally, you need to specify the relative path: :: + ./node_modules/.bin/grunt fetch This will call Bower in the background to fetch all the front-end From d7c31d5b736b36f77c985ed67bcd71695a63e646 Mon Sep 17 00:00:00 2001 From: JC Brand Date: Tue, 28 Jan 2014 03:50:51 +0200 Subject: [PATCH 07/33] Minor correction of OTR/SMP explanation. Fixes #113 --- converse.js | 2 +- locale/converse.pot | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/converse.js b/converse.js index e26a26b1a..e8a49e9cc 100644 --- a/converse.js +++ b/converse.js @@ -1157,7 +1157,7 @@ this.model.save({'otr_status': UNVERIFIED}); } } else if (scheme === 'smp') { - alert(__('You will be prompted to provide a security question and then an answer to that question.\n\nYour buddy will then be prompted the same question and if they type the exact same answer (case sensitive), their identity will have been verified.')); + alert(__('You will be prompted to provide a security question and then an answer to that question.\n\nYour buddy will then be prompted the same question and if they type the exact same answer (case sensitive), their identity will be verified.')); question = prompt(__('What is your security question?')); if (question) { answer = prompt(__('What is the answer to the security question?')); diff --git a/locale/converse.pot b/locale/converse.pot index b4d21a5d5..b1e2b9ed2 100644 --- a/locale/converse.pot +++ b/locale/converse.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Converse.js 0.7.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-01-22 17:07+0200\n" +"POT-Creation-Date: 2014-01-28 03:50+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -197,7 +197,7 @@ msgid "" "that question.\n" "\n" "Your buddy will then be prompted the same question and if they type the " -"exact same answer (case sensitive), their identity will have been verified." +"exact same answer (case sensitive), their identity will be verified." msgstr "" #: converse.js:1161 From 24b205536a7610d33a0aa58450f3e9b3e46b6478 Mon Sep 17 00:00:00 2001 From: JC Brand Date: Tue, 28 Jan 2014 09:30:03 +0200 Subject: [PATCH 08/33] Fix syntax err in Indonesian translations and update CHANGES --- docs/CHANGES.rst | 1 + locale/id/LC_MESSAGES/id.js | 349 ++++++++++++++++++------------------ 2 files changed, 179 insertions(+), 171 deletions(-) diff --git a/docs/CHANGES.rst b/docs/CHANGES.rst index f6f8719a1..e376cf6ca 100644 --- a/docs/CHANGES.rst +++ b/docs/CHANGES.rst @@ -6,6 +6,7 @@ Unreleased * Option to display a call button in the chatbox toolbar, to allow third-party libraries to provide a calling feature. [Aupajo] * #108 Japanese Translations. [mako09] +* #115 Indonesian Translations. [priyadi] 0.7.2 (2013-12-18) ------------------ diff --git a/locale/id/LC_MESSAGES/id.js b/locale/id/LC_MESSAGES/id.js index 2ccfe2a24..0bcd43367 100644 --- a/locale/id/LC_MESSAGES/id.js +++ b/locale/id/LC_MESSAGES/id.js @@ -1,173 +1,180 @@ (function(root, factory) { - define("de", ['jed'], function() { - return factory(new Jed({ - "domain": "converse", - "locale_data": { - { - "": { - "project-id-version": "Converse.js 0.7.0", - "report-msgid-bugs-to": "", - "pot-creation-date": "2014-01-22 17:07+0200", - "po-revision-date": "2014-01-25 21:30+0700", - "last-translator": "Priyadi Iman Nurcahyo ", - "language-team": "Bahasa Indonesia", - "mime-version": "1.0", - "content-type": "text/plain; charset=UTF-8", - "content-transfer-encoding": "8bit", - "language": "id" - }, - "unencrypted": [null, "tak dienkripsi"], - "unverified": [null, "tak diverifikasi"], - "verified": [null, "diverifikasi"], - "finished": [null, "selesai"], - "This contact is busy": [null, "Teman ini sedang sibuk"], - "This contact is online": [null, "Teman ini terhubung"], - "This contact is offline": [null, "Teman ini tidak terhubung"], - "This contact is unavailable": [null, "Teman ini tidak tersedia"], - "This contact is away for an extended period": [null, "Teman ini tidak di tempat untuk waktu yang lama"], - "This contact is away": [null, "Teman ini tidak di tempat"], - "Disconnected": [null, "Terputus"], - "Error": [null, "Kesalahan"], - "Connecting": [null, "Menyambung"], - "Connection Failed": [null, "Gagal Menyambung"], - "Authenticating": [null, "Melakukan otentikasi"], - "Authentication Failed": [null, "Otentikasi gagal"], - "Disconnecting": [null, "Memutuskan hubungan"], - "Online Contacts": [null, "Teman yang Terhubung"], - "Re-establishing encrypted session": [null, "Menyambung kembali sesi terenkripsi"], - "Your browser needs to generate a private key, which will be used in your encrypted chat session. This can take up to 30 seconds during which your browser might freeze and become unresponsive.": [null, "Perambah anda perlu membuat kunci privat, yang akan digunakan pada sesi perbincangan anda. Ini akan membutuhkan waktu sampai 30 detik, dan selama itu perambah mungkin akan tidak responsif."], - "Private key generated.": [null, "Kunci privat berhasil dibuat."], - "Authentication request from %1$s\n\nYour buddy is attempting to verify your identity, by asking you the question below.\n\n%2$s": [null, "Permintaan otentikasi dari %1$s\n\nTeman anda mencoba untuk melakukan verifikasi identitas anda dengan cara menanyakan pertanyaan di bawah ini.\n\n%2$s"], - "Could not verify this user's identify.": [null, "Tak dapat melakukan verifikasi identitas pengguna ini."], - "Personal message": [null, "Pesan pribadi"], - "Start encrypted conversation": [null, "Mulai sesi terenkripsi"], - "Refresh encrypted conversation": [null, "Setel ulang percakapan terenkripsi"], - "End encrypted conversation": [null, "Sudahi percakapan terenkripsi"], - "Verify with SMP": [null, "Verifikasi menggunakan SMP"], - "Verify with fingerprints": [null, "Verifikasi menggunakan sidik jari"], - "What's this?": [null, "Apakah ini?"], - "me": [null, "saya"], - "Show this menu": [null, "Tampilkan menu ini"], - "Write in the third person": [null, "Tulis ini menggunakan bahasa pihak ketiga"], - "Remove messages": [null, "Hapus pesan"], - "Your message could not be sent": [null, "Pesan anda tak dapat dikirim"], - "We received an unencrypted message": [null, "Kami menerima pesan terenkripsi"], - "We received an unreadable encrypted message": [null, "Kami menerima pesan terenkripsi yang gagal dibaca"], - "This user has requested an encrypted session.": [null, "Pengguna ini meminta sesi terenkripsi"], - "Here are the fingerprints, please confirm them with %1$s, outside of this chat.\n\nFingerprint for you, %2$s: %3$s\n\nFingerprint for %1$s: %4$s\n\nIf you have confirmed that the fingerprints match, click OK, otherwise click Cancel.": [null, "Ini adalah sidik jari anda, konfirmasikan bersama mereka dengan %1$s, di luar percakapan ini.\n\nSidik jari untuk anda, %2$s: %3$s\n\nSidik jari untuk %1$s: %4$s\n\nJika anda bisa mengkonfirmasi sidik jadi cocok, klik Lanjutkan, jika tidak klik Batal."], - "You will be prompted to provide a security question and then an answer to that question.\n\nYour buddy will then be prompted the same question and if they type the exact same answer (case sensitive), their identity will have been verified.": [null, "Anda akan ditanyakan pertanyaan untuk keamanan beserta jawaban untuk pertanyaan tersebut.\n\nTeman anda akan ditanyakan pertanyaan yang sama dan jika dia memberikan jawaban yang sama (huruf kapital diperhatikan), identitas mereka diverifikasi."], - "What is your security question?": [null, "Apakah pertanyaan keamanan anda?"], - "What is the answer to the security question?": [null, "Apa jawaban dari pertanyaan keamanan tersebut?"], - "Invalid authentication scheme provided": [null, "Skema otentikasi salah"], - "Your messages are not encrypted anymore": [null, "Pesan anda tidak lagi terenkripsi"], - "Your messages are now encrypted but your buddy's identity has not been verified.": [null, "Pesan anda sekarang terenkripsi, namun identitas teman anda belum dapat diverifikasi."], - "Your buddy's identify has been verified.": [null, "Identitas teman anda telah diverifikasi."], - "Your buddy has ended encryption on their end, you should do the same.": [null, "Teman anda menghentikan percakapan terenkripsi, anda sebaiknya melakukan hal yang sama."], - "Your messages are not encrypted. Click here to enable OTR encryption.": [null, "Pesan anda tak terenkripsi. Klik di sini untuk menyalakan enkripsi OTR."], - "Your messages are encrypted, but your buddy has not been verified.": [null, "Pesan anda terenkripsi, tetapi teman anda belum diverifikasi."], - "Your messages are encrypted and your buddy verified.": [null, "Pesan anda terenkripsi dan teman anda telah diverifikasi."], - "Your buddy has closed their end of the private session, you should do the same": [null, "Teman anda telah mematikan sesi terenkripsi, dan anda juga sebaiknya melakukan hal yang sama"], - "Contacts": [null, "Teman"], - "Online": [null, "Terhubung"], - "Busy": [null, "Sibuk"], - "Away": [null, "Pergi"], - "Offline": [null, "Tak Terhubung"], - "Click to add new chat contacts": [null, "Klik untuk menambahkan teman baru"], - "Add a contact": [null, "Tambah teman"], - "Contact username": [null, "Username teman"], - "Add": [null, "Tambah"], - "Contact name": [null, "Nama teman"], - "Search": [null, "Cari"], - "No users found": [null, "Pengguna tak ditemukan"], - "Click to add as a chat contact": [null, "Klik untuk menambahkan sebagai teman"], - "Click to open this room": [null, "Klik untuk membuka ruangan ini"], - "Show more information on this room": [null, "Tampilkan informasi ruangan ini"], - "Description:": [null, "Keterangan:"], - "Occupants:": [null, "Penghuni:"], - "Features:": [null, "Fitur:"], - "Requires authentication": [null, "Membutuhkan otentikasi"], - "Hidden": [null, "Tersembunyi"], - "Requires an invitation": [null, "Membutuhkan undangan"], - "Moderated": [null, "Dimoderasi"], - "Non-anonymous": [null, "Tidak anonim"], - "Open room": [null, "Ruangan terbuka"], - "Permanent room": [null, "Ruangan permanen"], - "Public": [null, "Umum"], - "Semi-anonymous": [null, "Semi-anonim"], - "Temporary room": [null, "Ruangan sementara"], - "Unmoderated": [null, "Tak dimoderasi"], - "Rooms": [null, "Ruangan"], - "Room name": [null, "Nama ruangan"], - "Nickname": [null, "Nama panggilan"], - "Server": [null, "Server"], - "Join": [null, "Ikuti"], - "Show rooms": [null, "Perlihatkan ruangan"], - "No rooms on %1$s": [null, "Tak ada ruangan di %1$s"], - "Rooms on %1$s": [null, "Ruangan di %1$s"], - "Set chatroom topic": [null, "Setel topik ruangan"], - "Kick user from chatroom": [null, "Tendang pengguna dari ruangan"], - "Ban user from chatroom": [null, "Larang pengguna dari ruangan"], - "Message": [null, "Pesan"], - "Save": [null, "Simpan"], - "Cancel": [null, "Batal"], - "An error occurred while trying to save the form.": [null, "Kesalahan terjadi saat menyimpan formulir ini."], - "This chatroom requires a password": [null, "Ruangan ini membutuhkan kata sandi"], - "Password: ": [null, "Kata sandi: "], - "Submit": [null, "Kirim"], - "This room is not anonymous": [null, "Ruangan ini tidak anonim"], - "This room now shows unavailable members": [null, "Ruangan ini menampilkan anggota yang tak tersedia"], - "This room does not show unavailable members": [null, "Ruangan ini tidak menampilkan anggota yang tak tersedia"], - "Non-privacy-related room configuration has changed": [null, "Konfigurasi ruangan yang tak berhubungan dengan privasi telah diubah"], - "Room logging is now enabled": [null, "Pencatatan di ruangan ini sekarang dinyalakan"], - "Room logging is now disabled": [null, "Pencatatan di ruangan ini sekarang dimatikan"], - "This room is now non-anonymous": [null, "Ruangan ini sekarang tak-anonim"], - "This room is now semi-anonymous": [null, "Ruangan ini sekarang semi-anonim"], - "This room is now fully-anonymous": [null, "Ruangan ini sekarang anonim"], - "A new room has been created": [null, "Ruangan baru telah dibuat"], - "Your nickname has been changed": [null, "Nama panggilan anda telah diubah"], - "%1$s has been banned": [null, "%1$s telah dicekal"], - "%1$s has been kicked out": [null, "%1$s telah ditendang keluar"], - "%1$s has been removed because of an affiliation change": [null, "%1$s telah dihapus karena perubahan afiliasi"], - "%1$s has been removed for not being a member": [null, "%1$s telah dihapus karena bukan anggota"], - "You have been banned from this room": [null, "Anda telah dicekal dari ruangan ini"], - "You have been kicked from this room": [null, "Anda telah ditendang dari ruangan ini"], - "You have been removed from this room because of an affiliation change": [null, "Anda telah dihapus dari ruangan ini karena perubahan afiliasi"], - "You have been removed from this room because the room has changed to members-only and you're not a member": [null, "Anda telah dihapus dari ruangan ini karena ruangan ini hanya terbuka untuk anggota dan anda bukan anggota"], - "You have been removed from this room because the MUC (Multi-user chat) service is being shut down.": [null, "Anda telah dihapus dari ruangan ini karena layanan MUC (Multi-user chat) telah dimatikan."], - "You are not on the member list of this room": [null, "Anda bukan anggota dari ruangan ini"], - "No nickname was specified": [null, "Nama panggilan belum ditentukan"], - "You are not allowed to create new rooms": [null, "Anda tak diizinkan untuk membuat ruangan baru"], - "Your nickname doesn't conform to this room's policies": [null, "Nama panggilan anda tidak sesuai aturan ruangan ini"], - "Your nickname is already taken": [null, "Nama panggilan anda telah digunakan orang lain"], - "This room does not (yet) exist": [null, "Ruangan ini belum dibuat"], - "This room has reached it's maximum number of occupants": [null, "Ruangan ini telah mencapai jumlah penghuni maksimum"], - "Topic set by %1$s to: %2$s": [null, "Topik diganti oleh %1$s menjadi: %2$s"], - "This user is a moderator": [null, "Pengguna ini adalah moderator"], - "This user can send messages in this room": [null, "Pengguna ini dapat mengirim pesan di ruangan ini"], - "This user can NOT send messages in this room": [null, "Pengguna ini tak dapat mengirim pesan di ruangan ini"], - "Click to chat with this contact": [null, "Klik untuk mulai perbinjangan dengan teman ini"], - "Click to remove this contact": [null, "Klik untuk menghapus teman ini"], - "Contact requests": [null, "Permintaan pertemanan"], - "My contacts": [null, "Teman saya"], - "Pending contacts": [null, "Teman yang menunggu"], - "Custom status": [null, "Status kustom"], - "Click to change your chat status": [null, "Klik untuk mengganti status"], - "Click here to write a custom status message": [null, "Klik untuk menulis status kustom"], - "online": [null, "terhubung"], - "busy": [null, "sibuk"], - "away for long": [null, "lama tak di tempat"], - "away": [null, "tak di tempat"], - "I am %1$s": [null, "Saya %1$s"], - "Sign in": [null, "Masuk"], - "XMPP/Jabber Username:": [null, "Nama pengguna XMPP/Jabber:"], - "Password:": [null, "Kata sandi:"], - "Log In": [null, "Masuk"], - "BOSH Service URL:": [null, "URL Layanan BOSH:"] - } - - } - }) + var translations = { + "domain": "converse", + "locale_data": { + "converse": { + "": { + "project-id-version": "Converse.js 0.7.0", + "report-msgid-bugs-to": "", + "pot-creation-date": "2014-01-22 17:07+0200", + "po-revision-date": "2014-01-25 21:30+0700", + "last-translator": "Priyadi Iman Nurcahyo ", + "language-team": "Bahasa Indonesia", + "mime-version": "1.0", + "content-type": "text/plain; charset=UTF-8", + "content-transfer-encoding": "8bit", + "language": "id" + }, + "unencrypted": [null, "tak dienkripsi"], + "unverified": [null, "tak diverifikasi"], + "verified": [null, "diverifikasi"], + "finished": [null, "selesai"], + "This contact is busy": [null, "Teman ini sedang sibuk"], + "This contact is online": [null, "Teman ini terhubung"], + "This contact is offline": [null, "Teman ini tidak terhubung"], + "This contact is unavailable": [null, "Teman ini tidak tersedia"], + "This contact is away for an extended period": [null, "Teman ini tidak di tempat untuk waktu yang lama"], + "This contact is away": [null, "Teman ini tidak di tempat"], + "Disconnected": [null, "Terputus"], + "Error": [null, "Kesalahan"], + "Connecting": [null, "Menyambung"], + "Connection Failed": [null, "Gagal Menyambung"], + "Authenticating": [null, "Melakukan otentikasi"], + "Authentication Failed": [null, "Otentikasi gagal"], + "Disconnecting": [null, "Memutuskan hubungan"], + "Online Contacts": [null, "Teman yang Terhubung"], + "Re-establishing encrypted session": [null, "Menyambung kembali sesi terenkripsi"], + "Your browser needs to generate a private key, which will be used in your encrypted chat session. This can take up to 30 seconds during which your browser might freeze and become unresponsive.": [null, "Perambah anda perlu membuat kunci privat, yang akan digunakan pada sesi perbincangan anda. Ini akan membutuhkan waktu sampai 30 detik, dan selama itu perambah mungkin akan tidak responsif."], + "Private key generated.": [null, "Kunci privat berhasil dibuat."], + "Authentication request from %1$s\n\nYour buddy is attempting to verify your identity, by asking you the question below.\n\n%2$s": [null, "Permintaan otentikasi dari %1$s\n\nTeman anda mencoba untuk melakukan verifikasi identitas anda dengan cara menanyakan pertanyaan di bawah ini.\n\n%2$s"], + "Could not verify this user's identify.": [null, "Tak dapat melakukan verifikasi identitas pengguna ini."], + "Personal message": [null, "Pesan pribadi"], + "Start encrypted conversation": [null, "Mulai sesi terenkripsi"], + "Refresh encrypted conversation": [null, "Setel ulang percakapan terenkripsi"], + "End encrypted conversation": [null, "Sudahi percakapan terenkripsi"], + "Verify with SMP": [null, "Verifikasi menggunakan SMP"], + "Verify with fingerprints": [null, "Verifikasi menggunakan sidik jari"], + "What's this?": [null, "Apakah ini?"], + "me": [null, "saya"], + "Show this menu": [null, "Tampilkan menu ini"], + "Write in the third person": [null, "Tulis ini menggunakan bahasa pihak ketiga"], + "Remove messages": [null, "Hapus pesan"], + "Your message could not be sent": [null, "Pesan anda tak dapat dikirim"], + "We received an unencrypted message": [null, "Kami menerima pesan terenkripsi"], + "We received an unreadable encrypted message": [null, "Kami menerima pesan terenkripsi yang gagal dibaca"], + "This user has requested an encrypted session.": [null, "Pengguna ini meminta sesi terenkripsi"], + "Here are the fingerprints, please confirm them with %1$s, outside of this chat.\n\nFingerprint for you, %2$s: %3$s\n\nFingerprint for %1$s: %4$s\n\nIf you have confirmed that the fingerprints match, click OK, otherwise click Cancel.": [null, "Ini adalah sidik jari anda, konfirmasikan bersama mereka dengan %1$s, di luar percakapan ini.\n\nSidik jari untuk anda, %2$s: %3$s\n\nSidik jari untuk %1$s: %4$s\n\nJika anda bisa mengkonfirmasi sidik jadi cocok, klik Lanjutkan, jika tidak klik Batal."], + "You will be prompted to provide a security question and then an answer to that question.\n\nYour buddy will then be prompted the same question and if they type the exact same answer (case sensitive), their identity will have been verified.": [null, "Anda akan ditanyakan pertanyaan untuk keamanan beserta jawaban untuk pertanyaan tersebut.\n\nTeman anda akan ditanyakan pertanyaan yang sama dan jika dia memberikan jawaban yang sama (huruf kapital diperhatikan), identitas mereka diverifikasi."], + "What is your security question?": [null, "Apakah pertanyaan keamanan anda?"], + "What is the answer to the security question?": [null, "Apa jawaban dari pertanyaan keamanan tersebut?"], + "Invalid authentication scheme provided": [null, "Skema otentikasi salah"], + "Your messages are not encrypted anymore": [null, "Pesan anda tidak lagi terenkripsi"], + "Your messages are now encrypted but your buddy's identity has not been verified.": [null, "Pesan anda sekarang terenkripsi, namun identitas teman anda belum dapat diverifikasi."], + "Your buddy's identify has been verified.": [null, "Identitas teman anda telah diverifikasi."], + "Your buddy has ended encryption on their end, you should do the same.": [null, "Teman anda menghentikan percakapan terenkripsi, anda sebaiknya melakukan hal yang sama."], + "Your messages are not encrypted. Click here to enable OTR encryption.": [null, "Pesan anda tak terenkripsi. Klik di sini untuk menyalakan enkripsi OTR."], + "Your messages are encrypted, but your buddy has not been verified.": [null, "Pesan anda terenkripsi, tetapi teman anda belum diverifikasi."], + "Your messages are encrypted and your buddy verified.": [null, "Pesan anda terenkripsi dan teman anda telah diverifikasi."], + "Your buddy has closed their end of the private session, you should do the same": [null, "Teman anda telah mematikan sesi terenkripsi, dan anda juga sebaiknya melakukan hal yang sama"], + "Contacts": [null, "Teman"], + "Online": [null, "Terhubung"], + "Busy": [null, "Sibuk"], + "Away": [null, "Pergi"], + "Offline": [null, "Tak Terhubung"], + "Click to add new chat contacts": [null, "Klik untuk menambahkan teman baru"], + "Add a contact": [null, "Tambah teman"], + "Contact username": [null, "Username teman"], + "Add": [null, "Tambah"], + "Contact name": [null, "Nama teman"], + "Search": [null, "Cari"], + "No users found": [null, "Pengguna tak ditemukan"], + "Click to add as a chat contact": [null, "Klik untuk menambahkan sebagai teman"], + "Click to open this room": [null, "Klik untuk membuka ruangan ini"], + "Show more information on this room": [null, "Tampilkan informasi ruangan ini"], + "Description:": [null, "Keterangan:"], + "Occupants:": [null, "Penghuni:"], + "Features:": [null, "Fitur:"], + "Requires authentication": [null, "Membutuhkan otentikasi"], + "Hidden": [null, "Tersembunyi"], + "Requires an invitation": [null, "Membutuhkan undangan"], + "Moderated": [null, "Dimoderasi"], + "Non-anonymous": [null, "Tidak anonim"], + "Open room": [null, "Ruangan terbuka"], + "Permanent room": [null, "Ruangan permanen"], + "Public": [null, "Umum"], + "Semi-anonymous": [null, "Semi-anonim"], + "Temporary room": [null, "Ruangan sementara"], + "Unmoderated": [null, "Tak dimoderasi"], + "Rooms": [null, "Ruangan"], + "Room name": [null, "Nama ruangan"], + "Nickname": [null, "Nama panggilan"], + "Server": [null, "Server"], + "Join": [null, "Ikuti"], + "Show rooms": [null, "Perlihatkan ruangan"], + "No rooms on %1$s": [null, "Tak ada ruangan di %1$s"], + "Rooms on %1$s": [null, "Ruangan di %1$s"], + "Set chatroom topic": [null, "Setel topik ruangan"], + "Kick user from chatroom": [null, "Tendang pengguna dari ruangan"], + "Ban user from chatroom": [null, "Larang pengguna dari ruangan"], + "Message": [null, "Pesan"], + "Save": [null, "Simpan"], + "Cancel": [null, "Batal"], + "An error occurred while trying to save the form.": [null, "Kesalahan terjadi saat menyimpan formulir ini."], + "This chatroom requires a password": [null, "Ruangan ini membutuhkan kata sandi"], + "Password: ": [null, "Kata sandi: "], + "Submit": [null, "Kirim"], + "This room is not anonymous": [null, "Ruangan ini tidak anonim"], + "This room now shows unavailable members": [null, "Ruangan ini menampilkan anggota yang tak tersedia"], + "This room does not show unavailable members": [null, "Ruangan ini tidak menampilkan anggota yang tak tersedia"], + "Non-privacy-related room configuration has changed": [null, "Konfigurasi ruangan yang tak berhubungan dengan privasi telah diubah"], + "Room logging is now enabled": [null, "Pencatatan di ruangan ini sekarang dinyalakan"], + "Room logging is now disabled": [null, "Pencatatan di ruangan ini sekarang dimatikan"], + "This room is now non-anonymous": [null, "Ruangan ini sekarang tak-anonim"], + "This room is now semi-anonymous": [null, "Ruangan ini sekarang semi-anonim"], + "This room is now fully-anonymous": [null, "Ruangan ini sekarang anonim"], + "A new room has been created": [null, "Ruangan baru telah dibuat"], + "Your nickname has been changed": [null, "Nama panggilan anda telah diubah"], + "%1$s has been banned": [null, "%1$s telah dicekal"], + "%1$s has been kicked out": [null, "%1$s telah ditendang keluar"], + "%1$s has been removed because of an affiliation change": [null, "%1$s telah dihapus karena perubahan afiliasi"], + "%1$s has been removed for not being a member": [null, "%1$s telah dihapus karena bukan anggota"], + "You have been banned from this room": [null, "Anda telah dicekal dari ruangan ini"], + "You have been kicked from this room": [null, "Anda telah ditendang dari ruangan ini"], + "You have been removed from this room because of an affiliation change": [null, "Anda telah dihapus dari ruangan ini karena perubahan afiliasi"], + "You have been removed from this room because the room has changed to members-only and you're not a member": [null, "Anda telah dihapus dari ruangan ini karena ruangan ini hanya terbuka untuk anggota dan anda bukan anggota"], + "You have been removed from this room because the MUC (Multi-user chat) service is being shut down.": [null, "Anda telah dihapus dari ruangan ini karena layanan MUC (Multi-user chat) telah dimatikan."], + "You are not on the member list of this room": [null, "Anda bukan anggota dari ruangan ini"], + "No nickname was specified": [null, "Nama panggilan belum ditentukan"], + "You are not allowed to create new rooms": [null, "Anda tak diizinkan untuk membuat ruangan baru"], + "Your nickname doesn't conform to this room's policies": [null, "Nama panggilan anda tidak sesuai aturan ruangan ini"], + "Your nickname is already taken": [null, "Nama panggilan anda telah digunakan orang lain"], + "This room does not (yet) exist": [null, "Ruangan ini belum dibuat"], + "This room has reached it's maximum number of occupants": [null, "Ruangan ini telah mencapai jumlah penghuni maksimum"], + "Topic set by %1$s to: %2$s": [null, "Topik diganti oleh %1$s menjadi: %2$s"], + "This user is a moderator": [null, "Pengguna ini adalah moderator"], + "This user can send messages in this room": [null, "Pengguna ini dapat mengirim pesan di ruangan ini"], + "This user can NOT send messages in this room": [null, "Pengguna ini tak dapat mengirim pesan di ruangan ini"], + "Click to chat with this contact": [null, "Klik untuk mulai perbinjangan dengan teman ini"], + "Click to remove this contact": [null, "Klik untuk menghapus teman ini"], + "Contact requests": [null, "Permintaan pertemanan"], + "My contacts": [null, "Teman saya"], + "Pending contacts": [null, "Teman yang menunggu"], + "Custom status": [null, "Status kustom"], + "Click to change your chat status": [null, "Klik untuk mengganti status"], + "Click here to write a custom status message": [null, "Klik untuk menulis status kustom"], + "online": [null, "terhubung"], + "busy": [null, "sibuk"], + "away for long": [null, "lama tak di tempat"], + "away": [null, "tak di tempat"], + "I am %1$s": [null, "Saya %1$s"], + "Sign in": [null, "Masuk"], + "XMPP/Jabber Username:": [null, "Nama pengguna XMPP/Jabber:"], + "Password:": [null, "Kata sandi:"], + "Log In": [null, "Masuk"], + "BOSH Service URL:": [null, "URL Layanan BOSH:"] } - }(this, function(i18n) { - return i18n; - })); + } + }; + if (typeof define === 'function' && define.amd) { + define("id", ['jed'], function () { + return factory(new Jed(translations)); + }); + } else { + if (!window.locales) { + window.locales = {}; + } + window.locales.id = factory(new Jed(translations)); + } +}(this, function (id) { + return id; +})); From cd144a98ca69f982fb93682fd8f8ffa6be1bf1eb Mon Sep 17 00:00:00 2001 From: JC Brand Date: Tue, 28 Jan 2014 09:41:07 +0200 Subject: [PATCH 09/33] Add Hebrew translations --- README.rst | 2 +- docs/CHANGES.rst | 5 +- index.html | 2 +- locale/he/LC_MESSAGES/converse.json | 605 +++++++++++++++++++++++++++ locale/he/LC_MESSAGES/he.js | 622 ++++++++++++++++++++++++++++ locale/locales.js | 5 +- 6 files changed, 1236 insertions(+), 5 deletions(-) create mode 100644 locale/he/LC_MESSAGES/converse.json create mode 100644 locale/he/LC_MESSAGES/he.js diff --git a/README.rst b/README.rst index 57d7d9806..e7c12d193 100644 --- a/README.rst +++ b/README.rst @@ -29,7 +29,7 @@ It has the following features: * Custom status messages * Typing notifications * Third person messages (/me ) -* Translated into multiple languages (af, de, es, fr, it, hu, pt-BR, ru) +* Translated into multiple languages (af, de, en, es, fr, he, hu, id, it, ja, nl, pt_BR, ru) * Off-the-record encryption support (via `OTR.js `_) ----------- diff --git a/docs/CHANGES.rst b/docs/CHANGES.rst index e376cf6ca..4a62f3f46 100644 --- a/docs/CHANGES.rst +++ b/docs/CHANGES.rst @@ -5,8 +5,9 @@ Unreleased ---------- * Option to display a call button in the chatbox toolbar, to allow third-party libraries to provide a calling feature. [Aupajo] -* #108 Japanese Translations. [mako09] -* #115 Indonesian Translations. [priyadi] +* #108 Japanese Translations [mako09] +* #114 Hewbrew Translations [GreenLunar] +* #115 Indonesian Translations [priyadi] 0.7.2 (2013-12-18) ------------------ diff --git a/index.html b/index.html index a53d9bf92..cb430a85e 100644 --- a/index.html +++ b/index.html @@ -54,7 +54,7 @@
  • Custom status messages
  • Typing notifications
  • Third person messages (/me )
  • -
  • Translated into multiple languages (af, de, es, fr, hu, it, nl, pt-BR, ru)
  • +
  • Translated into multiple languages (af, de, en, es, fr, he, hu, id, it, ja, nl, pt_BR, ru)
  • Off-the-record encryption (via OTR.js)
  • diff --git a/locale/he/LC_MESSAGES/converse.json b/locale/he/LC_MESSAGES/converse.json new file mode 100644 index 000000000..d82495006 --- /dev/null +++ b/locale/he/LC_MESSAGES/converse.json @@ -0,0 +1,605 @@ +{ + "converse": { + "": { + "Project-Id-Version": "Converse.js 0.7.0", + "Report-Msgid-Bugs-To": "", + "POT-Creation-Date": "2014-01-22 17:07+0200", + "PO-Revision-Date": "2014-01-24 15:40+0200", + "Last-Translator": "GreenLunar ", + "Language-Team": "Rahut ", + "Language": "he", + "MIME-Version": "1.0", + "Content-Type": "text/plain; charset=UTF-8", + "Content-Transfer-Encoding": "8bit", + "X-Generator": "Poedit 1.5.1" + }, + "unencrypted": [ + null, + "לא מוצפנת" + ], + "unverified": [ + null, + "לא מאומתת" + ], + "verified": [ + null, + "מאומתת" + ], + "finished": [ + null, + "מוגמרת" + ], + "This contact is busy": [ + null, + "איש קשר זה עסוק" + ], + "This contact is online": [ + null, + "איש קשר זה מקוון" + ], + "This contact is offline": [ + null, + "איש קשר זה לא מקוון" + ], + "This contact is unavailable": [ + null, + "איש קשר זה לא זמין" + ], + "This contact is away for an extended period": [ + null, + "איש קשר זה נעדר למשך זמן ממושך" + ], + "This contact is away": [ + null, + "איש קשר זה הינו נעדר" + ], + "Disconnected": [ + null, + "מנותק" + ], + "Error": [ + null, + "שגיאה" + ], + "Connecting": [ + null, + "כעת מתחבר" + ], + "Connection Failed": [ + null, + "חיבור נכשל" + ], + "Authenticating": [ + null, + "כעת מאמת" + ], + "Authentication Failed": [ + null, + "אימות נכשל" + ], + "Disconnecting": [ + null, + "כעת מתנתק" + ], + "Online Contacts": [ + null, + "אנשי קשר מקוונים" + ], + "Re-establishing encrypted session": [ + null, + "בסס מחדש ישיבה מוצפנת" + ], + "Your browser needs to generate a private key, which will be used in your encrypted chat session. This can take up to 30 seconds during which your browser might freeze and become unresponsive.": [ + null, + "על הדפדפן שלך להפיק מפתח פרטי, אשר ישמש אותך בישיבות שיחה מוצפנות. פעולה זו יכולה לקחת למעלה מן 30 שניות אשר במהלכה הדפדפן שלך עשוי לקפוא ולהפוך לחסר תגובה." + ], + "Private key generated.": [ + null, + "מפתח פרטי הופק." + ], + "Authentication request from %1$s\n\nYour buddy is attempting to verify your identity, by asking you the question below.\n\n%2$s": [ + null, + "בקשת אימות מאת %1$s\n\nהאישיות שכנגד מנסה לאמת את הזהות שלך, בעזרת שאילת שאלה להלן.\n\n%2$s" + ], + "Could not verify this user's identify.": [ + null, + "לא היתה אפשרות לאמת את זהות משתמש זה." + ], + "Personal message": [ + null, + "הודעה אישית" + ], + "Start encrypted conversation": [ + null, + "התחל ישיבה מוצפנת" + ], + "Refresh encrypted conversation": [ + null, + "רענן ישיבה מוצפנת" + ], + "End encrypted conversation": [ + null, + "סיים ישיבה מוצפנת" + ], + "Verify with SMP": [ + null, + "אמת בעזרת SMP" + ], + "Verify with fingerprints": [ + null, + "אמת בעזרת טביעות אצבע" + ], + "What's this?": [ + null, + "מה זה?" + ], + "me": [ + null, + "אני" + ], + "Show this menu": [ + null, + "הצג את תפריט זה" + ], + "Write in the third person": [ + null, + "כתוב בגוף השלישי" + ], + "Remove messages": [ + null, + "הסר הודעות" + ], + "Your message could not be sent": [ + null, + "ההודעה שלך לא היתה יכולה להישלח" + ], + "We received an unencrypted message": [ + null, + "אנחנו קיבלנו הודעה לא מוצפנת" + ], + "We received an unreadable encrypted message": [ + null, + "אנחנו קיבלנו הודעה מוצפנת לא קריאה" + ], + "This user has requested an encrypted session.": [ + null, + "משתמש זה ביקש ישיבה מוצפנת." + ], + "Here are the fingerprints, please confirm them with %1$s, outside of this chat.\n\nFingerprint for you, %2$s: %3$s\n\nFingerprint for %1$s: %4$s\n\nIf you have confirmed that the fingerprints match, click OK, otherwise click Cancel.": [ + null, + "הרי טביעות האצבע, אנא אמת אותן עם %1$s, מחוץ לשיחה זו.\n\nטביעת אצבע עבורך, %2$s: %3$s\n\nטביעת אצבע עבור %1$s: %4$s\n\nהיה ואימתת כי טביעות האצבע תואמות, לחץ אישור (OK), אחרת לחץ ביטול (Cancel)." + ], + "You will be prompted to provide a security question and then an answer to that question.\n\nYour buddy will then be prompted the same question and if they type the exact same answer (case sensitive), their identity will have been verified.": [ + null, + "אתה תתבקש לספק שאלת אבטחה ולאחריה תשובה לשאלה הזו.\n\nהאישיות שכנגד תתבקש עובר זאת לאותה שאלת אבטחה ואם זו תקלידו את את אותה התשובה במדויק (case sensitive), זהותה תאומת." + ], + "What is your security question?": [ + null, + "מהי שאלת האבטחה שלך?" + ], + "What is the answer to the security question?": [ + null, + "מהי התשובה לשאלת האבטחה?" + ], + "Invalid authentication scheme provided": [ + null, + "סופקה סכימת אימות שגויה" + ], + "Your messages are not encrypted anymore": [ + null, + "ההודעות שלך אינן מוצפנות עוד" + ], + "Your messages are now encrypted but your buddy's identity has not been verified.": [ + null, + "ההודעות שלך מוצפנות כעת אך זהות האישיות שכנגד טרם אומתה." + ], + "Your buddy's identify has been verified.": [ + null, + "זהות האישיות שכנגד אומתה." + ], + "Your buddy has ended encryption on their end, you should do the same.": [ + null, + "האישיות שכנגד סיימה הצפנה בקצה שלה, עליך לעשות את אותו הדבר." + ], + "Your messages are not encrypted. Click here to enable OTR encryption.": [ + null, + "ההודעות שלך אינן וצפנות. לחץ כאן כדי לאפשר OTR." + ], + "Your messages are encrypted, but your buddy has not been verified.": [ + null, + "ההודעות שלך מוצפנות כעת, אך האישיות שכנגד טרם אומתה." + ], + "Your messages are encrypted and your buddy verified.": [ + null, + "ההודעות שלך מוצפנות כעת והאישיות שכנגד אומתה." + ], + "Your buddy has closed their end of the private session, you should do the same": [ + 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, + "אין חדרים על %1$s" + ], + "Rooms on %1$s": [ + null, + "חדרים על %1$s" + ], + "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, + "שם הכינוי שלך שונה" + ], + "%1$s has been banned": [ + null, + "%1$s נאסר(ה)" + ], + "%1$s has been kicked out": [ + null, + "%1$s נבעט(ה)" + ], + "%1$s has been removed because of an affiliation change": [ + null, + "%1$s הוסרה(ה) משום שינוי שיוך" + ], + "%1$s has been removed for not being a member": [ + null, + "%1$s הוסר(ה) משום אי הימצאות במסגרת מעמד של חבר" + ], + "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, + "נושא חדר זה נקבע על ידי %1$s אל: %2$s" + ], + "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, + "אני במצב %1$s" + ], + "Sign in": [ + null, + "התחברות" + ], + "XMPP/Jabber Username:": [ + null, + "שם משתמש XMPP/Jabber:" + ], + "Password:": [ + null, + "סיסמה:" + ], + "Log In": [ + null, + "כניסה" + ], + "BOSH Service URL:": [ + null, + "כתובת שירות BOSH:" + ] + } +} \ No newline at end of file diff --git a/locale/he/LC_MESSAGES/he.js b/locale/he/LC_MESSAGES/he.js new file mode 100644 index 000000000..3873fb091 --- /dev/null +++ b/locale/he/LC_MESSAGES/he.js @@ -0,0 +1,622 @@ +(function (root, factory) { + var translations = { + "domain": "converse", + "locale_data": { + "converse": { + "": { + "Project-Id-Version": "Converse.js 0.7.0", + "Report-Msgid-Bugs-To": "", + "POT-Creation-Date": "2014-01-22 17:07+0200", + "PO-Revision-Date": "2014-01-24 15:40+0200", + "Last-Translator": "GreenLunar ", + "Language-Team": "Rahut ", + "Language": "he", + "MIME-Version": "1.0", + "Content-Type": "text/plain; charset=UTF-8", + "Content-Transfer-Encoding": "8bit", + "X-Generator": "Poedit 1.5.1" + }, + "unencrypted": [ + null, + "לא מוצפנת" + ], + "unverified": [ + null, + "לא מאומתת" + ], + "verified": [ + null, + "מאומתת" + ], + "finished": [ + null, + "מוגמרת" + ], + "This contact is busy": [ + null, + "איש קשר זה עסוק" + ], + "This contact is online": [ + null, + "איש קשר זה מקוון" + ], + "This contact is offline": [ + null, + "איש קשר זה לא מקוון" + ], + "This contact is unavailable": [ + null, + "איש קשר זה לא זמין" + ], + "This contact is away for an extended period": [ + null, + "איש קשר זה נעדר למשך זמן ממושך" + ], + "This contact is away": [ + null, + "איש קשר זה הינו נעדר" + ], + "Disconnected": [ + null, + "מנותק" + ], + "Error": [ + null, + "שגיאה" + ], + "Connecting": [ + null, + "כעת מתחבר" + ], + "Connection Failed": [ + null, + "חיבור נכשל" + ], + "Authenticating": [ + null, + "כעת מאמת" + ], + "Authentication Failed": [ + null, + "אימות נכשל" + ], + "Disconnecting": [ + null, + "כעת מתנתק" + ], + "Online Contacts": [ + null, + "אנשי קשר מקוונים" + ], + "Re-establishing encrypted session": [ + null, + "בסס מחדש ישיבה מוצפנת" + ], + "Your browser needs to generate a private key, which will be used in your encrypted chat session. This can take up to 30 seconds during which your browser might freeze and become unresponsive.": [ + null, + "על הדפדפן שלך להפיק מפתח פרטי, אשר ישמש אותך בישיבות שיחה מוצפנות. פעולה זו יכולה לקחת למעלה מן 30 שניות אשר במהלכה הדפדפן שלך עשוי לקפוא ולהפוך לחסר תגובה." + ], + "Private key generated.": [ + null, + "מפתח פרטי הופק." + ], + "Authentication request from %1$s\n\nYour buddy is attempting to verify your identity, by asking you the question below.\n\n%2$s": [ + null, + "בקשת אימות מאת %1$s\n\nהאישיות שכנגד מנסה לאמת את הזהות שלך, בעזרת שאילת שאלה להלן.\n\n%2$s" + ], + "Could not verify this user's identify.": [ + null, + "לא היתה אפשרות לאמת את זהות משתמש זה." + ], + "Personal message": [ + null, + "הודעה אישית" + ], + "Start encrypted conversation": [ + null, + "התחל ישיבה מוצפנת" + ], + "Refresh encrypted conversation": [ + null, + "רענן ישיבה מוצפנת" + ], + "End encrypted conversation": [ + null, + "סיים ישיבה מוצפנת" + ], + "Verify with SMP": [ + null, + "אמת בעזרת SMP" + ], + "Verify with fingerprints": [ + null, + "אמת בעזרת טביעות אצבע" + ], + "What's this?": [ + null, + "מה זה?" + ], + "me": [ + null, + "אני" + ], + "Show this menu": [ + null, + "הצג את תפריט זה" + ], + "Write in the third person": [ + null, + "כתוב בגוף השלישי" + ], + "Remove messages": [ + null, + "הסר הודעות" + ], + "Your message could not be sent": [ + null, + "ההודעה שלך לא היתה יכולה להישלח" + ], + "We received an unencrypted message": [ + null, + "אנחנו קיבלנו הודעה לא מוצפנת" + ], + "We received an unreadable encrypted message": [ + null, + "אנחנו קיבלנו הודעה מוצפנת לא קריאה" + ], + "This user has requested an encrypted session.": [ + null, + "משתמש זה ביקש ישיבה מוצפנת." + ], + "Here are the fingerprints, please confirm them with %1$s, outside of this chat.\n\nFingerprint for you, %2$s: %3$s\n\nFingerprint for %1$s: %4$s\n\nIf you have confirmed that the fingerprints match, click OK, otherwise click Cancel.": [ + null, + "הרי טביעות האצבע, אנא אמת אותן עם %1$s, מחוץ לשיחה זו.\n\nטביעת אצבע עבורך, %2$s: %3$s\n\nטביעת אצבע עבור %1$s: %4$s\n\nהיה ואימתת כי טביעות האצבע תואמות, לחץ אישור (OK), אחרת לחץ ביטול (Cancel)." + ], + "You will be prompted to provide a security question and then an answer to that question.\n\nYour buddy will then be prompted the same question and if they type the exact same answer (case sensitive), their identity will have been verified.": [ + null, + "אתה תתבקש לספק שאלת אבטחה ולאחריה תשובה לשאלה הזו.\n\nהאישיות שכנגד תתבקש עובר זאת לאותה שאלת אבטחה ואם זו תקלידו את את אותה התשובה במדויק (case sensitive), זהותה תאומת." + ], + "What is your security question?": [ + null, + "מהי שאלת האבטחה שלך?" + ], + "What is the answer to the security question?": [ + null, + "מהי התשובה לשאלת האבטחה?" + ], + "Invalid authentication scheme provided": [ + null, + "סופקה סכימת אימות שגויה" + ], + "Your messages are not encrypted anymore": [ + null, + "ההודעות שלך אינן מוצפנות עוד" + ], + "Your messages are now encrypted but your buddy's identity has not been verified.": [ + null, + "ההודעות שלך מוצפנות כעת אך זהות האישיות שכנגד טרם אומתה." + ], + "Your buddy's identify has been verified.": [ + null, + "זהות האישיות שכנגד אומתה." + ], + "Your buddy has ended encryption on their end, you should do the same.": [ + null, + "האישיות שכנגד סיימה הצפנה בקצה שלה, עליך לעשות את אותו הדבר." + ], + "Your messages are not encrypted. Click here to enable OTR encryption.": [ + null, + "ההודעות שלך אינן וצפנות. לחץ כאן כדי לאפשר OTR." + ], + "Your messages are encrypted, but your buddy has not been verified.": [ + null, + "ההודעות שלך מוצפנות כעת, אך האישיות שכנגד טרם אומתה." + ], + "Your messages are encrypted and your buddy verified.": [ + null, + "ההודעות שלך מוצפנות כעת והאישיות שכנגד אומתה." + ], + "Your buddy has closed their end of the private session, you should do the same": [ + 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, + "אין חדרים על %1$s" + ], + "Rooms on %1$s": [ + null, + "חדרים על %1$s" + ], + "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, + "שם הכינוי שלך שונה" + ], + "%1$s has been banned": [ + null, + "%1$s נאסר(ה)" + ], + "%1$s has been kicked out": [ + null, + "%1$s נבעט(ה)" + ], + "%1$s has been removed because of an affiliation change": [ + null, + "%1$s הוסרה(ה) משום שינוי שיוך" + ], + "%1$s has been removed for not being a member": [ + null, + "%1$s הוסר(ה) משום אי הימצאות במסגרת מעמד של חבר" + ], + "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, + "נושא חדר זה נקבע על ידי %1$s אל: %2$s" + ], + "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, + "אני במצב %1$s" + ], + "Sign in": [ + null, + "התחברות" + ], + "XMPP/Jabber Username:": [ + null, + "שם משתמש XMPP/Jabber:" + ], + "Password:": [ + null, + "סיסמה:" + ], + "Log In": [ + null, + "כניסה" + ], + "BOSH Service URL:": [ + null, + "כתובת שירות BOSH:" + ] + } + } + }; + if (typeof define === 'function' && define.amd) { + define("he", ['jed'], function () { + return factory(new Jed(translations)); + }); + } else { + if (!window.locales) { + window.locales = {}; + } + window.locales.he = factory(new Jed(translations)); + } +}(this, function (he) { + return he; +})); diff --git a/locale/locales.js b/locale/locales.js index e67511c24..f64912934 100644 --- a/locale/locales.js +++ b/locale/locales.js @@ -14,6 +14,7 @@ "en": "locale/en/LC_MESSAGES/en", "es": "locale/es/LC_MESSAGES/es", "fr": "locale/fr/LC_MESSAGES/fr", + "he": "locale/he/LC_MESSAGES/he", "hu": "locale/hu/LC_MESSAGES/hu", "id": "locale/id/LC_MESSAGES/id", "it": "locale/it/LC_MESSAGES/it", @@ -31,6 +32,7 @@ 'en', 'es', 'fr', + 'he', 'hu', 'id', 'it', @@ -38,13 +40,14 @@ 'nl', 'pt_BR', 'ru' - ], function (jed, af, de, en, es, fr, hu, id, it, ja, nl, pt_BR, ru) { + ], function (jed, af, de, en, es, fr, he, hu, id, it, ja, nl, pt_BR, ru) { root.locales = { 'af': af, 'de': de, 'en': en, 'es': es, 'fr': fr, + 'he': he, 'hu': hu, 'id': id, 'it': it, From 42b28b8425a81c7eeb9169b566d1a021488b64a1 Mon Sep 17 00:00:00 2001 From: JC Brand Date: Thu, 30 Jan 2014 05:01:10 +0200 Subject: [PATCH 10/33] Update docs to provide examples of server-side prebind code. Updates #116 --- docs/doctrees/index.doctree | Bin 191328 -> 196474 bytes docs/html/.buildinfo | 2 +- docs/html/_sources/index.txt | 34 ++++++ docs/html/genindex.html | 10 +- docs/html/index.html | 216 ++++++++++++++++++++--------------- docs/html/objects.inv | 2 +- docs/html/search.html | 10 +- docs/html/searchindex.js | 2 +- docs/source/index.rst | 11 ++ 9 files changed, 182 insertions(+), 105 deletions(-) diff --git a/docs/doctrees/index.doctree b/docs/doctrees/index.doctree index 04ddecd3a1c1e311479d7294af4a6c6be528f0c7..3410f4be7e0d483c167111360f2c3098098fad45 100644 GIT binary patch literal 196474 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 W2kvV^sG7#rOnl6szN09;{r>^M`R)k- literal 191328 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Ŕ>IE@l#7nLu@!OyIzHQsaAfbfZi_qXdjL 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 )bDle43d? zg-0jjp1uj;qP`h!n_7<1g!&UYY>IbBs)y*@kCPbcPKFL(=mv&3o1-{=q&DDCuR4Qq zmoPMdP~!T;HL8`rj$-@`W8o}eXo#VC3?0V&arQV9_(G~U9fxrzqYtFsU^!8A@YF)a zWzi{BM=+FU4$jsn&Jd~Jvy4lL??}e|n0e2`a-}+(&N4bn==2e;pKu&Ns|jFL9mvpp z;)^o%SUL;Gz}b%uX9Cn%!re*)H_F`Pt#k)_` z6tcA~okJKmlY9&i#G`X4<6gvAN=?8HdbJguUFhsc=LM$zh|VAA{Ep5&bnc|{7@bGx z>`7-Dog3*~M`s~Lw;!FO`SVtEwA3nwt|h;mZ&6#2<`9{lN{6FJwG-ps$I#C}Y2wwy zZ&Wv#+?LK=6v5}|?8n-fLuXeOu?d*Y6{EVhoYKErBet2P$qtRF{&C z8yWW{hVEwQTMRwM(0heON@O&fiL>F{y}IbN^c#az45*_uek(TOm%6_?7Zl?+MCd6<+uK<6mN z9YTG)irKE9lVMeTkotWZ5G4B49W3v5I(sqwog#XMS{WKc6t5F}G~>2n+;ybuDaQSf zp_dstn4vovTFo4fvd~|%s0$hQ217R>lo(7TWcFHd7G3oaHbmGcLl3g*c)P25md@+U z^(q|>DWr$5jwReiD#iUwh>62EUf`jQXXp$%&oN;s<4zy}X*%7M*soYcQyF@ep$^v5 zwoDB%^f$&G!_XYY?a$C23`OZ2OXpBJi{TW)+o6|$Zet!@ZkTT~gK`U0yr@3|7lZvG zrz&nmxQ#a#$)y;zL!m-=yx$M^^lbp`(VvAYyH;tpZ^sY3hXhxu7*8KDcmkSU45fGc EAL#7m3jhEB diff --git a/docs/html/.buildinfo b/docs/html/.buildinfo index cdc5546fe..9683692ae 100644 --- a/docs/html/.buildinfo +++ b/docs/html/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: 652c197d955de4d2c90bb99dc6534a15 +config: 9cade5fa70d219453c215cec2a2631df tags: fbb0d17656682115ca4d033fb2f83ba1 diff --git a/docs/html/_sources/index.txt b/docs/html/_sources/index.txt index 03837cac2..58706f3dc 100644 --- a/docs/html/_sources/index.txt +++ b/docs/html/_sources/index.txt @@ -277,6 +277,17 @@ These values are then passed to converse.js's ``initialize`` method. **bosh_service_url** values. +Example code for server-side prebinding +--------------------------------------- + +* PHP: + See `xmpp-prebind-php `_ by + Michael Weibel and the folks from Candy chat. + +* Python: + See this `example Django application`_ by Jack Moffitt. + + Setting up a BOSH server ------------------------ @@ -387,6 +398,7 @@ If you don't have grunt installed globally, you need to specify the relative path: :: + ./node_modules/.bin/grunt fetch This will call Bower in the background to fetch all the front-end @@ -813,6 +825,28 @@ the page with class *toggle-online-users*. If this options is set to true, the controlbox will by default be shown upon page load. + +show_call_button +---------------- + +Default = ``false`` + +Enable to display a call button on the chatbox toolbar. + +When the call button is pressed, it will emit an event that can be used by a third-party library to initiate a call. + +:: + + converse.on('onCallButtonClicked', function(event, data) { + console.log('Call button was clicked.'); + console.log('Strophe connection is', data.connection); + console.log('Bare buddy JID is', data.model.get('jid')); + + // ... Third-party library code ... + }); + + + show_only_online_users ---------------------- diff --git a/docs/html/genindex.html b/docs/html/genindex.html index 619d0ce07..5ec715998 100644 --- a/docs/html/genindex.html +++ b/docs/html/genindex.html @@ -9,7 +9,7 @@ - Index — Converse.js 0.7.1 documentation + Index — Converse.js 0.7.2 documentation @@ -17,7 +17,7 @@ - +
    @@ -80,7 +80,7 @@
  • index
  • -
  • Converse.js 0.7.1 documentation »
  • +
  • Converse.js 0.7.2 documentation »
  • diff --git a/docs/html/index.html b/docs/html/index.html index ccc78bd5c..9321faef6 100644 --- a/docs/html/index.html +++ b/docs/html/index.html @@ -7,7 +7,7 @@ - Quickstart (to get a demo up and running) — Converse.js 0.7.1 documentation + Quickstart (to get a demo up and running) — Converse.js 0.7.2 documentation @@ -15,7 +15,7 @@ - +
    @@ -75,67 +75,69 @@
  • Server-side authentication
  • -
  • Facebook integration
  • +
  • Facebook integration
  • -
  • Development
      -
    • Install Node.js and development dependencies
    • -
    • Install 3rd party dependencies
    • -
    • With AMD and require.js (recommended)
    • -
    • Without AMD and require.js
    • -
    • Before submitting a pull request
        -
      • Add tests for your bugfix or feature
      • -
      • Check that the tests pass
      • -
      • Check your code for errors or bad habits by running JSHint
      • +
      • Development
      • -
      • Troubleshooting
          -
        • Conflicts with other Javascript libraries
            -
          • Problem:
          • -
          • Solution:
          • +
          • Troubleshooting
          • -
          • Events diff --git a/docs/html/searchindex.js b/docs/html/searchindex.js index 9c1773e6a..e52b02cc6 100644 --- a/docs/html/searchindex.js +++ b/docs/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({objects:{},terms:{all:0,code:0,partial:0,queri:0,global:0,webchat:0,follow:0,row:0,middl:0,depend:0,sensit:0,punjab:0,buddi:0,under:0,sens:0,spec:0,sent:0,everi:0,string:0,fals:0,account:0,jid:0,facebook:0,jack:0,veri:0,tri:0,chatpanel:[],messagetext:0,list:0,correct:0,item:0,sane:0,div:0,refer:0,pleas:0,prevent:0,xhr_user_search_url:0,almond:0,focu:0,jump:0,second:0,pass:0,download:0,further:0,fullnam:0,port:0,even:0,index:0,what:0,hide:0,appear:0,section:0,access:0,"public":0,version:0,"new":0,net:0,method:0,manag:0,widget:0,themselv:0,messagexml:0,gener:0,here:0,bodi:0,typeerror:0,let:0,path:0,strong:[],modifi:0,valu:0,box:0,great:0,convers:0,mysit:0,ajax:0,fetch:0,implement:0,sorri:0,chanc:0,via:0,repositori:0,extra:0,solut:0,prefer:0,put:0,href:0,duck:0,auto_list_room:0,instal:0,should:0,establish:0,getsess:0,from:0,zip:0,commun:0,doubl:0,two:0,websit:0,few:0,stylesheet:0,call:0,recommend:0,msg:0,type:0,until:0,toggl:0,more:0,peopl:0,notic:0,site:0,particular:0,vcard:0,must:0,none:[],word:0,room:0,past:0,work:0,uniqu:0,xhr:0,can:0,lc_messag:0,purpos:0,root:0,blogpost:0,control:0,quickstart:0,give:0,share:0,templat:0,tag:0,proprietari:0,explor:0,onlin:0,occup:0,end:0,goal:0,thing:0,anoth:0,write:0,how:0,bosh_serv:0,sid:0,roster:0,instead:0,css:0,updat:0,npm:0,regener:0,product:0,resourc:0,after:0,usabl:0,befor:0,callback:0,allow_contact_request:0,multipl:0,underscor:0,data:0,demonstr:0,man:0,repo:0,"short":0,practic:0,bind:0,show_controlbox_by_default:0,correspond:0,element:0,caus:0,inform:0,show_only_online_us:0,allow:0,parti:0,mechan:0,order:0,feedback:0,chatbox:0,xmpp:0,over:0,move:0,becaus:0,through:0,paramet:0,streamlin:0,snippet:0,conjunct:0,"8147a27e4a7f9b55ffc85c2683f9529a":0,render:0,fit:0,fix:0,"static":0,pend:0,persist:0,hidden:0,therefor:0,might:0,them:0,anim:0,"return":0,thei:0,python:0,initi:0,onmessag:0,automat:0,front:0,now:0,introduct:0,name:0,edit:0,troubleshoot:0,revers:0,authent:0,separ:0,token:0,ejabberd:0,each:0,debug:0,side:0,mean:0,domain:0,individu:0,realli:0,legwork:0,connect:0,our:0,happen:0,extract:0,event:0,special:0,out:0,variabl:0,shown:0,"3rd":0,space:0,miss:0,proxy_pass:0,content:0,rel:0,internet:0,got:0,plural:0,factori:0,po2json:0,proxi:0,insid:0,written:0,standard:0,standalon:0,reason:0,ask:0,org:0,afterward:0,xhr_custom_status_url:0,rewriteengin:0,could:0,keep:0,turn:0,perhap:0,outsid:[],first:0,origin:0,softwar:0,directli:0,onc:0,hoop:0,lastnam:0,number:0,yourself:0,restrict:0,instruct:0,alreadi:0,done:0,submit:0,onchatboxclos:0,owner:0,custom:0,jabber:0,differ:0,php:0,script:0,top:0,attack:0,messag:0,attach:0,stori:0,master:0,jed:0,jcbrand:0,"final":0,listen:0,luckili:0,consol:0,option:0,tool:0,specifi:0,part:0,pars:0,grunt:0,than:0,serv:0,wide:0,kind:0,bloat:0,provid:0,remov:0,project:0,bridg:0,someothersit:0,browser:0,pre:0,"function":0,credenti:0,saa:0,modern:0,ani:0,packag:0,have:0,tabl:0,need:0,moffitt:0,django:0,bosh_service_url:0,prebind:0,min:0,latter:0,thorough:0,click:0,note:0,also:0,without:0,take:0,which:0,singl:0,wherebi:0,sure:0,deploy:0,unsur:0,who:0,most:0,deploi:0,homepag:0,"class":0,don:0,use_vcard:0,url:0,request:0,doe:0,runtim:0,determin:0,bower:0,usual:0,xdomainrequest:0,devdepend:0,show:0,german:0,text:0,succesfulli:0,server_nam:0,session:0,identifi:0,fine:0,find:0,help:0,xml:0,current:0,onli:0,exactli:0,locat:0,just:0,configur:0,apach:0,stanza:0,haven:0,busi:0,folder:0,local:0,meant:0,count:[],get:0,stop:0,soon:0,opkod:0,nativ:0,cannot:0,chat:0,requir:0,enabl:0,emb:0,mainspec:0,whenev:0,patch:0,reload:0,bad:0,integr:0,contain:0,where:0,view:0,wiki:0,set:0,habit:0,stroph:0,see:0,result:0,close:0,eventnam:0,best:0,concern:0,jqueri:0,statu:0,said:0,extend:0,someth:0,state:0,muc:0,between:0,awai:0,experi:0,jasmin:0,across:0,attribut:0,appreci:0,kei:0,screen:0,javascript:0,style:[],job:0,entir:0,bosh:0,"5e64a30272af065bd72258c565a03f2f":0,both:0,cor:0,instant:0,shortliv:0,conversej:0,myself:0,etc:0,grain:0,mani:0,login:0,com:0,load:0,node_modul:0,simpli:0,pot:0,solv:0,assum:0,backend:0,quit:0,sucessfulli:0,addition:0,rebuild:0,empti:0,github:0,compon:0,json:0,much:0,subscrib:0,blob:0,session_kei:0,fire:0,imag:0,xxx:0,rubi:0,convert:0,minifi:0,togeth:0,input:0,i18n:0,present:0,"case":0,multi:0,main:0,look:0,servic:0,plugin:0,defin:0,abov:0,error:0,hightlight:0,increment:0,helper:0,demo:0,auto_subscrib:0,non:0,itself:0,incom:0,rid:0,conn:[],develop:0,open:0,receiv:0,media:0,make:0,minif:0,cross:0,same:0,read:0,onconnectfacebook:0,html:0,chatroom:0,document:0,medit:0,conflict:0,complet:0,signon:0,http:0,webserv:0,optim:0,upon:0,someon:0,hand:0,remot:0,"50kb":0,user:0,uncaught:0,rewriterul:0,xhr_user_search:0,cssmin:0,recent:0,stateless:0,off:0,choos:0,firstli:0,markup:0,well:0,person:0,exampl:0,command:0,achiev:0,thi:0,onmessagesend:0,everyth:0,latest:0,plural_form:0,protocol:0,execut:0,when:0,onstatuschang:0,jshint:0,languag:0,web:0,xmlhttprequest:0,field:0,had:0,onchatboxopen:0,add:0,other:0,non_amd:0,versa:0,appli:0,els:0,match:0,build:0,bin:0,applic:0,format:0,webpag:0,amd:0,nginx:0,traffic:0,know:0,background:0,like:0,xss:0,backbon:0,specif:0,manual:0,server:0,collect:[],benefit:0,avatar:0,output:0,page:0,facebookconnect:0,right:0,deal:0,nplural:0,some:0,back:0,librari:0,bottom:0,though:0,xhr_custom_statu:0,track:0,contact:0,overcom:0,oniniti:0,localhost:0,either:0,plu:0,object:0,run:0,host:0,although:0,post:0,panel:0,src:0,about:0,firstnam:0,controlbox:0,unfortun:0,issu:0,act:0,client:0,own:0,curiou:0,inlin:0,within:0,encod:0,onbuddystatusmessagechang:0,been:0,onreadi:0,wrap:0,chang:0,your:0,merg:0,log:0,wai:0,aren:0,transfer:0,support:0,"long":0,happi:0,avail:0,trigger:0,includ:0,lot:0,suit:0,analysi:0,head:0,properli:0,form:0,bundl:0,link:0,translat:0,synonym:0,line:0,stand:0,"true":0,bug:0,congratul:0,longer:0,info:0,pull:0,made:0,dirti:0,tab:0,possibl:0,whether:0,bugfix:0,displai:[],asynchron:0,below:0,those:0,tightli:0,otherwis:0,problem:0,emit:0,expect:0,onrosterviewupd:0,featur:0,constant:0,creat:0,movim:0,doesn:0,msgmerg:0,exist:0,file:0,face:0,check:0,probabl:0,want:0,onrost:0,tip:0,detail:0,gettext:0,"default":0,valid:0,onchatboxfocus:0,rememb:0,varieti:0,test:0,you:0,servernam:0,nice:0,node:0,intend:0,onbuddystatuschang:0,onstatusmessagechang:0,releas:0,hide_muc_serv:0,stai:0,lang:0,requirej:0,vice:0,directori:0,virtualhost:0,getjson:0,rule:0,allow_muc:0,ignor:0,locale_data:0,potenti:0,time:0},objtypes:{},titles:["Quickstart (to get a demo up and running)"],objnames:{},filenames:["index"]}) \ No newline at end of file +Search.setIndex({objects:{},terms:{all:0,code:0,partial:0,queri:0,global:0,webchat:0,follow:0,row:0,middl:0,depend:0,onmessagesend:0,sensit:0,punjab:0,buddi:0,under:0,sens:0,spec:0,sent:0,everi:0,string:0,fals:0,than:0,account:0,facebook:0,jack:0,veri:0,tri:0,chatpanel:[],button:0,messagetext:0,list:0,factori:0,item:0,sane:0,div:0,pleas:0,prevent:0,xhr_user_search_url:0,almond:0,focu:0,jump:0,second:0,pass:0,download:0,further:0,fullnam:0,click:0,folk:0,even:0,index:0,what:0,hide:0,appear:0,section:0,access:0,version:0,"new":0,net:0,method:0,widget:0,themselv:0,messagexml:0,gener:0,here:0,bodi:0,typeerror:0,let:0,path:0,strong:[],modifi:0,valu:0,box:0,great:0,convers:0,mysit:0,reason:0,fetch:0,implement:0,sorri:0,chanc:0,via:0,although:0,extra:0,apach:0,prefer:0,ask:0,href:0,duck:0,auto_list_room:0,instal:0,establish:0,getsess:0,from:0,zip:0,commun:0,doubl:0,two:0,websit:0,few:0,stylesheet:0,call:0,recommend:0,msg:0,type:0,until:0,toggl:0,more:0,peopl:0,notic:0,particular:0,vcard:0,must:0,none:[],word:0,room:0,past:0,work:0,uniqu:0,xhr:0,can:0,lc_messag:0,purpos:0,root:0,blogpost:0,control:0,quickstart:0,give:0,share:0,templat:0,tag:0,proprietari:0,explor:0,onlin:0,unfortun:0,occup:0,end:0,goal:0,thing:0,anoth:0,snippet:0,how:0,bosh_serv:0,sid:0,instead:0,css:0,updat:0,npm:0,regener:0,product:0,resourc:0,after:0,usabl:0,befor:0,callback:0,allow_contact_request:0,multipl:0,underscor:0,data:0,demonstr:0,man:0,opkod:0,"short":0,practic:0,third:0,bind:0,credenti:0,correspond:0,django:0,caus:0,inform:0,show_only_online_us:0,allow:0,media:0,mechan:0,order:0,feedback:0,chatbox:0,xmpp:0,over:0,move:0,becaus:0,through:0,paramet:0,streamlin:0,write:0,conjunct:0,"8147a27e4a7f9b55ffc85c2683f9529a":0,render:0,fit:0,fix:0,pend:0,persist:0,hidden:0,therefor:0,might:0,them:0,anim:0,"return":0,thei:0,python:0,initi:0,onmessag:0,onbuddystatusmessagechang:0,front:0,now:0,introduct:0,name:0,edit:0,troubleshoot:0,revers:0,authent:0,separ:0,token:0,ejabberd:0,each:0,debug:0,side:0,mean:0,everyth:0,domain:0,michael:0,individu:0,realli:0,legwork:0,connect:0,our:0,happen:0,patch:0,extract:0,event:0,special:0,out:0,variabl:0,shown:0,"3rd":0,space:0,jabber:0,proxy_pass:0,content:0,rel:0,internet:0,got:0,plural:0,correct:0,po2json:0,proxi:0,insid:0,state:0,standard:0,standalon:0,ajax:0,put:0,org:0,afterward:0,xhr_custom_status_url:0,could:0,keep:0,turn:0,perhap:0,xhr_custom_statu:0,outsid:[],first:0,origin:0,softwar:0,directli:0,onc:0,hoop:0,lastnam:0,number:0,yourself:0,restrict:0,instruct:0,alreadi:0,done:0,"long":0,onchatboxclos:0,owner:0,happi:0,miss:0,differ:0,script:0,top:0,attack:0,messag:0,attach:0,stori:0,master:0,jed:0,jcbrand:0,"final":0,listen:0,luckili:0,consol:0,option:0,tool:0,specifi:0,part:0,pars:0,grunt:0,haven:0,serv:0,wide:0,kind:0,bloat:0,provid:0,remov:0,project:0,bridg:0,someothersit:0,browser:0,pre:0,analysi:0,show_controlbox_by_default:0,saa:0,modern:0,ani:0,packag:0,style:[],have:0,tabl:0,need:0,moffitt:0,element:0,bosh_service_url:0,prebind:0,min:0,latter:0,thorough:0,port:0,note:0,also:0,exampl:0,take:0,which:0,singl:0,sure:0,deploy:0,unsur:0,who:0,most:0,deploi:0,rewriterul:0,homepag:0,"class":0,don:0,use_vcard:0,url:0,request:0,doe:0,runtim:0,determin:0,bower:0,latest:0,xdomainrequest:0,devdepend:0,show:0,german:0,text:0,succesfulli:0,server_nam:0,session:0,protocol:0,fine:0,find:0,help:0,xml:0,current:0,onli:0,exactli:0,locat:0,execut:0,configur:0,solut:0,stanza:0,should:0,busi:0,folder:0,local:0,meant:0,info:0,get:0,stop:0,soon:0,repo:0,nativ:0,cannot:0,requir:0,show_call_button:0,enabl:0,emb:0,mainspec:0,whenev:0,multi:0,achiev:0,"public":0,reload:0,bad:0,integr:0,though:0,contain:0,where:0,view:0,wiki:0,set:0,habit:0,stroph:0,see:0,bare:0,result:0,close:0,eventnam:0,best:0,concern:0,jqueri:0,statu:0,said:0,kei:0,someth:0,written:0,muc:0,between:0,awai:0,experi:0,jasmin:0,across:0,attribut:0,appreci:0,extend:0,screen:0,javascript:0,jid:0,job:0,entir:0,bosh:0,otherwis:0,"5e64a30272af065bd72258c565a03f2f":0,both:0,cor:0,instant:0,shortliv:0,conversej:0,avatar:0,etc:0,grain:0,mani:0,login:0,com:0,load:0,node_modul:0,simpli:0,pot:0,solv:0,non:0,assum:0,backend:0,quit:0,sucessfulli:0,addition:0,rebuild:0,empti:0,github:0,compon:0,json:0,much:0,toolbar:0,subscrib:0,non_amd:0,session_kei:0,fire:0,imag:0,xxx:0,rubi:0,convert:0,minifi:0,togeth:0,els:0,i18n:0,present:0,"case":0,myself:0,main:0,look:0,servic:0,plugin:0,defin:0,abov:0,error:0,hightlight:0,increment:0,helper:0,demo:0,auto_subscrib:0,site:0,oncallbuttonclick:0,itself:0,incom:0,rid:0,conn:[],develop:0,open:0,receiv:0,parti:0,make:0,minif:0,cross:0,same:0,webpag:0,onconnectfacebook:0,html:0,chatroom:0,document:0,medit:0,conflict:0,complet:0,signon:0,http:0,webserv:0,optim:0,upon:0,someon:0,hand:0,remot:0,"50kb":0,user:0,uncaught:0,php:0,xhr_user_search:0,cssmin:0,recent:0,weibel:0,stateless:0,off:0,firstli:0,markup:0,well:0,person:0,without:0,command:0,wherebi:0,thi:0,choos:0,model:0,usual:0,plural_form:0,identifi:0,just:0,tip:0,onstatuschang:0,jshint:0,file:0,languag:0,web:0,xmlhttprequest:0,field:0,had:0,onchatboxopen:0,add:0,valid:0,blob:0,versa:0,appli:0,input:0,match:0,build:0,bin:0,applic:0,format:0,read:0,amd:0,nginx:0,traffic:0,know:0,background:0,press:0,backbon:0,xss:0,like:0,specif:0,manual:0,server:0,collect:[],benefit:0,either:0,output:0,page:0,candi:0,facebookconnect:0,right:0,deal:0,nplural:0,some:0,back:0,librari:0,bottom:0,roster:0,rewriteengin:0,track:0,contact:0,overcom:0,oniniti:0,localhost:0,refer:0,plu:0,object:0,run:0,host:0,repositori:0,post:0,panel:0,src:0,about:0,firstnam:0,controlbox:0,manag:0,issu:0,act:0,client:0,own:0,curiou:0,inlin:0,within:0,encod:0,automat:0,been:0,onreadi:0,wrap:0,chang:0,your:0,merg:0,log:0,wai:0,aren:0,transfer:0,support:0,submit:0,custom:0,avail:0,trigger:0,includ:0,lot:0,suit:0,"function":0,head:0,properli:0,form:0,bundl:0,link:0,translat:0,synonym:0,line:0,stand:0,"true":0,bug:0,congratul:0,requirej:0,count:[],pull:0,made:0,dirti:0,tab:0,possibl:0,whether:0,bugfix:0,displai:0,asynchron:0,below:0,those:0,tightli:0,"static":0,problem:0,emit:0,expect:0,onrosterviewupd:0,featur:0,constant:0,creat:0,movim:0,doesn:0,msgmerg:0,exist:0,chat:0,face:0,check:0,probabl:0,want:0,onrost:0,when:0,detail:0,gettext:0,"default":0,other:0,onchatboxfocus:0,rememb:0,varieti:0,test:0,you:0,servernam:0,nice:0,node:0,intend:0,onbuddystatuschang:0,onstatusmessagechang:0,releas:0,hide_muc_serv:0,stai:0,lang:0,longer:0,vice:0,directori:0,virtualhost:0,getjson:0,rule:0,allow_muc:0,ignor:0,locale_data:0,potenti:0,time:0},objtypes:{},titles:["Quickstart (to get a demo up and running)"],objnames:{},filenames:["index"]}) \ No newline at end of file diff --git a/docs/source/index.rst b/docs/source/index.rst index 793db5af1..58706f3dc 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -277,6 +277,17 @@ These values are then passed to converse.js's ``initialize`` method. **bosh_service_url** values. +Example code for server-side prebinding +--------------------------------------- + +* PHP: + See `xmpp-prebind-php `_ by + Michael Weibel and the folks from Candy chat. + +* Python: + See this `example Django application`_ by Jack Moffitt. + + Setting up a BOSH server ------------------------ From 9bce25109c58f8bfa343e6327a06ea046f0cb63e Mon Sep 17 00:00:00 2001 From: JC Brand Date: Thu, 30 Jan 2014 09:35:35 +0200 Subject: [PATCH 11/33] Allow non-amd usage of converse.js without requiring OTR modules. --- converse.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/converse.js b/converse.js index e8a49e9cc..e1fce3174 100644 --- a/converse.js +++ b/converse.js @@ -30,7 +30,11 @@ evaluate : /\{\[([\s\S]+?)\]\}/g, interpolate : /\{\{([\s\S]+?)\}\}/g }; - root.converse = factory(jQuery, _, OTR, DSA, console || {log: function(){}}); + if ((typeof OTR !== "undefined") && (typeof DSA !== "undefined")) { + root.converse = factory(jQuery, _, OTR, DSA, console); + } else { + root.converse = factory(jQuery, _, undefined, undefined, console); + } } }(this, function ($, _, OTR, DSA, console) { $.fn.addHyperlinks = function() { From 8232cdaff2d88963b88c694218fb31613bd4acf2 Mon Sep 17 00:00:00 2001 From: JC Brand Date: Fri, 31 Jan 2014 05:50:38 +0200 Subject: [PATCH 12/33] Bugfix. Updates #111 When using OTR with prebind, the user password isn't defined. ============================================================= When not using prebind, the user password is used to encrypt the private key for the OTR session before it's saved in session storage. When using prebind, we ideally want to use the same OTR private key across page loads, so that we don't have to spend the time generating a new one together with AKE on every page load. To do this, we need to store it somewhere, like the browser's session storage. However, I have yet to find a secure way to store the OTR private key that does not expose it to maliciously injected javascript. For now, I've updated the code to generate a new private key and do the AKE with every page reload. I'm considering adding code to store the private key in Session Storage and letting the user explicitly enable this (while making them aware of the risks involved). --- converse.js | 171 +++++++++++++++++++++++++++++----------------------- 1 file changed, 96 insertions(+), 75 deletions(-) diff --git a/converse.js b/converse.js index e1fce3174..1c63e1b8a 100644 --- a/converse.js +++ b/converse.js @@ -451,6 +451,24 @@ this.rosterview = new this.RosterView({'model':this.roster}); }; + this.registerGlobalEventHandlers = function () { + $(document).click(function() { + if ($('.toggle-otr ul').is(':visible')) { + $('.toggle-otr ul', this).slideUp(); + } + if ($('.toggle-smiley ul').is(':visible')) { + $('.toggle-smiley ul', this).slideUp(); + } + }); + + $(window).on("blur focus", $.proxy(function(e) { + if ((this.windowState != e.type) && (e.type == 'focus')) { + converse.clearMsgCounter(); + } + this.windowState = e.type; + },this)); + }; + this.onConnected = function () { if (this.debug) { this.connection.xmlInput = function (body) { console.log(body); }; @@ -465,21 +483,7 @@ this.initRoster(); this.chatboxes.onConnected(); this.connection.roster.get(function () {}); - $(document).click(function() { - if ($('.toggle-otr ul').is(':visible')) { - $('.toggle-otr ul', this).slideUp(); - } - if ($('.toggle-smiley ul').is(':visible')) { - $('.toggle-smiley ul', this).slideUp(); - } - }); - - $(window).on("blur focus", $.proxy(function(e) { - if ((this.windowState != e.type) && (e.type == 'focus')) { - converse.clearMsgCounter(); - } - this.windowState = e.type; - },this)); + this.registerGlobalEventHandlers(); this.giveFeedback(__('Online Contacts')); if (this.callback) { @@ -513,9 +517,6 @@ this.ChatBox = Backbone.Model.extend({ initialize: function () { if (this.get('box_id') !== 'controlbox') { - if (_.contains([UNVERIFIED, VERIFIED], this.get('otr_status'))) { - this.initiateOTR(); - } this.messages = new converse.Messages(); this.messages.localStorage = new Backbone.LocalStorage( hex_sha1('converse.messages'+this.get('jid')+converse.bare_jid)); @@ -527,43 +528,53 @@ } }, - getSession: function () { - // XXX: sessionStorage is not supported in IE < 8. Perhaps a + getSession: function (callback) { + // FIXME: sessionStorage is not supported in IE < 8. Perhaps a // user alert is required here... - var saved_key = window.sessionStorage[hex_sha1(this.id+'priv_key')]; - var instance_tag = window.sessionStorage[hex_sha1(this.id+'instance_tag')]; + var result, pass, instance_tag, saved_key; var cipher = CryptoJS.lib.PasswordBasedCipher; - var pass = converse.connection.pass; - var pass_check = this.get('pass_check'); - var result, key; - if (saved_key && instance_tag && typeof pass_check !== 'undefined') { - var decrypted = cipher.decrypt(CryptoJS.algo.AES, saved_key, pass); - key = DSA.parsePrivate(decrypted.toString(CryptoJS.enc.Latin1)); - if (cipher.decrypt(CryptoJS.algo.AES, pass_check, pass).toString(CryptoJS.enc.Latin1) === 'match') { - // Verified that the user's password is still the same - this.trigger('showHelpMessages', [__('Re-establishing encrypted session')]); - return { - 'key': key, - 'instance_tag': instance_tag - }; + if (typeof converse.connection.pass !== "undefined") { + instance_tag = window.sessionStorage[hex_sha1(this.id+'instance_tag')]; + saved_key = window.sessionStorage[hex_sha1(this.id+'priv_key')]; + pass = converse.connection.pass; + var pass_check = this.get('pass_check'); + if (saved_key && instance_tag && typeof pass_check !== 'undefined') { + var decrypted = cipher.decrypt(CryptoJS.algo.AES, saved_key, pass); + var key = DSA.parsePrivate(decrypted.toString(CryptoJS.enc.Latin1)); + if (cipher.decrypt(CryptoJS.algo.AES, pass_check, pass).toString(CryptoJS.enc.Latin1) === 'match') { + // Verified that the user's password is still the same + this.trigger('showHelpMessages', [__('Re-establishing encrypted session')]); + callback({ + 'key': key, + 'instance_tag': instance_tag + }); + } } } - // We need to generate a new key and instance tag - result = alert(__('Your browser needs to generate a private key, which will be used in your encrypted chat session. This can take up to 30 seconds during which your browser might freeze and become unresponsive.')); - instance_tag = OTR.makeInstanceTag(); - key = new DSA(); - // Encrypt the key and set in sessionStorage. Also store - // instance tag - window.sessionStorage[hex_sha1(this.id+'priv_key')] = - cipher.encrypt(CryptoJS.algo.AES, key.packPrivate(), pass).toString(); - window.sessionStorage[hex_sha1(this.id+'instance_tag')] = instance_tag; - this.trigger('showHelpMessages', [__('Private key generated.')]); - this.save({'pass_check': cipher.encrypt(CryptoJS.algo.AES, 'match', pass).toString()}); - return { - 'key': key, - 'instance_tag': instance_tag - }; + // We need to generate a new key and instance tag + instance_tag = OTR.makeInstanceTag(); + this.trigger('showHelpMessages', [__('Generating private key.')]); + this.trigger('showHelpMessages', [__('Your browser might become unresponsive.')]); + + var clb = callback; + setTimeout($.proxy(function () { + var key = new DSA(); + if (typeof converse.connection.pass !== "undefined") { + // Encrypt the key and set in sessionStorage. Also store + // instance tag + window.sessionStorage[hex_sha1(this.id+'priv_key')] = + cipher.encrypt(CryptoJS.algo.AES, key.packPrivate(), pass).toString(); + window.sessionStorage[hex_sha1(this.id+'instance_tag')] = instance_tag; + this.save({'pass_check': cipher.encrypt(CryptoJS.algo.AES, 'match', pass).toString()}); + } + this.trigger('showHelpMessages', [__('Private key generated.')]); + clb({ + 'key': key, + 'instance_tag': instance_tag + }); + }, this), 500); + }, updateOTRStatus: function (state) { @@ -616,32 +627,34 @@ // query message from our buddy. Otherwise, it is us who will // send the query message to them. this.save({'otr_status': UNENCRYPTED}); - var session = this.getSession(); - this.otr = new OTR({ - fragment_size: 140, - send_interval: 200, - priv: session.key, - instance_tag: session.instance_tag, - debug: this.debug - }); - this.otr.on('status', $.proxy(this.updateOTRStatus, this)); - this.otr.on('smp', $.proxy(this.onSMP, this)); + var session = this.getSession($.proxy(function (session) { + this.otr = new OTR({ + fragment_size: 140, + send_interval: 200, + priv: session.key, + instance_tag: session.instance_tag, + debug: this.debug + }); + this.otr.on('status', $.proxy(this.updateOTRStatus, this)); + this.otr.on('smp', $.proxy(this.onSMP, this)); - this.otr.on('ui', $.proxy(function (msg) { - this.trigger('showReceivedOTRMessage', msg); - }, this)); - this.otr.on('io', $.proxy(function (msg) { - this.trigger('sendMessageStanza', msg); - }, this)); - this.otr.on('error', $.proxy(function (msg) { - this.trigger('showOTRError', msg); - }, this)); + this.otr.on('ui', $.proxy(function (msg) { + this.trigger('showReceivedOTRMessage', msg); + }, this)); + this.otr.on('io', $.proxy(function (msg) { + this.trigger('sendMessageStanza', msg); + }, this)); + this.otr.on('error', $.proxy(function (msg) { + this.trigger('showOTRError', msg); + }, this)); - if (query_msg) { - this.otr.receiveMsg(query_msg); - } else { - this.otr.sendQueryMsg(); - } + this.trigger('showHelpMessages', [__('Exchanging private key with buddy.')]); + if (query_msg) { + this.otr.receiveMsg(query_msg); + } else { + this.otr.sendQueryMsg(); + } + }, this)); }, endOTR: function () { @@ -700,7 +713,11 @@ return this.createMessage(message); } if (_.contains([UNVERIFIED, VERIFIED], this.get('otr_status'))) { - this.otr.receiveMsg(text); + if (text.match(/^\?OTRv23?/)) { + this.initiateOTR(text); + } else { + this.otr.receiveMsg(text); + } } else { if (text.match(/^\?OTR/)) { // They want to initiate OTR @@ -849,6 +866,10 @@ if (this.model.get('status')) { this.showStatusMessage(this.model.get('status')); } + + if (_.contains([UNVERIFIED, VERIFIED], this.model.get('otr_status'))) { + this.model.initiateOTR(); + } }, render: function () { From 5406df1bc7b843a68d0168172da6d00dd4b0b4e7 Mon Sep 17 00:00:00 2001 From: JC Brand Date: Fri, 31 Jan 2014 13:40:33 +0200 Subject: [PATCH 13/33] Add an animated spinner when generating a private key. --- converse.css | 2 +- converse.js | 46 +++++++++++++++++++++++++++------------------- 2 files changed, 28 insertions(+), 20 deletions(-) diff --git a/converse.css b/converse.css index 4a1143741..88e37a7a3 100644 --- a/converse.css +++ b/converse.css @@ -333,7 +333,6 @@ you can use the generic selector below, but it's slower: span.spinner { background: url(images/spinner.gif) no-repeat center; - width: 22px; height: 22px; padding: 0 2px 0 2px; display: block; @@ -1166,6 +1165,7 @@ ul.chat-toolbar li { list-style: none; padding: 0 3px 0 3px; cursor: pointer; + margin-top: 1px; } ul.chat-toolbar li:hover { diff --git a/converse.js b/converse.js index 1c63e1b8a..c47a2d3ac 100644 --- a/converse.js +++ b/converse.js @@ -554,8 +554,12 @@ // We need to generate a new key and instance tag instance_tag = OTR.makeInstanceTag(); - this.trigger('showHelpMessages', [__('Generating private key.')]); - this.trigger('showHelpMessages', [__('Your browser might become unresponsive.')]); + this.trigger('showHelpMessages', [ + __('Generating private key.'), + __('Your browser might become unresponsive.')], + null, + true // show spinner + ); var clb = callback; setTimeout($.proxy(function () { @@ -568,7 +572,7 @@ window.sessionStorage[hex_sha1(this.id+'instance_tag')] = instance_tag; this.save({'pass_check': cipher.encrypt(CryptoJS.algo.AES, 'match', pass).toString()}); } - this.trigger('showHelpMessages', [__('Private key generated.')]); + this.trigger('showHelpMessages', [__('Private key generated.')], null, false); clb({ 'key': key, 'instance_tag': instance_tag @@ -712,23 +716,22 @@ if ((!text) || (!converse.allow_otr)) { return this.createMessage(message); } - if (_.contains([UNVERIFIED, VERIFIED], this.get('otr_status'))) { - if (text.match(/^\?OTRv23?/)) { - this.initiateOTR(text); - } else { - this.otr.receiveMsg(text); - } + if (text.match(/^\?OTRv23?/)) { + this.initiateOTR(text); } else { - if (text.match(/^\?OTR/)) { - // They want to initiate OTR - if (!this.otr) { - this.initiateOTR(text); - } else { - this.otr.receiveMsg(text); - } + if (_.contains([UNVERIFIED, VERIFIED], this.get('otr_status'))) { + this.otr.receiveMsg(text); } else { - // Normal unencrypted message. - this.createMessage(message); + if (text.match(/^\?OTR/)) { + if (!this.otr) { + this.initiateOTR(text); + } else { + this.otr.receiveMsg(text); + } + } else { + // Normal unencrypted message. + this.createMessage(message); + } } } } @@ -960,12 +963,17 @@ return this.scrollDown(); }, - showHelpMessages: function (msgs, type) { + showHelpMessages: function (msgs, type, spinner) { var $chat_content = this.$el.find('.chat-content'), i, msgs_length = msgs.length; for (i=0; i'+msgs[i]+'')); } + if (spinner === true) { + $chat_content.append(''); + } else if (spinner === false) { + $chat_content.find('span.spinner').remove(); + } return this.scrollDown(); }, From d0f023dbb1651ac35cfbf93f1d5bc12d68a6950e Mon Sep 17 00:00:00 2001 From: JC Brand Date: Fri, 31 Jan 2014 18:07:44 +0200 Subject: [PATCH 14/33] Allow the OTR private key to be cached. Updates #111 --- converse.js | 84 ++++++++++++++++++++++++------------------- docs/CHANGES.rst | 1 + docs/source/index.rst | 17 ++++++++- 3 files changed, 64 insertions(+), 38 deletions(-) diff --git a/converse.js b/converse.js index c47a2d3ac..4dfafd7d6 100644 --- a/converse.js +++ b/converse.js @@ -135,6 +135,7 @@ this.auto_list_rooms = false; this.auto_subscribe = false; this.bosh_service_url = undefined; // The BOSH connection manager URL. + this.cache_otr_key = false; this.debug = false; this.hide_muc_server = false; this.i18n = locales.en; @@ -159,6 +160,7 @@ 'auto_list_rooms', 'auto_subscribe', 'bosh_service_url', + 'cache_otr_key', 'connection', 'debug', 'fullname', @@ -167,11 +169,11 @@ 'jid', 'prebind', 'rid', + 'show_call_button', 'show_controlbox_by_default', 'show_emoticons', 'show_only_online_users', 'show_toolbar', - 'show_call_button', 'sid', 'use_vcards', 'xhr_custom_status', @@ -528,30 +530,56 @@ } }, + getSessionPassphrase: function () { + return converse.prebind ? converse.connection.jid : converse.connection.pass; + }, + + generatePrivateKey: function (callback, instance_tag) { + var cipher = CryptoJS.lib.PasswordBasedCipher; + var key = new DSA(); + if (converse.cache_otr_key) { + pass = this.getSessionPassphrase(); + if (typeof pass !== "undefined") { + // Encrypt the key and set in sessionStorage. Also store instance tag. + window.sessionStorage[hex_sha1(this.id+'priv_key')] = + cipher.encrypt(CryptoJS.algo.AES, key.packPrivate(), pass).toString(); + window.sessionStorage[hex_sha1(this.id+'instance_tag')] = instance_tag; + this.save({'pass_check': cipher.encrypt(CryptoJS.algo.AES, 'match', pass).toString()}); + } + } + this.trigger('showHelpMessages', [__('Private key generated.')], null, false); + callback({ + 'key': key, + 'instance_tag': instance_tag + }); + }, + getSession: function (callback) { // FIXME: sessionStorage is not supported in IE < 8. Perhaps a // user alert is required here... - var result, pass, instance_tag, saved_key; var cipher = CryptoJS.lib.PasswordBasedCipher; - if (typeof converse.connection.pass !== "undefined") { - instance_tag = window.sessionStorage[hex_sha1(this.id+'instance_tag')]; - saved_key = window.sessionStorage[hex_sha1(this.id+'priv_key')]; - pass = converse.connection.pass; - var pass_check = this.get('pass_check'); - if (saved_key && instance_tag && typeof pass_check !== 'undefined') { - var decrypted = cipher.decrypt(CryptoJS.algo.AES, saved_key, pass); - var key = DSA.parsePrivate(decrypted.toString(CryptoJS.enc.Latin1)); - if (cipher.decrypt(CryptoJS.algo.AES, pass_check, pass).toString(CryptoJS.enc.Latin1) === 'match') { - // Verified that the user's password is still the same - this.trigger('showHelpMessages', [__('Re-establishing encrypted session')]); - callback({ - 'key': key, - 'instance_tag': instance_tag - }); + var result, pass, instance_tag, saved_key; + if (converse.cache_otr_key) { + pass = this.getSessionPassphrase(); + if (typeof pass !== "undefined") { + instance_tag = window.sessionStorage[hex_sha1(this.id+'instance_tag')]; + saved_key = window.sessionStorage[hex_sha1(this.id+'priv_key')]; + var pass_check = this.get('pass_check'); + if (saved_key && instance_tag && typeof pass_check !== 'undefined') { + var decrypted = cipher.decrypt(CryptoJS.algo.AES, saved_key, pass); + var key = DSA.parsePrivate(decrypted.toString(CryptoJS.enc.Latin1)); + if (cipher.decrypt(CryptoJS.algo.AES, pass_check, pass).toString(CryptoJS.enc.Latin1) === 'match') { + // Verified that the passphrase is still the same + this.trigger('showHelpMessages', [__('Re-establishing encrypted session')]); + callback({ + 'key': key, + 'instance_tag': instance_tag + }); + return; // Our work is done here + } } } } - // We need to generate a new key and instance tag instance_tag = OTR.makeInstanceTag(); this.trigger('showHelpMessages', [ @@ -560,25 +588,7 @@ null, true // show spinner ); - - var clb = callback; - setTimeout($.proxy(function () { - var key = new DSA(); - if (typeof converse.connection.pass !== "undefined") { - // Encrypt the key and set in sessionStorage. Also store - // instance tag - window.sessionStorage[hex_sha1(this.id+'priv_key')] = - cipher.encrypt(CryptoJS.algo.AES, key.packPrivate(), pass).toString(); - window.sessionStorage[hex_sha1(this.id+'instance_tag')] = instance_tag; - this.save({'pass_check': cipher.encrypt(CryptoJS.algo.AES, 'match', pass).toString()}); - } - this.trigger('showHelpMessages', [__('Private key generated.')], null, false); - clb({ - 'key': key, - 'instance_tag': instance_tag - }); - }, this), 500); - + setTimeout($.proxy(this.generatePrivateKey, this), 500, callback, instance_tag); }, updateOTRStatus: function (state) { diff --git a/docs/CHANGES.rst b/docs/CHANGES.rst index 4a62f3f46..24b9103f9 100644 --- a/docs/CHANGES.rst +++ b/docs/CHANGES.rst @@ -6,6 +6,7 @@ Unreleased * Option to display a call button in the chatbox toolbar, to allow third-party libraries to provide a calling feature. [Aupajo] * #108 Japanese Translations [mako09] +* #111 OTR not working when using converse.js with prebinding. [jseidl, jcbrand] * #114 Hewbrew Translations [GreenLunar] * #115 Indonesian Translations [priyadi] diff --git a/docs/source/index.rst b/docs/source/index.rst index 58706f3dc..0aabc8fa3 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -306,7 +306,6 @@ Facebook integration this myself. Feedback and patches from people who have succesfully done this will be appreciated. - Converse.js uses `Strophe.js `_ to connect and communicate with the XMPP server. One nice thing about Strophe.js is that it can be extended via `plugins `_. @@ -763,6 +762,22 @@ a middle man between HTTP and XMPP. See `here `_ for more information. +cache_otr_key +------------- + +Default = ``false`` + +Let the `OTR (Off-the-record encryption) `_ private +key be cached in your browser's session storage. + +The browser's session storage persists across page loads but is deleted once +the tab or window is closed. + +If this options is set to ``false``, a new OTR private key will be generated +for each page load. While more inconvenient, this is a much more secure option. + +This setting can only be used together with ``allow_otr = true``. + debug ----- From c3b98fd2fd5919fc1dfabf34275584250060dca0 Mon Sep 17 00:00:00 2001 From: JC Brand Date: Tue, 11 Feb 2014 13:14:36 +0200 Subject: [PATCH 15/33] Refactor and improve the reconnecting code and make it configurable There is still the apparent problem that after reconnecting, event listeners hvae to bre reregistered (which doesn't happen currently). So messages can be sent but not received... --- converse.js | 68 ++++++++++++++++++++++++++++--------------- docs/source/index.rst | 8 +++++ 2 files changed, 53 insertions(+), 23 deletions(-) diff --git a/converse.js b/converse.js index 4dfafd7d6..6a3f7685b 100644 --- a/converse.js +++ b/converse.js @@ -133,6 +133,7 @@ this.allow_otr = true; this.animate = true; this.auto_list_rooms = false; + this.auto_reconnect = true; this.auto_subscribe = false; this.bosh_service_url = undefined; // The BOSH connection manager URL. this.cache_otr_key = false; @@ -158,6 +159,7 @@ 'allow_otr', 'animate', 'auto_list_rooms', + 'auto_reconnect', 'auto_subscribe', 'bosh_service_url', 'cache_otr_key', @@ -315,41 +317,63 @@ ); }; - this.onConnect = function (status) { + this.reconnect = function () { + converse.giveFeedback(__('Reconnecting'), 'error'); + if (converse.prebind) { + this.connection.attach( + this.jid, + this.sid, + this.rid, + this.onConnect + ); + } else { + this.connection.connect( + this.connection.jid, + this.connection.pass, + converse.onConnect, + this.connection.wait, + this.connection.hold, + this.connection.route + ); + } + }; + + this.showLoginButton = function () { + var view = converse.chatboxesview.views.controlbox; + if (typeof view.loginpanel !== 'undefined') { + view.loginpanel.showLoginButton(); + } + }; + + this.onConnect = function (status, condition) { var $button, $form; - if (status === Strophe.Status.CONNECTED) { - converse.log('Connected'); + if ((status === Strophe.Status.CONNECTED) || + (status === Strophe.Status.ATTACHED)) { + converse.log(status === Strophe.Status.CONNECTED ? 'Connected' : 'Attached'); converse.onConnected(); } else if (status === Strophe.Status.DISCONNECTED) { - $form = $('#converse-login'); - $button = $form.find('input[type=submit]'); - if ($button) { $button.show().siblings('span').remove(); } + // TODO: Handle case where user manually logs out... converse.giveFeedback(__('Disconnected'), 'error'); - converse.connection.connect( - converse.connection.jid, - converse.connection.pass, - converse.onConnect - ); + if (converse.auto_reconnect) { + converse.reconnect(); + } else { + converse.showLoginButton(); + } } else if (status === Strophe.Status.Error) { - $form = $('#converse-login'); - $button = $form.find('input[type=submit]'); - if ($button) { $button.show().siblings('span').remove(); } + converse.showLoginButton(); converse.giveFeedback(__('Error'), 'error'); } else if (status === Strophe.Status.CONNECTING) { converse.giveFeedback(__('Connecting')); } else if (status === Strophe.Status.CONNFAIL) { - converse.chatboxesview.views.controlbox.trigger('connection-fail'); + converse.showLoginButton(); converse.giveFeedback(__('Connection Failed'), 'error'); } else if (status === Strophe.Status.AUTHENTICATING) { converse.giveFeedback(__('Authenticating')); } else if (status === Strophe.Status.AUTHFAIL) { - converse.chatboxesview.views.controlbox.trigger('auth-fail'); + converse.showLoginButton(); converse.giveFeedback(__('Authentication Failed'), 'error'); } else if (status === Strophe.Status.DISCONNECTING) { converse.giveFeedback(__('Disconnecting'), 'error'); - } else if (status === Strophe.Status.ATTACHED) { - converse.log('Attached'); - converse.onConnected(); } }; @@ -374,7 +398,7 @@ this.parseISO8601 = function (datestr) { /* Parses string formatted as 2013-02-14T11:27:08.268Z to a Date obj. */ -     var numericKeys = [1, 4, 5, 6, 7, 10, 11], + var numericKeys = [1, 4, 5, 6, 7, 10, 11], struct = /^\s*(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}\.?\d*)Z\s*$/.exec(datestr), minutesOffset = 0, i, k; @@ -3398,7 +3422,7 @@ converse.connection.connect(jid, password, converse.onConnect); }, - showConnectButton: function () { + showLoginButton: function () { var $form = this.$el.find('#converse-login'); var $button = $form.find('input[type=submit]'); if ($button.length) { @@ -3409,8 +3433,6 @@ initialize: function (cfg) { cfg.$parent.html(this.$el.html(this.template())); this.$tabs = cfg.$parent.parent().find('#controlbox-tabs'); - this.model.on('connection-fail', function () { this.showConnectButton(); }, this); - this.model.on('auth-fail', function () { this.showConnectButton(); }, this); }, render: function () { diff --git a/docs/source/index.rst b/docs/source/index.rst index 0aabc8fa3..b0d198016 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -747,6 +747,14 @@ For each room on the server a query is made to fetch further details (e.g. features, number of occupants etc.), so on servers with many rooms this option will create lots of extra connection traffic. +auto_reconnect +-------------- + +Default = ``true`` + +Automatically reconnect to the XMPP server if the connection drops +unexpectedly. + auto_subscribe -------------- From dc858cc38b13bf86a950d3ae4801a127f03f2302 Mon Sep 17 00:00:00 2001 From: JC Brand Date: Tue, 11 Feb 2014 13:44:27 +0200 Subject: [PATCH 16/33] Register connection addHandlers when reconnecting --- converse.js | 75 ++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 54 insertions(+), 21 deletions(-) diff --git a/converse.js b/converse.js index 6a3f7685b..07db8fa2e 100644 --- a/converse.js +++ b/converse.js @@ -324,13 +324,17 @@ this.jid, this.sid, this.rid, - this.onConnect + function (status, condition) { + converse.onConnect(status, condition, true); + } ); } else { this.connection.connect( this.connection.jid, this.connection.pass, - converse.onConnect, + function (status, condition) { + converse.onConnect(status, condition, true); + }, this.connection.wait, this.connection.hold, this.connection.route @@ -345,12 +349,17 @@ } }; - this.onConnect = function (status, condition) { + this.onConnect = function (status, condition, reconnect) { var $button, $form; if ((status === Strophe.Status.CONNECTED) || (status === Strophe.Status.ATTACHED)) { - converse.log(status === Strophe.Status.CONNECTED ? 'Connected' : 'Attached'); - converse.onConnected(); + if ((typeof reconnect !== 'undefined') && (reconnect)) { + converse.log(status === Strophe.Status.CONNECTED ? 'Reconnected' : 'Reattached'); + converse.onReconnected(); + } else { + converse.log(status === Strophe.Status.CONNECTED ? 'Connected' : 'Attached'); + converse.onConnected(); + } } else if (status === Strophe.Status.DISCONNECTED) { // TODO: Handle case where user manually logs out... converse.giveFeedback(__('Disconnected'), 'error'); @@ -451,27 +460,35 @@ this.xmppstatus.fetch({success: callback, error: callback}); }; - this.initRoster = function () { - // Set up the roster - this.roster = new this.RosterItems(); - this.roster.localStorage = new Backbone.LocalStorage( - hex_sha1('converse.rosteritems-'+converse.bare_jid)); - - // Register callbacks that depend on the roster + this.registerRosterHandler = function () { + // Register handlers that depend on the roster this.connection.roster.registerCallback( $.proxy(this.roster.rosterHandler, this.roster), null, 'presence', null); + }; + this.registerRosterXHandler = function () { this.connection.addHandler( $.proxy(this.roster.subscribeToSuggestedItems, this.roster), 'http://jabber.org/protocol/rosterx', 'message', null); + }; + this.registerPresenceHandler = function () { this.connection.addHandler( $.proxy(function (presence) { this.presenceHandler(presence); return true; }, this.roster), null, 'presence', null); + }; + this.initRoster = function () { + // Set up the roster + this.roster = new this.RosterItems(); + this.roster.localStorage = new Backbone.LocalStorage( + hex_sha1('converse.rosteritems-'+converse.bare_jid)); + this.registerRosterHandler(); + this.registerRosterXHandler(); + this.registerPresenceHandler(); // No create the view which will fetch roster items from // localStorage this.rosterview = new this.RosterView({'model':this.roster}); @@ -495,6 +512,18 @@ },this)); }; + this.onReconnected = function () { + // We need to re-register all the event handlers on the newly + // created connection. + this.initStatus($.proxy(function () { + this.registerRosterXHandler(); + this.registerPresenceHandler(); + this.chatboxes.registerMessageHandler(); + converse.xmppstatus.sendPresence(); + this.giveFeedback(__('Online Contacts')); + }, this)); + }; + this.onConnected = function () { if (this.debug) { this.connection.xmlInput = function (body) { console.log(body); }; @@ -2427,6 +2456,17 @@ this.ChatBoxes = Backbone.Collection.extend({ model: converse.ChatBox, + registerMessageHandler: function () { + // TODO: Make this method global to converse, trigger an event + // and let messageReceived be called via a handler for that + // event. + converse.connection.addHandler( + $.proxy(function (message) { + this.messageReceived(message); + return true; + }, this), null, 'message', 'chat'); + }, + onConnected: function () { this.localStorage = new Backbone.LocalStorage( hex_sha1('converse.chatboxes-'+converse.bare_jid)); @@ -2438,16 +2478,9 @@ } else { this.get('controlbox').save(); } - // This will make sure the Roster is set up + // This line below will make sure the Roster is set up this.get('controlbox').set({connected:true}); - - // Register message handler - converse.connection.addHandler( - $.proxy(function (message) { - this.messageReceived(message); - return true; - }, this), null, 'message', 'chat'); - + this.registerMessageHandler(); // Get cached chatboxes from localstorage this.fetch({ add: true, From 2026305791b1c690646b72799ff8c2f6c5aa44fd Mon Sep 17 00:00:00 2001 From: JC Brand Date: Tue, 11 Feb 2014 23:48:38 +0200 Subject: [PATCH 17/33] Remove code for re-attaching a prebinded session. I couldn't get it to work. Suspect that a new session needs to be created/authenticated instead of attaching to the existing connection. --- converse.js | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/converse.js b/converse.js index 07db8fa2e..b9e1b0eb7 100644 --- a/converse.js +++ b/converse.js @@ -319,16 +319,8 @@ this.reconnect = function () { converse.giveFeedback(__('Reconnecting'), 'error'); - if (converse.prebind) { - this.connection.attach( - this.jid, - this.sid, - this.rid, - function (status, condition) { - converse.onConnect(status, condition, true); - } - ); - } else { + // XXX: Couldn't get the prebind case to work here. + if (!converse.prebind) { this.connection.connect( this.connection.jid, this.connection.pass, From ca9c215cac6cb6ee57233b03e66bccb79de7a0a0 Mon Sep 17 00:00:00 2001 From: JC Brand Date: Wed, 12 Feb 2014 00:41:51 +0200 Subject: [PATCH 18/33] Use a random passphrase to encrypt the private key. Updates #111 --- converse.js | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/converse.js b/converse.js index b9e1b0eb7..ce0b6b34b 100644 --- a/converse.js +++ b/converse.js @@ -244,13 +244,6 @@ // Module-level functions // ---------------------- - // TODO: REMOVE - this.createLinks = function (text) { - // Convert URLs into hyperlinks - var re = /((http|https|ftp):\/\/[\w?=&.\/\-;#~%\-]+(?![\w\s?&.\/;#~%"=\-]*>))/g; - return text.replace(re, '$1'); - }; - this.giveFeedback = function (message, klass) { $('.conn-feedback').text(message); $('.conn-feedback').attr('class', 'conn-feedback'); @@ -319,7 +312,6 @@ this.reconnect = function () { converse.giveFeedback(__('Reconnecting'), 'error'); - // XXX: Couldn't get the prebind case to work here. if (!converse.prebind) { this.connection.connect( this.connection.jid, @@ -576,7 +568,17 @@ }, getSessionPassphrase: function () { - return converse.prebind ? converse.connection.jid : converse.connection.pass; + if (converse.prebind) { + var key = hex_sha1(converse.connection.jid), + pass = window.sessionStorage[key]; + if (typeof pass === 'undefined') { + pass = Math.floor(Math.random()*4294967295); + window.sessionStorage[key] = pass; + } + return pass; + } else { + return converse.connection.pass; + } }, generatePrivateKey: function (callback, instance_tag) { @@ -2930,8 +2932,7 @@ }, this), $.proxy(function (jid, fullname, img, img_type, url) { converse.log("Error while retrieving vcard"); - // XXX: Should vcard_updated be set here as - // well? + // XXX: Should vcard_updated be set here as well? this.add({ jid: bare_jid, subscription: 'none', @@ -2954,8 +2955,6 @@ var $presence = $(presence), presence_type = $presence.attr('type'); if (presence_type === 'error') { - // TODO - // error presence stanzas don't necessarily have a 'from' attr. return true; } var jid = $presence.attr('from'), @@ -3303,7 +3302,7 @@ } else if (stat === 'away') { pretty_status = __('away'); } else { - pretty_status = __(stat) || __('online'); // XXX: Is 'online' the right default choice here? + pretty_status = __(stat) || __('online'); } return pretty_status; }, From d0f1a6cfb97396814e7e264e36b2aa808bf655ce Mon Sep 17 00:00:00 2001 From: JC Brand Date: Wed, 12 Feb 2014 01:41:24 +0200 Subject: [PATCH 19/33] Simplify spinner css --- converse.css | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/converse.css b/converse.css index 88e37a7a3..b06fe1fe9 100644 --- a/converse.css +++ b/converse.css @@ -339,15 +339,12 @@ span.spinner { } span.spinner.centered { - position: absolute; - top: 30%; - left: 50%; - margin: 0 0 0 -25%; + text-align: center; + padding-top: 5em; } span.spinner.hor_centered { - left: 40%; - position: absolute; + text-align: center; } #conversejs { From e3b8a8f9dd21ef5c5579608e354b3b1985fc3cc7 Mon Sep 17 00:00:00 2001 From: JC Brand Date: Wed, 12 Feb 2014 02:02:25 +0200 Subject: [PATCH 20/33] Move event emitter tests out into their own spec --- spec/eventemitter.js | 67 ++++++++++++++++++++++++++++++++++++++++++++ tests_main.js | 1 + 2 files changed, 68 insertions(+) create mode 100644 spec/eventemitter.js diff --git a/spec/eventemitter.js b/spec/eventemitter.js new file mode 100644 index 000000000..2035439bd --- /dev/null +++ b/spec/eventemitter.js @@ -0,0 +1,67 @@ +(function (root, factory) { + define([ + "mock", + "utils" + ], function (mock, utils) { + return factory(mock, utils); + } + ); +} (this, function (mock, utils) { + return describe("The Converse Event Emitter", $.proxy(function(mock, utils) { + window.localStorage.clear(); + + it("allows you to subscribe to emitted events", function () { + this.callback = function () {}; + spyOn(this, 'callback'); + converse.on('onInitialized', this.callback); + converse.emit('onInitialized'); + expect(this.callback).toHaveBeenCalled(); + converse.emit('onInitialized'); + expect(this.callback.callCount, 2); + converse.emit('onInitialized'); + expect(this.callback.callCount, 3); + }); + + it("allows you to listen once for an emitted event", function () { + this.callback = function () {}; + spyOn(this, 'callback'); + converse.once('onInitialized', this.callback); + converse.emit('onInitialized'); + expect(this.callback).toHaveBeenCalled(); + converse.emit('onInitialized'); + expect(this.callback.callCount, 1); + converse.emit('onInitialized'); + expect(this.callback.callCount, 1); + }); + + it("allows you to stop listening or subscribing to an event", function () { + this.callback = function () {}; + this.anotherCallback = function () {}; + this.neverCalled = function () {}; + + spyOn(this, 'callback'); + spyOn(this, 'anotherCallback'); + spyOn(this, 'neverCalled'); + converse.on('onInitialized', this.callback); + converse.on('onInitialized', this.anotherCallback); + + converse.emit('onInitialized'); + expect(this.callback).toHaveBeenCalled(); + expect(this.anotherCallback).toHaveBeenCalled(); + + converse.off('onInitialized', this.callback); + + converse.emit('onInitialized'); + expect(this.callback.callCount, 1); + expect(this.anotherCallback.callCount, 2); + + converse.once('onInitialized', this.neverCalled); + converse.off('onInitialized', this.neverCalled); + + converse.emit('onInitialized'); + expect(this.callback.callCount, 1); + expect(this.anotherCallback.callCount, 3); + expect(this.neverCalled).not.toHaveBeenCalled(); + }); + }, converse, mock, utils)); +})); diff --git a/tests_main.js b/tests_main.js index 294092558..2bfeb13e8 100644 --- a/tests_main.js +++ b/tests_main.js @@ -115,6 +115,7 @@ require([ "jasmine-console-reporter", "jasmine-junit-reporter", "spec/converse", + "spec/eventemitter", "spec/controlbox", "spec/chatbox", "spec/chatroom" From 398142c7dea87e8afff1cd3cbca713c8cb4c74b2 Mon Sep 17 00:00:00 2001 From: JC Brand Date: Wed, 12 Feb 2014 02:02:45 +0200 Subject: [PATCH 21/33] Add a test for the passphrase storage. Updates #111 --- converse.js | 34 +++++++++++----------- spec/converse.js | 74 ++++++++++++++++-------------------------------- 2 files changed, 40 insertions(+), 68 deletions(-) diff --git a/converse.js b/converse.js index ce0b6b34b..26a7a09c9 100644 --- a/converse.js +++ b/converse.js @@ -262,6 +262,20 @@ } }; + this.getSessionPassphrase = function () { + if (this.prebind) { + var key = hex_sha1(this.connection.jid), + pass = window.sessionStorage[key]; + if (typeof pass === 'undefined') { + pass = Math.floor(Math.random()*4294967295).toString(); + window.sessionStorage[key] = pass; + } + return pass; + } else { + return this.connection.pass; + } + }; + this.getVCard = function (jid, callback, errback) { if (!this.use_vcards) { if (callback) { @@ -567,25 +581,11 @@ } }, - getSessionPassphrase: function () { - if (converse.prebind) { - var key = hex_sha1(converse.connection.jid), - pass = window.sessionStorage[key]; - if (typeof pass === 'undefined') { - pass = Math.floor(Math.random()*4294967295); - window.sessionStorage[key] = pass; - } - return pass; - } else { - return converse.connection.pass; - } - }, - generatePrivateKey: function (callback, instance_tag) { var cipher = CryptoJS.lib.PasswordBasedCipher; var key = new DSA(); if (converse.cache_otr_key) { - pass = this.getSessionPassphrase(); + pass = converse.getSessionPassphrase(); if (typeof pass !== "undefined") { // Encrypt the key and set in sessionStorage. Also store instance tag. window.sessionStorage[hex_sha1(this.id+'priv_key')] = @@ -602,12 +602,10 @@ }, getSession: function (callback) { - // FIXME: sessionStorage is not supported in IE < 8. Perhaps a - // user alert is required here... var cipher = CryptoJS.lib.PasswordBasedCipher; var result, pass, instance_tag, saved_key; if (converse.cache_otr_key) { - pass = this.getSessionPassphrase(); + pass = converse.getSessionPassphrase(); if (typeof pass !== "undefined") { instance_tag = window.sessionStorage[hex_sha1(this.id+'instance_tag')]; saved_key = window.sessionStorage[hex_sha1(this.id+'priv_key')]; diff --git a/spec/converse.js b/spec/converse.js index fa416e532..9a6ff8d42 100644 --- a/spec/converse.js +++ b/spec/converse.js @@ -8,60 +8,34 @@ ); } (this, function (mock, utils) { return describe("Converse", $.proxy(function(mock, utils) { - window.localStorage.clear(); - it("allows you to subscribe to emitted events", function () { - this.callback = function () {}; - spyOn(this, 'callback'); - converse.on('onInitialized', this.callback); - converse.emit('onInitialized'); - expect(this.callback).toHaveBeenCalled(); - converse.emit('onInitialized'); - expect(this.callback.callCount, 2); - converse.emit('onInitialized'); - expect(this.callback.callCount, 3); - }); + beforeEach($.proxy(function () { + window.localStorage.clear(); + window.sessionStorage.clear(); + }, converse)); - it("allows you to listen once for an emitted event", function () { - this.callback = function () {}; - spyOn(this, 'callback'); - converse.once('onInitialized', this.callback); - converse.emit('onInitialized'); - expect(this.callback).toHaveBeenCalled(); - converse.emit('onInitialized'); - expect(this.callback.callCount, 1); - converse.emit('onInitialized'); - expect(this.callback.callCount, 1); - }); + it("can store a session passphrase in session storage", $.proxy(function () { + var pp; + // With no prebind, the user's XMPP password is used and nothing is + // stored in session storage. + this.prebind = false; + this.connection.pass = 's3cr3t!'; + expect(this.getSessionPassphrase()).toBe(this.connection.pass); + expect(window.sessionStorage.length).toBe(0); + expect(window.localStorage.length).toBe(0); - it("allows you to stop listening or subscribing to an event", function () { - this.callback = function () {}; - this.anotherCallback = function () {}; - this.neverCalled = function () {}; + // With prebind, a random passphrase is generated and stored in + // session storage. + this.prebind = true; + pp = this.getSessionPassphrase(); + expect(pp).not.toBe(this.connection.pass); + expect(window.sessionStorage.length).toBe(1); + expect(window.localStorage.length).toBe(0); + expect(pp).toBe(window.sessionStorage[hex_sha1(converse.connection.jid)]); - spyOn(this, 'callback'); - spyOn(this, 'anotherCallback'); - spyOn(this, 'neverCalled'); - converse.on('onInitialized', this.callback); - converse.on('onInitialized', this.anotherCallback); + // Clean up + this.prebind = false; + }, converse)); - converse.emit('onInitialized'); - expect(this.callback).toHaveBeenCalled(); - expect(this.anotherCallback).toHaveBeenCalled(); - - converse.off('onInitialized', this.callback); - - converse.emit('onInitialized'); - expect(this.callback.callCount, 1); - expect(this.anotherCallback.callCount, 2); - - converse.once('onInitialized', this.neverCalled); - converse.off('onInitialized', this.neverCalled); - - converse.emit('onInitialized'); - expect(this.callback.callCount, 1); - expect(this.anotherCallback.callCount, 3); - expect(this.neverCalled).not.toHaveBeenCalled(); - }); }, converse, mock, utils)); })); From 62d59ff3e492d8831143a466b9676a11be6c01d4 Mon Sep 17 00:00:00 2001 From: JC Brand Date: Wed, 12 Feb 2014 07:12:00 +0200 Subject: [PATCH 22/33] Refactor some OTR code into a Backbone model and adapt tests. --- converse.js | 81 +++++++++++++++++++----------------- spec/{converse.js => otr.js} | 7 ++-- tests_main.js | 10 ++++- 3 files changed, 55 insertions(+), 43 deletions(-) rename spec/{converse.js => otr.js} (86%) diff --git a/converse.js b/converse.js index 26a7a09c9..997868aba 100644 --- a/converse.js +++ b/converse.js @@ -262,20 +262,6 @@ } }; - this.getSessionPassphrase = function () { - if (this.prebind) { - var key = hex_sha1(this.connection.jid), - pass = window.sessionStorage[key]; - if (typeof pass === 'undefined') { - pass = Math.floor(Math.random()*4294967295).toString(); - window.sessionStorage[key] = pass; - } - return pass; - } else { - return this.connection.pass; - } - }; - this.getVCard = function (jid, callback, errback) { if (!this.use_vcards) { if (callback) { @@ -561,6 +547,44 @@ // Backbone Models and Views // ------------------------- + this.OTR = Backbone.Model.extend({ + // A model for managing OTR settings. + getSessionPassphrase: function () { + if (converse.prebind) { + var key = hex_sha1(converse.connection.jid), + pass = window.sessionStorage[key]; + if (typeof pass === 'undefined') { + pass = Math.floor(Math.random()*4294967295).toString(); + window.sessionStorage[key] = pass; + } + return pass; + } else { + return converse.connection.pass; + } + }, + + generatePrivateKey: function (callback, instance_tag) { + var key = new DSA(); + var jid = converse.connection.jid; + if (converse.cache_otr_key) { + var cipher = CryptoJS.lib.PasswordBasedCipher; + var pass = this.getSessionPassphrase(); + if (typeof pass !== "undefined") { + // Encrypt the key and set in sessionStorage. Also store instance tag. + window.sessionStorage[hex_sha1(jid+'priv_key')] = + cipher.encrypt(CryptoJS.algo.AES, key.packPrivate(), pass).toString(); + window.sessionStorage[hex_sha1(jid+'instance_tag')] = instance_tag; + window.sessionStorage[hex_sha1(jid+'pass_check')] = + cipher.encrypt(CryptoJS.algo.AES, 'match', pass).toString(); + } + } + callback({ + 'key': key, + 'instance_tag': instance_tag + }); + } + }); + this.Message = Backbone.Model.extend(); this.Messages = Backbone.Collection.extend({ @@ -581,35 +605,15 @@ } }, - generatePrivateKey: function (callback, instance_tag) { - var cipher = CryptoJS.lib.PasswordBasedCipher; - var key = new DSA(); - if (converse.cache_otr_key) { - pass = converse.getSessionPassphrase(); - if (typeof pass !== "undefined") { - // Encrypt the key and set in sessionStorage. Also store instance tag. - window.sessionStorage[hex_sha1(this.id+'priv_key')] = - cipher.encrypt(CryptoJS.algo.AES, key.packPrivate(), pass).toString(); - window.sessionStorage[hex_sha1(this.id+'instance_tag')] = instance_tag; - this.save({'pass_check': cipher.encrypt(CryptoJS.algo.AES, 'match', pass).toString()}); - } - } - this.trigger('showHelpMessages', [__('Private key generated.')], null, false); - callback({ - 'key': key, - 'instance_tag': instance_tag - }); - }, - getSession: function (callback) { var cipher = CryptoJS.lib.PasswordBasedCipher; - var result, pass, instance_tag, saved_key; + var result, pass, instance_tag, saved_key, pass_check; if (converse.cache_otr_key) { - pass = converse.getSessionPassphrase(); + pass = converse.otr.getSessionPassphrase(); if (typeof pass !== "undefined") { instance_tag = window.sessionStorage[hex_sha1(this.id+'instance_tag')]; saved_key = window.sessionStorage[hex_sha1(this.id+'priv_key')]; - var pass_check = this.get('pass_check'); + pass_check = window.sessionStorage[hex_sha1(this.connection.jid+'pass_check')]; if (saved_key && instance_tag && typeof pass_check !== 'undefined') { var decrypted = cipher.decrypt(CryptoJS.algo.AES, saved_key, pass); var key = DSA.parsePrivate(decrypted.toString(CryptoJS.enc.Latin1)); @@ -633,7 +637,7 @@ null, true // show spinner ); - setTimeout($.proxy(this.generatePrivateKey, this), 500, callback, instance_tag); + setTimeout($.proxy(converse.otr.generatePrivateKey, this), 500, callback, instance_tag); }, updateOTRStatus: function (state) { @@ -3561,6 +3565,7 @@ this.chatboxes = new this.ChatBoxes(); this.chatboxesview = new this.ChatBoxesView({model: this.chatboxes}); this.controlboxtoggle = new this.ControlBoxToggle(); + this.otr = new this.OTR(); if ((this.prebind) && (!this.connection)) { if ((!this.jid) || (!this.sid) || (!this.rid) || (!this.bosh_service_url)) { diff --git a/spec/converse.js b/spec/otr.js similarity index 86% rename from spec/converse.js rename to spec/otr.js index 9a6ff8d42..f1bab1592 100644 --- a/spec/converse.js +++ b/spec/otr.js @@ -7,7 +7,7 @@ } ); } (this, function (mock, utils) { - return describe("Converse", $.proxy(function(mock, utils) { + return describe("The OTR module", $.proxy(function(mock, utils) { beforeEach($.proxy(function () { window.localStorage.clear(); @@ -20,14 +20,14 @@ // stored in session storage. this.prebind = false; this.connection.pass = 's3cr3t!'; - expect(this.getSessionPassphrase()).toBe(this.connection.pass); + expect(this.otr.getSessionPassphrase()).toBe(this.connection.pass); expect(window.sessionStorage.length).toBe(0); expect(window.localStorage.length).toBe(0); // With prebind, a random passphrase is generated and stored in // session storage. this.prebind = true; - pp = this.getSessionPassphrase(); + pp = this.otr.getSessionPassphrase(); expect(pp).not.toBe(this.connection.pass); expect(window.sessionStorage.length).toBe(1); expect(window.localStorage.length).toBe(0); @@ -36,6 +36,5 @@ // Clean up this.prebind = false; }, converse)); - }, converse, mock, utils)); })); diff --git a/tests_main.js b/tests_main.js index 2bfeb13e8..a645a4e9c 100644 --- a/tests_main.js +++ b/tests_main.js @@ -111,10 +111,18 @@ require([ testing: true }, function (converse) { window.converse = converse; + window.crypto = { + getRandomValues: function (buf) { + var i; + for (i=0, len=buf.length; i Date: Wed, 12 Feb 2014 08:22:52 +0200 Subject: [PATCH 23/33] Update contact section --- index.html | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/index.html b/index.html index cb430a85e..1665d6210 100644 --- a/index.html +++ b/index.html @@ -159,9 +159,17 @@ You can:
  • From 1a4044dd2aba89b3ee7272989bba4debbe165c0c Mon Sep 17 00:00:00 2001 From: JC Brand Date: Wed, 12 Feb 2014 11:30:05 +0200 Subject: [PATCH 24/33] Slight refactor of generatePrivateKey... to avoid having to give pass it a callback method --- converse.js | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/converse.js b/converse.js index 997868aba..13d3fd8f6 100644 --- a/converse.js +++ b/converse.js @@ -563,7 +563,7 @@ } }, - generatePrivateKey: function (callback, instance_tag) { + generatePrivateKey: function () { var key = new DSA(); var jid = converse.connection.jid; if (converse.cache_otr_key) { @@ -578,10 +578,7 @@ cipher.encrypt(CryptoJS.algo.AES, 'match', pass).toString(); } } - callback({ - 'key': key, - 'instance_tag': instance_tag - }); + return key; } }); @@ -630,14 +627,18 @@ } } // We need to generate a new key and instance tag - instance_tag = OTR.makeInstanceTag(); this.trigger('showHelpMessages', [ __('Generating private key.'), __('Your browser might become unresponsive.')], null, true // show spinner ); - setTimeout($.proxy(converse.otr.generatePrivateKey, this), 500, callback, instance_tag); + setTimeout(function () { + callback({ + 'key': converse.otr.generatePrivateKey.apply(this), + 'instance_tag': OTR.makeInstanceTag() + }); + }, 500); }, updateOTRStatus: function (state) { @@ -1345,7 +1346,7 @@ } else if (data.otr_status == FINISHED){ msgs.push(__("Your buddy has ended encryption on their end, you should do the same.")); } - return this.showHelpMessages(msgs); + return this.showHelpMessages(msgs, 'info', false); }, renderToolbar: function () { From 30f3114c7c03683312ec80d1e25e9fb21abf5ffc Mon Sep 17 00:00:00 2001 From: JC Brand Date: Wed, 12 Feb 2014 12:19:12 +0200 Subject: [PATCH 25/33] Add method to get the latest RID. Updates #93 --- converse.js | 6 ++++++ spec/converse.js | 27 +++++++++++++++++++++++++++ tests_main.js | 2 ++ 3 files changed, 35 insertions(+) create mode 100644 spec/converse.js diff --git a/converse.js b/converse.js index 13d3fd8f6..3a85cf28c 100644 --- a/converse.js +++ b/converse.js @@ -3585,6 +3585,12 @@ 'initialize': function (settings, callback) { converse.initialize(settings, callback); }, + 'getRID': function () { + if (typeof converse.connection !== "undefined") { + return converse.connection.rid; + } + return null; + }, 'once': function(evt, handler) { converse.once(evt, handler); }, diff --git a/spec/converse.js b/spec/converse.js new file mode 100644 index 000000000..5bc542968 --- /dev/null +++ b/spec/converse.js @@ -0,0 +1,27 @@ +(function (root, factory) { + define([ + "mock", + "utils" + ], function (mock, utils) { + return factory(mock, utils); + } + ); +} (this, function (mock, utils) { + return describe("Converse", $.proxy(function(mock, utils) { + + beforeEach($.proxy(function () { + window.localStorage.clear(); + window.sessionStorage.clear(); + }, converse)); + + it("has an API method for retrieving the next RID", $.proxy(function () { + var old_connection = converse.connection; + converse.connection.rid = '1234'; + expect(converse_api.getRID()).toBe('1234'); + converse.connection = undefined; + expect(converse_api.getRID()).toBe(null); + // Restore the connection + converse.connection = old_connection; + }, converse)); + }, converse, mock, utils)); +})); diff --git a/tests_main.js b/tests_main.js index a645a4e9c..3ee1e1ba4 100644 --- a/tests_main.js +++ b/tests_main.js @@ -100,6 +100,7 @@ require([ "jasmine-html" ], function($, converse, mock, jasmine) { // Set up converse.js + window.converse_api = converse; window.localStorage.clear(); converse.initialize({ prebind: false, @@ -122,6 +123,7 @@ require([ require([ "jasmine-console-reporter", "jasmine-junit-reporter", + "spec/converse", "spec/otr", "spec/eventemitter", "spec/controlbox", From 18d6a91881485886a15811889459a0fa349bbff7 Mon Sep 17 00:00:00 2001 From: JC Brand Date: Wed, 12 Feb 2014 12:37:39 +0200 Subject: [PATCH 26/33] Add API method to retrieve the SID. Fixes #93 --- converse.js | 10 +++- docs/CHANGES.rst | 3 +- docs/doctrees/index.doctree | Bin 196474 -> 202410 bytes docs/html/_sources/index.txt | 33 +++++++++++- docs/html/index.html | 101 ++++++++++++++++++++++------------- docs/html/searchindex.js | 2 +- docs/source/index.rst | 20 ++++++- spec/converse.js | 20 +++++++ 8 files changed, 147 insertions(+), 42 deletions(-) diff --git a/converse.js b/converse.js index 3a85cf28c..4416557e3 100644 --- a/converse.js +++ b/converse.js @@ -138,6 +138,7 @@ this.bosh_service_url = undefined; // The BOSH connection manager URL. this.cache_otr_key = false; this.debug = false; + this.expose_rid_and_sid = false; this.hide_muc_server = false; this.i18n = locales.en; this.prebind = false; @@ -165,6 +166,7 @@ 'cache_otr_key', 'connection', 'debug', + 'expose_rid_and_sid', 'fullname', 'hide_muc_server', 'i18n', @@ -3586,11 +3588,17 @@ converse.initialize(settings, callback); }, 'getRID': function () { - if (typeof converse.connection !== "undefined") { + if (converse.expose_rid_and_sid && typeof converse.connection !== "undefined") { return converse.connection.rid; } return null; }, + 'getSID': function () { + if (converse.expose_rid_and_sid && typeof converse.connection !== "undefined") { + return converse.connection.sid; + } + return null; + }, 'once': function(evt, handler) { converse.once(evt, handler); }, diff --git a/docs/CHANGES.rst b/docs/CHANGES.rst index 24b9103f9..2b59d3631 100644 --- a/docs/CHANGES.rst +++ b/docs/CHANGES.rst @@ -4,7 +4,8 @@ Changelog Unreleased ---------- -* Option to display a call button in the chatbox toolbar, to allow third-party libraries to provide a calling feature. [Aupajo] +* #93 Add API methods exposing the RID and SID values. Can be disabled. [jcbrand] +* #103 Option to display a call button in the chatbox toolbar, to allow third-party libraries to provide a calling feature. [Aupajo] * #108 Japanese Translations [mako09] * #111 OTR not working when using converse.js with prebinding. [jseidl, jcbrand] * #114 Hewbrew Translations [GreenLunar] diff --git a/docs/doctrees/index.doctree b/docs/doctrees/index.doctree index 3410f4be7e0d483c167111360f2c3098098fad45..9b34c9735f476b8efda538bb28ea17fc129ed0d6 100644 GIT binary patch literal 202410 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

    TejkPv=mr_P0nx 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 literal 196474 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 W2kvV^sG7#rOnl6szN09;{r>^M`R)k- diff --git a/docs/html/_sources/index.txt b/docs/html/_sources/index.txt index 58706f3dc..0682ab5a6 100644 --- a/docs/html/_sources/index.txt +++ b/docs/html/_sources/index.txt @@ -306,7 +306,6 @@ Facebook integration this myself. Feedback and patches from people who have succesfully done this will be appreciated. - Converse.js uses `Strophe.js `_ to connect and communicate with the XMPP server. One nice thing about Strophe.js is that it can be extended via `plugins `_. @@ -748,6 +747,14 @@ For each room on the server a query is made to fetch further details (e.g. features, number of occupants etc.), so on servers with many rooms this option will create lots of extra connection traffic. +auto_reconnect +-------------- + +Default = ``true`` + +Automatically reconnect to the XMPP server if the connection drops +unexpectedly. + auto_subscribe -------------- @@ -763,6 +770,30 @@ a middle man between HTTP and XMPP. See `here `_ for more information. +cache_otr_key +------------- + +Default = ``false`` + +Let the `OTR (Off-the-record encryption) `_ private +key be cached in your browser's session storage. + +The browser's session storage persists across page loads but is deleted once +the tab or window is closed. + +If this option is set to ``false``, a new OTR private key will be generated +for each page load. While more inconvenient, this is a much more secure option. + +This setting can only be used together with ``allow_otr = true``. + + +.. Note :: + A browser window's session storage is accessible by all javascript that + is served from the same domain. So if there is malicious javascript served by + the same server (or somehow injected via an attacker), then they will be able + to retrieve your private key and read your all the chat messages in your + current session. Previous sessions however cannot be decrypted. + debug ----- diff --git a/docs/html/index.html b/docs/html/index.html index 9321faef6..cf981d5a1 100644 --- a/docs/html/index.html +++ b/docs/html/index.html @@ -114,30 +114,32 @@

  • allow_muc
  • animate
  • auto_list_rooms
  • -
  • auto_subscribe
  • -
  • bosh_service_url
  • -
  • debug
  • -
  • fullname
  • -
  • hide_muc_server
  • -
  • i18n
  • -
  • prebind
  • -
  • show_controlbox_by_default
  • -
  • show_call_button
  • -
  • show_only_online_users
  • -
  • use_vcards
  • -
  • xhr_custom_status
  • -
  • xhr_custom_status_url
  • -
  • xhr_user_search
  • -
  • xhr_user_search_url
  • +
  • auto_reconnect
  • +
  • auto_subscribe
  • +
  • bosh_service_url
  • +
  • cache_otr_key
  • +
  • debug
  • +
  • fullname
  • +
  • hide_muc_server
  • +
  • i18n
  • +
  • prebind
  • +
  • show_controlbox_by_default
  • +
  • show_call_button
  • +
  • show_only_online_users
  • +
  • use_vcards
  • +
  • xhr_custom_status
  • +
  • xhr_custom_status_url
  • +
  • xhr_user_search
  • +
  • xhr_user_search_url
  • -
  • Minification
    @@ -182,7 +184,7 @@ practical.

    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: `Pre-binding and Single Session Support`_.

    +

    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 that.

    @@ -729,41 +731,66 @@ multi-user chat, then a list of rooms on that server will be fetched.

    features, number of occupants etc.), so on servers with many rooms this option will create lots of extra connection traffic.

    +
    +

    auto_reconnect

    +

    Default = true

    +

    Automatically reconnect to the XMPP server if the connection drops +unexpectedly.

    +
    -

    auto_subscribe

    +

    auto_subscribe

    Default = false

    If true, the user will automatically subscribe back to any contact requests.

    -

    bosh_service_url

    +

    bosh_service_url

    Connections to an XMPP server depend on a BOSH connection manager which acts as a middle man between HTTP and XMPP.

    See here for more information.

    +
    +

    cache_otr_key

    +

    Default = false

    +

    Let the OTR (Off-the-record encryption) private +key be cached in your browser’s session storage.

    +

    The browser’s session storage persists across page loads but is deleted once +the tab or window is closed.

    +

    If this option is set to false, a new OTR private key will be generated +for each page load. While more inconvenient, this is a much more secure option.

    +

    This setting can only be used together with allow_otr = true.

    +
    +

    Note

    +

    A browser window’s session storage is accessible by all javascript that +is served from the same domain. So if there is malicious javascript served by +the same server (or somehow injected via an attacker), then they will be able +to retrieve your private key and read your all the chat messages in your +current session. Previous sessions however cannot be decrypted.

    +
    +
    -

    debug

    +

    debug

    Default = false

    If set to true, debugging output will be logged to the browser console.

    -

    fullname

    +

    fullname

    If you are using prebinding, can specify the fullname of the currently logged in user, otherwise the user’s vCard will be fetched.

    -

    hide_muc_server

    +

    hide_muc_server

    Default = false

    Hide the server input field of the form inside the Room panel of the controlbox. Useful if you want to restrict users to a specific XMPP server of your choosing.

    -

    i18n

    +

    i18n

    Specify the locale/language. The language must be in the locales object. Refer to ./locale/locales.js to see which locales are supported.

    -

    prebind

    +

    prebind

    Default = false

    Use this option when you want to attach to an existing XMPP connection that was already authenticated (usually on the backend before page load).

    @@ -776,7 +803,7 @@ values as jid, Additionally, you have to specify bosh_service_url.

    -

    show_controlbox_by_default

    +

    show_controlbox_by_default

    Default = false

    The “controlbox” refers to the special chatbox containing your contacts roster, status widget, chatrooms and other controls.

    @@ -786,7 +813,7 @@ the page with class toggle-online-users.

    page load.

    -

    show_call_button

    +

    show_call_button

    Default = false

    Enable to display a call button on the chatbox toolbar.

    When the call button is pressed, it will emit an event that can be used by a third-party library to initiate a call.

    @@ -800,20 +827,20 @@ page load.

    -

    show_only_online_users

    +

    show_only_online_users

    Default = false

    If set to true, only online users will be shown in the contacts roster. Users with any other status (e.g. away, busy etc.) will not be shown.

    -

    use_vcards

    +

    use_vcards

    Default = true

    Determines whether the XMPP server will be queried for roster contacts’ VCards or not. VCards contain extra personal information such as your fullname and avatar image.

    -

    xhr_custom_status

    +

    xhr_custom_status

    Default = false

    Note

    @@ -823,7 +850,7 @@ avatar image.

    remote server.

    -

    xhr_custom_status_url

    +

    xhr_custom_status_url

    Note

    XHR stands for XMLHTTPRequest, and is meant here in the AJAX sense (Asynchronous Javascript and XML).

    @@ -835,7 +862,7 @@ message will be made.

    The message itself is sent in the request under the key msg.

  • bosh_service_url
  • cache_otr_key
  • debug
  • -
  • fullname
  • -
  • hide_muc_server
  • -
  • i18n
  • -
  • prebind
  • -
  • show_controlbox_by_default
  • -
  • show_call_button
  • -
  • show_only_online_users
  • -
  • use_vcards
  • -
  • xhr_custom_status
  • -
  • xhr_custom_status_url
  • -
  • xhr_user_search
  • -
  • xhr_user_search_url
  • +
  • expose_rid_and_sid
  • +
  • fullname
  • +
  • hide_muc_server
  • +
  • i18n
  • +
  • prebind
  • +
  • show_controlbox_by_default
  • +
  • show_call_button
  • +
  • show_only_online_users
  • +
  • use_otr_by_default
  • +
  • use_vcards
  • +
  • xhr_custom_status
  • +
  • xhr_custom_status_url
  • +
  • xhr_user_search
  • +
  • xhr_user_search_url
  • -
  • Minification
    @@ -184,7 +186,7 @@ practical.

    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: `Pre-binding and Single Session Support`_.

    +

    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 that.

    @@ -772,25 +774,33 @@ current session. Previous sessions however cannot be decrypted.

    Default = false

    If set to true, debugging output will be logged to the browser console.

    +
    +

    expose_rid_and_sid

    +

    Allow the prebind tokens, RID (request ID) and SID (session ID), to be exposed +globally via the API. This allows other scripts served on the same page to use +these values.

    +

    Beware: a malicious script could use these tokens to assume your identity +and inject fake chat messages.

    +
    -

    fullname

    +

    fullname

    If you are using prebinding, can specify the fullname of the currently logged in user, otherwise the user’s vCard will be fetched.

    -

    hide_muc_server

    +

    hide_muc_server

    Default = false

    Hide the server input field of the form inside the Room panel of the controlbox. Useful if you want to restrict users to a specific XMPP server of your choosing.

    -

    i18n

    +

    i18n

    Specify the locale/language. The language must be in the locales object. Refer to ./locale/locales.js to see which locales are supported.

    -

    prebind

    +

    prebind

    Default = false

    Use this option when you want to attach to an existing XMPP connection that was already authenticated (usually on the backend before page load).

    @@ -803,7 +813,7 @@ values as jid, Additionally, you have to specify bosh_service_url.

    -

    show_controlbox_by_default

    +

    show_controlbox_by_default

    Default = false

    The “controlbox” refers to the special chatbox containing your contacts roster, status widget, chatrooms and other controls.

    @@ -813,7 +823,7 @@ the page with class toggle-online-users.

    page load.

    -

    show_call_button

    +

    show_call_button

    Default = false

    Enable to display a call button on the chatbox toolbar.

    When the call button is pressed, it will emit an event that can be used by a third-party library to initiate a call.

    @@ -827,20 +837,26 @@ page load.

    -

    show_only_online_users

    +

    show_only_online_users

    Default = false

    If set to true, only online users will be shown in the contacts roster. Users with any other status (e.g. away, busy etc.) will not be shown.

    +
    +

    use_otr_by_default

    +

    Default = false

    +

    If set to true, Converse.js will automatically try to initiate an OTR (off-the-record) +encrypted chat session every time you open a chat box.

    +
    -

    use_vcards

    +

    use_vcards

    Default = true

    Determines whether the XMPP server will be queried for roster contacts’ VCards or not. VCards contain extra personal information such as your fullname and avatar image.

    -

    xhr_custom_status

    +

    xhr_custom_status

    Default = false

    Note

    @@ -850,7 +866,7 @@ avatar image.

    remote server.

    -

    xhr_custom_status_url

    +

    xhr_custom_status_url

    Note

    XHR stands for XMLHTTPRequest, and is meant here in the AJAX sense (Asynchronous Javascript and XML).

    @@ -862,7 +878,7 @@ message will be made.

    The message itself is sent in the request under the key msg.