0

コードの構造が悪いだけなのか、これが通常は見つからない問題なのかはわかりませんが、問題の解決策を探し始める方法すらわかりません。私はこのように呼ばれる私自身の簡単な翻訳スクリプトを持っています:

<?php echo $Translate->text("Name"); ?>

キーワード'Name'の文字列を返します(そしてエコーします)。問題は、いくつかの理由(名前:誤訳、レポート、開発、その場での翻訳)のために、ページ上にあるすべての文字列のキーワードを取得したい場合があることです。単純なページ(example.com/campus/index.php)は次のようになります。

<h1> <?php echo $Translate->text(Campus); ?> </h1>

<p style="text-align:justify;">
  <?php echo $Translate->text(126); ?>
</p>

<p style="text-align:justify;">
  <?php echo $Translate->text(129); ?>
</p>

<a href="<?php $Link->create("campus/about"); ?>">
  <h2 class="bodymenu"><?php echo $Translate->text(About); ?> </h2>
</a>
<p style="text-align:justify;">
  <?php echo $Translate->text(146); ?>
</p>

<a href="<?php $Link->create("campus/learning_center"); ?>">
  <h2 class="bodymenu"><?php echo $Translate->text(Learning_center); ?> </h2>
</a>
<p style="text-align:justify;">
  <?php echo $Translate->text(147); ?>
</p>

<a href="<?php $Link->create("campus/residence"); ?>">
  <h2 class="bodymenu"><?php echo $Translate->text(Residence); ?> </h2>
</a>
<p style="text-align:justify;">
  <?php echo $Translate->text(128); ?>
</p>

そして、私はいくつかの状況で取得したいと思います:別のページからの$Translations=array("Campus","126","129","About","146","Learning_center","147","Residence","128");さらなる処理(編集)のために。

場合によっては、ページにさらに多くのphpロジックが混在している場合もあれば、このような場合もあります。すべてのページの前後に自動的に含まれるロジックコードとクラスがはるかに多くあります。したがって、基本的に、すべてのキーワードを取得する方法を知りたいと思います(この例では、拡張できます)。

基本的に2つの方法を考えていますが、どちらも最適ではないと思います。まず、正規表現を使用する場合と同じようにphpコードを解析します。私は自分が探しているビットを知っているので、それは可能だと思います。2つ目は、SESSION変数に応じて、htmlをレンダリングして解析するため、のecho $Translate->text(Campus);ようなものが返さ<span id="Translation">Campus</span>れ、htmlのみが解析され、すべてのIDが取得されます。これに乗る前に、IDを取得する他の方法について考えていただけますか?

PS、ページの最初または最後に配列内のすべてのIDをハードコーディングしたくありません。

4

4 に答える 4

0

英語のフォルダに2つのファイルを作成します。(後で指定できますが、通常は言語ディレクトリ内の言語ファイルの場所です)

campus.about.php

<?php
$lang["Name"]               = "Name";
$lang["Address"]            = "Address";    
?>

* campus.learning_center.php *

<?php
$lang["Learning"]               = "Learning";
$lang["Residence"]          = "Residence";  
?>

クラス翻訳ファイル(ルートディレクトリ)


class Translate {

    public $_text= array(); // Change it into private properties coz you create 
// text method for get the value, I set it public just for easy to debug it.
    private $_language;

    function __construct($language){ // Set Language
        $this->_language= $language;
    }

    public function create($page){ // Get Language File
        // $page= campus/about change into this campus.about
        // Get language file Ex: english/campus.about.php
        require($this->_language.'/'.$page.'.php');
        $this->_text= array_merge($this->_text, $lang);
    }

    public function text($text){ // Display Keywords
        echo $this->_text[$text];
    }
}
$Translate= new Translate('english');
$Translate->create('campus.about');
print_r($Translate->_text);
$Translate->create('campus.learning_center');
print_r($Translate->_text);

于 2012-09-29T17:07:27.713 に答える
0

私がそれを正しく理解していれば、

Translate クラスを少し変更します。次のように、使用しているすべての文字列を収集する変数を追加します。

public $aStrings = array();

次に、次のような関数 text($arg) を追加します。

$this->aStrings[] = $arg;

次に、 Translate->aStrings 変数でページ上のすべての文字列を取得し、それを印刷するには、次のようなものを使用します。

print_r($Translate->aStrings);
于 2012-09-29T11:29:14.363 に答える
0

配列内の値を収集するクラスでクラスをサブクラスTranslate化し、それをページで使用します。

class MyTranslate extends Translate {
  public $texts = array();
  public function text($which) {
    $this->texts[] = $which;
    return parent::text($which);
  }
}

$Translate=new MyTranslate($User->Language);

ob_start();
require('/path/to/other/page');
ob_end_clean();

var_dump($Translate->texts);
于 2012-09-29T11:30:40.937 に答える