29-11-2011 : Remettre dans le débat politique les principes du Conseil National de la Résistance
17-02-2012 : Pétition pour une protection de l’apiculture et des consommateurs face au lobby des OGM
Logo de mon site
Logo de mon site
Faire un don




Right menu

Logo du site ez.no  Logo XHTML 1.O du W3C  Logo XHTML 1.O du W3C  Site francophone officiel de Firefox
zero papier grâce aux catalogues et promos en ligne de bonial

Language switcher -- Sélecteur de langues

Date de publication: le mardi 22 novembre 2011 à 15h03
Dernière modification: par Pascal BOYER le mardi 22 novembre 2011 à 18h06

15/12/2010 4:31

versions 4.x

Since eZ Publish 4.1, there is a new way to create links that take the users to an other translation siteaccess. This had previously been problematic, when the URL was not available in the selected translation, because of differences in translation.
Il existe, depuis eZ Publish 4.1, une nouvelle méthode de création de liens qui redirigent les utilisateurs vers une traduction particulière du siteaccess. Ceci était jusqu'à présent problématique, lorsque l'URL n'était pas disponible dans la traduction sélectionnée, en raison des différences dans la traduction (???).

The URLs used with the language switcher have the following form:
Les URL utilisés par le sélecteur de langues ont la forme suivante:

/switchlanguage/to/<destinationTranslationSiteaccess>/<nodeID|URLalias>

This feature will most often be used via the bundled module switch language. This is an optimized way to translate node IDs and URL aliases into the destination language, for it is done before someone clicks on a language switcher link. This is something which has to be calculated per URL otherwise.
Cette fonctionnalité sera le plus souvent utilisée par le biais du module de sélection de langues proposé intégré à eZ Publish. Ce module constitue une méthode optimisée de traduction des ID et des alias d'URL dans la langue de destination puisque la traduction est réalisée avant que quiconque ne clique sur l'un des liens de sélection d'une langue. Autrement, ceci doit être calculé pour chaque URL.

Operation / Fonctionnement

When a user clicks on a language switcher URL, the user is redirected to an URL, representing the destination siteaccess and the destination content. More often than not the destination content is the translated content originally being viewed, but there are some exceptions to how this works. Here is how:
Lorsqu'il clique sur l'URL d'une langue, l'utilisateur est redirigé vers un URL représentant le siteaccess et le contenu de destination. Bien que le contenu de destination soit le plus souvent une traduction du contenu original, il existe quelques exceptions à ce fonctionnement. Voici comment:

Origin
Origine
Destination Destination URL
URL de destination
Node
Nœud
Translated node
Nœud traduit
Translated URL alias
Alias d'URL traduit
Node with no available translation [#]_
Nœud sans traduction disponible [#]_
Original node
Nœud original
Translation siteaccess, same URL Alias
Traduction siteaccess (???), même alias d'URL
Module Module The URL is passed through for modules
L'URL est passé via les modules

Note: [#] Nodes can still be viewable in the other siteaccess. For instance, English content can be viewable in the Norwegian siteaccess if English is in the prioritised languages.
Note: [#] Les nœuds peuvent être encore vus dans l'autre siteaccess. Par exemple, un contenu en anglais peut être vu dans le siteaccess Norvégien si l'Anglais est défini dans la liste des langues prioritaires.

Use / Utilisation

Using the language switcher tool, is simply a matter of creating links in the pattern shown above. The links are easy to create with the template language, but there is also another convenience method for creating language switcher URLs (for which you should only need a minimal amount of logic in the templates). You can access this feature via the template operator, language_switcher(). See the next section how to configure this operator.
Utiliser le sélecteur de langue constitue simplement un moyen de créer des liens respectant les schémas présentés ci-dessus. Bien qu'il soit facile de créer ces liens avec le langage de template, il existe une autre méthode tout aussi valable pour les créer (et pour lesquels juste un peu de code dans les templates sera nécessaire). Vous pouvez accéder à cette fonctionnalité via l'opérateur de template language_switcher(). Reportez-vous au prochain paragraphe pour savoir comment le configurer.

The operator will return an array, indexed by siteaccess name, containing a language switcher URL and a human readable text.
L'opérateur retourne un tableau indexé par les noms des siteaccess et contenient un URL de sélection de langue ainsi qu'un texte lisible par un humain.

{def $translations = language_switcher( $module_result.content_info.node_id )}
{foreach $translations as $siteaccessName => $lang}
   {*Note we are not using the $siteaccessName index here, but useful for matching against current siteaccess for instance *}
   <a href={$lang.url|ezurl}>{$lang.text|wash}</a>
{/foreach}

The input to "language_switcher( $var )" can either be the node ID, the current URL alias or in the case of a module, just the requested URL.
L'entrée de language_switcher( $var ) peut être soit l'ID du noeud, soit l'alias de l'URL courant soit, dans le cas d'un module, uniquement l'URL demandé.

 Configuration

In order to make the language switcher easy to use within templates, some configuration must be done via settings. This is one of the most convenient places to define the translation siteaccess on the site, and this will allow the “language_swither()” operator to not use normal siteaccesses when creating the links automatically.
Afin de rendre le sélecteur de langues facile à utiliser dans les templates, certaines configurations doivent être réalisées via les paramètres (ini). Ceci constitue l'un des emplacements les plus commodes pour définir la traduction du siteaccess et permet à l'opérateur language_switcher( $var ) de ne pas utiliser de siteaccess normaux (???) lors de la création automatique des liens.

Below is an example of what a setup can look like:
Ci-dessous, un exemple de ce à quoi ressemble une configuration:

site.ini
 
[RegionalSettings]
# Example mapping between translation siteaccesses and the name to use for the
# language switcher link, e.g. the name which will be used when making links to
# these siteaccesses.
# Example: TranslationSA[<name of siteaccess>]=<name of language switcher link, pointing to this siteaccess>
TranslationSA[]
TranslationSA[eng]=English
TranslationSA[nor]=Norwegian
TranslationSA[fre]=French

Override possibility / Possibilité de surcharge

Each site has a unique set of requirements, that is why the language switcher class can be fully overridden with a custom class.
Chaque site dispose d'un jeu unique d'exigences, ce qui explique qu'il soit possible de surcharger totalement la classe de sélection de langues par une classe personnalisée.

The class is configured at site.ini:
La classe est configurée dans le fichier site.ini:

[RegionalSettings]
LanguageSwitcherClass=ezpLanguageSwitcher

The implementation class needs to implement the ezpLanguageSwitcherCapable interface.
La classe d'implémentation doit implémenter l'interface ezpLanguageSwitcherCapable.

Extra

The language switcher feature provides one more convenience for template developers, namely the ability to fetch the URL alias of a node in a user-selected translation. This is achieved through the following template fetch function:
La fonctionnalité de sélection de langues fournit encore une commodité aux développeurs de templates: la possibilité de rechercher l'alias de l'URL d'un nœud dans la traduction choisie par l'utilisateur. Voici la fonction fetch qui réalise ceci:

{def $demo = fetch( 'switchlanguage', 'url_alias', hash( 'path', $node.url_alias, 'locale', 'nor-NO' ) )}

The above example will give the URL alias for the Norwegian translation, if the URL alias cannot be fetched, or does not exist for the given translation "false" is returned.
L'exemple ci-dessus donnera l'alias de l'URL de la traduction Norvégienne et si l'alias n'est pas trouvé ou n'existe pas pour une traduction données alors la valeur false est retournée.

The full list of parameters are:
Ci-dessous, la liste complète des paramètres:

fetch( 'switchlanguage', 'url_alias', hash( [ 'node_id', <node_id>, ]
                                           [ 'path', <node_path> ] )

Commentaires