4

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

例子:

zh:

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

埃斯:

"HELLO" = "hola" ;

预期结果:

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

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

马蒂亚斯

4

3 回答 3

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;
}
于 2013-03-24T12:53:34.060 回答
4

该函数的文档NSLocalizedString说:

返回值

在主包和 nil 表上调用本地化StringForKey:value:table: 的结果。

localizedStringForKey:value:table:

返回值

由表 tableName 中的键指定的字符串的本地化版本。如果 value 是nil或空字符串,并且在表中未找到本地化字符串,则返回 key。如果 key 和 value 都是nil,则返回空字符串。

因此您已经本地化了所有语言的字符串或更改了key您正在使用的值

于 2013-03-24T11:38:22.917 回答
1

简单的解决方案是使用英文文本作为键。例如:

[NSString stringWithFormat:NSLocalizedString(@"%@, %@", "format for greeting"),
                           NSLocalizedString(@"Hello", "salutation"),
                           NSLocalizedString(@"my friend", "person")]

如果字符串没有本地化版本,则使用英文键。

于 2013-03-24T11:55:23.563 回答