2012-04-06 8 views
5

1つのcsvファイルのみを使用して、フロントエンドMagentoストアを翻訳したいと考えています。だから私はこれをやった:Magentoはどのように翻訳を行いますか?

私は翻訳者と呼ばれるカスタムモジュールを作成しました。 config.xmlには次の行があります。

<config> 
.... 
<translate> 
<modules> 
<MyPackage_Translator> 
<files> 
<default>MyPackage_Translator.csv</default> 
</files> 
</MyPackage_Translator> 
</modules> 
</translate> 

</config> 

次に、HelperフォルダにデフォルトのData.phpヘルパーを作成しました。

次に、app/locale/de_DEで私はMyPackage_Translator.csvファイルを作成しました。ここで私はすべての文字列を入れました。今

、私はのような何かを行う場合PHTML(関係なく、モジュール)ファイルで、場合:

echo $this->__('My string'); 

をそれはかなりうまく動作します。しかし、私はMagentoが文字列のMyPackage_Translator.csvを調べているのはなぜですか?

私も$ this - > __( 'some string')を使用していると気付きました。顧客モジュールでMagentoは最初にapp/locale/de_DE/Mage_Customer.csvファイルで文字列を検索し、文字列が見つからない場合はMyPackage_Translator.csvファイルを検索します。何故ですか?なぜそれがEnterprise_Customer.csvファイルを見ないのですか?

翻訳ファイルを探しているときにMagentoが行うワークフローを誰かに教えてもらえますか?

答えて

10

$ this - > __( 'some text')を呼び出すと、

あなたはMage_Core_Helper_Abstract

/** 
* Translate 
* 
* @return string 
*/ 
public function __() 
{ 
    $args = func_get_args(); 
    $expr = new Mage_Core_Model_Translate_Expr(array_shift($args), $this->_getModuleName()); 
    array_unshift($args, $expr); 
    return Mage::app()->getTranslator()->translate($args); 
} 

次を見ることによって始めることができることはMage_Core_Model_Translate結果のテキストを返します

/** 
* Translate 
* 
* @param array $args 
* @return string 
*/ 
public function translate($args) 
{ 
    $text = array_shift($args); 

    if (is_string($text) && ''==$text 
     || is_null($text) 
     || is_bool($text) && false===$text 
     || is_object($text) && ''==$text->getText()) { 
     return ''; 
    } 
    if ($text instanceof Mage_Core_Model_Translate_Expr) { 
     $code = $text->getCode(self::SCOPE_SEPARATOR); 
     $module = $text->getModule(); 
     $text = $text->getText(); 
     $translated = $this->_getTranslatedString($text, $code); 
    } 
    else { 
     if (!empty($_REQUEST['theme'])) { 
      $module = 'frontend/default/'.$_REQUEST['theme']; 
     } else { 
      $module = 'frontend/default/default'; 
     } 
     $code = $module.self::SCOPE_SEPARATOR.$text; 
     $translated = $this->_getTranslatedString($text, $code); 
    } 

    //array_unshift($args, $translated); 
    //$result = @call_user_func_array('sprintf', $args); 

    $result = @vsprintf($translated, $args); 
    if ($result === false) { 
     $result = $translated; 
    } 

    if ($this->_translateInline && $this->getTranslateInline()) { 
     if (strpos($result, '{{{')===false || strpos($result, '}}}')===false || strpos($result, '}}{{')===false) { 
      $result = '{{{'.$result.'}}{{'.$translated.'}}{{'.$text.'}}{{'.$module.'}}}'; 
     } 
    } 

    return $result; 
} 

に渡されMage_Core_Model_App

/** 
* Retrieve translate object 
* 
* @return Mage_Core_Model_Translate 
*/ 
public function getTranslator() 
{ 
    if (!$this->_translator) { 
     $this->_translator = Mage::getSingleton('core/translate'); 
    } 
    return $this->_translator; 
} 

です。これは、すべてがどのように処理されるかを素早く把握するためのものです。より深い理解を深めるために、クラス自体を表示する必要があります。

+0

おそらくMage_Core.csv –

+0

で直接翻訳することができます。Magentoが提供するコアファイルを変更することはお勧めしません。それはアップグレードの証拠ではありません。彼は翻訳のコアクラスをオーバーロードして正しい方向に動いていました。 –

+0

あなたの特定の言語でMage_Core.csvを使用しています。元のものを上書きしない。 –

関連する問題