如何使用扩展本地化字符串而不指定表名?

问题描述 投票:0回答:1

我想创建一个扩展来以干净的方式本地化我的字符串。本地化的详细信息将在扩展中。

而不是这样做

String(localized: "\(accessibilityNotificationNumber) notifications",
       table: "Accessibility")

我想创建一个像这样的扩展:

extension String {
   var accesible: String {
      String(localized: "\(accessibilityNotificationNumber) notifications",
             table: "Accessibility")
   }
}

并像这样使用:

"\(accessibilityNotificationNumber) notifications".accessible

但是只要我使用字符串插值,我就无法做到这一点。有谁知道我怎样才能实现这一目标?

swift localization
1个回答
0
投票

您想要做的是提供此

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")
© www.soinside.com 2019 - 2024. All rights reserved.