fix(ui): add language switcher to connections page (#954)
* fix(ui): add language switcher to connections page * desciption length fix * Update packages/web/src/pages/Connections/index.tsx Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * add new language picker key --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
This commit is contained in:
@@ -195,7 +195,7 @@
|
|||||||
"showUnheard": {
|
"showUnheard": {
|
||||||
"label": "Never heard"
|
"label": "Never heard"
|
||||||
},
|
},
|
||||||
"language": {
|
"languagePicker": {
|
||||||
"label": "Language",
|
"label": "Language",
|
||||||
"changeLanguage": "Change Language"
|
"changeLanguage": "Change Language"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -195,7 +195,7 @@
|
|||||||
"showUnheard": {
|
"showUnheard": {
|
||||||
"label": "Никога не е чуван"
|
"label": "Никога не е чуван"
|
||||||
},
|
},
|
||||||
"language": {
|
"languagePicker": {
|
||||||
"label": "Език",
|
"label": "Език",
|
||||||
"changeLanguage": "Промяна на езика"
|
"changeLanguage": "Промяна на езика"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -195,7 +195,7 @@
|
|||||||
"showUnheard": {
|
"showUnheard": {
|
||||||
"label": "Never heard"
|
"label": "Never heard"
|
||||||
},
|
},
|
||||||
"language": {
|
"languagePicker": {
|
||||||
"label": "Jazyk",
|
"label": "Jazyk",
|
||||||
"changeLanguage": "Change Language"
|
"changeLanguage": "Change Language"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -195,7 +195,7 @@
|
|||||||
"showUnheard": {
|
"showUnheard": {
|
||||||
"label": "Nie gehört"
|
"label": "Nie gehört"
|
||||||
},
|
},
|
||||||
"language": {
|
"languagePicker": {
|
||||||
"label": "Sprache",
|
"label": "Sprache",
|
||||||
"changeLanguage": "Sprache ändern"
|
"changeLanguage": "Sprache ändern"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -181,7 +181,7 @@
|
|||||||
"showUnheard": {
|
"showUnheard": {
|
||||||
"label": "Unknown last heard"
|
"label": "Unknown last heard"
|
||||||
},
|
},
|
||||||
"language": {
|
"languagePicker": {
|
||||||
"label": "Language",
|
"label": "Language",
|
||||||
"changeLanguage": "Change Language"
|
"changeLanguage": "Change Language"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -195,7 +195,7 @@
|
|||||||
"showUnheard": {
|
"showUnheard": {
|
||||||
"label": "Never heard"
|
"label": "Never heard"
|
||||||
},
|
},
|
||||||
"language": {
|
"languagePicker": {
|
||||||
"label": "Idioma",
|
"label": "Idioma",
|
||||||
"changeLanguage": "Change Language"
|
"changeLanguage": "Change Language"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -195,7 +195,7 @@
|
|||||||
"showUnheard": {
|
"showUnheard": {
|
||||||
"label": "Ei koskaan kuultu"
|
"label": "Ei koskaan kuultu"
|
||||||
},
|
},
|
||||||
"language": {
|
"languagePicker": {
|
||||||
"label": "Kieli",
|
"label": "Kieli",
|
||||||
"changeLanguage": "Vaihda kieli"
|
"changeLanguage": "Vaihda kieli"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -195,7 +195,7 @@
|
|||||||
"showUnheard": {
|
"showUnheard": {
|
||||||
"label": "Jamais entendu"
|
"label": "Jamais entendu"
|
||||||
},
|
},
|
||||||
"language": {
|
"languagePicker": {
|
||||||
"label": "Langue",
|
"label": "Langue",
|
||||||
"changeLanguage": "Changer la langue"
|
"changeLanguage": "Changer la langue"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -195,7 +195,7 @@
|
|||||||
"showUnheard": {
|
"showUnheard": {
|
||||||
"label": "Never heard"
|
"label": "Never heard"
|
||||||
},
|
},
|
||||||
"language": {
|
"languagePicker": {
|
||||||
"label": "Nyelv",
|
"label": "Nyelv",
|
||||||
"changeLanguage": "Change Language"
|
"changeLanguage": "Change Language"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -195,7 +195,7 @@
|
|||||||
"showUnheard": {
|
"showUnheard": {
|
||||||
"label": "Never heard"
|
"label": "Never heard"
|
||||||
},
|
},
|
||||||
"language": {
|
"languagePicker": {
|
||||||
"label": "Lingua",
|
"label": "Lingua",
|
||||||
"changeLanguage": "Cambia Lingua"
|
"changeLanguage": "Cambia Lingua"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -195,7 +195,7 @@
|
|||||||
"showUnheard": {
|
"showUnheard": {
|
||||||
"label": "Never heard"
|
"label": "Never heard"
|
||||||
},
|
},
|
||||||
"language": {
|
"languagePicker": {
|
||||||
"label": "言語設定",
|
"label": "言語設定",
|
||||||
"changeLanguage": "Change Language"
|
"changeLanguage": "Change Language"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -195,7 +195,7 @@
|
|||||||
"showUnheard": {
|
"showUnheard": {
|
||||||
"label": "수신된 적 없음"
|
"label": "수신된 적 없음"
|
||||||
},
|
},
|
||||||
"language": {
|
"languagePicker": {
|
||||||
"label": "언어",
|
"label": "언어",
|
||||||
"changeLanguage": "언어 선택"
|
"changeLanguage": "언어 선택"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -195,7 +195,7 @@
|
|||||||
"showUnheard": {
|
"showUnheard": {
|
||||||
"label": "Never heard"
|
"label": "Never heard"
|
||||||
},
|
},
|
||||||
"language": {
|
"languagePicker": {
|
||||||
"label": "Taal",
|
"label": "Taal",
|
||||||
"changeLanguage": "Change Language"
|
"changeLanguage": "Change Language"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -195,7 +195,7 @@
|
|||||||
"showUnheard": {
|
"showUnheard": {
|
||||||
"label": "Never heard"
|
"label": "Never heard"
|
||||||
},
|
},
|
||||||
"language": {
|
"languagePicker": {
|
||||||
"label": "Język",
|
"label": "Język",
|
||||||
"changeLanguage": "Change Language"
|
"changeLanguage": "Change Language"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -195,7 +195,7 @@
|
|||||||
"showUnheard": {
|
"showUnheard": {
|
||||||
"label": "Never heard"
|
"label": "Never heard"
|
||||||
},
|
},
|
||||||
"language": {
|
"languagePicker": {
|
||||||
"label": "Idioma",
|
"label": "Idioma",
|
||||||
"changeLanguage": "Change Language"
|
"changeLanguage": "Change Language"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -195,7 +195,7 @@
|
|||||||
"showUnheard": {
|
"showUnheard": {
|
||||||
"label": "Never heard"
|
"label": "Never heard"
|
||||||
},
|
},
|
||||||
"language": {
|
"languagePicker": {
|
||||||
"label": "Idioma",
|
"label": "Idioma",
|
||||||
"changeLanguage": "Change Language"
|
"changeLanguage": "Change Language"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -195,7 +195,7 @@
|
|||||||
"showUnheard": {
|
"showUnheard": {
|
||||||
"label": "Aldrig hörd"
|
"label": "Aldrig hörd"
|
||||||
},
|
},
|
||||||
"language": {
|
"languagePicker": {
|
||||||
"label": "Språk",
|
"label": "Språk",
|
||||||
"changeLanguage": "Byt språk"
|
"changeLanguage": "Byt språk"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -195,7 +195,7 @@
|
|||||||
"showUnheard": {
|
"showUnheard": {
|
||||||
"label": "Never heard"
|
"label": "Never heard"
|
||||||
},
|
},
|
||||||
"language": {
|
"languagePicker": {
|
||||||
"label": "Dil",
|
"label": "Dil",
|
||||||
"changeLanguage": "Change Language"
|
"changeLanguage": "Change Language"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -195,7 +195,7 @@
|
|||||||
"showUnheard": {
|
"showUnheard": {
|
||||||
"label": "Never heard"
|
"label": "Never heard"
|
||||||
},
|
},
|
||||||
"language": {
|
"languagePicker": {
|
||||||
"label": "Мова",
|
"label": "Мова",
|
||||||
"changeLanguage": "Змінити мову"
|
"changeLanguage": "Змінити мову"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -195,7 +195,7 @@
|
|||||||
"showUnheard": {
|
"showUnheard": {
|
||||||
"label": "Never heard"
|
"label": "Never heard"
|
||||||
},
|
},
|
||||||
"language": {
|
"languagePicker": {
|
||||||
"label": "语言",
|
"label": "语言",
|
||||||
"changeLanguage": "Change Language"
|
"changeLanguage": "Change Language"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -135,7 +135,7 @@ export const DeviceInfoPanel = ({
|
|||||||
|
|
||||||
{
|
{
|
||||||
id: "language",
|
id: "language",
|
||||||
label: t("language.changeLanguage"),
|
label: t("languagePickeer.label"),
|
||||||
icon: Languages,
|
icon: Languages,
|
||||||
render: () => <LanguageSwitcher />,
|
render: () => <LanguageSwitcher />,
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import type { LangCode } from "@app/i18n-config.ts";
|
import type { LangCode } from "@app/i18n-config.ts";
|
||||||
import useLang from "@core/hooks/useLang.ts";
|
import useLang from "@core/hooks/useLang.ts";
|
||||||
import { cn } from "@core/utils/cn.ts";
|
import { cn } from "@core/utils/cn.ts";
|
||||||
|
import { t } from "i18next";
|
||||||
import { Check, Languages } from "lucide-react";
|
import { Check, Languages } from "lucide-react";
|
||||||
import { useCallback } from "react";
|
import { useCallback } from "react";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
@@ -56,7 +57,7 @@ export default function LanguageSwitcher({
|
|||||||
"group-hover:text-gray-800 dark:group-hover:text-gray-100",
|
"group-hover:text-gray-800 dark:group-hover:text-gray-100",
|
||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
{`${i18n.t("language.changeLanguage")}:`}
|
{`${t("languagePicker.label")}:`}
|
||||||
</Subtle>
|
</Subtle>
|
||||||
<Subtle
|
<Subtle
|
||||||
className={cn(
|
className={cn(
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import AddConnectionDialog from "@app/components/Dialog/AddConnectionDialog/AddConnectionDialog";
|
import AddConnectionDialog from "@app/components/Dialog/AddConnectionDialog/AddConnectionDialog";
|
||||||
import { TimeAgo } from "@app/components/generic/TimeAgo";
|
import { TimeAgo } from "@app/components/generic/TimeAgo";
|
||||||
|
import LanguageSwitcher from "@app/components/LanguageSwitcher";
|
||||||
import { ConnectionStatusBadge } from "@app/components/PageComponents/Connections/ConnectionStatusBadge";
|
import { ConnectionStatusBadge } from "@app/components/PageComponents/Connections/ConnectionStatusBadge";
|
||||||
import type { Connection } from "@app/core/stores/deviceStore/types";
|
import type { Connection } from "@app/core/stores/deviceStore/types";
|
||||||
import { useConnections } from "@app/pages/Connections/useConnections";
|
import { useConnections } from "@app/pages/Connections/useConnections";
|
||||||
@@ -106,16 +107,17 @@ export const Connections = () => {
|
|||||||
<h1 className="text-2xl md:text-3xl font-bold tracking-tight">
|
<h1 className="text-2xl md:text-3xl font-bold tracking-tight">
|
||||||
{t("page.title")}
|
{t("page.title")}
|
||||||
</h1>
|
</h1>
|
||||||
<p className="text-slate-500 dark:text-slate-400 mt-1">
|
<p className="lg:w-4/6 md:w-6 text-slate-500 dark:text-slate-400 mt-1">
|
||||||
{t("page.description")}
|
{t("page.description")}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="flex items-center ml-2 gap-2">
|
<div className="flex flex-col items-end ml-2 gap-2">
|
||||||
<Button onClick={() => setAddOpen(true)} className="gap-2">
|
<Button onClick={() => setAddOpen(true)} className="gap-2">
|
||||||
<RouterIcon className="size-5" />
|
<RouterIcon className="size-5" />
|
||||||
{t("button.addConnection")}
|
{t("button.addConnection")}
|
||||||
</Button>
|
</Button>
|
||||||
|
<LanguageSwitcher />
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user