pijler / lang-scanner
An application for scanning files and updating translations.
Installs: 190
Dependents: 0
Suggesters: 0
Security: 0
Stars: 3
Watchers: 0
Forks: 0
Open Issues: 0
Type:project
pkg:composer/pijler/lang-scanner
Requires
- php: ^8.2
- ext-json: *
Requires (Dev)
- illuminate/view: ^11.45
- laravel-zero/framework: ^11.45
- laravel/pint: ^1.24
- mockery/mockery: ^1.6
- nunomaduro/termwind: ^2.3
- pestphp/pest: ^3.8
README
A universal translation key scanner designed for Laravel projects.
It scans your codebase for translation calls, generates/updates your JSON language files, and ensures consistency across all locales.
Although itβs a Laravel package, itβs flexible enough to scan translations from any type of project (PHP, Vue, React, etc.) by customizing the extensions and methods.
β¨ Features
- π Scans translation calls in any file type (
.php,.js,.ts,.vue,.jsx, β¦). - βοΈ Flexible configuration for methods (
__,trans,trans_choice,t,i18n.t, β¦). - π Supports multiple paths and modules.
- π§© Extensible via
extendsfor modular configs. - β
checkor--checkchecks if all language files have the same keys. - π
sortautomatically orders JSON keys globally (enabled by default). - π
--dotsaves translations in dot notation. - π«
--no-updateskips updating JSON files when runningcheck(verification only). - π
mergeor--mergecombines duplicate or related translations into a single entry. - π
--duplicatelists all duplicate translations for review. - β
--removeremoves duplicate translations, keeping only the main version, when runningduplicate.
π¦ Installation
composer require pijler/lang-scanner --dev
βοΈ Configuration
Create a scanner.json file at the root of your Laravel project.
Example: Laravel project:
{
"scanner": [
{
"lang_path": "lang/",
"paths": ["resources/"],
"extensions": [".php"],
"methods": ["__(*)", "trans(*)", "trans_choice(*)"]
}
]
}
Example: Vue project inside Laravel:
{
"scanner": [
{
"lang_path": "resources/lang/",
"paths": ["resources/js/"],
"extensions": [".js", ".vue"],
"methods": ["$t(*)", "i18n.t(*)"]
}
]
}
Example: React project inside Laravel:
{
"scanner": [
{
"lang_path": "resources/lang/",
"paths": ["resources/js/"],
"extensions": [".jsx", ".tsx"],
"methods": ["t(*)", "i18n.t(*)"]
}
]
}
Example: Multi-module config:
{
"extends": [
"/module1/scanner.json",
"/module2/scanner.json"
]
}
Example with check:
{
"scanner": [
{
"check": true,
"lang_path": "lang/"
}
]
}
Example with merge:
{
"scanner": [
{
"merge": true,
"lang_path": "lang/"
}
]
}
π Usage
Run the scan:
./vendor/bin/scanner
The command will:
- Parse files defined in
pathswith the configuredextensions. - Detect translation calls based on the provided
methods. - Create or update JSON files inside
lang_path.
β‘ CLI Options
--check
Checks if that all language JSON files inside lang_path have the same keys.
Reports inconsistencies when a key exists in one locale but is missing in another.
./vendor/bin/scanner --check
--sort
Sorts all JSON keys alphabetically. Enabled globally by default, can be disabled if needed:
./vendor/bin/scanner --sort=false
--dot
Saves JSON translations in dot notation:
{
"auth.failed": "These credentials do not match our records."
}
./vendor/bin/scanner --dot
--empty
When using check, you may want to ignore empty translations as finished translations.
A good option to use in CI/CD pipelines.
./vendor/bin/scanner --check --empty
--no-update
When using check, prevents updating JSON files even if sort or dot are enabled.
Useful for CI/CD validation pipelines.
./vendor/bin/scanner --check --no-update
--merge
Ensures that all language JSON files inside lang_path have the same keys.
./vendor/bin/scanner --merge
--duplicate
Checks for and lists all duplicate records, allowing you to identify inconsistencies without modifying anything yet.
./vendor/bin/scanner --duplicate
--remove
After identifying duplicate records, automatically removes the repeated entries, keeping only the main version.
./vendor/bin/scanner --duplicate --remove
π§© Extensibility with extends
Use extends to reuse configs across modules:
{
"extends": [
"/packages/core/scanner.json",
"/packages/admin/scanner.json"
]
}
π‘ Best practices
- Configure
methodsaccording to your framework (__(*)/trans(*)for Laravel,t(*)for Vue/React). - Always run with
checkin multi-language projects. - Keep
sortenabled for clean, ordered JSON files. - Use
--no-updatein pipelines when you want validation only. - Avoid duplicate keys, as you may forget and translate them differently.
- Centralize shared configs with
extends.
Any improvement or correction can open a PR or Issue.
π License
Open-source under the MIT license.