0

ブラウザ検出を Magento に実装して適切な言語をロードするにはどうすればよいですか。

例: 米国のユーザーが私の Magento ショップを閲覧している場合、Magento は次のパスをロードする必要があります: ..myshop../usa/ usa=storecode 日本のユーザーが私の Magento ショップを閲覧している場合、Magento は次のパスをロードする必要があります: ..myshop ../jp/jp=店舗コードなど

.htaccess を URL の書き換えに適応させる必要があると思いますが、以前はそうしたことがありませんでした。どうすればいいですか?

ブラウザ検出のコードはどのように表示され、どこに配置すればよいですか? header.phtml で?

よろしくお願いします!

編集: CE 1.7.0.2 の index.php は次のようになります

    /**
 * Error reporting
 */
error_reporting(E_ALL | E_STRICT);

/**
 * Compilation includes configuration file
 */
define('MAGENTO_ROOT', getcwd());

$compilerConfig = MAGENTO_ROOT . '/includes/config.php';
if (file_exists($compilerConfig)) {
    include $compilerConfig;
}

$mageFilename = MAGENTO_ROOT . '/app/Mage.php';
$maintenanceFile = 'maintenance.flag';

if (!file_exists($mageFilename)) {
    if (is_dir('downloader')) {
        header("Location: downloader");
    } else {
        echo $mageFilename." was not found";
    }
    exit;
}

if (file_exists($maintenanceFile)) {
    include_once dirname(__FILE__) . '/errors/503.php';
    exit;
}

require_once $mageFilename;

#Varien_Profiler::enable();

if (isset($_SERVER['MAGE_IS_DEVELOPER_MODE'])) {
    Mage::setIsDeveloperMode(true);
}

#ini_set('display_errors', 1);

umask(0);

/* Store or website code */
$mageRunCode = isset($_SERVER['MAGE_RUN_CODE']) ? $_SERVER['MAGE_RUN_CODE'] : '';

/* Run store or run website */
$mageRunType = isset($_SERVER['MAGE_RUN_TYPE']) ? $_SERVER['MAGE_RUN_TYPE'] : 'store';

Mage::run($mageRunCode, $mageRunType);

ただし、このリンクでは、単純に置き換えることができない次のコードについて説明しています。

require_once 'app/Mage.php';

/* Determine correct language store based on browser */
function getStoreForLanguage()
{
    if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
        foreach (explode(",", strtolower($_SERVER['HTTP_ACCEPT_LANGUAGE'])) as $accept) {
            if (preg_match("!([a-z-]+)(;q=([0-9.]+))?!", trim($accept), $found)) {
                $langs[] = $found[1];
                $quality[] = (isset($found[3]) ? (float) $found[3] : 1.0);
            }
        }
        // Order the codes by quality
        array_multisort($quality, SORT_NUMERIC, SORT_DESC, $langs);
        // get list of stores and use the store code for the key
        $stores = Mage::app()->getStores(false, true);
        // iterate through languages found in the accept-language header
        foreach ($langs as $lang) {
            $lang = substr($lang,0,2);
            if (isset($stores[$lang]) && $stores[$lang]->getIsActive()) return $stores[$lang];
        }
    }
    return Mage::app()->getStore();
}

/* Auto redirect to language store view if request is for root */
if ($_SERVER['REQUEST_URI'] === '/') {
    header('Location: '.getStoreForLanguage()->getBaseUrl());
    exit;
}

#Varien_Profiler::enable();

#Mage::setIsDeveloperMode(true);

#ini_set('display_errors', 1);

umask(0);
Mage::run();

それをどこに置くか、またはindex.phpをどこに適応させるかを見つけるのを手伝ってくれる人はいますか

ありがとうございました!

4

2 に答える 2

0

ブラウザが送信するリクエストには、 「Accept-Language」ヘッダーと呼ばれるフィールドがあります。書式設定はそれほど直感的ではなく、正しく実行したい場合は、htaccess ファイルと mod_rewrite が適切に解析する能力を超えています。以下は、典型的な「Accept-Language」リクエスト ヘッダーです。

Accept-Language: da, en-gb;q=0.8, en;q=0.7

つまり、「私はデンマーク語が好きですが、イギリス英語や他のタイプの英語も受け入れます」

そのため、フィールドの最初の 2 文字を単純に探すことはできません。デンマーク語がない場合は、適切な言語を見つけるために解析を続ける必要があります。Magento にはおそらくこれに対処するいくつかの方法があります。

于 2013-10-10T19:11:42.270 に答える