WordPress uses gettext to map messages to translations (in files). i.e. when the template pulls content from the database it substitutes the text in db content for that in the file before showing it. And there are several plugins that can translate as well.
IMHO the gettext route is better because it translates "messages" as opposed to "words". For example, Google translate might (and might not) do a fairly good job, but even if the "best choice" is used the sentence structure could be wrong. But gettext requires that people fluent in both languages do the translating. Much more labor intensive.
Assuming your images don't contain text you shouldn't need to change those.
If you aren't going to have a lot of different languages I guess you could have different database tables for each. But if content is going to be changed or added often this could be a maintenance nightmare.