Website Multi Bahasa dengan Code Igniter

By d3ptzz, Thu. March 26, 2009
Categories: internet related, PHP related, tutorial
Tags: , , , , ,
4,981 views

Saya dan tim kandangbuaya kali ini kebagian ‘tugas negara’, untuk membuat website resmi Elins UGM yang baru. Sebenarnya dari pihak Prodi hanya menginginkan untuk dibuat satu bahasa saja. Namun saya mengusulkan untuk dibikin multi bahasa. Dan akhirnya dibuat dua bahasa, Indonesia dan English.

Kami coding menggunakan CodeIgniter PHP Framework, dimana CI sudah support untuk internasionalisasi multi bahasa. Nah, bagaimana kita mengaplikasikannya? Disini, kita menggunakan Cookie untuk menyimpan seting bahasa dari user. Jadi user bisa memilih bahasa Indonesia maupun Bahasa Inggris(English) dan kemudian disimpan di Cookie. Nah setiap halaman diload, program akan mengecek dulu, bahasa apa yang dipakai, kemudian baru menampilkan tampilan bahasa yang cocok. Default bahasa adalah bahasa Indonesia. Berikut adalah contoh source code yang kami gunakan. Ini hanya contoh saja. Jadi masih butuh banyak sekali pengembangan.

<?php
// Controller I
class Content extends Controller {
	public function __construct() {
		parent::Controller();
		// file-file ini sebaiknya di load di fitur autoload
		$this->load->helper('url');
		$this->load->helper('cookie');
		$this->load->library('language');

		if(get_cookie('bahasa') === 'en') {
			$this->config->set_item('language', 'english');
			$this->load->model('english', 'current_language');
		}
		else {
			$this->config->set_item('language', 'indonesia');
			$this->load->model('indonesia', 'current_language');

			set_cookie(array('name'	=> 'bahasa',
						  'value'	=> 'in',
						  'expire' 	=> '8650',
						  'prefix' 	=> ''));
		}
	}

	public function index() {
		// Mengambil data dari language file di application/language
		$this->lang->load('d3ptzz');
		$data['title'] = $this->lang->line('title');
		$data['hello'] = $this->lang->line('hallo');

		// Mengambil data dari model
		$data['dari_db'] = $this->current_language->get_data();
		$this->load->view('view_multibahasa', $data);
	}
}
//------------------------------------------------------
?>

<?php
//Controller II

// Controller ini fungsinya cuma merubah cookie['bahasa] sesuai request.
// Setelah selesai merubah cookie['bahasa'], terus di redirect ke halaman semula
class Language_setter extends Controller {
	public function __construct() {
		parent::Controller();
		$this->load->helper('cookie');
		$this->load->helper('url');
	}

	public function index() {	}

	public function set_to($language) {
		if(strtolower($language) === 'english') {
			$lang = 'en';
		}
		else {
			$lang = 'in';
		}

		set_cookie(array('name'		=> 'bahasa',
					  'value'	=> $lang,
					  'expire' 	=> '86500',
					  'prefix' 	=> ''));

		if($this->input->server('HTTP_REFERER'))
			redirect($this->input->server('HTTP_REFERER'));
	}
}
//------------------------------------------------------
?>

<?php
// Model I
class English extends Model {
	public function __cosntruct() {
		parent::Model();
	}

	public function get_data() {
		// Pura-puranya disini dilakukan query ke database
		// dan ini adalah hasilnya :
		return 'I am data from database fetched via English model';
	}
}
//------------------------------------------------------
?>

<?php
// Model II
class Indonesia extends Model {
	public function __cosntruct() {
		parent::Model();
	}

	public function get_data() {
		// Pura-puranya disini dilakukan query ke database
		// dan ini adalah hasilnya :
		return 'Saya data dari database di ambil via model "Indonesia"';
	}
}

//------------------------------------------------------
?>

<?php
// File view, beri nama view_multibahasa.php
?>
<html>
<head><title><?=$title?></title>
</head>
<body>
<table border="1" cellpadding="5">
 <tr>
	<td width="600">
		<h2><?=$title?></h2>
	</td>
	<td width="200">
		<a href="<?=site_url('language_setter/set_to/indonesia')?>">Indonesia</a> |
		<a href="<?=site_url('language_setter/set_to/english')?>">English</a>
	</td>
 </tr>
 <tr>
	<td width="400">
		<h4>Mengambil Data dari file lang bahasa di application/language</h4>
		<p><?=$hello?></p>
	</td>
	<td width="100"></td>
 <tr>
 <tr>
	<td width="400">
		<h4>Mengambil Data dari Database via Model</h4>
		<p><?=$dari_db?></p>
	</td>
	<td width="100"></td>
 <tr>
</table>
</body>
</html>
<?
//------------------------------------------------------
?>

<?php
// Simpan di application/language/english/d3ptzz_lang.php
$lang['title'] = ' Multi Language Web Site';
$lang['hallo'] = 'Hi, my name is d3ptzz.';

//------------------------------------------------------
?>

<?php
// Simpan di application/language/indonesia/d3ptzz_lang.php
$lang['title'] = ' Web Site Multi Bahasa';
$lang['hallo'] = 'Hallo, nama saya d3ptzz.';

//------------------------------------------------------
?>

Copyright Code diatas pada Bayu Hernanto.

51 Responses to “Website Multi Bahasa dengan Code Igniter”

  1. fattah Says:

    code igniter memang keren kang…

  2. uwiuw Says:

    codeigniter kayaknya favorite kebanyakan web developer yah…sy ngak ngerti kenapa

  3. d3ptzz Says:

    @kang uwiuw: mungkin karena mudah digunakan, lengkap, dan ringan kang..

  4. Muhammad Rashid Babsail Says:

    mas, mo tanya nih…
    Coba lihat di controller Content::__construct()
    disitu dilakukan pengecekan cookie apakah EN / ID untuk menentukan bahasa apa yang di pakai. Nah, seandainya saya punya 5 controller berbeda dan tiap2 controller memerlukan adanya pengecekan bahasa, gimana donk? apakah musti mengcopykan beberapa baris pengecekan bahasa ke masing-masing controller?

    Di bayangan saya sih, bisa di handle oleh library. Tapi sama saja, masing-masing controller harus mengakses library pengecekan bahasa tersebut.

    Apakah ada cara yang lebih mudah, tentunya dengan mengikuti kaidah DRY (Dont Repeat Yourself) ? Jadi cukup saya tulis/definisikan sekali dan otomatis akan berjalan setiap request ke sebuah controller.

    Mohon balasannya…
    Terima kasih…

  5. d3ptzz Says:

    @muhammad: tentu saja bisa. Kita buat sebuah librari yang menghandle bahasa, misalnya seperti contoh. Kemudian dibuat auto load. Bisa di lihat di /system/application/config/autoload.php

    jadi seting saja librari itu dibuat autoload.. Bagaimana?

  6. Muhammad Rashid Babsail Says:

    saya sudah buat library setting yang fungsinya membaca bahasa di cookie dan kemudian mengeset config['langugage'] ke bahasa tersebut. tapi anehnya meskipun cookie sudah berubah ke bahasa lain, tetap saja yang jalan adalah bahasa default yg telah di set di config. apapun perubahan yang di lakukan tidak berpengaruh.
    apakah ini di karenakan config['language'] yg ada di file config di load terlebih dahulu kemudian baru library, sehingga perubahan bahasa tidak berpengaruh ?

  7. d3ptzz Says:

    hmm…

    saya baru saja mencoba. dan berhasil dengan baik.

    coba kirimkan kode yang anda bikin ke email saya..

    semoga saya bisa membantu anda.

  8. Yadi Utama Says:

    Ikuti tutorial dan account Codeigniter Blog Dalam
    Komunitas Blogger Universitas Sriwijaya – CodeIgniter CMS Institusional Pertama di Indonesia.
    Silahkan kunjungi http://www.unsri.ac.id/blog, coba dan daftarlah sebuah account dan alamat blog Anda di sana di alamat http://www.unsri.ac.id/blog/admin/signup/

  9. d3ptzz Says:

    @Yadi Utama: hoho.. mari mari disukseskan…makasih infonya gan…

  10. masrub Says:

    boss.. cari tutorialnya yg berbahasa indonesia dimana yah??
    apakah harus ke gramedia?
    hehe.. ini sambil cari2 di gugel .. kali2 ada yg gratis..
    kalau ada info japri saja ya om.. makasih

  11. d3ptzz Says:

    @masrub: wah kurang tau bos… emang kenapa kalau bahasa inggris? hehehe

  12. indra lasmana Says:

    mas,kok error ya??
    Unable to load the requested language file: language/bowo_lang.php

    tolong kirim saya sourcecode nya mas, saya butuh banget buat KKP saya mas.

  13. d3ptzz Says:

    @indra lasmana: sourcecode ya ada diatas itu semuanya. kan sudah ada keterangannya. nama file dan dimana menyimpannya… :-)

    tadi ada sedikit kesalahan.
    $this->lang->load(‘bowo’);
    harusnya :
    $this->lang->load(‘d3ptzz’);

  14. Bayu Hernanto Says:

    @Muhammad Rashid Babsail, Bikin aja library MY_Controller, terus pengecekan cookie dilakukan disitu.
    Nanti tiap controller tinggal menginherit ke library MY_Controller. Sehingga kita ngga perlu mengulang-ulang kerjaan itu lagi…

  15. Bayu Hernanto Says:

    @uwiuw, Mungkin karena mudah, sehingga yg masih amatir pun bisa. Sudah mudah, dokumentasinya excelent lagi. Betapa banyak framework yg hebat tapi dokumentasi tidak digarap dengan serius, akhirnya komunitasnya sedikit.

  16. d3ptzz Says:

    @Bayu Hernanto: naaaaaaah.. ini sang masternya sudah keluar dari sarang…:D

  17. Bayu Says:

    @d3ptzz, Ojo ngono to… aku dadi ora penak!

  18. tia Says:

    Aih sedaaapp… :D

  19. d3ptzz Says:

    @tia: mie sedap??:P sedap apanya mbak?

  20. aeris Says:

    @Bayu Hernanto, mas.. bisa kasih contoh gak.. saya masih newbie, buat library MY_Controller yg pengecekan cookie disitu juga.. utk mas puji terima kasih ya tutorialnya… tutorialnya sangat mencerahkan pikiran saya.. hehehe

  21. aeris Says:

    mas, saya belum mudeng nih buat library untuk bahasa, agar gak diload di masing2 controller.. saya masih baru di CI .. mohon bantuannya

  22. d3ptzz Says:

    @aeris: dibikin autoload aja. ada di bagian config..

  23. Miss11 Says:

    A sensible dog would eat the thing. ,

  24. noto Says:

    Kalau masalah kode, ampun gan, gak ngerti blas.

  25. riez Says:

    @Bayu Hernanto,

    maaf pak, maksudnya dokumentasi ny excelent gmna ya?dokumentasi dsni mksud ny dokumentasi apa?
    thx atas info ny…^_^

  26. d3ptzz Says:

    @riez, maksud kang bayu dokumentasi CodeIgniter..:D

  27. sinta Says:

    @d3ptzz: kak, ada id YM nya gak kak??mw tanya2 tentang multilanguage di CI…mksh..kalo g add aja ke mail saya ya kak…maturnuwun..

  28. ojie permana Says:

    thanks bangat mas tutorial…pas dengan apa yang saya cari.
    tapi..saya mohon bantuan dikit mas biar cocok dengan dengan database..
    misalnya saya punya tebel news kira kira untuk tabel news ini disainnya gimana ya mas supaya bisa menghendel kedua bahasa ini.

    thanks mas….
    maap lagi nich mas…kalo bisa kirim ke email saya ya mas
    maap lagi nich jadi ngerasa nyusahain orang…
    thanks buat bantuannya mas..

    [email protected]

  29. d3ptzz Says:

    @ojiepermana: saya balas di sini saja ya, :-)

    kalau misalnya hanya ingin dua bahasa itu, maka bisa dibuat ada kolom judul bahasa indo, judul bahasa inggris. Nah kalau misalnya lebih dari itu atau ada kemungkinan berkembang, bisa dibuat tabel sendiri-sendiri. nanti isinya adalah id dari news, judul, isi sesuai dengan bahasa tabel itu. misalnya tabel indonesia dan tabel inggris..:-)

  30. ojie permana Says:

    oke mas….
    jadi kalo kemungkinan ada dua bahasa kita cukup satu tabel aja tapi ada beberapa kolom yang mengehendel bahasa tersebut

    ada seperti ini benar:

    tabel news :
    id_news
    id_headline
    en_headline
    date
    id_content
    en_content

    benar ngak mas ?

  31. d3ptzz Says:

    kalau memang cuma mau dua bahasa, seperti itu juga tidak masalah..:-)

  32. buzzknow Says:

    wow, mantaabbbb bro …. tapi gmn buat admin panel dynamis utk create dual lang?

    thanks

  33. d3ptzz Says:

    mungkin bikin dua kolom dalam tabel, ID_posting dan language. jadi nanti dua posting yang sama akan mempunyai ID_posting yang sama sedangkan language-nya berbeda tergantung dengan bahasa yang digunakan di posting tersebut

  34. Muhammad Rashid Babsail Says:

    matur nuwun kang, sudah berhasil…
    hehe..baru sempet respon

  35. Muhammad Rashid Babsail Says:

    apa ga repot banget tuh kalo musti nambahin field untuk masing2 bahasa?
    kalo seandainya ada penambahan bahasa lagi kan repot musti ngobok2 ke model nya lagi.
    mungkin yg lebih mudah, buat 1 table master bahasa yg menyimpan daftar bahasa.
    nah id dari bahasa itu akan menjadi FK dari table Post. jadi setiap penambahan/pengurangan bahasa akan mudah.

    contoh:

    tblPost
    ========
    id *
    lang_id **
    title
    content
    ———————
    tblLanguage
    =========
    id *
    language
    codea

  36. d3ptzz Says:

    iya.. coba lihat comment saya paling bawah.. :D saya telat menyadarinya..:D btw makasih telah diingatkan..:)

  37. Kania Says:

    Mas minta contoh souce nya donk, yang udah pake model
    Tolong kirim ke emai saya ya..
    alamat email nya kan di require niy.
    terima kasih…..

  38. d3ptzz Says:

    @karnia: source code sudah ada lengkap di atas

  39. CodeIgniter Multi-Language Part-1 « Cyberqoe's Blog Says:

    [...] langsung saja pada intinya. Cara ini pada awalnya saya dapatkan dari websiste kandangbuaya, tetapi kemudian saya kembangkan lagi agar tidak terlalu banyak script. Baiklah diawali dengan [...]

  40. fananicenter Says:

    bang Admin Mintak Source nya dong yang sudah ada Model+database nya.. tolong bgt,, lagi butuh nich,,,n_n

  41. iruru Says:

    Master Admin…

    Code di atas sudah saya coba dgn sedikit perubahan (saya pakai CI 2.0.1)..
    ini perubahan yg saya buat:

    file content.php
    awal: $this->load->library(‘language’);
    saya ubah jadi: $this->load->helper(‘language’);

    file autoload:
    $autoload['helper'] = array(‘url’,’cookie’,’language’);

    untuk view_multibahasa sudah bisa terpanggil, tetapi ketika saya klik tulisan Indonesia atau English (untuk ganti bahasa).. muncul error seperti ini:
    “The requested URL /multi_language_ci/language_setter/set_to/english was not found on this server.”
    *multi_language_ci = nama folder tempat saya menyimpan CI

    kok bisa muncul error kaya’ gitu ya? terus solusinya kaya’ gimana?
    tolong pencerahannya master… >_<

    Thx b4

  42. fauzy_ignore Says:

    saya suka codeigniter karena creatornya seorang rocker..
    lets rock ‘n roll..

  43. maxdimaz Says:

    Gan Anr Boleh minta full script nya mau tak pelajari masih bingung penggunaan nya codeigniter aku T_T

  44. otakiri Says:

    saya mau belajar gan mohon dibantu ya

  45. andyp Says:

    waduh coding yg diatas jadi satu yah, bisa gak minta source codenya utl tiap filenya

  46. Dian Sugiarto Says:

    Makasih banyak mas d3ptzz, ilmunya sangat bermanfaat. Makasih banyak sekali lagi

  47. Mawan Says:

    Mas, mohon bantuan.. saya ko ada error seperti ini ya ..

    Fatal error: Class ‘Controller’ not found in /var/www/cookbahasa/application/controllers/multibahasa.php on line 3

    saya masih pemula mas dalam CI..
    untuk code Controller I saya beri nama dengan multibahasa.php
    untuk code Controller II saya beri nama language_setter.php
    tetapi pas di panggil urllocalsaya/index.php/multibahasa ada error di atas mas.. mohon bantuan ya

  48. d3ptzz Says:

    @mawan: Kode di posting ini untuk CI 1.7.x kalau untuk CI 2.x, maka extends-nya diganti jadi Class NamaClass extends CI_Controller

  49. syarip Says:

    thanxs banget ilmunya bang, sangat bermanfaat :)

  50. ryan Says:

    mas, mau tanya kok saya buat di ci 2.1 nggak bisa ya..
    padahal di controller nya udah saya ganti extends CI_Controller..
    saya mau buat “kosongan” dulu tapi kok masih belum mau ya mas..semua file udah saya letakkan di tempatnya..
    mohon bantuannya ya mas.. *Urgent

  51. Surino Says:

    thanks gan ,,,ini bagus sekali makasih sekali lagi

Comments