如何在java中实现国际化

我有一个名为Info的类,我有一堆static String变量。

 public class Info{ public static stringOne= "Hello"; public static stringTwo = "world"; } 

我希望从其他类中访问Info.stringTwo这些变量。

1.)我需要知道这是否是我在这里应用的java-Internationalization ? (我将在本课程中分配的应用程序中显示所有消息。并且,我希望也能为该应用程序提供不同的语言支持)

看看资源包

文档中的复制粘贴:

当您的程序需要特定于语言环境的对象时,它使用getBundle方法加载ResourceBundle类:

  ResourceBundle myResources = ResourceBundle.getBundle("MyResources", currentLocale); 

资源包包含键/值对。 这些键唯一地标识捆绑中的特定于语言环境的对象。

以下是包含两个键/值对的ListResourceBundle的示例:

  public class MyResources extends ListResourceBundle { protected Object[][] getContents() { return new Object[][] { // LOCALIZE THE SECOND STRING OF EACH ARRAY (eg, "OK") {"OkKey", "OK"}, {"CancelKey", "Cancel"}, // END OF MATERIAL TO LOCALIZE }; } } 

键总是字符串。 在此示例中,键是“OkKey”和“CancelKey”。 在上面的例子中,值也是字符串 – “确定”和“取消” – 但它们不一定是。 值可以是任何类型的对象。 您可以使用适当的getter方法从资源包中检索对象。 因为“OkKey”和“CancelKey”都是字符串,所以你可以使用getString来检索它们:

 button1 = new Button(myResources.getString("OkKey")); button2 = new Button(myResources.getString("CancelKey")); 

这是一个例子: –

  import java.util.*; public class InternationalizationDemo { public static void main(String[] args) { String language; String country; Locale locale; ResourceBundle rb; if (args.length != 2) { language = new String("en"); country = new String("US"); } else { language = new String(args[0]); country = new String(args[1]); } locale = new Locale(language, country); rb = ResourceBundle.getBundle("MessagesBundle", locale); System.out.println(rb.getString("localeInfo") + " ( " + locale.getDisplayLanguage() + "," + locale.getDisplayCountry() + ").\n"); System.out.println(rb.getString("welcome")); System.out.println(rb.getString("sayThanks")); } } 

尽管使用ResourceBundle是Java中传统且最着名的国际化方法,但可以将国际化数据作为类成员提供,有点类似于您所寻求的方式。

您可以在Map进一步将字符串用于不同语言的某些消息,并按语言编制索引。 并使这个Map成为某个类的静态成员。 因此,您可以通过编译器检查的方式通过类成员名称为消息引用这些字符串集合。 接下来,如果你有办法在运行时选择首选用户语言(你必须拥有它),你只需使用其语言键从适当的集合中选择正确的字符串,煮沸到这样的:

 logger.info (MyClassWithMessages.MY_MULTILANGUAGE_MESSAGE.s ()); 

并且要添加到Map子类的s()方法可以用于处理用户首选项和从Map按语言键选择。

也就是说,剩下的任务就是为所有这些制定一个方便的API …欢迎你在我的博客页面看看Ma,没有ResourceBundle 🙂 …以及下一页继续使用消息格式化参数。

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