2013-04-12 8 views
7

मुझे it नहीं मिल रहा है! .. कृपया किसी को समझाएं, फॉर्म लेबल का अनुवाद कैसे करें? एक साधारण उदाहरण बहुत अच्छा होगा।ज़ेंड फ्रेमवर्क 2 में फॉर्म लेबल्स का अनुवाद कैसे करें?

अग्रिम धन्यवाद!


वर्ग खोजें \ फार्म \ 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', 
      ), 
     )); 
     ... 
    } 
} 

दृश्य स्क्रिप्ट /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 कॉन्फ़िगर किया गया है:

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' => ... 
); 

मैं भी मेरे विचार संपादित और FormLabel दृश्य सहायक का उपयोग करें:

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

इसके अलावा मैं जगह है, जहां tranlator प्रयोग किया जाता है (लाइनों 116-120) पर FormLabel डिबग - - ठीक लगता है।

लेकिन यह अभी भी काम नहीं कर रहा है।


संपादित

(परीक्षण) लेबल के लिए आइटम, मैं मैन्युअल de_DE.po फ़ाइल को जोड़ा गया, tranlated कर रहे हैं। वास्तव में जेडएफ 2 पक्ष की समस्या वास्तव में थी, कि मैं का उपयोग $this->formlabel($form->get('city')) के बजाय वें व्यू स्क्रिप्ट में कर रहा था।

समस्या अब है, कि लेबल de_DE.po फ़ाइल में नहीं जोड़े गए हैं। लेकिन यह अब एक ज़ेडएफ 2 मुद्दा नहीं है, इसलिए मैंने रुबेन के जवाब को स्वीकार कर लिया है और एक नया Poedit सवाल खोल दिया है।

+1

के लिए आपके वर्तमान के कुछ कोड जोड़ें। यह आपकी मदद करने और समस्या को देखने में आसान बनाता है। – Ruben

+0

तेज प्रतिक्रिया के लिए धन्यवाद! मैंने अब प्रासंगिक कोड जोड़ा है। – automatix

उत्तर

8
उपयोग करने के बजाय

:

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

आप formlabel दृश्य सहायक का उपयोग करना चाहिए। यदि आप इसे अपने सर्विस मैनेजर में डाल चुके हैं तो यह सहायक स्वचालित रूप से प्रतिपादन के दौरान आपके अनुवादक का उपयोग करता है। सबसे अधिक संभावना है कि आप अपने आवेदन के मॉड्यूल module.config.php में यह करना होगा:

'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', 
      ), 
     ), 
    ), 

एक बार जब आप formlabel दृश्य सहायक का उपयोग करते हैं:

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

और निश्चित रूप से सुनिश्चित करें कि आपके अनुवाद अपने में हैं। पीओ फाइल

+0

'module.config.php' कॉन्फ़िगर किया गया है और अब मैंने अपना दृश्य भी संपादित किया है और 'फॉर्मलैबेल' व्यू हेल्पर का उपयोग किया है। मैंने जगह पर 'फॉर्म लेबल' डीबग किया है, जहां ट्रैनलेटर का उपयोग किया जाता है (लाइनें [116-120] (https://github.com/zendframework/zf2/blob/master/library/Zend/Form/View/Helper /FormLabel.php#L116)) - ठीक लगता है। लेकिन यह अभी भी काम नहीं कर रहा है। – automatix

+0

और आप सुनिश्चित हैं कि अनुवाद आपकी .po फ़ाइल में हैं? क्या आपने जांच की है कि PoEdit लेबल के मानों को पार करता है और क्या आपने उन्हें उस विशिष्ट लोकेल में अनुवादित किया है जिसका आप उपयोग कर रहे हैं? – Ruben

+0

ठीक है, यह समस्या थी। ऊपर दिए गए उत्तरदायी उत्तर और मेरे अन्य उत्तर [यहां] देखें (http://stackoverflow.com/questions/15969607/what-is-the-recomended-way-best-practice-to-poedit-translate-strings-without-a) । – automatix

1

@ रूबेन सही कहता है!

मेरे मैं PoEdit का उपयोग अपने * .mo फ़ाइलें उत्पन्न करने के लिए और फ़ाइल में सभी अनुवाद पाने के लिए सुनिश्चित करने के लिए, मैंने कहीं बनाने _lan नाम की एक फ़ाइल (उदाहरण के लिए ध्यान में रखते हुए)।सभी पाठ के साथ phtml अनुवाद किया जाना है:

<?php echo $this->translate("My label"); 
... ?> 
बेशक

, Poedit मेरी खोजशब्दों को खोजने के लिए कॉन्फ़िगर करना होगा। जाँच इस to how to configure it

+0

अच्छा सरल कामकाज। धन्यवाद! मामले के लिए अच्छा विचार, अगर मैं इसे काम नहीं कर पाऊंगा। – automatix

+1

मैं कुछ इसी तरह Poedit का उपयोग कर करते हैं, लेकिन एक अतिरिक्त फ़ाइल के लिए कोई ज़रूरत नहीं है: https://coderwall.com/p/atvtbw – aimfeld

4

मुझे लगता है कि तुम्हारी समस्या लेबल है कि आप poedit (या इसी तरह उपकरण) द्वारा पता नहीं चलने पर है, तो आप (पुलिस) अपने poedit कैटलॉग को उन्हें मैन्युअल रूप से जोड़ने के लिए

अपने लेबल तार करना है poedit जैसे उपकरणों द्वारा पता लगाया, अपने तार (का अनुवाद() समारोह या एक अंदर इस्तेमाल किया जा करने की जरूरत है _() (अन्य समारोह सूची/गुण/सूत्रों कीवर्ड में जोड़ा जा सकता है)

रूप

_) फ़ंक्शन ZF2 (आज) में उपयोगकर्ता नहीं है, इसलिए एक छोटा हैक जोड़ना है अपने index.php (इस तरह से कुछ भी संशोधित करने की कोई जरूरत, poedit पैरामीटर में,) में इस तरह गर्मजोशी:

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

और अपने कोड में, बस इसका इस्तेमाल जब अपने तार एक का अनुवाद समारोह के बाहर हैं

//... 
    $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', 
     ), 
    )); 
//... 

या इस तरह यदि आप

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

HI @aromatix मैं भाषा अनुवाद का उपयोग कर रहा Zend 2 सीखने परियोजना में जब मैं उपयोग कर रहा हूँ $ this-> जोड़ें (सरणी ( 'नाम' => "उपयोगकर्ता नाम", 'प्रकार' => 'ज़ेंड \ फ़ॉर्म \ तत्व \ टेक्स्ट', 'विकल्प' => सरणी ( 'लेबल' => _ ('आपका उपयोगकर्ता नाम'), // मुझे इस स्थिति पर घातक त्रुटि मिली), ); घातक त्रुटि: अपरिभाषित फ़ंक्शन इनक्यूसर \ फॉर्म \ _() _() एक फॉर्म लेबल का अनुवाद करने के लिए मुझे घातक त्रुटि दें मैं अभी PHP 5.3.1 का उपयोग कर रहा हूं। कृपया मेरी मदद करें, मैं इस मुद्दे को समझने में असमर्थ हूं। –

संबंधित मुद्दे