I treat CC and Subtitles the same way since they are text embedded in a file that can be turned ON or OFF … Hard subtitles are burned into the image on export and are in fact the result of TITLES over the image, these can be generated by the translation of SRT SCC ITT … via a software that translate presence a project fcpxml or xml to an fcpxml or xml that includes the TITLES.
There are two basic ways to create create subtitles/captions :
1) create for a final movie
2) create in a "work in process" project.
For 1) you have several options
send to a service to deliver a file
do it yourself either in an external app or within FCPX
If you do it yourself FCPX in it's newest version would be my choice using the Captions feature. It has most of the features external apps have.
The problem is (could be) :
if you use SCC: not all languages are possible, there are limitations for the amount of characters.
Only one language can be embedded.
if you use ITT: the captions can't be embedded into the final movie.
both can't be "burned in" means be open captions.
You have to find a "point of work's state" to start with subtitles.
The way to get them is same as above.
The big advantage of FCPX is that the captions are traveling with the clips.
For final release:
For SCC the cheapest (free) solution is DaVinci Resolve to get burned in captions.
You also can use it to get SRT files from the SCC captions.
Latter is valid for YouTube too - but it takes longer.
If you have iTT and own PPro you can use PPro for the final movie and import the iTT file - change the extension to xml or dfxp.
Other options are mentioned above.
An important note though: don't try to use one of the free converters for SCC - they don't work reliable. SCC is more complicated than most people think. Convert SCC into iTT inside FCPX before you export the captions.
To convert captions of both types into titles probably my X-Title Caption Convert is the easiest way since it works more ore less seamless with FCP.
To embed several languages use Subler (don't forget to donate). You need SRT files for that (by default SRT, VTT could work as well)