LoginSignup
2
2

SwiftUI Textで複数形に対応する

Posted at

環境

Xcode 14.2
iOS 16.2

概要

SwiftUIでTextとstringdictファイルを使って、複数形対応を行います。

複数形対応

得点などを示す英語pointを例としてみます。

1点を表す場合、one pointとなりますが、複数の得点がある場合はthree pointsなどpointの部分が複数形に変化します。また得点が0の場合もno pointsなどと表現すると思います。

そのような、値によって変化するテキストに対してstringdictでの対応を行います。
設定方法に関しては 公式ドキュメント を参照してください。

SwiftUIによる複数形対応

実際にSwiftUIに複数形対応を行なっていきます。

複数形で表示したいTextを用意

まずは、得点を表現するTextを用意します。
以下は得点を表示するTextと、得点を操作するStepperで構成しています。
Textの中身は変数を含んだ文字列にします。実際に使う場合はユニークな文字列がいいです。

struct ContentView: View {
    @State private var point = 0
    var body: some View {
        VStack {
            Text("\(point) points")
            Stepper(value: $point, in: 0...100) {
                Text("Counter")
            }
        }
    }
}

複数形対応対象のキー名を取得 (省略可能)

ツールバーのProduct→Export Localizations...でxclocファイルが出力されますので、そこから該当のキーを確認してコピーします。
コピーすることでキーを確実にstringdictファイルに入力するのが目的ですが、キーは数値部分が %lld と変換されているものになるので、不要であればこのステップは飛ばしてください。

スクリーンショット 2023-05-11 16.46.08.png

stringdictに該当のキーで値を設定

あとはstringdictに先ほどのキー %lld points を追加します。以下の例では、数値が0の場合は No points、ポイントが1の場合は 1 point、それ以外の場合は pointsの複数形で表示されます。

スクリーンショット 2023-05-11 17.12.07.png

<?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>%lld points</key>
	<dict>
		<key>NSStringLocalizedFormatKey</key>
		<string>%#@VARIABLE@</string>
		<key>VARIABLE</key>
		<dict>
			<key>NSStringFormatSpecTypeKey</key>
			<string>NSStringPluralRuleType</string>
			<key>NSStringFormatValueTypeKey</key>
			<string>lld</string>
			<key>zero</key>
			<string>No points</string>
			<key>one</key>
			<string>%lld point</string>
			<key>other</key>
			<string>%lld points</string>
		</dict>
	</dict>
</dict>
</plist>

動作

以下はシミュレータでの動作の様子です。
ちなみに、stringdictはLanguage Plural Rulesに準拠しているようなので、動作確認するにはシミュレータの言語をEnglishなどのoneに対応した言語で確認する必要があります。

Simulator Screen Recording - iPhone 14 Pro - 2023-05-11 at 17.10.07.gif

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2