背景
这是一篇老文章,仅做回忆与记录,新时代多语言应该结合AI实现更加智能。项目背景是信息系统需要支持 英语,阿拉伯语等多种语言自动识别与切换,团队结构是项目经理熟悉英语,其他团队成员英语阅读能力欠佳,其有一个名翻译,但非IT行业背景。阿语是所有团员成员都不懂的语言。产生如下国际化研发流程
竞品
Jumia
Konga
Bidorbuy
Shopee
Lazada
Kilimall
业务功能模块
B2B2C商城,需要商户入驻,其他包括:
- 客户中心
- 商户中心
- 商品中心
- 库存中心
- 订单中心
- 会员中心
- 营销中心
- 建站中心
登录集成:Facebook, Google, Twitter.
支付集成: Alipay, Paypal, stripe.
物流集成:Aramex, FedEx, DHL
内容审计:文字图片国际化: 鉴黄,恐怖,广告
集成客户-CRM
集成 客户-BI商业智能
集成 客户-呼叫中心zendesk
UI设计
后端
框架本身提供了一套多语言机制来帮助我们实现本地化,基本思路是 本身维护一个键值对集合。只需要将展示给客户的文字信息处都使用一个语言 Key 来进行填充,当用户登录系统之后,会取得当前用户的区域文化信息进行文本渲染。
启动流程图
当前系统所支持的区域文化代码,可以通过执行 CultureInfo.GetCultures(CultureTypes.AllCultures);
用字典本地化资源对象获取数据的时候,其实也就是从其内部的字典提供器来获取数据。
数据库设计
多语言表
CREATE TABLE `languages` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`CreationTime` datetime(6) NOT NULL,
`CreatorUserId` bigint(20) NULL DEFAULT NULL,
`LastModificationTime` datetime(6) NULL DEFAULT NULL,
`LastModifierUserId` bigint(20) NULL DEFAULT NULL,
`IsDeleted` bit(1) NOT NULL,
`DeleterUserId` bigint(20) NULL DEFAULT NULL,
`DeletionTime` datetime(6) NULL DEFAULT NULL,
`TenantId` int(11) NULL DEFAULT NULL,
`Name` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`DisplayName` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`Icon` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`IsDisabled` bit(1) NOT NULL,
PRIMARY KEY (`Id`) USING BTREE,
INDEX `IX_Languages_TenantId_Name`(`TenantId`, `Name`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
— —————————-
— Records of languages
— —————————-
INSERT INTO `languages` VALUES (1, ‘2020-12-05 13:11:04.756349′, NULL, NULL, NULL, b’0’, NULL, NULL, NULL, ‘en’, ‘English’, ‘famfamfam-flags gb’, b’0′);
INSERT INTO `languages` VALUES (2, ‘2020-12-05 13:11:04.756351′, NULL, NULL, NULL, b’0’, NULL, NULL, NULL, ‘ar’, ‘العربية’, ‘famfamfam-flags sa’, b’0′);
多语言扩展表
CREATE TABLE `languagetexts` (
`Id` bigint(20) NOT NULL AUTO_INCREMENT,
`CreationTime` datetime(6) NOT NULL,
`CreatorUserId` bigint(20) NULL DEFAULT NULL,
`LastModificationTime` datetime(6) NULL DEFAULT NULL,
`LastModifierUserId` bigint(20) NULL DEFAULT NULL,
`TenantId` int(11) NULL DEFAULT NULL,
`LanguageName` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`Source` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`Key` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`Value` longtext CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
PRIMARY KEY (`Id`) USING BTREE,
INDEX `IX_LanguageTexts_TenantId_Source_LanguageName_Key`(`TenantId`, `Source`, `LanguageName`, `Key`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
资源文件列表
默认是英语en-us
中文zh-cn
前端PC端工程中i18n
“vue-i18n”: “^8.22.2”,
分模块资源文件
index.ts
商品资源文件 -中文zh-cn
英文en-us
Vue代码
使用多语言其中lang(‘xxxx’)
前端工程中 商品导入模板
AR
Android移动端资源文件
Libya/blob/master/app/src/main/res/values/strings.xml
iOS移动端资源文件
ios-apps/app-Libya/blob/master/Libya/Libya/zh-Hans.lproj/Localizable.strings
前端资源翻译导入导出工具js-resources-translator及使用示例
工程采用JAVA语言研发,适配生成多个客户端资源文件
功能包括libya-admin、libya-pc-mall、libya-android、libya-ios各前端项目中语言资源文件的翻译、excel导出、excel导入
1 目录结构
|– android_zh-CN 安卓简体中文资源(xml格式)示例文件目录
|– android_en-US 安卓英文资源(xml格式)示例文件目录
|– android_ar-LY 安卓阿拉伯文资源(xml格式)示例文件目录
|– android_resources.xlsx 安卓资源excel示例文件
|– h5_zh-CN H5简体中文资源(JS或TS格式)示例文件目录
|– h5_en-US H5英文资源(JS或TS格式)示例文件目录
|– h5_ar-LY H5阿拉伯文资源(JS或TS格式)示例文件目录
|– h5-resources.xlsx H5资源excel示例文件
|– ios_zh-CN IOS简体中文资源(strings格式)示例文件目录
|– ios_en-US IOS英文资源(strings格式)示例文件目录
|– ios_ar-LY IOS阿拉伯文资源(strings格式)示例文件目录
|– ios_resources.xlsx IOS资源excel示例文件
|– tools 程序运行根目录
|– lang-resources-tools-1.0.1.jar 程序可运行jar包
|– lib 其他依赖jar包目录
|– android-translate.bat 翻译安卓资源文件示例脚本
|– h5-translate.bat 翻译H5资源文件示例脚本
|– ios-translate.bat 翻译IOS资源文件示例脚本
|– android-export.bat 安卓资源导出到excel示例脚本
|– h5-export.bat H5资源导出到excel示例脚本
|– ios-export.bat IOS资源导出到excel示例脚本
|– android-import.bat excel导入安卓资源示例脚本
|– h5-import.bat excel导入H5资源示例脚本
|– ios-import.bat excel导入IOS资源示例脚本
2 运行环境
该工具为java应用程序,需要java运行环境1.8及以上版本,JDK请自行安装
程序翻译功能使用必应翻译api,使用需互联网环境
windows CMD窗口下,由于PC语言环境问题控制台阿拉伯文字显示异常,可忽略,输出文件编码正常
3 运行命令说明
该工具翻译功能默认从简体中文翻译至指定目标语言,支持的语言和运行相关命令说明如下,示例命令中的参数请根据具体路径自行修改
3.1 显示帮助
java -Dfile.encoding=utf-8 -jar jar包路径 -help
3.2 批量翻译指定目录下H5(JS或TS)资源文件,-p、-d、-l为必传参数,翻译后自动生成以”h5_目标语言简写”命名的资源目录
java -Dfile.encoding=utf-8 -jar jar包路径 -p=h5_translate -d=文件夹路径 -l=目标语言(多语言用英文逗号,连接)
示例:
java -Dfile.encoding=utf-8 -jar lang-resources-tools-1.0.1.jar -p=h5_translate -d=”D:\test\h5_zh-CN” -l=en,ar
3.3 批量翻译指定目录下Android(xml)资源文件,-p、-d、-l为必传参数,翻译后自动生成以”android_目标语言简写”命名的资源目录
java -Dfile.encoding=utf-8 -jar jar包路径 -p=android_translate -d=文件夹路径 -l=目标语言(多语言用英文逗号,连接)
示例:
java -Dfile.encoding=utf-8 -jar lang-resources-tools-1.0.1.jar -p=android_translate -d=”D:\test\android_zh-CN” -l=en,ar
3.4 批量翻译指定目录下IOS(strings)资源文件,-p、-d、-l为必传参数,翻译后自动生成以”ios_目标语言简写”命名的资源目录
java -Dfile.encoding=utf-8 -jar jar包路径 -p=ios_translate -d=文件夹路径 -l=目标语言(多语言用英文逗号,连接)
示例:
java -Dfile.encoding=utf-8 -jar lang-resources-tools-1.0.1.jar -p=ios_translate -d=”D:\test\ios_zh-CN” -l=en,ar
3.5 h5资源导出到excel,-p、-zhd、-ef为必传参数,-end、-ard非必传参数
java -Dfile.encoding=utf-8 -jar jar包路径 -p=h5_export -zhd=中文资源目录 -end=英文资源目录 -ard=阿拉伯文资源目录 -ef=excel文件路径
示例:
java -Dfile.encoding=utf-8 -jar lang-resources-tools-1.0.1.jar -p=h5_export -zhd=”D:\test\h5_zh-CN” -end=”D:\test\h5_en-US” -ard=”D:\test\h5_ar-LY” -ef=”D:\test\h5-resources.xlsx”
3.6 安卓资源导出到excel,-p、-zhf、-ef为必传参数,-enf、-arf非必传参数
java -Dfile.encoding=utf-8 -jar jar包路径 -p=android_export -zhf=中文资源文件路径 -enf=英文资源文件路径 -arf=阿拉伯文资源文件路径 -ef=excel文件路径
示例:
java -Dfile.encoding=utf-8 -jar lang-resources-tools-1.0.1.jar -p=android_export -zhf=”D:\test\android_zh-CN\strings.xml” -enf=”D:\test\android_en-US\strings.xml” -arf=”D:\test\android_ar-LY\strings.xml” -ef=”D:\test\android-resources.xlsx”
3.7 IOS资源导出到excel,-p、-zhd、-ef为必传参数,-end、-ard非必传参数
java -Dfile.encoding=utf-8 -jar jar包路径 -p=ios_export -zhd=中文资源目录 -end=英文资源目录 -ard=阿拉伯文资源目录 -ef=excel文件路径
示例:
java -Dfile.encoding=utf-8 -jar lang-resources-tools-1.0.1.jar -p=ios_export -zhd=”D:\test\ios_zh-CN” -end=”D:\test\ios_en-US” -ard=”D:\test\ios_ar-LY” -ef=”D:\test\ios-resources.xlsx”
3.8 从excel文件导入生成h5资源,-p、-ef、-zhd为必传参数,-end、-ard二者至少传其一
java -Dfile.encoding=utf-8 -jar jar包路径 -p=h5_import -ef=excel文件路径 -zhd=中文资源目录 -end=英文资源目录 -ard=阿拉伯文资源目录
示例:
java -Dfile.encoding=utf-8 -jar lang-resources-tools-1.0.1.jar -p=h5_import -ef=”D:\test\h5-resources.xlsx” -zhd=”D:\test\h5_zh-CN” -end=”D:\test\h5_en-US” -ard=”D:\test\h5_ar-LY”
3.9 从excel文件导入生成安卓资源,-p、-ef、-zhf为必传参数,-enf、-arf二者至少传其一
java -Dfile.encoding=utf-8 -jar jar包路径 -p=android_import -ef=excel文件路径 -zhf=中文资源文件路径 -enf=英文资源文件路径 -arf=阿拉伯文资源文件路径
示例:
java -Dfile.encoding=utf-8 -jar lang-resources-tools-1.0.1.jar -p=android_import -ef=”D:\test\android-resources.xlsx” -zhf=”D:\test\android_zh-CN\strings.xml” -enf=”D:\test\android_en-US\strings.xml” -arf=”D:\test\android_ar-LY\strings.xml”
3.10 从excel文件导入生成IOS资源,-p、-ef、-zhd为必传参数,-end、-ard二者至少传其一
java -Dfile.encoding=utf-8 -jar jar包路径 -p=ios_import -ef=excel文件路径 -zhd=中文资源目录 -end=英文资源目录 -ard=阿拉伯文资源目录
示例:
java -Dfile.encoding=utf-8 -jar lang-resources-tools-1.0.1.jar -p=ios_import -ef=”D:\test\ios-resources.xlsx” -zhd=”D:\test\ios_zh-CN” -end=”D:\test\ios_en-US” -ard=”D:\test\ios_ar-LY”
3.11 其他说明
命令中-d、-zhd、-end、-ard、-zhf、-enf、-arf、-ef、后面的参数为文件或目录路径,如果路径包含空格,请使用英文双引号””包括起来
命令中-l后支持一个或多个目标语言,请使用英文逗号,连接
命令中-l后参数请使用目标语言简写,支持的语言如下:
简体中文,简写:zh-CHS
繁体中文,简写:zh-CHT
粤语(繁体),简写:yue
英语,简写:en
阿拉伯语,简写:ar
南非荷兰语,简写:af
保加利亚语,简写:bg
孟加拉语,简写:bn
波斯尼亚语,简写:bs
加泰隆语,简写:ca
捷克语,简写:cs
威尔士语,简写:cy
丹麦语,简写:da
德语,简写:de
希腊语,简写:el
西班牙语,简写:es
爱沙尼亚语,简写:et
波斯语,简写:fa
芬兰语,简写:fi
菲律宾语,简写:fil
斐济,简写:fj
法语,简写:fr
爱尔兰语,简写:ga
古吉拉特语,简写:gu
希伯来语,简写:he
印地语,简写:hi
克罗地亚语,简写:hr
海地克里奥尔语,简写:ht
匈牙利语,简写:hu
印度尼西亚语,简写:id
冰岛语,简写:is
意大利语,简写:it
日语,简写:ja
哈萨克语,简写:kk
卡纳拉语,简写:kn
朝鲜语,简写:ko
立陶宛语,简写:lt
拉脱维亚语,简写:lv
马尔加什语,简写:mg
毛利语,简写:mi
马拉雅拉姆语,简写:ml
马拉地语,简写:mr
马来语,简写:ms
马耳他语,简写:mt
白苗文,简写:mww
挪威语,简写:nb
荷兰语,简写:nl
克雷塔罗奥托米语,简写:otq
旁遮普语,简写:pa
波兰语,简写:pl
葡萄牙语(巴西),简写:pt
葡萄牙语(葡萄牙),简写:pt-pt
罗马尼亚语,简写:ro
俄语,简写:ru
斯洛伐克语,简写:sk
斯洛文尼亚语,简写:sl
萨摩亚语,简写:sm
塞尔维亚语(西里尔文),简写:sr-Cyrl
塞尔维亚语(拉丁文),简写:sr-Latn
瑞典语,简写:sv
斯瓦希里语,简写:sw
泰米尔语,简写:ta
泰卢固语,简写:te
泰语,简写:th
Klingon(Latin),简写:tlh-Latn
Klingon(pIqaD),简写:tlh-Piqd
汤加语,简写:to
土耳其语,简写:tr
塔希提语,简写:ty
乌克兰语,简写:uk
乌尔都语,简写:ur
越南语,简写:vi
尤卡坦玛雅语,简写:yua
字体
PC商城英语环境下的字体统一为:
Avenir,Helvetica,Arial,sans-serif
PC商城阿语环境下的字体与IOS端字体保持一致,统一使用“苹方”,
UI设计图请前往蓝湖查看
阿语
用于测试的
阿语输入生成器
https://www.branah.com/arabic
英语原型制作
中文先设计,英语再翻译
资源文件
过去我们把程序中资源文件导出为EXCEL,提供给WCT协助翻译
2) 前端与移动端 资源文件导出与导入 工程。
3) 服务端多语言导出与导入 工程
4)Audit_logs日志表多语言与导入工程
示例EXCEL格式:
KEY
CN
EN
AR
rejectReason
Reject Reason:
Reject Reason:
whetherToPass
是否通过
Approval
日志表中数据多语言
后端日志数据在数据库中的中文,采用Bing的API翻译后,写入不同数据语言表
审计日志主表
CREATE TABLE `auditlogs` (
`Id` bigint(20) NOT NULL AUTO_INCREMENT,
`TenantId` int(11) NULL DEFAULT NULL,
`UserId` bigint(20) NULL DEFAULT NULL,
`ServiceName` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`MethodName` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`Parameters` varchar(1024) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`ReturnValue` longtext CHARACTER SET utf8 COLLATE utf8_general_ci NULL,
`ExecutionTime` datetime(6) NOT NULL,
`ExecutionDuration` int(11) NOT NULL,
`ClientIpAddress` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`ClientName` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`BrowserInfo` varchar(512) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`Exception` varchar(2000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`ImpersonatorUserId` bigint(20) NULL DEFAULT NULL,
`ImpersonatorTenantId` int(11) NULL DEFAULT NULL,
`CustomData` varchar(2000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`Id`) USING BTREE,
INDEX `IX_AuditLogs_TenantId_ExecutionDuration`(`TenantId`, `ExecutionDuration`) USING BTREE,
INDEX `IX_AuditLogs_TenantId_ExecutionTime`(`TenantId`, `ExecutionTime`) USING BTREE,
INDEX `IX_AuditLogs_TenantId_UserId`(`TenantId`, `UserId`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 209207 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
//扩展审计日志子表
CREATE TABLE `auditlogsdescribe` (
`Id` bigint(20) NOT NULL AUTO_INCREMENT,
`CreationTime` datetime(6) NOT NULL,
`CreatorUserId` bigint(20) NULL DEFAULT NULL,
`LastModificationTime` datetime(6) NULL DEFAULT NULL,
`LastModifierUserId` bigint(20) NULL DEFAULT NULL,
`ServiceName` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`MethodName` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`ChDescription` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`EnDescription` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`ArDescription` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`Id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 813 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
审计日志子表数据 多语言
英语文档翻译工具Microsoft Document Translator
https://www.microsoft.com/en-us/translator/business/document-translation/
Microsoft Document Translator>DocumentTranslatorCmd setcredentials /APIkey:dc66aaa023474c6f87be8489f5f7442e /Region:Global /Cloud:Global /categoryID:0
Argument [Reset] has value [].
Argument [APIkey] has value [dc66aaa023474c6f87be8489f5f7442e].
Argument [categoryID] has value [0].
Argument [Region] has value [Global].
Argument [Cloud] has value [Global].
翻译指定路径
DocumentTranslatorCmd translatedocuments /documents:E:\tmp\xxx\*.docx /from:en /to:zh-Hans
DocumentTranslatorCmd translatedocuments /documents:E:\tmp\xxx\*.docx /from:en /to:tr
今天先到这儿,希望对云原生,技术领导力, 企业管理,系统架构设计与评估,团队管理, 项目管理, 产品管理,信息安全,团队建设 有参考作用 , 您可能感兴趣的文章:
构建创业公司突击小团队
国际化环境下系统架构演化
微服务架构设计
视频直播平台的系统架构演化
微服务与Docker介绍
Docker与CI持续集成/CD
互联网电商购物车架构演变案例
互联网业务场景下消息队列架构
互联网高效研发团队管理演进之一
消息系统架构设计演进
互联网电商搜索架构演化之一
企业信息化与软件工程的迷思
企业项目化管理介绍
软件项目成功之要素
人际沟通风格介绍一
精益IT组织与分享式领导
学习型组织与企业
企业创新文化与等级观念
组织目标与个人目标
初创公司人才招聘与管理
人才公司环境与企业文化
企业文化、团队文化与知识共享
高效能的团队建设
项目管理沟通计划
构建高效的研发与自动化运维
某大型电商云平台实践
互联网数据库架构设计思路
IT基础架构规划方案一(网络系统规划)
餐饮行业解决方案之客户分析流程
餐饮行业解决方案之采购战略制定与实施流程
餐饮行业解决方案之业务设计流程
供应链需求调研CheckList
企业应用之性能实时度量系统演变
如有想了解更多软件设计与架构, 系统IT,企业信息化, 团队管理 资讯,请关注我的微信订阅号:
作者:Petter Liu
出处:http://www.cnblogs.com/wintersun/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 该文章也同时发布在我的独立博客中-Petter Liu Blog。
来源链接:https://www.cnblogs.com/wintersun/p/18651568
如有侵犯您的版权,请及时联系3500663466#qq.com(#换@),我们将第一时间删除本站数据。
暂无评论内容