2016-02-07 10 views
5

Ich renne kürzlich auf ein Problem - in einigen Teilen meiner eckigen Anwendung muss ich das Datum in dem folgenden Format anzeigen: MMMM yyyy, sowie in einigen Komponenten des Angular UI Bootstrap Rahmen.Umgang mit Monat Namen Flexion - Angular date localisation

Das grundlegende Problem ist, dass in einigen Sprachen der Monat im Nominativ und Genitiv anders geschrieben wird. In meinem Fall wäre das Polnisch, Ukrainisch und Russisch.

Wie es standardmäßig scheint MMMM steht für Monatsname im Genitiv, was im Allgemeinen Sinn macht.

Obwohl ich bemerkt habe, dass in Winkel locale-Dateien für Russian und Polish Sprache gibt es eine Eigenschaft ist STANDALONEMONTH der, wie ich sehe, steht für Monatsnamen in Nominativ. (obwohl Datei für Ukrainian diesen Teil fehlt)

Obwohl ich bin mir nicht ganz sicher, wie man auf denen zu nehmen. Mein grundlegender Vorschlag wäre, mit einem Dekorateur für die dateFilter zu gehen.

So ist die Frage - ob es eine Standardmethode ist für Monatsnamen Einbiegung in Winkeln Handhabung oder dieses Problem zu umgehen, die häufig verwendet wird, so dass die Bibliotheken von Drittanbietern, die $locale mit dem entsprechenden Monatsnamen verwenden würden.

Beispiel

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' 

Wie Sie sehen - für ukrainische und polnische der Name des Monats sollte in diesen beiden Fällen ein anderes Ende haben. Sowohl für Polnisch als auch für Russisch gibt es einen passenden Monatsnamen in eckigen Länderdateien (STANDALONEMONTH). Obwohl ich mir nicht ganz sicher bin, ob sie irgendwo benutzt werden - konnte ich keine Verwendung finden, oder vielleicht vermisse ich etwas.

+0

Nicht wirklich klar, warum, wenn Sie richtige '$ locale' Ressourcen enthalten haben, sehen Sie nicht die richtigen Werte. Eine Demo würde wahrscheinlich helfen – charlietfl

+0

@charlietfl Ich bekomme richtige Werte. In gewisser Weise natürlich. Du hast Recht, ich füge Beispiele hinzu. Vielen Dank. – danyloid

+0

ich bin selbst mit diesen Sprachnuancen persönlich nicht vertraut. Ich könnte mir aber vorstellen, dass viele andere in diese Situation geraten sind. Hast du github Probleme auf diesem Thema überprüft? – charlietfl

Antwort

1

Ich konnte nichts in dem integrierten Gebietsschemadienst finden, als ich vor einiger Zeit in Angular 1.3 an einem ähnlichen Problem arbeitete, also habe ich das gelöst, indem ich manuell eine Liste mit Übersetzungen im richtigen Fall erstellte und diese referenzierte nach Monat Nummer, etwas wie {{monthNamesNominative[monthNumber]}} wo var monthNamesNominative = ['Январь', 'Февраль', ...]. Der zusätzliche Vorteil hier ist, dass Sie direkte Kontrolle über die Zeichenfolge haben und keine zusätzlichen Sprünge machen müssen, wenn Sie eine etwas andere Großschreibung benötigen.

gesagt hat, dass locale Dienst in Angular 1.5 die in Nominativ LLLL Token mit Monatsnamen hat und es scheint, dass vier Tage nachdem Sie die bug in Angular diese Frage gestellt, dass die korrekte Verwendung verhindert wurde behoben, und ab Version 1.5 .1 ist es wahrscheinlich besser, es stattdessen zu benutzen.

Verwandte Themen