Question

J'ai commencé à utiliser gettext pour traduire le texte et les messages envoyés à l'utilisateur. J'utilise poedit comme rédacteur en chef, mais je me bats avec des messages dynamiques.

Par exemple, j'ai des choses comme le login où j'ai une variable qui indique le type d'erreur.

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

Quand je mise à jour automatique de ce poedit est lu comme « la page-ERROR- ». Ce que je fais est un fichier dans lequel je place des appels fictifs à la méthode traduire avec toutes les clés possibles pour les inscrire dans mon poedit lors de la mise à jour automatique.

Je ne aime pas particulièrement cette situation. Comment les gars vous le faites.

Merci pour vos idées

Était-ce utile?

La solution

Non - cela est impossible, parce que l'éditeur (et les outils gettext) lisent vos sources, et non pas l'exécution de votre programme. Vous devez garder les appels factices ou ajoutez les clés à la traduction vous-même les fichiers.

Autres conseils

Essayez-vous quelque chose comme

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

Je suis tombé sur le même problème.

par exemple j'ai

en php

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

i synchronisation avec poedit il reprendra « FORM_HEADER_ » qui ne soit pas un identificateur i ai (généré) dans le code.

Alors je devais résoudre le problème de mon donner des identifiants pleins Poedit je résolus qu'en procédant comme suit en php

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

Mise à jour!

Je regardais ce problème. Je lui ai donné actuellement en importer de la source. Voici comment je continue jusqu'à ce que je trouve une meilleure solution

  1. Construire une application et utiliser autant identifiants statiques que possible.
  2. Activer l'enregistrement des identificateurs non traduites (dynamiques)

    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. Utilisez Poedit pour la synchronisation avec la source et traduire les chaînes que l'on trouve.

  4. Pendant la phase de test / débogage vérifier le journal des chaînes non traduites.
  5. Ajoutez les chaînes non traduites dans le fichier .po.

    msgid "IDENTIFIER"
    msgstr "TRANSLATION STRING"
    
  6. Ouvrir le fichier po et de l'enregistrer pour créer le fichier mo (NE PAS AVEC SOURCE SYNC OU TOUT EST PERDU).

UPDATE 2.

Je l'utilise maintenant un fichier séparé pour mes identifiants manuellement, à l'aide d'un éditeur de texte (gedit / bloc-notes). Maintenant, j'ai deux fichiers:

  1. généré automatiquement par poedit appelé .po
  2. fichier manuellement editted appelé _manual.po

i configuré mon traduire en application.ini pour rechercher tous les fichiers dans le répertoire des langues

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

si vous voulez traduire dans une autre langue dans poedit faire fichier -.> Nouveau catalogue à partir du fichier POT, et commencer à traduire vos chaînes ajoutées manuellement

Si vous avez un nombre fini d'erreurs, vous pouvez ajouter un code factice dans un état if (false), dont le seul but est d'avoir PoEdit ramasser les traductions.

Par exemple:

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

Vous pouvez ensuite traduire par:

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

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top