i18n 的一点疑问

2022-08-03 15:02:49 +08:00
 dssxzuxc
比如页面上我有一些静态数据,为了美观、管理方便我放单独的 js 文件下
export const arr1 = [{value:1,label:"测试"},...]
然后页面上 import 使用。如果要实现国际化,有什么优雅点的方式吗?
之前我想的是定义 arr1_zh-CH,arr1_en-US 等数据,页面全部 import 进来,写一个计算属性,根据状态管理存放的 locale 变量 return 其中的一个,有没有更优雅的实现
3142 次点击
所在节点    Vue.js
10 条回复
pigspy
2022-08-03 16:14:00 +08:00
我一般用 i18next 这个框架
jetyang
2022-08-03 16:15:47 +08:00
标准的做法是后端根据用户的个人信息、UA 及 IP 综合判断 locale ,找到对应的本地文字、图标、时间,返回给前端渲染。搜索一下 ICU 库,但这样做比较麻烦,很多小网站在前端放一个下拉列表,让用户自己选 locale
zhangjiancheng
2022-08-03 16:26:55 +08:00
我的做法是多个语言放在一个数组内,约定好语言顺序的下标,然后用 webpack 的 api 自动导入然后用$t()使用
dssxzuxc
2022-08-03 16:37:42 +08:00
@pigspy vue-i18n 我试了下好像加载不了数组
fstar
2022-08-03 18:37:22 +08:00
建议做语言包懒加载。

https://blog.fstars.wang/posts/lazy-load-language-package-by-dynamic-script/
https://blog.fstars.wang/posts/i18n-lazy-import-lang-pkg/
https://blog.fstars.wang/posts/why-i18n-difficult/
Martens
2022-08-03 20:26:00 +08:00
@dssxzuxc #4 ant design pro 自带国际化 可以参考参考
catinsides
2022-08-03 23:21:10 +08:00
比如要做 label 的多语言,把 label 的内容换成常量,比如 LABEL_TEST ,多语言 json 文件中再写要替换的内容 cn 是 测试,en 是 Test ,ja 是 テスト... html 里就是{{ $t('LABEL_TEST') }},再进一步优化就是根据 ua 只加载某一个多语言的 json ,是这意思不?
JounQin
2022-08-04 08:23:44 +08:00
james504
2022-08-04 09:41:19 +08:00
看成了 18cm 的一点疑问
啊 天啦我太可怕了~~~
Envov
2022-08-04 15:04:26 +08:00
i18next 的方案很好
https://github.com/i18next/i18next-scanner
扫描源代码中的字符,创建唯一 id ,统一翻译,可以做到懒加载词条,或者把翻译的活扔给产品

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/870425

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX