drago-ex / translator
Lightweight translator for Nette Framework using NEON files, supporting global and module-specific translations.
Installs: 2 659
Dependents: 5
Suggesters: 0
Security: 0
Stars: 2
Watchers: 1
Forks: 0
Open Issues: 0
pkg:composer/drago-ex/translator
Requires
- php: >=8.3 <9
- nette/application: ^3.1
- nette/caching: ^3.4
- nette/di: ^3.1
- nette/utils: ^4.0
- tracy/tracy: ^2.10
Requires (Dev)
- nette/bootstrap: ^3.1
- nette/tester: ^2.5
- phpstan/phpstan-nette: ^1.2.9
README
Lightweight translator for Nette Framework using NEON files, supporting global and module-specific translations.
Requirements
- PHP >= 8.3
- Nette Framework
- Composer
Installation
composer require drago-ex/translator
Extension registration
Register the DI extension in your NEON configuration.
extensions: translator: Drago\Localization\DI\TranslatorExtension(%appDir%, %tempDir%)
Optional configuration
translator: autoFinder: false translateDirs: - %appDir%/First/Translate - %appDir%/Second/Translate
Translator Behavior
- All directories listed in translateDirs are loaded in order.
- Later directories override translations from earlier ones.
- If autoFinder is enabled, the entire application directory is scanned for NEON files.
Translation files must be named by language code:
cs.neon
en.neon
Translation File Format
"Hello, world!": "Hello, world!"
Using Translator in Presenters
Add the TranslatorAdapter trait to your presenter:
use Drago\Localization\TranslatorAdapter;
The trait provides:
- persistent language parameter ($lang)
- automatic translator initialization
- template integration
Accessing the Current Language
You can access the currently set language using the following property:
$this->lang;
Getting Translator Instance
To get the initialized translator for the current language:
$this->getTranslator()
Using Translations in Templates
The translator is automatically registered in templates. Example usage in Latte:
{_"Hello, world!"} {$label|translate}
Using Translator in Forms
To enable translations in forms, set the translator explicitly:
$form->setTranslator($this->getTranslator());
Routing for Language Switching
To support language prefixes, configure your routes accordingly:
$router->addRoute('[<lang=en cs|en>/]<presenter>/<action>', 'Presenter:action');
Switching Languages in Templates
You can switch languages by passing the lang parameter:
<a n:href="this, lang => cs">Czech</a> <a n:href="this, lang => en">English</a>
Notes
- Translator loads translations lazily on first use
- Translations are loaded once per request
- Missing keys return the original message