[MM-60792] Add support for loading experimental (e.g., in progress) languages (#29009)
* Add support for loading experimental (e.g., in progress) languages * Fix e2e config * Improve language labels * Improvements
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
7403d29634
Коммит
3af3af0b25
@@ -509,6 +509,7 @@ const defaultServerConfig: AdminConfig = {
|
|||||||
DefaultServerLocale: 'en',
|
DefaultServerLocale: 'en',
|
||||||
DefaultClientLocale: 'en',
|
DefaultClientLocale: 'en',
|
||||||
AvailableLocales: '',
|
AvailableLocales: '',
|
||||||
|
EnableExperimentalLocales: false,
|
||||||
},
|
},
|
||||||
SamlSettings: {
|
SamlSettings: {
|
||||||
Enable: false,
|
Enable: false,
|
||||||
|
|||||||
@@ -75,6 +75,8 @@ func GenerateClientConfig(c *model.Config, telemetryID string, license *model.Li
|
|||||||
props["EnablePublicLink"] = strconv.FormatBool(*c.FileSettings.EnablePublicLink)
|
props["EnablePublicLink"] = strconv.FormatBool(*c.FileSettings.EnablePublicLink)
|
||||||
|
|
||||||
props["AvailableLocales"] = *c.LocalizationSettings.AvailableLocales
|
props["AvailableLocales"] = *c.LocalizationSettings.AvailableLocales
|
||||||
|
props["EnableExperimentalLocales"] = strconv.FormatBool(*c.LocalizationSettings.EnableExperimentalLocales)
|
||||||
|
|
||||||
props["SQLDriverName"] = *c.SqlSettings.DriverName
|
props["SQLDriverName"] = *c.SqlSettings.DriverName
|
||||||
|
|
||||||
props["EnableEmojiPicker"] = strconv.FormatBool(*c.ServiceSettings.EnableEmojiPicker)
|
props["EnableEmojiPicker"] = strconv.FormatBool(*c.ServiceSettings.EnableEmojiPicker)
|
||||||
|
|||||||
@@ -2600,6 +2600,7 @@ type LocalizationSettings struct {
|
|||||||
DefaultServerLocale *string `access:"site_localization"`
|
DefaultServerLocale *string `access:"site_localization"`
|
||||||
DefaultClientLocale *string `access:"site_localization"`
|
DefaultClientLocale *string `access:"site_localization"`
|
||||||
AvailableLocales *string `access:"site_localization"`
|
AvailableLocales *string `access:"site_localization"`
|
||||||
|
EnableExperimentalLocales *bool `access:"site_localization"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *LocalizationSettings) SetDefaults() {
|
func (s *LocalizationSettings) SetDefaults() {
|
||||||
@@ -2614,6 +2615,10 @@ func (s *LocalizationSettings) SetDefaults() {
|
|||||||
if s.AvailableLocales == nil {
|
if s.AvailableLocales == nil {
|
||||||
s.AvailableLocales = NewPointer("")
|
s.AvailableLocales = NewPointer("")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if s.EnableExperimentalLocales == nil {
|
||||||
|
s.EnableExperimentalLocales = NewPointer(false)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type SamlSettings struct {
|
type SamlSettings struct {
|
||||||
|
|||||||
@@ -2102,6 +2102,13 @@ const AdminDefinition: AdminDefinitionType = {
|
|||||||
no_result: defineMessage({id: 'admin.general.localization.availableLocalesNoResults', defaultMessage: 'No results found'}),
|
no_result: defineMessage({id: 'admin.general.localization.availableLocalesNoResults', defaultMessage: 'No results found'}),
|
||||||
isDisabled: it.not(it.userHasWritePermissionOnResource(RESOURCE_KEYS.SITE.LOCALIZATION)),
|
isDisabled: it.not(it.userHasWritePermissionOnResource(RESOURCE_KEYS.SITE.LOCALIZATION)),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
type: 'bool',
|
||||||
|
key: 'LocalizationSettings.EnableExperimentalLocales',
|
||||||
|
label: defineMessage({id: 'admin.general.localization.enableExperimentalLocalesTitle', defaultMessage: 'Enable Experimental Locales:'}),
|
||||||
|
help_text: defineMessage({id: 'admin.general.localization.enableExperimentalLocalesDescription', defaultMessage: 'When true, it allows users to select experimental (e.g., in progress) languages.'}),
|
||||||
|
isDisabled: it.not(it.userHasWritePermissionOnResource(RESOURCE_KEYS.SITE.LOCALIZATION)),
|
||||||
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1021,6 +1021,8 @@
|
|||||||
"admin.general.localization.availableLocalesTitle": "Available Languages:",
|
"admin.general.localization.availableLocalesTitle": "Available Languages:",
|
||||||
"admin.general.localization.clientLocaleDescription": "Default language for newly created users and pages where the user hasn't logged in.",
|
"admin.general.localization.clientLocaleDescription": "Default language for newly created users and pages where the user hasn't logged in.",
|
||||||
"admin.general.localization.clientLocaleTitle": "Default Client Language:",
|
"admin.general.localization.clientLocaleTitle": "Default Client Language:",
|
||||||
|
"admin.general.localization.enableExperimentalLocalesDescription": "When true, it allows users to select experimental (e.g. in progress) languages",
|
||||||
|
"admin.general.localization.enableExperimentalLocalesTitle": "Enable Experimental Locales",
|
||||||
"admin.general.localization.serverLocaleDescription": "Default language for system messages.",
|
"admin.general.localization.serverLocaleDescription": "Default language for system messages.",
|
||||||
"admin.general.localization.serverLocaleTitle": "Default Server Language:",
|
"admin.general.localization.serverLocaleTitle": "Default Server Language:",
|
||||||
"admin.general.log": "Logging",
|
"admin.general.log": "Logging",
|
||||||
|
|||||||
@@ -5,38 +5,17 @@
|
|||||||
* @typedef {} Language
|
* @typedef {} Language
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* eslint-disable import/order */
|
|
||||||
import bg from './bg.json';
|
|
||||||
import de from './de.json';
|
|
||||||
import enAU from './en-AU.json';
|
|
||||||
import es from './es.json';
|
|
||||||
import fa from './fa.json';
|
|
||||||
import fr from './fr.json';
|
|
||||||
import hu from './hu.json';
|
|
||||||
import it from './it.json';
|
|
||||||
import ja from './ja.json';
|
|
||||||
import ko from './ko.json';
|
|
||||||
import nl from './nl.json';
|
|
||||||
import pl from './pl.json';
|
|
||||||
import ptBR from './pt-BR.json';
|
|
||||||
import ro from './ro.json';
|
|
||||||
import ru from './ru.json';
|
|
||||||
import sv from './sv.json';
|
|
||||||
import vi from './vi.json';
|
|
||||||
import tr from './tr.json';
|
|
||||||
import uk from './uk.json';
|
|
||||||
import zhTW from './zh-TW.json';
|
|
||||||
import zhCN from './zh-CN.json';
|
|
||||||
|
|
||||||
import {getConfig} from 'mattermost-redux/selectors/entities/general';
|
import {getConfig} from 'mattermost-redux/selectors/entities/general';
|
||||||
|
|
||||||
|
import {langFiles, langIDs, langLabels} from './imports';
|
||||||
|
|
||||||
// should match the values in server/public/shared/i18n/i18n.go
|
// should match the values in server/public/shared/i18n/i18n.go
|
||||||
const languages = {
|
export const languages = {
|
||||||
de: {
|
de: {
|
||||||
value: 'de',
|
value: 'de',
|
||||||
name: 'Deutsch',
|
name: 'Deutsch',
|
||||||
order: 0,
|
order: 0,
|
||||||
url: de,
|
url: langFiles.de,
|
||||||
},
|
},
|
||||||
en: {
|
en: {
|
||||||
value: 'en',
|
value: 'en',
|
||||||
@@ -48,125 +27,140 @@ const languages = {
|
|||||||
value: 'en-AU',
|
value: 'en-AU',
|
||||||
name: 'English (Australia)',
|
name: 'English (Australia)',
|
||||||
order: 2,
|
order: 2,
|
||||||
url: enAU,
|
url: langFiles['en-AU'],
|
||||||
},
|
},
|
||||||
es: {
|
es: {
|
||||||
value: 'es',
|
value: 'es',
|
||||||
name: 'Español (Beta)',
|
name: 'Español (Beta)',
|
||||||
order: 3,
|
order: 3,
|
||||||
url: es,
|
url: langFiles.es,
|
||||||
},
|
},
|
||||||
fr: {
|
fr: {
|
||||||
value: 'fr',
|
value: 'fr',
|
||||||
name: 'Français (Beta)',
|
name: 'Français (Beta)',
|
||||||
order: 4,
|
order: 4,
|
||||||
url: fr,
|
url: langFiles.fr,
|
||||||
},
|
},
|
||||||
it: {
|
it: {
|
||||||
value: 'it',
|
value: 'it',
|
||||||
name: 'Italiano (Alpha)',
|
name: 'Italiano (Alpha)',
|
||||||
order: 5,
|
order: 5,
|
||||||
url: it,
|
url: langFiles.it,
|
||||||
},
|
},
|
||||||
hu: {
|
hu: {
|
||||||
value: 'hu',
|
value: 'hu',
|
||||||
name: 'Magyar (Beta)',
|
name: 'Magyar (Beta)',
|
||||||
order: 6,
|
order: 6,
|
||||||
url: hu,
|
url: langFiles.hu,
|
||||||
},
|
},
|
||||||
nl: {
|
nl: {
|
||||||
value: 'nl',
|
value: 'nl',
|
||||||
name: 'Nederlands',
|
name: 'Nederlands',
|
||||||
order: 7,
|
order: 7,
|
||||||
url: nl,
|
url: langFiles.nl,
|
||||||
},
|
},
|
||||||
pl: {
|
pl: {
|
||||||
value: 'pl',
|
value: 'pl',
|
||||||
name: 'Polski',
|
name: 'Polski',
|
||||||
order: 8,
|
order: 8,
|
||||||
url: pl,
|
url: langFiles.pl,
|
||||||
},
|
},
|
||||||
'pt-BR': {
|
'pt-BR': {
|
||||||
value: 'pt-BR',
|
value: 'pt-BR',
|
||||||
name: 'Português (Brasil) (Alpha)',
|
name: 'Português (Brasil) (Alpha)',
|
||||||
order: 9,
|
order: 9,
|
||||||
url: ptBR,
|
url: langFiles['pt-BR'],
|
||||||
},
|
},
|
||||||
ro: {
|
ro: {
|
||||||
value: 'ro',
|
value: 'ro',
|
||||||
name: 'Română (Alpha)',
|
name: 'Română (Alpha)',
|
||||||
order: 10,
|
order: 10,
|
||||||
url: ro,
|
url: langFiles.ro,
|
||||||
},
|
},
|
||||||
sv: {
|
sv: {
|
||||||
value: 'sv',
|
value: 'sv',
|
||||||
name: 'Svenska',
|
name: 'Svenska',
|
||||||
order: 11,
|
order: 11,
|
||||||
url: sv,
|
url: langFiles.sv,
|
||||||
},
|
},
|
||||||
vi: {
|
vi: {
|
||||||
value: 'vi',
|
value: 'vi',
|
||||||
name: 'Tiếng Việt (Beta)',
|
name: 'Tiếng Việt (Beta)',
|
||||||
order: 12,
|
order: 12,
|
||||||
url: vi,
|
url: langFiles.vi,
|
||||||
},
|
},
|
||||||
tr: {
|
tr: {
|
||||||
value: 'tr',
|
value: 'tr',
|
||||||
name: 'Türkçe',
|
name: 'Türkçe',
|
||||||
order: 13,
|
order: 13,
|
||||||
url: tr,
|
url: langFiles.tr,
|
||||||
},
|
},
|
||||||
bg: {
|
bg: {
|
||||||
value: 'bg',
|
value: 'bg',
|
||||||
name: 'Български (Alpha)',
|
name: 'Български (Alpha)',
|
||||||
order: 14,
|
order: 14,
|
||||||
url: bg,
|
url: langFiles.bg,
|
||||||
},
|
},
|
||||||
ru: {
|
ru: {
|
||||||
value: 'ru',
|
value: 'ru',
|
||||||
name: 'Pусский',
|
name: 'Pусский',
|
||||||
order: 15,
|
order: 15,
|
||||||
url: ru,
|
url: langFiles.ru,
|
||||||
},
|
},
|
||||||
uk: {
|
uk: {
|
||||||
value: 'uk',
|
value: 'uk',
|
||||||
name: 'Yкраїнська (Alpha)',
|
name: 'Yкраїнська (Alpha)',
|
||||||
order: 16,
|
order: 16,
|
||||||
url: uk,
|
url: langFiles.uk,
|
||||||
},
|
},
|
||||||
fa: {
|
fa: {
|
||||||
value: 'fa',
|
value: 'fa',
|
||||||
name: 'فارسی (Alpha)',
|
name: 'فارسی (Alpha)',
|
||||||
order: 17,
|
order: 17,
|
||||||
url: fa,
|
url: langFiles.fa,
|
||||||
},
|
},
|
||||||
ko: {
|
ko: {
|
||||||
value: 'ko',
|
value: 'ko',
|
||||||
name: '한국어 (Alpha)',
|
name: '한국어 (Alpha)',
|
||||||
order: 18,
|
order: 18,
|
||||||
url: ko,
|
url: langFiles.ko,
|
||||||
},
|
},
|
||||||
'zh-CN': {
|
'zh-CN': {
|
||||||
value: 'zh-CN',
|
value: 'zh-CN',
|
||||||
name: '中文 (简体) (Beta)',
|
name: '中文 (简体) (Beta)',
|
||||||
order: 19,
|
order: 19,
|
||||||
url: zhCN,
|
url: langFiles['zh-CN'],
|
||||||
},
|
},
|
||||||
'zh-TW': {
|
'zh-TW': {
|
||||||
value: 'zh-TW',
|
value: 'zh-TW',
|
||||||
name: '中文 (繁體) (Beta)',
|
name: '中文 (繁體) (Beta)',
|
||||||
order: 20,
|
order: 20,
|
||||||
url: zhTW,
|
url: langFiles['zh-TW'],
|
||||||
},
|
},
|
||||||
ja: {
|
ja: {
|
||||||
value: 'ja',
|
value: 'ja',
|
||||||
name: '日本語',
|
name: '日本語',
|
||||||
order: 21,
|
order: 21,
|
||||||
url: ja,
|
url: langFiles.ja,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
export function getAllLanguages() {
|
export function getAllLanguages(includeExperimental) {
|
||||||
|
if (includeExperimental) {
|
||||||
|
let order = Object.keys(languages).length;
|
||||||
|
return {
|
||||||
|
...langIDs.reduce((out, id) => {
|
||||||
|
out[id] = {
|
||||||
|
value: id,
|
||||||
|
name: langLabels[id],
|
||||||
|
url: langFiles[id],
|
||||||
|
order: order++,
|
||||||
|
};
|
||||||
|
return out;
|
||||||
|
}, {}),
|
||||||
|
...languages,
|
||||||
|
};
|
||||||
|
}
|
||||||
return languages;
|
return languages;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -177,7 +171,7 @@ export function getAllLanguages() {
|
|||||||
export function getLanguages(state) {
|
export function getLanguages(state) {
|
||||||
const config = getConfig(state);
|
const config = getConfig(state);
|
||||||
if (!config.AvailableLocales) {
|
if (!config.AvailableLocales) {
|
||||||
return getAllLanguages();
|
return getAllLanguages(config.EnableExperimentalLocales === 'true');
|
||||||
}
|
}
|
||||||
return config.AvailableLocales.split(',').reduce((result, l) => {
|
return config.AvailableLocales.split(',').reduce((result, l) => {
|
||||||
if (languages[l]) {
|
if (languages[l]) {
|
||||||
@@ -188,7 +182,7 @@ export function getLanguages(state) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function getLanguageInfo(locale) {
|
export function getLanguageInfo(locale) {
|
||||||
return getAllLanguages()[locale];
|
return getAllLanguages(true)[locale];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
94
webapp/channels/src/i18n/i18n.test.jsx
Обычный файл
94
webapp/channels/src/i18n/i18n.test.jsx
Обычный файл
@@ -0,0 +1,94 @@
|
|||||||
|
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
||||||
|
// See LICENSE.txt for license information.
|
||||||
|
|
||||||
|
import {getAllLanguages, getLanguageInfo, getLanguages, isLanguageAvailable, languages} from './i18n';
|
||||||
|
|
||||||
|
jest.mock('./imports', () => ({
|
||||||
|
langIDs: ['cc'],
|
||||||
|
langFiles: {cc: 'cc.json'},
|
||||||
|
langLabels: {cc: 'CC Language'},
|
||||||
|
}));
|
||||||
|
|
||||||
|
describe('i18n', () => {
|
||||||
|
test('getAllLanguages', () => {
|
||||||
|
// no experimental languages
|
||||||
|
expect(getAllLanguages()).toBe(languages);
|
||||||
|
expect(getAllLanguages(false)).toBe(languages);
|
||||||
|
|
||||||
|
// with experimental languages
|
||||||
|
expect(getAllLanguages(true)).toStrictEqual({
|
||||||
|
cc: {
|
||||||
|
name: 'CC Language',
|
||||||
|
value: 'cc',
|
||||||
|
order: 22,
|
||||||
|
url: 'cc.json',
|
||||||
|
},
|
||||||
|
...languages,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
test('getLanguages', () => {
|
||||||
|
const state = {
|
||||||
|
entities: {
|
||||||
|
general: {
|
||||||
|
config: {
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
// no experimental languages
|
||||||
|
expect(getLanguages(state)).toBe(languages);
|
||||||
|
|
||||||
|
// with experimental languages
|
||||||
|
state.entities.general.config.EnableExperimentalLocales = 'true';
|
||||||
|
expect(getLanguages(state)).toStrictEqual({
|
||||||
|
cc: {
|
||||||
|
name: 'CC Language',
|
||||||
|
value: 'cc',
|
||||||
|
order: 22,
|
||||||
|
url: 'cc.json',
|
||||||
|
},
|
||||||
|
...languages,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
test('getLanguageInfo', () => {
|
||||||
|
// supported language
|
||||||
|
expect(getLanguageInfo('en')).toStrictEqual({
|
||||||
|
name: 'English (US)',
|
||||||
|
order: 1,
|
||||||
|
url: '',
|
||||||
|
value: 'en',
|
||||||
|
});
|
||||||
|
|
||||||
|
// experimental language (e.g. in progress)
|
||||||
|
expect(getLanguageInfo('cc')).toStrictEqual({
|
||||||
|
name: 'CC Language',
|
||||||
|
value: 'cc',
|
||||||
|
order: 22,
|
||||||
|
url: 'cc.json',
|
||||||
|
});
|
||||||
|
|
||||||
|
// non existant
|
||||||
|
expect(getLanguageInfo('invalid')).not.toBeDefined();
|
||||||
|
});
|
||||||
|
|
||||||
|
test('isLanguageAvailable', () => {
|
||||||
|
const state = {
|
||||||
|
entities: {
|
||||||
|
general: {
|
||||||
|
config: {
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
// no experimental languages
|
||||||
|
expect(isLanguageAvailable(state, 'cc')).toBe(false);
|
||||||
|
|
||||||
|
// with experimental languages
|
||||||
|
state.entities.general.config.EnableExperimentalLocales = 'true';
|
||||||
|
expect(isLanguageAvailable(state, 'cc')).toBe(true);
|
||||||
|
});
|
||||||
|
});
|
||||||
75
webapp/channels/src/i18n/imports.ts
Обычный файл
75
webapp/channels/src/i18n/imports.ts
Обычный файл
@@ -0,0 +1,75 @@
|
|||||||
|
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
||||||
|
// See LICENSE.txt for license information.
|
||||||
|
|
||||||
|
// DO NOT EDIT - This file is generated by gen_lang_imports through the gen-lang-imports script
|
||||||
|
|
||||||
|
/* eslint-disable */
|
||||||
|
|
||||||
|
import am from './am.json';
|
||||||
|
import ar from './ar.json';
|
||||||
|
import be from './be.json';
|
||||||
|
import bg from './bg.json';
|
||||||
|
import bn from './bn.json';
|
||||||
|
import br from './br.json';
|
||||||
|
import ca from './ca.json';
|
||||||
|
import cs from './cs.json';
|
||||||
|
import da from './da.json';
|
||||||
|
import de from './de.json';
|
||||||
|
import el from './el.json';
|
||||||
|
import enAU from './en-AU.json';
|
||||||
|
import es from './es.json';
|
||||||
|
import et from './et.json';
|
||||||
|
import eu from './eu.json';
|
||||||
|
import fa from './fa.json';
|
||||||
|
import fi from './fi.json';
|
||||||
|
import fil from './fil.json';
|
||||||
|
import fr from './fr.json';
|
||||||
|
import fy from './fy.json';
|
||||||
|
import gl from './gl.json';
|
||||||
|
import gu from './gu.json';
|
||||||
|
import he from './he.json';
|
||||||
|
import hi from './hi.json';
|
||||||
|
import hr from './hr.json';
|
||||||
|
import hu from './hu.json';
|
||||||
|
import id from './id.json';
|
||||||
|
import is from './is.json';
|
||||||
|
import it from './it.json';
|
||||||
|
import ja from './ja.json';
|
||||||
|
import ka from './ka.json';
|
||||||
|
import kkLatn from './kk-Latn.json';
|
||||||
|
import kk from './kk.json';
|
||||||
|
import km from './km.json';
|
||||||
|
import ko from './ko.json';
|
||||||
|
import la from './la.json';
|
||||||
|
import lo from './lo.json';
|
||||||
|
import lt from './lt.json';
|
||||||
|
import lv from './lv.json';
|
||||||
|
import mk from './mk.json';
|
||||||
|
import ml from './ml.json';
|
||||||
|
import mn from './mn.json';
|
||||||
|
import nbNO from './nb-NO.json';
|
||||||
|
import ne from './ne.json';
|
||||||
|
import nl from './nl.json';
|
||||||
|
import pl from './pl.json';
|
||||||
|
import pr from './pr.json';
|
||||||
|
import ptBR from './pt-BR.json';
|
||||||
|
import pt from './pt.json';
|
||||||
|
import ro from './ro.json';
|
||||||
|
import ru from './ru.json';
|
||||||
|
import si from './si.json';
|
||||||
|
import sl from './sl.json';
|
||||||
|
import sq from './sq.json';
|
||||||
|
import sr from './sr.json';
|
||||||
|
import sv from './sv.json';
|
||||||
|
import th from './th.json';
|
||||||
|
import tr from './tr.json';
|
||||||
|
import uk from './uk.json';
|
||||||
|
import vi from './vi.json';
|
||||||
|
import zhCN from './zh-CN.json';
|
||||||
|
import zhTW from './zh-TW.json';
|
||||||
|
|
||||||
|
export const langIDs = ["am","ar","be","bg","bn","br","ca","cs","da","de","el","en-AU","es","et","eu","fa","fi","fil","fr","fy","gl","gu","he","hi","hr","hu","id","is","it","ja","ka","kk-Latn","kk","km","ko","la","lo","lt","lv","mk","ml","mn","nb-NO","ne","nl","pl","pr","pt-BR","pt","ro","ru","si","sl","sq","sr","sv","th","tr","uk","vi","zh-CN","zh-TW"];
|
||||||
|
|
||||||
|
export const langLabels = {"am":"አማርኛ","ar":"العربية","be":"Беларуская","bg":"Български","bn":"বাংলা","br":"Brezhoneg","ca":"Català","cs":"Čeština","da":"Dansk","de":"Deutsch","el":"Ελληνικά","en-AU":"English (Australia)","es":"Español","et":"eesti keel","eu":"Euskara","fa":"فارسی","fi":"Suomi","fil":"Filipino","fr":"Français","fy":"Frysk","gl":"Galego","gu":"ગુજરાતી","he":"עברית","hi":"हिन्दी","hr":"Hrvatski","hu":"Magyar","id":"Bahasa Indonesia","is":"Íslenska","it":"Italiano","ja":"日本語","ka":"ქართული","kk-Latn":"Қазақша","kk":"Қазақша","km":"ភាសាខ្មែរ","ko":"한국어","la":"Latin","lo":"ພາສາລາວ","lt":"Lietuvių","lv":"Latviešu","mk":"Македонски","ml":"മലയാളം","mn":"Монгол","nb-NO":"Norsk (bokmål)","ne":"नेपाली","nl":"Nederlands","pl":"Polski","pr":"pr","pt-BR":"Português (Brasil)","pt":"Português","ro":"Română","ru":"Русский","si":"සිංහල","sl":"Slovenščina","sq":"Shqip","sr":"Српски","sv":"Svenska","th":"ภาษาไทย","tr":"Türkçe","uk":"Українська","vi":"Tiếng Việt","zh-CN":"中文(中国大陆)","zh-TW":"中文(台灣)"};
|
||||||
|
|
||||||
|
export const langFiles = {am,ar,be,bg,bn,br,ca,cs,da,de,el,'en-AU':enAU,es,et,eu,fa,fi,fil,fr,fy,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,'kk-Latn':kkLatn,kk,km,ko,la,lo,lt,lv,mk,ml,mn,'nb-NO':nbNO,ne,nl,pl,pr,'pt-BR':ptBR,pt,ro,ru,si,sl,sq,sr,sv,th,tr,uk,vi,'zh-CN':zhCN,'zh-TW':zhTW};
|
||||||
897
webapp/channels/src/i18n/langmap.js
Обычный файл
897
webapp/channels/src/i18n/langmap.js
Обычный файл
@@ -0,0 +1,897 @@
|
|||||||
|
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
||||||
|
// See LICENSE.txt for license information.
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
ach: {
|
||||||
|
nativeName: 'Lwo',
|
||||||
|
englishName: 'Acholi',
|
||||||
|
},
|
||||||
|
ady: {
|
||||||
|
nativeName: 'Адыгэбзэ',
|
||||||
|
englishName: 'Adyghe',
|
||||||
|
},
|
||||||
|
af: {
|
||||||
|
nativeName: 'Afrikaans',
|
||||||
|
englishName: 'Afrikaans',
|
||||||
|
},
|
||||||
|
'af-NA': {
|
||||||
|
nativeName: 'Afrikaans (Namibia)',
|
||||||
|
englishName: 'Afrikaans (Namibia)',
|
||||||
|
},
|
||||||
|
'af-ZA': {
|
||||||
|
nativeName: 'Afrikaans (South Africa)',
|
||||||
|
englishName: 'Afrikaans (South Africa)',
|
||||||
|
},
|
||||||
|
ak: {
|
||||||
|
nativeName: 'Tɕɥi',
|
||||||
|
englishName: 'Akan',
|
||||||
|
},
|
||||||
|
am: {
|
||||||
|
name: 'Amharic',
|
||||||
|
nativeName: 'አማርኛ',
|
||||||
|
},
|
||||||
|
ar: {
|
||||||
|
nativeName: 'العربية',
|
||||||
|
englishName: 'Arabic',
|
||||||
|
},
|
||||||
|
'ar-AR': {
|
||||||
|
nativeName: 'العربية',
|
||||||
|
englishName: 'Arabic',
|
||||||
|
},
|
||||||
|
'ar-MA': {
|
||||||
|
nativeName: 'العربية',
|
||||||
|
englishName: 'Arabic (Morocco)',
|
||||||
|
},
|
||||||
|
'ar-SA': {
|
||||||
|
nativeName: 'العربية (السعودية)',
|
||||||
|
englishName: 'Arabic (Saudi Arabia)',
|
||||||
|
},
|
||||||
|
'ay-BO': {
|
||||||
|
nativeName: 'Aymar aru',
|
||||||
|
englishName: 'Aymara',
|
||||||
|
},
|
||||||
|
az: {
|
||||||
|
nativeName: 'Azərbaycan dili',
|
||||||
|
englishName: 'Azerbaijani',
|
||||||
|
},
|
||||||
|
'az-AZ': {
|
||||||
|
nativeName: 'Azərbaycan dili',
|
||||||
|
englishName: 'Azerbaijani',
|
||||||
|
},
|
||||||
|
'be-BY': {
|
||||||
|
nativeName: 'Беларуская',
|
||||||
|
englishName: 'Belarusian',
|
||||||
|
},
|
||||||
|
bg: {
|
||||||
|
nativeName: 'Български',
|
||||||
|
englishName: 'Bulgarian',
|
||||||
|
},
|
||||||
|
'bg-BG': {
|
||||||
|
nativeName: 'Български',
|
||||||
|
englishName: 'Bulgarian',
|
||||||
|
},
|
||||||
|
bn: {
|
||||||
|
nativeName: 'বাংলা',
|
||||||
|
englishName: 'Bengali',
|
||||||
|
},
|
||||||
|
'bn-IN': {
|
||||||
|
nativeName: 'বাংলা (ভারত)',
|
||||||
|
englishName: 'Bengali (India)',
|
||||||
|
},
|
||||||
|
'bn-BD': {
|
||||||
|
nativeName: 'বাংলা(বাংলাদেশ)',
|
||||||
|
englishName: 'Bengali (Bangladesh)',
|
||||||
|
},
|
||||||
|
br: {
|
||||||
|
nativeName: 'Brezhoneg',
|
||||||
|
englishName: 'Breton',
|
||||||
|
},
|
||||||
|
'bs-BA': {
|
||||||
|
nativeName: 'Bosanski',
|
||||||
|
englishName: 'Bosnian',
|
||||||
|
},
|
||||||
|
ca: {
|
||||||
|
nativeName: 'Català',
|
||||||
|
englishName: 'Catalan',
|
||||||
|
},
|
||||||
|
'ca-ES': {
|
||||||
|
nativeName: 'Català',
|
||||||
|
englishName: 'Catalan',
|
||||||
|
},
|
||||||
|
cak: {
|
||||||
|
nativeName: 'Maya Kaqchikel',
|
||||||
|
englishName: 'Kaqchikel',
|
||||||
|
},
|
||||||
|
'ck-US': {
|
||||||
|
nativeName: 'ᏣᎳᎩ (tsalagi)',
|
||||||
|
englishName: 'Cherokee',
|
||||||
|
},
|
||||||
|
cs: {
|
||||||
|
nativeName: 'Čeština',
|
||||||
|
englishName: 'Czech',
|
||||||
|
},
|
||||||
|
'cs-CZ': {
|
||||||
|
nativeName: 'Čeština',
|
||||||
|
englishName: 'Czech',
|
||||||
|
},
|
||||||
|
cy: {
|
||||||
|
nativeName: 'Cymraeg',
|
||||||
|
englishName: 'Welsh',
|
||||||
|
},
|
||||||
|
'cy-GB': {
|
||||||
|
nativeName: 'Cymraeg',
|
||||||
|
englishName: 'Welsh',
|
||||||
|
},
|
||||||
|
da: {
|
||||||
|
nativeName: 'Dansk',
|
||||||
|
englishName: 'Danish',
|
||||||
|
},
|
||||||
|
'da-DK': {
|
||||||
|
nativeName: 'Dansk',
|
||||||
|
englishName: 'Danish',
|
||||||
|
},
|
||||||
|
de: {
|
||||||
|
nativeName: 'Deutsch',
|
||||||
|
englishName: 'German',
|
||||||
|
},
|
||||||
|
'de-AT': {
|
||||||
|
nativeName: 'Deutsch (Österreich)',
|
||||||
|
englishName: 'German (Austria)',
|
||||||
|
},
|
||||||
|
'de-DE': {
|
||||||
|
nativeName: 'Deutsch (Deutschland)',
|
||||||
|
englishName: 'German (Germany)',
|
||||||
|
},
|
||||||
|
'de-CH': {
|
||||||
|
nativeName: 'Deutsch (Schweiz)',
|
||||||
|
englishName: 'German (Switzerland)',
|
||||||
|
},
|
||||||
|
dsb: {
|
||||||
|
nativeName: 'Dolnoserbšćina',
|
||||||
|
englishName: 'Lower Sorbian',
|
||||||
|
},
|
||||||
|
el: {
|
||||||
|
nativeName: 'Ελληνικά',
|
||||||
|
englishName: 'Greek',
|
||||||
|
},
|
||||||
|
'el-GR': {
|
||||||
|
nativeName: 'Ελληνικά',
|
||||||
|
englishName: 'Greek (Greece)',
|
||||||
|
},
|
||||||
|
en: {
|
||||||
|
nativeName: 'English',
|
||||||
|
englishName: 'English',
|
||||||
|
},
|
||||||
|
'en-GB': {
|
||||||
|
nativeName: 'English (UK)',
|
||||||
|
englishName: 'English (UK)',
|
||||||
|
},
|
||||||
|
'en-AU': {
|
||||||
|
nativeName: 'English (Australia)',
|
||||||
|
englishName: 'English (Australia)',
|
||||||
|
},
|
||||||
|
'en-CA': {
|
||||||
|
nativeName: 'English (Canada)',
|
||||||
|
englishName: 'English (Canada)',
|
||||||
|
},
|
||||||
|
'en-IE': {
|
||||||
|
nativeName: 'English (Ireland)',
|
||||||
|
englishName: 'English (Ireland)',
|
||||||
|
},
|
||||||
|
'en-IN': {
|
||||||
|
nativeName: 'English (India)',
|
||||||
|
englishName: 'English (India)',
|
||||||
|
},
|
||||||
|
'en-PI': {
|
||||||
|
nativeName: 'English (Pirate)',
|
||||||
|
englishName: 'English (Pirate)',
|
||||||
|
},
|
||||||
|
'en-SG': {
|
||||||
|
nativeName: 'English (Singapore)',
|
||||||
|
englishName: 'English (Singapore)',
|
||||||
|
},
|
||||||
|
'en-UD': {
|
||||||
|
nativeName: 'English (Upside Down)',
|
||||||
|
englishName: 'English (Upside Down)',
|
||||||
|
},
|
||||||
|
'en-US': {
|
||||||
|
nativeName: 'English (US)',
|
||||||
|
englishName: 'English (US)',
|
||||||
|
},
|
||||||
|
'en-ZA': {
|
||||||
|
nativeName: 'English (South Africa)',
|
||||||
|
englishName: 'English (South Africa)',
|
||||||
|
},
|
||||||
|
'en@pirate': {
|
||||||
|
nativeName: 'English (Pirate)',
|
||||||
|
englishName: 'English (Pirate)',
|
||||||
|
},
|
||||||
|
eo: {
|
||||||
|
nativeName: 'Esperanto',
|
||||||
|
englishName: 'Esperanto',
|
||||||
|
},
|
||||||
|
'eo-EO': {
|
||||||
|
nativeName: 'Esperanto',
|
||||||
|
englishName: 'Esperanto',
|
||||||
|
},
|
||||||
|
es: {
|
||||||
|
nativeName: 'Español',
|
||||||
|
englishName: 'Spanish',
|
||||||
|
},
|
||||||
|
'es-AR': {
|
||||||
|
nativeName: 'Español (Argentine)',
|
||||||
|
englishName: 'Spanish (Argentina)',
|
||||||
|
},
|
||||||
|
'es-419': {
|
||||||
|
nativeName: 'Español (Latinoamérica)',
|
||||||
|
englishName: 'Spanish (Latin America)',
|
||||||
|
},
|
||||||
|
'es-CL': {
|
||||||
|
nativeName: 'Español (Chile)',
|
||||||
|
englishName: 'Spanish (Chile)',
|
||||||
|
},
|
||||||
|
'es-CO': {
|
||||||
|
nativeName: 'Español (Colombia)',
|
||||||
|
englishName: 'Spanish (Colombia)',
|
||||||
|
},
|
||||||
|
'es-EC': {
|
||||||
|
nativeName: 'Español (Ecuador)',
|
||||||
|
englishName: 'Spanish (Ecuador)',
|
||||||
|
},
|
||||||
|
'es-ES': {
|
||||||
|
nativeName: 'Español (España)',
|
||||||
|
englishName: 'Spanish (Spain)',
|
||||||
|
},
|
||||||
|
'es-LA': {
|
||||||
|
nativeName: 'Español (Latinoamérica)',
|
||||||
|
englishName: 'Spanish (Latin America)',
|
||||||
|
},
|
||||||
|
'es-NI': {
|
||||||
|
nativeName: 'Español (Nicaragua)',
|
||||||
|
englishName: 'Spanish (Nicaragua)',
|
||||||
|
},
|
||||||
|
'es-MX': {
|
||||||
|
nativeName: 'Español (México)',
|
||||||
|
englishName: 'Spanish (Mexico)',
|
||||||
|
},
|
||||||
|
'es-US': {
|
||||||
|
nativeName: 'Español (Estados Unidos)',
|
||||||
|
englishName: 'Spanish (United States)',
|
||||||
|
},
|
||||||
|
'es-VE': {
|
||||||
|
nativeName: 'Español (Venezuela)',
|
||||||
|
englishName: 'Spanish (Venezuela)',
|
||||||
|
},
|
||||||
|
et: {
|
||||||
|
nativeName: 'eesti keel',
|
||||||
|
englishName: 'Estonian',
|
||||||
|
},
|
||||||
|
'et-EE': {
|
||||||
|
nativeName: 'Eesti (Estonia)',
|
||||||
|
englishName: 'Estonian (Estonia)',
|
||||||
|
},
|
||||||
|
eu: {
|
||||||
|
nativeName: 'Euskara',
|
||||||
|
englishName: 'Basque',
|
||||||
|
},
|
||||||
|
'eu-ES': {
|
||||||
|
nativeName: 'Euskara',
|
||||||
|
englishName: 'Basque',
|
||||||
|
},
|
||||||
|
fa: {
|
||||||
|
nativeName: 'فارسی',
|
||||||
|
englishName: 'Persian',
|
||||||
|
},
|
||||||
|
'fa-IR': {
|
||||||
|
nativeName: 'فارسی',
|
||||||
|
englishName: 'Persian',
|
||||||
|
},
|
||||||
|
'fb-LT': {
|
||||||
|
nativeName: 'Leet Speak',
|
||||||
|
englishName: 'Leet',
|
||||||
|
},
|
||||||
|
ff: {
|
||||||
|
nativeName: 'Fulah',
|
||||||
|
englishName: 'Fulah',
|
||||||
|
},
|
||||||
|
fi: {
|
||||||
|
nativeName: 'Suomi',
|
||||||
|
englishName: 'Finnish',
|
||||||
|
},
|
||||||
|
'fi-FI': {
|
||||||
|
nativeName: 'Suomi',
|
||||||
|
englishName: 'Finnish',
|
||||||
|
},
|
||||||
|
fo: {
|
||||||
|
nativeName: 'Føroyskt',
|
||||||
|
englishName: 'Faroese',
|
||||||
|
},
|
||||||
|
'fo-FO': {
|
||||||
|
nativeName: 'Føroyskt (Færeyjar)',
|
||||||
|
englishName: 'Faroese (Faroe Islands)',
|
||||||
|
},
|
||||||
|
fr: {
|
||||||
|
nativeName: 'Français',
|
||||||
|
englishName: 'French',
|
||||||
|
},
|
||||||
|
'fr-CA': {
|
||||||
|
nativeName: 'Français (Canada)',
|
||||||
|
englishName: 'French (Canada)',
|
||||||
|
},
|
||||||
|
'fr-FR': {
|
||||||
|
nativeName: 'Français (France)',
|
||||||
|
englishName: 'French (France)',
|
||||||
|
},
|
||||||
|
'fr-BE': {
|
||||||
|
nativeName: 'Français (Belgique)',
|
||||||
|
englishName: 'French (Belgium)',
|
||||||
|
},
|
||||||
|
'fr-CH': {
|
||||||
|
nativeName: 'Français (Suisse)',
|
||||||
|
englishName: 'French (Switzerland)',
|
||||||
|
},
|
||||||
|
'fy-NL': {
|
||||||
|
nativeName: 'Frysk',
|
||||||
|
englishName: 'Frisian (West)',
|
||||||
|
},
|
||||||
|
ga: {
|
||||||
|
nativeName: 'Gaeilge',
|
||||||
|
englishName: 'Irish',
|
||||||
|
},
|
||||||
|
'ga-IE': {
|
||||||
|
nativeName: 'Gaeilge',
|
||||||
|
englishName: 'Irish',
|
||||||
|
},
|
||||||
|
gd: {
|
||||||
|
nativeName: 'Gàidhlig',
|
||||||
|
englishName: 'Gaelic',
|
||||||
|
},
|
||||||
|
gl: {
|
||||||
|
nativeName: 'Galego',
|
||||||
|
englishName: 'Galician',
|
||||||
|
},
|
||||||
|
'gl-ES': {
|
||||||
|
nativeName: 'Galego',
|
||||||
|
englishName: 'Galician',
|
||||||
|
},
|
||||||
|
'gn-PY': {
|
||||||
|
nativeName: "Avañe'ẽ",
|
||||||
|
englishName: 'Guarani',
|
||||||
|
},
|
||||||
|
'gu-IN': {
|
||||||
|
nativeName: 'ગુજરાતી',
|
||||||
|
englishName: 'Gujarati',
|
||||||
|
},
|
||||||
|
gv: {
|
||||||
|
nativeName: 'Gaelg',
|
||||||
|
englishName: 'Manx',
|
||||||
|
},
|
||||||
|
'gx-GR': {
|
||||||
|
nativeName: 'Ἑλληνική ἀρχαία',
|
||||||
|
englishName: 'Classical Greek',
|
||||||
|
},
|
||||||
|
he: {
|
||||||
|
nativeName: 'עברית',
|
||||||
|
englishName: 'Hebrew',
|
||||||
|
},
|
||||||
|
'he-IL': {
|
||||||
|
nativeName: 'עברית',
|
||||||
|
englishName: 'Hebrew',
|
||||||
|
},
|
||||||
|
hi: {
|
||||||
|
nativeName: 'हिन्दी',
|
||||||
|
englishName: 'Hindi',
|
||||||
|
},
|
||||||
|
'hi-IN': {
|
||||||
|
nativeName: 'हिन्दी',
|
||||||
|
englishName: 'Hindi',
|
||||||
|
},
|
||||||
|
hr: {
|
||||||
|
nativeName: 'Hrvatski',
|
||||||
|
englishName: 'Croatian',
|
||||||
|
},
|
||||||
|
'hr-HR': {
|
||||||
|
nativeName: 'Hrvatski',
|
||||||
|
englishName: 'Croatian',
|
||||||
|
},
|
||||||
|
hsb: {
|
||||||
|
nativeName: 'Hornjoserbšćina',
|
||||||
|
englishName: 'Upper Sorbian',
|
||||||
|
},
|
||||||
|
ht: {
|
||||||
|
nativeName: 'Kreyòl',
|
||||||
|
englishName: 'Haitian Creole',
|
||||||
|
},
|
||||||
|
hu: {
|
||||||
|
nativeName: 'Magyar',
|
||||||
|
englishName: 'Hungarian',
|
||||||
|
},
|
||||||
|
'hu-HU': {
|
||||||
|
nativeName: 'Magyar',
|
||||||
|
englishName: 'Hungarian',
|
||||||
|
},
|
||||||
|
hy: {
|
||||||
|
nativeName: 'Հայերեն',
|
||||||
|
englishName: 'Armenian',
|
||||||
|
},
|
||||||
|
'hy-AM': {
|
||||||
|
nativeName: 'Հայերեն (Հայաստան)',
|
||||||
|
englishName: 'Armenian (Armenia)',
|
||||||
|
},
|
||||||
|
id: {
|
||||||
|
nativeName: 'Bahasa Indonesia',
|
||||||
|
englishName: 'Indonesian',
|
||||||
|
},
|
||||||
|
'id-ID': {
|
||||||
|
nativeName: 'Bahasa Indonesia',
|
||||||
|
englishName: 'Indonesian',
|
||||||
|
},
|
||||||
|
is: {
|
||||||
|
nativeName: 'Íslenska',
|
||||||
|
englishName: 'Icelandic',
|
||||||
|
},
|
||||||
|
'is-IS': {
|
||||||
|
nativeName: 'Íslenska (Iceland)',
|
||||||
|
englishName: 'Icelandic (Iceland)',
|
||||||
|
},
|
||||||
|
it: {
|
||||||
|
nativeName: 'Italiano',
|
||||||
|
englishName: 'Italian',
|
||||||
|
},
|
||||||
|
'it-IT': {
|
||||||
|
nativeName: 'Italiano',
|
||||||
|
englishName: 'Italian',
|
||||||
|
},
|
||||||
|
ja: {
|
||||||
|
nativeName: '日本語',
|
||||||
|
englishName: 'Japanese',
|
||||||
|
},
|
||||||
|
'ja-JP': {
|
||||||
|
nativeName: '日本語 (日本)',
|
||||||
|
englishName: 'Japanese (Japan)',
|
||||||
|
},
|
||||||
|
'jv-ID': {
|
||||||
|
nativeName: 'Basa Jawa',
|
||||||
|
englishName: 'Javanese',
|
||||||
|
},
|
||||||
|
'ka-GE': {
|
||||||
|
nativeName: 'ქართული',
|
||||||
|
englishName: 'Georgian',
|
||||||
|
},
|
||||||
|
'kk-KZ': {
|
||||||
|
nativeName: 'Қазақша',
|
||||||
|
englishName: 'Kazakh',
|
||||||
|
},
|
||||||
|
km: {
|
||||||
|
nativeName: 'ភាសាខ្មែរ',
|
||||||
|
englishName: 'Khmer',
|
||||||
|
},
|
||||||
|
kl: {
|
||||||
|
nativeName: 'kalaallisut',
|
||||||
|
englishName: 'Greenlandic',
|
||||||
|
},
|
||||||
|
'km-KH': {
|
||||||
|
nativeName: 'ភាសាខ្មែរ',
|
||||||
|
englishName: 'Khmer',
|
||||||
|
},
|
||||||
|
kab: {
|
||||||
|
nativeName: 'Taqbaylit',
|
||||||
|
englishName: 'Kabyle',
|
||||||
|
},
|
||||||
|
kn: {
|
||||||
|
nativeName: 'ಕನ್ನಡ',
|
||||||
|
englishName: 'Kannada',
|
||||||
|
},
|
||||||
|
'kn-IN': {
|
||||||
|
nativeName: 'ಕನ್ನಡ (India)',
|
||||||
|
englishName: 'Kannada (India)',
|
||||||
|
},
|
||||||
|
ko: {
|
||||||
|
nativeName: '한국어',
|
||||||
|
englishName: 'Korean',
|
||||||
|
},
|
||||||
|
'ko-KR': {
|
||||||
|
nativeName: '한국어 (한국)',
|
||||||
|
englishName: 'Korean (Korea)',
|
||||||
|
},
|
||||||
|
'ku-TR': {
|
||||||
|
nativeName: 'Kurdî',
|
||||||
|
englishName: 'Kurdish',
|
||||||
|
},
|
||||||
|
kw: {
|
||||||
|
nativeName: 'Kernewek',
|
||||||
|
englishName: 'Cornish',
|
||||||
|
},
|
||||||
|
la: {
|
||||||
|
nativeName: 'Latin',
|
||||||
|
englishName: 'Latin',
|
||||||
|
},
|
||||||
|
'la-VA': {
|
||||||
|
nativeName: 'Latin',
|
||||||
|
englishName: 'Latin',
|
||||||
|
},
|
||||||
|
lb: {
|
||||||
|
nativeName: 'Lëtzebuergesch',
|
||||||
|
englishName: 'Luxembourgish',
|
||||||
|
},
|
||||||
|
'li-NL': {
|
||||||
|
nativeName: 'Lèmbörgs',
|
||||||
|
englishName: 'Limburgish',
|
||||||
|
},
|
||||||
|
lo: {
|
||||||
|
name: 'Lao',
|
||||||
|
nativeName: 'ພາສາລາວ',
|
||||||
|
},
|
||||||
|
lt: {
|
||||||
|
nativeName: 'Lietuvių',
|
||||||
|
englishName: 'Lithuanian',
|
||||||
|
},
|
||||||
|
'lt-LT': {
|
||||||
|
nativeName: 'Lietuvių',
|
||||||
|
englishName: 'Lithuanian',
|
||||||
|
},
|
||||||
|
lv: {
|
||||||
|
nativeName: 'Latviešu',
|
||||||
|
englishName: 'Latvian',
|
||||||
|
},
|
||||||
|
'lv-LV': {
|
||||||
|
nativeName: 'Latviešu',
|
||||||
|
englishName: 'Latvian',
|
||||||
|
},
|
||||||
|
mai: {
|
||||||
|
nativeName: 'मैथिली, মৈথিলী',
|
||||||
|
englishName: 'Maithili',
|
||||||
|
},
|
||||||
|
'mg-MG': {
|
||||||
|
nativeName: 'Malagasy',
|
||||||
|
englishName: 'Malagasy',
|
||||||
|
},
|
||||||
|
mk: {
|
||||||
|
nativeName: 'Македонски',
|
||||||
|
englishName: 'Macedonian',
|
||||||
|
},
|
||||||
|
'mk-MK': {
|
||||||
|
nativeName: 'Македонски (Македонски)',
|
||||||
|
englishName: 'Macedonian (Macedonian)',
|
||||||
|
},
|
||||||
|
ml: {
|
||||||
|
nativeName: 'മലയാളം',
|
||||||
|
englishName: 'Malayalam',
|
||||||
|
},
|
||||||
|
'ml-IN': {
|
||||||
|
nativeName: 'മലയാളം',
|
||||||
|
englishName: 'Malayalam',
|
||||||
|
},
|
||||||
|
'mn-MN': {
|
||||||
|
nativeName: 'Монгол',
|
||||||
|
englishName: 'Mongolian',
|
||||||
|
},
|
||||||
|
mr: {
|
||||||
|
nativeName: 'मराठी',
|
||||||
|
englishName: 'Marathi',
|
||||||
|
},
|
||||||
|
'mr-IN': {
|
||||||
|
nativeName: 'मराठी',
|
||||||
|
englishName: 'Marathi',
|
||||||
|
},
|
||||||
|
ms: {
|
||||||
|
nativeName: 'Bahasa Melayu',
|
||||||
|
englishName: 'Malay',
|
||||||
|
},
|
||||||
|
'ms-MY': {
|
||||||
|
nativeName: 'Bahasa Melayu',
|
||||||
|
englishName: 'Malay',
|
||||||
|
},
|
||||||
|
mt: {
|
||||||
|
nativeName: 'Malti',
|
||||||
|
englishName: 'Maltese',
|
||||||
|
},
|
||||||
|
'mt-MT': {
|
||||||
|
nativeName: 'Malti',
|
||||||
|
englishName: 'Maltese',
|
||||||
|
},
|
||||||
|
my: {
|
||||||
|
nativeName: 'ဗမာစကာ',
|
||||||
|
englishName: 'Burmese',
|
||||||
|
},
|
||||||
|
no: {
|
||||||
|
nativeName: 'Norsk',
|
||||||
|
englishName: 'Norwegian',
|
||||||
|
},
|
||||||
|
nb: {
|
||||||
|
nativeName: 'Norsk (bokmål)',
|
||||||
|
englishName: 'Norwegian (bokmal)',
|
||||||
|
},
|
||||||
|
'nb-NO': {
|
||||||
|
nativeName: 'Norsk (bokmål)',
|
||||||
|
englishName: 'Norwegian (bokmal)',
|
||||||
|
},
|
||||||
|
ne: {
|
||||||
|
nativeName: 'नेपाली',
|
||||||
|
englishName: 'Nepali',
|
||||||
|
},
|
||||||
|
'ne-NP': {
|
||||||
|
nativeName: 'नेपाली',
|
||||||
|
englishName: 'Nepali',
|
||||||
|
},
|
||||||
|
nl: {
|
||||||
|
nativeName: 'Nederlands',
|
||||||
|
englishName: 'Dutch',
|
||||||
|
},
|
||||||
|
'nl-BE': {
|
||||||
|
nativeName: 'Nederlands (België)',
|
||||||
|
englishName: 'Dutch (Belgium)',
|
||||||
|
},
|
||||||
|
'nl-NL': {
|
||||||
|
nativeName: 'Nederlands (Nederland)',
|
||||||
|
englishName: 'Dutch (Netherlands)',
|
||||||
|
},
|
||||||
|
'nn-NO': {
|
||||||
|
nativeName: 'Norsk (nynorsk)',
|
||||||
|
englishName: 'Norwegian (nynorsk)',
|
||||||
|
},
|
||||||
|
oc: {
|
||||||
|
nativeName: 'Occitan',
|
||||||
|
englishName: 'Occitan',
|
||||||
|
},
|
||||||
|
'or-IN': {
|
||||||
|
nativeName: 'ଓଡ଼ିଆ',
|
||||||
|
englishName: 'Oriya',
|
||||||
|
},
|
||||||
|
pa: {
|
||||||
|
nativeName: 'ਪੰਜਾਬੀ',
|
||||||
|
englishName: 'Punjabi',
|
||||||
|
},
|
||||||
|
'pa-IN': {
|
||||||
|
nativeName: 'ਪੰਜਾਬੀ (ਭਾਰਤ ਨੂੰ)',
|
||||||
|
englishName: 'Punjabi (India)',
|
||||||
|
},
|
||||||
|
pl: {
|
||||||
|
nativeName: 'Polski',
|
||||||
|
englishName: 'Polish',
|
||||||
|
},
|
||||||
|
'pl-PL': {
|
||||||
|
nativeName: 'Polski',
|
||||||
|
englishName: 'Polish',
|
||||||
|
},
|
||||||
|
'ps-AF': {
|
||||||
|
nativeName: 'پښتو',
|
||||||
|
englishName: 'Pashto',
|
||||||
|
},
|
||||||
|
pt: {
|
||||||
|
nativeName: 'Português',
|
||||||
|
englishName: 'Portuguese',
|
||||||
|
},
|
||||||
|
'pt-BR': {
|
||||||
|
nativeName: 'Português (Brasil)',
|
||||||
|
englishName: 'Portuguese (Brazil)',
|
||||||
|
},
|
||||||
|
'pt-PT': {
|
||||||
|
nativeName: 'Português (Portugal)',
|
||||||
|
englishName: 'Portuguese (Portugal)',
|
||||||
|
},
|
||||||
|
'qu-PE': {
|
||||||
|
nativeName: 'Qhichwa',
|
||||||
|
englishName: 'Quechua',
|
||||||
|
},
|
||||||
|
'rm-CH': {
|
||||||
|
nativeName: 'Rumantsch',
|
||||||
|
englishName: 'Romansh',
|
||||||
|
},
|
||||||
|
ro: {
|
||||||
|
nativeName: 'Română',
|
||||||
|
englishName: 'Romanian',
|
||||||
|
},
|
||||||
|
'ro-RO': {
|
||||||
|
nativeName: 'Română',
|
||||||
|
englishName: 'Romanian',
|
||||||
|
},
|
||||||
|
ru: {
|
||||||
|
nativeName: 'Русский',
|
||||||
|
englishName: 'Russian',
|
||||||
|
},
|
||||||
|
'ru-RU': {
|
||||||
|
nativeName: 'Русский',
|
||||||
|
englishName: 'Russian',
|
||||||
|
},
|
||||||
|
'sa-IN': {
|
||||||
|
nativeName: 'संस्कृतम्',
|
||||||
|
englishName: 'Sanskrit',
|
||||||
|
},
|
||||||
|
'se-NO': {
|
||||||
|
nativeName: 'Davvisámegiella',
|
||||||
|
englishName: 'Northern Sámi',
|
||||||
|
},
|
||||||
|
sh: {
|
||||||
|
nativeName: 'српскохрватски',
|
||||||
|
englishName: 'Serbo-Croatian',
|
||||||
|
},
|
||||||
|
'si-LK': {
|
||||||
|
nativeName: 'සිංහල',
|
||||||
|
englishName: 'Sinhala (Sri Lanka)',
|
||||||
|
},
|
||||||
|
sk: {
|
||||||
|
nativeName: 'Slovenčina',
|
||||||
|
englishName: 'Slovak',
|
||||||
|
},
|
||||||
|
'sk-SK': {
|
||||||
|
nativeName: 'Slovenčina (Slovakia)',
|
||||||
|
englishName: 'Slovak (Slovakia)',
|
||||||
|
},
|
||||||
|
sl: {
|
||||||
|
nativeName: 'Slovenščina',
|
||||||
|
englishName: 'Slovenian',
|
||||||
|
},
|
||||||
|
'sl-SI': {
|
||||||
|
nativeName: 'Slovenščina',
|
||||||
|
englishName: 'Slovenian',
|
||||||
|
},
|
||||||
|
'so-SO': {
|
||||||
|
nativeName: 'Soomaaliga',
|
||||||
|
englishName: 'Somali',
|
||||||
|
},
|
||||||
|
sq: {
|
||||||
|
nativeName: 'Shqip',
|
||||||
|
englishName: 'Albanian',
|
||||||
|
},
|
||||||
|
'sq-AL': {
|
||||||
|
nativeName: 'Shqip',
|
||||||
|
englishName: 'Albanian',
|
||||||
|
},
|
||||||
|
sr: {
|
||||||
|
nativeName: 'Српски',
|
||||||
|
englishName: 'Serbian',
|
||||||
|
},
|
||||||
|
'sr-RS': {
|
||||||
|
nativeName: 'Српски (Serbia)',
|
||||||
|
englishName: 'Serbian (Serbia)',
|
||||||
|
},
|
||||||
|
su: {
|
||||||
|
nativeName: 'Basa Sunda',
|
||||||
|
englishName: 'Sundanese',
|
||||||
|
},
|
||||||
|
sv: {
|
||||||
|
nativeName: 'Svenska',
|
||||||
|
englishName: 'Swedish',
|
||||||
|
},
|
||||||
|
'sv-SE': {
|
||||||
|
nativeName: 'Svenska',
|
||||||
|
englishName: 'Swedish',
|
||||||
|
},
|
||||||
|
sw: {
|
||||||
|
nativeName: 'Kiswahili',
|
||||||
|
englishName: 'Swahili',
|
||||||
|
},
|
||||||
|
'sw-KE': {
|
||||||
|
nativeName: 'Kiswahili',
|
||||||
|
englishName: 'Swahili (Kenya)',
|
||||||
|
},
|
||||||
|
ta: {
|
||||||
|
nativeName: 'தமிழ்',
|
||||||
|
englishName: 'Tamil',
|
||||||
|
},
|
||||||
|
'ta-IN': {
|
||||||
|
nativeName: 'தமிழ்',
|
||||||
|
englishName: 'Tamil',
|
||||||
|
},
|
||||||
|
te: {
|
||||||
|
nativeName: 'తెలుగు',
|
||||||
|
englishName: 'Telugu',
|
||||||
|
},
|
||||||
|
'te-IN': {
|
||||||
|
nativeName: 'తెలుగు',
|
||||||
|
englishName: 'Telugu',
|
||||||
|
},
|
||||||
|
tg: {
|
||||||
|
nativeName: 'забо́ни тоҷикӣ́',
|
||||||
|
englishName: 'Tajik',
|
||||||
|
},
|
||||||
|
'tg-TJ': {
|
||||||
|
nativeName: 'тоҷикӣ',
|
||||||
|
englishName: 'Tajik',
|
||||||
|
},
|
||||||
|
th: {
|
||||||
|
nativeName: 'ภาษาไทย',
|
||||||
|
englishName: 'Thai',
|
||||||
|
},
|
||||||
|
'th-TH': {
|
||||||
|
nativeName: 'ภาษาไทย (ประเทศไทย)',
|
||||||
|
englishName: 'Thai (Thailand)',
|
||||||
|
},
|
||||||
|
fil: {
|
||||||
|
nativeName: 'Filipino',
|
||||||
|
englishName: 'Filipino',
|
||||||
|
},
|
||||||
|
tlh: {
|
||||||
|
nativeName: 'tlhIngan-Hol',
|
||||||
|
englishName: 'Klingon',
|
||||||
|
},
|
||||||
|
tr: {
|
||||||
|
nativeName: 'Türkçe',
|
||||||
|
englishName: 'Turkish',
|
||||||
|
},
|
||||||
|
'tr-TR': {
|
||||||
|
nativeName: 'Türkçe',
|
||||||
|
englishName: 'Turkish',
|
||||||
|
},
|
||||||
|
'tt-RU': {
|
||||||
|
nativeName: 'татарча',
|
||||||
|
englishName: 'Tatar',
|
||||||
|
},
|
||||||
|
uk: {
|
||||||
|
nativeName: 'Українська',
|
||||||
|
englishName: 'Ukrainian',
|
||||||
|
},
|
||||||
|
'uk-UA': {
|
||||||
|
nativeName: 'Українська',
|
||||||
|
englishName: 'Ukrainian',
|
||||||
|
},
|
||||||
|
ur: {
|
||||||
|
nativeName: 'اردو',
|
||||||
|
englishName: 'Urdu',
|
||||||
|
},
|
||||||
|
'ur-PK': {
|
||||||
|
nativeName: 'اردو',
|
||||||
|
englishName: 'Urdu',
|
||||||
|
},
|
||||||
|
uz: {
|
||||||
|
nativeName: "O'zbek",
|
||||||
|
englishName: 'Uzbek',
|
||||||
|
},
|
||||||
|
'uz-UZ': {
|
||||||
|
nativeName: "O'zbek",
|
||||||
|
englishName: 'Uzbek',
|
||||||
|
},
|
||||||
|
vi: {
|
||||||
|
nativeName: 'Tiếng Việt',
|
||||||
|
englishName: 'Vietnamese',
|
||||||
|
},
|
||||||
|
'vi-VN': {
|
||||||
|
nativeName: 'Tiếng Việt',
|
||||||
|
englishName: 'Vietnamese',
|
||||||
|
},
|
||||||
|
'xh-ZA': {
|
||||||
|
nativeName: 'isiXhosa',
|
||||||
|
englishName: 'Xhosa',
|
||||||
|
},
|
||||||
|
yi: {
|
||||||
|
nativeName: 'ייִדיש',
|
||||||
|
englishName: 'Yiddish',
|
||||||
|
},
|
||||||
|
'yi-DE': {
|
||||||
|
nativeName: 'ייִדיש (German)',
|
||||||
|
englishName: 'Yiddish (German)',
|
||||||
|
},
|
||||||
|
zh: {
|
||||||
|
nativeName: '中文',
|
||||||
|
englishName: 'Chinese',
|
||||||
|
},
|
||||||
|
'zh-Hans': {
|
||||||
|
nativeName: '中文简体',
|
||||||
|
englishName: 'Chinese Simplified',
|
||||||
|
},
|
||||||
|
'zh-Hant': {
|
||||||
|
nativeName: '中文繁體',
|
||||||
|
englishName: 'Chinese Traditional',
|
||||||
|
},
|
||||||
|
'zh-CN': {
|
||||||
|
nativeName: '中文(中国大陆)',
|
||||||
|
englishName: 'Chinese Simplified (China)',
|
||||||
|
},
|
||||||
|
'zh-HK': {
|
||||||
|
nativeName: '中文(香港)',
|
||||||
|
englishName: 'Chinese Traditional (Hong Kong)',
|
||||||
|
},
|
||||||
|
'zh-SG': {
|
||||||
|
nativeName: '中文(新加坡)',
|
||||||
|
englishName: 'Chinese Simplified (Singapore)',
|
||||||
|
},
|
||||||
|
'zh-TW': {
|
||||||
|
nativeName: '中文(台灣)',
|
||||||
|
englishName: 'Chinese Traditional (Taiwan)',
|
||||||
|
},
|
||||||
|
'zu-ZA': {
|
||||||
|
nativeName: 'isiZulu',
|
||||||
|
englishName: 'Zulu',
|
||||||
|
},
|
||||||
|
};
|
||||||
@@ -16,7 +16,8 @@
|
|||||||
"check": "npm run check --workspaces --if-present",
|
"check": "npm run check --workspaces --if-present",
|
||||||
"fix": "npm run fix --workspaces --if-present",
|
"fix": "npm run fix --workspaces --if-present",
|
||||||
"check-types": "npm run check-types --workspaces --if-present",
|
"check-types": "npm run check-types --workspaces --if-present",
|
||||||
"clean": "npm run clean --workspaces --if-present"
|
"clean": "npm run clean --workspaces --if-present",
|
||||||
|
"gen-lang-imports": "node scripts/gen_lang_imports.mjs"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"react-intl": "6.6.2",
|
"react-intl": "6.6.2",
|
||||||
|
|||||||
@@ -58,6 +58,7 @@ export type ClientConfig = {
|
|||||||
EnableCustomEmoji: string;
|
EnableCustomEmoji: string;
|
||||||
EnableCustomGroups: string;
|
EnableCustomGroups: string;
|
||||||
EnableCustomUserStatuses: string;
|
EnableCustomUserStatuses: string;
|
||||||
|
EnableExperimentalLocales: string;
|
||||||
EnableUserStatuses: string;
|
EnableUserStatuses: string;
|
||||||
EnableLastActiveTime: string;
|
EnableLastActiveTime: string;
|
||||||
EnableTimedDND: string;
|
EnableTimedDND: string;
|
||||||
@@ -720,6 +721,7 @@ export type LocalizationSettings = {
|
|||||||
DefaultServerLocale: string;
|
DefaultServerLocale: string;
|
||||||
DefaultClientLocale: string;
|
DefaultClientLocale: string;
|
||||||
AvailableLocales: string;
|
AvailableLocales: string;
|
||||||
|
EnableExperimentalLocales: boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type SamlSettings = {
|
export type SamlSettings = {
|
||||||
|
|||||||
62
webapp/scripts/gen_lang_imports.mjs
Обычный файл
62
webapp/scripts/gen_lang_imports.mjs
Обычный файл
@@ -0,0 +1,62 @@
|
|||||||
|
#!/bin/node
|
||||||
|
|
||||||
|
import * as fs from 'fs';
|
||||||
|
import langmap from '../channels/src/i18n/langmap.js';
|
||||||
|
|
||||||
|
let lines = '';
|
||||||
|
const langIDs = [];
|
||||||
|
const langFiles = {};
|
||||||
|
const langLabels = {};
|
||||||
|
|
||||||
|
fs.readdirSync('./channels/src/i18n').forEach(file => {
|
||||||
|
if (file.endsWith('.json')) {
|
||||||
|
const langID = file.substr(0, file.indexOf('.json'));
|
||||||
|
|
||||||
|
// Skip default language
|
||||||
|
if (langID === 'en') {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
langIDs.push(langID);
|
||||||
|
lines += `import ${langID.replace('-', '')} from './${file}';\n`;
|
||||||
|
langFiles[langID] = langID.replace('-', '');
|
||||||
|
|
||||||
|
let m = langmap[langID]
|
||||||
|
if (!m) {
|
||||||
|
// We fallback to the language code prefix if we can't find a map.
|
||||||
|
const id = langID.includes('-') ? langID.substr(0, langID.indexOf('-')) : langID;
|
||||||
|
for (const k of Object.keys(langmap)) {
|
||||||
|
if (k.startsWith(id)) {
|
||||||
|
m = langmap[k];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
langLabels[langID] = m ? m["nativeName"] : langID;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
lines += `\nexport const langIDs = ${JSON.stringify(langIDs)};\n`
|
||||||
|
lines += `\nexport const langLabels = ${JSON.stringify(langLabels)};\n`
|
||||||
|
|
||||||
|
// To generate the file exports we need to do a bit more work to handle ids with dashes and also output a map of literals rather than strings.
|
||||||
|
lines += '\nexport const langFiles = {' + Object.keys(langFiles).reduce((out, id, idx) => {
|
||||||
|
if (id.includes('-')) {
|
||||||
|
out += `'${id}':${langFiles[id]}`;
|
||||||
|
} else {
|
||||||
|
out += `${langFiles[id]}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (idx !== (langIDs.length - 1)) {
|
||||||
|
out += ',';
|
||||||
|
}
|
||||||
|
|
||||||
|
return out;
|
||||||
|
}, '') + '};';
|
||||||
|
|
||||||
|
const header = `// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
||||||
|
// See LICENSE.txt for license information.\n\n// DO NOT EDIT - This file is generated by gen_lang_imports through the gen-lang-imports script\n\n/* eslint-disable */\n\n`;
|
||||||
|
|
||||||
|
fs.writeFileSync('./channels/src/i18n/imports.ts', header+lines);
|
||||||
|
|
||||||
Ссылка в новой задаче
Block a user