2012-12-04 43 views
2

是否有可能在運行時使用從服務接收到的XML來翻譯android應用程序? 如果有可能的話請指點我正確的方向。從外部的XML本地化XML

謝謝。

+0

我相當肯定答案是否定的。原因是「自動」語言選擇依賴於作爲資源一部分的不同本地化「字符串」文件。在運行時更新資源文件是不可能的。 – Squonk

+0

@Squonk除非我想明白,那是不正確的。我只是在我的應用程序中做到了。有一個屏幕可以選擇西班牙語或英語,並允許用戶根據選擇更改使用哪個字符串文件。沒有通過服務接收XML,因爲它確實需要使用strings.xml,但可以在運行時更改 – codeMagic

+0

@codeMagic:我並不是說在運行時不能更改語言選擇 - 這就是本地化的「字符串」文件。 OP(在問題的標題中)是問是否可以用「外部XML」來做到這一點......這正是我想要做的。 – Squonk

回答

0

警告

一切我讀過說,它不是一個好主意,讓您的應用程序更改語言,因爲它不是由Android框架支持,它可能會導致問題。

說到這裏,我已經在我的應用程序中完成了它,儘管它有點痛苦,但它似乎工作至今。以下是我如何做到這一點,以防你想這樣做。每種語言都需要單獨的strings.xml文件。 strings.xmlvalues文件夾作爲您的默認值,然後可能是一個strings.xml在說西班牙語字符串values-es文件夾。我用下面的代碼,具體取決於用戶選擇

final Configuration LANG_CONFIG = ChooseLocale.this.getResources().getConfiguration(); 
Locale newLocale = new Locale("English"); 
curLang = ChooseLocale.this.getLanguage(); 
if ((curLang.equals("English")) || (curLang.equalsIgnoreCase("Ingles"))) 
{ 
    newLocale = new Locale("en_US"); 
} 
else 
{ 
    newLocale = new Locale("es"); 
} 
Toast.makeText(getApplicationContext(), newLangToast + " " + curLang , Toast.LENGTH_SHORT).show(); 
Configuration config = getBaseContext().getResources().getConfiguration(); 
Locale.setDefault(newLocale); 
config.locale = newLocale; 
getBaseContext().getResources().updateConfiguration(config, 
     getBaseContext().getResources().getDisplayMetrics()); 

SharedPreferences.Editor editor = langPref.edit(); 
editor.putString(LANG_PREF, curLang); 
editor.commit(); 

有了這條線是最重要的更新配置

getBaseContext().getResources().updateConfiguration(config, 
     getBaseContext().getResources().getDisplayMetrics()); 

我從拿到語言環境的RadioButton更改配置設置我getLanguage()功能可以根據需要進行處理。我也不得不

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    newConfig = Globals.getUserLanguage(this); 
    super.onConfigurationChanged(newConfig); 

添加到每個活動,使方向變化,加入到我的每個

final SharedPreferences langPref = getSharedPreferences (LANG_PREF, 0); 
if (Globals.langConfig != null) 
    this.onConfigurationChanged(Globals.langConfig); 

我還添加了android:configChanges="orientation|locale"在允許方向變化

清單每個活動 onCreate()

Android Docs on localization