【问题标题】:SwiftUI: Uppercase a localized string for a view, e.g. `Text`?SwiftUI:大写视图的本地化字符串,例如`文本`?
【发布时间】:2019-08-20 12:20:47
【问题描述】:

使用 Xcode beta 6 和 SwiftUI,使用 >本地化 字符串创建 Text 视图,我怎样才能将其大写 而不必将本地化字符串值大写?我想我想要一个 ViewModifier 来更改大小写,但它似乎不存在?

Text("SignIn.Body.Instruction".uppercased()) 会将本地化 key 大写,因此这将不起作用,如SO question about uppercasing a non-localized string 中所述。

【问题讨论】:

标签: swiftui xcode11


【解决方案1】:

smallCaps 修饰符用于Font 怎么样?例如,Text("Hello World").font(Font.body.smallCaps()) 将呈现 "HELLO WORLD",但底层字符串将保留其适当的本地化大写以方便访问。

【讨论】:

    【解决方案2】:

    现在可以使用所有 new textCase ViewModifier(Xcode 12 Beta 3),如下所示:

    Text("SignIn.Body.Instruction")
        .textCase(.uppercase)
    

    lowercase:

    Text("SignIn.Body.Instruction")
        .textCase(.lowercase)
    

    【讨论】:

      【解决方案3】:

      手动本地化,然后大写。

      extension String {
          func toUpperCase() -> String {
              return localized.uppercased(with: .current)
          }
          private var localized : String {
              return NSLocalizedString( self, comment:"")
          }
      }
      
      Text("SignIn.Body.Instruction".toUpperCase())
      

      【讨论】:

      • NSLocalizedString( self, comment:"") 不是一个好主意,因为 NSLocalizedString 的关键参数不是恒定的。因此 genstrings 和 Xcode Editor -> Export for Localization 无法选择它。短期内它可能很方便,但是当你以后必须在应用程序中手动查找所有要本地化的字符串时,它会咬你!
      • 您不想使用大写的(),它适用于编程字符串,而不是面向用户的字符串,因为它不考虑语言环境。见.uppercased(with: Locale.current))
      • 我不知道 .uppercased(with: Locale.current)) 感谢您的提示。至于 genstrings 的问题,您的观点非常有效,但是在 SwiftUI 中,我希望不必经常使用我的方法,大部分本地化将由 Text() 自动处理。
      猜你喜欢
      • 1970-01-01
      • 2022-09-24
      • 2023-04-02
      • 2015-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-23
      相关资源
      最近更新 更多