面对我的应用程序中的多语言设置问题?

时间:2012-02-01 13:07:17

标签: android locale android-menu

在我的应用程序中,我想创建一个设置,用户可以根据自己的选择更改语言。为此,我为每种语言创建了相应的值文件夹和字符串文件。我的代码片段如下:

public class MultiLanguage extends Activity implements OnClickListener {

    private Button germany, english, french;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.language);

        english = (Button) findViewById(R.id.english);
        english.setOnClickListener(this);

        germany = (Button) findViewById(R.id.germany);
        germany.setOnClickListener(this);

        french = (Button) findViewById(R.id.french);
        french.setOnClickListener(this);

    }

    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.english:
            setLocale("en");
            break;

        case R.id.germany:
            setLocale("de");
            break;

        case R.id.french:
            setLocale("fr");
            break;
        }
    }
    public void setLocale(String localStr) {

        Locale localeLang = new Locale(localStr);
        Locale.setDefault(localeLang);
        Configuration config = new Configuration();
        config.locale = localeLang;
        getBaseContext().getResources().updateConfiguration(config,
                getBaseContext().getResources().getDisplayMetrics());
        finish();
        Intent refreshActivity = new Intent(this, Home.class);
        refreshActivity.setAction(Intent.ACTION_CONFIGURATION_CHANGED);
        startActivity(refreshActivity);
    }

}

每当我从应用程序中退出并再次启动应用程序时,选择的语言就会变为英语。我没有找到这个问题的根源。

在清单文件中,我还提到了以下一行:

android:configChanges="locale"

任何人都可以纠正我在这里犯的错误。

3 个答案:

答案 0 :(得分:4)

问题是您不能在程序启动之间保存语言。使用preferences保留它并在onCreate中阅读。

答案 1 :(得分:1)

你真的试图重新发明轮子吗?

为什么不使用用户在手机上选择的默认语言环境?这是Android生态系统中的首选方式。

您唯一需要做的就是提供资源文件的多个版本(每个所需的区域设置一个)(例如values/strings.xml)。如果在您的应用程序资源中找不到用户的区域设置,则默认为values/strings.xml。否则它将使用values-[locale]/strings.xml

更多详情:http://developer.android.com/guide/topics/resources/localization.html

答案 2 :(得分:1)

问题在于您的流程完成了您的活动,然后有意图开始新的活动,所以这样做:

    Intent refreshActivity = new Intent(this, Home.class);
    refreshActivity.setAction(Intent.ACTION_CONFIGURATION_CHANGED);
    startActivity(refreshActivity);
    finish();