Domanda

Ho iniziato a utilizzare gettext per tradurre il testo e messaggi inviati all'utente. Sto usando poedit come un editor, ma sto lottando con messaggi dinamici.

Per esempio io ho cose come il login dove ho una variabile che indica il tipo di errore.

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

Quando ho aggiornamento automatico da poedit questo viene letto come "pagina-degli errori". Quello che faccio è un file in cui metto le chiamate fittizie al metodo di tradurre con tutte le chiavi possibile averli aggiunti nel mio poedit quando l'aggiornamento automatico.

non mi piace particolarmente questa situazione. Come si fa a ragazzi farlo.

Grazie per le tue idee

È stato utile?

Soluzione

No - questo non è possibile, perché l'editor (e gli strumenti gettext) stanno leggendo le tue fonti, non eseguire il programma. Dovrete tenere le chiamate fittizie o aggiungere le chiavi per la traduzione dei file stessi.

Altri suggerimenti

Si sta tentando qualcosa di simile

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

mi sono imbattuto lo stesso problema.

Per esempio io ho

in php

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

Quando la sincronizzazione con poedit si riprenderà 'FORM_HEADER_' che non è un identificatore che ho (generato) nel codice.

Quindi ho dovuto risolvere il problema dando il mio Poedit identificatori pieni ho risolto che facendo quanto segue in php

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

UPDATE!

ho continuato a guardare in questo problema. E attualmente rinunciato importazione da sorgente. Questo è il modo continuo fino a trovare una soluzione migliore

  1. Crea applicazione e utilizzare il numero di identificatori statici possibile.
  2. Abilitare la registrazione di non tradotti identificatori (dinamici)

    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. Usa Poedit per la sincronizzazione con la fonte e tradurre le stringhe che si trovano.

  4. Durante la fase / debugging test controllare il registro per le stringhe non tradotte.
  5. Aggiungere le stringhe non tradotte al file .po.

    msgid "IDENTIFIER"
    msgstr "TRANSLATION STRING"
    
  6. Aprire il file po e salvarlo per creare il file di mo (NON sincronia con origine o tutto è perduto).

UPDATE 2.

ora uso un file separato per i miei identificatori manuali, utilizzando un editor di testo (gedit / notepad). Ora ho due file:

  1. Sistema generato da poedit chiamato .po
  2. file editted manualmente chiamato _manual.po

Ho configurato il mio tradursi in Application.ini per la ricerca di tutti i file nella directory della lingua

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 si vuole tradurre in un'altra lingua in poedit fare file di -.> Nuovo catalogo da file POT, e iniziare a tradurre le stringhe aggiunte manualmente

Se si dispone di un numero finito di errori, è possibile aggiungere un po 'di codice fittizio all'interno di un if (false) condizioni, il cui unico scopo è quello di avere PoEdit raccogliere le traduzioni.

Ad esempio:

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

È quindi possibile tradurre con:

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

Crediti a: http://eng.marksw.com/2012/12/05/how-to-expose-dynamic-translatable-text-to-translation-tools-like-poedit/

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top