我正在开发仅包含捷克语内容的应用程序。如果我正确理解Android文档,则每个Android应用的默认语言均为英语。但这对我不起作用,因为我使用的是捷克语中具有不同语法规则的数量字符串,因此复数不能正常工作。我需要一种方法来强制将默认字符串资源的语言环境设置为cs
进行修复。我知道我可以为捷克语言环境创建一个新的资源XML并在那里覆盖字符串,但是我想解决这个问题,因为那样我将在两个不同的资源文件中使用相同的字符串。 (这也会使复数形式在非捷克的设备上再次破损。)
谢谢您的建议。
答案 0 :(得分:0)
// Change locale settings in the app.
public static void setLocale(Context context, String languageCode) {
Resources resources = context.getResources();
DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
android.content.res.Configuration configuration = resources.getConfiguration();
configuration.locale = new Locale(languageCode.toLowerCase());
resources.updateConfiguration(configuration, displayMetrics);
}
在任何地方调用该方法,例如:
setLocale(this, ENGLISH_CODE);
答案 1 :(得分:0)
我终于找到了解决方案,尽管它更像是一种解决方法。我在每个活动中使用了gunhansancarʼs LocaleHelper的一部分并覆盖了attachBaseContext()
方法:
public class LocaleHelper {
public static Context onAttach(Context context, String lang) {
return setLocale(context, lang);
}
private static Context setLocale(Context context, String language) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
return updateResources(context, language);
}
return updateResourcesLegacy(context, language);
}
@TargetApi(Build.VERSION_CODES.N)
private static Context updateResources(Context context, String language) {
Locale locale = new Locale(language);
Locale.setDefault(locale);
Configuration configuration = context.getResources().getConfiguration();
configuration.setLocale(locale);
configuration.setLayoutDirection(locale);
return context.createConfigurationContext(configuration);
}
@SuppressWarnings("deprecation")
private static Context updateResourcesLegacy(Context context, String language) {
Locale locale = new Locale(language);
Locale.setDefault(locale);
Resources resources = context.getResources();
Configuration configuration = resources.getConfiguration();
configuration.locale = locale;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
configuration.setLayoutDirection(locale);
}
resources.updateConfiguration(configuration, resources.getDisplayMetrics());
return context;
}
}
public class MyActivity extends Activity {
@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(LocaleHelper.onAttach(newBase, "cs"));
}
}
现在,我所有的捷克字符串和复数形式都保存在默认的strings.xml
文件中,即使在非捷克设备上,复数形式也能正常工作。