2

嗨,我正在用 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.注册.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(persian).. 但什么也没有发生..任何人请帮忙

4

6 回答 6

10

按照我的说法,您可以尝试此方法。此方法已在我们的系统中实现,并且可以正常工作。

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

例如对于英语

英文.php

$hello="Hello";

波斯语.php

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

现在使用这个变量来翻页。

your_page.php

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

您已根据从 URL 获取语言变量加载特定的语言文件。

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

配置文件

if(isset($_GET['lang']) && $_GET['lang']=='persian')
{
   require_once('persian.php');
}
else
{
   require_once('english.php');
}
于 2012-11-01T08:27:35.457 回答
8

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

/inc/lang/en.lang.php

define('_HELLO', 'Hello');

/inc/lang/fa.lang.php

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

索引.php

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

echo _HELLO;

基准测试:常量与变量

在这里,您会看到为什么我提供使用Constantsnot Variables

常量.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

变量.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
于 2012-11-01T08:42:33.753 回答
6
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");
于 2019-08-24T21:31:42.663 回答
4

正如我从代码中看到的那样,翻译器类从 en.txt 文件加载翻译数据,如果你想要“fa”翻译,只需创建 fa.txt 作为 en.txt 的副本,并编辑和翻译 fa。 txt转波斯语...

希望能帮助到你

于 2012-11-01T07:38:07.567 回答
4

从 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");
于 2016-05-31T16:50:42.077 回答
3

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

}
//  ...  //
于 2017-11-10T09:20:53.750 回答