mindtwo / laravel-missing-translations
Browser-based viewer and database collector for missing Laravel translation keys.
Package info
github.com/mindtwo/laravel-missing-translations
pkg:composer/mindtwo/laravel-missing-translations
Requires
- php: ^8.2||^8.3||^8.4
- laravel/framework: ^10.0||^11.0||^12.0||^13.0
Requires (Dev)
- larastan/larastan: ^2.9||^3.0
- laravel/pint: ^1.14
- nunomaduro/collision: ^7.10.0||^8.1.1
- orchestra/testbench: ^8.22.0||^9.0.0||^10.0.0||^11.0.0
- pestphp/pest: ^3.0||^4.0
- pestphp/pest-plugin-arch: ^3.0||^4.0
- pestphp/pest-plugin-laravel: ^3.0||^4.0
- phpstan/extension-installer: ^1.3||^2.0
- phpstan/phpstan-deprecation-rules: ^1.1||^2.0
- phpstan/phpstan-phpunit: ^1.3||^2.0
README
mindtwo/laravel-missing-translations lists every translation key your
application has used together with the value for every configured locale.
Missing keys are highlighted, optionally persisted to the database via
Lang::handleMissingKeysUsing(), and discoverable through a single
inspection route.
The package ships two interchangeable repositories:
- A file repository that diffs every translation file in the configured main locale against the comparison locales.
- A database repository backed by a
missing_translationstable, populated automatically as the application runs.
Requirements
- PHP 8.2, 8.3, or 8.4
- Laravel 10, 11, 12, or 13
Laravel 10 is included in the composer constraints for legacy applications, but is not exercised in CI:
pestphp/pest-plugin-laravelv3+ dropped Laravel 10. New projects should use Laravel 11 or later.
Installation
composer require mindtwo/laravel-missing-translations
Publish the configuration file (and views, if you intend to customise them):
php artisan vendor:publish --tag=missing-translations-config php artisan vendor:publish --tag=missing-translations-views
Run the package migration to enable the database repository:
php artisan migrate
Configuration
config/missing-translations.php exposes the following options:
| Key | Description |
|---|---|
allowed_environments |
Environments where the inspection route is registered. |
main_locale |
Locale used as the source of truth when collecting diffs. |
locales |
Comparison locales. |
log_missing_keys |
Persist keys reported by Lang::handleMissingKeysUsing(). |
authorization.gate |
false to disable, true for the default viewMissingTranslations gate, or a custom gate name. |
authorization.middleware |
Middleware applied to the inspection route. |
route.prefix |
URL prefix for the inspection route. Defaults to missing-translations. |
repositories.default |
Default repository (file or database). |
repositories.sources |
Map of repository name → implementation class. |
Usage
Visit /<prefix> (defaults to /missing-translations) in an allowed
environment to render the translation table. Query parameters:
?only_missing=1— show only keys that are missing in at least one locale.?exclude[]=de&exclude[]=fr— hide one or more locales.?repo=database— switch to the database repository for the current request.
Collecting missing keys manually
php artisan m2:collect-missing-translations --locales=de --locales=fr php artisan m2:collect-missing-translations --dry-run
Resolving a repository in code
use mindtwo\LaravelMissingTranslations\Services\MissingTranslations; $missing = app(MissingTranslations::class) ->repository('file') ->getMissingTranslationsForLocale('de');
Testing
composer test
composer analyse
composer lint
composer format
Changelog
See CHANGELOG for a list of recent changes.
Contributing
See CONTRIBUTING for details.
Security
If you discover a security issue, please email info@mindtwo.de instead of
opening a public issue.
Credits
License
The MIT License (MIT). See LICENSE.md.