bonnier/laravel-translation-provider
Fetches translation strings from a Translation Manager and exposes them to Laravel via a BTrans::translate() helper plus artisan commands to add, update, delete, and sync translations. Configure service ID and manager URL via .env/services.php.
Installation
composer require bonnier/laravel-translation-provider
Publish the config file:
php artisan vendor:publish --provider="Bonnier\TranslationProvider\TranslationProviderServiceProvider" --tag="config"
Configuration
Edit config/translation-provider.php to define:
api_key (from Translation Manager)default_locale (e.g., 'en')supported_locales (e.g., ['en', 'sv', 'de'])cache_driver (optional, defaults to file)First Use Case Fetch translations for a key:
use Bonnier\TranslationProvider\Facades\TranslationProvider;
$translations = TranslationProvider::get('key.group');
// Returns array of translations for all supported locales
Fetching Translations
$translation = TranslationProvider::get('key.group');
$translations = TranslationProvider::get(['key.group', 'another.key']);
$translation = TranslationProvider::get('key.group', 'sv');
Caching
Enable caching in config (cache_driver: 'redis') to avoid repeated API calls:
TranslationProvider::setCacheDuration(3600); // Cache for 1 hour
Fallback Logic
Use Laravel’s built-in fallback locales in config/app.php (e.g., ['en' => 'sv']) to handle missing translations.
Integration with Blade
// In a service provider
Blade::extend(function ($view) {
$view->share('translations', TranslationProvider::getAll());
});
Then in Blade:
{{ $translations['key.group']['sv'] ?? 'Fallback' }}
Batch Updates
Use the sync method to push translations to Translation Manager:
TranslationProvider::sync([
'key.group' => [
'en' => 'Original',
'sv' => 'Översättning',
],
]);
API Rate Limits
Cache Invalidation
php artisan cache:clear
Or use TranslationProvider::clearCache().Locale Mismatches
supported_locales in config doesn’t match Translation Manager, requests fail silently.Deprecated Methods
Enable Logging
Add to config/translation-provider.php:
'log_enabled' => true,
Logs will appear in storage/logs/laravel.log.
API Response Inspection
Temporarily modify the get method to dump raw responses:
// In TranslationProvider.php (override)
public function get($key, $locale = null)
{
$response = $this->callApi($key, $locale);
\Log::debug('API Response', ['response' => $response]);
return $response;
}
Custom API Endpoint
Override the getApiUrl() method in a service provider:
TranslationProvider::macro('getApiUrl', function() {
return 'https://custom-translation-api.com';
});
Translation Preprocessing
Add a translate macro to format responses:
TranslationProvider::macro('translate', function($key, $locale = null) {
$translations = $this->get($key, $locale);
return collect($translations)->map(function($value, $lang) {
return __($value, [], $lang); // Use Laravel’s translator
});
});
Webhook Integration Extend the package to listen for Translation Manager webhooks to auto-update cached translations:
// In a service provider
TranslationProvider::setWebhookHandler(function($payload) {
Cache::forget('translation-provider');
});
How can I help you explore Laravel packages today?