多言語対応アプリの開発は非常に大変だ。特に、アプリ内で使用される各種テキストを管理する「文字列リソース」の取り扱いについては、更新や検証に多大な労力を要する。この課題を解決するために、csv2strings というスクリプトを公開した。
csv2strings は、Googleドキュメントのスプレッドシートを利用し、iOS用の Localizable.strings
と Android用の strings.xml
というローカライズファイルを自動生成するRuby製のツールだ。
2019年7月、前回のブログ記事で、同様のツールを紹介した。しかし、旧バージョンのツールはSwiftを使っているため、コードの変更ごとにコンパイルが必要で、編集作業が煩雑だった。
新しく公開したRuby版の利点は、コードの修正が容易であること、そしてmacOSだけでなく他のOSでも動作する点にある。特にCIサービスでは、Androidアプリの開発環境としてよくUbuntuが使用されるが、以前のmacOS専用のバイナリ形式はこの環境では動かなかった。
iOSアプリ開発に不可欠なライブラリ管理ツール「CocoaPods」はRubyで動作するため、多くの開発者は既にRuby環境を構築済みである。Ubuntu上でもRubyは標準的に利用できるため、追加で特別なインストールを行う必要はない。
文字列リソースの自動生成の背景
そもそも文字列リソースの自動生成を始めた背景としては、あるプロジェクトで対応する言語が急に7つに増えた経験にある。
もともと日本語のみ対応のアプリだったものが、国際市場に進出するため、英語、韓国語、中国語(繁体・簡体)、ドイツ語、イタリア語、フランス語にも対応することになった。
それまでは、Localizable.strings
と strings.xml
の作成を手動で行っていたが、それらの文言を外部の翻訳サービスに依頼し、エクセルシートで受け取った後、一つ一つ手作業でコピー&ペーストする作業は、効率が悪くミスも多発していた。
特に英語以外の言語での区別が難しく、コピペミスが起こりやすい状況だったため、チームでアクセス可能なGoogleドキュメントのスプレッドシートに情報を集約し、そこからiOS/Androidのローカライズファイルを自動生成する方法を導入した。
ツールの使用方法
「csv2strings」は、Google Docsのスプレッドシートに記入された情報をcsv形式でダウンロードし、それを基に Localizable.strings
と strings.xml
を生成する。機械的に実行されるため、作業の効率化に寄与しエラーを減らすことができる。
具体的な使用例を以下に示す。Google Docsに更新されたテキストを含むcsvファイルをダウンロードし、それを使用してローカライズファイルを生成、そしてアプリの対応するディレクトリにそれらのファイルをコピーしている。
# Google Docsからcsvをダウンロードする curl -L "https://docs.google.com/spreadsheets/{GUID}&output=csv" -o "${ENV_RESOURCES_DIR}strings/string.csv" sleep 5 # csvから文字列リソースを生成 ruby csv2strings "${ENV_RESOURCES_DIR}strings/string.csv" "${ENV_RESOURCES_DIR}strings/" # アプリへ展開 cp $ENV_RESOURCES_DIR/strings/ios/ja/Localizable.strings $PROJECT_DIR/ios/ptcgnote/Resource/ja.lproj/Localizable.strings
このスクリプトを使用することで、文言の変更や多言語対応が機械的に、かつ効率的に行えるようになり、アプリ開発のプロセスが大幅に簡素化できた。
関連記事
過去の投稿で紹介したcsv2stringsの初期バージョン。