Ich verwende (wie alle anderen) NSLocalizedString
, um meine App zu lokalisieren.
Leider gibt es einige "Nachteile" (nicht unbedingt die Schuld von NSLocalizedString selbst), einschließlich
- Keine automatische Vervollständigung für Zeichenfolgen in Xcode. Dies macht das Arbeiten nicht nur fehleranfällig, sondern auch mühsam.
- Möglicherweise definieren Sie eine Zeichenfolge neu, nur weil Sie nicht wussten, dass bereits eine entsprechende Zeichenfolge vorhanden ist (z. B. "Bitte Passwort eingeben" vs. "Passwort zuerst eingeben").
- Ähnlich wie beim Autocompletion-Problem müssen Sie sich die Kommentarzeichenfolgen "merken" / kopieren, sonst erhalten Sie
genstring
mehrere Kommentare für eine Zeichenfolge - Wenn Sie verwenden möchten,
genstring
nachdem Sie bereits einige Zeichenfolgen lokalisiert haben, müssen Sie darauf achten, dass Ihre alten Lokalisierungen nicht verloren gehen. - Dieselben Zeichenfolgen sind über das gesamte Projekt verteilt. Beispielsweise haben Sie
NSLocalizedString(@"Abort", @"Cancel action")
überall verwendet, und dann werden Sie von Code Review aufgefordert, die Zeichenfolge umzubenennenNSLocalizedString(@"Cancel", @"Cancel action")
, um den Code konsistenter zu machen.
Was ich tue (und nach einigen Suchen auf SO habe ich gedacht, dass viele Leute dies tun), ist eine separate strings.h
Datei, in der ich den #define
gesamten Lokalisierungscode habe. Beispielsweise
// In strings.h
#define NSLS_COMMON_CANCEL NSLocalizedString(@"Cancel", nil)
// Somewhere else
NSLog(@"%@", NSLS_COMMON_CANCEL);
Dies bietet im Wesentlichen Code-Vervollständigung, einen einzigen Ort zum Ändern von Variablennamen (sodass keine Genzeichenfolge mehr erforderlich ist) und ein eindeutiges Schlüsselwort für die automatische Umgestaltung. Dies geht jedoch zu #define
Lasten einer ganzen Reihe von Anweisungen, die nicht von Natur aus strukturiert sind (z. B. LocString.Common.Cancel oder ähnliches).
Obwohl dies etwas gut funktioniert, habe ich mich gefragt, wie ihr es in euren Projekten macht. Gibt es andere Ansätze, um die Verwendung von NSLocalizedString zu vereinfachen? Gibt es vielleicht sogar ein Framework, das es einschließt?