be-interactive / laravel-translation-scanner
A package that scans you repo for translations
Fund package maintenance!
timo-de-winter
Requires
- php: ^8.3
- illuminate/contracts: ^10.0||^11.0||^12.0
- illuminate/support: ^10.0||^11.0||^12.0
- spatie/laravel-package-tools: ^1.16
- spatie/laravel-translation-loader: ^2.8
Requires (Dev)
- larastan/larastan: ^2.9||^3.0
- laravel/pint: ^1.14
- nunomaduro/collision: ^8.1.1||^7.10.0
- orchestra/testbench: ^10.0.0||^9.0.0||^8.22.0
- pestphp/pest: ^3.0
- pestphp/pest-plugin-arch: ^3.0
- pestphp/pest-plugin-laravel: ^3.0
- phpstan/extension-installer: ^1.3||^2.0
- phpstan/phpstan-deprecation-rules: ^1.1||^2.0
- phpstan/phpstan-phpunit: ^1.3||^2.0
README
This package scans your projects for translations and integrates them into spatie translation loader.
Installation
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
Usage
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.
Default scanners
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).
Basic Implementation
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();
Store without deleting
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);
Only fetching the results
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
Custom scanners
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();
Changelog
Please see CHANGELOG for more information on what has changed recently.
Credits
License
Please see License File for more information.