@minvws/mgo-intl
v0.1.1-1
Published
This package contains all the text content used within [MGO][repo]. It utilizes [lokalise] for managing the content and translations. We use [FormatJS][formatjs] to integrate the text content within the application.
Keywords
Readme
@minvws/mgo-intl
This package contains all the text content used within MGO. It utilizes lokalise for managing the content and translations. We use FormatJS to integrate the text content within the application.
The content is divided into 2 parts:
- mgo-app This contains all the text content that is used within the application. For all the pages, buttons and forms etc. This content is also used by the mobile apps.
- mgo-fhir
This contains all the text content that is used for creating the Health Ui Schemas. It contains the labels for fields related to the ZIB information. And code / system translations that are used. This content is only used by
webas the mobile apps only use the already translated Health Ui Schemas.
Installation
npm i --save @minvws/mgo-intl
# or
pnpm add @minvws/mgo-intlUse
Because the core intl isn't necessarily compatible with each framework specific variant we don't export an intl instance from the package. Instead we export a function to create a config that is to be used when creating one. This config will already have all the relevant (precompiled) messages included. There are 2 available configs:
getAppIntlConfig- contains all the mgo-app messages.getFhirIntlConfig- contains all the mgo-fhir messages
They both accept the all the options from the IntlConfig except for messages as this will be preconfigured. In additions it accepts a ignoreMissingTranslations boolean which you can use to silence missing translation errors if needed.
Here is an example of how to get the app config when using react for rich text elements.
import { Locale, getAppIntlConfig } from '@minvws/mgo-intl';
const appConfig = getAppIntlConfig<ReactNode>({
locale: Locale.NL_NL,
defaultRichTextElements: {
b: (chunks) => <b className="font-bold">{chunks}</b>,
i: (chunks) => <i className="italic">{chunks}</i>,
},
});Types
The way FormatJS relies on a global type for applying a type to the message id's doesn't work well when you have multiple different intl configurations. Instead of relying on this global type we export our own types for each project. This type changes the type specification for the MessageDescriptor so only message id's from that specific project are accepted.
import { Locale, getFhirIntlConfig, createIntl, type FhirIntlShape } from '@minvws/mgo-intl
const intl = createIntl(getFhirIntlConfig({ locale: Locale.NL_NL }));
intl.formatMessage({ id: 'foobar' }); // ok :/
const fhirIntl = intl as FhirIntlShape;
fhirIntl.formatMessage({ id: 'foobar' }); // TypeError
fhirIntl.formatMessage({ id: 'r3.nl_core_patient.name' }); // okHelpers
We added 2 useful helpers for working with the translations: formatMessage and hasMessage. You can create the by passing an IntlShape, be sure it has the correct types before creating the helpers because it will reuse the same types for the message id.
import {
Locale,
getFhirIntlConfig,
createIntl,
createHelpers,
type FhirIntlShape,
} from '@minvws/mgo-intl
const intl = createIntl(getFhirIntlConfig({ locale: Locale.NL_NL })) as FhirIntlShape;
const { formatMessage, hasMessage } = createHelpers(intl);
intl.formatMessage({ id: 'r3.nl_core_patient.name' }); // "Naamgegevens"
formatMessage('r3.nl_core_patient.name'); // The same result: "Naamgegevens"
hasMessage('r3.nl_core_patient.name'); // true
hasMessage('foobar'); // falseSee the package source for more details
This package and its documentation are still under development.
