👨🏻
bg fr lt sk zh cs hr lv sl zh-hans da ht mk sm de hu mn sq el hy ms sr en id nl sv eo is no th es it pl to et ja pt tr fi km ro uk fj ko ru vi
en 1KB gzip
all
~45KB gzip
import i18n from "i18next";
import {initReactI18next} from 'react-i18next'
import localeStrings from './allLocaleStrings.json'
i18n
.use(initReactI18next)
.init({
lng: "zh",
fallbackLng: "en",
resources: localeStrings
});
import React from 'react'
import { useTranslation } from "react-i18next";
export default function App(){
const { t } = useTranslation();
return <div>{t("title")}</div>
}
@fs/zion-locale/src/index.js
App.js
import i18n from "i18next";
export const addTranslations = (translations) => {
translations.forEach(locale=>{
i18n.addResources(locale, 'translation', translations[locale])
})
}
// ... lots of other stuff too
import React from 'react'
import { addTranslations } from '@fs/zion-locale'
import { useTranslation } from "react-i18next";
import translations from './locales'
addTranslations(translations)
export default function App(){
const { t } = useTranslation();
return <div>{t("title")}</div>
}
@fs/zion-locale
App.js
import i18n from "i18next";
import {initReactI18next} from 'react-i18next'
import localeStrings from './allLocaleStrings.json'
i18n
.use(initReactI18next)
.init({
lng: "zh",
fallbackLng: "en",
resources: localeStrings
});
@fs/zion-locale/src/index.js
import i18n from "i18next";
import {initReactI18next} from 'react-i18next'
import enAppTranslations from '/coalesced-locales/dist/en/translation.json'
i18n
.use(initReactI18next)
.init({
lng: "zh",
fallbackLng: "en",
resources: enAppTranslations
});
import i18n from "i18next";
import {initReactI18next} from 'react-i18next'
import enAppTranslations from '/coalesced-locales/dist/en/translation.json'
i18n
.use(initReactI18next)
.init({
lng: "zh",
fallbackLng: "en",
resources: enAppTranslations,
backend:
resourcesToBackend((language, callback) => {
import(`/coalesced-locales/dist/${language}.json`)
.then(({ default: resources }) => {
callback(null, resources)
})
.catch((error) => {
callback(error, null)
})
}),
},
});
const {t} = useTranslation()
<div>{t('title')</div>
import React from 'react'
import { addTranslations } from '@fs/zion-locale'
import { useTranslation } from "react-i18next";
import translations from './locales'
addTranslations(translations)
export default function App(){
const { t } = useTranslation();
return <div>{t("title")}</div>
}
App.js
import React from 'react'
// import { addTranslations } from '@fs/zion-locale' remove me
import { useTranslation } from "react-i18next";
import './locales' // magic
// addTranslations(translations) remove me
export default function App(){
const { t } = useTranslation();
return <div>{t("title")}</div>
}
import './locales'
import enLocales from '/coalesced-locales/...'
$ npm start
Dependency Graf 😜
{
// from App locales
"title": "FamilySearch",
"description": "Coolest place",
// from shared component locales
"label": "Birth",
"value": "Stuff",
// from other shared component locales
"things": "Things",
"all.of.the.awesome": "All of the awesome"
}
src/locales/dist/en/translation.json
import enLocales from '/coalesced-locales/...'
import i18n from "i18next";
import {initReactI18next} from 'react-i18next'
import enAppTranslations from '/coalesced-locales/dist/en/translation.json'
i18n
.use(initReactI18next)
.init({
lng: "zh",
fallbackLng: "en",
resources: enAppTranslations,
backend:
resourcesToBackend((language, ns, callback) => {
import(`/coalesced-locales/dist/${language}/${ns}.json`)
.then(({ default: resources }) => {
callback(null, resources)
})
.catch((error) => {
callback(error, null)
})
}),
},
});
npm run analyzeBundle
import React, { Suspense, useState, lazy } from 'react'
const AddFindFlow = lazy(() => import('./AddFindFlow'))
export default function AddFindFlowButton() {
const [isOpen, setIsOpen] = useState(false)
return (
<Suspense fallback="Loading...">
<button onClick={() => setIsOpen(true)}>Add Person</button>
{isOpen && <AddFindFlow />}
</Suspense>
)
}