使用PHP进行语言翻译

时间:2012-11-01 07:20:27

标签: php language-translation

您好我在php中开发示例网站我需要将整个网站翻译成波斯语。怎么可能在PHP?我尝试使用以下代码..此代码适用于deutsch转换。

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>

是否可以使用此代码转换为其他语言?我将register1.php?lang = de更改为register1.php?lang = fa(波斯语)..但没有什么可以帮助的。有人请求帮助

6 个答案:

答案 0 :(得分:8)

如果我是你,我会这样做:

<强> /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;

基准:常数与变量

在这里,您了解我使用Constants而不是Variables提供的原因:

<强> 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

答案 1 :(得分:6)

根据我的意见,您可以尝试这种方法。这种方法已经在我们的系统中实现,并且运行正常。

制作每种语言的php文件并定义所有变量并在页面中使用这些变量。

例如

对于英语

<强> english.php

$hello="Hello";

<强> persian.php

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

现在使用此变量来这样翻页。

<强> your_page.php

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

您根据URL中的get语言变量加载特定语言文件。

最好将此语言变量定义到配置文件中。

<强>的config.php

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

答案 2 :(得分:4)

我可以从代码中读取,翻译类从en.txt文件加载翻译数据,如果你想要'fa'翻译,只需创建fa.txt作为en.txt的副本,包含所有翻译和编辑,将fa.txt翻译成波斯语......

希望有所帮助

答案 3 :(得分:3)

从Perl trans脚本中我提取了以下100%免费php google翻译此功能:

请参阅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");

答案 4 :(得分: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;

}
//  ...  //

答案 5 :(得分:0)

original from @rbenmass :

尝试一下:

function translate($q, $sl, $tl){
    $res= file_get_contents("https://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");
    $res=json_decode($res);
    return $res[0][0][0];
}

//example-- 
echo translate("اسمي منتصر الصاوي", "ar", "en");