Frage

Übersetzen Sie den Wartungsmodus pro Website in Multi-Website-Multi-Domain-Setup

Was ist der richtig art der Übersetzung (Lokalisierung) von Wartungsseiten in einer Umgebung mit mehreren Websites und Domänen?

Setup ist gemacht in:

  • MAGENTO_WURZEL/index.PHP
  • MAGENTO_ROOT/deutsch/index.PHP
  • MAGENTO_ROOT/us/index.PHP
  • MAGENTO_ROOT/ein Code/index.PHP

Nehmen wir an, dass die Geschäfte über erreichbar sind:

Ich kann leicht einige Lösungen dafür sehen, aber alles scheint eher eine Problemumgehung zu sein als tatsächlich nette, saubere Lösungen.

Wie lösen Sie dieses Problem?

War es hilfreich?

Lösung

Standardmäßig unterstützt Magento keine Out-of-Box-Übersetzung für Fehlerseiten und erfordert einige Anpassungen, um solche Funktionen zu ermöglichen.Technisch gibt es also keine richtig weg, dies zu tun.

Da der vollständige Stapel während der Fehlergenerierung NICHT initialisiert wird, normale Übersetzungsfunktionalität $this->__('foobar'); funktioniert nicht in den Vorlagen.

Einige Details darüber, wie die Fehlerseiten generiert werden, finden Sie auf MageBase:

Eine Möglichkeit besteht darin, einfach zu kopieren errors/ in jedes Ihrer Unterverzeichnisse Ihrer Sprachen uk, us, usw.und ändern Sie die Vorlagen so, dass sie die Sprachen des Website-Einstiegspunkts des Endbenutzers widerspiegeln.

Notieren Sie einfach Ihre index.php jeder Ansicht, um die subrelativen Fehlerdokumente einzuschließen:

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

Beachten Sie auch, dass es eine Basisvorlage für alle Fehler gibt, einschließlich 404 in der page.html

Es gibt wahrscheinlich elegantere Lösungen, aber da Sie bereits duplizieren index.php für verschiedene Ansichten sind ein paar weitere Dateien möglicherweise nicht zu viel Unordnung.Sie können die Vorlagen auch so ändern, dass sie CSS und Bilder der obersten Ebene enthalten, um Redundanz zu sparen.

Sie können auch eine Sprachdatei wie in der Standardlokalisierung von Magento erstellen und die Werte mit dem einlesen process.php datei als Titel und einige andere Daten, die lokalisiert werden müssten, werden dort festgelegt.Ein einfaches Beispiel für die Verwendung von Varien_File_Csv zum Lesen einer Sprache .CSV-Datei:

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

Zusätzlicher Hinweis:Da der Stapel zum aktuellen Zeitpunkt der Laufzeit möglicherweise nicht zulässt, dass die Varien_File_Csv Klasseneinschluss mit der internen PHP-Funktion fgetcsv könnte eine bessere Alternative sein.

Und analysieren Sie die Sprach-CSV-Datei, die zum Auffüllen der erforderlichen Daten in der process.php Datei.

Eine andere Alternative wäre, einfach Google Translate oder ein solches 3rd-Party-Tool hinzuzufügen, um die Fehlerseiten automatisch in die Sprache des Endbenutzers zu übersetzen.

Verweis:

Andere Tipps

Wie bereits erwähnt, gibt es keine einfache Möglichkeit, die Wartungsseite zu übersetzen.Es gibt jedoch eine Problemumgehung dafür (was seine eigene Anzahl von Vorteilen / Nachteilen hat) - Verwenden Sie einige der Wartungsmodus-Erweiterungen, z. B. diese ein:

http://www.magentocommerce.com/magento-connect/store-WARMAGE.HTML

es zeigt die Wartungsmodusseite an, nachdem der Magento-Stack geladen wurde, was bedeutet, dass Sie Datenbankverbindung und wenige andere Dinge haben müssen.Dadurch ist es auch langsamer und erfordert mehr Ressourcen.Aber wenn es kein Problem für Sie ist, macht es die Wartungsseite vollständig anpassbar.

Update:

Einen anderen Weg für die übersetzte Wartungsseite gefunden:

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

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

Der Konstruktor der Wartungsseite akzeptiert eine skin POST-Parameter zum Ändern des Layouts.Es scheint der beabsichtigte Weg zu sein, aber es ist (noch) nicht dokumentiert...

  1. Fügen Sie Ihrem Einige Umschreibregeln hinzu .htaccess das hängt ein skin parameter zu Ihrer URL.Z.

    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. Kopieren errors/default zu errors/french

  3. Vorlagendateien nach Ihren Bedürfnissen ändern / übersetzen

Vielleicht etwas spät, aber ein gut arbeitslösung, ohne zu kopieren error verzeichnis zu jedem Unterordner...

"Nachteil":

  • sie müssen drei Kerndateien bearbeiten.Um Änderungen im Kern so weit wie möglich zu vermeiden, habe ich gerade den Include-Pfad der Fehler- / Berichtsseiten geändert und erweitert processor.php so lesen Sie eine modifizierte local.xml.
  • es werden weiterhin Vorlagendateien für jede Sprache benötigt (derzeit keine Übersetzung - vielleicht später)

Grundlegende Einrichtung

Einrichtung mehrerer Websites mit mehreren Geschäften so ist der einzige Unterschied, den ich eingestellt habe MAGE_RUN_CODE in .htaccess statt index.php.Für die 1. Domain verwende ich keine RUN_CODE bei allen anderen sieht es so aus ...

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

Zusätzlich zu der verknüpften Antwort musste ich einstellen RewriteBase in .htaccess so passen Sie das Gebietsschemaverzeichnis an und bearbeiten es index.php in en, fr und Veränderung

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

zu

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

Bearbeiten errors/404.php, 503.php und report.php

Ersetzen

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

mit

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

Und fügen Sie dies hinzu 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;
            }
        }
    }
}

Neu local.xml Struktur

Anstatt zu setzen<skin> suchen Sie auf der ersten Ebene zuerst nach Websites Runcode / Gebietsschema

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

Vorlagen

Hinzufügen 503.phtml, ..., CSS zu Verzeichnissen passend <runcode>-<locale>

  • default-default (Standardsprache der 1. Domain)
  • default-en
  • default-fr
  • website1-default (Standardsprache der 2. Domain)
  • ...

Keine doppelten CSS / Bilder

  • legen Sie Ihre Website-spezifischen CSS- / Bilddateien in ein Verzeichnis und fügen Sie sie hinzu <skin_base> knoten zu local.xml
  • ALLES ändern statisch links auf page.phtml dateien von z.B. href="css/styles.css" zu <?php echo $this->getSkinBaseUrl('css/styles.css')?>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top