I'm not a native speaker, but I think both are grammatical and natural depending on the context.
Fred can speak Japanese
Because the object of 話せる is a language, it means 'to be able to speak that language.'
Fred can speak in Japanese
By using で, it means 'to be able to speak using that language.' で marks the means, that is, the way something is done.
Note that 言う can be used as well, but the meaning is different.
Fred can say it in Japanese.
A may be uttered as a response to 'Can Fred speak Japanese?' On the other hand, B may be uttered as a response to 'Can Fred speak in Japanese? I'm having a hard time understanding what he's saying in English.'
Another example with で:
I'm not good at speaking English yet.
A literal translation for the above would be 'I can't skillfully speak English yet.'