Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да стартирате или заредите .po/.mo файлове за локализация в php

Преди всичко трябва да информирате PHP кой локал и домейн използвате.

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

В този случай имам превод на датски и файл, наречен mycatalog.mo (и .po). Тези файлове се поставят (от вашия корен) тук:locale/da_DK/LC_MESSAGES/mycatalog.mo/po

За да покажете превода си, ще направите това:

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

_(); е псевдоним на gettext(); Умното нещо на gettexts е, че ако няма превод, няма да имате грозен езиков код като „MSG_HELLO_WORLD“ в потребителския си интерфейс, а вместо това по-добра алтернатива:Просто обикновен текст на английски.

Във файла messages.po трябва да имате всички съобщения (чувствителни към главни и малки букви, а също и по отношение на използваните запетаи, точки, двоеточия и т.н.) в този формуляр:

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

Когато добавите това към вашия .po файл, отваряте този файл в poedit, натискате "Запазване" и той ще генерира .mo файл. Този файл се качва в същата директория като .po файла (обикновено нещо като \locale\da_DK\LC_MESSAGES\ от корена на скрипта)

За да преведете динамично/променливо съдържание, можете да използвате - наред с други неща - sprintf, по този начин:

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

В този случай %s ще се появи във файла .po; Когато имате преведения низ (който съдържа %s), sprintf ще се погрижи да замени %s с променливото съдържание. АКО променливата също трябва да бъде преведена, можете да направите това:

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

Тогава нямате нужда от пълно изречение за всеки цвят, но все пак получавате преведени цветове.

Важно е да се отбележи, че първият път, когато .mo се стартира на сървъра, той се кешира - и няма начин да премахнете този файл от кеша без рестартиране (самият Apache или други подобни трябва да са достатъчни). Това означава, че всички промени, които правите в .mo след първото му използване, няма да бъдат ефективни. Има редица хакове за заобикаляне на това, но честно казано, те най-вече не са много красиви (те включват копиране на .mo, добавяне на time() зад него и след това импортиране и кеширане отново). Този последен абзац е от значение само ако няма да превеждате цялото наведнъж, а на парчета.

Ако искате да създадете свой собствен инструмент за превод в даден момент, този инструмент ви помага да конвертирате .po в .mo с помощта на PHP:

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Стандарти за добавяне на дата/час?

  2. Изберете последните N реда от MySQL

  3. Свържете се с MySQL на AWS от локална машина

  4. Python и Django OperationalError (2006, „MySQL сървърът е изчезнал“)

  5. Показване на всички таблици. Функционалност, подобна на описанието