1


我写这篇文章是因为这个问题让我发疯。
我有同样的问题尝试使用带有参数的NSLocalizedString在UILabel中打印相同的文本(从右到左,如波斯语) 。我的代码如下所示:

label.text = [NSString stringWithFormat:NSLocalizedString(@"The trick belongs to %@",nil),user];

在我的波斯语字符串文件中,我尝试使用它

"The trick belongs to %@" = " %@ میز را ترک کرد";
"The trick belongs to %@" = "%@ برنده کارت ها شد";
"The trick belongs to %@" = "@% برنده کارت ها شد";
"The trick belongs to %@" = "برنده کارت ها شد @%";
"The trick belongs to %@" = "برنده کارت ها شد %@";

所有这种类型的表格总是打印:

"Maria برنده کارت ها شد "但必须显示为"برنده کارت ها شد Maria"

提前谢谢了

4

2 回答 2

5

你需要让 iOS 知道这是一个 RTL 字符串,即使它M在它的前面遇到一个(这表明它是一个 LTR 字符串)。您可以使用 Unicode 隐式方向标记 RIGHT-TO-LEFT MARK U+200F 执行此操作。

例如:

self.label.text = [NSString stringWithFormat:@"\u200f%@ برنده کارت ها شد", @"Maria"];

您可以放入\u200fLocalized.strings 文件;你不需要任何特殊的代码来处理这个。

"The trick belongs to %@" = @"\u200f%@ برنده کارت ها شد";
于 2014-01-16T17:02:48.390 回答
0

右侧的变量应该是 %1$@,并确保它是该键的唯一条目。在您的示例中,您有 5 个字符串,因此它似乎忽略了其他字符串。

我们使用 %1$@ 的原因是因为如果我们想要变量的不同顺序,我们可以使用 1、2、3 等。

更多信息在这里:

https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/LoadingResources/Strings/Strings.html#//apple_ref/doc/uid/10000051i-CH6

向下滚动到格式化字符串资源部分。

于 2014-01-08T20:45:12.900 回答