【问题标题】:How to combine 2 key for localizable如何结合 2 个键进行本地化
【发布时间】:2018-06-16 19:58:16
【问题描述】:

我有一个可本地化的字符串文件,其中包含

"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把这两种方法结合起来造一个句子…… 我怎样才能以一种简单的方式做到这一点?有什么想法吗?

【问题讨论】:

  • 你必须隔离它们???
  • 为什么要使用两个独立的可本地化字符串?我建议改用一个 - 否则您可能会在某些语言中遇到麻烦:不能保证“请”应该是任何语言的句子中的第一个词。
  • 你好,因为我会有太多以please开头的字符串,所以我想尽可能少地使用它。你有什么想法吗? @algrid @Sh_Khan
  • 没有“以 please 开头的字符串太多”这样的东西。您有需要本地化的字符串。数量无所谓。预先做好,以后省去很多工作。
  • 您应该仔细阅读objc.io/issues/9-strings/string-localization 本地化是一个“重构”不是好主意的地方。您不能假设英语单词或结构与其翻译之间存在一对一的映射。请参阅该文章中的“字符串键最佳实践”标题以获得一个很好的示例。

标签: ios objective-c localization nsstring nslocalizedstring


【解决方案1】:

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

如果您在某些地方需要单独使用“请”,而在其他地方需要单独使用“重试”,而在其他不同地方需要单独使用“请重试”,则对三个不同的字符串使用三个不同的键。

如果你只需要“please try again”,不需要“please”和“try again”,那么“please try again”只有一个键。

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

"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");
}

这为您将这个字符串翻译成任何其他语言提供了最大的灵活性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 2023-01-15
    • 2013-03-30
    相关资源
    最近更新 更多