![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 3.12.2003 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Ogólnie chodzi mi o stronę która będzie wyświetlała swoją zawartość w kilku językach.
Mam pytania związane ze stronami kodowymi ale zanim je zadam opiszę na przykładzie o co mi chodzi. W bazie danych jest tabelka teksty z kolumną tekst char(100). Skrócona wersja index.php: [php:1:c7d896a0ae]<?php $pol = mysql_connect(); switch($strona_kodowa) { // ... case "german1" : $HTMLCodePage = "..."; $DBCodePage = "german1"; break; default: $HTMLCodePage = "iso-8859-2"; $DBCodePage = "latin2"; }; // Print1 print("<html><head><meta http-equiv="Content-Type" content="text/html; charset=$HTMLCodePage"></head><body>n"); $res = mysql_query("select convert(tekst using $DBCodePage) from teksty", $pol); while($row = mysql_fetch_row($res)) // Print2 print("$row[0]<br>n"); print("</body></html>n"); mysql_close($pol); ?>[/php:1:c7d896a0ae] Zakładając że plik index.php został napisany pod windowsem (strona kodowa 1250) to w jakiej stronie będzie tekst oznaczony Print1 a w jakiej Print2 ? Jeżeli wszystkie teksty (oprócz znacznników html) pojawiające się na stronie będą pobierane z bazy to lepiej konwertować je tak jak w przykładzie czy pisać własną funkcję konwertującą i stosować ją zamiast print ? Ewentualnie jak najprościej zrobić stronę która pobiera z bazy teksty w różnych językach i pokazuje je na stronie ? Dzięki za odpowiedź(i) |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarząd Postów: 2 277 Pomógł: 6 Dołączył: 27.12.2002 Skąd: Wołów/Wrocław ![]() |
zasada jest banalna. Nie jest to wiec rozwiązanie opytmalne, ani najszybsze z możliwych, ale w 90% wystarcząjace.
To na początek, po deklaracji smarty [php:1:c64e18d14e]<?php function do_translation ($params, $content, &$smarty) { if(isset( $GLOBALS['LANG_INFO'][$content] ) ) { echo $GLOBALS['LANG_INFO'][$content]; } else { echo $content; } } $smarty->register_block("t", "do_translation"); ?>[/php:1:c64e18d14e] Oprócz tego musimy zaincludować plik zawierajacy globalna tablicę - u mnie w przykładzie: $GLOBALS['LANG_INFO'] = array(); z odpowiednim tłumaczeniem. Chyba raczej łatwo się domyślić, że należy ładowac tylko 1 plik, z 1, odpowiednią wersją (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Wygląda ona np. tak: [php:1:c64e18d14e]<?php $LANG_INFO = array( ## napisy 'ARTYKUŁY' => 'ARTICLES', 'WERSJA_DO_DRUKU' => 'Print version', ); ?>[/php:1:c64e18d14e] Oczywiście z uwagi na to, że nie jest indexowana stałymi, lecz zwykłymi stringami, może zawierać jako identyfikatory pełne wyrażenia w domyślym języku. (znaczne to ułatwia tworzenie strony, a także powoduje, że poprawny (choć w niepoprawnym języku) tekst jest wyświetlany zawsze, nawet jeśli odpowiedni blok nie jest przetłumaczony. Użycie wygląda ... np. tak: [xml:1:c64e18d14e] <span class="tekst" style="font-size: 8pt; color: #181750; font-weight: bold;"> {t}ARTYKUŁY{/t} < /span> [/xml:1:c64e18d14e] Oczywiście na forum smarty (oraz w wiki) pokazano również znacznie bardziej rozbudowane rozwiązania, oparte np. na bazie danych lub getText, ale po takowe musicie sięgnąć już sami (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) |
|
|
![]() ![]() |
![]() |
Aktualny czas: 9.10.2025 - 18:52 |