Selection automatique de la langue d'un site
iwanami
-
iwanami -
iwanami -
Bonjour a tous!
j'aurais besoin d'un petit coup de main en PHP: le site de mon boulot est en 4 langues differentes (vive la suisse ^^). et on aimerait qu'un utilisateur qui vient d'une region italophone voie le site en italien, en allemand pour les germanophones, en francais pour les francophones et en anglais pour les autres. pour le moment, ca fonctionne pas, comme vous pouvez vous en douter...
au passage, nous utilisons Joomla. y a-t-il une possibilite pour faire ca automatiquement?
merci a tous
voici le code qu'on a actuellement:
// loads english language file by default
if ($mosConfig_lang=='')
{
//$mosConfig_lang = 'english';
if (substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,2)=="en")
{
$mosConfig_lang = 'english';
}
else
{
if (substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,2)=="de")
{
$mosConfig_lang = 'deutsch';
}
else
{
if (substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,2)=="it")
{
$mosConfig_lang = 'Italian';
}
else
{
$mosConfig_lang = 'french';
}
}
}
}
include_once( $mosConfig_absolute_path .'/language/' . $mosConfig_lang . '.php' );
et voici le code que j'ai trouvé pour le remplacer:
function get_languages( $feature, $spare='' )
{
// get the languages
$a_languages = languages();
$index = '';
$complete = '';
$found = false;// set to default value
//prepare user language array
$user_languages = array();
//check to see if language is set
if ( isset( $_SERVER["HTTP_ACCEPT_LANGUAGE"] ) )
{
$languages = strtolower( $_SERVER["HTTP_ACCEPT_LANGUAGE"] );
$languages = str_replace( ' ', '', $languages );
$languages = explode( ",", $languages );
foreach ( $languages as $language_list )
{
// pull out the language, place languages into array of full and primary
// string structure:
$temp_array = array();
// slice out the part before ; on first step, the part before - on second, place into array
$temp_array[0] = substr( $language_list, 0, strcspn( $language_list, ';' ) );//full language
$temp_array[1] = substr( $language_list, 0, 2 );// cut out primary language
//place this array into main $user_languages language array
$user_languages[] = $temp_array;
}
//start going through each one
for ( $i = 0; $i < count( $user_languages ); $i++ )
{
foreach ( $a_languages as $index => $complete )
{
if ( $index == $user_languages[$i][0] )
{
// complete language, like english (canada)
$user_languages[$i][2] = $complete;
// extract working language, like english
$user_languages[$i][3] = substr( $complete, 0, strcspn( $complete, ' (' ) );
}
}
}
}
else// if no languages found
{
$user_languages[0] = array( '','','','' ); //return blank array.
}
// print_r($user_languages);
// return parameters
if ( $feature == 'data' )
{
return $user_languages;
}
// this is just a sample, replace target language and file names with your own.
elseif ( $feature == 'header' )
{
switch ( $user_languages[0][1] )// get default primary language, the first one in array that is
{
case 'en':
$location = 'english.php';
$found = true;
break;
case 'fr':
$location = 'french.php';
$found = true;
break;
case 'de':
$location = 'german.php';
$found = true;
break;
case 'it':
$location = 'italian.php';
$found = true;
break;
default:
break;
}
if ( $found )
{
header("Location: $location");
}
else// make sure you have a default page to send them to
{
header("Location: default.php");
}
}
}
function languages()
{
// pack abbreviation/language array
// important note: you must have the default language as the last item in each major language, after all the
// en-ca type entries, so en would be last in that case
$a_languages = array(
'en-au' => 'English (Australia)',
'en-bz' => 'English (Belize)',
'en-ca' => 'English (Canada)',
'en-ie' => 'English (Ireland)',
'en-jm' => 'English (Jamaica)',
'en-nz' => 'English (New Zealand)',
'en-ph' => 'English (Philippines)',
'en-za' => 'English (South Africa)',
'en-tt' => 'English (Trinidad)',
'en-gb' => 'English (United Kingdom)',
'en-us' => 'English (United States)',
'en-zw' => 'English (Zimbabwe)',
'en' => 'English',
'us' => 'English (United States)',
'fr-be' => 'French (Belgium)',
'fr-ca' => 'French (Canada)',
'fr-lu' => 'French (Luxembourg)',
'fr-mc' => 'French (Monaco)',
'fr-ch' => 'French (Switzerland)',
'fr' => 'French (France)',
'de-at' => 'German (Austria)',
'de-li' => 'German (Liechtenstein)',
'de-lu' => 'German (Luxembourg)',
'de-ch' => 'German (Switzerland)',
'de' => 'German (Germany)',
'it-ch' => 'Italian (Switzerland)',
'it' => 'Italian (Italy)',
return $a_languages;
}
j'aurais besoin d'un petit coup de main en PHP: le site de mon boulot est en 4 langues differentes (vive la suisse ^^). et on aimerait qu'un utilisateur qui vient d'une region italophone voie le site en italien, en allemand pour les germanophones, en francais pour les francophones et en anglais pour les autres. pour le moment, ca fonctionne pas, comme vous pouvez vous en douter...
au passage, nous utilisons Joomla. y a-t-il une possibilite pour faire ca automatiquement?
merci a tous
voici le code qu'on a actuellement:
// loads english language file by default
if ($mosConfig_lang=='')
{
//$mosConfig_lang = 'english';
if (substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,2)=="en")
{
$mosConfig_lang = 'english';
}
else
{
if (substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,2)=="de")
{
$mosConfig_lang = 'deutsch';
}
else
{
if (substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,2)=="it")
{
$mosConfig_lang = 'Italian';
}
else
{
$mosConfig_lang = 'french';
}
}
}
}
include_once( $mosConfig_absolute_path .'/language/' . $mosConfig_lang . '.php' );
et voici le code que j'ai trouvé pour le remplacer:
function get_languages( $feature, $spare='' )
{
// get the languages
$a_languages = languages();
$index = '';
$complete = '';
$found = false;// set to default value
//prepare user language array
$user_languages = array();
//check to see if language is set
if ( isset( $_SERVER["HTTP_ACCEPT_LANGUAGE"] ) )
{
$languages = strtolower( $_SERVER["HTTP_ACCEPT_LANGUAGE"] );
$languages = str_replace( ' ', '', $languages );
$languages = explode( ",", $languages );
foreach ( $languages as $language_list )
{
// pull out the language, place languages into array of full and primary
// string structure:
$temp_array = array();
// slice out the part before ; on first step, the part before - on second, place into array
$temp_array[0] = substr( $language_list, 0, strcspn( $language_list, ';' ) );//full language
$temp_array[1] = substr( $language_list, 0, 2 );// cut out primary language
//place this array into main $user_languages language array
$user_languages[] = $temp_array;
}
//start going through each one
for ( $i = 0; $i < count( $user_languages ); $i++ )
{
foreach ( $a_languages as $index => $complete )
{
if ( $index == $user_languages[$i][0] )
{
// complete language, like english (canada)
$user_languages[$i][2] = $complete;
// extract working language, like english
$user_languages[$i][3] = substr( $complete, 0, strcspn( $complete, ' (' ) );
}
}
}
}
else// if no languages found
{
$user_languages[0] = array( '','','','' ); //return blank array.
}
// print_r($user_languages);
// return parameters
if ( $feature == 'data' )
{
return $user_languages;
}
// this is just a sample, replace target language and file names with your own.
elseif ( $feature == 'header' )
{
switch ( $user_languages[0][1] )// get default primary language, the first one in array that is
{
case 'en':
$location = 'english.php';
$found = true;
break;
case 'fr':
$location = 'french.php';
$found = true;
break;
case 'de':
$location = 'german.php';
$found = true;
break;
case 'it':
$location = 'italian.php';
$found = true;
break;
default:
break;
}
if ( $found )
{
header("Location: $location");
}
else// make sure you have a default page to send them to
{
header("Location: default.php");
}
}
}
function languages()
{
// pack abbreviation/language array
// important note: you must have the default language as the last item in each major language, after all the
// en-ca type entries, so en would be last in that case
$a_languages = array(
'en-au' => 'English (Australia)',
'en-bz' => 'English (Belize)',
'en-ca' => 'English (Canada)',
'en-ie' => 'English (Ireland)',
'en-jm' => 'English (Jamaica)',
'en-nz' => 'English (New Zealand)',
'en-ph' => 'English (Philippines)',
'en-za' => 'English (South Africa)',
'en-tt' => 'English (Trinidad)',
'en-gb' => 'English (United Kingdom)',
'en-us' => 'English (United States)',
'en-zw' => 'English (Zimbabwe)',
'en' => 'English',
'us' => 'English (United States)',
'fr-be' => 'French (Belgium)',
'fr-ca' => 'French (Canada)',
'fr-lu' => 'French (Luxembourg)',
'fr-mc' => 'French (Monaco)',
'fr-ch' => 'French (Switzerland)',
'fr' => 'French (France)',
'de-at' => 'German (Austria)',
'de-li' => 'German (Liechtenstein)',
'de-lu' => 'German (Luxembourg)',
'de-ch' => 'German (Switzerland)',
'de' => 'German (Germany)',
'it-ch' => 'Italian (Switzerland)',
'it' => 'Italian (Italy)',
return $a_languages;
}
A voir également:
- Selection automatique de la langue d'un site
- Site de telechargement - Accueil - Outils
- Logiciel de sauvegarde automatique gratuit - Guide
- Site x - Guide
- Réponse automatique thunderbird - Guide
- Site de partage de photos - Guide
4 réponses
<?php
define("LANGUE_PATH", "/language/");
$langs = array("fr" => "french.php",
"en" => "english.php",
"de" => "deutsch.php",
"it" => "italiano.php",
"us" => "united_states.php",
"es" => "espanol.php");
if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE']))
{
$accept_lang = explode(",", htmlentities($_SERVER['HTTP_ACCEPT_LANGUAGE']));
echo "<h1>".$accept_lang[0]."</h1>"; // Supprimer la ligne
if (array_key_exists($accept_lang[0], $langs))
echo LANGUE_PATH.$langs[$accept_lang[0]]; //Modifier en => require(LANGUE_PATH.$langs[$accept_lang[0]]);
else
echo "Language is not defined<br/>";
}
else
echo "Empty language type<br/>";
?>
hum...
merci, mais joomla se plaint que ca marche pas (j'essaie deja sur le site par defaut).
Notice: Use of undefined constant _CMN_SELECT - assumed '_CMN_SELECT' in C:\Program Files\EasyPHP 3.0\www\joomla\modules\mod_jflanguageselection.php on line 204
il me dit ca.
et ca aussi, d'ailleurs
Notice: Use of undefined constant _ISO - assumed '_ISO' in C:\Program Files\EasyPHP 3.0\www\joomla\templates\rhuk_solarflare_ii\index.php on line 4
Notice: Undefined offset: 1 in C:\Program Files\EasyPHP 3.0\www\joomla\templates\rhuk_solarflare_ii\index.php on line 6
une idee?
merci, mais joomla se plaint que ca marche pas (j'essaie deja sur le site par defaut).
Notice: Use of undefined constant _CMN_SELECT - assumed '_CMN_SELECT' in C:\Program Files\EasyPHP 3.0\www\joomla\modules\mod_jflanguageselection.php on line 204
il me dit ca.
et ca aussi, d'ailleurs
Notice: Use of undefined constant _ISO - assumed '_ISO' in C:\Program Files\EasyPHP 3.0\www\joomla\templates\rhuk_solarflare_ii\index.php on line 4
Notice: Undefined offset: 1 in C:\Program Files\EasyPHP 3.0\www\joomla\templates\rhuk_solarflare_ii\index.php on line 6
une idee?
Ça vient du CMS car le code est fonctionnel, peux tu envoyer le fichier complet? sur pastebin.com par exemple.
Merci.
Merci.
_ISO et _CMN_SELECT ne sont pas définis c'est donc pour ça les erreurs et la 3eme également, donc faut soit la définir ou alors il est définis ailleurs mais n'est pas introduis. Essaies de voir sur le site de joomla pour voir comment elle est censé être définie...
hello!
on a finalement teste sur le vrai site, et les problemes de _ISO et _CMN_SELECT ont disparu.
et le code qu'on utilise actuellement, ca donne ca:
define("LANGUE_PATH", "/language/");
$langs = array("fr" => "french.php",
"en" => "english.php",
"de" => "deutsch.php",
"it" => "italiano.php");
if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE']))
{
$accept_lang = explode("-", htmlentities($_SERVER['HTTP_ACCEPT_LANGUAGE']));
if (array_key_exists($accept_lang[0], $langs))
require(LANGUE_PATH.$langs[$accept_lang[0]]);
else
echo "Language is not defined<br/>";
}
else
echo "Empty language type<br/>";
cependant, dans le explode(), j'ai du mettre un "-", car le code retourne "FR-CH" sinon, et on aimerait que ce soit juste le "FR" qui soit retourne. mais des le moment ou on a mis le "-", la page ne s'affiche plus. une idee?
merci
on a finalement teste sur le vrai site, et les problemes de _ISO et _CMN_SELECT ont disparu.
et le code qu'on utilise actuellement, ca donne ca:
define("LANGUE_PATH", "/language/");
$langs = array("fr" => "french.php",
"en" => "english.php",
"de" => "deutsch.php",
"it" => "italiano.php");
if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE']))
{
$accept_lang = explode("-", htmlentities($_SERVER['HTTP_ACCEPT_LANGUAGE']));
if (array_key_exists($accept_lang[0], $langs))
require(LANGUE_PATH.$langs[$accept_lang[0]]);
else
echo "Language is not defined<br/>";
}
else
echo "Empty language type<br/>";
cependant, dans le explode(), j'ai du mettre un "-", car le code retourne "FR-CH" sinon, et on aimerait que ce soit juste le "FR" qui soit retourne. mais des le moment ou on a mis le "-", la page ne s'affiche plus. une idee?
merci