التوثيق

العرض المسبق

يترجم المكون <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 لتمرير الترجمات التي تم حلها إلى مكون الصفحة كمدخل.

يعمل المحلل على خادم الإنشاء الخاص بك، لذا فإنه يترجم باستخدام مفتاحك السري. قم بتعيينه كمتغير البيئة MAGIC_TRANSLATE_SECRET_KEY حيث تقوم بتشغيل ng build، على سبيل المثال كسرية CI. لا تمررها إلى provideMagicTranslate، لأن هذا التكوين يعمل أيضًا في المتصفح.

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

أخبر 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 مترجم لكل لغة. يتم تخزين الترجمات مؤقتًا، لذلك يتم احتساب النص المتغير فقط لاستخدامك في الإصدارات اللاحقة.