mirror of
https://github.com/elyby/accounts-frontend.git
synced 2024-12-29 16:30:54 +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 LANG_DIR = `${__dirname}/../src/i18n`;
|
||||||
const SOURCE_LANG = 'en'; // Базовый язык, относительно которого будут формироваться все остальные переводы
|
const SOURCE_LANG = 'en'; // Базовый язык, относительно которого будут формироваться все остальные переводы
|
||||||
const SOURCE_FILE_NAME = 'i18n.json'; // Название файла с исходными строками внутри OneSky
|
const SOURCE_FILE_NAME = 'i18n.json'; // Название файла с исходными строками внутри OneSky
|
||||||
|
const INDEX_FILE_NAME = 'index.json'; // Название файла с информацией о переводах
|
||||||
const MIN_RELEASE_PROGRESS = 80; // Какой процент локали перевода должен быть выполнен, чтобы локаль была опубликована
|
const MIN_RELEASE_PROGRESS = 80; // Какой процент локали перевода должен быть выполнен, чтобы локаль была опубликована
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -84,8 +85,7 @@ function sortByKeys(object) {
|
|||||||
async function pullReadyLanguages() {
|
async function pullReadyLanguages() {
|
||||||
const languages = JSON.parse(await onesky.getLanguages({...defaultOptions}));
|
const languages = JSON.parse(await onesky.getLanguages({...defaultOptions}));
|
||||||
return languages.data
|
return languages.data
|
||||||
.filter((elem) => elem.is_ready_to_publish || parseFloat(elem.translation_progress) > MIN_RELEASE_PROGRESS)
|
.filter((elem) => elem.is_ready_to_publish || parseFloat(elem.translation_progress) > MIN_RELEASE_PROGRESS);
|
||||||
.map((elem) => elem.custom_locale || elem.code);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async function pullTranslate(language) {
|
async function pullTranslate(language) {
|
||||||
@ -97,14 +97,26 @@ async function pullTranslate(language) {
|
|||||||
async function pull() {
|
async function pull() {
|
||||||
console.log('Pulling locales list...');
|
console.log('Pulling locales list...');
|
||||||
const langs = await pullReadyLanguages();
|
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...');
|
console.log('Pulling translates...');
|
||||||
await Promise.all(langs.map(async (lang) => {
|
await Promise.all(langsList.map(async (lang) => {
|
||||||
await pullTranslate(lang);
|
await pullTranslate(lang);
|
||||||
console.log(ch.green('Locale ') + ch.white.bold(code2locale(lang)) + ch.green(' successfully pulled'));
|
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() {
|
async function publish() {
|
||||||
|
@ -7,18 +7,7 @@ import { FormattedMessage as Message } from 'react-intl';
|
|||||||
import styles from './langMenu.scss';
|
import styles from './langMenu.scss';
|
||||||
import messages from './langMenu.intl.json';
|
import messages from './langMenu.intl.json';
|
||||||
|
|
||||||
const LANGS = {
|
import LANGS from 'i18n/index.json';
|
||||||
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',
|
|
||||||
};
|
|
||||||
|
|
||||||
class LangMenu extends Component {
|
class LangMenu extends Component {
|
||||||
static displayName = 'LangMenu';
|
static displayName = 'LangMenu';
|
||||||
@ -59,12 +48,12 @@ class LangMenu extends Component {
|
|||||||
<ul className={classNames(styles.menu, {
|
<ul className={classNames(styles.menu, {
|
||||||
[styles.menuActive]: isActive
|
[styles.menuActive]: isActive
|
||||||
})}>
|
})}>
|
||||||
{Object.keys(LANGS).map((lang) => (
|
{Object.keys(LANGS).map((locale) => (
|
||||||
<li className={classNames(styles.menuItem, {
|
<li className={classNames(styles.menuItem, {
|
||||||
[styles.activeMenuItem]: lang === userLang
|
[styles.activeMenuItem]: locale === userLang
|
||||||
})} onClick={this.onChangeLang(lang)} key={lang}
|
})} onClick={this.onChangeLang(locale)} key={locale}
|
||||||
>
|
>
|
||||||
{this.renderLangLabel(lang)}
|
{this.renderLangLabel(locale)}
|
||||||
</li>
|
</li>
|
||||||
))}
|
))}
|
||||||
<li className={styles.improveTranslatesLink}>
|
<li className={styles.improveTranslatesLink}>
|
||||||
@ -93,12 +82,12 @@ class LangMenu extends Component {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
renderLangLabel(lang) {
|
renderLangLabel(locale) {
|
||||||
const langLabel = LANGS[lang];
|
const langLabel = LANGS[locale].name;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<span>
|
<span>
|
||||||
<span className={styles[`lang${lang[0].toUpperCase() + lang.slice(1)}`]} />
|
<span className={styles[`lang${locale[0].toUpperCase() + locale.slice(1)}`]} />
|
||||||
{langLabel}
|
{langLabel}
|
||||||
</span>
|
</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 { addLocaleData } from 'react-intl';
|
||||||
import beLocaleData from 'react-intl/locale-data/be';
|
import beLocaleData from 'react-intl/locale-data/be';
|
||||||
import enLocaleData from 'react-intl/locale-data/en';
|
import enLocaleData from 'react-intl/locale-data/en';
|
||||||
@ -22,7 +24,7 @@ addLocaleData(ptLocaleData);
|
|||||||
addLocaleData(ukLocaleData);
|
addLocaleData(ukLocaleData);
|
||||||
addLocaleData(viLocaleData);
|
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 DEFAULT_LANGUAGE = 'en';
|
||||||
|
|
||||||
const needPolyfill = !window.Intl;
|
const needPolyfill = !window.Intl;
|
||||||
|
Loading…
Reference in New Issue
Block a user