fix(P1): kare başına alt süreçler, eksik i18n anahtarları, boş kullanıcı adı, GeoIP dil hatası

## 1. Kare başına alt süreç (3 yer)
  - installer.rs: WelcomeStep::show her karede detect_existing_linux()
    çağırıyordu → blkid -o list, yani saniyede ~60 tam blok aygıt
    taraması. Sonuç rescue_available alanında bir kez hesaplanıyor.
  - steps/network.rs: `nmcli dev status` show() içinde, kare başına.
    status_text alanına alındı; on_enter'da ve tarama/bağlanma
    sonrasında tazeleniyor.

## 2. Eksik çeviri anahtarları
  - mp_duplicate_mountpoint: iki locale'de de YOKTU → 8633422'de
    eklenen duplicate mountpoint kontrolü hata durumunda ekranda
    çıplak anahtar gösteriyordu
  - job_netinstall, job_setup_lvm: en.toml'da YOKTU → İngilizce
    kurulumda çıplak anahtar
  - username_empty: aşağıdaki boş kullanıcı adı düzeltmesi için
Doğrulama: 274 kullanılan anahtarın her ikisinde de karşılığı var
(0 eksik). job_* anahtarları t!(job.name()) ile dolaylı kullanılıyor,
doğrulama betiği bunları göremiyor ama mevcut.

## 3. Boş kullanıcı adı doğrulamadan geçiyordu (steps/users.rs)
validate_username("") None (hata yok) dönüyordu. Geçerli bir hostname
ile boş kullanıcı adı sihirbazı geçip CreateUserJob'a ulaşıyor ve
`useradd ""` çalıştırıyordu. Artık hata dönüyor.
username_empty anahtarı iki locale'e de eklendi.

## 4. GeoIP var olmayan dillere geçiyordu (steps/location.rs)
countryCode eşlemesi 8 ülkeyi (de/fr/it/es/ru/nl/pl) 8 dile
bağlıyordu ama locales/ altında yalnızca tr.toml ve en.toml var.
set_locale("de") hata vermez, sessizce kabul edilir ve t!() karşılığı
olmayan her anahtar için anahtarın KENDİSİNİ döndürür — Alman
kullanıcı tüm arayüzü "location_title", "next", "partition" gibi
çıplak metinlerle görüyordu.

  - language_for_country() yalnızca gerçekten var olan dilleri döndürüyor
  - funct::sanitize_locale() + AVAILABLE_LANGUAGES: set_locale
    çağrılarından ÖNCE koruma. Desteklenmeyen kod sessizce yedeğe
    düşüyor. 3 çağrı da korumaya alındı.
  - ZA (Güney Afrika) bilinçli olarak listede değil: 11 resmî dili var

## Testler
steps/users.rs ve steps/location.rs ve funct.rs'te test modu yoktu.
Eklenenler:
  users   : 8 test (boş ad, geçerli adlar, yasaklı sistem adları,
            başlangıç/karakter kuralları, hostname kuralları,
            Türkçe transliterasyon, boş dönmezlik, uzunluk)
  location: 4 test (her eşlemenin karşılığı olan locale dosyasına
            sahip olduğunu doğrular — asıl regresyon testi)
  funct   : 3 test (locale koruması + yedeğin kendisi destekleniyor)

cargo check --all-targets : 0 hata, 0 uyarı
cargo test              : 43/43 geçti (28 → 43)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Erkan IŞIK
2026-09-25 22:34:05 +03:00
parent d161556c73
commit c02d732bef
8 changed files with 288 additions and 32 deletions
+2
View File
@@ -62,6 +62,7 @@ password_confirm_label = "Parola (tekrar)"
hostname_label = "Bilgisayar adı"
username_invalid = "Geçersiz kullanıcı adı. Küçük harf veya alt çizgi ile başlamalı, en fazla 32 karakter."
username_too_long = "Kullanıcı adı çok uzun (maksimum 32 karakter)"
username_empty = "Kullanıcı adı boş olamaz"
username_forbidden = "Bu kullanıcı adı sistem tarafından kullanılıyor ve yasaklı"
username_invalid_start = "Kullanıcı adı küçük harf veya alt çizgi ile başlamalı"
username_invalid_chars = "Sadece küçük harf, rakam, alt çizgi ve tire kullanılabilir"
@@ -122,6 +123,7 @@ mp_create_here = "Buraya Oluştur"
mp_will_delete = "silinecek"
mp_restore = "Geri Al"
mp_free_space = "Boş Alan"
mp_duplicate_mountpoint = "Aynı bağlama noktası iki bölüme birden verilmiş; her bölümün farklı bir bağlama noktası olmalı"
mp_bar_now = "Mevcut Durum"
mp_bar_after = "Kurulum Sonrası"