Vermeiden Sie, dass Android Lint sich über nicht übersetzte Zeichenfolgen beschwert

119

Kann angegeben werden, dass die Zeichenfolgen in einer Datei in den value-* Verzeichnissen absichtlich nicht in andere Sprachen übersetzt werden? Ich habe eine Reihe von Zeichenfolgen, die für alle Sprachen gleich sind und keine Übersetzung benötigen. Daher habe ich eine unlocalized-strings.xmlDatei im valuesVerzeichnis erstellt. Wenn Sie Android Lint ausführen, um nach Problemen zu suchen, wird immer wieder darauf hingewiesen, dass einige Übersetzungen fehlen. Ich möchte nicht Um diese Prüfung für das gesamte Projekt zu deaktivieren, möchte ich sie nur in einigen XML-Dateien deaktivieren. Ist dies möglich?

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

Wie kann diese definierte Region von unlokalisierte Strings?

Gianni Costanzi
quelle

Antworten:

159

Ich weiß nicht, wie ich die gesamte Datei ignorieren soll, aber Sie können dies Zeichenfolge für Zeichenfolge tun, indem Sie:

<string name="hello" translatable="false">hello</string>
Luis
quelle
1
Dies ergibt, dass nicht übersetzbare Ressourcen nur im Basiswert / Ordner definiert werden sollten.
anon58192932
2
Und das ist richtig. Wenn Sie nicht möchten, dass eine Zeichenfolge übersetzt wird, sollten Sie sie nur im "Basiswert / Ordner" definieren. Geben Sie die Zeichenfolge also nicht in den übersetzten Wert / Ordner ein.
Luis
1
Die Antwort von @CyrilLeroux ist umfassender und sollte als die richtige markiert werden, da hier die Option angezeigt wird, alle nicht übersetzbaren Zeichenfolgen in einer Datei abzulegen.
Yoel Gluschnaider
Dies funktioniert, aber ich denke nicht, dass dies der beste Weg ist, um das Problem zu lösen, indem eine tatsächlich übersetzbare Zeichenfolge als "nicht übersetzbar" markiert wird, nur um die Fehlermeldung zu unterdrücken. Wir entscheiden uns nur dafür, einige Zeichenfolgen vorerst nicht zu übersetzen. Das heißt aber nicht, dass sie nicht übersetzbar sind.
Zili FENG
Ich möchte einen String nur in einer Sprache einfügen und das ist die deutsche (De-) Sprache (nicht die Standardsprache Englisch). Ich habe es dort abgelegt und als ich versuchte, Build freizugeben, gab es mir einen Fehler. Was ist in diesem Fall zu tun?
Aanal Mehta
227

Es ist das ignoreAttribut des toolsNamespace in Ihrer Zeichenfolgendatei wie folgt:

<?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
quelle
<resources tools: ignore = "MissingTranslation"> gibt mir Fehler beim Parsen von XML: ungebundenes Präfix
anon58192932
5
Das funktioniert gut, aber ich musste gehen Project->Clean, um die Fehler endgültig zu beseitigen.
Xonya
Zumindest hat uns Eclipse nicht gezwungen, alles zu übersetzen, einschließlich ungerader Zeichenfolgenordner wie ids.xml und analyse.xml.
Androidcoder
2
Diese Antwort sollte akzeptiert werden, um alle Probleme in nur 2 Codezeilen zu lösen.
nhoxbypass
153

Hinzufügen zu build.gradle:

android {
     lintOptions {
        disable 'MissingTranslation'
    }
}
Giraffenlöwe
quelle
7
Die einzige praktikable Lösung für den Umgang mit den automatisch generierten Zeichenfolgenressourcen. Danke.
SqueezyMo
6
Nein, sollte es nicht, basierend auf der Frage: "Ich möchte diese Überprüfung nicht für das gesamte Projekt deaktivieren"
Yoel Gluschnaider
@ Giraffe Lion Du solltest dies als eine andere Frage posten und selbst beantworten. Danke für die Lösung, vorher musste ich es manuell deaktivieren.
Diljeet
1
Dies deaktivierte die gesamte Prüfung, die nach Möglichkeit vermieden werden sollte. Ich kann nicht verstehen, warum es so viele Stimmen hat.
Tasomaniac
23

Ich kenne drei Möglichkeiten:

So wenden Sie den Änderungswert Wert für Wert an: Legen Sie das Attribut translatable="false"für die <string>Definition fest:

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

Wenn Sie viele Ressourcen haben, die nicht übersetzt werden sollten, können Sie sie in einer Datei mit dem Namen donottranslate.xmlablegen. Lint berücksichtigt alle nicht übersetzbaren Ressourcen.

Eine andere Möglichkeit, die ich beim Durchsuchen von Hackers Keyboard-Projektquellen entdeckt habe :
Sie können das Präfix donottranslate-zu Ihrer Ressourcendatei hinzufügen . Wie im vorherigen Beispiel berücksichtigt Lint alle nicht übersetzbaren Ressourcen.
In Ihrem Fall können Sie ersetzen unlocalized-strings.xmldurch donottranslate-strings.xml. Es scheint zu funktionieren, aber ich habe keine Dokumentation für diesen Tipp gefunden.

Siehe: Android Tools-Projektsite: Nicht übersetzbare Zeichenfolgen

Cyril Leroux
quelle
Stimmt es, dass wir donottranlate.xmldas translatable="false"Tag nicht mehr hinzufügen müssen , wenn wir unseren String in die Datei einfügen?
Yuchen Zhong
Ja. Ich verwende in meinem gesamten Projekt die Dateien donottranslate-strings.xml. Funktioniert gut. Probieren Sie es aus, es ist sehr nützlich!
Cyril Leroux
12

Und hier ist eine Android Studio-Lösung zum Deaktivieren dieses schwerwiegenden Lint-Fehlers:

Geben Sie hier die Bildbeschreibung ein

Dzhuneyt
quelle
2
Es kann ein ärgerlicher Fehler sein, aber es könnte Sie retten, wenn Sie versehentlich vergessen, eine neue Zeichenfolge in eine Ihrer App-Sprachen zu übersetzen.
Elad Nava
2

Ich denke, was Sie brauchen, anstatt Flusen zu deaktivieren, ist, sie mit Attributen zu markieren

translatable="false"
Diego Torres Milano
quelle
2

Erstellen Sie eine Ressourcendatei mit einem Dateinamen, der mit " donottranslate " beginnt (z. B. donottranslate.xml , donottranslate_urls.xml usw.), und lint ignoriert seine Zeichenfolgen vollständig, wenn nach fehlenden Übersetzungen gesucht wird.

Kai
quelle
1

Wenn Sie die Flusenprüfung für fehlende Übersetzungen deaktivieren möchten, können Sie gehen

"Projekteigenschaften -> Android-Fusseleinstellungen -> Wählen Sie" Fehlende Übersetzung "-> Im Schweregrad zu ignorierende Option",

Ich hoffe, das hilft anderen, weil ich gerade auf dieses Problem stoße :)

hctang
quelle
2
Gibt es eine Möglichkeit, dies in Android Studio zu tun? Ich konnte keine Einstellungen für fusselfrei finden
adrian_88
1

Eine andere Möglichkeit, dies zu tun, besteht darin, Ihre Zeichenfolge mithilfe von resValueoder zur Gradle-Datei hinzuzufügen buildConfigField. Sowas in der Art:

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

Verwendung:

// buildConfigField
BuildConfig.APP_NAME1

// resValue
getString(R.string.app_name2)
Heloisasim
quelle
0

Um Warnungen in Android Studio zu vermeiden, öffnen Sie Einstellungen ==> Inspektionen und deaktivieren Sie "Unvollständige Übersetzungen". Der Gradle-Build wird dadurch jedoch nicht beeinflusst.

Kof
quelle