Web应用程序的国际化

时间:2010-10-20 15:12:55

标签: java internationalization

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

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

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

使用Spring framework和JSP技术。

在此先感谢,我知道这可能是一个太普遍的问题。

5 个答案:

答案 0 :(得分:2)

由于您使用的是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" />

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

<!-- 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等语言环境属性的链接即可更改为德语翻译。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

如果不使用任何框架,内部化应用程序的最佳方法是使用数据库存储所有翻译。只是一个简单的类,它将通过密钥加载db的翻译,并解决您的问题。

答案 3 :(得分:0)

寻找一种简单有效的国际化应用方式?试试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等编写)。

答案 4 :(得分:0)

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