Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak uruchomić lub załadować pliki .po/.mo do lokalizacji w php

Przede wszystkim musisz poinformować PHP, jakiego języka i domeny używasz.

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

W tym przypadku mam duńskie tłumaczenie i plik o nazwie mycatalog.mo (i .po). Te pliki są umieszczone (z Twojego katalogu głównego) tutaj:locale/da_DK/LC_MESSAGES/mycatalog.mo/po

Aby pokazać swoje tłumaczenie, zrób tak:

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

_(); jest aliasem gettext(); Sprytną rzeczą w gettexts jest to, że jeśli nie ma tłumaczenia, nie będziesz miał brzydkiego kodu języka, takiego jak „MSG_HELLO_WORLD” w interfejsie użytkownika, ale zamiast tego lepszą alternatywę:po prostu zwykły tekst w języku angielskim.

W pliku messages.po musisz mieć wszystkie wiadomości (z uwzględnieniem wielkości liter oraz użytych przecinków, kropek, dwukropków itp.) w tym formularzu:

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

Po dodaniu tego do pliku .po otwórz ten plik w poedit, naciśnij „Zapisz”, a wygeneruje plik .mo. Ten plik jest przesyłany do tego samego katalogu, co plik .po (zazwyczaj coś takiego jak \locale\da_DK\LC_MESSAGES\ z katalogu głównego skryptu)

Do tłumaczenia dynamicznych/zmiennych treści możesz użyć między innymi sprintf, w ten sposób:

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

W takim przypadku %s pojawi się w pliku .po; Gdy masz przetłumaczony ciąg (zawierający %s), sprintf upewni się, że zamienisz %s na zawartość zmiennej. JEŚLI zmienna również musi zostać przetłumaczona, możesz to zrobić:

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

Wtedy nie potrzebujesz pełnego zdania dla każdego koloru, ale nadal otrzymujesz tłumaczenie kolorów.

Ważne jest, aby pamiętać, że przy pierwszym uruchomieniu .mo na serwerze jest buforowany - i nie ma możliwości usunięcia tego pliku z pamięci podręcznej bez ponownego uruchomienia (Apache lub podobny powinien wystarczyć). Oznacza to, że wszelkie zmiany wprowadzone w .mo po pierwszym użyciu nie będą skuteczne. Istnieje wiele hacków, które można obejść, ale szczerze mówiąc, w większości nie są one zbyt ładne (obejmują kopiowanie .mo, dodanie za nim time(), a następnie zaimportowanie i ponowne buforowanie). Ten ostatni akapit ma znaczenie tylko wtedy, gdy nie zamierzasz tłumaczyć całości na raz, ale fragmentami.

Jeśli w pewnym momencie chcesz stworzyć własne narzędzie do tłumaczenia, to narzędzie pomoże Ci przekonwertować .po na .mo za pomocą 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. Najlepszy sposób na przechowywanie i pobieranie synonimów w bazie danych mysql

  2. Blokujesz bazę danych MySQL, aby tylko jedna osoba mogła uruchomić zapytanie jednocześnie?

  3. MySQL ON DUPLICATE KEY UPDATE podczas wstawiania zestawu wyników z zapytania

  4. UTF-8 przez całą drogę

  5. użyj zmiennej dla nazwy tabeli w mysql sproc