Android - 在应用程序中更改区域设置语言

时间:2016-08-02 18:00:58

标签: android locale setlocale

我的应用程序支持3种语言(英语,法语和阿拉伯语)。我已经翻译了所有的资源(值字符串和drawables文件),并且它根据用户设备中设置的语言完美地工作。

该应用程序主要包含两个活动:mainActivity和Game Activity。 mainActivity包含一个按钮(Play),根据设备语言导致GameActivity。例如,如果语言是英语,它将启动游戏活动,如果f语言是法语,它将启动 GameFr 活动,如果语言是阿拉伯语,它将启动 GameAr < / strong>活动。

var data = [
 { "id" : 1, "label": "USA" },
 { "id" : 2, "label": "Denmark" },
 { "id" : 3, "label": "London" }
];

但是,我想在MainActivity中添加3个ImageView(标志),用户可以通过它更改应用程序的语言,为此我添加了以下内容:

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);
            }
        }
    }
});

尽管如此,如果用户使用该语言设置为英语的设备,请单击法国标志,它将成功进行法语活动。但是,如果他回到上一页并单击按钮(播放),则显示的页面是与英语活动相对应的页面,但资源(字符串值和Drawables)为法语。

这是因为以下功能:

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);
    }
});

始终测试设备的语言,而不是用户在应用中选择的语言。

是否有一个函数可以给我SetLocale函数选择的语言?或者我应该在活动之间使用变量转移?

我该如何解决这个问题,你有更好的建议吗?

1 个答案:

答案 0 :(得分:0)

使用此

 Locale.setDefault("Your Locale");