Androidアプリでのローカリゼーションは、アプリとともにデプロイされるXMLファイルを介して行われることをここで読みました。
実行時にこれらのXMLファイルをアプリに動的にロードすることは可能ですか?
そうでない場合は、UI XMLとリソースXMLの間のバインドをオーバーライドして、動的にロードされた独自のXMLファイルにバインドできるようにすることはできますres/values
か?
ありがとう
Androidアプリでのローカリゼーションは、アプリとともにデプロイされるXMLファイルを介して行われることをここで読みました。
実行時にこれらのXMLファイルをアプリに動的にロードすることは可能ですか?
そうでない場合は、UI XMLとリソースXMLの間のバインドをオーバーライドして、動的にロードされた独自のXMLファイルにバインドできるようにすることはできますres/values
か?
ありがとう
これらの xml ファイルを実行時にアプリに動的にロードすることはできますか?
いいえ、申し訳ありません。
そうでない場合、UI xml とリソース XML の間のバインディングをオーバーライドして、res/values のファイルではなく、動的にロードされた独自の xml ファイルにバインドできるようにすることはできますか?
あなたがそれを使用しない限り、何もres/values/
使用されません。したがって、「オーバーライド」するものは何もありません。
たとえば、TextView
. テキストを表示したい。そのテキストをローカライズしたい。通常、一連の文字列リソースを翻訳ごとに 1 つ設定し、それらの文字列リソースをTextView
(android:text
レイアウトやsetText()
Java などで) で使用します。あなたの場合、文字列リソースを設定するのではなく、「独自のことを行い」、必要に応じて呼び出しsetText()
ます。
あなたのアプローチで失うのは、自動変換です。アプリの実行中にユーザーが言語を切り替えた場合、Android はそれを構成の変更として扱い、フォアグラウンドに戻ったときにアクティビティを再開します。通常、これは新しい文字列リソースに自動的に読み込まれます。あなたの場合、文字列リソースを使用していないため、そうではありません。代わりに、( 経由で) アクティビティを再開しないように Android に指示し、すべてのなどのウィジェットを自分android:configChanges
で手動でリロードする必要があります。TextView
そして、もしあなたがそれを忘れたら、まあ、ユーザーはただめちゃくちゃです.
私見ですが、誰かがあなたの頭に銃を向けて、アプリの新しいバージョンを出荷せずに翻訳を変更しようと強制しない限り、文字列リソースを使用してアプリの新しいバージョンを出荷してください.
必要に応じて、車輪を再発明して、独自の Locale ベースのリソース読み込みを実装できます。
経由で現在のロケールを取得できます
Locale = context.getResources().getConfiguration().locale;
次に、その結果を使用して、独自の文字列/ドローアブルなどを適切にロードします。もちろん、これらすべてをプログラムで行う必要があります (XML レイアウトは、正しいリソースを自動的に使用しません)。
標準のローカリゼーション手法に固執することを強くお勧めします。