2010-06-30 9 views
13

Ich möchte den Text aus der Datei localizable.strings lesen. Ich sammle die Zeichenfolgen für die Übersetzung aus mehreren Verzeichnissen und feile in einer .strings-Datei. Aber dann habe ich mehrere Kopien derselben Übersetzungszeichenfolgen. Ich möchte dies programmgesteuert entfernen. Also muss ich nur die Zeichenfolgen (nicht die Kommentare) aus der .strings-Datei und - dann sortieren sie, - entfernen Sie wiederholte Strings dann erstellen Sie eine neue .strings-Datei.iphone - Lesen aus der Datei Localizable.strings als Schlüsselwert in einem Wörterbuch

Ist es möglich, die Zeichenfolgendatei zu lesen und die Schlüsselzeichenfolge und den übersetzten Wert in einem Wörterbuch zu behalten. Ich meine jede eingebaute Methode, um eine. Text-Datei zu lesen, nur den "Schlüssel" = "Wert" Teil, Vermeidung von/* ... */oder # Kommentare Teil. Wie das Lesen einer Konfigurationsdatei.

+0

mxg - Du meinst wahrscheinlich Antwort. – Jonny

Antwort

7

Ich freue mich, eine ausgezeichnete API in NSString Klasse zu finden. Der Code ist unten.

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { 
// Insert code here to initialize your application 
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Localizable" ofType:@"strings"]; 
NSString *fileText = [NSString stringWithContentsOfFile:filePath encoding: NSUnicodeStringEncoding error:nil]; 
NSDictionary *stringDictionary = [fileText propertyListFromStringsFileFormat]; 

NSArray *allKeys = [stringDictionary allKeys]; 

NSArray *sortedKeys = [allKeys sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)]; 

NSString *documentsDirectory; 
NSArray *paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES); 
if ([paths count] > 0) {  
    documentsDirectory = [paths objectAtIndex:0];  
} 

NSString *outputPath = [documentsDirectory stringByAppendingString:@"/Localizable.strings"]; 
NSLog(@"Strings contents are writing to: %@",outputPath); 
[[NSFileManager defaultManager] createFileAtPath:outputPath contents:nil attributes:nil]; 
NSFileHandle *outputHandle = [NSFileHandle fileHandleForWritingAtPath:outputPath]; 
[outputHandle seekToEndOfFile]; 

for(id key in sortedKeys){ 
    NSString *line = [NSString stringWithFormat:@"\"%@\" = \"%@\";\n", key, [stringDictionary objectForKey:key]]; 
    NSLog(@"%@",line); 
    [outputHandle writeData:[line dataUsingEncoding:NSUnicodeStringEncoding]]; 
} 
} 
+4

Ich fand, dass die .strings-Datei kompiliert wird, um eine "binäre Eigenschaftsliste" zu werden. Dies kann geladen werden mit: [NSDictionary dictionaryWithContentsOfFile: Pfad]; –

52
NSString *path = [[NSBundle mainBundle] pathForResource:@"Localizable" 
                ofType:@"strings"              
               inDirectory:nil 
              forLocalization:@"ja"]; 

    // compiled .strings file becomes a "binary property list" 
    NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:path]; 

    NSString *jaTranslation = [dict objectForKey:@"hello"]; 
+0

Einfach genial! – mxg

+1

Eigentlich funktioniert es auch mit regulären (utf-8 und utf-16) .strings Dateien. –

0

Was ich suchte eine Möglichkeit, einen Json aus einer Bundle-Datei in ein NSDictionary und dann drucken Sie es in einem UITextView zu lesen. Das Ergebnis war nicht schön formatiert!

ich von oben einen Teil von Karim Antwort verwendet, um ein Verfahren zu schaffen, die eine verschönerte json in einem String generiert:

-(void)setText:(NSDictionary *)json 
{ 
    NSArray *allKeys = [json allKeys]; 

    _beautyStr = @""; 
    for(id key in allKeys){ 
     NSString *line = [NSString stringWithFormat:@"\"%@\" = \"%@\";\n", key, [text objectForKey:key]]; 
    _beautyStr = [NSString stringWithFormat:@"%@%@",_beautyStr, line]; 
    } 

    NSLog(@"%@",_beautyStr); 
} 
Verwandte Themen