如何在swift ios中将常规string占位符添加到翻译后的复数.stringdict

我想在iOS中使用swift中的plurar stringdict来翻译这个string

  • 停留在%1 $ @
  • 留在%1 $ @

使用一个简单的复数没有占位符的作品,感谢这个问题但是,当我添加一个string占位符时,我得到一个崩溃时访问它。

正则复数正在使用以下的XML:

<dict> <key>NSStringLocalizedFormatKey</key> <string>%#@format@</string> <key>format</key> <dict> <key>NSStringFormatSpecTypeKey</key> <string>NSStringPluralRuleType</string> <key>NSStringFormatValueTypeKey</key> <string>li</string> <key>one</key> <string>Sleeps at your place</string> <key>other</key> <string>Sleep at your place</string> </dict> </dict> 

而使用这个swift代码来引用上面的复数forms没有string占位符:

  let format = NSLocalizedString("key_to_plural_above", comment: "") let label = String.localizedStringWithFormat(format, kidsIds.count) 

问题是, 当我添加一个string占位符的翻译,当我尝试读取它崩溃 。 下面的xml是由一个翻译工具( lokalise )生成的,所以我认为它是正确的。

 <dict> <key>NSStringLocalizedFormatKey</key> <string>%#@format@</string> <key>format</key> <dict> <key>NSStringFormatSpecTypeKey</key> <string>NSStringPluralRuleType</string> <key>NSStringFormatValueTypeKey</key> <string>li</string> <key>one</key> <string>Sleeps at %1$@</string> <key>other</key> <string>Sleep at %1$@</string> </dict> 

使用这个swift代码来得到上面的复数,我得到一个未知的崩溃没有任何stacktrace:

 let format = NSLocalizedString("key_to_plural_above", comment: "") let label = String.localizedStringWithFormat(format, kidsIds.count, "Name") 

位置参数n$是一个基于的,如此

 let label = String.localizedStringWithFormat(format, kidsIds.count, "Name") 

"Name"是第二个参数,您可以使用%2$@引用它:

 <key>NSStringLocalizedFormatKey</key> <string>%#@format@</string> <key>format</key> <dict> <key>NSStringFormatSpecTypeKey</key> <string>NSStringPluralRuleType</string> <key>NSStringFormatValueTypeKey</key> <string>li</string> <key>one</key> <string>Sleeps at %2$@</string> <key>other</key> <string>Sleep at %2$@</string> </dict> 

在你的代码中, %1$@引用了第一个参数kidsIds.count 。 这不是一个导致崩溃的string。

或者,把它放到NSStringLocalizedFormatKey:

 <key>NSStringLocalizedFormatKey</key> <string>%#@format@ at %@</string> <key>format</key> <dict> <key>NSStringFormatSpecTypeKey</key> <string>NSStringPluralRuleType</string> <key>NSStringFormatValueTypeKey</key> <string>li</string> <key>one</key> <string>Sleeps</string> <key>other</key> <string>Sleep</string> </dict> 
Interesting Posts