Орчуулга¶
Долоон хэл, гурван давхарга, нэг үүсгэгч. frontend/lib/i18n ба
frontend/scripts/i18n-translate.mjs-ийн кодоос уншиж бичигдсэн.
Долоон хэл¶
Монгол + НҮБ-ын албан ёсны зургаан хэл (араб, хятад, англи, франц, орос, испани). Монгол нь эх сурвалж, бусад нь орчуулга.
Жагсаалт нь дур зоргоор биш, олон улсын байгууллагуудын хэрэглэдэг жишигт тулгуурласан — тиймээс найм дахь хэл нэмэх нь файл нэмэх биш, бодлого өөрчлөх ажил.
Бүтээгдэхүүний танилцуулга долоон хэлээр бүрэн байдаг. Техникийн баримт бүр долоон хувилбартай байх албагүй.
Гурван давхарга¶
| Давхарга | Хаана | Хэрхэн шалгагдах |
|---|---|---|
| Цөмийн толь | lib/i18n/core.ts |
Компиляцын үед — TranslationKey |
| Аппын толь | registerDictionary(appId, …) |
Ажиллах үед — энгийн мөр |
| Overlay | lib/i18n/locales/<хэл>/ |
Дутуу түлхүүр англи руу унана |
Цөмийн түлхүүрийн үсгийн алдаа нь build алдаа хэвээр. Аппын түлхүүр нь
мөр — өөр репод амьдардаг апп энэ репогийн мэддэггүй үгсийг өгдөг тул өөр
байх аргагүй. t() хоёуланг нь авна.
Өмнө нь толь нь index.tsx дотор 25 import, 25 spread-ээс баригддаг нэг
объект байсан ба хажууд нь тус бүр ~1381 мөртэй таван overlay файл байв. Апп
нэмэх нь тэднийг бүгдийг засахыг шаарддаг байсан — хүн бүр дундын толь
хүссэндээ биш, аппын үгс очих өөр газар байгаагүйд.
Бүртгэлийн дараалал хамаагүй: t() нь хайлт бүрд бүртгэлээс уншдаг,
нэгтгэсэн объектыг барьж авдаггүй.
Үүсгэгч¶
npm run i18n:translate -- --locale fr # юу өөрчлөгдөхийг харуулна
npm run i18n:translate -- --locale fr --write # locales/fr.ts бичнэ
Платформ Gemini-тэй аль хэдийн ярьдаг (copilot, орчуулгын панель); энэ нь тэр л загварыг интерфэйс дээрээ, хүсэлт бүрд биш build-ийн үед хэрэглэж байгаа хэрэг. Хүсэлт бүрд орчуулах нь дэлгэц бүр дээр латенси, мөнгө төлж, зочилсон болгонд арай өөр үг авна гэсэн үг.
Гурван дүрэм:
- Хэзээ ч дарж бичихгүй. Зөвхөн overlay-д дутуу түлхүүрүүд илгээгдэнэ — хүний засвар үүрд үлдэнэ, дахин ажиллуулах нь үргэлж аюулгүй.
- Placeholder зохиохгүй.
{name}зэрэг нь гаралт дээр шалгагдаж, алдсан эсвэл нэрийг нь өөрчилсөн орчуулга хаягдана — таарахаа больсон placeholder нь хэрэглэгчид шууд хаалт болж харагдана. - Техникийн нэрсэд хүрэхгүй — tenant, RBAC, OAuth2, eID, SKU, e-Barimt зэрэг нь бүтээгдэхүүний үгсийн сан, зохиол биш.
Гаралт нь ноорог. Интерфэйсийн машин орчуулга нь хянахад хангалттай сайн, уншаагүйгээр гаргахад тохиромжгүй байх хангалттай олон удаа буруу байдаг — overlay бүрийн толгойд ч тэгж бичигдсэн.
Хуудасны хэл¶
Monгол агуулгатай хуудсыг <html lang="en"> гэж зарлавал Chrome түүнийг
автоматаар «орчуулж», брэндийн нэрийг ч өөрчилнө. Хэлээ зөв зарлана.
Аппын толь route-оор бүртгэгдэнэ¶
2026-09-12-оос аппын толь (lib/i18n/apps/<app>.ts) тэр үгсийг уншдаг route-ийн
layout.tsx-ээс import хийгдэнэ — lib/i18n/index.tsx-ээс биш:
Модуль дээд түвшиндээ registerDictionary(appId, …) дууддаг тул layout-ийн модуль
үнэлэгдэхэд — route-ийн chunk ачаалагдаж, render-ээс өмнө — толь бүртгэгдэнэ.
Ингэснээр нэвтрээгүй landing бүх аппын толийг чирэхгүй (JS 416 → 255 KB).
lib/i18n/registry.tsнь аппын эх (mn/en, route-оос) ба overlay (бусад хэл, хэл сонгоход татагдах bundle-аас) хоёрыг тусад нь барьж, аль нь түрүүлж ирсэн ч нийлүүлнэ; бүртгэл бүрversion-ийг өсгөж provider дахин зурна.- Аль толь аль layout-оос бүртгэгддэгийн жагсаалт
lib/i18n/apps/index.ts-ийн толгойд. Шинэ апп нэмэхэд тэнд мөр нэмж, route-ийнхээ layout-оос import хий. tests/first-load-weight.test.tsньstorefront-оос бусад аппын толийгindex.tsxэсвэлcore.ts-ээс import хийвэл build-ийг унагана.- Distribution-ий апп яг ийм байдлаар өөрийн layout-оос бүртгэнэ — цөмийн файлд хүрэхгүй.
Native клиентийн мөр¶
Native бүрхүүлийн нэвтрэх дэлгэцийн мөр вэб толиос үүсгэгддэг, гараар бичигддэггүй:
cd frontend && BRAND_NAME="Gerege Nexus" npm run i18n:export-native
# эсвэл брэнд тус бүрд: BRAND_NAME="<брэнд>" native-apps/sync-i18n.sh
Экспортлогч (scripts/export-native-auth-i18n.mjs) lib/i18n/addons/auth.ts (mn, en)
ба locales/<хэл>/core.ts-ээс уншиж native-apps/generated-i18n/<хэл>.json,
Android res/values*/auth.xml, iOS Login.xcstrings-ийг бичнэ. {brand} нь
экспортын мөчид задрах тул BRAND_NAME заавал.
Дүрэм: auth.ts эсвэл overlay-ийн auth.* түлхүүрийг өөрчилсөн PR экспортын
гаралтыг хамт commit хийнэ. native-apps/generated-i18n нь экспортлогчийн
гаралттай таарч буйг CI-д шалгах алхам native клиентийн ажлаар нэмэгдэж байна;
тэр хүртэл шалгагч нь review.