前置き
tvOSのAVPlayerViewControllerは勝手にシークバーのサムネイルを出してくれたりして地味に優秀なので使っているアプリが多い印象ですが、下にスワイプするとでてくるここをローカライズしているアプリは滅多に見ません。しかし前職のアプリは特に意識しなくても対応できてたなーと思い。解決したので共有します。
プロジェクトに日本語の言語設定を追加
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が表示されません。
全て "und"
もしくは "ja"
にすると、descriptionも表示されました。
"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でカスタムタブを追加できるようになったので、使ってみたいですね。