menencia/locale-detector

There is no license information available for the latest version (0.1.2) of this package.

Locale detector

This package's canonical repository appears to be gone and the package has been frozen as a result.

0.1.2 2017-12-06 16:15 UTC

This package is not auto-updated.

Last update: 2021-08-01 23:56:49 UTC


README

Using this module, you can then get the locale detected for the user, based on what you want first.

To call this module :

$localeDetector = new Menencia\LocaleDetector\LocaleDetector();

This is the actual strategy order, but you can reorder this array or remove some items :

$localeDetector->setOrder(['TLD', 'Cookie', 'Header', 'NSession']); // optional
  • TLD (Top-level domain): determining locale from $_SERVER['SERVER_NAME']
  • Cookie: determining locale from $_COOKIE[$field]
  • Header: determining locale from $_SERVER['HTTP_ACCEPT_LANGUAGE']
  • NSession (Session): determining locale from $_SESSION[$field]
  • IP (IP Address): determining locale from $_SERVER['REMOTE_ADDR']
  • By default, determining locale from Locale::getDefault()

By default, $field = 'lang';. This is how you can change that :

Cookie::$fieldName = 'newFieldName';
NSession::$fieldName = 'newFieldName';

Then, you just have to call the detect method and retrieve the locale :

$locale = $localeDetector->detect();

Advanced strategies

You have the possibility to custom your strategy like this :

$localeDetector->addCallback('MyCallback', function($a){
    return collator_create($a);
}, ['fr-FR']);

$localeDetector->setOrder(['MyCallback']);

Maybe you want to extends the Strategy interface :

<?php

class MyStrategy implements IStrategy
{

    public function getName() {
        return 'MyStrategy';
    }

    public function detect() {
        return collator_create('fr-FR');
    }

}

Then, you add to register :

$localeDetector->registerStrategy(new MyStrategy);

$localeDetector->setOrder(['MyStrategy']);