Scriptable Objects
I've gone with SOs (scriptable objects) to hold each bit of dialogue. This should make having each "cutscene" in it's own thing easy enough, and swappable if needed. SOs also allow me to create a cool custom editor for showing off compiled pieces of dialogue.
These SOs can then be given to in-game controllers to update canvas elements.
Language
Something that I'd love to do for this game is provide multiple translations - which I've never done before. My assumption is that I can include translations within these SOs, and then select the current language based on an index.
Something I ran into was the inability to serialize and save a dictionary. So instead of having "en":"dialogue" key pairs, they're just sitting in an array. This might cause issues down the line with the looseness, but having a baseline system in is probably better than spending weeks on something that might not fit the needs we have.