Pregunta

Traducir el modo de mantenimiento por sitio web en una configuración de múltiples sitios web y múltiples dominios

Cuál es el adecuado ¿Cómo traducir (localización) la página de mantenimiento en un entorno de múltiples sitios web y múltiples dominios?

La configuración se realiza en:

  • MAGENTO_ROOT/index.php
  • MAGENTO_ROOT/es/index.php
  • MAGENTO_ROOT/es/index.php
  • MAGENTO_ROOT/algún código/index.php

Supongamos que se puede acceder a las tiendas a través de:

Puedo ver fácilmente algunas soluciones, pero todas parecen ser más una solución alternativa que soluciones limpias y agradables.

¿Cómo se soluciona este problema?

¿Fue útil?

Solución

De forma predeterminada, Magento no admite la traducción inmediata de páginas de error y requiere algunas personalizaciones para permitir dichas funciones.Así que técnicamente no hay adecuado manera de hacerlo.

Dado que la pila completa NO se inicializa durante la generación de errores, la funcionalidad de traducción normal $this->__('foobar'); no funcionará en las plantillas.

Se pueden encontrar algunos detalles sobre cómo se generan las páginas de error en MageBase:

Una opción es simplemente copiar errors/ en cada uno de sus subdirectorios de sus idiomas uk, us, etc.y modificar las plantillas para reflejar los idiomas del punto de entrada del sitio web del usuario final.

Sólo ten en cuenta tu index.php de cada vista para incluir los documentos de errores subrelativos:

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

También tenga en cuenta que existe una plantilla base para todos los errores, incluido el 404 en el page.html

Probablemente haya soluciones más elegantes, pero como ya estás duplicando index.php para diferentes vistas, es posible que algunos archivos más no sean demasiado desordenados.También puede modificar las plantillas para incluir CSS e imágenes de nivel superior para ahorrar algo de redundancia.

También puede crear un archivo de idioma igual que lo hace en la localización estándar de Magento y leer los valores con el process.php archivo, ya que allí se configuran el título y algunos otros datos que necesitarían localización.Un ejemplo sencillo del uso de Varien_File_Csv para leer un archivo .CSV de idioma:

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

Nota adicional:Dado que la pila en el momento actual de ejecución puede no permitir la Varien_File_Csv inclusión de clases usando la función interna de PHP fgetcsv puede ser una mejor alternativa.

Y analice el archivo CSV de idioma necesario para completar los datos requeridos en el process.php archivo.

Otra alternativa sería simplemente agregar el traductor de Google o una herramienta de terceros para traducir automáticamente las páginas de error al idioma del usuario final.

Referencias:

Otros consejos

Como se mencionó anteriormente, no hay una manera fácil de traducir la página de mantenimiento.Sin embargo, hay una solución para ello (que tiene su propio número de ventajas / desventajas): use algunas de las extensiones del modo de mantenimiento, como esta:

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

Muestra la página de modo de mantenimiento después de que se haya cargado Magento Stack, lo que significa que necesita tener conexión de base de datos y pocas otras cosas.Por eso también es más lento y requiere más recursos.Pero si no es un problema para usted, hace que la página de mantenimiento sea completamente personalizable.

Actualizar:

Encontré otra forma de traducir la página de mantenimiento:

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

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

El constructor de la página de mantenimiento acepta un skin Parámetro POST para cambiar el diseño.Parece ser la forma intencional, pero no está documentada (aún)...

  1. Añade algunas reglas de reescritura a tu .htaccess que añade un skin parámetro a su URL.P.ej.

    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. Copiar errors/default a errors/french

  3. Cambie/traduzca archivos de plantilla según sus necesidades

Quizás un poco tarde, pero un bien solución de trabajo, sin copiar error directorio a cada subcarpeta...

"Desventajas":

  • Tienes que editar tres archivos principales.Para evitar ediciones en el núcleo tanto como sea posible, simplemente cambié la ruta de inclusión de las páginas de error/informe y extendí processor.php leer una modificación local.xml.
  • todavía requiere archivos de plantilla para cada idioma (no hay traducción en este momento). quizas mas tarde)

Configuración básica

Configuración de múltiples sitios web y múltiples tiendas así, la única diferencia es que lo he configurado MAGE_RUN_CODE en .htaccess en lugar de index.php.Para el primer dominio no uso RUN_CODE todos los demás parece...

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

Además de la respuesta vinculada, tuve que configurar RewriteBase en .htaccess para coincidir con el directorio local y editar index.php en en, fr y cambio

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

a

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

Editar errors/404.php, 503.php y report.php

Reemplazar

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

con

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

Y agrega esto a 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;
            }
        }
    }
}

Nuevo local.xml estructura

en lugar de establecer<skin> en el primer nivel, busque primero el código de ejecución/localización de los sitios web

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

Plantillas

Agregar 503.phtml, ..., CSS a directorios coincidentes <runcode>-<locale>

  • default-default (Idioma predeterminado del primer dominio)
  • default-en
  • default-fr
  • website1-default (Idioma predeterminado del segundo dominio)
  • ...

Sin CSS/imágenes duplicadas

  • coloque los archivos CSS/imágenes específicos de su sitio web en un directorio y agregue <skin_base> nodo a local.xml
  • cambia todo estático enlaces en page.phtml archivos de es decir href="css/styles.css" a <?php echo $this->getSkinBaseUrl('css/styles.css')?>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top