Hoi mensen,
Weer een onduidelijke topictitel, maar ik ben slecht in het samenvatten van een probleem op zo'n klein stukje
Ik ben al twee dagen aan het ploeteren door de Got search en andere sites, maar ik kom niet tot een duidelijk antwoord. Wat is m'n probleem?
Ik heb een PHP-site. Wat ie doet is niet van belang want alles werkt perfect. Nu heb ik de site zo opgezet dat vertalingen eenvoudig zijn door alle strings die tekstuitvoer op het scherm geven in een apart bestand op te slaan - buiten de code dus. Wil je een andere taal, dan moet dus gewoon dat bestand vertaald worden.
Voorlopig werk ik als volgt. In de configuratie van m'n scripts staat:
Dat werkt allemaal fijn, maar is niet het probleem... Het probleem is dat $language_string een globale variabele is. Ik zit nu al 2 dagen te zoeken naar een definitief antwoord op de vraag: is de methode die ik gebruik goed? Sommigen vinden het gebruik van globale variabelen geen enkel probleem terwijl anderen al beginnen te schuimbekken bij het horen ervan. Of is m'n methode al fundamenteel verkeerd? Voor de rest gebruik ik geen globale variabelen. Ik begrijp wat sommigen ertegen hebben en probeer ze zoveel mogelijk te vermijden (voor de configuratievariabelen gebruik ik constanten), maar ik weet niet goed hoe ik het hier moet aanpakken. Alles in een functie? Maar dan moeten al die honderden strings telkens weer opnieuw worden ingelezen als die functie aangeroepen wordt terwijl ze nu in het begin éénmaal in de globale variabele worden opgeslagen.
Hoe zouden jullie dit aanpakken?
Weer een onduidelijke topictitel, maar ik ben slecht in het samenvatten van een probleem op zo'n klein stukje
Ik ben al twee dagen aan het ploeteren door de Got search en andere sites, maar ik kom niet tot een duidelijk antwoord. Wat is m'n probleem?
Ik heb een PHP-site. Wat ie doet is niet van belang want alles werkt perfect. Nu heb ik de site zo opgezet dat vertalingen eenvoudig zijn door alle strings die tekstuitvoer op het scherm geven in een apart bestand op te slaan - buiten de code dus. Wil je een andere taal, dan moet dus gewoon dat bestand vertaald worden.
Voorlopig werk ik als volgt. In de configuratie van m'n scripts staat:
PHP:
De constante LANGUAGE_FILE bevat dit aparte bestand met alle taalafhankelijke strings. Het bestand nederlands.lang heeft een opbouw als volgt (vereenvoudigd voorbeeld omdat het om vele honderden strings gaat):1
| define("LANGUAGE_FILE", "nederlands.lang"); |
PHP:
Het bestand nederlands.lang wordt met een require opgenomen in de PHP code zodat de variabele $language_string eigenlijk een globale variabele is. Met de functie GetLanguageText kan ik dan van eender waar in m'n code teksten ophalen:1
2
3
4
5
6
7
8
9
10
11
12
13
14
| $language_string = array( "main_page" => array( "title" => "Mijn Site", "intro" => "Welkom op mij site blah blah", "member" => "U bent ingelogd" ), "user_page" => array( 0 => "Overzicht van de gebruikers op deze site.", 1 => "Administrator", 2 => "Nieuwsposter", 3 => "Gast" ) ); |
PHP:
Dus als ik ergens in m'n code bijvoorbeeld GetLanguageText("user_page", 1) oproep, dan krijg ik de string "Administrator" terug.1
2
3
4
| GetLanguageText($pagina, $string) { global $language_string; return $language_string[$pagina][$string]; } |
Dat werkt allemaal fijn, maar is niet het probleem... Het probleem is dat $language_string een globale variabele is. Ik zit nu al 2 dagen te zoeken naar een definitief antwoord op de vraag: is de methode die ik gebruik goed? Sommigen vinden het gebruik van globale variabelen geen enkel probleem terwijl anderen al beginnen te schuimbekken bij het horen ervan. Of is m'n methode al fundamenteel verkeerd? Voor de rest gebruik ik geen globale variabelen. Ik begrijp wat sommigen ertegen hebben en probeer ze zoveel mogelijk te vermijden (voor de configuratievariabelen gebruik ik constanten), maar ik weet niet goed hoe ik het hier moet aanpakken. Alles in een functie? Maar dan moeten al die honderden strings telkens weer opnieuw worden ingelezen als die functie aangeroepen wordt terwijl ze nu in het begin éénmaal in de globale variabele worden opgeslagen.
Hoe zouden jullie dit aanpakken?
A bus station is where a bus stops. A train station is where a train stops... On my desk I have a workstation.