Cookbook: Dịch 30 ngôn ngữ
Mở rộng dự án từ một vài ngôn ngữ (locale) lên quy mô toàn cầu. Hướng dẫn này sẽ đi qua các bước lựa chọn phương thức dịch, tối ưu hóa chi phí và tích hợp CI cho một hệ thống triển khai đa ngôn ngữ thực tế.
Kịch bản: Bạn có một ứng dụng SaaS với en, fr, es. Bạn cần thêm 27 ngôn ngữ khác chia theo ba cấp độ yêu cầu chất lượng.
Bước 1: Phân loại các ngôn ngữ của bạn
Không phải tất cả 30 ngôn ngữ đều cần cách tiếp cận giống nhau. Hãy nhóm chúng lại theo chất lượng phương thức dịch hiện có:
| Cấp độ | Ngôn ngữ | Phương thức | Lý do |
|---|---|---|---|
| Cấp độ 1 — Cao cấp | ja, ko, zh, de, pt | llm (GPT-4o) | Thị trường giá trị cao, ngữ pháp sắc thái phức tạp |
| Cấp độ 2 — Tiêu chuẩn | it, nl, pl, sv, da, fi, no, cs, ro, hu, el, tr, id, ms, th, vi, uk, bg | google-translate | Khối lượng lớn, được Google hỗ trợ tốt |
| Cấp độ 3 — Có huấn luyện | crk, oj, mi, haw | llm-coached + plugins | Tài nguyên ít, yêu cầu áp dụng thuật ngữ nghiêm ngặt |
Bước 2: Cấu hình cho từng cặp ngôn ngữ
{
"version": 3,
"inputLocale": "en",
"localesDir": "./locales",
"defaultMethod": "google-translate",
"model": "google/gemini-3.5-flash",
"languages": {
"ja": { "name": "Japanese", "register": "Polite/formal" },
"ko": { "name": "Korean", "register": "Formal" },
"zh": { "name": "Simplified Chinese", "register": "Neutral" },
"de": { "name": "German", "register": "Formal (Sie)" },
"pt": { "name": "Brazilian Portuguese", "register": "Informal" },
"crk": { "name": "Plains Cree (SRO)", "register": "Neutral" }
},
"pairs": {
"en:ja": { "method": "llm", "model": "openai/gpt-4o" },
"en:ko": { "method": "llm", "model": "openai/gpt-4o" },
"en:zh": { "method": "llm", "model": "openai/gpt-4o" },
"en:de": { "method": "llm", "model": "openai/gpt-4o" },
"en:pt": { "method": "llm", "model": "openai/gpt-4o" },
"en:crk": { "methodPlugin": "crk-coached-v1" }
}
}
Lưu ý: Các ngôn ngữ không được liệt kê trong pairs sẽ kế thừa defaultMethod: "google-translate". Bạn không cần phải liệt kê cả 30 ngôn ngữ.
Hỗ trợ cho crk đang được phát triển — xem Hỗ trợ ngôn ngữ ít tài nguyên để biết trạng thái và hướng dẫn đóng góp.
Bước 3: Thiết lập API Key
Bạn sẽ cần cả hai API key cho cấu hình này:
export OPENROUTER_API_KEY="sk-or-v1-..."
export GOOGLE_TRANSLATE_API_KEY="AIza..."
Bước 4: Chạy thử trước (Dry Run)
Luôn xem trước kết quả trước khi dịch 30 ngôn ngữ:
npx champollion sync --dry
Xem lại kết quả đầu ra. Nó sẽ hiển thị:
- Cặp ngôn ngữ nào sử dụng phương thức nào
- Có bao nhiêu khóa (key) mới/thay đổi trên mỗi ngôn ngữ (locale)
- Ước tính số lượng gọi API cho mỗi cấp độ
Bước 5: Chạy đồng bộ hóa (Sync)
npx champollion sync
Champollion xử lý từng cặp ngôn ngữ một cách độc lập. Các cặp Cấp độ 2 sử dụng Google Translate sẽ dịch rất nhanh. Các cặp LLM Cấp độ 1 sẽ chậm hơn nhưng có chất lượng cao hơn. Các cặp có huấn luyện Cấp độ 3 sẽ sử dụng dữ liệu huấn luyện (coaching data) của plugin.
Cập nhật tăng dần (Incremental Updates)
Sau lần đồng bộ hóa đầu tiên, các lần chạy tiếp theo sẽ chỉ dịch các khóa đã thay đổi hoặc mới:
# Only keys that changed since last sync
npx champollion sync
Tệp khóa (.champollion.lock) theo dõi những gì đã được dịch, vì vậy bạn không bao giờ phải dịch lại nội dung đã ổn định.
Bước 6: Kiểm định chất lượng
Kiểm tra trạng thái của tất cả các cặp ngôn ngữ:
npx champollion status
Lệnh này sẽ xuất ra một bảng hiển thị phương thức, mô hình, cấp độ chất lượng của từng cặp, và liệu dữ liệu huấn luyện hoặc điểm số đánh giá (benchmark) có sẵn hay không.
Kết quả đầu ra có tuân thủ văn phong (register) của bạn không?
Trong Bước 2, bạn đã khai báo một văn phong (register) cho mỗi ngôn ngữ — "Polite/formal" cho tiếng Nhật, "Formal (Sie)" cho tiếng Đức. (Bạn mới nghe thuật ngữ này lần đầu? Trang thuật ngữ giải thích nó bằng ngôn ngữ bình dân dễ hiểu.) Những hướng dẫn đó sẽ được đưa vào prompt dịch thuật, nhưng prompt chỉ là một yêu cầu chứ không phải là một sự đảm bảo tuyệt đối.
Bộ công cụ MT Eval Arena harness — cùng một công cụ vận hành bảng xếp hạng công khai — có thể đo lường mức độ tuân thủ văn phong và phong cách trên một mẫu bản dịch của bạn. Các chỉ số phong cách viết của nó sẽ kiểm tra từng kết quả đầu ra so với văn phong mong đợi (các dấu hiệu trang trọng/thân mật, đại từ nhân xưng, từ viết tắt, sự thay đổi độ dài câu) và báo cáo một style_consistency_rate trong suốt quá trình chạy. Bạn cũng có thể hướng nó đến một hồ sơ giọng điệu thương hiệu tùy chỉnh với --style-profile.
# install the harness, then run your sample corpus through it
curl -fsSL champollion.dev/harness | bash
mt-eval run --corpus my-sample.json --style-profile brand-voice.json
Hai lưu ý trung thực: các chỉ số này chỉ mang tính chất tham khảo (chúng không bao giờ được tính vào điểm tổng hợp của bảng xếp hạng) và việc phát hiện mức độ trang trọng dựa trên các dấu hiệu nhận biết — một công cụ phát hiện sự lệch hướng chứ không phải là đánh giá của con người. Chi tiết và định nghĩa chỉ số: Chỉ số phong cách viết và văn phong.
Bước 7: Tích hợp CI
Thêm vào quy trình làm việc (workflow) GitHub Actions của bạn để các bản dịch luôn được cập nhật sau mỗi lần push:
name: Sync Translations
on:
push:
paths:
- 'locales/en/**'
jobs:
translate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- run: npm ci
- name: Sync translations
run: npx champollion sync
env:
OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }}
GOOGLE_TRANSLATE_API_KEY: ${{ secrets.GOOGLE_TRANSLATE_API_KEY }}
- name: Commit updated translations
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git add locales/
git diff --staged --quiet || git commit -m "chore(i18n): sync translations"
git push
Ước tính chi phí
Đối với một dự án có 500 khóa nguồn trên 30 ngôn ngữ:
| Cấp độ | Ngôn ngữ | Phương thức | Chi phí ước tính |
|---|---|---|---|
| Cấp độ 1 (5 ngôn ngữ) | ja, ko, zh, de, pt | GPT-4o | ~$2.50/đồng bộ toàn bộ |
| Cấp độ 2 (18 ngôn ngữ) | it, nl, pl, v.v. | Google Translate | ~$0.90/đồng bộ toàn bộ |
| Cấp độ 3 (4 ngôn ngữ) | crk, oj, mi, haw | GPT-4o-mini có huấn luyện | ~$0.40/đồng bộ toàn bộ |
| Tổng cộng | 30 ngôn ngữ | Hỗn hợp | ~$3.80/đồng bộ toàn bộ |
Các lần đồng bộ hóa tăng dần (5–20 khóa thay đổi) chỉ tốn một phần nhỏ chi phí so với đồng bộ hóa toàn bộ.
Xem thêm
- Phương thức dịch thuật — Cách hoạt động của từng phương thức dịch và khi nào nên sử dụng
- Đặc tả Plugin — Tạo dữ liệu huấn luyện cho bất kỳ ngôn ngữ Cấp độ 3 nào của bạn
- Hướng dẫn CI/CD — Các mô hình CI nâng cao bao gồm cả các bản build xem trước cho PR
- Cổng chất lượng (Quality Gate) — Cách Champollion xác thực mọi bản dịch trước khi ghi tệp
- Ngôn ngữ được hỗ trợ — Danh sách đầy đủ các mã ngôn ngữ và khả năng tương thích của phương thức
- Chỉ số phong cách viết và văn phong — Đo lường mức độ tuân thủ văn phong/phong cách bằng eval harness (chỉ số tham khảo)
- Thuật ngữ: văn phong (register) — Ý nghĩa của "văn phong" (register) bằng ngôn ngữ bình dân dễ hiểu
- Hỗ trợ ngôn ngữ ít tài nguyên — Thêm dữ liệu huấn luyện cho các ngôn ngữ chưa được hỗ trợ dịch máy rộng rãi