Android 多语言 切换

你还在重写attachBaseContext自定义多语言切换吗?
你还需要自己用轻量级存储(SharedPreferences、datastore)之类的来保存你切换的语言吗?
你还需要自己编写重启活动逻辑吗?
比如:

override fun attachBaseContext(newBase: Context?) {if(newBase==null) {super.attachBaseContext(newBase)return}val sp = newBase.getSharedPreferences("share_data", Context.MODE_PRIVATE)val language = sp.getString("language", Locale.getDefault().language)var locale = Locale.getDefault()if (language.equals("en", ignoreCase = true)) {locale = Locale.ENGLISH} else if (language.equals("ko", ignoreCase = true)) {locale = Locale.KOREA} else if (language.equals("zh", ignoreCase = true)) {locale = Locale.SIMPLIFIED_CHINESE} else if (language.equals("zh_TW", ignoreCase = true)) {locale = Locale.TRADITIONAL_CHINESE} else if (language.equals("ja", ignoreCase = true)) {locale = Locale.JAPAN} else if (language.equals("de", ignoreCase = true)) {locale = Locale.GERMANY} else if (language.equals("pt", ignoreCase = true)) {locale = Locale("pt")} else if (language.equals("es", ignoreCase = true)) {locale = Locale("es")} else if (language.equals("fr", ignoreCase = true)) {locale = Locale.FRENCH} else if (language.equals("ru", ignoreCase = true)) {locale = Locale("ru")} else if (language.equals("it", ignoreCase = true)) {locale = Locale.ITALY}Log.d("TAG", "changeAppLanguage: $language")val metrics = newBase.resources.displayMetricsval configuration = newBase.resources.configurationconfiguration.setLocale(locale)if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {super.attachBaseContext(newBase.createConfigurationContext(configuration));} else {newBase.resources.updateConfiguration(configuration, metrics);super.attachBaseContext(newBase)}

各应用语言偏好设定  |  Android 开发者  |  Android Developers
大体来说就三步

  • 将受支持的语言添加到系统设置 localeConfig="@xml/locale_configs"
    <manifest>...<application...android:localeConfig="@xml/locales_config"></application>
    </manifest>
    <?xml version="1.0" encoding="utf-8"?>
    <locale-config xmlns:android="http://schemas.android.com/apk/res/android"><locale android:name="en-US"/>使用“英语(美国)”作为最终回退语言区域<locale android:name="en-GB"/> 英语(英国)<locale android:name="fr"/> 法语<locale android:name="ja"/> 日语<locale android:name="zh-Hans-MO"/> 中文(简体,澳门)<locale android:name="zh-Hant-MO"/> 中文(繁体,澳门)
    </locale-config>
  • 注册自动存储的语言服务
    <application...<serviceandroid:name="androidx.appcompat.app.AppLocalesMetadataHolderService"android:enabled="false"android:exported="false"><meta-dataandroid:name="autoStoreLocales"android:value="true" /></service>...
    </application>

使用

        // 使用AndroidX支持库获取当前的应用程序语言环境val currentLocaleName = if (!AppCompatDelegate.getApplicationLocales().isEmpty) {// 从列表中获取当前的应用程序区域设置AppCompatDelegate.getApplicationLocales()[0]?.displayName} else {// 获取默认的系统区域设置Locale.getDefault().displayName}// 语言设置为“西班牙雨”xxx.setOnClickListener {val localeList = LocaleListCompat.forLanguageTags("es")AppCompatDelegate.setApplicationLocales(localeList)}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/127629.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自定义微信公众号源码系统 带完整搭建教程

在我们现在的互联网时代&#xff0c;越来越多的人开始尝试通过微信公众号来传播自己的信息、提供服务或者进行营销。但是&#xff0c;市面上的微信公众号平台往往功能有限&#xff0c;不能满足部分用户的需求。这时&#xff0c;自定义微信公众号源码系统就成为了解决问题的最佳…

AUC的解释,以及其他指标

因为做比赛&#xff0c;又开始看一些关于评价指标的问题&#xff0c;下面这篇帖子不错&#xff0c;贴过来吧。 参考 ROC曲线画法。 https://www.zhihu.com/question/22844912

TypeScript - 类 - 静态成员

介绍一下静态成员 静态成员 &#xff1a; 静态的属性、静态的方法静态成员是直接属于类的&#xff0c;不属于对象&#xff0c;因此&#xff0c;类的对象是不能使用静态成员的静态成员只能通过 类直接使用关键字 &#xff1a; static静态代码块 &#xff1a; 主要作用还是用来进…

Http代理与socks5代理有何区别?如何选择?(二)

上篇文章我们基本分别了解了http代理与socks5代理的定义与优缺点&#xff0c;接下来我们继续来了解http代理与socks5代理之间的比较与区别。 一、两者的比较 1、功能比较 HTTP代理专门用于Web流量&#xff0c;并在处理HTTP和HTTPS协议方面非常高效。它们可以修改正在传输的数…

怎么扫码下载视频?一招生成可下载的视频二维码

怎么做可以下载视频的二维码呢&#xff1f;当我们用二维码来分享时&#xff0c;很多视频二维码生成器制作的二维码都只有展示功能&#xff0c;无法让扫码者选择下载视频&#xff0c;那么这个问题有什么解决方法呢&#xff1f;对于有这方面需求的小伙伴&#xff0c;小编可以给大…

Tomcat下载地址(详细)

Apache Tomcat - Apache Tomcat 8 Software Downloadshttps://tomcat.apache.org/download-80.cgi2.找到Archives 3.选择下载的把版本 4.选择具体下载那个版本 5. 6.一般选择tar.gz结尾的压缩包

安全狗亮相厦门市工信领域数据安全宣贯培训会

10月31日&#xff0c;厦门市工业和信息化局&#xff08;市大数据管理局&#xff09;顺利举办厦门市工信领域数据安全宣贯培训。 作为国内云原生安全领导厂商&#xff0c;安全狗以厦门市工业领域数据安全管理支撑单位身份受邀出席此次会议。 据悉&#xff0c;此次活动旨在贯彻…

Java 设计模式——命令模式

目录 1.概述2.结构3.案例实现3.1.命令接口3.2.具体命令3.3.接受者3.4.调用者3.5.测试 4.优缺点5.使用场景6.JDK 源码解析——Runnable 1.概述 &#xff08;1&#xff09;日常生活中&#xff0c;我们出去吃饭都会遇到下面的场景&#xff1a; &#xff08;2&#xff09;命令模…

Flask三种添加路由的方法

Flask 是一个流行的 Python Web 框架&#xff0c;它提供了多种方法来添加路由。路由是将 URL 映射到特定函数的过程&#xff0c;它是构建 Web 应用程序的基础。本文将介绍 Flask 中几种常用的路由添加方法&#xff0c;并附带代码示例。 方法一&#xff1a;使用装饰器 from flas…

Unity AssetBundle批量打包、加载(场景、Prefab)完整流程

目录 1、文章介绍 2、具体思路和写法 &#xff08;1&#xff09;AB包的打包 &#xff08;2&#xff09;AB包的加载 &#xff08;3&#xff09;AB包卸载 3、结语 1、文章介绍 本篇博客主要起记录和学习作用&#xff0c;简单的介绍一下AB包批量的打包和加载AB包的方式&…

NOIP2023模拟9联测30 高爸

题目大意 Shintaro \text{Shintaro} Shintaro有 n n n条龙&#xff0c;第 i i i条龙的力量值为 x i x_i xi​。现在 Shintaro \text{Shintaro} Shintaro想与这些龙交朋友。 Shintaro \text{Shintaro} Shintaro会使用以下两种魔法来平衡龙的力量值&#xff08;使某些龙的力量值相…

【HeidiSql_01】python在heidisql当中创建新表的注意事项

python在heidisql当中创建新表的注意事项 假设你已经在python当中弄好了所有的结果&#xff0c;并且保存在df_all这个dataframe当中&#xff0c;然后要将其导入数据库当中并创建一张新的表进行保存。 # 构建数据库连接,将merged_df写回数据库 from sqlalchemy import create_e…

Spring-创建非懒加载的单例Bean源码

补充&#xff1a;关于扫描的逻辑 /*** Scan the class path for candidate components.* param basePackage the package to check for annotated classes* return a corresponding Set of autodetected bean definitions*/ public Set<BeanDefinition> findCandidateCo…

【python】爬取豆瓣电影排行榜TOP250存储到CSV文件中

一、导入必要的模块&#xff1a; 代码首先导入了需要使用的模块&#xff1a;requests、lxml和csv。 import requests from lxml import etree import csv 如果出现模块报错 进入控制台输入&#xff1a;建议使用国内镜像源 pip install 模块名称 -i https://mirrors.aliyun.co…

python之pytorch多进程

目录 1、创建并运行并行进程 2、使用队列&#xff08;Queue&#xff09;来共享数据 3、进程池 4、进程锁 5、比较使用多进程和使用单进程执行一段代码的时间消耗 6、共享变量 多进程是计算机科学中的一个术语&#xff0c;它是指同时运行多个进程&#xff0c;这些进程可以…

【k8s】pod详解

一、Pod介绍 1、Pod的基础概念 Pod是kubernetes中最小的资源管理组件&#xff0c;Pod也是最小化运行容器化应用的资源对象&#xff0c;一个pod代表着集群中运行的一个进程。kubernetes中其它大多数组件都是围绕着pod来进行支持和扩展pod功能的。 例如&#xff0c;用于管理po…

构建强大的Web应用之Django详解

引言&#xff1a; Django是一个功能强大且灵活的Python Web框架&#xff0c;它提供了一套完整的工具和功能&#xff0c;帮助开发者快速构建高效的Web应用。本篇文章将带您逐步了解Django的基本概念和使用方法&#xff0c;并通过实际的代码案例&#xff0c;帮助您从零开始构建自…

Collction的List方法,list特有方法,遍历方式,迭代器选择

[to] list特有方法 //插入指定元素//list.add(1,"ddd");//System.out.println(list);//[aaa, ddd, bbb, ccc]//这个表示在一索引的位置插入ddd//他会把原来一索引位置的元素往后移动一位在添加//删除指定元素//String remove list.remove(1);//System.out.println(…

常用排序算法

目录 直接插入排序 希尔排序 ​编辑 选择排序 堆排序 冒泡排序 快速排序 hoare版 挖坑法 前后指针法 非递归 归并排序 非递归 计数排序 直接插入排序 直接插入排序跟依次模扑克牌一样&#xff0c;将最后一张牌依次与前面的牌比较&#xff0c;最后将牌插入到指定位…

fastadmin列表根据字段0或1显示否或是

在列表对应的js文件中加入如下代码 {field: principal,title: __(Principal),formatter:function(value){if (value 0) {return 否;} else if (value 1) {return 是;}},searchList: {1: __(Yes), 0: __(No)}}, 如上&#xff0c;根据字段principal的0或1&#xff0c;对应显示…