服务器端国际化vs客户端国际化



我非常了解如何组织服务器端国际化—检测语言首选项并在处理请求页面时在HTML中打印相应的翻译字符串。

但是在客户端做不是更合适吗?应该如何组织?我在想

  1. 检测JavaScript中的语言首选项
  2. 请求语言文件
  3. 打印页面上的字符串

我有问题弄清楚最后一部分:打印页面上的字符串。我们使用Handlebars,我们的页面结构是:

<body>
<h1>TEXT_1</h1>
<script type="text/template">
Some {{copy}} goes here
</script>
<p>TEXT_2</p>
<script type="text/template">
Some other {{othercopy}} goes here
</script>
... and so on

现在,对于TEXT_1和TEXT_2,我将不得不创建一个单独的模板?如何翻译模板中的字符串?我不能用{{lang.copy_of_template1}}代替Some {{copy}} goes here,因为{{copy}}不会扩展。

那么,做客户端i18n的努力是值得的吗?

在我看来,你应该通过服务器端翻译,因为这样更容易处理搜索引擎优化(SEO)。

当您在客户端执行此操作时,较慢的连接可能更难以看到它。我见过一些网站在几秒钟后翻译所有内容,改变所有内容,这对观众来说太可怕了!

如果您选择了强制的服务器端,那么您应该侦听Accept-Language头。然后你的服务器必须在数据库(我个人确实使用json文件)上搜索定义的翻译,并基于此构建文本内容。


有时你被迫在客户端这样做,比如javascript生成的没有特定文本的弹出窗口。但是,与其重写翻译,不如在显示翻译之前对服务器端翻译进行REST调用。

在web上实现客户端应用程序变得越来越成熟。

你可能会受到http://i18next.com/docs/

的启发

这取决于您使用的框架。如果您使用服务器端框架,如ASP。NET或PHP,然后在服务器端进行本地化。如果你使用客户端框架,比如Angular或React,那么你需要在客户端做这些。

如果你的应用使用来自REST API的数据,你可能需要在服务器上做一些本地化。

最新更新