【问题标题】:Localizable.strings not working inside a ListLocalizable.strings 在列表中不起作用
【发布时间】:2021-12-25 17:14:58
【问题描述】:

为了演示我的 SwiftUI 本地化问题,我准备了a simple test project at Github

它显示ContentView.swift中的游戏列表:

List($vm.currentGames, id: \.self) { $gameNumber in
    NavigationLink(
            destination: GameView(gameNumber: gameNumber)
        ) {
        Text("game-number #\(gameNumber)")
    }
}

来自GamesViewModel.swift:

class GamesViewModel: ObservableObject /*, WebSocketDelegate */ {
    @Published var currentGames: [Int] = [20, 30]
    @Published var displayedGame: Int = 0

对于 DE、EN、RU 的本地化,我添加了 Localizable.strings:

"app-title" = "Wähle ein Spiel!";
"update-games" = "Spiele erneuern";
"join-random-game" = "Zufallsspiel beitreten";
"game-number #%d" = "Spiel #%d";

虽然前 3 个条目运行良好(您可以在上面的屏幕截图中将它们视为应用标题和 2 个按钮标签),但最后一个条目不起作用(如屏幕截图中的红色箭头所示),

我尝试了很多事情都没有成功:

  • %d 替换为%lld
  • 删除了两边的# 字符
  • game-number 替换为 game
  • 尝试使用Text(LocalizedStringKey("game-number #\(gameNumber)"))
  • 尝试使用Text(String(format: NSLocalizedString("game-number #%d", comment: ""), gameNumber)) - 始终显示 EN 字符串“Game #...”

没有任何帮助,请问这里有什么问题?

更新:

我在Hacking with Swift 论坛收到了很好的建议。

【问题讨论】:

  • 使用逐字或 LocalizedStringKey?或者您是说其他带有占位符(以及变量)的也可以吗?见developer.apple.com/documentation/swiftui/text
  • Text(LocalizedStringKey("game-number #\(gameModel.gid)")) 也不分叉?
  • @Larme 请看看我更新的问题!我添加了一个简单的测试项目来演示我的问题。不幸的是,Text(LocalizedStringKey("game-number #\(gameNumber)")) 也无济于事。
  • 我不是 SwiftUI 用户,所以...但是Text(String(format: NSLocalizedString("game-number #%d", comment: ""), gameNumber)) 似乎工作...我不知道为什么...
  • 不幸的是,您的建议Text(String(format: NSLocalizedString("game-number #%d", comment: ""), gameNumber)) 仅显示英文字符串“Game”,但并未真正本地化。无论我在菜单中选择哪种语言。

标签: swift list swiftui localization localizable.strings


【解决方案1】:

可能存在数字格式的错误,至少以下适用于字符串。

List($vm.currentGames, id: \.self) { $gameNumber in
    NavigationLink(
        destination: GameView(gameNumber: gameNumber)
    ) {
        Text("game-number #\(String(gameNumber))")  // << here !!
    }
}

.strings中的组合

"game-number #%@" = "Game #%@";
"game-number #%@" = "Spiel #%@";
"game-number #%@" = "Игра #%@";

使用 Xcode 13 / iOS 15 测试

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-14
    • 1970-01-01
    • 1970-01-01
    • 2011-12-24
    • 1970-01-01
    • 2013-09-25
    相关资源
    最近更新 更多