Author:jianlong.zhang
Date:6/6/2017
Desc:官方培训课程学习,支持不同的语言。
Thanks: Goole 官方培训教程
自动设置应用语言
- 在res上右击新建AndroidResouceFile.
- 选择local,点击 >> ,就可以看到不同语言选项,选择之后就可以自动生成相应的strings。
- 在.java文件中,直接使用context.getResource()引用即可。系统会根据当前系统语言,选择应用的语言。
手动设置应用语言
- 设置语言选项
private static final Locale ENGLISH = Locale.ENGLISH;
private static final Locale CHINESE_SIMPLE = Locale.SIMPLIFIED_CHINESE;
private static final Locale CHINESE_TW = Locale.TRADITIONAL_CHINESE;
- 获取configuration context
//先获取resource
Resources resources = getResources();
//获取应用的配置
Configuration configuration = resources.getConfiguration();
// 设置语言
configuration.setLocale(locale);
// 返回获取 strings的context
return createConfigurationContext(configuration);
- 再通过configuration context 获取strings
showTv.setText(context.getString(R.string.content));
完整代码如下:
package com.zhouzhouwang88.shoppingclient.test;
import android.content.Context;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import com.zhouzhouwang88.shoppingclient.R;
import com.zhouzhouwang88.shoppingclient.base.BaseActivity;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
public class PreferenceActivity extends BaseActivity implements View.OnClickListener {
private Button englishBtn, chineseBtn, chineseBtnTW;
private TextView showTv;
private static final Locale ENGLISH = Locale.ENGLISH;
private static final Locale CHINESE_SIMPLE = Locale.SIMPLIFIED_CHINESE;
private static final Locale CHINESE_TW = Locale.TRADITIONAL_CHINESE;
@Override
protected int inflateRoot(Bundle savedInstanceState) {
return R.layout.activity_preference;
}
@Override
protected void initView(Bundle savedInstanceState) {
showTv = (TextView) findViewById(R.id.tv_show);
preference = (RecyclerView) findViewById(R.id.activity_preference_rv);
englishBtn = (Button) findViewById(R.id.btn_english);
chineseBtn = (Button) findViewById(R.id.btn_chinese_simple);
chineseBtnTW = (Button) findViewById(R.id.btn_chinese_tw);
englishBtn.setOnClickListener(this);
chineseBtn.setOnClickListener(this);
chineseBtnTW.setOnClickListener(this);
}
@Override
protected void initData(Bundle savedInstanceState) {
}
@Override
public void onClick(View v) {
Context context = null;
switch (v.getId()) {
case R.id.btn_english:
context = switchLanguage(ENGLISH);
break;
case R.id.btn_chinese_simple:
context = switchLanguage(CHINESE_SIMPLE);
break;
case R.id.btn_chinese_tw:
context = switchLanguage(CHINESE_TW);
break;
}
if (null != context) {// 这里获取strings 要使用Configuration context
showTv.setText(context.getString(R.string.content));
}
}
private Context switchLanguage(Locale locale) {
//先获取resource
Resources resources = getResources();
//获取应用的配置
Configuration configuration = resources.getConfiguration();
// 设置语言
configuration.setLocale(locale);
// 返回获取 strings的context
return createConfigurationContext(configuration);
}
}