如何组合2键可本地化

时间:2018-01-07 18:12:43

标签: ios objective-c localization nsstring nslocalizedstring

我有一个包含

的可本地化字符串文件
"please" = "Please";
"try.again" = "try again.";

在我的应用程序中,我想使用

"please" = "Please";
"try.again" = "try again.";

同时制作一个句子= $ please + $ try.again = Please try again.

所以,我尝试过这种方法

+ (NSString *)pleaseLocalizedString {
return NSLocalizedStringFromTableInBundle(@"please", @"Localizable",[Bundle bundle], @"Please button");
}

+ (NSString *)tryAgainLocalizedString {
return NSLocalizedStringFromTableInBundle(@"try.again", @"Localizable",[Bundle bundle], @"try again button");
}

但是再次通过这种方式,我必须使用stringWithFormat来组合这两种方法来制作一个句子...... 我怎样才能轻松实现这一目标?有什么想法吗?

1 个答案:

答案 0 :(得分:4)

不要尝试将两个单独的本地化字符串组合成一个字符串。正确的句子形成不容易在语言中推广。有些语言是从右到左,有些是从左到右。此外,某些单词在组合时可能具有不同的含义,尤其是在中文等语言中。

如果您需要"请"在某些地方分开,你需要"再试一次"在其他一些地方分开,你需要"请再试一次"在其他不同的地方分别使用三个不同的琴键作为三个不同的琴弦。

如果您只需要"请再试一次"并且你不需要"请"或者"再试一次"单独,然后只有一个键为"请再试一次"。

话虽如此,问题的解决方案是将第三个字符串定义为:

"p.t.a" = "%1$@ %2$@";

然后在其他一些本地化中,右侧可能是"%2$@, %1$@";

然后你会:

+ (NSString *)pleaseTryAgainLocalizedString {
    NSString *format = NSLocalizedStringFromTableInBundle(@"p.t.a", @"Localizable",[Bundle bundle], @"Please Try Again");
    return [NSString stringWithFormat:format, [self pleaseLocalizedString], [self tryAgainLocalizedString]];
}

但同样,这只是愚蠢的。只需定义:

"please.try.again" = "Please try again.";

+ (NSString *)pleaseTryAgainLocalizedString {
    return NSLocalizedStringFromTableInBundle(@"please.try.again", @"Localizable",[Bundle bundle], @"Please Try Again");
}

这使您可以最灵活地将此字符串翻译成任何其他语言。