スプレッドシートでアプリのローカライズを管理して効率を上げる方法【多言語/Swift/Xcode】



iOSアプリを多言語に対応しながら開発している時に、もっとラクな方法はないだろうかとつねづね思っていた。
NSLocalizedString では入力補完がないし、項目が多くなると同じ翻訳をしていたことにも気づかずかないありさまとなってしまう。

何か良い方法はないかと探していたところ、Googleのスプレッドシートで管理する方法を見つけることができた。

この方法を自分のiPhoneアプリの開発環境にいれてみたところ、めちゃくちゃ管理が便利になった!
作業効率アップまちがいナシなので、ローカライズ作業に翻弄されている方はこの記事で紹介する方法をぜひ試してみて欲しい。






【完成イメージ】スプレッドシートでアプリのローカライズを管理して効率を上げる方法




画像のようにスプレッドシートでローカライズを管理することを目標にする。

そしてスプレッドシートから stringsファイル を書き出し、Xcodeプロジェクトへ半自動でコピーさせる。

これを実現するために、Googleドライブを一旦経由することになる。

スプレッドシート » Googleドライブ » Xcodeプロジェクト

まずはスプレッドシートでキーワードと翻訳の管理からやっていこう。





スプレッドシートでローカライズ管理




スプレッドシートでローカライズの管理をするため、次のように列を構成する。

  • A、B、C列は、large、middle、smallと3つのキーワードで管理する。
  • D列はでA、B、Cをコンマで結合する。
  • E列は日本語、F列は英語の翻訳とする。

今回紹介するプログラムは、この並び順通りにやらないとうまく動かないので注意が必要。

ここでD列には数式、=A2 & "." & B2 & "." & C2 を入れればA、B、Cの値をコンマ結合してくれる。



Googleドライブに書き出すための準備


ファイルを書き出す場所を指定するために、予めGoogleドライブにフォルダを作っておく。

ブラウザーからGoogleドライブへアクセスし、localize フォルダを作成。
さらにそのフォルダ内にen.lprojja.lproj という名前のフォルダを作成する。

これらの名前は、自分のXcodeプロジェクトに合わせて決めている。



先ほど作ったGoogleドライブの3つのフォルダのURLを調べる。
https://drive.google.com/drive/folders/xxxxxxxxxxxxxxxx

スプレッドシートからGoogleドライブへ書き出すためには、この xxxxxxxxxxxxxxxx が必要になるのでメモしておく。


それと、MacとGoogleドライブを自動で同期できるように 「Backup and Sync from Google」 をインストールしておこう。
バックアップと同期のダウンロード - 無料のクラウド ストレージ





スクリプトエディタでスプレッドシートからGoogleドライブへ書き出すプログラム


スプレッドシートのスクリプトエディタを使って Localizable.strings ファイルと Localize.swift をGoogleドライブに書き出していく。
Localize.swiftNSLocalizedString のラッパークラスで、使い方はこの記事の最後に説明する。


スプレッドシートからGoogleドライブへ書き出すために、スクリプトエディタの設定を行う。

スプレッドシートのメニューから ツールスクリプトエディタ を選択。


次のコードを貼り付ける。




sheetName にはスプレッドシートのシート名を、
DriveApp.getFolderById('xxxxxxxxxxxxxxxx'); には、先ほどGoogleドライブでメモしたIDを入力しておくこと。


スプレッドシートからデータを読み込んで整形し、Localize.swiftLocalizable.strings としてファイルをGoogleドライブへ書き出すプログラムとなっている。

これらのソースはこちらにあった記事を元に、自分なりに改造させてもらった。
» 参考: 多言語リソース管理がめんどくさいので、どうにかして楽がしたいと思った話




書き出すプログラムの実行


それではスクリプトを実行してみよう。

関数を選択 から localize を選びクリックする。



設定に間違いがなければ、しばらくするとGoogleドライブにファイルが書き出されているはずだ。

いちいちスクリプトエディタを開いて書き出すのは面倒なので、スプレッドシートにボタンを設置しておくと大変便利。



ボタンの作り方は、スプレッドシートのメニュの 挿入図形描画 から適当にボタン画像を作る。
その後、スプレッドシートに挿入されたボタンを右クリックして、右上に表示される「...」をクリックするとメニューが表示されるので スクリプトを割り当て を選択して先ほど作った関数 localize を入力すればOKだ。





シェルスクリプトでファイルの更新を監視、コピーする


Googleドライブに書き出されたファイルを、Xcodeのプロジェクトへ、いちいち手作業でコピペするのはめんどくさい。

そこで、Googleドライブのファイルが更新されたら、Xcodeプロジェクトへ自動でファイルをコピーしてくれるシェルスクリプトを作ってみた。

こういった細かな自動化は作業の効率アップになるのでとても重要、少し手間でもやってみよう。



慣れないシェルスクリプトだと難解に感じるかもしれないが、プログラムでやっていることはとてもシンプルで、3秒おきにファイルの更新時間をチェックし、コピーするかしないかを判定していだけだ。

SOURCEDIST はプロジェクトの環境に合わせて設定しよう。


それでは最後に Localize.swift の使い方を説明する。





NSLocalizedStringをラッピングするLocalize.swift


Localize.swift は簡単に言えば NSLocalizedString を使いやすくするためのラッパークラスだ。

enumで定義しているので入力補完が効く。




使う時は次のような感じだ。

Localize.string(.generalAlertShare, comment:"シェアする")


結局 NSLocalizedString とあまり変わらない形になってしまったが、スプレッドシートで翻訳を管理できるメリットとenumによるサジェスト効果の恩恵はたいへん大きい

あとあとコードを見返す時に何をやっているのか分からなくなるため、commentは日本語を書いておいた方が無難だろう。
しかしcommentをいちいち入力するのは面倒なので、日本語の Localizable.strings に関数をコピペできるようコメントアウトで表記しておいた。




以上でスプレッドシートでアプリのローカライズを管理して効率を上げる方法の説明を終わる。


グローバルWebサイト&アプリのススメ グローバルジェネラリストなWeb担当者を目指して

Webサイト・サービス、アプリのグローバライズのノウハウを多くの事例から導き出した書籍です。アクセシビリティ、表示パフォーマンスといったコンテンツの実装要件がほぼほぼ出そろったいま、あらゆるWebサイトが検討すべき事項はコンテンツそのものの質の向上で、その重要なテーマにグローバライセーションとローカライゼーションがあります。

Amazon


あなたにおすすめ