[Risolto] Browser language detection

11 contenuti / 0 new
Ultimo contenuto
[Risolto] Browser language detection

sto creando un sito multilingua italiano - inglese.
vorrei che i visitatori fossero indirizzati automaticamente alla lingua corretta in base alle impostazioni del browser.
Ho attivato tutti i moduli necessari e il "Path prefix with language fallback."

Con firefox la cosa funziona mentre con safari no.
Questi sono i tag language che utilizzano i due browser:
Firefox 3:ok

it-it,it;q=0.8,en-us;q=0.5,en;q=0.3

Safari 4: bad
it-it

ho provato a guardare nel modulo i18n ma la rilevazione della lingua sembra essere gestita altrove ora. Dove devo andare a mettere le mani?
Grazie!

Problema afascinante...

Per prima pensavo che il valore di accept-language di Safari era sbagliato, ma non lo è: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
Anche se 'puzza' un pò, come valore di default (non credo che l'hai modificato, vero?), avrebbe dovuto essere almeno it-IT,it

Per il codice (D6), devi guardare in includes/language.inc, ma la funzione di language_default() è in includes/bootstrap.inc. Poi tentare un pò di debugging, ma meglio non cambiare codice nel core (prima legge di Drupal "Changeth thou not the core code")

Il più vicino a Safari che ho io è Chromium, che mi dice en-US,en;q=0.8 - non ho cambiato i valori... Ho guardato in /admin/reports/status/php, come l'avrai fatto anche tu, immagino.

FYI, FF 3.5: en-us,en;q=0.5, Opera 10: en-US,en;q=0.9

Se per caso avevi 'smanettato' i valori di Safari, prova settarli a Italian-Italia poi Italiano, e farci sapere...

John

Più imparo, più dubito.

grazie mille per la risposta :)
no non ho assolutamente smanettato con i valori di safari eheh.
proverei anche a fare un po' di debugging se mi spieghi come ho abilitato il modulo devel ma inserendo chiamate a dvp() o dvm() in languages.inc non succede nulla. non so come si proceda per fare il debug del core.
l'idea sarebbe quella di far seguire alla stringa di tipo 'it-it,' una di tipo 'it,' automaticamente.

un'altro comportamento un po' fastidioso che ho notato è che con il fallback abilitato gli utenti non registrati non sono in grado di selezionare la lingua: infatti cercando di modificarla attraverso il blocco di selezione della lingua questa viene impostata nuovamente al valore di default del browser.

Ho fatto un sito multi-lingua oltre un anno fa...

Jamiro wrote:
grazie mille per la risposta :)
no non ho assolutamente smanettato con i valori di safari eheh.
proverei anche a fare un po' di debugging se mi spieghi come ho abilitato il modulo devel ma inserendo chiamate a dvp() o dvm() in languages.inc non succede nulla. non so come si proceda per fare il debug del core.
l'idea sarebbe quella di far seguire alla stringa di tipo 'it-it,' una di tipo 'it,' automaticamente.

Poi quando il cliente ha 'scoperto' che Drupal non traduceva il testo (del cliente) automaticamente, ha abandonato il progetto...
Forse perchè non sono stato particolarmente sottile, spiegando che neanche con Google translate...
But I digress...
Per debuggare, io uso PHPEclipse in localhost, settando dei breakpoint. Devel e Coder sono utile per altri aspetti...
http://drupal.org/node/75242
http://groups.drupal.org/node/2663

Jamiro wrote:
un'altro comportamento un po' fastidioso che ho notato è che con il fallback abilitato gli utenti non registrati non sono in grado di selezionare la lingua: infatti cercando di modificarla attraverso il blocco di selezione della lingua questa viene impostata nuovamente al valore di default del browser.

Guardando il codice citato prima, mi sembra che questo è parte della stessa problema...
Dai un occhiata a questi (ma stai attento alle date):
http://drupal.org/node/275705
http://www.reyero.net/en/drupal/i18n
http://www.slideshare.net/gabor.hojtsy/multilingual-drupal-presentation-...

Farci sapere come prosegue...

HTH

John

Più imparo, più dubito.

ho installato PHPEclipse con XDebug senza grossi problemi (piccola nota: Zend Optimizer deve essere disattivato altrimenti Apache non si avvia se deve caricare anche XDebug)
Ho provvisoriamente (o nel mio caso definitivamente risolto visto che non ho esigenze estreme di localizzazione linguistica)
prendendo la sottostringa identificativa dell'idioma.

modifiche apportate a language_from_browser() in language.inc

  if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
    $browser_accept = explode(",", $_SERVER['HTTP_ACCEPT_LANGUAGE']);
    for ($i = 0; $i < count($browser_accept); $i++) {
      // begin PATCH
      $lang=substr($browser_accept[$i],0,2);
      // The language part is either a code or a code with a quality.
      // We cannot do anything with a * code, so it is skipped.
      // If the quality is missing, it is assumed to be 1 according to the RFC.
      if (preg_match("!([a-z-]+)(;q=([0-9\\.]+))?!", trim($lang), $found)) {
        $browser_langs[$found[1]] = (isset($found[3]) ? (float) $found[3] : 1.0);
      }
      // end PATCH
    }
  }

ora rimarrebbe da risolvere solo il fallback automatico che non permette di selezionare la lingua

ok risolto anche il secondo.
praticamente drupal se non trova un prefisso di lingua già impostato va a richiamare la lingua del browser.
Il mio profilo di lingua inglese non aveva un Path prefix impostato. Lo ho quindi impostato a "en" ed il problema è risolto. ;)

direi risolto Yuppi! spero ti sia utile jhl :)

Mi sembra che sia stata molto utile per te (dopo tutto il problema era tuo ;-)
Trovo molto soddisfaciente (ma molto, molto) quando qualcuno trova la soluzione tutto da se, dopo un piccolo (ma proprio piccolo) aiutino...
Se vuoi darmi una mano con drupal4ever...

Comunque hai commesso l'imperdonabile orrore (direi che sei un quasi eretico, come me) di cambiare codice nel core (prima legge di Drupal "Changeth thou not the core code"). Conviene creare un patch e tenerlo pronto per quando aggiorni Drupal.

John

Più imparo, più dubito.

ma alla fine è stato più facile di quanto pensassi visto che il problema era molto terra terra. Se fosse stato all'interno di moduli o funzioni più complesse che trattano informazioni non di per se chiare sarebbe stato un'altro paio di maniche. Sarà ormai un mese che ho iniziato con Drupal e devo dire che il suo modo di funzionare è concettualmente interessante. Ho sempre guardato ai siti internet come una necessità più che un'arte (layout escluso) e invece mi devo ricredere...
Eheh per cambiare 2-di numero- righe di codice nel core non mi faccio scrupoli ;)
Per drupal4ever mi sembra che la questione sia abbastanza ben definita (anche se mi sembra a naso che sia coinvolto FileField Paths anche se non ha cron...) basta che si capisca lui...

P.S. W i Monty Phyton!

Jamiro wrote:
Eheh per cambiare 2-di numero- righe di codice nel core non mi faccio scrupoli ;)

Attento, dicono tutti così: «sono solo 2 righe, smetto quando voglio…»
Jamiro wrote:
P.S. W i Monty Phyton!

Ah, no? ;)