The general idea is that you have:
Provider.In addition, you would need hooks for loading translations as the user changes the language. If you have a user translatable system, that would need extra effort and design. This is possible to pull off, but it's pretty hard as you will need to take this requirement into account at component level.
You can see the basic ideas in action at the following solutions:
A lot of these packages seem fairly fresh still.