Jump to content

Auto Switch based in browser language ! ISSUE


Screamfox

Recommended Posts

I found a old pretty cool script and i would like to perform him because like as been reported before the hook put the admin area with infinite loops
 

<?php

add_hook('ClientAreaPage', 1, switch_language($vars));

function switch_language($vars) {
 
$country_to_language = array(
'default' => 'english',
'AR' => 'arabic',
'AR-DZ' => 'arabic',
'AR-BH' => 'arabic',
'AR-EG' => 'arabic',
'AR-IQ' => 'arabic',
'AR-JO' => 'arabic',
'AR-KW' => 'arabic',
'AR-LB' => 'arabic',
'AR-LY' => 'arabic',
'AR-MA' => 'arabic',
'AR-OM' => 'arabic',
'AR-QA' => 'arabic',
'AR-SA' => 'arabic',
'AR-SY' => 'arabic',
'AR-TN' => 'arabic',
'AR-AE' => 'arabic',
'AR-YE' => 'arabic',
'AZ' => 'azerbaijani',
'CA' => 'catalan',
'ZH' => 'chinese',
'ZH-HK' => 'chinese',
'ZH-CN' => 'chinese',
'ZH-SG' => 'chinese',
'ZH-TW' => 'chinese',
'HR' => 'croatian',
'CS' => 'czech',
'DA' => 'danish',
'NL' => 'dutch',
'NL-BE' => 'dutch',
'EN' => 'english',
'EN-AU' => 'english',
'EN-BZ' => 'english',
'EN-CA' => 'english',
'EN-IE' => 'english',
'EN-JM' => 'english',
'EN-NZ' => 'english',
'EN-PH' => 'english',
'EN-ZA' => 'english',
'EN-TT' => 'english',
'EN-GB' => 'english',
'EN-US' => 'english',
'EN-ZW' => 'english',
'ET' => 'estonian',
'FA' => 'farsi',
'FR' => 'french',
'FR-BE' => 'french',
'FR-CA' => 'french',
'FR-FR' => 'french',
'FR-LU' => 'french',
'FR-MC' => 'french',
'FR-CH' => 'french',
'DE' => 'german',
'DE-AT' => 'german',
'DE-DE' => 'german',
'DE-LI' => 'german',
'DE-LU' => 'german',
'DE-CH' => 'german',
'HE' => 'hebrew',
'HU' => 'hungarian',
'IT' => 'italian',
'IT-CH' => 'italian',
'MK' => 'macedonian',
'NO' => 'norwegian',
'NB' => 'norwegian',
'NN' => 'norwegian',
'PT-BR' => 'portuguese-br',
'PT' => 'portuguese-pt',
'RO' => 'romanian',
'RO-MO' => 'romanian',
'RU' => 'russian',
'RU-MO' => 'russian',
'ES' => 'spanish',
'ES-AR' => 'spanish',
'ES-BO' => 'spanish',
'ES-CL' => 'spanish',
'ES-CO' => 'spanish',
'ES-CR' => 'spanish',
'ES-DO' => 'spanish',
'ES-EC' => 'spanish',
'ES-SV' => 'spanish',
'ES-GT' => 'spanish',
'ES-HN' => 'spanish',
'ES-MX' => 'spanish',
'ES-NI' => 'spanish',
'ES-PA' => 'spanish',
'ES-PY' => 'spanish',
'ES-PE' => 'spanish',
'ES-PR' => 'spanish',
'ES-ES' => 'spanish',
'ES-UY' => 'spanish',
'ES-VE' => 'spanish',
'SV' => 'swedish',
'SV-FI' => 'swedish',
'SV-SV' => 'swedish',
'TR' => 'turkish',
'UK' => 'ukranian',
// NOTE: You can add more below
);

if(!isset($_SESSION['switch-language']) && $_SESSION['uid'] == false) 
    {
        $_SESSION['switch-language'] = true; // prevent from redirecting back again in this session
    }

$current_country = strtoupper(substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2));

$language = $current_country != '' && isset($country_to_language[$current_country]) 
               ? $country_to_language[$current_country]
               : $country_to_language['default'];

if(!isset($_SESSION['Language']) || $_SESSION['Language'] != $language) {
       $location = '?language='.$language;     
       if($_SERVER['QUERY_STRING'] != '')
           $location .= '&'.$_SERVER['QUERY_STRING'];

       ob_clean();
       header('location: '.$location);
       die();
   }
	
}
 

?>

some one have one idea to do a work arround, he give so many loops on admin area like this
 

administator/?language=portuguese-pt&language=portuguese-pt&language=portuguese-pt&amp;lang...

 

so there is any suggestion to fix this old good script he works great for client area but no for admin area ☹️

credits for, 

@webix

@Remitur

@brian!

Edited by Screamfox
Link to comment
Share on other sites

Issue fiXed just added this the name of the admin folder like 

$customadminfolder = "namefolder";

 

<?php

add_hook('ClientAreaPage', 1, switch_language($vars));

function switch_language($vars) {
 
$country_to_language = array(
'default' => 'english',
'AR' => 'arabic',
'AR-DZ' => 'arabic',
'AR-BH' => 'arabic',
'AR-EG' => 'arabic',
'AR-IQ' => 'arabic',
'AR-JO' => 'arabic',
'AR-KW' => 'arabic',
'AR-LB' => 'arabic',
'AR-LY' => 'arabic',
'AR-MA' => 'arabic',
'AR-OM' => 'arabic',
'AR-QA' => 'arabic',
'AR-SA' => 'arabic',
'AR-SY' => 'arabic',
'AR-TN' => 'arabic',
'AR-AE' => 'arabic',
'AR-YE' => 'arabic',
'AZ' => 'azerbaijani',
'CA' => 'catalan',
'ZH' => 'chinese',
'ZH-HK' => 'chinese',
'ZH-CN' => 'chinese',
'ZH-SG' => 'chinese',
'ZH-TW' => 'chinese',
'HR' => 'croatian',
'CS' => 'czech',
'DA' => 'danish',
'NL' => 'dutch',
'NL-BE' => 'dutch',
'EN' => 'english',
'EN-AU' => 'english',
'EN-BZ' => 'english',
'EN-CA' => 'english',
'EN-IE' => 'english',
'EN-JM' => 'english',
'EN-NZ' => 'english',
'EN-PH' => 'english',
'EN-ZA' => 'english',
'EN-TT' => 'english',
'EN-GB' => 'english',
'EN-US' => 'english',
'EN-ZW' => 'english',
'ET' => 'estonian',
'FA' => 'farsi',
'FR' => 'french',
'FR-BE' => 'french',
'FR-CA' => 'french',
'FR-FR' => 'french',
'FR-LU' => 'french',
'FR-MC' => 'french',
'FR-CH' => 'french',
'DE' => 'german',
'DE-AT' => 'german',
'DE-DE' => 'german',
'DE-LI' => 'german',
'DE-LU' => 'german',
'DE-CH' => 'german',
'HE' => 'hebrew',
'HU' => 'hungarian',
'IT' => 'italian',
'IT-CH' => 'italian',
'MK' => 'macedonian',
'NO' => 'norwegian',
'NB' => 'norwegian',
'NN' => 'norwegian',
'PT-BR' => 'portuguese-br',
'PT' => 'portuguese-pt',
'RO' => 'romanian',
'RO-MO' => 'romanian',
'RU' => 'russian',
'RU-MO' => 'russian',
'ES' => 'spanish',
'ES-AR' => 'spanish',
'ES-BO' => 'spanish',
'ES-CL' => 'spanish',
'ES-CO' => 'spanish',
'ES-CR' => 'spanish',
'ES-DO' => 'spanish',
'ES-EC' => 'spanish',
'ES-SV' => 'spanish',
'ES-GT' => 'spanish',
'ES-HN' => 'spanish',
'ES-MX' => 'spanish',
'ES-NI' => 'spanish',
'ES-PA' => 'spanish',
'ES-PY' => 'spanish',
'ES-PE' => 'spanish',
'ES-PR' => 'spanish',
'ES-ES' => 'spanish',
'ES-UY' => 'spanish',
'ES-VE' => 'spanish',
'SV' => 'swedish',
'SV-FI' => 'swedish',
'SV-SV' => 'swedish',
'TR' => 'turkish',
'UK' => 'ukranian',
// NOTE: You can add more below
);
$customadminpath = "nameadminfolder";
if(strpos($_SERVER['REQUEST_URI'], $customadminpath) === false && !isset($_SESSION['switch-language'])
&& $_SESSION['uid'] == false) 
if(!isset($_SESSION['switch-language']) && $_SESSION['uid'] == false) 
    {
        $_SESSION['switch-language'] = true; // prevent from redirecting back again in this session
    }

$current_country = strtoupper(substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2));

$language = $current_country != '' && isset($country_to_language[$current_country]) 
               ? $country_to_language[$current_country]
               : $country_to_language['default'];

if(!isset($_SESSION['Language']) || $_SESSION['Language'] != $language) {
       $location = '?language='.$language;     
       if($_SERVER['QUERY_STRING'] != '')
           $location .= '&'.$_SERVER['QUERY_STRING'];

       ob_clean();
       header('location: '.$location);
       die();
   }
	
}
 

?>

but now i would lie to allow users to select diferent language because now when soeme one change the languange it gives a infinite loop like a posted above.
@brian! any idea to stop the loop or you know a way to stop that loop when some one select a other language.

Edited by Screamfox
Link to comment
Share on other sites

This is a fix for the who whant allow people to change their language, 

 

<?php  

$country_to_language = array(
'default' => 'english',
'AR' => 'arabic',
'AR-DZ' => 'arabic',
'AR-BH' => 'arabic',
'AR-EG' => 'arabic',
'AR-IQ' => 'arabic',
'AR-JO' => 'arabic',
'AR-KW' => 'arabic',
'AR-LB' => 'arabic',
'AR-LY' => 'arabic',
'AR-MA' => 'arabic',
'AR-OM' => 'arabic',
'AR-QA' => 'arabic',
'AR-SA' => 'arabic',
'AR-SY' => 'arabic',
'AR-TN' => 'arabic',
'AR-AE' => 'arabic',
'AR-YE' => 'arabic',
'AZ' => 'azerbaijani',
'CA' => 'catalan',
'ZH' => 'chinese',
'ZH-HK' => 'chinese',
'ZH-CN' => 'chinese',
'ZH-SG' => 'chinese',
'ZH-TW' => 'chinese',
'HR' => 'croatian',
'CS' => 'czech',
'DA' => 'danish',
'NL' => 'dutch',
'NL-BE' => 'dutch',
'EN' => 'english',
'EN-AU' => 'english',
'EN-BZ' => 'english',
'EN-CA' => 'english',
'EN-IE' => 'english',
'EN-JM' => 'english',
'EN-NZ' => 'english',
'EN-PH' => 'english',
'EN-ZA' => 'english',
'EN-TT' => 'english',
'EN-GB' => 'english',
'EN-US' => 'english',
'EN-ZW' => 'english',
'ET' => 'estonian',
'FA' => 'farsi',
'FR' => 'french',
'FR-BE' => 'french',
'FR-CA' => 'french',
'FR-FR' => 'french',
'FR-LU' => 'french',
'FR-MC' => 'french',
'FR-CH' => 'french',
'DE' => 'german',
'DE-AT' => 'german',
'DE-DE' => 'german',
'DE-LI' => 'german',
'DE-LU' => 'german',
'DE-CH' => 'german',
'HE' => 'hebrew',
'HU' => 'hungarian',
'IT' => 'italian',
'IT-CH' => 'italian',
'MK' => 'macedonian',
'NO' => 'norwegian',
'NB' => 'norwegian',
'NN' => 'norwegian',
'PT-BR' => 'portuguese-br',
'PT' => 'portuguese-pt',
'RO' => 'romanian',
'RO-MO' => 'romanian',
'RU' => 'russian',
'RU-MO' => 'russian',
'ES' => 'spanish',
'ES-AR' => 'spanish',
'ES-BO' => 'spanish',
'ES-CL' => 'spanish',
'ES-CO' => 'spanish',
'ES-CR' => 'spanish',
'ES-DO' => 'spanish',
'ES-EC' => 'spanish',
'ES-SV' => 'spanish',
'ES-GT' => 'spanish',
'ES-HN' => 'spanish',
'ES-MX' => 'spanish',
'ES-NI' => 'spanish',
'ES-PA' => 'spanish',
'ES-PY' => 'spanish',
'ES-PE' => 'spanish',
'ES-PR' => 'spanish',
'ES-ES' => 'spanish',
'ES-UY' => 'spanish',
'ES-VE' => 'spanish',
'SV' => 'swedish',
'SV-FI' => 'swedish',
'SV-SV' => 'swedish',
'TR' => 'turkish',
'UK' => 'ukranian',
// NOTE: You can add more below
);
$customadminpath = "AdminFolderName";
if(strpos($_SERVER['REQUEST_URI'], $customadminpath) === false && !isset($_SESSION['switch-language'])
&& $_SESSION['uid'] == false) {
$_SESSION['switch-language'] = true; // prevent from redirecting back again in this session
// we will add more here....
}


$current_country = strtoupper(substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2));

$language = $current_country != '' && isset($country_to_language[$current_country]) 
               ? $country_to_language[$current_country]
               : $country_to_language['default'];

if(!isset($_SESSION['Language']) ) {
       $location = '?language='.$language;     
       if($_SERVER['QUERY_STRING'] != '')
           $location .= '&'.$_SERVER['QUERY_STRING'];

       ob_clean();
       header('location: '.$location);
       die();
   }

Just replace the AdminFolderName variable for your admin folder name.

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use & Guidelines and understand your posts will initially be pre-moderated