STABLE: Final schema sync, optimized gitignore

This commit is contained in:
Kincses
2026-02-26 08:19:25 +01:00
parent 893f39fa15
commit 505543330a
203 changed files with 11590 additions and 9542 deletions

View File

@@ -1,3 +1,4 @@
# /opt/docker/dev/service_finder/backend/app/services/translation_service.py
import json
import os
import logging
@@ -10,23 +11,28 @@ from typing import Dict, Any, Optional
logger = logging.getLogger(__name__)
class TranslationService:
"""
Dinamikus fordítás-kezelő szerviz.
Támogatja a szerveroldali cache-elést és a frontend JSON exportot.
"""
# Memória-cache a szerveroldali hibaüzenetekhez és emailekhez
_published_cache: Dict[str, Dict[str, str]] = {}
@classmethod
async def load_cache(cls, db: AsyncSession):
"""Betölti a publikált szövegeket a memóriába az adatbázisból."""
result = await db.execute(
select(Translation).where(Translation.is_published == True)
)
""" Betölti a publikált szövegeket a memóriába az adatbázisból. """
stmt = select(Translation).where(Translation.is_published == True)
result = await db.execute(stmt)
translations = result.scalars().all()
cls._published_cache = {}
for t in translations:
if t.lang_code not in cls._published_cache:
cls._published_cache[t.lang_code] = {}
cls._published_cache[t.lang_code][t.key] = t.value
logger.info(f"🌍 i18n Cache: {len(translations)} szöveg betöltve.")
# JAVÍTVA: t.lang_code helyett t.lang
if t.lang not in cls._published_cache:
cls._published_cache[t.lang] = {}
cls._published_cache[t.lang][t.key] = t.value
logger.info(f"🌍 i18n Motor: {len(translations)} szöveg aktiválva a memóriában.")
@classmethod
def get_text(cls, key: str, lang: str = "hu", variables: Optional[Dict[str, Any]] = None) -> str:
@@ -54,18 +60,19 @@ class TranslationService:
@classmethod
async def publish_all(cls, db: AsyncSession):
"""Minden piszkozatot élesít, frissíti a memóriát és legenerálja a JSON-öket."""
""" Minden piszkozatot élesít, frissíti a memóriát és legenerálja a JSON-öket. """
await db.execute(
update(Translation).where(Translation.is_published == False).values(is_published=True)
)
await db.commit()
await cls.load_cache(db)
await cls.export_to_json(db)
return True
@staticmethod
async def export_to_json(db: AsyncSession):
"""
Adatbázis -> Hierarchikus JSON export.
Adatbázis -> Hierarchikus JSON struktúra generálása a Frontend számára.
'AUTH.LOGIN.TITLE' -> { "AUTH": { "LOGIN": { "TITLE": "..." } } }
"""
stmt = select(Translation).where(Translation.is_published == True)
@@ -74,12 +81,14 @@ class TranslationService:
languages: Dict[str, Any] = {}
for t in translations:
if t.lang_code not in languages:
languages[t.lang_code] = {}
# JAVÍTVA: t.lang_code helyett t.lang
if t.lang not in languages:
languages[t.lang] = {}
# Hierarchikus struktúra felépítése
# Kulcs felbontása szintekre hierarchikus struktúrához
parts = t.key.split('.')
current_level = languages[t.lang_code]
current_level = languages[t.lang]
for part in parts[:-1]:
if part not in current_level:
current_level[part] = {}
@@ -87,7 +96,7 @@ class TranslationService:
current_level[parts[-1]] = t.value
# Fájlok mentése
# Fájlok fizikai mentése a static könyvtárba
locales_path = os.path.join(settings.STATIC_DIR, "locales")
os.makedirs(locales_path, exist_ok=True)
@@ -96,9 +105,9 @@ class TranslationService:
try:
with open(file_path, "w", encoding="utf-8") as f:
json.dump(content, f, ensure_ascii=False, indent=2)
logger.info(f"🚀 JSON legenerálva: {file_path}")
logger.info(f"✅ Nyelvi fájl (JSON) frissítve: {file_path}")
except Exception as e:
logger.error(f"Fájl hiba ({lang}): {str(e)}")
logger.error(f"❌ Hiba a fájl mentésekor ({lang}): {e}")
return True