Hallo zusammen!
Muss für einen Kunden eine Webseite mit automatischer Sprachwahl je nach IP-Adresse des Users umsetzen.
Verwende zum eroieren der Herkunft des Users die Erweiterung Geoip, die auf die kostenlose Datenbank von Maxmind zurückgreift. Alles schön und gut. Funktioniert tadellos.
Nun möchte ich aber an die verschiedenen Länder, die erkannt werden, mit einer Sprache "verknüpfen". Dazu habe ich einfach eine zusätzliche Spalte in der static_countries Tabelle erstellt, die für jedes Land die zu wählende Sprache beinhaltet.
BSP: Es gibt 4 Sprachen zur Auswahl. Englisch als Default, Spanisch, Portugiesisch und Chinesisch. Wenn also per IP Erkennung für den User X zB Österreich als Herkunftsland festgestellt wird, schaue ich in der DB bei Österreich nach, dort ist die Sprache Englisch "verknüfpft". Also soll die Sprache englisch angezeigt werden.
Nun meine Frage, ich bin soweit dass ich für jede IP das Herkunftsland per Geoip herausfinden kann. Auch die jeweilige anzuzeigende Sprache kann ich aus der DB beziehen. Nur wie "zeige" ich diese Sprache nun automatisch an? (Redirect?)
Bitte um Vorschläge, stehe leider ziemlich an....
Zufällig muss ich das für unsere Firma auch in naher Zukunft umstellen. FE Sprache nach GeoIP.
Momentan nutzen wir FE Sprache nach Browsersprache - was auch wunderbar funktioniert - hier findest du vielleicht Hinweise:
#80578
Super danke! Hast mir sehr weitergeholfen mit deinem Script!
Hab ne eigene Funktion für Geoip geschrieben, funktioniert bereits. Ist aber noch nicht getestet, nur mal ein schneller Versuch.
Zustätzliche Funktion:
function lang_getfromgeoip ($allowed_languages, $default_language,$lang_variable = null, $strict_mode = true, $lang_robot= 'en') {
if ($this->checkRobot() == false) { // no robot is visiting
//GET GEO IP OBJECT
if (t3lib_extMgm::isLoaded('geoip')) {
require_once( t3lib_extMgm::extPath('geoip').'/pi1/class.tx_geoip_pi1.php');
$this->media = t3lib_div::makeInstance('tx_geoip_pi1');
$path = 'fileadmin/geoip/GeoLiteCity_31_10_08.dat';
$this->media->init($path); // Initialize the Geoip Ext
$infos = $this->media->getGeoIP($ip=""); // get all the infos
}
$countrycode = $infos['countryCode'];
if($countrycode!=""){
$qryCountries=$GLOBALS["TYPO3_DB"]->sql_query("SELECT `sys_language`.`static_lang_isocode` AS `lang` FROM `static_countries` LEFT JOIN `sys_language` ON `static_countries`.`tx_powernightlangpercountry_lang` = `sys_language`.`uid` WHERE `static_countries`.`cn_iso_3` = '".$countrycode."'");
$intCountries=$GLOBALS["TYPO3_DB"]->sql_num_rows($qryCountries);
if($intCountries!=0){
while($aryCountries=$GLOBALS["TYPO3_DB"]->sql_fetch_assoc($qryCountries)){
$static_lang_isocode = $aryCountries["lang"];
}
}
else {
$current_lang = $this->languageForRobots;
}
$qryLanguage=$GLOBALS["TYPO3_DB"]->sql_query("SELECT `static_languages`.`lg_typo3` AS `lang` FROM `static_languages` WHERE `static_languages`.`uid` = '".$static_lang_isocode."'");
$intLanguage=$GLOBALS["TYPO3_DB"]->sql_num_rows($qryLanguage);
if($intLanguage!=0){
while($aryLanguage=$GLOBALS["TYPO3_DB"]->sql_fetch_assoc($qryLanguage)){
$current_lang = $aryLanguage["lang"];
}
} else {
$current_lang = $this->languageForRobots;
}
} else {
$current_lang = $this->languageForRobots;
}
} else { // if robot is visiting
$current_lang = $lang_robot; // robot language
}
return $current_lang;
}