Swift格式化本地化字符串

时间:2015-10-30 20:48:56

标签: string swift string-formatting nslocalizedstring localizable.strings

我们正在使用OneSky来翻译字符串。我们在字符串文件中使用位置说明符。我遇到的问题是在字符串中使用%s时。

我有一个字符串:"dist_unit_mask" = "%1$s %2$s";我从Localization.strings文件中读取并尝试格式化:String(format: NSLocalizedString(@"dist_unit_mask", comment: @"Distance and Units"), dist, unit)

这会导致应用程序崩溃,但是当我将字符串更改为"dist_unit_mask" = "%1$@ %2$@";时,应用程序不会崩溃。使用$s代替%@时,可能导致应用崩溃的原因是什么?从OneSky下载后,我不想修改字符串文件。

1 个答案:

答案 0 :(得分:3)

%s格式(带或不带位置说明符)需要a C string ,即指向NUL终止的char序列的指针, 而不是Swift字符串。

如果你真的必须保持%s格式,那么

String(format: NSLocalizedString(...),
    (dist as NSString).cStringUsingEncoding(NSUTF8StringEncoding),
    (unit as NSString).cStringUsingEncoding(NSUTF8StringEncoding))

应该有用。