4

我有一个名为 的类,其中描述Info了一堆static String变量。

public class Info{

    public static stringOne= "Hello";
    public static stringTwo = "world";

}

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

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

4

4 回答 4

3

看看资源包

文档中的复制粘贴:

当您的程序需要特定于语言环境的对象时,它会使用 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 (e.g., "OK")
             {"OkKey", "OK"},
             {"CancelKey", "Cancel"},
             // END OF MATERIAL TO LOCALIZE
        };
     }
 }

键始终是字符串。在本例中,键是“OkKey”和“CancelKey”。在上面的例子中,值也是字符串——“OK”和“Cancel”——但它们不是必须的。这些值可以是任何类型的对象。您可以使用适当的 getter 方法从资源包中检索对象。因为 "OkKey" 和 "CancelKey" 都是字符串,所以您可以使用 getString 来检索它们:

button1 = new Button(myResources.getString("OkKey"));
button2 = new Button(myResources.getString("CancelKey"));
于 2012-11-29T18:56:42.940 回答
2

尽管使用 aResourceBundle是 Java 中传统且最著名的国际化方法,但可以将国际化数据作为类成员提供,这与您寻求的方式有些相似。

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

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

并且s()可以使要添加到您的Map子类的方法负责处理用户偏好和Map通过语言键进行选择。

也就是说,剩下的任务就是为所有这些制定一个方便的 API... 欢迎您在我的博客页面 Look Ma 上查看这样的实现没有ResourceBundle :) ...继续使用消息格式参数。

于 2013-02-26T04:37:07.690 回答
2

这是这里的一个例子:-

  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"));
  }
 }
于 2012-11-29T18:58:45.887 回答
0

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

于 2016-01-19T16:33:22.007 回答