Hirdetés

Keresés

Ú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.

  • vakondka

    őstag

    válasz Lacces #9419 üzenetére

    Szia,

    Minden nyelvnek csinálj egy mappát (vagy csak 1-1 fájlt) amiben a nyelvi definíciók vannak állandókkal. és az oldaladon nyelvváltásnál töltsd be a megfelelő nyelvi fájl.
    pl:
    magyar.php:

    define('HEADER_TITLE_CREATE_ACCOUNT', 'Regisztráció');
    define('HEADER_TITLE_MY_ACCOUNT', 'Személyes beállítások');
    define('HEADER_TITLE_CART_CONTENTS', 'Kosár tartalma');
    define('HEADER_TITLE_CHECKOUT', 'Megrendelés');
    define('HEADER_TITLE_TOP', 'Főoldal');
    define('HEADER_TITLE_CATALOG', 'Katalógus');
    define('HEADER_TITLE_LOGOFF', 'Kijelentkezés');
    define('HEADER_TITLE_LOGIN', 'Bejelentkezés');

    english.php

    define('HEADER_TITLE_CREATE_ACCOUNT', 'Create an Account');
    define('HEADER_TITLE_MY_ACCOUNT', 'My Account');
    define('HEADER_TITLE_CART_CONTENTS', 'Cart Contents');
    define('HEADER_TITLE_CHECKOUT', 'Checkout');
    define('HEADER_TITLE_TOP', 'Top');
    define('HEADER_TITLE_CATALOG', 'Catalog');
    define('HEADER_TITLE_LOGOFF', 'Log Off');
    define('HEADER_TITLE_LOGIN', 'Log In');

    Így amikor ki akarsz írni valamit akkor ezeket használod és a megfelelő nyelven fog megjelenni.

    echo HEADER_TITLE_CREATE_ACCOUNT;

    Van persze sok más megoldás is, de talán ez a legegyszerűbb.

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