Avoid Lint жалуется на непереведенную строку


119

Можно ли указать, что строки в файле в 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.

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


Ответы:


159

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

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

1
это дает «непереводимые ресурсы должны быть определены только в папке base values ​​/.
anon58192932 05

2
И это правильно. Если вы не хотите, чтобы строка переводилась, вы должны определить ее только в «базовых значениях / папке», что означает, что не вводите строку в переведенные значения / папку.
Луис

1
Ответ @CyrilLeroux является более полным и должен быть отмечен как правильный, потому что он показывает возможность размещения всех непереводимых строк в одном файле.
Йоэль Глушнайдер

Это работает, но я не думаю, что это лучший способ решить проблему, пометив действительно переводимую строку как «не переводимую» просто для подавления сообщения об ошибке. Мы просто решили пока не переводить некоторые строки. Но это не значит, что их нельзя перевести.
Zili FENG

Я хочу поместить строку только на одном языке, и это немецкий (de) язык (а не английский по умолчанию). Я положил его туда, и когда я пытался выпустить сборку, у меня возникла ошибка. Что делать в этом случае?
Aanal Mehta

228

Это 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>

<resources tools: ignore = "MissingTranslation"> выдает ошибку при синтаксическом
анализе

5
Это работает хорошо, но мне пришлось пойти, чтобы Project->Cleanокончательно удалить ошибки.
xonya 02

По крайней мере, eclipse не заставлял нас переводить все, включая папки с нечетными строками, такие как ids.xml и analytics.xml.
Androidcoder

2
Это должен быть принятый ответ для решения всех проблем всего в 2 строчки кода.
nhoxbypass 06

153

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

android {
     lintOptions {
        disable 'MissingTranslation'
    }
}

7
Единственное работоспособное решение для работы с автоматически сгенерированными строковыми ресурсами. Спасибо.
SqueezyMo

6
нет, не должен, основываясь на вопросе: «Я не хочу отключать эту проверку для всего проекта»
Йоэль Глушнайдер

@Giraffe Lion, вы должны опубликовать это как другой вопрос и ответить на него сами. Спасибо за решение, раньше мне приходилось отключать его вручную.
Дилджит

1
Это отключило всю проверку, чего по возможности следует избегать. Я не могу понять, почему у него столько голосов.
tasomaniac

23

Я знаю 3 способа:

Чтобы применить значение модификации по значению: Установите атрибут 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. Кажется, это работает, но я не нашел документации по этому совету.

См .: Сайт проекта Android Tools: Непереводимые строки


Верно ли, что если мы поместим нашу строку в файл donottranlate.xml, нам больше не нужно будет добавлять translatable="false"тег?
Yuchen Zhong

Ага. Я использую файлы donottranslate-strings.xml во всех своих проектах. Работает отлично. Попробуйте, очень полезно!
Cyril Leroux

12

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

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


2
Это может быть досадной ошибкой, но она может спасти вас, если вы случайно забудете перевести новую строку на один из языков приложения.
Элад Нава


2

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


1

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

«Свойства проекта -> Настройки Android Lint -> Выберите MissingTranslation -> Swtich игнорировать по степени серьезности»,

надеюсь, что это поможет другим, потому что я просто столкнулся с этой проблемой :)


2
Есть ли способ сделать это в Android Studio? Я не смог найти настройки, относящиеся к lint
Адриан Л.

1

Другой способ сделать это - добавить строку в файл 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)

0

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


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.