Use Case: протоколирование сообщений об ошибках, отображаемых пользователю.
Однако вы не хотите, чтобы в вашем журнале были сообщения, зависящие от языкового стандарта пользовательского устройства. С другой стороны, вы не хотите менять язык пользовательского устройства только для вашего (технического) ведения журнала. Может ли это быть достигнуто? Я нашел несколько потенциальных решений здесь в stackoverflow:
- как получить строку из разных локалей в Android?
- Могу ли я получить доступ к ресурсам из разных локальных андроидов?
- android - получить строку из локали по умолчанию, используя строку в определенной локали
- возможно даже android - Изменение локали внутри самого приложения
Однако все они приводят к изменению языка моего устройства (до следующего изменения конфигурации).
Во всяком случае, мое текущее обходное решение выглядит так:
public String getStringInDefaultLocale(int resId) {
Resources currentResources = getResources();
AssetManager assets = currentResources.getAssets();
DisplayMetrics metrics = currentResources.getDisplayMetrics();
Configuration config = new Configuration(
currentResources.getConfiguration());
config.locale = DEFAULT_LOCALE;
/*
* Note: This (temporiarily) changes the devices locale! TODO find a
* better way to get the string in the specific locale
*/
Resources defaultLocaleResources = new Resources(assets, metrics,
config);
String string = defaultLocaleResources.getString(resId);
// Restore device-specific locale
new Resources(assets, metrics, currentResources.getConfiguration());
return string;
}
Честно говоря, мне совсем не нравится этот подход. Это неэффективно и, думая о concurrency и все такое - это может привести к некоторому представлению в "неправильной" локали.
Итак - Любые идеи? Возможно, это можно было бы сделать с помощью ResourceBundle s, как в стандартной Java?