2

我在我的应用程序中成功实现了复数本地化。但是,如果我更改应用程序语言,localizedStringWithFormat仍会返回以前语言的复数形式。

如果我重新启动应用程序,复数将以正确的语言(我选择的语言)返回。

是否有可能明确本地化StringWithFormat,它应该以哪种语言返回复数?

示例代码,其中复数被称为:

let candiesEaten: Int = 38
let candyCounterString: String = String.localizedStringWithFormat(NSLocalizedString("TEXT_CANDY_COUNTER", comment: ""), arguments: candiesEaten)

应用程序中的语言是这样更改的,它可以与所有其他字符串一起使用:

private static func setLanguageAndSynchronize(_ lang: [String]) {
        UserDefaults.standard.set(lang, forKey: Preferences.appleLanguagesKey)
        UserDefaults.standard.synchronize()
    }
4

1 回答 1

0

字符串扩展

extension String {
  var localized: String {
    guard let path = Bundle.main.path(forResource: AppLanguageService.shared.getAppLanguage()?.rawValue, ofType: "lproj"),
          let bundle = Bundle(path: path) else { return "" }
    return bundle.localizedString(forKey: self, value: nil, table: nil)
  }
    
  func localizeWithFormat(arguments: CVarArg...) -> String {
     return String(format: self.localized, arguments: arguments)
  }
}

使用示例

let formatedString = "TEXT_CANDY_COUNTER".localizeWithFormat(arguments: candiesEaten)

如何在 Swift 中将 NSLocalizedString 函数与变量一起使用?

于 2021-11-25T11:51:46.717 回答