如何在android中不同语言字符串资源文件夹之间切实切换?

时间:2013-11-16 13:05:10

标签: java android xml string resources

我很惊讶地发现在任何地方都没有提到这一点。

这是问题所在: 我有一个教程应用程序和我得到的大多数“1星”是由于抱怨我的应用程序不是他们的本地语言。 由于我不可能学习十几种语言,所以我决定至少可以使用谷歌翻译并提供更多资源。

由于翻译不完美,我想让用户选择切换回默认(英文)版本。

我希望如何做到这一点:

说我有以下文件夹:

值,值-fr,值-ja,值-sp

我想简单地在我的设置活动中添加一个旋转,让用户选择语言。因此,我可能会获得一个SharedPref变量,永久存储它并通过设置轻松更改它。

假设我将一个int值存储为sharedpref。如果它是(例子)0,我想要使用英文字符串......如果它是1,我想使用法语等等。

那么,我怎样才能实际更改values文件夹。 (我知道默认情况下,andorid会选择-fr,-ja,-en,具体取决于第一次设备启动时设置的区域设置。但我希望用户可以选择返回默认值,因为(再次)翻译可能不完美

2 个答案:

答案 0 :(得分:3)

试试这个..

    String languageToLoad  = "en"; // your language
    Locale locale = new Locale(languageToLoad); 
    Locale.setDefault(locale);
    Configuration config = new Configuration();
    config.locale = locale;
    getBaseContext().getResources().updateConfiguration(config, 
    getBaseContext().getResources().getDisplayMetrics());

答案 1 :(得分:2)

之前我已经做过,但是作为一个复选框而不是微调器,希望它能帮到你这里做的事情:

首先在用户触摸按钮时显示警告消息:

Button btn2 = (Button) findViewById(R.id.button2); //here is your button
    btn2.setOnClickListener(new OnClickListener() {
        public void onClick(View arg0) {
              final CharSequence[] items = {"العربية", "English", "français", "русский", "中国", "اردو", "Indonesia"};//here you write your supported languages 
              AlertDialog.Builder builder = new AlertDialog.Builder(Main.this);//here the alert dailog that will show up when button touched
              builder.setTitle(getResources().getString(R.string.language)); 
              builder.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() { 
                  public void onClick(DialogInterface dialog, int item) {
                      i=item;
                      if(items[i] == "العربية"){
                          setLocale("ar");
                      }if(items[i] == "English"){
                          setLocale("en");
                      }if(items[i] == "français"){
                          setLocale("fr");
                      }if(items[i] == "русский"){
                          setLocale("ru");
                      }if(items[i] == "中国"){
                          setLocale("zh");
                      }if(items[i] == "اردو"){
                          setLocale("ur");
                      }if(items[i] == "Indonesia"){
                          setLocale("in");
                      }
                  } 
              }); 
              AlertDialog alert = builder.create(); 
              alert.show(); 
              alert.setCanceledOnTouchOutside(true);
          }});  
}

现在是语言选择器子类:

public void setLocale(String lang) {

    Locale 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(this, Main.class);
    refresh.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(refresh);
}

现在关于添加包含实际语言(ar,en,ru ...等)的语言文件夹,我将为您提供本教程https://www.youtube.com/watch?v=WugUIEJ_lvk 最后翻译使用谷歌翻译:)如果你有现金,我可以与翻译公司联系,或者你可以在开发者页面使用谷歌服务。

如果你需要什么,请问我......