@procore/labs-i18n-extensions v0.5.0
i18n-extensions
Disclaimer: Meant for Procore internal use only.
Utility to provide translations for the decoupled frontend applications, aka "hydra clients".
As part of the initiative to move outside the monolith, this package provides functionality to fetch translations file for a given client.
The package encapsulated core-react/I18n so the consuming application code should not change much.
Note: Consuming application should not wrap itself within
<I18n.Provider>from@procore/core-reactAs of now, the provider accepts
localeandcompanyIdto as optional props and fallbacks on of thewindow.Procore.Environmentfor fetchinglocaleandcompany_id. In the future, intentions are to remove this dependency and accept them as config props.P.S.: Loads
globaltranslations by default.
Install
yarn add @procore/labs-i18n-extensionsUsage
Context
import { render } from 'react-dom';
import { I18nExtensions } from '@procore/labs-i18n-extensions'; // replaces I18n
import { Application } from './Application';
render(
<I18nExtensions clientName="${CLIENT_NAME}">
<Application />
</I18nExtensions>,
document.getElementById('root')
);Changes
import { render } from 'react-dom';
- import { I18n } from '@procore/core-react'; // removed
+ import { I18nExtensions } from '@procore/labs-i18n-extensions'; // replaces I18n
import { Application } from './Application';
render(
- <I18n.Provider I18n={I18nObject}>
+ <I18nExtensions clientName="${CLIENT_NAME}">
<Application />
- </I18n.Provider>,
+ </I18nExtensions>,
document.getElementById('root')
);Hook
import { useI18nFetcher } from '@procore/labs-i18n-extensions';
// in component
const { loadTranslation, getTranslationStatus } = useI18nFetcher({
companyId,
locale
});
// loads translation
loadTranslation('${CLIENT_NAME}');
// returns translation status: loaded, loading, failed
const translationStatus = getTranslationStatus('${CLIENT_NAME'});Props
Context
| Props | Description | Type | Default |
|---|---|---|---|
clientName | Name of the client(s) to pull translations for. | string | string[] | N/A (Required) |
companyId | companyId to be passed along to the translations fetch endpoint. (optional) | string | window.Procore.Environment.companyId |
configUrl | Endpoint to fetch the translations file location from. (optional) | string | /rest/v1.0/internal/i18n/translation_file_url |
loadingIndicator | Custom loading indicator to replace default loading indicator (Spinner). (optional) | ReactNode | core-react Spinner |
locale | locale for the translations. (optional) | Locale | window.Procore.Environment.locale |
noDefaults | Disable injection of default translations. (optional) | boolean | false |
Hook
Params
| Param | Description | Type |
|---|---|---|
companyId | companyId to be passed along to the translations fetch endpoint. | string |
configUrl | Endpoint to fetch the translations file location from. (optional) | string |
locale | locale for the translations. | Locale |
Returns
| Key | Description | Type | Param | Returns |
|---|---|---|---|---|
loadTranslation | Load translation for a given client. | Function | string | void |
| N/A | I18n | I18n object. | N/A | N/A |
getTranslationStatus | Get translation status for a given client. | Function | string | Loading Status: 'loaded', 'loading', 'failed' |