Tutorial CodeIgniter : Web Multi Language Dengan CodeIgniter dan Google API Translate

Akhirnya selesai juga saya mengerjakan tugas mata kuliah yang menguras waktu dan kata-kata ini. Walau akhirnya harus di revisi lagi sebelum dikumpulkan. Daripada mumet ngurusin laporan yang satu ini, lebih baik saya posting aja di blog kesayangan saya ini. Kali ini saya mau posting tentang konsep web multi language. Web multi language adalah web yang mendukung multi bahasa dari berbagai belahan dunia. Sampai saat ini, ada 2 cara yang saya ketahui untuk membuat web multi language. Yang pertama dengan menggunakan cara manual. Manual disini maksudnya dengan membuat beberapa konten dengan bahasa yang berbeda dan disimpan di dalam di database. Kemudian ditampilkan sesuai pilihan user. Sedangkan cara yang kedua dengan menggunakan metode otomatis, yaitu dengan menggunakan sebuah mesin yang berisi sebuah algoritma learning untuk menterjemahkan kata-kata dan menyusunnya sesuai dengan grammar yang sesuai.

Dan sampai saat ini, masih sangat sulit untuk membuat sebuah mesin learning seperti yang saya sebutkan di atas. Namun, kita bisa memanfaatkan Google Translate yang sudah disediakan oleh Google. “Tetapi bagaiamana jika ingin menterjemahkan sebuah isi website secara otomatis tanpa harus meng-copy-kan isinya ke Google Translate?”. Solusinya, kita bisa menggunakan Google API Translate yang sudah dibuatkan oleh om Google. Setelah kemarin main-main ke webnya mas Sinaryuda, akhirnya saya menemukan sebuah helper google translate. Nah, kali ini saya akan menjelaskan cara untuk mengintegrasikan CodeIgniter dengan Google API Translate.

1. Seperti biasa, siapkan dulu file-file framework CodeIgniter di direktori htdocs web server masing-masing.

2. Buka text editor kesayangan ana, dan copy-kan script dibawah ini, dan simpan dengan nama google_translate_helper.php pada folder helper.

if ( ! function_exists('google_translate'))
{
function google_translate($text,$d = '',$s = 'en',$f='text')
{
	if($d=='') $d = $s;
	if($d != $s){
		$lang_pair = urlencode($s.'|'.$d);
		$q = rawurlencode($text);
		// Google's API translator URL
		$url = "http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=".$q."&langpair=".$lang_pair."&format=".$f;
		// Make sure to set CURLOPT_REFERER because Google doesn't like if you leave the referrer out
		$ch = curl_init();
		curl_setopt($ch, CURLOPT_URL, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
		curl_setopt($ch, CURLOPT_REFERER,  base_url());
		$body = curl_exec($ch);
		curl_close($ch);

		$json = json_decode($body, true);
		$tranlate = $json['responseData']['translatedText'];
		echo $tranlate;
	} else {
	echo $text;
	}
}
}

3. Setelah itu, kita buat sebuah controller dengan nama tes.php, dan copy-kan script di bawah ini :

class tes extends CI_Controller {

	function __construct()
	{
		parent::__construct();
		$this->load->helper(array('url','form'));
		$this->load->model('berita_model');
		$this->load->database();
	}
	function index()
	{
		$data['berita']=$this->berita_model->tampil_berita();
		$this->load->view('isi_depan',$data);
		//$data['lang'] = $this->session->userdata('language');
		//$this->load->view('translate',$data);
	}
	function detail()
	{
		$id = $this->uri->segment(3);
		$data['berita']=$this->berita_model->detail_berita($id);
		$data['lang'] = $this->session->userdata('language');
		$this->load->view('detail',$data);
		//$data['lang'] = $this->session->userdata('language');
		//$this->load->view('translate',$data);
	}
	function languages()
	{
	   extract($_POST);
		$id=$this->input->post('det');
	   $this->session->set_userdata('language', $dlang);
		echo "<meta http-equiv='refresh' content='0; url=".base_url()."index.php/tes/detail/".$id."'>";

	}
}

4. Jangan lupa untuk membuat sebuah file model, yang berisikan script seperti di bawah ini :

Class berita_model extends CI_Model{

	function __construct()
	{
		parent::__construct();
	}
	function tampil_berita()
	{
		$q = $this->db->query("select * from berita");
		return $q;
	}
	function detail_berita($id)
	{
		$q = $this->db->query("select * from berita where id_berita=$id");
		return $q;
	}

}

5. Karena pada contoh kali ini, saya mencoba untuk menterjemahkan konten dari sebuah isi web berita, maka saya buatkan 2 buah view. View yang pertama untuk menampilkan daftar berita, dan view yang kedua untuk menampilkan detail berita. Nah, pada view kedua inilah kita akan menterjemahkan konten berita tersebut ke bahasa yang lainnya. Isi view yang pertama, kira-kira seperti di bawah ini dan simpan dengan nama isi_depan.php :

<table>
<?php
foreach($berita->result_array() as $b)
{
	echo "<tr><td><a href='".base_url()."index.php/tes/detail/".$b['id_berita']."'>".$b['judul']."</a></td></tr>";
}
?>
</table>

Copy-kan script di bawah ini untuk view yang kedua, simpan dengan nama detail.php :

<script language="javascript" type="text/javascript">
 function lanfTrans(lan)
 {
   switch(lan)
   {
   case 'en': document.getElementById('dlang').value='en';document.langForm.submit(); break;
   case 'fr': document.getElementById('dlang').value='fr'; document.langForm.submit(); break;
   case 'es': document.getElementById('dlang').value='es'; document.langForm.submit(); break;
   case 'id': document.getElementById('dlang').value='id'; document.langForm.submit(); break;
   }
 }
</script>
<body>
<?php
	echo form_open('tes/languages/',array('name'=>'langForm','id'=>'langForm'));

	$id = $this->uri->segment(3);
?>
	<input type="hidden" name="dlang" id="dlang">
	<input type="hidden" name="det" id="det" value="<?php echo $id; ?>">
	<input type="hidden" name="current" id="current" value="<?php echo substr(uri_string(),1,strlen(uri_string()));?>">

	<img src="<?php echo base_url()?>images/fr.jpg" onClick="lanfTrans('fr');" title="French"> &nbsp;
	<img src="<?php echo base_url()?>images/en.jpg" onClick="lanfTrans('en');" title="English"> &nbsp;
	<img src="<?php echo base_url()?>images/sp.jpg" onClick="lanfTrans('es');" title="Spanish"> &nbsp;
	<img src="<?php echo base_url()?>images/ind.jpg" onClick="lanfTrans('id');" title="Indonesia"> &nbsp;
<?php
	echo form_close();
?>
</body>
<div id="soal">
<table>
<?php
foreach($berita->result_array() as $b)
{
 	google_translate($b['judul'],$lang,"id","text");
	echo "<br><br>";
 	google_translate($b['isi_berita'],$lang,"id","text");
}
?>
</table>

Nah, gampang kan penggunaanya? Google API Translate ini masih mempunyai kekurangan, yaitu tidak akan menterjemahkan konten yang lebih dari 300 kata. Ini bisa diakali dengan membagi konten tersebut per 300 kata :D. Di bawah ini sudah saya sediakan demo file-nya dan link untuk mendownload contoh kode lengkapnya. Semoga bisa bermanfaat untuk rekan-rekan yang lagi berkutat dengan proyek yang berhubungan dengan Google API Translate.

Happy Blogging and Keep Coding

Cheerrrss….!!!!

Download Aplikasi

14 comments

  1. iruru Reply

    Om/Mas/Kakak (*pilih salah satu) Gede Lumbung

    di tutorial ini kita pake’ database ya? boleh tau detail dari tabel yg digunakan untuk tutorial ini ga?

    Thx b4

  2. firman Reply

    demonya gak ke translate…katanya sih sekarng google translate berbayar…kalo memang benar bagaimana mengakali hal ini.? ada gagasan?

  3. Kiki Reply

    Mas,

    qo keluar pesan ini??

    Fatal error: Call to undefined function google_translate() in C:\xampp\htdocs\web\application\views\detail.php on line 72

  4. aries putra Reply

    Fatal error: Unknown function: curl_init() in F:\Xampp\xampp\htdocs\adha-internasional\trunk\application\helpers\google_translate_helper.php on line 51

    kenapa ini bro?

  5. andi Reply

    A PHP Error was encountered

    Severity: Notice

    Message: Undefined property: tes::$session

    Filename: controllers/tes.php

    Line Number: 23

    Fatal error: Call to a member function userdata() on a non-object in C:\xampp\htdocs\translate\application\controllers\tes.php on line 23

    ini kenapa ya bro?

  6. ibnu Reply

    kok muncul pesan gini ya mas : “Fatal error: Maximum execution time of 30 seconds exceeded in C:\xampp\htdocs\ie\system\helpers\google_translate_helper.php on line 17″
    line 17 : $body = curl_exec($ch);

    Mohon bantuannya…terima kasih

  7. Hasbi Reply

    gan kalo bahasanya udah di translate ke bahasa lain apakah kalimatnya benar atau acak-acakan gan ?
    makasih gan 😀