安卓多语言设置
最近做的项目中使用到了多语言切换功能。那么多语言切换首先要注意的是,在xml文件中和代码当中,所有使用文本字符串的地方,确保所使用的string文本是从values文件夹下的string.xml中获取。
那么做多语言需要两到三个文件。1 values文件夹下的string.xml文件这里存放的是你app在没有进行语言设置的时候默认使用的语言类型。2 values-en文件夹(这个文件夹是自己创建的,当然也可以是别的名字string.xml 这里存放的是每个文本对应的英文文本。3values-tw(繁体中文)
需要注意一下,三个文件夹下的string.xml文件中的文本变量,必须保证数目一致,对应的名称一致。
下面是切换代码部分。我挑选出重要的解释。
public class ChangeLanquageActivity extends BaseActivity implements OnClickListener { private RelativeLayout cnBtn, twBtn, enBtn; private ImageView cnBtn_choose, twBtn_choose, enBtn_choose; private Button leftBtn; private TextView topTtitle; SharedPreferences Sp;// 保存语言切换的SP,以便后续的网络请求中,发送当前语言类型 @Override protected int getContentLayout() { return R.layout.activity_language; } @Override protected void initGui() { leftBtn = (Button) findViewById(R.id.leftBtn); topTtitle = (TextView) findViewById(R.id.topTitle); cnBtn = (RelativeLayout) findViewById(R.id.cnBtn); twBtn = (RelativeLayout) findViewById(R.id.twBtn); enBtn = (RelativeLayout) findViewById(R.id.enBtn); cnBtn_choose = (ImageView) findViewById(R.id.cnBtn_choose); twBtn_choose = (ImageView) findViewById(R.id.twBtn_choose); enBtn_choose = (ImageView) findViewById(R.id.enBtn_choose); Sp = getSharedPreferences("userInfo", this.MODE_WORLD_WRITEABLE); } @Override protected void initAction() { cnBtn.setOnClickListener(this); twBtn.setOnClickListener(this); enBtn.setOnClickListener(this); leftBtn.setOnClickListener(this); } @Override protected void initData() {//初始化切换语言的按钮的文本,在这里说明一下,<span style="font-family: Arial, Helvetica, sans-serif;">MBConfig.Language是用于保存当前语言环境的全局变量,0,1,2代表三种语言设置</span> topTtitle.setText(R.string.language_set); if (StringUtils.equals(MBConfig.Language, "0")) { // 繁体中文 cnBtn_choose.setVisibility(View.INVISIBLE); twBtn_choose.setVisibility(View.VISIBLE); enBtn_choose.setVisibility(View.INVISIBLE); } else if (StringUtils.equals(MBConfig.Language, "1")) { // 英文 cnBtn_choose.setVisibility(View.INVISIBLE); twBtn_choose.setVisibility(View.INVISIBLE); enBtn_choose.setVisibility(View.VISIBLE); } else if (StringUtils.equals(MBConfig.Language, "2")) { // 简体中文 cnBtn_choose.setVisibility(View.VISIBLE); twBtn_choose.setVisibility(View.INVISIBLE); enBtn_choose.setVisibility(View.INVISIBLE); } } @Override public void onClick(View v) {//点击事件,点击后切换语言配置。切换的配置用sp保存,以便下次进入的时候使用。中间的按钮现隐藏逻辑可以不用考虑。 Resources resources = getResources(); Editor edit = Sp.edit(); switch (v.getId()) { case R.id.leftBtn: hideProgressDialog(); finish(); break; case R.id.cnBtn: cnBtn_choose.setVisibility(View.VISIBLE); twBtn_choose.setVisibility(View.INVISIBLE); enBtn_choose.setVisibility(View.INVISIBLE); changeAppLanguage(resources, "CN"); MBConfig.Language = "2"; edit.putString("LANGUAGE", "2"); edit.commit(); hideProgressDialog(); finish(); break; case R.id.twBtn: cnBtn_choose.setVisibility(View.INVISIBLE); twBtn_choose.setVisibility(View.VISIBLE); enBtn_choose.setVisibility(View.INVISIBLE); changeAppLanguage(resources, "TW"); MBConfig.Language = "0"; edit.putString("LANGUAGE", "0"); edit.commit(); hideProgressDialog(); finish(); break; case R.id.enBtn: cnBtn_choose.setVisibility(View.INVISIBLE); twBtn_choose.setVisibility(View.INVISIBLE); enBtn_choose.setVisibility(View.VISIBLE); changeAppLanguage(resources, "EN"); MBConfig.Language = "1"; edit.putString("LANGUAGE", "1"); edit.commit(); hideProgressDialog(); finish(); break; default: break; } } public void changeAppLanguage(Resources resources, String lanAtr) {//切换语言的方法 Configuration config = resources.getConfiguration();//读取系统配置信息 DisplayMetrics dm = resources.getDisplayMetrics(); if (lanAtr.equals("CN")) { config.locale = Locale.CHINA; } else if (lanAtr.equals("TW")) { config.locale = Locale.TAIWAN; } else if (lanAtr.equals("EN")) { config.locale = Locale.ENGLISH; } else { config.locale = Locale.getDefault(); } //上面是对应三种情况下设置三种语言设置 resources.updateConfiguration(config, dm);//刷新语言设置信息,这步不能少。 }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。