3

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

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

例子:

英镑 = 英镑;词汇表=词汇表;"Go_Location" = "前往位置";

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

4

3 回答 3

5

使用 NSDictionary 的

- (NSString *)descriptionInStringsFileFormat;

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

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

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

于 2014-11-06T17:10:11.037 回答
0
- (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:@"\\\""];
}
于 2014-10-16T10:05:59.760 回答
-2

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

这是代码:

__block NSString *languageAndGlossaryDictionary = @"";
[[self getGlossaryDictionary] enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
    languageAndGlossaryDictionary = [languageAndGlossaryDictionary stringByAppendingFormat:@"\n\"%@\" = \"%@\";", key, obj];
}];
于 2012-12-02T12:43:26.217 回答