2011-03-18 58 views
5

我必須用3種語言製作Android應用程序,例如德語,英語和荷蘭語。我已經在res目錄中的Android應用程序名稱values-devalues-nl中創建了三個文件夾。 現在當用戶選擇一個特定的語言,我執行以下代碼:多語言android應用程序?

Resources res = getResources(); 
Configuration newConfig = new Configuration(res.getConfiguration()); 
newConfig.locale = Locale.ENGLISH; 
res.updateConfiguration(newConfig, null); 

都在不同價值觀的文件夾名稱相同的字符串,即與中值的文件夾名稱add_site一個字符串有相同的名稱the values-de文件夾但具有不同的值。 當我將語言環境設置爲德語時,我的應用程序未加載德語值?可能是什麼問題呢?

謝謝你的幫助。

+0

我的理解是locales是根據系統偏好由Android自動處理的。是否有任何理由需要用戶能夠從您的應用程序中設置區域設置? – KPthunder 2011-03-18 06:02:40

+0

是的。這是因爲只是爲了查看我的應用程序,用戶將不得不改變系統配置,這將導致所有應用程序被設置爲該語言....我認爲這是不必要的。雖然現在當我改變系統配置代碼工作正常,這意味着德國文本正在顯示時,我已經設置系統區域設置爲德國...我想實現從應用程序內相同 – user590849 2011-03-18 06:07:33

+0

在某種程度上,這是一個作爲一個功能不錯的想法,但請記住,它是針對Android上的所有其他應用程序(包括股票應用程序)如何工作。它們都會自動檢測您的區域設置,並在無需用戶干預的情況下即時加載正確的資源。除非有很好的理由,否則我不會打破這種默認行爲。 – 2011-03-18 15:38:03

回答

5

嘗試把這個在onCreate()剛,來電後super.onCreate

Locale locale = new Locale("de"); 
Locale.setDefault(locale); 
Configuration config = new Configuration(); 
config.locale = locale; 
getBaseContext().getResources().updateConfiguration(config, 
     getBaseContext().getResources().getDisplayMetrics()); 

編輯:Here's another approach。它似乎非常靈活,但在評論中似乎存在一些分歧,它是否適用於所有Android版本。

+0

我只想在用戶需要時更改區域設置。即有一個languages.java文件,通過複選框,我讓用戶選擇語言,並有另一個活動sitelisting.java我想看到的變化.... – user590849 2011-03-18 06:19:16

0

如果您還支持具有不同佈局方向LTR或RTL的語言,那麼設置配置語言環境是不夠的。

 Resources res = getResources(); 
     Configuration newConfig = new Configuration(res.getConfiguration()); 
     Locale locale = new Locale(appLanguage); 
     newConfig.locale = locale; 
     newConfig.setLayoutDirection(locale); 
     res.updateConfiguration(newConfig, null);