コンテンツにスキップ

ph

ph は、メッセージのプレースホルダーに明示的な名前を付けます。 プロパティアクセス、関数呼び出し、その他の複雑な式が {0} のような数値プレースホルダーになるのを避けたい場合に使います。

キーは翻訳者にとって意味のあるプレースホルダー名になり、値はランタイムで評価される元の式として保持されます。

フレームワークに依存しない Lingui の意味論については、 公式の ph リファレンスを参照してください。

ソース
<p>{$t`Hello ${ph({ username: user.profile.displayName })}`}</p>
<p><Trans>Welcome {ph({ username: user.profile.displayName })}!</Trans></p>
結果

Hello Lingui

Welcome Lingui!

ロケール
名前
<script lang="ts">
import { ph, t, Trans } from "lingui-for-svelte/macro";
let user = $state({ name: "Ada" });
</script>
<p>{$t`Hello ${ph({ username: user.name })}`}</p>
<Trans>Welcome {ph({ username: user.name })}!</Trans>

ph はリアクティブな $t 式またはコンポーネントマクロ内で使います。 意図的に非リアクティブなスクリプトのスナップショットが必要な場合は、t.eager 内でも同じプレースホルダー構文を使えます。

次のソースを記述した場合:

t`Hello ${ph({ username: user.name })}`;

カタログには意味のある ICU プレースホルダーが抽出されます。

Hello {username}

変換後も、元の式はランタイムの値マッピングに保持されます。

{
message: "Hello {username}",
values: {
username: user.name,
},
}
  • ph にはプロパティを1つだけ持つオブジェクトを渡します。
  • プロパティのキーが ICU プレースホルダー名になります。
  • プロパティの値はランタイムで評価され、その名前で values に格納されます。
  • usernamestartDateitemCount のように、安定した説明的な名前を使います。
  • プロパティアクセスや関数呼び出しがそのままでは {0} になる
  • プレースホルダーが表す内容を翻訳者に伝えたい
  • 安定したプレースホルダー名によってカタログの変更やレビューを追いやすくしたい