laravel-i18n
SkillFiles & storageUse when implementing Laravel translations — __(), trans_choice(), lang files, pluralization, locale middleware, or formatting.
Available today. Use it from your connected AI after setup.
No other account needed.
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:
- fuse-ai-pilot:explore-codebase - Check existing translation patterns
- fuse-ai-pilot:research-expert - Verify Laravel i18n best practices via Context7
- mcp__context7__query-docs - Check Laravel localization documentation
After implementation, run fuse-ai-pilot:sniper for validation.
Overview
| Feature | PHP Files | JSON Files |
|---|---|---|
| Keys | Short (messages.welcome) | Full text |
| Nesting | Supported | Flat only |
| Best for | Structured translations | Large apps |
Critical Rules
- Never concatenate strings - Use
:placeholderreplacements - Always handle zero in pluralization
- Group by feature -
auth.login.title,auth.login.button - Extract strings early - No hardcoded text in views
- 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)
| Topic | Reference | When to Consult |
|---|---|---|
| Setup | localization.md | Initial configuration |
| Pluralization | pluralization.md | Count-based translations |
| Blade | blade-translations.md | View translations |
| Middleware | middleware.md | Locale detection |
| Formatting | formatting.md | Date/number/currency |
| Packages | packages.md | Vendor translations |
| Best Practices | best-practices.md | Large app organization |
Templates (Complete Code)
| Template | When to Use |
|---|---|
| SetLocaleMiddleware.php.md | URL/session locale detection |
| lang-files.md | Translation file examples |
| LocaleServiceProvider.php.md | Centralized localization service |
| LocaleRoutes.php.md | URL 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
:placeholderfor 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 vosLocaleenums si utilisés en queue- Middleware
SetLocale: compatible avec le nouveauvalidateOrigin()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