ibexa/jms-translation-bundle
JMSTranslationBundle for Symfony provides a web interface for viewing and editing application translations, extracts translation keys from templates and source code, and helps keep message catalogs organized and consistent across locales.
choice/entity labels, repeated sub-fields, and — as of 1.6 — form constraints and invalid_message options) and builds a catalogue of every translation key in the codebase. That is genuinely expensive to build in-house and brittle to maintain. The bundled WebUI for editing translations is the part you would more plausibly build or buy elsewhere.translation:extract against a bundle and diffing the output against committed catalogues gives a concrete "N keys missing for locale X" number — useful input for scope/schedule decisions on a localization push. The --bundle scoping, --domain filtering, --keep-old/keep-empty-strings options, and the "don't overwrite existing translations" behaviour map directly onto a CI gate or a one-off audit.schmittjoh/JMSTranslationBundle. Zero stars and zero dependents on the fork means community signal lives upstream, not here. The decision this informs is "how much do we invest in a vendor-maintained utility we don't control," which is a maintain-vs-replace call, not a feature call.Consider it when all of the following hold:
translation_domain options, choice/entity labels. This is the hardest part to replicate and the strongest reason to borrow rather than build.Look elsewhere when:
One-liner: A developer-and-ops tool that finds every translatable string in a Symfony codebase and produces translator-ready files — it does not translate anything at runtime, and it is not a translation management platform.
For executives (cost/risk framing):
For engineering:
translation:extract command that parses Twig/PHP/forms, respects translation_domain and @Ignore annotations, supports domain and bundle scoping, and dumps to XLIFF/YAML/ICU with stable ids for clean diffs. That's a non-trivial static analysis problem — it's the reason to consider borrowing instead of building.How can I help you explore Laravel packages today?