PHP heredoc sözdizimi gettext çeviriler ayıklanıyor?

2 Cevap php

Ben yerelleştirme yapmak için PHP'nin gettext işlevlerini kullanıyorum. Ben gerçek çeviri yapmak için poEdit kullanarak ve "kaynaklardan Güncelle" ile kulüpler tercüme gereken tüm dizeleri ayıklamak için gerçekten çok kolay özelliği - heredoc sözdizimi içindeki hariç.

PoEdit PHP kaynak dosyaları. Po dosyaları oluşturmak için xgettext programı kullanıyor. PHP kodu bu gibi görünüyor ve ne zaman güzel çalışıyor:

echo "<h1>". _("test") ."</h1>";

Ancak aşağıdaki (a sözde t-object kullanılması gereken fark) ekstre almaz:

echo <<<EOD
<h1>{$->_('test')}
EOD;

PHP kodu aşağıdaki şekilde sorunu geçici çözüm olabilir:

<?php
$t = _('test');
echo <<<EOD
<h1>$t</h1>
EOD
?>

Ama gerçekten xgettext programı yorumlu metin bloğu içindeki dize ayıklamak tercih ederim.

A workaround for that has been suggested PHP dokümantasyon görüşleri. Geçici çözüm Python kodu olarak PHP kaynak dosyaları tedavi xgettext programı anlatmak tedavi etmektir. Ama poEdit bu yaklaşımı kullanarak xgettext çözümleyici bana sözdizimi hataları bir sürü verir.

Herkes PHP heredoc sözdizimi çeviriler ayıklamak için xgettext almak için bir çözüm biliyor mu?

http://savannah.gnu.org/bugs/?27740 Bu heredoc sözdizimi için destek geliştirilebilir olduğunu gösterir: A biraz ilgili bilet gettext projenin bilet sistemine açılmıştır?

2 Cevap

I am the reporter of the gettext ticket you're refering to in your post. When I submitted the ticket, I had something completely different in mind, something more along those lines:

<?php
  $msg = _(<<<TXT
  He said: "Hello world!".
  TXT
);
?>

Gettext böyle heredoc / yorumsuz metin dizeleri metin ayıklamak değil, ancak metnin büyük parçalar çeviri yaparken, bu gerçekten yararlı olabilir.

Benim durumumda, ben XML biçimlendirmesi içerir metinlerin parçalarını çevirmek için bir CLI PHP komut dosyası gettext kullanın. Bu biçimlendirme, orijinal metnin bir parçasıdır ve çok tercüme edilmelidir. Elle biçimlendirme her teklif veya kesme kaçmak zorunda poEdit veya başka bir düzenleyici okumak için mesajlar oldukça zorlaştırıyor.

Senin durumunda, bu ayıklanır (heredoc / yorumsuz metin) dizelerinde aradeğerlenmiş kod istiyorum görünüyor. Kolayca aslında interpolasyon kullanmadan önce metni hazırlayarak bu sorunu geçici olarak çözebilirsiniz:

<?php
$t = _('test');
echo <<<EOD
<h1>$t</h1>
EOD
?>

Ben Yorumlu metin sözdizimi kullanılarak yayınlanan koduna tam karşılığı olurdu çünkü bu bir hata olarak kabul edilmesi gerektiğini sanmıyorum:

<?php
echo "<h1>{$t->_('test')}</h1>";
?>

gettext ya "test" mesajı özü olamaz hangi.

Bu durumda da heredoc tanımlayıcı için herhangi bir boşluk ya da girinti, EOD koymayın emin olun, doğru gibi görünüyor.