Internationalization, зазвичай скорочене як i18n (де 18 позначає кількість літер між 'i' і 'n'), — це процес розробки програмного забезпечення, щоб його можна було адаптувати до різних мов і регіонів без необхідності вносити зміни в саму програму. У цій статті ми розглянемо, як реалізувати інтернаціоналізацію в додатку NestJS за допомогою пакету nestjs-i18n
.
NestJS — це швидко зростаючий фреймворк для створення ефективних і легких в обслуговуванні серверних додатків. Він побудований на TypeScript і використовує потужні можливості сучасного JavaScript, підтримуючи такі розробницькі патерни, як ін'єкція залежностей, модульність та декоратори.
Налаштування проекту
Спочатку давайте створимо новий проект NestJS:
$ npm i -g @nestjs/cli
$ nest new my-i18n-app
$ cd my-i18n-app
Встановлення залежностей для інтернаціоналізації
Щоб додати підтримку інтернаціоналізації в наш NestJS додаток, ми скористаємося пакетом nestjs-i18n
. Встановимо його разом з необхідними залежностями:
$ npm install nestjs-i18n
$ npm install @nestjs/config
$ npm install @nestjs/platform-express
$ npm install i18next
Налаштування модуля i18n
Налаштуємо AppModule
, щоб інтегрувати модуль nestjs-i18n
. Відкрийте файл src/app.module.ts
і налаштуйте модуль i18n наступним чином:
import { Module } from '@nestjs/common';
import { I18nModule, I18nJsonParser } from 'nestjs-i18n';
import * as path from 'path';
@Module({
imports: [
// Реєструємо I18nModule
I18nModule.forRoot({
fallbackLanguage: 'en',
parser: I18nJsonParser,
parserOptions: {
path: path.join(__dirname, '/i18n/'),
watch: true,
},
}),
],
})
export class AppModule {}
Тут ми використовуємо модуль I18nModule
у нашому AppModule
і налаштовуємо його для використання JSON файлів, які зберігаються в директорії src/i18n/
, для зберігання перекладів. Переконайтеся, що така директорія існує.
Налаштування перекладів
Створіть директорію з назвою i18n
у директорії src
і додайте файли перекладів для різних мов. Наприклад, створіть файли en.json
і es.json
для перекладів на англійську та іспанську мови:
src/i18n/en.json:
{
"greeting": "Hello, {{ name }}!"
}
src/i18n/es.json:
{
"greeting": "¡Hola, {{ name }}!"
}
Використання перекладів у контролерах
Створимо простий контролер для використання наших перекладів. Відкрийте файл src/app.controller.ts
і змініть його наступним чином:
import { Controller, Get, Query } from '@nestjs/common';
import { I18nService, I18nLang } from 'nestjs-i18n';
@Controller()
export class AppController {
constructor(private readonly i18n: I18nService) {}
@Get('greet')
async greet(@I18nLang() lang: string, @Query('name') name: string): Promise {
const greeting = await this.i18n.translate('greeting', { lang, args: { name } });
return greeting;
}
}
У цьому коді ми створили кінцеву точку greet
, яка приймає параметр запиту name
і використовує сервіс I18nService
для перекладу повідомлення привітання на основі параметра lang
. Якщо мова не вказана в запиті, використовується мова за замовчуванням (в нашому випадку англійська).
Тестування додатку
Запустіть додаток:
$ npm run start
Тестуйте кінцеві точки в браузері або за допомогою інструментів типу curl
або Postman. Наприклад:
- Привітання англійською:
http://localhost:3000/greet?name=John
- Привітання іспанською:
http://localhost:3000/greet?name=John&lang=es
Ви повинні побачити такі відповіді:
- Англійською:
Hello, John!
- Іспанською:
¡Hola, John!
Висновок
Ми успішно додали інтернаціоналізацію до додатку NestJS за допомогою пакету nestjs-i18n
. Цей приклад демонструє, як налаштувати інфраструктуру, визначити переклади та використовувати їх у контролерах.
Правильна підтримка i18n значно покращує досвід користувачів, роблячи ваш додаток доступним для більш широкої аудиторії.
Додаткові ресурси
Щасливого кодування і нехай весь світ має доступ до вашого додатку рідною мовою! 🌐
Перекладено з: Internationalization (i18n) in NestJS Applications