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);

リソースバンドルには、キーと値のペアが含まれています。キーは、バンドル内のロケール固有のオブジェクトを一意に識別します。

次に、2つのキーと値のペアを含む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」と「キャンセル」)ですが、そうである必要はありません。値は任意のタイプのオブジェクトにすることができます。適切なgetterメソッドを使用して、リソースバンドルからオブジェクトを取得します。「OkKey」と「CancelKey」はどちらも文字列であるため、getStringを使用してそれらを取得します。

button1 = new Button(myResources.getString("OkKey"));
button2 = new Button(myResources.getString("CancelKey"));
于 2012-11-29T18:56:42.940 に答える
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 に答える
2

aを使用するResourceBundleことは、Javaでの国際化に対する従来の最もよく知られたアプローチですが、国際化データをクラスメンバーとして利用できるようにすることは可能です。これは、求める方法と多少似ています。

さらに、いくつかのメッセージの文字列を、言語でMapインデックス付けされた、さまざまな言語で配置できます。そして、このマップをあるクラスの静的メンバーにします。したがって、コンパイラでチェックされた方法で、クラスメンバー名によってメッセージのこれらの文字列コレクションを参照することができます。次に、実行時に優先ユーザー言語を選択する方法がある場合(それが必要です)、言語キーを使用して適切なコレクションから適切な文字列を選択するだけで、次のようになります。

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

また、サブクラスs()に追加するメソッドは、ユーザー設定と言語キーによるMap選択を処理するために責任を持たせることができます。Map

とは言うものの、残りのタスクは、これらすべてに便利なAPIを作成することです...私のブログページLook Ma、ResourceBundleなし:) ...、および次のページでそのような実装を見てください。メッセージフォーマットの引数を進めます。

于 2013-02-26T04:37:07.690 に答える
0

Javaおよびその他のアプリケーションの国際化のために、メッセージコンパイラを実装しました。これは、リソースバンドルファイルと定数定義を、単一のソースファイルからのキーのJava列挙型または静的最終文字列として作成します。したがって、定数はJavaソースコードで使用できます。これは、プレーンな文字列定数を使用するよりもはるかに安全な方法です。メッセージコンパイラは、Javaでのみ使用できます。また、Objective-CまたはSwiftのリソースファイルと定数を作成し、他のプログラミング環境に拡張できます。

于 2016-01-19T16:33:22.007 に答える