如何根据message.properties检查语言环境

时间:2012-02-15 13:34:19

标签: java locale resteasy

我正在使用hibernate和RestEasy API来创建服务器。我有3个属性文件message.properties a, mesage_en-GB.properties and message_en.propperties文件。 当我从客户端收到请求时,它在头文件中有区域设置。我需要针对我的属性文件检查这个区域设置,即如果它是en-GB而不是使用mesage_en-GB.properties,如果没有给出而不是使用message.properties,如果输入错误则输出错误消息。 但我没有得到如何比较这些值。 请建议。

2 个答案:

答案 0 :(得分:1)

如果出于某种原因无法由容器管理区域设置和捆绑包,则需要手动管理它们。

我假设你的类路径中有属性文件。

首先,您需要创建您将要使用的Locale。例如,您从HTTP头获取语言为String fr,您将其传递给Java7中的Locale.forLanguageTag(String)方法或在Java6中使用Locale(String)构造函数并获取Locale对象:

Locale locale = Locale.forLanguageTag(stringFromHeader) // since Java 7
Locale locale = new Locale(stringFromHeader) // prior to Java 7

然后将此语言环境传递给ResourceBundle.getBundle方法以获取正确的包:

ResourceBundle messages = ResourceBundle.getBundle("messages", locale);

然后,您调用ResourceBundle的getString(key:String)方法来获取本地化的字符串:

messages.getString("my_message")

要确保此方法100%有效,您可以按照以下简单步骤操作:

1)在某处创建文件夹tmp

2)在该文件夹中创建文件A.java,其中包含以下内容:

import java.util.*;

public class A {

public static void main(String[] args) throws Exception {
  Locale locale = new Locale("en");
  ResourceBundle messages = ResourceBundle.getBundle("messages", locale);
  System.out.println(messages.getString("my_message"));
  locale = new Locale("fr");
  messages = ResourceBundle.getBundle("messages", locale);
  System.out.println(messages.getString("my_message"));
}   
}

3)使用以下内容创建文件messages.properties

my_message=hello

4)使用以下内容创建文件messages_fr.properties

my_message=salut

5)转到tmp文件夹并运行两个命令:

javac A.java
java -cp . A

输出结果为:

hello
salut

我希望这对你有用!

PS: 这里有一个很棒的演练:http://docs.oracle.com/javase/tutorial/i18n/resbundle/propfile.html

答案 1 :(得分:0)

您需要在Spring配置中注册LocaleChangeInterceptor并使用<spring:message>标记输出消息。

这是一个很棒的演练:http://viralpatel.net/blogs/2010/07/spring-3-mvc-internationalization-i18n-localization-tutorial-example.html

PS 此机制可以在服务器之间更改,在某些情况下使用<fmt:message>可能是更好的选择。