Hi Jeremy,
In my opinion you can manage it by 2 ways:
1) Using MSM. As all these e-commerce modules are compatible with MSM. So it can be done by setting up separates website for each language in same root directory.
Let you have 2 languages English and French. Setup 2 sites
i) http://yousitename.com/en/ or http://yousitename.com for English
ii) http://yousitename.com/fr/ for French
In this way, both sites will have its own language contents. But products need to be updated for all the sites from CP
2) Expresso Store and CartThrob use products as channel entries (I ‘m little unsure about Expresso Store if it uses channel entries as product items).
You can create as many product’s channel custom fields as many languages for an attribute. Let for products description create 2 field description_en and description_fr. While switching the site language or accessing site for a specific language set language code either en or fr as global variable.
Now you can populate description field as {description_{language_code}}. Same logic can be applied for other channel contents also.
I hope above suggestions may help you.
Best Regards,