Angular Internationalization (i18n): รองรับหลายภาษา
#angular12 เม.ย. 2569
i18n คืออะไร
Internationalization (i18n) คือการทำให้ app รองรับหลายภาษาและ locale เช่น ภาษาไทย, อังกฤษ, ญี่ปุ่น
วิธีที่ 1: Angular Built-in i18n
<!-- ใส่ i18n attribute -->
<h1 i18n="@@welcomeTitle">ยินดีต้อนรับ</h1>
<p i18n>กรุณาเข้าสู่ระบบ</p>
# Extract messages
ng extract-i18n --output-path src/locale
วิธีที่ 2: ngx-translate (แนะนำ)
npm install @ngx-translate/core @ngx-translate/http-loader
// app.config.ts
import { TranslateModule, TranslateLoader } from '@ngx-translate/core';
import { TranslateHttpLoader } from '@ngx-translate/http-loader';
export function createTranslateLoader(http: HttpClient) {
return new TranslateHttpLoader(http, './assets/i18n/', '.json');
}
export const appConfig: ApplicationConfig = {
providers: [
importProvidersFrom(
TranslateModule.forRoot({
loader: {
provide: TranslateLoader,
useFactory: createTranslateLoader,
deps: [HttpClient]
}
})
)
]
};
ไฟล์ภาษา
// assets/i18n/th.json
{
"WELCOME": "ยินดีต้อนรับ",
"LOGIN": "เข้าสู่ระบบ",
"GREETING": "สวัสดี {{name}}"
}
ใช้ใน Template
<h1>{{ 'WELCOME' | translate }}</h1>
<p>{{ 'GREETING' | translate:{ name: username } }}</p>
<button>{{ 'LOGIN' | translate }}</button>
เปลี่ยนภาษา
import { TranslateService } from '@ngx-translate/core';
export class AppComponent {
constructor(private translate: TranslateService) {
translate.setDefaultLang('th');
translate.use('th');
}
switchLanguage(lang: string) {
this.translate.use(lang);
}
}
สรุป
ngx-translate เป็นตัวเลือกที่ยืดหยุ่นกว่า built-in i18n เพราะเปลี่ยนภาษาได้ runtime โดยไม่ต้อง rebuild ครับ