パッケージ内でString Catalogを管理する方法(Default Localization(en)を削除する)

## 概要
Xcode15がリリースされ、String Catalogが使えるようになりました。  
また、最近はSPMによるマルチモジュール構成を取るプロジェクトも増えており、パッケージ内で文字列リソースを管理したいという需要も増えているかと思います。
この記事では、パッケージ内でのString Catalogの管理方法を以下の2つのポイントに焦点を当てつつ、解説していきます。
- String Catalogの設定方法の解説
- ローカライズはさせず、シンプルに日本語の文字列リソースをString Catalogで管理する方法の解説

## 手順
### 1. package.swiftの編集
パッケージを作成すると、デフォルトの言語設定はEnglish（en）になっていると思います。　　
個人で作成したプロジェクトではローカライズは目的ではなかったので、このデフォルトの言語設定をJapanese（ja）に変更したいと思います。
具体的には以下のようにpackage.swiftを変更します。
```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を選択。

![スクリーンショット 2023-12-11 2.02.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1262759/be891e58-a323-fa2d-24c9-10410473ebbf.png)
作成したLocalizable.xcstringsを開くと、以下のようにJapaneseが追加された状態になっています。  
![スクリーンショット 2023-12-11 2.16.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1262759/2f28573c-ac6f-91c7-b766-fcf10f12aa41.png)

この状態で、赤枠で囲った＋ボタンを押すと新しいkey,valueの行が作成されます。
![スクリーンショット 2023-12-11 2.19.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1262759/ab6a7693-563d-2676-647a-e944f6250a36.png)
しかし、画像にもあるように、Default Localization(en)という設定が残っています。  
冒頭にもあった通り、ローカライズさせる目的はないので、こいつを消したいと思います。

### 4. Default Localization(en)を削除する
Localizable.xcstringsを選択して、メニューを開き、Open As -> Source Codeを選択。
![スクリーンショット 2023-12-11 2.23.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1262759/4c5cdb46-3856-806f-4f7a-0169180dc335.png)
するとsourceLanguageにenが設定されていることが確認出来ると思います。
これを以下のようにjaに変更します。
```json
{
  "sourceLanguage" : "ja",
  "strings" : {
    "Key" : {
      "extractionState" : "manual"
    }
  },
  "version" : "1.0"
}
```
先ほどと同じ手順で、今度はOpen As -> String CatalogでString Catalogを開く。
![スクリーンショット 2023-12-11 2.26.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1262759/4db24d17-5e0c-8234-2fc4-aa178a4a3cb6.png)
すると画像にもある通り、Default Localization(en)が削除出来ました。
あとはパッケージ内の文字列をこのLocalizable.xcstringsで管理するだけです。
これにより、SwiftGenやR.swiftを追加せずとも文字列リソースを管理することが可能になります。

 ## まとめ
 今回はパッケージ内でString Catalogを使った文字列リソースの管理の設定方法を解説しました。
 String Catalogを使うことで、
 - SwiftGenやR.swiftを追加しなくてもいい
 - ハードコーディングを避けられる
 - 後々、ローカライズ対応することも容易

 といったメリットが考えられ、個人的には結構気に入っています。
 是非、一度String Catalogを試してみてください！

 最後までお読み頂きありがとうございました。