Help us understand the problem. What is going on with this article?

Launch Arguments を使った一つ上の NSLocalizedString

More than 3 years have passed since last update.

12/16 の記事を @jarinosuke が書かせて頂きます。

Localization

多言語対応のアプリを作る時に大変になるのが、全ての言語リソースが用意できた後で、それらを適用したアプリのテストやデバッグです。
大抵の言語は英語より長くなってしまうので、文言が予期せぬかたちで truncate されたりビューのレイアウトが壊れていたりと、単純に言語リソースを用意すれば御終いというわけではありません。
そこで今回は多言語対応を行う際の助けになるであろう手法の一つとして、Launch Arguments を用いた賢いデバッグ方法を紹介します。

Launch Arguments とは?

launch_arguments.png

Launch Arguments を設定することでアプリの実行中のみ、指定した argument で現在の設定状態を上書きしてくれます。
デバッグやテスト時などに設定をすることで効果を発揮します。
設定は Xcode の Scheme 毎に行うことが出来ます。
具体的な方法はプロジェクトを開いて、左上の Scheme 選択ドロップダウンメニューから Edit Sceheme… を選択します。
指定は先頭に-を置き、そのキー名をスペースを入れずに指定、その後スペースを一つ開けた後に渡したい値を設定します。
Core Data の SQL 出力などがLaunch Argumentsでは有名ですが、実は NSLocalizedString でも便利なものが隠されています。

Arguments

3つほど Localization に関する argument を紹介します。

AppleLanguages

他言語リソースでの表示を確認する時に、実機や iOS Simulator の設定から言語を切り替えていませんか?

-AppleLanguages (ja)

上記の用に()内に確認したい言語を指定することで、iOS の設定とは独立して言語リソースを設定することが出来ます。

NSDoubleLocalizedString

プロジェクト開始当初は仕様書には英語や日本語で記されているだけで 、多言語リソースは揃っていないのが普通だと思います。
しかし英語や日本語だけを考えてビューのレイアウトを考えてしまうと、いざ多言語リソースが来た時に大変な事になりかねません。
そんな懸念に対して、 NSDoubleLocalizedString が面白い仕組みを提供してくれています。

 -NSDoubleLocalizedString YES

上記のように設定すると、NSLocalizedString で設定している文言全てが2倍の長さに変更されます。
これにより、プロジェクト開始時から多言語リソースを想定した2倍の長さの文言にまでは対応できます。

NSShowNonLocalizedString

多言語対応するうえで、一番怖いのが言語リソースの抜け落ちです。
言語リソースの準備は担当する開発者以外が行う事が多く、受け取ったExcelなどのファイルを Localizable.string に反映したりすることが多いと思われます。
そのような行程が多いせいか、特定言語のみ文言に Localizable.string のキー名がそのまま露出してしまう事故が起きたりする事もあります。
厄介なのがアルファベットだけで構成され意味が分からない言語同士だと、目で確認してもなかなか抜け漏れに気付きにくい点です。

-NSShowNonLocalizedString YES

上記のように設定すると、抜け落ちている文言を全て大文字にして表示してくれます。なので既に設定されている文言よりは目立つようになり気付きやすいというわけです。
しかし、そもそもの Localizable.string の key を全て大文字で定義してしまっていると、全く効果は得られません笑。

まとめ

上記のように Localization のための便利な機能も提供されているので、積極的にグローバルなアプリケーションを作って行きましょう。
ちなみに Localization のための Mac アプリもいくつかあり、僕は Linguan を使っていますが非常に便利なのでオススメです。

参考

iOS Debugging Magic(Apple Documentation)
Launch Arguments & Environment Variables(NSHipster)

mercari
フリマアプリ「メルカリ」を、グローバルで開発しています。
https://tech.mercari.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away