The Transator package provides tools to internationalize Web applications with support for multilingual data and an integration with Symfony's Translation component.
composer require charcoal/translator
For Charcoal projects, the service provider can be registered from your configuration file:
{
"service_providers": {
"charcoal/translator/service-provider/translator": {}
}
}Charcoal\Translator\Translation
The Translation Object holds the translation data for a given string in all available languages / locales.
// Get a translation object from the Translator $translation = $container['translator']->translation([ 'en' => 'Hello World', 'fr' => 'Bonjour' ]); // If cast to string, the default language will be used. echo $translation; // Use ArrayAccess to get (or set) a translated value. echo $translation['fr']; $translation['fr'] => 'Bonjour le monde'; // To loop through all translations: foreach ($translation->data() as $lang => $translatedValue) { // ... }
Charcoal\Translator\Translator
Charcoal's Translator extends Symfony's Translator to also provide two new translation methods (translation($val) and translator($val)) which can both accept mixed arguments to return either a Translation object, in the case of translation() or a string, in the case of translate($val).
Charcoal\Translator\LocalesManager
The Locales Manager is used to manage available locales / languages and keep track of current language.
Charcoal\Translator\Script\TranslationParserScript
The Parser Script is used to scrape files that contain translatable content. Add the following route to your application configuration:
"scripts": { "charcoal/translator/parse": { "ident": "charcoal/translator/script/translation-parser" } }
The TranslatorServiceProvider provides services and options for translating your application into different languages.
- locales/config: Configuration object for defining the available languages, fallbacks, and defaults.
- locales/default-language: Default language of the application, optionally the navigator's preferred language.
- locales/browser-language: Accepted language from the navigator.
- locales/fallback-languages: List of fallback language codes for the translator.
- locales/available-languages: List of language codes from the available locales.
- locales/languages: List of available language structures of the application.
- translator/config: Configuration object for translation service, message catalogs, and catalog loaders.
- translator/translations: Dictionary of additional translations grouped by domain and locale.
- locales/manager: An instance of
LocalesManager, used for handling available languages, their definitions, the default language, and tracks the current language. - translator: An instance of
Translator, that is used for translation. - translator/message-selector: An instance of
Symfony\Component\Translation\MessageSelector. - translator/loader/*: Instances of the translation
Symfony\Component\Translation\Loader\LoaderInterface.
Here is an example of configuration:
"locales": { "languages": { "de": {}, "en": {}, "es": { "active": false }, "fr": {} }, "default_language": "fr", "fallback_languages": [ "en", "fr" ], "auto_detect": true }, "translator": { "loaders": [ "xliff", "json", "php" ], "paths": [ "translations/", "vendor/charcoal/app/translations/" ], "debug": false, "cache_dir": "cache/translation/", "translations": { "messages": { "de": { "hello": "Hallo {{ name }}", "goodbye": "Auf Wiedersehen!" }, "en": { "hello": "Hello {{ name }}", "goodbye": "Goodbye!" }, "es": { "hello": "Hallo {{ name }}", "goodbye": "Adios!" }, "fr": { "hello": "Bonjour {{ name }}", "goodbye": "Au revoir!" } }, "admin": { "fr": { "Save": "Enregistrer" } } } }
The LanguageMiddleware is available for PSR-7 applications that support middleware. The middleware detects the preferred language using the Accept-Language HTTP header, the URI path, query string, or host.
If you are using charcoal/app, you can add the middleware via the application configset:
"middlewares": { "charcoal/translator/middleware/language": { "active": true, "use_params": true, "param_key": "hl" } }
Otherwise, with Slim, for example:
use Charcoal\Translator\Middleware\LanguageMiddleware; use Slim\App; $app = new App(); // Register middleware $app->add(new LanguageMiddleware([ 'default_language' => 'fr', 'use_params' => true, 'param_key' => 'hl', ]));
The middleware comes with a set of default options which can be individually overridden.
| Setting | Type | Default | Description |
|---|---|---|---|
| active | boolean |
FALSE |
Whether to enable or disable the middleware (charcoal/app only). |
| default_language | string |
null |
The default language to use if no other languages is choosen. |
| browser_language | string |
null |
The client's preferred language (Accept-Language). |
| use_browser | boolean |
true |
Whether to use browser_language as the default language. |
| use_path | boolean |
true |
Whether to lookup the HTTP request's URI path for a language code. |
| excluded_path | `string | array` | ^/admin\b |
| path_regexp | `string | array` | ^/([a-z]{2})\b |
| use_params | boolean |
false |
Whether to lookup the HTTP request's URI query string for a language code. |
| param_key | `string | array` | current_language |
| use_session | boolean |
true |
Whether to lookup the client's PHP session for a preferred language. |
| session_key | `string | array` | current_language |
| use_host | boolean |
false |
Whether to lookup the server host for a language code. |
| host_map | `string | array` | [] |
| set_locale | boolean |
true |
Whether to set the environment's locale. |
Charcoal\Translator\TranslatorAwareTrait
The TranslatorAwareTrait is offered as convenience to avoid duplicate / boilerplate code. It simply sets and gets a Translator service property.
Set with setTranslator() and get with translator(). Both are protected method. (This trait has no public interface.)