戻る

gt@2.12.0

Ernest McCarter avatarErnest McCarter
gt-clideriveobjectarraydictionarypythoni18n

概要

derive() は、関数の戻り値だけでなく、オブジェクトと配列からも値を解決できるようになりました。同様のサポートは、Python の derive() にも辞書とリストで拡張されています。これにより、CLI はビルド時にデータ構造から取り得るすべての文字列バリエーションを静的に抽出し、それぞれに対して個別の翻訳エントリを作成できます。

これは、gt-react@10.15.0 で追加された derive() の tagged template サポート を基盤としています。

オブジェクトと配列へのアクセス

文字列バリアントからなるオブジェクトが与えられると、derive() はすべての値を抽出します:

const labels = { success: "Saved", error: "Failed", pending: "Saving..." };

t`Status: ${derive(labels[status])}`;

CLI は、3つの値をすべて解決し、それぞれに対して個別の翻訳エントリを登録します。

これは、動的アクセス (obj[key]) と静的アクセス (obj.prop) の両方で機能し、ネストにも対応しています:

const messages = {
  greeting: { formal: "Good evening", casual: "Hey" },
  farewell: { formal: "Goodbye", casual: "See ya" },
};

t`${derive(messages[category][tone])}`;

配列も同様に機能します:

const ranks = ["Bronze", "Silver", "Gold", "Platinum"];

t`Your rank: ${derive(ranks[level])}`;

Python

同じオブジェクトと配列の解決は、Python でも辞書とリストで機能します:

labels = { "success": "Saved", "error": "Failed" }

t("{status}", status=derive(labels[status_key]))
ranks = ["Bronze", "Silver", "Gold", "Platinum"]

t("{rank}", rank=derive(ranks[level]))

要件

  • オブジェクトと配列は、const (TypeScript) またはモジュールレベル (Python) で宣言する必要があります。
  • スプレッド構文 (...base) に対応しており、抽出時にフラット化されます。
  • TypeScript の注釈 (as constsatisfies) は自動的にアンラップされます。
  • 循環スプレッドは検出され、処理が停止する代わりに警告が表示されます。

リンク