浏览代码

Add support of language tags composed of multiple sub-tags

Bubka 4 月之前
父节点
当前提交
cd038384eb
共有 59 个文件被更改,包括 226 次插入109 次删除
  1. 12 5
      app/Http/Middleware/SetLanguage.php
  2. 11 6
      config/2fauth.php
  3. 7 5
      crowdin.yml
  4. 1 1
      resources/js/app.js
  5. 15 2
      resources/js/stores/user.js
  6. 10 5
      resources/lang/ar/languages.php
  7. 10 5
      resources/lang/bg/languages.php
  8. 10 5
      resources/lang/da/languages.php
  9. 10 5
      resources/lang/de/languages.php
  10. 0 0
      resources/lang/es-ES/admin.php
  11. 0 0
      resources/lang/es-ES/auth.php
  12. 0 0
      resources/lang/es-ES/commons.php
  13. 0 0
      resources/lang/es-ES/errors.php
  14. 0 0
      resources/lang/es-ES/groups.php
  15. 10 5
      resources/lang/es-ES/languages.php
  16. 0 0
      resources/lang/es-ES/notifications.php
  17. 0 0
      resources/lang/es-ES/pagination.php
  18. 0 0
      resources/lang/es-ES/passwords.php
  19. 0 0
      resources/lang/es-ES/settings.php
  20. 0 0
      resources/lang/es-ES/titles.php
  21. 0 0
      resources/lang/es-ES/twofaccounts.php
  22. 0 0
      resources/lang/es-ES/validation.php
  23. 10 5
      resources/lang/fr/languages.php
  24. 10 5
      resources/lang/hi/languages.php
  25. 10 5
      resources/lang/id/languages.php
  26. 10 5
      resources/lang/it/languages.php
  27. 10 5
      resources/lang/ja/languages.php
  28. 10 5
      resources/lang/ko/languages.php
  29. 10 5
      resources/lang/nl/languages.php
  30. 10 5
      resources/lang/pl/languages.php
  31. 0 0
      resources/lang/pt-BR/admin.php
  32. 0 0
      resources/lang/pt-BR/auth.php
  33. 0 0
      resources/lang/pt-BR/commons.php
  34. 0 0
      resources/lang/pt-BR/errors.php
  35. 0 0
      resources/lang/pt-BR/groups.php
  36. 10 5
      resources/lang/pt-BR/languages.php
  37. 0 0
      resources/lang/pt-BR/notifications.php
  38. 0 0
      resources/lang/pt-BR/pagination.php
  39. 0 0
      resources/lang/pt-BR/passwords.php
  40. 0 0
      resources/lang/pt-BR/settings.php
  41. 0 0
      resources/lang/pt-BR/titles.php
  42. 0 0
      resources/lang/pt-BR/twofaccounts.php
  43. 0 0
      resources/lang/pt-BR/validation.php
  44. 10 5
      resources/lang/ru/languages.php
  45. 10 5
      resources/lang/tr/languages.php
  46. 10 5
      resources/lang/uk/languages.php
  47. 0 0
      resources/lang/zh-CN/admin.php
  48. 0 0
      resources/lang/zh-CN/auth.php
  49. 0 0
      resources/lang/zh-CN/commons.php
  50. 0 0
      resources/lang/zh-CN/errors.php
  51. 0 0
      resources/lang/zh-CN/groups.php
  52. 10 5
      resources/lang/zh-CN/languages.php
  53. 0 0
      resources/lang/zh-CN/notifications.php
  54. 0 0
      resources/lang/zh-CN/pagination.php
  55. 0 0
      resources/lang/zh-CN/passwords.php
  56. 0 0
      resources/lang/zh-CN/settings.php
  57. 0 0
      resources/lang/zh-CN/titles.php
  58. 0 0
      resources/lang/zh-CN/twofaccounts.php
  59. 0 0
      resources/lang/zh-CN/validation.php

+ 12 - 5
app/Http/Middleware/SetLanguage.php

@@ -33,13 +33,12 @@ class SetLanguage
                 array_diff(explode(',', $accepted), ['*']),
                 function ($langs, $langItem) {
                     [$langLong, $weight] = array_merge(explode(';q=', $langItem), [1]);
-                    $langShort           = substr($langLong, 0, 2);
-                    if (array_key_exists($langShort, $langs)) {
-                        if ($langs[$langShort] < $weight) {
-                            $langs[$langShort] = (float) $weight;
+                    if (array_key_exists($langLong, $langs)) {
+                        if ($langs[$langLong] < $weight) {
+                            $langs[$langLong] = (float) $weight;
                         }
                     } else {
-                        $langs[$langShort] = (float) $weight;
+                        $langs[$langLong] = (float) $weight;
                     }
 
                     return $langs;
@@ -56,6 +55,14 @@ class SetLanguage
                     $lang = $locale;
                     break;
                 }
+                // If the language tags pushed by the browser are composed of
+                // multiple subtags (ex: fr-FR) we need to retry but only with
+                // the "language subtag" (ex: fr)
+                $shortLocale = substr($locale, 0, 2);
+                if (in_array($shortLocale, $availableLocales)) {
+                    $lang = $shortLocale;
+                    break;
+                }
             }
         }
 

+ 11 - 6
config/2fauth.php

@@ -106,16 +106,21 @@ return [
     */
 
     'locales' => [
+        'bg',
+        'zh-CN',
+        'da',
+        'nl',
         'en',
         'fr',
         'de',
-        'zh',
-        'es',
-        'bg',
-        'ru',
-        'ja',
         'hi',
-        'tr'
+        'it',
+        'ja',
+        'ko',
+        'pt-BR',
+        'ru',
+        'es-ES',
+        'tr',
     ],
 
     /*

+ 7 - 5
crowdin.yml

@@ -113,11 +113,13 @@ files: [
   #
   # Often software projects have custom names for the directories where translations are placed. crowdin-cli allows you to map your own languages to be understandable by Crowdin.
   #
-  #"languages_mapping" : {
-  #  "two_letters_code" : {
-  #    "crowdin_language_code" : "local_name"
-  #   }
-  #},
+  "languages_mapping" : {
+   "two_letters_code" : {
+     "zh-CN" : "zh-CN",
+     "pt-BR" : "pt-BR",
+     "es-ES" : "es-ES",
+    }
+  },
 
   #
   # Does the first line contain header?

+ 1 - 1
resources/js/app.js

@@ -32,7 +32,7 @@ app.use(router)
 
 // Localization
 app.use(i18nVue, {
-    lang: document.documentElement.lang.substring(0, 2),
+    lang: document.documentElement.lang,
     resolve: async lang => {
         const langs = import.meta.glob('../lang/*.json');
         if (lang.includes('php_')) {

+ 15 - 2
resources/js/stores/user.js

@@ -118,11 +118,24 @@ export const useUserStore = defineStore({
          */
         applyLanguage() {
             const { isSupported, language } = useNavigatorLanguage()
+            let lang = 'en'
 
             if (isSupported) {
-                loadLanguageAsync(this.preferences.lang == 'browser' ? language.value.slice(0, 2)  : this.preferences.lang)
+                if (this.preferences.lang == 'browser') {
+                    if (this.$2fauth.langs.includes(language.value)) {
+                        lang = language.value
+                    }
+                    // If the language tag pushed by the browser is composed of
+                    // multiple subtags (ex: fr-FR) we need to retry but only with
+                    // the "language subtag" (ex: fr)
+                    else if (this.$2fauth.langs.includes(language.value.slice(0, 2))) {
+                        lang = language.value.slice(0, 2)
+                    }
+                }
+                else lang = this.preferences.lang
             }
-            else loadLanguageAsync('en')
+
+            loadLanguageAsync(lang)
         },
 
         /**

+ 10 - 5
resources/lang/ar/languages.php

@@ -13,12 +13,17 @@ return [
     'browser_preference' => 'Browser preference',
     'en' => 'English (English)',
     'fr' => 'Français (French)',
-    'de' => 'Deutsch (German)',
-    'es' => 'Español (Spanish)',
-    'zh' => '简体中文 (Chinese Simplified)',
-    'ru' => 'Русский (Russian)',
     'bg' => 'Български (Bulgarian)',
-    'ja' => '日本語 (Japanese)',
+    'zh-CN' => '简体中文 (Chinese Simplified)',
+    'da' => 'Dansk (Danish)',
+    'nl' => 'Nederlands (Dutch)',
+    'de' => 'Deutsch (German)',
     'hi' => 'हिंदी (Hindi)',
+    'it' => 'Italiano (Italian)',
+    'ja' => '日本語 (Japanese)',
+    'ko' => '한국어 (Korean)',
+    'pt-BR' => 'Português (Portuguese, Brazilian)',
+    'ru' => 'Русский (Russian)',
+    'es-ES' => 'Español (Spanish)',
     'tr' => 'Türkçe (Turkish)',
 ];

+ 10 - 5
resources/lang/bg/languages.php

@@ -13,12 +13,17 @@ return [
     'browser_preference' => 'По предпочитание на браузъра',
     'en' => 'English (Английски)',
     'fr' => 'Français (Френски)',
-    'de' => 'Deutsch (Немски)',
-    'es' => 'Español (Испански)',
-    'zh' => '简体中文 (Китайски опростен)',
-    'ru' => 'Русский (Руски)',
     'bg' => 'Български (Български)',
-    'ja' => '日本語 (японски)',
+    'zh-CN' => '简体中文 (Chinese Simplified)',
+    'da' => 'Dansk (Danish)',
+    'nl' => 'Nederlands (Dutch)',
+    'de' => 'Deutsch (Немски)',
     'hi' => 'हिंदी (Hindi)',
+    'it' => 'Italiano (Italian)',
+    'ja' => '日本語 (японски)',
+    'ko' => '한국어 (Korean)',
+    'pt-BR' => 'Português (Portuguese, Brazilian)',
+    'ru' => 'Русский (Руски)',
+    'es-ES' => 'Español (Spanish)',
     'tr' => 'Türkçe (Turkish)',
 ];

+ 10 - 5
resources/lang/da/languages.php

@@ -13,12 +13,17 @@ return [
     'browser_preference' => 'Browser præference',
     'en' => 'Engelsk (Engelsk)',
     'fr' => 'Fransk (Fransk)',
-    'de' => 'Deutsch (tysk)',
-    'es' => 'Spansk ol (spansk)',
-    'zh' => 'Kinesisk (Forenklet)',
-    'ru' => 'Русский (Russisk)',
     'bg' => 'Български (Bulgarian)',
-    'ja' => '日本語 (japansk)',
+    'zh-CN' => '简体中文 (Chinese Simplified)',
+    'da' => 'Dansk (Danish)',
+    'nl' => 'Nederlands (Dutch)',
+    'de' => 'Deutsch (tysk)',
     'hi' => '(Hindi)',
+    'it' => 'Italiano (Italian)',
+    'ja' => '日本語 (japansk)',
+    'ko' => '한국어 (Korean)',
+    'pt-BR' => 'Português (Portuguese, Brazilian)',
+    'ru' => 'Русский (Russisk)',
+    'es-ES' => 'Español (Spanish)',
     'tr' => 'Tujórkcře (tyrkisk)',
 ];

+ 10 - 5
resources/lang/de/languages.php

@@ -13,12 +13,17 @@ return [
     'browser_preference' => 'Browsereinstellung',
     'en' => 'English (Englisch)',
     'fr' => 'Français (Französisch)',
-    'de' => 'Deutsch (Deutsch)',
-    'es' => 'Español (Spanisch)',
-    'zh' => '简体中文 (Vereinfachtes Chinesisch)',
-    'ru' => 'Русский (Russisch)',
     'bg' => 'Български (Bulgarisch)',
-    'ja' => '日本語 (Japanisch)',
+    'zh-CN' => '简体中文 (Chinese Simplified)',
+    'da' => 'Dansk (Danish)',
+    'nl' => 'Nederlands (Dutch)',
+    'de' => 'Deutsch (Deutsch)',
     'hi' => 'हिंदी (Hindi)',
+    'it' => 'Italiano (Italian)',
+    'ja' => '日本語 (Japanisch)',
+    'ko' => '한국어 (Korean)',
+    'pt-BR' => 'Português (Portuguese, Brazilian)',
+    'ru' => 'Русский (Russisch)',
+    'es-ES' => 'Español (Spanish)',
     'tr' => 'Türkçe (Turkish)',
 ];

+ 0 - 0
resources/lang/es/admin.php → resources/lang/es-ES/admin.php


+ 0 - 0
resources/lang/es/auth.php → resources/lang/es-ES/auth.php


+ 0 - 0
resources/lang/es/commons.php → resources/lang/es-ES/commons.php


+ 0 - 0
resources/lang/es/errors.php → resources/lang/es-ES/errors.php


+ 0 - 0
resources/lang/es/groups.php → resources/lang/es-ES/groups.php


+ 10 - 5
resources/lang/es/languages.php → resources/lang/es-ES/languages.php

@@ -13,12 +13,17 @@ return [
     'browser_preference' => 'Preferencia del navegador',
     'en' => 'English (Inglés)',
     'fr' => 'Français (Francés)',
-    'de' => 'Deutsch (Alemán)',
-    'es' => 'Español',
-    'zh' => '简体中文 (Chino Simplificado)',
-    'ru' => 'Русский (ruso)',
     'bg' => 'Български (Búlgaro)',
-    'ja' => '日本語 (Japonés)',
+    'zh-CN' => '简体中文 (Chinese Simplified)',
+    'da' => 'Dansk (Danish)',
+    'nl' => 'Nederlands (Dutch)',
+    'de' => 'Deutsch (Alemán)',
     'hi' => 'हिंदी (Hindi)',
+    'it' => 'Italiano (Italian)',
+    'ja' => '日本語 (Japonés)',
+    'ko' => '한국어 (Korean)',
+    'pt-BR' => 'Português (Portuguese, Brazilian)',
+    'ru' => 'Русский (ruso)',
+    'es-ES' => 'Español (Spanish)',
     'tr' => 'Türkçe (Turkish)',
 ];

+ 0 - 0
resources/lang/es/notifications.php → resources/lang/es-ES/notifications.php


+ 0 - 0
resources/lang/es/pagination.php → resources/lang/es-ES/pagination.php


+ 0 - 0
resources/lang/es/passwords.php → resources/lang/es-ES/passwords.php


+ 0 - 0
resources/lang/es/settings.php → resources/lang/es-ES/settings.php


+ 0 - 0
resources/lang/es/titles.php → resources/lang/es-ES/titles.php


+ 0 - 0
resources/lang/es/twofaccounts.php → resources/lang/es-ES/twofaccounts.php


+ 0 - 0
resources/lang/es/validation.php → resources/lang/es-ES/validation.php


+ 10 - 5
resources/lang/fr/languages.php

@@ -13,12 +13,17 @@ return [
     'browser_preference' => 'Préférence du navigateur',
     'en' => 'English (Anglais)',
     'fr' => 'Français (Français)',
-    'de' => 'Deutsch (Allemand)',
-    'es' => 'Español (Espagnol)',
-    'zh' => '简体中文 (Chinois simplifié)',
-    'ru' => 'Русский (russe)',
     'bg' => 'Български (Bulgare)',
-    'ja' => '日本語 (Japonais)',
+    'zh-CN' => '简体中文 (Chinois simplifié)',
+    'da' => 'Dansk (Danois)',
+    'nl' => 'Nederlands (Néerlandais)',
+    'de' => 'Deutsch (Allemand)',
     'hi' => 'हिंदी (Hindi)',
+    'it' => 'Italiano (Italien)',
+    'ja' => '日本語 (Japonais)',
+    'ko' => '한국어 (Coréen)',
+    'pt-BR' => 'Português (Portugais, Brésilien)',
+    'ru' => 'Русский (russe)',
+    'es-ES' => 'Español (Espagnol)',
     'tr' => 'Türkçe (Turc)',
 ];

+ 10 - 5
resources/lang/hi/languages.php

@@ -13,12 +13,17 @@ return [
     'browser_preference' => 'ब्राउज़र की प्राथमिकता',
     'en' => 'English (इंग्लिश)',
     'fr' => 'Français (फ्रेंच)',
-    'de' => 'Deutsch (जर्मन)',
-    'es' => 'Español (स्पैनिश)',
-    'zh' => '简体中文 (सामान्य चीनी)',
-    'ru' => 'Русский (रशिअन)',
     'bg' => 'Български (बुल्गेरियन)',
-    'ja' => '日本語 (जापानी)',
+    'zh-CN' => '简体中文 (Chinese Simplified)',
+    'da' => 'Dansk (Danish)',
+    'nl' => 'Nederlands (Dutch)',
+    'de' => 'Deutsch (जर्मन)',
     'hi' => 'हिंदी (हिंदी)',
+    'it' => 'Italiano (Italian)',
+    'ja' => '日本語 (जापानी)',
+    'ko' => '한국어 (Korean)',
+    'pt-BR' => 'Português (Portuguese, Brazilian)',
+    'ru' => 'Русский (रशिअन)',
+    'es-ES' => 'Español (Spanish)',
     'tr' => 'Türkçe (Turkish)',
 ];

+ 10 - 5
resources/lang/id/languages.php

@@ -13,12 +13,17 @@ return [
     'browser_preference' => 'Preferensi perambaan',
     'en' => 'English (English)',
     'fr' => 'Français (French)',
-    'de' => 'Deutsch (German)',
-    'es' => 'Español (Spanish)',
-    'zh' => '简体中文 (Chinese Simplified)',
-    'ru' => 'Русский (Russian)',
     'bg' => 'Български (Bulgarian)',
-    'ja' => '日本語 (Japanese)',
+    'zh-CN' => '简体中文 (Chinese Simplified)',
+    'da' => 'Dansk (Danish)',
+    'nl' => 'Nederlands (Dutch)',
+    'de' => 'Deutsch (German)',
     'hi' => 'हिंदी (Hindi)',
+    'it' => 'Italiano (Italian)',
+    'ja' => '日本語 (Japanese)',
+    'ko' => '한국어 (Korean)',
+    'pt-BR' => 'Português (Portuguese, Brazilian)',
+    'ru' => 'Русский (Russian)',
+    'es-ES' => 'Español (Spanish)',
     'tr' => 'Türkçe (Turkish)',
 ];

+ 10 - 5
resources/lang/it/languages.php

@@ -13,12 +13,17 @@ return [
     'browser_preference' => 'Preferenza del browser',
     'en' => 'English (Inglese)',
     'fr' => 'Français (Francese)',
-    'de' => 'Deutsch (Tedesco)',
-    'es' => 'Español (Spagnolo)',
-    'zh' => '简体中文 (Cinese Semplificato)',
-    'ru' => 'Русский (russo)',
     'bg' => 'Български (Bulgarian)',
-    'ja' => '日本語 (Giapponese)',
+    'zh-CN' => '简体中文 (Chinese Simplified)',
+    'da' => 'Dansk (Danish)',
+    'nl' => 'Nederlands (Dutch)',
+    'de' => 'Deutsch (Tedesco)',
     'hi' => 'हिंदी (Hindi)',
+    'it' => 'Italiano (Italian)',
+    'ja' => '日本語 (Giapponese)',
+    'ko' => '한국어 (Korean)',
+    'pt-BR' => 'Português (Portuguese, Brazilian)',
+    'ru' => 'Русский (russo)',
+    'es-ES' => 'Español (Spanish)',
     'tr' => 'Türkçe (Turco)',
 ];

+ 10 - 5
resources/lang/ja/languages.php

@@ -13,12 +13,17 @@ return [
     'browser_preference' => 'ブラウザの設定',
     'en' => 'English (英語)',
     'fr' => 'Français (フランス語)',
-    'de' => 'Deutsch (ドイツ語)',
-    'es' => 'Español (スペイン語)',
-    'zh' => '简体中文 (簡体字中国語)',
-    'ru' => 'Русский (ロシア語)',
     'bg' => 'Български (ブルガリア語)',
-    'ja' => '日本語 (日本語)',
+    'zh-CN' => '简体中文 (Chinese Simplified)',
+    'da' => 'Dansk (Danish)',
+    'nl' => 'Nederlands (Dutch)',
+    'de' => 'Deutsch (ドイツ語)',
     'hi' => 'हिंदी (ヒンディー語)',
+    'it' => 'Italiano (Italian)',
+    'ja' => '日本語 (日本語)',
+    'ko' => '한국어 (Korean)',
+    'pt-BR' => 'Português (Portuguese, Brazilian)',
+    'ru' => 'Русский (ロシア語)',
+    'es-ES' => 'Español (Spanish)',
     'tr' => 'Türkçe (トルコ語)',
 ];

+ 10 - 5
resources/lang/ko/languages.php

@@ -13,12 +13,17 @@ return [
     'browser_preference' => '브라우저 설정',
     'en' => 'English (영어)',
     'fr' => 'Français (프랑스어)',
-    'de' => 'Deutsch (독일어)',
-    'es' => 'Español (스페인어)',
-    'zh' => '简体中文 (중국어 간체)',
-    'ru' => 'Pусский (러시아어)',
     'bg' => 'Български (불가리아어)',
-    'ja' => '日本語 (일본어)',
+    'zh-CN' => '简体中文 (Chinese Simplified)',
+    'da' => 'Dansk (Danish)',
+    'nl' => 'Nederlands (Dutch)',
+    'de' => 'Deutsch (독일어)',
     'hi' => 'हिंदी (힌디어)',
+    'it' => 'Italiano (Italian)',
+    'ja' => '日本語 (일본어)',
+    'ko' => '한국어 (Korean)',
+    'pt-BR' => 'Português (Portuguese, Brazilian)',
+    'ru' => 'Pусский (러시아어)',
+    'es-ES' => 'Español (Spanish)',
     'tr' => 'Türkçe (튀르키예어)',
 ];

+ 10 - 5
resources/lang/nl/languages.php

@@ -13,12 +13,17 @@ return [
     'browser_preference' => 'Browser voorkeuren',
     'en' => 'Engels (English)',
     'fr' => 'Frans (French)',
-    'de' => 'Duits (Deutsch)',
-    'es' => 'Spaans (Español)',
-    'zh' => 'Chinees (Vereenvoudigd Chinees)',
-    'ru' => 'Русский (Russisch)',
     'bg' => 'Български (Bulgarian)',
-    'ja' => '日本語 (Japans)',
+    'zh-CN' => '简体中文 (Chinese Simplified)',
+    'da' => 'Dansk (Danish)',
+    'nl' => 'Nederlands (Dutch)',
+    'de' => 'Duits (Deutsch)',
     'hi' => 'barometertels ½ (Hindi)',
+    'it' => 'Italiano (Italian)',
+    'ja' => '日本語 (Japans)',
+    'ko' => '한국어 (Korean)',
+    'pt-BR' => 'Português (Portuguese, Brazilian)',
+    'ru' => 'Русский (Russisch)',
+    'es-ES' => 'Español (Spanish)',
     'tr' => 'Turk (Turks)',
 ];

+ 10 - 5
resources/lang/pl/languages.php

@@ -13,12 +13,17 @@ return [
     'browser_preference' => 'Preferencje przeglądarki',
     'en' => 'Angielski (język angielski)',
     'fr' => 'Français (French)',
-    'de' => 'Deutsch (German)',
-    'es' => 'Español (Spanish)',
-    'zh' => '简体中文 (Chinese Simplified)',
-    'ru' => 'Русский (Russian)',
     'bg' => 'Български (Bulgarian)',
-    'ja' => '日本語 (Japanese)',
+    'zh-CN' => '简体中文 (Chinese Simplified)',
+    'da' => 'Dansk (Danish)',
+    'nl' => 'Nederlands (Dutch)',
+    'de' => 'Deutsch (German)',
     'hi' => 'हिंदी (Hindi)',
+    'it' => 'Italiano (Italian)',
+    'ja' => '日本語 (Japanese)',
+    'ko' => '한국어 (Korean)',
+    'pt-BR' => 'Português (Portuguese, Brazilian)',
+    'ru' => 'Русский (Russian)',
+    'es-ES' => 'Español (Spanish)',
     'tr' => 'Türkçe (Turkish)',
 ];

+ 0 - 0
resources/lang/pt/admin.php → resources/lang/pt-BR/admin.php


+ 0 - 0
resources/lang/pt/auth.php → resources/lang/pt-BR/auth.php


+ 0 - 0
resources/lang/pt/commons.php → resources/lang/pt-BR/commons.php


+ 0 - 0
resources/lang/pt/errors.php → resources/lang/pt-BR/errors.php


+ 0 - 0
resources/lang/pt/groups.php → resources/lang/pt-BR/groups.php


+ 10 - 5
resources/lang/pt/languages.php → resources/lang/pt-BR/languages.php

@@ -13,12 +13,17 @@ return [
     'browser_preference' => 'Padrão do navegador',
     'en' => 'English (Inglês)',
     'fr' => 'Français (Francês)',
-    'de' => 'Deutsch (Alemão)',
-    'es' => 'Español (Espanhol)',
-    'zh' => '简体中文 (Chinês Simplificado)',
-    'ru' => 'Русский (Russo)',
     'bg' => 'Български (Búlgaro)',
-    'ja' => '日本語 (Japonês)',
+    'zh-CN' => '简体中文 (Chinese Simplified)',
+    'da' => 'Dansk (Danish)',
+    'nl' => 'Nederlands (Dutch)',
+    'de' => 'Deutsch (Alemão)',
     'hi' => 'हिंदी (Indiano)',
+    'it' => 'Italiano (Italian)',
+    'ja' => '日本語 (Japonês)',
+    'ko' => '한국어 (Korean)',
+    'pt-BR' => 'Português (Portuguese, Brazilian)',
+    'ru' => 'Русский (Russo)',
+    'es-ES' => 'Español (Spanish)',
     'tr' => 'Türkçe (Turco)',
 ];

+ 0 - 0
resources/lang/pt/notifications.php → resources/lang/pt-BR/notifications.php


+ 0 - 0
resources/lang/pt/pagination.php → resources/lang/pt-BR/pagination.php


+ 0 - 0
resources/lang/pt/passwords.php → resources/lang/pt-BR/passwords.php


+ 0 - 0
resources/lang/pt/settings.php → resources/lang/pt-BR/settings.php


+ 0 - 0
resources/lang/pt/titles.php → resources/lang/pt-BR/titles.php


+ 0 - 0
resources/lang/pt/twofaccounts.php → resources/lang/pt-BR/twofaccounts.php


+ 0 - 0
resources/lang/pt/validation.php → resources/lang/pt-BR/validation.php


+ 10 - 5
resources/lang/ru/languages.php

@@ -13,12 +13,17 @@ return [
     'browser_preference' => 'Настройки браузера',
     'en' => 'English (Английский)',
     'fr' => 'Français (Французский)',
-    'de' => 'Deutsch (Немецкий)',
-    'es' => 'Español (Испанский)',
-    'zh' => '简体中文 (Китайский упрощенный)',
-    'ru' => 'Русский (Русский)',
     'bg' => 'Български (Болгарский)',
-    'ja' => '日本語 (Японский)',
+    'zh-CN' => '简体中文 (Chinese Simplified)',
+    'da' => 'Dansk (Danish)',
+    'nl' => 'Nederlands (Dutch)',
+    'de' => 'Deutsch (Немецкий)',
     'hi' => 'हिंदी (Хинди)',
+    'it' => 'Italiano (Italian)',
+    'ja' => '日本語 (Японский)',
+    'ko' => '한국어 (Korean)',
+    'pt-BR' => 'Português (Portuguese, Brazilian)',
+    'ru' => 'Русский (Русский)',
+    'es-ES' => 'Español (Spanish)',
     'tr' => 'Türkçe (Турецкий)',
 ];

+ 10 - 5
resources/lang/tr/languages.php

@@ -13,12 +13,17 @@ return [
     'browser_preference' => 'Tarayıcı önayarı',
     'en' => 'English (İngilizce)',
     'fr' => 'Français (Fransızca)',
-    'de' => 'Deutsch (Almanca)',
-    'es' => 'Español (İspanyolca)',
-    'zh' => '简体中文 (Basitleştirilmiş Çince)',
-    'ru' => 'Русский (Rusça)',
     'bg' => 'Български (Bulgarca)',
-    'ja' => '日本語 (Japonca)',
+    'zh-CN' => '简体中文 (Chinese Simplified)',
+    'da' => 'Dansk (Danish)',
+    'nl' => 'Nederlands (Dutch)',
+    'de' => 'Deutsch (Almanca)',
     'hi' => 'हिंदी (Hintçe)',
+    'it' => 'Italiano (Italian)',
+    'ja' => '日本語 (Japonca)',
+    'ko' => '한국어 (Korean)',
+    'pt-BR' => 'Português (Portuguese, Brazilian)',
+    'ru' => 'Русский (Rusça)',
+    'es-ES' => 'Español (Spanish)',
     'tr' => 'Türkçe (Turkish)',
 ];

+ 10 - 5
resources/lang/uk/languages.php

@@ -13,12 +13,17 @@ return [
     'browser_preference' => 'Browser preference',
     'en' => 'English (English)',
     'fr' => 'Français (French)',
-    'de' => 'Deutsch (German)',
-    'es' => 'Español (Spanish)',
-    'zh' => '简体中文 (Chinese Simplified)',
-    'ru' => 'Русский (Russian)',
     'bg' => 'Български (Bulgarian)',
-    'ja' => '日本語 (Japanese)',
+    'zh-CN' => '简体中文 (Chinese Simplified)',
+    'da' => 'Dansk (Danish)',
+    'nl' => 'Nederlands (Dutch)',
+    'de' => 'Deutsch (German)',
     'hi' => 'हिंदी (Hindi)',
+    'it' => 'Italiano (Italian)',
+    'ja' => '日本語 (Japanese)',
+    'ko' => '한국어 (Korean)',
+    'pt-BR' => 'Português (Portuguese, Brazilian)',
+    'ru' => 'Русский (Russian)',
+    'es-ES' => 'Español (Spanish)',
     'tr' => 'Türkçe (Turkish)',
 ];

+ 0 - 0
resources/lang/zh/admin.php → resources/lang/zh-CN/admin.php


+ 0 - 0
resources/lang/zh/auth.php → resources/lang/zh-CN/auth.php


+ 0 - 0
resources/lang/zh/commons.php → resources/lang/zh-CN/commons.php


+ 0 - 0
resources/lang/zh/errors.php → resources/lang/zh-CN/errors.php


+ 0 - 0
resources/lang/zh/groups.php → resources/lang/zh-CN/groups.php


+ 10 - 5
resources/lang/zh/languages.php → resources/lang/zh-CN/languages.php

@@ -13,12 +13,17 @@ return [
     'browser_preference' => '跟随浏览器语言',
     'en' => 'English (英语)',
     'fr' => 'Français (法语)',
-    'de' => 'Deutsch (德语)',
-    'es' => 'Español (西班牙语)',
-    'zh' => '中文 (简体中文)',
-    'ru' => 'Русский (俄语)',
     'bg' => 'Български (保加利亚语)',
-    'ja' => '日本語 (日语)',
+    'zh-CN' => '简体中文 (Chinese Simplified)',
+    'da' => 'Dansk (Danish)',
+    'nl' => 'Nederlands (Dutch)',
+    'de' => 'Deutsch (德语)',
     'hi' => 'हिंदी (印地语)',
+    'it' => 'Italiano (Italian)',
+    'ja' => '日本語 (日语)',
+    'ko' => '한국어 (Korean)',
+    'pt-BR' => 'Português (Portuguese, Brazilian)',
+    'ru' => 'Русский (俄语)',
+    'es-ES' => 'Español (Spanish)',
     'tr' => 'Türkçe (土耳其语)',
 ];

+ 0 - 0
resources/lang/zh/notifications.php → resources/lang/zh-CN/notifications.php


+ 0 - 0
resources/lang/zh/pagination.php → resources/lang/zh-CN/pagination.php


+ 0 - 0
resources/lang/zh/passwords.php → resources/lang/zh-CN/passwords.php


+ 0 - 0
resources/lang/zh/settings.php → resources/lang/zh-CN/settings.php


+ 0 - 0
resources/lang/zh/titles.php → resources/lang/zh-CN/titles.php


+ 0 - 0
resources/lang/zh/twofaccounts.php → resources/lang/zh-CN/twofaccounts.php


+ 0 - 0
resources/lang/zh/validation.php → resources/lang/zh-CN/validation.php