This hook allows to automatically switch WHMCS language, according to the default language set in the user's browser.
So, i.e., a user with a browser set in Deutch will have his WHMCS interface accordingly set in Deutch, a user with a browser set in Italian will have his WHMCS interface set in Italian, and so on...
(ref: https://whmcs.community/topic/264853-auto-switch-language-based-on-browser-language/ )
<?php
add_hook('ClientAreaPage', 10, switch_languagebrowser($vars));
function switch_languagebrowser($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',
'SI' => 'slovenian',
'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'] != '' && strpos($_SERVER['QUERY_STRING'],'?language')===0)
$location .= '&'.$_SERVER['QUERY_STRING'];
ob_clean();
header('location: '.$location);
die();
}
}
?>