Pxer icon indicating copy to clipboard operation
Pxer copied to clipboard

vue-i18n implementation

Open shigma opened this issue 7 years ago • 12 comments

这是用 Vue-i18n 实现的语言适配功能。仅仅完成了部分翻译工作作为示例。如果觉得可行的话我会继续完成整个页面的翻译工作。目录src/i18n/内存放了所有语言的翻译信息。使用的默认语言为zh-CN

  • 语言的翻译与 vm 解耦,且可以随时增加新的语言支持
  • 所有语言的载入是按需加载的,只有当检测到需求才会加载对应的文件
  • 语言的设置支持响应式,如果有需求的话可以增加语言设置的表单

shigma avatar Jul 14 '18 14:07 shigma

赞~~~

eternal-flame-AD avatar Jul 15 '18 14:07 eternal-flame-AD

@eternal-flame-AD 你说的情况我无法复现。

shigma avatar Jul 19 '18 05:07 shigma

default 这是我做的操作(默认语言en-US),通过设置window['PXER_VM'].locale第一次无效,第二次执行生效,你可以试试能不能复现

eternal-flame-AD avatar Jul 19 '18 05:07 eternal-flame-AD

@eternal-flame-AD 刚刚试了一下,没有发现你说的问题啊……

shigma avatar Jul 22 '18 14:07 shigma

中转英正常 反过来会出问题

eternal-flame-AD avatar Jul 22 '18 15:07 eternal-flame-AD

@eternal-flame-AD 已经解决,麻烦你检查一下,谢谢。

shigma avatar Jul 22 '18 15:07 shigma

OK,准备好的话@一下花生

eternal-flame-AD avatar Jul 22 '18 15:07 eternal-flame-AD

default

假如语言是中文,那么这个是你当前的载入 timeline 对不对?

那么问题有:

  1. 为什么 en.json 与 zh.json 不能同时 load?
  2. 是否会导致Pxer的抖动?在 zh.json loaded 之前 Pxer 已经展现给了用户
  3. 为什么要加载 en.json,我已经拿到 i18n map 时,就已经知道了是否需要加载 fallback 对应的json文件了
  4. 如果是必要的文件(map.json),为什么不合并进现有的加载流中?(src/app/support.js

pea3nut avatar Aug 03 '18 16:08 pea3nut

@pea3nut 之前的一些做法是基于 vue-i18n 的考虑,可能的确有与 Pxer 设计理念不符的地方,你提的建议我非常同意,也愿意去更改,不过在此之前希望你考虑一下移除 vue-i18n 这件事。目前就我看来,如果再加上你上一次的建议的更改的话,我们就几乎完全脱离了 vue-i18n 的所有功能了。之所以说是“几乎”,也仅仅是因为我们在 template 中使用了与v-text="$t(key)"等价的v-t="key"而已。尽管我相信手动实现 vue-i18n 能带来更加满意的效果(因为我正是按照你的意思手动取代了 vue-i18n 的一个又一个功能),但是我还是打算先问一下你的意见。

shigma avatar Aug 05 '18 09:08 shigma

也就是说,你认为,为了解决上面的comment中的4个问题,必须要通过重写 vue-i18n 来解决?

没办法简单的修改现有代码,使 pxer app 与 i18n 相关文件并行加载吗?

上面的comment中的加载流几乎是最糟糕的情况,没办法在不改 vue-i18n 文件的前提下有所优化吗?

pea3nut avatar Aug 05 '18 13:08 pea3nut

@pea3nut 事实上,只有我的第一个提交能说得上是正常地使用了 vue-i18n 这个库,之后你提的众多要求中的一部分或多或少的超出了 vue-i18n 能够到达的范围,因为我觉得这些需求是合理的,所以就采取了手动造轮子的方法来实现。直至目前你提出的最后一个需求,很遗憾的是 vue-i18n 的 fallback 的确是必需先加载的,因此如果想要实现你提出的逻辑(虽然这个逻辑是合理的),我必须再一次造轮子,这就使得目前的 vue-i18n 被完全架空,我们使用的功能中没有任何一个功能是它原生实现的。这就是我说 vue-i18n 没有存在的必要了的意思。

vue-i18n 作为网页开发是非常优秀的库,也是 vue 下最好的库之一。但事实上 vue-i18n 的开发或许并没有考虑到我们 pxer 所处的“网页插件”地位,因此很多你提出的需求无法实现是情有可原的。我尽可能地通读了它的全部文档,不过仍然难以找到原生的 api 来实现这些需求。

为了解决上面的 comment 中的 4 个问题,必须要通过重写 vue-i18n 来解决?

当然不是,上面的 4 个问题都是容易解决的,修好它们在保持现有代码的基础上改动应该不大。不过就现在来看,我们已经几乎重写了 vue-i18n 中我们所需的部分了

shigma avatar Aug 05 '18 14:08 shigma

需求第一。

vue-i18n 还是有很多可复用的地方的。当然,你想造一个体积更小的我觉得也OK

pea3nut avatar Aug 05 '18 16:08 pea3nut