我在基本活动中有一个名为setLanguage(Context context,String language)的方法,它接受活动的上下文和必须进行本地化的语言字符串。问题是只有android系统的印地语正在显示字符串,而不是strings.xml(hi)。 例如,我能够看到星期一的翻译-सोमवार,但看不到我在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);
}
}
答案 0 :(得分:1)
最后找到了答案。我已经在gradle文件中对语言环境进行了硬编码。
android {
defaultConfig {
...
resConfigs "en"
...
}
}
我只需要删除resConfigs "en"
答案 1 :(得分:0)
我认为此链接可能会为您提供所需的答案。
https://stackoverflow.com/a/2900144/2781626
如果您急于需要这些代码,那么这里是帖子中的代码,您计划在其他时间检查链接以了解更多为什么此代码可能是您的解决方案。我相信您可以保留一些/很多当前代码,但是您可能需要更改其中一些代码才能在应用程序范围内更改语言环境。
`Resources res = context.getResources();
// Change locale settings in the app.
DisplayMetrics dm = res.getDisplayMetrics();
android.content.res.Configuration conf = res.getConfiguration();
conf.setLocale(new Locale(language_code.toLowerCase())); // API 17+ only.
// Use conf.locale = new Locale(...) if targeting lower versions
res.updateConfiguration(conf, dm);`