Pre-Endering
Thành phần <t> và t pipe dịch trong trình duyệt. Nếu bạn khởi chạy trước ứng dụng Angular của mình, thay vào đó bạn có thể dịch các trang của mình tại thời điểm xây dựng. Người dùng và công cụ tìm kiếm sau đó nhận được HTML được dịch đầy đủ bằng mọi ngôn ngữ.
Dự án ví dụ cung cấp một trang cho mỗi ngôn ngữ. Mở trang tiếng Đức và kiểm tra lưu lượng mạng: không có yêu cầu nào được thực hiện đối với API Magic Translate.
Dịch trong một trình giải quyết
Thêm tham số tuyến cho ngôn ngữ và sử dụng phương thức translate trong trình phân giải tuyến đường để dịch văn bản của trang. Lưu trữ kết quả trong TransferState của Angular để trình duyệt sử dụng lại thay vì dịch lại sau khi hydrat hóa.
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.tsexport const routes: Routes = [{path: ':language',component: Page,resolve: { translations: translationsResolver }}];
Thêm withComponentInputBinding() vào provideRouter để chuyển các bản dịch đã giải cho thành phần trang dưới dạng đầu vào.
Trình phân giải chạy trên máy chủ build của bạn, vì vậy nó dịch bằng khóa bí mật của bạn. Đặt nó làm biến môi trường MAGIC_TRANSLATE_SECRET_KEY nơi bạn chạy ng build, ví dụ như là bí mật CI. Đừng chuyển nó đến provideMagicTranslate, vì cấu hình đó cũng chạy trong trình duyệt.
Bắt đầu tất cả các ngôn ngữ
Cho Angular biết ngôn ngữ nào sẽ được sử dụng trước với getPrerenderParams:
// app.routes.server.tsimport { RenderMode, ServerRoute } from '@angular/ssr';export const serverRoutes: ServerRoute[] = [{path: ':language',renderMode: RenderMode.Prerender,getPrerenderParams: async () =>['en', 'de', 'zh'].map((language) => ({ language }))}];
ng build bây giờ viết một tệp HTML đã dịch cho mỗi ngôn ngữ. Các bản dịch được lưu trong bộ nhớ đệm, vì vậy chỉ văn bản đã thay đổi được tính vào việc sử dụng của bạn trên các bản dựng sau.