这篇文章也提供了应用内部转换语言的方法: 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);
}
}

最新文章

  1. python select 实现
  2. sudo su权限案例
  3. 再过几个月Apple Watch就要正式发布了
  4. Tlist
  5. MySQL tips (日期时间操作/concat 等)
  6. Jmail发送邮件与带附件乱码解决办法
  7. Scrum&Kanban在移动开发团队的实践 (一)
  8. DeviceIOControl具体解释-各个击破
  9. Android学习笔记:Home Screen Widgets(1):大约Widget
  10. Twitter Storm源代码分析之Nimbus/Supervisor本地目录结构
  11. 【整理】图解隐马尔可夫模型(HMM)
  12. Java的LinkedList详解,看源码之后的总结
  13. PostgreSql 使用dblink跨库
  14. JDK一键部署, 新添加进度条
  15. 008 在大数据中,关于native包的编译步骤
  16. 玩转spring boot——war部署
  17. Jsp 国际化访问首页选择展示不同字体小例子
  18. sjw-风评评测-定位页面元素
  19. Alpha阶段个人贡献分
  20. Rails 增加一个模型(model)

热门文章

  1. 1497: [NOI2006]最大获利
  2. Django实战(8):对比RoR与Django的输入校验机制
  3. HTML5 Canvas游戏开发(二)高级功能
  4. Ionic实战九:ionic视频播放
  5. Java控制多线程执行顺序
  6. C#使用Pechkin与CPechkin生成PDF
  7. hdu 2275 Kiki & Little Kiki 1 水题
  8. JQuery基础-DAY1
  9. 2 Spring4 之Bean的配置
  10. spring boot2集成ES详解