diff --git a/docusaurus/docs/intro.md b/docusaurus/docs/intro.md index 2f45582a..cd7b2d02 100644 --- a/docusaurus/docs/intro.md +++ b/docusaurus/docs/intro.md @@ -56,8 +56,8 @@ registerTranslation('pl', { selectRange: 'Select period', notAccordingToDateFormat: (inputFormat) => `Date format must be ${inputFormat}`, - mustBeHigherThan: (date) => `Must be later then ${date}`, - mustBeLowerThan: (date) => `Must be earlier then ${date}`, + mustBeHigherThan: (date) => `Must be later than ${date}`, + mustBeLowerThan: (date) => `Must be earlier than ${date}`, mustBeBetween: (startDate, endDate) => `Must be between ${startDate} - ${endDate}`, dateIsDisabled: 'Day is not allowed', @@ -69,6 +69,35 @@ registerTranslation('pl', { }) ``` +### Dynamic + +React-Native-Paper-Dates also provides the ability to register dynamically resolved translations. This allows you to use a different translation provider to resolve the translations. For example: + +```javascript +import { translate } from 'YOUR_TRANSLATION_PROVIDER' +import { registerTranslation } from 'react-native-paper-dates' +registerTranslation('dynamic', () => { + return { + save: translate('Save'), + selectSingle: translate('Select date'), + selectMultiple: translate('Select dates'), + selectRange: translate('Select period'), + notAccordingToDateFormat: (inputFormat) => + translate(`Date format must be ${inputFormat}`), + mustBeHigherThan: (date) => translate(`Must be later than ${date}`), + mustBeLowerThan: (date) => translate(`Must be earlier than ${date}`), + mustBeBetween: (startDate, endDate) => + translate(`Must be between ${startDate} - ${endDate}`), + dateIsDisabled: translate('Day is not allowed'), + previous: translate('Previous'), + next: translate('Next'), + typeInDate: translate('Type in date'), + pickDateFromCalendar: translate('Pick date from calendar'), + close: translate('Close'), + } +}) +``` + :::info Note If a language is not supported, consider creating a pull request so that it can officially be supported. diff --git a/src/translations/utils.ts b/src/translations/utils.ts index 6fe40672..bf5e8d44 100644 --- a/src/translations/utils.ts +++ b/src/translations/utils.ts @@ -17,7 +17,14 @@ export type TranslationsType = { minute: string } -let translationsPerLocale: Record = {} +export type TranslationResolver = ( + locale: string | undefined +) => TranslationsType + +let translationsPerLocale: Record< + string, + TranslationsType | TranslationResolver +> = {} export function getTranslation( locale: string | undefined, @@ -32,7 +39,10 @@ export function getTranslation( ) return fallback || key } - const translation = translationsPerLocale[l][key] + const translation: TranslationsType[K] = + typeof translationForLocale === 'function' + ? translationForLocale(locale)[key] + : translationForLocale[key] if (!translation) { console.warn( `[react-native-paper-dates] The locale ${locale} is registered, but ${key} is missing` @@ -43,7 +53,7 @@ export function getTranslation( export function registerTranslation( locale: string, - translations: TranslationsType + translations: TranslationsType | TranslationResolver ) { translationsPerLocale[locale] = translations }