#android #локализация #locale
В приложении используется только русская локализация. Все строки лежат в values/strings.xml В том числе вот такой plural:Если на телефоне установить, например, английский язык, то правила множественного числа для русского языка не применяются и используются те, что присущи установленному языку. Конкретно в данном случае, не работает few, и для 2, 3, 4 подставляется выражение из many: Осталось 2 дней Возможно ли принудительно использовать требуемую локаль, для правил множественного числа? Как, например, это сделано в String.format(Locale l, String format, Object... args) - Остался %d день
- Осталось %d дня
- Осталось %d дней
Ответы
Ответ 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()); } }
Комментариев нет:
Отправить комментарий