architecture – Management of localization strings in a powerful c ++ game engine

I wonder what is the approach used to manage localization in a modern gaming engine. In general, I would refer to a string that would serve as a tag (say: AURA_POISON_CLOUD) in the code, then later in my user interface, search in the language of my choice.

Considering that linking a complete string to my game status structure (ECS architecture) seems to me a little ineffective, I could chop the string, then in my UI, I had to get the original string first , then perform the location search. How would you handle the hash when it needs to be reversible? By definition, this seems impossible. An alternative would be two dictionaries: strings => ints and ints => strings for reverse search. Is there anything I miss here?

How do you approach this problem in your games?