sql >> Databáze >  >> RDS >> Mysql

Jak spustit nebo načíst soubory .po/.mo pro lokalizaci v php

Nejprve musíte PHP informovat, jaké národní prostředí a doménu používáte.

putenv("LANG=da_DK"); 
setlocale('LC_ALL', "da_DK"); 
bindtextdomain("mycatalog", "./locale/");  
textdomain("mycatalog");

V tomto případě mám dánský překlad a soubor s názvem mycatalog.mo (a .po). Tyto soubory jsou umístěny (z vašeho kořenového adresáře) zde:locale/da_DK/LC_MESSAGES/mycatalog.mo/po

Chcete-li zobrazit svůj překlad, udělejte toto:

echo _("Hello world");   // Which would become "Hej verden"

_(); je alias gettext(); Chytré na gettexts je to, že pokud neexistuje překlad, nebudete mít ve svém uživatelském rozhraní ošklivý jazykový kód jako „MSG_HELLO_WORLD“, ale místo toho lepší alternativu:Jednoduše prostý anglický text.

V souboru messages.po musíte mít všechny zprávy (rozlišují se malá a velká písmena a také s ohledem na použité čárky, tečky, dvojtečky atd.) v tomto formuláři:

msgid "Hello world!"
msgstr "Hej verden!"

Když to přidáte do svého souboru .po, otevřete tento soubor v poeditu, stisknete "Uložit" a vygeneruje se soubor .mo. Tento soubor je nahrán do stejného adresáře jako soubor .po (obvykle něco jako \locale\da_DK\LC_MESSAGES\ z kořenového adresáře skriptu)

K překladu dynamického/variabilního obsahu můžete použít – mimo jiné – sprintf, a to tímto způsobem:

echo sprintf(_("My name is %s"), $name);

V tomto případě se %s objeví v souboru .po; Když máte přeložený řetězec (který obsahuje %s), sprintf se postará o nahrazení %s obsahem proměnné. POKUD musí být proměnná také přeložena, můžete to udělat takto:

echo sprintf(_("The color of my house is %s"), _($color));

Pak nepotřebujete celou větu pro každou barvu, ale i tak dostanete barvy přeložené.

Je důležité poznamenat, že při prvním spuštění .mo na serveru se uloží do mezipaměti - a neexistuje způsob, jak tento soubor odstranit z mezipaměti bez restartování (Apache nebo podobný by měl stačit). To znamená, že jakékoli změny, které v .mo provedete po prvním použití, nebudou účinné. Existuje řada hacků, jak to obejít, ale upřímně řečeno, většinou nejsou moc hezké (zahrnují zkopírování .mo, přidání času () za ním a následné importování a opětovné uložení do mezipaměti). Tento poslední odstavec je důležitý pouze v případě, že nebudete překládat celou věc najednou, ale po částech.

Pokud si chcete v určitém okamžiku vytvořit svůj vlastní překladatelský nástroj, tento nástroj vám pomůže převést .po na .mo pomocí PHP:

http://www.josscrowcroft.com/2011/code/php-mo-convert-gettext-po-file-to-binary-mo-file-php/



  1. Android Studio 3.0 canary 1 :Chyba syntaxe SQL

  2. PL/pgSQL kontroluje, zda řádek existuje

  3. MySql dotazový analyzátor – bezplatná řešení

  4. Chyba při použití souboru oracle.dataaccess.dll