Search by

mohammadtrabelsi / laravel-translation-sync

Mohammadtrabelsi

Scan your Laravel app (views, Livewire components, services and laravel-modules) for translation keys and sync them across every locale with a single artisan command.

Package info

github.com/Mohammadtrabelsi/laravel-translations-sync

pkg:composer/mohammadtrabelsi/laravel-translation-sync

Statistics

Installs: 1

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

1.0.0 2026-09-12 10:04 UTC

This package is auto-updated.

Last update: 2026-09-12 10:12:23 UTC


README

Scan your entire Laravel application for translation keys and keep every locale in sync with a single artisan command.

It walks your resources/, Livewire component classes and blade views, app/Services, and every module under a laravel-modules Modules/ tree, extracts every key used with __(), trans(), @lang() or trans_choice(), creates any missing lang/{locale}/*.php files, and adds the missing keys to every locale so nothing is left untranslated.

Requirements

  • PHP ^8.2
  • Laravel 11, 12 or 13

Installation

composer require mohammadtrabelsi/laravel-translation-sync

The service provider is auto-discovered, so there is nothing else to register.

Usage

php artisan translations:sync

Options

Option Description
--locales=en,fr,ar Comma-separated locales to sync. Defaults to auto-detecting the lang/ sub-directories.
--base=en The reference locale used as the source of truth (default en).
--dry-run Show what would change without writing any files.
--clean Also remove keys from lang files that no longer appear in the code.

Examples

# Preview the changes without touching any files
php artisan translations:sync --dry-run

# Sync a specific set of locales, using French as the base
php artisan translations:sync --locales=fr,en,ar --base=fr

# Sync and prune keys that were deleted from the code
php artisan translations:sync --clean

How keys are grouped

Keys are grouped by their file prefix:

  • __('auth.failed')lang/{locale}/auth.php under the failed key.
  • __('Hello world') (a plain string with no group) → lang/{locale}/strings.php.

For the base locale a missing key gets a human-friendly placeholder derived from the key itself (welcome_backWelcome back). For other locales the missing value is prefixed with [TODO] and seeded from the base translation so you can easily find what still needs translating.

License

The MIT License (MIT). See LICENSE.