0

Fitur pengubah bahasa tidak bekerja pada Senayan E-Library Management System

Posted December 29th, 2011 in Web Programming and tagged , , by Rumahweb

Senayan merupakan cms karya anak bangsa yang digunakan untuk mengatur sirkulasi dan management perpustakaan. Senayan mulai banyak digunakan selain karena fiturnya lengkap, Senayan juga disebarkan secara open source sehingga bisa digunakan oleh siapa saja secara gratis.

Senayan di lengkapi dengan fitur pengubahan bahasa. Tetapi di beberapa installasi, fitur pengubahan bahasa tersebut tidak berjalan dengan baik. Senayan menggunakan php-gettext untuk meng-emulasi-kan fungsi gettext yang terdapat pada PHP.  Walaupun sudah ada banyak hal yang dilakukan pada server (update versi php, recompile module, dsb) tetapi fitur pengubahan bahasa tersebut belum bisa berjalan dengan baik. Solusi terakhir yang bisa dilakukan adalah mengubah kode Senayan.

Pengubahan ini dicoba atas petunjuk dari file localisation.php :

NOTE: The gettext library might be used, if it is available.
* The problem is that mo files are cached by the extension, so a
* server restart is necessary if these files are updated (e.g. by
* a senayan update). I replaced all _(”) with __(”), so
* php-gettext is always used, thus circumventing this problem.
* Obviously there is no real speed disadvantage, since this is the
* way wordpress does it.
* Developers should use __(”) and _ngettext in code!

Langkah pertama adalah dengan mengubah file localisation.php yang terdapat pada direktori lib/lang. Pengubahan dilakukan pada baris berikut :

PHP:
  1. // set php-gettext library
  2. require LANGUAGES_BASE_DIR.'php-gettext'.DIRECTORY_SEPARATOR.'gettext.inc';
  3.  
  4. // gettext setup
  5. $locale = $sysconf['default_lang'];
  6. $domain = 'messages';
  7. $encoding = 'UTF-8';
  8.  
  9. // set language to use
  10. T_setlocale(LC_ALL, $locale);
  11. // set locales dictionary location
  12. _bindtextdomain($domain, LANGUAGES_BASE_DIR.'locale');
  13. // codeset
  14. _bind_textdomain_codeset($domain, $encoding);
  15. // set .mo filename to use
  16. _textdomain($domain);

Menjadi :

PHP:
  1. // set php-gettext library
  2. #require LANGUAGES_BASE_DIR.'php-gettext'.DIRECTORY_SEPARATOR.'gettext.inc';
  3.  
  4. // gettext setup
  5. $locale = $sysconf['default_lang'];
  6. $domain = 'messages';
  7. $encoding = 'UTF-8';
  8.  
  9. // set language to use
  10. setlocale(LC_ALL, $locale);
  11. // set locales dictionary location
  12. bindtextdomain($domain, LANGUAGES_BASE_DIR.'locale');
  13. // codeset
  14. bind_textdomain_codeset($domain, $encoding);
  15. // set .mo filename to use
  16. textdomain($domain);

Langkah terakhir adalah dengan mengubah __(”) menjadi _(”) pada semua file yang digunakan oleh Senayan. Pada Linux, pengubahan ini dapat dipermudah dengan perintah sed dan for (loop, untuk membaca semua file) :

PHP:
  1. for i in `find . -type f`; do sed -i 's@__(@_(@g' $i; done

Jika ada kendala mengenai pengubahan kode tersebut silahkan hubungi support kami.