Chuyển đến nội dung chính

Tích hợp Framework

Hướng dẫn từng bước để cài đặt i18n-rosetta với các framework phổ biến.

Hugo (TOML / YAML / Markdown)

Cấu trúc dự án

Hugo sử dụng i18n/ để dịch chuỗi và content/ cho nội dung trang:

my-hugo-site/
├── i18n/
│ ├── en.toml ← source of truth
│ ├── fr.toml
│ └── ja.toml
├── content/
│ ├── posts/
│ │ ├── hello.md ← source (English)
│ │ ├── hello.fr.md
│ │ └── hello.ja.md
│ └── about.md
└── .env.local

Cài đặt

npm install --save-dev i18n-rosetta
i18n-rosetta.config.json
{
"version": 3,
"inputLocale": "en",
"localesDir": "./i18n",
"contentDir": "./content",
"format": "auto",
"languages": ["fr", "de", "ja", "es", "ko", "zh"]
}
i18n-rosetta sync # sync i18n string files + content files
i18n-rosetta sync --dry # preview changes without writing

Chi tiết dịch nội dung

Front matter: Hỗ trợ cả dấu phân cách YAML (---) và TOML (+++). Dịch title, description, summary, subtitle, caption, và linkTitle theo mặc định. Tất cả các trường khác (date, draft, tags, weight, slug, v.v.) đều được giữ nguyên. Tùy chỉnh bằng translatableFields trong file cấu hình của bạn.

Bảo vệ khối: Code block, Hugo shortcode, inline code và raw HTML được tự động bảo vệ bằng các placeholder Unicode sentinel. Chúng sẽ được giữ nguyên không bị thay đổi.

Quy ước đặt tên file: Tuân theo mẫu dịch-theo-tên-file (translation-by-filename) của Hugo:

  • my-post.mdmy-post.fr.md
  • my-post.en.mdmy-post.fr.md (loại bỏ hậu tố nguồn)

Bỏ qua file đã tồn tại: Các file đã được dịch sẽ không bao giờ bị ghi đè. Xóa file đích để buộc dịch lại.

Dạng số nhiều

Các locale TOML và YAML hỗ trợ dạng số nhiều CLDR:

[items]
one = "{{ .Count }} item"
other = "{{ .Count }} items"

Được biểu diễn nội bộ dưới dạng items.oneitems.other để so sánh (diffing), sau đó được tuần tự hóa lại thành định dạng phân chia chính xác khi ghi.