I'm not sure I like this localization pattern.  In almost all cases the localization data is already read, so you could just call translate() synchronously.  But if it is not ready, then we'll probably see the UI flash while localization is happening.  Seems like it would be simpler to just wait for once() at app startup and then not worry about it again.