Android: как получить строку в определенной локали БЕЗ изменения текущей локали
Вариант использования: регистрация сообщений об ошибках, отображаемых для пользователя.
Однако вы не хотите, чтобы в вашем журнале были сообщения, зависящие от локали устройства пользователя. С другой стороны, вы не хотите менять локаль устройства пользователя только для вашей (технической) регистрации. Можно ли этого достичь? Я нашел несколько потенциальных решений здесь на stackoverflow:
как получить строку из разных локалей в Android?Могу ли я получить доступ к ресурсам из разных локалей 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;
}
Если честно, мне не нравится такой подход вообще. Это не эффективно и - думая о параллелизме и всем этом - это может привести к некоторому взгляду на «неправильный» язык
Итак - есть идеи? Может быть, это может быть достигнуто с помощьюResourceBundleс, как в стандартной Java?