Kinda continuing what Chuck said, I've done a lot of this in the recent past. The bigger translation agencies (I had a go at it with Global Lingo) will take exported source code straight out of the Authoring Tool and charge 'engineering' time to extract text strings and put them back again. The trouble with this is you're still going to have to reinstate assets and custom css and it tends (in my experience) to get a bit sticky and picks up little bugs that are time consuming to fix. You're inevitably a bit separated from the person doing the work which is hard going.
The far better way I'd say is to largely follow the process detailed here: https://github.com/adaptlearning/adapt_framework/wiki/Course-Localisation
In this case you export source code; expand zip; get a new terminal window at that folder; run npm install; run grunt build; run grunt translate:export --format=csv
That gives you a language files folder of CSVs that will include html tags. A reasonable translation agency should be able to handle these happily but I'm with Chuck on the guidance front. You need to lay down the law that they don't make any non-language edits or leave cells empty or move anything around etc. I took the view that they should add a translation column rather than giving me back docs I couldn't understand. Obviously that meant I had a bit of work to do to prep for getting the course back together but that's a personal choice. Note also that Excel is not very good here with Latin characters if you're opening translated files. But there's ways around it.
To get the course back together in translated form largely follow the process in the above link but then you'll need to remove the node and language files folders, move over your assets from the original en folder to your new course folder then remove the original en course folders and update your course config, edit names in course.json so that you can identify / manage the course back in the authoring tool. Any custom CSS you had will need to be popped back in when you import as well as establishing start controllers et al.
Then you can zip it back up (zip -r name-of-folder-here ./*) and import it back into the Authoring Tool.
This might sound like a lot, but in reality once you're into the flow you're talking a matter of a 15 mins to do the in / out work. But you do need to have a pretty strong awareness of what's going on as you can cause yourself grief if you get distracted!
What I would not advise (and I was forced into this situation at the start of lockdown last year) is taking the above approach but having to 'manage' files for 'in-house' or 'freelance' translation, where the one-man-band provider has no wider capacity other than straight 'you give me English I give you French' for example. In that situation you get into having to potentially 'clean up' the CSVs to make them understandable and then re-establish everything again. It can be done but no matter how hard you to try to guide it only takes one false move on their part and you're into a whole lot of bother.
Hope this helps get you on your way.
(Limitation: I have not yet done this end to end on the latest FW and AT. There could be tweaks required)