IPを検索するのではなく、HTTPヘッダーを使用することについての、@ tripleeeのコメントに同意します。これにより、値が正しくなくなることがよくあります。または、リモートプロキシの背後にいるユーザーに不要な設定を強制することもあります。
ブラウザから指定されたユーザーのロケールに基づいてリダイレクトするために、このコントローラープラグインを試してください。
<?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);
}
}
このプラグインは、ユーザーが現在デフォルトモジュールを要求している場合、ユーザーのブラウザによって設定された言語に基づいた言語名のモジュールにリダイレクトします。
このコードは、リダイレクト先のモジュールが存在するかどうかを確認するものではないことに注意してください。リダイレクトする前に、言語がサポートされていることを確認する必要があります。
また、ユーザーの希望する言語を含むCookieまたはセッション値のチェックを追加し、それに基づいてリダイレクトすることもできます。
これを追加してプラグインを登録しますapplication.ini
:
resources.frontController.plugins.language = "Application_Plugin_Language"
言語ではなく国に基づいてリダイレクトする場合は、次のように変更$language = $locale->getLanguage();
します$region = $locale->getRegion();
お役に立てば幸いです。