Manage Laravel translations in a database with version-controlled migration files. This package streamlines multilingual app development, letting you create, update, and maintain translations without touching JSON or PHP files.
Get up and running in three steps.
Install the package to your Laravel project:
composer require mgcodeur/laravel-translation-loader
Publish configuration and migration files:
php artisan laravel-translation-loader:install
This generates:
config/translation-loader.php
(package settings)database/migrations/create_translations_table.php
database/migrations/create_languages_table.php
database/migrations/create_translation_migrations_table.php
(table for translations migrations)
Run the migrations:
php artisan migrate
Generate a migration to define translations:
php artisan make:translation welcome
👉 This creates a file in database/translations/
:
<?php
use Mgcodeur\LaravelTranslationLoader\Translations\TranslationMigration;
return new class extends TranslationMigration
{
public function up(): void
{
$this->add('en', 'welcome.title', 'Welcome to Our App');
$this->add('fr', 'welcome.title', 'Bienvenue dans notre application');
$this->add('es', 'welcome.title', 'Bienvenido a nuestra aplicación');
}
public function down(): void
{
$this->delete('en', 'welcome.title');
$this->delete('fr', 'welcome.title');
$this->delete('es', 'welcome.title');
// or you can just do: $this->deleteAll('welcome.title');
// $this->deleteAll('key1', 'key2', 'key3');
}
};
Run all pending translation migrations:
php artisan translation:migrate
Rollback the last migration:
php artisan translation:rollback
Access translations as you would with standard Laravel language files:
// In controllers, views, or anywhere
echo __('welcome.title'); // Outputs: "Welcome to Our App" (if en is active)
View the status of translation migrations:
php artisan translation:status
Example Output:
+-------------------------+----------+
| Migration | Status |
+-------------------------+----------+
| welcome | Migrated |
| auth | Pending |
+-------------------------+----------+
👉 Export database translations to Laravel’s lang
directory:
php artisan translation:generate
This creates files like:
lang/
├── en.json
├── fr.json
├── es.json
└── ...
💡 Customize the output path in config/translation-loader.php
.
Customize settings in config/translation-loader.php
Add multiple keys at once.
$this->addMany('en', [
'email' => 'Email',
'password' => 'Password',
]);
$this->addMany('fr', [
'email' => 'Email',
'password' => 'Mot de passe',
]);
or
$this->addMany([
'en' => [
'login' => 'Login',
'logout' => 'Logout',
],
'fr' => [
'login' => 'Se connecter',
'logout' => 'Se déconnecter',
],
]);
Update existing translations.
$this->update('en', 'welcome.title', 'Welcome to Our Awesome App');
If a translation is missing, Laravel will fall back to the default language defined in your config/app.php
.
Q: Can I use this with existing JSON/PHP translation files?
A: Yes! The package works alongside file-based translations.
Q: How does caching work?
A: Translations are cached. Automatically cleared when migrations are applied or rolled back.
Licensed under the MIT License.
If this package saves you time:
- ⭐ Star the GitHub repo
- 📢 Share it with your network
- 💸 Sponsor development via GitHub Sponsors
For more help, check GitHub Issues or open a new issue.