---
title: "ctx.i18n"
description: "ctx.i18n là API i18n, dùng cho dịch t(), chuyển đổi locale, đồng nhất với cấu hình đa ngôn ngữ của hệ thống."
keywords: "ctx.i18n,i18n,t(),locale,đa ngôn ngữ,RunJS,NocoBase"
---

# ctx.i18n

Instance i18n của ngữ cảnh hiện tại, dùng để đọc hoặc chuyển đổi ngôn ngữ. **Văn bản dịch sử dụng đồng nhất [ctx.t()](./t.md)**, không sử dụng `ctx.i18n.t`.

## Kịch bản áp dụng

Tất cả môi trường thực thi RunJS đều có thể sử dụng `ctx.i18n` (như JSBlock, JSField, JSItem, JSColumn, luồng sự kiện, quy tắc liên kết, v.v.).

## Định nghĩa kiểu

```typescript
interface i18n: {
  language: string;
  changeLanguage(lng: string): Promise<any>;
}
```

## Thuộc tính thường dùng

| Thuộc tính | Kiểu | Mô tả |
|------|------|------|
| `language` | `string` | Mã ngôn ngữ đang kích hoạt hiện tại (như `zh-CN`, `en-US`) |

## Phương thức thường dùng

### changeLanguage(lng)

Chuyển đổi ngôn ngữ hiện tại.

| Tham số | Kiểu | Mô tả |
|------|------|------|
| `lng` | `string` | Mã ngôn ngữ đích (như `'en-US'`, `'zh-CN'`) |

**Giá trị trả về**: `Promise<any>`, resolve sau khi chuyển đổi ngôn ngữ hoàn tất.

## Ví dụ

### Đọc ngôn ngữ hiện tại

```ts
const lang = ctx.i18n.language;
// 'zh-CN' | 'en-US' | ...
if (lang.startsWith('zh')) {
  ctx.render(ctx.t('中文界面'));
} else {
  ctx.render(ctx.t('English UI'));
}
```

### Chuyển đổi ngôn ngữ

```ts
// 切换为英文
await ctx.i18n.changeLanguage('en-US');

// 切换为中文
await ctx.i18n.changeLanguage('zh-CN');
```

### Button chuyển đổi ngôn ngữ

```ts
const { Button } = ctx.libs.antd;
const isZh = ctx.i18n.language.startsWith('zh');
ctx.render(
  <Button onClick={async () => {
    await ctx.i18n.changeLanguage(isZh ? 'en-US' : 'zh-CN');
  }}>
    {ctx.t(isZh ? 'Switch to English' : '切换到中文')}
  </Button>,
);
```

## Lưu ý

- **Văn bản dịch**: sử dụng đồng nhất `ctx.t()`, không sử dụng `ctx.i18n.t`.

## Liên quan

- [ctx.t()](./t.md): Dịch văn bản, sử dụng phương thức này một cách đồng nhất
