Wie lokalisiere ich eine Zeichenfolge in der iOS-Datei info.plist?

259

Wie Sie vielleicht wissen, benötigt iOS 8 den Schlüssel NSLocationWhenInUseUsageDescription, um den Standort des Benutzers zu verwenden. Ich habe diesen Schlüssel und einige allgemeine Informationen in meine Info-Liste aufgenommen. Geben Sie hier die Bildbeschreibung ein

Wie kann ich eine Übersetzungszeichenfolge in der plist-Datei verwenden?

- Update -

Ich habe bereits eine lokalisierbare Zeichenfolge. Ich frage mich nur, ob ich so etwas wie NSLocalizedString (MYSTRING, nil) in der Plist-Zeichenfolge verwenden kann. Ich weiß, dass ich mehrere Dateien von info.plist zur Lokalisierung erstellen kann, aber ich habe mich gefragt, ob es einen einfacheren Weg gibt.

Soheil
quelle
Haben Sie das jemals herausgefunden? Ich habe Probleme, NSLocationWhenInUseUsageDescription auch zu lokalisieren.
Oliver Pearmain

Antworten:

490

Sie sollten InfoPlist.stringsDatei verwenden, um Werte von zu lokalisieren Info.plist. Gehen Sie dazu zu File->New->File, wählen Sie Strings Fileunter der ResourceRegisterkarte iOS, benennen Sie es InfoPlistund erstellen Sie. Öffnen Info.plistSie die Werte, die Sie lokalisieren möchten, und fügen Sie sie ein:

NSLocationWhenInUseUsageDescription = "Description of this";

Jetzt können Sie InfoPlist.stringsDateien mit Übersetzungen lokalisieren . Viel Glück!

BEARBEITEN:

Wählen Sie die Lokalisierungsoptionen aus oder aktivieren Sie bei Bedarf die Lokalisierung.

rechter Editor

Sie sollten die Datei auch im linken Editor sehen können.

linker Editor

BEARBEITEN:

Hier ist die offizielle Dokumentation zur Info.plistSchlüssellokalisierung.

Credits zu Marco , vielen Dank für die Aufnahme der Bilder in dieser Antwort!

Fahri Azimov
quelle
15
Müssen Sie nach dem Erstellen der Zeichenfolgendatei den Schlüssel auch in die Datei Info.plist aufnehmen, oder ist das Löschen von dort sicher?
Rounak
11
Tipp: Verwenden Sie genau den Namen "InfoPlist.strings" und sonst nichts. Zum Beispiel wurde meine ursprüngliche Infoplist-Datei etwas anderes benannt, aber ich musste diesen Namen genau verwenden, damit sie funktioniert.
Sjoerd Perfors
22
Beim Testen der Lokalisierungen auf dem Simulator. Ich musste die Sprache im Simulator selbst ändern, nicht nur die Sprache im xcode-Ziel. Nur eine Warnung für alle anderen.
John Webb
10
die korrekte Verwendung ist keyname = "Ihr Text"; Beispiel: NSLocationWhenInUseUsageDescription = "Ihr Text"
Magurizio
10
Achtung: Der Schlüssel in dieser Datei sollte kein Anführungszeichen haben, was sich von der normalen Lokalisierung unterscheidet. zB: NSMicrophoneUsageDescription = "Ihre Beschreibung";
Yuchao Zhou
33

All das hat bei mir nicht funktioniert (XCode 7.3), daher habe ich die Apple-Referenz gelesen und es ist viel einfacher als oben beschrieben. Laut Apple:

Lokalisierte Werte werden nicht in der Datei Info.plist selbst gespeichert. Stattdessen speichern Sie die Werte für eine bestimmte Lokalisierung in einer Zeichenfolgendatei mit dem Namen InfoPlist.strings. Sie legen diese Datei in demselben sprachspezifischen Projektverzeichnis ab, in dem Sie andere Ressourcen für dieselbe Lokalisierung speichern.

Dementsprechend habe ich eine Zeichenfolgendatei mit dem Namen InfoPlist.strings erstellt und im Ordner xx.lproj der Sprache "xx" abgelegt (und dem Projekt über Datei-> Dateien hinzufügen zu ... hinzugefügt). Das ist es. Der Schlüssel "Lokalisierte Ressourcen können gemischt werden" = YES ist nicht erforderlich, und InfoPlist.strings in base.lproj oder en.lproj sind nicht erforderlich.

Die Anwendung verwendet den Schlüsselwert Info.plist als Standardwert, wenn in der sprachspezifischen Datei kein Schlüssel gefunden werden kann. Daher habe ich meinen englischen Wert in die Datei Info.plist und den übersetzten Wert in die sprachspezifische Datei eingefügt, getestet und alles funktioniert.

Insbesondere ist es nicht erforderlich, die InfoPlist.strings zu lokalisieren (wodurch eine Version der Datei in base.lproj, en.lroj und xx.lproj erstellt wird), und in meinem Fall hat dies nicht funktioniert.

Zvi
quelle
2
Warum wurde der Link zum entsprechenden Dokument nicht eingefügt?
Jurasic
3
Hier der Link zur relevanten Seite des Apple-Dokuments, falls jemand interessiert ist: developer.apple.com/library/archive/documentation/General/…
biegen Sie den
und wie entscheiden wir das xx? Zum Beispiel für Englisch kann es en, En, Eng, Englisch usw. sein? Entschuldigung, wenn es eine dumme Frage ist, weil ich ein Anfänger bin
Awais Nasir
Ihre Antwort hat für mich funktioniert, mit Ausnahme des Fallback-Sprachszenarios. Die App erhält die Fallback-Sprache immer in der zuvor verwendeten Sprache und nicht in Englisch. Mein englischer Wert ist jedoch in der Datei Info.plist vorhanden. Ich habe auch base.lproj ausprobiert
Awais Nasir
19

Wenn etwas nicht funktioniert, stellen Sie sicher, dass Sie Folgendes hinzugefügt haben:

"Lokalisierte Ressourcen können gemischt werden" = JA

in die info.plist. In meinem Fall wurden die Dateien InfoPlist.strings einfach ignoriert.

tuvok
quelle
15

Tipps

  1. Denken Sie daran, dass der iOS-Simulator standardmäßig Ihre Systemsprache ausnutzt. Bitte ändern Sie auch die Sprache (und Region) in der iOS-Simulator-Einstellung, um Ihre Übersetzungen zu testen.

  2. Die Lokalisierungszeichenfolge (siehe Apple-Dokumente hier ) sollte lauten

    NSLocationWhenInUseUsageDescription = "Description of this";

    und nicht (mit Zitat "...")

    "NSLocationWhenInUseUsageDescription" = "Description of this";
Giuseppe Beccari
quelle
Wertvolle Ergänzungen, aber ich denke, dies sollte ein Kommentar unter der jeweiligen Antwort sein, keine neue Antwort. Beachten Sie auch, dass "363" keine Post-ID ist, sondern die Anzahl der Stimmen, die die Antwort hat (die Anzahl hat sich seitdem geändert).
John J. Camilleri
7
Ich habe nicht den Ruf, dort einen Kommentar hinzuzufügen.
Giuseppe Beccari
Es spielt keine Rolle, ob Sie Anführungszeichen "..." um den Schlüssel verwenden, z. B.: ( "NSLocationWhenInUseUsageDescription"="description"Ist gültig). Es kann mit oder ohne sein.
mluisbrown
12

Ich würde wärmstens empfehlen, die Handbücher von Apple zu lesen und die hier aufgeführten WWDC-Ressourcen anzuzeigen: Themen zur Internationalisierung und Lokalisierung

Um Ihre Frage gezielt zu beantworten, können Sie beim Hinzufügen einer neuen Sprache zu Ihrem Projekt Geben Sie hier die Bildbeschreibung einauswählen, welche InfoPlist-Dateien aufgenommen werden sollen (wenn Sie mehrere Ziele haben, verfügen Sie über mehrere Info-Plist-Dateien). Alles, was Sie tun müssen, um den folgenden Bildschirm zu erhalten, ist das + unter Lokalisierungen zu drücken und eine neue Sprache auszuwählen, für die Unterstützung hinzugefügt werden soll. Geben Sie hier die Bildbeschreibung ein

Sobald Sie hinzugefügt haben, werden die erforderlichen Zeichenfolgendateien in den entsprechenden lproj-Verzeichnissen für die angegebene Sprache erstellt.

--BEARBEITEN--

Um ganz klar zu sein, tauscht iOS die Zeichenfolge für Ihre Plist-Datei basierend auf der aktuell ausgewählten Sprache des Benutzers aus, wobei der Schlüssel des Plist-Eintrags als Schlüssel in der lokalisierten Zeichenfolgendatei verwendet wird.

Matt S.
quelle
3
Das Übersetzen der gesamten Liste für nur einen Schlüssel ist ein Overkill. Weitere Informationen finden Sie hier: bit.ly/1yBUTru
RGML
2
Für XCode 9 trifft dies einfach nicht zu. Beim Hinzufügen einer neuen Sprache wird nie nach einer Plist-Lokalisierung gefragt.
Tom
Ich muss das für Xcode 9 untersuchen - hatte noch keine Gelegenheit, den neuen Xcode zu testen.
Matt S.
11

Schritt für Schritt Info.plist lokalisieren:

  1. Suchen Sie im Xcode den Ordner Ressourcen (befindet sich im Stammverzeichnis)
  2. Wählen Sie den Ordner Ressourcen
  3. Drücken Sie dann das Hauptmenü Datei-> Neu-> Datei ...
  4. Wählen Sie im Abschnitt "Ressource" die Zeichenfolgendatei aus und klicken Sie auf Weiter
  5. Dann Save Asschreiben Sie in das Feld NUR InfoPlist ("I" -Kapital und "P" -Kapital)
  6. Drücken Sie dann Erstellen
  7. Wählen Sie dann die Datei InfoPlist.strings aus, die im Ordner Ressourcen erstellt wurde, und klicken Sie im rechten Menü auf die Schaltfläche "Lokalisieren".
  8. Anschließend wählen Sie das Projekt aus dem Projektnavigator aus und wählen die Liste Das Projekt aus Projekt
  9. Auf der Info-Registerkarte unten können Sie so viele Sprachen auswählen, wie Sie möchten (siehe Abschnitt Lokalisierungen).
  10. Die Sprache, die Sie im Ressourcenordner sehen können
  11. Um die Werte ("Schlüssel") aus der Datei info.plist zu lokalisieren, können Sie sie mit einem Texteditor öffnen und alle Schlüssel abrufen, die Sie lokalisieren möchten
  12. Sie schreiben einen beliebigen Schlüssel als Beispiel in eine InfoPlist.strings wie im obigen Beispiel

"NSLocationAlwaysAndWhenInUseUsageDescription" = "blabla";

"NSLocationAlwaysUsageDescription" = "blabla2";

Das ist alles Arbeit und Sie haben Ihre info.plist-Datei lokalisiert!

Costas Bakoulias
quelle
4

Für alle, bei denen das Problem auftritt, dass die info.plist beim Hinzufügen von Lokalisierungen nicht berücksichtigt wird, wie in Xcode 9.

Sie müssen die Datei info.plist localiazble erstellen, indem Sie sie aufrufen und im Dateiinspektor auf die Schaltfläche zum Lokalisieren klicken, wie unten gezeigt.

Die info.plist wird dann in die Dateiressourcen aufgenommen, wenn Sie neue Lokalisierungen hinzufügen.

Geben Sie hier die Bildbeschreibung ein

Edward
quelle
3
Haben Sie Probleme gehabt? Ich kann kein Projekt erstellen, wenn ich der Lokalisierung zwei Sprachen hinzufüge, da xcode sagt: "Die Datei info.plist konnte nicht geöffnet werden, da keine solche Datei vorhanden ist.
mkkrolik
2
@mkkrolik Ich habe jetzt das gleiche Problem. Haben Sie eine Lösung gefunden?
Todanley
@Todanley überspringe diese Lösung, es funktioniert nicht für mich. Verwenden Sie stattdessen InfoPlist.strings.
mkkrolik
@mkkrolik Danke das funktioniert. Und auch beim Testen mit dem Simulator musste ich die Spracheinstellung des Simulators und nicht die meines Ziels ändern, damit es funktioniert.
Todanley
3

Wie RGML sagt, können Sie eine InfoPlist.strings erstellen, lokalisieren und dann Ihren Schlüssel und den folgenden Wert hinzufügen: "NSLocationWhenInUseUsageDescription" = "Hilfe, um mich zu finden!";

Es wird der Schlüssel zu Ihrer info.plist für die angegebene Sprache hinzugefügt.

Deckel
quelle
0

In meinem Fall wurde alles korrekt eingerichtet, aber die Datei InfoPlist.strings wurde immer noch nicht gefunden.

Das einzige, was wirklich funktionierte, war, die InfoPlist.strings-Dateien zu entfernen und erneut zum Projekt hinzuzufügen .

d.ennis
quelle
0

In meinem Fall hat die Lokalisierung aufgrund des Symbols '-' im Namen nicht funktioniert. Beispiel: "aero-Info.plist" und lokalisierte Dateien: "aero-InfoPlist.strings" und "aeroInfoPlist.strings" funktionierten nicht.

Mike Glukhov
quelle
0

Bei Verwendung der InfoPlist.stringsDatei (in XCode sollte sie neben der Info.plistDatei platziert werden - der tatsächliche Speicherort der Datei kann sich wahrscheinlich an einer beliebigen Stelle im Projekt befinden

Ansicht in XCode

) Achten Sie darauf, den Kurznamen des Schlüssels für die Übersetzung zu verwenden.

Ich habe versucht zu verwenden Privacy - Camera Usage Description, aber der Arbeitsschlüssel istNSCameraUsageDescription

Sanduhr
quelle