laravel-lang/native-locale-names
Laravel package providing native-language names for locales. Useful for language pickers and localized UI labels, with simple installation and integration via Laravel Lang documentation. MIT licensed.
Installation:
composer require laravel-lang/native-locale-names
Ensure your Laravel version (11+) is supported (check releases).
First Use Case: Display a locale name in its native script (e.g., "हिन्दी" for Hindi):
use LaravelLang\NativeLocaleNames\LocaleNames;
$localeName = LocaleNames::get('hi_IN'); // Returns 'हिन्दी'
echo $localeName;
Where to Look First:
LocaleNames::get($locale) for direct lookups, or LocaleNames::all() for a full list.Dynamic Locale Display in Views:
// Blade template
<select name="locale">
@foreach (LocaleNames::all() as $locale => $name)
<option value="{{ $locale }}">{{ $name }}</option>
@endforeach
</select>
Use case: Language switcher dropdowns, user profile settings.
Integration with Laravel’s Localization:
$currentLocale = app()->getLocale();
$nativeName = LocaleNames::get($currentLocale);
// Example: Display "Welcome, User! (你好, 用户!)" in Chinese.
API Responses:
return response()->json([
'locales' => LocaleNames::all(),
]);
Use case: Frontend state management (e.g., React/Vue apps).
Fallback Handling:
$name = LocaleNames::get('xx_XX', 'Unknown Locale'); // Fallback if unsupported
Caching for Performance:
$names = Cache::remember('locale-names', now()->addYear(), function () {
return LocaleNames::all();
});
Tip: Cache the full list if your app has static locale requirements (e.g., admin panels).
Combining with laravel-lang/locale-list:
use LaravelLang\LocaleList\LocaleList;
$locales = LocaleList::getSupportedLocales();
$nativeNames = collect($locales)->mapWithKeys(fn ($locale) => [
$locale => LocaleNames::get($locale)
]);
Use case: Filter or sort locales dynamically.
Service Provider Binding (for dependency injection):
// app/Providers/AppServiceProvider.php
public function register()
{
$this->app->singleton('locale.names', function () {
return new LocaleNames();
});
}
Use case: Centralize locale logic in a single service.
Testing:
public function test_locale_names()
{
$this->assertEquals('English', LocaleNames::get('en_US'));
$this->assertEquals('Español', LocaleNames::get('es_ES'));
}
Unsupported Locales:
laravel-lang/locale-list. If a locale isn’t listed there, it won’t work here.Script/Encoding Issues:
app/Http/Middleware/EncodeResponseMiddleware:
public function handle($request, Closure $next)
{
$response = $next($request);
$response->header('Content-Type', 'text/html; charset=UTF-8');
return $response;
}
Caching Quirks:
php artisan cache:clear
Cache::forget('locale-names') in a command if manual updates are frequent.Namespace Changes:
LaravelLang\NativeLocaleNames\Native. Post-v2.0, it’s LaravelLang\NativeLocaleNames\LocaleNames.Sorting Behavior:
$sortedNames = LocaleNames::all()->sortBy(fn ($name, $locale) => $name);
Verify Locale Format:
xx_XX format (e.g., en_US, hi_IN). Pass en or US for fallbacks.LocaleNames::get('en_US', 'Fallback') to test.Check for Updates:
composer update laravel-lang/native-locale-names to pull new locales (e.g., ht_HT for Haitian Creole).Log Missing Locales:
if (!LocaleNames::has('xx_XX')) {
Log::warning("Unsupported locale: xx_XX");
}
Custom Locale Names: Override defaults via a service provider:
public function boot()
{
LocaleNames::extend('en_US', 'Custom English Name');
}
Add New Locales:
LocaleNames::add('xx_XX', 'Native Name');
Integration with Laravel Translations: Publish and extend translations:
php artisan vendor:publish --provider="LaravelLang\NativeLocaleNames\NativeLocaleNamesServiceProvider"
Modify resources/lang/vendor/native-locale-names/xx_XX.php for customizations.
Performance Optimization:
app()->booted(function () {
$this->app['locale.names']->loadAll();
});
How can I help you explore Laravel packages today?