Frage

Ich habe mit gettext für die Übersetzung von Text und Nachrichten beginne ich an Benutzer senden. Ich verwende poedit als Redakteur, aber ich habe Schwierigkeiten mit dynamischen Nachrichten.

Zum Beispiel habe ich Dinge wie die Login, wo ich eine Variable, die die Art des Fehlers erzählt.

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

Wenn ich Auto-Update von poedit dies wie „Seite-fehler-“ gelesen wird. Was ich tue, ist eine Datei, wo ich Dummy-Aufrufe an die Methode übersetzen mit allen möglichen Schlüsseln Ort, um sie in meinem poedit, wenn die automatische Aktualisierung hinzugefügt.

ich nicht besonders mag diese Situation. How do you Jungs tun es.

Vielen Dank für Ihre Ideen

War es hilfreich?

Lösung

Nein - das ist nicht möglich, da der Editor (und die gettext Tools) Ihre Quellen lesen, nicht Ihr Programm ausgeführt wird. Hier finden Sie die Dummy-Anrufe halten oder die Schlüssel in dem die Übersetzung selbst Dateien.

Andere Tipps

Versuchen Sie, so etwas wie

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

Ich kam in dem gleichen Problem.

zum Beispiel ich habe

in PHP

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

Wenn ich mit poedit synchronisiert wird es abholen ‚FORM_HEADER_‘ das kein Identifikator i (generiert) haben im Code.

Also ich hatte das Problem zu beheben meine geben Poedit vollständige Bezeichner i gelöst, dass, indem Sie die folgenden in PHP

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

UPDATE!

ich immer wieder in dieses Problem suchen. Und ich habe zur Zeit von der Quelle zu importieren auf. Dies ist, wie ich weiter, bis ich eine bessere Lösung

finden
  1. Anwendung erstellen und so viele statische Bezeichner wie möglich nutzen.
  2. Aktivieren Sie die Protokollierung von unübersetzt (dynamisch) Bezeichner

    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. Verwenden Poedit mit Quelle zu synchronisieren und die Saiten übersetzen, die gefunden werden.

  4. Beim Testen / Debuggen Phase überprüfen Sie das Protokoll für nicht übersetzte Strings.
  5. Fügen Sie die nicht übersetzten Strings an die .po-Datei.

    msgid "IDENTIFIER"
    msgstr "TRANSLATION STRING"
    
  6. Öffnen po-Datei und speichern Sie die mo-Datei zu erstellen (synchronisiere NICHT MIT QUELLE ODER ALL IS LOST).

UPDATE 2.

ich jetzt eine separate Datei für meine manuellen Bezeichner verwenden, indem Sie einen Texteditor (gedit / Notepad) verwenden. Jetzt habe ich zwei Dateien:

  1. Auto erzeugt durch poedit genannt .po
  2. manuell editierte Datei mit dem Namen _manual.po

i konfigurierte meinen in application.ini zu übersetzen für alle Dateien in dem Sprachenverzeichnis zu scannen

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

Wenn Sie in einer anderen Sprache übersetzen in poedit tut Datei. -> neuer Katalog aus POT-Datei und starten Sie Ihre manuell hinzugefügt Strings übersetzen

Wenn Sie eine endliche Anzahl von Fehlern haben, können Sie einige Dummy-Code in einem if (false) Zustand hinzuzufügen, deren alleiniger Zweck es ist, die Übersetzungen zu haben PoEdit aufzunehmen.

Zum Beispiel:

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

Sie können dann übersetzen mit:

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

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top