-
-
Notifications
You must be signed in to change notification settings - Fork 49
/
Copy pathCurrencies.php
146 lines (125 loc) · 4.55 KB
/
Currencies.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <[email protected]>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\Intl;
use Symfony\Component\Intl\Exception\MissingResourceException;
/**
* Gives access to currency-related ICU data.
*
* @author Bernhard Schussek <[email protected]>
* @author Roland Franssen <[email protected]>
*/
final class Currencies extends ResourceBundle
{
private const INDEX_SYMBOL = 0;
private const INDEX_NAME = 1;
private const INDEX_FRACTION_DIGITS = 0;
private const INDEX_ROUNDING_INCREMENT = 1;
private const INDEX_CASH_FRACTION_DIGITS = 2;
private const INDEX_CASH_ROUNDING_INCREMENT = 3;
/**
* @return string[]
*/
public static function getCurrencyCodes(): array
{
return self::readEntry(['Currencies'], 'meta');
}
public static function exists(string $currency): bool
{
try {
self::readEntry(['Names', $currency, self::INDEX_NAME]);
return true;
} catch (MissingResourceException) {
return false;
}
}
/**
* @throws MissingResourceException if the currency code does not exist
*/
public static function getName(string $currency, ?string $displayLocale = null): string
{
return self::readEntry(['Names', $currency, self::INDEX_NAME], $displayLocale);
}
/**
* @return string[]
*/
public static function getNames(?string $displayLocale = null): array
{
// ====================================================================
// For reference: It is NOT possible to return names indexed by
// numeric code here, because some numeric codes map to multiple
// 3-letter codes (e.g. 32 => "ARA", "ARP", "ARS")
// ====================================================================
$names = self::readEntry(['Names'], $displayLocale);
if ($names instanceof \Traversable) {
$names = iterator_to_array($names);
}
array_walk($names, function (&$value) {
$value = $value[self::INDEX_NAME];
});
return self::asort($names, $displayLocale);
}
/**
* @throws MissingResourceException if the currency code does not exist
*/
public static function getSymbol(string $currency, ?string $displayLocale = null): string
{
return self::readEntry(['Names', $currency, self::INDEX_SYMBOL], $displayLocale);
}
public static function getFractionDigits(string $currency): int
{
try {
return self::readEntry(['Meta', $currency, self::INDEX_FRACTION_DIGITS], 'meta');
} catch (MissingResourceException) {
return self::readEntry(['Meta', 'DEFAULT', self::INDEX_FRACTION_DIGITS], 'meta');
}
}
public static function getRoundingIncrement(string $currency): int
{
try {
return self::readEntry(['Meta', $currency, self::INDEX_ROUNDING_INCREMENT], 'meta');
} catch (MissingResourceException) {
return self::readEntry(['Meta', 'DEFAULT', self::INDEX_ROUNDING_INCREMENT], 'meta');
}
}
public static function getCashFractionDigits(string $currency): int
{
try {
return self::readEntry(['Meta', $currency, self::INDEX_CASH_FRACTION_DIGITS], 'meta');
} catch (MissingResourceException) {
return self::readEntry(['Meta', 'DEFAULT', self::INDEX_CASH_FRACTION_DIGITS], 'meta');
}
}
public static function getCashRoundingIncrement(string $currency): int
{
try {
return self::readEntry(['Meta', $currency, self::INDEX_CASH_ROUNDING_INCREMENT], 'meta');
} catch (MissingResourceException) {
return self::readEntry(['Meta', 'DEFAULT', self::INDEX_CASH_ROUNDING_INCREMENT], 'meta');
}
}
/**
* @throws MissingResourceException if the currency code has no numeric code
*/
public static function getNumericCode(string $currency): int
{
return self::readEntry(['Alpha3ToNumeric', $currency], 'meta');
}
/**
* @throws MissingResourceException if the numeric code does not exist
*/
public static function forNumericCode(int $numericCode): array
{
return self::readEntry(['NumericToAlpha3', (string) $numericCode], 'meta');
}
protected static function getPath(): string
{
return Intl::getDataDirectory().'/'.Intl::CURRENCY_DIR;
}
}