🌀

SwiftPackage内の文言がローカライズされない時の解消方法

に公開2

背景

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内のローカライズリソースファイルに則ってローカライズされるようになります。

参考リンク

https://useyourloaf.com/blog/swift-package-string-localization/
https://forums.swift.org/t/swift-package-manager-localization/46685

GitHubで編集を提案

Discussion

KyomeKyome

Bundle.mainにInfoPlist.xcstringsを設置するというのもおすすめです。どのみち権限周りのUsageの権限メッセージでも多言語対応することが多いと思いますので。

aphanantheaphananthe

ありがとうございます。
まさにその通りで、
結局権限周りの文言をローカライズするためにmainにInfoPlist.xcstringsを追加したので、
最終的にCFBundleAllowMixedLocalizationsは設定不要になりました...