Sono d'accordo con commenti di @ tripleee sull'utilizzo l'header HTTP piuttosto che occhiata il loro IP che spesso può portare a valori non corretti, o utenti forza dietro proxy remoto nelle impostazioni loro non vogliono
Prova questo plugin controller per il reindirizzamento in base Locale dell'utente come data dal loro browser:
<?php
class Application_Plugin_Language extends Zend_Controller_Plugin_Abstract
{
public function routeShutdown(Zend_Controller_Request_Abstract $request)
{
/*
// if you add "localization.default_locale = "en_US" to your application.ini, uncomment the following
$config = new Zend_Config($this->getOption('localization'), true);
$loc = (isset($config->default_locale)) ? $config->default_locale : 'en_US';
*/
$module = $request->getModuleName();
if ($module != 'default') return ;
// You can also check a cookie or session value here to see if you can return from the plugin as well
$loc = 'en_US';
Zend_Locale::setDefault($loc);
try {
$locale = new Zend_Locale(Zend_Locale::BROWSER);
} catch (Zend_Locale_Exception $e) {
$locale = new Zend_Locale($loc);
}
$language = $locale->getLanguage(); // e.g. "en", "de", "ru" etc.
$urlHelper = new Zend_Controller_Action_Helper_Url();
$url = $urlHelper->url(array('module' => $language, 'controller' => 'form', 'action' => 'index'));
$redirector = Zend_Controller_Action_HelperBroker::getStaticHelper('redirector');
$redirector->gotoUrl($url);
}
}
Questo plugin reindirizzerà a un modulo con il nome della lingua in base alla lingua impostata dal browser dell'utente se stanno attualmente richiedendo il modulo predefinito.
Nota questo codice non fa nulla per verificare se il modulo che si sta reindirizzando esiste o meno. È necessario verificare che la lingua sia supportata prima di reindirizzare.
È inoltre possibile aggiungere un controllo per un cookie o un valore di sessione che contiene la lingua desiderata dell'utente e il reindirizzamento basato su tale.
registrare il plugin aggiungendo questo a application.ini
:
resources.frontController.plugins.language = "Application_Plugin_Language"
Se si desidera reindirizzare in base al Paese e non la lingua, quindi modificare $language = $locale->getLanguage();
-$region = $locale->getRegion();
Speranza che aiuta.
Perché si presume che il paese indichi una preferenza di lingua? L'intestazione HTTP 'Accept-Language' dovrebbe essere usata per quello. Il codice del paese è utile per le cose specifiche del paese, come le tabelle di valuta e codice postale. – tripleee
Inoltre, è probabilmente una buona idea non avere directory separate per ogni lingua. Dovresti utilizzare i ccTLD o restituire il contenuto nella lingua corretta specificata da "Accept-Language" pur mantenendo lo stesso schema di URL. –