Uluslararasılaştırma¶
Adaptive Learner, v1.13.0 / Aşama 26'dan itibaren 8 dilde
tamamen çevrilmiş olarak gönderilir: DE, EN, ES, FR, EL, PT, TR, JA.
Proje kuralı gereği, Almanca içerik gerçek umlauts kullanır
(ä, ö, ü, ß) — ASCII katlanmış Almanca de.yaml ve
docs/help/de/**'de yasaktır. test_i18n_translation_audit.py
hem umlaut kapsamını hem de daha önce geçen kataloglar için
≥%90-ayrışma-EN eşiğini sabitler.
Dizeler nerede yaşar¶
Arka uç¶
backend/config/i18n/{lang}.yaml içinde YAML katalogları — dil
başına bir dosya. Referans kataloğu EN'dir; diğer her kataloğun
aynı anahtar ağacına sahip olması gerekir.
# backend/config/i18n/en.yaml
common:
save: Save
cancel: Cancel
settings:
title: Settings
section_language: Language
...
Arka uç, istenen dil için tüm kataloğu JSON olarak döndüren
GET /api/i18n/{lang}'ı açığa çıkarır. Frontend'in useI18n
hook'u bunu ilk boyamada çağırır ve sonucu önbelleğe alır.
Frontend geri dönüşler¶
frontend/src/i18n/fallbacks.ts, frontend paketinde sabit
kodlanmış dizilerin satır içi bir alt kümesini taşır. Bunlar,
arka uç kataloğu yüklenmeden önce ilk boyamada gösterilir —
ve katalog uç noktası 5xx döndürürse kalıcı geri dönüş olarak.
useI18n'deki geri dönüş çözünürlük zinciri:
- Arka uç kataloğu (
/api/i18n/{lang}'dan canlı diziler). Nokta gösterimi yolunu yürür. - Sabit kodlanmış frontend geri dönüşleri (ilk boyama esnekliği).
- Arayan tarafından sağlanan geri dönüş dizesi.
- Anahtarın kendisi.
Uygulama içi yardım / belge sitesi¶
docs/help/_meta.yaml, her giriş için DE + EN başlıklarıyla
gezinme ağacını bildirir. Uygulama içi yardım paneli doğrudan
okur; scripts/generate_mkdocs_nav.py, mkdocs.yml gezinme
bloğunu aynı kaynaktan yeniden oluşturur.
Yardım sayfası Markdown'ı docs/help/{lang}/...'da yaşar — dil
başına bir klasör. mkdocs-static-i18n'in docs_structure: folder
modu çözünürlüğü yönetir.
Yeni bir dil ekleme¶
- Arka uç kataloğu:
backend/config/i18n/en.yaml'ıbackend/config/i18n/{newlang}.yaml'a kopyalayın. Her değeri yerel olarak çevirin (EN geçişi yok — çeviri denetim testi <%90 ayrışmada başarısız olur). Ardından Dexie modu paketi olanfrontend/src/data/i18n/{newlang}.json'a yansıtmak içinmake sync-i18nçalıştırın. - Frontend sabitleri:
frontend/src/lib/constants.tsiçindekiSUPPORTED_LANGUAGES'a dil kodunu ekleyin. - Frontend geri dönüşleri:
frontend/src/i18n/fallbacks.ts'e ilk boyama kod yolunun kullandığı küçük dizi alt kümesiyle bir{newlang}: {...}bloğu ekleyin. - Değerlendirme soruları:
plugins/adaptive-learner-plugin-assessment/ adaptive_learner_assessment/questions.py'yi düzenleyin — herQUESTIONSgirişine ve her cevaba birtext_{newlang}alanı ekleyin. - Oturum istemleri:
plugins/adaptive-learner-plugin-session/ adaptive_learner_session/prompts.py'yi her (yöntem, adım) hücresine üçüncü bir dil anahtarı ekleyecek şekilde düzenleyin. - Belge sitesi:
mkdocs.yml'ınplugins.i18n.languagesbloğunu güncelleyin ve EN yapısını yansıtandocs/help/{newlang}/dizini ekleyin.
Eşitlik testleri¶
backend/tests/test_i18n_parity.py, her kataloğu yürütür ve
şunları doğrular:
- Her dilin referansın (EN) sahip olduğu her anahtara sahip olduğu.
- Hiçbir dilin referansın sahip olmadığı ekstra bir anahtara sahip olmadığı.
Bu, en yaygın sapma hatasını yakalar: biri EN'e bir anahtar ekler
ve diğer 7 dosyaya eklemeyi unutur. Herhangi bir katalog
değişikliğinin ardından make test-backend çalıştırın.
Çoğullar¶
Mevcut kataloglar ICU çoğul sözdizimini kullanmaz. Oluşturduğumuz birkaç sayım (oturum sayısı, seri günleri) TS'de sabit kodlanmış biçim seçimi alır:
mkdocs-i18n veya bir çalışma zamanı ICU kütüphanesi aracılığıyla ICU çoğul dizileri, ertelenmiş listede yer almaktadır.
RTL dilleri¶
Arapça, İbranice, Farsça vb. CSS'de çift yönlü düzenleme desteğine ihtiyaç duyar. Mevcut tema LTR varsayar; RTL eklemek ertelenmiş listede yer almaktadır.
Dize ne zaman EKLENMEZ¶
Bir dize yalnızca geliştirici yüzeylerinde görünüyorsa
(AdaptiveLearnerError tarafından atılan hata mesajları, log
satırları, test fixture verisi), İngilizce bırakın. i18n makinesi
yalnızca son kullanıcıya görünen dizeler içindir.
Frontend'in console.warn ve console.error çağrıları da
İngilizce kalır — bunlar tarayıcı konsolunu okuyan geliştiriciler
içindir, son kullanıcılar için değil.