다중 웹 사이트 다중 도메인 설정에서 웹 사이트 당 유지 관리 모드 번역


12

다중 웹 사이트 다중 도메인 설정에서 웹 사이트 당 유지 관리 모드 번역

다중 웹 사이트 및 다중 도메인 환경 에서 적절한 번역 (현지화) 유지 관리 페이지 방법은 무엇입니까 ?

설정은 다음과 같습니다.

  • MAGENTO_ROOT / index.php
  • MAGENTO_ROOT / uk / index.php
  • MAGENTO_ROOT / us / index.php
  • MAGENTO_ROOT / somecode / index.php

상점이 다음을 통해 액세스 할 수 있다고 가정하십시오.

나는 그것에 대한 몇 가지 해결책을 쉽게 볼 수 있지만 모든 주제는 실제로 훌륭하고 깨끗한 해결책보다 더 많은 해결책으로 보입니다.

이 문제를 어떻게 해결합니까?


답변:


10

기본적으로 Magento는 오류 페이지에 대한 기본 제공 번역을 지원하지 않으며 이러한 기능을 허용하려면 일부 사용자 지정이 필요합니다. 따라서 기술적으로는 적절한 방법 이 없습니다 .

오류 생성 중에 전체 스택이 초기화 $this->__('foobar');되지 않으므로 템플릿에서 일반 변환 기능 이 작동하지 않습니다.

오류 페이지 생성 방법에 대한 일부 세부 사항은 MageBase에서 찾을 수 있습니다.

하나의 옵션은 단순히 복사하는 것입니다 errors/귀하의 언어로 당신의 서브 디렉토리의 각각에 uk, us등 최종 사용자의 웹 사이트 진입 점의 언어를 반영하기 위해 템플릿을 수정합니다.

index.php하위보기 오류 문서를 포함하려면 각보기에 주의하십시오 .

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

또한 404를 포함하여 모든 오류에 대한 기본 템플릿이 있습니다. page.html

더 우아한 솔루션이있을 수 있지만 이미 index.php다른보기를 위해 복제 하고 있기 때문에 몇 개의 파일이 너무 복잡하지 않을 수 있습니다. 중복성을 저장하기 위해 최상위 CSS 및 이미지를 포함하도록 템플릿을 수정할 수도 있습니다.

process.php제목 및 현지화가 필요한 다른 데이터가 설정되어 있으므로 Magento의 표준 현지화에서와 동일한 언어 파일을 작성하고 파일과 함께 값을 읽을 수도 있습니다. Varien_File_Csv를 사용하여 언어 .CSV 파일을 읽는 간단한 예 :

$csvObject = new Varien_File_Csv();
$csvObject->getData($file);

추가 사항 : 현재 런타임 시점의 스택 Varien_File_Csv은 내부 PHP 함수를 사용하는 클래스 포함을 허용하지 않을 수 있으므로 fgetcsv 가 더 나은 대안 일 수 있습니다.

파일에 필요한 데이터를 채우는 데 필요한 언어 CSV 파일을 구문 분석 process.php하십시오.

또 다른 대안은 Google 번역 또는 타사 도구를 추가하여 오류 페이지를 최종 사용자 언어로 자동 번역하는 것입니다.

참고 문헌 :


2

앞에서 언급했듯이 유지 보수 페이지를 쉽게 번역 할 수있는 방법은 없습니다. 그러나 하나의 해결 방법이 있습니다 (자체 장점 / 단점이 있음)-다음과 같은 유지 관리 모드 확장을 사용하십시오.

http://www.magentocommerce.com/magento-connect/store-maintenance.html

Magento 스택이로드 된 후 유지 관리 모드 페이지를 표시합니다. 즉, 데이터베이스 연결 및 기타 사항이 필요합니다. 이로 인해 속도가 느려지고 더 많은 리소스가 필요합니다. 그러나 문제가되지 않으면 유지 보수 페이지를 완전히 사용자 정의 할 수 있습니다.


즉, 데이터베이스 연결이 중단되면 어떤 결과가 나옵니까?
versedi

1
나는 해결 방법이며 모든 경우에 적합하지는 않다고 말했다. 데이터베이스가 없으면 Magento가 오류 메시지를 표시합니다.
Pronto

2

최신 정보:

번역 된 유지 보수 페이지를위한 다른 방법을 찾았습니다.

https://github.com/OpenMage/magento-lts/blob/1.9.3.x/errors/processor.php#L160-L162

    if (isset($_GET['skin'])) {
        $this->_setSkin($_GET['skin']);
    }

유지 관리 페이지 생성자는 skin레이아웃을 변경하기 위해 POST 매개 변수를 사용합니다. 의도적 인 방법 인 것 같지만 문서화되지는 않았습니다 (아직) ...

  1. URL에 매개 변수를 .htaccess추가하는 다시 쓰기 규칙을 추가 skin하십시오. 예 :

    RewriteCond %{HTTP_HOST} ^french.example.com$
    RewriteCond %{DOCUMENT_ROOT}/.maintenance.flag -f
    RewriteCond %{QUERY_STRING} !(^|&)skin=french(&|$) [NC]
    RewriteRule ^ %{REQUEST_URI}?skin=french[L]
  2. 복사 errors/defaulterrors/french

  3. 템플릿 파일을 필요에 따라 변경 / 번역

모든 하위 폴더에 디렉토리를 복사하지 않고 약간 늦었지만 좋은 작업 솔루션 error...

"단점":

  • 세 개의 핵심 파일을 편집해야합니다. 코어에서 가능한 한 많은 편집을 피하기 위해 오류 / 보고서 페이지의 경로를 변경 processor.php하고 수정 된 읽기로 확장 했습니다 local.xml.
  • (- 순간에 어떤 번역은 여전히 모든 언어에 대한 템플릿 파일을 필요로 나중에 아마 )

기본 설정

이와 같은 다중 웹 사이트 다중 저장소 설정 은 차이점 대신에 설정 MAGE_RUN_CODE했습니다 . 첫 번째 도메인의 경우 다른 모든 것을 사용하지는 않습니다 ....htaccessindex.phpRUN_CODE

RewriteCond %{HTTP_HOST} ^www.example.com$
RewriteRule .* - [E=MAGE_RUN_CODE:website1]
RewriteCond %{HTTP_HOST} ^www.example.com$
RewriteRule .* - [E=MAGE_RUN_TYPE:website]

링크 대답뿐만 아니라 내가 설정했다 RewriteBase에서 .htaccess로케일 디렉토리 및 편집에 맞게 index.php에서 en, fr변화를

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

$maintenanceFile = '../maintenance.flag';
...
if (file_exists($maintenanceFile)) {
    include_once '../errors/503.php';
    exit;
}

편집 errors/404.php, 503.phpreport.php

바꾸다

require_once 'processor.php';
$processor = new Error_Processor();

require_once 'processor_multiwebsite.php';
$processor = new Error_Processor_Multiwebsite();

그리고 이것을 추가하십시오 errors/processor_multiwebsite.php

<?php
require_once 'processor.php';
class Error_Processor_Multiwebsite extends Error_Processor
{
    const DEFAULT_RUNCODE = 'default';
    const DEFAULT_LOCALE = 'default';

    /**
     * Magento run code
     *
     * @var string
    */
    protected $_runCode;

    /**
     * Magento run code
     *
     * @var string
    */
    protected $_locale;

    public function __construct()
    {
        $this->_runCode = self::DEFAULT_RUNCODE;
        if (isset($_SERVER['MAGE_RUN_CODE'])) {
            $this->_runCode = $_SERVER['MAGE_RUN_CODE'];
        }

        $this->_locale = self::DEFAULT_LOCALE;
        $path = array_filter(explode('/', str_replace('index.php', '', $_SERVER['SCRIPT_NAME'])));
        if (end($path)) {
            $this->_locale = end($path);
        }

        parent::__construct();
    }

    /**
     * Retrieve skin URL
     *
     * @return string
     */
    public function getSkinUrl()
    {
        $baseUrl = str_replace($this->_locale . '/', '', $this->getBaseUrl());
        return $baseUrl . self::ERROR_DIR. '/' . $this->_config->skin . '/';
    }


    /**
     * Retrieve skin base URL
     *
     * @return string
     */
    public function getSkinBaseUrl($file)
    {
        return $this->_config->skin_base ? "../{$this->_config->skin_base}/{$file}" : $file;
    }

    /**
     * Prepare config data
     */
    protected function _prepareConfig()
    {
        parent::_prepareConfig();

        $local  = $this->_loadXml(self::MAGE_ERRORS_LOCAL_XML);
        if (!is_null($local)) {
            if ((string)$local->{$this->_runCode}->{$this->_locale}->skin) {
                $this->_config->skin = (string)$local->{$this->_runCode}->{$this->_locale}->skin;
            }
            # add skin base URL
            if ((string)$local->{$this->_runCode}->{$this->_locale}->skin_base) {
                $this->_config->skin_base = (string)$local->{$this->_runCode}->{$this->_locale}->skin_base;
            }
        }
    }
}

새로운 local.xml구조

<skin>첫 번째 수준 을 설정하는 대신 먼저 웹 사이트 실행 코드 / 로캘을 찾으십시오.

<?xml version="1.0"?>
<config>
    <!-- 1st domain w/o runcode -->
    <default>
        <!-- no locale sub dir -->
        <default>
            <skin>default-default</skin>
            ...
        </default>
        <en>
            <skin>default-en</skin>
            <skin_base>default-default</skin_base>
            ...
        </en>
        <fr>
            <skin>default-fr</skin>
            <skin_base>default-default</skin_base>
            ...
        </fr>
    </default>
    <!-- runcode website1 -->
    <website1>
        <!-- no locale sub dir -->
        <default>
            <skin>website1-default</skin>
            ...
        </default>
        ...
    </website1>
</config>

템플릿

503.phtml일치하는 디렉토리에 CSS를 추가하십시오 .<runcode>-<locale>

  • default-default (제 1 도메인 기본 언어)
  • default-en
  • default-fr
  • website1-default (제 2 도메인 기본 언어)
  • ...

중복 CSS / 이미지 없음

  • 하나의 디렉토리에 귀하의 웹 사이트의 특정 CSS / 이미지 파일을 넣어 추가 <skin_base>에 노드를local.xml
  • 파일의 모든 정적 링크 page.phtml를 ie href="css/styles.css"에서<?php echo $this->getSkinBaseUrl('css/styles.css')?>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.