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ı
codevenamegirdilerinden oluşan bir dizi olanwebapp/i18n/languages.jsondosyası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>.jsonvardır (webapp/js/i18n.js:74-78). - Masaüstü istemci
src/cluster_erp/desktop/i18n/içindeki her*.jsondosyasını listeler ve görünen adı_meta.nameanahtarı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 --> loadDü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).cycleLangherhangi 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
localStorageiçindeki bir cihaz tercihidir vestorageolayı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¶
- Karar kayıtları
- Uluslararasılaştırma ve diller
- Web uygulamasına dil ekleyin
- Diller, temalar ve erişilebilirlik
92f8051 numaralı commit ile 2026-11-13 tarihinde doğrulandı.