@JakeCham there are two types of content, static and dynamic.
The dynamic content changes very frequently, generally the content author authors this content. we need to send this content for translation.
The static content will not change very frequently and managed by the developer, just an example for this is placeholder text which you see in the search textbox. we cannot send this for translation because it is part of our code. We need to handle this via Java API or JS API. example: i18n.get("Search");
In AEM we have tow type of translation available, as you mentioned below;
With machine translation we have some constraints like supports for comparatively less languages, translated text is comparatively not up to the mark etc.
So for good content it has been recommended that use the Second form(Human translation) that provides so much flexibility like what are the fields you wanted to send it for translation, because we can not sent a link for translation.
We have used transperfect, a third party paid service, for the human translation and I found if very use full in many aspects.