Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 39 additions & 0 deletions dream_layer_frontend/src/components/LanguageSelector.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
import React from 'react';
import { Button } from "@/components/ui/button";
import {
DropdownMenu,
DropdownMenuContent,
DropdownMenuItem,
DropdownMenuTrigger,
} from "@/components/ui/dropdown-menu";
import { Globe } from "lucide-react";
import { useI18n } from '@/i18n/i18nContext';

const LanguageSelector = () => {
const { language, setLanguage, availableLanguages } = useI18n();

return (
<DropdownMenu>
<DropdownMenuTrigger asChild>
<Button variant="ghost" size="sm" className="h-8 w-8 p-0">
<Globe className="h-4 w-4" />
<span className="sr-only">Toggle language</span>
</Button>
</DropdownMenuTrigger>
<DropdownMenuContent align="end">
{Object.entries(availableLanguages).map(([code, lang]) => (
<DropdownMenuItem
key={code}
onClick={() => setLanguage(code as keyof typeof availableLanguages)}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestion: The LanguageSelector does not provide visual feedback for the currently selected language beyond background color.

Consider adding a checkmark or icon to indicate the selected language, which will improve accessibility for users with color vision deficiencies.

Suggested implementation:

import { Globe, Check } from "lucide-react";
        {Object.entries(availableLanguages).map(([code, lang]) => (
          <DropdownMenuItem
            key={code}
            onClick={() => setLanguage(code as keyof typeof availableLanguages)}
            className={language === code ? 'bg-accent' : ''}
          >
            <span className="mr-2">{lang.flag}</span>
            {lang.name}
            {language === code && (
              <Check
                className="ml-2 h-4 w-4 text-primary"
                aria-label="Selected language"
              />
            )}
          </DropdownMenuItem>
        ))}

className={language === code ? 'bg-accent' : ''}
>
<span className="mr-2">{lang.flag}</span>
{lang.name}
</DropdownMenuItem>
))}
</DropdownMenuContent>
</DropdownMenu>
);
};

export default LanguageSelector;
Loading