Вход Регистрация
Файл: system/vendor/nesbot/carbon/src/Carbon/Language.php
Строк: 330
<?php

/**
 * This file is part of the Carbon package.
 *
 * (c) Brian Nesbitt <brian@nesbot.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */
namespace Carbon;

use 
JsonSerializable;

class 
Language implements JsonSerializable
{
    
/**
     * @var array
     */
    
protected static $languagesNames;

    
/**
     * @var array
     */
    
protected static $regionsNames;

    
/**
     * @var string
     */
    
protected $id;

    
/**
     * @var string
     */
    
protected $code;

    
/**
     * @var string|null
     */
    
protected $variant;

    
/**
     * @var string|null
     */
    
protected $region;

    
/**
     * @var array
     */
    
protected $names;

    
/**
     * @var string
     */
    
protected $isoName;

    
/**
     * @var string
     */
    
protected $nativeName;

    public function 
__construct(string $id)
    {
        
$this->id str_replace('-''_'$id);
        
$parts explode('_'$this->id);
        
$this->code $parts[0];

        if (isset(
$parts[1])) {
            if (!
preg_match('/^[A-Z]+$/'$parts[1])) {
                
$this->variant $parts[1];
                
$parts[1] = $parts[2] ?? null;
            }
            if (
$parts[1]) {
                
$this->region $parts[1];
            }
        }
    }

    
/**
     * Get the list of the known languages.
     *
     * @return array
     */
    
public static function all()
    {
        if (!static::
$languagesNames) {
            static::
$languagesNames = require __DIR__.'/List/languages.php';
        }

        return static::
$languagesNames;
    }

    
/**
     * Get the list of the known regions.
     *
     * @return array
     */
    
public static function regions()
    {
        if (!static::
$regionsNames) {
            static::
$regionsNames = require __DIR__.'/List/regions.php';
        }

        return static::
$regionsNames;
    }

    
/**
     * Get both isoName and nativeName as an array.
     *
     * @return array
     */
    
public function getNames(): array
    {
        if (!
$this->names) {
            
$this->names = static::all()[$this->code] ?? [
                
'isoName' => $this->code,
                
'nativeName' => $this->code,
            ];
        }

        return 
$this->names;
    }

    
/**
     * Returns the original locale ID.
     *
     * @return string
     */
    
public function getId(): string
    
{
        return 
$this->id;
    }

    
/**
     * Returns the code of the locale "en"/"fr".
     *
     * @return string
     */
    
public function getCode(): string
    
{
        return 
$this->code;
    }

    
/**
     * Returns the variant code such as cyrl/latn.
     *
     * @return string|null
     */
    
public function getVariant(): ?string
    
{
        return 
$this->variant;
    }

    
/**
     * Returns the variant such as Cyrillic/Latin.
     *
     * @return string|null
     */
    
public function getVariantName(): ?string
    
{
        if (
$this->variant === 'Latn') {
            return 
'Latin';
        }

        if (
$this->variant === 'Cyrl') {
            return 
'Cyrillic';
        }

        return 
$this->variant;
    }

    
/**
     * Returns the region part of the locale.
     *
     * @return string|null
     */
    
public function getRegion(): ?string
    
{
        return 
$this->region;
    }

    
/**
     * Returns the region name for the current language.
     *
     * @return string|null
     */
    
public function getRegionName(): ?string
    
{
        return 
$this->region ? (static::regions()[$this->region] ?? $this->region) : null;
    }

    
/**
     * Returns the long ISO language name.
     *
     * @return string
     */
    
public function getFullIsoName(): string
    
{
        if (!
$this->isoName) {
            
$this->isoName $this->getNames()['isoName'];
        }

        return 
$this->isoName;
    }

    
/**
     * Set the ISO language name.
     *
     * @param string $isoName
     */
    
public function setIsoName(string $isoName): self
    
{
        
$this->isoName $isoName;

        return 
$this;
    }

    
/**
     * Return the full name of the language in this language.
     *
     * @return string
     */
    
public function getFullNativeName(): string
    
{
        if (!
$this->nativeName) {
            
$this->nativeName $this->getNames()['nativeName'];
        }

        return 
$this->nativeName;
    }

    
/**
     * Set the name of the language in this language.
     *
     * @param string $nativeName
     */
    
public function setNativeName(string $nativeName): self
    
{
        
$this->nativeName $nativeName;

        return 
$this;
    }

    
/**
     * Returns the short ISO language name.
     *
     * @return string
     */
    
public function getIsoName(): string
    
{
        
$name $this->getFullIsoName();

        return 
trim(strstr($name','true) ?: $name);
    }

    
/**
     * Get the short name of the language in this language.
     *
     * @return string
     */
    
public function getNativeName(): string
    
{
        
$name $this->getFullNativeName();

        return 
trim(strstr($name','true) ?: $name);
    }

    
/**
     * Get a string with short ISO name, region in parentheses if applicable, variant in parentheses if applicable.
     *
     * @return string
     */
    
public function getIsoDescription()
    {
        
$region $this->getRegionName();
        
$variant $this->getVariantName();

        return 
$this->getIsoName().($region ' ('.$region.')' '').($variant ' ('.$variant.')' '');
    }

    
/**
     * Get a string with short native name, region in parentheses if applicable, variant in parentheses if applicable.
     *
     * @return string
     */
    
public function getNativeDescription()
    {
        
$region $this->getRegionName();
        
$variant $this->getVariantName();

        return 
$this->getNativeName().($region ' ('.$region.')' '').($variant ' ('.$variant.')' '');
    }

    
/**
     * Get a string with long ISO name, region in parentheses if applicable, variant in parentheses if applicable.
     *
     * @return string
     */
    
public function getFullIsoDescription()
    {
        
$region $this->getRegionName();
        
$variant $this->getVariantName();

        return 
$this->getFullIsoName().($region ' ('.$region.')' '').($variant ' ('.$variant.')' '');
    }

    
/**
     * Get a string with long native name, region in parentheses if applicable, variant in parentheses if applicable.
     *
     * @return string
     */
    
public function getFullNativeDescription()
    {
        
$region $this->getRegionName();
        
$variant $this->getVariantName();

        return 
$this->getFullNativeName().($region ' ('.$region.')' '').($variant ' ('.$variant.')' '');
    }

    
/**
     * Returns the original locale ID.
     *
     * @return string
     */
    
public function __toString()
    {
        return 
$this->getId();
    }

    
/**
     * Get a string with short ISO name, region in parentheses if applicable, variant in parentheses if applicable.
     *
     * @return string
     */
    
public function jsonSerialize()
    {
        return 
$this->getIsoDescription();
    }
}
Онлайн: 0
Реклама