Skip to main content
  1. Posts/

Localazyを使ってアプリの多言語文字列リソースを管理する

2021年当時の内容です。 Xcode 15以降では「String Catalogs」が導入され、多言語化のワークフローが簡単になりました。詳しくはiOSアプリを多言語化・日本語化する方法: String Catalogsの使い方に記載しています。

Localazy(ローカライジー?ローカレイジー?)を使用して、アプリが対応する各言語の文字列を管理してみたので、その導入をまとめます。

前提 #

ここでは、iOSアプリのプロジェクトを前提とします。他プラットフォームでも、参考程度にはなるかもしれません。

Localazyを使う前に抱えていた問題 #

実は、ExcelやNumbersなどの表計算ソフトで管理・共有していました。このような運用では、以下のような問題が発生します。

  • 対応言語、複数形対応などで、管理が大変に……
  • コピペミスの恐れ
  • 独自の書き出しスクリプトのメンテや、書き出しエラーへの対処(自由な入力ができることの弊害)

そこで、ググりました。 「localization management platform」と入力して出てきたまとめサイト(英語)を参考にしながら、プロジェクトにあっていそうなサービスを探しました。

Localazy #

Localazyは、無料でもかなりの機能をつかうことができそうだったので、導入のハードルが低かったです。

  • 200の文字列を管理
  • コマンドラインツールがある
  • プライベートアプリも可能
  • メンバーを招待できる
  • 自動翻訳機能
  • strings, stringsdictに対応している
  • 翻訳したバージョンのstrings, stringsdictをダウンロードできる

Localazyの導入手順 #

アカウントを作る #

トップ画面

まずはアカウントを作ります。GitHubアカウントでも作れますし、Googleアカウントでも作れます。 アカウントを作成したあとは、サンプルアプリがダッシュボードに出てきますが、それを無視して始めても問題ありません。

アプリを作る #

「Create New App」から、アプリを作成します。いくつか入力フォームがありますが、おそらくすぐ理解できるでしょう。 アプリ名と、URLに使用するSlagを設定します。アプリのパブリック/プライベートを選択し、ソース言語も選択します。コミュニティによる翻訳を使用するかも、スイッチで選択できるようになっています。なお、これらはあとからでも変更することができます。

アプリ作成画面

文字列をアップロードする #

ブラウザを介して手動でアップロードすることもできますが、ここではコマンドラインでアップロードします。 コマンドラインでできるようにしておいたほうが、開発するときも都合が良いでしょう。 なお、Quick Startが参考になります。

「localazy」コマンドをインストールする #

Macに、localazyコマンドをインストールします。 https://localazy.com/docs/cli/installation#macos

> brew tap localazy/tools
> brew install localazy

もしプロジェクトで使用するコマンドのバージョンを管理したい場合は、NPMやDockerを使用するのも良さそうです。

「localazy.json」を作成する #

アップロード・ダウンロードする文字列リソースのパスを管理するための「localazy.json」を作成します。 JSONのフォーマットについては、以下のリンクが参考になります。

私の担当するプロジェクトでは、以下のようなフォーマットになりました。

{
  ...

  "upload": {
    "files": [
      {
        "type": "ios-strings",
        "pattern": "MyProject/Resources/ja.lproj/Strings.strings"
      },
      {
        "type": "ios-strings",
        "pattern": "MyProject/Resources/ja.lproj/InfoPlist.strings"
      },
      {
        "type": "ios-stringsdict",
        "pattern": "MyProject/Resources/ja.lproj/StringsDict.stringsdict"
      }
    ]
  },

  "download": {
    "files": "MyProject/Resources/${lang}.lproj/${file}",
    "includeSourceLang": true
  }
}

アップロードするファイルパスや、ダウンロードフォルダを指定することができます。 ちなみに、downloadの方ではlangAliasesというプロパティを使えます。おそらく、ダウンロードしたlangのキーと、Xcodeの言語コードが異なる場合に使用できそうです。

アップロードコマンドを叩く #

あとは、localazy.jsonのあるディレクトリでこれを叩くだけ!

> localazy upload

ちなみに、--helpのオプションを付けると、使用できるオプションが表示されます。

文字列を管理する #

では、アップロードした文字列を管理し、各言語への対応をしていきます。

ダッシュボード #

ダッシュボード

こんなかんじで、各言語への対応状況がわかるようになっています。

翻訳画面 #

翻訳画面

翻訳後の文字列を入力できるようになっています。また、Google翻訳を使用した、翻訳提案機能もついています。

.stringsdictで定義した文字列については、複数形の入力もできるようになっています。 Supported plural typesを見たところ、言語によって入力項目が変わるようになっているようです。

アップロードする.stringsファイルにあるコメントは、Translation noteに表示される #

以下のようなStringが定義されているとします。

// Web画面/Webページの読み込みに失敗したときに表示するアラート/タイトル部分
cannotLoadThePage = "ページを読み込めませんでした";

このように、文字列の定義直前でコメントアウトがあると、翻訳画面で以下のような表示を出すことができます。

Translation note

これがあることで、この文字列がどのような文脈で表示されるのか、翻訳の担当者へ伝えることができます。 なお、このTranslation noteは、ソース管理画面でも編集することができます。

Translation note Edit

翻訳テキストのレビュー #

翻訳後の文字列をレビューすることができます。 Accept、Rejectすることができます。

レビュー画面

文字列のダウンロード #

コマンドを一発叩くだけでダウンロードされます。ダウンロード先は、localazy.jsonで指定した場所にダウンロードされます。

> localazy download

かんたんですね!


アプリの多言語リソースを管理するサービス「Localazy」についてまとめました。 使ってみると、1言語でも導入するメリットはありそうだなと感じました。というのも、開発者と企画サイドで文字列を共有しやすくなりますし、将来的に多言語化する必要が出てきた場合にすぐ対応できるためです。無料で200のリソースを管理できるというところも魅力的です。一度試してみるのはいかがでしょうか。