Pergunta

Eu comecei usando gettext para traduzir mensagens de texto e eu enviar para o usuário. Eu estou usando poedit como editor, mas eu estou lutando com mensagens dinâmicas.

Por exemplo eu tenho coisas como o login onde eu tenho uma variável que indica o tipo de erro.

$this->translate('page-error-' . $error);

Quando a atualização automática i de poedit este é lido como "page-de erros". O que eu faço é ter um arquivo onde eu fazer chamadas falsas para o método de traduzir com todas as chaves possíveis para tê-los adicionado na minha poedit quando atualização automática.

Eu particularmente não gosto desta situação. Como vocês fazê-lo.

Obrigado por suas idéias

Foi útil?

Solução

Não - isso não é possível, porque o editor (e as ferramentas gettext) está lendo suas fontes, não executar o seu programa. Você terá que manter as chamadas falsas ou adicionar as chaves para a tradução arquiva-se.

Outras dicas

Você está tentando algo como

$this->translate(sprintf('page-error-%s', $error));

me deparei com o mesmo problema.

Por exemplo, eu tenho

em php

//Gives FORM_HEADER_ADD or FORM_HEADER_EDIT
echo $this->translate('FORM_HEADER_' . strtoupper($this->data)); 

Quando eu sincronizar com poedit ele vai pegar 'FORM_HEADER_', que não é um identificador que eu tenho (gerado) no código.

Então, eu tive que corrigir o problema minhas dando PoEdit identificadores completos i resolvido que, ao fazer o seguinte em php

echo ($this->data === 'add') ? $this->translate('FORM_HEADER_ADD') : $this->translate('FORM_HEADER_EDIT');

ATUALIZAÇÃO!

Eu ficava olhando para esse problema. E eu atualmente desistiu de importação a partir da fonte. Isto é como eu continuar até eu encontrar uma solução melhor

  1. Aplicação de construir e usar o maior número de identificadores estáticos quanto possível.
  2. Ativar registro de identificadores não traduzidas (dinâmicas)

    protected function _initMyTranslate(){
    
        $date = new Zend_Date();
        $fileName = sprintf('/../logs/translation_%1$s.log', $date->toString('dd-MM'));
    
        $writer = new Zend_Log_Writer_Stream(APPLICATION_PATH . $fileName);
        $log    = new Zend_Log($writer);
    
        // get the translate resource from the ini file and fire it up
        $resource = $this->getPluginResource('translate');
        $translate = $resource->getTranslate();
    
        // add the log to the translate
        $translate->setOptions(
                array(
                    'log'             => $log,
                    'logUntranslated' => true
                )
            );
    
        // return the translate to get it in the registry and so on
        return $translate;
    }
    
  3. Use Poedit a sincronia com fonte e traduzir as cordas que são encontrados.

  4. Durante os testes / depuração fase verificar o log para strings não traduzidas.
  5. Adicione as strings não traduzidas para o arquivo .po.

    msgid "IDENTIFIER"
    msgstr "TRANSLATION STRING"
    
  6. po abrir e salvar-lo para criar o arquivo mo (Não sincronizar com a fonte OU tudo está perdido).

UPDATE 2.

Agora eu usar um arquivo separado para os meus identificadores manuais, usando um editor de texto (gedit / bloco de notas). Agora eu tenho dois arquivos:

  1. Auto gerada por poedit chamado .po
  2. arquivo editted manualmente chamado _manual.po

Eu configurei meu traduzir em application.ini para procurar todos os arquivos no diretório do idioma

resources.translate.adapter = gettext
resources.translate.content = APPLICATION_PATH "/../library/languages/"
resources.translate.locale = auto ;use en to force english or nl for dutch..etc
resources.translate.scan = directory
resources.translate.options.disableNotices = false

Se você quiser traduzir para outro idioma em poedit fazer o arquivo -.> Novo catálogo de arquivo POT, e começar a traduzir suas cordas adicionados manualmente

Se você tem um número finito de erros, você pode adicionar algum código fictício dentro de uma condição if (false), cujo único propósito é ter PoEdit pegar as traduções.

Por exemplo:

if (false) {
  _('role_visitor');
  _('role_hiker_reader');
  _('role_hiker');
  _('role_translator');
  _('role_proofreader');
  _('role_moderator');
  _('role_moderator_2');
  _('role_moderator_3');
  _('role_admin');
}

Você pode então traduzir com:

$translated_role = _('role_' . $role);

Créditos para: http://eng.marksw.com/2012/12/05/how-to-expose-dynamic-translatable-text-to-translation-tools-like-poedit/

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