I've seen this pop up a few times recently in the context of Translate.Next's UI localization.
Adrian has started using a convention of module-component-message, which I think is a great start. As a general feedback, I'd encourage using identifiers as long as possible and reasonable, and the current practice aligns well with this recommendation. Fluent Syntax has special provisions for long ids; if they get too long, the translation can be moved to a new line. For instance:
# These two messages are equivalent.
editor-keyboard-shortcuts-overlay-title = Keyboard Shortcuts
In other projects, I've seen some people use double dashes to separate major components of the id.
# Double dashes separate the module from the component from the message.
editor--keyboard-shortcuts--overlay-title = Keyboard Shortcuts
Or, since modules and components already have their own naming conventions, we could follow them too:
# The component is written in UpperCamelCase.
editor-KeyboardShortcuts-overlay-title = Keyboard Shortcuts
Other than dashes, you could also use underscores (maybe similar to how BEM uses them? Although I'd probably recommend against mixing dashes and underscores in a single id.)
My recommendation would be to use the existing conventions in component names, use a double dash to separate the "namespace" from the actual message name, and use single dashes otherwise:
editor-KeyboardShortcuts--overlay-title = Keyboard Shortcuts