laravel-lang/native-currency-names
Laravel Lang Native Currency Names adds localized currency names in their native language for Laravel apps. Install via Composer and use it to display currency labels correctly across locales with easy integration and MIT licensing.
Install via Composer:
composer require laravel-lang/native-currency-names
Publish translations to customize or extend:
php artisan lang:publish --provider="LaravelLang\NativeCurrencyNames\ServiceProvider"
First use case: Replace hardcoded currency symbols in checkout flows:
// Before
echo 'Price: $' . $amount;
// After (Blade)
{{ __('native-currency-names::currency.USD') }} {{ $amount }}
// Or in PHP
echo __('native-currency-names::currency.USD', [], 'ja') . ' ' . $amount; // Outputs: "ドル 100"
Key files to inspect:
config/native-currency-names.php (minimal default config)resources/lang/vendor/native-currency-names/ (all locale files)vendor/laravel-lang/native-currency-names/src/NativeCurrencyNames.php (core logic)Basic Usage:
// Get currency name for current app locale
$currency = __('native-currency-names::currency.USD');
// Explicit locale
$currency = __('native-currency-names::currency.EUR', [], 'de'); // "Euro"
// With fallback
$currency = __('native-currency-names::currency.XYZ', [], 'en', 'en'); // Returns "XYZ" if missing
Dynamic Currency Display:
// In a model or service
public function getLocalizedCurrencyName(string $code, string $locale = null): string
{
return __('native-currency-names::currency.' . $code, [], $locale ?? app()->getLocale());
}
Blade Integration:
// Create a reusable Blade component
@component('currency', ['code' => 'USD', 'amount' => 100])
{{ $amount }} {{ __('native-currency-names::currency.' . $code) }}
@endcomponent
// Or use a directive
Blade::directive('currency', function ($code) {
return "<?php echo __('native-currency-names::currency.{$code}'); ?>";
});
Multi-Currency Support:
// For payment gateways or multi-currency apps
public function formatAmount(float $amount, string $currencyCode, string $locale = null): string
{
$locale = $locale ?? app()->getLocale();
$currencyName = __('native-currency-names::currency.' . $currencyCode, [], $locale);
return number_format($amount, 2) . ' ' . $currencyName;
}
API Response Localization:
// Localize currency names in API responses
return response()->json([
'amount' => $order->amount,
'currency_name' => __('native-currency-names::currency.' . $order->currency),
'currency_symbol' => $this->getCurrencySymbol($order->currency),
'locale' => $request->header('Accept-Language')
]);
Form Localization:
// Dynamic form labels
<label for="amount">
{{ __('Amount in') }} @currency($order->currency)
</label>
<input type="text" id="amount" name="amount"
placeholder="{{ __('Enter amount in') }} @currency($order->currency)">
Testing Patterns:
// Unit test for translations
public function testCurrencyTranslations()
{
$this->assertEquals('ドル', __('native-currency-names::currency.USD', [], 'ja'));
$this->assertEquals('Euro', __('native-currency-names::currency.EUR', [], 'en'));
$this->assertEquals('リアル', __('native-currency-names::currency.BRL', [], 'ja'));
}
// Feature test for checkout
public function testCheckoutCurrencyDisplay()
{
$response = $this->actingAs($user)->get('/checkout');
$response->assertSee('100ドル'); // Japanese locale
}
Stripe/PayPal Localization:
// Localize payment descriptions
$description = __('Payment of') . ' ' .
__('native-currency-names::currency.' . $order->currency) . ' ' .
number_format($order->amount, 2);
// Pass to Stripe
Stripe::charges()->create([
'amount' => $order->amount * 100,
'currency' => $order->currency,
'description' => $description,
]);
Invoice Generation:
// Localized invoice footer
$invoice->footer = sprintf(
__('Total: %s %s'),
number_format($total, 2),
__('native-currency-names::currency.' . $invoice->currency)
);
Currency Code Mismatch:
USD, not US or Dollar).USD, EUR, JPY).dd(array_keys(LaravelLang\NativeCurrencyNames\NativeCurrencyNames::getData()['en']['currency'] ?? []));
Missing Locale Fallback:
currency.USD).__('native-currency-names::currency.USD', [], 'xx', 'en'); // Falls back to English
Caching Issues:
php artisan view:clear
php artisan cache:clear
Blade Cache:
@currency), clear Blade cache:
php artisan view:clear
Check Available Locales:
// List all supported locales
dd(array_keys(LaravelLang\NativeCurrencyNames\NativeCurrencyNames::getLocales()));
Verify Currency Existence:
// Check if a currency exists for a locale
$data = LaravelLang\NativeCurrencyNames\NativeCurrencyNames::getData();
$exists = isset($data[$locale]['currency'][$code]);
Inspect Raw Data:
// Dump all data for debugging
dd(LaravelLang\NativeCurrencyNames\NativeCurrencyNames::getData());
Add Custom Locales:
php artisan lang:publish --provider="LaravelLang\NativeCurrencyNames\ServiceProvider" --tag=custom
resources/lang/vendor/native-currency-names/.Override Translations:
resources/lang/vendor/native-currency-names/custom.php:
return [
'currency' => [
'USD' => 'Custom Dollar Name',
'EUR' => 'Custom Euro Name',
],
];
Programmatic Access:
// Get raw data without translation
$data = LaravelLang\NativeCurrencyNames\NativeCurrencyNames::getData();
$currencyName = $data['ja']['currency']['USD']; // "ドル"
Dynamic Currency Handling:
public function getCurrencyName(string $code, string $locale = null): string
{
$locale = $locale ?? app()->getLocale();
$name = __('native-currency-names::currency.' . $code, [], $locale);
// Fallback for unsupported codes
return $name !== "currency.{$code}" ? $name : $code;
}
Cache Frequently Used Currencies:
$cacheKey = "currency_{$code}_{$locale}";
$name = cache()->remember($cacheKey, now()->addHours(1), function() use ($code, $locale) {
return __('native-currency-names::currency.' . $code, [], $locale);
});
Avoid Redundant Locale Lookups:
// Store locale in user session or model
$locale = $user->locale ?? app()->getLocale();
$currencyName = __('native-currency-names::currency.' . $code, [], $locale);
config/native-currency-names.php:
return [
How can I help you explore Laravel packages today?