iPhone/iOS:如何获取我应用程序本地化的所有语言中的本地化字符串列表?

17

我需要向服务器发送特定字符串的本地化列表。

也就是说,如果我的应用程序有一个名为Foo的字符串,在英语中被本地化为 @"Foo",在俄语中被本地化为 @"Фу",那么我想发送这样的列表到服务器:

  • String Foo:
    • English: "Foo"
    • Russian: "Фу"

我认为我需要做的是:

  1. 枚举每种语言我的应用程序所本地化的字符串
  2. 获取每种语言中Foo的本地化版本

我如何完成(1)和(2)?


你有看过NSLocalizedStringFromTable吗?http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Functions/Reference/reference.html%23//apple_ref/c/macro/NSLocalizedStringFromTableInBundle - joshpaul
1
从表格中似乎有一种将字符串分隔的方法,而不是将它们全部保存在一个默认表格中。这不是我想要的。我想获取特定字符串的所有不同本地化版本。 - Tatiana Racheva
1个回答

38

您可以通过将English.lproj/Localizable.strings读取为字典并提取其键来检索所有字符串键:

NSString *stringsPath = [[NSBundle mainBundle] pathForResource:@"Localizable" ofType:@"strings"];
NSDictionary *dictionary = [NSDictionary dictionaryWithContentsOfFile:stringsPath];
为了得到每个语言的翻译,您可以针对每个英文关键字迭代遍历语言,并使用NSLocalizedStringFromTableInBundle函数:
for (NSString *language in [[NSUserDefaults standardUserDefaults] objectForKey:@"AppleLanguages"]) {
    NSBundle *bundle = [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:language ofType:@"lproj"]];
    NSLog(@"%@: %@", language, NSLocalizedStringFromTableInBundle(@"Testing", @"Localizable", bundle, nil));
}

这听起来很合理;我看到的其他选项需要重写我们检索字符串的方式,但这种方法不太侵入性,看起来可以满足我的需求。我今天会试一下。 - Tatiana Racheva
2
请注意,上面代码示例中对 pathForResource 的第一次调用将返回当前本地化的路径,而不一定是英语(例如,如果您的模拟器/设备设置为德语,则会获取到 de.lproj/Localizable.strings 的路径)。 - Alessandro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接