2017-08-23 121 views
2

是否有可能使用build.gradle將translatable = false添加到String資源?在Android中使用build.gradle將translatable = false添加到String資源中?

我有 resValue'string','app_name',名稱 但我想使它無法翻譯。 (translatable = false) 它實際上可能嗎?

+0

不在gradle文件中。你在你的strings.xml中這樣做。其中所有其他字符串中的應用程序名稱應該位於哪裏。 –

+1

不要提供翻譯價值 –

+0

@ModularSynth不,我想用BUILD.GRADLE做,而不是用xml文件。我知道如何編輯xmls。 –

回答

1

Android的gradle插件不支持這個。
您不能在您的gradle file中添加translatable=false

+0

謝謝。需要尋找另一種方式。 –

+0

仍然有解決方法,所以我不會說單詞'cannot' –

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">不在原始源,但在合併(準備包裝)來源