LoginSignup
6
3

More than 5 years have passed since last update.

tvOSのAVPlayerViewControllerのInfoパネルを日本語で表示する

Last updated at Posted at 2017-10-27

前置き

tvOSのAVPlayerViewControllerは勝手にシークバーのサムネイルを出してくれたりして地味に優秀なので使っているアプリが多い印象ですが、下にスワイプするとでてくるここをローカライズしているアプリは滅多に見ません。しかし前職のアプリは特に意識しなくても対応できてたなーと思い。解決したので共有します。

プロジェクトに日本語の言語設定を追加

これで無事日本語で表示されました🎉
avplayer-infopanel-001.png

Xcode上では例えばこういう感じに設定します。
xcode-localization.png

AVPlayerItem.externalMetadataを追加して「情報」タブを出す場合

extendedLanguageTagが日本語にマッチしない場合はその情報が表示されないので注意しましょう。

例えば以下のような場合、"und""ja"は日本語にマッチしますが、"fr"は日本語にマッチしません。

extension AVPlayerItem {
    func addExternalMetaData() {
        // title
        let titleItem = AVMutableMetadataItem()
        titleItem.identifier = AVMetadataIdentifier.commonIdentifierTitle
        titleItem.value = "日本語タイトル" as NSString
        titleItem.extendedLanguageTag = "und"

        // description
        let descriptionItem = AVMutableMetadataItem()
        descriptionItem.identifier = AVMetadataIdentifier.commonIdentifierDescription
        descriptionItem.value = "デスクリプチョン" as NSString
        descriptionItem.extendedLanguageTag = "fr"
        externalMetadata.append(titleItem)
        externalMetadata.append(descriptionItem)

        // genre
        let genreItem = AVMutableMetadataItem()
        genreItem.identifier = AVMetadataIdentifier.quickTimeMetadataGenre
        genreItem.value = "Comedy" as NSString
        genreItem.extendedLanguageTag = "ja"

        externalMetadata.append(titleItem)
        externalMetadata.append(descriptionItem)
        externalMetadata.append(genreItem)
    }
}

この場合端末の言語設定が日本語の場合にdescriptionが表示されません。

avplayer-infopanel-002.png

全て "und" もしくは "ja" にすると、descriptionも表示されました。
avplayer-infopanel-003.png

"und"? "ja"?

複数言語に対応する場合でメタデータも言語ごとに設定できるのであれば、jaとかfrとかそれぞれ設定したほうが良さそうですね。そうでなくて1つの言語しかない(ローカライズ対応しない)のであれば、undにしておけば良さそうです。というかローカライズ対応しないのであればundにしとけってAppleのドキュメントにも書いてあったような。

"ja"? "jpn"?

ちなみに以下のドキュメントでISO 639-2の言語タグについて言及されていたりして混乱したのですが、一応試したら"ja"でも"jpn"でもどちらでも日本語が表示されました。
Language and Locale IDs

その他tips

genreだけだと「情報」タブ自体表示されなかったりしました。
シミュレータで確認する場合はxcschemeの言語設定をJapaneseにするのをお忘れなく。

まとめ

extendedLanguageTagの設定だけではダメなのかと思ったら、そもそも言語設定がLocalizationとして追加されていないとダメなようでした。OS標準のUIコンポーネントを使っている場合、同じようなことが起きそうなのでプロジェクトの言語設定は一度見直してみてもいいかもしれません。

そういえばこのInfoパネルはtvOS11でカスタムタブを追加できるようになったので、使ってみたいですね。
tvos-custom-infopanel.png

参考

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3