首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何用多种语言保存现有语言?

如何用多种语言保存现有语言?
EN

Stack Overflow用户
提问于 2015-04-18 06:34:04
回答 1查看 1.2K关注 0票数 0

我正在做一个多语言的android项目。我做到了,但当我关闭应用程序时,它又回到了默认语言。我在谷歌上搜索了一些关于堆栈溢出的主题。他们说,我必须用SharedPreferences保存当前的语言。我试过了,但没成功。PLz检查我做错了什么。我的代码:

代码语言:javascript
复制
public class setting extends Fragment {

/**
 * @param args
 */
private Spinner spinnerctrl;
private Locale myLocale;
public View onCreateView(LayoutInflater inflater,
        @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    View settingView =  inflater.inflate(R.layout.setting, container, false);
    spinnerctrl = (Spinner) settingView.findViewById(R.id.spinner1);
    spinnerctrl.setOnItemSelectedListener(new OnItemSelectedListener() {

        @Override
        public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
            if (arg2 == 1) {
                Toast.makeText(arg0.getContext(), "You have selected English", Toast.LENGTH_SHORT).show();
                setLocale("en");
            } else if (arg2 == 2) {
                Toast.makeText(arg0.getContext(), "You have selected VietNam", Toast.LENGTH_SHORT).show();
                setLocale("vi");
            }
        }

        private void setLocale(String lang) {
            // TODO Auto-generated method stub
            SharedPreferences prefs = getActivity().getSharedPreferences(
                      "com.example.app", Context.MODE_PRIVATE);
            myLocale = new Locale(lang);
            Resources res = getResources();
            DisplayMetrics dm = res.getDisplayMetrics();
            Configuration conf = res.getConfiguration();
            conf.locale = myLocale;
            res.updateConfiguration(conf, dm);
            Intent refresh = new Intent(getActivity(), MainActivity.class);
            startActivity(refresh);
            String lan = prefs.getString("language", Locale.getDefault().getLanguage() );
            setLocale(lan);
            prefs.edit().putString("language", "en").apply();
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {
            // TODO Auto-generated method stub

        }

    });
    return settingView;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-18 07:04:51

在您的setLocale()中,首先应该存储首选项,然后检索它。你是用相反的方式做的。所以,

代码语言:javascript
复制
prefs.edit().putString("language", "en").apply();

应该先来,然后

代码语言:javascript
复制
String lan = prefs.getString("language", Locale.getDefault().getLanguage() );

更新的职能:

代码语言:javascript
复制
private void setLocale(String lang) {
    /*SharedPreferences prefs = getActivity().getSharedPreferences(
              "com.example.app", Context.MODE_PRIVATE);*/

    SharedPreferences setPrefs = getApplicationContext().getSharedPreferences("com.example.app", MODE_PRIVATE);
    SharedPreferences.Editor editor = setPrefs.edit();
    editor.putString("language", "en");
    editor.commit();

    myLocale = new Locale(lang);
    Resources res = getResources();
    DisplayMetrics dm = res.getDisplayMetrics();
    Configuration conf = res.getConfiguration();
    conf.locale = myLocale;
    res.updateConfiguration(conf, dm);
    Intent refresh = new Intent(getActivity(), MainActivity.class);
    startActivity(refresh);

    /*prefs.edit().putString("language", "en").apply();
    String lan = prefs.getString("language", Locale.getDefault().getLanguage() );
    //setLocale(lan);   //Remove this. It will create infinite loop */

    SharedPreferences getPrefs = getApplicationContext().getSharedPreferences("com.example.app", MODE_PRIVATE);
    String lan = getPrefs.getString("language", "");
    System.out.println("-- locale from getPrefs " + lan);

}

要了解有关SharedPreferences的更多信息,请查看此link

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29713837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档