Selection automatique de la langue d'un site

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;
}
A voir également:

4 réponses

loveparade Messages postés 515 Statut Membre 60
 
<?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/>";
?>
0
iwanami
 
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?
0
loveparade Messages postés 515 Statut Membre 60
 
Ça vient du CMS car le code est fonctionnel, peux tu envoyer le fichier complet? sur pastebin.com par exemple.
Merci.
0
iwanami
 
index.php:
http://pastebin.com/f66f655f


mod_jflanguageselection.php:
http://pastebin.com/f157a20e8

merci
0
loveparade Messages postés 515 Statut Membre 60
 
_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...

0
iwanami
 
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
0