Website vertalen
Wat is de beste manier om mijn website te vertalen???
Het is niet gemakkelijk om als ik een wijziging maak het in alle andere talen ook te doen...
German.php
En die includeer je dan als iemand naar de Duitse site gaat.
En zorgen dat er een functionaliteit is om de gekozen / geselecteerde waarde ook vast te houden.
Zo hoeft de bezoeker niet elke keer bijv via een dropdown menu de taal te selecteren, en kan jij deze gegevens verwerken in een functie om automatisch de juiste array / taal bestand te gebruiken.
om te voorkomen dat je:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
if (IsSet($_SESSION['taal']) && $_SESSION['taal'] == 'DE')
{
include ('lang/de.php');
}
else if (IsSet($_SESSION['taal']) && $_SESSION['taal'] == 'FR')
{
include ('lang/fr.php');
}
.....
{
include ('lang/de.php');
}
else if (IsSet($_SESSION['taal']) && $_SESSION['taal'] == 'FR')
{
include ('lang/fr.php');
}
.....
bij elke pagina deze code moet toepassen.
als je de class zo inricht: land detectie / handmatig taal gekozen, waarde opslaan, controle uitvoeren of er een taalvoorkeur is, waarde verwerken (juiste includes), eigenschap van een functie (translate($sWaarde); controleren of deze in een array zit en vervolgens printen.
Kan je zo gaan werken:
Geen ervaring mee, maar zeker als je veel data hebt lijkt een functie mij erg handig.
EDIT: Sessie moet natuurlijk cookie zijn.
Gewijzigd op 07/07/2016 09:04:14 door bas hooff
Vaak is een tekst voor de ene taal niet letterlijk een omzetting zin voor zin naar een andere taal. Dat zie je wel op sommige sites waar het Nederlands niet helemaal soepel loopt en je eigenlijk het Engels er tussen door proeft.
Soms heeft een letterlijke vertaling ook geen zin, omdat het verhaal dat je in je webshop ophangt over iDeal helemaal geen zin heeft om aan een Duitser uit te leggen. In zo'n geval ben je beter af met het in je cms plaatsen van een pagina met gelijke strekking, maar dus niet zin voor zin vertaald.
Over een bestand met losse kreten:
Dat gaat niet altijd heel eenvoudig. Sommige woorden in het Nederlands zijn op meerdere manieren te vertaling, afhankelijk van het gebruik.
Neem "aub": dan kan in het Engels "please" zijn, maar ook "here you are"
Om over "voor" nog maar te zwijgen (eerder in de tijd; niet erachter; ten behoeve van; niet tegen etc)
Naar mijn idee is een losse-kreten-vertaling vooral lastig.
In het Language Portal van Microsoft kun je goed zien hoe dat in zijn werk gaat. En hier vind je meteen goede suggesties voor je eigen projecten als je eens om een vertaling verlegen zit.
Zelf gebruik ik een translation memory (TM) voor vertalingen. Alle strings zijn centraal opgeslagen in een databasetabel met een dubbele primaire sleutel:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
CREATE TABLE IF NOT EXISTS sc_translation_memory (
translation_id VARCHAR(255) CHARACTER SET ascii COLLATE ascii_bin NOT NULL,
language_id TINYINT(3) UNSIGNED NOT NULL DEFAULT 0,
admin_only_flag TINYINT(1) UNSIGNED NOT NULL DEFAULT 0,
date_modified TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
translation TEXT NULL,
PRIMARY KEY pk_translation_memory_id (translation_id, language_id),
FOREIGN KEY fk_language_id (language_id) REFERENCES sc_languages (language_id) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
translation_id VARCHAR(255) CHARACTER SET ascii COLLATE ascii_bin NOT NULL,
language_id TINYINT(3) UNSIGNED NOT NULL DEFAULT 0,
admin_only_flag TINYINT(1) UNSIGNED NOT NULL DEFAULT 0,
date_modified TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
translation TEXT NULL,
PRIMARY KEY pk_translation_memory_id (translation_id, language_id),
FOREIGN KEY fk_language_id (language_id) REFERENCES sc_languages (language_id) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Om te voorkomen dat er voor elke view een uitstap naar de database moet worden gemaakt, genereer ik hiermee bij het toevoegen of wijzigen van een string nieuwe include-bestanden. Hierin wordt de translation-id (de eerste primaire sleutel) een constante. Vereenvoudigd krijg je dan de volgende includes.
nl-NL.php voor Nederlands:
Code (php)
en-GB.php voor Brits Engels:
Code (php)
de-DE.php voor Duits:
Code (php)
fr-FR.php voor Frans:
Code (php)
Gewijzigd op 07/07/2016 11:40:53 door Ward van der Put