2014-05-20 11 views
6

Ho dato un'occhiata a Internet e non riesco a trovare una soluzione al problema che sto vivendo. Sto cercando di utilizzare Zend_Currency per ottenere la valuta per la Cina in questo modo:Zend_Framework - Nessuna regione trovata all'interno delle impostazioni locali 'zh'

$currency = new Zend_Currency('CN'); 

Tuttavia, continuo a ricevere il seguente errore:

Fatal error: Uncaught exception 'Zend_Currency_Exception' with message 'No region found within the locale 'zh'' in /Library/WebServer/Documents/vendor/zendframework/zendframework1/library/Zend/Currency.php on line 561 

Ciò è su una nuova installazione di Zend Framework 1.12. 3, e per quanto ne so non sto facendo nulla di sbagliato qui. Dall'errore vedo che Zend ha abbinato il codice del paese alle impostazioni locali.

Questo è un problema poiché la mia applicazione si basa sull'ottenimento di informazioni sulla valuta da un codice paese. Non ho problemi con GB, Stati Uniti ecc

ho dato un'occhiata in Zend/Locale/Data e posso confermare le zh.xml, zh_CN.xml file di localizzazione ci sono, ma devo ammettere che non sono al 100% quello che sto cercando per in ciascuno!

Qualcuno ha qualche idea su quale sia il problema e su come risolvere il problema?

Grazie

EDIT:

Si tratta di una modifica per riflettere commento alla discussione.

Sembra che Zend_Locale ritorna zh quando dato il codice del paese CN, piuttosto che la stringa previsto zh_CN. Ciò significa che non riesco a trovare nulla di coerente che possa passare a Zend_Currency per evitare errori.

risposta

3

Penso che questo sia un bug in Zend cattiva gestione della regione CN.
Infatti, se non sbaglio, il nome della locale è zh_Hans_CN e quando gestisce la regione CN Zend vedere se fa parte della variabile $_localeData (nel file Zend/Locale.php) e poiché questo non è il caso, si decompone zh_Hans_CN e mantiene solo zh che non sa neanche.

Se si desidera mantenere lo stesso principio $currency = new Zend_Currency('CN');
si può provare:

Zend_Locale::getLocaleToTerritory('CN'); 

sarà recuperare le impostazioni internazionali corrette per impostazione predefinita. (Come 'US' dare 'en_US')
che dà:

$currency = new Zend_Currency(Zend_Locale::getLocaleToTerritory('CN')); 
+0

Grazie per aver confermato i miei sospetti. Questo è davvero interessante.Anche grazie per l'heads up su Zend_Locale :: getLocaleToTerritory, questo risolverà definitivamente il mio problema per il momento! – James

+0

Prego: è stato anche molto interessante dedicare del tempo a capire e trovare una soluzione, quindi grazie per questa domanda. :) – doydoy44

1

provare in questo modo;)

$currency = new Zend_Currency('zh_CN'); 
+0

@James - mi dica se questo funziona correttamente nel ulteriore codice. :) –

+0

Grazie per la risposta. Passare la stringa locale come hai suggerito funziona! L'unico problema è che Zend_Locale sembra essere incoerente con ciò che restituisce. Ad esempio se faccio Zend_Locale ('CN'); restituisce 'zh', mentre mi aspetterei 'zh_CN'. Questo ovviamente ha come risultato il problema originale, quindi c'è un bug in Zend_Locale che non può gestire CN? Sento che non posso contare su un input coerente da utilizzare con Zend_Currency. – James

Problemi correlati