Skip to content
This repository has been archived by the owner on Nov 19, 2023. It is now read-only.
/ Slim-Polyglot Public archive

Slim Framework language resolution middleware

License

Notifications You must be signed in to change notification settings

mcaskill/Slim-Polyglot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

31 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Slim 3 Polyglot

Resolves the response's current language based on the requested URI, the client's preferred language, and the available languages.

Alters the ResponseInterface to assign the Content-Language header.

Uses willdurand/Negotiation to detect and negotiate the client language.

Install

Via Composer:

composer require mcaskill/slim-polyglot

Requires Slim 3.

Usage

use Slim\App;
use McAskill\Slim\Polyglot\Polyglot;

$app = new App();

// Fetch DI Container
$container = $app->getContainer();

// Register Middleware
$app->add(new Polyglot([ 'en', 'fr', 'es' ]));

// Example route with ETag header
$app->get('/foo', function ($request, $response) {
	$language = $response->getHeader('Content-Language');

	// Handle response!
});

$app->run();

The Polyglot middleware can also accept callbacks that are executed after a language is chosen.

use Slim\App;
use McAskill\Slim\Polyglot\Polyglot;

$app = new App();

// Fetch DI Container
$container = $app->getContainer();

// Register Middleware
$app->add(
	new Polyglot([
		'languages' => [ 'en', 'fr', 'es' ],
		'fallbackLanguage' => 'fr',
		// Hooks to call after language is resolved
		'callbacks' => [
			function ($language) use ($container) {
				$container['environment']['language.current'] = $language;
			},
			[ 'MySuperApp', 'set_language' ]
		]
	])
);

// Example route with ETag header
$app->get('/foo', function ($request, $response) {
	$language = $this->environment['language.current'];

	// Handle response!
});

$app->run();

Testing

TBD

Notes

The language code may be formatted as ISO 639-1 alpha-2 (en), ISO 639-3 alpha-3 (msa), or ISO 639-1 alpha-2 combined with an ISO 3166-1 alpha-2 localization (zh-tw).

[ "en", "fr-CA" ]

When giving a list of languages to the Polyglot middleware, the first language is used as the fallback language. When switching to a language that is not in the list of supported languages, the first language is used instead.

Definitions:

  • "language-fallback" — Default language; determined as the first among your supported languages.
  • "language-preferred" — Preferred language(s); determined as the client's localization preferences.
  • "language-current" — Current language; determined as the localization to use based on a cross-reference of the application's supported languages and the client's priority of preferred languages.

License

The MIT License (MIT). Please see the License File for more information.

About

Slim Framework language resolution middleware

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages