Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Internacjonalizacja aplikacji, z wykorzystaniem gettext()
phpion
post 11.12.2006, 11:30:21
Post #1





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




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


Ten post edytował phpion.com 11.12.2006, 11:31:39
Go to the top of the page
+Quote Post
cyphelf
post 11.12.2006, 14:38:41
Post #2





Grupa: Zarejestrowani
Postów: 68
Pomógł: 1
Dołączył: 27.03.2006

Ostrzeżenie: (0%)
-----


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'.


--------------------
lorem ipsum : polska społeczność zend framework
Go to the top of the page
+Quote Post
phpion
post 11.12.2006, 15:06:18
Post #3





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Dzieki za odpowiedz jednak to nie to :/ nadal nie tlumaczy tekstow.
Go to the top of the page
+Quote Post
cyphelf
post 11.12.2006, 15:28:32
Post #4





Grupa: Zarejestrowani
Postów: 68
Pomógł: 1
Dołączył: 27.03.2006

Ostrzeżenie: (0%)
-----


A wklej jeszcze wpisy z plików .po dla obu tekstów.


--------------------
lorem ipsum : polska społeczność zend framework
Go to the top of the page
+Quote Post
phpion
post 11.12.2006, 16:30:08
Post #5





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




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.

Ten post edytował phpion.com 11.12.2006, 16:36:55
Go to the top of the page
+Quote Post
cyphelf
post 11.12.2006, 18:13:05
Post #6





Grupa: Zarejestrowani
Postów: 68
Pomógł: 1
Dołączył: 27.03.2006

Ostrzeżenie: (0%)
-----


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.


--------------------
lorem ipsum : polska społeczność zend framework
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 13.08.2025 - 22:34