Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Internacjonalizacja aplikacji
Forum PHP.pl > Forum > PHP
phpion
Hej!
Mam problem z gettext(). Postepuje tak jak pisza w 'PHP4. Zaawansowane programowanie' + na http://pl2.php.net/manual/pl/ref.gettext.php tj. tworze plik witaj.php
  1. <?php
  2. print gettext("Witaj!");
  3. print gettext("Jak sie masz?");
  4. ?>

wykonuje w konsoli komende wydrebniajaca frazy do translacji. Powstaje mi plik witaj.po. Tlumacze sobie te 2 frazy i poleceniem tworze plik witaj.mo. Strukture katalogow mam taka:
  1. katalog glowny:
  2. witaj.php
  3. locale
  4. en
  5. LC_MESSAGES
  6. witaj.mo
  7. witaj.po
  8. pl
  9. LC_MESSAGES
  10. witaj.mo
  11. witaj.po

Skrypt wyglada ostatecznie tak:
  1. <?php
  2. $language = "en_EN";
  3. putenv("LANGUAGE=$language");
  4. putenv("LANG=$language");
  5. setlocale(LC_ALL, $language);
  6. putenv("LC_ALL=$language");
  7. bindtextdomain("witaj", "./locale");
  8. textdomain("witaj");
  9.  
  10. print gettext("Witaj!");
  11. print gettext("Jak sie masz?");
  12. ?>

Za nic w swiecie nie chce tlumaczyc napisow sad.gif Co robie zle? Tudziez czego nie robie?

PS: phpinfo() podaje:
  1. gettext
  2. GetText Support enabled
cyphelf
Katalog powinien mieć nazwę taką jak locale, a u Ciebie one są inne. Zamiast 'en' powinno być w tym przypadku 'en_EN', a zamiast 'pl' powinno być 'pl_PL'.
phpion
Dzieki za odpowiedz jednak to nie to :/ nadal nie tlumaczy tekstow.
cyphelf
A wklej jeszcze wpisy z plików .po dla obu tekstów.
phpion
Wykonalem jeszcze raz wszystkie kroki, zeby nie bylo zadnych rozbieznosci. Utowrzylem plik witaj.po i witaj.mo tylko dla wersji angielskiej. Oto plik witaj.po z en_EN:
  1. # SOME DESCRIPTIVE TITLE.
  2. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
  3. # This file is distributed under the same license as the PACKAGE package.
  4. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
  5. #
  6. #, fuzzy
  7. msgid ""
  8. msgstr ""
  9. "Project-Id-Version: PACKAGE VERSION\n"
  10. "Report-Msgid-Bugs-To: \n"
  11. "POT-Creation-Date: 2006-12-11 16:18+0100\n"
  12. "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
  13. "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
  14. "Language-Team: LANGUAGE <LL@li.org>\n"
  15. "MIME-Version: 1.0\n"
  16. "Content-Type: text/plain; charset=CHARSET\n"
  17. "Content-Transfer-Encoding: 8bit\n"
  18.  
  19. #: witaj.php:10
  20. msgid "Witaj!"
  21. msgstr "Hallo!"
  22.  
  23. #: witaj.php:11
  24. msgid "Jak sie masz?"
  25. msgstr "How do you do?"

Tworzenie pliku *.mo konczy sie komunikatem:
  1. [root@localhost LC_MESSAGES]# msgfmt witaj.po -o witaj.mo
  2. msgfmt: witaj.po: uwaga: Zestaw znaków "CHARSET" nie jest przenośną nazwą kodowania.
  3. Przekodowanie na zestaw znaków użytkownika może nie działać.


Ustawienie kodowania na iso-8859-2 nie wyswietla tego komunikatu ale tlumaczenie nadal nie dziala.
cyphelf
W mojej aplikacji używam gettexta bardzo podobnie (tyle że w klasach, ale w tej sytuacji to bez znaczenia) z takimi różnicami:

- w pliku .po nowe linie oznaczam jako *N* zamiast \n
- kodowanie mam ustawione na UTF-8 zamiast placeholdera CHARSET
- nie ustawiam putenv("LC_ALL=$language");
- w bindtextdomain podaję ścieżkę bezwzględną

Spróbuj to pozmieniać, może się okaże, że to pomoże. Jeśli nie, to zostaną chyba dwie możliwości: albo robisz jakiś błąd w ścieżkach, albo plik .mo jest błędnie kompilowany. Sprawdź jeszcze czy bindtextdomain() zwraca poprawną ścieżkę i czy po ustawieniu zmiennych LANG i LANGUAGES mają one prawidłowe wartości.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.