J'ai un problème avec String.Format. Le code suivant formate la chaîne correctement en dehors du premier entier. La culture actuelle est définie sur l'arabe irakien (AR-IQ): Le texte est formaté à gauche et que le 2 est converti en chiffre arabe, mais le 1 n'est pas. p> des idées? p> p>
3 Réponses :
Le comportement par défaut pour la conversion des valeurs numériques est "Contexte", qui signifie essentiellement si un numéro est passé par arabe, ils affichent en arabe (ou un autre caractère "non latin"), s'ils ne sont pas alors affichés dans " Standard "NUMÉROS EUROPÉENS.
Vous pouvez modifier ce comportement assez facilement cependant: P>
var culture = CultureInfo.CurrentCulture; culture.NumberFormat.DigitSubstitution = DigitShapes.NativeNational; // Always use native characters string formatted = string.Format(culture, "{0:d}{1:d}{2:d}", currentItem, of, count);
Frais! Cela fixe également la mise en forme de tispan, c'est-à-dire {0: mm \: SS} en arabe pour une raison quelconque. Avec substitution du chiffre, une erreur de formatage se produit.
Il a été indiqué sur MSDN que digitsubstitution code> n'a aucun effet n'est réservé à une utilisation future: msdn.microsoft.com/en-us/library/... . Comment cette solution fonctionne-t-elle même?
Ce code échoue avec "InvalidOperationException: l'instance est en lecture seule." Sauf si votre code définit courrielculture code> pour être non-lecture uniquement (comme
... couranteThread.CurrentCulture = nouveau cultureInfo ("fr-fr") code>) et comme @SAAC a souligné Même après avoir obtenu votre code pour exécuter
digitsubstitution code> n'a aucun effet sur le résultat ... L'échantillon de travail pourrait être utile, c'est-à-dire www.ideone.com ...
var culture = new CultureInfo("ar-SA"); culture.NumberFormat = new NumberFormatInfo(); Thread.CurrentThread.CurrentCulture = culture;
Je n'ai pas pu obtenir l'une des autres réponses au travail. Cela a fonctionné pour moi: