b0e130a4d8
* WIP not working dropdown * Update MutedWords dialog * Add i18n formatDistance * Comments * Handle text wrapping * Update label copy Co-authored-by: Hailey <me@haileyok.com> * Fix alignment * Improve translation output * Revert toggle changes * Better types for useFormatDistance * Tweaks * Integrate new sdk version into TagMenu * Use ampersand Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com> * Bump SDK --------- Co-authored-by: Hailey <me@haileyok.com> Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com>
70 lines
1.2 KiB
TypeScript
70 lines
1.2 KiB
TypeScript
/**
|
|
* Hooks for date-fns localized formatters.
|
|
*
|
|
* Our app supports some languages that are not included in date-fns by
|
|
* default, in which case it will fall back to English.
|
|
*
|
|
* {@link https://github.com/date-fns/date-fns/blob/main/docs/i18n.md}
|
|
*/
|
|
|
|
import React from 'react'
|
|
import {formatDistance, Locale} from 'date-fns'
|
|
import {
|
|
ca,
|
|
de,
|
|
es,
|
|
fi,
|
|
fr,
|
|
hi,
|
|
id,
|
|
it,
|
|
ja,
|
|
ko,
|
|
ptBR,
|
|
tr,
|
|
uk,
|
|
zhCN,
|
|
zhTW,
|
|
} from 'date-fns/locale'
|
|
|
|
import {AppLanguage} from '#/locale/languages'
|
|
import {useLanguagePrefs} from '#/state/preferences'
|
|
|
|
/**
|
|
* {@link AppLanguage}
|
|
*/
|
|
const locales: Record<AppLanguage, Locale | undefined> = {
|
|
en: undefined,
|
|
ca,
|
|
de,
|
|
es,
|
|
fi,
|
|
fr,
|
|
ga: undefined,
|
|
hi,
|
|
id,
|
|
it,
|
|
ja,
|
|
ko,
|
|
['pt-BR']: ptBR,
|
|
tr,
|
|
uk,
|
|
['zh-CN']: zhCN,
|
|
['zh-TW']: zhTW,
|
|
}
|
|
|
|
/**
|
|
* Returns a localized `formatDistance` function.
|
|
* {@link formatDistance}
|
|
*/
|
|
export function useFormatDistance() {
|
|
const {appLanguage} = useLanguagePrefs()
|
|
return React.useCallback<typeof formatDistance>(
|
|
(date, baseDate, options) => {
|
|
const locale = locales[appLanguage as AppLanguage]
|
|
return formatDistance(date, baseDate, {...options, locale: locale})
|
|
},
|
|
[appLanguage],
|
|
)
|
|
}
|