概要
Xcode15がリリースされ、String Catalogが使えるようになりました。
また、最近はSPMによるマルチモジュール構成を取るプロジェクトも増えており、パッケージ内で文字列リソースを管理したいという需要も増えているかと思います。
この記事では、パッケージ内でのString Catalogの管理方法を以下の2つのポイントに焦点を当てつつ、解説していきます。
- String Catalogの設定方法の解説
- ローカライズはさせず、シンプルに日本語の文字列リソースをString Catalogで管理する方法の解説
手順
1. package.swiftの編集
パッケージを作成すると、デフォルトの言語設定はEnglish(en)になっていると思います。
個人で作成したプロジェクトではローカライズは目的ではなかったので、このデフォルトの言語設定をJapanese(ja)に変更したいと思います。
具体的には以下のようにpackage.swiftを変更します。
import PackageDescription
let package = Package(
name: "MyPackage",
// デフォルト言語設定をjaに変更
defaultLocalization: "ja", // この行を追加
platforms: [
.iOS(.v16),
],
products: [
// Products define the executables and libraries a package produces, making them visible to other packages.
.library(
name: "MyPackage",
targets: ["MyPackage"])
]
targets: [
// Targets are the basic building blocks of a package, defining a module or a test suite.
// Targets can depend on other targets in this package and products from dependencies.
.target(
name: "MyPackage",
// ついでにこの後作成するLocalizable.xcstringsを管理するためのリソース管理先の設定も追加
resources: [
.process("Resources")
]
),
.testTarget(
name: "MyPackageTests",
dependencies: ["MyPackage"]),
]
)
これで、パッケージ内のデフォルトの言語設定がenからjaに変わりました。
2. Resourcesディレクトリを作成
パッケージ内にLocalizable.xcstringsを管理するためのResourcesディレクトリを作成する。
3.Resources配下にLocalizable.xcstringsを作成する
Resourcesを選択した状態でFile -> New -> Fileから、String Catalogを選択。
作成したLocalizable.xcstringsを開くと、以下のようにJapaneseが追加された状態になっています。
この状態で、赤枠で囲った+ボタンを押すと新しいkey,valueの行が作成されます。
しかし、画像にもあるように、Default Localization(en)という設定が残っています。
冒頭にもあった通り、ローカライズさせる目的はないので、こいつを消したいと思います。
4. Default Localization(en)を削除する
Localizable.xcstringsを選択して、メニューを開き、Open As -> Source Codeを選択。
するとsourceLanguageにenが設定されていることが確認出来ると思います。
これを以下のようにjaに変更します。
{
"sourceLanguage" : "ja",
"strings" : {
"Key" : {
"extractionState" : "manual"
}
},
"version" : "1.0"
}
先ほどと同じ手順で、今度はOpen As -> String CatalogでString Catalogを開く。
すると画像にもある通り、Default Localization(en)が削除出来ました。
あとはパッケージ内の文字列をこのLocalizable.xcstringsで管理するだけです。
これにより、SwiftGenやR.swiftを追加せずとも文字列リソースを管理することが可能になります。
まとめ
今回はパッケージ内でString Catalogを使った文字列リソースの管理の設定方法を解説しました。
String Catalogを使うことで、
- SwiftGenやR.swiftを追加しなくてもいい
- ハードコーディングを避けられる
- 後々、ローカライズ対応することも容易
といったメリットが考えられ、個人的には結構気に入っています。
是非、一度String Catalogを試してみてください!
最後までお読み頂きありがとうございました。