Új hozzászólás Aktív témák

  • modder

    aktív tag

    válasz Lacces #9419 üzenetére

    Háttő

    Én most hirtelen kétfélé többnyelvűséget tudok megkülönböztetni:
    1) Az oldalon megjelenő statikus szövegek: navigáció, regisztráció, miegyéb. Itt általában olyan megoldás van (azt hiszem ilyen a Zend i18n modul is), hogy megadsz egy nyelvi fájlt, aminek minden sorában van egy angol szöveg - másnyelvű szöveg pár. Visszaadhat akár tömböt is (Kohana pl. ezt csinálja)

    return array(
    'Welcome :user' => 'Isten hozott :user'
    )

    majd kódban a szövegeket speciális függvénnyel íratod ki, ami éppen aktuális nyelvi beállításoknak megfelelő nyelven írja ki a szöveget:

    echo __('Welcome :user' , array(':user' => 'Laci'));

    2) Dinamikus szövegek: blogpostok, cikkek, amiket adatbázisban tárolsz. Ez a bonyolultabb téma. Azért is, mert egy adatbázis rekord nem csak szövegeket, hanem számokat, kapcsolatokat is tárolhat, amit nem akarsz redundánsan tárolni a többnyelvűség miatt. Ezek a megközelítések jutnak eszembe:
    a) van egy entitás táblád, és van több entitás_nyelv táblád. Az entitás táblába beleteszed a nyelvfüggetlen adatokat:
    mikor készült a cikk, ki a szerzője, mikor módosították, milyen kategória...

    Az entitás_nyelv táblába pedig beleteszel egy kapcsolatot az entitás táblára, és a nyelvfüggő dolgokat ebbe teszed: maga a cikk szövege, cím
    szerintem ez elég tiszta megoldás

    b) ugyanabban a táblában tárolod egy entitás minden fordítására vonatkozó adatot, és beteszel egy nyelv mezőt. Ez azért jó, mert nem kell a kapcsolatokkal foglalkozni, viszont a nyelvfüggetlen adatokat valszeg redundánsan tárolod, és konzisztensen kell tartani, amikor valami frissül

    c) brutálisan általános és lassú megoldás, de cachelhető kódból, ezt már egyszer megcsináltam :D
    Van egy nyelv táblám, aminek mezői [ id, nyelv, tablanev, tablamezo, tablaPK , szoveg ]
    gondolom ebből látszik, hogy mire megy ki a játék. Az összes entitásom összes szöveges mezőjét az összes nyelvre egy rekordként tárolom. Működő megoldás, nagyon dinamikus, nem kell meglévő adatbázisstruktúrát megváltoztatni, és ha cachelsz szöveget pl. APC-be, akkor még elfogadható sebességű is lehet. Ha nem cachelsz, akkor viszont túl sok adatbázis lekérdezés.

Új hozzászólás Aktív témák