1

Android アプリケーションにいくつかの言語ファイルがあります: value/strings.xml、value-en/strings.xml、...etc このファイルのコンテンツをいくつかの配列などにロードすることができます。たとえば、実行時にデフォルトのテキスト文字列と英語の文字列を 2 つの異なる配列にロードしたいと考えています。

ありがとう

アリン

4

2 に答える 2

1

次のようなメソッドを作成します。

Resources getResourcesByLocale( Context context, String localeName ) {
    Resource res = context.getResources();
    Configuration conf = new Configuration(res.getConfiguration());
    conf.locale = new Locale(localeName);
    return new Resources(res.getAssets(), res.getDisplayMetrics(), conf);
}

定義した任意のロケールのリソースを取得できます。次に例を示します。

Resources res_en = getResourcesByLocale(context, "en");
Resources res_de = getResourcesByLocale(context, "de");
Resources res_fr = getResourcesByLocale(context, "fr");

String some_name_en = res_en.getString(R.string.some_name);
String some_name_fr = res_fr.getString(R.string.some_name);
// etc...

さらに、あるロケールに対して文字列を定義していない場合は、例外について気にする必要はありません。いずれにせよデフォルト (from res/values/*) が代わりにロードされるからです。

于 2012-10-09T21:09:24.493 に答える
0

実際そういう状況です。このシナリオがあると想像してください。一部の中国人がアプリケーションを開きます。彼は、ch ロケールに設定された携帯電話を持っています。アプリケーションのデフォルトは言語として xx です。つまり、2 つの言語ファイル values/strings.xml (たとえばデフォルトとしてスペイン語) と、英語用の別の言語 values-en/strings.xml があります。デフォルトは彼にとって意味をなさないので、たとえ彼があまりよく理解していなくても、英語は彼の理解に最も適しています. そのため、アプリの開始時に言語設定 (Android 言語設定) を開きます。英語を選択しない限り、選択するとアプリがスペイン語に設定されます。私のアプリを使用するためだけに、基本的に英語で電話ロケールを変更するように彼に強制しています。デバイスの言語を変更せずに、任意の言語でアプリケーションを表示できるようにする必要があるため、Android の概念は全体的に間違っています。


私がやったこと: - 値フォルダーにもう 1 つの string_xx.xml ファイルを作成しました。ここで、翻訳文字列名 = "txtTranslation" の場合、string_xx ファイルに "en_txtTranslation" キーがあります。R.java はそれらをすべてロードし、私のアプリでは、グローバル var selectedLanguage = xx に基づいて、次のコードを使用して書き込み文字列を添付します。

public String translate(String text)
{
      String appLanguage = UtilsCentral.getUserLanguage(getApplicationContext());
      if (appLanguage != "")
      {
          return getString(getResources().getIdentifier(appLanguage + "_" + text, "string", this.getPackageName()));  
      }
      else 
      {
          return getString(getResources().getIdentifier(text, "string", this.getPackageName()));
      }
}

実際、作成時のアクティビティでは、すべてのビューを .text = tarnslate("txtTranslation") で設定する必要があります

注: UtilsCentral.getUserLanguage(getApplicationContext()) はアプリの言語を返します (ユーザーの選択)

結論として、役に立たない作業は他にもありますが、必要なことは私に任せてください。私が信じていることは正常です。

于 2012-09-26T08:23:24.223 に答える