以前まで、iOSアプリの多言語対応(ローカライズ対応)ではプロジェクトにstringFileを追加して、アプリ内のStringを手作業で入力していましたが、Xcode15からiOSアプリのローカライズにString Catalogによる方法が追加されました。
Appleの”Localizing and varying text with a string catalog”のページをChat GPTで要約したものです。
アプリの多言語対応は、ユーザーエクスペリエンス向上に不可欠です。ただ翻訳だけでなく、複数形やデバイス別のテキスト表示も考慮すべきです。
Xcode内で文字列カタログを使用して、アプリ内のテキストを翻訳できます。これにより、コード内のすべてのローカライズ可能な文字列がトラッキングされ、翻訳が集約されます。
テキストを翻訳可能にするためには、String(localized:)イニシャライザを使用します。String(localized:)は古いプラットフォーム向けにNSLocalizedStringマクロも利用できます。翻訳にコンテキストを提供するため、コメントも追加しましょう。
プロジェクトに文字列カタログを追加するには、ファイル > 新規 > ファイルを選択し、String Catalogを選択します。文字列カタログが大きくなる場合、複数のカタログをプロジェクトに追加し、翻訳ごとに使用するカタログを選択します。
複数言語をサポートするには、プロジェクトに言語を追加します。各言語に対応するために、文字列カタログ内でローカライズ可能なテキストを追加します。Xcodeはビルド時に自動的に文字列カタログとアプリを同期させ、翻訳の進捗率を表示します。
翻訳は手動で入力するか、エクスポートしてサードパーティに翻訳を委託し、インポートすることができます。プラットフォームの違いによる複数形に対応するために、文字列内で複数形に依存する値を使用し、文字列カタログエディタで複数形オプションを設定します。
デバイスごとにテキストを変更する場合、文字列カタログエディタの「Vary by Device」オプションを使用します。最後に、シミュレータで翻訳をテストする方法について説明されています。
Xcode15では新規ファイル作成でstring catalogが追加できます。
追加するにはXcodeで新規ファイル追加画面から”String”などで検索すると”String Catalog”というのが出てくるので、プロジェクトに追加します。ファイル名は”Localizable”にしてます。
追加するとAppファイルのLocalizationsに登録されている言語が設定された状態で作成され、ここで一度buildするとソースコード内のStringをキーとして自動で入力してくれます。これがめっちゃ便利。翻訳忘れが激減です。
String Catalogファイルにキーが入力されたら、それに対する翻訳を入力していきます。
自分はプライマリ言語を英語、ソースコード内のStringも英語で書いてそれを日本語ローカライズしました。
String Catalogでは対応の進捗度が%で表示されたり、一回buildした後にコードを編集して変わったstringに注意マークを出してくれたりしてて、ローカライズ漏れがないようになっています。
入力されるのは、Text(),String()などで、Textfield(title:”**”)の**などは入力されませんでした。
またButton(label:{Text(”**”)})などもローカライズされませんでしたが、
Buttonの中のTextなどはプロパティとして
let buttonText : Text = Text("hugahuga")
などとし
Button(label {buttonText}){}
というふうにするとうまいこと自動でローカライズされるようです。
アプリ名などInfoPlistをローカライズするときは、追加するstring catalogファイルのファイル名を”InfoPlist”に変更すると、上記と同様一回buildするとInfoPlist内のローカライズ可能なStringがキーとして登録されます。ファイル名が間違っているとうまくいきませんのでご注意を。
以前のstring Fileもまだ使えますが、新規でSwiftUIを用いてアプリを作成するときはstring catalogを使ったほうが手間がかからずに良いと思います。
以上
コメント