android 错误中英互译,Android 中英文切换及遇到的问题

Android 中英文切换及遇到的问题

背景:近期由于项目上的需求接受到了一个中英文切换需求。只需要在切换中英系统语言的时候改变app的名称为中文或英文就可以。关于如何实现这些可以参考如下文章:

实现中英文切换的方法:

Android app切换语言、国际化的纠缠: https://blog.csdn.net/qq_36255612/article/details/79651021

android开发中英文切换:https://blog.csdn.net/sinat_25001099/article/details/50663265

Android 7.0以上版本,如何实现应用内语言切换:https://www.jianshu.com/p/32ff13db1f0d

遇到的问题:

在已经添加了相应英文资源的状况下,测试发现。切换至英文语言后app的名称还是没有改变,打开apk文件后发现,如下图:

fbfb56dfeb28b437e6beee4db76a9215.png

通过分析发现应该是gradle打包apk的时候没有将相应的资源打包进来,查看gradle配置文件发现。

defaultConfig {

applicationId "com.****"

minSdkVersion and.minSdkVersion

targetSdkVersion and.targetSdkVersion

versionCode and.versionCode

versionName and.versionName

multiDexEnabled true

vectorDrawables.useSupportLibrary = true

javaCompileOptions {

annotationProcessorOptions {

arguments = [moduleName: project.getName()]

}

}

ndk {

abiFilters 'armeabi', 'x86'

}

resConfigs "zh"

}

将其修改为 resConfigs “zh”,“en-rUS”

再次打包发现依然没有对应的英文资源。

再次排查项目配置发现,在渠道的配置文件中找到:

def doFlavor(NamedDomainObjectContainerproductFlavors, Object it, String channel, boolean isSetFlavor) {

//创建渠道

ProductFlavor flavor = productFlavors.create(channel)

//lib中不能设置ApplicationId

if (isSetFlavor) {

//设置ApplicationId(包名)

String applicationId = it.applicationId

if (applicationId != null && applicationId.trim().length() > 0) {

flavor.applicationId = applicationId

}

//设置ApplicationId后缀,

String idSuffix = it.applicationidSuffix

if (idSuffix != null && idSuffix.trim().length() > 0) {

flavor.applicationIdSuffix = idSuffix

}

}

def list

if (it.abiFilters == null) {

list = new ArrayList(1)

list.add("armeabi")

} else {

def ABIs = it.abiFilters.split(",")

if (ABIs != null && ABIs.length > 0) {

list = Arrays.asList(ABIs)// new ArrayList(2)

} else {

list = new ArrayList(1)

list.add("armeabi")

}

}

// 特定渠道配置需要加入的Abi 例如armeabi,armeabi-v7a,arm64-v8a,x86,x86_64,mips,mips64

flavor.ndk.setAbiFilters(list)

println("doFlavor-------->abi = " + list)

flavor.dimension = it.dimension

//设置小版本号

String versionSuffix = it.minorVersion

if (versionSuffix != null && versionSuffix.trim().length() > 0) {

flavor.versionNameSuffix = versionSuffix

}

//设置自定义BuildConfig属性

def fields = getConfigFields(it.buildConfigFields)

if (fields != null) {

flavor.addBuildConfigFields(fields)

}

//清单文件配置

flavor.manifestPlaceholders = it.manifestPlaceholders

//剔除不需要资源---------------此处只保留了配置过的资源

def res = it.resConfig

if (res != null && res.size() > 0) {

flavor.resConfigs(res)

}

//渠道分辨率

def density = it.density

if (density != null) {

GenerateValueFilesPlugin.generateDensity(channel, density)

}

}

最后通过在渠道配置的文件中添加了resConfig,如下图:

b39dac748dd986c7ba10a56696fabf27.png

再次打包后的结果:如下

0ce6cf9c6a08b0828a4cb983750076e4.png

总结:出现资源打不进去的情况极有可能就Gradle中的配置原因。需要仔细查看Gradle配置文件中是否忽略某些资源。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值