Discussie: hoe maak je een meertalige website.

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Tom aan t Goor

Tom aan t Goor

31/12/2012 11:27:45
Quote Anchor link
Ik zou graag een discussie willen maken over hoe je het beste meerdere talen op een website kan hebben.

Hoe zou jij het willen?
Beargumenteer je antwoord duidelijk!



Mijn voorkeur gaat uit naar de volgende oplossing:

- Eerst in een database de gekozen taal opslaan (nl, dui, en)
- Vervolgens de volgende mappen en pagina's aan te maken.

talen/
taalnl.php
taaldui.php
taalen.php

Vervolgens zou ik per bestand de volgende regels plaatsen:

taalnl.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
$taalIndexWelkom
= "Goeden morgen!";

/*
De naam van de variabele:
taal <- om aan te geven dat het een taal variabele is, die je dus niet op andere pagina's moet gaan benoemen.
Index <- om aan te geven op welke pagina deze variabele gebuikt wordt.
Welkom <- om aan te geven over wat voor bericht het gaat.
*/


?>


taaldui.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$taalIndexWelkom
= "Gutten Tag!";
?>


taalen.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$taalIndexWelkom
= "Good morning!";
?>


Vervolgens in je index.php het volgende te plaatsen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
include('talen/taal'.$gebruiker->taal.'.php');

echo $taalIndexWelkom;
?>



Argumentatie:
Ik vind het zelf erg fijn als de taal bestanden in dezelfde map staan, wel gescheiden van de index map. Zodat het duidelijker is welke bestanden de taal bestanden zijn.
Ik vind het overzichtelijker als je per taal een apart bestand aanmaakt i.p.v. alle talen in één bestand te plaatsen.


- min punten -
- Als je een variabele in een bestand 'per ongeluk' verkeerd benoemd moet je eerst met de andere taal pagina's vergelijken wat de goede is.
- Je gebruikt nu meerdere bestanden terwijl het ook in één map kan.
 
PHP hulp

PHP hulp

26/12/2024 09:25:48
 
Moose -

Moose -

31/12/2012 11:33:01
Quote Anchor link
Mijn voorkeur gaat uit naar een .properties file, ik doe dat liever niet in een php file

en.properties
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
welkom.tekst=Welcome
inloggen=Login
inloggen.title=Log in here
registreren=Register
registrere.title=Register here

zoiets

Edit: ik doe zoiets liever niet in een .php file omdat ik vind dat dit niks met php te maken heeft. Deze situatie heb je in elke programmeer taal, vandaar dat ik liever een aparte configuratie file gebruik. Precies hetzelfde voor bijvoorbeeld database settings of het opslaan van verschillende routes
Gewijzigd op 31/12/2012 11:36:07 door Moose -
 
Erwin H

Erwin H

31/12/2012 11:51:08
Quote Anchor link
Om te beginnen; de 'perfecte' oplossing heb ik ook niet direct. Interessante discussie dus.

Dan in antwoord op het voorstel van Tom, dat lijkt me alleen mogelijk voor een zeer kleine, statische website. Zodra je meer content gaat gebruiken dat ook nog eens van veel variabele input afhankelijk is is het niet meer te doen. Zo ga je veel te veel variabelen aanmaken en is ook je code totaal onleesbaar geworden. Denk ook nog eens aan het feit dat als je variabele input in je tekst wil hebben (bijvoorbeeld de naam van de gebruiker, een aantal, een datum etc) en het is bijna helemaal niet meer te doen. De zinsopbouw in verschillende talen is namelijk anders waardoor je niet zo makkelijk de strings kan uitwisselen.
 
Wouter J

Wouter J

31/12/2012 11:51:34
Quote Anchor link
Als je de teksten moet kunnen aanpassen in een database opslaan, anders opslaan in een configuratie bestand.

Vervolgens gebruik ik de Symfony2 Translation component:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
// ...

// haal deze eventueel ergens op, bijv. uit een sessie

define('USER_LOCALE', 'nl');

// stel de translator in
$translator = new Translator(USER_LOCALE);
$translator->setFallbackLocale('en'); // mocht de vertaling niet beschikbaar zijn in de USER_LOCALE, gebruik dan engels
$translator->addLoader('yaml_file', new YamlFileLoader()); // voeg een loader toe, je hebt beschikking tot erg veel loaders: https://github.com/symfony/Translation/tree/master/Loader

// laad resources in

$translator->addResource('yaml_file', 'path/to/translation/messages.nl.yml', 'nl');
$translator->addResource('yaml_file', 'path/to/translation/messages.en.yml', 'en');
// ...
?>


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
# path/to/translation/messages.nl.yml
index:
    greet:
        guest: Welkom
        user: Hallo %name%!
# ...


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
// ... require het bestand met de translator

if ({user is ingelogd}) {
    echo $translator->trans('index.greet.user', array('%name%' => {user.name}));
}
else {
    echo $translator->trans('index.greet.guest');
}

?>


En deze heeft nog veel meer opties, zoals omgaan met telwoorden.
 
Niels K

Niels K

31/12/2012 12:30:00
Quote Anchor link
@Wouter

Ik doe het altijd via de database. De eindgebruiker kan dan zelf (middels een module) de vertalingen beheren.
 
Php knipper

php knipper

31/12/2012 13:57:47
Quote Anchor link
zou je daar eens een voorbeeld van kunnen geven hoe je met die database werkt, is dat dan niet onhandig om de code aan te passen?
 
Niels K

Niels K

31/12/2012 13:59:24
Quote Anchor link
Hoe bedoel je?

Ik werk op basis van een view helper die de codes replaced met de values uit de database.
 
Php knipper

php knipper

31/12/2012 14:07:24
Quote Anchor link
@Niels Kieviet

Dat van die database (hoe ziet die er uit)
en hoe werk je er dan mee stel je moet de tekst "welkom op deze site" in het Nederlands en het engels hebben, hoe ziet je database er dan uit en hoe ziet je code er dan uit?

sorry vindt het wel eens interessant.
 
Wouter J

Wouter J

31/12/2012 14:19:26
Quote Anchor link
Niels, ons verschil komt denk ik voornamelijk door de verschillende achtergronden van ons. Jij bent gewent applicaties te ontwikkelen voor eindgebruikers, ik ben gewent applicaties te ontwikkelen die de developer helpen of bijv. een extensie zijn op een andere grote tool (kleine bundles bijv.). Hierin is het vaak niet nodig om een extensie te maken om de eindgebruiker de tool te laten aanpassen, een paar static file voldoen dan al.

PHP knipper, als ik 2 grote CMS systemen neem die deze problemen oplossen (Joomla! en Symfony CMF), dan lossen die het allebei op door de artikelen volledig in 2 talen te maken. Je hebt dus artikel A die in het nederlands is en vervolgens heb je artikel B voor het engels. Hoe dit precies in hun database eruitziet weet ik niet.
Gewijzigd op 31/12/2012 14:20:35 door Wouter J
 
No One

No One

31/12/2012 15:05:49
Quote Anchor link
Ik heb het in een eerder draadje al genoemd. wat ik doe is gebuik maken van parse_ini. die leest ini files uit. werkt veel sneller dan met een database en een format is al grotendeels aanwezig.

[paginanaam]
string=tekst

bijv:
[login]
password="Wachtwoord"

sla het ini bestandje op onder nl/NL/nl-NL.ini
bij gebruik van de functie translate("login", "password") wordt in de sessie de taal opgehaald die ingesteld is door de browser of door de gebruiker en de bijbehorende translation.ini. sla die op in $_GLOBALS["cache"]["translation"]["nl-NL"] en je hoeft die niet steeds in te laden...

Toevoeging op 31/12/2012 15:07:07:

Henze Berkheij op 31/12/2012 15:05:49:
Ik heb het in een eerder draadje al genoemd. wat ik doe is gebuik maken van parse_ini. die leest ini files uit. werkt veel sneller dan met een database en een format is al grotendeels aanwezig.

[paginanaam]
string=tekst

bijv:
[login]
password="Wachtwoord"

sla het ini bestandje op onder nl/NL/nl-NL.ini
bij gebruik van de functie translate("login", "password") wordt in de sessie de taal opgehaald die ingesteld is door de browser of door de gebruiker en de bijbehorende translation.ini. sla die op in $_GLOBALS["cache"]["translation"]["nl-NL"] en je hoeft die niet steeds in te laden...


Voordeel is namelijk dat alles via disk sowieso sneller verloopt dan via database.
 



Overzicht Reageren

 
 

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.