こんにちは。今回は、私が開発している「ごほうび習慣プラス」を多言語対応した際に必要だった手順について解説します。
「ごほうび習慣プラス」は、日常の小さな成果を記録し、自己肯定感を高めることを目的としたアプリです。このアプリは、ユーザーが日々の目標を設定し、達成した際に自分自身にご褒美を与えることで、継続的な自己改善を促します。シンプルで直感的なインターフェイスを通じて、ユーザーは自身の進捗を追跡し、長期的な目標達成に向けて励むことができます。
「ごほうび習慣プラス」が多言語に対応した背景には、世界中のユーザーへのアクセス拡大という明確な目的があります。日本語を母語とするユーザーだけでなく、英語や中国語を話すユーザーもこのアプリを利用できるようになることで、より広い範囲のユーザーに自己改善の機会を提供できるようにしたいという目標があります。
String Catalogsによる多言語化
1. String Catalogsの概念
String Catalogsは、WWDC23で紹介されたSwiftの新しい機能で、開発者がアプリのローカライズプロセスをより効率的に行えるように設計されています。これは、異なる言語のテキストをカタログ化し、それらをアプリ内で簡単に管理・参照できるようにするツールです。String Catalogsは、従来の.strings
ファイルに代わるものとなっているようです。
https://developer.apple.com/videos/play/wwdc2023/10155/
2. String Catalogの利点
開発者は、異なる言語のテキストを一つの場所で管理し、アプリ内で簡単に切り替えることができます。また、String Catalogsを使用すると、文字列の自動追加により、翻訳の一貫性を保ちやすくなります。またXcode上で開発中にリアルタイムでのプレビューが可能となり、エラーの発見と修正が容易になります。翻訳にレビューが可能となり、順番に1つ1つ確実に翻訳作業ができるところが利点です。
3. String Catalogsの使用方法
String Catalogを使用するには、まずXcodeプロジェクトにカタログファイルを追加します。まずは一旦ビルドすることをおすすめします。LocalizedStringKeyで参照している文字列が全てカタログに追加されます。また異なる言語のテキストを適切なセクションに入力し、必要に応じて翻訳を追加できます。コード内では、これらのテキストにアクセスするために特定のキーを参照します。Xcodeは、これらのキーに基づいて適切な言語のテキストを自動的に読み込み、表示します。詳しくはAppleの開発者用ビデオを見るのが一番早いと思います。
4. デメリット
デメリットとしては、従来のNSLocalizedStringを使って翻訳済みの文字を呼び出す必要があるところです。引数なしの場合はLocalizedStringKeyを引数とするSwiftUIのコンポーネントに直接Keyを入れることができます。しかし、「〇〇年〇〇月」などの引数があるときです。このときは
Text(String(format: NSLocalizedString("YearAndMonthWithPlaceholders", comment: ""), currentYear, currentMonth))
のように、コードが冗長になってしまいます。また、型の違う値を引数に入れてしまうとアプリがクラッシュします。
また、Keyを手打ちする必要があるという点です。打ち間違いなどがあると、Keyがそのまま出力されたりします。このような自体を防ぐために従来はSwiftGenなどを導入することがありましたが、SwiftGenは現時点ではString Catalogsには対応していないようです。
https://github.com/SwiftGen/SwiftGen/issues/1065
ただ、Keyが間違っていると、その差分がCatalogに反映されるのでどこが間違っているか完全に見失うみたいなことにはならなそうです。
翻訳の漏れが自動でわかるのは非常にありがたいと思いました。
最後に、習慣化を達成したい方は「ごほうび習慣プラス」をぜひ使ってみてください
この記事は役に立ちましたか?
もし参考になりましたら、下記のボタンで教えてください。
コメント