Project

General

Profile

« Previous | Next » 

Revision e848148a

Added by Adam Ruzicka about 1 year ago

Fixes #36330 - Fix plugin translations in frontend

- Add plugin:po_to_json rake task
- Load js locale files for all plugins
- Make i18n.js do multi-domain lookup

View differences:

webpack/assets/javascripts/react_app/common/I18n.js
export const documentLocale = () => langAttr;
const unwrapLocaleDomains = (locales, locale) => {
const result = locales[locale];
Object.entries(locales).forEach(([key, localeData]) => {
if (locale in localeData && 'domain' in localeData[locale]) {
result.locale_data[key] = localeData[locale].locale_data[key];
}
});
return result;
};
const getLocaleData = () => {
const locales = window.locales || {};
const locale = documentLocale().replace(/-/g, '_');
......
);
return { domain: 'app', locale_data: { app: { '': {} } } };
}
return locales[locale];
return unwrapLocaleDomains(locales, locale);
};
export const jed = forceSingleton('Jed', () => new Jed(getLocaleData()));
export const strictJed = forceSingleton('strictJed', () => {
const options = {
...jed.options,
missing_key_callback: (_key, _domain) => {
throw new Error('Key not found');
},
};
return new Jed(options);
});
const multidomain = (strict, fallback) => (...args) => {
// eslint-disable-next-line no-unused-vars
for (const domain of Object.keys(strictJed.options.locale_data)) {
try {
return strictJed[strict](domain, ...args);
} catch {} // eslint-disable-line no-empty
}
return jed[fallback](...args);
};
export const multidomainTranslate = multidomain('dgettext', 'gettext');
export const multidomainngettext = multidomain('dngettext', 'ngettext');
export const translate = (...args) =>
`${cheveronPrefix()}${jed.gettext(...args)}${cheveronSuffix()}`;
`${cheveronPrefix()}${multidomainTranslate(...args)}${cheveronSuffix()}`;
export const ngettext = (...args) =>
`${cheveronPrefix()}${jed.ngettext(...args)}${cheveronSuffix()}`;
`${cheveronPrefix()}${multidomainngettext(...args)}${cheveronSuffix()}`;
export const { sprintf } = jed;

Also available in: Unified diff