2009-07-06 11 views
5

Diciamo che ho una data che posso rappresentare in un formato invariante di cultura (ISO 8601).Localizza le date su un browser?

Prenderò il 6 luglio 2009, 15:54 ora UTC a Parigi, alle 17:54 ora locale a Parigi osservando l'ora legale.

2009-07-06T15: 54: 12.000 + 02: 00

OK ... c'è qualche gemma nascosta di markup che dire al browser di convertire che stringa in una versione localizzata di vero?

La soluzione più vicina utilizza Javascript Date.prototype.toLocaleString(). Certamente fa un buon lavoro, ma può essere lento a scorrere su un sacco di date, e si basa su Javascript.

C'è qualche markup semantico HTML, CSS, XSLT o altrimenti che un browser riconoscerà e automaticamente renderà la stringa localizzata corretta?

Edit:

Il metodo Attualmente sto usando sta sostituendo il testo di un elemento HTML con una stringa localizzata:

Inizia con:

<span class="date">2009/07/06 15:54:12 GMT</span> 

Utilizzando Javascript (con jQuery):

var dates = $("span.date", context); 
// use for loop instead of .each() for speed 
for(var i=0,len=dates.length; i < len; i++) { 
    // parse the date 
    var d = new Date(dates.eq(i).text()); 
    // set the text to the localized string 
    dates.eq(i).text(d.toLocaleString()); 
} 

Da un punto di vista pratico, rende il testo "lampeggiante" al nuovo valore quando viene eseguito Javascript, e non mi piace.

Da un punto di vista dei principi, non capisco perché dobbiamo fare questo: il browser dovrebbe essere in grado di localizzare cose standard come valuta, date, numeri, purché lo contrassegniamo come tale.


Un follow-up domanda: Perché i browser/il Web non hanno una funzione così semplice - prendere un elemento di dati standard e il formato in base alle impostazioni del client?

+0

Non so che ci sia comunque per farlo usando i linguaggi di markup straight up. Sono abbastanza sicuro che avrai intenzione di usare qualche script. – Peter

risposta

2

Io uso toLocaleString() sul mio sito e non ho mai avuto un problema con la velocità di esso. Come stai ottenendo la data del server nell'oggetto Date? Analisi?

Aggiungo un nodo di commento subito prima di visualizzare la data mentre il server la vede. All'interno del nodo commento è la data/ora di quel post come il numero di millisecondi dall'epoca. In Rails, per esempio:

<!--<%= post.created_at.to_i * 1000 %>--> 

Se hanno JS abilitato, utilizzare jQuery per afferrare quei nodi, ottenere il valore del commento, quindi:

var date = new Date(); 
date.setTime(msFromEpoch); 
// output date.toLocaleString() 

Se non hanno JS abilitati, possono sentirsi liberi di fare la conversione nella propria testa.

Se si sta tentando di analizzare l'ora ISO, questa potrebbe essere la causa della lentezza. Inoltre, quante date stiamo parlando?

+0

Proverò a utilizzare i segni di graduazione anziché il formato ISO: immagino che debba essere più veloce. Le date sono da qualche parte tra 50 e 100. Si tratta di un "flash" apprezzabile sullo schermo quando le date vengono localizzate. –

2

Sfortunatamente, non c'è.

HTML & I CSS sono strettamente utilizzati per la presentazione, in quanto tali, non vi è alcun "smarts" incorporato per modificare il modo in cui le cose vengono visualizzate.

La soluzione migliore sarebbe utilizzare un linguaggio lato server (come .NET, Python, ecc.) Per emettere le date nell'HTML nel formato che si desidera venga mostrato all'utente.

+0

Vorrei che il server avesse un buon modo di conoscere le impostazioni localizzate del client. –

+0

Non tutti :) – annakata

+4

Ho visto un buon "trucco" per fare questo. Nel login o in una pagina simile, inserisci un campo modulo nascosto e utilizza JavaScript per scrivere l'ora corrente dell'utente.Quindi, quando il modulo viene registrato sul server, confronta l'ora del sistema dell'utente (come per JavaScript) con il tempo del server e puoi determinare le impostazioni del loro fuso orario. – nikmd23

2

Non è possibile farlo con HTML, non ha tag intelligenti che possano prendere decisioni di questo tipo. È rigorosamente presentazionale. Mi chiedo, però, se HTML5 ha forse un tag per qualcosa di simile ...

In ogni modo, il mio modo di vedere, si hanno 3 opzioni:

  1. Stick per il modo in Javascript.Ci sono domande con maggiori dettagli su questo sito, come How do I display a date/time in the user’s locale format and time offset? e How can I determine a web user’s time zone?

  2. Provare a utilizzare la geolocalizzazione. In altre parole, lo script sul lato server attiva una richiesta a uno dei numerosi servizi di geolocalizzazione disponibili nella prima pagina dell'utente per cercare di indovinare dove si trova l'utente. Il rovescio della medaglia è che sarà sbagliato circa il 10% delle volte, quindi non è molto meglio della quota di mercato che Javascript ti sta per ottenere .... (tutto sommato, quindi, non è un ottimo metodo. ..)

  3. Chiedi all'utente! Vedrai che la maggior parte dei siti web che vogliono mostrare un'esperienza su misura per te ti chiederanno questo genere di cose perché non è possibile saperlo. Come soluzione alternativa, puoi inserire la domanda sui tag <noscript> in modo da chiedere solo quelli con Javascript disabilitato mentre offri l'esperienza Javascript a coloro che ne hanno.

1

La lingua e le impostazioni locali dell'utente devono essere inviate sull'intestazione HTTP. È possibile utilizzare quelli per creare il formato data corretto lato server da visualizzare all'utente. Tuttavia, questo è spesso indesiderabile perché molti utenti ignorano completamente le loro impostazioni locali nei loro sistemi operativi e/o browser. Quindi, potresti dar da mangiare ai timbri in stile USA per i neozelandesi.

Mi è piaciuto il trucco pubblicato nel commento sopra, ma suona come un mal di testa QA, dal momento che si potrebbe avere a che fare con un gran numero di client che implementano i timestamp in modi molto diversi.

La soluzione più efficace che ho visto è quella di fornire un pannello semplice per consentire agli utenti di scegliere il formato dell'ora desiderato. Alcuni utenti persino **** gasp **** come formati ISO. Quindi esegui il lato del server di conversione del formato dell'ora. Se la lingua dell'applicazione non ha una buona localizzazione per la mappatura del fuso orario, controlla il tuo database. Molti database forniscono anche la formattazione del fuso orario personalizzata basata sulla localizzazione.

2

Dojo ha qualcosa di bello localizations for dates and currencies. L'utilizzo di questo metodo consente anche di scegliere diversi formati (ad es. Data breve rispetto a data lunga) e forzare le impostazioni locali.

Problemi correlati