laravel-lang/native-locale-names
Provides native-language display names for locales in Laravel apps. Install via composer and use the included locale name data to show language/region labels in their own scripts (e.g., Deutsch, 日本語), ideal for language switchers and settings pages.
Installation:
composer require laravel-lang/native-locale-names
Publish the config (if needed):
php artisan vendor:publish --provider="LaravelLang\NativeLocaleNames\NativeLocaleNamesServiceProvider"
First Use Case: Retrieve a native locale name for a given locale code:
use LaravelLang\NativeLocaleNames\LocaleNames;
$nativeName = LocaleNames::get('en'); // Returns "English"
$nativeName = LocaleNames::get('fr'); // Returns "Français"
$nativeName = LocaleNames::get('ja'); // Returns "日本語"
Where to Look First:
LaravelLang\NativeLocaleNames\Facades\LocaleNamesLaravelLang\NativeLocaleNames\NativeLocaleNamesServiceProviderconfig/native-locale-names.php (if published)Retrieving Native Locale Names:
// Basic usage
$name = LocaleNames::get('es'); // "Español"
// With fallback (returns 'es' if not found)
$name = LocaleNames::get('es', 'es');
// Get all available locales with native names
$allLocales = LocaleNames::all();
Integration with Laravel Localization:
// In a controller or service
$currentLocale = app()->getLocale();
$nativeName = LocaleNames::get($currentLocale);
// In Blade templates
@php
$locale = 'pt-BR';
$nativeName = LaravelLang\NativeLocaleNames\Facades\LocaleNames::get($locale);
@endphp
<select name="locale">
<option value="en">{{ LaravelLang\NativeLocaleNames\Facades\LocaleNames::get('en') }}</option>
<option value="pt-BR">{{ $nativeName }}</option>
</select>
Dynamic Language Switcher:
// In a language switcher component
$locales = [
'en' => 'English',
'fr' => 'Français',
'de' => 'Deutsch',
'ja' => '日本語',
];
// Replace hardcoded values with native names
$locales = collect($locales)->mapWithKeys(function ($value, $key) {
return [ $key => LocaleNames::get($key) ];
});
Form Labels and Placeholders:
// In a Form Request or Form class
public function rules()
{
return [
'language' => 'required|in:'.implode(',', array_keys(LocaleNames::all())),
];
}
public function messages()
{
return [
'language.in' => 'Please select a valid language.',
];
}
API Responses:
// Return native locale names in API responses
return response()->json([
'supported_locales' => collect(LocaleNames::all())->mapWithKeys(fn($name, $code) => [$code => $name]),
]);
Locale Selection Dropdown:
LocaleNames::all() to populate a dropdown in settings or profile pages.$locales = LocaleNames::all();
return view('settings.locale', compact('locales'));
<select name="locale">
@foreach($locales as $code => $name)
<option value="{{ $code }}">{{ $name }}</option>
@endforeach
</select>
User Profile Localization:
en, fr-CA) in the database and display the native name:
$userLocale = $user->locale;
$nativeLocaleName = LocaleNames::get($userLocale);
<p>Your preferred language: {{ $nativeLocaleName }}</p>
Admin Panel Filters:
$regions = [
'US' => LocaleNames::get('en-US'),
'FR' => LocaleNames::get('fr-FR'),
'JP' => LocaleNames::get('ja-JP'),
];
Multilingual SEO:
$locale = 'es-ES';
$nativeName = LocaleNames::get($locale);
return response()->json([
'title' => "Página en $nativeName",
]);
Cache Native Names:
$nativeName = Cache::remember("locale_name_{$locale}", now()->addHours(1), function() use ($locale) {
return LocaleNames::get($locale);
});
Combine with laravel-lang/locale-list:
use LaravelLang\LocaleList\Facades\LocaleList;
use LaravelLang\NativeLocaleNames\Facades\LocaleNames;
$allLocales = LocaleList::getNames(); // Get all locale codes
$nativeNames = collect($allLocales)->mapWithKeys(function ($code) {
return [$code => LocaleNames::get($code)];
});
Extend with Custom Locales:
// In a service provider
$this->app->extend('locale-names', function ($service) {
$service->add('custom-code', 'Custom Locale Name');
return $service;
});
Localization Middleware:
// In middleware
$request->merge([
'native_locale_name' => LocaleNames::get(app()->getLocale()),
]);
Testing:
LocaleNames facade in tests:
$this->mock(LaravelLang\NativeLocaleNames\Facades\LocaleNames::class)
->shouldReceive('get')
->with('es')
->andReturn('Español');
Missing Locales:
$name = LocaleNames::get('xx', 'Unknown'); // Fallback to 'Unknown'
Case Sensitivity:
EN vs. en). Always use lowercase.$locale = strtolower($request->input('locale'));
$name = LocaleNames::get($locale);
Regional Variations:
pt vs. pt-BR). The package may return the base language name.pt-BR) for accurate results.Caching Issues:
php artisan cache:clear
php artisan view:clear
Dependency Conflicts:
laravel-lang/locale-list (required dependency). Update both packages together:
composer update laravel-lang/native-locale-names laravel-lang/locale-list
Performance:
LocaleNames::all()) can be resource-intensive for large applications.$requiredLocales = ['en', 'fr', 'de'];
$nativeNames = collect($requiredLocales)->map(fn($code) => LocaleNames::get($code));
Check Supported Locales:
if (LocaleNames::has('es')) {
$name = LocaleNames::get('es');
} else {
// Handle unsupported locale
}
Log Missing Locales:
try {
$name = LocaleNames::get('unsupported-locale');
} catch (\InvalidArgumentException $e) {
\Log::warning("Unsupported locale: unsupported-locale", ['exception' => $e]);
}
Validate Locale Codes:
How can I help you explore Laravel packages today?