swift - 格式化具有多个值的本地化字符串
问题描述
我创建了一个本地化字符串,其形式类似于
"text_key" = "Collected %d out of %d";
并使用以下格式化程序:
let numberOfItems = 2
let totalNumberOfItems = 10
let format = NSLocalizedString("text_key", comment: "Says how many items (1st var) were collected out of total possible (2nd var)")
let text = String.localizedStringWithFormat(format, numberOfItems, totalNumberOfItems)
这使
"Collected 2 out of 10"
但是我可以想象,在某些语言中,让这些值以不同的顺序出现会更自然,从而导致无意义的字符串,例如
"Out of a possible 2 items you collected 10"
我找不到一种简单的方法来使用标准 Swift 库进行编码,例如
"text_key" = "Out of a possible {2%d} items you collected {1%d}"
并且可以看到随着更多值的添加,对这些进行硬编码变得很麻烦。
解决方案
String.localizedStringWithFormat()
与“位置参数”一起使用
%n$
。在你的情况下
"text_key" = "Out of a possible %2$d items you collected %1$d"
会成功的。
这些记录在fprintf
:
转换可以应用于参数列表中格式之后的第 n 个参数,而不是下一个未使用的参数。在这种情况下,转换说明符字符 %(见下文)被序列“%n$”替换,其中 n 是 [1,{NL_ARGMAX}] 范围内的十进制整数,给出参数在参数中的位置列表。
推荐阅读
- powerbi - PowerQuery 编辑器在我的表上抛出一个错误
- c# - 如何从委托中获取目标方法信息
- javascript - 如何将谷歌分析代码应用于本地和生产
- python - 如何从列表中弹出项目并使用python根据条件将其推回列表
- python - 如何提取给定单元格的值?
- ios - 如何确定哪些线程正在占用我的 iOS 应用程序中的内存 - 来自 Instruments 的信息是有限的?
- jquery - 样式不适用于使用 jquery 动态生成的切换按钮
- matlab - 通过 Matlab 向现有 csv 文件添加新列
- c++ - SQLite sqlite3_column_text 返回什么类型的值?
- python - 数据帧中的列之间的操作期间不支持的操作数