android - 无法为给定的语言环境找到正确的 strings.xml
问题描述
我在我的 android 应用程序中支持印地语语言环境。为此,我在新的 values-hi 文件夹中添加了 strings.xml。
在此之后,我从我的应用程序中的一个单独的活动中将我的 resource.configuration.locale 设置为“hi”。
当我调试将任何字符串设置为视图的位置时,我发现语言环境已设置为 "hi" ,但在评估时
getString(R.string.title)
它从位于 values 文件夹中的默认 strings.xml 文件返回默认值。
请帮我解决这个问题。
我正在添加用于设置语言环境的语言环境管理器,
public class LocaleManager {
public static final String LANGUAGE_ENGLISH = "en";
private static final String LANGUAGE_KEY = "language_key";
private final SharedPreferences prefs;
public LocaleManager(Context context) {
prefs = PreferenceManager.getDefaultSharedPreferences(context);
}
public Context setLocale(Context c) {
return updateResources(c, getLanguage());
}
public Context setNewLocale(Context c, String language) {
persistLanguage(language);
return updateResources(c, language);
}
public String getLanguage() {
return prefs.getString(LANGUAGE_KEY, LANGUAGE_ENGLISH);
}
@SuppressLint("ApplySharedPref")
private void persistLanguage(String language) {
// use commit() instead of apply(), because sometimes we kill the application process immediately
// which will prevent apply() to finish
prefs.edit().putString(LANGUAGE_KEY, language).commit();
}
private Context updateResources(Context context, String language) {
Locale locale = new Locale(language);
Locale.setDefault(locale);
Resources res = context.getResources();
Configuration config = new Configuration(res.getConfiguration());
if (Utility.isAtLeastVersion(JELLY_BEAN_MR1)) {
config.setLocale(locale);
context = context.createConfigurationContext(config);
} else {
config.locale = locale;
res.updateConfiguration(config, res.getDisplayMetrics());
}
return context;
}
public static Locale getLocale(Resources res) {
Configuration config = res.getConfiguration();
return Utility.isAtLeastVersion(N) ? config.getLocales().get(0) : config.locale;
}
}`
我还在 Application.java 和 BaseActivity.java 中添加了以下几行
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(TBApplication.localeManager.setLocale(base));
Log.d(TAG, "attachBaseContext");
}
解决方案
推荐阅读
- python - 如何从 Google 图书中获取流派列表?
- swift - NSTableView.reloadData(forRowIndexes: rowIndex, columnIndexes: columnIndex) 不会导致单元格更新
- selenium - 在硒弹出 iframe 中找不到元素错误
- azure - 如何以编程方式更新 Azure AD B2C 中的用户属性?
- javascript - 让编译器将字符串作为变量读取
- machine-learning - 如何将 oneHotEncoder 定义到 Titanic 数据集
- ios - Stripe STPCustomerDeserializer 无法解析客户 Swift
- react-native - expo / react Native 和 SECRET API KEYS
- multithreading - pool.apply 工作但 pool.apply_async 与 get() 不工作
- java - 日志被 AWS Http 调用淹没