![]() |
![]() ![]() |
![]() |
![]()
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: 3 503 Pomógł: 28 Dołączył: 17.10.2002 Skąd: Wrocław ![]() |
Pro -> php
Ogólna idea, bo zmęczony jestem i nie chce mi sie dokładnie wszystkiego tłumaczyć: [php:1:024bdf0d87]<?php // lang.pl.php $arrLang['Yes'] = 'Tak'; $arrLang['No'] = 'Nie'; $arrLang['End'] = 'Koniec'; ?>[/php:1:024bdf0d87][php:1:024bdf0d87]<?php // lang.de.php $arrLang['Yes'] = 'Ja'; $arrLang['No'] = 'Nein'; $arrLang['End'] = 'Ende'; ?>[/php:1:024bdf0d87][php:1:024bdf0d87]<?php // lang.en.php $arrLang['Yes'] = 'Yes'; $arrLang['No'] = 'No'; $arrLang['End'] = 'End'; ?>[/php:1:024bdf0d87][php:1:024bdf0d87]<?php // index.php $strLang = 'pl'; require_once( 'lang.'.$strLang.'.php' ); echo $arrLang['Yes'].'<br/>'.$arrLang['No'].'<br/>'.$arrLang['End']; ?>[/php:1:024bdf0d87] -------------------- |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarząd Postów: 2 277 Pomógł: 6 Dołączył: 27.12.2002 Skąd: Wołów/Wrocław ![]() |
Jesli pracujesz na smarty - na ich forum pojawił sie kiedys plugin pozwalajacy na robienie tego o czym mówi scanner przy pomocy skadni {t}tekst do przetłumaczenia{/t}
Jeśli bedzie cię to interesować - napisz - a wrzucę tu kod. -------------------- "Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 50 Pomógł: 0 Dołączył: 15.02.2003 Skąd: Ziemia Ostrzeżenie: (0%) ![]() ![]() |
Cytat Jesli pracujesz na smarty - na ich forum pojawił sie kiedys plugin pozwalajacy na robienie tego o czym mówi scanner przy pomocy skadni {t}tekst do przetłumaczenia{/t}
Jeśli bedzie cię to interesować - napisz - a wrzucę tu kod. Jeśli nie jego to mnie, bo wlasnie robie to samo przy użyciu tej samej techniki podanej przez scanner-a. -------------------- Warsztat: IIS 6.0 | PHP 4.3.10 && 5.0.3 | MySQL 4.1.9 | Smarty 2.6.7 | PEAR | EditPlus 2 Produkcja: FlipTiM |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 3.12.2003 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Dzięki za odpowiedzi ...
Wymyśliłem coś podobnego do tego co proponuje scanner tylko w oparciu o bazę danych bo oprócz standardowych słówek (np. szukaj, następny, poprzedni, tak, nie itp) będzie dosyć dużo tekstów. Bardziej interesuje mnie problem związany ze stronami kodowymi. |
|
|
![]()
Post
#6
|
|
![]() 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ą ![]() 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 ![]() -------------------- "Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 33 Pomógł: 0 Dołączył: 11.04.2002 Skąd: Rzeszów Ostrzeżenie: (0%) ![]() ![]() |
To ja mam dodatkowe pytanie odnosnie tego temtu. Jak bedzie lepiej, zrobic stronke w wielu jezykach na zasadzie podanej przez scannera, plikami w odpowiednim jezyku (wkoncu problem pojawia sie jak np robimy cmsa z mozliwoscia instalowania kolejnych modulow i kazdy modul moze miec, czesto powinien wlasne teksty i teraz co zrobic z tymi tekstami, dopisywac do pliku czy tworzyc przy module dodatkowo pliki z tekstami, tutaj jest kolejna wada bo pozniej skrypt troche zwolni jak bedize mial do wczytania np 20 plikow tekstowych) czy na zasadzie wpisania tekstow do odpowiedniej tabeli do bazy danych, tworzac np jedna tabele z nazwa jezyka i kodowaniem, a druga z nazwa jezyka i tekstem do zamiany i przetlumaczonym i ta cala tabele np pobrac?
|
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarząd Postów: 2 277 Pomógł: 6 Dołączył: 27.12.2002 Skąd: Wołów/Wrocław ![]() |
uważam, że najlepszym rozwiązaniem są w tym przypadku pliki.
Aby ułatwić zarzadzanie plikami z tłumaczeniami, mozna napisać prosty mechanizm ładując odpowiednie pliki z wcześniej przygotowanej listy modułów i łączący dane z nich pochodzące do postaci obsługiwanej przez nasz CMS. A co do spowalniania - zaincludowanie 20 plików ma minimalny wpływ na prędkość wykonywania sie skryptu. Na pewno mniejszy, niż pobranie z bazy wszystkich potrzebnych wpisów, i ładowanie ich do tablic. -------------------- "Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.07.2025 - 00:38 |