Страницы

Поиск по вопросам

пятница, 20 декабря 2019 г.

Android / Использовать plural-правила русского, когда на телефоне установлен другой язык

#android #локализация #locale


В приложении используется только русская локализация. Все строки лежат в values/strings.xml
В том числе вот такой plural:


    Остался %d день
    Осталось %d дня
    Осталось %d дней



Если на телефоне установить, например, английский язык, то правила множественного
числа для русского языка не применяются и используются те, что присущи установленному
языку. Конкретно в данном случае, не работает few, и для 2, 3, 4 подставляется выражение
из many: Осталось 2 дней

Возможно ли принудительно использовать требуемую локаль, для правил множественного
числа? Как, например, это сделано в String.format(Locale l, String format, Object... args)
    


Ответы

Ответ 1



Начиная с Api 17 вы можете получить ресурсы для конкретной локали: @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) public Resources getResourcesByLocale() { Configuration configuration = new Configuration(getResources().getConfiguration()); configuration.setLocale(new Locale("ru")); return createConfigurationContext(configuration).getResources(); } И соответственно потом из этих локализованных ресурсов вытаскивать plurals: for (int i = 1; i < 10; i++) { String daysLeft = getResourcesByLocale().getQuantityString(R.plurals.days_left, i, i); Log.i("Plurals", daysLeft); }

Ответ 2



Попробуйте установить локаль принудительно на русскую на уровне приложения как-то так: public class MyApplication extends Application { @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); newConfig.locale = new Locale("ru"); Locale.setDefault(new Locale("ru")); getBaseContext().getResources().updateConfiguration(newConfig, getBaseContext().getResources().getDisplayMetrics()); } @Override public void onCreate() { super.onCreate(); Locale.setDefault(new Locale("ru")); config.locale = new Locale("ru"); getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics()); } }

Комментариев нет:

Отправить комментарий