t pipe
并非所有内容都可以包装在组件中。像 placeholder 或 title 这样的属性需要一个字符串,有时你需要在 TypeScript 代码中进行翻译。对于这些,请使用 MagicTranslate 服务的 t pipe 或 translate 方法。
t pipe
import { Component } from '@angular/core';import { TranslatePipe } from '@magic-translate/angular';@Component({selector: 'app-search',imports: [TranslatePipe],template: `<input [placeholder]="'Search products' | t" />`})export class Search {}
pipe 返回原始文本,直到翻译加载完毕。像 <t> 组件一样,它采用语言和形式作为选项:
<input [placeholder]="'Your name' | t: { lang: 'fr', formality: 'formal' }" />
还需要一个 id 来单独编辑文本的这种用法:
<button [title]="'Save' | t: { id: 'checkout-save' }"></button>
变量
在 v 中传递不应转换的值,并将其引用为 $name,与 <t> 组件相同:
<input [placeholder]="'Search $count products' | t: { v: { count: products.length } }" /><img [alt]="'Photo of $name' | t: { v: { name: user.name } }" [src]="user.photo" />
文本一次被翻译为 Search {0} products,当 count 更改时,缓存的翻译将被重复使用。
在代码中翻译
要在 TypeScript 中翻译字符串,请在 MagicTranslate 服务上调用 translate。它返回了一个承诺。
import { inject } from '@angular/core';import { MagicTranslate } from '@magic-translate/angular';const magicTranslate = inject(MagicTranslate);const message = await magicTranslate.translate('Your order has been placed');// with optionsconst formal = await magicTranslate.translate('How are you?', {lang: 'fr',formality: 'formal'});
如果没有 lang 选项,文本将被翻译成当前语言。
translate 也接受变量:
const message = await magicTranslate.translate('Your order $id has shipped', {v: { id: order.id }});