Swift(iOS)中带有占位符和复数支持的动态字符串
我是Swift和iOS编程新手,我遇到了一个关于Swift中带有占位符和复数支持的动态字符串的问题 例如,如果您有一个多语言应用程序,并且不想硬编码字符串、标签和消息等 我可以在Android中轻松完成此操作,在不同文件夹的XML文件中使用以下代码,Android设备将根据当前区域设置查找字符串:Swift(iOS)中带有占位符和复数支持的动态字符串,ios,swift,Ios,Swift,我是Swift和iOS编程新手,我遇到了一个关于Swift中带有占位符和复数支持的动态字符串的问题 例如,如果您有一个多语言应用程序,并且不想硬编码字符串、标签和消息等 我可以在Android中轻松完成此操作,在不同文件夹的XML文件中使用以下代码,Android设备将根据当前区域设置查找字符串: <string name="name">You have %2$d new messages.</string> <plurals name="name">
<string name="name">You have %2$d new messages.</string>
<plurals name="name">
<item quantity="one">You have a new message.</item>
<item quantity="other">You have %2$d new messages.</item>
</plurals>
这项工作是在安卓系统中完成的,我正在寻找对应于Swift(iOS)的解决方案。详细介绍了复数的含义。提供了IOS的代码示例
在某些语言中,复数形式的工作方式与汉语不同
英语。有些语言不表示复数(如日语),
而对于其他人来说,这个词会根据数量而变化(例如
如俄文)
为了让事情变得简单一点,iOS对不同的复数进行了分类
类型如下:
- 零。用于表示0数量
- 一个。用于表示正好为1的数量
- 两个。用于表示正好为2的数量李>
- 很少。用于表示大于2的小数量,但这取决于语言李>
- 很多。用于表示大数字,但这也取决于语言
同样,归功于1:Setup project
本地化
,如屏幕截图所示,该项目使用英语和俄语
2:创建一个名为Localizable.stringsdict
的空属性列表文件,并粘贴以下内容:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NumberOfMessages</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@value@</string>
<key>value</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>d</string>
<key>one</key>
<string>You have a new message.</string>
<key>other</key>
<string>You have %d new messages.</string>
</dict>
</dict>
</dict>
</plist>
输出:您有一条新消息
String(format: NSLocalizedString("NumberOfMessages", comment: ""), 2)
输出:您有两条新消息
复数规则:在XML代码中,请注意one
和other
,根据语言和您的要求,您可以在这里使用zero
、one
、two
、month
、other
有关特定语言复数规则的更多信息,请使用以下链接:很少免费转换代码,请自己尝试一下,如果遇到问题,我们将在这里提供帮助。Apple文档中的“复数规则属性”:如果占位符是另一个字符串而不是复数计数器,该怎么办?我在这里问了这个问题:这个解决方案在iOS 14中不起作用
let format = NSLocalizedString("number_of_days", comment: "")
let message = String.localizedStringWithFormat(format, numDays)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NumberOfMessages</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@value@</string>
<key>value</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>d</string>
<key>one</key>
<string>You have a new message.</string>
<key>other</key>
<string>You have %d new messages.</string>
</dict>
</dict>
</dict>
</plist>
String(format: NSLocalizedString("NumberOfMessages", comment: ""), 1)
String(format: NSLocalizedString("NumberOfMessages", comment: ""), 2)