🌀
SwiftPackage内の文言がローカライズされない時の解消方法
背景
SPMでFeatureごとにモジュールを分割し、各モジュール内に.xcstringsファイルを作成、String Catalogsでローカライズしようとしました。
しかしこの状態でビルドしてもSwiftPackage内の文言がローカライズされず、デフォルト言語のまま表示されてしまう現象がありました。
原因
- SwiftPackage内の文言をローカライズするには、SwiftPackageを使う側がローカライズ対象の言語設定を持っている必要がある。
- しかし今回の場合、SwiftPackageを使う側(
Bundle.main
)に.xcstringsなどを用意しておらず、ローカライズ言語もデフォルト言語のみしか設定していなかった。 - SwiftPackage内で.xcstringsを用意しても、SwiftPackageを使う側の
Bundle.main
にローカライズ対象言語が含まれていないと、Package側のローカライズが行われない。
-> そのため、(おそらく)SwiftPackage内の文言がローカライズされなかった?
解消方法
Info.plistにLocalized resources can be mixed = YES
の設定を追加する。
(Key名はCFBundleAllowMixedLocalizations
)
これを設定すると、メインバンドルの言語設定に縛られず、
SwiftPackage内のローカライズリソースファイルに則ってローカライズされるようになります。
参考リンク
Discussion
Bundle.mainに
InfoPlist.xcstrings
を設置するというのもおすすめです。どのみち権限周りのUsageの権限メッセージでも多言語対応することが多いと思いますので。ありがとうございます。
まさにその通りで、
結局権限周りの文言をローカライズするためにmainに
InfoPlist.xcstrings
を追加したので、最終的に
CFBundleAllowMixedLocalizations
は設定不要になりました...