How to get specific culture currency pattern

Viewed 38837

How do i get the currency pattern for a specific culture?

For Example:

Instead of using:

string.Format("{0:c}", 345.10)

I want to use this:

string.Format("#.##0,00 €;-#.##0,00 €", 345.10);

But how do i get the pattern string (like "#.##0,00 €;-#.##0,00 €") for each culture my application needs?

I cant use the "{0:c}" pattern because if the user switches the language the currency should be the same.

7 Answers

For Positive and negative number one can use below code snippet for culture

class Program
{
    static void Main(string[] args)
    {
        List<string> cultures = new List<string> { "ca-ES", "co-FR", "cs-CZ", "cy-GB", "da-DK", "de-AT", "de-CH", "de-DE", "de-LI", "de-LU", "dsb-DE", "en-US", "en-GB" };

        var amount = -16.34M;

        foreach (var c in cultures)
        {
            var cultureInfo = CultureInfo.GetCultureInfo(c);

            var numberFormat = cultureInfo.NumberFormat;
            String formattedAmount = null;
            if (amount >= Decimal.Zero)
            {
                String pattern = null;
                switch (numberFormat.CurrencyPositivePattern)
                {
                    case 0:
                        pattern = "{0}{1:N" + numberFormat.CurrencyDecimalDigits + "}";
                        break;
                    case 1:
                        pattern = "{1:N" + numberFormat.CurrencyDecimalDigits + "}{0}";
                        break;
                    case 2:
                        pattern = "{0} {1:N" + numberFormat.CurrencyDecimalDigits + "}";
                        break;
                    case 3:
                        pattern = "{1:N" + numberFormat.CurrencyDecimalDigits + "} {0}";
                        break;
                }
                formattedAmount = String.Format(cultureInfo, pattern, numberFormat.CurrencySymbol, amount);

            }
            else if (amount < Decimal.Zero)
            {
                String pattern = null;
                switch (numberFormat.CurrencyNegativePattern)
                {
                    case 0:
                        pattern = "({0}{1:N" + numberFormat.CurrencyDecimalDigits + "})";
                        break;
                    case 1:
                        pattern = numberFormat.NegativeSign + "{0}{1:N" + numberFormat.CurrencyDecimalDigits + "}";
                        break;
                    case 2:
                        pattern = "{0}" + numberFormat.NegativeSign + "{1:N" + numberFormat.CurrencyDecimalDigits + "}";
                        break;
                    case 3:
                        pattern = "{0}{1:N" + numberFormat.CurrencyDecimalDigits + "}" + numberFormat.NegativeSign;
                        break;
                    case 4:
                        pattern = "({1:N" + numberFormat.CurrencyDecimalDigits + "}{0})";
                        break;
                    case 5:
                        pattern = numberFormat.NegativeSign + "{1:N" + numberFormat.CurrencyDecimalDigits + "}{0}";
                        break;
                    case 6:
                        pattern = "{1:N" + numberFormat.CurrencyDecimalDigits + "}" + numberFormat.NegativeSign + "{0}";
                        break;
                    case 7:
                        pattern = "{1:N" + numberFormat.CurrencyDecimalDigits + "}{0}" + numberFormat.NegativeSign;
                        break;
                    case 8:
                        pattern = numberFormat.NegativeSign + "{1:N" + numberFormat.CurrencyDecimalDigits + "} {0}";
                        break;
                    case 9:
                        pattern = numberFormat.NegativeSign + "{0} {1:N" + numberFormat.CurrencyDecimalDigits + "}";
                        break;
                    case 10:
                        pattern = "{1:N" + numberFormat.CurrencyDecimalDigits + "} {0}" + numberFormat.NegativeSign;
                        break;
                    case 11:
                        pattern = "{0} {1:N" + numberFormat.CurrencyDecimalDigits + "}" + numberFormat.NegativeSign;
                        break;
                    case 12:
                        pattern = "{0}" + " " + numberFormat.NegativeSign + "{1:N" + numberFormat.CurrencyDecimalDigits + "}";
                        break;
                    case 13:
                        pattern = "{1:N" + numberFormat.CurrencyDecimalDigits + "}" + numberFormat.NegativeSign + " " + "{0}";
                        break;
                    case 14:
                        pattern = "({0} {1:N" + numberFormat.CurrencyDecimalDigits + "})";
                        break;
                    case 15:
                        pattern = "({1:N" + numberFormat.CurrencyDecimalDigits + "} {0})";
                        break;
                }
                formattedAmount = String.Format(cultureInfo, pattern, numberFormat.CurrencySymbol, amount * -1);
            }

            Console.WriteLine(formattedAmount);
        }

        Console.ReadKey();

    }
}
Related