Skip to content

Basic Usage

This guide covers the core features of the Laravel Translations package for managing translations in your Laravel application.

Overview

The Laravel Translations package extends Laravel's built-in translation system with:

  • Automatic scanning of translation strings
  • Multiple translation providers (Google Translate, DeepL, AI)
  • Language management
  • Translation synchronization
  • Performance optimization with caching

Language Management

Adding Languages

Add new languages to your application:

bash
# Add a language with locale and display name
php artisan translations:languages:add en English
php artisan translations:languages:add es Spanish
php artisan translations:languages:add fr French

# Add locale-specific variants
php artisan translations:languages:add en-US "English (US)"
php artisan translations:languages:add fr-BE "Français (Belgique)"

Managing Languages

Languages are stored in the languages table with these fields:

  • code - Language code (e.g., 'en', 'es', 'fr-BE')
  • name - Display name in your app's locale
  • native - Native name of the language
  • active - Whether the language is active
  • default - Whether it's the default language

Working with Languages in Code

php
use Backstage\Translations\Laravel\Models\Language;

// Get all active languages
$languages = Language::active()->get();

// Get default language
$default = Language::default();

// Get specific language
$spanish = Language::where('code', 'es')->first();

// Check if language exists
if (Language::where('code', 'de')->exists()) {
    // German language is available
}

Scanning for Translations

Automatic Scanning

The package automatically scans your application for translation strings:

bash
# Scan all active languages
php artisan translations:scan

# Scan specific language
php artisan translations:scan --language=es

What Gets Scanned

The scanner looks for these Laravel translation functions:

php
// In your PHP files
trans('messages.welcome');
__('messages.hello');
trans_choice('messages.apples', $count);

// In Blade templates
{{ __('messages.welcome') }}
{{ trans('messages.hello') }}
@lang('messages.goodbye')
@choice('messages.items', $count)

// Using Lang facade
Lang::get('messages.welcome');
Lang::trans('messages.hello');
Lang::choice('messages.apples', $count);

Translation Keys Structure

Scanned translations are stored with this structure:

  • group - The translation group (e.g., 'messages', 'validation')
  • key - The translation key (e.g., 'welcome', 'hello')
  • namespace - The namespace (usually '*' for default)
  • code - The language code
  • text - The actual translation text

Translating Strings

Automatic Translation

Translate all scanned strings:

bash
# Translate all languages
php artisan translations:translate

# Translate specific language
php artisan translations:translate --code=es

# Update existing translations
php artisan translations:translate --code=es --update

Translation Process

  1. Scan - Find translation strings in your code
  2. Store - Save them to the database
  3. Translate - Use configured provider to translate
  4. Cache - Store translations for performance

Translation Providers

The package supports multiple translation providers. See the Translation Providers guide for detailed configuration.

Using Translations

Standard Laravel Methods

Use translations exactly like Laravel's built-in system:

php
// In controllers
$message = trans('messages.welcome');
$message = __('messages.hello');

// In Blade templates
{{ __('messages.welcome') }}
{{ trans('messages.hello') }}

// With parameters
{{ __('messages.welcome', ['name' => $user->name]) }}

// Pluralization
{{ trans_choice('messages.apples', $count) }}

Programmatic Access

Access translations directly from the database:

php
use Backstage\Translations\Laravel\Models\Translation;

// Get specific translation
$translation = Translation::where('key', 'welcome')
    ->where('group', 'messages')
    ->where('code', 'es')
    ->first();

echo $translation->text; // "Bienvenido"

// Get all translations for a language
$spanishTranslations = Translation::where('code', 'es')->get();

// Get all translations for a group
$messages = Translation::where('group', 'messages')->get();

Synchronization

Automatic Sync

The package automatically syncs translations when:

  • New languages are added
  • Translation strings are scanned
  • Model attributes are updated

Manual Sync

Force synchronization:

bash
php artisan translations:sync

This command:

  • Removes orphaned translations
  • Fills missing translations
  • Updates translation status

Scheduled Sync

The package automatically runs sync daily at midnight:

php
// In TranslationServiceProvider
Schedule::command(SyncTranslations::class)
    ->dailyAt('00:00')
    ->withoutOverlapping();

Caching

Enable Caching

For better performance, enable permanent caching:

php
// In config/translations.php
'use_permanent_cache' => true,

Cache Management

The package automatically manages translation caches:

  • Translations are cached when saved
  • Cache is updated when translations change
  • Cache is cleared when needed

Best Practices

1. Organize Translation Keys

Use meaningful group and key names:

php
// Good
trans('auth.login.title')
trans('products.show.price')
trans('validation.required')

// Avoid
trans('a')
trans('b')
trans('c')

2. Use Parameters

Make translations flexible with parameters:

php
// Translation file
'welcome' => 'Welcome, :name!',

// Usage
trans('messages.welcome', ['name' => $user->name])

3. Handle Missing Translations

The package handles missing translations gracefully:

php
// If translation doesn't exist, returns the key
echo trans('nonexistent.key'); // "nonexistent.key"

// Check if translation exists
if (Translation::where('key', 'welcome')->exists()) {
    // Translation exists
}

4. Regular Maintenance

Run these commands regularly:

bash
# Scan for new translations
php artisan translations:scan

# Translate new strings
php artisan translations:translate

# Sync and clean up
php artisan translations:sync

Troubleshooting

Common Issues

Translations not appearing: Run translations:scan first

Translation errors: Check your translation provider configuration

Performance issues: Enable caching with use_permanent_cache => true

Missing languages: Add languages with translations:languages:add

Next Steps