Вы можете отфильтровать недостающие валюты следующим образом:
$cur = array_diff(
array('HUF', 'AUD', 'BGN', 'BRL', 'CAD', 'CHF', 'CNY', 'CZK', 'DKK', 'EUR', 'GBP', 'HKD', 'HRK', 'ISK', 'JPY', 'KRW', 'LTL', 'LVL', 'MXN', 'NOK', 'NZD', 'PLN', 'RON', 'RSD', 'RUB', 'SEK', 'SGD', 'TRY', 'UAH', 'USD', 'ZAR'),
array('BGN', 'MXN', 'RUB')
);
$w = new sfWidgetFormI18nChoiceCurrency(array(
'culture' => 'sw',
'currencies' => $cur,
'add_empty' => false,
'default' => 'EUR',
));
echo $w->render('cur');
Исключение происходит из sfCultureInfo.php (строка 761), где запрашиваемые валюты сравниваются с предопределенными, так что Symfony может обеспечитьсправиться с ними.
Что может, но НЕ ДОЛЖНО БЫТЬ СДЕЛАНО - это изменить root.dat и добавить недостающие валюты, но я думаю, что это еще не все, и это изменит ваше ядро Symfony.код (плохой)