Files
maher 703f50a09d
Some checks failed
Build / run (push) Has been cancelled
first commit
2025-10-29 11:42:25 +01:00

52 lines
1.3 KiB
TypeScript
Executable File

import {useCallback} from 'react';
import memoize from 'nano-memoize';
import {useSelectedLocale} from './selected-locale';
import {handlePluralMessage} from './handle-plural-message';
import {MessageDescriptor} from './message-descriptor';
import {shallowEqual} from '../utils/shallow-equal';
export interface UseTransReturn {
trans: (props: MessageDescriptor) => string;
}
export function useTrans(): UseTransReturn {
const {lines, localeCode} = useSelectedLocale();
const trans = useCallback(
(props: MessageDescriptor): string => {
return translate({...props, lines, localeCode});
},
[lines, localeCode],
);
return {trans};
}
interface TranslateProps extends MessageDescriptor {
lines?: Record<string, string>;
localeCode: string;
}
const translate = memoize(
(props: TranslateProps) => {
let {lines, message, values, localeCode} = props;
if (message == null) {
return '';
}
message = lines?.[message] || lines?.[message.toLowerCase()] || message;
if (!values) {
return message;
}
message = handlePluralMessage(localeCode, props);
Object.entries(values).forEach(([key, value]) => {
message = message.replace(`:${key}`, `${value}`);
});
return message;
},
{equals: shallowEqual, callTimeout: 0},
);