iceshrimp/webpack/module/rules/i18n.ts

47 lines
960 B
TypeScript
Raw Normal View History

2017-05-17 00:00:56 +09:00
/**
* Replace i18n texts
*/
const StringReplacePlugin = require('string-replace-webpack-plugin');
2017-10-25 20:29:14 +09:00
export default (lang, locale) => {
function get(key: string) {
let text = locale;
// Check the key existance
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; // Fallback
} else {
return text;
}
}
return {
enforce: 'pre',
2017-11-14 20:23:12 +09:00
test: /\.(tag|js|ts)$/,
2017-10-25 20:29:14 +09:00
exclude: /node_modules/,
loader: StringReplacePlugin.replace({
replacements: [{
2017-12-08 02:48:21 +09:00
pattern: /"%i18n:(.+?)%"/g, replacement: (_, key) =>
'"' + get(key).replace(/"/g, '\\"') + '"'
2017-10-25 20:29:14 +09:00
}, {
2017-12-08 02:48:21 +09:00
pattern: /'%i18n:(.+?)%'/g, replacement: (_, key) =>
'\'' + get(key).replace(/'/g, '\\\'') + '\''
2017-10-25 20:29:14 +09:00
}, {
2017-12-08 02:48:21 +09:00
pattern: /%i18n:(.+?)%/g, replacement: (_, key) =>
get(key)
2017-10-25 20:29:14 +09:00
}]
})
};
};