Frage

Ich mag den Text aus der localizable.strings Datei lesen. Ich sammle die Saiten für die Übersetzung von mehreren Verzeichnissen und Dateien in einer .strings Datei. Aber dann habe ich mehrere Kopien der gleichen Übersetzungs-Strings. Ich möchte diese programmatisch entfernen. Also brauche ich nur die Saiten lesen (nicht die Kommentare) von der .strings-Datei und - dann sortiert sie, - Entfernen wiederholt Strings erstellen Sie eine neue Datei .strings.

Ist es möglich, die Zeichenketten-Datei und halten Sie die Schlüsselzeichenfolge und übersetzt Wert in einem Wörterbuch zu lesen. Ich meine, jede integrierte Methode eine .text-Datei zu lesen, nur die „Schlüssel“ = „Wert“ Teil, die Vermeidung / * ... * / oder # Kommentare Teil. Wie eine Konfigurationsdatei zu lesen.

War es hilfreich?

Lösung 2

Ich bin glücklich, 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]];
}
}

Andere Tipps

  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"];

Lösung in Swift

Ich habe einen schnellen Code nach dem Objective-C-Code beantwortet von @ jason-mooren oben Diese Lösung ist schnell gleichwertig.

guard let path = Bundle.main.url(forResource: "Localizable", withExtension: "strings", subdirectory: nil, localization: "ja") else {
            return nil
        }
guard let dict = NSDictionary(contentsOf: path) else {
        return nil
    }
guard let jaTranslation = dict.value(forKey: "hello") as? String else {
        return nil
    }

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

habe ich einen Teil von Karim Antwort von oben ein Verfahren zu schaffen, dass 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);
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top