Vertalingen uit de tekst of uit de database?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Cees Rijken

Cees Rijken

12/11/2011 15:21:55
Quote Anchor link
Ik ga vanaf scratch een compleet nieuwe applicatie maken, die meertalig moet worden.
Niet alleen alle (fout)meldingen en teksten, ook de buttons en navigatie, een flinke lijst met woorden dus....

De "basistaal" wordt Engels. Vraag is: wat zouden jullie doen?

a) vertaling uit een PHP include
b) vertaling via Javascript
c) vertaling uit de database
d) ????

Optie C heeft natuurlijk als voordeel het onderhoud, maar ik heb deze optie tot dusver altijd vermeden vanwege trage performance.

Ik sta open voor alle suggesties!
 
PHP hulp

PHP hulp

23/11/2024 10:59:26
 
Victor -

Victor -

12/11/2011 16:27:00
Quote Anchor link
ik zie veel dat er bijvoorbeeld een array wordt gebouwd: bijvoorbeeld $l;
en dan een username error zetten ze in $l['username_error'] dan kan je per taal zo'n bestand maken en die includen.

Toevoeging op 12/11/2011 16:28:13:

eventueel met sprintf() de username in de string zetten.
 
Jordi Kroon

Jordi Kroon

12/11/2011 16:33:24
Quote Anchor link
Werken met een template systeem zou met die systeem handig zijn.

En dan een localisation bestand aanmaken genaamd NL_local.php
 
Mar cel

Mar cel

12/11/2011 16:34:21
Quote Anchor link
Ik zou het uit een bestand halen. Je kan bijvoorbeeld een grote array in php maken. Stel je hebt een mapje "locale" met daarin de mapjes nl, en, fr, du etc. In elk mapje maak je een bestand aan, bijvoorbeeld translate.php, waarin een array staat.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
$msg['wrong_email'] = 'Foutief e-mailadres';
$msg['wrong_username'] = 'Vul een naam in.';


Etc...

Ik neem aan dat je de taal in de url hebt staan? Dan include je dus locale/{huidige-taal}/translate.php

Verder maak je nog een functie die de juiste vertaling terug geeft. Ik raad je aan om een simpele en korte naam te verzinnen, omdat je de functie vaak gaat gebruiken. In veel systemen wordt __ gebruikt als naam.

Voorbeeld:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
function __($line) {
   return $msg[$line];
}


Op het moment waar je daadwerkelijk het woord wilt weergeven hoef je dus alleen de functie aan te roepen met als parameter het woord.

Simpel voorbeeld weer:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
if(empty($_POST['name'])) {
    $error = __('wrong_username');
}


Succes!


Edit: Zie dat er inmiddels al andere posts zijn die ong het zelfde zeggen.
Gewijzigd op 12/11/2011 16:37:39 door Mar cel
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

12/11/2011 17:15:51
Quote Anchor link
Joh, __ als functienaam? Lekker duidelijk :P
@Cees:
Het is een beetje afhankelijk van wat je wilt bereiken, bv wil je dat gebruikers ook de waardes aan kunnen passen? Dan is een db wellicht toch een betere oplossing of een optie D xml. Wat ik vaak doe is de waardes in een array pleuren (vanuit db of xml) en dan in het sctipt opvragen.
 
Jacco Brandt

Jacco Brandt

12/11/2011 17:30:15
Quote Anchor link
Met XML genereer je een gigantische overhead.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

12/11/2011 17:33:32
Quote Anchor link
ten opzichte van wat?
 
Jordi Kroon

Jordi Kroon

12/11/2011 17:44:08
Quote Anchor link
@ger een functienaam kan je toch zelf ook bedenken. Hij bedoeld hiermee dat het varieert.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

12/11/2011 17:53:59
Quote Anchor link
@jordi knap dfat je weet wat een ander bedoelt
 
Mar cel

Mar cel

12/11/2011 19:07:54
Quote Anchor link
:)

Nou Wordpress, Cakephp etc gebruiken allemaal __. Het is gewoon een erg handige en korte notatie, je gebruikt het over je hele applicatie, om elk zinnetje wat je toont gebruik je de functie. In dit geval, is persoonlijk, vind ik __() beter dan getTranslation() oid. Maar dat is persoonlijk..
 



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.