Tradurre modalità di Manutenzione per il sito web in multiwebsite-multidominio installazione
-
13-12-2019 - |
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:
- http://MagentoExample.com/index.php (impostazione predefinita)
- http://MagentoExample.uk/ (regno unito)
- http://MagentoExample.us/ (ci)
- http://MagentoExample.com (somecode)
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?
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
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) ...
Aggiungere alcune regole di riscrittura per il tuo
.htaccess
che aggiunge unskin
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]
Copia
errors/default
pererrors/french
- 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 modificatalocal.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>
nodolocal.xml
- cambia TUTTO statico collegamenti in
page.phtml
i file da cioèhref="css/styles.css"
per<?php echo $this->getSkinBaseUrl('css/styles.css')?>