Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Laravel Translation Provider Laravel Package

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.

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Setup

  1. Installation

    composer require bonnier/laravel-translation-provider
    

    Publish the config file:

    php artisan vendor:publish --provider="Bonnier\TranslationProvider\TranslationProviderServiceProvider" --tag="config"
    
  2. 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)
  3. 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
    

Implementation Patterns

Workflows

  1. Fetching Translations

    • Single Key:
      $translation = TranslationProvider::get('key.group');
      
    • Multiple Keys:
      $translations = TranslationProvider::get(['key.group', 'another.key']);
      
    • Locale-Specific:
      $translation = TranslationProvider::get('key.group', 'sv');
      
  2. Caching Enable caching in config (cache_driver: 'redis') to avoid repeated API calls:

    TranslationProvider::setCacheDuration(3600); // Cache for 1 hour
    
  3. Fallback Logic Use Laravel’s built-in fallback locales in config/app.php (e.g., ['en' => 'sv']) to handle missing translations.

  4. Integration with Blade

    // In a service provider
    Blade::extend(function ($view) {
        $view->share('translations', TranslationProvider::getAll());
    });
    

    Then in Blade:

    {{ $translations['key.group']['sv'] ?? 'Fallback' }}
    
  5. Batch Updates Use the sync method to push translations to Translation Manager:

    TranslationProvider::sync([
        'key.group' => [
            'en' => 'Original',
            'sv' => 'Översättning',
        ],
    ]);
    

Gotchas and Tips

Pitfalls

  1. API Rate Limits

    • The package makes HTTP requests to Translation Manager. Monitor usage to avoid hitting rate limits.
    • Fix: Implement exponential backoff or queue delayed jobs for bulk fetches.
  2. Cache Invalidation

    • Cached translations won’t update until the cache expires.
    • Fix: Clear cache manually:
      php artisan cache:clear
      
      Or use TranslationProvider::clearCache().
  3. Locale Mismatches

    • If supported_locales in config doesn’t match Translation Manager, requests fail silently.
    • Fix: Validate locales against the API response.
  4. Deprecated Methods

    • The package is outdated (last release 2018). Some Laravel versions may cause compatibility issues.
    • Fix: Override methods in a service provider or fork the package.

Debugging

  • 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;
    }
    

Extension Points

  1. Custom API Endpoint Override the getApiUrl() method in a service provider:

    TranslationProvider::macro('getApiUrl', function() {
        return 'https://custom-translation-api.com';
    });
    
  2. 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
        });
    });
    
  3. 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');
    });
    
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
hamzi/corewatch
minionfactory/raw-hydrator
hexters/coinpayment
rjcodes/rjcms
act-training/laravel-permissions-manager
alimarchal/laravel-chart-of-accounts
babenkoivan/elastic-scout-driver
mkwebdesign/filament-watchdog-v5
renatomarinho/laravel-page-speed
zedmagdy/filament-business-hours
renatovdemoura/blade-elements-ui
devgeek/beacon-admin
benjamin-rqt/data-watcher-bundle
atriumphp/atrium
sandermuller/package-boost-laravel
sandermuller/boost-skills
redaxo/core
yusufgenc/filament-api-forge
l3aro/rating-star-for-filament
leek/filament-subtenant-scope