Android Lint: как игнорировать предупреждения об отсутствии перевода в строковом файле региональной локали, который намеренно переопределяет только некоторые переводы по умолчанию?

Можно ли перевести некоторые строки, но не все, в отдельный файл ресурсов, чтобы Линт не жаловался на MissingTranslation?

Например: все строки моего приложения находятся в res / values ​​/ strings.xml. Одна из струн -

<string name="postal_code">Postal Code</string>

Поскольку в США «почтовый индекс» обычно называется «почтовый индекс», я хочу добавить еще один ресурс res / values-en-rUS / strings.xml с содержимым:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="postal_code">Zip Code</string>
</resources>

Однако Lint жалуется на другие строки в values ​​/ strings.xml, но не на values-en-rUS / strings.xml.

Я понимаю, что вы можете подавить предупреждения, указав tools:ignore в values ​​/ strings.xml. Но это нежелательно, потому что предупреждение Lint действительно полезно при переводе на другой язык.

Вместо этого, можно ли подавить предупреждение в файле values-en-rUS / strings.xml, например, указание Lint не использовать этот файл в качестве критерия при поиске отсутствующих переводов?


person Steveo    schedule 14.08.2013    source источник
comment
Связанный / почти обман: Игнорирование Android Lint «MissingTranslation» проверка частичных переводов   -  person blahdiblah    schedule 29.04.2015
comment
Отметьте ответ @blahdiblah как принятый, потому что это действительно правильный ответ.   -  person Vadim Kotov    schedule 26.07.2019


Ответы (6)


Хороший способ отключить проверку MissingTranslations - добавить эту опцию в build.gradle файл для конкретного модуля.

android {

    lintOptions{
        disable 'MissingTranslation'
    }

    //other build tags
}

Если строки отсутствуют в файле Strings для конкретной локали, он будет брать строки из файла по умолчанию, который обычно strings.xml.

person Nicks    schedule 20.09.2015
comment
Обратите внимание, что при этом будут отключены все предупреждения / ошибки MissingTranslation, поэтому вы не получите ложных срабатываний для en-rUS намеренно частичного переопределения en значений по умолчанию, но вы также не получите истинных срабатываний, если в какой-либо другой локали отсутствует перевод. - person blahdiblah; 07.12.2017
comment
Я определенно нашел ваш ответ полезным, однако, возможно, вам интересно игнорировать переводы на разных уровнях (игнорировать их все, игнорировать только строки в данном файле или игнорировать только одну строку). Взгляните сюда: stackoverflow.com/a/53206467/973919 - person xarlymg89; 14.03.2019

Я нашел лучшее решение в соответствии с этим ответом: https://stackoverflow.com/a/13797364/190309

Просто добавьте ignore="MissingTranslation" в свой string.xml, например:

<?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>
person anticafe    schedule 01.02.2015
comment
OP специально попросил решение, которое игнорирует только некоторые отсутствующие переводы. Это решение применимо ко всему в данном файле. - person String; 27.02.2015

Lint поддерживает частичные региональные переводы, но ему необходимо знать, на каком языке используются строки по умолчанию. Таким образом, он может отличить частичный региональный перевод от отсутствующих переводов в другой локали.

Чтобы указать языковой стандарт в values/strings.xml:

<resources xmlns:tools="http://schemas.android.com/tools" tools:locale="en">

Цитата из инструмента командной строки lint при запуске lint --show:

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 tell lint (and other tools) which language is the default language
in your res/values/ folder by specifying tools:locale="languageCode" for
the root <resources> element in your resource file. (The tools prefix
refers to the namespace declaration http://schemas.android.com/tools.)

Источник: https://android.googlesource.com/platform/tools/base/+/master/lint/libs/lint-checks/src/main/java/com/android/tools/lint/checks./TranslationDetector.java#88

Добавьте спецификацию локали в свой языковой файл по умолчанию, и вы не должны получить эту ошибку для en-rUS, но все равно будете получать информацию о любых других недостающих переводах.

person blahdiblah    schedule 28.04.2015
comment
ваш ответ имеет смысл, но он не работает со мной - у меня есть файл строк по умолчанию values ​​/ strings.xml, и я перевожу некоторые строки в en-rGB. Я помещаю их в файл values-en-rUS / strings.xml - Я добавлены инструменты: locale = en в values ​​/ strings.xml, но по-прежнему возникает ошибка, что некоторые строки не переводятся в en - person Ahmed Hashem; 07.04.2019
comment
Я пробую это, и на самом деле это работает. Если вы запустите задачу lint, после добавления tools: locale = en предупреждения MissingTranslation не появятся. Но в Android Studio 3.5.1 красные линии все равно будут. Так что, вероятно, это ошибка Android Studio. Этот ответ следует пометить как правильный. - person michgauz; 14.10.2019
comment
Я создал билет в Google: Issuesetracker.google.com/issues/142590628 - person michgauz; 15.10.2019
comment
@michgauz Я видел, что вы держали ребята из Google, чтобы исправить это, даже когда они не хотели этого, хорошо вам и спасибо! - person Matt Jenje; 21.07.2020

Кажется, на этот вопрос еще нет ответа, поэтому я покажу вам одно решение:

В вашем XML-файле DEFAULT вы можете определить строки, которые не нуждаются в переводе, например:

<string name="developer" translatable="false">Developer Name</string>

Эту строку не нужно переводить, и lint тоже не будет жаловаться на это ...

person prom85    schedule 17.06.2016
comment
Это переключит проблему на предупреждения о переводе непереводимых строк в локали, которые должны предоставлять другой ресурс. - person blahdiblah; 07.12.2017

Это ответ швейцарского ножа, поэтому вы можете игнорировать сообщение об отсутствующем переводе в зависимости от того, в какой ситуации вы находитесь:

  • Игнорировать все MissingTranslation сообщение:

    Отредактируйте свой build.gradle файл:

    android {
        lintOptions{
            disable 'MissingTranslation'
        }
    }
    
  • Игнорировать все MissingTranslation сообщения в конкретном resources.xml файле:

    <?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>
    
  • Игнорировать MissingTranslation сообщение только для одной строки:

    <string name="developer" translatable="false">Developer Name</string>
    
person xarlymg89    schedule 08.11.2018
comment
Три способа справиться с предупреждением об отсутствии перевода - person mukesh; 15.01.2020

Если вы используете Eclipse, обратите внимание на кнопки панели инструментов в представлении предупреждений Lint. Один из них называется «Игнорировать в файле». Это должно помочь, но только если Lint приписывает ошибку вашему файлу "US". Эта кнопка просто изменяет файл lint.xml в вашем проекте, так что вы можете легко изучить (и отменить) это.

Более подробная информация о подавлении этого файла находится на http://tools.android.com/tips/lint/suppressing-lint-warnings

person Bananeweizen    schedule 15.08.2013