Formátovanie a parsovanie
format() vykresľuje cez zaregistrovaný MoneyFormatter: ICU, ak je načítané ext-intl, inak deterministický formátovač. Lokalita sa berie z argumentu, potom z money.formatting.locale a nakoniec z lokality aplikácie:
use RoundlyConsulting\Money\Formatting\FormatOptions;
$usd = Money::ofMajor('1234.50', 'USD');
$usd->format(); // app locale (or money.formatting.locale)
$usd->format('en_US'); // "$1,234.50"
$usd->format('en_US', FormatOptions::code()); // "USD 1,234.50"
$usd->format('en_US', FormatOptions::none()); // "1,234.50"
$usd->format('en_US', new FormatOptions(grouping: false)); // "$1234.50"
$usd->format('en_US', new FormatOptions(fractionDigits: 0, rounding: RoundingMode::HalfEven)); // "$1,234"
Money::ofMajor('10', 'USD')->format('en_US', FormatOptions::whole()); // "$10"
Money::ofMajor('1234.50', 'EUR')->format('de_CH', FormatOptions::code()); // "EUR 1’234.50"
Money::ofMajor('1234.50', 'EUR')->format('sk', FormatOptions::code()); // "1 234,50 EUR"
Money::ofMinor(1234, 'JPY')->format('en_US'); // "¥1,234" — exponent 0
Money::ofMinor(1234, 'BHD')->format('en_US'); // "BHD 1.234" — exponent 3
Money::ofMinor('1234567890123456789', 'USD')->format('en_US'); // "$12,345,678,901,234,567.89"FormatOptions
- display — CurrencyDisplay::Symbol, Code alebo None; skratky FormatOptions::code() a FormatOptions::none().
- fractionDigits — null znamená exponent meny; menej číslic sa zaokrúhli podľa rounding (null = money.rounding).
- trimTrailingZeros — FormatOptions::whole() pri celých sumách vynechá nulové desatinné miesta.
- grouping — false vypne oddeľovače tisícov.
ICU formátuje double, presne do 15 platných číslic. Nad túto hranicu balík vloží presné desatinné číslice do šablóny ICU, takže oddeľovače, zoskupovanie (vrátane indického 3/2) aj číselná sústava lokality stále sedia. Vlastné meny, ktoré ICU nepozná, sa zobrazia s vlastným symbolom, napríklad „pts 1,200“.
Deterministický fallback
Nastavte MONEY_FORMATTER=decimal (alebo použite auto bez ext-intl) a výstup bude na každom serveri identický, riadený vzorom a oddeľovačmi z fallback. Ak nastavíte intl bez rozšírenia, balík okamžite vyhodí FormatterUnavailable.
// config/money.php — used when MONEY_FORMATTER=decimal, or with auto and no ext-intl
'formatting' => [
'driver' => env('MONEY_FORMATTER', 'auto'),
'fallback' => [
'pattern' => '{sign}{amount} {code}', // placeholders: {sign} {amount} {code} {symbol}
'decimal_separator' => '.',
'thousands_separator' => ',',
],
],
Money::ofMajor('1234.50', 'USD')->format(); // "1,234.50 USD" — identical on every hostParsovanie vstupu
Money::parse('1 234,50 EUR', locale: 'sk'); // 1234.50 EUR
Money::parse('(1,234.50)', 'USD', 'en'); // -1234.50 USD — accounting negative
Money::parse("CHF 1’234.50", locale: 'de_CH'); // 1234.50 CHF
Money::parse('12,34,567.50', 'INR', 'hi_IN'); // 1234567.50 INR — Indian grouping
Money::parse('$5', 'CAD', 'en'); // 5.00 CAD — a shared symbol reads as the argument
Money::parse('$5'); // 5.00 USD in a USD shop — InvalidAmount in a EUR one
Money::parse('1.23.4', 'EUR', 'en'); // throws InvalidAmount — refused, never guessed
Money::parse('10.005', 'USD', 'en'); // throws RoundingNecessary- Voliteľný token meny na začiatku alebo na konci: registrovaný kód alebo symbol. Symbol, ktorý používa viac krajín ($, £, ¥, kr), sa prečíta ako mena z argumentu, alebo ako money.default_currency, ak ho táto mena používa; inak sa odmietne (InvalidAmount), nikdy sa neháda — Money::parse('$5') je v obchode s USD 5.00 USD a v obchode s EUR chyba.
- Rozpoznaná mena, ktorá sa líši od argumentu, vyhodí CurrencyMismatch; bez tokenu aj argumentu sa použije money.default_currency.
- Znamienka: mínus alebo plus na začiatku či na konci, prípadne účtovnícke zátvorky. Dve znamienka alebo nespárované zátvorky sa odmietnu.
- Najviac jeden desatinný oddeľovač; zoskupovanie len v celej časti a len v správne tvorených skupinách — nejednoznačný vstup sa odmietne, nikdy sa neháda.
- Príliš presný vstup vyhodí RoundingNecessary; vstup je obmedzený na 128 znakov.
Blade
<p>{{ __('Total') }}: @money($order->total)</p>
<p>@money($order->total, 'sk')</p> {{-- null renders an empty string --}}@money($price) alebo @money($price, 'sk') vypíše escapovaný výstup zaregistrovaného formátovača; null vykreslí prázdny reťazec. Zapína a vypína sa cez macros.blade.
Prejavte lásku k open source
Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.
Ďalšie spôsoby podpory vrátane kryptomienOdoslaním daru súhlasíte s našimi podmienkami prijímania darov.
Chcete to zabudovať do svojho produktu?
Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.