nyelvi refaktorálás előtt
This commit is contained in:
242
docs/i18n_duplicate_key_analysis.md
Normal file
242
docs/i18n_duplicate_key_analysis.md
Normal file
@@ -0,0 +1,242 @@
|
||||
# 🌐 i18n Duplikált Kulcsok Összehasonlító Elemzése
|
||||
|
||||
**Dátum:** 2026-06-19
|
||||
**Készítette:** Rendszer-Architect
|
||||
**Cél:** Nyelvi modulok (i18n) kulcsainak felmérése, duplikációk azonosítása, optimalizálási javaslat
|
||||
|
||||
---
|
||||
|
||||
## 1. Feltárt Fájlok Áttekintése
|
||||
|
||||
Összesen **8 i18n fájl** található a projektben, két elkülönült rendszerben:
|
||||
|
||||
### 1.1 Frontend (vue-i18n, TypeScript) — `frontend/src/i18n/`
|
||||
|
||||
| Fájl | Sorok | Hatókör | Státusz |
|
||||
|------|-------|---------|---------|
|
||||
| en.ts | ~1603 | Teljes (25 szekció) | ✅ Teljes |
|
||||
| hu.ts | ~1600 | Teljes (25 szekció) | ✅ Teljes |
|
||||
| de.ts | ~83 | Részleges: menu, header, dashboard, zen, auth | ⚠️ Hiányos |
|
||||
| ro.ts | ~83 | Részleges: menu, header, dashboard, zen, auth | ⚠️ Hiányos |
|
||||
| cz.ts | ~83 | Részleges: menu, header, dashboard, zen, auth | ⚠️ Hiányos |
|
||||
| sk.ts | ~83 | Részleges: menu, header, dashboard, zen, auth | ⚠️ Hiányos |
|
||||
|
||||
### 1.2 Backend (statikus JSON) — `backend/static/locales/`
|
||||
|
||||
| Fájl | Sorok | Hatókör | Státusz |
|
||||
|------|-------|---------|---------|
|
||||
| en.json | ~76 | AUTH, SENTINEL, EMAIL, ORGANIZATION | ✅ Teljes |
|
||||
| hu.json | ~83 | AUTH, SENTINEL, EMAIL, ORGANIZATION | ⚠️ Aszimmetrikus |
|
||||
|
||||
> **⚠️ Fontos:** A frontend és backend rendszerek **teljesen elkülönülnek**. Más kulcs-sémát használnak (dot-notation vs UPPER_SNAKE_CASE), így közöttük NINCS duplikáció.
|
||||
|
||||
---
|
||||
|
||||
## 2. Frontend Kulcsok Hierarchikus Szerkezete
|
||||
|
||||
A frontend i18n rendszer 25 gyökér-szekcióra tagolódik:
|
||||
|
||||
```
|
||||
common (9 kulcs) — Általános (cancel, save, select, year, mileage, stb.)
|
||||
subscription (11) — Előfizetések
|
||||
landing (20+) — Nyitóoldal
|
||||
menu (8) — Navigációs menü
|
||||
garage (18) — Garázs felület
|
||||
vehicleDetail (20+) — Jármű részletek
|
||||
header (35+) — Fejléc
|
||||
dashboard (40+) — Irányítópult
|
||||
finance (25+) — Pénzügyi motor
|
||||
zen (2) — Zen mód
|
||||
auth (50+) — Bejelentkezés, regisztráció
|
||||
profile (60+) — Felhasználói profil
|
||||
kyc (20+) — KYC
|
||||
verifyEmail (15+) — E-mail megerősítés
|
||||
company (70+) — Cég műveletek
|
||||
organization (2) — Szervezeti név
|
||||
address (7) — Cím komponensek
|
||||
servicebook (15+) — Szervizkönyv
|
||||
vehicle (200+) — Jármű adatok
|
||||
serviceFinder (30+) — Szervizkereső
|
||||
provider (60+) — Szolgáltató adatok
|
||||
categories (4) — Kategóriák
|
||||
gamification (2) — Gamifikáció
|
||||
admin.services (20+) — Admin: szolgáltatások
|
||||
admin.packages (30+) — Admin: csomagok
|
||||
admin.users (30+) — Admin: felhasználók
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 3. Duplikált Kulcsok Kategorizált Listája
|
||||
|
||||
### 3.1 ✅ Pontos Egyezések (Biztonságosan Összevonható)
|
||||
|
||||
Ezek a kulcsok **angolban és magyarban is azonos értéket** adnak vissza. Egyetlen közös kulccsá vonhatók össze.
|
||||
|
||||
| # | Érintett Kulcsok | EN érték | HU érték | Előfordulás |
|
||||
|---|-----------------|----------|----------|-------------|
|
||||
| 1 | common.cancel / profile.cancel / servicebook.cancel | "Cancel" | "Mégse" | **3 helyen** |
|
||||
| 2 | common.save / profile.save | "Save" | "Mentés" | **2 helyen** |
|
||||
| 3 | common.saving / servicebook.saving / vehicle.saving / admin.services.saving / admin.packages.saving | "Saving..." | "Mentés..." | **5 helyen** |
|
||||
| 4 | common.back / kyc.back / company.back | "Back" | "Vissza" | **3 helyen** |
|
||||
| 5 | common.mileage / garage.mileage / vehicleDetail.mileage | "Mileage" | "Futásteljesítmény" | **3 helyen** |
|
||||
| 6 | common.year / garage.year | "Year" | "Évjárat" | **2 helyen** |
|
||||
| 7 | common.retry / dashboard.errorRetry | "Retry" | "Újrapróbálkozás" | **2 helyen** |
|
||||
| 8 | garage.noPlate / vehicleDetail.noPlate | "No Plate" | "Nincs rendszám" | **2 helyen** |
|
||||
| 9 | garage.nextService / vehicleDetail.nextService / vehicle.nextService | "Next Service" | "Következő Szerviz" | **3 helyen** |
|
||||
| 10 | vehicleDetail.noData / vehicle.noData | "No data" | "Nincs adat" | **2 helyen** |
|
||||
| 11 | header.subtitle / dashboard.subtitle | "Your dashboard and vehicle overview" | "Irányítópultod és járműveid áttekintése" | **2 helyen ⭐** |
|
||||
| 12 | garage.backToGarage / profile.backToGarage | "Back to Garage" | "Vissza a Garázsba" | **2 helyen** |
|
||||
| 13 | header.profile / profile.title | "Profile Settings" | "Profil beállítások" | **2 helyen** |
|
||||
| 14 | dashboard.statusActive / company.fleetActive / admin.users.status_active | "Active" | "Aktív" | **3 helyen** |
|
||||
| 15 | vehicleDetail.vin / vehicle.label_vin | "VIN (Chassis Number)" | "Alvázszám (VIN)" | **2 helyen** |
|
||||
| 16 | kyc.country / company.country / profile.country | "Country" | "Ország" | **3 helyen** |
|
||||
| 17 | kyc.zipCode / company.zipCode / profile.zipCode | "ZIP Code" | "Irányítószám" | **3 helyen** |
|
||||
| 18 | kyc.city / company.city / profile.city | "City" | "Város" | **3 helyen** |
|
||||
| 19 | kyc.houseNumber / company.houseNumber / profile.houseNumber | "House Number" | "Házszám" | **3 helyen** |
|
||||
| 20 | profile.stairwell / company.stairwell | "Stairwell" | "Lépcsőház" | **2 helyen** |
|
||||
| 21 | profile.floor / company.floor | "Floor" | "Emelet" | **2 helyen** |
|
||||
| 22 | profile.door / company.door | "Door" | "Ajtó" | **2 helyen** |
|
||||
| 23 | profile.parcelId / company.parcelId | "Parcel ID" | "Helyrajzi szám" | **2 helyen** |
|
||||
| 24 | kyc.streetName / company.streetName / provider.streetNameLabel | "Street Name" | "Utca neve" | **3 helyen** |
|
||||
| 25 | kyc.streetType / company.streetType | "Type" | "Típus" | **2 helyen** |
|
||||
|
||||
> ⭐ A **#11** (header.subtitle = dashboard.subtitle) a legszembetűnőbb: **teljesen azonos mondat**, mindkét nyelven. Egyértelműen összevonandó.
|
||||
|
||||
### 3.2 ⚠️ Kis Eltéréssel (Egyedi Kontextus, Megfontolandó)
|
||||
|
||||
| # | Érintett Kulcsok | EN érték | HU érték(ek) | Megjegyzés |
|
||||
|---|-----------------|----------|-------------|------------|
|
||||
| 26 | common.cancel vs company.cancel vs admin.services.cancel | "Cancel" | "Mégse" / "Mégsem" | "Mégsem" elütés? |
|
||||
| 27 | finance.retry vs common.retry vs dashboard.errorRetry | "Retry" | "Újra" / "Újrapróbálkozás" | finance.retry rövidebb |
|
||||
| 28 | vehicleDetail.vin vs vehicle.label_vin | "VIN" / "VIN (Chassis Number)" | "Alvázszám (VIN)" | EN nem azonos |
|
||||
| 29 | company.streetType vs profile.streetType | "Type" / "Street Type" | "Típus" / "Közterület jellege" | Profile formalisabb |
|
||||
| 30 | company.email vs provider.emailLabel | "Email" / "Email" | "E-mail" / "E-mail cím" | Provider explicitabb |
|
||||
| 31 | company.phone vs provider.phoneLabel | "Phone" / "Phone" | "Telefonszám" / "Telefon" | Különböző hossz |
|
||||
| 32 | dashboard.addVehicle vs menu.addVehicle | "+ Add Vehicle" / "+ Add New Vehicle" | "+ Jármű Hozzáadása" / "+ Új Jármű Hozzáadása" | Menü-ben "New" |
|
||||
|
||||
### 3.3 🔄 Jármű Funkciók Átfedései
|
||||
|
||||
A vehicle.features (~130), vehicle.motorcycleFeatures (~70), vehicle.lcvFeatures (~40) és vehicle.hgvFeatures (~90) között jelentős átfedés.
|
||||
|
||||
#### Pontos egyezések (összevonható):
|
||||
|
||||
| Kulcs | EN | HU | Érintett szekciók |
|
||||
|-------|----|----|------------------|
|
||||
| cruise_control | "Cruise Control" | "Tempomat" | features, motorcycleFeatures, lcvFeatures |
|
||||
| alloy_wheels | "Alloy Wheels" | "Könnyűfém felni" | features, lcvFeatures |
|
||||
| garage_kept | "Garage Kept" | "Garázsban tartott" | features, motorcycleFeatures |
|
||||
| xenon_headlights | "Xenon Headlights" | "Xenon fényszóró" | features, lcvFeatures |
|
||||
| fog_lights | "Fog Lights" | "Ködlámpa" | features, lcvFeatures |
|
||||
| sunroof | "Sunroof" | "Napfénytető" | features, lcvFeatures |
|
||||
| heated_seat | "Heated Seat" | "Fűthető ülés" | motorcycleFeatures, lcvFeatures |
|
||||
| navigation | "Navigation (GPS)" | "Navigáció (GPS)" | features, hgvFeatures |
|
||||
| apple_carplay | "Apple CarPlay" | "Apple CarPlay" | features, hgvFeatures |
|
||||
| android_auto | "Android Auto" | "Android Auto" | features, hgvFeatures |
|
||||
| bluetooth | "Bluetooth" | "Bluetooth" | features, hgvFeatures |
|
||||
| wireless_charging | "Wireless Charging" | "Vezeték nélküli töltő" | features, hgvFeatures |
|
||||
| dab_radio | "DAB+ Digital Radio" | "DAB+ digitális rádió" | features, hgvFeatures |
|
||||
| premium_sound | "Premium Sound System" | "Prémium hangrendszer" | features, hgvFeatures |
|
||||
| wifi_hotspot | "WiFi Hotspot" | "WiFi Hotspot" | features, hgvFeatures |
|
||||
| adaptive_cruise | "Adaptive Cruise Control (ACC)" | "Adaptív tempomat (ACC)" | features, hgvFeatures |
|
||||
| 360_camera | "360° Camera" | "360°-os kamera" | features, hgvFeatures |
|
||||
| parking_sensors_rear | "Rear Parking Sensors" | "Hátsó parkolóérzékelők" | features, lcvFeatures |
|
||||
|
||||
#### Eltérő magyar fordítás (manuális átgondolást igényel):
|
||||
|
||||
| Kulcs | EN (features) | EN (másik) | HU (features) | HU (másik) | Forrás |
|
||||
|-------|--------------|------------|---------------|------------|--------|
|
||||
| abs | "ABS" | "ABS" | "ABS" | "ABS (blokkolásgátló)" | motorcycleFeatures |
|
||||
| gps_tracker | "GPS Tracker" | "GPS Tracker" | "GPS követő" | "GPS nyomkövető" | lcvFeatures, hgvFeatures |
|
||||
| alarm | "Alarm System" | "Alarm" | "Riasztórendszer" | "Riasztó" | motorcycleFeatures, lcvFeatures |
|
||||
| first_owner | "First Owner" | "First Owner" | "Első tulajdonos" | "Első tulajdonostól" | motorcycleFeatures |
|
||||
| service_book | "Service Book" | "Service Book" | "Szervizkönyvvel" | "Szervizkönyv" | motorcycleFeatures |
|
||||
| isofix | "ISOFIX" | "ISOFIX Child Seat Anchors" | "Isofix" | "Isofix gyerekülés rögzítés" | lcvFeatures |
|
||||
| tow_bar | "Tow Bar" | "Tow Bar" | "Vontatóhorog (vonóhorog)" | "Vontatóhorog" | lcvFeatures |
|
||||
| usb_charging | "USB Charging" | "USB Charging" | "USB töltőcsatlakozó" | "USB töltő" | hgvFeatures |
|
||||
| subwoofer | "Subwoofer" | "Subwoofer" | "Mélynyomó (Subwoofer)" | "Mélynyomó" | hgvFeatures |
|
||||
| rear_entertainment | "Rear Entertainment" | "Rear Entertainment System" | "Hátsó szórakoztató rendszer" | "Hátsó szórakoztató rendszer" | hgvFeatures |
|
||||
| traction_control | "Traction Control (TCS)" | "Traction Control" | "Kipörgésgátló (TCS)" | "Kipörgésgátló" | hgvFeatures |
|
||||
|
||||
---
|
||||
|
||||
## 4. Backend JSON Aszimmetria
|
||||
|
||||
### en.json vs hu.json
|
||||
|
||||
| Kulcs | en.json | hu.json | Státusz |
|
||||
|-------|---------|---------|---------|
|
||||
| AUTH.ERROR.UNAUTHORIZED | ✅ "Unauthorized access" | ❌ **HIÁNYZIK** | Pótlandó hu.json-ban |
|
||||
| COMMON.SAVE_SUCCESS | ❌ **HIÁNYZIK** | ✅ "Sikeres mentés!" | Pótlandó en.json-ban |
|
||||
| SENTINEL.APPROVAL.REQUIRED | ❌ **HIÁNYZIK** | ✅ "A kérelem jóváhagyása szükséges" | Pótlandó en.json-ban |
|
||||
|
||||
A fennmaradó ~40 kulcs mindkét fájlban azonos szerkezetű.
|
||||
|
||||
---
|
||||
|
||||
## 5. Hiányos Fordítások (de, ro, cz, sk)
|
||||
|
||||
A 4 részleges fájl mindegyike **csak 5 szekciót** fed le a 25-ből:
|
||||
|
||||
| Szekció | de.ts | ro.ts | cz.ts | sk.ts |
|
||||
|---------|-------|-------|-------|-------|
|
||||
| menu | ✅ | ✅ | ✅ | ✅ |
|
||||
| header | ✅ | ✅ | ✅ | ✅ |
|
||||
| dashboard | ✅ | ✅ | ✅ | ✅ |
|
||||
| zen | ✅ | ✅ | ✅ | ✅ |
|
||||
| auth | ✅ | ✅ | ✅ | ✅ |
|
||||
| Többi 20 szekció | ❌ | ❌ | ❌ | ❌ |
|
||||
|
||||
**Hiányzó:** common, subscription, landing, garage, vehicleDetail, finance, profile, kyc, verifyEmail, company, organization, address, servicebook, vehicle, serviceFinder, provider, categories, gamification, admin
|
||||
|
||||
---
|
||||
|
||||
## 6. Statisztikai Összesítés
|
||||
|
||||
| Mérőszám | Érték |
|
||||
|----------|-------|
|
||||
| Összes i18n fájl | **8 db** (6 frontend + 2 backend) |
|
||||
| Frontend teljes kulcsok (en.ts) | **~900+** egyedi kulcs |
|
||||
| Frontend hiányos fájlok | **4 db** (de, ro, cz, sk) — csak 20% lefedettség |
|
||||
| Backend teljes kulcsok | **~55** db |
|
||||
| **Pontos duplikációk (összevonható)** | **25 csoport**, ~60 kulcs érintett |
|
||||
| **Közel-duplikációk (felülvizsgálandó)** | **7 csoport**, ~15 kulcs érintett |
|
||||
| **Jármű feature átfedések (pontos)** | **18 csoport**, ~50 kulcs érintett |
|
||||
| **Jármű feature átfedések (eltérő)** | **11 csoport**, ~25 kulcs érintett |
|
||||
| **Backend hiányzó kulcsok** | **3 db** |
|
||||
| **Összes optimalizálható kulcs** | **~150+** (a ~900-ból) ≈ **16-17%** |
|
||||
|
||||
---
|
||||
|
||||
## 7. Optimalizálási Javaslat
|
||||
|
||||
### 7.1 Azonnal összevonható (25 csoport)
|
||||
|
||||
Javasolt elnevezési konvenció: A leggyakrabban használt kulcsot tartsuk meg (pl. common), a többit alias-ként hivatkozzuk rá.
|
||||
|
||||
### 7.2 Jármű feature-ök konszolidációja
|
||||
|
||||
Javasolt struktúra: egy központi `vehicle.features` szekció, a motorcycleFeatures/lcvFeatures/hgvFeatures pedig hivatkozzon rá. Az eltérő magyar fordításokat egységesíteni kell.
|
||||
|
||||
### 7.3 Backend hiányzó kulcsok pótlása
|
||||
|
||||
- AUTH.ERROR.UNAUTHORIZED → hozzáadandó a hu.json-hoz
|
||||
- COMMON.SAVE_SUCCESS → hozzáadandó az en.json-hoz
|
||||
- SENTINEL.APPROVAL.REQUIRED → hozzáadandó az en.json-hoz
|
||||
|
||||
### 7.4 Várakozó lista (nem sürgős)
|
||||
|
||||
A 4 hiányos fordítást (de, ro, cz, sk) csak az optimalizálás után érdemes bővíteni.
|
||||
|
||||
---
|
||||
|
||||
## 8. Összefoglaló
|
||||
|
||||
A frontend i18n rendszerben **~150 kulcs (16-17%)** duplikált vagy átfedő. Összevonásukkal:
|
||||
|
||||
- **Karbantarthatóság javul:** egy helyen módosítandó fordítás
|
||||
- **Konzisztencia nő:** nem jelenhet meg kétféleképp ugyanaz
|
||||
- **Fájlméret csökken:** ~5-10% méretcsökkenés
|
||||
- **Backend hiba javul:** 3 hiányzó kulcs pótlása
|
||||
|
||||
**A véglegesítéshez kérjük a felhasználó jóváhagyását.**
|
||||
Reference in New Issue
Block a user