概要
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 でも、辞書とリストに対して同じオブジェクト/配列 の解決が機能します。
from gt_flask import t, derive
labels = { "success": "Saved", "error": "Failed" }
t(derive(labels[status_key]))from gt_flask import t, derive
ranks = ["Bronze", "Silver", "Gold", "Platinum"]
t(derive(ranks[level]))派生させた式は第 1 引数として渡すか、その引数に渡す f-string の中に記述してください。キーワード補間の値に入れた場合、辞書やリストのエントリは抽出されません。
要件
- オブジェクトと配列は、TypeScript では
const、Python ではモジュールレベルで宣言する必要があります。 - スプレッド構文 (
...base) はサポートされており、抽出時にフラット化されます。 - TypeScript の型注釈 (
as const、satisfies) は自動的にアンラップされます。 - 循環するスプレッドは検出され、ハングする代わりに警告が表示されます。