2014-02-07 113 views
0

这里的这个问题对我来说很有帮助。我从来没有尝试过应用程序的本地化。所以我在这里是全新的。但我仍然面临一些问题。 我有这样的语言列表;Android中的多语言本地化

<string-array name="languages"> 
    <item>English</item> 
    <item>Finnish</item> 
    <item>French</item> 
    <item>German</item> 
    <item>Slovakian</item> 
    <item>Polish</item> 
</string-array> 

我想在应用程序启动时将默认设置为英语。当语言改变时,我希望在整个活动中运行相同的语言。在上面的链接中,方法public void setLocale(String localeCode),在我的情况下,localeCode是什么。这里的区域设置代码是什么,Locale locale = new Locale(localeCode); 。我知道这里可能是Locale.setDefault(Locale.ENGLISH); 。我已经完成了这样的事情,我知道这是废话,因为它不符合我的期望。你能帮我一个正确的道路吗?在此先感谢

public class Base_Activity extends Activity { 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.main, menu); 

    final Spinner spinner = (Spinner) menu.getItem(0).getActionView() 
      .findViewById(R.id.spinner); 

    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
      this, R.array.languages, R.layout.spinner_row); 
    spinner.setAdapter(adapter); 

    spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 

     // private String currentLanguage; 

     @Override 
     public void onItemSelected(AdapterView<?> arg0, View arg1, 
       int arg2, long arg3) { 

      // currentLanguage = spinner.getSelectedItem().toString(); 

      Locale locale = null; 
      switch (arg2) { 
      case 0: 
       locale = new Locale("en_US"); 
       break; 
      case 1: 
       locale = new Locale("fi"); 
       break; 
      case 2: 
       locale = new Locale("fr"); 
       break; 
      case 3: 
       locale = new Locale("de"); 
       break; 
      case 4: 
       locale = new Locale("sk"); 

       break; 
      case 5: 
       locale = new Locale("pl"); 
       break; 

      default: 
       locale = new Locale("en_US"); 
       break; 
      } 
      Locale.setDefault(locale); 
      Configuration config = new Configuration(); 
      config.locale = locale; 
      getBaseContext().getResources().updateConfiguration(config, 
        getBaseContext().getResources().getDisplayMetrics()); 

      startActivity(); 

     } 

     private void startActivity() { 
      overridePendingTransition(0, 0); 
      Log.i("DEBUG", "GATEWAY"); 

     } 

     @Override 
     public void onNothingSelected(AdapterView<?> arg0) { 
      Locale.setDefault(Locale.ENGLISH); 

     } 

    }); 
    return super.onCreateOptionsMenu(menu); 
}} 
+0

尝试通过评论Locale.setDefault(locale);检查以下链接:http://developer.android.com/reference/java/util/Locale.html#setDefault%28java.util.Locale%29 – Rama

+0

@Rama你能否简单地解释一下,不要理解你。 – bShah

+0

希望下面的链接给你答案:http://stackoverflow.com/questions/ 2264874 /更改区域内应用程序本身 – Rama

回答

0

尝试这里面onITemSelectedListener

Locale locale = null ; 

    switch (arg0) { 
    case 0: 
     locale = new Locale("en_US"); 
     break; 
    case 1: 
     locale = new Locale("fi"); 
     break; 
    case 2: 
     locale = new Locale("fr"); 
     break; 
    case 3: 
     locale = new Locale("de"); 
     break; 
    case 4: 
     locale = new Locale("sk"); 

     break; 
    case 5: 
     locale = new Locale("pl"); 
     break; 

    default: 
     locale = new Locale("en_US"); 
     break; 
    } 

    Locale.setDefault(locale); 
    Configuration config = new Configuration(); 
    config.locale = locale; 
    this.getApplicationContext().getResources().updateConfiguration(config, null); 
+0

这对我来说很难理解,c.locale = currentLanguage没有采用,它表示将字符串currentLanguage改为Locale,这是不可能的,请你稍微解释一下。 – bShah

+0

ckeck编辑答案.. – Sonali8890

+0

不应该是开关(arg2),呵呵?? – bShah

0

检查我这样做的方式。 1.您必须为资源文件夹下的不同语言创建不同的“值”文件夹: 即...值 - fr(for france),values-en(for engish) 2.现在将不同语言的字符串数据在“string.xml”中为相关值文件夹

  1. 然后将数据设置为基于本地语言的视图。 当您更改,然后语言刷新你的数据字段如下:

    gameTitle.setString(GameActivity.gameActivity.getResources()的getString(R.string.Jimmy_Jigsaw);

    希望它能帮助你

+0

我有这么多的字符串,你想我为每个字符串做吗?正如你在上面提到的那样。我已经完成了您之前说过的所有操作,例如制作文件夹/res/values-en/strings.xml。当我选择一种语言时,它不会同时刷新。这只是我的问题。 – bShah