HEX
Server: Microsoft-IIS/8.5
System: Windows NT YDAWBH120 6.3 build 9600 (Windows Server 2012 R2 Standard Edition) AMD64
User: tentjecom_web (0)
PHP: 7.4.14
Disabled: NONE
Upload Files
File: D:/HostingSpaces/SBogers10/zuiderbos.komma.pro/app/Komma/LanguageService.php
<?php

namespace Komma;

use Illuminate\Support\Facades\Session;
use Komma\Kms\Languages\Language;

class LanguageService
{
    /*
     * Array available languages
     * [languageId => languageSlug]
     */
    protected $availableLanguages;

    /*
     * String default language slug
     */
    protected $defaultLanguage;

    /*
     * String current language slug
     */
    protected $currentLanguage;

    public function setLanguage()
    {
        //if root check the accept language for language indication if isset
//        if($this->useAcceptLanguage()) $this->setLanguageByAcceptLanguage();
//        else $this->setLanguageBySession();

        //Set language by default language in config
        $this->setLanguageBySession();
    }

    public function setLanguageBySession()
    {
        $this->availableLanguages = \Config::get('app.availableLanguages');
        $this->defaultLanguage = \Config::get('app.locale');
        $this->currentLanguage = Session::get('lang', $this->defaultLanguage);
        \App::setLocale($this->currentLanguage);
    }

    public function setLanguageByAcceptLanguage()
    {
        //convert accept language to language array ordered on preference
        $langArray = $this->convertAcceptLanguage($_SERVER['HTTP_ACCEPT_LANGUAGE']);

        //Loop trough the array a preferred language
        foreach (array_keys($langArray) as $lang) {
            //check if it is in available languages
            foreach (\Config::get('app.availableLanguages') as $availableLanguage) {
                //if there is a match, set language and return
                if (strpos($lang, $availableLanguage) === 0) {
                    $this->currentLanguage = $availableLanguage;
                    Session::set('lang', $availableLanguage);

                    return;
                }
            }
        }
    }

    /*
     * Set Current Language by URI
     */
    public function setCurrentLanguage($lang)
    {
        $this->setLanguage();
        if (! in_array($lang, $this->availableLanguages)) {
            echo 'error in set Language';
        }

        $this->currentLanguage = $lang;
        Session::set('lang', $lang);
    }

    /*
     * Get Current Language by Id
     */
    public function getCurrentLanguageId()
    {
        $lang = $this->getLangByIso(\App::getLocale());

        return $lang->id;
    }

    /**
     * Check if current route is correct with set language
     */
    public function checkRouteWithSetLanguage()
    {
        $segments = \Request::segments();
        if (count($segments) > 0) {
            $lang = Language::where('iso_2', '=', $segments[0])->first();
            if ($lang != null && $lang->iso_2 != $this->currentLanguage) {
                $this->setCurrentLanguage($lang->iso_2);
            }
        }
    }

    public function getLangByIso($langIso)
    {
        return \DB::table('languages')
            ->where('iso_2', '=', $langIso)
            ->first();
    }

    public function getIsoById($id)
    {
        return \DB::table('languages')
            ->where('id', '=', $id)
            ->first();
    }

    /**
     * Check if we should use the Accept Language
     * @return bool
     */
    private function useAcceptLanguage()
    {
        // Only use on root
        if (count(\Request::segments()) == 0) {
            return false;
        }

        // No Accept Language available
        if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
            return false;
        }

        // No Session found
        if (! \Session::has('lang')) {
            return false;
        }

        return true;
    }

    /**
     * Encode accept language header
     * http://www.thefutureoftheweb.com/blog/use-accept-language-header
     *
     * @param $serverString
     * @return array
     */
    private function convertAcceptLanguage($serverString)
    {
        $langs = [];

        // break up string into pieces (languages and q factors)
        preg_match_all('/([a-z]{1,8}(-[a-z]{1,8})?)\s*(;\s*q\s*=\s*(1|0\.[0-9]+))?/i', $serverString, $lang_parse);

        if (count($lang_parse[1])) {
            // create a list like "en" => 0.8
            $langs = array_combine($lang_parse[1], $lang_parse[4]);

            // set default to 1 for any without q factor
            foreach ($langs as $lang => $val) {
                if ($val === '') {
                    $langs[$lang] = 1;
                }
            }

            // sort list based on value
            arsort($langs, SORT_NUMERIC);
        }

        return $langs;
    }
}