التوثيق

العرض المسبق

يترجم المكون <t> و t pipe في المتصفح. إذا قمت بعرض تطبيق Angular مسبقًا، يمكنك ترجمة صفحاتك في وقت الإنشاء بدلاً من ذلك. ثم تتم ترجمة HTML قبل إرسالها، ولا ينتظر المستخدمون أبدًا الترجمة، وتقوم محركات البحث بفهرسة كل لغة.

يعرض المشروع النموذجي مسبقًا صفحة واحدة لكل لغة. افتح الصفحة الألمانية وافحص حركة مرور الشبكة: لم يتم تقديم أي طلب إلى Magic Translate API.

ترجم في أداة حل

أضف معلمة مسار للغة، وقم بترجمة نصوص الصفحة في محلل المسار باستخدام الطريقة translate. قم بتخزين النتيجة في Angular TransferState، بحيث يعيد المتصفح استخدامها بدلاً من الترجمة مرة أخرى بعد الترطيب.

import { inject, makeStateKey, TransferState } from '@angular/core';
import { ResolveFn } from '@angular/router';
import { MagicTranslate, type Languages } from '@magic-translate/angular';
const texts = {
title: 'Welcome to our shop',
intro: 'This page was translated when the app was built.'
};
type Texts = Record<keyof typeof texts, string>;
export const translationsResolver: ResolveFn<Texts> = async (route) => {
const transferState = inject(TransferState);
const magicTranslate = inject(MagicTranslate);
const lang = (route.paramMap.get('language') ?? 'en') as Languages;
const key = makeStateKey<Texts>(`translations-${lang}`);
const transferred = transferState.get(key, null);
if (transferred) return transferred;
const entries = await Promise.all(
Object.entries(texts).map(async ([name, text]) => [
name,
await magicTranslate.translate(text, { lang })
])
);
const translations = Object.fromEntries(entries) as Texts;
transferState.set(key, translations);
return translations;
};
// app.routes.ts
export const routes: Routes = [
{
path: ':language',
component: Page,
resolve: { translations: translationsResolver }
}
];

باستخدام withComponentInputBinding() في provideRouter، تصل الترجمات التي تم حلها كمدخل لمكون الصفحة.

عرض كل لغة مسبقًا

أخبر Angular باللغات التي سيتم عرضها مسبقًا باستخدام getPrerenderParams:

// app.routes.server.ts
import { RenderMode, ServerRoute } from '@angular/ssr';
export const serverRoutes: ServerRoute[] = [
{
path: ':language',
renderMode: RenderMode.Prerender,
getPrerenderParams: async () =>
['en', 'de', 'zh'].map((language) => ({ language }))
}
];

يكتب ng build الآن ملف HTML مترجم لكل لغة. يتم تخزين الترجمات مؤقتًا، لذا فإن الإصدارات اللاحقة تدفع فقط مقابل النص الذي تم تغييره.