私は現在、プロジェクト用のJava Swing GUIを作成中です。ユーザーインターフェイスは私が知らない複数の言語(英語ドイツ語フランス語など)である必要があります。すべてのテキストを保存するためにconfigファイルを使用して、翻訳者がプロジェクトを再コンパイルせずに翻訳できるようにすることが提案されました。これには、テキストの変更や完成後の言語の追加が可能になるという追加の利点があります。また、ここにUIの設定をいくつか入れて、設定を変更することもできます。しかし、いくつかの反射の後、私はGUIが変更されるたびにファイルIOを行う必要があるので、これは非常に遅いことに気付きました。どのようにしてGUIを設計すれば、私はまだ素人が私なしで翻訳することができますが、プログラムを遅くすることはできません。複数の言語に移植されるGUIの設計
-1
A
答えて
0
これを行うにはさまざまな方法がありますが、あなた自身で書きたい場合はここに1つの実装方法があります。
ISO 639 language codes後、あなたは通常、そのようにレイアウトされたリソースディレクトリがあります。そして、
resources/
languages/
en/
strings.conf
de/
strings.conf
とき、あなたはget the users default languageアプリケーション最初にロードし、それに応じて言語ファイルをロードします。ファイルはディスクから一度だけ読み込まれ、メモリに保持されます。次のようなものを使うことができ、LanguageLoaderのインスタンスを保持することによって、.getStringById()
を呼び出して名前でキーをロードできます。
public class LanguageLoader() {
final HashMap<String, String> localizedStrings;
public LanguageLoader(String language) {
localizedStrings = new HashMap<String, String>();
File f = new File("languages/" + language + "/strings.conf");
// TODO read file line by line and add key/value pairs to hash map
}
public String getStringById(String stringId) {
return localizedString.get(stringId);
}
}
そして、あなたのアプリケーションで使用する言語ファイルが
en/strings.conf
welcome_001=Hello World!
de/strings.conf
welcome_001=Hallo Welt!
0
通常、Javaの場合、どの言語でもそうですが、起動時に読み込む単純なプロパティファイルまたはプロパティファイルのバンドルを示すリソースバンドルとしてテキストを提供します。これらはメモリにロードされ、非常に高速になります。
これは一般的な問題であり解決する必要があるため、現在使用しているUIフレームワークと国際化を処理する方法についてGoogle検索を行うことをお勧めします。
関連する問題
- 1. すべての言語を.NETに移植できますか?
- 2. PythonプログラムをC言語に移植する
- 3. OpenGL ESのサポート言語と移植性の提案
- 4. Javaでgui移植を行うには?
- 5. アセンブリ言語は、/実際に/移植できません。
- 6. REST API、多言語設計
- 7. 多言語データベース設計
- 8. URL複数の言語用に設定された場合の変更
- 9. git-guiで希望の言語を設定するには?
- 10. 言語がVM用に設計されていません
- 11. プログラミング言語で整数のアクセプタを設計する方法C
- 12. 多言語表の設計問題
- 13. Python/Djangoのデータベースローカリゼーション(多言語)設計
- 14. PHP - 多言語アプリケーションの設計
- 15. 多言語データベース設計のビジネスクラス
- 16. 複数のロケールで複数の言語が使用されているサイト
- 17. 複数の言語モデル
- 18. 複数言語のリソースファイル
- 19. 複数言語のURL
- 20. 複数のJava言語レベル
- 21. Twitter4j - 複数言語のFilterQuery
- 22. Python RegEx複数の言語
- 23. 複数言語のUWPアプリケーション
- 24. Django-複数の言語
- 25. 複数言語IDE
- 26. 複数の他の一般的な言語への一方向変換で設計された言語はありますか?
- 27. iOS/Monotouchに移植可能なWindows Phoneゲームの設計に関するヒント
- 28. HQL言語の関数の合計
- 29. は、複数の人間の言語に
- 30. 多言語GUI - 国際化
翻訳(という名前のリソースバンドル)で構成されて
は通常のコードで、jarファイルにバンドルされています。しかし、それが外にあっても、起動時にファイルから翻訳を読むのがなぜ遅いのでしょうか? 「GUIを変更するたびにファイルI/Oを実行する必要がある」とはどういう意味ですか?数百行のファイルを読むのは非常に高速で、ユーザーは気づかないでしょう。 –
[ResourceBundleクラス](https://docs.oracle.com/javase/8/docs/api/java/util/ResourceBundle.html)は、まさにこの目的のために設計されています。ファイルからクラスを読み込むJavaランタイムよりも遅くはありません。実際、ResourceBundleのエントリファイルは、ほとんどの場合、それらを読み込むクラスにバンドルされています。 – VGR