【问题标题】:How do I localize a string with formatting placeholders?如何使用格式化占位符本地化字符串?
【发布时间】:2011-02-03 00:45:10
【问题描述】:

如何使用 NSLocalizedString 本地化包含占位符的字符串?

例如:

[NSString stringWithFormat:@"You can afford %i at %@%li.",[kCash integerValue]/self.price, kYen,  self.price]

如何本地化?我是否将字符串分解为多个本地化字符串?那么我该如何处理不同的句子结构和语法呢?

【问题讨论】:

    标签: iphone objective-c ios localization


    【解决方案1】:

    NSLocalizedString 不会改变你的占位符,所以 stringWithFormat 可以正常使用它们。在您的示例中,使用编号占位符可能是一个好主意 -

        [NSString stringWithFormat:@"You can afford %1$i at %2$@%3$li.",
                                  [kCash integerValue]/self.price, kYen,  self.price]
    

    更多信息在这里: Is there a way to specify argument position/index in NSString stringWithFormat?

    【讨论】:

      【解决方案2】:

      让本地化字符串包含占位符。这几乎是唯一正确的方法,否则,正如您所提到的,您无法考虑不同的词序。

      类似的东西:

      [NSString stringWithFormat:NSLocalizedString(@"Foo %i", @"Foo %i"), 123]
      

      【讨论】:

      • 这行得通吗? NSLocalizedString 会知道占位符而不认为它们是任意文本吗?
      • 这适用于一个参数,但如果您有两个参数,那么在许多语言中,您还需要更改占位符出现的顺序。
      • -1 此代码不适用于顺序敏感的文本。它应该使用位置参数(例如 %1$@)。此外,NSLocalizedString 的第二个参数旨在作为对翻译者的注释,以更好地理解被翻译文本的上下文。重复初始文本是没有意义的,尤其是格式化字符串。
      • 好,好,投反对票。如果它不是公认的答案,我会删除它!你不能自己删除这些。
      • 对于更复杂的格式,例如日期格式,请参见:'NSString stringWithFormat(NSLocalizedString(@"%1$02dh %2$02dm %3$02ds","") 1,2, 3);'例如会给你“01h 02m 03s”。
      【解决方案3】:

      另一种方法是在您的本地化文件中,您可以:

      key = "String with %@ placeholder"; 
      

      在你的实现中:

      [NSString stringWithFormat: NSLocalizedString(@"key", ""), @"string replacing placeholder"];
      

      您可以使用任意数量的参数来执行此操作,它们只需要在您的本地化文件中保持一致即可。

      【讨论】:

        【解决方案4】:

        这种方式似乎更有效率:

        [NSString stringWithFormat:@"%@ %@", NSLocalizedString(@"Key", @"Comment for localised string"), value];
        

        【讨论】:

        • 不,您不能依赖翻译订购。您必须本地化格式字符串。
        猜你喜欢
        • 2013-03-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-23
        • 1970-01-01
        • 1970-01-01
        • 2019-11-20
        • 2013-07-06
        相关资源
        最近更新 更多