mirror of
https://github.com/documenso/documenso.git
synced 2025-11-13 08:13:56 +10:00
## Description Web changes: - Enabled i18n for web - Add option to change language in command menu - Add option to change language in menu-switcher Web and marketing changes: - Stop setting 'en' preference into cookie if the user's language is not supported - Dropped middleware changes - Rotated cookie from 'i18n' to 'language' <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Introduced a language switcher in the footer for improved language selection. - Added dynamic language change functionality in the command menu. - Implemented a dropdown menu item for quick access to the language switcher. - **Bug Fixes** - Resolved issues related to language change notifications and state management. - **Translations** - Added new translation entries for improved language support, including "Search languages..." in English and German. - Updated existing translations to enhance clarity and accuracy. - **Chores** - Simplified internationalization handling in middleware. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: github-actions <github-actions@documenso.com>
58 lines
1.6 KiB
TypeScript
58 lines
1.6 KiB
TypeScript
import { msg } from '@lingui/macro';
|
|
import { useLingui } from '@lingui/react';
|
|
import { CheckIcon } from 'lucide-react';
|
|
|
|
import { SUPPORTED_LANGUAGES } from '@documenso/lib/constants/i18n';
|
|
import { switchI18NLanguage } from '@documenso/lib/server-only/i18n/switch-i18n-language';
|
|
import { dynamicActivate } from '@documenso/lib/utils/i18n';
|
|
import { cn } from '@documenso/ui/lib/utils';
|
|
import {
|
|
CommandDialog,
|
|
CommandGroup,
|
|
CommandInput,
|
|
CommandItem,
|
|
CommandList,
|
|
} from '@documenso/ui/primitives/command';
|
|
|
|
type LanguageSwitcherDialogProps = {
|
|
open: boolean;
|
|
setOpen: (_open: boolean) => void;
|
|
};
|
|
|
|
export const LanguageSwitcherDialog = ({ open, setOpen }: LanguageSwitcherDialogProps) => {
|
|
const { i18n, _ } = useLingui();
|
|
|
|
const setLanguage = async (lang: string) => {
|
|
setOpen(false);
|
|
|
|
await dynamicActivate(i18n, lang);
|
|
await switchI18NLanguage(lang);
|
|
};
|
|
|
|
return (
|
|
<CommandDialog open={open} onOpenChange={setOpen}>
|
|
<CommandInput placeholder={_(msg`Search languages...`)} />
|
|
|
|
<CommandList>
|
|
<CommandGroup>
|
|
{Object.values(SUPPORTED_LANGUAGES).map((language) => (
|
|
<CommandItem
|
|
key={language.short}
|
|
value={language.full}
|
|
onSelect={async () => setLanguage(language.short)}
|
|
>
|
|
<CheckIcon
|
|
className={cn(
|
|
'mr-2 h-4 w-4',
|
|
i18n.locale === language.short ? 'opacity-100' : 'opacity-0',
|
|
)}
|
|
/>
|
|
{SUPPORTED_LANGUAGES[language.short].full}
|
|
</CommandItem>
|
|
))}
|
|
</CommandGroup>
|
|
</CommandList>
|
|
</CommandDialog>
|
|
);
|
|
};
|