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

Ngôn ngữ nhân tạo, Chữ viết & Chính tả

Champollion hỗ trợ hàng đầu cho các ngôn ngữ nhân tạo (conlang) thông qua các register LLM và bộ chuyển đổi chữ viết xác định (deterministic script converter). Hướng dẫn này sẽ trình bày cách hoạt động của tính năng hỗ trợ conlang, các font chữ bạn cần và cách thêm ngôn ngữ của riêng bạn.

:::tip Tại sao conlang lại quan trọng Conlang không chỉ là một thứ mới lạ — chúng vận hành chính xác cùng một cơ sở hạ tầng được sử dụng cho các ngôn ngữ thực tế ít được hỗ trợ (underserved languages). Quality gate, hệ thống coaching và pipeline chuyển đổi chữ viết hoạt động hoàn toàn giống nhau đối với tiếng Klingon và tiếng Plains Cree. Nếu pipeline conlang của bạn hoạt động tốt, pipeline dành cho ngôn ngữ tài nguyên thấp (low-resource language) của bạn cũng sẽ hoạt động tốt. :::


Các ngôn ngữ nhân tạo được hỗ trợ

Ngôn ngữBộ chuyển đổi chữ viếtFont chữ yêu cầu
Klingontlh✅ Chữ Latinh hóa (Romanization) → pIqaDFont PUA (ví dụ: pIqaD qolqoS)
Sindarin (Tiếng Elvish của Tolkien)x-elvish-s✅ Latin → TengwarFont CSUR PUA
Kryptonianx-kryptonian✅ Latin → KryptonianFont PUA
Pirate Englishx-pirate❌ chỉ registerKhông
Shakespearean Englishx-shakespeare❌ chỉ registerKhông
Yoda-speakx-yoda❌ chỉ registerKhông

Các mã conlang sử dụng tiền tố x- theo quy ước sử dụng riêng (private-use) của BCP-47, ngoại trừ tiếng Klingon (tlh) vốn có mã ISO 639-3 được cấp bởi SIL International.


Unicode, PUA và Yêu cầu về Font chữ

Vùng sử dụng riêng (Private Use Area)

Tiếng Klingon (pIqaD), Sindarin (Tengwar) và Kryptonian sử dụng các ký tự thuộc Vùng sử dụng riêng (PUA) của Unicode. PUA là dải ký tự từ U+E000–U+F8FF — các điểm mã (codepoint) này không có gán định chuẩn. ConScript Unicode Registry (CSUR) duy trì các ánh xạ được cộng đồng đồng thuận cho các chữ viết giả tưởng, nhưng chúng không phải là một phần của tiêu chuẩn Unicode.

Ý nghĩa thực tế của việc này:

  • Văn bản PUA sẽ hiển thị dưới dạng các ô vuông trống (□□□) nếu không tải đúng font chữ
  • Các font chữ khác nhau có thể ánh xạ các glyph (hình dáng ký tự) khác nhau vào cùng một điểm mã PUA
  • Champollion KHÔNG đi kèm sẵn các font chữ PUA — bạn phải tự tải chúng
  • Font chữ hệ thống sẽ không bao giờ hiển thị được các ký tự này

Dải PUA theo chữ viết

Chữ viếtDải PUATài liệu tham khảo CSUR
Klingon (pIqaD)U+F8D0–U+F8FFCSUR Klingon
Tengwar (Elvish)U+E000–U+E07FCSUR Tengwar
KryptonianThay đổi tùy theo fontKhông có tiêu chuẩn CSUR

Tải Web Font PUA

Champollion tích hợp sẵn một lệnh để tải xuống và quản lý các web font PUA:

# See which fonts are needed for your configured languages
champollion fonts list

# Download all needed fonts (auto-detects project type for output directory)
champollion fonts install

# Also generate a CSS snippet with @font-face declarations
champollion fonts install --css

Lệnh fonts install sẽ tải xuống từ các kho lưu trữ mã nguồn mở đã được xác minh:

Font chữChữ viếtGiấy phépNguồn
pIqaD qolqoSKlingonSIL Open Font License 1.1GitHub
FreeMonoTengwarTengwarGNU GPL v3 (kèm ngoại lệ font chữ)SourceForge
(do người dùng cung cấp)KryptonianThay đổiKhông có sẵn font PUA mã nguồn mở

Thư mục đầu ra được tự động phát hiện từ cấu trúc dự án của bạn (Docusaurus → static/fonts/, Hugo → static/fonts/, mặc định → public/fonts/). Bạn có thể ghi đè bằng --dir.

Nếu bạn muốn quản lý font chữ thủ công, hãy thêm các quy tắc @font-face trong CSS của bạn:

@font-face {
font-family: 'pIqaD';
src: url('/fonts/pIqaDqolqoS.ttf') format('truetype');
font-display: swap;
unicode-range: U+F8D0-F8FF;
}

/* Apply to Klingon text elements */
[lang="tlh"], [data-script="piqad"] {
font-family: 'pIqaD', sans-serif;
}

:::warning Không đảm bảo hỗ trợ Unicode hoàn toàn Hiệp hội Unicode đã từ chối rõ ràng việc mã hóa các chữ viết giả tưởng vào tiêu chuẩn chung. Việc gán mã PUA do cộng đồng tự duy trì và có thể xung đột giữa các triển khai font chữ khác nhau. Hãy luôn chỉ định chính xác font chữ mà dự án của bạn sử dụng và kiểm tra khả năng hiển thị trên các trình duyệt. :::


Bộ chuyển đổi chữ viết

Cách thức hoạt động

Quá trình chuyển đổi chữ viết của Champollion là một post-translation hook (móc xử lý sau dịch thuật):

  1. LLM dịch văn bản sang một chữ viết trung gian (thường là Latin hoặc SRO)
  2. Quality gate xác thực kết quả đầu ra
  3. Bộ chuyển đổi xác định (deterministic converter) sẽ chuyển đổi văn bản đã xác thực sang chữ viết hiển thị
  4. Văn bản đã chuyển đổi được ghi vào đĩa

Phương pháp tiếp cận hai bước này hiệu quả vì LLM tạo ra kết quả tốt hơn khi làm việc với các chữ viết dựa trên ký tự Latin. Bộ chuyển đổi xác định đảm bảo đầu ra chữ viết chính xác mà không cần phụ thuộc vào kiến thức về chữ viết (thường không đáng tin cậy) của mô hình.

Cả 5 bộ chuyển đổi

Champollion đi kèm với năm bộ chuyển đổi chữ viết tích hợp sẵn:

Tiếng Plains Cree: SRO → Chữ âm tiết (Syllabics) (crk)

Chính tả chữ Roman chuẩn (Standard Roman Orthography) sang Chữ âm tiết của Thổ dân Canada (Canadian Aboriginal Syllabics).

Input: "tawâw"
Output: "ᑕᐚᐤ"

Các nguyên âm dài sử dụng dấu macron/circumflex: ê, î, ô, â. Bộ chuyển đổi xử lý tất cả các dấu phụ SRO và ánh xạ chúng sang các ký tự âm tiết chính xác. Xem Hỗ trợ ngôn ngữ tài nguyên thấp để biết toàn bộ pipeline cho tiếng Cree.

Tiếng Serbia: Latin → Cyrillic (sr)

Chuyển đổi xác định từ chữ Latin sang chữ Cyrillic cho tiếng Serbia.

Input: "zdravo"
Output: "здраво"

Bộ chuyển đổi này xử lý toàn bộ ánh xạ bảng chữ cái tiếng Serbia bao gồm cả các chữ ghép (digraph) (lj → љ, nj → њ, dž → џ).

Tiếng Klingon: Chữ Latinh hóa → pIqaD (tlh)

Hệ thống chữ Latinh hóa của Marc Okrand sang các ký tự pIqaD PUA.

Input: "Qapla'" (romanized Klingon)
Output: [pIqaD PUA] (requires pIqaD font to render)

Tiếng Sindarin: Latin → Tengwar (x-elvish-s)

Ánh xạ chữ viết Tengwar theo chế độ Sindarin của Tolkien.

Input: "elen síla" (Latin Sindarin)
Output: [Tengwar PUA] (requires Tengwar font to render)

Tiếng Kryptonian: Latin → Kryptonian (x-kryptonian)

Ánh xạ chữ viết Kryptonian theo từ điển của người hâm mộ.

Input: "Kal-El"
Output: [Kryptonian PUA] (requires Kryptonian font to render)

Kích hoạt bộ chuyển đổi

Thiết lập trường scripts trong cấu hình ngôn ngữ của bạn. Đối với các bộ chuyển đổi tích hợp sẵn, trường này sẽ được tự động phát hiện từ mã ngôn ngữ:

{
"languages": {
"sr": { "scripts": "sr" },
"crk": {}
}
}

Tiếng Plains Cree (crk) được tự động phát hiện — bạn không cần phải thiết lập scripts một cách rõ ràng.


Ngôn ngữ đa chữ viết

Một số ngôn ngữ thực tế sử dụng nhiều chữ viết hoạt động song song:

Ngôn ngữChữ viếtCách tiếp cận của Champollion
Tiếng SerbiaLatin + CyrillicBộ chuyển đổi chữ viết (sr) — dịch bằng chữ Latin, chuyển đổi sang Cyrillic
Tiếng TrungGiản thể + Phồn thểCác mã locale riêng biệt (zh so với zh-TW) với các register khác nhau

Đối với các ngôn ngữ mà cả hai chữ viết đều phục vụ cùng một đối tượng độc giả (tiếng Serbia), hãy sử dụng bộ chuyển đổi chữ viết. Đối với các ngôn ngữ mà các chữ viết phục vụ các đối tượng độc giả khác nhau (tiếng Trung Giản thể cho Trung Quốc đại lục, Phồn thể cho Đài Loan/Hồng Kông), hãy sử dụng các mã locale riêng biệt.


Lưu ý về chính tả

Các register không chỉ quy định về tông giọng — chúng còn mang theo các chỉ dẫn chính tả để hướng LLM tuân theo các quy ước viết chính xác.

Các hình thức xưng hô trang trọng

Các register tích hợp sẵn của Champollion bao gồm cách xưng hô trang trọng phù hợp với văn hóa của từng ngôn ngữ:

Ngôn ngữHình thức trang trọngChỉ dẫn Register
Tiếng ĐứcSieUse Sie-form for formal address
Tiếng PhápvousUse vous-form
Tiếng NgaвыProfessional register with вы-form
Tiếng Thổ Nhĩ KỳsizProfessional register with siz-form
Tiếng Hàn합쇼체Formal Korean (합쇼체)
Tiếng Nhậtです/ますPolite professional register (です/ます form)
Tiếng Ba LanPan/PaniProfessional register with Pan/Pani form

Cách viết trung lập về giới tính (Gender-Inclusive Writing)

Mỗi thẻ ngôn ngữ có một trường gender.inclusiveGuidance chứa lời khuyên cụ thể cho từng ngôn ngữ. Trường này được đưa vào prompt dịch thuật của LLM tách biệt với thiết lập sẵn (preset) của register, nhờ đó nó được áp dụng một cách nhất quán bất kể người dùng chọn mức độ trang trọng nào:

  • Tiếng Pháp: Écriture inclusive (viết bao hàm) với ký hiệu dấu chấm giữa (ví dụ: "Connecté·e")
  • Tiếng Đức: Ký hiệu dấu hai chấm (Doppelpunkt) (ví dụ: "Benutzer:innen")
  • Tiếng Tây Ban Nha: Ưu tiên tái cấu trúc trung lập về giới tính; sử dụng ký hiệu dấu gạch chéo (ví dụ: "usuario/a") làm phương án dự phòng

Đối với các ngôn ngữ không có hướng dẫn cụ thể trong thẻ của chúng (ví dụ: tiếng Hàn, conlang), hệ thống sẽ quay về quy tắc chung: "ưu tiên các hình thức trung lập về giới tính hoặc tùy chọn bao hàm nhất có sẵn."

Yêu cầu đối với chữ viết từ phải sang trái (RTL)

Các register tiếng Ả Rập, tiếng Do Thái, tiếng Ba Tư và tiếng Urdu đều lưu ý các yêu cầu viết từ phải sang trái: Ensure text reads naturally in RTL layout contexts.

Ghi đè bất kỳ Register nào

Mỗi register là một giá trị cấu hình — hãy ghi đè nó để phù hợp với văn phong dự án của bạn:

{
"languages": {
"fr": {
"register": "Casual French. Use tu-form. Conversational blog tone. Gender-neutral when possible."
},
"de": {
"register": "Informal German. Use du-form. Tech startup voice."
}
}
}

Xem Cấu hình để biết tài liệu tham khảo cấu hình đầy đủ.


Thêm một Conlang mới

Từng bước thực hiện

  1. Chọn một mã sử dụng riêng BCP-47: Sử dụng tiền tố x- (ví dụ: x-dothraki, x-valyrian).

  2. Thêm vào cấu hình của bạn:

{
"languages": {
"x-dothraki": {
"register": "Dothraki language. Use David J. Peterson's vocabulary from the Living Language Dothraki textbook. Harsh, direct tone. No articles, no verb 'to be'."
}
}
}
  1. (Tùy chọn) Thêm bộ chuyển đổi chữ viết: Nếu conlang của bạn sử dụng chữ viết hiển thị không phải hệ Latin, hãy thêm một bộ chuyển đổi trong lib/scripts.js và đăng ký nó trong SCRIPT_CONVERTERS.

  2. Kiểm tra: Chạy champollion sync --dry để xem trước các bản dịch mà không cần ghi file.

  3. Kiểm tra quality gate: Quality gate có thể cần được tinh chỉnh cho conlang của bạn — đặc biệt là kiểm tra requireNonLatin nếu conlang của bạn sử dụng các ký tự PUA.

:::note Chất lượng dịch conlang phụ thuộc vào kiến thức của LLM LLM chỉ có thể dịch sang một conlang mà nó đã từng tiếp cận trong dữ liệu huấn luyện. Các conlang được tài liệu hóa tốt (Klingon, Sindarin, Dothraki) sẽ hoạt động tốt. Các conlang ít phổ biến hoặc mới được phát minh có thể cho ra kết quả không nhất quán. Hãy sử dụng dữ liệu coaching để cải thiện chất lượng. :::


Xem thêm