laravel-lang/locales
Locale data package for Laravel Lang. Provides up-to-date locale definitions you can use across your Laravel apps, with documentation for installation and contribution guidelines. MIT licensed.
Installation:
composer require laravel-lang/locales
Publish the config file (if needed):
php artisan vendor:publish --provider="LaravelLang\Locales\LocalesServiceProvider" --tag="locales-config"
First Use Case: Check available locales in your app:
use LaravelLang\Locales\Facades\Locales;
$locales = Locales::available(); // Collection of all supported locales
$currentLocale = Locales::getCurrent(); // Current app locale
Key Files:
config/locales.php: Configuration for enabled locales, countries, and currencies.app/Providers/AppServiceProvider.php: Register the package (auto-done on install).$locale = Locales::detect(); // Auto-detects from browser/headers
Locales::set($locale); // Updates the current locale
$fallback = Locales::getFallback('fr-CA'); // Returns 'fr' if 'fr-CA' isn't installed
// Use with Laravel's built-in translation
$translated = trans('messages.welcome', [], null, 'fr'); // French translation
use LaravelLang\Locales\Facades\Locales;
$localeData = Locales::get('en-US');
echo $localeData->currencySymbol; // '$'
echo $localeData->dateFormat; // 'm/d/Y'
if (Locales::get('ar-SA')->direction === 'rtl') {
// Load RTL-specific CSS/JS
}
$flagUrl = asset("flags/{$localeData->code}.svg");
return response()->json($data, 200, [], [
'Accept-Language' => Locales::getCurrent()->code,
]);
Extend the LocaleData class to add custom properties:
use LaravelLang\Locales\LocaleData;
class CustomLocaleData extends LocaleData
{
public function getCustomProperty()
{
return $this->customData ?? null;
}
}
use LaravelLang\Locales\Facades\Locales;
class SetLocaleMiddleware
{
public function handle($request, Closure $next)
{
$locale = $request->segment(1);
if (Locales::has($locale)) {
Locales::set($locale);
app()->setLocale($locale);
}
return $next($request);
}
}
$locale = Locales::get('fr-CA');
if (!$locale->installed) {
$locale = Locales::getFallback($locale->code); // Falls back to 'fr'
}
// In Blade
@if (Locales::getCurrent()->direction === 'rtl')
<link rel="stylesheet" href="{{ asset('css/rtl.css') }}">
@endif
Configuration Quirks:
config/locales.php if needed:
'with_countries' => true,
'with_currencies' => true,
if (Locales::has('xx-XX')) {
// Safe to use
}
Performance:
$locale = cache()->remember("locale.{$code}", now()->addHours(1), fn() => Locales::get($code));
RTL Issues:
if (Locales::getCurrent()->direction === 'rtl') {
app()->setLocale('ar'); // Force RTL for testing
}
Fallback Logic:
$fallback = Locales::getFallback('fr-CA'); // Should return 'fr', not 'en'
Artisan Commands:
artisan about) may not respect the current locale. Override them if needed.Inspect Locale Data:
dd(Locales::get('en-US')->toArray());
Check Installed Locales:
Locales::installed()->pluck('code'); // List all installed locales
Enable Debug Mode:
Locales::setDebug(true); // Logs locale-related operations
Validate Config:
php artisan config:clear
php artisan optimize:clear
Add Custom Locales:
laravel-lang/locale-list repo and submit a PR.Override Locale Data:
Locales::extend('custom', function () {
return new CustomLocaleData([
'code' => 'custom',
'name' => 'Custom Locale',
'direction' => 'ltr',
]);
});
Integrate with Translation Services:
// Example: Auto-translate missing keys via API
app()->bind('translator', function ($app) {
$trans = new Translator($app['view'], $app['files']);
$trans->setTranslator(new ApiTranslator($trans));
return $trans;
});
Locale-Specific Database Handling:
// Example: Store locale in user model
$user->locale = Locales::getCurrent()->code;
$user->save();
Testing:
Locales::fake() for isolated tests:
Locales::fake([
'en-US' => new LocaleData(['code' => 'en-US', 'name' => 'Test English']),
]);
Locale-Specific URLs:
Route::get('/{locale}/posts', function ($locale) {
Locales::set($locale);
return view('posts.index');
})->where('locale', Locales::available()->pluck('code')->join('|'));
Dynamic Language Switcher:
<select onchange="window.location.href=this.value">
@foreach(Locales::available() as $locale)
<option value="{{ route('set-locale', $locale->code) }}"
{{ Locales::getCurrent()->code === $locale->code ? 'selected' : '' }}>
{{ $locale->native }}
</option>
@endforeach
</select>
Locale-Aware Validation:
use LaravelLang\Locales\Facades\Locales;
$validator = Validator::make($request->all(), [
'phone' => 'required|phone:' . Locales::getCurrent()->code,
]);
Performance Optimization:
public function boot()
{
Locales::available(); // Loads all locales once
}
Locale-Specific Notifications:
Notification::route('mail', $user->email)
->locale(Locales::getCurrent()->code)
->notify(new OrderShipped($order));
How can I help you explore Laravel packages today?