4

Согласно документации в Language and Locale произошли улучшения в ресурсо-Resolution стратегии от Android 7.0 (уровень API 24), который легко понять со следующей таблицей: Improved Resource-Resolution strategyAndroid 7,0 Нуга подхватывает строки по умолчанию, когда язык устройства en_US

Согласно моим требованиям, я хочу, чтобы langauge по умолчанию для моего приложения был en_US. Итак, я не предоставляю отдельные ресурсы для en_US. У меня также есть ресурсы en_GB, представленные отдельно.

Теперь, согласно стратегии разрешения, если язык моего устройства является en_US, тогда порядок, в котором он должен искать ресурсы, - en_US -> en -> en_GB -> default, что означает для всех локалей en, в моем случае en_GB будет выбран, так как у меня нет ресурса «en» отдельно, но присутствует дочерний элемент en_GB.

Но, когда я выбираю свой язык устройства en_US, он правильно выбирает язык по умолчанию (en_US в моем случае), а не en_GB, что именно то, что мне нужно, если язык устройства является en_US. Когда выбран какой-либо другой язык, например en_IN или en_AU, он захватывает en_GB.

Один из способов решения этого вопроса заключается в том, что я предоставляю en_US строки в 'en' и en_GB отдельно, что приведет к моему желаемому поведению. Но я не могу понять, почему строки по умолчанию собираются, когда я выбираю en_US в качестве языка устройства.

Это en_US - это язык по умолчанию для Android, и когда en_US выбран как язык устройства, он выбирает строки по умолчанию, если en_US не предоставляется отдельно?

+0

Кажется, что все еще происходит. Я думал, что это специфично для en_CA. Это похоже на ошибку платформы. Вы случайно открыли ошибку с Android? Смотрите нашу дискуссию здесь: [Локализация для Канады по умолчанию в Великобритании; должен по умолчанию использоваться по умолчанию] (https://stackoverflow.com/q/45511769/1306419) –

+0

Я создал отчет об ошибке здесь: issuetracker.google.com/issues/64429534. Не стесняйтесь предлагать изменения, чтобы улучшить его, или комментировать/ставить его так, чтобы его можно было посмотреть. Благодарю. –

ответ

0

У меня была та же проблема. После открытия отчета об ошибке в Google Incorrect resource resolution strategy above Android N, defaulting to en_GB and not default strings.xml, они упомянули об этом в предполагаемом поведении для Android N выше. Я цитирую свой ответ здесь:

Начиная с N, все английские локали (для территории США, как Пуэрто-Рико и Американское Самоа и США, за исключением) попадают обратно в какой-то международный английский вариант, если такая локаль доступна.

Итак, для en-CA мы сначала попробуем эти локали, прежде чем возвращаться на en-GB (который считается представителем международного английского языка, если нет лучшего международного английского языка): en-rCA (Canadian English) , b + en + 001 (международный английский), en (английский). Если вы не хотите, чтобы строки en-GB собирались для en-CA, вы должны поместить ресурсы в один из этих трех каталогов, поскольку они будут считаться лучшим совпадением для en-CA.

Таким образом, это наш en_UK считается «представителем международного английского». Строки вернутся к «International English» или ее представителю до en.