web-dev-qa-db-ja.com

Androidアプリは、設定の言語設定の順序に関係なく、デフォルトの言語を選択します

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>
13
Jacek Milewski

解決策は、Android.defaultConfigapp/build.gradleresConfigsを追加して、正確なロケールリスト(アプリにあるもの)を含めることです。

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をもたらします。

12
Mihai Nita

Androidは優先言語を選択しようとします。デフォルトの言語がポーランド語で、ポーランド語の文字列がない場合は、アプリのデフォルト言語である英語が選択されます。

ドキュメントを確認してください: https://developer.Android.com/guide/topics/resources/multilingual-support.html

0
diegoveloper