Android之应用内部实现国际化
来源:互联网 发布:java 上传大文件 编辑:程序博客网 时间:2024/05/18 02:49
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); }}
0 0
- Android之应用内部实现国际化
- iOS国际化及应用内部实现国际化
- Android应用开发之国际化
- 应用程序内部实现语言国际化
- Android 应用国际化
- Android如何实现国际化
- Android软件实现国际化
- Android实现国际化
- android如何实现国际化
- Android实现国际化
- Android实现国际化
- Android 国际化功能实现
- android实现app国际化
- Android 之 语言 国际化
- android开发之国际化
- Android UI之国际化
- android之语言国际化
- [Android]应用语言切换 国际化
- Java程序员必须掌握的排序算法Java实现整合二 :选择排序
- C#多线程学习 之 线程池[ThreadPool]
- phpexcel读写excel表格详解
- ActiveMQ 简介
- 算法系列-----剑指offer
- Android之应用内部实现国际化
- Java中单例模式和静态类的区别
- 自定义控件
- 【基于libRTMP的流媒体直播之 AAC、H264 推送】
- Android插件化探索系列——文章索引
- 文章标题
- 奋斗吧,程序员——第五十二章 我欲与君相知,长命无绝衰
- OC学习笔记(七)--方法与函数的区别
- c++字符串(string)输入问题