【Swift/Xcode】String Catalogsで文字列をローカライズする方法!

【Swift/Xcode】String Catalogsで文字列をローカライズする方法!

この記事からわかること

  • Xcode/iOSString Catalogs文字列ローカライズする
  • Localizable.xcstringsファイルとは?
  • 変数埋め込み複数形の対応方法

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

環境

String Catalogs

公式リファレンス:String Catalogs

String Catalogs」はWWDC23で発表された文字列リソースのローカライズ方法の1つです。これまでは「Localizable.strings」ファイルを使用したローカライズ方法が主流でしたが、シンプルなテキストファイルにおけるキーバリュー形式での管理は少しレガシーな印象を受けていました。

発表された「String Catalogs」では専用のビジュアルエディタで操作することができるため、直感的に文字列を管理することができるようになりました。また自動生成機能も搭載しており、アプリ内から文字列を抽出し自動でカタログに追加することも可能になっています。

【Swift/Xcode】String Catalogsで文字列をローカライズする方法!

使い方:Localizable.xcstringsの追加

String Catalogs」を使用するためにはXcode上部メニューから「File」>「New」>「File from Template」>「String Catalog」を選択します。これでプロジェクト内に「Localizable.xcstrings」ファイルが生成されます。

【Swift/Xcode】String Catalogsで文字列をローカライズする方法!

生成されたファイルをクリックしてみると以下のような画面になります。最初は空の状態で左側も「English」しかないかもしれません。左の言語はプロジェクトの言語設定に依存しているので以下記事を参考に「Japanese」を追加すると連動して表示されるようになります。

【Swift/Xcode】String Catalogsで文字列をローカライズする方法!

文字列リソースの追加

String Catalogs」では以下の項目で文字列リソースが管理されています。「Key」は言語間で共通になっており、どれかの言語に追加すると自動で他の言語にも追加されるようになっています。

追加・削除は上部にある「+」・「-」で行うことが可能になっており、追加したリソースはSwift UIであればString(localized:)を使用することで参照することができ、Text構造体であればそのまま指定するだけで反映されるようになります。


String(localized: "welcome_message")
Text("welcome_message") // Text構造体にもそのまま使用できる

UIKitであればNSLocalizedStringを使用します。


NSLocalizedString("welcome_message", comment: "")

自動生成機能

String Catalogs」ではビルド時に自動で文字列リソースを生成す流機能が用意されています。これはSwift UIでText構造体やTextField構造体を使用している場合に検知して追加してくれるようです。


Text("greeting") // greetingが未定義の場合に自動で追加される

※ デフォルトではText構造体に指定している場合に自動生成された項目はそのText構造体が存在する間は「-」ボタンで消すことができないので注意してください。(詳細は後述)

嬉しい機能として使用箇所を簡単に把握し、定義へ飛ぶことが可能です。インスペクタエリアに使用しているファイル名が表示され、クリックすることで定義へジャンプすることができます。

自動生成機能を無効にする

自動生成機能を無効にしたい場合はText(verbatim:)を使用します。verbatimローカライズを使用せずに素の文字列として認識させることができるイニシャライザです。

Text(verbatim: "A")
// TextFieldでは明示的にStringでラップすることで回避できる
TextField(String("0"), text: $input)

Text構造体を残したまま消したい場合は対象の項目の「Managed」を「Manually」に変更すれば削除可能になります。

【Swift/Xcode】String Catalogsで文字列をローカライズする方法!

またそもそも全体的に自動生成機能を無効にしたい場合は「Target」>「Build Settings」>「Use Compiler to Extract Swift Strings」NOにすればOKです。

変数を埋め込む

文字列リソースに変数を埋め込むにはプレースホルダを使用します。データ型ごとに%@のような形式で定義されています。

Key側とValue側にプレースホルダーを指定し呼び出す際に変数を渡せばその値が埋め込まれる形で表示されます。

【Swift/Xcode】String Catalogsで文字列をローカライズする方法!
 Text("welcome_message_\(name)")
Text("age_\(age)")

複数形に対応する

英語などでは複数形で文字列が変化する場合が多いです。そのため渡された変数の値に応じて複数形に文字列を変更することができる機能も用意されています。対象の項目を右クリックして「Very by Plural」をクリックします。

【Swift/Xcode】String Catalogsで文字列をローカライズする方法!

すると項目の中にネストして「One(単数)」と「Other(複数)」が表示されるのでそれぞれ定義しておくだけで変数の値に応じてフレキシブルに変化してくれます。

【Swift/Xcode】String Catalogsで文字列をローカライズする方法!

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

Search Box

Sponsor

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index