2013-04-12 48 views
7

it alamıyorum! .. Birisi form etiketlerini nasıl çevireceğimi açıklayabilir mi? Basit bir örnek harika olurdu.Zend Framework 2'de form etiketleri nasıl çevrilir?

Teşekkürler!


sınıf Arama \ Formu \ CourseSearchForm

... 

class CourseSearchForm extends Form { 

    ... 

    public function __construct(array $cities) { 
     parent::__construct('courseSearch'); 
     ... 
     $this->add(array(
      'name' => 'city', 
      'type' => 'Zend\Form\Element\Select', 
      'options' => array(
       'label' => 'Stadt', 
       'value_options' => $this->cities, 
       'id' => 'searchFormCity', 
      ), 
     )); 
     ... 
    } 
} 

kod görüntüleme /module/Search/view/search/search/search-form.phtml

<?php echo $this->form()->openTag($form); ?> 
<dl> 
    ... 
    <dt><label><?php echo $form->get('city')->getLabel(); ?></label></dt> 
    <dd><?php echo $this->formRow($form->get('city'), null, false, false); ?></dd> 
    ... 
</dl> 
<?php echo $this->form()->closeTag(); ?> 
<!-- The formRow(...) is my MyNamespace\Form\View\Helper (extends Zend\Form\View\Helper\FormRow); the fourth argument of it disables the label. --> 

module/Application/config/module.config.php yapılandırılır:

return array(
    'router' => ... 
    'service_manager' => array(
     'factories' => array(
      'translator' => 'Zend\I18n\Translator\TranslatorServiceFactory', 
     ), 
    ), 
    'translator' => array(
     'locale' => 'de_DE', 
     'translation_file_patterns' => array(
      array(
       'type'  => 'gettext', 
       'base_dir' => __DIR__ . '/../language', 
       'pattern' => '%s.mo', 
      ), 
     ), 
    ), 
    'controllers' => ... 
    'view_manager' => ... 
); 

Ayrıca Bence düzenlenmiş ve FormLabel görünüşüdür yardımcı kullanımı:

<dt><label><?php echo $this->formLabel($form->get('city')); ?></label></dt> 

Ayrıca ben tranlator kullanıldığı yerde, (satır 116-120) en FormLabel ayıklanmış - - iyi görünüyor.

Ancak hala çalışmıyor.


DÜZENLEME

etiketler için (test) öğeleri, el de_DE.po dosyasına eklenir, tranlated edilir. ZF2 tarafı sorunu aslında, görüntü düzeninde $this->formlabel($form->get('city')) yerine $form->get('city')->getLabel() kullanıyordum.

Sorun şu ki, bu etiketler de_DE.po dosyasına eklenmiyor. Ama artık bir ZF2 sorunu değil, bu yüzden Ruben'in cevabını kabul ediyorum ve yeni bir Poedit sorusu açıyorum. Bunun yerine kullanmanın

+1

şu anda hangi bazı kodunu ekleyiniz. Size yardım etmeyi ve sorunun ne olduğunu görmeyi kolaylaştıracaktır. – Ruben

+0

Hızlı yanıt için teşekkürler! Şimdi ilgili kodu ekledim. – automatix

cevap

8

:

<?php echo $form->get('city')->getLabel(); ?> 

Sen formlabel görünümü yardımcı kullanmalıdır. Bu yardımcı, çevirmeninizi ServiceManager'ınıza taktıysanız, işleme sırasında otomatik olarak kullanır. Büyük olasılıkla size Uygulamanın modül module.config.php içinde var olacaktır:

'service_manager' => array(
     'factories' => array(
      'translator' => 'Zend\I18n\Translator\TranslatorServiceFactory', 
     ), 
    ), 

    'translator' => array(
     'locale' => 'en_US', 
     'translation_file_patterns' => array(
      array(
       'type'  => 'gettext', 
       'base_dir' => __DIR__ . '/../language', 
       'pattern' => '%s.mo', 
      ), 
     ), 
    ), 

Eğer formlabel görünümü yardımcısı kullanmak yaptıktan sonra:

echo $this->formLabel($form->get('city')); 

Ve tabii

sizin çevirileri Gözlerinde farklı olduğundan emin olun. po dosyası.

+0

'module.config.php' yapılandırıldı ve şimdi de görünümümü düzenledim ve' FormLabel' görünüm yardımcı programını kullanıyorum. “FormLabel” ı, çeviricinin kullanıldığı yerde (FormLabel) hata ayıkladım (satırlar [116-120] (https://github.com/zendframework/zf2/blob/master/library/Zend/Form/View/Helper) /FormLabel.php#L116)) - Tamam görünüyor. Ama hala çalışmıyor. – automatix

+0

Ve çevirilerin .po dosyanızda olduğundan emin misiniz? PoEdit'in etiketlerin değerlerini ayrıştırıp ayrılmadığını kontrol ettiniz mi ve bunları kullanmakta olduğunuz belirli bir yere mi çevirdiniz? – Ruben

+0

Exctly, sorun oldu. Yukarıdaki güncellenmiş cevabı ve diğer cevabımı gör (burada) (http://stackoverflow.com/questions/15969607/what-is-the-recomended-way-best-practice-to-poedit-translate-strings-without-a) . – automatix

1

@Ruben doğru diyor! Benim * .mo dosyaları oluşturmak ve dosyadaki tüm çeviri yaptırmak için emin olmak için PoEdit kullanmak

Bense _lan adlı bir dosya (örneğin görünümünde) yere oluşturun.tüm metin ile phtml Çevrilecek:

Tabii
<?php echo $this->translate("My label"); 
... ?> 

, poEdit benim anahtar kelimeleri bulmak için yapılandırılmış olması gerekir. kontrol bu to how to configure it

+0

Güzel basit bir çözüm. Teşekkür ederim! İşe yaramazsam durum için iyi bir fikir. – automatix

+1

Ben poEdit kullanarak benzer bir şey yapmak, ancak ekstra bir dosya için gerek yoktur: https://coderwall.com/p/atvtbw – aimfeld

4

i senin sorunun poEdit (veya benzer bir aletle) tarafından tespit edilmeyen etiketleneceğini olduğunu düşünüyorum, bu yüzden

etiket dizeleri yapmak için (po) sizin poEdit katalogları el ile eklemek zorunda poEdit gibi araçları tarafından tespit edilen, Dizeleriniz) (_ _() (diğer fonksiyon Katalog/özellikler/kaynaklar anahtar kelime eklenebilir) olarak

) ( fonksiyonunu veya çevirmek bir içine kullanılması gereken işlevi ZF2'de kullanıcı değil (bugün), böylece küçük bir hack eklemek senin index.php (poEdit params şey değiştirmek gerek, bu sayede) böyle unction: Dizeleriniz bir tercüme fonksiyonu dışında olduğunda

// in index.php 
function _($str) 
{ 
    return $str; 
} 

ve kodunuzda, sadece onu kullanmak

veya böyle

//... 
    $this->add(array(
     'name' => 'city', 
     'type' => 'Zend\Form\Element\Select', 
     'options' => array(
      'label' => _('myLabel') , // <------ will be detected by poedit 
      'value_options' => $this->cities, 
      'id' => 'searchFormCity', 
     ), 
    )); 
//... 
All çözümler ZF2 gücünü kullanmayan

$myLabel = _('any label string'); // <--- added to poedit catalog 
//... 
     'options' => array(
      'label' => $myLabel , 
      'value_options' => $this->cities, 
      'id' => 'searchFormCity', 
     ), 
+0

@aromatix HI i kullanıyorum zaman ben zend 2 öğrenme projesinde dil çevirileri kullanıyorum $ this-> add (array ( 'name' => “kullanıcı adı”, 'type' => 'Zend \ Form \ Element \ Text', 'options' => array ( 'label' => _ ('Kullanıcı Adınız'), // bu konumda , )) ölümcül hata buldum)); ölümcül hata: undefined işlev çağrısı Incuser \ Form \ _() _() bir form etiketi çevirmek için bana önemli bir hata veriyor Şu anda php 5.3.1 kullanıyorum. Lütfen yardım edin, ben bu sorunu çözemiyorum. –