laravel-lang/native-currency-names
Laravel Lang Native Currency Names provides localized, native-language currency names for Laravel apps. Easy to install via Composer and designed to complement Laravel localization workflows for displaying currencies correctly across locales.
Installation:
composer require laravel-lang/native-currency-names
Publish translations (optional but recommended for customization):
php artisan lang:publish --provider="LaravelLang\NativeCurrencyNames\NativeCurrencyNamesServiceProvider"
This creates resources/lang/vendor/native-currency-names/ with all locale files.
First Usage:
// In Blade:
{{ __('native-currency-names::currency.USD', [], 'en') }} // "US Dollar"
{{ __('native-currency-names::currency.USD', [], 'ja') }} // "ドル"
// In PHP:
$currencyName = trans('native-currency-names::currency.USD', [], 'ja');
resources/lang/vendor/native-currency-names/ for supported locales and currency codes.LaravelLang\NativeCurrencyNames\NativeCurrencyNamesServiceProvider for binding or extending functionality.Localize currency names in a checkout flow:
<div class="currency-display">
{{ __('native-currency-names::currency.' . $order->currency, [], $user->locale) }}
{{ number_format($order->amount, 2) }}
</div>
Example Output:
USD + ja locale → ドル 1000.00EUR + fr locale → Euros 1000,00Use Laravel’s translation helpers with the package’s namespace:
// Blade
{{ __('native-currency-names::currency.USD', [], 'en') }} // "US Dollar"
{{ __('native-currency-names::currency.JPY', [], 'ja') }} // "円"
// PHP
$name = trans('native-currency-names::currency.EUR', [], 'de'); // "Euro"
Fetch currency names dynamically in controllers or models:
public function getOrderSummary(Order $order)
{
$currencyName = trans(
'native-currency-names::currency.' . $order->currency,
[],
$order->user->locale
);
return response()->json([
'amount' => $currencyName . ' ' . number_format($order->amount, 2),
]);
}
Handle unsupported locale combinations gracefully:
// Falls back to 'en' if 'currency.USD' doesn't exist in 'zh'
{{ trans('native-currency-names::currency.USD', [], 'zh', 'en') }}
Add currency names to model attributes or accessors:
class Order extends Model
{
public function getCurrencyNameAttribute()
{
return trans(
'native-currency-names::currency.' . $this->currency,
[],
$this->user->locale
);
}
}
Usage:
$order->currency_name; // "Euro" (for EUR + de locale)
Create a reusable directive for templates:
// app/Providers/AppServiceProvider.php
Blade::directive('currency', function ($currencyCode) {
return "<?php echo trans('native-currency-names::currency.{$currencyCode}', [], app()->getLocale()); ?>";
});
Usage in Blade:
@currency($order->currency) {{ $order->amount }}
laravel-money: Combine with myclabs/php-enum or laravel-money for full currency handling.public function toArray($request)
{
return [
'amount' => [
'value' => $this->amount,
'currency' => trans('native-currency-names::currency.' . $this->currency, [], $request->locale),
],
];
}
// Frontend (e.g., Vue/React)
const updateCurrencyName = (currency, locale) => {
return axios.get(`/api/currency-name?code=${currency}&locale=${locale}`);
};
Currency Code Mismatch:
USD, EUR). Non-standard codes (e.g., US, EU) will return null.use Illuminate\Support\Facades\Validator;
Validator::extend('valid_currency', function ($attribute, $value, $parameters, $validator) {
return trans('native-currency-names::currency.' . $value) !== null;
});
Missing Locale Files:
ht for Haitian Creole) isn’t published, translations will fail silently.$name = trans('native-currency-names::currency.USD', [], 'ht', 'en'); // Falls back to English
Caching Quirks:
php artisan lang:publish --force:
php artisan cache:clear
php artisan view:clear
Hybrid Currency Codes:
BTC, DAI) may not be included.// config/app.php
'providers' => [
LaravelLang\NativeCurrencyNames\NativeCurrencyNamesServiceProvider::class,
App\Providers\CustomCurrencyProvider::class,
];
$locales = array_keys(config('lang.supported'));
// Or inspect published files in `resources/lang/vendor/native-currency-names/`.
$name = trans('native-currency-names::currency.XXX', [], 'xx');
if (empty($name)) {
Log::warning("Missing currency translation for {$currency} in {$locale}");
}
Add Custom Locales:
resources/lang/vendor/native-currency-names/ (e.g., custom.json):
{
"USD": "Custom Dollar Name",
"EUR": "Custom Euro Name"
}
config/app.php:
'supported' => ['en', 'ja', 'custom'],
Override Translations:
// resources/lang/en/native-currency-names.json
{
"USD": "Custom US Dollar Name"
}
Programmatic Access:
// app/Providers/AppServiceProvider.php
public function register()
{
$this->app->bind('currencyNames', function () {
return new \LaravelLang\NativeCurrencyNames\CurrencyNames();
});
}
$name = app('currencyNames')->get('USD', 'ja'); // "ドル"
Testing:
$this->app->setLocale('ja');
$this->withoutTranslationBindings();
trans()->addNamespace('native-currency-names', [
'USD' => 'Test Dollar',
]);
$this->assertEquals('Test Dollar', trans('native-currency-names::currency.USD'));
config/cache.php is optimized.How can I help you explore Laravel packages today?