summaryrefslogtreecommitdiff
path: root/webpack/module/rules/i18n.ts
blob: 3023253cabc6c2cbe5f25a8384a12bd6bae44144 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
/**
 * 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;
					
					// 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.replace(/'/g, '\\\'').replace(/"/g, '\\"');
					}
				}
			}
		]
	})
});