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

Luxpopuli / eZ Publish / eZ Publish: Documentation technique / eZ Publish : Features -- Fonctionnalités / Multi-language support for URL aliases -- Support multilingue des alias d'URI





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

Multi-language support for URL aliases -- Support multilingue des alias d'URI

Date de publication: le jeudi 21 février 2008 à 05h30
Dernière modification: par Pascal BOYER le lundi 6 septembre 2010 à 16h36

20/08/2008 4:18  

versions 3.10 et 4.x

In eZ Publish 3.10, a new feature that makes it possible to use multilingual virtual URLs (also known as nice URLs or URL aliases) has been introduced. This feature allows URL aliases to exist in several translation languages. 
Dans eZ Publish 3.10, une nouvelle fonction d'utilisation des URI virtuels  multilingues (aussi nommés URI conviviaux ou alias d'URI) a été introduite, permettant aux alias d'URI d'exister dans plusieurs langues de traduction

Auto-generated aliases / Alias auto-générés

From 3.10, the automated virtual URL generation mechanism allows URL aliases to exist in several languages, depending on which languages the actual objects exist in. In other words, the URL aliases for nodes are now created in accordance with the existing translations of the objects encapsulated by the nodes. When a new translation is added to an object, the system will automatically generate a new set of URL aliases (based on the translations) for the node(s) that encapsulate that object. 
Depuis la version 3.10, le mécanisme automatisé de génération d'URI virtuel  permet aux alias d'URI d'exister en plusieurs langues en fonction de celles dans lesquelles les objets existent. En d'autres termes, les alias des URI des noeuds sont à présent créés en accord avec les traductions existantes des objets encapsulés par les noeuds. Lorsqu'une nouvelle traduction d'un objet est ajoutée, le système génère automatiquement un nouveau jeu d'alias de/des URI (basés sur les traductions) du/des noeud(s) encapsulant cet objet.

A new field "URL alias name pattern" has been added to the class edit interface. It controls how the virtual URLs of the nodes will be generated when the objects (instances of the classes) are created. 
Un nouveau champ Modèle du nom de l'alias d'URL  a été ajouté à l'interface d'édition des classes. Il contrôle la façon dont les URI virtuels des noeuds seront générés lorsque les objets (les instances des classes) seront créés.

It is not possible to create, edit or remove auto-generated aliases using the administration interface. They are updated automatically when objects are changed. The only way to change an auto-generated alias is to edit the object itself in the corresponding language. 
Il est impossible de créer, d'éditer ou de supprimer des alias auto-générés à partir de l'interface d'administration. Ils sont mis à jour automatiquement lorsque les objets sont modifiés et la seule façon de les modifier consiste à éditer l'objet lui-même dans la langue correspondante.

URL history entries / Entrées de l'historique des URI

When the name of an object is changed, the system will take care of changing the auto-generated URL aliases for the associated nodes. In addition, an internal redirection will be created, which will make sure that the old URL still works. In other words, instead of deleting the old URL alias from the database, the system will convert it into a URL history entry. The old virtual URL will continue to redirect until a new node is created that uses the same URL. In this case, the old virtual URL will be deleted. 
Lorsque le nom d'un objet est modifié, le système prend soin de modifier les alias d'URI auto-générés des noeuds associés et une redirection interne est créée afin d'assurer la continuité du fonctionnement de l'ancien URI. En d'autres termes, plutôt qu'effacer de la base de données l'ancien alias d'URI, le système le convertit en « URL history entry» afin que l'ancien URI virtuel continue à rediriger, et cela jusqu'à ce qu'un nouveau noeud utilisant le même URI soit créé. Dans ce cas, l'ancien URI virtuel sera supprimé.

Note that the internal redirection mechanism is intentionally hidden from the user. You cannot view or manage URL history entries using the administration interface. 
Retenez que le mécanisme interne de redirection est intentionnellement caché à l'utilisateur. Vous ne pouvez donc ni voir ni gérer les entrées de l'historique des URI à partir de l'interface d'administration.

Exemple

Let's say that a folder called "Computers" contains an article called "Monitors", which can be accessed at "http://www.example.com/Computers/Monitors". If you rename the folder to "Hardware", the new URLs for accessing the folder and the article will be "http://www.example.com/Hardware" and "http://www.example.com/Hardware/Monitors". If someone tries to use one of the old URLs, the system will automatically redirect the user to the corresponding new URL. If you then rename the article into "LCD", the following three URLs will redirect the user to "http://www.example.com/Hardware/LCD": 
Supposons qu'un dossier nommé « Computers», et contenant un article nommé « Monitors», soit accessible à partir de l'URI http://www.example.com/Computers/Monitors. Si vous renommez ce dossier « Hardware» alors les nouveaux URI d'accès au dossier et à l'article seront http://www.example.com/Hardware et http://www.example.com/Hardware/Monitors. Par ailleurs, si une personne utilise l'un des anciens URI alors le système la redirigera automatiquement vers le nouvel URI correspondant. Ainsi donc, si vous renommez l'article «LCD», les trois URI suivants redirigeront l'utilisateur vers http://www.example.com/Hardware/LCD:

  • http://www.example.com/Computers/Monitors
  • http://www.example.com/Computers/LCD
  • http://www.example.com/Hardware/Monitors

Manual/user-defined aliases / Alias définis manuellement ou par un utilisateur

The following two types of virtual URLs can be managed using the administration interface: 
Les deux types d'URI virtuels suivants peuvent être gérés via l'interface d'administration  ( Lien pour la version eZ Publish 3.10 ):

  • Global URL aliases / Les alias d'URI globaux
  • Node URL aliases / Les alias d'URI de noeud

The list of global URL aliases  contains all user-defined virtual URLs, except from those that are created for destinations (system URLs) like "content/view/full/node_id", where "node_id" is the ID number of a node. These are called node URL aliases and can be managed separately for individual nodes. 
La liste des alias des URI globaux contient tous les URI virtuels définis par les utilisateurs, exception faite de ceux ayant des cibles (URI système) telle que content/view/full/node_id où node_id représente le numéro de ID d'un noeud. Ces alias d'URI de noeuds peuvent être gérés séparément pour chaque noeud.

While global aliases always start from the root of the site, an alias of a node can either start from the parent node or from the root of the site. This is controlled by the "Relative to parent" flag. 
Alors que les alias globaux commencent toujours à la racine du site, un alias de noeud commence soit au niveau du noeud parent soit à partir de la racine du site. Ceci est contrôlé par le drapeau Relatif au parent.

A node URL alias applies only to the specific node that it references; in other words, a user-defined alias of a node does not apply to the URLs for the node's children. Refer to the example below for more information. 
L'alias d'URI d'un noeud ne s'applique qu'au noeud spécifique qu'il référence. En d'autres termes, un alias de noeud défini par un utilisateur ne s'applique pas aux URI des enfants de ce noeud. Référez-vous à l'exemple ci-dessous pour plus d'information.

Exemple

Let's say that a folder called "Norway" contains two articles that can be accessed using the following URLs: 
Supposons un dossier nommé « Norway» contenant deux articles et accessible par le biais des URI suivants:

  • http://www.example.com/norway/oslo
  • http://www.example.com/norway/bergen

and you have created a new URL alias "Kingdom" for this folder. In this case, the "Norway" folder will be accessible through any of the following URLs: 
et que vous ayez créé, pour ce dossier, le nouvel alias d'URI « Kingdom». Le dossier « Norway» devient donc accessible via l'une ou l'autre des URI suivants:

  • http://www.example.com/norway
  • http://www.example.com/kingdom

However, the following two URLs will bring up a "Module not found" error: 
Alors que les deux URI ci-dessous produisent le message d'erreur « Module not found»:

  • http://www.example.com/kingdom/oslo
  • http://www.example.com/kingdom/bergen

Wildcard based URL forwarding / Redirection d'URI basée sur les caractères génériques

:
Ce paragraphe ne concerne que les versions 4 de  eZ Publish

eZ Publish supports wildcard based URL forwarding. This means that you can create a URL alias that contains one or more asterisks (*) and the system will automatically replace the corresponding parts in URLs according to the destination URL specified. For example, you can create a URL alias called "pictures/*/*" and specify "media/images/{1}/{2}" as a destination. In this case, a URL like "http://www.example.com/pictures/home/photo/" will load "http://www.example.com/media/images/home/photo/". In other words, you will be able to use "pictures" instead of "media/images" in the URLs when accessing content nodes that are located two or more levels beneath the "media/images" node. 
eZ Publish supporte la redirection d'URI basée sur les caractères génériques. Cela signifie que vous pouvez créer des alias d'URI contenant un ou plusieurs asterisks (*) et que le système les remplacera automatiquement par la partie correspondante en fonction de la destination de l'URI spécifié. Vous pouvez créer, par exemple, un alias d'URI nommé pictures/*/* et spécifier media/images/{1}/{2} comme destination. Dans ce cas, un URI de type http://www.example.com/pictures/home/photo/ affichera la cible http://www.example.com/media/images/home/photo/ En d'autres termes, vous pourrez utiliser, dans les URI, pictures à la place de media/images pour accéder aux noeuds de contenu placés 2 niveaux, ou plus, sous le noeud media/images.

It is possible to choose whether an alias will work as a "direct" or "forward" one. In the example above, a "direct" alias means that when someone enters "http://www.example.com/pictures/home/photo/" in the address bar of a browser, the entered address will stay the same while the actual node will be displayed. If the alias is of the "forward" type, the system will redirect to "http://www.example.com/media/images/home/photo/" instead. 
Il est possible de choisir qu'un alias fonctionne comme un alias direct ou redirigé. Dans l'exemple ci-dessus, un alias direct signifie que lorsqu'une personne tape http://www.example.com/pictures/home/photo/ dans la barre d'URI de son navigateur, cette l'adresse reste inchangée lors de l'affichage de l'objet. En revanche, si l'alias est de type redirigé alors le système redirigera l'adresse saisie vers l'adresse http://www.example.com/media/images/home/photo/

Wildcard URL aliases can be managed using the administration interface. 
Les alias d'URI basés sur les caractères génériques peuvent être gérés à partir de l'interface d'administration.

Availability / Disponibilité

An alias is only available for a siteaccess if the language of the alias matches one of the site languages specified for this siteaccess. If a siteaccess is configured to display untranslated content, then aliases in all languages will be available. 
Un alias n'est disponible pour un siteaccess que si la langue de l'alias coïncide avec l'une des langues du site  spécifiées pour ce siteaccess et si ce dernier est configuré pour afficher les contenus non traduits alors les alias seront disponibles quelque soit leur langue.

If an object is always available, the URL aliases for the object's node assignments will be available for all siteaccesses. This is true for both auto-generated and user-defined aliases. 
Si un objet est toujours disponible  alors les alias des URI des noeuds auxquels est assigné cet objet seront disponibles pour tous les siteaccess. Ceci est vrai pour les alias auto-générés et ceux définis par un utilisateur.

Aliases which are always available / Alias toujours disponibles

Some global aliases always need to be available regardless of which languages that are configured for a siteaccess. Because of this, a new flag called "Include in other languages" has been introduced for global aliases. It makes it possible to individually control the availability of the different aliases. 
Certains alias globaux doivent être toujours disponibles indépendamment des langues définies pour un siteaccess. Pour cette raison, un nouveau drapeau nommé Inclure dans d'autres langues a été créé pour les alias globaux et permet de contrôler individuellement la disponibilité des différents alias.

Languages / Langues

Multilingual URL aliases do not control which languages the requested pages will be displayed in. When a virtual URL of a node is requested, the system will figure out the correct language based on the language configuration of the current siteaccess (refer to the example below). 
Les alias d'URI multilingues ne contrôlent pas les langues dans lesquelles seront affichées les pages demandées. Lorsqu'un URI virtuel d'un noeud est demandé, le système recherche la langue adéquate en se basant sur la configuration des langues du siteaccess courant (référez-vous à l'exemple ci-dessous).

Exemple

If you create an article called "Company" and translate it into French, there will be two auto-generated URL aliases called "Company" and "Compagnie". 
Si vous créez un article nommé Company et le traduisez en français, il y aura alors deux alias d'URI auto-générés nommés Company et Compagnie.

Let's say that you have two public siteaccesses called "gb" and "fr" with the following language configuration: 
Supposons que vous ayez deux siteaccess publics nommés gb et fr ayant les configurations de langue suivants:

Siteaccess "gb" Siteaccess "fr"
 [RegionalSettings]
 SiteLanguageList[]
 SiteLanguageList[]=eng-GB
 SiteLanguageList[]=fre-FR
 
 [RegionalSettings]
 SiteLanguageList[]
 SiteLanguageList[]=fre-FR
 SiteLanguageList[]=eng-GB
 

As the table shows, the "gb" siteaccess is configured to use English as the most prioritized language and French as a second one. This means that both "Company" and "Compagnie" aliases will work. The system will bring up the English version of the article when one of the following URLs is requested: 
Comme le montre ce tableau, le siteaccess gb est configuré pour utiliser l'anglais comme langue de plus haute priorité et le français comme seconde langue. Cela signifie que les deux alias Company et Compagnie sont valides et que le système affiche la version anglaise de l'article lorsque les URI suivants sont demandés:

  • http://www.example.com/gb/Company
  • http://www.example.com/gb/Compagnie

Note that if you configure only one language (English) for this siteaccess, the French alias will not be available. 
Retenez que si vous configurez une seule langue (l'anglais) pour ce siteaccess, l'alias français ne sera pas disponible.

While the most prioritized language for the "fr" siteaccess is French, the second one is English. This means that both aliases will work and the corresponding URLs will bring up the French version: 
Le français est la langue de plus haute priorité du siteaccess fr et l'anglais la seconde langue. Cela signifie que les deux alias seront valides et que les URI correspondant afficheront la version française:

  • http://www.example.com/fr/Company
  • http://www.example.com/fr/Compagnie

Character transformation / Transformation de caractères

The multilingual URL aliases feature uses 3 types/methods of character transformation for URLs. Their usage is controlled by the "TransformationGroup" directive located in the [URLTranslator] section of an override for "site.ini". The following table reveals the available transformation methods.
La fonction de gestion des alias d'URI multilingues utilise 3 types/méthodes de transformation de caractères pour les URI. Leur usage est contrôlé par le paramètre TransformationGroup  de la section [URLTranslator] d'un fichier de surcharge de site.ini. Le tableau ci-après présente ces trois méthodes de transformation.

Name / Nom Description
urlalias_compat  This method supports lowercase Latin letters from "a" to "z", digits and underscores in URLs. It provides the same behavior as in eZ Publish 3.9.x and earlier versions. Capital characters are not preserved. 
 Cette méthode autorise les lettres Latin minuscules de a à z, les chiffres et le symbole underscore dans les URI. Elle engendre le même comportement qu'avec les versions 3.9.x et antérieures de eZ Publish. Les majuscules ne sont pas préservées.
 
urlalias  This method supports more characters, but the URLs are still restricted to the ASCII table (with a few exceptions). Capital characters are preserved. 
 Cette méthodes autorise plus de caractères mais les URI sont encore restreints à l'usage de la table des caractères ASCII (à quelques exceptions près). Les majuscules sont préservées.
 
urlalias_iri  This method allows all Unicode characters in the URLs (with a few exceptions). It preserves the original text as much as possible, which results in more user-friendly URLs. Multiple whitespaces are converted to one. Capital characters are preserved. This is the recommended method for both single- and multi-language sites (most effective for sites that are using the UTF-8 character set).  
 Cette méthode autorise l'usage des caractères Unicode dans les URI (à quelques exceptions près). Elle préserve, autant que possible, le texte original ce qui se traduit par des URI plus conviviaux. Les espaces multiples sont convertis en un seul et les majuscules sont préservées. Cette méthode est recommandée pour les sites mono et multilingues (tout en étant plus efficaces pour les sites utilisant le jeu de caractères UTF-8).
 

 

If you use the "urlalias_iri" type of transformation for URL aliases, be aware of the fact that some web browsers use percent encoding for Unicode characters in the URLs. For example, if a visitor enters a URL like "http://www.example.no/Ostehøvel" in the address bar of a browser, it might be automatically converted to "http://www.example.no/Osteh%C3%B8vel". However, this won't prevent eZ Publish from serving the requested web page. Users of Mozilla Firefox can disable this behavior by typing about:config in the browser's address bar to edit the "network.standard-url.escape-utf8" preference. 
Si vous utilisez le type de transformation urlalias_iri pour les alias d'URI, sachez que certains navigateurs utilisent le percent encoding  ( Ndt: aussi appelé Encodage d'URI) pour les caratères Unicode présents dans les URI. Si un visiteur saisi dans la barre d'URI de son navigateur un URI tel que http://www.example.no/Ostehøvel, il est possible qu'il soit automatiquement converti en http://www.example.no/Osteh%C3%B8vel. Cependant, cela n'empêchera pas eZ Publish de servir la page web demandée. Les utilisateurs de Firefox peuvent désactiver ce comportement en tapant about:config  dans la barre d'adresse pour éditer le paramètre network.standard-url.escape-utf8 .

Refer to the following example to learn how the multilingual URL alias feature actually works. 
Référez-vous à l'exemple ci-après pour comprendre le fonctionnement de la fonction des alias d'URI multilingues.

Exemple

Let's say that we have the following site structure: 
Supposons que nous ayons la structure de site suivante:

  • Company (node ID: 10)
    • About us (node ID: 11)
    • Contacts (node ID: 12)

If node 10 ("Company") gets translated into French, it will get the second alias "Compagnie". The structure of the site will look like this: 
Si le noeud 10 ( Company) est traduit en français, alors il sera lié au second alias Compagnie. La structure du site ressemblera alors à ceci:

  • Company|Compagnie (node ID: 10)
    • About us (node ID: 11)
    • Contacts (node ID: 12)

At this point, node 10 can be accessed by using both aliases for all siteaccesses that have both English and French on the list of site languages. If a siteaccess is configured to use English as the most prioritized language, both aliases will bring up the English version. If the most prioritized language is French, both aliases will bring up the French version of the company page for this siteaccess. 
A ce stade, il est possible d'accéder au noeud 10 en utilisant les deux alias et ceci pour tous les siteaccess ayant l'anglais et le français définies dans la liste des langues du site . Si un siteaccess est configuré pour utiliser l'anglais comme langue de plus haute priorité, alors les deux alias afficheront la version anglaise. Si la langue de plus haute priorité est le français, les deux alias afficheront la version française de la page company de ce siteaccess.

The "About" page (node 11) can be accessed using either "Company/About" or "Compagnie/About" as the URL. The "Company/About" alias will work for any siteaccess that has English on the list of site languages. The "Compagnie/About" alias will only work for the siteaccesses that are configured to use both English and French languages. In both cases, it is the English translation that will be displayed (since the object only exists in English). If you edit the "About" page and enable the "Always available" flag, the page will be accessible through both aliases for all siteaccesses regardless of their language configuration (even if a siteaccess does not have English on the list of site languages). 
Il est possible d'accéder à la page About (noeud 11) en utilisant soit l'URI Company/About soit l'URI Compagnie/About. L'alias Company/About fonctionnera pour tout siteaccess ayant l'anglais dans la liste des langues du site. L'alias Compagnie/About ne fonctionnera que pour les siteaccess configurés pour utiliser le français et l'anglais. Dans les deux cas, c'est la traduction anglaise qui sera affichée (tant que l'objet n'existe qu'en anglais). Si vous éditez la page About pour activer le drapeau Toujours disponible , la page deviendra accessible à partir des deux alias et pour tous les siteaccess indépendamment de leur configuration de language (même si un siteaccess ne contient pas l'anglais dans la liste des langues du site).

If the "Contacts" page (node 12) is translated into German, it will get the second alias "Kontakten". In this case, the structure of the site will look like this: 
Si la page Contacts (noeud 12) est traduite en allemand elle sera alors affectée à un second alias Kontakten. Dans ce cas, la structure du site devient:

  • Company|Compagnie (node - id 10)
    • About us (node - id 11)
    • Contacts|Kontakten (node - id 12)

At this point, it will be possible to access the page "Contacts|Kontakten" (node 12) by using one of the four URL aliases listed below. The following table shows which language configuration of a siteaccess is required for each alias to work. 

A ce stade, il sera possible d'accéder à la page Contact|Kontakten (noeud 12) en utilisant l'un des quatre alias listés ci-dessous. Le tableau ci-après montre quelle configuration de langue est nécessaire pour un siteaccess afin que chaque alias fonctionne:

 URL alias
 Alias d'URI
 
 Site languages that must be enabled
 Langues de site devant être disponibles
 
"Company/Contacts" English
"Compagnie/Contacts" English and French
"Company/Kontakten" English and German
"Compagnie/Kontakten" French and German

Commentaires