Уникайте, коли Android 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
це дає 'неперекладні ресурси, слід визначати лише в базових значеннях / папці.
anon58192932

2
І це правильно. Якщо ви не хочете, щоб рядок був перекладений, вам слід визначити його лише у "базових значеннях / папці", що означає не вводити рядок у перекладені значення / папку.
Луїс

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

Це працює, але я не думаю, що це найкращий спосіб вирішити проблему, позначивши фактично перекладається рядок "не перекладається" лише для придушення повідомлення про помилку. Ми просто вирішили поки не перекладати деякі рядки. Але це не означає, що вони не перекладаються.
Zili FENG

Я хочу поставити рядок лише однією мовою, і це німецька (де) мова (не англійська за замовчуванням). Я помістив його туди, і коли я намагаюся звільнити, він створив помилку. Що робити в цьому випадку?
Аанал ​​Мехта

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>

<ресурси інструментів: ignore = "MissingTranslation"> дає мені помилку Парсинг XML:
прив'язка з

5
Це працює добре, але мені довелося йти, щоб Project->Cleanостаточно усунути помилки.
xonya

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

2
Це слід прийняти відповіддю для вирішення всіх питань всього за 2 рядки коду.
nhoxbypass

153

Додати до build.gradle:

android {
     lintOptions {
        disable 'MissingTranslation'
    }
}

7
Єдине дієве рішення для роботи з автоматично створеними рядковими ресурсами.
SqueezyMo

6
ні, не слід, грунтуючись на питанні: "Я не хочу відключати цю перевірку у всьому проекті"
Yoel Gluschnaider

@Giraffe Lion, ви повинні опублікувати це як інше питання і відповісти на нього самостійно. Дякую за рішення, раніше мені довелося відключити його вручну.
Ділєє

1
Це відключило всю перевірку, якої слід уникати, якщо це можливо. Я не можу зрозуміти, чому він має стільки голосів.
тасоман

23

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

Щоб застосувати значення модифікації за значенням: Встановіть атрибут translatable="false"для <string>визначення:

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

Якщо у вас є багато ресурсів, які не слід перекладати, ви можете розмістити їх у файлі з назвою, donottranslate.xmlа lint вважатиме всі вони непередаваними ресурсами.

Ще один спосіб, який я виявив під час перегляду джерел проекту Hackers Keyboard :
Ви можете додати префікс donottranslate-у файл ресурсу. Як і в попередньому прикладі, обличчя вважатиме всі вони неперекладними ресурсами.
У вашому випадку ви можете замінити unlocalized-strings.xmlна donottranslate-strings.xml. Здається, це працює, але я не знайшов жодної документації на цю пораду.

Дивіться: Сайт проекту Android Tools: Строки, що не перекладаються


Це правда, що якщо ми помістимо наш рядок у файл donottranlate.xml, нам більше не потрібно додавати translatable="false"тег?
Ючен Чжун

Так. Я використовую файли donottranslate-strings.xml у всьому своєму проекті. Добре працює. Спробуйте, це дуже корисно!
Кирило Леру

12

А ось Android Studio рішення для відключення цієї фатальної помилки Lint:

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


2
Це може набридливо помилитися, але це може врятувати вас, коли ви випадково забудете перекласти нову рядок на одну з мов вашого додатка.
Elad Nava


2

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


1

Якщо ви хочете, щоб повернути перевірку про відсутність перекладу, ви можете піти

"Властивості проекту -> Налаштування Android Lint -> Виберіть MissingTranslation -> Swtich, щоб ігнорувати серйозність",

сподівається, що це допомагає іншим викликати я просто стикаюся з цією проблемою :)


2
Чи є спосіб це зробити в Android Studio? Не вдалося знайти налаштування, пов’язані з lint
adrian_88

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.