Archief - PHP: Multilanguage site

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

koebeest

Legacy Member
Hey,

Maat en ik zijn aan een project aan't werken en we zouden dat in de toekomst ook willen beschikbaar stellen in meerdere talen. Omdat we wanneer dat gebeurt niet heel de code willen herschrijven zouden we dat al van in het begin willen toepassen. Ik vraag me dus best af hoe je dat op een gemakkelijke manier doet. Ik heb al gegoogled maar daar kom je teveel verschillende mogelijkheden uit , zodat het zo goed als onmogelijk is voor mij om uit te maken wat nu eigenlijk de SNELSTE (preformance) methode is. Graag wat uitleg hoe ik dat het best doe :D

Bedankt!

Jens

fromalk

Legacy Member
Of het de snelste methode is weet ik niet maar ik heb hetvolgende van de week nog gemaakt voor een project;

ik heb de volgende dir: 'lang' met daarin telkens een map voor de taal die ik wens.

engels > /en
nederlands > /nl
frans > /fr

adhv mijn index.php file bepaal ik welke content moet worden weergegeven maar dit enkel en alleen als er een cookie met de taal is ingesteld. In deze cookie staat dan een waarde van 1 tot en met 3 die elk voor een eigen taal staan. Geen cookie > redirect naar een pagina voor de taal in te stellen

wel een cookie:
PHP:
// Language?
// 1 = en, 2 = nl, 3 = fr
if(isset($_COOKIE['ictwebg_lang'])) {
	$lang = $_COOKIE['ictwebg_lang'];
	
	switch($lang) {
		case 1: $lang_set='en';
			break;
		case 2: $lang_set='nl';
			break;
		case 3: $lang_set='fr';
			break;
		default: $lang_set='en';
	}
	
	if(file_exists($lang_dir.$lang_set.$dir.'main.lang.php')) {
		include $lang_dir.$lang_set.$dir.'main.lang.php';
	} else {
		$Seterror = true;
		$error[$a++] = "Error loading language files";
		include($include_dir."error.inc.php");
	}
	
}

dus ik laad dan gewoon de dir's in en in elke map bevind zich een main.lang.php file met daarin dan weer de volgende structuur voor het opslaan van zinnen:

PHP:
// Index Page
define("L_NEWS", "latest news");
define("G_NEWS", "get newsletter");
define("G_ONEWS", "get our newsletter");
define("G_DESCNEWS", "sign up today for our newsletter and you'll receive the latest news and fun stuff. sound good?");

adhv defines ga ik dan later in de gelade pagina uitvoer genereren, let wel ik sla alles op in lower case, adhv enkele zelfgeschreven functies / zet ik telkens de eerste letter van een zin in hoofdletters, via ucfirst kan het ook maar als je meerdere zinnen in een define hebt is het wat suggelen dan.

hopelijk brengt dit je al op weg

koebeest

Legacy Member
En overal waar je het nodig hebt doe je dan
PHP:
<?php
echo constant("L_NEWS");
?>

Ok ik snap het , alleen vraag ik me af of dit de snelste is in preformance. Ik zeg niet dat deze traag is ofzo (ik weet langs geen kanten hoe snel deze is) . Maar is het de snelste omdat naar verloop van tijd toch wat volk over "sitevloer" zal komen.

Smokyke

Legacy Member
Je kan de taal automatisch kiezen door een of andere variable die geset kan worden in het browser zelf.

Ik werk altijd zelf met alle text in een array te gieten
vb regel 1
$tekst[1]['nl'] = 'hallo';
$tekst[1]['fr'] = 'Bonjour';
$tekst[1]['eng'] = 'Hello';

koebeest

Legacy Member
Arrays is prutswerk zen + die kan je niet gemakkelijk aanpassen via een administratie paneel. Normaal kan je die manier van fromalk wel aanpassen via een administratiepaneel. Hoe is me nog een raadsel, maarja... leren doet geen kwaad hé :)

dJeez

Legacy Member
Voor de vertaling van vaststaande tekstjes (labels, foutmeldingen, ...) kan je de gettext functies checken. Voor de inhoud van je site voeg je gewoon een taalveld toe in de betreffende tabellen (voorzover de site dynamisch is uiteraard). Dat is imho de meest flexibele en snelle oplossing.

BTW Voor de gettext bestanden bestaat een zeer makkelijke cross-platform editor, nl. poedit.

koebeest

Legacy Member
die gettext lijkt met persoonlijk maar een bizarre oplossing? Alleja, ik bedoel ... het lijkt me niet gemakkelijk om daar orde en duidelijkheid in te houden? Of ben ik mis?

thondermonst

Legacy Member
of het de snelste en beste manier is weet ik niet maar ik werk op volgende manier:

- intro-pagina met taalkeuze
- instellen van cookie met taalkeuze, in mijn geval 'en', 'fr', en 'nl'
- bij elke pagina die wordt geladen, inlezen van taal-cookie en vervolgens een include doen van een script met globale variabelen voor die taal, bv. global_nl.php, met daarin alle tekst (titels, menu's ...) die op de site wordt gebruikt (blogs, artikels en dergelijke steken in een db).

fromalk

Legacy Member
ik denk persoonlijk dat er niet veel betere mogelijkheden zijn, als je smokey zijn methode gebruikt dan laad je een stuk meer content elke x (ik kies bv engels maar dan wordt er ook steeds nl en fr geladen) bij mijn methode wordt er slechts 1x een bepaalde variabele ingeladen.

eveneens kan je bv per user in je db opslaan welke taal er wordt gebruikt

ik heb deze methode ook eens in een c++ administratie programma gebruikt dat nu nog steeds gebruikt wordt in een redelijk groot bedrijf en dat draait zeer soepel.

en voor de uitvoer volstaat:

<?php
echo G_NEWS;
?>

dus zelfs die constant(...) hoeft niet :)

mvg

azerty_2006

Legacy Member
Je kan een function maken die een XML file parsed en zo constants aanmaakt. Niet de snelste oplossing maar het lijkt mij het meest user-friendly om nadien talen toe te voegen. Ook is dan geen php kennis meer vereist maar gewoon basic markup :).

killgore

Legacy Member
constanten lijken mij niet zo een goed idee tbh. Je beperkt je opslag methode tot een handgeschreven php-file. Werk liever met arrays, die kan je ook zo handschrijven, maar ook veel simpeler inlezen uit een xml-file of een database of ... als je later wenst te veranderen van opslagsysteem.

en die gettext is ook wel handig imho.

Bram

Legacy Member
Ik werk op www.ama-wellness.com met databases... Beetje een gepruts mss wel, maar het werkt wel nog goed, en is eenvoudig up te daten via een aantal forms.
content tabel heeft velden "id, navid, bn, bf, fr, de", via de splash wordt er in de url ?lang=bn of wat dan ook gezet en de query ziet er dan uit als SELECT id, navid, $lang FROM content...

koebeest

Legacy Member
Mwah killgore, het gaat hier over kleine en weinig tekstjes. De FAQ steek ik meerdere talen (verschillende velden) in een databasetabel. De language file zou eigenlijk enkel moeten dienen voor labels op tekstvelden en hier en daar eens een klein zinnteje of een foutmelding. Dus om dan omslachtig te gaan doen met xml files of databases lijkt me niet direct de beste oplossing? Correct me if I'm wrong :)

azerty_2006

Legacy Member
koebeest zei:
Mwah killgore, het gaat hier over kleine en weinig tekstjes. De FAQ steek ik meerdere talen (verschillende velden) in een databasetabel. De language file zou eigenlijk enkel moeten dienen voor labels op tekstvelden en hier en daar eens een klein zinnteje of een foutmelding. Dus om dan omslachtig te gaan doen met xml files of databases lijkt me niet direct de beste oplossing? Correct me if I'm wrong :)
Als je je script up-to-date gaat houden en het dus een lange termijn project is zou ik toch serieus denken aan xml of desnoods een database. if not, dan zou ik die moeite niet doen. Hangt dus af welke weg je op wilt.

koebeest

Legacy Member
Hoe doet PHPBB het eigenlijk met die templates? Is da de moeite (zij doen het zonder xml of database)?


En een database daarvoor iedere keer aanspreken zorgt toch voor meer belasting ,....

azerty_2006

Legacy Member
Array's ;). En ja das de moeite maar het heeft zijn voor en nadelen.

fromalk

Legacy Member
phpbb2 (met 3 heb ik nog geen ervaring) doet het ook gewoon met constants hoor. De taal allemaal uit je db laden zorgt in mijn ogen alleen maar voor belasting.

azerty_2006

Legacy Member
Kan zijn hoor. De 3 files die ik snel ff opende waren van phpbb3 RC1. En daar zag ik alleen hard coded array's.

Lord Kveldulv

Legacy Member
Het is ook nog te zien of de inhoud van de site hetzelfde moet zijn. Indien niet dan moet je al met een heel ander systeem beginnen.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan