我想创建一个扩展来以干净的方式本地化我的字符串。本地化的详细信息将在扩展中。
而不是这样做
String(localized: "\(accessibilityNotificationNumber) notifications",
table: "Accessibility")
我想创建一个像这样的扩展:
extension String {
var accesible: String {
String(localized: "\(accessibilityNotificationNumber) notifications",
table: "Accessibility")
}
}
并像这样使用:
"\(accessibilityNotificationNumber) notifications".accessible
但是只要我使用字符串插值,我就无法做到这一点。有谁知道我怎样才能实现这一目标?
您想要做的是提供此
String
初始化程序的版本:
init(
localized keyAndValue: String.LocalizationValue,
table: String? = nil,
bundle: Bundle? = nil,
locale: Locale = .current,
comment: StaticString? = nil
)
但默认
table
为 "Accessibility"
。
extension String {
init(localized keyAndValue: String.LocalizationValue,
bundle: Bundle? = nil,
locale: Locale = .current,
comment: StaticString? = nil
) {
self.init(localized: keyAndValue, table: "Accessibility", bundle: bundle, locale: locale, comment: comment)
}
}
现在线路:
String(localized: "\(accessibilityNotificationNumber) notifications",
table: "Accessibility")
变成:
String(localized: "\(accessibilityNotificationNumber) notifications")
尽管为了避免混淆,您可能需要将
localized
参数的名称更改为 accessibility
或类似的名称以避免混淆。
extension String {
init(accessibility keyAndValue: String.LocalizationValue,
bundle: Bundle? = nil,
locale: Locale = .current,
comment: StaticString? = nil
) {
self.init(localized: keyAndValue, table: "Accessibility", bundle: bundle, locale: locale, comment: comment)
}
}
现在线路:
String(localized: "\(accessibilityNotificationNumber) notifications",
table: "Accessibility")
变成:
String(accessibility: "\(accessibilityNotificationNumber) notifications")