me acuerdo con el comentario de @ tripleee sobre el uso de la cabecera HTTP en lugar de las operaciones de búsqueda a su IP que a menudo puede dar lugar a valores incorrectos, o los usuarios de la fuerza detrás de servidores proxy remoto en la configuración ellos no quieren
Trate de este plugin controlador para redireccionar según la configuración regional del usuario según lo dado por su navegador:
<?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);
}
}
Este plugin se redirigir a un módulo con el nombre del idioma basado en el idioma establecido por el navegador del usuario si Actualmente están solicitando el módulo predeterminado.
Tenga en cuenta que este código no hace nada para verificar si el módulo que está redirigiendo existe o no. Debe verificar que el idioma sea compatible antes de redireccionar.
También puede agregar un cheque para una cookie o valor de sesión que contenga el idioma deseado del usuario y redireccionar en función de eso.
Registre el complemento añadiendo esto a application.ini
:
resources.frontController.plugins.language = "Application_Plugin_Language"
Si desea redirigir en función del país y no el lenguaje, a continuación, cambiar a $language = $locale->getLanguage();
$region = $locale->getRegion();
Espero que ayude.
¿Por qué supone que el país indica una preferencia de idioma? El encabezado HTTP 'Accept-Language' se debe usar para eso. El código de país es útil para cosas específicas de cada país, como las tablas de moneda y códigos postales. – tripleee
Además, probablemente sea una mejor idea no tener directorios separados para cada idioma. Debería utilizar ccTLD o devolver el contenido en el idioma correcto especificado por 'Accept-Language', manteniendo el mismo esquema de URL. –