5

この文字列をswift for iOSで複数のstringdictを使って翻訳したい

  • %1$@にとどまる
  • %1$@に滞在

この質問のおかげで、プレースホルダーなしで単純な複数形を使用する と機能しますが、文字列プレースホルダーを追加すると、アクセスするとクラッシュします。

通常の複数形は、次の 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>

そして、この迅速なコードを使用して、文字列プレースホルダーなしで上記の複数形を参照します。

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

問題は、文字列プレースホルダーを翻訳に追加すると、それを読み取ろうとするとクラッシュすることです。以下の 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>

この迅速なコードを使用して上記の複数形を取得すると、スタックトレースなしで不明なクラッシュが発生します。

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

1 に答える 1

7

定位置パラメーターn$は 1 から始まるので、

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

"Name"は 2 番目のパラメーターであり、次のように参照します%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。それはクラッシュにつながる文字列ではありません。

または、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>
于 2016-08-27T11:41:34.407 に答える