barryvdh/laravel-translation-manager
Installation:
composer require barryvdh/laravel-translation-manager
php artisan vendor:publish --provider="Barryvdh\TranslationManager\TranslationManagerServiceProvider" --tag="migrations"
php artisan migrate
Publish config and views (if needed):
php artisan vendor:publish --provider="Barryvdh\TranslationManager\TranslationManagerServiceProvider" --tag="config"
php artisan vendor:publish --provider="Barryvdh\TranslationManager\TranslationManagerServiceProvider" --tag="views"
First Use Case:
Access the translation manager UI at /translation-manager (or your configured route). Log in as an admin to edit translations directly in the browser.
Key Files:
config/translation-manager.php: Core configuration (e.g., locales, default locale, file paths).resources/views/vendor/translation-manager/: Override default UI templates here.database/migrations/: Check for custom translation tables if extending functionality.Editing Translations:
auth.login, validation.required) for consistency.Locale Management:
config/translation-manager.php:
'locales' => [
'en' => 'English',
'es' => 'Spanish',
'fr' => 'French',
],
Integration with Language Switcher:
laravel-localization or custom middleware:
use Barryvdh\TranslationManager\Middleware\SetLocaleFromCookie;
Route::middleware([SetLocaleFromCookie::class])->group(function () {
// Your routes
});
Translation Files Sync:
.json/.php files:
php artisan translation-manager:export
php artisan translation-manager:import
API Access (Optional):
TranslationManager facade to fetch translations programmatically:
use Barryvdh\TranslationManager\Facades\TranslationManager;
$translations = TranslationManager::get('en', 'auth.*');
Custom Storage:
TranslationManager to use a custom storage backend (e.g., S3, database-specific tables):
// app/Providers/TranslationManagerServiceProvider.php
$this->app->bind('translation-manager.storage', function () {
return new CustomStorage();
});
Translation Events:
TranslationManager::setEventDispatcher($app);
event(new TranslationUpdated('en', 'auth.login'));
Validation Rules:
TranslationManager::extend('validation', function ($key, $value, $locale) {
return Str::contains($value, 'admin') ? 'invalid' : null;
});
Multi-Tenant Translations:
TranslationManager::setCurrentTenant($tenantId);
File Permissions:
storage/app/translation-manager directory is writable:
chmod -R 775 storage/app/translation-manager
storage_path() permissions in config/translation-manager.php.Locale Fallbacks:
config/translation-manager.php:
'fallback_locale' => 'en',
'fallback_when_empty' => true,
Caching Issues:
php artisan translation-manager:clear-cache
'cache' => env('APP_ENV') !== 'local',
Key Conflicts:
Middleware Order:
SetLocaleFromCookie before ShareErrorsFromSession to ensure locale is set early:
$middlewareGroups['web'] = [
// ...
Barryvdh\TranslationManager\Middleware\SetLocaleFromCookie::class,
// ...
];
Log Translation Updates:
config/translation-manager.php:
'log_updates' => true,
storage/logs/laravel.log for update events.Check Database:
translation_manager_translations:
SELECT * FROM translation_manager_translations WHERE locale = 'es' AND key LIKE 'auth.%';
Disable JavaScript Errors:
Test Locale Switching:
curl -H "Cookie: locale=es" http://your-app.test/translation-manager
Custom UI Components:
resources/views/vendor/translation-manager/.API Endpoints:
Route::get('/api/translations/{locale}', [TranslationController::class, 'index']);
Translation Groups:
group config option to organize translations:
'groups' => [
'auth' => ['auth.*'],
'validation' => ['validation.*'],
],
Webhooks:
TranslationManager::onUpdate(function ($locale, $key, $value) {
// Send webhook
});
Localization Tools:
TranslationManager to sync with their APIs.How can I help you explore Laravel packages today?