kkomelin/laravel-translatable-string-exporter
A Laravel package that scans your app for translatable strings and exports them into ready-to-edit language files, streamlining localization workflows with an Artisan command and support for common translation formats.
Architecture fit. laravel-translatable-string-exporter remains a development-time tooling package, not a runtime dependency. It registers a single Artisan command through Laravel’s package discovery mechanism and scans configured source paths for translation helper calls (__(), trans(), @lang, etc.), writing discovered keys into Laravel’s native language files (resources/lang/*.php, lang/*.json, or a PHP array). Because it produces artifacts that Laravel’s built-in localizer already consumes, it composes cleanly with the framework’s localization layer and introduces essentially no new runtime surface area. Release 1.26.0 does not change this: it is a compatibility-only release that widens the supported framework matrix. The architectural footprint stays low — one dev dependency, one command, and generated files that remain plain Laravel language resources.
Integration feasibility. High, and materially improved by 1.26.0. Installation is a single Composer --dev require plus optional config publish; the command runs in local and CI environments with no external services, credentials, or network access. The package supports both PHP-array and JSON export strategies, configurable search paths, configurable extraction functions, sorting, and key filtering — enough knobs to fit most Laravel codebases without custom code. The new Laravel 13 support removes what was previously the single largest open compatibility question for teams on or approaching the newest major, and means the tool can be adopted once and carried across at least one additional framework upgrade without a fork or replacement. It remains a strong fit for teams that keep translation source files in version control and use a translation-management platform as a downstream consumer rather than the source of truth.
Technical risk. Moderate, trending down. Key risks are:
Key questions.
Stack fit. The package targets Laravel applications using the framework’s native localization APIs. It is agnostic to the frontend stack and to the database, and works equally for monoliths, modular monoliths, and Laravel packages that ship their own language files, provided those paths are added to the config. It has no opinion on deployment topology, so it fits containerized, serverless, or traditional hosting without change. With Laravel 13 now in the support matrix, the tool spans the full range of framework versions a typical multi-service estate is likely to run during a transition year, which simplifies standardization on a single extraction tool across teams on different upgrade timelines.
Migration path.
lang/resources/lang files and record which are hand-maintained versus generated.Compatibility considerations.
resources/lang versus lang directory convention (Laravel 9+ moved the default path); confirm nothing changed in how 1.26.0 resolves default paths..gitattributes/.gitignore policy is explicit — generated files should be either committed or ignored, not both.Sequencing.
Maintenance. Low ongoing engineering cost, and the 1.26.0 release reduces the main long-tail concern. The package is a dev dependency and does not affect production artifacts, container images, or runtime performance. Maintenance effort concentrates on the config file and on the review of generated diffs. Because support now extends to Laravel 13, the dependency is unlikely to become an upgrade blocker during the next framework cycle — the historical failure mode for tooling packages of this size. Dependency hygiene still applies: track version bumps alongside Laravel/PHP upgrades and keep a documented fallback (manual extraction, a fork, or an alternative tool), but the expected trigger for invoking that fallback has moved further out.
Support. Support burden remains limited to developer onboarding and CI troubleshooting. There is no on-call or production support dimension. Because the tool runs only in local and CI contexts, failures surface as build or workflow issues rather than customer-facing incidents. Teams already familiar with Laravel’s __() helper need minimal explanation. The one new support scenario is a heterogeneous estate mid-upgrade: some services on the new major, some not. Running a single pinned package version across all of them is preferable to per-service pins, and 1.26.0 makes that feasible.
Scaling. The command’s cost scales linearly with scanned file count. For large monorepos, configure scoped paths and exclude vendor, node_modules, build output, and generated directories. On the output side, a single monolithic JSON language file can become a merge-conflict hotspot as the contributor count grows; splitting strings into namespaced/per-domain PHP files, or treating the generated file as a build artifact, mitigates this. The package itself places no load on application traffic or infrastructure. None of this changes with 1.26.0 — the release adds no new scanning or output behavior.
Failure modes.
Ramp-up. Very low. A developer can install, configure, and run the command within an hour. The meaningful ramp-up is organizational rather than technical: agreeing on whether generated files are committed, how translations flow to and from the TMS, and whether CI enforces drift. Those decisions should be made before rollout, not after, since retrofitting governance onto an already-generated language tree is significantly more expensive. The 1.26.0 release does not add configuration surface or new concepts, so onboarding material and internal runbooks written against 1.25.x remain valid.
How can I help you explore Laravel packages today?