在Android中使用build.gradle将translatable = false添加到String资源?

时间:2017-08-23 14:48:28

标签: java android gradle

是否可以使用build.gradle将 我有 resValue' string',' app_name',name 但我想让它不可翻译。 (平移=假) 它真的可能吗?

2 个答案:

答案 0 :(得分:2)

Android 的gradle插件不支持 您无法在translatable=false中添加gradle file

答案 1 :(得分:0)

实现目标的方法很少。第一种方法是忽略缺失的翻译,因此您根本不需要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>

或使用gradle选项:

android {
     lintOptions {
        disable 'MissingTranslation'
    }
}

第三个选项是通过gradle替换任何源文件中的行来预处理资源:

在构建变体中:

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">替换为<string name="app_name" translatable="false">而不是原始来源,而是替换为合并(准备打包)来源