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:
Dan Ditomaso
2025-11-13 13:06:20 -05:00
committed by GitHub
co-authored by Copilot
parent 94d51912e6
commit 390b46f026
23 changed files with 27 additions and 24 deletions
@@ -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"
}, },
+1 -1
View File
@@ -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(
+4 -2
View File
@@ -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>