PHP Meertalige applicatie

Door Storeman storeman, 20 jaar geleden, 7.343x bekeken

Op een handige manier een meertalige php applicatie, inclusief code!

Gesponsorde koppelingen

Inhoudsopgave

  1. Inleiding
  2. Mogelijkheden
  3. Mijn Oplossing
  4. Gebruik

 

Er zijn 15 reacties op 'Php meertalige applicatie'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
PHP erik
PHP erik
20 jaar geleden
 
0 +1 -0 -1
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.
- -
- -
20 jaar geleden
 
0 +1 -0 -1
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?
Storeman storeman
storeman storeman
20 jaar geleden
 
0 +1 -0 -1
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.
Arend a
Arend a
20 jaar geleden
 
0 +1 -0 -1
Het is natuurlijk te raden dat een c compiled libary iestiepietsie sneller is dan een php script.
Storeman storeman
storeman storeman
20 jaar geleden
 
0 +1 -0 -1
En ik raad dat de oudejaarloterij op ??n van mijn loten gaat vallen!

Ik verwacht het ook wel, maar ik speel even advocaat van de duivel, omdat ie c-compiled is, heb je ook niet echt zicht op wat dat ding allemaal doet.
Storeman storeman
storeman storeman
20 jaar geleden
 
0 +1 -0 -1
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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


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.
- -
- -
20 jaar geleden
 
0 +1 -0 -1
Zelf maak ik gebruik van define's, en heb daar geen problemen mee.
Frank -
Frank -
20 jaar geleden
 
0 +1 -0 -1
@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)
Jelmer -
Jelmer -
20 jaar geleden
 
0 +1 -0 -1
@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 -
Frank -
20 jaar geleden
 
0 +1 -0 -1
@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.
Hipska BE
Hipska BE
20 jaar geleden
 
0 +1 -0 -1
is dit een tutorial? dit lijkt me meer een script met uitgebreide uitleg van het gebruik en uitgebreide inleiding...

Een tutorial over meertalige php sites zou ook de andere methoden even moeten toelichten toch? of ben ik hier zo verkeerd aan het denken?
Michael
michael
20 jaar geleden
 
0 +1 -0 -1
Ik gebruik gewoon altijd singletons voor meertalige applicaties. Is alleen niet aanpasbaar via het web maar alleen in het script zelf.


16 jaar geleden
 
0 +1 -0 -1
Dank je. Maar als ik alle gegevens invoer bij PoEdit, krijg ik de error: Bijwerken van catalogus mislukt. Ook kan ik niet klikken op: Bijwerken vanuit de bronteksten. Weet iemand een oplossing? Wat die ik fout?
Niels K
Niels K
16 jaar geleden
 
0 +1 -0 -1
@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.
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Roger Keulen
Roger Keulen
16 jaar geleden
 
0 +1 -0 -1
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.

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. Inleiding
  2. Mogelijkheden
  3. Mijn Oplossing
  4. Gebruik

Labels

  • Geen tags toegevoegd.

PHP tutorial opties

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.