Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1441 ariadna 1
<?php
2
 
3
namespace PhpOffice\PhpSpreadsheet\Style\NumberFormat\Wizard;
4
 
5
use NumberFormatter;
6
use PhpOffice\PhpSpreadsheet\Exception;
7
 
8
final class Locale
9
{
10
    /**
11
     * Language code: ISO-639 2 character, alpha.
12
     * Optional script code: ISO-15924 4 alpha.
13
     * Optional country code: ISO-3166-1, 2 character alpha.
14
     * Separated by underscores or dashes.
15
     */
16
    public const STRUCTURE = '/^(?P<language>[a-z]{2})([-_](?P<script>[a-z]{4}))?([-_](?P<country>[a-z]{2}))?$/i';
17
 
18
    private NumberFormatter $formatter;
19
 
20
    public function __construct(?string $locale, int $style)
21
    {
22
        if (class_exists(NumberFormatter::class) === false) {
23
            throw new Exception();
24
        }
25
 
26
        $formatterLocale = str_replace('-', '_', $locale ?? '');
27
        $this->formatter = new NumberFormatter($formatterLocale, $style);
28
        if ($this->formatter->getLocale() !== $formatterLocale) {
29
            throw new Exception("Unable to read locale data for '{$locale}'");
30
        }
31
    }
32
 
33
    public function format(bool $stripRlm = true): string
34
    {
35
        $str = $this->formatter->getPattern();
36
 
37
        return ($stripRlm && str_starts_with($str, "\xe2\x80\x8f")) ? substr($str, 3) : $str;
38
    }
39
}