sito bilingue

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
samiel
Staff
Staff
Messaggi: 5511
Iscritto il: ven 16 gen 2004, 0:00
Nome Cognome: Mauro Sacchetto
Slackware: 13.0
Kernel: 2.26
Desktop: KDE
Distribuzione: anche Debian
Località: Venezia

sito bilingue

Messaggio 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

Avatar utente
conraid
Staff
Staff
Messaggi: 13630
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: sito biingue

Messaggio 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...

samiel
Staff
Staff
Messaggi: 5511
Iscritto il: ven 16 gen 2004, 0:00
Nome Cognome: Mauro Sacchetto
Slackware: 13.0
Kernel: 2.26
Desktop: KDE
Distribuzione: anche Debian
Località: Venezia

Re: sito bilingue

Messaggio 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

samiel
Staff
Staff
Messaggi: 5511
Iscritto il: ven 16 gen 2004, 0:00
Nome Cognome: Mauro Sacchetto
Slackware: 13.0
Kernel: 2.26
Desktop: KDE
Distribuzione: anche Debian
Località: Venezia

Re: sito bilingue

Messaggio 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

Avatar utente
aschenaz
Staff
Staff
Messaggi: 4623
Iscritto il: mer 28 lug 2004, 0:00
Nome Cognome: Nino
Slackware: current
Kernel: 5.4.x
Desktop: KDE
Località: Reggio Calabria
Contatta:

Re: sito bilingue

Messaggio 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...

samiel
Staff
Staff
Messaggi: 5511
Iscritto il: ven 16 gen 2004, 0:00
Nome Cognome: Mauro Sacchetto
Slackware: 13.0
Kernel: 2.26
Desktop: KDE
Distribuzione: anche Debian
Località: Venezia

Re: sito bilingue

Messaggio da samiel »

In termini di codice?

Ma non è "invasiva" per l'utente la soluzione dei cookies ?

m

Avatar utente
aschenaz
Staff
Staff
Messaggi: 4623
Iscritto il: mer 28 lug 2004, 0:00
Nome Cognome: Nino
Slackware: current
Kernel: 5.4.x
Desktop: KDE
Località: Reggio Calabria
Contatta:

Re: sito bilingue

Messaggio da aschenaz »

Ciao Mauro! Andavo così di fretta che non mi ero accorto che eri tu! :lol:

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...

samiel
Staff
Staff
Messaggi: 5511
Iscritto il: ven 16 gen 2004, 0:00
Nome Cognome: Mauro Sacchetto
Slackware: 13.0
Kernel: 2.26
Desktop: KDE
Distribuzione: anche Debian
Località: Venezia

Re: sito bilingue

Messaggio 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

Avatar utente
teox99
Linux 3.x
Linux 3.x
Messaggi: 738
Iscritto il: ven 25 lug 2008, 14:54
Slackware: 13.37
Desktop: KDE - Xfce
Località: Roma[Eur]
Contatta:

Re: sito bilingue

Messaggio 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 ...

Avatar utente
conraid
Staff
Staff
Messaggi: 13630
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: sito bilingue

Messaggio 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/

Avatar utente
teox99
Linux 3.x
Linux 3.x
Messaggi: 738
Iscritto il: ven 25 lug 2008, 14:54
Slackware: 13.37
Desktop: KDE - Xfce
Località: Roma[Eur]
Contatta:

Re: sito bilingue

Messaggio 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?

Avatar utente
conraid
Staff
Staff
Messaggi: 13630
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: sito bilingue

Messaggio 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 :-)

Avatar utente
teox99
Linux 3.x
Linux 3.x
Messaggi: 738
Iscritto il: ven 25 lug 2008, 14:54
Slackware: 13.37
Desktop: KDE - Xfce
Località: Roma[Eur]
Contatta:

Re: sito bilingue

Messaggio 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?

Avatar utente
conraid
Staff
Staff
Messaggi: 13630
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: sito bilingue

Messaggio da conraid »

perché no? se il sito usa la codifica utf8 viene visualizzato correttamente, l'importante è usare la stessa codifica

Avatar utente
teox99
Linux 3.x
Linux 3.x
Messaggi: 738
Iscritto il: ven 25 lug 2008, 14:54
Slackware: 13.37
Desktop: KDE - Xfce
Località: Roma[Eur]
Contatta:

Re: sito bilingue

Messaggio 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 ...

Rispondi