2012-11-01 205 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; 

} 
// ... //