SPIP

[ar] [ast] [bg] [br] [ca] [co] [cpf] [cs] [da] [de] [en] [eo] [es] [eu] [fa] [fon] [fr] [gl] [id] [it] [ja] [lb] [nl] [oc] [pl] [pt] [ro] [ru] [sk] [sv] [tr] [uk] [vi] [zh] Espace de traduction

Download

Skeletten internationaal maken

20 februari

Alle versies van dit artikel:


Waarom meertalige skeletten maken?

Bij het online zetten van documenten past SPIP "automatisch" de gewenste taal toe. De datum wordt in die taal weergegeven en formulieren komen beschikbaar in de juiste taal (bijvoorbeeld de interface naar de forums)... Dit alles is al terug te vinden in SPIP.

Dit is echter niet genoeg: webmasters voegen aan hun skeletten een aantal gegevens toe, zoals de principes van de navigatie op de site. Het is nodig om gegevens als "Site Map", "Reageer op dit artikel", "Door dezelfde schrijver" of "In dezelfde rubriek" weer te geven... Voor een eentalige site zijn deze verschillende elementen eenvoudig in te voegen: ze kunnen "hardcoded" in de HTML worden opgenomen. Maar er ontstaat een probleem wanneer de site meertalig is: in een artikel in het Frans willen we weergeven "Répondre à cet article", maar in een artikel in het Engels moet een andere tekst worden getoond («Comment on this article»). Ook willen we misschien iedere taal zijn eigen homepage geven met een opsomming van de meest recente artikelen in die taal en een aangepast menu.

SPIP biedt drie methodes om deze taalafhankelijke elementen te beheren:

— (1) een methode die bestaat uit het opslaan van deze tekstelementen in taalbestanden (één bestand per gebruikte taal), gescheiden van de skeletten. Eén skelet (bijvoorbeeld article.html) roept, aan de hand van de door de webmaster bepaalde codering, de tekstelementen op in functie van de gebruikte taal. Zo kan hetzelfde skelet article.html automatisch de tekst «Répondre à cet article» of «Comment on this document» weergeven afhankelijk van de taal van het artikel. Deze methode wordt warm aanbevolen, want zij biedt de meeste souplesse en vergemakkelijkt het aanpassen van de site (een beperkt aantal skeletten);

— (2) een sneller toegankelijke, technisch zeer eenvoudige methode berust op het aanmaken van skeletten per taal. Bij deze methode wordt het bestand article.html gebruikt voor de hoofdtaal en een bestand article.en.html voor een Engelstalig artikel (let op: article.html beheert alle andere talen waarvoor geen skelete bestaat). Deze methode wordt afgeraden op sites met veel talen en/of wanner van skeletten per rubriek gebruik gemaakt wordt. In dat geval is de hieronder omschreven methode waarschijnlijk een betere oplossing:

— (3) de methode van «multi blocs», meertalige tekstblokken, kan zowel in de inhoud als in skeletten toegepast worden. Je past daarvoor de volgende constructie toe:

<multi>
[fr] Répondre à cet article
[en] Comment on this article
</multi>

en de zin wordt in de gewenste taal weergegeven. Maar let op:
wanneer je een «multi bloc» gebruikt in het optionele deel van een baken, dan moet je accolades {} gebruiken in plaats van rechte haakjes [] om de taalcode aan te duiden.
voorbeeld: [<multi>{fr}Répondre à cet article{en}Comment on this article</multi>(#BAKEN)].

Hoewel dit systeem eenvoudig kan worden toegepast, wordt het met een groot aantal talen problematisch. Je kunt daarom beter de onderstaande methode gebruiken.

1. Methode met taalbestanden

Het principe van taalbestanden bestaat zoals gezegd uit het gebruik van één skelet waarin een code is ingevoegd. Deze correspondeert met een tekstelement in iedere taal (een «string»); de code is in alle talen dezelfde, maar de tekst is een vertaling.

Zo kan worden beslist dat de code download correspondeert met:
— in het Frans «télécharger ce fichier»,
— in het Engels «download this file»,
— in het Spaans «descargar este archivo»,
— enz.

In het bestand van het skelet voor de artikelen (één bestand voor alle talen), article.html, voegen we deze code als volgt toe (let op de syntax): <:download:>

Tijdens de weergave van een artikel zal deze code worden vervangen door zijn vertaling uit het taalbestand.

We kunnen bijvoorbeeld in het skelet article.html een lus invoegen die de documenten weergeeft die aan het artikel gekoppeld zijn:  <a href="#URL_DOCUMENT"><:telechargement:></a>

Is het artikel Franstalig, dan wordt dit:  <a href="/IMG/jpg/mijndocument.jpg">télécharger ce fichier</a>

en bij een artikel in het Engels krijgen we:  <a href="/IMG/jpg/mijndocument.jpg">download this file</a>

enzovoort. Eén enkel skelet met één unieke code geeft een vertaling in alle talen van de site.

Al vertaalde teksten gebruiken

Om de webmasters een handje te helpen levert SPIP een geheel van "strings" die door de vertalers van SPIP zijn gemaakt. Door gebruik te maken van deze veelvuldig toegepaste strings kan de webmaster talen gebruiken die hij zelf niet beheerst.

Je kunt deze beschikbare taalstrings terugvinden in het privé gedeelte. Ga naar «Meertaligheid» in het deel «Configuratie». Daar vind je onderstreept de talen waarvoor taalbestanden beschikbaar zijn.

Voorbeeld: een webmaster wil een interface maken voor een site in het Nederlands, Frans en Spaans, maar hij spreekt zelf geen Spaans. Door de met SPIP meegeleverde codes in de skeletten op te nemen, krijgt hij vanzelf de Spaanse vertalingen bij een artikel in die taal.

Komt er vervolgens een Engelstalig artikel bij, dan hoeft hij niets te doen!

Een stukje techniek: de tekstelementen die standaard met SPIP worden meegeleverd zijn opgeslagen in taalbestanden in de map «ecrire/lang/» :
— /ecrire/lang/public_fr.php, /ecrire/lang/ecrire_fr.php, /ecrire/lang/spip_fr.php bevatten de Franstalige strings,
— /ecrire/lang/public_en.php, /ecrire/lang/ecrire_en.php, /ecrire/lang/spip_en.php de Engelstalige,
— enz.


-  Je eigen codes toevoegen

Je kunt altijd eigen codes bijmaken die overeen komen met nieuwe strings die je in je skelet wilt opnemen.

Daarvoor maak je je eigen taalbestanden van het type public_xx.php. Je zet je persoonlijke taalbestanden in de map squelettes/lang (die je mogelijk eerst moet maken):
— local_nl.php voor de Nederlandstalige strings,
— local_fr.php voor de Franstalige,
— local_en.php voor de Engels,
— ...

Je kunt bijvoorbeeld de volgende strings maken:
— download_1 voor «Download de laatste versie»,
— modrec Voor «Laatste modificaties».

In je skeletten kun je nu de codes <:download_1:> en <:modrec:> opnemen, die op die plaats in de juiste taal zullen worden weergegeven, op voorwaarde dat zij staan gedefinieerd in de bestanden local_xx.php. Je kunt zelfs variabelen aan de strings toevoegen <:modrec:{aantal=3}:> (waarover je meer kunt lezen in de Franstalige documentatie op programmer.spip.org).

De aan de codes toegewezen namen zijn arbitrair: jij bepaalt hun naam. Toch raden we je aan om een zo goed mogelijke omschrijving te geven en ze bijvoorbeeld niet te nummeren.

Let op: je mag alleen kleine letters zonder accent («a» tot «z»), cijfers («0» tot «9») en een liggend streepje (underscore «_») gebruiken in de code.

Lees wel even verder over het gedrag van deze codes. Ons advies: geef ze een prefix, bv. met (een afkorting van) de naam van je site, zodat je voorkomt dat je een ergens anders gebruikte SPIP-code met dezelfde naam overschrijft.

Verdere ontwikkeling

In versie 3.0 van SPIP werd deze functionaliteit herzien en verbeterd.

  • het gebruik van local_xx.php is nog steeds mogelijk;
  • het laden van een persoonlijke versie van een door SPIP geleverd taalbestand (of van een plugin) hoeft uitsluitend aanpassingen in die taal te bevatten.

Wat betekent dit: een skelet of plugin kan gebruik maken van één of meerdere taalbestanden zonder dat al deze codes in het werkgeheugen zullen worden opgeslagen.

Volgorde van inlezen : Het inlezen gebeurt in de omgekeerde volgorde van het zoekpad («path»):

  1. ecrire/lang/ [bepaalde strings kunnen worden overschreven door …]
  2. prive/lang/ [bepaalde strings kunnen worden overschreven door …]
  3. squelettes-dist/lang/ [bepaalde strings kunnen worden overschreven door …]
  4. plugin_A/lang/ [bepaalde strings kunnen worden overschreven door …]
  5. plugin_B/lang/ afhankelijk van plugin A [bepaalde strings kunnen worden overschreven door …]
  6. squelettes/lang/

Een plugin_B kan dus één of meer codes overschrijven van de taalcodes van plugin_A, wanneer B afhankelijk is van A. De inhoud van de taalbestanden van «squelettes/lang/» overschrijft iedere eerder ingelezen overeenkomstige code.

Belangrijk : Het is uiterst belangrijk dat je skeletten exact aangeven welk taalbestand je wilt toepassen vooraf gegaan door de prefix van de plugin. Bijvoorbeeld: een taalstring uit een taalbestand van plugin «mijn_plugin» moet in een skelet worden opgeroepen met: <:mijn_plugin:mijn_code:>.

Concreet voorbeeld: «plugins-dist/forum/lang/forum_nl.php» bevat het element:  'form_pet_message_commentaire' => 'Een bericht, een reactie?', «plugins-dist/petitions/lang/petitions_nl.php» bevat het element:  'form_pet_message_commentaire' => 'Een bericht, een commentaar?',

Om beide taalstrings met dezelfde vertaling te overschrijven, volstaat het om aan «squelettes/lang/local_nl.php» toe te voegen:  'form_pet_message_commentaire' => 'mijn eigen vertaling', Wil je uitsluitend de vertaling in petitions aanpassen, dan voeg je in jouw eigen bestand «squelettes/lang/petitions_nl.php»  'form_pet_message_commentaire' => 'mijn eigen vertaling voor petities', toe. De andere taalcodes zullen door het standaard taalbestand van de plugin worden verwerkt terwijl jouw aanpassing die van de plugin overschrijft.

Deze werking is zowel van toepassing op taalmodules van plugins als die van SPIP zelf (de core).

Techniek

De taalbestanden bevatten de verschillende vertalingen van de codes die worden gebruikt. Het zijn PHP-bestanden met een tabel (array) van codes en taalstrings voor iedere taal.

Let op: De naam van deze taalbestanden mag uitsluitend een «_» («underscore») bevatten om de scheiding met de taalcode (nl, fr, it,...) aan te duiden. Je mag een bestand «mijneigen_nl.php» maken, maar geen «mijn_eigen_nl.php».

Deze taalbestanden hebben deze indeling:

Nederlandstalige versie (lang/mijneigen_nl.php):

  <?php
  $GLOBALS[$GLOBALS['idx_lang']] = array(
    'download' => 'Download de meest recente versie',
    'modrec' => 'Laatste aanpassingen'
  );
  ?>
 

Catelaanse versie (lang/mijneigen_ca.php):

  <?php
  $GLOBALS[$GLOBALS['idx_lang']] = array(
    'download' => 'Descarregar la darrera versió',
    'modrec' => 'Modificacions recents'
  );
  ?>
 

De constructie is alsvolgt:

  • aan het begin van het bestand:
      <?php
      $GLOBALS[$GLOBALS['idx_lang']] = array(
  • aan het eind van het bestand:
      );
      ?>
  • het tussenliggende gedeelte bevat de definities met deze syntax:
        'code' => 'de tekststring',

N.B.
— Behalve de laatste regel eindigt iedere regel met een komma.
— Wil je binnen een string een apostrof gebruiken, dan moet je die van een escape voorzien, dat wil zeggen een backslash. Zo zal de Franse string «sur l’internet» moeten worden geschreven als: sur l\'internet.

2. Een apart skelet per taal

De tweede methode is waarschijnlijk voor beginnende webmasters eenvoudiger te beheersen. Ze bestaat uit het maken van een aparte set skeletten per taal. Het werkt ongeveer op dezelfde manier als het maken van aparte skeletten per rubriek om op die manier een afwijkende grafische weergave te realiseren.

We willen een site in het Nederlands (hoofdtaal), Engels en Spaans. We maken daarvoor drie verschillende sets van skeletten:
— article.html voor het Nederlands (in feite voor alle talen die geen taalskelet hebben),
— article.en.html voor het Engels,
— article.es.html voor het Spaans.

(Dus: publiceren we een artikel in het Duits en wordt het skelet article.de.html niet op de site gevonden, dan wordt article.html gebruikt.)

Belangrijk: wil je dat met de skeletten «per taal» rekening gehouden wordt, dan moet de «standaardversie» ook aanwezig zijn.

Dus als hier article.html niet bestaat (misschien omdat je hem article.nl.html had genoemd), dan zullen de Engelse en Spaanse bestanden niet worden toegepast en zal SPIP het standaardskelet gebruiken.

Je mag ook de functionaliteit «per rubriek» toepassen, waarbij deze zoekvolgorde voor het skelet wordt aangehouden:
— squelettes/article=8.es.html (het skelet voor Spaanse artikelen in rubriek 8, maar niet in haar subrubrieken),
— squelettes/article=8.html (het skelet voor artikelen in rubriek 8, maar niet in haar subrubrieken),
— squelettes/article-8.es.html (het skelet voor Spaanse artikelen in rubriek 8 en in haar subrubrieken),
— squelettes/article-8.html (het skelet voor artikelen in rubriek 8 en in haar subrubrieken),
— squelettes/article.es.html (het skelet voor Spaanse artikelen),
— squelettes/article.html (het skelet voor artikelen),
— squelettes-dist/article.html (het met SPIP meegeleverde skelet voor artikelen).

Let op: In de oude versies van SPIP (vóór 2.0) heette het bestand squelettes/article-dist.html.
Ietsje eenvoudiger. Een eenvoudige structurele oplossing om met SPIP een meertalige stite te maken bestaat uit het koppelen van een taal aan een rubriek (en dus niet per artikel). Wanneer artikelen van dezelfde taal per rubriek zijn (en nog beter per hoofdrubriek), kun je skeletten per rubriek maken, zonder gebruik te hoeven maken van de bestanden per taal.

Op deze manier kun je als alle Spaanse artikelen in rubriek 8 (en de subrubrieken ervan) staan, kun je het bestand rubrique-8.html Spaanstalig maken in plaats van een bestand rubrique.es.html te maken.

Je raadt misschien al welke problemen je kunt tegenkomen met deze methode:
— het bestand article-2.html moet bestaan als je wilt dat article-2.es.html wordt gebruikt;
— omgekeerd mag je niet besluiten dat article.es.html moet worden gebruikt in plaats van article-2.html wanneer article-2.es.html niet bestaat: de seletie per rubriek gaat altijd vóór de selectie op taal;
— een correctie in de pagina-layout moet op meerdere skeletten worden aangepast;
— het kan gebeuren dat je elemenen in de skeletten moet opnemen in een taal die je zelf niet machtig bent.

Deze methode is dus bedoeld voor een niet al te complexe site (weinig of geen specifieke skeletten per rubriek) en/of weinig verschillende talen bevat. Het is zeker geen oplossing voor meer ambitieuze sites, waarvoor de methode met taalbestanden wordt aanbevolen.

3. Meertalige blokken

De multi blocs, beschreven in artikel Een meertalige site bouwen werkt net zo goed in het profiel van een auteur als in een skelet. Maar let op, je kunt er alleen tekst mee beheren, geen lussen!

Om snel een meertalige site te bouwen, kan het een goede start zijn. Maar wanneer je site in de lucht is en je aanpassingen wilt gaan maken in je skeletten (zoals meer talen), of de functionaliteit wilt uitbreiden, zul je je taalblokken moeten omzetten in codes met taalbestanden.


Het skelet van deze bladzijde zien Site gebouwd met SPIP | Vertaalruimte | Privé-site