【问题标题】:internationalization of a web applicationWeb 应用程序的国际化
【发布时间】:2016-01-20 00:53:05
【问题描述】:

致力于国际化 Web 应用程序,我有点受阻,因为我不知道如何使我的 .properties 动态化。我的意思是,从应用程序中自动获取静态文本。例如,现在我有了这个 MessageBundle_de_DE.properties:

greetings=Hallo!  
inquiry=Wie geth's?   
farewell=Tchüs!

但这是静态的,我写了这三对(键,值)。
我怎样才能根据我的申请制作我的钥匙?我想这是可能的,关于documentation

使用Spring framework 和JSP 技术。

提前致谢,我知道这个问题可能太笼统了。

【问题讨论】:

  • 你说的我怎样才能根据我的申请制作我的钥匙?
  • 我想你想知道如何在网页中绑定资源字符串。您使用哪个框架来开发应用程序?绑定技术随着技术的变化而变化。
  • 您的示例中需要进行一些小的更正:inquiry=Wie geht's?再见=Tschüs!
  • 正如其他人已经说过的,这完全取决于您使用的技术。例如,对于 JSP 和 GWT,它看起来有点不同。因此,请针对您使用的特定技术重新编辑您的问题。
  • @romaintaz 我想做的是动态地制作我的 .properties 文件。也许我有任何其他键,而不是我的应用程序中出现的“问候”或“查询”。我想自动获取所有这些信息

标签: java internationalization


【解决方案1】:

由于您使用的是 spring,请将以下 bean 添加到您的应用程序上下文中:

<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basename" value="/WEB-INF/messages/messages" />
    <property name="cacheSeconds" value="0" />
</bean>

在您的 /WEB-INF/messages 文件夹中,创建您需要的所有 messages.properties 文件,即 messages_en_GB.properties、messages_DE.properties 等。

然后在你的jsps中,使用以下spring提供的标签:

<spring:message code="some.property.name" />

默认情况下,区域设置应该是您的用户在其浏览器中设置的区域设置。要允许他们选择不同的区域设置(从而选择正确的语言),您还可以将其添加到您的应用程序上下文中:

<!-- Saves a locale change using a cookie -->
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver" />
<mvc:interceptors>
<!-- Changes the locale when a 'locale' request parameter is sent; e.g. /?locale=de -->
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />
</mvc:interceptors>

然后,您只需要包含 /?local=de 之类的语言环境属性的链接即可更改为德语翻译。

【讨论】:

  • 非常感谢!!还有两个问题:在哪里放置 Messages.bundle 以及在 code="some.property.name" 中,您的意思是 code="Messages_de_DE.properties.key" 吗?以及如何指定我想要翻译的语言??
  • 我添加了更多关于如何选择翻译的内容。您的 messages.properties 位于我在帖子中提到的文件夹中。当我说 code="some.property.name" 时,那里的值应该是您想要输出的任何值的键。在您给定的示例中,例如,code="greetings"。
  • 再次感谢,但在我正在测试的文件中,我得到了 Error Traced[line: 51] 元素“spring:message”的前缀“spring”未绑定。
  • 您需要在页面中包含 Spring 标签库:springframework.org/tags"%>
【解决方案2】:

如果您不使用 Web 应用程序框架,我建议您使用 Spring Framework,它为 Web 应用程序提供有用的功能,包括国际化。

【讨论】:

  • 谢谢,我已经在使用 Spring 框架,并且我知道国际化我的应用程序是多么容易,但是我被阻止了,因为我不知道如何继续并将 Web 与配置链接
【解决方案3】:

如果您不使用任何框架,内化您的应用程序的最佳方式是使用数据库来存储您的所有翻译。只是一个简单的类,它会通过键从 db 加载翻译,你的问题就解决了。

【讨论】:

  • 这不是国际化应用程序的最佳方式。实际上,它远非最好。从开发人员的角度来看,这可能很容易,但对于本地化工程师来说,这将是一场噩梦。将翻译存储在属性文件中时,更正(即缩短)翻译要容易得多。另外,你想如何通过 DB 修改 CSS 类?
  • @Pawel 为什么需要将 css 存储在 db 中?其次,本地化工程师所需要的只是一个简单的脚本,它将所有本地化数据放到数据库中。
  • 我不知道,但经常需要调整 CSS 类。至于第二部分,很有趣,但我今天和其他全球化专业人士开了个会,我们谈到了它。这个想法太棒了,但有两个问题: 1. 您将需要另一个构建来验证修复。 2. 只需要一个简单的错误(即翻译者),脚本不会安装这些翻译。
【解决方案4】:

正在寻找一种简单而强大的方法来使您的应用国际化?试试 gettext:http://www.gnu.org/software/gettext/manual/gettext.html 它被大多数 Linux 的开源软件使用,但它也可以与 Java 一起使用。步骤很简单:

  • 像未本地化一样正常编写程序:System.out.println("Hello world!!!")
  • 在代码中的某处使用方法 _ 创建名为(例如)S 的公共静态类。这个方法名称应该很短,因为会经常使用。它应该委托给 Gettext 或 ResourceBundle API 来获取消息。
  • 所有要本地化的字符串都用 _(...) 环绕:System.out.println(_("Hello world!!!"))
  • 运行 gettext 命令提取所有此类 _ 字符串
  • 将提取的文件翻译成目标语言
  • 再次运行 gettext 以编译和检查此类文件

您可以非常轻松地为任何应用程序(无论是用 Java、C、Python 还是其他语言编写)添加本地化。

【讨论】:

    【解决方案5】:

    为了使应用程序国际化,我实现了一个Message Compiler,它将资源包文件和常量定义创建为Java 枚举或来自单个源文件的键的静态最终字符串。所以常量可以在 Java 源代码中使用,这比使用纯字符串更安全。消息编译器不能只用于 Java。它还为 Objective-C 或 Swift 创建资源文件和常量,并且可以为其他编程环境进行扩展。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-02
      • 2015-07-07
      • 2010-09-14
      • 2011-04-12
      • 1970-01-01
      • 2012-01-24
      • 1970-01-01
      相关资源
      最近更新 更多