Skip to content

Slim Framework language resolution middleware

License

Notifications You must be signed in to change notification settings

kennymuse/Slim-Polyglot

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Slim Framework Polyglot

Build Status

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.0.0 or newer.

Usage

<?php

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.

<?php

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 License File for more information.

About

Slim Framework language resolution middleware

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • PHP 100.0%