Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Strona z obsługą wielu języków
JacekQ
post
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)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
DeyV
post
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)
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 9.10.2025 - 18:52