Question

Traduire le mode de Maintenance par site en multi site-multi-domaine de l'installation

Qu'est-ce que l' bon de la traduction (localisation) page de Maintenance dans un environnement multi-site et multi-domaine de l'environnement?

L'installation est faite dans:

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

Supposons que les magasins sont accessibles par le biais de:

Je peux facilement voir quelques solutions pour elle, mais tout de theem semble être plus d'une solution de contournement que le réel nice, propres solutions.

Comment voulez-vous résoudre ce problème?

Était-ce utile?

La solution

Par défaut de Magento ne prend pas en charge la traduction out-of-box pour les pages d'erreur, et nécessite quelques personnalisations afin de permettre à ces fonctions.Donc, techniquement, il n'y a pas de bon façon de faire de telles.

Depuis la pile n'est PAS initialisé lors de l'erreur de génération, normal la fonctionnalité de traduction $this->__('foobar'); ne fonctionne pas dans les modèles.

Quelques détails sur la façon dont les pages d'erreur sont générés peuvent être trouvés sur MageBase:

Une option est de simplement copier errors/ dans chacun de vos sous-répertoires de votre langues uk, us, etc.et modifier les modèles pour refléter les langues du site web du point d'entrée de l'utilisateur final.

Il suffit de noter votre index.php de chaque point de vue d'inclure les sous-erreurs relatives docs:

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

Également être consciente de l'existence d'un modèle de base pour toutes les erreurs, y compris 404 dans la page.html

Il y a probablement plus élégant des solutions, mais puisque vous êtes déjà dupliquer index.php différents points de vue, un peu plus de fichiers peuvent ne pas être trop encombré.Vous pouvez également modifier les modèles pour inclure le haut niveau de la CSS et des images à enregistrer une certaine redondance.

Vous pouvez également créer un fichier de langue de la même manière que dans Magento standard de localisation et de lire les valeurs dans la process.php fichier, comme le titre et quelques autres données qui auraient besoin de localisation est mis là.Un exemple simple d'utilisation de Varien_File_Csv à lire une langue .Fichier CSV:

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

Note supplémentaire:Depuis la pile au point en cours d'exécution ne permettent pas l' Varien_File_Csv la classe d'inclusion à l'aide de l'interne en fonction PHP fgetcsv peut-être une meilleure alternative.

Et analyser la langue de fichier CSV nécessaires pour renseigner les données nécessaires dans le process.php fichier.

Une autre alternative serait de simplement ajouter Google translate ou tel outil 3ème partie de traduire automatiquement les pages d'erreur à la fin les utilisateurs de la langue.

Références:

Autres conseils

Comme mentionné avant qu'il n'y ait pas de moyen facile de traduire la page de maintenance.Il y a cependant une solution de contournement (qui a son propre nombre d'avantages / inconvénients) - Utilisez certaines des extensions de mode de maintenance, telles que celle-ci:

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

Il affiche la page du mode de maintenance après la charge de Magento Stack, ce qui signifie que vous devez avoir une connexion de base de données et peu d'autres choses.À cause de cela, il est également plus lent et nécessite plus de ressources.Mais si ce n'est pas un problème pour vous, il rend la page de maintenance entièrement personnalisable.

Mise à jour:

Trouvé un autre moyen de traduction de page de maintenance:

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 page de maintenance constructeur accecpts un skin POST paramètre de mise en page.Il semble être la manière intentionnelle, mais il n'est pas pour rédaction (encore) ...

  1. Ajouter quelques règles de réécriture pour votre .htaccess qui ajoute une skin paramètre de votre URL.Par exemple.

    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. Copie errors/default pour errors/french

  3. Modifier/traduire les fichiers de modèle à vos besoins

Peut-être peu en retard, mais un bon solution de travail, sans copier error répertoire pour chaque sous-dossier ...

"Inconvénients":

  • vous devez modifier les trois fichiers de base.Pour éviter les modifications dans la base, autant que possible, j'ai juste changé le chemin d'inclusion de l'erreur/les pages du rapport et de l'étendue processor.php pour lire une version modifiée de local.xml.
  • il nécessite encore des fichiers de modèle pour toutes les langues (pas de traduction pour le moment - peut-être plus tard)

La configuration de base

Multi-site, multi-magasins comme cela, seule la differnce est que j'ai mis MAGE_RUN_CODE dans .htaccess au lieu de index.php.Pour la 1ère domaine je n'utilise pas RUN_CODE tous les autres, il ressemble ...

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

En outre, les liens entre la réponse que j'ai eu à définir RewriteBase dans .htaccess au match locale répertoire et modifier index.php dans en, fr et le changement

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

pour

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

Modifier errors/404.php, 503.php et report.php

Remplacer

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

avec

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

Et les ajouter à 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;
            }
        }
    }
}

Nouveau local.xml structure

Au lieu de mettre<skin> au premier niveau pour les sites web exécutercode/locale première

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

Modèles

Ajouter 503.phtml, ..., CSS pour les répertoires correspondant à <runcode>-<locale>

  • default-default (1er domaine de la langue par défaut)
  • default-en
  • default-fr
  • website1-default (2e domaine de la langue par défaut)
  • ...

Aucun duplicata CSS/images

  • mettre votre site internet spécifique CSS/images fichiers dans un répertoire et ajouter <skin_base> nœud à local.xml
  • changement de TOUS les statique liens dans page.phtml c'est à dire des fichiers à partir de href="css/styles.css" pour <?php echo $this->getSkinBaseUrl('css/styles.css')?>
Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top