leaseweb / gettext-translation-bundle
Easy to use and native (faster) gettext translation support
Installs: 59 567
Dependents: 0
Suggesters: 0
Security: 0
Stars: 24
Watchers: 23
Forks: 8
Type:symfony-bundle
Requires
- php: >=5.3.2
- symfony/framework-bundle: ^2.1|^3.0
- symfony/process: ^2.5|^3.0
- twig/twig: ~1.12
This package is not auto-updated.
Last update: 2024-11-09 02:46:29 UTC
README
The LswGettextTranslationBundle adds gettext translation support to your Symfony4 application. It is aimed to be faster and more user-friendly than the built-in translation support of Symfony4.
Requirements
- PHP with gettext support
- Symfony 4+
Installation
Installation is broken down in the following steps:
- Download LswGettextTranslationBundle using composer
- Enable the Bundle
- Install the needed locales
- Set the language in your application
Step 1: Download LswGettextTranslationBundle using composer
Add LswGettextTranslationBundle in your composer.json:
{ "require": { "leaseweb/gettext-translation-bundle": "*", ... } }
Now tell composer to download the bundle by running the command:
$ php composer.phar update leaseweb/gettext-translation-bundle
Composer will install the bundle to your project's vendor/leaseweb
directory.
Step 2: Enable the bundle
Enable the bundle in the kernel:
<?php // app/AppKernel.php public function registerBundles() { $bundles = array( // ... new Lsw\GettextTranslationBundle\LswGettextTranslationBundle(), ); }
Step 3: Install the needed locales
As described here you can list the locales that you have installed on your (Linux) system with the command 'locale -a'. If you want to support Dutch, English and German you should execute the following commands:
sudo locale-gen nl_NL.UTF-8
sudo locale-gen en_US.UTF-8
sudo locale-gen de_DE.UTF-8
More language codes can be found here
Step 4: Set the language in your application
Use the standard $request->setLocale('en');
to set the locale in your application.
Edit the following file to define 2 letter shortcuts for the locales (this is recommended):
Lsw/GettextTranslationBundle/Resources/config/config.yml
Usage
Usage is broken down in the following steps:
- Use gettext (convenience) functions in your code
- Extract the strings from a bundle that need to translated by gettext (.pot file)
- (First time only) Initialize the languages you want to support in the bundle (.po file)
- (Skip first time) Update the language (.po) files with the new gettext template (.pot) file
- Translate the language files using the excellent Poedit application
- Combine all translations into one file (.mo file)
Step 1: Use gettext (convenience) functions in your code
You can use the following functions:
_($text)
Shortcut for gettext_n($textSingular,$textPlural,$n)
Shortcut for ngettext__($format,$args,...)
Shortcut forsprintf(_($format),$args,...))
__n($formatSingular,$formatPlural,$n,$args,...)
Shortcut forsprintf(_n($formatSingular,$formatPlural,$n),$args,...))
Step 2: Extract the strings from a bundle
Use the ./app/console gettext:bundle:extract
command to search a bundle for translation
strings and to store them into a gettext template (.pot) file.
Step 3: (First time only) Initialize the languages you want to support
Use the ./app/console gettext:bundle:initialize
command to copy the gettext template (.pot)
file into the language specific (.po) files.
Step 4: (Skip first time) Update the gettext language (.po) files with the template
Use the Poedit application to load a gettext language (.po) file. Choose the "Update from template" option and point Poedit to the generated gettext template (.pot) file. Review and confirm the changes.
Step 5: Translate the language files using the excellent Poedit application
Use the Poedit application to load a gettext language (.po) file. Translate all missing strings (shown in blue) and check and correct all fuzzy translated strings (shown in yellow).
Step 6: Combine all translation
Use the ./app/console gettext:combine
command combine all gettext language (.po) files into one
compiled gettext (.mo) file.