Toon posts:

[PHP & MYSQL] multilanguage -> veel queries

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo allemaal,

Ik ben bezig met een ontwerp voor een website die volledig meertalig moet zijn. Denk aan nederlands, frans, duits, engels en italiaans.

Nu heb ik dus twee tabellen gemaakt, tabel taal met:

taalid (primary key)
taal

een tabel content met:
contenttaalid (primary key)
contentnaam (primary key)
content
etc.


De website wordt modulair opgebouwd. Alle modules trekken alle content die ze nodig hebben uit de db. (bijvoorbeeld string "inloggen", "gebruikersnaam", "wachtwoord")

Er is een content class die voor mij de content uit de database trekt en deze in de modules weergeeft in de goede taal. Nu is het echter zo dat op de homepage deze class ongeveer 30 (als het al niet meer is) keer een query uitvoert op de database. De query is wel vrij simpel met een inner join tussen tabel taal en tabel content.

Dat gaat technisch gezien allemaal heel goed werken. Nu ben ik alleen bang dat wanneer ik een pagina krijg waarbij ik het volledige menu en een aantal modules moet laden heel veel querys ga uitvoeren op de db. Mochten we het aantal bezoekers krijgen waar we van uit gaan (ongeveer 10.000 per dag) gaat dit dan grootse problemen geven?

De vraag is dus eigenlijk als volgt:

1. Zijn 30 - 50 van dit soort querys te veel per page request?
2. Zijn er alternatieven zodat de server minder belast wordt?

Het handige van bovenstaand systeem is het feit dat met een "translation" programma mensen vanuit het buitenland alle teksten kunnen vertalen on the line O-)

Bedankt!

Acties:
  • 0 Henk 'm!

  • Kix@$$
  • Registratie: December 2001
  • Laatst online: 20:23
Wat ook een makkelijke manier is:

Een include maken "dutch.inc.php" met daarin gewoon constants:
code:
1
2
3
$lang['language'] = 'Nederlands';
$lang['constant_name'] = 'Constante naam';
$lang['blaat_string'] = 'datdus';


En per taal een include file maken...

Acties:
  • 0 Henk 'm!

  • MJV
  • Registratie: Mei 2003
  • Laatst online: 23:04

MJV

Kix@$$ schreef op woensdag 09 februari 2005 @ 12:28:
Wat ook een makkelijke manier is:

Een include maken "dutch.inc.php" met daarin gewoon constants:
code:
1
2
3
$lang['language'] = 'Nederlands';
$lang['constant_name'] = 'Constante naam';
$lang['blaat_string'] = 'datdus';


En per taal een include file maken...
Inderdaad, en mocht je dan toch graag met een database werken voor het beheer van het content, dan laat je die *.inc.php opnieuw genereren/wijzig je die.

Acties:
  • 0 Henk 'm!

Verwijderd

Kix@$$ schreef op woensdag 09 februari 2005 @ 12:28:
Wat ook een makkelijke manier is:

Een include maken "dutch.inc.php" met daarin gewoon constants:
code:
1
2
3
$lang['language'] = 'Nederlands';
$lang['constant_name'] = 'Constante naam';
$lang['blaat_string'] = 'datdus';


En per taal een include file maken...
ik denk dat dat idd véél sneller gaat zijn dan via mysql en voor iedere string een query

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

http://php.net/gettext is hier speciaal voor gemaakt, werkt erg handig :)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Dus als ik het goed begrijp:

Voor grotere content zoals nieuws, bedrijfsprofiel, dus langere teksten gebruiken we DB zoals hierboven beschreven.

Voor modules-specifieke teksten (korte teksten) gebruiken we een language file.

Maar hoe is het dan mogelijk om mensen zelf via internet deze include files te laten bewerken? Ik wil namelijk niet degene zijn die al deze "language-files" bijhoudt. Het is dus belangrijk dat dit via het internet te vertalen is.

Acties:
  • 0 Henk 'm!

  • Kix@$$
  • Registratie: December 2001
  • Laatst online: 20:23
Sja die kun je gewoon de INI laten editten natuurlijk. Gewoon met fopen e.d. een mooie interface er omheen bouwen...

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Erkens schreef op woensdag 09 februari 2005 @ 12:34:
http://php.net/gettext is hier speciaal voor gemaakt, werkt erg handig :)
Oke, ziet er best complex uit maar dat gaan we eens uittesten, bedankt! Maar als ik zo op het eerste gezicht zie is dit niet om "content" te vertalen maar alleen voor de applicatie itelf (de modules).

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Verwijderd schreef op woensdag 09 februari 2005 @ 12:40:
[...]


Oke, ziet er best complex uit maar dat gaan we eens uittesten, bedankt! Maar als ik zo op het eerste gezicht zie is dit niet om "content" te vertalen maar alleen voor de applicatie itelf (de modules).
klopt, maar je content moet je toch al uit je DB halen waarschijnlijk, dus hoef je alleen maar de juiste taal te halen daarvoor.

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

gettext moet je eigenlijk vooral gebruiken voor korte aanduidingen en messages, zoals "Inloggen", "Uw gebruikersnaam of wachtwoord is niet correct", "U bent enkele verplichte velden vergeten in te vullen", etcetera. Dit zijn niet echt dingen die veel onderhouden hoeven te worden. Voor echte content kun je beter de database gebruiken (beter onderhoudbaar). Wanneer je mensen toch de gelegenheid wilt geven die messages te onderhouden, is het natuurlijk een piece of cake om daar een backendje voor te klussen.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • Kix@$$
  • Registratie: December 2001
  • Laatst online: 20:23
Ja opzich zijn het 2 verschillende dingen:

Je hebt een layout met alle texten van de layout zelf erin, maar dat is alleen het omhulsol, dus alleen menu's e.d..
Daarnaast moet je een CMS hebben voor de daadwerkelijke website texten.

De eerste kun je het beste doen met die gettext() of met een ini file. Die 2de zou ik inderdaad uit een database halen. Dat is opzich maar 1 query per pagina als het goed is.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Oke,

het bevestigd eigenlijk wat ik al dacht. Wat ik nu wil gaan doen, voor jullie interesse: ;-)

Ik gebruik een ini file per module en 1 voor de core. Als buitenlandse "administrators" de backend van het CMS ingaan krijgen ze te zien welke van deze ini teksten nog niet vertaald zijn in hun eigen taal. Op deze manier kunnen ze hiermee toch helpen vertalen. Verder krijgen ze de mogelijkheid content in de database te vertalen.

Wordt heus wel een mooi systeempje, :P

Bedankt voor de reacties.
Pagina: 1