15

localizable.strings ファイルからテキストを読みたいです。複数のディレクトリとファイルから翻訳用の文字列を 1 つの .strings ファイルに収集しています。しかし、同じ翻訳文字列のコピーがいくつかあります。これをプログラムで削除したい。したがって、.strings ファイルから文字列のみ (コメントではなく) を読み取り、それらを並べ替えて、繰り返される文字列を削除し、新しい .strings ファイルを作成する必要があります。

文字列ファイルを読み取り、キー文字列と翻訳された値を辞書に保持することは可能ですか。.text ファイルを読み取るための組み込みメソッドを意味します。「キー」=「値」部分のみで、/* ... */ または # コメント部分は避けます。設定ファイルを読むようなものです。

4

4 に答える 4

62
  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"];
于 2010-08-18T16:55:16.017 に答える
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]];
}
}
于 2010-08-11T07:54:24.863 に答える
0

私が探していたのは、json をバンドル ファイルから に読み込み、NSDictionaryそれを .xml 内に出力する方法UITextViewです。結果は適切にフォーマットされていませんでした。

上記のKarimの回答の一部を使用して、文字列で美化されたjsonを生成するメソッドを作成しました。

-(void)setText:(NSDictionary *)json
{
    NSArray *allKeys = [json allKeys];

    _beautyStr = @"";
    for(id key in allKeys){
       NSString *line = [NSString stringWithFormat:@"\"%@\" = \"%@\";\n", key, [text objectForKey:key]];
    _beautyStr = [NSString stringWithFormat:@"%@%@",_beautyStr, line];
    }

    NSLog(@"%@",_beautyStr);
}
于 2016-03-31T13:19:53.227 に答える