I wrote a library to handle all of this. However, there is a problem: performance.

This is why I request a player.request_locale_name() function. This function, through the corresponding event, would return the name of the locale that the player is using(en, zh-CN, es-ES, etc). This significantly cuts down on the amount of times you need to build a dictionary.
Using this function, I could tie dictionaries not to specific players, but to languages. When a player joins a game, if the dictionary for that language has already been made, it just sets that player to using that language. If not, it uses that player to assemble the dictionary for whatever language they are using. The only time after that that you would need to rebuild that dictionary would be after on_configuration_changed.