Pagina 1 di 3
sito bilingue
Inviato: dom 26 mag 2013, 0:59
da samiel
Ciao gente di Slaacky!
Dovrei realizzare un piccolissimo sito, ma bilingue, italiano e inglese.
Ho spulciato un po' in giro... A vostri giudizio, che soluzione mi conviene adottare?
Vorrei che cliccando sulle solite bandierine apparisse il sito in una lingua
o nell'altra, menu incluso. Con un codice di questo tipo:
Codice: Seleziona tutto
<div id="navlist">
<ul>
<?php
isset($_REQUEST["pagina"]) ? $pagina=$_REQUEST["pagina"] : $pagina="home";
if ($lang == "it")
$leftmenu=array(
"home"=>"",
"camera"=>"Sistemazione",
"prezzi"=>"Prezzi",
"dovesiamo" =>"Dove siamo",
"prenotazione"=>"Prenotazione",
"contatti"=>"Contattaci",
"link"=>"Link utili"
);
else if ($lang == "en")
$leftmenu=array(
"home"=>"",
"camera"=>"Accomodation",
"prezzi"=>"Prices",
"dovesiamo" =>"Where are we",
"prenotazione"=>"Reservatio",
"contatti"=>"Contacts",
"link"=>"Useful links"
);
$activemenu=0; $folder="home";
foreach($leftmenu as $kmenu=>$vmenu) { if(array_key_exists($pagina,$vmenu) |
$pagina==$kmenu) { $activemenu=$leftmenu[$kmenu]; $folder=$kmenu; } }
if ($lang == "it")
$vocimenu=array(
"home"=>"Home",
"camera"=>"Sistemazione",
"prezzi"=>"Prezzi",
"dovesiamo"=>"Dove siamo",
"prenotazione"=>"Prenotazione",
"contatti"=>"Contatti",
"link"=>"Link utili"
);
else if ($lang == "en")
$vocimenu=array(
"home"=>"",
"camera"=>"Accomodation",
"prezzi"=>"Prices",
"dovesiamo" =>"Where are we",
"prenotazione"=>"Reservatio",
"contatti"=>"Contacts",
"link"=>"Useful links"
);
foreach($vocimenu as $voce=>$vocevisualizzata) { echo '<li>';
if($pagina!=$voce) { echo $voce=="home" ? '<a href=".">' : '<a
href="index.php?pagina='.$voce.'">'; } echo $vocevisualizzata;
if($pagina!=$voce) echo "</a>"; echo "</li>"; } echo "\n";
?>
</ul>
</div><!--navlist-->
come faccio poi a passare le pagine nelle due lingue?
O c'è una soluzione migliore?
Grazie
m
Re: sito biingue
Inviato: dom 26 mag 2013, 12:41
da conraid
così proprio no, diventi matto per ogni modifica o magari aggiunta di una lingua in futuro.
Secondo me ci sono due strade:
- file con costanti delle lingue
- gettext
nel primo caso fai un file con
define('_CASA_', 'Home');
etc
oppure un array
nel secondo caso crei un file .po con i vari strumenti a disposizione, come nei programmi compilati. Io uso podedit
Per vedere degli esempi, il primo caso mediawiki (usa gli array) ed un po' tutto i "vecchi" software. Per il secondo wordpress o phpmyadmin tra gli altri.
Altro modo sarebbe usare tabelle mysql, file xml, etc...
Re: sito bilingue
Inviato: dom 26 mag 2013, 19:21
da samiel
Nel primo caso devo usare i cookies?
Dovre trovo codice pronto da analizzare?
Finora ho trovato in rete cosa banali,
come siti costituiti da una sola pagina.
Il mio sito è molto piccolo, ma in ogni caso
costituito da più pagine. Devo costruire file
per le varie lingue (e questo non è un problema),
e poi darli in pasto a index.php?
Poedit non so nemmeno cosa sia,
devo documentarmi...
m
Re: sito bilingue
Inviato: dom 26 mag 2013, 21:43
da samiel
Ho trovato qualcosa ma mi manca molto...
Parto da un index.php che contiene
Codice: Seleziona tutto
<!-- HeadSectionDl BEGIN -->
<div id="languages">
<a href="index.php?lang=en"><img src="images/en.png" /></a>
<a href="index.php?lang=de"><img src="images/de.png" /></a>
<a href="index.php?lang=es"><img src="images/es.png" /></a>
</div><!--languages-->
<div id="WSTitleDL"><?php echo $lang['HEADER_TITLE']; ?></div>
<div id="WSubTitleDL"><?php echo $lang['SLOGAN']; ?></div>
</div><!-- HeadSectionDl END -->
<div id="TopHzNavSectionDl">
<!-- HeadSectionDl BEGIN -->
<div class="HzNavCntDL">
<ul>
<li><a href="#"><?php echo $lang['MENU_HOME']; ?></a></li>
<li><a href="#"><?php echo $lang['MENU_CAMERA']; ?></a></li>
<li><a href="#"><?php echo $lang['MENU_PREZZI']; ?></a></li>
<li><a href="#"><?php echo $lang['MENU_PRENOTAZIONE']; ?></a></li>
<li><a href="#"><?php echo $lang['MENU_CONTATTI']; ?></a></li>
<li><a href="#"><?php echo $lang['MENU_LINK']; ?></a></li>
</ul>
</div>
</div>
Poi un common.php con i riferimenti ai vari file di linguaggio:
Codice: Seleziona tutto
<?php
session_start();
header('Cache-control: private'); // IE 6 FIX
if(isSet($_GET['lang']))
{
$lang = $_GET['lang'];
// register the session and set the cookie
$_SESSION['lang'] = $lang;
setcookie("lang", $lang, time() + (3600 * 24 * 30));
}
else if(isSet($_SESSION['lang']))
{
$lang = $_SESSION['lang'];
}
else if(isSet($_COOKIE['lang']))
{
$lang = $_COOKIE['lang'];
}
else
{
$lang = 'en';
}
switch ($lang) {
case 'it':
$lang_file = 'lang.it.php';
break;
case 'en':
$lang_file = 'lang.en.php';
break;
case 'de':
$lang_file = 'lang.de.php';
break;
case 'es':
$lang_file = 'lang.es.php';
break;
default:
$lang_file = 'lang.it.php';
}
include_once 'languages/'.$lang_file;
?>
Nel caso poi dell'inglese poi ho un lang.en.php
Codice: Seleziona tutto
<?php
/*
------------------
Language: English
------------------
*/
$lang = array();
$lang['PAGE_TITLE'] = 'My website page title';
$lang['HEADER_TITLE'] = 'My website header title';
$lang['SITE_NAME'] = 'My Website';
$lang['SLOGAN'] = 'My slogan here';
$lang['HEADING'] = 'Heading';
// Menu
$lang['MENU_HOME'] = 'Home';
$lang['MENU_CAMERA'] = 'Accomodation';
$lang['MENU_PREZZI'] = 'Prices';
$lang['MENU_DOVESIAMO'] = 'Where are we';
$lang['MENU_PRENOTAZIONE'] = 'Reservation';
$lang['MENU_CONTATTI'] = 'Contacts';
$lang['MENU_LINK'] = 'Useful links';
?>
Così può funzionare? Ma soprattutto, come e dove
integro gli effettivi link alle pagine?
grazie!
m
Re: sito bilingue
Inviato: dom 26 mag 2013, 22:16
da aschenaz
Piuttosto che alle session, io mi affiderei ai cookie: infatti, se uno sceglie una lingua, non credo lo faccia per una singola sessione. Per cui, imposterei un cookie, che so, per un anno...
Re: sito bilingue
Inviato: dom 26 mag 2013, 22:33
da samiel
In termini di codice?
Ma non è "invasiva" per l'utente la soluzione dei cookies ?
m
Re: sito bilingue
Inviato: dom 26 mag 2013, 22:52
da aschenaz
Ciao Mauro! Andavo così di fretta che non mi ero accorto che eri tu!
Beh, navigando, ti becchi centinaia di cookie al giorno. In un certo senso, sono sì invasivi perché scrivono sul tuo computer, ma in certi frangenti sono quasi insostituibili. Questo è uno di quei casi.
Domani, se riesco, posto un po' di codice...
Re: sito bilingue
Inviato: dom 26 mag 2013, 23:07
da samiel
Eh sì, sono io! Come va, Nino?
comunque io ho disabilitato i cookies,
tranne abilitarli sono in qualche caso indispensabile...
Grazie mille, sto googolando, ma - come scrivevo -
il codice in giro è banale, serve solo per soluzioni
elementarissime, siti di una pagina...
m
Re: sito bilingue
Inviato: lun 27 mag 2013, 11:40
da teox99
a prescidere dal fatto che personalmente penso che gettext sia il miglior modo di procedere ...
vorrei prendere la palla al balzo e chiedervi se ci sono tra voi delle persone che lo utilizzano ...
Re: sito bilingue
Inviato: lun 27 mag 2013, 12:15
da conraid
teox99 ha scritto:a prescidere dal fatto che personalmente penso che gettext sia il miglior modo di procedere ...
vorrei prendere la palla al balzo e chiedervi se ci sono tra voi delle persone che lo utilizzano ...
io l'ho usato qualche volta, il problema è sempre quello di capire cosa riescono ad usare meglio i traduttori
samiel ha scritto:Nel primo caso devo usare i cookies?
in entrambi i casi io uso le sessioni
per gli esempi non saprei, guarda i software più famosi come fanno.
esempi veloci trovati al volo sono vecchiotti, tipo questo
http://www.phpsimplicity.com/tips.php?id=15
usa gli array ma cambia poco con le costanti
qui usa un cookie e/o sessioni
http://techbrush.org/simplest-way-to-cr ... l-website/
Re: sito bilingue
Inviato: lun 27 mag 2013, 12:29
da teox99
la mia domanda in effetti è in ambito teorico, volevo sapere se nelle stringhe da tradurre includete i tag html e in tal caso come vi comportate con gli accenti?
Re: sito bilingue
Inviato: lun 27 mag 2013, 12:46
da conraid
per i tag html solitamente no, preferisco evitare, anche se ho visto che per esempio per wordpress li inglobano. Per gli accenti c'è utf8

Re: sito bilingue
Inviato: lun 27 mag 2013, 13:16
da teox99
il file po e' codificato utf-8
ma come tu ben sai un carattere accentato non vieve correttamente visualizzato se non uso htmlentities ... e non ho voglia di riscrivere tutti i comandi gettext con davanti htmlenetitis ... come fare?
Re: sito bilingue
Inviato: lun 27 mag 2013, 13:21
da conraid
perché no? se il sito usa la codifica utf8 viene visualizzato correttamente, l'importante è usare la stessa codifica
Re: sito bilingue
Inviato: lun 27 mag 2013, 13:41
da teox99
OK, ho provveduto ad usare
charset=utf-8
ora mi rimane da risolvere il problema dei tag nelle traduzioni, forse l'unico modo è di spiegare ai traduttori a cosa servono e quindi riprodurli nella traduzione.
Diciamo che si tratta solo del tag <strong> per il grassetto ...