プロジェクトでPHPTALを使用していますが、i18nサービスを使用する場合を除いて、ほぼすべてのケースでPHPTALを正常に実装できます。「非オブジェクトのメンバー関数の呼び出し」というエラーが常に発生します
ネット フォーラムなどを検索してみましたが、解決策が見つかりませんでした。誰かが私を助けてくれれば本当に感謝しています。
プロジェクトでPHPTALを使用していますが、i18nサービスを使用する場合を除いて、ほぼすべてのケースでPHPTALを正常に実装できます。「非オブジェクトのメンバー関数の呼び出し」というエラーが常に発生します
ネット フォーラムなどを検索してみましたが、解決策が見つかりませんでした。誰かが私を助けてくれれば本当に感謝しています。
誰も私の質問に答えなかったことに心からがっかりしたので、ここでようやく解決策を見つけ、自分の質問に答えます。
デフォルトでは、テキストをある言語から別の言語に翻訳するために PHPTAL によって設定される翻訳者はありません。だからあなたは自分でそれをしなければなりません。これを行うには、以下に示すいくつかの手順があります。. .
ステップ 1.新しい php ファイル ( MyTranslator.php など) を作成し、 PHPTAL_MyTranslatorなどの新しいクラスを生成して、PHPTAL フォルダー内に保存します。このクラスはインターフェースPHPTAL_TranslationServiceを実装します。このインターフェイスには 5 つの関数がありますが、関心のある関数はtranslateのみです。したがって、残りの関数の宣言を追加し、翻訳関数のコードを記述します。私の場合に作成して使用したクラスは次のとおりです。
class PHPTAL_MyTranslator implements PHPTAL_TranslationService {
/**
* current execution context
*/
protected $_context = null;
/**
* @param string (name of the language)
* @return string (language you've just set)
*
* This method sets translation language.
* Name of the language is a dir name where you keep your translation files
*/
public function setLanguage() {
}
public function __construct( $context ) {
$this->_context = $context;
}
/**
* @param string (translation file name)
* @return void
*
* You can separate translations in several files, and use only when needed.
* Use this method to specify witch translation file you want to
* use for current controller.
*/
public function useDomain( $domain ) {
}
/**
* Set an interpolation var.
* Replace all ${key}s with values in translated strings.
*/
public function setVar( $key, $value ) {
}
/**
* Translate a text and interpolate variables.
*/
public function translate( $key, $htmlescape=true ) {
$value = $key;
if( empty( $value ) ) {
return $key;
}
while( preg_match( '/\${(.*?)\}/sm', $value, $m ) ) {
list( $src, $var ) = $m;
if( !array_key_exists( $var, $this->_context ) ) {
$err = sprintf( 'Interpolation error, var "%s" not set', $var );
throw new Exception( $err );
}
$value = str_replace( $src, $this->_context->$var, $value );
}
return gettext( $value );
}
/**
* Not implemented yet, default encoding is used
*/
public function setEncoding( $encoding ) {
}
}
ステップ 2. PHPTAL.phpファイルを開き、PHPTALクラスのコンストラクターを変更します。以下に示すように、この関数に行を追加します。. . . .
前
public function __construct($path=false)
{
$this->_path = $path;
$this->_globalContext = new StdClass();
$this->_context = new PHPTAL_Context();
$this->_context->setGlobal($this->_globalContext);
if (function_exists('sys_get_temp_dir')) {
............
public function __construct($path=false)
{
$this->_path = $path;
$this->_globalContext = new StdClass();
$this->_context = new PHPTAL_Context();
$this->_context->setGlobal($this->_globalContext);
//Set translator here
$this->setTranslator( new PHPTAL_MyTranslator( $this->_context ) );
if (function_exists('sys_get_temp_dir')) {
.............
これらの 2 つの簡単な手順により、i18n:attributesとi18n:translate属性が適切に機能するようになります。
乾杯...