Multi-language ondersteuning
Ik ben bezig mijn internetsite opnieuw op te zetten en ik wil dat de interface meerdere talen gaat ondersteunen. Ik had bedacht dat afhankelijk van de taal instelling een include geladen wordt met taal strings. Het ziet er zo uit ongeveer:
-Taalbestand-
Code (php)
-Internetsite zelf-
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
// code bla bla......
function ViewForum() {
echo GetString( $GENERAL_YES )."<br>\n";
}
?>
// code bla bla......
function ViewForum() {
echo GetString( $GENERAL_YES )."<br>\n";
}
?>
Deze code werkt dus niet, mits ik globals gebruik. Eigenlijk wil ik dat niet omdat de code dan zo groot en omslachtig wordt.
Iemand een suggestie hoe dit beter kan, dus zonder een global in de internetsite zelf te defineren? (Andere suggesties zijn ook welkom natuurlijk)
Gewijzigd op 01/01/1970 01:00:00 door HaasOnline XX
language_nl.php
language_en.php
en in die bestanden zet je dan:
$general_yes = 'ja';
en
$general_yes = 'yes';
etc...
En als de gebruiker een taal kiest je en je deze laat onthouden door bijvoorbeeld met een cookie te zetten en deze in de pagina op te vragen wat zijn keuze is laat je een switch lopen op de betreffende cookie
switch($_COOKFIE['taal'])
{
case 'nl':
include "language_nl.php";
break;
case 'en':
include "language_en.php";
break;
}
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php
if(isset($_SESSION['taal']) && $_SESSION['taal'] == 'en')
{
$taal = 1;
}
elseif(isset($_SESSION['taal']) && $_SESSION['taal'] == 'nl')
{
$taal = 0;
}
elseif(isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) && ereg('nl', $_SERVER['HTTP_ACCEPT_LANGUAGE']) == true)
{
$taal = 0;
}
else
{
$taal = 1;
}
$t['pagina'] = array('Pagina', 'Page');
$t['voorkant'] = array('Voorkant', 'Front');
$t['achterkant'] = array('Achterkant', 'Back');
$t['boekje'] = array('boekje', 'booklet');
$t['persing'] = array('persing', 'pressing');
//de bedoeling lijkt me duidelijk
foreach($t as $key => $value)
{
$t[$key] = $value[$taal];
}
$taal = ($taal == 0) ? 'nl' : 'en';
//nu kun je ook doen ($taal == nl) ? 'Een text in het nederlands' : 'A text in English';
?>
if(isset($_SESSION['taal']) && $_SESSION['taal'] == 'en')
{
$taal = 1;
}
elseif(isset($_SESSION['taal']) && $_SESSION['taal'] == 'nl')
{
$taal = 0;
}
elseif(isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) && ereg('nl', $_SERVER['HTTP_ACCEPT_LANGUAGE']) == true)
{
$taal = 0;
}
else
{
$taal = 1;
}
$t['pagina'] = array('Pagina', 'Page');
$t['voorkant'] = array('Voorkant', 'Front');
$t['achterkant'] = array('Achterkant', 'Back');
$t['boekje'] = array('boekje', 'booklet');
$t['persing'] = array('persing', 'pressing');
//de bedoeling lijkt me duidelijk
foreach($t as $key => $value)
{
$t[$key] = $value[$taal];
}
$taal = ($taal == 0) ? 'nl' : 'en';
//nu kun je ook doen ($taal == nl) ? 'Een text in het nederlands' : 'A text in English';
?>
Ik vroeg alleen hoe ik de variabele zoals $general_yes kan gebruiken in functies zonder in de functie aan te geven dat ik een global gebruik. ik wil dus dat de variabele zoals $general_yes standaard global staan ivm dat ik dit moet opgeven.
Nog een voorbeeld in de main: (dit werkt niet en dit moet gaan werken)
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
// code bla bla......
function ViewForum() {
echo GetString( $GENERAL_YES )."<br>\n";
}
?>
// code bla bla......
function ViewForum() {
echo GetString( $GENERAL_YES )."<br>\n";
}
?>
Nog een voorbeeld in de main: (dit werkt wel, maar wil ik niet)
Maar goed, ik merk het al... je wilt alleen integers gebruiken vanwege het beperkte geheugen op de server? Dit komt nogal komisch over als ik zo vrij
mag zijn (doe dat toch al) maar draait je server op een 386 processor met 32mb geheugen of iets in die trend?
Ik heb je verbeter suggestie verworpen, aangezien ik hetzelfde reeds eerder aandroeg (cookie). Mij vraag rest dus hoe ik globals kan vermijden?
Ps Integers zijn kleiner (in benodigde bits) en bij veel traffic wordt het geheugen van de server dus minder belast, hetgeen wat de snelheid ten goede komt. Maar dat weet je vast wel van assembler of C.
Edit:
Negatieve opmerking verwijderd.
Negatieve opmerking verwijderd.
Gewijzigd op 01/01/1970 01:00:00 door HaasOnline XX
Op deze manier krijg je een goed te onderhouden website waar nooit een stuk tekst ontbreekt omdat je toevallig wat vergeten bent te vertalen. Smarty valt dan gewoon terug op de default-waarde (uit de default taal).
Ps. Lijkt mij niet zo handig om hier personen aan te vallen op hun reacties, niet zo netjes. Niet meer doen doen dus.
Bedankt voor je reactie. Ik maak gebruik van een Excel werkblad met VBA om de PHP language bestanden te generen. Op zich is Smarty wel een goed alternatief, maar ik probeer de database aanvragen binnen de perken te houden om zo de verwerkings snelheid hoog te houden, maar wellicht staat hier wel wat in wat ik kan gebruiken, zal hem vanavond eens goed bestuderen.
Verder kan een database echt wel enige duizenden calls per minuut verwerken, geen probleem. Een site als Tweakers gebruikt (of gebruikte) mysql 3 en 4 en verwerkte miljoenen gebruikers per dag. Geen enkel probleem, een database is gemaakt voor grote hoeveelheden werk.