我正在阅读字符串参考文档,因为我很好奇要了解可用或可用的内容。我在操场上实现字符串初始化方法时遇到问题,以了解其工作原理。我想测试此字符串init方法是否可以接受字符串和语言环境对象,以查看输出是否为转换后的字符串。当然,我使用自动完成作为障碍,因此到目前为止,我一直尝试输入String.init,但要测试的init方法未出现在列表中。如何使用这种方法?
此外,我对本地化很熟悉。再次,这只是测试,以了解该功能如何正常工作。
init(format: String, locale: Locale?, _ args: CVarArg...)
答案 0 :(得分:1)
该String
初始化程序不进行任何语言翻译。它根据提供的语言环境格式化数字。
以下是使用美国英语和德国德语语言环境的示例:
let fmtStrUS = String(format: "%@ %.2f %d", locale: Locale(identifier: "en_US"), "Hello", 1234.5, 12345)
let fmtStrDE = String(format: "%@ %.2f %d", locale: Locale(identifier: "de_DE"), "Hello", 1234.5, 12345)
结果是:
你好1,234.50 12,345
你好1.234,50 12.345
请注意,唯一的区别是数字的格式。没有文字翻译。
如果只需要格式化数字,请使用NumberFormatter
。但是,如果您要本地化包含数字的更多文本,则此String
初始化是更好的方法。
这可以与使用NSLocalizedString
的标准本地化结合使用。
您可能具有类似以下的代码:
let messageFormat = NSLocalizedString("Hello %.2f %d", comment: "Fun with localization")
let fullMessage = String(format: messageFormat, locale: Locale.current, someDoubleVariable, someIntVariable)
然后输入en.strings:
"Hello %.2f %d" = "Hello %.2f %d"
在de.strings中,您将拥有:
"Hello %.2f %d = "Gutentag %.2f %d"
因此,文本翻译通常是通过字符串文件完成的,但是此String
初始化程序使您可以确保数字的格式符合当前用户的语言环境。
请注意,如果将它与Locale.current
一起使用,则可能希望使用localizedStringWithFormat
来代替,假定当前语言环境为当前语言。
let fullMessage = String.localizedStringWithFormat(messageFormat, someDoubleVariable, someIntVariable)