2009-05-16 18 views
6

Zacząłem używać gettext do tłumaczenia tekstu i wiadomości wysyłanych do użytkownika. Używam programu poedit jako edytora, ale zmagam się z komunikatami dynamicznymi.obejście obejścia dla dynamicznego gettextu

Na przykład mam takie rzeczy jak login, w którym mam zmienną, która mówi o rodzaju błędu.

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

Po automatycznej aktualizacji z poedit zostaje to odczytane jako "page-error-". Co mam zrobić, to plik, w którym umieszczam połączenia fikcyjne z metodą translate z wszystkimi możliwymi kluczami, aby je dodać w moim poedit podczas automatycznej aktualizacji.

Nie podoba mi się ta sytuacja. Jak to robicie?

Dzięki za pomysły

+0

nie mogłem zrozumieć problem. czy możesz to bardziej wyrazić? – farzad

Odpowiedz

5

Nie - to nie jest możliwe, ponieważ redaktor (a narzędzia gettext) przegląda swoje źródła, nie wykonując swój program . Będziesz musiał zachować fałszywe połączenia lub samodzielnie dodać klucze do plików tłumaczeniowych.

+0

Jak mogę ręcznie dodać klucze? Nie byłem w stanie znaleźć drogi. Czy te manuallly klucze są usuwane podczas synchronizacji ze źródłami? –

+0

Dodaj stronę-błąd-% s – Blaise

2

Próbujesz coś podobnego

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

jak zrobić dinamic klucze nie jest problem, problem w jaki sposób dodać je w poedit. –

0

Natrafiłem na ten sam problem.

na przykład mam

w php

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

podczas synchronizacji z poedit będzie odebrać „FORM_HEADER_”, która nie jest identyfikatorem mam (wygenerowane) w kodzie.

więc musiałem rozwiązać ten problem dając poedit moje pełne identyfikatory Rozwiązałem to w następujący sposób w php

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

UPDATE!

Ciągle zaglądałem w ten problem. I obecnie zrezygnowałem z importowania ze źródła. Tak postępuję, dopóki nie znajdę lepszego rozwiązania.

  1. Utwórz aplikację i użyj jak największej ilości statycznych identyfikatorów.
  2. Włącz rejestrowanie nieprzetłumaczonych (dynamiczny) identyfikatorów

    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. Zastosowanie poedit do synchronizacji ze źródłem i przełożyć struny, które można znaleźć.

  4. Podczas fazy testowania/debugowania sprawdź dziennik pod kątem nieprzetłumaczonych ciągów.
  5. Dodaj nieprzetłumaczone ciągi do pliku .po.

    msgid "IDENTIFIER" 
    msgstr "TRANSLATION STRING" 
    
  6. Otwórz plik PO i zapisać go do utworzenia pliku Mo (nie są synchronizowane ze źródłem LUB wszystko stracone).

UPDATE 2.

teraz użyć pliku oddzielna dla moich ręcznych identyfikatorów, za pomocą edytora tekstu (gedit/Notatnik). Teraz mam dwa pliki:

  1. Auto generowane przez poedit zwane < język > .po
  2. ręcznie editted plik o nazwie < język > _manual.po

skonfigurowałem mój tłumaczyć w application.ini do zeskanuj wszystkie pliki w katalogu językowym

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 

jeśli chcesz przetłumaczyć do innego języka w pliku poedit do -> nowy katalog z pliku POT i zacznij tłumaczyć ręcznie dodane łańcuchy.

0

Jeśli masz skończoną liczbę błędów, możesz dodać fałszywy kod do warunku if (false), którego jedynym celem jest pobranie przez PoEdit tłumaczeń.

Na przykład:

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

Następnie można przetłumaczyć z:

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

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

Powiązane problemy