iphone - 从Localizable.strings文件中读取字典中的键值

kar*_*rim 14 iphone text file localizable.strings

我想从localizable.strings文件中读取文本.我正在从几个目录中收集用于翻译的字符串,并将文件放在一个.strings文件中.但后来我有几个相同翻译字符串的副本.我想以编程方式删除它.所以我需要从.strings文件中读取字符串(而不是注释),然后 - 然后对它们进行排序, - 删除重复的字符串,然后创建一个新的.strings文件.

是否可以读取字符串文件并将字符串和翻译后的值保存在字典中.我的意思是任何读取.text文件的内置方法,只有"key"="value"部分,避免使用/*...*/或#views部分.喜欢阅读配置文件.

Jas*_*ore 61

  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"];
Run Code Online (Sandbox Code Playgroud)


kar*_*rim 8

我很高兴在NSString类中找到一个优秀的API.代码如下.

- (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]];
}
}
Run Code Online (Sandbox Code Playgroud)

  • 我发现.strings文件被编译成"二进制属性列表".这可以加载:[NSDictionary dictionaryWithContentsOfFile:path]; (4认同)