Többnyelvű weblap adatbázis
2014-04-14T12:29:41+02:00
2014-04-14T20:52:19+02:00
2022-06-29T14:51:38+02:00
  • Statikus szövegeket ja azokat tárolhatod akár egy tömbben is, pl lehet en.php, hu.php, stb.. mindegyikben egy $LANG tömb, és ami éppen ki van választva azt a fájlt includeolod és akkor mindíg aktuális nyelvű szövegekkel tölti majd fel a tömbödet amire később statikusan hivatkozol a kódban.

    Pl : $LANG['valami_szoveg']. Attól függően kap értéket, hogy melyik fájlt hívtad meg.

    Adatbázis szerkezet meg hát ja, érdemes felvázolgatni papírra abból a logikából kiindulva amit elsőnek is írtam és akkor kialakulhat esetleg valami jobb megoldás is.

    Persze ez erősen függ a teljes feladattól is, tehát először érdemes tudni mi az amit mindenképpen akarsz, jól megfogalmazni aztán elhangzottak alapján kialakítani valami egyszerű adatbáziszerkezet neki.



    Mert akkor biztosan látni fogod mennyi tábla lesz véglegesen, érdemes e tovább egyszerűsíteni stb..
    Mutasd a teljes hozzászólást!
  • Értem, köszönöm nagyon jól elmagyaráztad. Bár nekem akkor is fura, hogy miért kell egy title és egy description mezőt fenntartani...

    Közben sikerült kiagyalnom egy saját struktúrát. Igazából olyan megoldást próbáltam keresni, amivel egy táblában le tudnám tárolni a dinamikusan változó adatokhoz tartozó fordításokat. Konkrétan azt, hogy van egy képgalériám, amiben létre lehet hozni mappákat, annak nevet lehet adni (en, hu, fr), továbbá a mappába feltöltött képeket szintén egyesével el lehet majd nevezni a fenti nyelveken.

    Végül úgy tudtam megoldani, hogy minden táblához létre kell hoznom egy másik táblát.

    langs
     - code (pl.: hu, en)
     - lang (pl.: magyar, english)

    gallery
     - id (elsődleges kulcs)
     - folder (a mappa neve amiben a képek vannak)

    trans_gallery
     - id (elsődleges kulcs)
     - gallery_id (az egyes galériák mappájának nevei a 3 nyelven)
     - lang_code (a fenti nyelvkódok pl.: en, hu, fr)
     - desc (leírás, azaz a különböző nyelveken megfogalmazott mappanév)

    Az utolsó tábla így néz ki a gyakorlatban (ha van 2 galériám):
    1 1 HU Magyar mappanév
    2 1 EN Angol mappanév
    3 1 FR Francia mappanév
    4 2 HU Magyar mappanév 2
    5 2 EN Angol mappanév 2
    6 2 FR Francia mappanév 2

    A fenti megvalósítás jó, és működik, viszont ahhoz a táblához ami a galériához tartozó képeket fogja tárolni, ugyancsak létre kell hoznom egy trans_media táblát, azaz ahány lefordítandó, felhasználó által generált dinamikus adatot tárolok az adatbázisban, mindegyikhez kelleni fog egy trans_tablanev tábla.

    Kérdem én: ez jó megoldás? tényleg hasznos és értelmes? nincs ennél tömörebb megoldás, amivel akár 1 állandó trans_tablanev táblában tudnám tárolni ezeket?

    Továbbá akkor a statikus tartalmakat amiket szintén le kellene fordítanom pl.: Képgaléria, Elérhetőségek, Minden mező kitöltése kötelező stb. szövegeket érdemes lehet ini fájlban tárolnom az adatbázis mellett? Nekem egyszerűbbnek tűnne, mint azt is betenni adatbázisba.

    Köszönöm szépen.
    Mutasd a teljes hozzászólást!
  • Ami a linkelt adatbázis szerkezetet illeti:



    Az app_language tábla tartalmazza az összes elérhető nyelvet a weboldaladon, ezeket le tudod kérni és az user ki tudja választani melyik nyelven szeretné látni a weboldalad, illetőleg az adminisztrációs felületen is ezen nyelveket lehet használni.

    Az app_product az összes terméket tartalmazza amiket hozzáadtál az oldaladhoz, és azok nyelvfüggetlen adatait pl az árát, vagy amikor hozzá lett adva az oldalhoz.

    Az app_translation_entry pedig kulcsokat tartlmaz (hivatkozási kulcsokat az adott nyelvre, és a "translation_id" nevű oszlopot, amely elvileg adott produktumra mutat, ez alapján tudod eldönteni, hogy adott fordítás melyik produktumhoz lett készítve.

    De alapjaiban véve a lényeget leírtam korábban is, mindössze csak annyit kell tenned, hogy létrehozol egy olyan táblát amiben minden nyelven szerepelnek az információk adott bejegyzésre vonatkozóan és ezeket az információkat egy 'parent_id' oszloppal tudod összekötni a megfelelő bejegyzéssel, termékkel.


    Az általad felmutatott példa annyiban bonyolultabbnak tűnik, hogy itt a title és a description az eredeti kulcs, ezekre hivatkozik az app_translation_entry translation_id oszlopa.

    Tehát ahol (app_translation_entry) táblában translation_id = 1, az az app_product azon sorára hivatkozik ahol title (vagy description) = 1.

    Alapjaiban véve, ha lekérés történik az app_product infóval kezdesz, mondjuk urlben kapsz egy olyat, hogy &id = 1, ekkor az app_product egyes kulcsával ellátott sorára gondolunk, azt kérjük le, majd megnézzük, hogy milyen kulccsal szerepel benne a title és a description.

    Itt pl title = 1, megkeressük app_translation_entry olyan sorait ahol translation_id = 1 és visszakérjük, ekkor három sorunk lesz. Ugye így minden nyelven megjelenik, de nekünk csak a kiválsztott nyelven kell, ezért feltétlenek megszabjuk azt is, hogy language_code legyen egyenlő pl 'en'-el. Ekkor már csak az 'app_translation_entry' azon sorát fogjuk visszakapni ahol translation_id = 1 és language_code = en.
    Mutasd a teljes hozzászólást!
  • Van egy product tábla, ebben az összes létrehozott termék szerepel, egy id (elsődleges azonosító) ellátva.

    Innentől kezdve igazából elég lenne az is, hogy, létrehozol egy descriptions, vagy akármi táblát, amiben szerepelteted a product_id oszlopot, azt, hogy milyen nyelven van ott az aktuális infó (en, es, fr, stb..) és az információkat pl title, description stb...

    Amikor valaki lekéri az oldalt a megadott nyelvnek megfelelő leírást kell lekérned a megtekintendő termékhez, tehát, ha pl valaki kiválasztja a nyelvet pl angolt, elraksz egy sütit, vagy akármi mást ami alapján rögzited a választását, az urlben pedig get paraméter által pl a 125 id-el rendelkező terméket kérték le, akkor lekéred a 125-ös kulccsal rendelkező termék alapinformációit (pl mikor lett hozzáadva az adatbázishoz, meddig rendelhető, etc..) majd ezután a megadott kiválasztott nyelv alapján lekéred a nyelvfüggő leírásokat is a'descriptions' táblából, tehát ahol product_id = 125 és language = 'en'.

    Szerintem ez egyszerűbb megoldás :)
    Mutasd a teljes hozzászólást!
  • Sziasztok!

    Nézegettem neten, hogy az adatbázisban történő többnyelvű adatok tárolására milyen megoldások vannak. Nekem olyanra volna szükségem, amivel pl.: ha készítek egy képgalériát, akkor a szerkesztői felületen aki feltölti a képeket, az több nyelven meg tudja adni a képek megnevezését, galéria mappa nevét, a létrehozandó bejegyzések tartalmát stb.

    Ezt a megoldást találtam jónak (tudom hogy többi is van), de egyszerűen nem értem hogy az app_translation tábla title és description mezői hogyan tudnak egyszerre kapcsolatban állni egy egyetlen id-ből álló táblával?

    Valaki el tudná magyarázni, hogy az app_translation táblának mi a szerepe, és hogyan kapcsolódik a másik két táblához?

    Köszönöm!
    Mutasd a teljes hozzászólást!
    Csatolt állomány
abcd