⭐ Found this useful? Install from Packagist and consider starring the repository.
Symfony developer tools for YAML translation files: discover configured translation directories, convert flat dot-keys to a nested tree (with structural validation), flatten nested maps back to dot-keys at the file root, sort keys alphabetically, and fill missing keys in a target locale using Google Cloud Translation, DeepL, or LibreTranslate (pluggable MachineTranslatorInterface). The default source locale follows Symfony’s translator / kernel default locale (see docs/CONFIGURATION.md) unless you set nowo_translation_yaml_tools.default_locale.
- Resolves translation paths from
translator.default_pathand fromconfig/packages/**/translation.yaml(framework.translator.default_pathandpaths). - Interactive console flow (arrow keys) to pick domain and locale, with non-interactive
--domain/--localeflags. nowo:translation-yaml:tree— validates that dot-keys can be represented as a tree; on failure prints the conflicting prefix.nowo:translation-yaml:flatten— writes a one-level map with dot-separated keys (inverse of the tree layout).nowo:translation-yaml:sort— recursive alphabetical sort of associative keys.nowo:translation-yaml:fill-missing— merges missing keys into a target locale using the configured machine translator (Google, DeepL, or LibreTranslate); optional--treeoutput with the same validation as the tree command.nowo:translation-yaml:audit— read-only report: tree-safe YAML, alphabetical key order, missing keys vs source locale; compact OK line per domain when everything passes.- Configurable YAML indent (
yaml_tree_indent) for dumps.
- PHP
>=8.1 <8.6 - Symfony
^6.0 || ^7.0 || ^8.0(FrameworkBundle, Console, HttpClient, Yaml, …) - For fill-missing: enable
framework.http_client: true, choosemachine_translatorin config, and setGOOGLE_TRANSLATE_API_KEY(Google) orDEEPL_AUTH_KEY(DeepL) when using those backends; LibreTranslate needs no paid key for open instances (seedocs/CONFIGURATION.md).
composer require --dev nowo-tech/translation-yaml-tools-bundleRegister the bundle in config/bundles.php for dev (Flex recipe does this). See Installation.
FrankenPHP sample apps live under demo/: Web Profiler, Twig Inspector (nowo-tech/twig-inspector-bundle), explicit framework.enabled_locales / translator configuration, two translation directories (translations/ + translations_extra/), and a web page at / that summarizes default locale, enabled locales, YAML paths, missing files per domain, and missing keys vs the default locale. In dev, the demos also enable missing_translation_log (SQLite, event_dispatcher flush strategy, optional Web UI) — see demo/README.md.
make -C demo up-symfony7 # default PORT 8037 — see demo/symfony7/.env.example
make -C demo up-symfony8 # default PORT 8038FrankenPHP worker mode: Supported in production Caddyfile; development uses Caddyfile.dev without worker (see docs/DEMO-FRANKENPHP.md).
- PHP: run
make test-coverageand read the finalGlobal PHP coverage (Lines): …line in the output. - TS/JS: N/A
- Python: N/A
See SECURITY POLICY for supported versions.
This bundle is released under the MIT License. See LICENSE.