本地化后备语言

时间:2013-03-24 11:28:54

标签: ios objective-c xcode localization localizable.strings

我想在我的iPhone应用程序中本地化几个字符串,到目前为止,我选择了5种语言。但是,我有一个问题,如果我没有为特定语言定义一个键,我希望它选择英语作为后备,因为我知道我已经用英语定义了每个字符串。事情是,所有键都被翻译并不是很重要,因为即使iPhone设置为西班牙语,也可以显示英语。

示例:

EN:

"HELLO" = "hello" ;
"PERSON" = "my friend" ;

ES:

"HELLO" = "hola" ;

预期结果:

如果iPhone设置为英语,我希望它说:hello, my friend如果languange设置为西班牙语,我希望它说hola, my friend。目前该应用将输出hola, PERSON。 (我使用NSLocalizedString方法)。

可能有一个非常简单的解决方案,但我找不到任何好的解决方案。 谢谢你的帮助,

的Mattias

3 个答案:

答案 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")]

如果没有字符串的本地化版本,则使用英语密钥。