Dinamik gettext için poEdit geçici çözüm

3 Cevap php

I have started using gettext for translating text and messages i send to user. I am using poedit as an editor, but i am struggling with dynamic messages.

Örneğin ben hata türünü bildirir bir değişken var login gibi şeyler var.

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

When i auto update from poedit this gets read like "page-error-". What i do is have a file where i place dummy calls to the translate method with all the possible keys to have them added in my poedit when auto updating.

I don't particularly like this situation. How do you guys do it.

Fikirleriniz için teşekkürler

3 Cevap

Hayır - editörü (ve gettext araçları) programı işletirken değil, sizin kaynakları okuduğunuz çünkü bu, mümkün değildir. Sen kukla aramaları tutmak veya çeviri dosyaları kendiniz için anahtarlarını eklemek gerekir.

Eğer böyle bir şey çalışıyoruz

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

Ben aynı sorunu geldi.

Örneğin i var

php

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

I poEdit ile senkronize zaman bulacaktır 'FORM_HEADER_' kod i (oluşturulan) sahip bir tanımlayıcı değil ki.

So i had to fix the problem my giving Poedit full identifiers i solved that by doing the following php

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

GÜNCELLEME!

Ben bu sorunun içine bakarak tuttu. Ve ben şu anda kaynağından ithal vazgeçti. I daha iyi bir çözüm bulana kadar bu i devam nasıl

  1. Uygulamayı kurmak ve mümkün olduğunca çok statik tanımlayıcılar kullanın.
  2. Çevrilmemiş (dinamik) tanımlayıcılar günlüğünü etkinleştirme

    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. Kaynağıyla eşitlenecek ve bulunan dizeleri çevirmek için poEdit kullanın.

  4. Test / hata ayıklama fazında çevrilmemiş dizeleri için günlüğünü denetleyin.
  5. . Po dosyasına çevrilmemiş dizeleri ekleyin.

    msgid "IDENTIFIER"
    msgstr "TRANSLATION STRING"
    
  6. Açık po dosyası ve mo dosyası (KAYNAK VEYA TÜM KAYIP OLDUĞU İLE SYNC YAPMAYIN) oluşturmak için kaydedin.

GÜNCELLEME 2.

Ben şimdi bir metin editörü (gedit / notepad) kullanılarak, benim manuel tanımlayıcıları için ayrı bir dosya kullanın. Şimdi ben iki dosya var:

  1. Otomatik denilen poEdit. Po tarafından oluşturulan
  2. _manual.po denilen elle editted dosya

i benim dil dizindeki bütün dosyalar için tarama application.ini çevirmek yapılandırılmış

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

Eğer poEdit başka bir dile çevirmek istiyorsanız dosyası yapmak -> POT dosyasından yeni katalog, ve elle eklenen dizeleri çeviri başlar.