我想在我的iPhone应用程序中本地化几个字符串,到目前为止,我选择了5种语言。但是,我有一个问题,如果我没有为特定语言定义一个键,我希望它选择英语作为后备,因为我知道我已经用英语定义了每个字符串。事情是,所有键都被翻译并不是很重要,因为即使iPhone设置为西班牙语,也可以显示英语。
示例:
EN:
"HELLO" = "hello" ;
"PERSON" = "my friend" ;
ES:
"HELLO" = "hola" ;
预期结果:
如果iPhone设置为英语,我希望它说:hello, my friend
如果languange设置为西班牙语,我希望它说hola, my friend
。目前该应用将输出hola, PERSON
。 (我使用NSLocalizedString方法)。
可能有一个非常简单的解决方案,但我找不到任何好的解决方案。 谢谢你的帮助,
的Mattias
答案 0 :(得分:7)
其他答案肯定是正确的,但这并不是我想要的。相反,我发现了另一种方法,并在我的环境中编写了一个非常适合我的静态方法,如果有人想要实现同样的目的,我想在这里添加它:
+ (NSString *)localizedStringForKey:(NSString *)key table:(NSString *)table
{
NSString *str = [[NSBundle mainBundle] localizedStringForKey:key value:@"NA" table:table];
if ([str isEqualToString:@"NA"])
{
NSString *enPath = [[NSBundle mainBundle] pathForResource:@"en" ofType:@"lproj"];
return [[NSBundle bundleWithPath:enPath] localizedStringForKey:key value:@"NA" table:table];
}
return str;
}
答案 1 :(得分:4)
函数NSLocalizedString
的{{3}}说:
返回值
在主bundle和nil表上调用localizedStringForKey:value:table:的结果。
和localizedStringForKey:value:table:
documentation:
返回值
表tableName中由key指定的字符串的本地化版本。如果值为
nil
或空字符串,并且未在表格中找到本地化字符串,则返回密钥。如果key和value都是nil
,则返回空字符串。
因此您已为所有语言本地化字符串或更改您正在使用的key
的值
答案 2 :(得分:1)
简单的解决方案是使用英文文本作为关键。例如:
[NSString stringWithFormat:NSLocalizedString(@"%@, %@", "format for greeting"),
NSLocalizedString(@"Hello", "salutation"),
NSLocalizedString(@"my friend", "person")]
如果没有字符串的本地化版本,则使用英语密钥。