nowo-tech/translation-yaml-tools-bundle

Symfony console tools for YAML translations: nested tree conversion, key sorting, and machine translation for missing keys (Google, DeepL, LibreTranslate; pluggable).

Maintainers

Package info

github.com/nowo-tech/TranslationYamlToolsBundle

Documentation

Type:symfony-bundle

pkg:composer/nowo-tech/translation-yaml-tools-bundle

Statistics

Installs: 883

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

v1.0.0 2026-06-30 11:41 UTC

README

CI Packagist Version Packagist Downloads License PHP Symfony

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.

Features

  • Resolves translation paths from translator.default_path and from config/packages/**/translation.yaml (framework.translator.default_path and paths).
  • Interactive console flow (arrow keys) to pick domain; for tree, flatten, and sort, --locale is optional (omit to process every locale for that domain). Non-interactive: --domain alone runs all locales; --locale limits to one file. Other commands (e.g. fill-missing) keep their own locale / target options.
  • nowo:translation-yaml:tree — validates that dot-keys can be represented as a nested tree; on failure prints the conflicting prefix. Optional --fix-leaf-prefix renames blocking leaves (suffix configurable via yaml_tree_leaf_prefix_suffix, default index).
  • 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 --tree output 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) and leaf-prefix suffix (yaml_tree_leaf_prefix_suffix for tree --fix-leaf-prefix) for dumps / renames.

Requirements

  • PHP >=8.2 <8.6 (Symfony 8.x apps need PHP 8.4+)
  • Symfony ^7.0 || ^8.0 (FrameworkBundle, Console, HttpClient, Yaml, …)
  • For fill-missing: enable framework.http_client: true, choose machine_translator in config, and set GOOGLE_TRANSLATE_API_KEY (Google) or DEEPL_AUTH_KEY (DeepL) when using those backends; LibreTranslate needs no paid key for open instances (see docs/CONFIGURATION.md).

Quick install

composer require --dev nowo-tech/translation-yaml-tools-bundle

Register the bundle in config/bundles.php for dev (Flex recipe does this). See Installation.

Demos (Symfony 7 & 8)

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 8038

FrankenPHP worker mode: Supported in production Caddyfile; development uses Caddyfile.dev without worker (see docs/DEMO-FRANKENPHP.md).

Documentation

Additional documentation

Tests and coverage

  • PHP: run make test-coverage and read the final Global PHP coverage (Lines): … line in the output (1.0.0+ maintains 100% line coverage on src/ and PHPStan level 8 on src/ + tests/; see docs/CHANGELOG.md).
  • TS/JS: N/A
  • Python: N/A

Version information

1.0.0 is the first stable 1.x release (PHP 8.2+, Symfony 7+ / 8.x). See UPGRADING when moving from 0.4.x or earlier.

See SECURITY POLICY for supported versions.

License

This bundle is released under the MIT License. See LICENSE.