Domanda

Voglio leggere il testo dal file Localizable.strings. Sto raccogliendo le stringhe per la traduzione da diverse directory e file in una .strings file. Ma poi ho diverse copie delle stesse stringhe di traduzione. Voglio rimuovere questo livello di programmazione. Così ho bisogno di leggere solo le stringhe (non i commenti) dal file .strings, e  - quindi ordinare loro,  - stringhe rimuovere ripetuto quindi creare un nuovo file .strings.

E 'possibile leggere il file stringhe e mantenere la stringa chiave e il valore tradotto in un dizionario. Voglio dire qualsiasi built-in metodo per leggere un file .text, solo la "chiave" = parte "valore", evitando / * ... * / o # commenti parte. Come la lettura di un file di configurazione.

È stato utile?

Soluzione 2

Sono felice di trovare un ottimo API in classe NSString. Il codice è al di sotto.

- (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]];
}
}

Altri suggerimenti

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

Soluzione in Swift

Ho creato un codice swift che segue il codice Objective-C risposto @ jason-moore sopra Questa soluzione è rapida equivalente.

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
    }

Quello che stavo cercando è un modo per leggere un JSON da un file in un fascio NSDictionary e quindi stamparlo all'interno di una UITextView. Il risultato non era ben formattato!

ho usato una parte della risposta di Karim dall'alto per creare un metodo che ha generato un JSON abbellita in una stringa:

-(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);
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top