1

aspdotnetstorefront を使用して構築された e コマース サイトがあります。ロケールはに設定されています

de_DE

通貨はスイス フランで、次のように表示されます。

139,00 (CHF)

価格が次のように表示される受領通知に到達するときに問題があります: (間違っています。139,00 (CHF) のはずです)

1.390.000,00

通貨の表示仕様は次のように設定されています。

#,###.00

私の XML パッケージ (影響を受ける行) は次のようになります。

<xsl:value-of select="receipt:FormatCurrencyWithoutCurrencyCode(Price)" disable-output-escaping="yes" />

FormatCurrencyWithoutCurrencyCode:

#region FormatCurrencyWithoutCurrencyCode
    /// <summary>
    /// Format the currency value into it's localized currency pattern
    /// </summary>
    /// <param name="sCurrencyValue">The currency value</param>
    /// <returns>The formatted currency string</returns>
    public virtual string FormatCurrencyWithoutCurrencyCode(string sCurrencyValue)
    {
        return FormatCurrencyWithoutCurrencyCode(sCurrencyValue, ThisCustomer.CurrencySetting);
    }

    /// <summary>
    /// Format the currency value into it's localized currency pattern
    /// </summary>
    /// <param name="sCurrencyValue">The currency value</param>
    /// <param name="sTargetCurrency">The target currency to base on</param>
    /// <returns>The formatted currency string</returns>
    public virtual string FormatCurrencyWithoutCurrencyCode(string sCurrencyValue, string sTargetCurrency)
    {
        InputValidator iv = new InputValidator("FormatCurrencyWithoutCurrencyCode");
        decimal value = iv.ValidateDecimal("CurrencyValue", sCurrencyValue);
        string targetCurrency = iv.ValidateString("TargetCurrency", sTargetCurrency);

        decimal amt = Currency.Convert(value, Localization.GetPrimaryCurrency(), targetCurrency);

        String tmpS = String.Empty;
        // get currency specs for display control:
        String DisplaySpec = Currency.GetDisplaySpec(targetCurrency);
        String DisplayLocaleFormat = Currency.GetDisplayLocaleFormat(targetCurrency);

        if (DisplaySpec.Length != 0 && Currency.NumPublishedCurrencies() > 1)
        {
            tmpS = amt.ToString(DisplaySpec);
        }
        else if (DisplayLocaleFormat.Length != 0)
        {
            CultureInfo formatter = new CultureInfo(DisplayLocaleFormat);

            // for debugging purposes
            if (CommonLogic.QueryStringUSInt("dec") > 0)
            {
                int decimalPlaces = CommonLogic.QueryStringUSInt("dec");
                formatter.NumberFormat.CurrencyDecimalDigits = decimalPlaces;
            }

            tmpS = amt.ToString("C", formatter);
            if (tmpS.StartsWith("("))
            {
                tmpS = "-" + tmpS.Replace("(", "").Replace(")", "");
            }
        }
        else
        {
            tmpS = Localization.CurrencyStringForDisplayWithoutExchangeRate(amt, false); // use some generic default!
        }

        return tmpS;
    }

    #endregion
4

0 に答える 0