This package scans your projects for translations and integrates them into spatie translation loader.
You can install the package via composer:
composer require be-interactive/laravel-translation-scanner
You can optionally publish the config file like this:
php artisan vendor:publish --provider="BeInteractive\TranslationScanner\TranslationScannerServiceProvider" --tag="translation-scanner-config"
This package uses spatie/laravel-translation-loader
, this means you will need to publish both their migrations and ours, in that order:
# In this order
php artisan vendor:publish --provider="Spatie\TranslationLoader\TranslationServiceProvider" --tag="translation-loader-migrations"
php artisan vendor:publish --provider="BeInteractive\TranslationScanner\TranslationScannerServiceProvider" --tag="translation-scanner-migrations"
After this you can run the migration:
php artisan migrate
This package implements a bridge-like architecture to scan your projects for translations.
We do this by using Scanners
, each of these have their own logic to scan for translations.
By default, we ship with the following Scanners
:
- Laravel translation files (scans in the laravel
lang
folder). - Laravel scanner (scans for
trans
and__
translations). - Filament scanner (scans for everything within
make::
functions). - Regex scanner (allows you to implement a custom regex to scan your projects).
Actual usage of these looks like this:
\BeInteractive\TranslationScanner\Facades\TranslationScanner::laravel()
->filament()
->regex('/test/')
// This stores all language lines
->store();
You can add options to further improve your scan based on your needs:
\BeInteractive\TranslationScanner\Facades\TranslationScanner::filament()->scanFiles();
By default, the store()
function will also delete records from the language_lines table that were not found during that scan.
This might not be what you want so you can disble it:
\BeInteractive\TranslationScanner\TranslationScanner::laravel()
->store(deleteLinesThatWereNotScanned: false);
Sometimes you may want to execute your very own logic in handling the scanned language lines. To do this you can do the following:
\BeInteractive\TranslationScanner\TranslationScanner::laravel()
->getLanguageLines(); // Returns an array of all scanned translations
You can also create your own scanners to use your own scanning logic. A scanner might look something like this:
use BeInteractive\TranslationScanner\Contracts\Scanner;
class MyCustomScanner implements Scanner
{
/**
* @return array{group: string, key: string, text: array{string, string}}
*/
public function getLanguageLines(): array
{
return [
[ 'group' => 'attributes', 'key' => 'name', 'text' => [ 'en' => 'Name' ] ],
];
}
}
And then you can simply implement it using the facade.
\BeInteractive\TranslationScanner\TranslationScanner::laravel()
->with(new MyCustomScanner())
->store();
// Or only use a custom scanner
\BeInteractive\TranslationScanner\TranslationScanner::with(new MyCustomScanner())
->store();
Please see CHANGELOG for more information on what has changed recently.
Please see License File for more information.