Android之應用內部實現國際化


這篇文章也提供了應用內部轉換語言的方法: http://blog.csdn.net/sodino/article/details/6596709 。
1和2的方法是一樣的,然而還是會調整了手機的語言設置
3對於大型應用來說顯得有點兒笨重

針對於這兩種程況,我也提供一種方法,即能在不改變手機設置的前提下,又能在大型項目上顯得不會太笨重。直接上代碼:

工具類:

import android.content.Context; import android.content.SharedPreferences; import android.content.res.Configuration; import android.content.res.Resources; import android.preference.PreferenceManager; import android.util.DisplayMetrics; import java.util.Locale; public class LanguageSettingUtil { //單例模式-
    private static LanguageSettingUtil instance; private Context context; //存儲當前系統的language設置-
    private String defaultLanguage; //存儲當前系統Locale-
    private Locale defaultLocale; public final static String ENGLISH = "en"; public final static String CHINESE = "zh"; private LanguageSettingUtil(Context paramContext) { //得到系統語言-
        Locale localLocale = Locale.getDefault(); this.defaultLocale = localLocale; //保存系統語言到defaultLanguage
        String str = this.defaultLocale.getLanguage(); this.defaultLanguage = str; this.context = paramContext; } //檢驗自身是否被創建-
    public static LanguageSettingUtil get() { if (instance == null) throw new IllegalStateException( "language setting not initialized yet"); return instance; } //初始化-
    public static void init(Context paramContext) { if (instance == null) { instance = new LanguageSettingUtil(paramContext); } } // 創建Configuration-
    private Configuration getUpdatedLocaleConfig(String paramString) { Configuration localConfiguration = context.getResources() .getConfiguration(); Locale localLocale = getLocale(paramString); localConfiguration.locale = localLocale; return localConfiguration; } //得到APP配置文件目前的語言設置-
    public String getLanguage() { SharedPreferences localSharedPreferences = PreferenceManager .getDefaultSharedPreferences(this.context); //如果當前程序沒有設置language屬性就返回系統語言,如果有,就返回以前的-
        return localSharedPreferences.getString("language", this.defaultLanguage); } //如果配置文件中沒有語言設置-
    public Locale getLocale() { String str = getLanguage(); return getLocale(str); } //創建新Locale並覆蓋原Locale-
    public Locale getLocale(String paramString) { Locale localLocale = new Locale(paramString); Locale.setDefault(localLocale); return localLocale; } //刷新顯示配置-
    public void refreshLanguage() { String str = getLanguage(); Resources localResources = this.context.getResources(); if (!localResources.getConfiguration().locale.getLanguage().equals(str)) { Configuration localConfiguration = getUpdatedLocaleConfig(str); // A structure describing general information about a display, such // as its size, density, and font scaling.
            DisplayMetrics localDisplayMetrics = localResources .getDisplayMetrics(); localResources.updateConfiguration(localConfiguration, localDisplayMetrics); } } //設置系統語言-
    public void saveLanguage(String paramString) { PreferenceManager.getDefaultSharedPreferences(this.context).edit() .putString("language", paramString).commit(); } //保存系統的語言設置到SharedPreferences-
    public void saveSystemLanguage() { PreferenceManager.getDefaultSharedPreferences(this.context).edit() .putString("PreSysLanguage", this.defaultLanguage).commit(); } public void checkSysChanged(String cuerSysLanguage) { //如果系統語言設置發生變化-
        if (!cuerSysLanguage.equals(PreferenceManager .getDefaultSharedPreferences(this.context).getString( "PreSysLanguage", "zh"))) { //如果系統保存了this對象,就在這里修改defaultLanguage的值為當前系統語言cuerSysLanguage
            this.defaultLanguage = cuerSysLanguage; saveLanguage(cuerSysLanguage); saveSystemLanguage(); } } }

 

調用類:

import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; import com.example.internationaltest.util.LanguageSettingUtil; public class MainActivity extends Activity { private LanguageSettingUtil languageSetting; private TextView h,w; private Button b; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); h = (TextView) findViewById(R.id.h); w = (TextView) findViewById(R.id.w); b = (Button) findViewById(R.id.b); LanguageSettingUtil.init(this);  // 初始化 languageSetting = LanguageSettingUtil.get();  // 檢查是否已經初始化 } public void change(View view){ languageSetting.saveLanguage("en");  // 設置為"en"語言 LanguageSettingUtil.get().refreshLanguage();  // 刷新 h.setText(R.string.hello); w.setText(R.string.world); b.setText(R.string.change); } }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM