Избегайте, чтобы Android Lint жаловался на непереведенную строку

Можно ли указать, что строки в файле в каталогах value-* намеренно не переведены на другие языки? У меня есть набор строк, которые являются общими для всех языков и не нуждаются в переводе, поэтому я создал файл unlocalized-strings.xml в каталоге values . Запуск Android Lint для проверки проблем продолжает говорить о том, что некоторые переводы отсутствуют .. Я не хочу отключать эту проверку для всего проекта, я бы хотел отключить его только в некоторых файлах XML .. это возможно?

 "title_widget_updater_service" is not translated in de, en, en-rUS, it Issue: Checks for incomplete translations where not all strings are translated Id: MissingTranslation If an application has more than one locale, then all the strings declared in one language should also be translated in all other languages. By default this detector allows regions of a language to just provide a subset of the strings and fall back to the standard language strings. You can require all regions to provide a full translation by setting the environment variable ANDROID_LINT_COMPLETE_REGIONS. 

Как определить эту область нелокализованных строк?

Я не знаю, как игнорировать весь файл, но вы можете сделать это string by string, используя:

 <string name="hello" translatable="false">hello</string> 

удачи

Это атрибут ignore пространства имен tools в файле строк, как показано ниже:

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

Добавить в build.gradle :

 android { lintOptions { disable 'MissingTranslation' } } 

Есть три способа, которыми я знаю:

Чтобы применить значение модификации по значению: Установите атрибут translatable="false" в определении <string> :

 <string name="account_setup_imap" translatable="false">IMAP</string> 

Если у вас много ресурсов, которые не нужно переводить, вы можете поместить их в файл с именем donottranslate.xml и lint рассмотрит все непереводимые ресурсы.

Другой способ, который я обнаружил при просмотре источников проекта Hackers Keyboard :
Вы можете добавить префикс donottranslate- в свой файл ресурсов. Как и в предыдущем примере, lint рассмотрит все непереводимые ресурсы.
В вашем случае вы можете заменить unlocalized-strings.xml donottranslate-strings.xml на donottranslate-strings.xml . Кажется, что это работает, но я не нашел никакой документации для этого совета.

Смотрите: Сайт проекта Android Tools: Non-translatable Strings

И вот решение Android Studio для отключения этой фатальной ошибки Lint:

Введите описание изображения здесь

Я думаю, что вам нужно вместо отключения lint отметить их атрибутом

 translatable="false" 

Если вы хотите повернуть проверку линта на отсутствующий перевод, вы можете пойти

«Свойства проекта -> Настройки Android Lint -> Выберите MissingTranslation -> Swtich To Ignore In Severity»,

Надеется, что это помогает другим, потому что я просто сталкиваюсь с этой проблемой 🙂

Создайте файл ресурсов с именем файла, начинающимся с « donottranslate » (например, donottranslate.xml , donottranslate_urls.xml и т. Д.), И lint полностью игнорирует свои строки при проверке отсутствующих переводов.

Чтобы избежать предупреждений в Android Studio, откройте «Настройки»> «Инспекции», снимите флажок «Неполные переводы». Но это не повлияет на Gradle build.

Другой способ сделать это – добавить строку в файл gradle, используя resValue или buildConfigField . Что-то вроде того:

 buildTypes { debug { buildConfigField "string", "app_name1", "App Name" resValue "string", "app_name2", "App Name" } release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' buildConfigField "string", "app_name1", "App Name" resValue "string", "app_name2", "App Name" } } 

Обычаи:

 // buildConfigField BuildConfig.APP_NAME1 // resValue getString(R.string.app_name2)