使用Java实现i18n的最佳实践是什么?
您可以使用ResourceBundle.getBundle(name)
,该方法根据用户的语言环境返回正确的bundle并获取特定的消息。
ResouceBundle类的工作方式是尝试加载包含本地化消息的“bundle”(通常是.properties文件)。例如,您可以有:
messages_en.properties
-----
greeting = "Hello "
并且messages_es.properties
-----
greeting = "Hola "
然后按照以下方式使用它。
... void main( ... . {
ResourceBundle bundle = ResourceBundle.getBundle( "messages", userLocale );
System.out.println( bundle.getString("greeting" ) + " Steve " );
}
然后它会输出
Hello Steve
如果用户的语言环境是英语(en), 并且
Hola Steve
如果用户语言环境是西班牙语(es)
ResouceBundle.getBundle()方法不仅会加载.properties文件,如果可用的话,它也可以加载一个类,该类反过来可能会从数据库中加载消息。
另请参阅:
这基本上是一个领域问题。如果您在Web上,大多数主要框架都会提供一种I18N的方式(在Spring中,这可以通过.properties文件和taglibs实现with .properties files and taglibs)。
相反,对于桌面应用程序,资源注入可能是一个有趣的选择。Spring应用程序框架甚至可以让您完全从配置文件中配置命名的Swing组件(按钮、标签等)。通过这样做,您不仅可以设置组件的颜色和边框,还可以设置它们的文本。