У меня есть многоязычное приложение с основным языком на английском и арабском языках.
Как описано в документации,
- Я добавил
android:supportsRtl="true"
в манифест. - Я изменил все свойства xml с атрибутами
left
иright
наstart
иend
соответственно. - Я добавил строки арабского языка в
strings-ar
(и аналогично для других ресурсов).
Вышеуказанная настройка работает правильно. После изменения Locale
на ar-AE
, арабский текст и ресурсы отображаются правильно в моих действиях.
Однако каждый раз, когда я перехожу к
Activity
сWebView
и/или aWebViewClient
, язык локали, текста и макета внезапно вернитесь к устройству по умолчанию.
Дополнительные советы:
- Это происходит только на Nexus 6P с Android 7.0. Все работает правильно на Android 6.0.1 и ниже.
- Резкий сдвиг в локали происходит только, когда я перехожу к
Activity
, который имеетWebView
и/или aWebViewClient
(и у меня их несколько). Это не происходит ни в одной из других Деяний.
Android 7.0 поддерживает многоязычность, позволяя пользователю устанавливать более одного стандарта по умолчанию. Поэтому, если я устанавливаю основной язык в Locale.UK
:
Затем при переходе к
WebView
, локаль изменяется сar-AE
доen-GB
.
Изменения API Android 7.0:
Как указано в списке изменений API, новые методы, относящиеся к языку, были добавлены к следующим классам в API 24:
Locale
:
Configuration
:
Однако я создаю свое приложение с API 23, и я не использую ни один из эти новые методы.
Кроме того...
-
Проблема возникает и на эмуляторе Nexus 6P.
-
Чтобы получить стандартную локаль, я использую
Locale.getDefault()
. -
Чтобы установить языковой стандарт по умолчанию, я использую следующий код:
public static void setLocale(Locale locale){ Locale.setDefault(locale); Configuration config = new Configuration(); config.setLocale(locale); Context context = MyApplication.getInstance(); context.getResources().updateConfiguration(config, context.getResources().getDisplayMetrics()); }
Кто-нибудь сталкивался с этой проблемой раньше? В чем причина этого и как мне это решить?
Литература:
1. Встроенная поддержка RTL в Android 4.2.