我正在使用hibernate和RestEasy API来创建服务器。我有3个属性文件message.properties a, mesage_en-GB.properties and message_en.propperties
文件。
当我从客户端收到请求时,它在头文件中有区域设置。我需要针对我的属性文件检查这个区域设置,即如果它是en-GB而不是使用mesage_en-GB.properties,如果没有给出而不是使用message.properties,如果输入错误则输出错误消息。
但我没有得到如何比较这些值。
请建议。
答案 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>
标记输出消息。
PS
此机制可以在服务器之间更改,在某些情况下使用<fmt:message>
可能是更好的选择。