Unfortunately WaitForCompletion is not supported on WebGl, this means if you use an synchronous call such as GetLocalizedString and that asset is not loaded then it will fail.
There are some ways to work around this. Marking your tables as preloaded should ensure that they are all loaded however switching languages will still require you to wait for the LocalizationSettings.InitialozationOperation to finish.
If you use the StringChanged event instead of calling GetLocalizedString then it will handle everything for you however it will become async. If all your code relies on sync then you could try switching to a loading scene when someone changes the language and waiting for the preloading of tables to complete before switching back. There’s a sample in the package that shows a simple loading screen.
In short, you want to mark the tables as preload and ensure you wait for initialization when starting and changing language.
Initialization operation is for application start and any time the selected language is changed.
You can use the selected locale changed event combined with checking the initialization operation to know if the language is being loaded. You can check initialization operation at any time to see if IsDone is true.