Appごとの言語設定をサポートする方法

Appをローカライズすることで、世界中のユーザーは各自が最も読みやすいと感じる言語でAppのコンテンツを閲覧できます。また、iOSおよびmacOSの最新バージョンでは、ユーザーがAppごとに言語を変更できるため、より細かな設定が可能になります。例えば、ユーザーがiPhoneの使用言語を英語にしますが、アラビア語でソーシャルメディアAppを使用したい場合があります。

ここで良いお知らせです。プロジェクトがiOS 13またはmacOS Catalinaでビルドされ、複数の言語にローカライズされている場合は、Appに追加のコードは必要ありません。Appをビルドおよびデプロイし、テストするだけです。

ここでは、「AllTrails」の例を挙げて、ユーザーが特定のAppでAppごとの言語設定を行う方法を説明します。

  1. 「設定」Appを開きます
  2. 「AllTrails」>「優先する言語」>「言語」を選択します。
  3. 優先する言語を「スペイン語」に変更します。
  4. ホーム画面から「AllTrails」を起動します(Appがすでに開いている場合、Appスイッチャーを使用)。

「設定」で変更されたAppの優先言語を使用して、Appのコンテンツが表示されます。

「設定」で変更されたAppの優先言語を使用して、Appのコンテンツが表示されます。

言語設定を変更した後に状態を復元する

ユーザーがAppの操作中に言語を変えたいと思うこともあります。ユーザーが言語設定を変更してAppに戻ってきた時に、中断したときの状態を復元することができれば、そうした体験もさらにスムーズなものになります。例えば、デフォルト言語を英語にしているが、英語圏以外に住んでいるとしましょう。レストランのデリバリーAppを使用して食べ物を探している時に、現地の料理について詳しく知るためにAppの言語を切り替えてメニューを見たいという場合もあるかもしれません。

そのAppが状態復元をサポートしている場合、「設定」Appを終了して閲覧していたレストランの画面に戻ると、変更後の言語で表示されます。状態復元をサポートしていない場合、ユーザーはAppのメイン画面からそのレストランを再度検索しなくてはなりません。


Appがシーンベースの状態復元をサポートする場合は、「stateRestorationActivity(for scene)」を実装したうえで、シーンの状態をエンコードする「NSUserActivity」を返すことができます(引き続きビューコントローラの状態復元をサポートする場合は、Appデリゲートで状態復元を有効にすることができます)。


カスタムコンテンツを適切な言語でロードする方法

サーバーなどの他のソースからコンテンツをロードすることも可能です。その際は、Appの言語といくつかのバンドルAPIを一致させるようにしてください。

「Bundle.main.preferredLocalizations.first」は、システムで現在優先されている言語を取得します。

使用可能なカスタム言語セット(例えば、サーバーやその他のソースからのもの)をチェックする必要がある場合も、先ほどのAPI呼び出しを少し変更するだけで実現できます。まず、利用可能な言語を確認します。

```swift
let availableLanguages = Server.requestAvailableLanguages()
```

次に、「preferredLocalization」APIを利用可能な言語と共に使用します。

```swift
Bundle.preferredLocalizations(from: availableLanguages).first.
```

接続やその他の制約により、サーバーとの継続的な通信ができない場合、「Bundle.main.preferredLocalizations.first」の出力をサーバーに送信することも効果的です。これにより、サーバーはAppが起動した言語を認識できるので、それに応じてコンテンツを提供できます。

App内のカスタム言語セレクタから移行する方法

AppがiOS 13とmacOS Catalina以降に対応する場合は、Appごとの言語設定がシステム規模でサポートされるため、App内で言語を選択できる機能を提供する必要がなくなります。すでにこうしたUIを提供している場合は、ユーザーの混乱やシステムとの競合の可能性を回避するために、そのUIを削除してください。

システム設定の言語選択にユーザーを導く場合は、AppのカスタムUIを書き換えて、iOSの「設定」Appを直接起動するフローにすることが効果的です。

iOSでは、以下を追加してください。

```swift
UIApplication.shared.open(URL(string: UIApplication.openSettingsURLString)!)
```

macOSでは、「システム環境設定」>「言語と地域」にユーザーを導き、Appごとの使用言語を設定します。


Resources