我想显示一个带有本地化字符串列表的表格。
直接的方法是:
a) 将数据源指向我的 ViewController
b) 定义一个数组
c) 在我的 ViewController 中分配数组并使用本地化资源 (NSLocalizedString) 中的字符串对其进行初始化 (arrayWithObjects)
d) 在 UITableViewDataSource 委托方法中使用这个数组
我主要关心的是b)项。结构看起来很重,我想知道我是否可以一次指定和加载整个本地化字符串列表。
我想显示一个带有本地化字符串列表的表格。
直接的方法是:
a) 将数据源指向我的 ViewController
b) 定义一个数组
c) 在我的 ViewController 中分配数组并使用本地化资源 (NSLocalizedString) 中的字符串对其进行初始化 (arrayWithObjects)
d) 在 UITableViewDataSource 委托方法中使用这个数组
我主要关心的是b)项。结构看起来很重,我想知道我是否可以一次指定和加载整个本地化字符串列表。
你的意思是你想要一个包含文件中定义的所有键的数组吗?Localizable.strings
这实际上很容易,因为.strings
文件的格式与包含字典的 plist 格式的旧 ASCII 样式相对应(通常需要在此旧 ASCII 样式 plist 格式中出现的封闭花括号以包含一个字典被默默地忽略)。
因此,您只需将Localizable.strings
文件的内容加载到 aNSDictionary
中即可!
NSString* stringsPath = [[NSBundle mainBundle] pathForResource:@"Localizable" ofType:@"strings"];
NSDictionary* locStringsDict = [NSDictionary dictionaryWithContentsOfFile:stringsPath];
NSLog(@"locStringsDict = %@", locStringsDict);
NSArray* localizedStrings = locStringsDict.allValues;
NSLog(@"All localized strings in current language = %@", localizedStrings);
当然,如果您只想要一些本地化字符串,您可以:
NSLocalizedString
每个键条目[编辑]
请注意,文件似乎在嵌入最终应用程序之前被strings
编译成二进制 plist (刚刚在示例项目中对其进行了测试)。因此,一旦您的应用程序运行,该Localizable.strings
文件就是一个二进制 plist(即[NSString stringWithContentsOfFile:stringsPath encoding:0 error:nil]
不会返回文件的原始内容,而是将一些Localizable.strings
二进制数据解释为一些垃圾字符串,并且无法再访问原始文件)
因此,如果您想保持键的顺序,唯一的其他选择是strings
在编译之前解析原始文件,而不是在运行时解析。最好的选择可能是恕我直言,将strings
文件转换为 XML Plist 使用plutil -convert xml1 Localizable.strings -o -
并从那里提取键,例如使用一些简单的 XSLT 样式表。样式表甚至可以直接将提取的键转换为一些新的 XML plist,以预期的顺序表示这些键的 NSArray,因此您可以通过代码将此 plist 加载到 NSArray 中并在运行时使用它们。