🌀

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

2024/07/23に公開

背景

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