У меня есть метод в базовом действии, называемый setLanguage (Context context, String language). Он принимает контекст действия и языковую строку, в которой должна выполняться локализация. Проблема в том, что только хинди системы Androidотображаются строки, а не strings.xml (привет).Например, я могу видеть перевод понедельника - सोमवार, но не любых других строк, которые я определил в strings.xml (hi).
public final void setLanguage(Context context, String language) {
Locale locale = new Locale(language);
setLanguage(context, locale);
}
public final void setLanguage(Context context, Locale locale) {
LanguageSetting.setLanguage(activity, locale);
notifyLanguageChanged();
}
public class LanguageSetting {
private static final String PREFERENCE_LANGUAGE = "pref_language";
private static final String KEY_LANGUAGE = "key_language";
private static Locale DEFAULT_LANGUAGE = Locale.ENGLISH;
public static void setDefaultLanguage(Locale locale) {
DEFAULT_LANGUAGE = locale;
}
public static Locale getDefaultLanguage() {
return DEFAULT_LANGUAGE;
}
public static void setLanguage(Context context, Locale locale) {
Locale.setDefault(locale);
SharedPreferences.Editor editor = getLanguagePreference(context).edit();
editor.putString(KEY_LANGUAGE, locale.toString());
editor.apply();
}
public static Locale getLanguage(Context context) {
String[] language = getLanguagePreference(context)
.getString(KEY_LANGUAGE, DEFAULT_LANGUAGE.toString())
.split("_");
Locale locale;
if (language.length == 1) {
locale = new Locale(language[0]);
} else if (language.length == 2) {
locale = new Locale(language[0], language[1].toUpperCase());
} else {
locale = DEFAULT_LANGUAGE;
}
return locale;
}
private static SharedPreferences getLanguagePreference(Context context) {
return context.getSharedPreferences(PREFERENCE_LANGUAGE, Activity.MODE_PRIVATE);
}
}