use*_*817 1 java singleton multiple-languages
假设有一个简单的类:
public class SingletonClass {
private static SingletonClass singObj;
private string variable1;
private string variable2;
.....
public static synchronized SingletonClass getInstance() {
if (singObj == null) {
singObj = new SingletonClass();
}
return singObj;
}
}
Run Code Online (Sandbox Code Playgroud)
如果有很多字符串变量并且需要以多种语言存储,那么在Java中管理它的标准方法是什么?
目前我使用:
public class SingletonClass {
private static SingletonClass singObj_LANG1;
private static SingletonClass singObj_LANG2;
private static SingletonClass singObj_LANG3;
private string variable1;
private string variable2;
.....
public static synchronized SingletonClass getInstance(String lang) {
if (lang.equals("English")) {
if (singObj_LANG1 == null) {
singObj_LANG1 = new SingletonClass();
}
return singObj_LANG1;
}else if (lang.equals("Chinese")) {
if (singObj_LANG2 == null) {
singObj_LANG2 = new SingletonClass();
}
return singObj_LANG2;
}else{
if (singObj_LANG3 == null) {
singObj_LANG3 = new SingletonClass();
}
return singObj_LANG3;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我认为这是一种不好的做法,任何更好的实施?
你需要的是国际化
国际化是设计应用程序的过程,以便它可以适应各种语言和区域而无需进行工程更改.有时,国际化一词缩写为i18n,因为第一个"i"和最后一个"n"之间有18个字母.
而不是lang的字符串变量,您需要使用Locale.您将消息存储在ResourceBundle中.
资源包包含特定于语言环境的对象.当您的程序需要特定于语言环境的资源(例如String)时,您的程序可以从适合当前用户的语言环境的资源包中加载它.通过这种方式,您可以编写程序代码,该程序代码在很大程度上独立于用户的语言环境,隔离资源包中大多数(如果不是全部)特定于语言环境的信息.这允许您编写可以:
可以轻松地本地化或翻译成不同语言,一次处理多个语言环境,以后可以轻松修改以支持更多语言环境
Java平台提供的两个子类ResourceBundle,ListResourceBundle并且PropertyResourceBundle,提供一个相当简单的方法来创建资源.ListResourceBundle将其资源作为键/值对列表进行管理.PropertyResourceBundle使用属性文件来管理其资源.
我建议的是PropertyResourceBundle因为您应该将已翻译的值保留在属性文件中.
属性文件是一个简单的文本文件.您可以使用几乎任何文本编辑器创建和维护属性文件.
阅读更多支持带有属性文件的ResourceBundle 您可以在此处阅读有关该概念的更多信息.
最后,你最终会得到这样的混乱:
ResourceBundle messages = ResourceBundle.getBundle("MessagesBundle", currentLocale);
System.out.println(messages.getString("locale.language.key.example"));
Run Code Online (Sandbox Code Playgroud)
我提供的链接代表了更广泛的国际化课程.您可以在那里浏览并阅读更多相关内容,最终您将学习最佳实践.使用框架变得更加容易.
采用这种方法,您将使用单一课程.
| 归档时间: |
|
| 查看次数: |
471 次 |
| 最近记录: |