MultiLanguage CodeIgniter

Posted: July 19, 2010 in Pendidikan

Langkah-langkah penggunaan multilanguage (lebih dari satu bahasa) dalam CodeIgniter sebagai berikut:

  1. Buat MY_Language.php di C:/xampp/htdocs/codeigniter/system/application/libraries dan isikan listing program sebagai berikut:
  2. <?php if (!defined(‘BASEPATH’)) exit(‘No direct script access allowed’);

    class MY_Language extends CI_Language
    {
    function MY_Language() {

    global $RTR;

    $index_page    = $RTR->config->item(‘index_page’);
    $lang_uri_abbr = $RTR->config->item(‘lang_uri_abbr’);

    /* get the lang_abbr from uri segments */
    $lang_abbr = current($RTR->uri->segments);

    /* check for invalid abbreviation */
    if( ! isset($lang_uri_abbr[$lang_abbr])) {

    $deft_abbr = $RTR->config->item(‘language_abbr’);

    /* check for abbreviation to be ignored */
    if ($deft_abbr != $RTR->config->item(‘lang_ignore’)) {

    /* check and set the default uri identifier */
    $index_page .= empty($index_page) ? $deft_abbr : “/$deft_abbr”;

    /* redirect after inserting language id */
    header(‘Location: ‘.$RTR->config->item(‘base_url’).$index_page.$RTR->uri->uri_string);
    }

    /* get the language name */
    $user_lang = $lang_uri_abbr[$deft_abbr];

    } else {

    /* get the language name */
    $user_lang = $lang_uri_abbr[$lang_abbr];

    /* reset config language to match the user language */
    $RTR->config->set_item(‘language’, $user_lang);
    $RTR->config->set_item(‘language_abbr’, $lang_abbr);

    /* check for abbreviation to be ignored */
    if ($lang_abbr != $RTR->config->item(‘lang_ignore’)) {

    /* check and set the user uri identifier */
    $index_page .= empty($index_page) ? $lang_abbr : “/$lang_abbr”;

    /* reset uri segments and uri string */
    $RTR->uri->_reindex_segments(array_shift($RTR->uri->segments));
    $RTR->uri->uri_string = str_replace(“/$lang_abbr/”, ‘/’, $RTR->uri->uri_string);
    }
    }

    /* reset the index_page value */
    $RTR->config->set_item(‘index_page’, $index_page);
    log_message(‘debug’, “MY_Language Class Initialized”);
    }
    }

    /* translate helper */
    function t($line) {
    global $CI;
    return ($t = $CI->lang->line($line)) ? $t : $line;
    }

    ?>

  3. Buat MY_language_helper.php di C:/xampp/htdocs/codeigniter/system/application/libraries dan isikan listing program sebagai berikut:
  4. <?php  if (!defined(‘BASEPATH’)) exit(‘No direct script access allowed’);

    function lang($line, $id = ”, $param = ”, $language = ”) {
    $CI =& get_instance();
    $line = $CI->lang->line($line, $param, ”, $language);

    if ($id != ”) {
    $line = ‘<label for=”‘.$id.'”>’.$line.”</label>”;
    }

    return $line;
    }

    function i18n($line, $id = ”, $param = ”, $language = ”) {
    return lang($line, $id, $param, $language);
    }

    ?>

  5. Buat MY_url_helper.php di C:/xampp/htdocs/codeigniter/system/application/libraries dan isikan listing program sebagai berikut:
  6. <?php  if (!defined(‘BASEPATH’)) exit(‘No direct script access allowed’);

    function alt_site_url($uri = ”)
    {
    $CI =& get_instance();
    $actual_lang=$CI->uri->segment(1);
    $languages=$CI->config->item(‘lang_desc’);
    $languages_useimg=$CI->config->item(‘lang_useimg’);
    $ignore_lang=$CI->config->item(‘lang_ignore’);
    if (empty($actual_lang))
    {
    $uri=$ignore_lang.$CI->uri->uri_string();
    $actual_lang=$ignore_lang;
    }
    else
    {
    if (!array_key_exists($actual_lang,$languages))
    {
    $uri=$ignore_lang.$CI->uri->uri_string();
    $actual_lang=$ignore_lang;
    }
    else
    {
    $uri=$CI->uri->uri_string();
    $uri=substr_replace($uri,”,0,1);
    }
    }
    $alt_url='<ul>’;
    foreach ($languages as $lang=>$lang_desc)
    {
    if ($actual_lang!=$lang)
    {
    $alt_url.='<li><a href=”‘.config_item(‘base_url’);
    if ($lang==$ignore_lang)
    {
    $new_uri=ereg_replace(‘^’.$actual_lang,”,$uri);
    $new_uri=substr_replace($new_uri,”,0,1);
    }
    else
    {
    $new_uri=ereg_replace(‘^’.$actual_lang,$lang,$uri);
    }
    $alt_url.=$new_uri.'”>’;
    if ($languages_useimg){
    $alt_url.= ‘<img src=”‘.base_url().’images/’.$lang.’.gif” alt=”‘.$lang_desc.'”></a></li>’;
    }
    else
    {
    $alt_url.= $lang_desc.'</a></li>’;
    }
    }
    }
    $alt_url.='</ul>’;
    return $alt_url;
    }

    ?&gt

  7. Buat MY_Config.php di C:/xampp/htdocs/codeigniter/system/application/libraries dan isikan listing program sebagai berikut:
  8. <?php  if ( ! defined(‘BASEPATH’)) exit(‘No direct script access allowed’);

    class MY_Config extends CI_Config {

    function MY_Config() {
    parent::CI_Config();
    log_message(‘debug’, “MY Config Class Initialized”);
    $this->load(‘language’);
    }

    function i18n_url($uri = ”, $language = ”) {
    global $LANG;
    $uri = $LANG->i18n($uri, $language);
    return parent::site_url($uri);
    }

    }

    ?>

  9. Buat language.php di C:/xampp/htdocs/codeigniter/system/application/config dan isikan listing program sebagai berikut:
  10. <?php  if ( ! defined(‘BASEPATH’)) exit(‘No direct script access allowed’);

    $domains = array(
    ‘domain.id’  => ‘indonesia’,
    ‘domain.en’ => ‘english’
    );

    $host = implode(‘.’, array_slice(explode(‘.’, $_SERVER[‘HTTP_HOST’]), -2));

    if (key_exists($host, $domains)) {
    $config[‘language’] = $domains[$host];
    }
    else {
    $config[‘language’] = ‘indonesia’;
    }

    // available languages (key: language code, value: language name)
    $config[‘languages’] = array(‘id’ => ‘indonesia’, ‘en’ => ‘english’);

    // available countries (key: country code, value: language code)
    $config[‘country_languages’] = array(‘id’ => ‘id’, ‘uk’ => ‘en’, ‘us’ => ‘en’, ‘au’ => ‘en’);

    // debug if line is not found as [line]
    $config[‘language_debug’] = TRUE;

    ?>

  11. Buat general_lang.php di C:/xampp/htdocs/codeigniter/system/application/language/english dan isikan listing program sebagai berikut:
  12. <?php
    $lang[‘home’] = “Home”;
    ?>

  13. Buat general_lang.php di C:/xampp/htdocs/codeigniter/system/application/language/indonesia dan isikan listing program sebagai berikut:
  14. <?php
    $lang[‘home’] = “Beranda”;
    ?>

  15. Buat folder indonesia di C:/xampp/htdocs/codeigniter/system/language dan copykan isi dari folder english ke dalamnya.
  16. Edit config.php di C:/xampp/htdocs/codeigniter/system/application/config sebagai berikut:
  17. $config[‘language’]    = “english”;

    //default language abbreviation
    $config[‘language_abbr’] = “en/language”;

    //set available language abbreviations
    $config[‘lang_uri_abbr’] = array(“id” => “indonesia”, “en” => “english”);

    //ignore this language abbreviation
    $config[‘lang_ignore’] = “xx”;

  18. Edit routes.php di C:/xampp/htdocs/codeigniter/system/application/config sebagai berikut:
  19. $route[‘default_controller’] = “home”;
    $route[‘scaffolding_trigger’] = “”;

    $route[‘^(\w{2})/(.*)$’] = ‘$2’;
    $route[‘^(\w{2})$’] = $route[‘default_controller’];

  20. Cara pemanggilan di views sebagai berikut:
  21. <?php echo lang(‘home’); ?>

Advertisements
Comments
  1. indra says:

    bisa gak minta dalam 1 file yg sudah jadi….
    terima kasih….

    • wajar says:

      kalau tentang multilanguage kemarin sudah saya gabungkan dengan kerjaan yg laen, jadi mohon maaf saya gak bisa share filenya
      tapi intinya seperti yg saya tulis di atas, silahkan ikuti langkah-langkahnya 🙂

  2. Lucky Mahrus says:

    (*) Saya coba terapkan dengan CI 2.0 kok ga jalan ya pak? Saya sudah coba terapkan script di atas dg sedikit modifikasi, khususnya misal pada (tanda petik atau kutip):
    – “home” menjadi “Home”
    – ‘indonesia’ menjadi ‘indonesia’

    (*) Kemudian pada config/autoload.php saya tambahkan seperti ini:
    – $autoload[‘libraries’] = array(‘language’);
    – $autoload[‘helper’] = array(‘language’);
    – $autoload[‘config’] = array(‘language’);
    – $autoload[‘language’] = array(‘general’);

    (*) Muncul error yg kira-kira pesannya seperti ini:
    An Error Was Encountered
    Unable to load the requested class: Language

    1. Kira-kira salah apanya ya pak?
    2. Kalau mau switch language nya gmn?
    3. ada halaman link/demo nya ga?

    Terima kasih.

    • Lucky Mahrus says:

      weh lah.. kok tanda petiknya di sini malah jd sama ya? padahal yg saya tulis beda.. saya jg kirim ke inbox fb pak..

    • wajarsana says:

      maaf baru balas..
      1. coba tambahkan ini saja pada config/autoload.php -> $autoload[‘helper’] = array(‘language’);
      2. switch language tergantung penamaan pada general_lang.php, diusahakan sama sehingga akan berubah otomatis ketika switch indonesia atau english

      kalau dirasa kurang mengerti, mending saya jelaskan lewat chat saja (id ym: wajar_jaya)

  3. Lucky Mahrus says:

    berarti nantinya pd URL jd spt ini..?
    http://localhost/en/
    dan/atau
    http://localhost/id/

    gitu ya pak? Klo biar ga perlu nampil tambahan /id atau /en wkt switch lang nya gmn pak?

    Ok deh pak.. Nanti saya add YM nya.. Biasanya waktu lengang nya jam brp ya? Jd ga ganggu kerja.. Nuwun..

  4. pak butuh tutorial tentang multi languange dengan db donk pak
    ? masih stuck dengan kerjaan ini

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s