酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

お手軽多言語対応!GoogleドキュメントのスプレッドシートからiOSとAndroidの文字列リソースを生成 (2023年10月版)

多言語対応アプリの開発は非常に大変だ。特に、アプリ内で使用される各種テキストを管理する「文字列リソース」の取り扱いについては、更新や検証に多大な労力を要する。この課題を解決するために、csv2strings というスクリプトを公開した。

csv2strings は、Googleドキュメントのスプレッドシートを利用し、iOS用の Localizable.strings と Android用の strings.xml というローカライズファイルを自動生成するRuby製のツールだ。

github.com

2019年7月、前回のブログ記事で、同様のツールを紹介した。しかし、旧バージョンのツールはSwiftを使っているため、コードの変更ごとにコンパイルが必要で、編集作業が煩雑だった。

新しく公開したRuby版の利点は、コードの修正が容易であること、そしてmacOSだけでなく他のOSでも動作する点にある。特にCIサービスでは、Androidアプリの開発環境としてよくUbuntuが使用されるが、以前のmacOS専用のバイナリ形式はこの環境では動かなかった。

iOSアプリ開発に不可欠なライブラリ管理ツール「CocoaPods」はRubyで動作するため、多くの開発者は既にRuby環境を構築済みである。Ubuntu上でもRubyは標準的に利用できるため、追加で特別なインストールを行う必要はない。

文字列リソースの自動生成の背景

そもそも文字列リソースの自動生成を始めた背景としては、あるプロジェクトで対応する言語が急に7つに増えた経験にある。

もともと日本語のみ対応のアプリだったものが、国際市場に進出するため、英語、韓国語、中国語(繁体・簡体)、ドイツ語、イタリア語、フランス語にも対応することになった。

それまでは、Localizable.stringsstrings.xml の作成を手動で行っていたが、それらの文言を外部の翻訳サービスに依頼し、エクセルシートで受け取った後、一つ一つ手作業でコピー&ペーストする作業は、効率が悪くミスも多発していた。

特に英語以外の言語での区別が難しく、コピペミスが起こりやすい状況だったため、チームでアクセス可能なGoogleドキュメントのスプレッドシートに情報を集約し、そこからiOS/Androidのローカライズファイルを自動生成する方法を導入した。

ツールの使用方法

「csv2strings」は、Google Docsのスプレッドシートに記入された情報をcsv形式でダウンロードし、それを基に Localizable.stringsstrings.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の初期バージョン。

blog.ch3cooh.jp