ReactNative iOSパーミッションテキストのローカライズ方法


パーミッションリクエスト時のテキストを端末の言語に合わせて変更するときの設定について。

## バージョン
ReactNative 0.63.3
Xcode 12.4

## Info.plistにパーミッションを追加
アプリ内でカメラを使用するために`Privacy - Camera Usage Description`があるとして、このテキストをローカライズしたいとします。
![スクリーンショット 2021-01-27 15.47.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658122/777516da-bca3-76b4-fa9e-30d682c0ac70.png)

## PROJECTからLocalizationsで多言語化したい言語を追加する

まずLocalizationsから多言語化したい言語を追加します。今回は例として英語と中国語（簡体字）を追加しています。
![スクリーンショット 2021-01-27 15.46.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658122/4adc6639-9447-ea53-6e6d-031de9049dff.png)

## `InfoPlist.strings`ファイルを作成する。

![スクリーンショット 2021-01-27 15.36.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658122/961ed80b-5a1d-3b72-5f1b-7ab4458b0f66.png)
![スクリーンショット 2021-01-27 15.41.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658122/b06d2ab7-3272-184f-4abb-fb837d87b3f7.png)
Infoplist.stringsとかLocalizable.stringsとかに名前を変えると反映されないので注意。ドキュメントにちゃんと書いてありました。
>The values for many keys in an information property list file are human-readable strings that are displayed to the user by the Finder or your own app. When you localize your app, you should be sure to localize the values for these strings in addition to the rest of your app’s content.
Localized values are not stored in the Info.plist file itself. Instead, you store the values for a particular localization in a strings file with the name InfoPlist.strings. You place this file in the same language-specific project directory that you use to store other resources for the same localization. The contents of the InfoPlist.strings file are the individual keys you want localized and the appropriately translated value. **The routines that look up key values in the Info.plist file take the user’s language preferences into account and return the localized version of the key (from the appropriate InfoPlist.strings file) when one exists.** If a localized version of a key does not exist, the routines return the value stored in the Info.plist file.
[About Information Property List Files](https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/AboutInformationPropertyListFiles.html)

## 作成した`InfoPlist.strings`をLocalizeして多言語化する

Xcodeの右側のカラムからLocalizeボタンを押して追加した言語を選択します。
![スクリーンショット 2021-01-27 15.38.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658122/c89a15cf-6296-e6fc-3d5b-73774c44cd82.png)
![スクリーンショット 2021-01-27 15.47.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658122/ad36d791-3006-4003-073d-48783560cddc.png)
`en.lproj`、`zh-Hans.lproj`のように言語ごとにディレクトリが作成され、ディレクトリ内に`InfoPlist.strings`が作成されているはずです。
![スクリーンショット 2021-01-27 15.49.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658122/1047b7cf-d174-f029-936a-4ef20ab5c3b1.png)
以下のように`InfoPlist.strings`ごとに言語ごとにパーミッションテキストで表示したいテキストを設定します。

```plist
"NSCameraUsageDescription" = "告诉用户为什么应用会请求访问设备的摄像头的信息。";
```

シミュレータで言語を変更して確認すると設定したテキストが表示されるはずです。
![スクリーンショット 2021-01-27 17.51.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658122/44ef2a0b-f81e-64b2-19de-3b86ef471ca9.png)

## プッシュ通知パーミッションのローカライズ

プッシュ通知のパーミッションテキストは変更できないため端末の言語によって自動で切り替わる。
シミュレータだと言語を変更してもプッシュ通知のパーミッションダイアログ内のテキストは英語で表示されるため実機で確認すること。


## Androidは？

Androidはパーミッションメッセージを変更できない。

>注: launch() を呼び出したときに表示されるダイアログをアプリでカスタマイズすることはできません。ユーザーに詳細な情報やコンテキストを提供するには、アプリの UI を変更して、アプリの機能に特定の権限が必要な理由をユーザーにわかりやすく説明します。たとえば、機能を有効にするボタンのテキストを変更します。
[Request app permissions | Android Developers](https://developer.android.com/training/permissions/requesting#request-permission)


## 参考
[Requesting Permission - App Architecture - iOS - Human Interface Guidelines - Apple Developer](https://developer.apple.com/design/human-interface-guidelines/ios/app-architecture/requesting-permission/)
[Protected Resources - Apple Developer](https://developer.apple.com/documentation/bundleresources/information_property_list/protected_resources)
[インターナショナライゼーションとローカリゼーションのガイド](https://web.archive.org/web/20150912180939/https://developer.apple.com/jp/documentation/BPInternational.pdf)
[Handle Localization for iOS Native Messages](https://blog.bam.tech/developer-news/handle-localization-for-ios-native-messages)
[iOS10から必要になったユーザデータにアクセスする為に表示する文言をローカライズする](https://qiita.com/mfks17/items/2d7eddf1ea49d37a53bb)