38 lines
1.1 KiB
TypeScript
38 lines
1.1 KiB
TypeScript
"use client";
|
|
|
|
import { useAppLocale, useLocaleActions } from "./LocaleProvider";
|
|
import type { AppLocale } from "./locale";
|
|
|
|
export function LocaleSwitcher() {
|
|
const locale = useAppLocale();
|
|
const { setLocale } = useLocaleActions();
|
|
|
|
const handleToggle = () => {
|
|
const nextLocale: AppLocale = locale === "en" ? "ko" : "en";
|
|
setLocale(nextLocale);
|
|
|
|
try {
|
|
const maxAgeSeconds = 60 * 60 * 24 * 365; // 1 year
|
|
document.cookie = `pb-locale=${nextLocale}; path=/; max-age=${maxAgeSeconds}`;
|
|
} catch {
|
|
// 쿠키 저장 실패는 무시 (로케일 상태는 여전히 컨텍스트에서 유지된다)
|
|
}
|
|
};
|
|
|
|
const labelText = locale === "en" ? "EN" : "KO";
|
|
|
|
return (
|
|
<div className="fixed bottom-4 right-4 z-50 text-xs">
|
|
<button
|
|
type="button"
|
|
aria-label="Toggle locale"
|
|
className="inline-flex items-center justify-center rounded-full border border-slate-300 bg-white/80 px-2 py-1 text-slate-700 shadow-sm backdrop-blur dark:border-slate-700 dark:bg-slate-900/80 dark:text-slate-100"
|
|
onClick={handleToggle}
|
|
>
|
|
{labelText}
|
|
</button>
|
|
</div>
|
|
);
|
|
}
|
|
|