2017 © Pedro Peláez

library locale

Automatic detection of locales for Zend Framework



Automatic detection of locales for Zend Framework

  • Tuesday, December 12, 2017
  • by bushbaby
  • Repository
  • 14 Watchers
  • 64 Stars
  • 35,388 Installations
  • PHP
  • 1 Dependents
  • 1 Suggesters
  • 37 Forks
  • 10 Open issues
  • 18 Versions
  • 4 % Grown



Build Status Latest Stable Version Coverage Status, (*1)

Created by Jurian Sluiman, (*2)


SlmLocale is a Laminas module to automatically detect a locale for your application. It uses a variety of pluggable strategies to search for a valid locale. SlmLocale features a default locale, a set of supported locales and locale aliases., (*3)

SlmLocale 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)

  1. The HTTP Accept-Language header
  2. A cookie to store the locale between several sessions of one visitor
  3. A query parameter to easily switch from locale
  4. The first segment of the path of an uri
  5. A part of the domain name (either the TLD or a subdomain)

Furthermore, it provides a set of additional localisation features:, (*5)

  1. A default locale, used as fallback
  2. A set of aliases, so you can map .com as "en-US" in the host name strategy
  3. Redirect to the right domain/path when a locale is found
  4. View helpers to create a localised uri or a list of language switches


Add "slm/locale" to your composer.json file and update your dependencies. Enable SlmLocale 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": {
        "slm/locale": ">=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 slm/locale. In your bootstrap code, make sure you include the vendor/autoload.php file to properly load the SlmLocale module., (*9)


Set your default locale in the configuration:, (*10)

'slm_locale' => [
    'default' => 'nl-NL',

Set all your supported locales in the configuration:, (*11)

'slm_locale' => [
    'supported' => ['en-US', 'en-GB'],

And enable some strategies. The naming is made via the following list:, (*12)

  • cookie: SlmLocale\Strategy\CookieStrategy
  • host: SlmLocale\Strategy\HostStrategy
  • acceptlanguage: SlmLocale\Strategy\HttpAcceptLanguageStrategy
  • query: SlmLocale\Strategy\QueryStrategy
  • uripath: SlmLocale\Strategy\UriPathStrategy
  • asset: SlmLocale\Strategy\AssetStrategy

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)

'slm_locale' => [
    'strategies' => ['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 Laminas 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="<?= $this->primaryLanguage()?>">

Disable UriPathStrategy in PHPUNIT

This is necessary (at the moment) if you want to use this->dispatch('my/uri'); in your AbstractHttpControllerTestCase unit tests. Otherwise, if you check for responseCode you will get 302 where it should be 200., (*17)

Example:, (*18)

$this->assertResponseStatusCode(200); // this will be 302 instead of 200

$this->assertResponseStatusCode(200); // this will be 302 instead of 200

To fix add the following to your phpunit config., (*19)

phpunit.xml:, (*20)

        <server name="DISABLE_URIPATHSTRATEGY" value="true" />

Or set $_SERVER['DISABLE_URIPATHSTRATEGY'] = true; in your bootstrap file of phpunit., (*21)

Create a list of available locales

T.B.D, (*22)

Read more about usage and the configuration of all the strategies in the documentation., (*23)

The Versions

19/05 2013

v0.0.1 https://github.com/juriansluiman/SlmLocale

Automatic detection of locales for Zend Framework 2

  Sources   Download

The Requires


zf2 locale i18n

05/11 2012


dev-feature/view-helpers https://github.com/juriansluiman/SlmLocale

Automatic detection of locales for Zend Framework 2

  Sources   Download

The Requires


zf2 locale i18n