Membuat Multi Language Di Codeigniter 4

Membuat Multi Language Di Codeigniter 4

Pada dasarnya pemanggilan fungsi multi bahasa cukup dengan melakukan setup pada setLocale() misal setLocale('id') untuk menggunakan Bahasa Indonesia. Contohnya :

 

$this->language = \Config\Services::language();
$this->language->setLocale('id');

 

Fungsi ini digunakan di setiap Controllers yang mengelolah view, Maka dari itu saya akan membuat contoh cara penggunaan multi language dinamis menggunakan codeigniter 4.

 

LANGKAH PERTAMA

 

Merubah beberapa pengaturan di app/config/app.php 

 

//Ubah menjadi id untuk menggunakan indonesia sebagai local default
public $defaultLocale = 'id';

//Merubah $negotiateLocale menjadi true
public $negotiateLocale = true;

//Menambahkan $supportedLocales idnonesia, inggris, perancis
public $supportedLocales = ['id','en','fr'];

//Merubah $sessionDriver ke database
public $sessionDriver            = 'CodeIgniter\Session\Handlers\DatabaseHandler';

//Menyimpan sesi ke tabel ci_sessions
public $sessionSavePath          = 'ci_sessions';

 

Menurut User Guide Codeigniter bahwa DatabaseHandler paling umum digunakan oleh pengguna Codeigniter.

 

LANGKAH KE DUA

 

Buat database, disini saya membuat database di MySql dengan dama ci4_project dan buat tabel dengan format berikut di perintah SQL di MySql anda.

 

CREATE TABLE IF NOT EXISTS `ci_sessions` (
        `id` varchar(128) NOT NULL,
        `ip_address` varchar(45) NOT NULL,
        `timestamp` int(10) unsigned DEFAULT 0 NOT NULL,
        `data` blob NOT NULL,
        KEY `ci_sessions_timestamp` (`timestamp`)
);

 

Menjadikan (id) sebagai primary key :

 

ALTER TABLE ci_sessions ADD PRIMARY KEY (id);

 

LANGKAH KE TIGA

 

Ubah pengaturan database di app/config/Database.php

 

public $default = [
	'DSN'      => '',
	'hostname' => 'localhost',
	'username' => 'root',
	'password' => 'password db anda',
	'database' => 'db anda',
	'DBDriver' => 'MySQLi',
	'DBPrefix' => '',
	'pConnect' => false,
	'DBDebug'  => (ENVIRONMENT !== 'production'),
	'cacheOn'  => false,
	'cacheDir' => '',
	'charset'  => 'utf8',
	'DBCollat' => 'utf8_general_ci',
	'swapPre'  => '',
	'encrypt'  => false,
	'compress' => false,
	'strictOn' => false,
	'failover' => [],
	'port'     => 3306,
];

 

LANGKAH KE EMPAT

 

Buat sebuah file di app/config dengan nama MyConstanst.php dan isi kode berikut.

 

<?php
session_start();

$supportLang = ['id', 'en', 'fr']; 
if (!empty($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
    $acceptLang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
    $language = in_array($acceptLang, $supportLang) ? $acceptLang : 'id';
} else {
    $language = 'id';
}

define('ADM_LANG', isset($_SESSION['adm_lang']) ? $_SESSION['adm_lang'] : $language);
define('WEB_LANG', isset($_SESSION['web_lang']) ? $_SESSION['web_lang'] : $language);

 

$_SERVER['HTTP_ACCEPT_LANGUAGE'] berfungsi untuk mendapatkan Accept Language header dan akan di validasi dengan $supportLang jika ada dalam array maka akan digunakan sebagai variabel yang akan digunakan di ADM_LANG dan WEB_LANG. Variabel inilah yang akan digunakan sebagai Locale.

 

Buka file app/config/Constants.php dan tambahkan kode berikut di bagian atas atau dibawah <?php 

 

include_once(APPPATH . "config/MyConstants.php");

 

LANGKAH KE LIMA

 

Membuat Controllers Select Language. Buat sebuah file di folder app/controllers dengan nama SelectLanguage.php dan tambahkan kode berikut:

 

<?php namespace App\Controllers;
use CodeIgniter\Controller;

class SelectLanguage extends Controller
{

    protected $helpers = [];

	public function __construct()
	{	
        
    }

    public function adminlang()
    {   
        $idLang = $this->request->uri->getSegment(2);
        $session = session();
        $session->remove('adm_lang');
        $session->set('adm_lang',$idLang);
        return redirect()->to($_SERVER['HTTP_REFERER']);
    }
    
    public function frontlang()
    {   
        $idLang = $this->request->uri->getSegment(2);
        $session = session();
        $session->remove('web_lang');
        $session->set('web_lang',$idLang);
        return redirect()->to($_SERVER['HTTP_REFERER']);
    }
}

 

Tambahkan URI Route di app/config/Routes.php 

 

$routes->add('/adminlang/(:any)', 'SelectLanguage::adminlang');
$routes->add('/frontlang/(:any)', 'SelectLanguage::frontlang');

 

LANGKAH KE ENAM

 

Buat 3 buah folder di app/Language dengan nama en,fr,id (Inggris,Perancis,Indonesia) dan di setiap folder buat sebuah file dengan nama Global.php. Dengan isian seperti berikut :

 

Untuk file Global.php dalam folder en :

 

<?php

return [
   'h1Title'                      => 'Welcome to CodeIgniter',
   'noteH1Title'                  => 'The small framework with powerful features',
];

 

Untuk file Global.php dalam folder fr:

 

<?php

return [
   'h1Title'                      => 'Bienvenue sur CodeIgniter',
   'noteH1Title'                  => 'Le petit framework aux fonctionnalités puissantes',
];

 

Untuk file Global.php dalam folder id:

 

<?php

return [
   'h1Title'                      => 'Selamat Datang Di CodeIgniter',
   'noteH1Title'                  => 'Kerangka kecil dengan fitur yang kuat',
];

 

LANGKAH KE TUJUH

 

Buka file app/controllers/Home.php ganti kodenya dengan :

 

<?php namespace App\Controllers;

class Home extends BaseController
{
	public function __construct()
	{
		$this->language = \Config\Services::language();
		$this->language->setLocale(WEB_LANG);
	}

	public function index()
	{
		return view('welcome_message', $data);
	}

}

 

LANGKAH KE DELAPAN

 

Buka file app/views/welcome_message.php

 

ganti

<title>Welcome to CodeIgniter 4!</title>

menjadi

<title><?=lang('Global.h1Title');?></title>

ganti

<h1>Welcome to CodeIgniter <?= CodeIgniter\CodeIgniter::CI_VERSION ?></h1>

<h2>The small framework with powerful features</h2>

menjadi

<h1><?=lang('Global.h1Title');?> <?= CodeIgniter\CodeIgniter::CI_VERSION ?></h1>
<h2><?=lang('Global.noteH1Title');?></h2>

Tambahkan menu select language di bagian <div class="menu"> 

 

<li class="menu-item hidden"><a href="<?=base_url('frontlang/id');?>">Indonesia</a></li>
<li class="menu-item hidden"><a href="<?=base_url('frontlang/en');?>">English</a></li>
<li class="menu-item hidden"><a href="<?=base_url('frontlang/fr');?>">Perancis</a></li>

 

Buka http://localhost:8080/ dan tampilannya akan seperti ini :

 

Multi Language Codeigniter 4

 

Klik pilihan bahasa yang telah ditambahkan di menu dan lihat hasilnya. Sekian tutorial Membuat Multi Language Di Codeigniter 4 wink

 

Share


Article Posted By Hariadi

Seorang freelancer website and software developer, gemar dengan ilmu seputar IT serta penuh semangat untuk belajar.


0 Comment

No Comment


Leave a Comment ...