Pagina 1 di 3

sito bilingue

Inviato: dom mag 26, 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 mag 26, 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 mag 26, 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 mag 26, 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 mag 26, 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 mag 26, 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 mag 26, 2013 22:52
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...

Re: sito bilingue

Inviato: dom mag 26, 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 mag 27, 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 mag 27, 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 mag 27, 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 mag 27, 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 mag 27, 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 mag 27, 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 mag 27, 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 ...