2010-12-30 10 views
10

Sto lavorando a un progetto in più lingue con Zend Framework (tedesco e inglese) in cui ho una piccola forma per ordinare un prodotto. L'utente deve essere in grado di:Procedura consigliata per gestire le impostazioni internazionali con valute e interruttori di lingua

  • cambiare la sua valuta preferita per i prezzi dei prodotti
  • cambiare la sua lingua preferita per tutto il sito

Al momento io uso Zend_Locale :: findLocale() per ottenere le impostazioni locali dell'utente. Con le mie impostazioni del browser ottengo 'de_CH' e funziona bene. Ma ci sono alcuni problemi nel più breve tempo:

  • L'utente ha configurato il suo browser per datemi il codice della lingua ('de' invece di 'de_CH')
  • L'utente preferisce una lingua che non è supportata dal mio sito
  • l'utente è da un paese dove hanno preso una valuta che non è supportata dal mio modulo d'ordine prodotto

Proprio il codice della lingua il codice lingua è sufficiente per gestire Zend_Translate, b ut Zend_Currency ha bisogno di più informazioni. Penso che non ci sia una soluzione per ottenere il locale completo con il codice del paese da ogni utente possibile. La mia domanda è: come gestisci queste situazioni? Accedete al _initLocale() del vostro bootstrap se manca un codice di paese e usate un codice paese predefinito? Esistono metodi Zend Framework per farlo?

una lingua non supportata Se gli utenti lingua è 'fr', vorrei usare una lingua predefinita perché il nostro sito web non supporta francese. C'è una possibilità migliore di aggiungere una matrice whitelist in bootstrap? Ad esempio un metodo da Zend_Translate?

Una valuta non supportata E se la lingua dell'utente è supportata, ma non la sua valuta? Dovrei cambiare la locale in bootstrap o dovrei fare una copia della locale e cambiarla per Zend_Currency?

Il problema principale Penso che il mio problema principale è che non sono sicuro di come gestire tutti questi diversi problemi di locale. Il mio approccio preferito sarebbe quello di verificare la localizzazione impostata in _initLocale() del bootstrap, quindi posso essere sicuro di poter supportare la lingua e la valuta.

Grazie per i vostri consigli.

Con i migliori saluti, Nico

Editing 1 Mi sono fatto alcune riflessioni di più di un modo per gestire questi problemi. Cosa ne pensi di questo approccio?

  1. Zend_Locale(): filtrare tutti i locali brevi (senza prefisso internazionale) e utilizza una whitelist con i linguaggi supportati dall'applicazione (solo il codice della lingua). Se non vi sono corrispondenze, utilizzare il valore predefinito fornito dall'applicazione.
  2. Zend_Translate: inizia con il codice della lingua dalla locale.Ma se l'utente cambia la lingua preferita, lascia le impostazioni internazionali così come sono (forse non ci sono impostazioni locali corrispondenti in base al nuovo codice lingua e al vecchio prefisso nazionale) e cambia semplicemente il codice della lingua in Zend_Translate.
  3. Zend_Currency: utilizzare le impostazioni internazionali come predefinite. Se l'utente cambia la valuta preferita, basta cambiare la valuta e non la locale. Quindi la formattazione rimarrebbe basata sulla vecchia versione locale perché la modifica della valuta non significa che l'utente voglia anche cambiare la sua localizzazione.

Questo approccio è accettabile? C'è un problema con il passaggio 1 se i browser Locale sono impostati in questo modo:

  • de
  • it_IT

Forse l'applicazione non supporta tedesco, ma perché è una breve locale, l'applicazione userà invece en_US. Ma non so quale soluzione possa risolvere questo problema, perché non posso "aggiornare" una breve locale ad una locale completa.

+2

non sono sicuro se questo aiuta, ma come un utente che detesto applicazioni e siti web che cercano di capire la mia lingua per me. Penso che sia sempre meglio avere un pulsante di lingua o un menu a discesa sul tuo sito. Il vantaggio per te è che non ti devi preoccupare di rilevare combinazioni linguistiche strane. – Matt

+0

+1 su suggerimento di Matt. Sono perplesso sul motivo per cui vorresti sostenere ogni lingua e valuta. Probabilmente convertirai il tuo sito solo da 5 a 10 lingue al massimo. Quindi, cercare di "rilevare" una localizzazione e fare qualsiasi magia è necessaria per trovare la lingua giusta potrebbe non essere necessaria. Che dire delle persone che visitano Amsterdam, che preferirebbero l'inglese o il francese, ma il tuo sito rileva che capiranno molto probabilmente l'olandese? Io voto per un selettore di lingua/valuta. BACIO. –

+0

OK, ma per essere in grado di generare le impostazioni internazionali complete, l'utente deve anche scegliere il proprio paese. Oppure emetterei la valuta scelta in modo errato (12.000 euro invece di 12.000 euro per esempio). Ma sì, forse K.I.S.S. è la via centrale giusta qui ;-). Grazie per il tuo suggerimento. – Nico

risposta

1

Il problema evidenziato è comune e immagino che sia necessaria una piccola quantità di lavoro per impostare le impostazioni internazionali per l'utente.

de to de_DE richiede di sapere se si trovano in Germania, ma questo può essere impostato su de_CH, che è la tua località, se non conosci la località degli utenti.

* The user has configured his browser to just give me the language code ('de' instead of 'de_CH') 

Mappa nella vostra applicazione. La tua mappatura può convertirla in de_DE per i residenti in Germania che parlano tedesco. O de_CH per i residenti in Svizzera che parlano tedesco. Oppure fr_CH per i residenti in Svizzera che parlano francese e così via per gli anglofoni sarebbe en_CH o en_DE. Quindi questo risolve 2 problemi.

La lingua e la posizione degli utenti sono necessarie per determinare con precisione le impostazioni internazionali per l'utente.

Se non si conosce la posizione, è necessario impostare la lingua e la località predefinite.

Link: Unicode - locality and language mapping

* The user prefers a language which is not supported by my website 

Si dovrebbe avere una lingua e valuta di default, se si è in Europa allora la scelta sarebbe tutto ciò che è vostra località e la lingua di default, se siete svizzero allora de_CH senso.

* The user is from a country where they got a currency which isn't supported by my product order form 

In questo caso è necessario ripristinare l'impostazione predefinita.

Zend ha molti esempi di utilizzo di Locales sul proprio wiki. Il posto più comune per impostare la località in Zend è il file di bootstrap.

Ho usato questo collegamento per fare riferimento al supporto per questa risposta su Zend Framework wiki. Il codice seguente fornisce un piccolo esempio di come la classe Zend_Locale genera eccezioni se le impostazioni internazionali non sono valide. A questo punto è possibile verificare la posizione e la lingua e utilizzarlo in combinazione con le informazioni ricevute dal browser per impostare con precisione le impostazioni internazionali per l'utente.

Link: Zend Locale Introduction

// within the bootstrap file 
    try { 
     $locale = new Zend_Locale('auto'); 
    } catch (Zend_Locale_Exception $e) { 
     $locale = new Zend_Locale('de'); 
    } 
    // within your model/controller 
    $date = new Zend_Date($locale); 
    $currency = new Zend_Currency($locale) 
+0

Grazie mille. – Nico

+0

Nessun problema, buona fortuna per il tuo progetto. –

0

Ecco un articolo che ho scritto sulla localizzazione che ritengo possa rivelarsi utile nel rispondere ad alcune delle vostre domande.

http://phpadvent.org/2010/localization-by-anthony-gentile

+0

Grazie per la risposta. Penso che questo approccio causerà ancora alcuni problemi in paesi con lingue diverse. Inoltre, non sono in grado di utilizzare en_US per ogni paese di lingua inglese. – Nico

0

Nel mio caso, mi piacerebbe chiedere all'utente di scegliere la loro lingua e valuta la prima volta che visitano il mio sito. nella lingua scegliere l'interfaccia mi è stato prendere il codice della lingua dal browser dell'utente come riferimento della lingua predefinita. e inoltre fornisco un pulsante di cambio lingua rapido nel mio sito.

Problemi correlati