Çok web sitesi-çok alanlı kurulumda web sitesi başına Bakım modunu tercüme et


12

Çoklu web sitesi-çoklu alan kurulumunda web sitesi başına Bakım modunu tercüme

Çok sayfalı ve çok alanlı bir ortamda Bakım sayfasını çevirmenin (yerelleştirme) doğru yolu nedir ?

Kurulumun yapıldığı yer:

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

Mağazaların erişilebilir olduğunu varsayalım:

Kolayca birkaç çözüm görebiliyorum, ancak hepsi gerçek güzel, temiz çözümlerden daha çok bir çözüm gibi görünüyor.

Bu sorunu nasıl çözersiniz?


Yanıtlar:


10

Varsayılan olarak Magento, hata sayfaları için kullanıma hazır çeviriyi desteklemez ve bu tür özelliklere izin vermek için bazı özelleştirmeler gerektirir. Dolayısıyla teknik olarak bunu yapmanın uygun bir yolu yoktur .

Hata oluşturma sırasında tam yığın BAŞLATILMADIĞI için, normal çeviri işlevselliği $this->__('foobar');şablonlarda çalışmaz.

Hata sayfalarının nasıl oluşturulduğuna ilişkin bazı ayrıntılar MageBase'de bulunabilir:

Seçeneklerden biri basitçe kopyalamak için errors/senin dil arasından alt dizinleri her birine uk, usvb ve son kullanıcının web giriş noktasının dillerini yansıtmak için şablonlar değiştirin.

index.phpAlt göreceli hata dokümanlarını dahil etmek için her görünümünüzü not etmeniz yeterlidir:

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

Ayrıca, tüm hatalar için temel bir şablon olduğunu unutmayın. page.html

Muhtemelen daha şık çözümler var, ancak zaten index.phpfarklı görünümler için çoğaldığınız için, birkaç dosya daha fazla dağınık olmayabilir. Ayrıca, fazladan tasarruf sağlamak için şablonları üst düzey CSS ve görüntüleri içerecek şekilde değiştirebilirsiniz.

Ayrıca Magento'nun standart yerelleştirmesinde yaptığınız gibi bir dil dosyası oluşturabilir ve process.phpdosyadaki değerleri okuyabilir, başlık ve yerelleştirilmesi gereken diğer bazı veriler orada ayarlanır. Bir dil .CSV dosyasını okumak için Varien_File_Csv kullanımına basit bir örnek:

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

Ek not: Geçerli çalışma zamanı noktasındaki yığın Varien_File_Csv, dahili PHP işlevini kullanarak sınıfın eklenmesine izin vermeyebileceğinden fgetcsv daha iyi bir alternatif olabilir.

Ve gerekli verileri process.phpdosyada doldurmak için gereken dil CSV dosyasını ayrıştırın .

Başka bir alternatif, hata sayfalarını otomatik olarak son kullanıcıların diline çevirmek için Google translate veya böyle bir üçüncü taraf aracı eklemek olacaktır.

Referanslar:


2

Daha önce de belirtildiği gibi, bakım sayfasını çevirmenin kolay bir yolu yoktur. Ancak bunun için bir geçici çözüm var (kendi avantajları / dezavantajları vardır) - bunun gibi bazı bakım modu uzantılarını kullanın:

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

Magento yığını yüklendikten SONRA bakım modu sayfasını görüntüler, yani veritabanı bağlantınız ve birkaç başka şey olması gerekir. Bu yüzden de daha yavaş ve daha fazla kaynak gerektiriyor. Ancak bu sizin için bir sorun değilse, bakım sayfasını tamamen özelleştirilebilir hale getirir.


Veritabanına bağlantı kesilirse çıkış ne olur?
versedi

1
Dedim ki, bu geçici bir çözümdür ve her durum için uygun değildir. Veritabanı orada değilse Magento bir hata mesajı görüntüler.
Pronto

2

Güncelleme:

Çevrilmiş bakım sayfası için başka bir yol buldum:

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

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

Bakım sayfası yapıcısı, skindüzeni değiştirmek için bir POST parametresi kullanır. Kasıtlı yol gibi görünüyor, ama henüz belgelenmedi ...

  1. URL'nize parametre .htaccessekleyen bazı yeniden yazma kuralları skinekleyin. Örneğin.

    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. Şuraya kopyala errors/default:errors/french

  3. Şablon dosyalarını ihtiyaçlarınıza göre değiştirin / çevirin

Belki biraz geç, ama her alt klasöre dizin kopyalamadan iyi bir çalışma çözümü error...

"Downsides":

  • üç temel dosyayı düzenlemeniz gerekir. Çekirdek düzenlemeleri olabildiğince önlemek için hata / rapor sayfalarının yolunu değiştirdim ve processor.phpdeğiştirilmiş bir okumayı okumak için uzattım local.xml.
  • hala her dil için şablon dosyaları gerektirir (şu anda çeviri yok - belki daha sonra )

Temel kurulum

Çoklu web sitesi çoklu mağaza kurulum böyle, sadece differnce ben kurdum olmasıdır MAGE_RUN_CODEiçinde .htaccessyerine index.php. 1. alan adı için hiçbirine RUN_CODEbenzemiyor.

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

Bağlantılı cevap ek olarak belirlerim zorunda RewriteBaseiçinde .htaccessyerel dizin ve düzenle maç için index.phpde en, frve değişimi

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

için

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

Düzen errors/404.php, 503.phpvereport.php

değiştirmek

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

ile

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

Ve bunu 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;
            }
        }
    }
}

Yeni local.xmlyapı

<skin>İlk düzeyde ayarlamak yerine önce web sitesi runcode / locale arayın

<?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>

Şablonlar

503.phtmlEşleşen dizinlere CSS ekle , ...,<runcode>-<locale>

  • default-default (1. alan adı varsayılan dili)
  • default-en
  • default-fr
  • website1-default (2. alan adı varsayılan dili)
  • ...

Yinelenen CSS / resim yok

  • bir dizine web sitenizin belirli CSS / görüntü dosyalarını koymak ve eklemek <skin_base>için düğümlocal.xml
  • değişim TÜM statik bağlantıları page.phtmlie dosyaları href="css/styles.css"için<?php echo $this->getSkinBaseUrl('css/styles.css')?>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.