Android Studio之APP国际化

 

1、字符串国际化:只要在 res 文件夹下新建对应语言的 values 文件夹就好了, 

   如,英语环境下的,文件夹命名为:values-en 

   美国英文环境:values-en-rUS 

   中文环境为:values-zh 

   大陆地区中文环境: values-zh-cn

   在 eclipse 下新建 Android 项目时,会在 res 目录下自动创建一个默认语言环境的文件夹 : values 

   当某一个资源没有在语言环境的对应的资源集合中找到时,就会使用 values 下的资源。 

   若某一个语言环境没有在项目中定义语言环境,那么也会使用 values 下的资源。 

 

2.、图片国际化 

       同理。 

       在 res 下新建 drawable-zh 文件夹,存放中文环境下的图片 

       新建 drawable-en 作为英语环境下的图片 

       在 eclipse 下新建 Android 项目时,会在 res 目录下自动创建三个默认语言环境的文件夹: 

       drawable-hdpi 

       drawable-ldpi 

        drawable-mdpi 

        分别用于存放高、中。低分辨率的图片。Android 系统会根据手机的分辨率,而自动从不同的对应的某一个文件夹下去加载图片。 

        同样,它们也可以国际化,命名规则如: 

        drawable-zh-hdpi 

        drawable-en-ldpi 

        drawable-en-rUS-mdpi    

可能遇到的问题:切换语言后,打开已登录状态的APP时,应用重启

    提供两种解决方式:

方法一(治本):

 

在发生闪退的Activity中添加:

private boolean languageChange = false;

    private static String lastLanguage="CN";

    private String nowLanguange="";

    @Override

    public void onConfigurationChanged(Configuration newConfig) {

        super.onConfigurationChanged(newConfig);

        Log.e("123", "MainActivity--onConfigurationChanged");

        Configuration cfg = getResources().getConfiguration();

        if (cfg.orientation == Configuration.ORIENTATION_LANDSCAPE) {

            System.out.println("ORIENTATION_LANDSCAPE");

        } else if (cfg.orientation == Configuration.ORIENTATION_PORTRAIT) {

            System.out.println("ORIENTATION_PORTRAIT");

        }

         nowLanguange = getResources().getConfiguration().locale.getCountry();

        if(nowLanguange !=null && !nowLanguange.equals(lastLanguage))        

        {    

            lastLanguage =nowLanguange;

            refresh();

        }

    }



    private void refresh() {

        //finish();

        android.os.Process.killProcess(android.os.Process.myPid());

        Intent intent = new Intent(MainActivity.this, MainActivity.class);

        setIntent(intent);

        startActivity(intent);

    }

 

方法二(治标):

        安装并首次进入APP时,定义一个变量记录当前手机语言环境并存放在SharedPreferences对象中,以后每次登陆都进行检查

if ( APP处于已登录状态 && !( 当前手机语言环境.equals (上次登录时的语言环境) ) ){

        上次登录时的语言环境 == 当前手机语言环境;

        退出登录;

        重新登陆;

} else {

        继续登陆;

}

以下为Locale下几种方法返回的结果,经比较可使用getCountry()方法记录并判断当前手机语言设置。

     其中Locale  locale = getResources().getConfiguration().locale;

中文简体:

locale.getLanguage()--zh

locale.getDisplayLanguage()--中文

locale.getCountry()--CN

locale.getDisplayName()--中文 (中国)

 

中文繁体:

locale.getLanguage()--zh

locale.getDisplayLanguage()--中文

locale.getCountry()--TW

locale.getDisplayName()--中文 (台灣)

 

美国英语:

locale.getLanguage()--en

locale.getDisplayLanguage()--English

locale.getCountry()--US

locale.getDisplayName()--English (United States)

 

英国英语:

locale.getLanguage()--en

locale.getDisplayLanguage()--English

 locale.getCountry()--GB

locale.getDisplayName()--English (United Kingdom)

 

日语:

locale.getLanguage()--ja

locale.getDisplayLanguage()--日本語

locale.getCountry()--JP

locale.getDisplayName()--日本語 (日本)

 

VisualStudio添加不同语言环境的values资源文件目录:

指定环境,此处以添加美国英语为例:

下面添加一个文本资源文件,将英语文本放在这个文件中,即可切换为英文文本:

 

 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值