2016-02-07 9 views
5

Recentemente ho riscontrato un problema: in alcune parti della mia applicazione angolare devo mostrare la data nel seguente formato: MMMM yyyy, anche in alcuni componenti del framework Angular UI Bootstrap.Come gestire l'inflessione dei nomi dei mesi - Localizzazione della data angolare

Il problema di base è che in alcune lingue il mese in caso nominativo e genitivo è scritto in modo diverso. Nel mio caso quello sarebbe polacco, ucraino e russo.

Come sembra di default MMMM indica il nome del mese nel caso genitivo, che generalmente ha senso.

Anche se ho notato che nel file di localizzazione angolari per Russian e Polish lingua c'è una proprietà STANDALONEMONTH che, come vedo, sta per nome del mese in nominativo. (sebbene il file per Ukrainian manchi quella parte)

Anche se non sono abbastanza sicuro su come utilizzarlo. Il mio suggerimento di base sarebbe quello di andare con un decoratore per il dateFilter.

Quindi la domanda è - se ci sia un modo standard per nome del mese manipolazione in angolare inflessione, o di una soluzione che viene comunemente utilizzato, in modo che le librerie di terze parti che utilizzano la $locale avrebbe utilizzato il nome proprio mese.

Esempio

date: '2016-01-20' 

en-us: 
'dd MMMM yyyy' -> '20 January 2016' 
'MMMM yyyy' -> 'January 2016'  

uk-ua: 
'dd MMMM yyyy' -> '20 січня 2016' // genitive case - it is fine 
'MMMM yyyy' -> 'січня 2016'  // wrong: should be 'січень 2016' 

pl-pl: 
'dd MMMM yyyy' -> '20 stycznia 2016' // genitive case - it is fine 
'MMMM yyyy' -> 'stycznia 2016' // wrong: should be 'styczeń 2016' 

Come si vede - per l'ucraino e polacco il nome del mese dovrebbe avere un finale diverso in questi due casi. Come pure per il polacco e il russo c'è un nome per il mese nel caso specifico in file locali angolari (STANDALONEMONTH). Anche se non sono abbastanza sicuro che siano usati ovunque, non sono stato in grado di trovare l'utilizzo, o forse mi manca qualcosa.

+0

Non è davvero chiaro il motivo per cui se hai incluso le risorse '$ locale' corrette non vedi i valori corretti. Una demo potrebbe probabilmente aiutare – charlietfl

+0

@charlietfl Sto ottenendo i valori corretti. In un certo modo, ovviamente. Hai ragione, aggiungerò degli esempi. Grazie. – danyloid

+0

personalmente non conosco nemmeno queste sfumature linguistiche. Immagino che molti altri si siano imbattuti in questo. Hai controllato i problemi di github su questo? – charlietfl

risposta

1

Non riuscivo a trovare nulla nel servizio di localizzazione incorporato quando stavo lavorando su un problema simile qualche tempo fa in Angular 1.3, quindi ho risolto questo creando manualmente un elenco con le traduzioni nel caso appropriato e facendo riferimento a quelle per numero di mese, ad esempio {{monthNamesNominative[monthNumber]}} dove var monthNamesNominative = ['Январь', 'Февраль', ...]. Il vantaggio aggiunto qui è che hai il controllo diretto sulla stringa e non devi fare salti extra se hai bisogno di una maiuscola leggermente diversa.

Detto questo, il servizio locale in angolare 1.5 ha il token LLLL con nome del mese in caso nominativo e sembra che quattro giorni dopo aver fatto questa domanda il bug in angolare che ha impedito il corretto utilizzo è stato fissato, e dalla versione 1.5 .1 usarlo invece è probabilmente meglio.

Problemi correlati