Évitez qu'Android Lint ne se plaint d'une chaîne non traduite

119

est-il possible de spécifier que les chaînes d'un fichier dans les value-* répertoires ne sont volontairement pas traduites dans d'autres langues? J'ai un tas de chaînes qui sont communes à toutes les langues et n'ont pas besoin de traduction, j'ai donc créé un unlocalized-strings.xmlfichier dans le valuesrépertoire. Exécuter Android Lint pour vérifier les problèmes ne cesse de dire que certaines traductions manquent .. Je ne veux pas pour désactiver cette vérification sur l'ensemble du projet, je voudrais le désactiver uniquement dans certains fichiers XML .. est-ce possible?

"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.

Comment définir cette région de chaînes non localisées ?

Gianni Costanzi
la source

Réponses:

159

Je ne sais pas comment ignorer tout le fichier, mais vous pouvez le faire chaîne par chaîne en utilisant:

<string name="hello" translatable="false">hello</string>
Luis
la source
1
cela donne «les ressources non traduisibles ne doivent être définies que dans le dossier / valeurs de base.
anon58192932
2
Et c'est correct. Si vous ne voulez pas qu'une chaîne soit traduite, vous ne devez la définir que dans "valeurs de base / dossier", ce qui signifie ne pas saisir la chaîne dans le dossier / valeurs traduites.
Luis
1
La réponse @CyrilLeroux est plus complète et doit être marquée comme la bonne car elle montre l'option de mettre toutes les chaînes non traduisibles dans un seul fichier.
Yoel Gluschnaider
Cela fonctionne mais je ne pense pas que ce soit le meilleur moyen de résoudre le problème en marquant une chaîne réellement traduisible "non traduisible" juste pour supprimer le message d'erreur. Nous choisissons simplement de ne pas traduire certaines chaînes pour le moment. Mais cela ne veut pas dire qu'ils ne sont pas traduisibles.
Zili FENG
Je veux mettre une chaîne dans une seule langue et c'est la langue allemande (pas l'anglais par défaut). Je l'ai mis là et quand j'essaye de sortir build, ça m'a donné une erreur. Que faire dans ce cas?
Aanal Mehta
228

C'est l' ignoreattribut de l' toolsespace de noms dans votre fichier de chaînes, comme suit:

<?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>
Adil Hussain
la source
<resources tools: ignore = "MissingTranslation"> me donne une erreur d'analyse XML: un préfixe non lié
anon58192932
5
Cela fonctionne bien mais j'ai dû aller Project->Cleansupprimer définitivement les erreurs.
xonya
Au moins, eclipse ne nous a pas obligés à tout traduire, y compris les dossiers de chaînes étranges comme ids.xml et analytics.xml.
Androidcoder
2
Cela devrait être une réponse acceptée pour résoudre tous les problèmes en seulement 2 lignes de code.
nhoxbypass
153

Ajouter à build.gradle:

android {
     lintOptions {
        disable 'MissingTranslation'
    }
}
Lion girafe
la source
7
La seule solution viable pour traiter les ressources de chaîne générées automatiquement.
SqueezyMo
6
non ça ne devrait pas, basé sur la question: "Je ne veux pas désactiver cette vérification sur tout le projet"
Yoel Gluschnaider
@Giraffe Lion, vous devriez poster ceci comme une question différente et y répondre vous-même, merci pour la solution, auparavant je devais la désactiver manuellement.
Diljeet
1
Cela a désactivé tout le contrôle qui devrait être évité si possible. Je ne peux pas comprendre pourquoi il a autant de voix.
tasomaniac
23

Il y a 3 façons dont je connais:

Pour appliquer la valeur de modification par valeur: Définissez l'attribut translatable="false"sur la <string>définition:

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

Si vous avez beaucoup de ressources qui ne devraient pas être traduites, vous pouvez les placer dans un fichier nommé donottranslate.xmlet lint les considérera toutes comme des ressources non traduisibles.

Une autre façon que j'ai découverte en parcourant les sources du projet Hackers Keyboard :
vous pouvez ajouter le préfixe donottranslate-à votre fichier de ressources. Comme dans l'exemple précédent, lint les considérera toutes comme des ressources non traduisibles.
Dans votre cas, vous pouvez remplacer unlocalized-strings.xmlpar donottranslate-strings.xml. Cela semble fonctionner, mais je n'ai trouvé aucune documentation pour cette astuce.

Voir: Site du projet Android Tools: Chaînes non traduisibles

Cyril Leroux
la source
Est-il vrai que si nous mettons notre chaîne dans le fichier donottranlate.xml, nous n'avons plus besoin d'ajouter la translatable="false"balise?
Yuchen Zhong
Oui. J'utilise des fichiers donottranslate-strings.xml dans tout mon projet. Fonctionne très bien. Essayez-le, c'est très utile!
Cyril Leroux
12

Et voici une solution Android Studio pour désactiver cette erreur fatale Lint:

entrez la description de l'image ici

Dzhuneyt
la source
2
Cela peut être une erreur ennuyeuse, mais cela pourrait vous sauver lorsque vous oubliez accidentellement de traduire une nouvelle chaîne dans l'une des langues de votre application.
Elad Nava
2

Je pense que ce dont vous avez besoin au lieu de désactiver les peluches, c'est de les marquer avec un attribut

translatable="false"
Diego Torres Milan
la source
2

Créez un fichier de ressources avec un nom de fichier commençant par " donottranslate " (par exemple donottranslate.xml , donottranslate_urls.xml , etc.), et lint ignorera complètement ses chaînes lors de la vérification des traductions manquantes.

Kai
la source
1

Si vous souhaitez désactiver la vérification des peluches en cas de traduction manquante, vous pouvez aller

"Propriétés du projet -> Préférences Android Lint -> Sélectionnez MissingTranslation -> Swtich To Ignore In Severity",

espère que cela aide les autres parce que je viens de rencontrer ce problème :)

hctang
la source
2
Existe-t-il un moyen de le faire dans Android Studio? Je n'ai pas pu trouver les paramètres liés à la charpie
adrian_88
1

Une autre façon de faire est d'ajouter votre chaîne au fichier gradle, en utilisant resValueou buildConfigField. Quelque chose comme ca:

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"
    }
}

Coutumes:

// buildConfigField
BuildConfig.APP_NAME1

// resValue
getString(R.string.app_name2)
Heloisasim
la source
0

Pour éviter les avertissements dans Android Studio, ouvrez Préférences ==> Inspections, décochez "Traductions incomplètes". Mais cela n'affectera pas la construction de Gradle.

Kof
la source