likes
comments
collection
share

多语言插件工具-i18n tools对于一些跨国项目,国际化尤为重要。使用i18n时,配置语言包的过程十分繁琐,需要花费

作者站长头像
站长
· 阅读数 20

前言

对于一些跨国项目,国际化尤为重要 国际化的处理基本思路如下

① 定义语言包:需要几种语言展示,就定义几个语言包

② 创建对象,对语言包进行整合,对象的 key 为语言包的引用,值为语言包对象

③ 创建 vue-i18n 类的对象,同时为其 messages 属性为第②步创建的对象,为其 locale 属性赋值为第②步中语言对象对应的 key

④ 在创建 Vue 实例对象时,挂载 vue-i18n 类的对象

多语言插件

使用i18n时,配置语言包的过程十分繁琐,需要花费很多时间,需要i18n转化的文本可以分为以下几类

  • 纯文本
  • 按钮文本
  • label
  • placeholder
  • $message的文本提示
  • $confirm确认框文本提示
  • form表单的rule检验提示
  • 弹窗title

通过$t函数替换之前的文本,例如label和placeholder的替换

<el-form-item :label="$t('frmpEvent.eventName')" prop="eventName"> 
    <el-input v-model="form.eventName" maxlength="100" :placeholder="$t('common.enterPla')" clearable type="text" /> 
</el-form-item>

为了提高配置语言包的效率,这里可以用i18n tools(vscode插件),通过这个插件可以实现自动提取文件中需要翻译的文本,自动生成对应语言包文件,还支持配置翻译api实现语言翻译。

多语言插件工具-i18n tools对于一些跨国项目,国际化尤为重要。使用i18n时,配置语言包的过程十分繁琐,需要花费

使用前要配置好输出的文件夹和文件名

module.exports = {
  entry: ['src'], // 提取、还原、遗漏扫描入口文件夹,可以配置多个,默认是 src
  outDir: 'src/common/js/i18n/tools', // i18n 输出文件夹 默认是 src/locales
  outShow: 2, //输出文件展示结构 1 扁平化结构 2树级结构 默认扁平化
  exclude: ['src/common/js/i18n/tools'], // 不提取的文件夹, 默认是 ['src/locales']
  extensions: ['.vue', '.js', '.ts'], // 提取的文件后缀名,默认是 ['.js', '.vue', '.ts']
  filename: 'zh_tools', // 输出的文件名,默认为 zh_cn
  extname: 'js', //  输出的文件后缀名默认为 js  ,支持json和js(js格式为 module.exports = {} 或 export default {}),
  langList: ['en'] // 翻译目标语言列表,默认是 ['en']   
}

具体操作:右键选择i18n-tools国际化工具-选择提取当前,他就会自动提取文件中的文案,使用$t进行替换

多语言插件工具-i18n tools对于一些跨国项目,国际化尤为重要。使用i18n时,配置语言包的过程十分繁琐,需要花费

提取后会生成这样一个js对象

module.exports = {
	"risklist": {
		"index": {
			"374963": "确定删除该条数据, 是否继续?",
			"onp488": "删除成功!",
			"24q1j6": "定稿成功",
			"yqzyk8": "确定撤销审批, 是否继续?",
			"q87l70": "撤销成功!"
		}
	},
	"components": {
		"newrisklist": {
			"111868": "序号",
			"578396": "请选择风险管理价值链",
			"51847k": "提示",
			"suvwc1": "取消",
			"wabt28": "管控措施",
			"l81ya3": "风险大类",
			"3xw354": "风险组别",
			"si6m67": "业务管理价值链",
			"42moef": "风险管理价值链",
			...
		}
	}
}

这里如果需要前端先进行文案翻译,可以选择翻译项目,他会对生成的zh_tool进行翻译,这个插件支持多种翻译,可以在settings.json中进行配置

多语言插件工具-i18n tools对于一些跨国项目,国际化尤为重要。使用i18n时,配置语言包的过程十分繁琐,需要花费

settings.json配置示例

"i18nTools.translateForm": "bd",
  "i18nTools.translateKey": {
    "BD_APP_ID": "xxx",
    "BD_KEY": "xxx",
    "TX_SECRET_ID": "",
    "TX_SECRET_KEY": "",
    "HS_ACCESS_KEY": "",
    "HS_SECRET_KEY": "",
    "GOOGLE_API_KEY": "",
    "DEEPL_API_KEY": ""
  },

这里有一点需要注意:多语言翻译对应的文件名固定是en.js无法更改,如果原来项目中已有en.js文件,他会生成不了对应的翻译文件,这时候可以在其他目录下生成,就不会造成冲突, 例如:

多语言插件工具-i18n tools对于一些跨国项目,国际化尤为重要。使用i18n时,配置语言包的过程十分繁琐,需要花费

插件提取的注意事项

含有静态中文路径的数据,也会被提取翻译,需要还原回去

data() {
  return {
      loading: false,
      searchForm: {
          orgId: '', 
          orgPathName: '',
      },
      url: '/static/xlsx/清单模板.xlsx',
	// url: this.$t('components.newrisklist.2493x5')
	}
}
// 下载模板
exportTemplate() {
    window.location.href = '/static/xlsx/导入模板.xlsx';
	// window.location.href = this.$t('riskindicatorssetting.index.6q383f')
},

split方法涉及的分隔符,需要确认数据是否还是按中文返回

// 提取前:this.month = this.quesNo[3].split('月'))[0];
this.month = this.quesNo[3].split(this.$t('components.newrisklist.k62tdm'))[0];

indexOf方法涉及到中文字符,也需重新确认

// 获取清单详细数据新增后尾部的值
// 提取前:(item.levelStRiskNum.indexOf('新增'))> -1)
if (item.levelStRiskNum.indexOf(this.$t('components.riskidentification.496m8d')) > -1) {
        arr1.push({ riskNo: item.levelStRiskNum });
 }
 
转载自:https://juejin.cn/post/7419926107856584704
评论
请登录