SELECT * FROM  portfolio
INNER JOIN  translation 
ON portfolio.description =  translation.key
WHERE
  MATCH(it_translation.*) AGAINST('test')

Why this code does not work?

Basically do such as this MATCH(it_translation.field) AGAINST('test') things are ok, however i wanna search FULLTEXT via several area, and I'm not sure the number of fields in table.

IIRC for FULLTEXT to operate you'll need a FULLTEXT index that covers every area you need to apply it, if you "have no idea the number of fields in table" you will not have the ability to MATCH it like this.