The last parameter of every validator can be an array. One of the parameters that can be passed is 'messages', which is an array of validator specific constants representing each error, and strings of the error messages. You can get a list of error codes by looking at the validator classes (such as Zend/Validate/File/ImageSize.php). In your case, these would be:
$file = new Zend_Form_Element_File('file', array(
'required' => false, //we will add this as a custom validator so we can over-ride the error message
'MaxFileSize' => 4194304,
'validators' => array(
array('NotEmpty', true, array('messages' => array('isEmpty' => "Your error message here")))
array('Count', false, array(count => 1, 'messages' => array('fileCountTooFew' => "Too few files, minimum '%min%' are expected but '%count%' are given", 'fileCountTooMany' => "Too many files, maximum '%max%' are allowed but '%count%' are given"))),
array('Size', false, array('size' => 4194304, 'messages'=> array('fileSizeTooBig' => "", 'fileSizeTooSmall' => "", 'fileSizeNotFound' => ""))),
array('Extension', false, array('extension' => 'gif,jpg,png', 'messages' => array('fileExtensionFalse' => "", 'fileExtensionNotFound' => ""))),
array('ImageSize', false, array('minwidth' => 40,
'minheight' => 40,
'maxwidth' => 90,
'maxheight' => 90,
'messages' => array(
'fileImageSizeWidthTooBig' => "Maximum allowed width for image '%value%' should be '%maxwidth%' but '%width%' detected",
'fileImageSizeWidthTooSmall' => "Minimum expected width for image '%value%' should be '%minwidth%' but '%width%' detected",
'fileImageSizeHeightTooBig' => "Maximum allowed height for image '%value%' should be '%maxheight%' but '%height%' detected",
'fileImageSizeHeightTooSmall' => "Minimum expected height for image '%value%' should be '%minheight%' but '%height%' detected",
'fileImageSizeNotDetected' => "The size of image '%value%' could not be detected",
'fileImageSizeNotReadable' => "File '%value%' can not be read",
)
)
)
)
)
);