How to make a language translator in php

Hi i am devloping sample site in php i need to translate whole website in to persian. how can it possible in php?? I have tried using the following code.. This code will working fine for deutsch conversion.

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">
            <h2><?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></h2>
            <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>

Is it possible to transilate to other laguages using this code?? I changed register1.php?lang=de to register1.php?lang=fa(persian).. But nothing hapens..anybody plese help

asked Nov 1, 2012 at 7:20

4

AS per me you can try this method.This method is already implemented in our system and it is working properly.

Make php file of each language and define all the variables and use those variables in pages.

for e.g For english

english.php

$hello="Hello";

persian.php

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

Now use this variable to page like this.

your_page.php

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

You have load specific language file as per get language variable from URL.

It is better that you have define this language variable into config file.

config.php

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

answered Nov 1, 2012 at 8:27

How to make a language translator in php

HkachhiaHkachhia

4,3686 gold badges38 silver badges74 bronze badges

3

If I were you, I'd do it like this:

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

Benchmark: Constants vs. Variables

Here you see why I offered using Constants not 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

answered Nov 1, 2012 at 8:42

MahdiMahdi

9,0279 gold badges52 silver badges74 bronze badges

2

original from @rbenmass :

try this:

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

answered Aug 24, 2019 at 21:31

From an Perl trans script I extracted the following for 100% free php google translation this function:

See working demo on 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");

answered May 31, 2016 at 16:50

rbenmassrbenmass

511 silver badge2 bronze badges

As i can read from the code, the translator class loads the translation data from en.txt file, if you want have 'fa' translation, just create fa.txt as copy of en.txt with all translations and edit and translate fa.txt to persian...

Hope it helps

answered Nov 1, 2012 at 7:38

@rbenmass Thank You :-)

I think it have to be , because it runs good for me :

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

}
//  ...  //

answered Nov 10, 2017 at 9:20

How to make a language translator in php

AndAnd

652 silver badges7 bronze badges