Java で国際化された基底クラス ResourceBundle を使用する方法
Java 開発において、ResourceBundle はローカライズされたリソースを便利に管理するためのメカニズムです。これにより、プログラムは現在のシステム環境の言語および国/地域に応じて、対応するローカライズされたリソース ファイルを自動的にロードできるため、ハードコーディングが回避され、コードの繰り返しが削減されます。 ResourceBundle を使用するための基本的な手順は次のとおりです:
1. リソース ファイルの準備
ResourceBundle はリソース ファイルをロードすることでローカリゼーションを実装するため、言語および国/地域ごとに対応するリソースを準備する必要があります。書類。リソース ファイルには、.properties 形式のテキスト ファイル、.class ファイル、または .jar ファイルを使用できます。
リソース ファイルでは、ローカライズする必要がある各文字列の属性名を指定し、各属性名の言語への翻訳を提供する必要があります。たとえば、messages.properties という名前のリソース ファイルの例を次に示します。
greeting=Hello farewell=Goodbye
異なる言語や国では、同じプロパティ名に対して異なる翻訳を提供できます。たとえば、次はmessages_fr.propertiesという名前のフランス語のリソース ファイルの例です:
greeting=Bonjour farewell=Au revoir
2. リソース ファイルのロード
Java では、ResourceBundle クラスを使用してリソース ファイルをロードできます。 ResourceBundle クラスには、リソース ファイルをロードするためのいくつかの異なるコンストラクターが用意されています。例:
ResourceBundle rb = ResourceBundle.getBundle("messages", Locale.getDefault());
このステートメントは、現在のシステム環境のデフォルトの言語および国/地域に従って、messages という名前のリソース ファイルをロードします。システム環境が英語および米国の場合、このステートメントはmessages.propertiesリソース・ファイルをロードします。システム環境がフランス語の場合、このステートメントはmessages_fr.propertiesリソース・ファイルをロードします。
指定した言語および国/地域でリソース ファイルを読み込む必要がある場合は、Locale パラメーターを指定して getBundle() メソッドを使用できます。例:
Locale locale = new Locale("fr", "FR"); ResourceBundle rb = ResourceBundle.getBundle("messages", locale);
このステートメントは、messages_fr_FR.properties という名前のフランス語/フランス語リソース ファイルをロードします。
3. ローカライズされた文字列を取得する
リソース ファイルが正常にロードされたら、ResourceBundle の getString() メソッドを使用してローカライズされた文字列を取得できます。次に例を示します。
String greeting = rb.getString("greeting"); String farewell = rb.getString("farewell");
これらのステートメントは、リソース ファイルから、greeting および welcome という名前の属性を含むローカライズされた文字列を取得し、それらをgreeting 変数と別れの変数にそれぞれ割り当てます。指定されたプロパティ名が見つからない場合、getString() メソッドは MissingResourceException をスローします。
4. ResourceBundle を使用するためのヒント
上記の基本的な手順に加えて、ResourceBundle を使用するための注目すべき機能とヒントがいくつかあります:
4.1 適切なリソース ファイル形式を選択する
ResourceBundle は、.properties、.xml、.class ファイルなどを含む複数のリソース ファイル形式をサポートします。単純なローカライズされた文字列の場合、.properties 形式が最も一般的に選択されます。これは、使用が簡単で、編集とローカライズが簡単であるためです。
画像、サウンド、ビデオなど、より複雑なローカライズされたリソースの場合は、他の形式のリソース ファイルを使用する必要がある場合があります。たとえば、.class ファイルまたは .jar ファイルを使用して画像またはサウンド ファイルを組み込み、ResourceBundle の ClassLoader.getSystemClassLoader() メソッドを使用してこれらのファイルをロードできます。
4.2 ローカライズされた文字列内の特殊文字の処理
ローカライズされた文字列には、改行、タブ、Unicode 文字などのさまざまな特殊文字が含まれる場合があります。これらの文字をリソース ファイルに直接埋め込むと、無用なトラブルやエラーが発生する可能性があります。
これらの問題を回避するために、Java エスケープ文字を使用してこれらの特殊文字を表すことができます。たとえば、「\n」を使用して改行文字を表し、「\t」を使用してタブ文字を表し、「\uXXXX」を使用して Unicode 文字を表すことができます。
4.3 欠落しているローカライズされた文字列の処理
場合によっては、特定の言語のローカライズされた文字列の翻訳が提供されないことがあります。プログラムでの MissingResourceException 例外を回避するために、リソース ファイル内でこれらの欠落文字列に対するデフォルトの翻訳 (英語翻訳など) を提供できます。たとえば、次はデフォルトの翻訳を含むmessages_fr.properties ファイルの例です:
greeting=Bonjour farewell=Au revoir warning=Attention: This message has no translation in French. Please refer to the English version.
このように、フランス語環境では、特定のプロパティ名のローカライズされた文字列が見つからない場合、ResourceBundle は属性名のデフォルトの翻訳を自動的に返すため、プログラム例外が回避されます。
4.4 動的ローカリゼーション文字列の処理
一部のローカリゼーション文字列には、時刻、日付、数値、通貨などの動的コンテンツが含まれる場合があります。これらの文字列を正しくローカライズするには、MessageFormat や NumberFormat などの Java の書式設定メカニズムを使用する必要があります。たとえば、次は MessageFormat を使用して動的文字列をローカライズする例です:
String pattern = rb.getString("greeting"); Object[] arguments = {"John"}; String greeting = MessageFormat.format(pattern, arguments);
この例では、パターンはプレースホルダー "{0}"、"{0}" を含むローカライズされた文字列です。場所を表します。これは動的コンテンツに置き換える必要があります。引数は実際の動的コンテンツを含む配列であり、「{0}」の位置を順番に置き換えます。最後に、MessageFormat.format() メソッドはローカライズされた文字列を返します。
4.5 处理多个资源文件
在一些情况下,可能需要使用多个资源文件来管理不同类型或不同用途的本地化资源。在这种情况下,可以使用ResourceBundle.Control类的方法来指定资源文件的搜索路径和加载顺序。
例如,可以使用ResourceBundle.Control.getControl()方法来获取默认的ResourceBundle.Control实例,然后使用ResourceBundle.getBundle()方法来指定基础名称和Locale信息,以便查找合适的资源文件。例如,以下是一个使用多个资源文件来管理本地化字符串的示例:
ResourceBundle.Control control = ResourceBundle.Control.getControl(ResourceBundle.Control.FORMAT_PROPERTIES); ResourceBundle messages = ResourceBundle.getBundle("Messages", new Locale("fr"), control); ResourceBundle errors = ResourceBundle.getBundle("Errors", new Locale("fr"), control); String greeting = messages.getString("greeting"); String error = errors.getString("invalid_input"); System.out.println(greeting); // Bonjour System.out.println(error); // Entrée invalide
在这个示例中,我们使用ResourceBundle.Control.FORMAT_PROPERTIES指定了资源文件的格式为.properties文件,然后分别使用Messages和Errors作为基础名称来获取不同类型的资源文件。这样,我们就可以轻松地管理不同类型的本地化资源,从而使程序更加可读和易于维护。
4.6 自定义资源加载器
如果默认的资源加载机制无法满足需求,我们还可以自定义资源加载器来实现更高级的功能。自定义资源加载器需要继承java.util.ResourceBundle.Control类,并重写其中的方法来实现自定义逻辑。
例如,以下是一个使用自定义资源加载器来加载本地化字符串的示例:
public class MyResourceLoader extends ResourceBundle.Control { @Override public ResourceBundle newBundle(String baseName, Locale locale, String format, ClassLoader loader, boolean reload) throws IllegalAccessException, InstantiationException, IOException { String bundleName = toBundleName(baseName, locale); String resourceName = toResourceName(bundleName, "myproperties"); InputStream stream = loader.getResourceAsStream(resourceName); if (stream != null) { try { return new PropertyResourceBundle(stream); } finally { stream.close(); } } else { return super.newBundle(baseName, locale, format, loader, reload); } } } ResourceBundle.Control control = new MyResourceLoader(); ResourceBundle messages = ResourceBundle.getBundle("Messages", new Locale("fr"), control); String greeting = messages.getString("greeting"); System.out.println(greeting); // Bonjour
在这个示例中,我们定义了一个名为MyResourceLoader的自定义资源加载器,并重写了其中的newBundle()方法来实现自定义资源加载逻辑。然后,我们使用这个自定义资源加载器来获取Messages资源文件中的本地化字符串。这样,我们就可以实现更高级的资源加载功能,从而满足更复杂的需求。
4.7 动态更新资源文件
有时候,在应用程序运行期间,可能需要动态地更新资源文件中的某些值。在Java中,我们可以使用PropertyResourceBundle类来实现这个功能。
PropertyResourceBundle是ResourceBundle的一个子类,它可以读取.properties格式的资源文件,并将其转换为一个键值对的形式。然后,我们可以通过这个键值对来动态地更新资源文件中的值。
例如,以下是一个使用PropertyResourceBundle来动态更新本地化字符串的示例:
// 加载资源文件 InputStream stream = new FileInputStream("Messages.properties"); PropertyResourceBundle bundle = new PropertyResourceBundle(stream); // 动态更新本地化字符串 bundle.handleKey("greeting", (key, value) -> "Hello"); // 输出本地化字符串 String greeting = bundle.getString("greeting"); System.out.println(greeting); // Hello
在这个示例中,我们首先使用FileInputStream来加载Messages.properties资源文件,然后将其转换为一个PropertyResourceBundle对象。然后,我们使用handleKey()方法来动态地更新greeting这个键对应的值。最后,我们使用getString()方法来获取更新后的本地化字符串。
这种动态更新资源文件的方式可以使应用程序更加灵活,能够快速响应变化。但是需要注意的是,这种方式需要保证资源文件的正确性和一致性,否则可能会导致应用程序运行出错。
以上がJava で国際化された基底クラス ResourceBundle を使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Java の Weka へのガイド。ここでは、weka java の概要、使い方、プラットフォームの種類、利点について例を交えて説明します。

この記事では、Java Spring の面接で最もよく聞かれる質問とその詳細な回答をまとめました。面接を突破できるように。

Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです

Java での日付までのタイムスタンプに関するガイド。ここでは、Java でタイムスタンプを日付に変換する方法とその概要について、例とともに説明します。

カプセルは3次元の幾何学的図形で、両端にシリンダーと半球で構成されています。カプセルの体積は、シリンダーの体積と両端に半球の体積を追加することで計算できます。このチュートリアルでは、さまざまな方法を使用して、Javaの特定のカプセルの体積を計算する方法について説明します。 カプセルボリュームフォーミュラ カプセルボリュームの式は次のとおりです。 カプセル体積=円筒形の体積2つの半球体積 で、 R:半球の半径。 H:シリンダーの高さ(半球を除く)。 例1 入力 RADIUS = 5ユニット 高さ= 10単位 出力 ボリューム= 1570.8立方ユニット 説明する 式を使用してボリュームを計算します。 ボリューム=π×R2×H(4

Java は、初心者と経験豊富な開発者の両方が学習できる人気のあるプログラミング言語です。このチュートリアルは基本的な概念から始まり、高度なトピックに進みます。 Java Development Kit をインストールしたら、簡単な「Hello, World!」プログラムを作成してプログラミングを練習できます。コードを理解したら、コマンド プロンプトを使用してプログラムをコンパイルして実行すると、コンソールに「Hello, World!」と出力されます。 Java の学習はプログラミングの旅の始まりであり、習熟が深まるにつれて、より複雑なアプリケーションを作成できるようになります。
