<t> コンポーネント
翻訳するには、コンテンツを <t> コンポーネントで囲んで。翻訳が読み込まれるまで、元のコンテンツが表示される。
<t>This content will be translated</t>
バインディング付きのテキストも使える。コンテンツは、name が変更された場合など、変更されるたびに再度翻訳される。
<t>Hello {{ name() }}</t>
名前やカウントなど、頻繁に変更される値については、代わりに変数を使用して、テキストが一度だけ翻訳される。
同時にリクエストされたすべての翻訳は、1回のリクエストでAPIに送信され、翻訳はキャッシュされる。<t> コンポーネントは好きなだけ使える。
<mt-translate> は代替セレクターとして機能し、Translate は T と同じコンポーネントだ。
インプット
| 入力 | タイプ | 説明 |
|---|---|---|
formality | 'informal' | 'formal' | 翻訳の形式を設定する。 |
id | string | このテキストの使い方を自分で編集できる。エレメントの id として設定されていない。 |
lang | Language | provideMagicTranslate で設定された言語をオーバーライドする。 |
v | Record<string, unknown> | 翻訳されていない値。内容では $name と記載されている。変数を見る。 |
<t lang="fr" formality="formal">How are you?</t>
変数
名前やカウントなど、変化する値を [v] に渡し、内容では $name として参照する:
<t [v]="{ name: user.name, count: unread() }">Hi $name, you have $count new messages</t>
Magic Translate は、値の周りのテキストを Hi {0}, you have {1} new messages として一度翻訳し、値をアプリに戻す。翻訳はキャッシュされ、すべての名前とすべてのカウントで機能し、値自体が Magic Translate に送信されることはない。値だけが変わると、新しいリクエストは行われない。
値には最初に表示された順序で番号が付けられている。翻訳は、{1} neue Nachrichten für {0} のように、言語で必要な場所に移動できる。
値の周りのテキストにはHTMLを含めることができ、値は最初に pipes でフォーマットできる。
<t [v]="{ count: cart.items.length, total: cart.total | currency }">You have <b>$count items</b> in your cart, totalling <b>$total</b>.</t>
いくつかのルール:
[v]のキーだけが置き換えられるので、$5などのテキストはそのまま残る。countとcountsのように、2つのキーが同じように始まる場合は、最も長いキーが優先される。- 同じ名前が複数回表示されることもある。
- 値はHTMLではなくテキストとして挿入される。代わりに、周囲のテキストにマークアップを入れて:
Hi <b>$name</b>. - 変数はテキストでのみ置換され、
hrefやtitleなどの属性では置換されない。 - 開発モードでは、テキストに表示されていないキーは警告を記録し、タイプミスをキャッチする。
- サーバー側のレンダリングでは、
<t>と[v]はサーバー上で空になり、アプリがブラウザーで実行されると表示されるよ。
変数は {name} ではなく $name を使う。なぜなら Angular はテンプレート内の 1 つの { を ICU メッセージの先頭として読み込み、テンプレートはコンパイルされないからだ。
制限事項
- Angular コンポーネントを
<t>コンポーネントの中に入れることはできない。プレーンなHTML要素でも問題ない(下の例を参照)。翻訳されたマークアップは Angular の HTML サニタイザーを通過する。 <t>コンポーネント内のコンテンツは、10 KB、つまり約5,000文字を超えてはいけない。
<!-- this is OK, since <a> is a plain HTML element --><t><a href="mailto:info@i42.ch">Please send us an email</a></t><!-- this does NOT work, since <app-button> is an Angular component --><t><app-button>Click me</app-button></t>
属性やその他の文字列を翻訳するには、t pipe を使う。