MultiLocale
, (*1)
Created by Visual Weber, (*2)
Introduction
MultiLocale is a Zend Framework 2 module to automatically detect a locale for your
application. It uses a variety of pluggable strategies to search for a valid
locale. MultiLocale features a default locale, a set of supported locales and
locale aliases., (*3)
MultiLocale supports out of the box several strategies to search for a locale.
Through interfaces, other strategies could be created. The set of default
stragies is:, (*4)
- The HTTP
Accept-Language
header
- A cookie to store the locale between several sessions of one visitor
- A query parameter to easily switch from locale
- The first segment of the path of an uri
- A part of the domain name (either the TLD or a subdomain)
Furthermore, it provides a set of additional localisation features:, (*5)
- A default locale, used as fallback
- A set of aliases, so you can map
.com
as "en-US" in the host name strategy
- Redirect to the right domain/path when a locale is found
- View helpers to create a localised uri or a list of language switches
Installation
Add "visualweber/multilocale" to your composer.json file and update your dependencies. Enable
MultiLocale in your application.config.php
., (*6)
If you do not have a composer.json file in the root of your project, copy the
contents below and put that into a file called composer.json
and save it in
the root of your project:, (*7)
{
"require": {
"visualweber/multilocale": ">=0.1.0,<1.2.0-dev"
}
}
Then execute the following commands in a CLI:, (*8)
curl -s http://getcomposer.org/installer | php
php composer.phar install
Now you should have a vendor
directory, including a visualweber/multilocale
. In your
bootstrap code, make sure you include the vendor/autoload.php
file to properly
load the MultiLocale module., (*9)
Usage
Set your default locale in the configuration:, (*10)
'multi_locale' => array(
'default' => 'nl-NL',
),
Set all your supported locales in the configuration:, (*11)
'multi_locale' => array(
'supported' => array('en-US', 'en-GB'),
),
And enable some strategies. The naming is made via the following list:, (*12)
-
cookie:
MultiLocale\Strategy\CookieStrategy
-
host:
MultiLocale\Strategy\HostStrategy
-
acceptlanguage:
MultiLocale\Strategy\HttpAcceptLanguageStrategy
-
query:
MultiLocale\Strategy\QueryStrategy
-
uripath:
MultiLocale\Strategy\UriPathStrategy
You can enable one or more of them in the strategies
list. Mind the priority
is important! You usually want the acceptlanguage
as last for a fallback:, (*13)
'multi_locale' => array(
'strategies' => array('uripath', 'acceptlanguage'),
),
At this moment, the locale should be detected. The locale is stored inside php's
Locale
object. Retrieve the locale with Locale::getDefault()
. This is also
automated inside Zend Framework 2 translator objects and i18n view helpers (so
you do not need to set the locale yourself there)., (*14)
Set the locale's language in html
It is common to provide the html with the used locale. This can be set for example
in the html
tag:, (*15)
<html lang="en">
Inject the detected language here with the following code:, (*16)
<html lang="<?= Locale::getPrimaryLanguage(Locale::getDefault())?>">
Create a list of available locales
T.B.D, (*17)
Read more about usage and the configuration of all the strategies in the
documentation., (*18)