【发布时间】: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)")
}
}
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