这个问题是连续的: iOS - 我可以在运行时更改 localizable.string 内容吗?
答案很有用,但是,我面临着一个问题。打印的字符串不包括单个单词键和/或值的引号(如这些")。这使得 Localizable.string 文件无效。因此,即使对于格式正确的键/值,也不会从中检索到任何内容。
例:
英镑 = 英镑;词汇表 = 词汇表;"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];
}];