mirror of
https://github.com/elyby/accounts-frontend.git
synced 2024-12-27 23:40:28 +05:30
Добавлена генерация index.json файла с информацией о доступных локалях
This commit is contained in:
parent
d8e7ec8294
commit
9445ed4505
@ -8,6 +8,7 @@ import ch from 'chalk';
|
||||
const LANG_DIR = `${__dirname}/../src/i18n`;
|
||||
const SOURCE_LANG = 'en'; // Базовый язык, относительно которого будут формироваться все остальные переводы
|
||||
const SOURCE_FILE_NAME = 'i18n.json'; // Название файла с исходными строками внутри OneSky
|
||||
const INDEX_FILE_NAME = 'index.json'; // Название файла с информацией о переводах
|
||||
const MIN_RELEASE_PROGRESS = 80; // Какой процент локали перевода должен быть выполнен, чтобы локаль была опубликована
|
||||
|
||||
/**
|
||||
@ -84,8 +85,7 @@ function sortByKeys(object) {
|
||||
async function pullReadyLanguages() {
|
||||
const languages = JSON.parse(await onesky.getLanguages({...defaultOptions}));
|
||||
return languages.data
|
||||
.filter((elem) => elem.is_ready_to_publish || parseFloat(elem.translation_progress) > MIN_RELEASE_PROGRESS)
|
||||
.map((elem) => elem.custom_locale || elem.code);
|
||||
.filter((elem) => elem.is_ready_to_publish || parseFloat(elem.translation_progress) > MIN_RELEASE_PROGRESS);
|
||||
}
|
||||
|
||||
async function pullTranslate(language) {
|
||||
@ -97,14 +97,26 @@ async function pullTranslate(language) {
|
||||
async function pull() {
|
||||
console.log('Pulling locales list...');
|
||||
const langs = await pullReadyLanguages();
|
||||
const langsList = langs.map((elem) => elem.custom_locale || elem.code);
|
||||
|
||||
console.log(ch.green('Pulled locales: ') + langs.map((lang) => code2locale(lang)).join(', '));
|
||||
console.log(ch.green('Pulled locales: ') + langsList.map((lang) => code2locale(lang)).join(', '));
|
||||
|
||||
console.log('Pulling translates...');
|
||||
await Promise.all(langs.map(async (lang) => {
|
||||
await Promise.all(langsList.map(async (lang) => {
|
||||
await pullTranslate(lang);
|
||||
console.log(ch.green('Locale ') + ch.white.bold(code2locale(lang)) + ch.green(' successfully pulled'));
|
||||
}));
|
||||
|
||||
console.log('Writing an index file...');
|
||||
const mapFileContent = {};
|
||||
langs.map((elem) => {
|
||||
mapFileContent[elem.locale] = {
|
||||
name: elem.local_name.match(/^([^\(]+)/)[0].trim(), // Обрезаем значения в скобках
|
||||
progress: parseFloat(elem.translation_progress),
|
||||
};
|
||||
});
|
||||
fs.writeFileSync(`${LANG_DIR}/${INDEX_FILE_NAME}`, formatTranslates(mapFileContent));
|
||||
console.log(ch.green('The index file was successfully written'));
|
||||
}
|
||||
|
||||
async function publish() {
|
||||
|
@ -7,18 +7,7 @@ import { FormattedMessage as Message } from 'react-intl';
|
||||
import styles from './langMenu.scss';
|
||||
import messages from './langMenu.intl.json';
|
||||
|
||||
const LANGS = {
|
||||
be: 'Беларуская',
|
||||
en: 'English',
|
||||
id: 'Bahasa Indonesia',
|
||||
pl: 'Polski',
|
||||
ro: 'Română',
|
||||
ru: 'Русский',
|
||||
sl: 'Slovenščina',
|
||||
pt: 'Português (Br)',
|
||||
uk: 'Українська',
|
||||
vi: 'Tiếng Việt',
|
||||
};
|
||||
import LANGS from 'i18n/index.json';
|
||||
|
||||
class LangMenu extends Component {
|
||||
static displayName = 'LangMenu';
|
||||
@ -59,12 +48,12 @@ class LangMenu extends Component {
|
||||
<ul className={classNames(styles.menu, {
|
||||
[styles.menuActive]: isActive
|
||||
})}>
|
||||
{Object.keys(LANGS).map((lang) => (
|
||||
{Object.keys(LANGS).map((locale) => (
|
||||
<li className={classNames(styles.menuItem, {
|
||||
[styles.activeMenuItem]: lang === userLang
|
||||
})} onClick={this.onChangeLang(lang)} key={lang}
|
||||
[styles.activeMenuItem]: locale === userLang
|
||||
})} onClick={this.onChangeLang(locale)} key={locale}
|
||||
>
|
||||
{this.renderLangLabel(lang)}
|
||||
{this.renderLangLabel(locale)}
|
||||
</li>
|
||||
))}
|
||||
<li className={styles.improveTranslatesLink}>
|
||||
@ -93,12 +82,12 @@ class LangMenu extends Component {
|
||||
);
|
||||
}
|
||||
|
||||
renderLangLabel(lang) {
|
||||
const langLabel = LANGS[lang];
|
||||
renderLangLabel(locale) {
|
||||
const langLabel = LANGS[locale].name;
|
||||
|
||||
return (
|
||||
<span>
|
||||
<span className={styles[`lang${lang[0].toUpperCase() + lang.slice(1)}`]} />
|
||||
<span className={styles[`lang${locale[0].toUpperCase() + locale.slice(1)}`]} />
|
||||
{langLabel}
|
||||
</span>
|
||||
);
|
||||
|
42
src/i18n/index.json
Normal file
42
src/i18n/index.json
Normal file
@ -0,0 +1,42 @@
|
||||
{
|
||||
"be": {
|
||||
"name": "Беларуская",
|
||||
"progress": 100
|
||||
},
|
||||
"en": {
|
||||
"name": "English",
|
||||
"progress": 100
|
||||
},
|
||||
"id": {
|
||||
"name": "Bahasa Indonesia",
|
||||
"progress": 99.5
|
||||
},
|
||||
"pl": {
|
||||
"name": "Polski",
|
||||
"progress": 100
|
||||
},
|
||||
"pt": {
|
||||
"name": "Português",
|
||||
"progress": 100
|
||||
},
|
||||
"ro": {
|
||||
"name": "Română",
|
||||
"progress": 95.4
|
||||
},
|
||||
"ru": {
|
||||
"name": "Русский",
|
||||
"progress": 100
|
||||
},
|
||||
"sl": {
|
||||
"name": "Slovenščina",
|
||||
"progress": 100
|
||||
},
|
||||
"uk": {
|
||||
"name": "Українська",
|
||||
"progress": 100
|
||||
},
|
||||
"vi": {
|
||||
"name": "Tiếng Việt",
|
||||
"progress": 100
|
||||
}
|
||||
}
|
@ -1,3 +1,5 @@
|
||||
import locales from 'i18n/index.json';
|
||||
|
||||
import { addLocaleData } from 'react-intl';
|
||||
import beLocaleData from 'react-intl/locale-data/be';
|
||||
import enLocaleData from 'react-intl/locale-data/en';
|
||||
@ -22,7 +24,7 @@ addLocaleData(ptLocaleData);
|
||||
addLocaleData(ukLocaleData);
|
||||
addLocaleData(viLocaleData);
|
||||
|
||||
const SUPPORTED_LANGUAGES = ['be', 'en', 'id', 'pl', 'ro', 'ru', 'sl', 'pt', 'uk', 'vi'];
|
||||
const SUPPORTED_LANGUAGES = Object.keys(locales);
|
||||
const DEFAULT_LANGUAGE = 'en';
|
||||
|
||||
const needPolyfill = !window.Intl;
|
||||
|
Loading…
Reference in New Issue
Block a user