50 lines
		
	
	
		
			1005 B
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			1005 B
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
/**
 | 
						|
 * Replace i18n texts
 | 
						|
 */
 | 
						|
 | 
						|
const StringReplacePlugin = require('string-replace-webpack-plugin');
 | 
						|
 | 
						|
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',
 | 
						|
		test: /\.(tag|js)$/,
 | 
						|
		exclude: /node_modules/,
 | 
						|
		loader: StringReplacePlugin.replace({
 | 
						|
			replacements: [{
 | 
						|
				pattern: /"%i18n:(.+?)%"/g, replacement: (_, key) => {
 | 
						|
					return '"' + get(key).replace(/"/g, '\\"') + '"';
 | 
						|
				}
 | 
						|
			}, {
 | 
						|
				pattern: /'%i18n:(.+?)%'/g, replacement: (_, key) => {
 | 
						|
					return '\'' + get(key).replace(/'/g, '\\\'') + '\'';
 | 
						|
				}
 | 
						|
			}, {
 | 
						|
				pattern: /%i18n:(.+?)%/g, replacement: (_, key) => {
 | 
						|
					return get(key);
 | 
						|
				}
 | 
						|
			}]
 | 
						|
		})
 | 
						|
	};
 | 
						|
};
 |