La mondialisation de CultureInfo & DateTimeFormatInfo: Comment pouvons-nous changer les chiffres format de ma langue?
- Je utiliser System.Globalization
comme ci-dessous:
CultureInfo calture = new CultureInfo(MyCultureInfoGoesHere);
DateTimeFormatInfo info = calture.DateTimeFormat;
info.AbbreviatedDayNames = new string[] { "bla", "bla", "bla", "bla", "bla", "bla", "bla" };
info.ShortestDayNames = new string[] { "bla", "bla", "bla", "bla", "bla", "bla", "bla" };
info.DayNames = new string[] { "bla", "bla", "bla", "bla", "bla", "bla", "bla" };
info.AbbreviatedMonthNames = new string[] { "bla", "bla", "bla", "bla", "bla", "bla", "bla", "bla", "bla", "bla", "bla", "bla", "" };
info.MonthNames = new string[] { "bla", "bla", "bla", "bla", "bla", "bla", "bla", "bla", "bla", "bla", "bla", "bla", "" };
info.AMDesignator = "bla";
info.PMDesignator = "bla";
info.ShortDatePattern = "yyyy/MM/dd";
//info.ShortDatePattern = "dd/MM/yyyy";
info.LongDatePattern = "dddd , dd MMMM yyyy";
info.FirstDayOfWeek = DayOfWeek.bla;
MyCalendar cal = new MyCalendar();
typeof(DateTimeFormatInfo).GetField("calendar", BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic).SetValue(info, cal);
//object obj = typeof(DateTimeFormatInfo).GetField("m_cultureTableRecord", BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic).GetValue(info);
//obj.GetType().GetMethod("UseCurrentCalendar", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(obj, new object[] { cal.GetType().GetProperty("ID", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(cal, null) });
typeof(System.Globalization.CultureInfo).GetField("calendar", BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic).SetValue(calture, cal);
Thread.CurrentThread.CurrentCulture = calture;
Thread.CurrentThread.CurrentUICulture = calture;
CultureInfo.CurrentCulture.DateTimeFormat = info;
CultureInfo.CurrentUICulture.DateTimeFormat = info;
Mes questions sont:
-
Pourquoi les lignes commentées des erreurs dans VS2010 (.NET 4.0), mais ils sont ok dans VS2008 (.NET 3.5)?
-
Comment puis-je localiser mes chiffres lorsque j'utilise
DateTime.Now
, je veux dire je veux chiffres format dans ma langue(Seulement Pour le type DateTime)! est-il possible?
Merci d'avance et meilleures salutations.
- Si je comprends bien, que vous souhaitez utiliser dite arabe Orientale numéros au lieu de la typique 0-9?
- oui / vous / droite, mais seulement dans ma DateTime Et composant de Calendrier / personne d'autre, où / est-il possible?
- Quand vous dites "erreurs", il serait peut-être une bonne idée d'afficher les erreurs réelles que vous obtenez ainsi?
Vous devez vous connecter pour publier un commentaire.
Veuillez jeter un oeil à cette réponse. Aussi que l'on pourrait être de l'aide. L'idée de base est de créer une méthode d'extension qui permettra de remplacer les nombres avec son arabe Orientale homologues. BTW. Il semble que les deux chiffres et quelques mois /jour les noms sont déjà définies pour le ps-AF culture:
Je ne sais pas si c'est approprié pour vous.
Vous êtes à l'aide de la réflexion, qui s'appuie sur les détails d'implémentation. Ces détails peuvent avoir changé entre les deux .NET 3.5 et .NET 4. Ne pas le faire. Si l'API concepteurs ont voulu vous de jouer avec ces choses, ils me l'ont fait de leur public. Tout moment vous comptez sur les détails de mise en œuvre de ce genre, vous devriez vous attendre à un risque de rupture lors de la modification de la mise en œuvre.
Avez-vous essayé le clonage de l'ensemble de la
CultureInfo
, et la modification de laNumberFormatInfo
ainsi que laDateTimeFormatInfo
? Je ne peux pas dire que je n'ai jamais fait moi-même, mais il vaut la peine d'essayer.Les choses changent. Choses qui se passe. La vie continue. ~ Elizabeth Scott
Voici un exemple sur la façon de définir datetime info.
Maintenant, si vous imprimez
DateTime.Now
Vous obtenez:
Je suppose, c'est ce que tu voulais - obtenir différents format de l'heure, le changement de culture.
DateTime.Today
si vous n'avez pas besoin de temps de la partie"10.4.2011"
puis l'utilisation de motifs différents comme:LongDatePattern = "d.M.yyyy"
.