美文网首页
android实现多语言填坑之路

android实现多语言填坑之路

作者: leoryzhu | 来源:发表于2019-12-24 18:07 被阅读0次

由于公司业务需要,需要实现印尼版本的国际化,于是开始了入坑和填坑之旅。

第一步:创建多语言的资源文件

我默认的目录印尼版本,中文简体版本放在以-zh-rCN为后缀的目录下,下面的各目录下对应的中文简体目录,其他语言类推。

  • values -> value-zh-rCN
  • drawable -> drawable-zh-rCN
  • mimap -> mimap-zh-rCN
  • raw -> raw-zh-rCN

第二步:把需要多语言的资源文件移到对应的目录下

如果之前就中文写在strings 文件中,就可以省了好多工夫,所以平时养成好的编程习惯是有必要。

第三步:切换到我们设置的语言

新建一个语言工具类:LanguageSpUtils,实现下面方法

  //获取设置的语言
    private static Locale getSetLocale() {
        String locale = "in";//简单设置为印尼语

        String[] array = locale.split("_");
        String language = array[0];
        if (array.length > 1) {
            String country = array[1];
            return new Locale(language, country);
        }
        return new Locale(language);
    }
  /**
     * 切换语言
     *
     * @param context
     */
    public static void applyChange(Context context) {
        Locale locale = getSetLocale();
        Resources res = context.getResources();
        DisplayMetrics dm = res.getDisplayMetrics();
        Configuration conf = res.getConfiguration();
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            conf.setLocale(locale);
            LocaleList localeList = new LocaleList(locale);
            LocaleList.setDefault(localeList);
            conf.setLocales(localeList);
        } else {
            conf.setLocale(locale);
        }
        res.updateConfiguration(conf, dm);
    }

在应用的application中oncreate()中调用设置语言

 @Override
    public void onCreate() {
        super.onCreate();
        //语言切换
        LanguageSpUtils.applyChange(this);
}

到这步已经切换到我们想要的语言了,是不是很简单,等等别走,下面两大坑要注意。

坑1、webview引起语言变化。

原本是好端端的印尼文页面,打开一个h5页面后返回后再打开其他页面,都变成了中文

解决方法,在application中的LanguageSpUtils.applyChange(this);前面加 new WebView(this).destroy();即:
 @Override
    public void onCreate() {
        super.onCreate();
        //语言切换
        new WebView(this).destroy();
        LanguageSpUtils.applyChange(this);
}

坑2、页面横竖屏发生变化时引起语言变化

现象和上面的一样

解决方法,在application的onConfigurationChanged方法中重置语言,即:
  @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        LanguageSpUtils.applyChange(this);
    }

搞定收工

相关文章

  • android实现多语言填坑之路

    由于公司业务需要,需要实现印尼版本的国际化,于是开始了入坑和填坑之旅。 第一步:创建多语言的资源文件 我默认的目录...

  • android8.0之程序员开发时的填坑经历

    填坑一: 实现手动更新apk时的填坑历程,两个步骤: 步骤1)读写权限申请: 从Android6.0开始,在更新a...

  • Android填坑之路——FragmentPagerAdapte

    原因分析 在使用ViewPager+FragmentPagerAdapter时候,更新Fragment里数据是不起...

  • Android ExoPlayer 填坑之路

    自从上次做完视频播放器调研以后,心里就知道,肯定以后这块东西都是我做,果不其然,公司对视频播放这块不断的优化。我就...

  • Android 7.0多语言适配,填坑日记

    背景 最近项目在适配7.0系统的时候发现一些问题,其中也有多语言适配的问题,就拿出来说说,记记笔记,填填坑。 问题...

  • 填坑之路

    总有一点东西,用一次查一次,查一次忘一次 IE 11不兼容VUE Babel 默认只转换新的 JavaScript...

  • vue-simple-uploader之后端(ssm)实现(补坑

    实现说一下心得:太坑了,接下来就让我描述一下我的填坑之路,顺便附上代码。 坑的地方说一下,以免读者错过精彩部分:要...

  • ReactNative填坑之路

    一.ViewPagerAndroid之坑 举个栗子, 然而在HotSaleLis这个Component里面就不能超...

  • 填坑之路:JSTL

    一、什么是JSTL JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能,它是apa...

  • idea 填坑之路

    1、jdk与jetty有版本匹配的问题,如果版本不匹配会出现不能识别jsp的错误。 jdk1.8匹配的jett...

网友评论

      本文标题:android实现多语言填坑之路

      本文链接:https://www.haomeiwen.com/subject/vlufoctx.html