2013-01-23 8 views
6

NSLocalizedString funktioniert nur die Hälfte der Zeit, wo ich den erwarteten Wert für den referenzierten Schlüssel zurückerhalten. Die anderen Male bekomme ich den Schlüsselnamen zurück, der in NSLocalizedString spezifiziert wird und geschieht konsequent auf jedem anderen Lauf.NSLocalizedString lädt die Zeichenfolge manchmal, nicht immer

Momentan unterstütze ich momentan nur Englisch.

Ich rufe:

NSString *someText = NSLocalizedString(@"mystring.keyname", nil); 

Inhalt en.lproj/Localizable.strings:

"mystring.keyname" = "Hello there!"; 

Wenn es nicht korrekt funktioniert, someText's Wert mystring.keyname ist.

Hier ist, wie ich Zuverlässigkeit bin Tests:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    NSBundle *bundle = [NSBundle bundleForClass:[self class]]; 
    NSLog(@"Strings file: %@", [bundle pathForResource:@"Localizable" ofType:@".strings"]); 
    NSLog(@"Localizations: %@", [bundle localizations]); 
    NSLog(@"Local Dict: %@", [bundle localizedInfoDictionary]); 
    NSLog(@"localizedStringForKey: %@", [bundle localizedStringForKey:@"mystring.keyname"value:@"Wha happened?" table:nil]); 
    NSLog(@"Localized String: %@", NSLocalizedString(@"mystring.keyname", @"Are you sure you want to start a new game?")); 
} 

Dieser druckt die erwarteten Werte werden alle die anderen Lauf:

Run #1: 
Local Dict: (null) 
localizedStringForKey: Hello there! 
Localized String: Hello there! 

Run #2: 
Local Dict: (null) 
localizedStringForKey: Wha happened? 
Localized String: mystring.keyname 

Meine Dateien sind als solche angelegt:

WORKSPACE_DIR/ 
    my_workspace_name.xcworkspace 
    PROJECT_DIR/ 
    - my_project_name.xcodeproj 
    RESOURCES_DIR/ 
     - en.lproj/ 
      Localizable.strings 

XCodes Projekt-Level-Einstellungen:

1) Build Phases has Localizable.strings listed in the "Copy Bundle Resources". 

2) Build Settings: 
    Convert Copied Files => YES 
    Property List Output Encoding => binary 
    Strings file Output Encoding => UTF-16   

3) Info.plist's: CFBundleDevelopmentRegion => 'en' 

Localizable.strings ist als UTF-16 konfiguriert, obwohl ich die Option Texteinstellungen im Dateiinspektor nicht mit der ausgewählten Zeichenfolgendatei sehen kann. Aber ich habe den Codierungstyp verifiziert, indem ich die Datei in TextWrangler geöffnet habe, die die Codierung als Unicode (UTF-16) mit Unix LF anzeigt.

Irgendwelche Vorschläge, wie Sie dies die ganze Zeit arbeiten lassen?

+0

Haben Sie jemals eine Lösung dafür gefunden? Habe das gleiche Problem, bei jedem anderen Lauf funktioniert die Lokalisierung nicht. –

Antwort

1

Ein paar Minuten nach der Frage nach einer Lösung, fand ich es. Ich hatte eine andere Localizable.strings von einer dritten Partei aufgenommen. Sobald ich das entfernt habe, keine weiteren Übersetzungen mehr verloren.

3

Wenn Sie ein zusätzliches Semikolon in Ihrer lokalisierbaren Datei haben, wird es zwar aufgebaut, aber nicht lokalisiert.