Swift 格式化本地化字符串
Swift Formatting Localized 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下载后不修改字符串文件。
%s
格式(带或不带位置说明符)需要一个
C 字符串,即指向 char
的 NUL 终止序列的指针,
而不是 Swift 字符串。
如果您真的必须保留 %s
格式,那么
String(format: NSLocalizedString(...),
(dist as NSString).cStringUsingEncoding(NSUTF8StringEncoding),
(unit as NSString).cStringUsingEncoding(NSUTF8StringEncoding))
应该可以。
我们正在使用 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下载后不修改字符串文件。
%s
格式(带或不带位置说明符)需要一个
C 字符串,即指向 char
的 NUL 终止序列的指针,
而不是 Swift 字符串。
如果您真的必须保留 %s
格式,那么
String(format: NSLocalizedString(...),
(dist as NSString).cStringUsingEncoding(NSUTF8StringEncoding),
(unit as NSString).cStringUsingEncoding(NSUTF8StringEncoding))
应该可以。