3

この質問は、iOS - 実行時に localizable.strings の内容を変更できますか?

答えは役に立ちましたが、私が直面している問題があります。印刷された文字列には、単一の単語のキーや値の引用符 (これらの "" など) は含まれません。これにより、Localizable.string が無効なファイルになりました。したがって、正しい形式のキー/値であっても、何も取得されません。

例:

英ポンド = 英ポンド; 用語集 = 用語集; "Go_Location" = "場所に移動";

最初の 2 つは、ファイルが無効な文字列ファイルになる原因です。それを修正する方法は?

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 に答える