Implementasi MultiLanguage di CodeIgniter

Dalam tutorial kali ini saya akan menjelaskan bagaimana membuat multilanguage di projek kita menggunakan Framework CodeIgniter. Jadi ceritanya kemarin saya disuruh belajar CodeIgniter untuk membuat multilanguage di projek yang sudah dibuat sebelumnya. Sudah lama banget nggak ngoding pakai PHP, jadi rada canggung juga kalau disuruh ngoding pakai PHP. Hehe

Beruntung CodeIgniter sudah menyediakan fitur untuk multilanguage, jadi kita bisa dengan mudah membuat fitur tersebut, Tinggal setting dan koding sedikit, selesai deh. Caranya bagaimana? Simak tutorial berikut sampai selesai:

1. Berikut struktur folder dari Projek CodeIgniter, jadi untuk membuat multilanguage kita cuman men-setting 4 folder penting di dalam folder application:

Struktur folder di CodeIgniter

2. Klik di folder application, nanti akan keluar semua folder seperti dibawah ini (yang akan kita setting adalah folder yang di highlight merah):


3. Pertama: Folder application/config/ (untuk meng-enable Hooks)
Buka folder config dan cari config.php dan cari $config['enable_hooks'] dan ganti FALSE menjadi TRUE

4. Kedua: Masih di dalam folder application/config/
Cari hooks.php selanjutnya copy-paste kodingan dibawah ini (untuk mendefinisikan Hook-nya):

$hook['post_controller_constructor'] = array(
    'class'    => 'LanguageLoader',
    'function' => 'initialize',
    'filename' => 'LanguageLoader.php',
    'filepath' => 'hooks'
);

5. Selanjutnya buat file LanguageLoader.php dan buat kelas LanguageLoader di application/hooks/ kodingannya seperti dibawah:

<?php
class LanguageLoader
{
    function initialize() {
        $ci =& get_instance();
        $ci->load->helper('language');
        $siteLang = $ci->session->userdata('site_lang');
        if ($siteLang) {
            $ci->lang->load('message',$siteLang);
        } else {
            $ci->lang->load('message','english');
        }
    }
}


6. Sebelum membuat kodingan untuk switch bahasanya, kita harus pastikan kalau settingan application/config/autoload.php seperti dibawah: (Untuk men-load session library dan URL helper)

$autoload['libraries'] = array('session');
$autoload['helper'] = array('url');

7. Selanjutnya buat file LanguageSwitcher.php di application/controllers/ dan copy-paste kodingan dibawah ini:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class LanguageSwitcher extends CI_Controller
{
    public function __construct() {
        parent::__construct();    
    }

    function switchLang($language = "") {
       
        $language = ($language != "") ? $language : "english";
        $this->session->set_userdata('site_lang', $language);
       
        redirect($_SERVER['HTTP_REFERER']);
       
    }
}

8. Nah, terakhir di folder application/language/ buat folder bahasa yang mau kita buat. Misal disini saya membuat multilanguage hanya untuk 2 bahasa saja, yaitu bahasa Indonesia dan Inggris (bisa dibuat banyak).

Di dalam folder language

Masing-masing di dalam folder tersebut (english dan indo), buat file message_lang.php dan isinya contohnya seperti dibawah:

- Di application/language/english/message_lang.php

<?php
$lang["menu_test"] = "Test";

- Di application/language/indo/message_lang.php

<?php
$lang["menu_test"] = "Testing";

Poin pentingnya adalah kita harus membuat ID contoh "menu_test" yang sama antara bahasa Inggris dan Indo supaya aplikasi bisa tahu kalau kita pilih bahasa inggris maka akan ditampilkan itu, dan kalau Indonesia akan ditampilkan satunya lagi.

9. Terakhir, di Folder application/view/ tambahkan dropdown berikut untuk mengubah bahasanya:

<select onchange="javascript:window.location.href='<?php echo base_url(); ?>LanguageSwitcher/switchLang/'+this.value;">
<option value="english" <?php if($this->session->userdata('site_lang') == 'english') echo 'selected="selected"'; ?>>English</option>
<option value="indo" <?php if($this->session->userdata('site_lang') == 'indo') echo 'selected="selected"'; ?>>Indonesia</option>
</select>
<p><?php echo $this->lang->line('menu_test'); ?></p>

NB: Sengaja saya selipkan <p><?php echo $this->lang->line('menu_test'); ?></p> diatas untuk mengetes apakah yang kita buat sudah benar atau belum.

Untuk multilanguage-nya:

Kalau ingin membuat multilanguage di View:
<p><?php echo $this->lang->line('menu_test'); ?></p>

Kalau ingin membuat multilanguage di Controller:
$this->lang->line('menu_test')

Sekian dan Terima gaji.

Source: https://www.codexworld.com/