laravel-lang/native-currency-names
Provides native-language currency names for Laravel apps. Includes localized currency name data you can use in UI, formatting, and locale-aware displays. Easy Composer install with docs from the Laravel Lang ecosystem.
Install via Composer:
composer require laravel-lang/native-currency-names
Publish translations (stores files in resources/lang/vendor/native-currency-names):
php artisan lang:publish --provider="LaravelLang\NativeCurrencyNames\ServiceProvider"
First use case: Replace hardcoded currency symbols/names in checkout flows:
// Before
echo 'Price: $' . $amount;
// After
echo 'Price: ' . __('native-currency-names::currency.USD') . ' ' . $amount;
Key files to inspect:
config/native-currency-names.php (default: empty, but extensible)resources/lang/vendor/native-currency-names/ (all locale files)Translation Access:
// Get currency name for locale (e.g., 'ja' for Japanese)
$currencyName = __('native-currency-names::currency.USD', [], 'ja'); // "ドル"
// Fallback to default locale if missing
$currencyName = __('native-currency-names::currency.EUR');
Dynamic Locale Handling:
// In a multi-locale app, use the current app locale
$currency = __('native-currency-names::currency.' . $currencyCode);
// Or pass explicit locale
$currency = trans('native-currency-names::currency.USD', [], 'ar'); // "دولار"
Integration with Payment Gateways:
// Example: Localized payment confirmation
$payment = Payment::find($id);
$locale = $payment->user->locale;
$currencyName = __('native-currency-names::currency.' . $payment->currency);
return "Your payment of {$payment->amount} {$currencyName} was successful.";
Blade Directives:
// Create a custom Blade directive for reusable currency display
Blade::directive('currency', function ($code) {
return "<?php echo __('native-currency-names::currency.{$code}'); ?>";
});
// Usage in Blade:
@currency('USD') // Outputs "Dollar" or localized equivalent
Model Scopes:
// Add a localized currency name to Eloquent models
public function getLocalizedCurrencyNameAttribute()
{
return __('native-currency-names::currency.' . $this->currency);
}
API Responses:
// Localize currency names in API responses
return response()->json([
'amount' => $order->amount,
'currency_name' => __('native-currency-names::currency.' . $order->currency),
'locale' => $request->header('Accept-Language')
]);
Form Labels:
// Localized currency input labels
<label for="amount">
{{ __('Amount in') }} @currency('USD')
</label>
Unit Tests:
public function testCurrencyTranslation()
{
$this->assertEquals('ドル', __('native-currency-names::currency.USD', [], 'ja'));
$this->assertEquals('Euro', __('native-currency-names::currency.EUR', [], 'en'));
}
Feature Tests:
public function testCheckoutCurrencyDisplay()
{
$response = $this->actingAs($user)->get('/checkout');
$response->assertSee('100ドル'); // Japanese locale
}
Locale-Specific Tests:
public function testAllLocales()
{
$locales = ['ja', 'de', 'ar', 'hi']; // Test critical locales
foreach ($locales as $locale) {
$this->assertNotNull(__('native-currency-names::currency.USD', [], $locale));
}
}
Locale Fallback:
currency.USD). Always provide a fallback:
__('native-currency-names::currency.USD', [], 'xx', 'en'); // Fallback to English
Currency Code Mismatch:
USD, not US). Verify your data matches:
// Wrong: 'US' → returns 'currency.US' (not found)
// Right: 'USD' → returns correct translation
Caching:
php artisan view:clear
php artisan cache:clear
Blade Cache:
@currency directives, clear Blade cache:
php artisan view:clear
Check Available Locales:
// List all available locales
$locales = array_keys(LaravelLang\NativeCurrencyNames\NativeCurrencyNames::getLocales());
Verify Currency Codes:
// Check if a currency code exists for a locale
$exists = file_exists(resource_path("lang/vendor/native-currency-names/{$locale}.php"))
&& str_contains(file_get_contents(resource_path("lang/vendor/native-currency-names/{$locale}.php")), "currency.{$code}");
Fallback Logic:
trans() with fallback for graceful degradation:
$name = trans('native-currency-names::currency.USD', [], 'ja', 'en');
// Falls back to English if 'ja' locale is missing the key
Custom Locales:
NativeCurrencyNames class or publishing custom translations:
php artisan lang:publish --provider="LaravelLang\NativeCurrencyNames\ServiceProvider" --tag=custom
Override Translations:
resources/lang/vendor/native-currency-names/ directory. Files in this directory take precedence.Programmatic Access:
$data = LaravelLang\NativeCurrencyNames\NativeCurrencyNames::getData();
$currencyName = $data['ja']['currency']['USD']; // "ドル"
Dynamic Currency Codes:
$currencyName = $this->getCurrencyName($code, $locale);
// Custom logic for unsupported codes
Avoid Runtime Lookups:
$cacheKey = "currency_{$code}_{$locale}";
$name = cache()->remember($cacheKey, now()->addHours(1), function() use ($code, $locale) {
return __('native-currency-names::currency.' . $code, [], $locale);
});
Locale Negotiation:
$locale = app()->getLocale(); // Use app's current locale
$currencyName = __('native-currency-names::currency.' . $code, [], $locale);
Default Config:
config/native-currency-names.php). Extend it for custom behavior:
'default_locale' => 'en',
'fallback_locale' => 'en',
'supported_currencies' => ['USD', 'EUR', 'JPY'], // Optional: whitelist
Service Provider:
$this->app->bind(
'LaravelLang\NativeCurrencyNames\NativeCurrencyNames',
function ($app) {
return new YourCustomCurrencyNames();
}
);
Right-to-Left (RTL) Languages:
<div dir="rtl">
{{ __('native-currency-names::currency.SAR') }} {{ $amount }}
</div>
Currency Symbols:
number_format() for locale-aware formatting:
$formatted = number_format($amount, 2, app()->getLocale() === 'ja' ? ',' : '.', ' ');
echo "{$formatted} " . __('native-currency-names::currency.JPY');
Pluralization:
$rules = __('You have :count item|You have :count items', ['count' => $
How can I help you explore Laravel packages today?