čtvrtek 12. července 2018

Lokalizace v PHP

Jak psát vícejazyčné aplikace v PHP? PHP disponuje prostředky pro použití lokalizačních souborů. Zdrojový předpis pro lokalizované popisky pro různé jazyky jsou v .po souboru:  

Obsah messages.po
  
################################################################
# Hlavní stránka
################################################################
msgid "Main Page"
msgstr "Hlavní stránka"

################################################################
# Navbar
################################################################
msgid "Current Time"
msgstr "Aktuální čas"

msgid "Logout"
msgstr "Odhlásit"



Tento textový soubor je potřeba převést do binárního .mo tvaru:

msgfmt messsages.po -o messages.mo 

 pozn. msgfmt je součástí gettext na unixu. Pro Windows nainstalujte Cygwin jehož součástí je i msgfmt nebo je možné použít například POEDIT (https://poedit.net/).



Inicializace localizace je v PHP následující:
 
function initialize_i18n($locale) {
 $locales_root = $_SERVER['DOCUMENT_ROOT'] . "/locale";
 putenv('LANG='.$locale);
 setlocale(LC_ALL,$locale);
 if ( ! defined( 'LC_MESSAGES' ) ) {
  define( 'LC_MESSAGES', 5 );
 }
 setlocale(LC_MESSAGES,$locale);
 setlocale(LC_CTYPE,$locale);
 $current='messages';
 bindtextdomain($current,$locales_root);
 textdomain($current);
}

initialize_i18n('cs_CZ');

Inicializace určuje umístění lokalizačních souborů .po a .mo do adresáře /locale. Tento adresář pak obsahuje podadresáře podle lokalizací:
/locale
  /cs_CZ
    /LC_MESSAGES
      messages.po
      messages.mo
  /en_US
    /LC_MESSAGES
      messages.po
      messages.mo

V PHP kódu pak použít funkci _ s parametrem dohledávaného klíče (pokud klíč není v messages.mo nalezen, zobrazí se vlastní klíč).

Fragment PHP kódu:

<a class='navbar-brand' href='#'>"<%php echo _('Main Page') %>"</a>
 
 

Žádné komentáře:

Okomentovat