如何使用格式本地化NSString

时间:2018-01-10 17:20:58

标签: objective-c nsstring string-formatting nslocalizedstring

如何使用格式本地化NSString。

int value = 20;

NSString *str = @"hello";   

textLabel.text = [NSString stringWithFormat:@"%d %@", value, str];

我试过

textLabel.text = [NSString stringWithFormat:NSLocalizedString(@"%d %@", @"%d %@"), value, str];

但没有奏效。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

您的本地化字符串本身必须是格式模式:

"ValueAndStringFMT" = "Value %1$d and string %2$@";

在您的代码中:

textLabel.text = [NSString 
    stringWithFormat:NSLocalizedString(@"ValueAndStringFMT"),
    value, str
];

为什么%1$d而不只是%d?所以你可以改变顺序。例如。在某种语言中,您可能希望交换订单:

"ValueAndStringFMT" = "Cadena %2$@ y valor %1$d";

当然,有点危险好像有人使用的占位符多于字符串调用提供或使用错误的类型,您的应用可能会崩溃。如果您想要安全,请改为搜索替换:

"ValueAndStringFMT" = "Value [[VALUE]] and string [[STRING]]";

在您的代码中:

NSString * string = NSLocalizedString(@"ValueAndStringFMT");
string = [string stringByReplacingOccurrencesOfString:@"[[VALUE]]" 
    withString:@(value).stringValue
];
string = [string stringByReplacingOccurrencesOfString:@"[[STRING]]" 
    withString:str
];
textLabel.text = string;

这种情况最糟糕的情况是占位符没有展开,这意味着占位符显示在屏幕上,但至少你的应用程序不会崩溃,因为有人弄乱了本地化字符串文件。

如果您需要本地化其中一个格式变量,那么您需要先在自己的步骤中执行此操作:

NSString * str = NSLocalizedString(@"hello");