Domanda

Tradurre modalità di Manutenzione per il sito web in multi sito web multi-dominio di installazione

Qual è il corretto modo di tradurre (localizzazione) Manutenzione pagina in un multi-sito e multi-ambiente di dominio?

L'installazione è effettuata da:

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

Supponiamo che i negozi sono accessibili attraverso:

Posso facilmente vedere alcune soluzioni, ma tutte di theem sembra essere più di una soluzione di bella, pulita soluzioni.

Come si fa a risolvere questo problema?

È stato utile?

Soluzione

Per impostazione predefinita Magento non supporta la traduzione out-of-box per le pagine di errore e richiede alcune personalizzazioni per consentire tali funzionalità. Quindi tecnicamente non c'è alcun modo appropriato per fare tale.

Poiché lo stack completo non è inizializzato durante la generazione di errori, la funzionalità di traduzione normale $this->__('foobar'); non funzionerà nei modelli.

Alcuni dettagli su come vengono generati le pagine di errore su Magebase:

Un'opzione è semplicemente copiare errors/ in ciascuna delle tue directory delle lingue delle lingue uk, us, ecc. E modificare i modelli per riflettere le lingue del punto di ingresso del sito Web dell'utente finale.

Basta notare il tuo index.php di ogni vista per includere gli errori relativi relativi Docs:

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

Aspetta anche che ci sia un modello di base per tutti gli errori, incluso 404 nel page.html

Ci sono probabilmente soluzioni più eleganti ma dal momento che stai già duplicando index.php per viste diverse, alcuni altri file potrebbero non essere troppi disordini. Puoi anche modificare i modelli per includere il livello superiore CSS e le immagini per salvare un po 'di ridondanza.

È stato anche possibile creare un file linguistico come si esegue nella localizzazione standard di Magento e leggi i valori con il file process.php, come titolo e alcuni altri dati che avrebbero bisogno di localizzazione vengano impostati. Un semplice esempio di utilizzo di Varien_File_CSV per leggere un file .CSV di linguaggio:

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

Nota aggiuntiva: poiché lo stack al punto corrente del tempo di esecuzione potrebbe non consentire l'inclusione della classe Varien_File_Csv utilizzando la funzione PHP interna FGetCSV può essere un'alternativa migliore.

e analizza il file CSV della lingua necessario per compilare i dati richiesti nel file process.php.

Un'altra alternativa sarebbe semplicemente aggiungere google translate o tale strumento di terze parti per tradurre automaticamente le pagine di errore nella lingua degli utenti finali.

Riferimenti:

Altri suggerimenti

Come accennato prima che non vi sia un modo semplice per tradurre la pagina di manutenzione.C'è tuttavia una soluzione alternativa (che ha il proprio numero di vantaggi / svantaggi) - utilizzare alcune delle estensioni della modalità di manutenzione, come questa:

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

Visualizza la pagina della modalità di manutenzione dopo la pila di Magento è stata caricata, il che significa che è necessario disporre di una connessione al database e poche altre cose.A causa di ciò è anche più lento e richiede più risorse.Ma se non è un problema per te, rende la pagina di manutenzione completamente personalizzabile.

Aggiornamento:

Trovato un altro modo per tradurre la manutenzione pagina:

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

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

La pagina di manutenzione del costruttore accecpts un skin POST parametro per cambiare il layout.Sembra essere questo il modo intenzionale, ma non documentated (ancora) ...

  1. Aggiungere alcune regole di riscrittura per il tuo .htaccess che aggiunge un skin parametro URL.Es.

    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. Copia errors/default per errors/french

  3. Modificare/tradurre i file di modello per le vostre esigenze

Forse po ' in ritardo, ma un buona soluzione di lavoro, senza copiare error directory per ogni sottocartella ...

"Aspetti negativi":

  • devi modificare i tre file core.Per evitare modifiche di base, in quanto possibile, ho appena cambiato percorso di inclusione di errore/pagine di report e estesa processor.php per leggere una versione modificata local.xml.
  • e ' ancora necessario file di modello per tutte le lingue (traduzione, per il momento, la forse più tardi)

Configurazione di base

Multi-sito e multi-store di set-up come questo, solo differnce è che ho impostato MAGE_RUN_CODE in .htaccess invece di index.php.Per il 1 ° di dominio io uso no RUN_CODE tutti gli altri sembra ...

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

In aggiunta alle collegate risposta ho dovuto impostare RewriteBase in .htaccess per abbinare internazionali directory e modificare index.php in en, fr e cambiare

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

per

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

Modifica errors/404.php, 503.php e report.php

Sostituire

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

con

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

E aggiungere a questo 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;
            }
        }
    }
}

Nuovo local.xml struttura

Invece di impostazione<skin> al primo livello di look per i siti web eseguicodice/locale prima

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

Modelli

Aggiungere 503.phtml, ..., CSS per le directory che corrispondono <runcode>-<locale>

  • default-default (1 ° dominio lingua di default)
  • default-en
  • default-fr
  • website1-default (2 ° dominio lingua di default)
  • ...

No duplicate CSS/immagini

  • mettere il vostro sito web specifico CSS/immagini in file in una directory e aggiungere <skin_base> nodo local.xml
  • cambia TUTTO statico collegamenti in page.phtml i file da cioè href="css/styles.css" per <?php echo $this->getSkinBaseUrl('css/styles.css')?>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top