Plugin uses i18n functionality to translate route patterns. E.g. /group/view becames /gruppe/sicht for de culture and /grupa/widok in pl.
It has very good effect on indexing pages by search engines (SEO) for multilingual sites.

Developers

License

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is furnished
to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

Release 1.0.0 - 25/08/2009

zxI18nRoutingPlugin

Plugin uses i18n functionality to translate route patterns. E.g. /group/view becames /gruppe/sicht for de culture and /grupa/widok in pl.
It has very good effect on indexing pages by search engines (SEO) for multilingual sites.

One of the main goal of creating this plugin was to introduce these feature without any time consuming modifications in existing projects.
It doesn't need any changes in existing routes. Plugin installation limits to factories.yml modification and creating XLIFF translation files for chosen languages.
Thanks to it you will be able to translate other plugins default patterns language to what you need without plugins routes modification.

Plugin is unit and functional tested and works with each kind of routes and routes collections (see SVN for it). Maybe it would be included in core symfony ;).

Content

zxPatternI18nRouting class which extends sfPatternRouting

app:zx-routes task which is extended version of app:routes to show plugin specific generated routes

app:zx-routes-duplicates task which looks for duplicated routes (with the same pattern), useful for sites with many routes

Installation

Install the plugin

$ symfony plugin:install zxI18nRoutingPlugin

Change routing class in factories.yml from sfPatternRouting to zxPatternI18nRouting and add two new params use_cultures (default array()) and culture_into_url (default false)

Create XLIFF files named routing.pl.xml, routing.de.xml (depends what you need) and place it in i18n directory of your app. (e.g. /apps/frontend/i18n)

Turn on sf_i18n in settings.yml

Clear the cache

$ symfony cache:clear

How plugin works

For each route defined in application and other plugins, zxI18nroutingPlugin automatically creates additional routes for chosen cultures if translation is possible and stores them in cache.
Then if you use url_for based functions the translated route is automatically chosen. When visitor clicks such link, page opens in desired language (sf_culture is set).

Example: baseing on above installation settings.
You define group_view_route with /group/view pattern. Plugin automatically creates two routes more with
patterns /grupa/widok for pl and /gruppe/sicht for de. Right now wherever you use group_view_route it changes depending on current user culture. When culture
is de, then link is /gruppe/sicht. When culture is pl, then link is /grupa/widok. For any other languages it is default pattern /group/view.

Configuration

If plugin is run with default params it behaves exactly as sfPatternRouting.

There are two configuration parameters which you can change:

use_cultures - is an array of cultures of your site, plugin looks for translation files for these cultures. If translation is not possible, default pattern is used.

culture_into_url - if set to true, the :sf_culture parameter is placed on the beginning of each automatically created route (except for patterns which
already contains :sf_culture).

Example 1: culture_into_url is true and use_cultures is [pl, de]

You define group_view_route with /group/view pattern. Plugin automatically creates three routes more with
patterns /pl/grupa/widok for pl and /de/gruppe/sicht for de and /:sf_culture/group/view for other languages.

Example 2: culture_into_url is true and use_cultures is []

You define group_view_route with /group/view pattern. Plugin automatically creates one route more with
pattern /:sf_culture/group/view. If you set sf_culture for route group_view_route, then that additional pattern will be used.

IMPORTANT! When culture_into_url is false check out if translation for different languages gives different patterns, because only one of them will be working.

Example: if translation of /test/route in pl and de gives /testy/routed for both, a page would open with pl or de (depends on cultures order in use_cultures array).
Use app:zx-routes-duplicates to find conflicts

Case studies

Setup:

We defined in factories.yml use_cultures as [en, de, pl, fr]

We got only translation files for de and pl placed in i18n folder

Route xz_test_route is /group/view

Current culture is pl

Default user culture is en

Examples of use:

link_to('','xz_test_route') gives:

/grupa/widok (case 1 when cultures_into_url is false)

/pl/grupa/widok (case 2 when cultures_into_url is true)

both open page with culture pl

link_to('','xz_test_route',array('sf_culture'=>'pl')) the same as first example