iphone - 从Localizable.strings文件读取作为字典中的键值
我想从localizable.strings文件中读取文本。我正在从一个.strings文件中收集几个目录和文件的翻译字符串。但是,我有几个相同的翻译字符串的副本。我想以编程方式删除此。 所以我需要从.strings文件中只读取字符串(不是注释),然后 - 然后对它们进行排序, - 删除重复的字符串 然后创建一个新的.strings文件。iphone - 从Localizable.strings文件读取作为字典中的键值
是否可以读取字符串文件并将字符串和翻译的值保存在字典中。我的意思是任何内置方法来读取.text文件,只有“key”=“value”部分,避免/ * ... * /或#comments部分。就像读一个配置文件一样。
我很高兴在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]];
}
}
我发现.strings文件被编译成一个“二进制属性列表”。这可以加载:[NSDictionary dictionaryWithContentsOfFile:path]; – 2010-08-18 16:52:50
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"];
简直太棒了! – mxg 2011-11-26 07:11:35
实际上,它也适用于常规(utf-8和utf-16).strings文件。 – 2013-02-19 14:07:11
我一直在寻找的就是读取从包文件中的JSON为NSDictionary
,然后打印一个UITextView
内的一种方式。 结果没有很好地格式化!
我用卡里姆的答案的一部分,从上面创建生成的字符串中的某个美化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);
}
MXG - 你大概是这个意思的答案。 – Jonny 2014-07-08 02:21:16