Base::language PHP Method

language() public method

Assign/auto-detect language
public language ( $code ) : string
$code string
return string
    function language($code)
    {
        $code = preg_replace('/\\h+|;q=[0-9.]+/', '', $code);
        $code .= ($code ? ',' : '') . $this->fallback;
        $this->languages = [];
        foreach (array_reverse(explode(',', $code)) as $lang) {
            if (preg_match('/^(\\w{2})(?:-(\\w{2}))?\\b/i', $lang, $parts)) {
                // Generic language
                array_unshift($this->languages, $parts[1]);
                if (isset($parts[2])) {
                    // Specific language
                    $parts[0] = $parts[1] . '-' . ($parts[2] = strtoupper($parts[2]));
                    array_unshift($this->languages, $parts[0]);
                }
            }
        }
        $this->languages = array_unique($this->languages);
        $locales = [];
        $windows = preg_match('/^win/i', PHP_OS);
        // Work around PHP's Turkish locale bug
        foreach (preg_grep('/^(?!tr)/i', $this->languages) as $locale) {
            if ($windows) {
                $parts = explode('-', $locale);
                $locale = @constant('ISO::LC_' . $parts[0]);
                if (isset($parts[1]) && ($country = @constant('ISO::CC_' . strtolower($parts[1])))) {
                    $locale .= '-' . $country;
                }
            }
            $locales[] = $locale;
            $locales[] = $locale . '.' . ini_get('default_charset');
        }
        setlocale(LC_ALL, str_replace('-', '_', $locales));
        return implode(',', $this->languages);
    }