File size: 1,509 Bytes
e327f0d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
/**
 * LanguageSwitcher — TR ↔ EN dropdown that persists choice to settings store.
 */
import { useTranslation } from 'react-i18next';
import { Globe } from 'lucide-react';
import { setLanguage, SUPPORTED_LANGUAGES, type SupportedLanguage } from '@/i18n';
import { saveSetting } from '@/lib/settings';

export function LanguageSwitcher({ compact = false }: { compact?: boolean }) {
  const { i18n } = useTranslation();
  const current = (i18n.resolvedLanguage ?? 'tr').slice(0, 2) as SupportedLanguage;

  async function change(lng: SupportedLanguage) {
    await setLanguage(lng);
    await saveSetting('uiLanguage', lng);
  }

  if (compact) {
    return (
      <button
        type="button"
        onClick={() => change(current === 'tr' ? 'en' : 'tr')}
        title="Language"
        className="inline-flex h-8 items-center gap-1 rounded-md px-2 text-xs font-semibold uppercase text-slate-600 hover:bg-slate-100 dark:text-slate-300 dark:hover:bg-slate-700"
      >
        <Globe className="h-3.5 w-3.5" />
        {current}
      </button>
    );
  }

  return (
    <select
      value={current}
      onChange={(e) => change(e.target.value as SupportedLanguage)}
      className="rounded-md border border-slate-300 bg-white px-2 py-1 text-xs dark:border-slate-600 dark:bg-slate-800 dark:text-slate-100"
    >
      {SUPPORTED_LANGUAGES.map((l) => (
        <option key={l} value={l}>
          {l.toUpperCase()}
        </option>
      ))}
    </select>
  );
}

export default LanguageSwitcher;