Android 应用内切换语言

extends :http://bbs.51cto.com/thread-1075165-1.html,http://www.cnblogs.com/loulijun/p/3164746.html

1.

多国语言:

在res目录下建立不同名称的values文件来调用不同的语言包
Values文件汇总如下:
中文(中国):values-zh-rCN中文(台湾):values-zh-rTW
中文(香港):values-zh-rHK
英语(美国):values-en-rUS
英语(英国):values-en-rGB
英文(澳大利亚):values-en-rAU
英文(加拿大):values-en-rCA
英文(爱尔兰):values-en-rIE
英文(印度):values-en-rIN
英文(新西兰):values-en-rNZ
英文(新加坡):values-en-rSG
英文(南非):values-en-rZA
阿拉伯文(埃及):values-ar-rEG
阿拉伯文(以色列):values-ar-rIL
保加利亚文: values-bg-rBG
加泰罗尼亚文:values-ca-rES
捷克文:values-cs-rCZ
丹麦文:values-da-rDK
德文(奥地利):values-de-rAT
德文(瑞士):values-de-rCH
德文(德国):values-de-rDE
德文(列支敦士登):values-de-rLI
希腊文:values-el-rGR
西班牙文(西班牙):values-es-rES
西班牙文(美国):values-es-rUS
芬兰文(芬兰):values-fi-rFI
法文(比利时):values-fr-rBE
法文(加拿大):values-fr-rCA
法文(瑞士):values-fr-rCH
法文(法国):values-fr-rFR
希伯来文:values-iw-rIL
印地文:values-hi-rIN
克罗里亚文:values-hr-rHR
匈牙利文:values-hu-rHU
印度尼西亚文:values-in-rID
意大利文(瑞士):values-it-rCH
意大利文(意大利):values-it-rIT
日文:values-ja-rJP
韩文:values-ko-rKR
立陶宛文:valueslt-rLT
拉脱维亚文:values-lv-rLV
挪威博克马尔文:values-nb-rNO
荷兰文(比利时):values-nl-BE
荷兰文(荷兰):values-nl-rNL
波兰文:values-pl-rPL
葡萄牙文(巴西):values-pt-rBR
葡萄牙文(葡萄牙):values-pt-rPT
罗马尼亚文:values-ro-rRO
俄文:values-ru-rRU
斯洛伐克文:values-sk-rSK
斯洛文尼亚文:values-sl-rSI
塞尔维亚文:values-sr-rRS
瑞典文:values-sv-rSE
泰文:values-th-rTH
塔加洛语:values-tl-rPH
土耳其文:values–r-rTR
乌克兰文:values-uk-rUA
越南文:values-vi-rVN

 2.在工程res文件下添加对应语种的values文件,ar:阿拉伯语, en:英语    zh_rCN: 简体中文
       截图如下:

 
       在strings.xml和arrays.xml需要国际化的字符串进行相应得翻译
      
       3.在功能清单文件中对要进行切换acitivity 进行配置
          添加

    android:configChanges="locale"

 4.对语言选择的处理

public class MainActivity extends Activity {

    Context context = MainActivity.this;;
    int languageId;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        read();//设置
        setContentView(R.layout.main); 

        findViewById(R.id.btn_change).setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                save();
            }
        });
    }

    private void changeLanguage(Locale local) {
        // 应用内配置语言
        Resources resources = getResources();// 获得res资源对象
        Configuration config = resources.getConfiguration();// 获得设置对象
        DisplayMetrics dm = resources.getDisplayMetrics();// 获得屏幕参数:主要是分辨率,像素等。
        config.locale = local; // 简体中文
        resources.updateConfiguration(config, dm);
    }
//保存
    private void save() {
        String[] languages = { "默认", "CN", "EN" };
        AlertDialog.Builder builder = new AlertDialog.Builder(context,
                android.R.style.Animation_Dialog);
        builder.setTitle("选择语言");
        final SharedPreferences languagePre = context.getSharedPreferences(
                "language_choice", context.MODE_PRIVATE);
        final int id = languagePre.getInt("id", 0);
        builder.setSingleChoiceItems(languages, id,
                new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface arg0, int index) {
                        switch (index) {
                        case 0:
                            // 系统默认语言
                            languageId = 0;
                            break;
                        case 1:
                            // 简体中文
                            languageId = 1;
                            break;
                        case 2:
                            // 英语
                            languageId = 2;

                            break;
                        case 3:
                            // 阿拉伯语
                            languageId = 3;

                            break;
                        default:
                            break;
                        }
                        languagePre.edit().putInt("id", languageId).commit();
                    }
                });
        // 保存
        builder.setPositiveButton("保存", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                ((Activity) context).finish();
                Intent intent = new Intent();
                intent.setClass(context, MainActivity.class);
                context.startActivity(intent);
            }
        });
        builder.show();
    }
//读取
    private void read() {
        SharedPreferences languagePre = getSharedPreferences("language_choice",
                Context.MODE_PRIVATE);
        int id = languagePre.getInt("id", 0);
        Log.d("MainActivity", "langauge_id=" + id);
        Toast.makeText(context, "langauge_id=" + id, Toast.LENGTH_LONG).show();
        // 应用内配置语言
        Resources resources = getResources();// 获得res资源对象
        Configuration config = resources.getConfiguration();// 获得设置对象
        DisplayMetrics dm = resources.getDisplayMetrics();// 获得屏幕参数:主要是分辨率,像素等。
        switch (id) {
        case 0:
            config.locale = Locale.getDefault(); // 系统默认语言
            break;
        case 1:
            config.locale = Locale.SIMPLIFIED_CHINESE; // 简体中文
            break;
        case 2:
            config.locale = Locale.ENGLISH; // 英文
            break;
        default:
            config.locale = Locale.getDefault();
            break;
        }
        resources.updateConfiguration(config, dm);
    }
}
时间: 2024-11-10 04:43:15

Android 应用内切换语言的相关文章

Android 应用内多语言切换

p.p1 { margin: 0.0px 0.0px 12.0px 0.0px; line-height: 18.0px; font: 12.0px ".PingFang SC"; color: #000000 } p.p3 { margin: 0.0px 0.0px 13.9px 0.0px; line-height: 18.0px; font: 16.8px "PT Sans"; color: #000000 } p.p4 { margin: 0.0px 0.0

App内切换语言

转载请注明出处 http://www.cnblogs.com/cnwutianhao/p/6746981.html 前几天客户提需求,对App增加一个功能,这个功能目前市面上已经很常见,那就是应用内切换语言.啥意思,就是 英.中.法.德.日...语言随意切换. (本案例采用Data-Bingding模式,麻麻再也不用担心我findViewBy不到Id了哈哈,开个玩笑) 先上示例图: 代码实现: 布局文件(Data-Binding模式),很简单就是两行文字 <?xml version="1.

iOS开发--应用国际化,应用内切换语言

1.前言 自己负责的项目需要做国际化,并且要求应用内部切换语言.这个是可以做到的,也并不难,可以直接戳Github看一下 https://github.com/leo90821/LocaliztionStringExchange 2.实现原理 原理比较简单,利用NSBundle切换语言包,主要利用NSBundle的方法 - localizedStringForKey:value:table: 进行本地字符串的切换 3.实现代码 1)业务逻辑 头文件 #import <Foundation/Fou

android 多语言(在APP里面内切换语言)

创建SharedPreferences的管理类 public class PreferenceUtil { private static SharedPreferences mSharedPreferences = null; private static Editor mEditor = null; public static void init(Context context){ if (null == mSharedPreferences) { mSharedPreferences = a

iOS 应用内切换语言。

参考:https://github.com/Alittlefly/AppLanguageChange 核心: - (NSString *)localizeStringWithResourceName:(NSString *)RecoursePath withKey:(NSString *)key table:(NSString *)table{ NSString *PathString = [[NSBundle mainBundle] pathForResource:[NSString stri

Android应用内语言切换实现

自定义控件系列结束了,打个回马枪,补上前段时间埋下的一个坑---"应用内语言切换".APP语言改变是一个Configuration,但是这个Configuration和android手机屏幕旋转有点不大一样.屏幕旋转的时候,会destroy当前页面,并进行重新绘制.而切换语言后不会重新绘制页面,所以这种情况的出现造成了网上的一知半解小伙伴们哀声一片,不是在咒骂api的坑爹,就是在卖力的另辟蹊径想尽办法解决问题.思路都是很好的,目的也是坚决的,可是方向是错误的,把哥哥我也给带进了坑了,爬

Android app内语言环境切换

逻辑很简单: 1  app内所有activity继承自BaseActivity或BaseActivity派生出来的子类,BaseActivity中维护了一个静态的app Activity访问栈,在创建和销毁时会执行压栈和出栈操作,所以mLocalStack内维持的是app中正在运行的activity. 2  将app的语言环境存储在SharedPreferences中,避免app重启时修改状态不改变:在BaseActivity创建时取出语言环境字符串并初始化Activity语言环境(initLa

Android系统切换语言的时候APP无法更新资源文件的解决方法

你的APP支持多语言环境,假如它正在后台运行,此时用户去更换系统语言,等系统语言换好后直接从后台打开它,此时用户会发现你的界面语言没有和系统语言保持一致:为什么?主要是界面资源没有重新加载 如果你是属于自己在APP内设置语言切换,那么就可以直接在你设置切换的那个activity里做处理,重新启动一次该activity就可以了,但是如果你的APP和我类似本身是没有切换语言功能的,只是跟随系统的,那么你不可能在所有的activity里处理吧!所以我这里就直接在application中重新启动一次ap

Android app应用多语言切换功能实现

最近在做一个多语言切换的功能,类似于微信的语言切换,搜了下资料基本上都是以下这种: 1. 实现的效果 和微信类似,在设置界面打开切换语言的界面,选择语言后重启 HomeActivity,语言切换完成,下次重新打开 App ,也是用户设置的语言. 2. 实现步骤 1. 添加多语言文件 在不同的 value 文件夹下(例如 value .value-en.values-zh-rTW 文件夹)添加不同语言的 string.xml 文件,我们的项目添加了英文.简体中文.繁体中文三种语言,如下图所示: 其