Android: Jak uzyskać ciąg w określonym locale BEZ zmiany bieżących ustawień regionalnych
Przypadek użycia: rejestrowanie komunikatów o błędach wyświetlanych użytkownikowi.
Jednak nie chcesz, aby wiadomości w dzienniku zależały od ustawień regionalnych urządzenia użytkownika. Z drugiej strony nie chcesz zmieniać lokalizacji urządzenia użytkownika tylko dla swojego logowania (technicznego). Czy można to osiągnąć? Znalazłem kilka potencjalnych rozwiązań tutaj na stackoverflow:
jak uzyskać ciąg z różnych lokalizacji w Androidzie?Czy mogę uzyskać dostęp do zasobów z różnych lokalnych wersji Androida?android - Uzyskaj ciąg z domyślnych ustawień narodowych za pomocą łańcucha w określonych ustawieniach regionalnychmoże nawetandroid - Zmiana ustawień regionalnych w samej aplikacjiJednak wszystkie one powodują zmianę ustawień regionalnych mojego urządzenia (do następnej zmiany konfiguracji).
W każdym razie moje obecne obejście jest takie:
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;
}
Szczerze mówiąc, wcale nie podoba mi się to podejście. To nie jest wydajne i - myśląc o współbieżności i tym podobnych - może powodować pewne widoki w „niewłaściwych” lokalizacjach.
Więc - jakieś pomysły? Być może można to osiągnąć za pomocąResourceBundles, tak jak w standardowej Javie?