Commit c7b12244 by Vladislav Lagunov

Поддержка *.po формата

parent 74013b7d
...@@ -42,6 +42,8 @@ export default withGettext(gettext)(Widget); ...@@ -42,6 +42,8 @@ export default withGettext(gettext)(Widget);
## Формат *.po.yml ## Формат *.po.yml
> 2018-10-31 DEPRECATED: Решил использовать стантартный формат *.po
Альтернативный формат, для *.po файлов предназначен предназначен для Альтернативный формат, для *.po файлов предназначен предназначен для
более простой манипуляции с gettext-данными, и для обеспечения более простой манипуляции с gettext-данными, и для обеспечения
возможности хранения переводов вместе с UI-компонентами модуль возможности хранения переводов вместе с UI-компонентами модуль
......
...@@ -58,6 +58,7 @@ export function makeGettext(...webpackContexts): DeferredGettext { ...@@ -58,6 +58,7 @@ export function makeGettext(...webpackContexts): DeferredGettext {
function flattenModules(xs: any[]) { function flattenModules(xs: any[]) {
return Array.prototype.concat.apply([], xs.map(x => { return Array.prototype.concat.apply([], xs.map(x => {
if ('__esModule' in x) x = x.default;
return Array.isArray(x) ? flattenModules(x) : [x] return Array.isArray(x) ? flattenModules(x) : [x]
})); }));
} }
...@@ -120,15 +121,21 @@ export function requireTranslations(webpackContext /*: WebpackContext*/): Transl ...@@ -120,15 +121,21 @@ export function requireTranslations(webpackContext /*: WebpackContext*/): Transl
*/ */
function assignData(dst: Translations, ...srcs: GettextData[]): Translations { function assignData(dst: Translations, ...srcs: GettextData[]): Translations {
srcs.forEach(data => { srcs.forEach(data => {
const locale = data[''].locale; if (!locale || typeof(locale) !== 'string') return; const locale_ = data[''].language || data[''].locale; if (!locale_ || typeof(locale_) !== 'string') return;
const explicitKeys = data['%podata']; const locale = locale_.replace(/_/g, '-');
const podata = data['%podata'];
for (const k of Object.keys(data)) { for (const k of Object.keys(data)) {
if (k === '' || k === '%podata') continue; if (k === '' || k === '%podata') continue;
dst[locale] = dst[locale] || {}; dst[locale] = dst[locale] || {};
if (Array.isArray(data[k]) && data[k][0] === null) {
dst[locale][k] = data[k].slice(1);
if (dst[locale][k].length === 1) dst[locale][k] = dst[locale][k][0];
} else {
dst[locale][k] = data[k]; dst[locale][k] = data[k];
} }
}
if (explicitKeys) for (const explicit of explicitKeys) { if (podata) for (const explicit of podata) {
const key = explicit.msgctxt ? explicit.msgctxt + CONTEXT_DELIMITER + explicit.msgid : explicit.msgid; const key = explicit.msgctxt ? explicit.msgctxt + CONTEXT_DELIMITER + explicit.msgid : explicit.msgid;
dst[locale] = dst[locale] || {}; dst[locale] = dst[locale] || {};
dst[locale][key] = explicit.msgstr; dst[locale][key] = explicit.msgstr;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment