Przypadek użycia: rejestrowanie komunikatów o błędach wyświetlanych użytkownikowi.Android: jak uzyskać ciąg znaków w określonych lokalizacjach BEZ zmiany bieżących ustawień narodowych
Jednak nie chcesz, aby w dzienniku były wiadomości zależne od ustawień regionalnych urządzenia użytkownika. Z drugiej strony nie chcesz zmieniać ustawień narodowych urządzenia użytkownika tylko dla twojego (technicznego) logowania. Czy można to osiągnąć? znalazłem kilka możliwych rozwiązań tutaj na stackoverflow:
- how to get string from different locales in Android?
- Can I access to resources from different locale android?
- android - Get string from default locale using string in specific locale
- może nawet android - Changing Locale within the app itself
one jednak wszystkie powodują zmianę ustawień regionalnych mój urządzenie (do następnej zmiany konfiguracji).
W każdym razie, mój obecny obejście jest tak:
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, nie podoba mi się takie podejście w ogóle. To nie jest wydajne i - myśląc o współbieżności i tak dalej - może to spowodować pewien widok w "złym" locale.
Tak - Jakieś pomysły? Może to można osiągnąć przy użyciu ResourceBundle s, tak jak w standardowej Java?
Cześć, czy masz jakieś rozwiązanie? Też mam prawie taki sam przypadek użycia. – Nitish
Nie, nadal używam obejścia określonego w pytaniu – schnatterer
, dlaczego nie używasz konkretnego łańcucha znaków w języku angielskim do celów rejestrowania. R.string.dev_error_clicking_button_b. Jeśli nie przetłumaczysz go na inne języki (i nie będzie to konieczne), otrzymasz je domyślnie. –