번역 정비 모드 웹사이트에 multiwebsite-다중 도메인 설정
-
13-12-2019 - |
문제
번역 정비 모드 웹사이트에서 다 웹 사이트-멀티 도메인 설정
는 무엇입 적절한 어(현지화)유지보수 페이지에서 다 웹사이트와 멀티 도메인 환경은?
설정의로 만들어:
- MAGENTO_ROOT/index.php
- MAGENTO_ROOT/uk/index.php
- MAGENTO_ROOT/us/index.php
- MAGENTO_ROOT/somecode/index.php
다고 가정해 봅시다 상점은 accesible through:
- http://MagentoExample.com/index.php (기본값)
- http://MagentoExample.uk/ (영국)
- http://MagentoExample.us/ (미국)
- http://MagentoExample.com (somecode)
나는 쉽게 볼 수 있는 몇 가지 해결책에 대한 그것의 모든 theem 더 많은 것 같다는 해결 방법의 실제보다 깨끗하는 솔루션입니다.
당신은 어떻게 이 문제를 해결?
해결책
기본적으로 Magento 지원하지 않는 번역자가 오류의 페이지,그리고 필요한 일부 사용자 지정 내용을 허용하는을 위한 이러한 기능입니다.그래서 기술적으로 없 적절한 방법 등이다.
이후 전체 스택은 초기화되지는 동안 오류가 발생,번역 기능은 정상 $this->__('foobar');
에서 작동하지 않습니다집니다.
어떤 방법에 대한 자세한 내용은 오류가 페이지가 생성에서 찾을 수 있습니다 MageBase:
한 옵션은 단순히 복사 errors/
각각의 하위 디렉토리의 언어 uk
, us
, 니다,등등.수정 템플릿을 반영하여 개 언어 웹사이트의 입국 지점의 최종 사용자에게 있습니다.
그냥 참고 index.php
의 각각 보기를 포함 하위 상대적 오류 docs:
if (file_exists($maintenanceFile)) {
include_once dirname(__FILE__) . '/errors/503.php';
exit;
}
또한 있는 기준 템플릿에 대한 모든 오류를 포함하여 404 에 page.html
거기에 아마 더 우아한 솔루션이지만 이미 이후 중복 index.php
다른 뷰에,몇 가지 이상의 파일이 되지 않을 수 있습니다 너무 많은 혼란이다.당신은 또한 수정 템플릿을 포함한 최고 수준 CSS 와 이미지를 일부를 저장하고 중복합니다.
할 수 있습도 만들어 파일이 같은에서와 마찬가지로 하 젠토의 표준화하고 값을 읽으로 process.php
파일로 제목과 다른 어떤 데이터가 필요한 것이 아니라 현지화 되는 거기에 설정합니다.간단한 예제를 사용하 Varien_File_Csv 을 읽는 언어입니다.CSV file:
$csvObject = new Varien_File_Csv();
$csvObject->getData($file);
추가적인 참고:이후 스택에서는 현재 시점의 실행 시간을 사용할 수 없습 Varien_File_Csv
클래스를 포함하여 내부 PHP fgetcsv 할 수 있는 더 좋은 대안입니다.
고 분석한 언어 CSV 파일을 채우는 데 필요한 필수 데이터 process.php
파일입니다.
또 다른 대안이 될 것이 단순히 추가 구글 번역 또는 제 3 자는 도구를 자동으로 번역에 오류가 페이지에는 최종 사용자의 언어입니다.
참고:
다른 팁
정비 페이지를 번역 할 수있는 쉬운 방법이 없습니다.그러나 (자신의 수많은 장점 / 단점이 있음)에 대한 해결 방법이 있습니다. -이 하나와 같은 일부 유지 보수 모드 확장을 사용하십시오.
"Nofollow"> http://www.magentocommerce.com/magento-connect/store-maintenance.html
Magento 스택이로드 된 후 유지 보수 모드 페이지를 표시합니다. 즉, 데이터베이스 연결과 다른 항목이 거의 없어야합니다.또한 더 느리고 더 많은 자원이 필요합니다.그러나 그것이 문제가 아니라면 유지 보수 페이지를 완전히 사용자 정의 할 수있는 렌더링합니다.
업데이트:
을 발견 또 다른 방법한 번역한 유지보수 페이지:
https://github.com/OpenMage/magento-lts/blob/1.9.3.x/errors/processor.php#L160-L162
if (isset($_GET['skin'])) {
$this->_setSkin($_GET['skin']);
}
유지 관리 페이지 생성자 accecpts a skin
포스트 매개 변수를 변경하는 레이아웃이 있습니다.그것은 있을 것 같은 의도적인 방법이지만,그것은 없습 본 안내서(아직)...
추가 어떤 재작성 규칙의
.htaccess
는 추가skin
매개변수는 당신의 URL 이 있습니다.예를 들어.RewriteCond %{HTTP_HOST} ^french.example.com$ RewriteCond %{DOCUMENT_ROOT}/.maintenance.flag -f RewriteCond %{QUERY_STRING} !(^|&)skin=french(&|$) [NC] RewriteRule ^ %{REQUEST_URI}?skin=french[L]
복사
errors/default
하기errors/french
- /변경을 번역 템플릿 파일의 필요
어쩌면 조금 늦었지만, 좋 작업 솔루션,없이 복사 error
디렉토리의 모든 하위 폴더...
"단점":
- 당신은 편집하는 세 가지 코어 파일이 있습니다.을 피하기 편집에서 핵심 가능한 한 많이 나는 그냥 변경을 포함한 경로의 오류 보고서 페이지고 확장
processor.php
을 읽을 수정local.xml
. - 그것은 여전히 필요 템플릿 파일에 대한 모든 언어(번역서 어쩌면 나중)
기본 설치
다이 멀티 저장 설정 이처럼,단 한 differnce 를는 내가 설정 MAGE_RUN_CODE
에 .htaccess
대 index.php
.1 도메인 사용이 없 RUN_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.php
고 report.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>
처음에 자세한 내용을 확인하십시오.웹사이트에 대한 runcode/로캘 첫째
<?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
- 모두 변경 static 링크
page.phtml
파일에서 즉href="css/styles.css"
하기<?php echo $this->getSkinBaseUrl('css/styles.css')?>