68 lines
1.3 KiB
JavaScript
68 lines
1.3 KiB
JavaScript
// babel-plugin-react-translate
|
|
// (c) Vitaliy Filippov 2021+
|
|
// SPDX-License-Identifier: LGPL-3.0
|
|
|
|
import plural from './plural_ru.js';
|
|
|
|
const strings = {};
|
|
|
|
export { plural };
|
|
|
|
export function setStrings(lang, strHash)
|
|
{
|
|
strings[lang] = strHash;
|
|
}
|
|
|
|
export function addStrings(lang, strHash)
|
|
{
|
|
Object.assign(strings[lang], strHash);
|
|
}
|
|
|
|
let fallback = 'en', language = 'ru';
|
|
|
|
export function setLanguage(lang)
|
|
{
|
|
language = lang;
|
|
}
|
|
|
|
export function getLanguage()
|
|
{
|
|
return language;
|
|
}
|
|
|
|
export function setFallback(lang)
|
|
{
|
|
fallback = lang;
|
|
}
|
|
|
|
export function getFallback()
|
|
{
|
|
return fallback;
|
|
}
|
|
|
|
export function L(s)
|
|
{
|
|
s = strings[language] && strings[language][s] || strings[fallback] && strings[fallback][s] || s;
|
|
if (arguments.length > 1)
|
|
{
|
|
const arg = arguments;
|
|
s = s.replace(/\{(\d+)\}/g, (m, m1) =>
|
|
{
|
|
let r = arg[parseInt(m1)];
|
|
if (r == null)
|
|
r = '';
|
|
return r;
|
|
});
|
|
s = s.replace(
|
|
/\{N:(\d+):((?:[^:\\]+|\\.)*):((?:[^:\\]+|\\.)*):((?:[^:\\]+|\\.)*)\}/g,
|
|
(m, m1, m2, m3, m4) => plural(
|
|
arg[parseInt(m1)]||'',
|
|
m2.replace(/\\(.)/g, '$1'),
|
|
m3.replace(/\\(.)/g, '$1'),
|
|
m4.replace(/\\(.)/g, '$1')
|
|
)
|
|
);
|
|
}
|
|
return s;
|
|
}
|