12

Androidアプリでのローカリゼーションは、アプリとともにデプロイされるXMLファイルを介して行われることをここで読みました。

実行時にこれらのXMLファイルをアプリに動的にロードすることは可能ですか?

そうでない場合は、UI XMLとリソースXMLの間のバインドをオーバーライドして、動的にロードされた独自のXMLファイルにバインドできるようにすることはできますres/valuesか?

ありがとう

4

2 に答える 2

9

これらの xml ファイルを実行時にアプリに動的にロードすることはできますか?

いいえ、申し訳ありません。

そうでない場合、UI xml とリソース XML の間のバインディングをオーバーライドして、res/values のファイルではなく、動的にロードされた独自の xml ファイルにバインドできるようにすることはできますか?

あなたがそれを使用しない限り、何もres/values/使用されません。したがって、「オーバーライド」するものは何もありません。

たとえば、TextView. テキストを表示したい。そのテキストをローカライズしたい。通常、一連の文字列リソースを翻訳ごとに 1 つ設定し、それらの文字列リソースをTextView(android:textレイアウトやsetText()Java などで) で使用します。あなたの場合、文字列リソースを設定するのではなく、「独自のことを行い」、必要に応じて呼び出しsetText()ます。

あなたのアプローチで失うのは、自動変換です。アプリの実行中にユーザーが言語を切り替えた場合、Android はそれを構成の変更として扱い、フォアグラウンドに戻ったときにアクティビティを再開します。通常、これは新しい文字列リソースに自動的に読み込まれます。あなたの場合、文字列リソースを使用していないため、そうではありません。代わりに、( 経由で) アクティビティを再開しないように Android に指示し、すべてのなどのウィジェットを自分android:configChangesで手動でリロードする必要があります。TextViewそして、もしあなたがそれを忘れたら、まあ、ユーザーはただめちゃくちゃです.

私見ですが、誰かがあなたの頭に銃を向けて、アプリの新しいバージョンを出荷せずに翻訳を変更しようと強制しない限り、文字列リソースを使用してアプリの新しいバージョンを出荷してください.

于 2013-01-11T16:23:57.890 に答える
2

必要に応じて、車輪を再発明して、独自の Locale ベースのリソース読み込みを実装できます。

経由で現在のロケールを取得できます

Locale = context.getResources().getConfiguration().locale;

次に、その結​​果を使用して、独自の文字列/ドローアブルなどを適切にロードします。もちろん、これらすべてをプログラムで行う必要があります (XML レイアウトは、正しいリソースを自動的に使用しません)。

標準のローカリゼーション手法に固執することを強くお勧めします。

于 2013-01-11T16:29:08.247 に答える