Hallo,
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...
Het lijkt mij goed om een functie / class te gebruiken / schrijven waarin je de bezoeker evt kan herkennen van land, en vervolgens een suggestie doet om bij een overeenkomst om de bijbehorende taal aan te bieden.
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:
if (IsSet($_SESSION['taal']) && $_SESSION['taal'] == 'DE')
{
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:
echo translate('welcome');
Geen ervaring mee, maar zeker als je veel data hebt lijkt een functie mij erg handig.
je moet in elk geval onderscheid maken tussen het vertalen van losse kreten, zoals "telefoon", "gebruikersnaam" en zinnen/teksten.
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.
Bij grote softwareconcerns wordt inderdaad nooit op woordniveau vertaald, maar altijd in langere strings. De vertalers en localizers noemen dat werk ook "strings vertalen". Onderdelen van de gebruikersinterface zoals menu-opdrachten, knopopschriften en labels bij invoervakken zijn allemaal aparte, unieke strings.
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:
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;
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:
<?php
define('I18N_ERROR_PASSWORD_CHARACTERS', 'Het wachtwoord moet cijfers en letters bevatten.');
define('I18N_ERROR_PASSWORD_MIN_LENGTH', 'Het wachtwoord moet minimaal 7 tekens bevatten.');
define('I18N_ERROR_PASSWORD_TOO_COMMON', 'Het wachtwoord komt te vaak voor.');
?>
en-GB.php voor Brits Engels:
<?php
define('I18N_ERROR_PASSWORD_CHARACTERS', 'The password must contain both numbers and letters.');
define('I18N_ERROR_PASSWORD_MIN_LENGTH', 'The password must be at least 7 characters long.');
define('I18N_ERROR_PASSWORD_TOO_COMMON', 'The password is too common.');
?>
de-DE.php voor Duits:
<?php
define('I18N_ERROR_PASSWORD_CHARACTERS', 'Das Kennwort muss sowohl Zahlen als auch Buchstaben enthalten.');
define('I18N_ERROR_PASSWORD_MIN_LENGTH', 'Das Kennwort muss aus mindestens 7 Zeichen bestehen.');
define('I18N_ERROR_PASSWORD_TOO_COMMON', 'Das Kennwort ist zu allgemein.');
?>
fr-FR.php voor Frans:
<?php
define('I18N_ERROR_PASSWORD_CHARACTERS', 'Le mot de passe doit contenir des chiffres et des lettres.');
define('I18N_ERROR_PASSWORD_MIN_LENGTH', 'Le mot de passe doit être composé d’au moins 7 caractères.');
define('I18N_ERROR_PASSWORD_TOO_COMMON', 'Le mot de passe est trop commun.');
?>