re-write i18n (unfinished)