Android 7.0(APIレベル24)から開始)ユーザーは自分のデバイスで優先言語を設定できます(ソース: LocaleList API )。私の問題は、私のアプリがそうではないことです。この設定を尊重してください-それは第二言語を考慮に入れていません。
Settings -> languages
言語設定を次のように選択しました。
1. Polish (preferred)
2. French
Androidアプリでは、2つの言語がサポートされています(デフォルトではen
、およびfr
):
values/strings.xml (English as default)
values-fr/strings.xml (French)
この構成では、アプリは英語(デフォルト)で起動しますが、言語設定のリストにはフランス語(アプリでサポートされているため、使用する必要があります)があります。
この場合、なぜAndroidはフランス語を選択するのですか?それを修正するにはどうすればよいですか?
注:設定で優先するFR言語を選択すると、フランス語が正しく設定されます
ENstrings.xmlファイルのサンプル:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE resources [<!ENTITY applicationName "app\'s name">]>
<resources>
<string name="application_name">&applicationName;</string>
<string name="dialog_ok">OK</string>
...
</resources>
FRstrings.xmlファイルのサンプル:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE resources [<!ENTITY applicationName "french name">]>
<resources>
<string name="application_name">&applicationName;</string>
<string name="dialog_ok">Oui</string>
...
</resources>
解決策は、Android.defaultConfig
のapp/build.gradle
にresConfigs
を追加して、正確なロケールリスト(アプリにあるもの)を含めることです。
Android {
defaultConfig {
resConfigs "nb", "nn", "in", "iw", "fr", ...
}
}
http://www.unicodeconference.org/presentations/ (直接リンク: http://www.unicodeconference.org/presentations/)の「AndroidInternationalization」チュートリアルのスライドを参照してください。 TS1T3-Nita-Pournader.pdf )
また https://Gist.github.com/amake/0ac7724681ac1c178c6f95a5b09f03ce
説明:ロケールリストのフォールバックは、文字列のロード時ではなく、開始時に発生します。
最近のほとんどのアプリケーションは、ある種のサポートライブラリを使用しています。 Googleサポートライブラリは約80の言語にローカライズされており、ライブラリのリソースがアプリケーションに統合されています。
ロード時に、システムはリスト内の順序でローカライズされたリソースをチェックし、サポートライブラリからポーランド語の「トレース」をいくつか見つけて、アプリケーションがポーランド語に翻訳されていると判断します。
したがって、実際にはポーランド語であると判断し、デフォルトのロケールをポーランド語に設定します(したがって、日付、時刻などをポーランド語用にフォーマットします)。しかし、文字列を読み込もうとすると、何も見つかりません。とは、英語のデフォルトフォルダ(値)から文字列を読み込みます。
ResConfigsを使用することで、apkに必要なロケールのみを含めるようにリソースコンパイラに指示します。そのため、サポートライブラリからいくつかのポーランド語の文字列が削除されます。これで、ローダーがチェックし、ポーランド語の文字列がなく、フランス語になり、すべて問題ありません。
これはあなたの問題を解決するだけでなく、(わずかに)小さいapkをもたらします。
Androidは優先言語を選択しようとします。デフォルトの言語がポーランド語で、ポーランド語の文字列がない場合は、アプリのデフォルト言語である英語が選択されます。
ドキュメントを確認してください: https://developer.Android.com/guide/topics/resources/multilingual-support.html