零落 发表于 2021-2-3 09:31:38

基于 Gitlab 的多国语言管理方法

本帖最后由 零落 于 2021-2-4 13:44 编辑 <br /><br /><p style="margin-top: 15px; margin-bottom: 15px; line-height: 1.75em;"><span style="font-family: 微软雅黑, Microsoft YaHei; color: rgb(191, 191, 191); font-size: 10px;">文章来源:乐聚机器人研发总监黄怀贤的《基于Gitlab的多国语言管理方法》</span></p><p><span style="font-family: 微软雅黑, Microsoft YaHei; font-size: 14px; letter-spacing: 1.3px; background-color: rgb(255, 255, 255); color: rgb(51, 51, 51);">如果你正在使用 Gitlab 或者 Github ,本文介绍的方法可能会对你有帮助。通过本文介绍的方法,能方便快捷地对翻译词条进行审核、讨论以及更新。</span></p><p><span style="font-family: 微软雅黑, Microsoft YaHei; font-size: 14px; letter-spacing: 1.3px; background-color: rgb(255, 255, 255); color: rgb(51, 51, 51);"><br/></span></p><section style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; color: rgb(51, 51, 51); font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB, Microsoft YaHei UI, Microsoft YaHei, Arial, sans-serif; letter-spacing: 0.544px; text-align: justify; white-space: normal; background-color: rgb(255, 255, 255); overflow-wrap: break-word !important;"><section style="margin: 0px; padding: 0px 5px 0px 50px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important; display: inline-block; min-width: 10%; vertical-align: top;"><section powered-by="xiumi.us" style="margin: 10px 0px -55px; padding: 0px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important; transform: translate3d(-50px, 0px, 0px);"><section style="margin: 0px; padding: 0px 0px 0px 11px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important; display: inline-block; width: 70px; height: 80px; vertical-align: top; overflow: hidden; background-position: 50% 50%; background-repeat: no-repeat; background-size: contain; background-attachment: scroll; background-image: url(https://bbs.lejurobot.com/plugin.php?id=wcn_editor:wx_img&url=https://mmbiz.qpic.cn/mmbiz_gif/ujIIpBiauu2p5KoHUWicrrOjEQ5yTQ4wBuwTIVQ0SctWmpc7pGhTia3L6OX1GSHSDVnsdBZaojZUQH5m9IPh3gibpg/640?wx_fmt=gif);"><section powered-by="xiumi.us" style="margin: 25px 0px 0px; padding: 0px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important;"><section style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important; text-align: justify; color: rgb(255, 255, 255); font-size: 18px;"><p style="margin-top: 0px; margin-bottom: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; clear: both; min-height: 1em; overflow-wrap: break-word !important;"><span style="font-family: 微软雅黑, Microsoft YaHei; font-size: 16px;"><strong style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important;">01<br style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important;"/></strong></span></p></section></section></section></section><section powered-by="xiumi.us" style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important; transform: translate3d(-5px, 0px, 0px);"><section style="margin: 0px; padding: 3px 0px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important; display: inline-block; min-width: 10%; vertical-align: top; border-width: 1px 1px 0px; border-radius: 0px; border-style: none none dashed; border-color: rgb(62, 62, 62);"><section powered-by="xiumi.us" style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important; text-align: justify; color: rgb(55, 80, 114);"><p style="margin-top: 0px; margin-bottom: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; clear: both; min-height: 1em; overflow-wrap: break-word !important;"><span style="font-family: 微软雅黑, Microsoft YaHei; font-size: 16px;"><strong style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important;">我们使用过的工具</strong></span></p></section></section></section></section><p><br/></p><section powered-by="xiumi.us" style="margin: 10px 0px; padding: 0px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important;"><section style="margin: 0px; padding: 0px 10px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important; font-size: 15px; line-height: 2; letter-spacing: 1.3px; color: rgb(62, 62, 62);"><p style="padding: 0px; max-width: 100%; box-sizing: border-box; clear: both; min-height: 1em; margin-top: 15px; margin-bottom: 15px; line-height: 1.75em; overflow-wrap: break-word !important;"><span style="font-family: 微软雅黑, Microsoft YaHei; font-size: 14px;">1、使用 Excel 来整理和同步词条</span></p><p style="margin-top: 0px; margin-bottom: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; clear: both; min-height: 1em; overflow-wrap: break-word !important;"><br style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important;"/></p><p style="padding: 0px; max-width: 100%; box-sizing: border-box; clear: both; min-height: 1em; margin-top: 15px; margin-bottom: 15px; line-height: 1.75em; overflow-wrap: break-word !important;"><span style="font-family: 微软雅黑, Microsoft YaHei; font-size: 14px;">2、Jabylon</span></p><p style="padding: 0px; max-width: 100%; box-sizing: border-box; clear: both; min-height: 1em; margin-top: 15px; margin-bottom: 15px; line-height: 1.75em; overflow-wrap: break-word !important;"><span style="font-family: 微软雅黑, Microsoft YaHei; font-size: 14px;">官网:<span style="font-size: 14px; font-family: 微软雅黑, Microsoft YaHei; margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; color: rgb(95, 156, 239); overflow-wrap: break-word !important;">https://jabylon.org/</span></span></p><p style="padding: 0px; max-width: 100%; box-sizing: border-box; clear: both; min-height: 1em; margin-top: 15px; margin-bottom: 15px; line-height: 1.75em; overflow-wrap: break-word !important;"><span style="font-family: 微软雅黑, Microsoft YaHei; font-size: 14px;">特点:支持 Android,iOS,以及 Java 的 .properties 格式文件。</span></p><p style="padding: 0px; max-width: 100%; box-sizing: border-box; clear: both; min-height: 1em; margin-top: 15px; margin-bottom: 15px; line-height: 1.75em; overflow-wrap: break-word !important;"><span style="font-family: 微软雅黑, Microsoft YaHei; font-size: 14px;">问题:最后一次更新为 2017 年。</span></p><p style="margin-top: 0px; margin-bottom: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; clear: both; min-height: 1em; overflow-wrap: break-word !important;"><br style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important;"/></p><p style="padding: 0px; max-width: 100%; box-sizing: border-box; clear: both; min-height: 1em; margin-top: 15px; margin-bottom: 15px; line-height: 1.75em; overflow-wrap: break-word !important;"><span style="font-family: 微软雅黑, Microsoft YaHei; font-size: 14px;">3、Weblate</span></p><p style="padding: 0px; max-width: 100%; box-sizing: border-box; clear: both; min-height: 1em; margin-top: 15px; margin-bottom: 15px; line-height: 1.75em; overflow-wrap: break-word !important;"><span style="font-family: 微软雅黑, Microsoft YaHei; font-size: 14px;">官网:<span style="font-size: 14px; font-family: 微软雅黑, Microsoft YaHei; margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; color: rgb(95, 156, 239); overflow-wrap: break-word !important;">&nbsp;https://weblate.org/zh-hans/</span></span></p><p style="padding: 0px; max-width: 100%; box-sizing: border-box; clear: both; min-height: 1em; margin-top: 15px; margin-bottom: 15px; line-height: 1.75em; overflow-wrap: break-word !important;"><span style="font-family: 微软雅黑, Microsoft YaHei; font-size: 14px;">有以下几个优点:</span></p><ul class=" list-paddingleft-2" style="padding: 0px 0px 0px 2.2em; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important;"><li><p style="padding: 0px; max-width: 100%; box-sizing: border-box; clear: both; min-height: 1em; margin-top: 15px; margin-bottom: 15px; line-height: 1.75em; overflow-wrap: break-word !important;"><span style="font-family: 微软雅黑, Microsoft YaHei; font-size: 14px;">和 Git高度集成,更新的词条都是作为一个个commit提交到Git中。这样也能方便地从原来回溯到内容的作者。</span></p></li><li><p style="padding: 0px; max-width: 100%; box-sizing: border-box; clear: both; min-height: 1em; margin-top: 15px; margin-bottom: 15px; line-height: 1.75em; overflow-wrap: break-word !important;"><span style="font-family: 微软雅黑, Microsoft YaHei; font-size: 14px;">只要设置好源代码的路径,Weblate就能自动地检测出相关的翻译问题,并解析成可以被编辑的词条。</span></p></li><li><p style="padding: 0px; max-width: 100%; box-sizing: border-box; clear: both; min-height: 1em; margin-top: 15px; margin-bottom: 15px; line-height: 1.75em; overflow-wrap: break-word !important;"><span style="font-family: 微软雅黑, Microsoft YaHei; font-size: 14px;">支持众多的格式:</span></p><p style="padding: 0px; max-width: 100%; box-sizing: border-box; clear: both; min-height: 1em; margin-top: 15px; margin-bottom: 15px; line-height: 1.75em; overflow-wrap: break-word !important;"><span style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; color: rgb(95, 156, 239); font-family: 微软雅黑, Microsoft YaHei; font-size: 14px; overflow-wrap: break-word !important;">https://docs.weblate.org/en/latest/formats.html</span></p></li><li><p style="padding: 0px; max-width: 100%; box-sizing: border-box; clear: both; min-height: 1em; margin-top: 15px; margin-bottom: 15px; line-height: 1.75em; overflow-wrap: break-word !important;"><span style="font-family: 微软雅黑, Microsoft YaHei; font-size: 14px;">细致且完整的权限控制:</span></p><p style="padding: 0px; max-width: 100%; box-sizing: border-box; clear: both; min-height: 1em; margin-top: 15px; margin-bottom: 15px; line-height: 1.75em; overflow-wrap: break-word !important;"><span style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; color: rgb(95, 156, 239); font-family: 微软雅黑, Microsoft YaHei; font-size: 14px; overflow-wrap: break-word !important;">https://docs.weblate.org/en/latest/admin/access.html</span></p></li><li><p style="padding: 0px; max-width: 100%; box-sizing: border-box; clear: both; min-height: 1em; margin-top: 15px; margin-bottom: 15px; line-height: 1.75em; overflow-wrap: break-word !important;"><span style="font-family: 微软雅黑, Microsoft YaHei; font-size: 14px;">支持第三方登录:</span></p><p style="padding: 0px; max-width: 100%; box-sizing: border-box; clear: both; min-height: 1em; margin-top: 15px; margin-bottom: 15px; line-height: 1.75em; overflow-wrap: break-word !important;"><span style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; color: rgb(95, 156, 239); font-family: 微软雅黑, Microsoft YaHei; font-size: 14px; overflow-wrap: break-word !important;">https://docs.weblate.org/en/latest/admin/auth.html#authentication-backends</span></p></li><li><p style="padding: 0px; max-width: 100%; box-sizing: border-box; clear: both; min-height: 1em; margin-top: 15px; margin-bottom: 15px; line-height: 1.75em; overflow-wrap: break-word !important;"><span style="font-family: 微软雅黑, Microsoft YaHei; font-size: 14px;">特别是Gitlab:</span></p><p style="padding: 0px; max-width: 100%; box-sizing: border-box; clear: both; min-height: 1em; margin-top: 15px; margin-bottom: 15px; line-height: 1.75em; overflow-wrap: break-word !important;"><span style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; color: rgb(95, 156, 239); font-family: 微软雅黑, Microsoft YaHei; font-size: 14px; overflow-wrap: break-word !important;">https://docs.weblate.org/en/latest/admin/auth.html#gitlab-oauth-2</span></p></li></ul><p style="padding: 0px; max-width: 100%; box-sizing: border-box; clear: both; min-height: 1em; margin-top: 15px; margin-bottom: 15px; line-height: 1.75em; overflow-wrap: break-word !important;"><span style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; color: rgb(95, 156, 239); font-family: 微软雅黑, Microsoft YaHei; font-size: 14px; overflow-wrap: break-word !important;"></span></p><p style="padding: 0px; max-width: 100%; box-sizing: border-box; clear: both; min-height: 1em; margin-top: 15px; margin-bottom: 15px; line-height: 1.75em; overflow-wrap: break-word !important;"><span style="margin: 0px; padding: 0px; max-width: 100%; letter-spacing: 1.3px; font-family: 微软雅黑, Microsoft YaHei; font-size: 14px; box-sizing: border-box !important; overflow-wrap: break-word !important;">总结:一个很好的软件,在现在没有完全迁移到新的方法之前,我们公司大部分项目使用的还是 Weblate。</span></p></section></section><section powered-by="xiumi.us" style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important;"><p style="margin-top: 0px; margin-bottom: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; clear: both; min-height: 1em; overflow-wrap: break-word !important;"><br style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important;"/></p></section><section powered-by="xiumi.us" style="margin: 0px 0px 30px; padding: 0px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important; text-align: left;"><section style="margin: 0px; padding: 0px 5px 0px 50px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important; display: inline-block; min-width: 10%; vertical-align: top;"><section powered-by="xiumi.us" style="margin: 10px 0px -55px; padding: 0px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important; transform: translate3d(-50px, 0px, 0px);"><section style="margin: 0px; padding: 0px 0px 0px 11px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important; display: inline-block; width: 70px; height: 80px; vertical-align: top; overflow: hidden; background-position: 50% 50%; background-repeat: no-repeat; background-size: contain; background-attachment: scroll; background-image: url(https://bbs.lejurobot.com/plugin.php?id=wcn_editor:wx_img&url=https://mmbiz.qpic.cn/mmbiz_gif/ujIIpBiauu2p5KoHUWicrrOjEQ5yTQ4wBuwTIVQ0SctWmpc7pGhTia3L6OX1GSHSDVnsdBZaojZUQH5m9IPh3gibpg/640?wx_fmt=gif);"><section powered-by="xiumi.us" style="margin: 25px 0px 0px; padding: 0px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important;"><section style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important; text-align: justify; color: rgb(255, 255, 255); font-size: 18px;"><p style="margin-top: 0px; margin-bottom: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; clear: both; min-height: 1em; overflow-wrap: break-word !important;"><span style="font-size: 16px; font-family: 微软雅黑, Microsoft YaHei;"><strong style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important;">02<br style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important;"/></strong></span></p></section></section></section></section><section powered-by="xiumi.us" style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important; transform: translate3d(-5px, 0px, 0px);"><section style="margin: 0px; padding: 3px 0px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important; display: inline-block; min-width: 10%; vertical-align: top; border-width: 1px 1px 0px; border-radius: 0px; border-style: none none dashed; border-color: rgb(62, 62, 62);"><section powered-by="xiumi.us" style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important; text-align: justify; color: rgb(55, 80, 114);"><p style="margin-top: 0px; margin-bottom: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; clear: both; min-height: 1em; overflow-wrap: break-word !important;"><span style="font-size: 16px; font-family: 微软雅黑, Microsoft YaHei;"><strong style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important;">使用心得</strong></span></p></section></section></section></section></section><section powered-by="xiumi.us" style="margin: 0px; padding: 0px 10px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important; font-size: 15px; line-height: 2; letter-spacing: 1.3px;"><p style="padding: 0px; max-width: 100%; box-sizing: border-box; clear: both; min-height: 1em; margin-top: 15px; margin-bottom: 15px; line-height: 1.75em; overflow-wrap: break-word !important;"><span style="font-family: 微软雅黑, Microsoft YaHei; font-size: 14px;">1、Excel 的维护成本较高,每次改动内容都需要手工校对。产品改一遍,开发再复制源码仓库中。并且想要找出变化的内容,只能依靠人肉比对和沟通。同时无法快速的针对某个词条进行讨论和改进。比如:某个词条翻译并不是特别文雅,这个时候开发可能需要在沟通群组中和产品进行沟通,再由产品发出修订之后的 Excel 文档。如果出现多次改动的情况就会耗费大量的人力去做重复的事情。</span></p><p style="margin-top: 0px; margin-bottom: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; clear: both; min-height: 1em; overflow-wrap: break-word !important;"><br style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important;"/></p><p style="padding: 0px; max-width: 100%; box-sizing: border-box; clear: both; min-height: 1em; margin-top: 15px; margin-bottom: 15px; line-height: 1.75em; overflow-wrap: break-word !important;"><span style="font-family: 微软雅黑, Microsoft YaHei; font-size: 14px;">2、JABYLON 解决了校对和修订的问题。但是无法简单快捷的进行讨论。并且在使用的过程中发现如果是在翻译的文档中出现中文,会让导出的 iOS 翻译文件出现编码错误的问题。如果你在使用 JABYLON 的时候也遇到导出到 iOS 的词条出现编码错误的问题,这个 Emacs 的包应该能帮到你,链接如下:</span></p><p style="padding: 0px; max-width: 100%; box-sizing: border-box; clear: both; min-height: 1em; margin-top: 15px; margin-bottom: 15px; line-height: 1.75em; overflow-wrap: break-word !important;"><span style="margin: 0px; padding: 0px; max-width: 100%; color: rgb(95, 156, 239); letter-spacing: 1.3px; font-family: 微软雅黑, Microsoft YaHei; font-size: 14px; box-sizing: border-box !important; overflow-wrap: break-word !important;">https://github.com/carlos-wong/emacs-jabylon-ios</span></p><p style="margin-top: 0px; margin-bottom: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; clear: both; min-height: 1em; overflow-wrap: break-word !important;"><br/></p><p style="padding: 0px; max-width: 100%; box-sizing: border-box; clear: both; min-height: 1em; margin-top: 15px; margin-bottom: 15px; line-height: 1.75em; overflow-wrap: break-word !important;"><span style="font-family: 微软雅黑, Microsoft YaHei; font-size: 14px;">3、Weblate 解决了 JABYLON 编码的问题,同时能和 Gitlab 服务很好地结合到一起, 能根据提前配置好的 branch 来自动提交修改的词条。不过还是存在不能便捷地对翻译词条进行讨论以及快速迭代。因为讨论的记录是单独保留在 weblate 上的,后续在回溯的时候讨论的内容不能和提交的代码关联到一起。</span></p></section><section powered-by="xiumi.us" style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important;"><p style="margin-top: 0px; margin-bottom: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; clear: both; min-height: 1em; overflow-wrap: break-word !important;"><br style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important;"/></p></section><section powered-by="xiumi.us" style="margin: 0px 0px 30px; padding: 0px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important; text-align: left;"><section style="margin: 0px; padding: 0px 5px 0px 50px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important; display: inline-block; min-width: 10%; vertical-align: top;"><section powered-by="xiumi.us" style="margin: 10px 0px -55px; padding: 0px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important; transform: translate3d(-50px, 0px, 0px);"><section style="margin: 0px; padding: 0px 0px 0px 11px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important; display: inline-block; width: 70px; height: 80px; vertical-align: top; overflow: hidden; background-position: 50% 50%; background-repeat: no-repeat; background-size: contain; background-attachment: scroll; background-image: url(https://bbs.lejurobot.com/plugin.php?id=wcn_editor:wx_img&url=https://mmbiz.qpic.cn/mmbiz_gif/ujIIpBiauu2p5KoHUWicrrOjEQ5yTQ4wBuwTIVQ0SctWmpc7pGhTia3L6OX1GSHSDVnsdBZaojZUQH5m9IPh3gibpg/640?wx_fmt=gif);"><section powered-by="xiumi.us" style="margin: 25px 0px 0px; padding: 0px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important;"><section style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important; text-align: justify; color: rgb(255, 255, 255); font-size: 18px;"><p style="margin-top: 0px; margin-bottom: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; clear: both; min-height: 1em; overflow-wrap: break-word !important;"><strong style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important;">03<br style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important;"/></strong></p></section></section></section></section><section powered-by="xiumi.us" style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important; transform: translate3d(-5px, 0px, 0px);"><section style="margin: 0px; padding: 3px 0px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important; display: inline-block; min-width: 10%; vertical-align: top; border-width: 1px 1px 0px; border-radius: 0px; border-style: none none dashed; border-color: rgb(62, 62, 62);"><section powered-by="xiumi.us" style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important; color: rgb(55, 80, 114); text-align: justify;"><p style="margin-top: 0px; margin-bottom: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; clear: both; min-height: 1em; overflow-wrap: break-word !important;"><span style="font-family: 微软雅黑, Microsoft YaHei; font-size: 16px;"><strong style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important;">如何结合 Gitlab 来推进翻译工作的进行以及自动整合到项目的源码中</strong></span></p></section></section></section></section></section><section powered-by="xiumi.us" style="margin: 0px; padding: 0px 10px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important; font-size: 15px; color: rgb(62, 62, 62); letter-spacing: 1.3px; line-height: 2;"><p style="padding: 0px; max-width: 100%; box-sizing: border-box; clear: both; min-height: 1em; margin-top: 15px; margin-bottom: 15px; line-height: 1.75em; overflow-wrap: break-word !important;"><span style="font-size: 14px; font-family: 微软雅黑, Microsoft YaHei;">众所周知我们是使用<span style="font-size: 14px; margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; color: rgb(95, 156, 239); text-decoration-line: underline; overflow-wrap: break-word !important;">&nbsp;软件研发流程</span>&nbsp;来进行需求文档的讨论和迭代的。基于这个方法,将翻译的文档当成需求文档来维护。这样就能使用原有的流程来讨论和修订翻译的词条。再结合 Gitlab Runner (如果你使用的是 Github 的话其实原理类似,只不过使用的是 Github Action) 可以使用将 CSV 格式转化为工程文件的方式将翻译同步到项目源代码的过程自动化。</span></p><p style="margin-top: 0px; margin-bottom: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; clear: both; min-height: 1em; overflow-wrap: break-word !important;"><br style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important;"/></p><p style="padding: 0px; max-width: 100%; box-sizing: border-box; clear: both; min-height: 1em; margin-top: 15px; margin-bottom: 15px; line-height: 1.75em; overflow-wrap: break-word !important;"><span style="font-family: 微软雅黑, Microsoft YaHei; font-size: 14px;">以下是对一个基本的迭代过程进行描述。</span></p><p style="padding: 0px; max-width: 100%; box-sizing: border-box; clear: both; min-height: 1em; margin-top: 15px; margin-bottom: 15px; line-height: 1.75em; overflow-wrap: break-word !important;"><span style="font-family: 微软雅黑, Microsoft YaHei; font-size: 14px;">1、由产品将要整理好的翻译词条(以 csv 为格式,Excel 可以导出和打开 csv 格式的文件)作为一个 Merge Request 来提交。</span></p><p style="padding: 0px; max-width: 100%; box-sizing: border-box; clear: both; min-height: 1em; margin-top: 15px; margin-bottom: 15px; line-height: 1.75em; overflow-wrap: break-word !important;"><span style="font-family: 微软雅黑, Microsoft YaHei; font-size: 14px;">2、相关人员就能在 Merge Request 中对指定的词条进行评论和问题。</span></p></section><section powered-by="xiumi.us" style="margin: 10px 0px; padding: 0px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important; text-align: center;"><section style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important; vertical-align: middle; display: inline-block; line-height: 0;"><img data-ratio="0.8106713" src="https://bbs.lejurobot.com/plugin.php?id=wcn_editor:wx_img&url=https://mmbiz.qpic.cn/mmbiz_png/ujIIpBiauu2p5KoHUWicrrOjEQ5yTQ4wBuKVIgVXict70zAfrgD87f9MMMrqW4EcupBKuHHqB5ES8SLKnE7HrQ8kQ/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1" data-type="png" data-w="581" _width="581px" class="" crossorigin="anonymous" alt="图片" data-fail="0" style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important; height: auto !important; vertical-align: middle; width: 581px !important; visibility: visible !important;"/></section></section><section powered-by="xiumi.us" style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important;"><p style="margin-top: 0px; margin-bottom: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; clear: both; min-height: 1em; overflow-wrap: break-word !important;"><br style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important;"/></p></section><section powered-by="xiumi.us" style="margin: 0px; padding: 0px 10px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important; font-size: 15px; color: rgb(62, 62, 62); letter-spacing: 1.3px; line-height: 2;"><p style="padding: 0px; max-width: 100%; box-sizing: border-box; clear: both; min-height: 1em; margin-top: 15px; margin-bottom: 15px; line-height: 1.75em; overflow-wrap: break-word !important;"><span style="font-family: 微软雅黑, Microsoft YaHei; font-size: 14px;">3、多次修订之后当前的翻译以及符合要求。</span></p></section><section powered-by="xiumi.us" style="margin: 10px 0px; padding: 0px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important; text-align: center;"><section style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important; vertical-align: middle; display: inline-block; line-height: 0;"><img data-ratio="0.492674" src="https://bbs.lejurobot.com/plugin.php?id=wcn_editor:wx_img&url=https://mmbiz.qpic.cn/mmbiz_png/ujIIpBiauu2p5KoHUWicrrOjEQ5yTQ4wBu7L84FmGA8UXSSuSTyO9iaxekxPxQrr9nBcQick5HglaKHGxicVMxicTASA/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1" data-type="png" data-w="546" _width="546px" class="" crossorigin="anonymous" alt="图片" data-fail="0" style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important; height: auto !important; vertical-align: middle; width: 546px !important; visibility: visible !important;"/></section></section><section powered-by="xiumi.us" style="margin: 10px 0px; padding: 0px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important; text-align: center;"><section style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important; vertical-align: middle; display: inline-block; line-height: 0;"><img data-ratio="0.4344569" src="https://bbs.lejurobot.com/plugin.php?id=wcn_editor:wx_img&url=https://mmbiz.qpic.cn/mmbiz_png/ujIIpBiauu2p5KoHUWicrrOjEQ5yTQ4wBu3hicmmUicqXjBRcW9U6TZOST8I1CUH17YnPOqAb9RSIEHFA7TSpDAvyQ/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1" data-type="png" data-w="534" _width="534px" class="" crossorigin="anonymous" alt="图片" data-fail="0" style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important; height: auto !important; vertical-align: middle; width: 534px !important; visibility: visible !important;"/></section></section><section powered-by="xiumi.us" style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important;"><p style="margin-top: 0px; margin-bottom: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; clear: both; min-height: 1em; overflow-wrap: break-word !important;"><br style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important;"/></p></section><section powered-by="xiumi.us" style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important;"><p style="padding: 0px; max-width: 100%; box-sizing: border-box; clear: both; min-height: 1em; margin-top: 15px; margin-bottom: 15px; line-height: 1.75em; overflow-wrap: break-word !important;"><span style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; color: rgb(62, 62, 62); font-family: 微软雅黑, Microsoft YaHei; font-size: 14px; overflow-wrap: break-word !important;">每次Merge Request 发生改动都会触发 Gitlab 的 CI, CI 的工具会将翻译的文件转化为 Android,iOS,Web 对应格式的多国语言文件。并在 CI 的脚本中触发一次对应仓库的 Commit 来自动将修改的内容同步到开发项目的源码中。</span></p></section><section powered-by="xiumi.us" style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important;"><p style="margin-top: 0px; margin-bottom: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; clear: both; min-height: 1em; overflow-wrap: break-word !important;"><br style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important;"/></p></section><section powered-by="xiumi.us" style="margin: 0px 0px 30px; padding: 0px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important; text-align: left;"><section style="margin: 0px; padding: 0px 5px 0px 50px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important; display: inline-block; min-width: 10%; vertical-align: top;"><section powered-by="xiumi.us" style="margin: 10px 0px -55px; padding: 0px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important; transform: translate3d(-50px, 0px, 0px);"><section style="margin: 0px; padding: 0px 0px 0px 11px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important; display: inline-block; width: 70px; height: 80px; vertical-align: top; overflow: hidden; background-position: 50% 50%; background-repeat: no-repeat; background-size: contain; background-attachment: scroll; background-image: url(https://bbs.lejurobot.com/plugin.php?id=wcn_editor:wx_img&url=https://mmbiz.qpic.cn/mmbiz_gif/ujIIpBiauu2p5KoHUWicrrOjEQ5yTQ4wBuwTIVQ0SctWmpc7pGhTia3L6OX1GSHSDVnsdBZaojZUQH5m9IPh3gibpg/640?wx_fmt=gif);"><section powered-by="xiumi.us" style="margin: 25px 0px 0px; padding: 0px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important;"><section style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important; text-align: justify; color: rgb(255, 255, 255); font-size: 18px;"><p style="margin-top: 0px; margin-bottom: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; clear: both; min-height: 1em; overflow-wrap: break-word !important;"><span style="font-size: 16px; font-family: 微软雅黑, Microsoft YaHei;"><strong style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important;">04<br style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important;"/></strong></span></p></section></section></section></section><section powered-by="xiumi.us" style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important; transform: translate3d(-5px, 0px, 0px);"><section style="margin: 0px; padding: 3px 0px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important; display: inline-block; min-width: 10%; vertical-align: top; border-width: 1px 1px 0px; border-radius: 0px; border-style: none none dashed; border-color: rgb(62, 62, 62);"><section powered-by="xiumi.us" style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important; text-align: justify; color: rgb(55, 80, 114);"><p style="margin-top: 0px; margin-bottom: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; clear: both; min-height: 1em; overflow-wrap: break-word !important;"><span style="font-size: 16px; font-family: 微软雅黑, Microsoft YaHei;"><strong style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important;">总结</strong></span></p></section></section></section></section></section><section powered-by="xiumi.us" style="margin: 0px; padding: 0px 10px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important; font-size: 15px; color: rgb(62, 62, 62); letter-spacing: 1.3px; line-height: 2;"><p style="padding: 0px; max-width: 100%; box-sizing: border-box; clear: both; min-height: 1em; margin-top: 15px; margin-bottom: 15px; line-height: 1.75em; overflow-wrap: break-word !important;"><span style="font-size: 14px; font-family: 微软雅黑, Microsoft YaHei;">这样一来,翻译的相关文档也能通过评审来及时发现问题。并且能通过相关项目的 Git 记录来对问题进行溯源,快速地定位问题的原因。</span></p></section></section><p style="text-align: center;"><br/></p><link rel="stylesheet" href="//bbs.lejurobot.com/source/plugin/wcn_editor/public/wcn_editor_fit.css?v134_iSW" id="wcn_editor_css"/>
页: [1]
查看完整版本: 基于 Gitlab 的多国语言管理方法