2012-09-29 36 views
0

我不確定自己的代碼是否有錯誤的結構,或者這是一個通常無法找到的問題,但我甚至不知道如何開始尋找解決方案來解決問題。我有我自己的簡單的翻譯腳本,它被這樣調用:如何從其他頁面檢索頁面上方法中使用的所有參數?

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

它會返回(並回顯)一個帶有關鍵字'Name'的字符串。問題在於,由於幾個原因(名稱:misstranslations,報告,開發,原位翻譯),我可能想要檢索頁面上所有字符串的關鍵字。一個簡單的頁面(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代碼。因爲我知道我正在尋找的那些東西,所以我可能會這樣做。第二個是,根據會話變量,我呈現HTML和解析它,所以echo $Translate->text(Campus);將返回類似<span id="Translation">Campus</span>然後只解析HTML和檢索所有的ID。在我開始之前,你能想出其他任何方式來檢索ID嗎?

PS,I 不要想要在一個頁面的開始或結束處對數組中的所有ID進行硬編碼。

+0

我必須讀作翻譯:使頁面在多國語言,如英語和德語? – JvdBerg

+0

是的,'$ Translate = new Translate($ User-> Language);'用於處理翻譯。然後,'$ Translate-> text('key')'將一個特定的關鍵字翻譯成一個已經設置好的正確語言的字符串。 –

+0

好的:爲什麼不使用gettext擴展? – JvdBerg

回答

0

不要通過實施翻譯系統推倒重來。 gettext extension是無痛的,在飛行中,語言切換。

Basicly你寫你的網站的默認語言:

<?php echo _("Name"); ?> 

不要寫<?php echo $Translate->text(147); ?>,noboby知道那是什麼。寫:

< ?php echo _("Learning Centre"); ?>

爲了管理翻譯有編輯器適用於Windows,Linux和Mac,POEdit例如選擇。

切換到不同的語言很簡單:

public function SetDomain($path) 
{ 
    define('DOMAIN', 'messages'); 
    bindtextdomain(DOMAIN, $path); 
    bind_textdomain_codeset(DOMAIN, "UTF-8"); 
    textdomain(DOMAIN); 
} 

注:如果設置項short_open_tags就可以這樣寫:

<?= _("Name"); ?> 
+0

應該是<?php echo「_('Name')」; ?>?這個語法對我來說看起來並不合適。 – vascowhite

+0

short_open_tags到http://php.net/manual/en/ini.core.php#ini。short-open-tag – JvdBerg

+0

沒有echo_(「Name」);''部分,我確信語法不正確,它會給你一個致命的錯誤,調用未定義的函數_()。它應該是'<?php echo「_('Name')」; ?>'或'<?=「_('Name')」; ?>'。 – vascowhite

0

如果我的理解是正確的,

修改您的翻譯類一點點:添加一個變量,它會收集你正在使用的所有字符串,如:

public $aStrings = array(); 

然後,加入你的函數文本($ ARG)是這樣的:

$this->aStrings[] = $arg; 

那麼你將不得不網頁上的所有字符串在Translate-> aStrings變量,然後將其打印出來使用事端,如:

print_r($Translate->aStrings); 
+0

對不起,我很困惑,添加了一個小編輯。我想從不同的頁面中檢索所有關鍵字。例如,從example.com/translate/?page=campus我想檢索頁面example.com/campus中的所有關鍵字。 –

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); 
+0

查看我的其他評論:我想從不同頁面檢索所有關鍵字。例如,從example.com/translate/?page=campus我想檢索頁面example.com/campus中的所有關鍵字。 –

+0

你可以在定義你自己的'$ Translate'後'需要'另一個頁面。使用輸出緩衝來擺脫它可能產生的任何輸出。我更新了我的答案以反映這一點。 –

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); 

相關問題