refs https://github.com/TryGhost/Team/issues/2795
- this helps reduce conflicts when multiple PRs are coming in to add new
languages
- I'd also like to enforce alphabetically sorted keys but I can't figure
out the magic eslint incantation yet
refs https://github.com/TryGhost/Ghost/issues/15502
- this adds the scaffolding for enabling i18n translations within Ghost
core
- also adds `yarn translate:ghost` as an option to the `i18n` package
- the locale is currently hardcoded to `en` so we don't utilize the
translations until we're ready
refs https://github.com/TryGhost/Ghost/issues/15502
- in order to use the translations, strings must be wrapped in the `t`
function, which is passed through AppContext
- whilst I haven't instrumented all public strings, the vast majority
are done here and the strings have been brought into the JSON locale files using `yarn translate:generate`
refs https://github.com/TryGhost/Ghost/issues/15502
- the amazing `i18next-parser` dependency will extract our translated
strings from Portal and dump them into locale files, so we never have
to add them manually
refs https://github.com/TryGhost/Ghost/issues/15502
- plain JSON files are cleaner and less overwhelming than boilerplate JS
files, and given they're going to be automatically generated, we
probably won't be able to support comments anyway
refs https://github.com/TryGhost/Ghost/issues/15502
- this is an early implementation of an i18n provider by
exporting an instance of `i18next`
- there's a lot more to be done here but baby steps :)