[PHP] Site in meerdere talen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • VR46
  • Registratie: Januari 2005
  • Laatst online: 08-09 12:51
Misschien een eenvoudige vraag:
Ik ben bezig met een website die in drie verschillende talen beschikbaar moet zijn, maar dit heb ik nog niet eerder zo uitgebreid gedaan. Nu weet ik dus nog niet goed hoe ik dit het beste aan kan pakken. Het lijkt me omslachtig om per taal een tabel met vertaalde zinnetjes te maken in de MySQL database, en ik heb verschillende andere sites gezien die dit oplossen d.m.v. een tekstbestand met verschillende vertalingen. Mijn vraag aan jullie is dus, hoe kan ik dit het beste aanpakken? Ik weet ook niet echt goed waar ik naar zou moeten Googelen.. :/

Acties:
  • 0 Henk 'm!

  • RedHat
  • Registratie: Augustus 2000
  • Laatst online: 09-09 17:16
Ik zou een mysql tabel maken en daar alle "pagina's/berichten" instoppen met een flag (NL,ENG,FRA)
Alle berichten krijgen een bepaalde nummer.

Ik selecteer alle berichten met bericht_nummer 10 (b.v.)

dan krijg ik b.v. 3 hits; NL,ENG,FRA. mooie vlaggetjes images boven het bericht, en dan met ajax laten switchen.

zoiets zou ik doen ;)

dus dan krijg je als table zoiets (heel simpel)

messageID // std ID
messageParentID // het "berichtID" (Hetzelfde bericht maar in een andere taal krijgt uiteindelijk dezelfde id hier dus)
messageContainer // het bericht zelf
messageLanguage // welke taal het is

Als het statische tekst is zou ik gewoon met arrays werken denk ik.

[ Voor 33% gewijzigd door RedHat op 29-10-2008 11:34 ]


Acties:
  • 0 Henk 'm!

  • Icey
  • Registratie: November 2001
  • Laatst online: 16:09
Ik werk persoonlijk meestal met een array, dan kan je, afhankelijk van hoe groot je website is nog een indeling/sub-indeling maken.

$_LANG['onderdeel']['tekst'] = 'Dit is een voorbeeldtekst in het Nederlands';

Acties:
  • 0 Henk 'm!

  • Spockz
  • Registratie: Augustus 2003
  • Laatst online: 10-09 09:08

Spockz

Live and Let Live

Het is misschien handig om eerst duidelijk te hebben wat er allemaal vertaalbaar moet zijn.

Is dit alleen de interface, of is het ook de content? Als het alleen de interface is kan je waarschijnlijk volstaan met wat vertaaltabelletjes waarin je op kan zoeken wat de vertaling is.

Als de content ook vertaald moet worden heb je weer een vraag. Blijft de indeling van de site gelijk in andere talen? Als dit zo is dan zou je ervoor kunnen kiezen om aparte tabellen te maken bijv. nl_posts en_posts en daar dan teksten in te stoppen en de goede uit te lezen. Als de indeling van je site anders is voor anderstalige,omdat het misschien een andere doelgroep is, kun je misschien beter iets van een framework bouwen en daar dan twee verschillende sites op bouwen. Door het framework te gebruiken kan je een heleboel basisscode hergebruiken en hoef je praktisch alleen de interface naar de gebruiker toe een beetje te veranderen.

C'est le ton qui fait la musique. | Blog | @linkedin
R8 | 18-55 IS | 50mm 1.8 2 | 70-200 2.8 APO EX HSM | 85 1.8


Acties:
  • 0 Henk 'm!

  • VR46
  • Registratie: Januari 2005
  • Laatst online: 08-09 12:51
RedHat schreef op woensdag 29 oktober 2008 @ 11:30:
Ik zou een mysql tabel maken en daar alle "pagina's/berichten" instoppen met een flag (NL,ENG,FRA)
Alle berichten krijgen een bepaalde nummer.

Ik selecteer alle berichten met bericht_nummer 10 (b.v.)

dan krijg ik b.v. 3 hits; NL,ENG,FRA. mooie vlaggetjes images boven het bericht, en dan met ajax laten switchen.

zoiets zou ik doen ;)
Dus dan krijg je bijvoorbeeld aan het begin van elke pagina:

$result = $link->query("SELECT tekst FROM database.translations WHERE lang='nl_NL'";
of
$result = $link->query("SELECT tekst FROM database.translations WHERE bericht_ID=10";
$row = $result->fetch_assoc();

(ik gebruik MySQLi)
Bedoel je het zo?

@ Spockz
Het gaat zowel om content als interface. De layout blijft hetzelfde.
Maar wat is effectiever: Om de gekozen taal in een sessie op te slaan en op basis daarvan een bestand met een taalarray te includen, of je resultaten uit een database te halen?

[ Voor 14% gewijzigd door VR46 op 29-10-2008 11:38 ]


Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
Ga je complete interface _niet_ in een database zetten. Het is er niet voor bedoeld en je gaat het hopeloos vertragen. Gettext is nog steeds de snelste manier om je vertalingen voor je interface in te zetten. Je kan in je templates eenvoudig de (bijv) engelse tekst als gettext variabele zetten. Bij het aanmaken van een po bestand met bijvoorbeeld poEdit zoekt hij automatisch al deze teksten op en kan je ze achter elkaar vertalen.

Voor content zou ik meerdere entries in je database zetten.

/edit: voorbeeldj:
PHP:
1
2
3
4
5
6
7
//Initialisatie
setlocale(LC_ALL, 'nl_NL');
bindtextdomain( "myPHPApp", "./locale");
textdomain("myPHPApp");

//Vertalingen
echo _("Have a nice day");
Dat gaat verder compleet automatisch. Als je dit bestandje maakt en in poEdit een nieuwe catalogus aanmaakt, scant hij het bestand en kan je "Have a nice day" vertalen :)

[ Voor 27% gewijzigd door mithras op 29-10-2008 11:43 ]


Acties:
  • 0 Henk 'm!

  • VR46
  • Registratie: Januari 2005
  • Laatst online: 08-09 12:51
mithras schreef op woensdag 29 oktober 2008 @ 11:39:
Ga je complete interface _niet_ in een database zetten. Het is er niet voor bedoeld en je gaat het hopeloos vertragen. Gettext is nog steeds de snelste manier om je vertalingen voor je interface in te zetten. Je kan in je templates eenvoudig de (bijv) engelse tekst als gettext variabele zetten. Bij het aanmaken van een po bestand met bijvoorbeeld poEdit zoekt hij automatisch al deze teksten op en kan je ze achter elkaar vertalen.

Voor content zou ik meerdere entries in je database zetten.

/edit: voorbeeldj:
PHP:
1
2
3
4
5
6
7
//Initialisatie
setlocale(LC_ALL, 'nl_NL');
bindtextdomain( "myPHPApp", "./locale");
textdomain("myPHPApp");

//Vertalingen
echo _("Have a nice day");
Dat gaat verder compleet automatisch. Als je dit bestandje maakt en in poEdit een nieuwe catalogus aanmaakt, scant hij het bestand en kan je "Have a nice day" vertalen :)
Hmm, ik weet niet zo zeker of de host waar de site op komt te staan dit ondersteunt. Ik concludeer van de gettext omschrijving van php.net dat het een los onderdeel is dat moet worden geinstalleerd? Ik wil het liefst niet te ingewikkeld maken, maar het ziet er wel handig uit ja..

Acties:
  • 0 Henk 'm!

  • RedHat
  • Registratie: Augustus 2000
  • Laatst online: 09-09 17:16
Nog steeds de vraag; gaat het puur om de interface of ook om dynamische content op de website ? (statische tekst of dynamisch? bij statisch zou ik toch echt kiezen voor txt bestanden oid; voor dynamisch een database).

Acties:
  • 0 Henk 'm!

  • VR46
  • Registratie: Januari 2005
  • Laatst online: 08-09 12:51
RedHat schreef op woensdag 29 oktober 2008 @ 11:49:
Nog steeds de vraag; gaat het puur om de interface of ook om dynamische content op de website ? (statische tekst of dynamisch? bij statisch zou ik toch echt kiezen voor txt bestanden oid; voor dynamisch een database).
Check mn edit, het gaat om beide.
Ik denk dat ik het zo doe, dat de statische tekst uit een array wordt gelezen, en de dynamische contect (blog oid) uit de database... Effectief genoeg?

Hier een voorbeeld van het array dat ik nu heb gemaakt:

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
<?php
$nl_NL = array (
    'NL'            => 'Nederlands',
    'EN'            => 'Engels',
    'FR'            => 'Frans',
    'Home'          => 'Home',
    'Het project'   => 'Het project',
    'Fotoalbum'     => 'Fotoalbum',
    'Contact'       => 'Contact'
);

$en_EN = array (
    'NL'            => 'Dutch',
    'EN'            => 'English',
    'FR'            => 'French',
    'Home'          => 'Home',
    'Het project'   => 'The project',
    'Fotoalbum'     => 'Photoalbum',
    'Contact'       => 'Contact us'
);

$fr_FR = array (
    'NL'            => 'Néerlandais',
    'EN'            => 'Anglais',
    'FR'            => 'Français',
    'Home'          => 'Home',
    'Het project'   => 'Le projet',
    'Fotoalbum'     => 'Photo album',
    'Contact'       => 'Contactez-nous'
);
?>


Probleem met het bovenstaande array is dat ik bij élk stukje tekst een if-statement zal moeten gebruiken, wat ontzettend onhandig is... (if ($_SESSION['lang'] == nl_NL { ................ } elseif etcetera)

[ Voor 7% gewijzigd door VR46 op 29-10-2008 11:57 ]


Acties:
  • 0 Henk 'm!

  • RedHat
  • Registratie: Augustus 2000
  • Laatst online: 09-09 17:16
array is prima; zo zou ik het ook doen.

Dynamische content idd uit database. Voor er een blogpost gemaakt word laten kiezen welke talen ze willen bloggen; die dan in de database zetten. Dan selecteer je dat bericht; krijg je b.v. 3 records; Kijken welke dat zijn en dan vlaggetjes boven het bericht zetten waar ze op kunnen klikken.

Statisch altijd arrays als het om kleine dingen gaat ja ;)

Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
cbernardini schreef op woensdag 29 oktober 2008 @ 11:46:
[...]

Hmm, ik weet niet zo zeker of de host waar de site op komt te staan dit ondersteunt. Ik concludeer van de gettext omschrijving van php.net dat het een los onderdeel is dat moet worden geinstalleerd? Ik wil het liefst niet te ingewikkeld maken, maar het ziet er wel handig uit ja..
Als je er aan het begin rekening mee houdt (even die gettext functie meenemen) is het later onderhouden van je code 10x simpeler dan met lastige array's, database velden of weet ik veel wat werken.

Daarnaast: wanneer je geen gettext met php meegekregen hebt, is er altijd nog php-gettext, een php library welke je kan includen en zorgt voor vrijwel dezelfde functionaliteit.

Acties:
  • 0 Henk 'm!

  • RedHat
  • Registratie: Augustus 2000
  • Laatst online: 09-09 17:16
mithras schreef op woensdag 29 oktober 2008 @ 11:56:
[...]
Als je er aan het begin rekening mee houdt (even die gettext functie meenemen) is het later onderhouden van je code 10x simpeler dan met lastige array's, database velden of weet ik veel wat werken.

Daarnaast: wanneer je geen gettext met php meegekregen hebt, is er altijd nog php-gettext, een php library welke je kan includen en zorgt voor vrijwel dezelfde functionaliteit.
met setlocale is de vertaling dan echt zo goed? Of krijg je vage zinnen die letterlijk vertaald zijn? Ik zou iig m'n vertalingen niet overlaten aan vertalers oid.

Acties:
  • 0 Henk 'm!

  • VR46
  • Registratie: Januari 2005
  • Laatst online: 08-09 12:51
RedHat schreef op woensdag 29 oktober 2008 @ 11:57:
[...]

met setlocale is de vertaling dan echt zo goed? Of krijg je vage zinnen die letterlijk vertaald zijn? Ik zou iig m'n vertalingen niet overlaten aan vertalers oid.
Het idee is dat je zelf een taalbestand maakt dat gettext dan doorscant op basis van de ingestelde locale, voor zover ik begrepen heb

[ Voor 5% gewijzigd door VR46 op 29-10-2008 12:00 ]


Acties:
  • 0 Henk 'm!

  • TheLunatic
  • Registratie: April 2001
  • Laatst online: 16-08 21:48

TheLunatic

Ouwe boxen.

Icey schreef op woensdag 29 oktober 2008 @ 11:31:
Ik werk persoonlijk meestal met een array, dan kan je, afhankelijk van hoe groot je website is nog een indeling/sub-indeling maken.

$_LANG['onderdeel']['tekst'] = 'Dit is een voorbeeldtekst in het Nederlands';
Misschien nog netter:

$_TEXTS['language']['onderdeel']['tekst'] = 'Dit is een voorbeeldtekst in het Nederlands.';

Mother, will they like this song?


Acties:
  • 0 Henk 'm!

  • Kalentum
  • Registratie: Juni 2004
  • Laatst online: 21:16
cbernardini schreef op woensdag 29 oktober 2008 @ 11:53:

Probleem met het bovenstaande array is dat ik bij élk stukje tekst een if-statement zal moeten gebruiken, wat ontzettend onhandig is... (if ($_SESSION['lang'] == nl_NL { ................ } elseif etcetera)
Dan maak je een translate() functie, die dit voor je doet. Is aan te raden, omdat je dan later ook nog eens eenvoudig een andere vertaalmethode kan invoeren en niet op 300 plaatsen code moet gaan wijzigen.

PHP:
1
echo translate('Hello');

Acties:
  • 0 Henk 'm!

  • Johnny
  • Registratie: December 2001
  • Laatst online: 15:50

Johnny

ondergewaardeerde internetguru

RedHat schreef op woensdag 29 oktober 2008 @ 11:30:
Ik zou een mysql tabel maken en daar alle "pagina's/berichten" instoppen met een flag (NL,ENG,FRA)
Alle berichten krijgen een bepaalde nummer.

Ik selecteer alle berichten met bericht_nummer 10 (b.v.)

dan krijg ik b.v. 3 hits; NL,ENG,FRA. mooie vlaggetjes images boven het bericht, en dan met ajax laten switchen.

zoiets zou ik doen ;)

dus dan krijg je als table zoiets (heel simpel)

messageID // std ID
messageParentID // het "berichtID" (Hetzelfde bericht maar in een andere taal krijgt uiteindelijk dezelfde id hier dus)
messageContainer // het bericht zelf
messageLanguage // welke taal het is

Als het statische tekst is zou ik gewoon met arrays werken denk ik.
Talen aangeven met vlaggetjes is een slecht idee omdat landen en talen heel verschillende dingen zijn, je geeft daarmee het signaal dat je de inhoud specifiek richt op een bepaald land.

Ook kan je beter gewoon ISO 639-1 taalcodes gebruiken in plaats van zelf wat te gaan verzinnen, die kan je ook weer gebruiken in het lang-attribuut in HTML om zo voor zoekmachines/spraak/vertaalsoftware duidelijk te maken hoe er met de inhoud moet worden omgegaan.

En om zoiets met AJAX op te lossen maakt het er volgens mij onnodig complex en ontoegankelijk op.

Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.


Acties:
  • 0 Henk 'm!

  • VR46
  • Registratie: Januari 2005
  • Laatst online: 08-09 12:51
rutgerw schreef op woensdag 29 oktober 2008 @ 12:08:
[...]


Dan maak je een translate() functie, die dit voor je doet. Is aan te raden, omdat je dan later ook nog eens eenvoudig een andere vertaalmethode kan invoeren en niet op 300 plaatsen code moet gaan wijzigen.

PHP:
1
echo translate('Hello');
Ik heb de arrays even veranderen, dit is nu de array voor Frans, bijvoorbeeld:
PHP:
1
2
3
4
5
6
7
8
9
10
$_LANG['FR'] = array (
    'NL'            => 'Néerlandais',
    'EN'            => 'Anglais',
    'FR'            => 'Français',
    'Home'          => 'Home',
    'Het project'   => 'Le projet',
    'Fotoalbum'     => 'Photo album',
    'Webwinkel'     => 'Boutique en ligne',
    'Contact'       => 'Contactez-nous',
);

En dan is er een sessie $_SESSION['taal'] waar NL, FR of EN in kan staan, en vervolgens wordt zo de juiste tekst opgeroepen:
PHP:
1
<?=$_LANG[$_SESSION['taal']]['Het project'];?>

Niet veel verschil met jouw functie, maar wel minder typwerk :)

Acties:
  • 0 Henk 'm!

  • Icekiller2k6
  • Registratie: Februari 2005
  • Laatst online: 22:37
PHP:
1
2
3
4
5
6
7
8
9
if(isset($_GET['lang'])){
$lang=$_GET['lang'];
$_SESSION['lang']=$lang;
}
if(!isset($_SESSION['lang']))
$lang="NL";
$_SESSION['lang']="NL";
}
include "lang/".$_SESSION['lang'].".php";


en in php bestand in kwestie gewoon zoals hierboven
$LANG['woord1']=...

MT Venus E 5KW (V151) P1 HomeWizard | Hackerspace Brixel te Hasselt (BE) - http://www.brixel.be | 9800X3D, 96GB DDR5 6000MHZ, NVIDIA GEFORCE 4090, ASRock X670E Steel Legend, Seasonic GX1000


Acties:
  • 0 Henk 'm!

  • VR46
  • Registratie: Januari 2005
  • Laatst online: 08-09 12:51
Ik probeer er nu een functie van te maken:
PHP:
1
2
3
4
function translate($string) {
 return $_LANG[$_SESSION['taal']][$string];
}
echo translate('Contact')

Maar bij het echo'en krijg ik niks te zien... Wat doe ik hier fout?

Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
cbernardini schreef op woensdag 29 oktober 2008 @ 12:38:
Ik probeer er nu een functie van te maken:
PHP:
1
2
3
4
function translate($string) {
 return $_LANG[$_SESSION['taal']][$string];
}
echo translate('Contact')

Maar bij het echo'en krijg ik niks te zien... Wat doe ik hier fout?
Heb je al gedebugged? Het zier er vrij simpel uit, dus het probleem moet gemakkelijk te lokaliseren zijn. Doe een var_dump() van je return value, je sessie variabele, je initialisatieprocedure etc. Je mag er wel iets van moeite voor doen...

Acties:
  • 0 Henk 'm!

  • JayVee
  • Registratie: Mei 2002
  • Laatst online: 31-08 10:22

JayVee

shibby++!

mithras schreef op woensdag 29 oktober 2008 @ 11:39:
Gettext is nog steeds de snelste manier om je vertalingen voor je interface in te zetten.
Wij hebben voor ons pakket ook voor gettext gekozen, en dat bevalt erg goed. Hier nog wat linkjes die mij hebben geholpen bij het maken van een keuze en de implementatie:
http://mel.melaxis.com/de...-web-sites-using-gettext/
http://mel.melaxis.com/de...n-is-gettext-fast-enough/
http://www.litfuel.net/plush/?postid=84

[ Voor 3% gewijzigd door JayVee op 29-10-2008 12:44 . Reden: link naar SQLite tutorial verwijderd, overbodig ]

ASCII stupid question, get a stupid ANSI!


Acties:
  • 0 Henk 'm!

  • Y0ur1
  • Registratie: Oktober 2000
  • Niet online
Al gekeken naar het Zend framework? ZF heeft hier een speciale module voor, misschien is het interessant om er eens naar te kijken. Je kunt alleen die module gebruiken zonder dat je de rest hoeft te gebruiken.

Acties:
  • 0 Henk 'm!

  • Guillome
  • Registratie: Januari 2001
  • Niet online

Guillome

test

cbernardini schreef op woensdag 29 oktober 2008 @ 12:38:
Ik probeer er nu een functie van te maken:
PHP:
1
2
3
4
function translate($string) {
 return $_LANG[$_SESSION['taal']][$string];
}
echo translate('Contact')

Maar bij het echo'en krijg ik niks te zien... Wat doe ik hier fout?
PHP:
1
2
3
4
5
function translate($string) {
  global $_LANG;
 return $_LANG[$_SESSION['taal']][$string];
}
echo translate('Contact')

;)

[ Voor 14% gewijzigd door Guillome op 29-10-2008 12:53 ]

If then else matters! - I5 12600KF, Asus Tuf GT501, Asus Tuf OC 3080, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router


Acties:
  • 0 Henk 'm!

  • VR46
  • Registratie: Januari 2005
  • Laatst online: 08-09 12:51
Thanks Guillome, even niet aan gedacht :)

Hoe kan ik het mogelijk maken om meerdere woorden te laten vertalen met een spatie ertussen, zonder meerdere keren de functie op te hoeven roepen? Bijvoorbeeld:
PHP:
1
2
3
4
5
function translate( variabel aantal strings ) {
 ......?
}
echo translate("Uw","Taal");
// Als de sessie ingesteld is op Frans zou je dan moeten krijgen: Vôtre langue.

Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
Y0ur1 schreef op woensdag 29 oktober 2008 @ 12:44:
Al gekeken naar het Zend framework? ZF heeft hier een speciale module voor, misschien is het interessant om er eens naar te kijken. Je kunt alleen die module gebruiken zonder dat je de rest hoeft te gebruiken.
Dat is dus een hele goede tip. Zelf gebruik ik ook Zend_Translate om dingen op mijn site te vertalen, werkt perfect. Je moet even doorhebben hoe het werkt en hoe je de vertalingen aanlevert, dat kan namelijk op verschillende manieren. Maar als je het eenmaal draaiend hebt is het erg goed.

Acties:
  • 0 Henk 'm!

  • Guillome
  • Registratie: Januari 2001
  • Niet online

Guillome

test

PHP:
1
2
3
4
5
6
7
8
9
function translate()
{
  $a = func_get_args();
  forEach ($a as $woord)
  {
    ...
  }
}
translate("dit", "is", "gaaf");

Of
PHP:
1
2
3
4
5
6
7
8
9
function translate($s)
{
  $a = explode(" ", $s);
  forEach($a as $woord)
  {
    ..
  }
}
translate("Maar dit is mooier");

[ Voor 14% gewijzigd door Guillome op 29-10-2008 14:56 ]

If then else matters! - I5 12600KF, Asus Tuf GT501, Asus Tuf OC 3080, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router


Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
HuHu schreef op woensdag 29 oktober 2008 @ 13:19:
[...]

Dat is dus een hele goede tip. Zelf gebruik ik ook Zend_Translate om dingen op mijn site te vertalen, werkt perfect. Je moet even doorhebben hoe het werkt en hoe je de vertalingen aanlevert, dat kan namelijk op verschillende manieren. Maar als je het eenmaal draaiend hebt is het erg goed.
Ik ben wel benieuwd hoe Zend gettext() threadsafe heeft kunnen krijgen. Als dat duidelijk is, is er meteen een heel goed alternatief voor de ingebouwde gettext methode.

Verder: die library ziet er net als de andere Zend framework onderdelen vreselijk groot uit. Het is leuk dat ik meteen 9 verschillende mogelijkheden om te vertalen heb, met ook eens 5 automatisch te detecteren directory structuren. Verder bestaat gettext() in de global scope en blijft je Zend_Translate() object toch echt lokaal (tenzij je gaat fucken met global keywords). Zolang Zend zorgt voor een load aan geheugen en cpu cycles blijf ik er liever vanaf...

Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 23:06

MueR

Admin Tweakers Discord

is niet lief

cbernardini schreef op woensdag 29 oktober 2008 @ 13:03:
Hoe kan ik het mogelijk maken om meerdere woorden te laten vertalen met een spatie ertussen, zonder meerdere keren de functie op te hoeven roepen?
Onverstandig. 1 op 1 woorden vertalen gaat nog wel lukken, maar dan krijg je het Google Translate effect. Alle woorden worden vertaald, maar de samenhang je tekst gaat echt nergens meer over. Een mens kan dat onderscheid maken, een stuk software heeft daar veel meer moeite mee. En met alle respect voor TS, maar ik denk niet dat je een dusdanig geniaal software ontwikkelaar bent dat je jouw software zo geschreven krijgt. Ik ook niet trouwens.

Wij werken doorgaans met een tabel met teksten (Localization), en een tabel met vertalingen (Localstring). De tabel Localization heeft enkel de default tekst staan, de tabel Localstring heeft de vertalingen per taal. Wanneer er geen Localstring van een tekst is, fallbacken we naar de default.

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • Maghiel
  • Registratie: Maart 2004
  • Laatst online: 09-09 21:07
Eerder gebruikte ik een zelf ontwikkeld vertaalsysteempje dat met arrays werkte, en dan met language{string} aangegeven werd in de templates. Echter kon ik de vertalers niet de bestanden met arrays gaan sturen, beetje te ingewikkeld voor ze.
Tijd geleden op gettext overgestapt en dat werkt heerlijk. Stuur ze gewoon de po files en laat ze Poedit downloaden, en alles gaat soepel :)

Acties:
  • 0 Henk 'm!

  • BalusC
  • Registratie: Oktober 2000
  • Niet online

BalusC

Carpe diem

cbernardini schreef op woensdag 29 oktober 2008 @ 11:53:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
$nl_NL = array (
    'NL'            => 'Nederlands',
    'EN'            => 'Engels',
    'FR'            => 'Frans',
);

$en_EN = array (
    'NL'            => 'Dutch',
    'EN'            => 'English',
    'FR'            => 'French',
);

$fr_FR = array (
    'NL'            => 'Néerlandais',
    'EN'            => 'Anglais',
    'FR'            => 'Français',
);
?>
Dat is qua usability vrij slap. De taalopties geef je het beste weer in de natieve taal. Dus "Nederlands", "English" en "Français".
Pagina: 1