0

我想显示一个带有本地化字符串列表的表格。

直接的方法是:

a) 将数据源指向我的 ViewController

b) 定义一个数组

c) 在我的 ViewController 中分配数组并使用本地化资源 (NSLocalizedString) 中的字符串对其进行初始化 (arrayWithObjects)

d) 在 UITableViewDataSource 委托方法中使用这个数组

我主要关心的是b)项。结构看起来很重,我想知道我是否可以一次指定和加载整个本地化字符串列表。

4

1 回答 1

3

你的意思是你想要一个包含文件中定义的所有键的数组吗?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);

当然,如果您只想要一些本地化字符串,您可以:

  • 将您想要的字符串放在单独的“.strings”文件中(又名不同的字符串表)
  • 或者制作一个与您需要的字符串相对应的所有键的 NSArray,然后通过它们循环为这些键构建本地化字符串的 NSArray,调用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 中并在运行时使用它们。

于 2012-09-03T22:03:18.237 回答