Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Smarty, wiele jezykow
Forum PHP.pl > Forum > PHP
DBR
witam,

temat stary jak swiat, przejrzalem troche tematow, poczytalem ale dalej nie wiem na co sie zdecydowac... mianowicie mam strone obslugujaca wiele jezykow. zawartosc jest ta sama, zmienia sie interfejs, menu, stopka, nazwy pol formularzy, buttony itd. zastanawiam sie jakiego rozwiazania uzyc do tlumaczenia, aby szlo to w miare sprawnie, szybko dzialalo i nie ograniczalo mnie w przyszlosci.

nie moge zalozyc osobnych folderow templatesLANG, bo strona bedzie zmieniala sie bardzo czesto i nie bede zmienial kodu w kilku/kilkunastu plikach tpl.

wpadlem na kilka rozwiazan:

1. trzymanie tlumaczen w plikach configu, ladowanie configu odpowiedniego dla danej wersji jezykowej (dodatkowo ladowanie sekcji [homepage] zeby troche odciazyc) i tam trzymanie tlumaczen w postaci:

hello = Witaj
email = Adres email
password = Hasło

a potem odwolywanie sie do nich z formularza przez {#hello#}

2. niektorzy robia to na xmlach... przyklad takiego rozwiazania - http://stackoverflow.com/questions/6476558...tiple-languages co jest juz chyba troche lepsze, bo pozwala przemycic zmienna w tlumaczeniu i tresc typu "Witaj LOGIN, jak sie czujesz?" nie trzeba rozbijac na dwa odrebne bloki tlumaczen jak w powyzszym przypadku.

3. trzymanie tlumaczen w tablicy w php, assign tablicy do tpl i tam korzystanie z nich, podobnie jak w 1. pkt.

4. sa tez jakies spore klasy jak http://smarty.incutio.com/?page=SmartyMultilanguageSupport ale nie wiem czy to nie jest zbyt wielkie dla mnie.

pomijam kwestie tlumaczenia komunikatow i innych elementow JS, bo z tym sobie poradzilem. trzymanie oddzielnych tlumaczen dla potrzeby PHP rowniez mam obcykane. strony statyczne ktore nie bede sie czesto zmieniac trzymam w bazie albo osobnych podkatalogach z tpl, wiec z tym tez nie ma problemu.

tak wiec zastanawiam sie na ktore rozwiazanie sie zdecydowac i bylbym rad za wszelkie rady i przemyslenia osob ktore korzystaly lub nie korzystaly z ktorychs z wymienionych sposobow albo znaja jakies inne, lepsze.
rocktech.pl
Witam.

gettext + Smarty block.t

Użycie:
  1. echo _('Komunkiat z php');

[SMARTY] pobierz, plaintext
  1. {t}Witaj login{/t}
[SMARTY] pobierz, plaintext

Zalety:
- jedne wersje wszystkich plików (php i tpl)
- wygenerowane pliki .po gotowe do tłumaczenia np z PoEdit
DBR
ach, no tak, zapomnialem o gettexcie. dzieki za przypomnienie.

tak apropos... testowalem go kiedys i teraz chcialem znowu ale mam jakis problem, poniewaz na serwerze mi dziala, natomiast na localu nie... wiem ze to kilka linijek kodu i ciezko popelnic blad ale chyba nie w kodzie tkwi problem tylko gdzies po stronie instalacji apacha czy jego ustawieniach... mianowicie nie znajduje mi tych tlumaczen mimo podawania sciezki na kilka roznych sposobow i ustawiania locali w rozny sposob:

  1. putenv("LANGUAGE=de_DE");
  2. putenv("LC_ALL=de_DE");
  3. setlocale(LC_ALL, 'de_DE');
  4.  
  5. $domeny = array(
  6. 'locale/.',
  7. 'locale/',
  8. 'locale\\',
  9. 'locale',
  10. '/locale',
  11. './locale',
  12. '../locale',
  13. '/../locale',
  14. '../../locale',
  15. 'locale',
  16. );
  17.  
  18. foreach ($domeny as $domena)
  19. {
  20. echo "###$domena###";
  21. echo "<br><br>";
  22.  
  23. echo bindtextdomain("default", $domena);
  24. echo "<br>";
  25. bind_textdomain_codeset("default", 'UTF-8');
  26. textdomain("default");
  27.  
  28. echo gettext("Translate me");
  29. echo '<br />';
  30. echo _("I'm a string:");
  31.  
  32. echo "<br><br>";
  33. }


czasem nie chwyta domeny (co jest jasne, bo podaje idiotyczna sciezke) a czasem opkazuje C:\Eclipse 3.3\workspace\nazwa_projektu\locale ale dalej nic.

o jakichs problemach z ustawieniem wyczytalem tu http://php.net/manual/en/function.gettext.php stosuje chyba kazde z mozliwych rozwiazan i nic...

aha, jak wspomnialem na home.pl wszystko dziala jak trzeba, na localu nie mimo ze gettext jest enabled. to pewnie jakis czeski blad albo jakis myk trzeba zastosowac :(

ps: to taki roboczy kod, testowalem rozne warianty ustawiania locali i przypisywania domeny ale nie chodzi.

ps... niestety to tez nie pomaga... http://www.php.net/manual/en/function.setlocale.php#89076
rocktech.pl
Witam.

Zakładam że:

Kod
php -m | grep gettext
gettext

U mnie wygląda to tak:
  1. //Daj bezwzględna ścieżkę
  2. define("BASEDIR","/home/me/public_html/app");
  3. function set_app_lang($lang) {
  4. bindtextdomain("messages", BASEDIR."/locale");
  5. $_SESSION['lang']=$lang;
  6. setlocale(LC_MESSAGES, "$lang.utf8");
  7. putenv("LANG=$lang.utf-8");
  8. bind_textdomain_codeset("messages", "UTF-8");
  9. textdomain("messages");
  10. }

Struktura katalogów w locale i listing:

Kod
ls -l /home/me/public_html/app/locale/de_DE/LC_MESSAGES
messages.mo
messages.po
DBR
niestety nie ruszy mi to na localnym xamppie postawionym na Windowsie, blad lezy gdzies indziej. ale niewazne, bardziej zalezy mi na jakichs innych opiniach o tlumaczeniach w smartym :)
marins
Cytat(DBR @ 26.01.2012, 16:42:40 ) *
2. niektorzy robia to na xmlach... przyklad takiego rozwiazania - http://stackoverflow.com/questions/6476558...tiple-languages co jest juz chyba troche lepsze, bo pozwala przemycic zmienna w tlumaczeniu i tresc typu "Witaj LOGIN, jak sie czujesz?" nie trzeba rozbijac na dwa odrebne bloki tlumaczen jak w powyzszym przypadku.


w smarty także jest to możliwe - zmienne z config'a również można modyfikować:

pl.cfg
results = "Results %s to %s of %s total"

  1. {#results#|sprintf:$start:$end:$total}



A jak wyglądają Twoje linki www w różnych wersjach językowych?
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.