Hi,
In order to have an automatic detection of the visitor language, I'd like to be able to use the HTTP_ACCEPT_LANGUAGE header in the case of the first visit on the multilanguage site.
At this moment, I use the following code:
In the functions.php of my theme:
if ( class_exists('WP_Multilingual') ) {
function getAcceptedLanguage() {
$languages = split(",", $_SERVER['HTTP_ACCEPT_LANGUAGE'] );
$lang_q = Array();
foreach( $languages as $aLang ) {
$lang_array = split(";q=", trim( $aLang ) );
$lang = trim( $lang_array[0] );
if( !isset( $lang_array[1] ) )
$q = 1;
else
$q = trim($lang_array[1]);
$lang_q["$lang"] = (float)$q;
}
arsort($lang_q);
//extra code for making the languages key indexed
$i = 0;
$lang_index = Array();
foreach($lang_q as $lang => $q) {
$lang_index[$i] = $lang; //add to a new array the index key/language
$i++;
}
return $lang_index;
} // end of 'getAcceptedLanguage()'
$siteLanguages = array_keys(WP_Multilingual::AvaibleLanguages());
$acceptedLanguages = getAcceptedLanguage();
foreach ( $acceptedLanguages as $key => $value ) {
$language_ = explode('-', $value);
$primaryLanguage = $language_[0];
if ( in_array($primaryLanguage, $siteLanguages) ) {
$theLang = $primaryLanguage;
break;
}
} // endforeach
function woodpok_set_lang(){
global $theLang;
if ( !isset($_COOKIE['language']) ) {
setcookie("language", $theLang, time()+3600*24*365, '/');
$link = WP_Multilingual::LanguageLink($_SERVER['REQUEST_URI'], $theLang);
header('Location: '.$link);
exit;
} // endif
} // end of 'woodpok_set_lang()'
add_action('init', 'woodpok_set_lang', 100);
} // endif
In "multilingal.php", in the function "QueryString", I added:
if ( isset($_COOKIE['language']) ) $language = $_COOKIE['language'];
before:
$link = WP_Multilingual::LanguageLink($_SERVER['REQUEST_URI'], $language);
In "multilingal.php", in the function "SetLocale", I added:
if ( $language && $_COOKIE['language'] != $language ) {
setcookie("language", $language, time()+3600*24*365, '/');
} // endif
after:
$language = isset($_GET['language']) ? $_GET['language'] : substr(str_replace(get_option('home'), '', 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']), 1, 2) ;
It work for me at this moment but I can't upgrade for now :'(
Do you think it will be possible for you to implement something like this directly in your plugin?
Many thanks in advance for your positive answer :-)
Cheers,
David