2015-04-07 9 views
5

मैं अपने वाईआई 2 एप्लिकेशन में कीवर्ड के आधार पर एक अनुवाद का उपयोग कर रहा हूं (मुझे पता है कि यह सबसे अच्छा विकल्प नहीं है, लेकिन मेरे पास अन्य नहीं है)। मैं कीवर्ड का उपयोग कर अनुवाद तार के साथ @app/messages/pl/app.php और @app/messages/en/app.php फ़ाइलें तैयार किया है, बजाय पूर्ण विशेषताओं वाक्य या शब्द की:स्रोत में अनुवाद भाषाई Yii2 एप्लिकेशन में काम नहीं करता

<?php 
    return [ 
     'name_english'=>'Name in English', 
     'keywords_english'=>'Keywords in English' 
    ]; 
?> 

मैं डिफ़ॉल्ट के रूप में पोलिश भाषा का उपयोग करने के अपने आवेदन निर्धारित किया है:

'language' => 'pl', 
'sourceLanguage' => 'en', 
,

Yii::t('app', 'keywords_english'); 

सब कुछ ठीक काम करता है जब भाषा है:

और मैं अनुवाद लागू कर रहा हूँ ,

enter image description here

लेकिन जब मैं अंग्रेजी (enके लिए इसे बदल;: वास्तव में आधार के लिए निर्धारित करते हैं, पोलिश (pl) या तो रनटाइम के दौरान या बदलने के आवेदन विन्यास) द्वारा Yii::$app->language की स्थापना करके, अनुवाद नहीं किया जाता है और मैं keywords_english हो रही है:

enter image description here

मैं @app/messages/pl/app.php और @app/messages/en/app.php फ़ाइलों की शुरुआत में die() डाल दिया है और मैं स्पष्ट रूप से देख सकते हैं , जब भाषा अंग्रेजी पर सेट की जाती है, दूसरी फ़ाइल Yii2 (एप्लिकेशन रन निम्नानुसार) द्वारा शामिल नहीं की जा रही है, जबकि, जब भाषा पोलिश है, तो पहली फ़ाइल शामिल है और die() पर एप्लिकेशन प्रवाह ब्रेक शामिल है।

मुझे क्या याद आ रही है? क्यों Yii2 @app/messages/en/app.php फ़ाइल से अनुवाद का उपयोग नहीं कर रहा है, यदि भाषा अंग्रेज़ी (en) पर सेट है?

संपादित करें: डिफ़ॉल्ट रूप से, मैं अपने अनुप्रयोग की कॉन्फ़िगरेशन में डिफ़ॉल्ट i18n घटक कॉन्फ़िगरेशन को परिवर्तित नहीं कर रहा था क्योंकि मुझे इसकी आवश्यकता नहीं थी। अनुवाद फ़ाइलों को डिफ़ॉल्ट स्थिति में संग्रहीत किया जाता है (@app/messages/<language>/) और डिफ़ॉल्ट वर्ग (yii\i18n\PhpMessageSource) का उपयोग कर रहे हैं। और यह sourceLanguage को छोड़कर सभी भाषाओं के लिए काम कर रहा है।

'i18n' => [ 
    'translations' => [ 
     '*' => [ 
      'class' => 'yii\i18n\PhpMessageSource', 
      'sourceLanguage' => 'en', 
      'basePath' => '@app/messages' 
     ], 
    ], 
], 

लेकिन, यह कोई परिवर्तन नहीं लाया (- यह अभी भी डिफ़ॉल्ट सेटिंग्स का उपयोग करता है क्यों यह होना चाहिए): कुछ बिंदु पर, मैं विन्यास को बदलने की कोशिश की।

+0

कॉन्फ़िगर –

+0

से 'i18n' दिखाएं अद्यतन प्रश्न देखें। मैं किसी भी तरह से 'i18n' को कॉन्फ़िगर नहीं कर रहा हूं। मैं क्यों? मैं डिफ़ॉल्ट सेटिंग्स का उपयोग करना चाहता हूं और यह 'एन' के लिए काम करना चाहिए, अगर यह 'pl' के लिए काम करता है, है ना? – trejder

+1

कि प्रयास करें: ' 'अनुवाद' => [ 'ऐप्लिकेशन *' => [ 'क्लास' => 'Yii \ i18n \ PhpMessageSource', 'basePath' => '@ एप्लिकेशन/संदेश', 'sourceLanguage' => 'en_US', 'fileMap' => [ 'ऐप' => 'app.php', ], ], –

उत्तर

6

samdark at Yii Forum के अनुसार, यह डिज़ाइन द्वारा है। अनुवाद नहीं किए जाते हैं, अगर language = sourceLangage

इसे हल करने के लिए, और इस मामले में अनुवादों को मजबूर करने के लिए, किसी को forceTranslationtrue पर सेट करना होगा।

इसलिए, एक जोड़/जिस तरह से इस के समान में आवेदन के config की i18ncomponents में घटक अनुभाग संशोधित करना होगा:

'i18n' => [ 
    'translations' => [ 
     'app' => [ 
      'class' => 'yii\i18n\PhpMessageSource', 
      'forceTranslation' => true 
     ], 
    ], 
], 
1

समाधान:

'translations' => [ 
      'app*' => [ 
       'class' => 'yii\i18n\PhpMessageSource', 
       'basePath' => '@app/messages', 
       'sourceLanguage' => 'en_US', 
       'fileMap' => [ 
        'app' => 'app.php', 
       ], 
      ], 

अपनी टिप्पणी के लिए उत्तर:

1) 'sourceLanguage' => 'en_US' - आपको पूर्ण लोकेल का उपयोग करना होगा। चूंकि अंग्रेजी लोकेल en_US, en_UK और e.t.c. हो सकता है। The format for the language/locale is ll-CC where ll is a two- or three-letter lowercase code for a language according to ISO-639 and CC is the country code according to ISO-3166.[doc][1]

2) मुख्य उपयोग श्रेणी में। और श्रेणी Yii::t('category'...)

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