Factorizer/Cluster ERP WikiCluster ERP English
Ana sayfa / Web uygulaması

Açıklama

Uluslararasılaştırma ve diller

i18n.js dil manifestosunu ve sözlükleri nasıl yükler, anahtarları ve çoğulları nasıl çözer ve dili çalışırken nasıl değiştirir.

Web uygulamasının gösterdiği her metin ya webapp/i18n/ içindeki bir dil dosyasından ya da sunucu metadata'sındaki bir etiket sözlüğünden gelir. Bu sayfa dil manifestosunu, webapp/js/i18n.js dosyasının bir dili nasıl seçip yüklediğini, anahtarların, parametrelerin ve çoğulların nasıl çözüldüğünü ve dil değiştiğinde ne olduğunu açıklar. Dil eklemek web uygulamasına dil ekleyin sayfasındaki bir görevdir.

Kısaca

  • Kullanılabilir diller veridir: webapp/i18n/languages.json tr (Türkçe) ve en (English) dillerini listeler (webapp/i18n/languages.json:1-4).
  • en.json ve tr.json dosyalarının her biri 68 üst düzey grup altında 2.853 anahtar içerir ve iki dosyanın anahtar kümesi aynıdır (iki dosya bir JSON ayrıştırıcısıyla düzleştirilip anahtar kümeleri karşılaştırılarak sayıldı).
  • t(key, params) noktalı bir anahtarı çözer ve {name} yer tutucularını doldurur; eksik bir anahtar anahtarın kendisini döndürür (webapp/js/i18n.js:101-109).
  • tp(key, n) çoğul biçimini Intl.PluralRules ile seçer (webapp/js/i18n.js:112-127).
  • Metadata etiketleri İngilizceye geri düşen resolveLabel ile çözülür (webapp/js/meta.js:284-288).

Nasıl çalışır

Dili seçme

initI18n() manifestoyu yükler, sonra setLang(pick()) çağırır (webapp/js/i18n.js:54-72). pick() sırasıyla şunları kullanır (webapp/js/i18n.js:46-52):

  1. manifestoda varsa yerel depoda cluster_lang altında saklanan kod;
  2. manifestoda varsa tarayıcı dilinin ilk iki harfi;
  3. manifestoda varsa tr (DEFAULT_LANG);
  4. manifestonun ilk girdisi.

Manifesto yüklenemezse liste yalnız tr diline düşer; böylece uygulama yine açılır (webapp/js/i18n.js:14-16, webapp/js/i18n.js:32-44). Sözlük yüklenemezse uygulama işaretlemenin kendi metniyle devam eder (webapp/js/i18n.js:56-62).

Dil değiştirme

setLang(code) i18n/<code>.json dosyasını yükler, kodu saklar, kök öğede lang değerini ayarlar, görünür işaretlemeyi apply() ile çevirir ve cluster:lang-changed yayar (webapp/js/i18n.js:74-87). Dili üç yer değiştirir:

Yer Davranış Kaynak
Giriş ekranındaki dil düğmesi Manifestodaki her girdi arasında döner webapp/js/main.js:152-159, webapp/js/i18n.js:91-95
Ana ekran durum satırındaki dil düğmesi Manifestodaki her girdinin bir menüsü webapp/js/home.js:167-215
Ayarlar › Dil (common.language) Etkin girdide onay işareti olan bir liste webapp/js/home.js:3670-3712

cluster:lang-changed dinleyicileri:

  • gen-api.js önbelleğe alınmış her seçenek listesini ve etiketi temizler, çünkü sunucunun çözdüğü adlar dile bağlıdır (webapp/js/gen-api.js:366-371).
  • home.js çalışan her uygulamayı bayat işaretler; bayat bir uygulama kullanıcı ona döndüğünde yeniden çizilir (webapp/js/home.js:2334-2342, webapp/js/home.js:2501-2511).

Çoğaltılmış ana ekran kutuları başka bir kutuda yapılan değişikliği storage olayıyla izler (webapp/js/i18n.js:63-71).

Metni uygulama

apply(root) sözlükten dört nitelik ailesini doldurur (webapp/js/i18n.js:129-144):

Nitelik Hedef
data-i18n Metin içeriği
data-i18n-ph placeholder
data-i18n-aria aria-label
data-i18n-title title

Kodda kurulan ekranlar t() işlevini doğrudan çağırır. apiErrorText sunucu hata kodlarını error.<code> biçimindeki anahtarlarla çevirir ve çeviri yoksa sunucunun İngilizce iletisini kullanır (webapp/js/gen-api.js:11-35).

Sunucuya gönderilen dil

Her API çağrısı geçerli kodla Accept-Language taşır; böylece sunucunun çözdüğü adlar (birimler, kategoriler, referans etiketleri) aynı dilde döner (webapp/js/api.js:18-22). Bkz. referans verisi ve çekirdek i18n.

Metadata etiketleri ve referans satırları

Metadata'daki etiketler {"en": "...", "tr": "..."} gibi sözlüklerdir. resolveLabel önce geçerli dili, sonra İngilizceyi döndürür (webapp/js/meta.js:283-288). Dil başına bir sütun taşıyan referans satırları langLabel kullanır; bu label_<lang>, sonra label_en, sonra code okur (webapp/js/meta.js:416-421). Uygulama manifestosu etiketleri aynı kuralı izler (webapp/js/home.js:520).

Tarihler ve sayılar

Listelerdeki tarihler kullanıcının saat diliminde sabit bir YYYY-MM-DD kalıbı kullanır (webapp/js/prefs.js:150-154). Bileşenlerdeki kısa tarih ve saat sayfa diliyle Intl.DateTimeFormat kullanır; sıra ve ayırıcılar tarayıcının yerel ayar verisinden gelir (webapp/js/prefs.js:156-170). Durum satırı saati geçerli dille toLocaleTimeString ve toLocaleDateString kullanır (webapp/js/home.js:110-116).

Neden böyle kurulu

  • Projenin yazılı mühendislik kuralları dil seçiminin veri güdümlü olduğunu belirtir: yeni bir dil yeni bir JSON dosyası ve languages.json dosyasına bir satırdır, kod değişikliği gerekmez. webapp/js/i18n.js:4-7 içindeki yorum aynı kuralı belirtir.
  • webapp/js/api.js:18-21 içindeki yorum, dil başlığının Türkçe bir ekran sunucudan İngilizce birim adları aldığı için eklendiğini belirtir.
  • webapp/js/i18n.js:112-115 içindeki yorum, çoğul seçiminin n === 1 sınamaması gerektiğini ve kategoriyi CLDR verisinden aldığını belirtir.

Kurallar ve sınırlar

  • Projenin yazılı mühendislik kuralları kullanıcıya görünen her metnin bir i18n anahtarından gelmesini, iki dil dosyasının birlikte güncellenmesini ve Türkçe metnin doğru Türkçe karakterler kullanmasını ister.
  • Genel web dosyaları dil başına sütunları okumamalı veya bir dil koduna göre dallanmamalıdır. tests/test_metadata_driven_rules.py:85 bunu on bir dosya için zorunlu kılar.
  • Tarayıcı testleri: web-client/_e2e_lang.mjs, web-client/_e2e_lang_background.mjs, web-client/_e2e_intranet_notif_i18n.mjs, web-client/_e2e_ui_a11y.mjs (çoğullar).

Diğer parçalarla etkileşim

Sınırlar ve açık noktalar

  • Dil seçimi yalnız tarayıcıda saklanır (webapp/js/i18n.js:80). Kullanıcı hesabının parçası değildir; bkz. kullanıcı arayüz durumu.
  • Metadata etiket sözlükleri her modülün Python metadata'sında yazılıdır. Web sözlüğü olan ama metadata girdisi olmayan bir dil İngilizce metadata etiketlerini gösterir (webapp/js/meta.js:287).

Tanıtılan terimler

Terim Kod tanımlayıcısı Tanım Türkçe terim Kaynak
language manifest languages.json Web uygulamasının sunduğu dil kodlarının ve kendi dillerindeki adlarının listesi. dil manifestosu webapp/i18n/languages.json:1
translation key t Dil dosyasında bir metni adlandıran noktalı yol. çeviri anahtarı webapp/js/i18n.js:104
plural form tp Bir sayının CLDR çoğul kategorisine göre seçilen metin biçimi. çoğul biçimi webapp/js/i18n.js:116

İlgili sayfalar


92f8051 numaralı commit ile 2026-11-13 tarihinde doğrulandı.

Doğrulanan commit 92f8051 · 2026-11-13