简体中文与中南半岛国家多国语言系统开发i18n配置老挝、柬埔寨语言配置

61 阅读4分钟

前言

当下中国与中南半岛国家经济合作密切,同时也需要软件系统,多国使用系统需要实现多语言,我们团队最近也接到一个中、老、柬三国的业务软件,需要将软件做成三个国家语言。然后我们网上收i18n的老、柬的语言包命名,全网搜半天没有人发过相关内容,然后我们自己取名搞,这里给大家分享这篇文章也是让后面朋友遇到这小国家语言开发时如果没有统一的命名就可以按我们方式取名,只要效果达到就不要太纠结。

各国语言标识命名

我们在搜到i18n国际化开发的各国语言标识如下,它并不包含所有国家语种,遇到如下之外我们只能自己定义。

**国家地区**            **语言标识**

简体中文(中国)        zh_CN
繁体中文(台湾地区)    zh_TW
繁体中文(香港)        zh_HK
英语(香港)            en_HK
英语(美国)            en_US
英语(英国)            en_GB
英语(全球)            en_WW
英语(加拿大)          en_CA
英语(澳大利亚)        en_AU
英语(爱尔兰)          en_IE
英语(芬兰)            en_FI
芬兰语(芬兰)          fi_FI
英语(丹麦)            en_DK
丹麦语(丹麦)          da_DK
英语(以色列)          en_IL
希伯来语(以色列)       he_IL
英语(南非)            en_ZA
英语(印度)            en_IN
英语(挪威)            en_NO
英语(新加坡)          en_SG
英语(新西兰)          en_NZ
英语(印度尼西亚)      en_ID
英语(菲律宾)          en_PH
英语(泰国)            en_TH
英语(马来西亚)        en_MY
英语(阿拉伯)         en_XA
韩文(韩国)           ko_KR
日语(日本)          ja_JP
荷兰语(荷兰)        nl_NL
荷兰语(比利时)    nl_BE
葡萄牙语(葡萄牙)    pt_PT
葡萄牙语(巴西)    pt_BR
法语(法国)    fr_FR
法语(卢森堡)    fr_LU
法语(瑞士)    fr_CH
法语(比利时)    fr_BE
法语(加拿大)    fr_CA
西班牙语(拉丁美洲)    es_LA
西班牙语(西班牙)    es_ES
西班牙语(阿根廷)    es_AR
西班牙语(美国)    es_US
西班牙语(墨西哥)    es_MX
西班牙语(哥伦比亚)    es_CO
西班牙语(波多黎各)    es_PR
德语(德国)    de_DE
德语(奥地利)    de_AT
德语(瑞士)    de_CH
俄语(俄罗斯)    ru_RU
意大利语(意大利)    it_IT
希腊语(希腊)    el_GR
挪威语(挪威)    no_NO
匈牙利语(匈牙利)    hu_HU
土耳其语(土耳其)    tr_TR
捷克语(捷克共和国)    cs_CZ
斯洛文尼亚语    sl_SL
波兰语(波兰)    pl_PL
瑞典语(瑞典)    sv_SE
西班牙语 (智利)    es_CL

上面没有的我们可以根据世界各国和地区名称代码表(标准代码,国际域名缩写)来命名,如下表:

由于编辑器无法正常显示table表格:使用请参考:世界各国和地区名称代码表

配置i18n文件

编写i18n代码,在index.ts中添加老挝语、柬埔寨语,如下:

import { createI18n } from 'vue-i18n';
import en from './en-US';
import cn from './zh-CN';
import la from './LA';//老挝语
import kh from './KH';//柬埔寨语

export const LOCALE_OPTIONS = [
  { label: '中文', value: 'zh-CN' },
  { label: 'English', value: 'en-US' },
  { label: 'ລາວ', value: 'LA' },//老挝语
  { label: 'កម្ពុជា។', value: 'KH' },//柬埔寨语
];
const defaultLocale = localStorage.getItem('arco-locale') || 'zh-CN';

const i18n = createI18n({
  locale: defaultLocale,
  fallbackLocale: 'zh-CN',//默认中文
  allowComposition: true,
  messages: {
    'en-US': en,
    'zh-CN': cn,
    'LA': la,
    'KH': kh,
  },
});

export default i18n;

其中:LA和KH分别是老挝语和柬埔寨语文件,即在src/locale下添加LA.ts编写老挝语、KH.ts编写柬埔寨语,如下:

老挝语:KH.ts

//老挝
//自动加载
const autoLocle = import.meta.glob('@/views/**/locale/LA.ts', {
  eager: true,
});
function formatModules(_modules: any, result: {}) {
  Object.keys(_modules).forEach((key) => {
    const defaultModule = _modules[key].default;
    if (!defaultModule) return;
    result=Object.assign({},result,defaultModule);
  });
  return result;
}
export default {
  'navbar.docs': 'ສູນເອກະສານ',
  'navbar.action.locale': 'ປ່ຽນເປັນພາສາຈີນ',
  'searchTable.operation.create': 'ໃຫມ່',
  'searchTable.operation.export': 'ສົ່ງອອກ',
  'searchTable.form.reset': 'ຕັ້ງຄືນໃຫມ່',
  'footer.copyright': 'ສະຫງວນໄວ້',
  'system': 'ການຄຸ້ມຄອງລະບົບ',
  'datacenter': 'ສູນຂໍ້ມູນ',
  ...formatModules(autoLocle,{})
};

柬埔寨语:KH.ts

//柬埔寨语
//自动加载
const autoLocle = import.meta.glob('@/views/**/locale/KH.ts', {
  eager: true,
});
function formatModules(_modules: any, result: {}) {
  Object.keys(_modules).forEach((key) => {
    const defaultModule = _modules[key].default;
    if (!defaultModule) return;
    result=Object.assign({},result,defaultModule);
  });
  return result;
}
export default {
  'navbar.docs': 'មជ្ឈមណ្ឌលឯកសារ',
  'navbar.action.locale': 'ប្តូរទៅជាភាសាចិន',
  'searchTable.operation.create': 'ថ្មី។',
  'searchTable.operation.export': 'នាំចេញ',
  'searchTable.form.reset': 'កំណត់ឡើងវិញ',
  'footer.copyright': 'រក្សាសិទ្ធិគ្រប់យ៉ាង',
  'system': 'ការគ្រប់គ្រងប្រព័ន្ធ',
  'datacenter': 'មជ្ឈមណ្ឌលទិន្នន័យ',
  ...formatModules(autoLocle,{})
};

各个页面locale添加语言文件

还有在页面开发时views下面每个模块的locale目录下添加各自LA.ts、KH.ts、zh-CN.ts的语言文件,注意views中的locale下面翻译文件值自己加载到i18n的,例如:登录login我们添加各自语言翻译如下:

  • 中文zh-CN.ts

    export default { 'login.form.tabacount': '账号登录', 'login.form.tabmobile': '手机号登', 'login.form.tabemail': '邮箱登录', 'login.form.tabacountmobile': '账号/手机号登录', 'login.form.userName.errMsg': '用户名不能为空', 'login.form.password.errMsg': '密码不能为空', 'login.form.login.errMsg': '登录出错,轻刷新重试', 'login.form.login.success': '欢迎回来', 'login.form.userName.placeholder': '用户名或邮箱', 'login.form.password.placeholder': '密码', 'login.form.rememberPassword': '记住密码', 'login.form.forgetPassword': '忘记密码', 'login.form.login': '立即登录', 'login.form.register': '注册账号', 'login.form.getpemail.placeholder': '账号绑定的邮箱', 'login.form.verification.placeholder': '输入验证码(点验数字图刷新)', 'login.form.email.errMsg': '邮箱不能为空', 'login.form.verification.errMsg': '请输入验证码', 'login.form.verification.expired': '已过期,请刷新', 'login.form.other': '其他登录方式', 'login.form.clickverification': '计算太难可以点击这里获取新的验证数据', };

  • 老挝语KH.ts

    export default { 'login.form.tabacount': 'ការចូលគណនី', 'login.form.tabmobile': 'ចូលលេខទូរស័ព្ទ', 'login.form.tabemail': 'ចូលអ៊ីមែល', 'login.form.tabacountmobile': 'ចូលដោយប្រើគណនី/លេខទូរស័ព្ទចល័ត', 'login.form.userName.errMsg': 'ឈ្មោះអ្នកប្រើមិនអាចទទេបានទេ។', 'login.form.password.errMsg': 'ពាក្យសម្ងាត់មិនអាចទទេបានទេ។', 'login.form.login.errMsg': 'មានបញ្ហាក្នុងការចូល ធ្វើឱ្យស្រស់ ហើយព្យាយាមម្តងទៀត', 'login.form.login.success': 'ស្វាគមន៍ការត្រឡប់មកវិញ', 'login.form.userName.placeholder': 'ឈ្មោះអ្នកប្រើប្រាស់ ឬអ៊ីមែល', 'login.form.password.placeholder': 'ពាក្យសម្ងាត់', 'login.form.rememberPassword': 'ចងចាំពាក្យសម្ងាត់', 'login.form.forgetPassword': 'ភ្លេចពាក្យសម្ងាត់', 'login.form.login': 'ចូលឥឡូវនេះ', 'login.form.register': 'ចុះឈ្មោះគណនីមួយ។', 'login.form.getpemail.placeholder': 'អាសយដ្ឋានអ៊ីមែលភ្ជាប់ទៅនឹងគណនី', 'login.form.verification.placeholder': 'បញ្ចូលលេខកូដផ្ទៀងផ្ទាត់ (ចុចដើម្បីធ្វើឱ្យរូបភាពលេខផ្ទៀងផ្ទាត់ឡើងវិញ)', 'login.form.email.errMsg': 'អ៊ីមែលមិនអាចទទេបានទេ។', 'login.form.verification.errMsg': 'សូមបញ្ចូលលេខកូដផ្ទៀងផ្ទាត់', 'login.form.verification.expired': 'ផុត​កំណត់ សូម​ផ្ទុក​ឡើង​វិញ។', 'login.form.other': 'វិធីសាស្រ្តចូលផ្សេងទៀត។', 'login.form.clickverification': 'ការគណនាគឺពិបាកពេក អ្នកអាចចុចទីនេះដើម្បីទទួលបានទិន្នន័យផ្ទៀងផ្ទាត់ថ្មី។', };

  • 柬埔寨语KH.ts

    export default { 'login.form.tabacount': 'ការចូលគណនី', 'login.form.tabmobile': 'ចូលលេខទូរស័ព្ទ', 'login.form.tabemail': 'ចូលអ៊ីមែល', 'login.form.tabacountmobile': 'ចូលដោយប្រើគណនី/លេខទូរស័ព្ទចល័ត', 'login.form.userName.errMsg': 'ឈ្មោះអ្នកប្រើមិនអាចទទេបានទេ។', 'login.form.password.errMsg': 'ពាក្យសម្ងាត់មិនអាចទទេបានទេ។', 'login.form.login.errMsg': 'មានបញ្ហាក្នុងការចូល ធ្វើឱ្យស្រស់ ហើយព្យាយាមម្តងទៀត', 'login.form.login.success': 'ស្វាគមន៍ការត្រឡប់មកវិញ', 'login.form.userName.placeholder': 'ឈ្មោះអ្នកប្រើប្រាស់ ឬអ៊ីមែល', 'login.form.password.placeholder': 'ពាក្យសម្ងាត់', 'login.form.rememberPassword': 'ចងចាំពាក្យសម្ងាត់', 'login.form.forgetPassword': 'ភ្លេចពាក្យសម្ងាត់', 'login.form.login': 'ចូលឥឡូវនេះ', 'login.form.register': 'ចុះឈ្មោះគណនីមួយ។', 'login.form.getpemail.placeholder': 'អាសយដ្ឋានអ៊ីមែលភ្ជាប់ទៅនឹងគណនី', 'login.form.verification.placeholder': 'បញ្ចូលលេខកូដផ្ទៀងផ្ទាត់ (ចុចដើម្បីធ្វើឱ្យរូបភាពលេខផ្ទៀងផ្ទាត់ឡើងវិញ)', 'login.form.email.errMsg': 'អ៊ីមែលមិនអាចទទេបានទេ។', 'login.form.verification.errMsg': 'សូមបញ្ចូលលេខកូដផ្ទៀងផ្ទាត់', 'login.form.verification.expired': 'ផុត​កំណត់ សូម​ផ្ទុក​ឡើង​វិញ។', 'login.form.other': 'វិធីសាស្រ្តចូលផ្សេងទៀត។', 'login.form.clickverification': 'ការគណនាគឺពិបាកពេក អ្នកអាចចុចទីនេះដើម្បីទទួលបានទិន្នន័យផ្ទៀងផ្ទាត់ថ្មី។',};

我们看一下效果

  • 简体中文

  • 老挝语

  • 柬埔寨语

好了,效果就是如上截图。已经符合我们多国语言需求了。