iOSアプリでのString Catalogs使用ガイド
前書き
iOS 15以降で使えるString Catalogsは複数形が存在する場合など柔軟な対応が取れる。またこれまでの.stringsファイルよりも簡単に管理できる。ただし後方互換性はないのでiOS 14以前では使えない事に留意する。iOS 15はiPhone SE(第1世代)でも利用出来るから、十分と言えるだろう。
1. String Catalogの作成
- Xcodeで、
File > New > File
を選択する。 Resource
セクションからStrings Catalog
を選択する。- ファイル名を入力する(例:
Localizable.xcstrings
)。 - 保存場所を選択し、
Create
をクリックする。
2. 言語の追加
- プロジェクトナビゲータで
.xcstrings
ファイルを選択する。 - File Inspectorで
Localize...
ボタンをクリックする。 - 必要な言語を選択して追加する。
3. 文字列の追加
.xcstrings
ファイルを開く。+
ボタンをクリックして新しい文字列を追加する。- キー、値、およびコメント(オプション)を入力する。
- 各言語の翻訳を入力する。
例:
{
"welcome_message" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Welcome"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "ようこそ"
}
}
}
}
}
4. コードでの使用
Swiftコードで文字列を使用する際は、String(localized:)
イニシシャライザを使用する:
let welcomeMessage = String(localized: "welcome_message")
または、LocalizedStringResource
を使用して型安全な方法で文字列を取得できる:
let welcomeMessage = String(localized: String.LocalizationValue("welcome_message"))
5. 変数の使用
- String Catalogで、変数を使用する文字列を追加する:
{
"greet_user" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Hello,
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "こんにちは
}
}
}
}
}
- コードで変数を渡す:
let username = "Alice"
let greeting = String(localized: "greet_user", defaultValue: "Hello, \(username)!")
6. 複数形対応
- String Catalogで複数形に対応した文字列を追加する:
{
"items_count" : {
"localizations" : {
"en" : {
"variations" : {
"plural" : {
"one" : {
"stringUnit" : {
"state" : "translated",
"value" :
}
},
"other" : {
"stringUnit" : {
"state" : "translated",
"value" :
}
}
}
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" :
}
}
}
}
}
- コードで使用:
let itemCount = 5
let message = String(localized: "items_count", defaultValue: "\(itemCount) items", count: itemCount)
7. SwiftUIでの使用
SwiftUIでは、Text
ビューで直接ローカライズされた文字列を使用できる:
Text("welcome_message")
変数を含む場合:
Text("greet_user \(username)")
注意点
以下は使用上の注意
- プロジェクト設定で
Use Compiler to Extract Swift Strings
オプションを有効にすると、コード内の文字列を自動的に抽出できる。 - 大規模なプロジェクトでは、複数の
.xcstrings
ファイルを使用して文字列を整理することができる。 - プロジェクト全体で一貫したキー命名規則を使用すること。
- コメントを活用して、文字列の使用コンテキストを翻訳者に伝えること。
-
変数や複数形の適切な使用。
-
定期的に未翻訳の文字列をチェックし、すべての言語で完全な翻訳を維持すること。
まとめ
地味だが重要な機能強化である。以前から、Appleの国際化対応は今ひとつだと感じていた。積極的に導入していきたい。