Templates vertaalbaar maken

From Joomla! Documentation

This page is a translated version of the page Making templates translatable and the translation is 100% complete.

Other languages:
English • ‎español • ‎français • ‎Nederlands • ‎中文(台灣)‎

Introductie tot het vertalen van templates

Joomla! is een echte internationale toepassing en ondersteund de vertaling van alle strings die erin zitten. Templates zijn geen uitzondering en een beetje extra tijd besteed om ervoor te zorgen dat uw templates vertaalbaar zijn betaald zich uit.

Het taal-vertaalsysteem is ontworpen om zo eenvoudig en foutbestendig mogelijk te zijn. Zelfs als een taalbestand bijvoorbeeld ontbreekt, of een bepaalde string niet vertaald is, zal Joomla op transparante wijze terugvallen op het tonen van de niet-vertaalde string. Er zijn ook wat handige ingebouwde hulpmiddelen in Joomla zelf om vertalers te helpen bij het maken van een vertaling.

In dit document leert u hoe u taalbestanden maakt voor uw template en hoe u vertalingen opneemt uw template pakketbestand. U leert ook hoe u er zeker van kunt zijn dat alle strings die u in uw template gebruikt te vertalen zijn en hoe de fouten in een nieuwe vertaling opgespoord moeten worden.


Locatie van de template taalbestanden

Taal definitie bestanden voor front-end templates worden opgeslagen in

[path-to-Joomla]/language/[ln-LN]

waarbij [ln-LN] de taalcode is. Taalcodes worden gedefinieerd in RFC3066[1] Het bestand moet als volgt genoemd worden

[ln-LN].tpl_[template-name].ini

waarbij [template-name] de naam is van het template (gebruik geen hoofdletters). Bijvoorbeeld, het Brits Engelse taal bestand voor het Beez template is

[path-to-Joomla]/language/en-GB/en-GB.tpl_beez.ini

U dient ook een apart taal bestand te maken voor het vertalen van de Administrator back-end van uw template. Deze wordt opgeslagen in

[path-to-Joomla]/administrator/language/[ln-LN]

maar de naamgevingsconventie van het bestand is hetzelfde.

Voor administrator templates, anders dan bij front-end templates, is het tweede bestand het enige bestand dat vereist is. Het Brits Engelse taal bestand voor het Khepri administrator template is bijvoorbeeld te vinden in

[path-to-Joomla]/administrator/language/en-GB/en-GB.tpl_khepri.ini


Het maken van een taalbestand

Joomla! 
3.x
serie
Info non-talk.png
General Information

De pagina Specificatie van taalbestanden bevat details die gecontroleerd moeten worden - aangezien het niet helemaal up-to-date meer is - en daarna ingevoegd in deze pagina.

Joomla! taalbestanden zijn geschreven in het eenvoudige INI bestandformaat. Ze moeten opgeslagen worden met behulp van de UTF-8 codering. Lege regels en regels die beginnen met ; worden genegeerd en het laatste kan gebruikt worden om commentaar aan het bestand toe te voegen. Iedere regel bestaat uit een sleutel en de waarde gescheiden door een is-gelijk teken:

SLEUTEL="waarde"

hierbij is SLEUTEL een string die vertaald moet worden en waarde is de vertaalde string. Bijvoorbeeld:

ADDITIONAL_INFORMATION="Extra informatie"

Verschillende versies van Joomla hebben iets verschillende manieren gebruikt om taalbestanden te lezen (namelijk een eigen parser en de PHP INI parser, de laatste werd buggy in PHP 5.2 en ouder), wat leidde tot verschillende regels wat precies toegestaan is in sleutels en waarden. Taalbestanden die zich houden aan de volgende regels zouden moeten werken in veel versies van Joomla, maar minstens in Joomla Joomla 3.x en nieuwer.

De SLEUTEL mag alleen ASCII-tekens bevatten. Het mag alleen hoofdletters, cijfers, underscores en koppeltekens bevatten en het moet beginnen met een hoofdletter. (Punten (.) zijn formeel toegestaan maar worden niet volledig ondersteund.) Het is afspraak om spaties te vervangen door underscores. Indien meer dan een regel dezelfde sleutel heeft, dan wordt de laatste gebruikt. Indien u de sleutel gebruikt in een JText::_ aanroep, dan maken hoofdletters niet uit aangezien de tekens naar hoofdletters worden omgezet voordat ze worden opgezocht. Zo zal extra_informatie, Extra_Informatie of zelfs ExTrA_iNfOrMaTiE worden gevonden.

De waarde moet altijd omgeven worden door dubbele aanhalingstekens ("), zoals in het voorbeeld. De waarde zelf mag geen dubbele aanhalingstekens bevatten ("), hoewel enkele aanhalingstekens (') toegestaan zijn. Gebruik "_QQ_", inclusief de dubbele aanhalingstekens, om een dubbel aanhalingsteken in uw waarde te plaatsen. Gebruik bijvoorbeeld, om de waarde <span class="red">Warning!</span> aan de sleutel WARNING_TEXT toe te kennen, de volgende regel:

WARNING_TEXT="<span class="_QQ_"red"_QQ_">Warning!</span>"

Merk op dat deze regels strenger zijn dan verplicht gesteld op de PHP INI parser. De PHP INI parser staat bijvoorbeeld toe de dubbele aanhalingstekens weg te laten rond de waarde zolang het niet bepaalde tekens bevat. Door bovenstaande regels te gebruiken wordt het veel makkelijker fouten te vermijden zoals het vergeten van dubbele aanhalingstekens indien ze verplicht zijn.

Informatie over de wijzigingen in het taalbestand formaat tussen de Joomla 1.5, 2.5 en 3.x serie kunt u vinden op de pagina Specificatie van taalbestanden.


Wijziging van het templateDetails.xml bestand

Om er zeker van te zijn dat uw sjabloon is geschikt voor volledig internationaal gebruik moet u ervoor zorgen dat bepaalde XML-elementen worden vertaald en dat de taaldefinitie bestanden worden weergegeven in het templateDetails.xml - bestand.

Vertalen templateDetails.xml

Een paar van de elementen in de templateDetails.xml bestand worden gebruikt in de Template Manager en zijn zelf te vertalen. De beschrijving moet altijd worden vertaald.

naam Naam van het template. Bijvoorbeeld, Beez
beschrijving Beschrijving van de sjabloon

Deze velden worden ook getoond aan de gebruiker tijdens de installatie van het template.

Het toevoegen van de taal definitie bestanden templateDetails.xml

Alle taal-bestanden moet worden gedeclareerd in het templateDetails.xml - bestand. Dit wordt gedaan door het toevoegen van twee "<language>"elementen voor elke taal te worden opgenomen met de sjabloon; één voor de front-end strings; de andere voor de administrator back-end strings. Bijvoorbeeld, de twee Brits-engelse taal-bestanden en de twee duitse taal bestanden voor de Beez template worden verklaard als volgt:

<?xml version=”1.0” encoding=”utf-8” ?>
<install version=”1.5” type=”template”>

     .........

    <languages>
        <language tag=”en-GB”>en-GB.tpl_beez.ini</language>
        <language tag=”de-DE”>de-DE.tpl_beez.ini</language>
    </languages>

     .........

    <administration>
        <languages folder=”admin”>
            <language tag=”en-GB”>en-GB.tpl_beez.ini</language>
            <language tag=”de-DE”>de-DE.tpl_beez.ini</language>
        </languages>
    </administration>

</install>

Opmerking: in de administratie wordt de "<languages>"tag "map" - attribuut gebruikt. Dit is omdat de taal-bestanden voor de frond-end en de back-end dezelfde naam hebben en dit niet mag in dezelfde map binnen het sjabloon pakket bestand. In dit voorbeeld is de administratie van de taalbestanden geplaatst in een sub-map met de naam "admin" om ze te scheiden van de frond-end taalbestanden.


Vertaalstrings opnemen in de template

In het template zelf worden vertalingen afgehandeld met de code JText static class. Het wordt als “statisch” opgenomen omdat er geen instantie van hoeft te worden aangemaakt voordat de methodes gebruikt mogen worden.

Eenvoudige tekststrings

De meeste tekststrings kunnen vertaald worden met behulp van de “_” (underscore) methode. Bijvoorbeeld, veronderstel dat uw template de Engelse tekst “Welcome” bevat welke vertaalbaar gemaakt moet worden.

<?php
    echo 'Welcome';
?>

U zou dan de statische string zo kunnen vervangen:

<?php
    echo JText::_( 'Welcome' );
?>

Dit zou het vertaalsysteem in het juiste taalbestand laten zoeken naar “WELCOME” aan de linkerkant van het is-gelijk teken. Het zoeken is hoofdlettergevoelig. Als deze taaldefinitiestring is gevonden

WELCOME=Welcome!

is het resultaat dat de string “Welcome!” naar de browser wordt gestuurd. Als de gebruiker naar de Duitse taal schakelt dan zal het Duitse taaldefinitie bestand worden doorzocht op “WELCOME” en zal misschien vinden

WELCOME=Willkommen

en zo “Willkommen” naar de browser sturen. Belangrijk is dat als de gebruiker naar het Duits schakelt en er is geen Duits taalbestand is, of de juiste string zit niet in het Duitse taalbestand zit, dan zal Joomla terugvallen naar het terugsturen van de nietvertaalde string “Welcome” naar de browser, met de oorspronkelijke lettergrootte.


Opgemaakte velden in vertaalstrings

Soms is het noodzakelijk om speciaal opgemaakte velden in een string die vertaald moet worden op te nemen. Dit is vaak het geval bij getallen maar kan ook optreden bij datums of tijden of wanneer precieze opmaak instructies noodzakelijk zijn. Als de strings niet vertaald hoeven worden, kunnen de standaard PHP functies printf en sprintf gebruikt worden. De printf functie levert een opgemaakte string gebruik makend van ingebouwde opmaak-instructies; de sprintf functie levert een opgemaakt string met dezelfde ingebouwde opmaak-instructies.

De JText class biedt wrapper-methoden voor de printf en sprintf functies die het mogelijk maakt statische tekst te vertalen terwijl het ook de mogelijkheid geeft opgemaakte velden op te nemen met dezelfde syntax als de PHP functies.

Veronderstel bijvoorbeeld dat u de string “Donations of 12.45 GBP have been received” heeft, waarbij het bedrag uit de variabele $donations komt. U moet de string dan zo in tweeën opsplitsen:

JText::_( 'Donations of' ) .  $donations GBP  . JText::_( 'have been received' )

met de taalstrings

DONATIONS OF=Donations of
HAVE BEEN RECEIVED=have been received

Maar dit werkt niet goed in talen waar de ingesloten gegevens niet op dezelfde plaats staan in de taalstring. Gebruik in plaats daarvan de sprintf methode als volgt

JText::sprintf( 'Donations have been received', $donations )

met de taalstring

DONATIONS HAVE BEEN RECEIVED=Donations of %.2f GBP have been received

Er kan meer dan een opmaak specificatie in een vertaalstring zitten. Vervanging wordt op volgorde uitgevoerd, het werkt dus zoals verwacht

JText::sprintf( 'String with numbers in it', $num1, $num2, $num3 )

met de taalstrings

STRING WITH NUMBERS IN IT=First %d, second %d, third %d

Syntaxis van opmaak specificaties

De opmaak-specificatie bestaat uit een percentage-teken (%), gevolgd door een of meer van deze elementen, in de volgorde:

Volgorde
Type Waarden
Beschrijving
1.
Teken + of - Optioneel. Dwingt een teken (+ of -) bij een getal af. Standaard wordt alleen het – teken gebruikt bij een getal als het negatief is. Dit teken forceert dat positieve getallen een + teken toegevoegd krijgen.
2.
Uitvullen <spatie>

of 0

of '<char>

Optioneel. Teken dat gebruikt wordt om het resultaat uit te vullen tot de juiste string-lengte. Mag een spatie-teken zijn of een 0 (nul teken). De standaard is om uit te vullen met spaties. Een alternatief uitvul-teken kan worden opgegeven door een enkele quote (') voor te voegen.
3.
Uitlijning <null> of - Optionel. Bepaalt of het resultaat links- of rechts uitgelijnd moet worden. De standaard is rechts-uitgelijnd; een - teken hier maakt het links-uitgelijnd.
4.
Breedte Getal Optioneel. Het aantal tekens (minimum) waar de conversie toe moet leiden.
5.
Precisie Getal Optioneel. Aantal decimale cijfers die getoond moeten worden bij floating-point getallen. Bij het gebruik van deze aanduiding in een string, fungeert het als een afkappunt, het maximum aantal tekens van de string.
6.
Type Verplicht. Het type van het argument. Mogelijke types zijn:
%
Een percentage teken. Geen argument vereist
b
Het argument wordt behandeld als een integer en gepresenteerd als een binair getal.
c
Het argument wordt behandeld als een integer en gepresenteerd als het teken met de ASCII-waarde.
d
Het argument wordt behandeld als een integer en gepresenteerd als een decimaal getal met teken.
e
Het argument wordt behandeld als de wetenschappelijke notatie (bijvoorbeeld 1.2e+2). De precisie specificatie staat voor het aantal cijfers na de decimale punt sinds PHP 5.2.1. In eerdere versies was het het aantal significante cijfers (een minder).
u
Het argument wordt behandeld als een integer en gepresenteerd als decimaal getal zonder teken.
f
Het argument wordt behandeld als een float en gepresenteerd als een floating-point getal (lokaal).
F
Het argument wordt behandeld als een float en gepresenteerd als een floating-point getal (niet-lokaal).
o
Het argument wordt behandeld als een integer en gepresenteerd als een octaal getal.
s
Het argument wordt behandeld en gepresenteerd als een string.
x
Het argument wordt behandeld als een integer en gepresenteerd als een hexadecimaal getal (met kleine letters).
X
Het argument wordt behandeld als een integer en gepresenteerd als een hexadecimaal getal (met hoofdletters).

Opmaak argument verwisseling

De opmaak-string ondersteunt argument nummering en zelfs verwisseling. Dit is handig als twee of meer items opgenomen moeten worden in een string, maar door verschil in de taalstructuur betekent dat de volgorde van de het gebruik van de items niet hetzelfde is.

Stel bijvoorbeeld dat we de volgende code hebben:

echo JText::sprintf( 'Balls in the bucket', $number, $location );

met deze taalstring:

BALLS IN THE BUCKET=There are %d balls in the %s

Dan als

$number = 3
$location = 'hat'

zou dit opleveren “There are 3 balls in the hat”. Maar stel dat u de vertaling wilt veranderen in:

BALLS IN THE BUCKET=The %s contains %d balls

Dan zou dit opleveren “The 3 contains hat balls” wat onzin is. Beter dan de code te veranderen, kunt u in de taalstring aangeven naar welk argument de plaatsvervanger verwijst. Verander de vertaling in:

BALLS IN THE BUCKET=The %2$s contains %1$d balls

en het resultaat wordt zoals verwacht “The hat contains 3 balls”.

Een extra voordeel van het kunnen nummeren van de argumenten is dat u de vervangers kunt herhalen zonder meer argumenten in de code toe te voegen. Verander de vertaling bijvoorbeeld in:

BALLS IN THE BUCKET=The %2$s contains %1$d balls, so there are %1$d balls in the %2$s

en dit zal het resultaat zijn “The hat contains 3 balls, so there are 3 balls in the hat”.


Het debuggen van een vertaling

Joomla ondersteunt een aantal nuttige debug-mechanismen die het makkelijker maken onvertaalde strings te vinden en problemen te onderzoeken met vertalingen van geïnstalleerde extensies.

Foutopsporing taal

Global-config-language-debug-nl.png

U activeert foutopsporing taal via Administratie beheer door naar de algemene instellingen te gaan en te klikken op de Systeem tab. Zoek het Foutopsporing taal veld, wijzig de waarde in “Ja” en sla uw wijzigingen op.

Met deze optie actief worden alle te vertalen strings getoond met speciale tekens omgeven, die hun status aangeven

Code Status
●Joomla CMS● (tekst omgeven door rondjes) geeft aan dat er een overeenkomst gevonden is in het taalbestand en de string vertaald is.
 ??Joomla CMS?? (tekst omgeven door een stel vraagtekens) geeft aan dat de string vertaalbaar is maar er geen match gevonden is in het taalbestand.
Joomla CMS "(tekst zonder omringende tekens)" geeft aan dat de string niet te vertalen is.

Foutopsporing systeem

Extra foutopsporingsinformatie kan worden verkregen dor het activeren van de systeem foutopsporing. Dit wordt gedaan door naar de Algemene instellingen te gaan in op de systeem tab te klikken. Zoek het Foutopsporing systeem veld op, wijzig de waarde in “Ja” en sla de wijzigingen op.

Met deze optie actief hebben alle schermen extra informatie over foutopsporing aan het einde van de pagina. Momenteel bevat deze

  • Profiel informatie. Dit is de tijd om de code uit te voeren tot de verschillende markeerpunten in de code.
  • Geheugen gebruik. De hoeveelheid systeem-RAM-geheugen gebruikt.
  • SQL query's uitgevoerd. Alle SQL query's die uitgevoerd zijn tijdens het opbouwen van de pagina.
  • De taal-bestanden geladen. Een lijst met alle taalbestanden die geladen zijn tijdens het opbouwen van de pagina, inclusief de volledige pad-informatie. Dit kan handig zijn om te controleren of de verwachte bestanden geladen zijn. Het aantal achter elk pad is het aantal keren dat er naar het bestand verwezen is.
  • Onvertaalde strings diagnose. Een lijst met alle gevonden onvertaalde strings en de waarschijnlijke bestandslocatie waar de JText aanroep wed gedaan.
  • Onvertaalde strings ontwerp. Een lijst met al de gevonden onvertaalde strings in een KEY=Waarde formaat zodat ze gekopieerd en geplakt kunnen worden naar een taalbestand (INI).

Foutopsporing plugin

Debug-plugin-nl.png

deze systeem plugin regelt wat getoond wordt als de foutopsporing actief is bij de Algemene instellingen. Het is standaard ingeschakeld. U kunt de parameters van de plugin bereiken via Extensies → Pluginbeheer. Zoek de “Systeem - Foutopsporing” plugin en klik erop. Er zijn drie instellingen van belang voor vertalers.

  • Toon taalbestanden. Indien dit op “Ja” staat bevat de foutopsporings-informatie een lijst met taalbestanden die opgevraagd werden toen de pagina opgebouwd werd.
  • Toon taalstrings Indien gezet op “Ja” dan wordt een lijst met onvertaalde strings met de locatie van het bestand dat de aanroep naar JText doet opgenomen in de foutopsporingsinformatie.
  • Verwijder vanaf het begin. Wordt alleen gebruikt als Toon taalstrings op “Ja” staat. Dit biedt de mogelijkheid een voorvoegsel van de string te strippen om de sleutel te vormen. Dit is handig als de ontwikkelaar een algemeen voorvoegsel gebruikt voor zijn extensie bij gebruik van de JText methode. Zie onderstaande voorbeeld.

Merk op dat het tonen van niet-vertaalde strings alleen de waarde die naar de juiste JText methode wordt gestuurd toont. Bijvoorbeeld de volgende code:

echo JText::_( 'Reports Import Configuration' );

Indien niet vertaald, zal de ontwikkel modus dit tonen als:

# /administrator/components/com_reports/views/reports/tmpl/default.php
REPORTS IMPORT CONFIGURATION=Reports Import Configuration

Als de 'Verwijder vanaf het begin' voorvoegsel op "Reports" staat verandert de uitvoer enigszins in:

# /administrator/components/com_reports/views/reports/tmpl/default.php
REPORTS IMPORT CONFIGURATION=Import Configuration

Merk op dat het getoonde pad een gok is gebaseerd op de aanroep naar de PHP debug_backtrace functie. Soms is het juist, soms niet en er zijn ook gevallen waarbij geen bestand bepaald kan worden. In dit geval moet u een oordeel vellen.




  1. RFC3066: Tags for the Identification of Languages http://www.ietf.org/rfc/rfc3066.txt

Categorie:Template Ontwikkeling Categorie:Taal Ontwikkeling Categorie:Handleidingen