2010-06-30 25 views
13

localizable.strings dosyasındaki metni okumak istiyorum. Birkaç dizinden çeviri için dizeleri toplayıp bir .strings dosyasında dosya alıyorum. Ama sonra aynı çeviri dizelerinin birkaç kopyası var. Programsal olarak kaldırmak istiyorum. Bu nedenle, yalnızca dizeleri (yorumların değil) .strings dosyasından ve - sonra bunları ayıkla, - yinelenen dizeleri kaldır sonra yeni bir .strings dosyası oluşturun.iphone - Localizable.strings dosyasından bir sözlükte anahtar kelime olarak okuma

Dizeler dosyasını okumak ve sözlükte anahtar dizesini ve çevrilmiş değeri saklamak mümkün mü? Bir .text dosyasını okumak için herhangi bir yerleşik yöntem, sadece "anahtar" = "değer" bölümünü,/* ... */veya # comments bölümünü kaçınarak kastediyorum. Bir yapılandırma dosyası okumak gibi.

+0

MXG - Muhtemelen cevabı anlamına gelir. – Jonny

cevap

7

NSString sınıfında mükemmel bir API bulmaktan mutluluk duyuyorum. Kod aşağıda.

- (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

.strings dosyasının "ikili özellik listesi" olarak derlendiğini buldum. Bu ile yüklenebilir: [NSDictionary dictionaryWithContentsOfFile: yol]; –

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

Sadece harika! – mxg

+1

Aslında, düzenli (utf-8 ve utf-16) .strings dosyaları ile çalışır. –

0

Ne arıyordu bir NSDictionary içine bir paket dosyasından bir json okuyup sonra UITextView içine yazdırmak için bir yoldur. Sonuç güzel biçimlendirilmemiş!

Bir dizesinde bir güzel yapılarından json oluşturulan bir yöntem oluşturmak için yukarıdan Karim'in cevabın bir kısmını kullandı:

-(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); 
} 
İlgili konular