Membuat multi bahasa dengan codeigniter

Membuat multi bahasa dengan codeigniter

Pada pembahasan kali ini saya akan membahas seputar bagaimana cara membuat multi bahasa dengan codeigniter. Untuk membuatnya saya akan menggunakan cookies.
Cookies merupakan data file yang ditulis ke dalam hard disk komputer oleh web server yang digunakan untuk mengidentifikasikan diri user pada situs tersebut sehingga sewaktu user kembali mengunjugi situs tersebut, situs itu akan dapat mengenalinya. Jadi dapat dikatakan bahwa cookies merupakan semacam ID card user saat koneksi pada situs. (terusbelajar)
Spesifikasi Sourcecode
Pranktik

#Buat Database

Untuk nama database terserah kamu, lalu buat tabel dengan nama artikel. Untuk fieldnya bisa ikutin gambar di bawah ini.

Membuat multi bahasa dengan codeigniter

#Atur Codeigniter

Setelah codeigniter di download, Sebelum memulai coding, persiapan awal kamu bisa atur terlebih dahulu codeigniter-nya. Pada kasus ini ada beberapa library dan souce lainnya yang harus kamu load terlebih dahulu.
  • Pada config/autoload.php
    • Load library "database".
    • Load helper "url dan cookie".
  • Pada config/config.php
    • Set base_url
    • Set encription_key
  • Pada config/database.php
    • Set hostname
    • Set root
    • Set database
# Ngoding

> Controllers

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Welcome extends CI_Controller {

function __construct() {
parent::__construct();


$this->load->model("artikel");
}

public function index() {

$data['list_artikel'] = $this->artikel->get_artikel();
$this->load->view('welcome_message', $data);
}
}

Simpan dengan nama Welcome.php , kode di atas merupakan controller home

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Lang_setter extends CI_Controller {

public function __construct() {
parent::__construct();
}

public function index() {
echo "Forbiden 403";
}

public function set_to($language) {
if(strtolower($language) === 'english') {
$lang = 'en';
} else {
$lang = 'in';
}
set_cookie(
array(
'name' => 'lang_is',
'value' => $lang,
'expire' => '8650',
'prefix' => ''
)
);

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

Simpan dengan nama Lang_setter.php , kode di atas berfungsi untuk mengatur cookie.

> Models

<?php 
defined('BASEPATH') OR exit('No direct script access allowed');

class Artikel extends CI_Model {

function __construct() {
parent::__construct();
}

function get_artikel(){
$this->db->select("*");
$this->db->from("artikel");
if(get_cookie('lang_is') === 'en'){$this->db->where('bahasa','ENG');}else{$this->db->where('bahasa','IDN');}
$query = $this->db->get();

return $query->result();
}
}
?>

Simpan dengan nama Artikel.php. Lihat pada bagian query where di atas, pada saat cookies lang_is ter-set en, maka data yang akan di tampilkan adalah data bahasa yang membunyai value ENG, begitu pula sebaliknya. kode ini if(get_cookie('lang_is') === 'en'){ merupakan kode untuk melakukan pengecekan cookies.

> Views

<?php defined('BASEPATH') OR exit('No direct script access allowed'); ?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Welcome to CodeIgniter</title>

<style type="text/css">

::selection { background-color: #E13300; color: white; }
::-moz-selection { background-color: #E13300; color: white; }

body {
background-color: #fff;
margin: 40px;
font: 13px/20px normal Helvetica, Arial, sans-serif;
color: #4F5155;
}

a {
color: #003399;
background-color: transparent;
font-weight: normal;
}

h1 {
color: #444;
background-color: transparent;
border-bottom: 1px solid #D0D0D0;
font-size: 19px;
font-weight: normal;
margin: 0 0 14px 0;
padding: 14px 15px 10px 15px;
}

code {
font-family: Consolas, Monaco, Courier New, Courier, monospace;
font-size: 12px;
background-color: #f9f9f9;
border: 1px solid #D0D0D0;
color: #002166;
display: block;
margin: 14px 0 14px 0;
padding: 12px 10px 12px 10px;
}

#body {
margin: 0 15px 0 15px;
}

.footer-right {
float: right;
font-size: 11px;
border-top: 1px solid #D0D0D0;
line-height: 32px;
padding: 0 10px 0 10px;
margin: 20px 0 0 0;
}

.footer-left {
float: left;
font-size: 11px;
border-top: 1px solid #D0D0D0;
line-height: 32px;
padding: 0 10px 0 10px;
margin: 20px 0 0 0;
}

#container {
margin: 10px;
border: 1px solid #D0D0D0;
box-shadow: 0 0 8px #D0D0D0;
}
</style>
</head>
<body>

<div id="container">
<?php foreach($list_artikel as $la){ ?>
<h1><?php echo $la->judul;?></h1>

<div id="body">
<?php echo $la->isi;?>
</div>
<?php } ?>
<p>
<span class="footer-left">
<?php if(get_cookie('lang_is') === 'en'){ ?>
Language : <a href="<?php echo site_url('lang_setter/set_to/indonesia');?>">IDN</a>
<?php }else{ ?>
Bahasa : <a href="<?php echo site_url('lang_setter/set_to/english');?>">ENG</a>
<?php } ?>
</span>
<span class="footer-right">Page rendered in <strong>{elapsed_time}</strong> seconds. <?php echo (ENVIRONMENT === 'development') ? 'CodeIgniter Version <strong>' . CI_VERSION . '</strong>' : '' ?></span>
</p>
</div>

</body>
</html>

Simpan dengan nama welcome_message.php.


Full Source Code

*) Jangan Lupa Diimport Dulu Databasenya.

9/Post a Comment/Comments

  1. Maaf kang cahya, tutor ini bisa di implementasikan di CI ver: 2.2.0 gak ?

    BalasHapus
    Balasan
    1. bisa seharusnya. karena ci 2 sama 3 ga berbeda jauh

      Hapus
  2. kang cahya, waktu sya klik ENG knp tidak menjadi bahasa inggris kembali...
    mohon bantuan nya

    BalasHapus
  3. Kang, terimakasih tutorialnya. Bermanfaat, tapi kalau misal baca data by ID, bagaimana logika set languagenya ya?, misalkan gini, baca detail artikel where id = 1, pada saat id 1 aktif, cara ngerubah languagenya gimana ya kang?

    Makasih kang

    BalasHapus
    Balasan
    1. Maksudnya EN dan ID nya di ganti sama ID berupa angka ?

      Hapus
    2. Bukan kang. Jadi gini, kalau di tutorialnya akang kan di database nya antara artikel yang ID dan ENG dipisah, nah pada saat saya query SELECT * FROM artikel WHERE ID = 1, berarti manggil artikel yang ID kang, pada saat SELECT * FROM artikel WHERE ID = 2 berarti manggil ENG, nah maksud saya pada saat ada QUery dengan manggil ID, bagaimana logikanya agar ketika Switch language ada korelasi antara artikel ID dan EN kang.

      Hatur nuwun

      Hapus
    3. Gini aja :
      if(strtolower($language) === 'english') {
      $lang = 1; // eng
      } else {
      $lang = 2; // idn
      }

      Nanti di query where-nya tinggal gini :
      $this->db->where('bahasa', get_cookie('lang_is'));

      Hapus
  4. maaf kang, kalau di database artikel kang cahya kan inggris dan indonesia nya dipisahkan berdasarkan kolom bahasa (judul dan isi ENG satu row, begitu juga IDN), nah kalau inggris dan indonesia nya dipisahkan berdasarkan kolom? jadi kolom NAMA untuk IDN, dan kolom NAMA_EN untuk ENG?
    cara mengubah language nya bagaimana kang?


    mohon pencerahannya

    BalasHapus
  5. @Gerhard : agak sedikit tricky sh kalo dibuat kyk gitu, mungkin bisa bikin satu fungsi sederhana di helper buat mendeteksi subfix field, kalo bahasa yang di pilih "english" berarti nanti dia bakal mencari field yang bersubfix "_ENG" begitu sebaliknya

    BalasHapus

Posting Komentar

Lebih baru Lebih lama