🍎

【SwiftUI】ImageAssetのローカライズができない

2024/12/18に公開

メリークリスマス🎅
この記事はSwiftUI Advent Calendar 2024の18日目の記事です。

アセットカタログを使用した画像のローカライズ

アセットカタログを使用して画像のローカライズを行うことができます。
https://developer.apple.com/documentation/xcode/localizing-assets-in-a-catalog

使用する際は、ただアセットを呼び出してあげればOKです。

Image(.image)

ImageAssetのローカライズができない

一部のバリエーションのある言語において、SwiftUIのImageでローカライズした画像が細かく出しわけされなくなってしまいました。

例えば中国語には主に3種類あり、UIImage(画像下部)では同じ画像の言語ごとの出しわけができていますが、SwiftUIのImage(画像上部)ではすべて Chinese, Simplified になってしまいます。

簡体中国語 広東語(繁体字) 繁体中国語(香港)
zh-Hans zh-Hant zh-HK

また、Chinese, Simplifiedを指定していない場合はデフォルトのローカライズ画像が使用されます。

zh-HK Baseが使われる様子

他の言語でも同様の現象が起こります。

English English(AU) English(UK) English(IN)
en en(Australia) en(UK) en(India)
French French(CA)

etc...

解決策

一度UIImageへの変換を挟むと、期待通りのローカライズが行われます。
このとき、 UIImage(named:) で指定するとオプショナルになってしまうため、 UIImage(resource:) で変換を行うことをおすすめします。

Image(uiImage: UIImage(resource: .image))

おわりに

どうしてこんなことになっているのかは分かりません。(手抜きとしか思えない...)
バリエーションのある言語へのローカライズを行うときはSwiftUIのImageでローカライズが意図通りになっているか確認しておこう!

Discussion