【发布时间】:2012-10-06 04:11:22
【问题描述】:
我希望我的应用支持西班牙语、葡萄牙语和英语三种语言。并提供在应用程序中选择语言的选项。我已经做了
1) 3个可绘制文件夹drawable-es、drawable-pt、drawable。
2) 3个值文件夹values-es,values-pt,values.根据语言改变String.xml值。
我有 imageView 来选择语言。单击它时打开菜单,其中包含选项英语、西班牙语、葡萄牙语。
我在应用程序内通过此代码选择选项时设置区域设置
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.en:
Locale locale = new Locale("en");
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
Toast.makeText(this, "Locale in English !", Toast.LENGTH_LONG).show();
break;
case R.id.pt:
Locale locale2 = new Locale("pt");
Locale.setDefault(locale2);
Configuration config2 = new Configuration();
config2.locale = locale2;
getBaseContext().getResources().updateConfiguration(config2, getBaseContext().getResources().getDisplayMetrics());
Toast.makeText(this, "Locale in Portugal !", Toast.LENGTH_LONG).show();
break;
case R.id.es:
Locale locale3 = new Locale("es");
Locale.setDefault(locale3);
Configuration config3 = new Configuration();
config3.locale = locale3;
getBaseContext().getResources().updateConfiguration(config3, getBaseContext().getResources().getDisplayMetrics());
Toast.makeText(this, "Locale in Spain !", Toast.LENGTH_LONG).show();
break;
}
return super.onOptionsItemSelected(item);
}
我已在 Manifest 中声明- android:configChanges="locale"
它工作,但它有一些问题。
问题:-
1)选中语言时,由语言选择的图像的屏幕不会改变,但其他屏幕是更改的。
2)根据手机的语言环境改变方向后应用恢复语言。
【问题讨论】:
-
对于第二个问题,请尝试在 AndroidManifest.xml 中为您的 Activity 添加:
android:configChanges="locale" -
我已经在我的清单中添加了每个活动。
-
您可以使用以下库,它提供语言列表、设置屏幕的首选项并覆盖应用程序中的语言:github.com/delight-im/Android-Languages
标签: android localization