diff options
Diffstat (limited to 'vendor/commerceguys/intl/src')
5 files changed, 93 insertions, 17 deletions
diff --git a/vendor/commerceguys/intl/src/Formatter/CurrencyFormatter.php b/vendor/commerceguys/intl/src/Formatter/CurrencyFormatter.php index 8d4d11f27..7d3b90d6e 100644 --- a/vendor/commerceguys/intl/src/Formatter/CurrencyFormatter.php +++ b/vendor/commerceguys/intl/src/Formatter/CurrencyFormatter.php @@ -238,4 +238,18 @@ class CurrencyFormatter implements CurrencyFormatterInterface throw new InvalidArgumentException(sprintf('Unrecognized currency display "%s".', $options['currency_display'])); } } + + /** + * {@inheritdoc} + */ + protected function getLocalizedSymbols(NumberFormat $numberFormat): array + { + return [ + '.' => $numberFormat->getDecimalCurrencySeparator(), + ',' => $numberFormat->getGroupingCurrencySeparator(), + '+' => $numberFormat->getPlusSign(), + '-' => $numberFormat->getMinusSign(), + '%' => $numberFormat->getPercentSign(), + ]; + } } diff --git a/vendor/commerceguys/intl/src/Formatter/FormatterTrait.php b/vendor/commerceguys/intl/src/Formatter/FormatterTrait.php index aa63c1f5f..11cdd2372 100644 --- a/vendor/commerceguys/intl/src/Formatter/FormatterTrait.php +++ b/vendor/commerceguys/intl/src/Formatter/FormatterTrait.php @@ -124,13 +124,7 @@ trait FormatterTrait $number = strtr($number, $this->digits[$numberingSystem]); } // Localize symbols. - $replacements = [ - '.' => $numberFormat->getDecimalSeparator(), - ',' => $numberFormat->getGroupingSeparator(), - '+' => $numberFormat->getPlusSign(), - '-' => $numberFormat->getMinusSign(), - '%' => $numberFormat->getPercentSign(), - ]; + $replacements = $this->getLocalizedSymbols($numberFormat); $number = strtr($number, $replacements); return $number; @@ -149,15 +143,10 @@ trait FormatterTrait */ protected function parseNumber($number, NumberFormat $numberFormat) { - $replacements = [ - $numberFormat->getGroupingSeparator() => '', - // Convert the localized symbols back to their original form. - $numberFormat->getDecimalSeparator() => '.', - $numberFormat->getPlusSign() => '+', - $numberFormat->getMinusSign() => '-', - $numberFormat->getPercentSign() => '%', - - // Strip whitespace (spaces and non-breaking spaces). + // Convert localized symbols back to their original form. + $replacements = array_flip($this->getLocalizedSymbols($numberFormat)); + // Strip whitespace (spaces and non-breaking spaces). + $replacements += [ ' ' => '', chr(0xC2) . chr(0xA0) => '', ]; @@ -168,6 +157,8 @@ trait FormatterTrait } $number = strtr($number, $replacements); + // Strip grouping separators. + $number = str_replace(',', '', $number); // Convert the accounting format for negative numbers. if (substr($number, 0, 1) == '(' && substr($number, -1, 1) == ')') { $number = '-' . str_replace(['(', ')'], '', $number); @@ -212,4 +203,15 @@ trait FormatterTrait * @return string[] The patterns, keyed by style. */ abstract protected function getAvailablePatterns(NumberFormat $numberFormat); + + /** + * Gets the localized symbols for the provided number format. + * + * Used to localize the number in localizeNumber(). + * + * @param NumberFormat $numberFormat The number format. + * + * @return array + */ + abstract protected function getLocalizedSymbols(NumberFormat $numberFormat): array; } diff --git a/vendor/commerceguys/intl/src/Formatter/NumberFormatter.php b/vendor/commerceguys/intl/src/Formatter/NumberFormatter.php index 95c9a0020..03795fe6d 100644 --- a/vendor/commerceguys/intl/src/Formatter/NumberFormatter.php +++ b/vendor/commerceguys/intl/src/Formatter/NumberFormatter.php @@ -160,4 +160,18 @@ class NumberFormatter implements NumberFormatterInterface throw new InvalidArgumentException(sprintf('Unrecognized style "%s".', $options['style'])); } } + + /** + * {@inheritdoc} + */ + protected function getLocalizedSymbols(NumberFormat $numberFormat): array + { + return [ + '.' => $numberFormat->getDecimalSeparator(), + ',' => $numberFormat->getGroupingSeparator(), + '+' => $numberFormat->getPlusSign(), + '-' => $numberFormat->getMinusSign(), + '%' => $numberFormat->getPercentSign(), + ]; + } } diff --git a/vendor/commerceguys/intl/src/NumberFormat/NumberFormat.php b/vendor/commerceguys/intl/src/NumberFormat/NumberFormat.php index 156470eee..8c41a5aa8 100644 --- a/vendor/commerceguys/intl/src/NumberFormat/NumberFormat.php +++ b/vendor/commerceguys/intl/src/NumberFormat/NumberFormat.php @@ -68,6 +68,13 @@ final class NumberFormat protected $decimalSeparator = '.'; /** + * The decimal separator for currency amounts. + * + * @var string + */ + protected $decimalCurrencySeparator = '.'; + + /** * The grouping separator. * * @var string @@ -75,6 +82,13 @@ final class NumberFormat protected $groupingSeparator = ','; /** + * The grouping separator for currency amounts. + * + * @var string + */ + protected $groupingCurrencySeparator = ','; + + /** * The plus sign. * * @var string @@ -130,9 +144,19 @@ final class NumberFormat if (isset($definition['decimal_separator'])) { $this->decimalSeparator = $definition['decimal_separator']; } + if (isset($definition['decimal_currency_separator'])) { + $this->decimalCurrencySeparator = $definition['decimal_currency_separator']; + } else { + $this->decimalCurrencySeparator = $this->decimalSeparator; + } if (isset($definition['grouping_separator'])) { $this->groupingSeparator = $definition['grouping_separator']; } + if (isset($definition['grouping_currency_separator'])) { + $this->groupingCurrencySeparator = $definition['grouping_currency_separator']; + } else { + $this->groupingCurrencySeparator = $this->groupingSeparator; + } if (isset($definition['plus_sign'])) { $this->plusSign = $definition['plus_sign']; } @@ -227,7 +251,17 @@ final class NumberFormat } /** - * Gets the grouping separator. + * Gets the decimal separator for currency amounts. + * + * @return string + */ + public function getDecimalCurrencySeparator() + { + return $this->decimalCurrencySeparator; + } + + /** + * Gets the grouping separator for currency amounts. * * @return string */ @@ -237,6 +271,16 @@ final class NumberFormat } /** + * Gets the currency grouping separator. + * + * @return string + */ + public function getGroupingCurrencySeparator() + { + return $this->groupingCurrencySeparator; + } + + /** * Gets the plus sign. * * @return string diff --git a/vendor/commerceguys/intl/src/NumberFormat/NumberFormatRepository.php b/vendor/commerceguys/intl/src/NumberFormat/NumberFormatRepository.php index 948fa533c..987ceda89 100644 --- a/vendor/commerceguys/intl/src/NumberFormat/NumberFormatRepository.php +++ b/vendor/commerceguys/intl/src/NumberFormat/NumberFormatRepository.php @@ -227,6 +227,7 @@ class NumberFormatRepository implements NumberFormatRepositoryInterface 'accounting_currency_pattern' => '#,##0.00 ¤', 'decimal_separator' => ',', 'grouping_separator' => ' ', + 'grouping_currency_separator' => '.', ], 'de-CH' => [ 'currency_pattern' => '¤ #,##0.00;¤-#,##0.00', @@ -476,6 +477,7 @@ class NumberFormatRepository implements NumberFormatRepositoryInterface 'currency_pattern' => '#,##0.00 ¤', 'accounting_currency_pattern' => '#,##0.00 ¤;(#,##0.00 ¤)', 'decimal_separator' => ',', + 'decimal_currency_separator' => '.', 'grouping_separator' => ' ', ], 'fr-LU' => [ |