From 4cac6316f77e4c31d8caa1e7bb74ea9a063e02c7 Mon Sep 17 00:00:00 2001 From: syuilo Date: Wed, 25 Oct 2017 20:29:14 +0900 Subject: [PATCH] [Client] Fix bug --- webpack/module/rules/i18n.ts | 72 +++++++++++++++++++++--------------- 1 file changed, 42 insertions(+), 30 deletions(-) diff --git a/webpack/module/rules/i18n.ts b/webpack/module/rules/i18n.ts index 3023253cab..9a4acde686 100644 --- a/webpack/module/rules/i18n.ts +++ b/webpack/module/rules/i18n.ts @@ -4,34 +4,46 @@ 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, '\\"'); - } - } +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); + } + }] + }) + }; +};