Pergunta

Eu gostaria de traduzir o gênero opções para um cliente.No começo eu pensei que eu poderia simplesmente usar um arquivo de tradução para esta, mas olhando para o modelo app/design/frontend/base/default/template/customer/widget/gender.phtml Eu vejo que a opção rótulo não é passado para a função converter.

Qual é o melhor processo para a atualização desses valores para diferentes lojas?

Foi útil?

Solução

O gender atributo é uma lista suspensa atributo como qualquer outro.Seus rótulos são armazenados na tabela eav_attribute_option_value.
Mas como não há nenhum (fora da caixa) de forma a gerenciar a partir do back-end do cliente atributos vejo 2 opções aqui.

Opção 1. Rápida e suja:
Alterar as opções de modelo.
Cópia app/design/frontend/base/default/template/customer/widget/gender.phtml para o seu tema e adicionar depois de

 <?php $options = Mage::getResourceSingleton('customer/customer')->getAttribute('gender')->getSource()->getAllOptions();?>

este:

<?php foreach ($options as $key => $option) : ?>
    <?php $options[$key]['label'] = $this->__($option['label']);?>
<?php endforeach;?>

Em seguida, você pode traduziu a valores como qualquer outra cadeia de caracteres.

Opção 2 - Longo, mas limpo.
Inserir na tabela eav_attribute_option_value os valores para o seu segundo (e terceiro e assim por diante..) vista de arquivo.

Eu disse que esta é a "limpeza" da versão.
A teoria é limpo, mas a solução que eu tenho é que não limpa.

Identificar o atributo id:

SELECT * FROM eav_attribute where attribute_code = 'gender';

Vamos dizer que é 1000.
em seguida, identificar as opções para o atributo

select * from eav_attribute_option where attribute_id = 1000;

Vamos dizer que você começa 100 e 101.
Em seguida, examine o eav_attribute_option_value para ver qual é qual.

select * from eav_attribute_option_value where option_id in (100, 101);

agora você vai ver que é o Male opção e que é o Female opção.

Vamos dizer que 100 => Male, 101=>Female.
Agora, insira os valores para a segunda loja da loja.

Insert into `eav_attribute_option_value` set option_id = 100, store_id = 1, value = 'Translation for Male here'; 
Insert into `eav_attribute_option_value` set option_id = 101, store_id = 1, value = 'Translation for Female here';

Desculpe, mas eu não tenho um script de atualização de versão para esta.

Gostaria de ir com a rápida e suja.Menos dores de cabeça.

Outras dicas

Outra solução, é a atualização (substituir) widget/gender.phtml para permitir a tradução.

a partir de :

<?php foreach ($options as $option):?>
        <option value="<?php echo $option['value'] ?>"<?php if ($option['value'] == $value) echo ' selected="selected"' ?>><?php echo $option['label'] ?></option>
<?php endforeach;?>

para :

<?php foreach ($options as $option):?>
        <option value="<?php echo $option['value'] ?>"<?php if ($option['value'] == $value) echo ' selected="selected"' ?>><?php echo $this->__($option['label']) ?></option>
<?php endforeach;?>

E, finalmente, adicionar a sua traduzir texto Mage_Customer.csv, como este :

"Male","Your translate for Male"
"Female","Your translate for Female"

Não se esqueça de limpar o cache system > cache management


EDIÇÃO de 07 de setembro.2015

Eu perguntei para um pull request no Magento2, consulte: https://github.com/magento/magento2/pull/1801

Trabalho script de atualização ...só precisa ajustar $labels variável para corresponder ao seu armazenar IDs ...

<?php
require_once('./app/Mage.php');
Mage::app();

$labels = array(
    'Male' => array(    # default value
        1 => 'Male-DE', # key is storeId
        2 => 'Male-FR'
    ),
    'Female' => array(
        1 => 'Female-DE',
        2 => 'Female-FR'
    )
);

$attributeCode = 'gender';
$attribute = Mage::getModel('customer/customer')->getResource()
    ->getAttribute($attributeCode);

$values = array();
if ($attribute->usesSource()) {
    foreach ($labels as $label => $translations) {
        if ($optionId = $attribute->getSource()->getOptionId($label)) {
            $values[$optionId] = array(0 => $label) + $translations;
        }
    }
}

$data = array();
$data['option']['value'] = $values;

$attribute->addData($data);
try {
    $attribute->save();
} catch (Mage_Core_Exception $e) {
    echo $e->getMessage();
}

Facilmente maneira

Descubra os atributos

select * from eav_attribute_option_value onde option_id in (select option_id de eav_attribute_option onde attribute_id = (SELECT attribute_id DE eav_attribute onde attribute_code = "sexo"))

Agora é só fazer a nossa atualização

:D

Licenciado em: CC-BY-SA com atribuição
Não afiliado a magento.stackexchange
scroll top