在Android中使用build.gradle将translateable=false添加到字符串资源



是否可以使用build.gradle将translateable=false添加到String资源?

我有resValue"string","app_name",name但我想让它不可翻译。(可翻译=错误)这真的可能吗?

Android的gradle插件不支持这一点
您不能在gradle file中添加translatable=false

有几种方法可以实现您想要的。Firs 2种方法是忽略丢失的翻译,因此根本不需要translatable属性。您可以使用XML:使其忽略

<?xml version="1.0" encoding="utf-8"?>
<resources
xmlns:tools="http://schemas.android.com/tools"
tools:ignore="MissingTranslation" > <!--this line-->
<!-- your strings here; no need now for the translatable attribute -->
</resources>

或使用渐变选项:

android {
lintOptions {
disable 'MissingTranslation'
}
}

第三种选择是通过渐变替换任何源文件中的行来预处理资源:

内部构建变体:

applicationVariants.all { variant -> 
if (variant.name.toLowerCase().contains("nuset")) {
variant.mergeResources.doLast {
def dir = new File("${buildDir}/intermediates/res/merged/${variant.dirName}")
println("Resources" + dir)
dir.eachFileRecurse { file ->
if (file.name.endsWith(".xml")) {
String content = file.getText('UTF-8')
if (content != null && content.contains('<string name="app_name">')) {
println("Replacing app name in " + file)
content = content.replace('<string name="app_name">', '<string name="app_name" translatable="false">')
file.write(content, 'UTF-8')
}
}
}
}
}
}

因此,它将用<string name="app_name" translatable="false">替换所有出现的<string name="app_name">,而不是在原始源中,而是在合并的(准备打包的)源中

相关内容

最新更新