Factorizer/Cluster ERP WikiCluster ERP English
Ana sayfa / Karar kayıtları

Açıklama

Veri güdümlü diller

Yeni bir Cluster ERP arayüz dilinin, kod değişikliği olmadan yeni bir JSON dosyası ve bir bildirim satırı olduğu kuralın karar kaydı.

Durum: Kabul edildi; projenin yazılı mühendislik kurallarında belirtilir. Bu kayıt Cluster ERP'nin arayüz dillerini nasıl seçip yüklediğini kapsar. Dil listesi veridir: web uygulaması bir bildirim dosyası okur, masaüstü istemci klasöründeki JSON dosyalarını listeler ve dil seçici her girdiyi gösterir. Web mekanizması uluslararasılaştırma ve diller sayfasında açıklanır; görev web uygulamasına dil ekleyin sayfasındadır.

Bağlam

Projenin yazılı mühendislik kuralları uygulamanın her ülkeyi hedeflediğini ve yeni bir dilin kod değişikliği olmadan yeni bir JSON dosyası olması gerektiğini söyler. İkili bir Türkçe ve İngilizce anahtarı yerine N dilli bir seçici koyarlar. Sınırı da belirtirler: Python'da en ve tr anahtarlarıyla yazılan metadata etiketleri, sözlükleri o dili kazanana kadar yeni bir dilde İngilizceye düşer. Başka bir gerekçe koddan belirlenemez.

Karar

  • Web uygulaması code ve name girdilerinden oluşan bir dizi olan webapp/i18n/languages.json dosyasını okur ve tam olarak bu dilleri sunar (webapp/js/i18n.js:1-7, webapp/js/i18n.js:32-44). Bildirim bugün iki girdi içerir (webapp/i18n/languages.json).
  • Her dilin, istek üzerine yüklenen tek bir sözlük dosyası webapp/i18n/<code>.json vardır (webapp/js/i18n.js:74-78).
  • Masaüstü istemci src/cluster_erp/desktop/i18n/ içindeki her *.json dosyasını listeler ve görünen adı _meta.name anahtarından alır (src/cluster_erp/desktop/i18n/translator.py:92-99, src/cluster_erp/desktop/i18n/en.json:2).
  • Geçerli dili olmayan bir metadata etiketi iki istemcide de İngilizceye düşer (webapp/js/meta.js:284-288, src/cluster_erp/desktop/i18n/translator.py:57-67).

Akış şeması web uygulamasının açılışta bir dili nasıl seçtiğini gösterir.

flowchart TD
 boot["initI18n"] --> man["i18n/languages.json getir"]
 man -->|başarısız| fb["yalnız kod içeren yedek listeyi koru"]
 man -->|tamam| list["languages = bildirim girdileri"]
 list --> pick{"kayıtlı seçim listede mi?"}
 fb --> pick
 pick -->|evet| use["kayıtlı dili kullan"]
 pick -->|hayır| nav{"tarayıcı dili listede mi?"}
 nav -->|evet| usenav["tarayıcı dilini kullan"]
 nav -->|hayır| def["varsayılanı, yoksa ilk girdiyi kullan"]
 use --> load["setLang: code.json getir, uygula"]
 usenav --> load
 def --> load

Düzyazıyla: initI18n bildirimi yükler ve yükleyemezse bir yedek liste tutar (webapp/js/i18n.js:32-44, webapp/js/i18n.js:54-62). pick önce kayıtlı seçimi, sonra tarayıcı dilini, sonra varsayılanı, sonra ilk girdiyi tercih eder (webapp/js/i18n.js:46-52). setLang sözlüğü yükler, seçimi saklar, belge dilini ayarlar, metinleri uygular ve değişikliği arka plandaki uygulamalara duyurur (webapp/js/i18n.js:74-87).

Sonuçlar

  • Bir web dili eklemek yalnız webapp/i18n/ klasörüne dokunur: bir sözlük dosyası ve bir bildirim satırı.
  • Seçiciler availableLanguages() çağırır ve asla sabit bir liste tutmaz (webapp/js/i18n.js:22-24). cycleLang herhangi sayıda dil arasında ilerler (webapp/js/i18n.js:91).
  • Metadata etiketleri gibi web sözlüğü dışındaki metinler, kendi sözlükleri o dili kazanana kadar yeni bir dilde İngilizce görünür.
  • Dil seçimi tek bir anahtar altında localStorage içindeki bir cihaz tercihidir ve storage olayıyla çoğaltılmış ana ekran kutucukları arasında eşitlenir (webapp/js/i18n.js:9, webapp/js/i18n.js:67-71).

Kodun uyguladığı yerler

Mekanizma Neyi denetler Kaynak
_e2e_lang.mjs Seçici her bildirim dilini listeler ve bir seçim kalıcıdır; beklentiler bildirimden gelir web-client/_e2e_lang.mjs:1-6, web-client/_e2e_lang.mjs:17-20
tests/test_store_catalog_assets.py Mağaza ekran görüntüleri bildirimdeki her dilde altyazı taşır tests/test_store_catalog_assets.py:1-17
tests/test_metadata_driven_rules.py Genel web kodu dil dalı ve label_tr veya label_en sütunu içermez tests/test_metadata_driven_rules.py:102-111

İlgili sayfalar


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

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