/src/modules/locale/components/two/index.tsx
"use client";

import * as DropdownMenu from "@radix-ui/react-dropdown-menu";
import styles from "./index.module.scss";
import { locales } from "@/lib/i18n/config";
import { Link, usePathname } from "@/lib/i18n/navigation";
import { useLocale } from "next-intl";
import Flag from "react-world-flags";

export default function Locale() {
  const pathname = usePathname();
  const currentLocale = useLocale();
  const current = locales?.find((l) => l.code === currentLocale) ?? locales?.[0];

  return (
    <DropdownMenu.Root >
      <DropdownMenu.Trigger className={styles.trigger}>
          <div className={styles.language}>
            <Flag code={current?.icon} className={styles.flag} />
            <span>{current?.nativeName}</span>
          </div>
          <span>
            <svg
              xmlns="http://www.w3.org/2000/svg"
              width="24"
              height="24"
              viewBox="0 0 24 24"
              fill="none"
              stroke="currentColor"
              strokeWidth="2"
              strokeLinecap="round"
              strokeLinejoin="round"
            >
              <path d="m6 9 6 6 6-6" />
            </svg>
          </span>
        
      </DropdownMenu.Trigger>

      <DropdownMenu.Portal>
        <DropdownMenu.Content
          className={styles.menu}
          sideOffset={0}
          align="start"
          
        >
          {locales?.map((item) => (
            <DropdownMenu.Item key={item.code} asChild>
              <Link
                href={pathname}
                locale={item.code}
                className={styles.menuItem}
              >
                <Flag code={item?.icon} className={styles.flag} />
                <span>{item?.nativeName}</span>
              </Link>
            </DropdownMenu.Item>
          ))}
        </DropdownMenu.Content>
      </DropdownMenu.Portal>
    </DropdownMenu.Root>
  );
}
/src/modules/locale/components/two/index.module.scss
.trigger {
  cursor: pointer;
  display: flex;
  align-items: center;
  gap: 10px;
  width: 160px;
  justify-content: space-between;
  font-size: var(--font-base);
  border: 0;
  padding: 5px;
  font-size: var(--font-sm);
  .language {
    display: flex;
    gap: 10px;
    align-items: center;
    white-space: nowrap;
     overflow: hidden;          // 配合截断
  text-overflow: ellipsis;   // 超出显示省略号
  }
  img {
    width: 25px;
    height: 25px;
  }
}

.menu {
  display: flex;
  flex-direction: column;
  font-size: var(--font-sm);
  background-color: #fff;
  width: 160px;
  max-height: 400px;
  overflow-y: auto;
  .menuItem {
    outline: none;

    display: flex;
    
    align-items: center;
    padding: 5px;
    gap: 10px;
    &[data-highlighted] {
      background-color: #f5f5f5; // 你想要的 hover 背景色
      color: var(--primary-color); // 可选:文字颜色
    }
    img {
      width: 25px;
      height: 25px;
    }
  }
}