65 lines
1.6 KiB
JavaScript
65 lines
1.6 KiB
JavaScript
import PreloadStore from 'preload-store';
|
|
|
|
export default {
|
|
name: 'localization',
|
|
after: 'inject-objects',
|
|
|
|
enableVerboseLocalization() {
|
|
let counter = 0;
|
|
let keys = {};
|
|
let t = I18n.t;
|
|
|
|
I18n.noFallbacks = true;
|
|
|
|
I18n.t = I18n.translate = function(scope, value){
|
|
let current = keys[scope];
|
|
if (!current) {
|
|
current = keys[scope] = ++counter;
|
|
let message = "Translation #" + current + ": " + scope;
|
|
if (!_.isEmpty(value)) {
|
|
message += ", parameters: " + JSON.stringify(value);
|
|
}
|
|
Em.Logger.info(message);
|
|
}
|
|
return t.apply(I18n, [scope, value]) + " (#" + current + ")";
|
|
};
|
|
},
|
|
|
|
initialize(container) {
|
|
const siteSettings = container.lookup('site-settings:main');
|
|
if (siteSettings.verbose_localization) {
|
|
this.enableVerboseLocalization();
|
|
}
|
|
|
|
// Merge any overrides into our object
|
|
const overrides = PreloadStore.get('translationOverrides') || {};
|
|
Object.keys(overrides).forEach(k => {
|
|
const v = overrides[k];
|
|
|
|
// Special case: Message format keys are functions
|
|
if (/_MF$/.test(k)) {
|
|
k = k.replace(/^[a-z_]*js\./, '');
|
|
I18n._compiledMFs[k] = new Function('transKey', `return (${v})(transKey);`);
|
|
return;
|
|
}
|
|
|
|
k = k.replace('admin_js', 'js');
|
|
|
|
const segs = k.split('.');
|
|
|
|
let node = I18n.translations[I18n.locale];
|
|
let i = 0;
|
|
|
|
for (; i < segs.length - 1; i++) {
|
|
if (!(segs[i] in node)) node[segs[i]] = {};
|
|
node = node[segs[i]];
|
|
}
|
|
|
|
if (typeof node === "object") {
|
|
node[segs[segs.length-1]] = v;
|
|
}
|
|
|
|
});
|
|
}
|
|
};
|