stevegrunwell / lost-in-translation
Uncover missing translations and localization strings in Laravel applications
Installs: 28 990
Dependents: 0
Suggesters: 0
Security: 0
Stars: 36
Watchers: 5
Forks: 8
Open Issues: 11
Requires (Dev)
- mockery/mockery: ^1.0
- orchestra/testbench: ~3.0
This package is auto-updated.
Last update: 2024-10-29 05:05:00 UTC
README
Lost in Translation is designed to help developers locate instances of localization strings within a Laravel application that haven't been provided translations.
Installation
Lost in Translation can be installed into your Laravel project via Composer:
$ composer require stevegrunwell/lost-in-translation
By default, this will replace the default TranslationServiceProvider
class with a sub-class that adds additional logic when a translation isn't found. To resume default behavior (even in a production environment), see the "Configuration" section below.
Configuration
By default, Lost in Translation will catch missing translations in two ways:
- In environments where
APP_DEBUG
is true, aLostInTranslation\MissingTranslationException
will be found if the application attempts to load a translation that hasn't been defined. - Missing translations will be written to
storage/logs/lost-in-translation.log
.
Either of these can be disabled via the package's configuration, making Lost in Translation safe to use in production. These values can be set using the following environment variables:
- TRANS_LOG_MISSING
- Determines whether or not missing translations should be logged. Default is "true".
- TRANS_ERROR_ON_MISSING
- Should
MissingTranslationException
exceptions be thrown when a translation is missing? Default is "false".
To override package configuration, run the following to copy the configuration to your app's config/
directory:
$ php artisan vendor:publish --provider="LostInTranslation\Providers\TranslationServiceProvider"
This will create a new file in config/lostintranslation.php
, where default values for your application can be set.
Extending
When a missing translation is found, the a LostInTranslation\MissingTranslationFound
event will be dispatched. This event makes it easy to do something (send an email, open a GitHub issue, etc.)when a missing translation is encountered.
First, create a new event listener in your application; in this example, we're using app/Listeners/NotifyOfMissingTranslation.php
:
<?php namespace App\Listeners; use LostInTranslation\Events\MissingTranslationFound; class NotifyOfMissingTranslation { /** * Handle the event. * * @param MissingTranslationFound $event * * @return void */ public function handle(MissingTranslationFound $event) { // Do something with the event. } }
The MissingTranslationFound
event has four public properties of note:
$key
- The translation key that was not found.$replacements
- Any replacements that were passed to the translation call.$locale
- The locale that was being used.$fallback
- The fallback locale, if defined.
Then, in app/Providers/EventServiceProvider.php
, add the following to register NotifyOfMissingTranslation
as a callback when a MissingTranslationFound
event occurs:
/** * The event listener mappings for the application. * * @var array */ protected $listen = [ 'LostInTranslation\Events\MissingTranslationFound' => [ 'App\Listeners\NotifyOfMissingTranslation', ], ];
For more on event listeners, please see the Laravel Events documentation.