NSLocalizedString“localizedStringForKey:value:table:”

时间:2011-05-24 12:46:46

标签: iphone objective-c ios localization

- (NSString *)localizedStringForKey:(NSString *)key 
                              value:(NSString *)value 
                              table:(NSString *)tableName

Doc将上述方法中的 tableName 参数说成:接收者要搜索的字符串表。如果tableName为nil或为空字符串,则该方法尝试使用 Localizable.strings中的表...

我的问题是,如果我们创建 Localizable.strings ,它会单独创建一个字符串文件。我们的项目中没有创建表格。桌子实际上在哪里?是否可以手动创建此类字符串表?我需要在我的项目中这样做......

我的最后一个问题是 - 我作为 tableName 参数的参数传递了什么值?

谢谢...

2 个答案:

答案 0 :(得分:18)

在该上下文中,“表格”指的是翻译文件。因此对于Localizable.strings,您可以使用NSLocalizedStringFromTable(@“foo”,@“Localizable”,@“comment”)从中获取翻译。但是,Localizable.strings是默认值,因此您通常只使用NSLocalizedString(@“foo”,@“comment”)。如果您添加一个新的翻译文件(例如,Settings.strings),那么您可以使用表名来引用它。

答案 1 :(得分:3)

通过表格 - 它只是一个键值对。

documentation

中有更详细的内容

所以是 - 您必须手动创建 - 因为您使用NSBundle辅助方法来处理本地化字符串 - 您可以使用- (NSString *)localizedStringForKey:(NSString *)key value:(NSString *)value table:(NSString *)tableName然后运行genstrings来生成.strings文件和表

编辑以使此更清晰 字符串表只是键值对的列表。如果生成包含以下内容的Localizable.strings文件:

/* Text for saying hello */
"HelloText" = "Hello!";

现在您可以将此文件复制到另一个本地化的.lproj文件,并将其更改为特定语言的值:

"HelloText" = "Namaste!";

这就是桌子的意思。