我想製作支持英文和瑞典文的Android應用程序。我已經經歷了本地化概念。但我想知道有兩個按鈕在點擊英文按鈕時應該按照英文加載字符串,並且在瑞典語按鈕上點擊應該加載瑞典語字符串。我怎樣才能做到這一點?根據用戶偏好加載資源
回答
聲明兩個按鈕,一個用於英語,另一個用於瑞典。您的english en
和swedish sv
,然後你必須使用Localization,這樣代碼..
Locale myLocale = new Locale(lang);
Resources res = getResources();
DisplayMetrics dm = res.getDisplayMetrics();
Configuration conf = res.getConfiguration();
conf.locale = myLocale;
res.updateConfiguration(conf, dm);
檢查這個簡單的example來實現自己的目標。
嘿感謝男人:)你幫了我很多! – kunal
SV =瑞典... EN =英語... 在languageToLoad輸入您的語言代碼:
String languageToLoad = "Sv"; // your language
Locale locale = new Locale(languageToLoad);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
this.setContentView(R.layout.main);
我的回答是類似於別人,但我已經添加了一些額外的,可能是重要的
警告
我讀過的一切說,它不是一個好主意,讓您的應用程序改變的語言,因爲它不是不受Android框架支持,可能會導致問題。
說到這裏,我已經在我的應用程序中完成了它,儘管它有點痛苦,但它似乎工作至今。以下是我如何做到這一點,以防你想這樣做。每種語言都需要一個單獨的strings.xml文件。 values.xml文件夾中的strings.xml作爲默認值,然後可能是一個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());
單選按鈕的配置設置我從我的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);
的onCreate()我允許方向變化的清單還增加了android:configChanges="orientation|locale"
到每個活動。我將用戶語言首選項存儲在可在網站或應用程序內更改的數據庫中。希望這可以幫助。
- 1. 根據用戶數據獲取偏好
- 2. 根據偏好繪製用戶界面
- 3. 根據用戶控件的路徑加載資源文件
- 4. 偏好庫不加載偏好
- 5. 根據偏好分組
- 6. 用戶偏好
- 7. 良好的資源加載系統
- 8. 根據選定的MenuItem資源ID加載字符串資源 - Android JAVA
- 9. 加載資源
- 10. Android和存儲/加載資源偏好 - 如何實現一致性?
- 11. 如何根據用戶偏好更改RelativeLayout顏色?
- 12. 如何在Yii2中根據用戶偏好更改語言?
- 13. Android根據用戶偏好獲取操作系統時鐘
- 14. 記住用戶偏好並根據他們提供信息
- 15. Android:根據用戶偏好設置不同的開始活動
- 16. Android - 試圖根據偏好消毒用戶輸入
- 17. 如何根據用戶偏好更改顯示哪個佈局?
- 18. 根據用戶偏好切換NSVisualEffectViews(振動)關
- 19. 如何根據控制器/操作加載Javascript資源?
- 20. 根據長寬比加載不同的資源
- 21. 根據身份驗證加載backbone.js資源
- 22. 如何根據資源標識符加載字符串?
- 23. 使用require.js加載資源
- 24. 用變量加載資源?
- 25. 使用webkitgtk加載資源+
- 26. 使用Java加載資源
- 27. 加載.NET資源客戶端
- 28. 未在Azure門戶中加載資源
- 29. 加載資源ME
- 30. Android資源加載
是的,你可以這樣做,但是因爲Android的Settings區域設置條目完全是爲了這個目的,所以它會很愚蠢。您將爲已經很好解決的標準問題創建非標準解決方案。 – mah
它確實應該通過系統設置完成,但有理由這樣做。就我而言,我們必須鎖定來自日常用戶的所有其他程序和系統設置。由於設備在不同用戶之間切換,我必須這樣做才能在必要時進行切換。仍然可以解決它,但這就是客戶想要的 – codeMagic