PHP Meertalige applicatie
Op een handige manier een meertalige php applicatie, inclusief code!
Gesponsorde koppelingen
Inhoudsopgave
15 reacties op 'PHP Meertalige applicatie'
Gesponsorde koppelingen
Hmm, je hebt gettext gebruikt, dat is positief. Wat je zegt over Zend Framework is echter niet waar, je kunt ook gewoon alleen de Zend_Translate downloaden en gebruiken en dan heb je een pakket dat goed getest is en door een team wordt onderhouden en bijgewerkt. Dus dan is deze tut enigszins overbodig. Maar het is wel netjes zo te zien dus wel goede toevoeging.
Eerlijk gezegd ga ik liever voor de ingebouwde gettext van PHP. Inderdaad, die kan uit staan, maar als we alles wat uit kan staan niet gaan gebruiken, zullen we terug moeten naar het tijdperk mysql_*** in plaats van PDO, zullen we captchas met de hand in Photoshop moeten maken, en ga zo maar door.
Daarnaast heb ik zo mijn vragen over de performance. Hoeveel vertraagt dit je script? Ik hou het gewoon bij de ingebouwde gettext.
En dan even, is dit niet eerder een script?
Daarnaast heb ik zo mijn vragen over de performance. Hoeveel vertraagt dit je script? Ik hou het gewoon bij de ingebouwde gettext.
En dan even, is dit niet eerder een script?
Ik heb kariger toevoegingen gezien.
Ik vond het lastig om een goed begin te maken met gettext(). De configuratie is rampzalig en niet echt te doorgronden.
Daarnaast, wat is je performanceverlies via gettext()? Het is makkelijk om te roepen dat een module sneller is dan een willekeurig phpscript, wat dat is iets wat je denkt, maar niet iets dat je weet. Ik zal een paar testjes doen waarmee ik de performance zal proberen te meten.
Ik vond het lastig om een goed begin te maken met gettext(). De configuratie is rampzalig en niet echt te doorgronden.
Daarnaast, wat is je performanceverlies via gettext()? Het is makkelijk om te roepen dat een module sneller is dan een willekeurig phpscript, wat dat is iets wat je denkt, maar niet iets dat je weet. Ik zal een paar testjes doen waarmee ik de performance zal proberen te meten.
om niet in een wellus nietus verhaal te vervallen:
Ik heb een test gedaan met behulp van ??n bestand, deze doet de volgende dingen.
- alternatieve gettext zonder vertaalbestand
- alternatieve gettext met vertaalbestand
- gettext zonder vertaling
- gettext met vertaling
Het laden van de bestanden wordt in beide gevallen meegerekent. Er zijn 20 strings die vertaald worden van engels naar nederlands. Elke string wordt opgevraagd door middel van __() of _(), zonder echo. Dat in een loop a 500x.
Daarnaast heb ik dit alles twee keer onder elkaar gezet (begin van een php file wordt meestal iets sneller geparsed. Dit zijn de resultaten:
Voor kleine vertaalbestanden is het alternatief minstens 2x tot 5x zo snel. Als je met >100 regels zit, is het beeld wellicht anders, ik ga het niet proberen.
Ik heb een test gedaan met behulp van ??n bestand, deze doet de volgende dingen.
- alternatieve gettext zonder vertaalbestand
- alternatieve gettext met vertaalbestand
- gettext zonder vertaling
- gettext met vertaling
Het laden van de bestanden wordt in beide gevallen meegerekent. Er zijn 20 strings die vertaald worden van engels naar nederlands. Elke string wordt opgevraagd door middel van __() of _(), zonder echo. Dat in een loop a 500x.
Daarnaast heb ik dit alles twee keer onder elkaar gezet (begin van een php file wordt meestal iets sneller geparsed. Dit zijn de resultaten:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
Completed alternate gettext (not translated) in: 0.0692970752716
Completed alternate gettext (translated) in: 0.0494830608368
Completed gettext (not translated) in: 0.110485076904
Completed gettext (translated) in: 0.107810020447
Completed alternate gettext (not translated) in: 0.0252361297607
Completed alternate gettext (translated) in: 0.0239050388336
Completed gettext (not translated) in: 0.111171007156
Completed gettext (translated) in: 0.109647035599
Completed alternate gettext (translated) in: 0.0494830608368
Completed gettext (not translated) in: 0.110485076904
Completed gettext (translated) in: 0.107810020447
Completed alternate gettext (not translated) in: 0.0252361297607
Completed alternate gettext (translated) in: 0.0239050388336
Completed gettext (not translated) in: 0.111171007156
Completed gettext (translated) in: 0.109647035599
Voor kleine vertaalbestanden is het alternatief minstens 2x tot 5x zo snel. Als je met >100 regels zit, is het beeld wellicht anders, ik ga het niet proberen.
@Kruidnootje: Met define, dus met constantes? Hoe doe je dat dan met een nieuwe vertaling? Hoe wil jij garanderen dat je alle onderdelen keurig hebt vertaalt en wat doet jouw systeem op het moment dat je toch nog ergens een vertaling bent vergeten?
Dat is het mooie van gettext(), die pakt bij een ontbrekende vertaling het origineel. Daarnaast kun je laten controleren of alles is vertaalt en een overzichtje krijgen van wat je nog moet vertalen/vergeten bent.
Variabelen en constantes werken leuk en aardig met een klein scriptje, niet voor complexe/grote systemen. Het is niet te bouwen, debuggen en/of te onderhouden. Je zou dan nog beter met XML, XMLschema en XSLT kunnen gaan werken, mits je voldoende rekenkracht en geheugen tot je beschikking hebt. (al doet cache natuurlijk ook wonderen)
Dat is het mooie van gettext(), die pakt bij een ontbrekende vertaling het origineel. Daarnaast kun je laten controleren of alles is vertaalt en een overzichtje krijgen van wat je nog moet vertalen/vergeten bent.
Variabelen en constantes werken leuk en aardig met een klein scriptje, niet voor complexe/grote systemen. Het is niet te bouwen, debuggen en/of te onderhouden. Je zou dan nog beter met XML, XMLschema en XSLT kunnen gaan werken, mits je voldoende rekenkracht en geheugen tot je beschikking hebt. (al doet cache natuurlijk ook wonderen)
@Storeman: een echt goeie test zou pas zijn waneer je even een bestaande website pakt, en daar de verschillende methoden op uittest. Als test laat je dan 5 of 10 minuten lang je server alles uit de kast halen door zo vaak en zo veel mogelijk requests te maken. Daar zijn wel programma's voor. Zo zie je niet alleen het verschil in snelheid in PHP, maar ook het verschil dat Apache er aan bijdraagt (Apache is namelijk verantwoordelijk voor het cachen van de vertaal-bestanden) Ook ben ik wel benieuwd hoeveel impact bijvoorbeeld het lezen van bestanden heeft (wat jouw pure-php methode gebruikt) onder deze wat realistischere omstandigheden.
@Frank: XML lijkt mij niet de manier om vertalingen op te slaan. Hoe was jij van plan te gaan zoeken in een XML-bestand naar die ene vertaling? Ik denk dat de in het artikel genoemde alternatieven redelijker zijn.
Eigenlijk ben ik zelf vreemd genoeg nog wel nieuwsgierig naar hoe een database het er vanaf zou brengen. Gewoon een lekkere simpele en snelle, het liefst los van de andere database-server die de daadwerkelijke data voor zijn verantwoording neemt uiteraard.
@Frank: XML lijkt mij niet de manier om vertalingen op te slaan. Hoe was jij van plan te gaan zoeken in een XML-bestand naar die ene vertaling? Ik denk dat de in het artikel genoemde alternatieven redelijker zijn.
Eigenlijk ben ik zelf vreemd genoeg nog wel nieuwsgierig naar hoe een database het er vanaf zou brengen. Gewoon een lekkere simpele en snelle, het liefst los van de andere database-server die de daadwerkelijke data voor zijn verantwoording neemt uiteraard.
@Jelmer: Met XQuery is dat vrij eenvoudig te doen, dat is tenslotte de query-taal voor XML.
XML is heel mooi en kan heel veel, maar het vreet resources. Het mooiste is nog wel de mogelijkheid tot validatie, dat stelt met XMLschema echt niks voor. Maar je betaalt er wel een prijs voor, de reeds genoemde aanslag op de resources. Dat is het zelden waard, ik zal het alleen aanraden in omgevingen waar je te maken hebt met heel veel verschillende systemen die toch al via XML met elkaar kletsen. Dat zal voor de gemiddelde phphulper niet van toepassing zijn.
XML is heel mooi en kan heel veel, maar het vreet resources. Het mooiste is nog wel de mogelijkheid tot validatie, dat stelt met XMLschema echt niks voor. Maar je betaalt er wel een prijs voor, de reeds genoemde aanslag op de resources. Dat is het zelden waard, ik zal het alleen aanraden in omgevingen waar je te maken hebt met heel veel verschillende systemen die toch al via XML met elkaar kletsen. Dat zal voor de gemiddelde phphulper niet van toepassing zijn.
@Allard jansen.
Wanneer er met een script iets misgaat kan je het beste een topic starten aan de hand van de opgestelde criterium. Deze criterium wordt weergegeven wanneer je een nieuw topic probeert te starten. Daarnaast kan het ook geen kwaad om de gebruiksvoorwaarden te lezen.
Alvast bedankt.
Niels Kieviet.
Wanneer er met een script iets misgaat kan je het beste een topic starten aan de hand van de opgestelde criterium. Deze criterium wordt weergegeven wanneer je een nieuw topic probeert te starten. Daarnaast kan het ook geen kwaad om de gebruiksvoorwaarden te lezen.
Alvast bedankt.
Niels Kieviet.
Ga ook een MULTI language web-app maken...
Ben het van plan het probleem op te lossen met classes die automatisch geladen worden...
Heb dan dezelfde classes in verschillende mappen:
LANGUAGE\DEFAULT\
LANGUAGE\NL
LANGUAGE\DE
LANGUAGE\FR
De autoload functie kijkt dan effe welke taal de gebuiker wilt hebben en laad dan de juiste class in de juiste map.
Groetjes: Lucifer.
Alle classes de taal afhankelijk zijn beginnen met 'cLANG_' en alleen deze worden geladen uit deze speciale LANGUAGE map.
Ben het van plan het probleem op te lossen met classes die automatisch geladen worden...
Heb dan dezelfde classes in verschillende mappen:
LANGUAGE\DEFAULT\
LANGUAGE\NL
LANGUAGE\DE
LANGUAGE\FR
De autoload functie kijkt dan effe welke taal de gebuiker wilt hebben en laad dan de juiste class in de juiste map.
Groetjes: Lucifer.
Alle classes de taal afhankelijk zijn beginnen met 'cLANG_' en alleen deze worden geladen uit deze speciale LANGUAGE map.
Om te reageren heb je een account nodig en je moet ingelogd zijn.
- Details
Door:
Storeman storeman- 5 jaar geleden
- 1.786 x bekeken
- Labels
- Geen tags toegevoegd.
- PHP tutorials opties
- Overig
- Nieuwste PHP tutorials
- PHP tutorial toevoegen


PHP hulp
0 seconden vanaf nu