Ana içeriğe geç

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:

  1. Arka uç kataloğu (/api/i18n/{lang}'dan canlı diziler). Nokta gösterimi yolunu yürür.
  2. Sabit kodlanmış frontend geri dönüşleri (ilk boyama esnekliği).
  3. Arayan tarafından sağlanan geri dönüş dizesi.
  4. 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

  1. Arka uç kataloğu: backend/config/i18n/en.yamlbackend/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 olan frontend/src/data/i18n/{newlang}.json'a yansıtmak için make sync-i18n çalıştırın.
  2. Frontend sabitleri: frontend/src/lib/constants.ts içindeki SUPPORTED_LANGUAGES'a dil kodunu ekleyin.
  3. 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.
  4. Değerlendirme soruları: plugins/adaptive-learner-plugin-assessment/ adaptive_learner_assessment/questions.py'yi düzenleyin — her QUESTIONS girişine ve her cevaba bir text_{newlang} alanı ekleyin.
  5. 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.
  6. Belge sitesi: mkdocs.yml'ın plugins.i18n.languages bloğunu güncelleyin ve EN yapısını yansıtan docs/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:

const label = count === 1 ? t("session_single") : t("session_plural");

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.