mcaskill / slim-polyglot
Slim 3 language resolution middleware
Requires
- php: >=5.5.0
- willdurand/negotiation: ^3.0
Requires (Dev)
- slim/slim: ^3.0
Suggests
None
Provides
None
Conflicts
None
Replaces
None
README
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.