Abstract i18n some more
Extract i18n initialization into ui_i18n.c

This allows be more explicit about language fallback
route, and change it per-language.

Localized strings are now accessed via a function call,
instead of exposing a big string array.

This allows additional bounds check with a visible canary
value, and further abstracts i18n implementation.
Merge pull request #433 from albel727/better-i18n-take-two

Better i18n take two