2012-11-01 270 views
1

嗨,我是devloping示例站點在PHP我需要翻譯整個網站在波斯。怎麼可能在PHP?我曾嘗試使用下面的代碼..此代碼將工作罰款德國轉換。使用PHP語言翻譯

1. class.translation.php 

<?php 
class Translator { 

    private $language = 'en'; 
    private $lang  = array(); 

    public function __construct($language){ 
     $this->language = $language; 
    } 

    private function findString($str) { 
     if (array_key_exists($str, $this->lang[$this->language])) { 
      echo $this->lang[$this->language][$str]; 
      return; 
     } 
     echo $str; 
    } 

    private function splitStrings($str) { 
     return explode('=',trim($str)); 
    } 

    public function __($str) { 
     if (!array_key_exists($this->language, $this->lang)) { 
      if (file_exists($this->language.'.txt')) { 
       $strings = array_map(array($this,'splitStrings'),file($this->language.'.txt')); 
       foreach ($strings as $k => $v) { 
        $this->lang[$this->language][$v[0]] = $v[1]; 
       } 
       return $this->findString($str); 
      } 
      else { 
       echo $str; 
      } 
     } 
     else { 
      return $this->findString($str); 
     } 
    } 
} 
?> 

2.Register.php

<?php 
require_once('class.translation.php'); 

if(isset($_GET['lang'])) 
    $translate = new Translator($_GET['lang']); 
else 
    $translate = new Translator('en'); 
?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
    <head> 
     <title><?php $translate->__('CSS Registration Form'); ?></title> 
     <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-15"/> 
     <link rel="stylesheet" type="text/css" href="css/default.css"/> 
    </head> 
    <body>  
     <form action="" class="register"> 
      <h1><?php $translate->__('Registration'); ?><a class="flag_deutsch" title="deutsch" href="register1.php?lang=de"></a><a class="flag_english" title="english" href="register1.php"></a></h1> 
      <fieldset class="row1"> 
       <legend><?php $translate->__('Account Details'); ?></legend> 
       <p> 
        <label><?php $translate->__('Email'); ?> *</label> 
        <input type="text"/> 
        <label><?php $translate->__('Repeat email'); ?> *</label> 
        <input type="text"/> 
       </p> 
      </fieldset> 

      <div><button class="button"><?php $translate->__('Register'); ?> &raquo;</button></div> 
     </form> 
    </body> 
</html> 

是否有可能transilate使用此代碼等。語言?我改變了register1.php?lang = de到register1.php?lang = fa(波斯語)..但是沒有什麼起作用。任何人都可以幫助

+0

請注意您正在使用的翻譯類。 –

+0

翻譯類 – Natasha

+0

您需要一個名爲'fa.txt'的文件,其中包含翻譯字符串。 –

回答

5

按照我的說法,您可以嘗試使用此方法。此方法已在我們的系統中實施,並且工作正常。

製作每種語言的php文件並定義所有變量並在頁面中使用這些變量。

爲e.g 英語

english.php

$hello="Hello"; 

persian.php

$hello=html_entity_decode(htmlentities("سلام")); 

現在使用這個變量來頁這樣。

your_page.php

<label><?php echo $hello; ?></label> 

具有負載特定的語言文件,按照從網址,以獲取語言變量。

最好將此語言變量定義到配置文件中。

的config.php

if(isset($_GET['lang']) && $_GET['lang']=='persian') 
{ 
    require_once('persian.php'); 
} 
else 
{ 
    require_once('english.php'); 
} 
+0

我想你是通過定義變量來浪費服務器資源。事實上,他們根本不是變數...... – Mahdi

+0

@哈里你是什麼意思?你的意思是我不應該提出我的想法,因爲它是我的,我應該尋找任何其他應該與我的想法不同的替代方案?! ...查看我的回答更新,看看爲什麼定義'Constants'而不是'Variables'更好。 – Mahdi

+0

@Mahdi我以前評論過看到你的答案 – Hkachhia

4

正如我可以從代碼讀取的,翻譯器類從en.txt文件,如果你想有「發」的翻譯,只需創建fa.txt與所有翻譯和編輯en.txt複印件和翻譯fa.txt波斯......

希望它可以幫助

6

如果我是你,我會做這樣的:

/inc/lang/en.lang.php

define('_HELLO', 'Hello'); 

/inc/lang/fa.lang.php

define('_HELLO', 'سلام'); 

的index.php

// $_SESSION['lang'] could be 'en', 'fa', etc. 
require_once '/inc/lang/' . $_SESSION['lang'] . 'lang.php'; 

echo _HELLO; 

基準:常數與變量

這裏你可以看到,爲什麼我提出用ConstantsVariables

const.php

echo memory_get_usage() . '<br>'; // output: 674,576 

for ($i = 0; $i <= 10000; $i++) { 
    define($i, 'abc'); 
} 

echo memory_get_usage() . '<br>'; // output: 994,784 

var.php

echo memory_get_usage() . '<br>'; // output: 674,184 

for ($i = 0; $i <= 10000; $i++) { 
    $$i = 'abc'; 
} 

echo memory_get_usage() . '<br>'; // output: 2,485,176 
+0

如果你使用define,那麼它不使用服務器資源? – Hkachhia

+1

@哈利請再次閱讀我對你的答案的評論。我說'我想你是通過定義變量來浪費服務器資源的。「......查看我對答案的更新...希望它對你有幫助。 – Mahdi

+2

謝謝我今天學到新東西 – Hkachhia

3

從Perl的反式腳本我extr擔任以下的100%免費的PHP谷歌翻譯這樣的功能:

查看http://ogena.net

function translate($q, $sl, $tl){ 

if($s==$e || $s=='' || $e==''){ 
    return $q; 

} 
else{ 
    $res=""; 

    $qqq=explode(".", $q); 

    if(count($qqq)<2){ 

     @unlink($_SERVER['DOCUMENT_ROOT']."/transes.html"); 
     copy("http://translate.googleapis.com/translate_a/single?client=gtx&ie=UTF-8&oe=UTF-8&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss&dt=t&dt=at&sl=".$sl."&tl=".$tl."&hl=hl&q=".urlencode($q), $_SERVER['DOCUMENT_ROOT']."/transes.html"); 
     if(file_exists($_SERVER['DOCUMENT_ROOT']."/transes.html")){ 
      $dara=file_get_contents($_SERVER['DOCUMENT_ROOT']."/transes.html"); 
      $f=explode("\"", $dara); 

      $res.= $f[1]; 
     } 
    } 
    else{ 


    for($i=0;$i<(count($qqq)-1);$i++){ 

     if($qqq[$i]==' ' || $qqq[$i]==''){ 
     } 
     else{ 
      copy("http://translate.googleapis.com/translate_a/single?client=gtx&ie=UTF-8&oe=UTF-8&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss&dt=t&dt=at&sl=".$s."&tl=".$e."&hl=hl&q=".urlencode($qqq[$i]), $_SERVER['DOCUMENT_ROOT']."/transes.html"); 

      $dara=file_get_contents($_SERVER['DOCUMENT_ROOT']."/transes.html"); 
      @unlink($_SERVER['DOCUMENT_ROOT']."/transes.html"); 
      $f=explode("\"", $dara); 

      $res.= $f[1].". "; 
      } 
     } 
    } 
    return $res; 
} 

} 




//sample usage 
echo translate("Goede dag dames en heren", "nl", "en"); 
1

@rbenmass 謝謝:-)

我認爲這必須是工作演示,因爲它適合我:

/* 
    original from @rbenmass : 

    function translate($q, $sl, $tl){ 

    if($s==$e || $s=='' || $e==''){ 
     return $q; 

    } 
    **/ 

function translate($q, $sl, $tl){ 

if($sl==$tl || $sl=='' || $tl==''){ 
    return $q; 

} 
// ... //