MySQL Database vormgeving voor website in meerdere talen
Ik wil mijn website graag in meerdere talen gaan aanbieden. Het zal waarschijnlijk om een vijftal talen ongeveer gaan. Het betreft dan hoofdzakelijk titels en korte zinnetjes die vertaald moeten worden, geen hele artikelen. Ik vraag me alleen af wat de gangbare manier is om dit vorm te geven in MySQL.
Tijdens mijn zoektocht kwam ik oa onderstaande pagina tegen met vier voorbeelden, met wat screenshots (rechts in het hoekje) van de tabelindeling.
https://www.apphp.com/tutorials/index.php?page=multilanguage-database-design-in-mysql
Mijn vraag is hoe jullie me zouden adviseren zoiets vorm te geven. Alles in één tabel, met een kolom voor elke taal? Of toch werken meerdere tabellen en joins? Wat is gangbaar voor websites in meerdere talen, ook met het oog op snelheid om alle woorden in de taal op te halen in elke pagina?
Ik zit te denken aan een tabel met vertalingen. Waarbij er een koppeling is met de juiste taal. Eventueel een tabel met de talen, zodat je eventueel nog een characterset eraan kan koppelen.
Jep.. :-)
Zelf heb ik altijd:
tabel "str"
- id //auto-inc
- code //string met een unieke code, bijvoorbeeld "product:1:title" of "blog:321:slug"
- type //soort string; optioneel, bijvoorbeeld voor rechten = wie mag wat inzien/vertalen
table "lang_str"
- str_id //zie hierboven
- lang_id //taal
- text //de vertaling
Voordeel hiervan is dat altijd al je teksten door dezelfde "vertaal tool" heen te halen zijn. Dat *hoeft* dan weer niet altijd (je kunt natuurlijk nog gewoon een dedicated vertaal tool maken voor je productomschrijvingen), maar het *kan* wel (het voorkomt in ieder geval dat je voor elke "variant" een eigen vertaal tool moet maken).
Ik zie het voor me dat je dan in PHP met die string van 'code' (uit bovenstaand voorbeeld) een associative array uitdraait. En dat je dan door de pagina heen de benodigde titeltjes en zinnetjes uit die array ophaalt? Bijvoorbeeld uit $languageArray['product_title'], $languageArray['product_description'] om maar even bij het productvoorbeeld te blijven?
En hoe kan je dat het beste aanpassen voor de meta descriptions en de title? Mijn meta descriptions worden namelijk dynamisch samengesteld met meerdere variabelen per description. Zou ik die voor elke variant ook in zijn geheel in de MySQL database moeten zetten, en dan bijvoorbeeld strings als "{XPRODUCTNAAMX}" en "{XPRODUCTOMSCHRIJVINGX}" erin zetten en vervangen in PHP? Of zou ik die gewoon voor elke taal in de PHP code moeten zetten en daar samenstellen.
translation memory (TM).
Of je het beste een array kunt gebruiken — of iets anders — is vooral afhankelijk van hoe je een view opbouwt. Dat maakt het een ontwerpbeslissing voor je softwarearchitectuur (maar die kennen we niet).
Kijk ook eens hoe dit wordt opgelost met een Of je het beste een array kunt gebruiken — of iets anders — is vooral afhankelijk van hoe je een view opbouwt. Dat maakt het een ontwerpbeslissing voor je softwarearchitectuur (maar die kennen we niet).