Android - 在应用程序本身内更改区域设置语言
Android - Changing Locale language within the app itself
我的应用程序支持 3 种语言(英语、法语和阿拉伯语)。我已经翻译了所有资源(值字符串和可绘制文件),它根据用户设备中设置的语言完美运行。
该应用程序主要由两个活动组成:主要Activity 和游戏Activity。 mainActivity 包含一个按钮(播放),它根据设备语言引导至 GameActivity。例如,如果语言是英语,它将启动 Game Activity,如果语言是法语,它将启动 GameFr Activity ,如果语言是阿拉伯语,它将启动 GameAr Activity.
Play.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if (Locale.getDefault().getLanguage().equals("ar")){
Intent intgame=new Intent(MainActivity.this,GameAr.class);
startActivity(intgame);
}
else {
if (Locale.getDefault().getLanguage().equals("fr")){
Intent intgame=new Intent(MainActivity.this,GameFr.class);
startActivity(intgame);
}
else {
Intent intgame=new Intent(MainActivity.this,Game.class);
startActivity(intgame);
}
}
}
});
但是,我想在 MainActivity 中添加 3 个 ImageView(标志),用户可以通过它们更改应用程序的语言,为此我添加了以下内容:
en = (ImageView) findViewById(R.id.en);
fr = (ImageView) findViewById(R.id.fr);
ar = (ImageView) findViewById(R.id.ar);
en.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setLocale("en");
Intent uo = new Intent(MainActivity.this,Game.class);
startActivity(uo);
}
});
fr.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setLocale("fr");
Intent uo = new Intent(MainActivity.this,GameFr.class);
startActivity(uo);
}
});
ar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setLocale("ar");
Intent uo = new Intent(MainActivity.this,GameAr.class);
startActivity(uo);
}
});
然而,当用户将语言设置为英语的设备单击法国国旗时,它将成功获得法语 activity。但是,如果他返回到上一页并单击按钮(播放),则显示的页面是对应于英语 activity 但具有法语资源(字符串值和 Drawables)的页面。
这是因为以下函数:
if (Locale.getDefault().getLanguage().equals("ar"))
始终测试设备的语言,而不是用户在应用中选择的语言。
有没有函数可以给我 SetLocale 函数选择的语言?或者我应该在活动之间使用变量转移?
我该如何解决这个问题,你有更好的建议吗?
使用这个
Locale.setDefault("Your Locale");
我的应用程序支持 3 种语言(英语、法语和阿拉伯语)。我已经翻译了所有资源(值字符串和可绘制文件),它根据用户设备中设置的语言完美运行。
该应用程序主要由两个活动组成:主要Activity 和游戏Activity。 mainActivity 包含一个按钮(播放),它根据设备语言引导至 GameActivity。例如,如果语言是英语,它将启动 Game Activity,如果语言是法语,它将启动 GameFr Activity ,如果语言是阿拉伯语,它将启动 GameAr Activity.
Play.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if (Locale.getDefault().getLanguage().equals("ar")){
Intent intgame=new Intent(MainActivity.this,GameAr.class);
startActivity(intgame);
}
else {
if (Locale.getDefault().getLanguage().equals("fr")){
Intent intgame=new Intent(MainActivity.this,GameFr.class);
startActivity(intgame);
}
else {
Intent intgame=new Intent(MainActivity.this,Game.class);
startActivity(intgame);
}
}
}
});
但是,我想在 MainActivity 中添加 3 个 ImageView(标志),用户可以通过它们更改应用程序的语言,为此我添加了以下内容:
en = (ImageView) findViewById(R.id.en);
fr = (ImageView) findViewById(R.id.fr);
ar = (ImageView) findViewById(R.id.ar);
en.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setLocale("en");
Intent uo = new Intent(MainActivity.this,Game.class);
startActivity(uo);
}
});
fr.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setLocale("fr");
Intent uo = new Intent(MainActivity.this,GameFr.class);
startActivity(uo);
}
});
ar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setLocale("ar");
Intent uo = new Intent(MainActivity.this,GameAr.class);
startActivity(uo);
}
});
然而,当用户将语言设置为英语的设备单击法国国旗时,它将成功获得法语 activity。但是,如果他返回到上一页并单击按钮(播放),则显示的页面是对应于英语 activity 但具有法语资源(字符串值和 Drawables)的页面。
这是因为以下函数:
if (Locale.getDefault().getLanguage().equals("ar"))
始终测试设备的语言,而不是用户在应用中选择的语言。
有没有函数可以给我 SetLocale 函数选择的语言?或者我应该在活动之间使用变量转移?
我该如何解决这个问题,你有更好的建议吗?
使用这个
Locale.setDefault("Your Locale");