iOS – 将NSDictionary写入Localizable.strings

这个问题是那个问题的连续问题: iOS – 我可以在运行时更改localizable.strings内容吗?

答案很有用,但是,我遇到了一个问题。 对于单个单词键和/或值,打印的字符串不包括引号(如这些“”)。 这使Localizable.string无效文件。 因此,即使对于格式正确的键/值,也不会从中检索任何内容。

例:

GBP = GBP; 词汇表=词汇表; “Go_Location”=“转到位置”;

前两个导致文件无效的字符串文件。 如何解决?

使用NSDictionary的

- (NSString *)descriptionInStringsFileFormat; 

然后使用适当的编码将结果字符串写入文件:

 NSString* strings = [dict descriptionInStringsFileFormat]; [strings writeToFile: @"Localizable.strings" atomically: YES encoding: NSUTF16StringEncoding error: nil]; 

(显然添加你需要的任何错误检查)。

 - (BOOL)writeLocalizableFileFromDictionary:(NSDictionary *)dictionary toURL:(NSURL *)url atomically:(BOOL)atomically { NSMutableString *fileContent = [NSMutableString new]; [dictionary enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { [fileContent appendFormat:@"\"%@\" = \"%@\";\n", [self escapeString:key], [self escapeString:obj]]; }]; return [fileContent writeToURL:url atomically:atomically encoding:NSUTF8StringEncoding error:nil]; } - (NSString *)escapeString:(NSString *)string { NSString *escapedString = [string stringByReplacingOccurrencesOfString:@"\n" withString:@"\\n"]; escapedString = [escapedString stringByReplacingOccurrencesOfString:@"\r" withString:@"\\r"]; escapedString = [escapedString stringByReplacingOccurrencesOfString:@"\\" withString:@"\\\\"]; return [escapedString stringByReplacingOccurrencesOfString:@"\"" withString:@"\\\""]; } 

通过枚举字典并将每个键/值对打印到NSString,然后打印到字符串文件来解决它。

这是代码:

 __block NSString *languageAndGlossaryDictionary = @""; [[self getGlossaryDictionary] enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { languageAndGlossaryDictionary = [languageAndGlossaryDictionary stringByAppendingFormat:@"\n\"%@\" = \"%@\";", key, obj]; }];