I use WPML and it does a good job.
You can translate any plugin, (custom)post types, any string wherever, both in front end and admin. If a translation is available, it can download that automatically. And you can adjust to taste.
One of the nice features is that you can quite easily use different domains (mysite.com, mysite.fr, etc).
Or choose /en/ or ?lang= as a way to handle language changes in the url.
It keeps canonical links etc. synchronized and does things the right way on SEO.
WPML does have kind of a learning curve, but once you get the hang of it, you’ll appreciate the possibilities. They have made great improvements over the last few years. The performance is very good in my opinion.
For one project I used the translation management where new content is automatically added to a translator’s bucket.
You can add your own translators for every language, to your admin, that can work independently.