2012-05-22 128 views
2

我有3個按鈕來更改語言。所以我需要製作方法,在那裏我可以設置聽衆按鈕,每次按下它們都可以改變語言。 我試過這個https://stackoverflow.com/a/2900144/1088229,但這樣它只改變一次locale,似乎這不再工作(如果我再次點擊,它甚至沒有響應)。所以我在偵聽器的末尾添加了changeLanguageListener(),因此偵聽器被刷新。Android:以編程方式更改語言

那麼,它是好的,我如何解決它或有另一種方式?

private void changeLanguageListener() { 
    final Button butEn = (Button) findViewById(R.id.button_language_en); 
    final Button butLt = (Button) findViewById(R.id.button_language_lt); 
    final Button butRu = (Button) findViewById(R.id.button_language_ru); 
    OnClickListener listener = new OnClickListener() { 

     public void onClick(View v) { 
      Button but = (Button) v; 
      Resources res = getResources(); 
      String current = res.getConfiguration().locale.getCountry(); 
      Log.i("Current", current); 
      String localeString = new String(current); 
      if (but.equals(butEn)) { 
       localeString = "en"; 
      } else if (but.equals(butLt)) { 
       localeString = "lt"; 
      } else if (but.equals(butRu)) { 
       localeString = "ru"; 
      } 
      Log.i("Clicked", localeString); 

      if (!current.equalsIgnoreCase(localeString) && localeString.length() > 0) { 
       // Change locale settings in the app. 
       DisplayMetrics dm = res.getDisplayMetrics(); 
       android.content.res.Configuration conf = res.getConfiguration(); 
       conf.locale = new Locale(localeString.toLowerCase()); 
       res.updateConfiguration(conf, dm); 
       //refresh menu 
       setGridView(); 
       //added this line to get refreshed listener 
       changeLanguageListener(); 
      }    
     } 
    }; 
    butEn.setOnClickListener(listener); 
    butLt.setOnClickListener(listener); 
    butRu.setOnClickListener(listener); 
} 

回答

2

如此,因爲只有兩個活動(兩種菜單模式),在那裏我讓改變語言環境,我只是重新啓動活動區域設置更改後的權利,所以一切都刷新了。沒有發現任何其他更好的解決方案

1

我不會建議在您的應用程序中更改語言。更好的解決方案是打開系統區域設置的按鈕。你可以使用下面的意圖。

startActivityForResult(new Intent(android.provider.Settings.ACTION_LOCALE, 0); 

有關區域設置的詳細信息: http://developer.android.com/reference/android/provider/Settings.html#ACTION_LOCALE_SETTINGS

+0

的主要原因編程方式更改位置是語言包裝沒有我需要的語言。例如,我的手機有波羅的語言包,所以它有很多語言,包括立陶宛語(我的),英語,但沒有俄語(我們也需要它)。 –

+2

@Moss:_「我不會推薦改變你的應用程序中的語言」_爲什麼不呢?有許多應用程序可以更改語言以幫助最終用戶的實例。例如,一個顯示遊客語言的急救應用程序讓他們瞭解醫務人員在外國受傷時接受治療的指示。 – ChuongPham

+1

@ChuongPham:您的案例的確是一個很好的例子,說明應用程序內更改的真正用處和必要性。但在一般情況下,我更喜歡使用系統來處理應用程序的語言。 – Moss

2
Resources res = context.getResources(); 
// Change locale settings in the app. 

DisplayMetrics dm = res.getDisplayMetrics(); 

android.content.res.Configuration conf = res.getConfiguration(); 

conf.locale = new Locale(language_code.toLowerCase()); 
res.updateConfiguration(conf, dm); 

如果你有語言的具體內容 - 你可以改變的設置,底座##打頭##

+4

爲什麼這段代碼被複制粘貼? http://stackoverflow.com/a/2900144/3736955 –

相關問題