1

私はAndroid2.2で多言語を使用しています。次のようなすべてのアクティビティのonCreateで言語を変更します。

  Locale locale = new Locale("nl");
    Locale.setDefault(locale);
    Configuration config = new Configuration();
    config.locale = locale;
    getBaseContext().getResources().updateConfiguration(config,getBaseContext().getResources().getDisplayMetrics());

もちろん、setContentViewを呼び出してandroid:configChanges = "locale"をマニフェストに追加する前に、これらのコードを配置します。しかし、ランチャーアクティビティが最初に表示されたとき、いくつかの単語は私の希望する言語に正しく変更されますが、いくつかの単語は英語のままです。他のアクティビティ(ランチャーアクティビティではない)の言語変更はOKです。そして、他のアクティビティからランチャーアクティビティに戻ると、すべての単語が希望の言語に正しく変更されました。ランチャーの最初のときに、ランチャーアクティビティにいくつかの単語があり、希望の言語に正しく変更されない理由がわかりません。

ご協力いただきありがとうございます。

4

2 に答える 2

1

もっとシンプルにしてみませんか?

アプリにさまざまな言語値ディレクトリ(res / values-en、res / values-fr、res / values-nlなど)を作成して、文字列キーに関連付けられた言語値を格納することができます。

したがって、ディレクトリ「values-en」が作成されたら、それを右クリックしてAndroid xml値ファイルを追加し、language.xmlという名前を付けてから、「次へ」をクリックして、表示された画面の左側のパネルで「言語」の構成を選択します。次に、[完了]をクリックします。

次に、この最近作成されたファイルで、変換する各文字列のすべてのキー値を作成します。次に、完了したら、language.xmlファイルを別のvalues-xxディレクトリにコピーし、すべての文字列の値を変更します。

したがって、values-enのlanguage.xmlファイルには次のものが含まれます。

<string name="hello">Hello</string>

そしてvalues-frのlanguage.xmlファイルは次のようになります:

<string name="hello">Bonjour</string>

次に、アクティビティでこれらの文字列値を取得するには、

String helloString = getResources()。getString(R.String.hello);

アプリケーションは、デバイスの言語構成に応じて、適切な文字列リソースを自動的にロードします

于 2012-11-21T09:38:08.453 に答える
0

ついに私は自分の問題を完全に解決する解決策を見つけました。ロケールはシ​​ステム(またはロケールを変更する機能があるもの)によって自動的にリセットされることがわかりました。そのため、デフォルトのロケールを設定しましたが、正しく機能しませんでした。これが私の解決策です。Applicationを拡張するクラスを作成してから、以下のようにメソッドをオーバーライドする必要があります。

@Override
public void onConfigurationChanged(Configuration newConfig) {
    // TODO Auto-generated method stub
    Locale locale = new Locale(YourDesired_langCode);
    newConfig.locale = locale;
    super.onConfigurationChanged(newConfig);

    Locale.setDefault(locale);
    getBaseContext().getResources().updateConfiguration(newConfig,getBaseContext().getResources().getDisplayMetrics());
}

そのため、デフォルトロケールがアプリの外部でリセットされるたびに、このメソッドが呼び出され、目的の言語でデフォルトロケールが再度リセットされます。今ではかなりうまく機能します。

于 2012-11-21T07:57:49.157 に答える