1

我正在做一个需要支持国际化的项目。我们想到的解决方案是:

  1. 创建带有语言占位符的 HTML 模板(即 home.html)。
  2. 创建一个 i18n 目录,其中包含以下文件:“language_en_GB.json”。
  3. 在构建过程中将它们合并在一起以创建输出 HTML。输出文件将位于基于语言的目录中(例如“views/en_GB/home.html”或“views/fr_CA/home.html”)。

所以基本上是这样的:

<h1>{{i18n_welcome}}</h1>
<h2>{{userName}}</h2>

与此合并:

 {
      welcome:"Welcome!"
  }

在构建过程中会变成这样:

   <h1>Welcome!</h1>
   <h1>{{userName}}</h1>

我有几个问题,并appriciate你的意见。

  1. 这是 i18n 的好方法吗?
  2. 您知道可以很好地处理 i18n 的模板引擎吗?
  3. 是否有客户端“烘焙”的解决方案。我希望 UI 开发人员也能够在本地烘焙。
4

2 回答 2

1

根据您的需求和您当前在代码中使用的内容,有几个框架支持开箱即用的 i18n。作为一个纯模板引擎,你可以看看VelocityFreemarker。如需更完整的框架,您可以查看SpringSpring 示例以及StrutsStruts2 示例

当然,还有许多其他选择。我只是列出了我见过人们使用的最受欢迎的四个。

基本上,对于任何框架,您都可以为每种语言创建资源包(使用特定包的语言命名。例如:language_en_GB.properties)。所以你的思维过程非常一致。基本上你从你的 html 文件开始并包含你的占位符。在每种语言的资源包中,您指定字符串应该是什么。之后,框架会为您即时进行合并,并使用相关语言的适当资源包。

所以你几乎走在了正确的轨道上——这一切都变成了一个与你的框架正确集成并利用它来进行合并而不是在构建管道期间进行合并的问题。

于 2012-07-09T14:20:50.083 回答
1

您未能提供必要的详细信息,因此我无法真正回答您的问题。我只能说你的计划似乎是另一个轮子的再发明(但不像原来的那样圆)。

有一些 i18n 最佳实践。在 Java 世界中,这通常意味着使用资源包(以属性文件的形式)和一些机制(如 JSTL)在呈现页面时翻译它们。这是最好的方法,因为您不需要重新编译任何东西来引入对另一种语言的支持。

如果您关心为客户端脚本提供支持,通常通过从网页中写出一些数组并在客户端访问它来完成。我认为这是最常见的解决方案。另一个是有一些网络服务来为您提供翻译并通过 XHR(即 AJAX)阅读它,但这可能是有问题的。无论如何,您需要以某种方式将翻译从服务器端推送到客户端。
当然,您需要从资源包中读取它们。

从您所写的内容来看,您似乎想要构建某种静态网页,由应用程序服务器支持(因此静态网页编译)。如果我猜对了,老实说使用 Java 有点矫枉过正。您最好使用一些 CMS 软件,例如 Joomla、Drupal 或 jEase。

于 2012-07-09T14:21:28.623 回答