|
|
@ -13,11 +13,12 @@ import common from './common.mjs'; |
|
|
|
class I18N { |
|
|
|
class I18N { |
|
|
|
|
|
|
|
|
|
|
|
//构造函数,设置默认配置
|
|
|
|
//构造函数,设置默认配置
|
|
|
|
constructor(defaultLang, templateDir, langDir, buildDir) { |
|
|
|
constructor(defaultLang, templateDir, langDir, buildDir, configFilename) { |
|
|
|
this.defaultLang = typeof(defaultLang) != 'undefined' && defaultLang ? defaultLang : 'en'; |
|
|
|
this.defaultLang = typeof(defaultLang) != 'undefined' && defaultLang ? defaultLang : 'en'; |
|
|
|
this.templateDir = typeof(templateDir) != 'undefined' && templateDir ? templateDir : './public/template/'; |
|
|
|
this.templateDir = typeof(templateDir) != 'undefined' && templateDir ? templateDir : './public/template/'; |
|
|
|
this.langDir = typeof(langDir) != 'undefined' && langDir ? langDir : './i18n/'; |
|
|
|
this.langDir = typeof(langDir) != 'undefined' && langDir ? langDir : './i18n/'; |
|
|
|
this.buildDir = typeof(buildDir) != 'undefined' && buildDir ? buildDir : './public/'; |
|
|
|
this.buildDir = typeof(buildDir) != 'undefined' && buildDir ? buildDir : './public/'; |
|
|
|
|
|
|
|
this.configFile = typeof(configFilename) != 'undefined' && configFilename ? configFilename : 'config.json'; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//从模板文件中解析语言占位变量,并生成语言包文件
|
|
|
|
//从模板文件中解析语言占位变量,并生成语言包文件
|
|
|
@ -63,6 +64,7 @@ class I18N { |
|
|
|
for (const file of files) { |
|
|
|
for (const file of files) { |
|
|
|
newHtml = await _self.replaceLangToTemplate(_self.templateDir + file, langData); |
|
|
|
newHtml = await _self.replaceLangToTemplate(_self.templateDir + file, langData); |
|
|
|
if (newHtml) { |
|
|
|
if (newHtml) { |
|
|
|
|
|
|
|
newHtml = await _self.replaceConfigToTemplate(newHtml); //replace configs
|
|
|
|
saved = await _self.saveBuildHtml(langFile.replace('.json', ''), file, newHtml); |
|
|
|
saved = await _self.saveBuildHtml(langFile.replace('.json', ''), file, newHtml); |
|
|
|
console.log('Template file [%s] lang data replace with [%s] done, html build [%s].', file, langFile, (saved ? 'success' : 'failed')); |
|
|
|
console.log('Template file [%s] lang data replace with [%s] done, html build [%s].', file, langFile, (saved ? 'success' : 'failed')); |
|
|
|
} |
|
|
|
} |
|
|
@ -200,6 +202,27 @@ class I18N { |
|
|
|
return html; |
|
|
|
return html; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//根据配置文件,替换配置项
|
|
|
|
|
|
|
|
async replaceConfigToTemplate(html_template) { |
|
|
|
|
|
|
|
const _self = this; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let html = html_template; |
|
|
|
|
|
|
|
try { |
|
|
|
|
|
|
|
let config = await common.getConfigFromJsonFile(_self.configFile); |
|
|
|
|
|
|
|
if (typeof(config['templateConfigs']) == 'undefined' || !config['templateConfigs']) {return html;} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let tempConfigs = config['templateConfigs']; |
|
|
|
|
|
|
|
for (let key in tempConfigs) { |
|
|
|
|
|
|
|
html = html.replaceAll(`{config:${key}}`, tempConfigs[key]); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} catch (err) { |
|
|
|
|
|
|
|
console.error('replaceConfigToTemplate failed', err); |
|
|
|
|
|
|
|
return false; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return html; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//保存替换了语言包的html文件
|
|
|
|
//保存替换了语言包的html文件
|
|
|
|
async saveBuildHtml(lang, htmlFilename, htmlContent) { |
|
|
|
async saveBuildHtml(lang, htmlFilename, htmlContent) { |
|
|
|
const _self = this; |
|
|
|
const _self = this; |
|
|
|