paricafe/webpack/module/rules/i18n.ts

35 lines
725 B
TypeScript
Raw Normal View History

2017-05-16 10:00:56 -05:00
/**
* Replace i18n texts
*/
const StringReplacePlugin = require('string-replace-webpack-plugin');
export default (lang, locale) => ({
enforce: 'pre',
test: /\.(tag|js)$/,
exclude: /node_modules/,
loader: StringReplacePlugin.replace({
replacements: [
{
pattern: /%i18n:(.+?)%/g, replacement: (_, key) => {
let text = locale;
const error = key.split('.').some(k => {
if (text.hasOwnProperty(k)) {
text = text[k];
return false;
} else {
return true;
}
});
if (error) {
console.warn(`key '${key}' not found in '${lang}'`);
return key;
} else {
return text.replace(/'/g, '\\\'').replace(/"/g, '\\"');
}
}
}
]
})
});