Die Standardsprache in Android Studio kann nicht festgelegt werden

8

Ich erhalte in Android Studio Warnungen vor nicht übersetzten Zeichenfolgen - es wird mir mitgeteilt, dass sie nicht ins Englische übersetzt wurden. Dies scheint daran zu liegen, dass ich einen Ressourcenordner "en-rGB" habe. Ich habe jedoch versucht, die Anweisungen in Flusen zu befolgen, um die Standardsprache anzugeben, aber dies hat nicht funktioniert.

Ich habe die folgenden strings.xml-Dateien:

values/strings.xml::

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

    <string name="string1">Howdy</string>
    <string name="string2">Howdy</string>
</resources>

values-en-rGB/strings.xml::

<resources>

    <string name="string1">Hello</string>
</resources>

values-fr/strings.xml::

<resources>

    <string name="string1">Bonjour</string>
    <string name="string2">Bonjour</string>
</resources>

values-fr-rCA/strings.xml::

<resources>

    <string name="string2">Bonjour</string>
</resources>

Erwartetes Ergebnis: Es sollten keine Warnungen angezeigt werden. Beide Zeichenfolgen werden sowohl in Englisch als auch in Französisch übersetzt

Tatsächliches Ergebnis: Lint warnt vor string2 und sagt, dass es nicht ins Englische übersetzt wurde.

Beachten Sie, dass ich fr-rCA aufgenommen habe, um zu zeigen, dass es sich nicht um eine regionale Sache handelt. Es ist froh, dass es nicht ins Französische übersetzt werden muss, solange es ins "unregionierte" Französisch übersetzt wird. In diesem Fall wird nicht vor string1 gewarnt, obwohl es nicht ins Französisch-Kanadische übersetzt wurde, da es bereits ins Französische übersetzt wurde.

Ich kann den Hauptressourcenordner nicht in Englisch ( values-en) ändern , da dies zu Fehlern führt, dass keine Standardressourcen vorhanden sind. Was wahr ist.

Ich möchte die Warnung im Allgemeinen nicht unterdrücken, da ich beabsichtige, weitere Sprachen hinzuzufügen, und ich möchte, dass die Warnung für Zeichenfolgen angezeigt wird, die nicht in andere von mir aufgenommene Sprachen übersetzt wurden.

Was ich suche, ist der richtige Weg, um Lint über die Standardsprache zu informieren. Ich habe es gemäß den Anweisungen für die Warnung "Unvollständige Übersetzung" getan:

Sie können lint (und anderen Tools) mitteilen, welche Sprache die Standardsprache in Ihrem Ordner res / values ​​/ ist, indem Sie tools angeben: locale = "languageCode" für das Stammelement in Ihrer Ressourcendatei. (Das Tools-Präfix bezieht sich auf die Namespace-Deklaration http://schemas.android.com/tools .)

Das scheint aber nicht zu funktionieren. Mache ich es falsch oder ist das ein Problem mit Flusen?

richjhart
quelle
Es ist seltsam, dass Sie zwei Standardzeichenfolgen haben, aber nur eine von jeder Zeichenfolge in eine andere Regionssprache übersetzt wird. Ich denke, der Fehler wird dadurch ausgelöst, dass in Ihren en-rGB-Werten kein string2 hinzugefügt wurde.
C.Schone
1
Ich stimme dem zu, was @ C.Schone gesagt hat. Kopieren Sie einfach die Standardzeichenfolge2 nach en-rGB, da sie am Ende gleich sind. Dies sollte Ihre Warnung auslösen. Der beste Weg für Übersetzungen ist, dass alle strings.xmlDateien standardmäßig alle Einträge enthalten values/strings.xml, unabhängig davon, ob der Wert übersetzt werden muss oder nicht.
Ahasbini
1
@ahasbini Kopieren Sie einfach die Standardzeichenfolge2 nach en-rGB, da sie am Ende gleich sind. Dies ist hier nur einfach, da nur eine Zeichenfolge und nur eine andere Sprache dies benötigen. Stellen Sie sich 100 Zeichenfolgen und 20 Sprachen vor
Tim
Imho, ich würde das immer noch mit einem Diff-Tool machen. Da schließlich alle Einträge in allen Zeichenfolgendateien vorhanden sein müssen, würde ich die Einträge in allen Dateien nach Namen (nicht nach Wert) sortieren und dann mit einem Diff-Tool sowohl die Standarddatei als auch die sprachspezifische Datei haben Öffnen Sie, um fehlende Einträge zu finden, und kopieren Sie sie mit den Standardwerten. Man könnte auch einen kleinen Code schreiben, um dies zu tun, aber ich würde dies nur einmal betrachten und daher würde ich es mit einem handelsüblichen Diff-Tool wie WinMerge oder anderen
tun
Alle Einträge müssen in allen Zeichenfolgendateien vorhanden sein, nur die Standarddatei muss alle Zeichenfolgen enthalten
Tim

Antworten:

6

Es ist ein Fehler: https://issuetracker.google.com/issues/142590628

Ich habe einen Hotfix für Sie: Automatisch values/strings.xmlin values-enOrdner kopieren

1.values-en Ordner erstellen

2. Fügen Sie es einapp/build.gradle

task copyEnResource {
    copy {
        from ('src/main/res/values/strings.xml')
        into ('src/main/res/values-en/')
    }
}

preBuild.dependsOn copyEnResource

Demo:

Übersetzung Android Studio Probleme

duongdt3
quelle
Danke, ich werde es versuchen. Es ist ein bisschen klobig, aber solange es automatisiert ist, sollte es wohl kein allzu großes Problem mit der Wartbarkeit sein
richjhart
Endlich habe
ich