laravel-i18n

SkillFiles & storage

Use when implementing Laravel translations — __(), trans_choice(), lang files, pluralization, locale middleware, or formatting.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the laravel-i18n skill

What this skill tells your AI

The instructions your AI receives, as published by fusengine/agents in plugins/laravel-expert/skills/laravel-i18n/SKILL.md and read by ahel’s review.

Laravel Internationalization

Agent Workflow (MANDATORY)

Before ANY implementation, spawn 3 agents in parallel, one Agent call each with a name:

  1. fuse-ai-pilot:explore-codebase - Check existing translation patterns
  2. fuse-ai-pilot:research-expert - Verify Laravel i18n best practices via Context7
  3. mcp__context7__query-docs - Check Laravel localization documentation

After implementation, run fuse-ai-pilot:sniper for validation.


Overview

FeaturePHP FilesJSON Files
KeysShort (messages.welcome)Full text
NestingSupportedFlat only
Best forStructured translationsLarge apps

Critical Rules

  1. Never concatenate strings - Use :placeholder replacements
  2. Always handle zero in pluralization
  3. Group by feature - auth.login.title, auth.login.button
  4. Extract strings early - No hardcoded text in views
  5. Validate locales - Use enum or whitelist

Decision Guide

Translation task?
├── Basic string → __('key')
├── With variables → __('key', ['name' => $value])
├── Pluralization → trans_choice('key', $count)
├── In Blade → @lang('key') or {{ __('key') }}
├── Locale detection → Middleware
├── Format date/money → LocalizationService
└── Package strings → trans('package::key')

Reference Guide

Concepts (WHY & Architecture)

TopicReferenceWhen to Consult
Setuplocalization.mdInitial configuration
Pluralizationpluralization.mdCount-based translations
Bladeblade-translations.mdView translations
Middlewaremiddleware.mdLocale detection
Formattingformatting.mdDate/number/currency
Packagespackages.mdVendor translations
Best Practicesbest-practices.mdLarge app organization

Templates (Complete Code)

TemplateWhen to Use
SetLocaleMiddleware.php.mdURL/session locale detection
lang-files.mdTranslation file examples
LocaleServiceProvider.php.mdCentralized localization service
LocaleRoutes.php.mdURL prefix locale routing

Quick Reference

// Basic translation
__('messages.welcome')

// With replacement
__('Hello :name', ['name' => 'John'])

// Pluralization
trans_choice('messages.items', $count)

// Runtime locale
App::setLocale('fr');
App::currentLocale();  // 'fr'

Best Practices

DO

  • Use :placeholder for dynamic values
  • Handle zero case in pluralization
  • Group keys by feature module
  • Use Locale enum for type safety
  • Set Carbon locale in middleware

DON'T

  • Concatenate translated strings
  • Hardcode text in views
  • Accept any locale without validation
  • Create DB-based translations (use files)

Laravel 13 Notes

L'API de localisation (__(), trans_choice(), App::setLocale()) reste inchangée en Laravel 13. Points spécifiques :

  • Context::add('locale', $locale) propage la locale dans les jobs queue (résout le bug L12 où la locale était perdue dans les ShouldQueue)
  • serializable_classes : whitelister vos Locale enums si utilisés en queue
  • Middleware SetLocale : compatible avec le nouveau validateOrigin() de [[laravel-auth]]
// app/Jobs/SendNotification.php
public function handle(): void
{
    App::setLocale(Context::get('locale', 'en'));
    Notification::send($this->user, new OrderShipped());
}

Signals

GitHub stars
25
Forks
4
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
laravel-i18n
Source
github.com/fusengine/agents