Skip to content

Commit 49563b5

Browse files
authored
Merge pull request #471 from LiamMorrow/master
Allow registering dynamic translations
2 parents 3228490 + 91bf284 commit 49563b5

File tree

2 files changed

+44
-5
lines changed

2 files changed

+44
-5
lines changed

docusaurus/docs/intro.md

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,8 @@ registerTranslation('pl', {
5656
selectRange: 'Select period',
5757
notAccordingToDateFormat: (inputFormat) =>
5858
`Date format must be ${inputFormat}`,
59-
mustBeHigherThan: (date) => `Must be later then ${date}`,
60-
mustBeLowerThan: (date) => `Must be earlier then ${date}`,
59+
mustBeHigherThan: (date) => `Must be later than ${date}`,
60+
mustBeLowerThan: (date) => `Must be earlier than ${date}`,
6161
mustBeBetween: (startDate, endDate) =>
6262
`Must be between ${startDate} - ${endDate}`,
6363
dateIsDisabled: 'Day is not allowed',
@@ -69,6 +69,35 @@ registerTranslation('pl', {
6969
})
7070
```
7171

72+
### Dynamic
73+
74+
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:
75+
76+
```javascript
77+
import { translate } from 'YOUR_TRANSLATION_PROVIDER'
78+
import { registerTranslation } from 'react-native-paper-dates'
79+
registerTranslation('dynamic', () => {
80+
return {
81+
save: translate('Save'),
82+
selectSingle: translate('Select date'),
83+
selectMultiple: translate('Select dates'),
84+
selectRange: translate('Select period'),
85+
notAccordingToDateFormat: (inputFormat) =>
86+
translate(`Date format must be ${inputFormat}`),
87+
mustBeHigherThan: (date) => translate(`Must be later than ${date}`),
88+
mustBeLowerThan: (date) => translate(`Must be earlier than ${date}`),
89+
mustBeBetween: (startDate, endDate) =>
90+
translate(`Must be between ${startDate} - ${endDate}`),
91+
dateIsDisabled: translate('Day is not allowed'),
92+
previous: translate('Previous'),
93+
next: translate('Next'),
94+
typeInDate: translate('Type in date'),
95+
pickDateFromCalendar: translate('Pick date from calendar'),
96+
close: translate('Close'),
97+
}
98+
})
99+
```
100+
72101
:::info Note
73102

74103
If a language is not supported, consider creating a pull request so that it can officially be supported.

src/translations/utils.ts

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,14 @@ export type TranslationsType = {
1717
minute: string
1818
}
1919

20-
let translationsPerLocale: Record<string, TranslationsType> = {}
20+
export type TranslationResolver = (
21+
locale: string | undefined
22+
) => TranslationsType
23+
24+
let translationsPerLocale: Record<
25+
string,
26+
TranslationsType | TranslationResolver
27+
> = {}
2128

2229
export function getTranslation<K extends keyof TranslationsType>(
2330
locale: string | undefined,
@@ -32,7 +39,10 @@ export function getTranslation<K extends keyof TranslationsType>(
3239
)
3340
return fallback || key
3441
}
35-
const translation = translationsPerLocale[l][key]
42+
const translation: TranslationsType[K] =
43+
typeof translationForLocale === 'function'
44+
? translationForLocale(locale)[key]
45+
: translationForLocale[key]
3646
if (!translation) {
3747
console.warn(
3848
`[react-native-paper-dates] The locale ${locale} is registered, but ${key} is missing`
@@ -43,7 +53,7 @@ export function getTranslation<K extends keyof TranslationsType>(
4353

4454
export function registerTranslation(
4555
locale: string,
46-
translations: TranslationsType
56+
translations: TranslationsType | TranslationResolver
4757
) {
4858
translationsPerLocale[locale] = translations
4959
}

0 commit comments

Comments
 (0)