🫧

String Catalogs 細かいこと

2024/02/12に公開

テーブル名は実行時に決定したいのでプログラム上は変数になっているとき、勝手にLocalizable.xcstringsに吐き出されて困る

次のコードを、自動で吐き出し機能ONで使うと

struct StrData {
    let key: LocalizedStringKey
    let table: String
}

struct ContentView: View {
    let strData = StrData(key: "a", table: "aTable")
    var body: some View {
        VStack {
            Text(strData.key, tableName: strData.table)
            Text("b", tableName: "bTable")
        }
    }
}

b の方はbTable.xcstringsに吐き出されるが、a の方はLocalizable.xcstringsに吐き出される。テーブル名を指定しているので、デフォルトのLocalizable.xcstringsに吐かれても困る。

次のようにすると回避できる

struct StrData {
    let key: String
    let table: String
}

struct ContentView: View {
    let strData = StrData(key: "a", table: "aTable")
    var body: some View {
        VStack {
            Text(LocalizedStringKey(strData.key), tableName: strData.table)
            Text("b", tableName: "bTable")
        }
    }
}

どうも、コンパイル時にうまいことキーが発覚してしまうと、Localizable.xcstringsに吐き出されるらしい。下にいくつかのパターンを調べたのを載せる。

let tableName = "Test"

let test2 = "test2"
let test3lsk = LocalizedStringKey("test3") //🧹Localizable.xcstringsに吐かれる
let test4 = "test4"
let test4lsk = LocalizedStringKey(test4)

struct ContentView: View {
    var body: some View {
        VStack {
            Text("test1", tableName: tableName) //🧹Localizable.xcstringsに吐かれる
            Text(LocalizedStringKey(test2), tableName: tableName) //吐かれない
            Text(test3lsk, tableName: tableName) //LocalizedStringKey作成のところで吐かれる
            Text(test4lsk, tableName: tableName) //吐かれない
        }
    }
}

キーを変えたい

Automatically状態では変更できません。Manuallyに変更するとキーを変更できます。

ビルド設定

ビルド設定のLocalization Prefers String Catalogs

翻訳者に渡すファイルの形式をどうするかとういう設定

想定している流れは

  1. ソフトウェア担当者がコードを書く
  2. 翻訳者に翻訳を依頼
  3. 翻訳者から翻訳データを受け取る
  4. ソフトウェア担当者がアプリに融合

WWDCのビデオ(女の人と男の人が交互に出てくるやつ)の中で言っていた。
翻訳者に渡すファイルというのが具体的に何かは私は知らない。

ビルド設定のUse Compiler to Extract Swift Strings

ビルド時にソースコード(など)からString Catalogに書き出すかどうか。
Objective-Cからの書き出しはこの設定のONOFFで挙動が変わらない(挙動は「書き出す」で固定)
Swiftからの書き出しはONOFFで挙動が変わる。
Objective-Cからの書き出しは%は出てこない

その他の細かいこと

String Catalogファイルはビルド時に、昔からある .strings (.stringsdict) 形式に変換される

String Catalogsのその他の記事です。

https://zenn.dev/samekard_dev/articles/436b1adb3f7890

Discussion