public static PhpArray localeconv(Context ctx)
{
PhpArray result = new PhpArray(0, 18);
NumberFormatInfo number;
number = GetCulture(ctx, Category.Numeric).NumberFormat;
result.Add("decimal_point", number.NumberDecimalSeparator);
result.Add("thousands_sep", number.NumberGroupSeparator);
result.Add("grouping", GetGroupingArray(number.CurrencyGroupSizes));
result.Add("positive_sign", number.PositiveSign);
result.Add("negative_sign", number.NegativeSign);
result.Add("frac_digits", number.CurrencyDecimalDigits);
number = GetCulture(ctx, Category.Monetary).NumberFormat;
result.Add("currency_symbol", number.CurrencySymbol);
result.Add("mon_decimal_point", number.CurrencyDecimalSeparator);
result.Add("mon_thousands_sep", number.CurrencyGroupSeparator);
result.Add("mon_grouping", GetGroupingArray(number.CurrencyGroupSizes));
// currency patterns: 0 -> $n, 1 -> n$, 2 -> $ n, 3 -> n $
result.Add("p_cs_precedes", number.CurrencyPositivePattern == 0 || number.CurrencyPositivePattern == 2);
result.Add("p_sep_by_space", number.CurrencyPositivePattern == 2 || number.CurrencyPositivePattern == 3);
result.Add("n_cs_precedes", number.CurrencyNegativePattern == 0 || number.CurrencyNegativePattern == 2);
result.Add("n_sep_by_space", number.CurrencyNegativePattern == 2 || number.CurrencyNegativePattern == 3);
result.Add("p_sign_posn", 1);
result.Add("n_sign_posn", 1);
return result;
}