Android アプリケーションにいくつかの言語ファイルがあります: value/strings.xml、value-en/strings.xml、...etc このファイルのコンテンツをいくつかの配列などにロードすることができます。たとえば、実行時にデフォルトのテキスト文字列と英語の文字列を 2 つの異なる配列にロードしたいと考えています。
ありがとう
アリン
次のようなメソッドを作成します。
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/*
) が代わりにロードされるからです。
実際そういう状況です。このシナリオがあると想像してください。一部の中国人がアプリケーションを開きます。彼は、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()) はアプリの言語を返します (ユーザーの選択)
結論として、役に立たない作業は他にもありますが、必要なことは私に任せてください。私が信じていることは正常です。