i18n-pro 目前是一个纯粹的 JS 库,因此使用上不限制平台、框架;可以用来支持 前端开发、服务端开发、桌面端开发、脚本开发 等一系列基于 JavaScript 构建项目且需要国际化-多语言的场景
后续会推出一些 UI 库的版本,例如 React
、Vue
、SolidJS
、Svelte
等;结合他们的各自更新机制,实现更好切换语言的体验
该库所有的文档都在仓库中,想了解更多请访问 https://github.com/i18n-pro/core ,如果觉得对你有帮助,希望可以点个⭐️支持下哟
1
lisxour 2023-06-08 08:56:28 +08:00
稍微看了一下,文案即 key 的方案很多问题的,说个以后必然很常规遇到的问题,假设:
1. t('你好,${0},欢迎登陆后台', getUserName()) 2. 自动生成各国翻译之后,我后续还人工优化了翻译(全机翻是不现实的,总会需要人工优化的) 3. 此时我觉得文案不好改了,t('你好,${0},欢迎使用后台', getUserName()),那我之前的翻译怎么办?你怎么对应回去? |
2
lisxour 2023-06-08 08:59:26 +08:00
我以前用 sphinx 写文档做 i18n 也是使用了一样的无 key 方案,即文案即 key ,后续对翻译的维护简直噩梦。
|
3
eyelly OP @lisxour 对于第二点表示认同,机器翻译肯定不能做到 100%满意的,但是对于绝大部分(不是所有哟)开发人员的话,外语水平可能都不太好,但这样至少可以应对,如果翻译不佳,后期在语言包中调整也不是什么大问题
基于第一点的文案生成的语言包是这样的 { "你好,${0},欢迎登陆后台": "假如这里是翻译后的内容" } 如果文案调整了第 3 点的,会重新生成下面的语音包: { "你好,${0},欢迎使用后台": "这里会是新翻译的内容" } |
5
lisxour 2023-06-08 10:32:10 +08:00
@eyelly #4 就是涉及人为改动的情况下,怎么对应回去原来的东西,假设以下情况:
1. 刚开发的时候,我代码中某条文案是:t('欢迎'),此时第一次跑出来的机翻结果,即 langs.json ,大致内容就是:{"en": {"欢迎": "Welcome"}},对吧 2. 在后续开发中,自己或者其他母语者觉得翻译不够味,那此时直接把 langs.json 内容改了,假设改成{"en": {"欢迎": "Welcomeeeee"}}(还是库有提供别的更优雅的翻译优化方法,我没把整个项目看完,不太清楚这个细节),现在假设是直接改 langs.json 文件 3. 现在就出现了两个问题: 3.1. 我此时再次运行机翻命令,我之前人工优化的"Welcomeeeee"会不会被机翻覆盖掉? 3.2. 我代码里改成了,t('你好,欢迎!'),再次运行机翻命令,按照你的描述,此时旧的那条{"欢迎": "Welcomeeeee"}是不是被智能优化掉了,是不是也就意味着以前人工优化的那些翻译丢失了。即使没有被优化掉,那对应的内容应该大致是这样的,{"en": {"欢迎": "Welcomeeeee", "你好,欢迎!": "Hello, Welcome!"}},即使是保留了,因为文案即 key 的问题,一旦代码改动了,以前的那条优化过的文案是不是就没法取出来了,除非代码里一旦写了,就不能去改。 |
6
awesomes 2023-06-08 11:46:14 +08:00
想法很好,比传统方式更直观
|
7
eyelly OP @lisxour #5
感谢大佬耐心且详细的回复 针对上述的的问题: 3.1 如果语言包中已经存在该文案的翻译,就不会再次翻译该文案了,只要文案本身不变,就不用担心翻译好的内容(不管是机翻的,还是人工手动的)丢失 3.2 如果文案发生了变化 例如:`欢迎` -> `你好,欢迎!`,那么以前针对 `欢迎` 翻译内容是会被移除掉,又会基于 `你好,欢迎!` 重新翻译。 因为 文案即 key ,代码中改了文案,语言包中的文案也会被同步改掉,当然人工手动翻译的是会丢失。虽然可以做到在语言包中保留不再使用的文案,但是这样没有意义。 针对上述场景可以有这样的解决方案: 例如:针对 `欢迎` 文案,对于机翻的 `Welcome` 不满意,然后人工维护成了 `Welcomeeeee`,但是后续文案显示上要变成 `你好,欢迎!` 如果要保留人工维护的翻译内容,新的文案写法这样调整可以满足需求: 以前:t('欢迎') 现在:t('你好,{0}!', t('欢迎')) 相当于某些文案已经有固定的翻译内容了,可以理解为抽成一个变量,在文案中基于`变量插值`的特性与其他文案进行组合来生成新的文案 |
9
K120 2023-06-09 10:19:59 +08:00
到最后会发现这个东西并没有什么用,多语言是要定制化的,并不是随便翻译就能搞定。
大陆 “吃饭”, 在香港 "食饭", 你能翻译台湾 澳门 香港这些吗。 "Hello", 在英文,我想叫 "Hi" 。。。 只能说是玩具。 |