13 lines
517 B
TypeScript
13 lines
517 B
TypeScript
// Single source of truth for turning an i18next dotted key (`landing.cards.x`)
|
|
// into a Paraglide snake_case message identifier (`landing_cards_x`). Used by the
|
|
// runtime resolver `mKey` for the unavoidable dynamic cases.
|
|
export const identOf = (dotPath: string): string =>
|
|
dotPath
|
|
.replace(/([a-z0-9])([A-Z])/g, '$1_$2')
|
|
.replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2')
|
|
.replace(/[.\-\s]+/g, '_')
|
|
.replace(/[^A-Za-z0-9_]/g, '')
|
|
.replace(/_+/g, '_')
|
|
.replace(/^_+|_+$/g, '')
|
|
.toLowerCase()
|