Просмотр исходного кода

Improved logic for translations

Valeria Titova 4 лет назад
Родитель
Сommit
7525f397dd

+ 0 - 9
bash/translations.sh

@@ -1,9 +0,0 @@
-#! /bin/bash
-# script for fast updating translations
-
-
-cd ../../xabber-translations
-git pull origin
-cp -R ./values  ../xabber-web/translations
-cd ../xabber-web/translations
-node xml_to_json.js

+ 3 - 0
bash/updateIcons.sh

@@ -0,0 +1,3 @@
+#! /bin/bash
+# script for fast updating icons
+

+ 5 - 0
bash/updateTranslations.sh

@@ -0,0 +1,5 @@
+#! /bin/bash
+# script for fast updating translations
+
+cd ../translations
+node loadTranslations.js

+ 1 - 0
package.json

@@ -41,6 +41,7 @@
     "strophe.js": "~1.2.13",
     "strophejs-plugins": "0.0.7",
     "underscore": "~1.8.3",
+    "unzip": "^0.1.11",
     "wavesurfer": ">0.0.0"
   }
 }

+ 2 - 0
src/constants.js

@@ -139,6 +139,8 @@ var constants = {
         PUBSUB_AVATAR: 1
     },
 
+    EMAIL_FOR_JOIN_TRANSLATION: "info@xabber.com",
+
     AVATAR_SIZES: {
         TOOLBAR_ACCOUNT_ITEM:           32,
         SETTINGS_ACCOUNT_ITEM:          32,

+ 9 - 0
src/core.js

@@ -25,6 +25,7 @@
             this.env = env;
             this.fetchURLParams();
             this.cleanUpStorage();
+            this.initDefaultLanguage();
             this.detectMediaDevices();
             window.navigator.mediaDevices && (window.navigator.mediaDevices.ondevicechange = this.detectMediaDevices.bind(this));
             this._settings = new this.Settings({id: 'settings'},
@@ -41,6 +42,14 @@
             this._version_interval = setInterval(this.readActualVersion.bind(this), 600000);
         },
 
+        initDefaultLanguage: function () {
+            let lang = window.navigator.language,
+                progress = Object.keys(client_translation_progress).find(key => !lang.indexOf(key)) || constants.languages_another_locales[lang] && Object.keys(client_translation_progress).find(key => !constants.languages_another_locales[lang].indexOf(key));
+            if (progress != 100)
+                lang = 'en';
+            this.set("default_language", lang);
+        },
+
         loadTranslations: async function () {
             return new Promise((resolve, reject) => {
                 if (this.settings.language == 'default' || this.settings.language == 'en') {

+ 28 - 1
src/views.js

@@ -1347,6 +1347,7 @@ define("xabber-views", function () {
                     .prop('checked', true);
             this.$(`.languages-list input[type=radio][name=language][value="${settings.language}"]`)
                 .prop('checked', true);
+            this.updateDescription();
             this.updateBackgroundSetting();
             this.updateColor();
             this.updateMainColor();
@@ -1578,12 +1579,38 @@ define("xabber-views", function () {
 
         changeLanguage: function (ev) {
             let value = ev.target.value;
-            this.model.save('language', value);
             utils.dialogs.ask(xabber.getString("settings__dialog_change_language__header"), xabber.getString("settings__dialog_change_language__confirm"), null, { ok_button_text: xabber.getString("settings__dialog_change_language__button_change")}).done((result) => {
                 if (result) {
+                    this.model.save('language', value);
                     window.location.reload(true);
+                } else {
+                    this.$(`.languages-list input[type=radio][name=language][value="${this.model.get('language')}"]`)
+                        .prop('checked', true);
                 }
             });
+        },
+
+        updateDescription: function () {
+            let lang = this.model.get('language'),
+                progress = Object.keys(client_translation_progress).find(key => !lang.indexOf(key)) || constants.languages_another_locales[lang] && Object.keys(client_translation_progress).find(key => !constants.languages_another_locales[lang].indexOf(key));
+            (lang == 'default' || lang == 'en') && (progress = 100);
+            if (!_.isUndefined(progress)) {
+                let progress_text, platform_text;
+                if (progress == 100) {
+                    progress_text = xabber.getString("settings__interface_language__text_description_full_translation", [constants.SHORT_CLIENT_NAME, constants.SHORT_CLIENT_NAME]);
+                    platform_text = xabber.getString("settings__interface_language__text_description_full_translation_platform",
+                        [`<a target="_blank" href='${xabber.getString("settings__section_interface_language__text_description___link")}'>${xabber.getString("settings__section_interface_language__text_description__text_link")}</a>`]);
+                } else if (progress == 0) {
+                    progress_text = xabber.getString("settings__section_interface_language__text_description_no_translations", [constants.SHORT_CLIENT_NAME, constants.SHORT_CLIENT_NAME]);
+                    platform_text = xabber.getString("settings__interface_language__text_description_no_translation_platform",
+                            [`<a target="_blank" href='${xabber.getString("settings__section_interface_language__text_description___link")}'>${xabber.getString("settings__section_interface_language__text_description__text_link")}</a>`]);
+                } else {
+                    progress_text = xabber.getString("settings__interface_language__text_description_unfull_translation", [constants.SHORT_CLIENT_NAME, constants.SHORT_CLIENT_NAME]);
+                    platform_text = xabber.getString("settings__section_interface_language__text_description_translation_platform",
+                        [`<a target="_blank" href='${xabber.getString("settings__section_interface_language__text_description___link")}'>${xabber.getString("settings__section_interface_language__text_description__text_link")}</a>`, constants.EMAIL_FOR_JOIN_TRANSLATION]);
+                }
+                this.$('.description').html(`${progress_text}<br><br>${platform_text}`);
+            }
         }
     });
 

+ 3 - 7
templates/base/settings.html

@@ -330,14 +330,14 @@
 
                 <div class="settings-block-wrap interface_language">
                     <div class="block-header">
-                        <span class="block-name">{[print(xabber.getString("settings__menu_item__interface_language"))]}</span>
+                        <span class="block-name">{[print(xabber.getString("settings__menu_item__interface_language", [xabber.get("default_language")]))]}</span>
                     </div>
                     <div class="setting interface-language-setting">
                         <div class="languages-list field radio-field clickable-field">
                             <form action="#">
                                 <div class="language-item">
                                     <input class="with-gap" name="language" value="default" type="radio" id="{{view.cid}}-default" />
-                                    <label for="{{view.cid}}-default">{[print(xabber.getString("settings__languages_list___item_default"))]}</label>
+                                    <label for="{{view.cid}}-default">{[print(xabber.getString("settings__languages_list___item_default", [languages[xabber.get("default_language") || 'en']]))]}</label>
                                 </div>
                                 {[for (let lang in constants.languages) { if (!lang) continue;]}
                                 <div class="language-item">
@@ -349,11 +349,7 @@
                                 {[}]}
                             </form>
                         </div>
-                        <div class="description">
-                            {[print(xabber.getString("settings__section_interface_language__text_description_no_translations", [constants.SHORT_CLIENT_NAME, constants.SHORT_CLIENT_NAME, constants.SHORT_CLIENT_NAME]))]}<br><br>
-                            {[print(xabber.getString("settings__section_interface_language__text_description_translation_platform",
-                            [`<a target="_blank" href='${xabber.getString("settings__section_interface_language__text_description___link")}'>${xabber.getString("settings__section_interface_language__text_description__text_link")}</a>`]))]}
-                        </div>
+                        <div class="description"></div>
                     </div>
                 </div>
             </div>

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
translations/ar-rSA.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
translations/cs-rCZ.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
translations/de-rDE.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
translations/el-rGR.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
translations/en_lang.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
translations/es-rES.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
translations/hy-rAM.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
translations/in-rID.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
translations/it-rIT.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
translations/ku-rTR.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
translations/ky-rKG.js


+ 0 - 0
translations/xml_to_json.js → translations/loadTranslations.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
translations/zh-rCN.js


Некоторые файлы не были показаны из-за большого количества измененных файлов