mirror of
https://github.com/fosrl/pangolin.git
synced 2026-02-25 06:16:40 +00:00
Compare commits
1 Commits
crowdin_de
...
1.15.4-s.6
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
418e099804 |
@@ -649,8 +649,7 @@
|
||||
"resourcesUsersRolesAccess": "Контрол на достъпа, базиран на потребители и роли",
|
||||
"resourcesErrorUpdate": "Неуспешно превключване на ресурса",
|
||||
"resourcesErrorUpdateDescription": "Възникна грешка при актуализиране на ресурса",
|
||||
"access": "Access",
|
||||
"accessControl": "Контрол на достъпа",
|
||||
"access": "Достъп",
|
||||
"shareLink": "{resource} Сподели връзка",
|
||||
"resourceSelect": "Изберете ресурс",
|
||||
"shareLinks": "Споделени връзки",
|
||||
@@ -1039,6 +1038,7 @@
|
||||
"pageNotFoundDescription": "О, не! Страницата, която търсите, не съществува.",
|
||||
"overview": "Общ преглед",
|
||||
"home": "Начало",
|
||||
"accessControl": "Контрол на достъпа",
|
||||
"settings": "Настройки",
|
||||
"usersAll": "Всички потребители",
|
||||
"license": "Лиценз",
|
||||
|
||||
@@ -649,8 +649,7 @@
|
||||
"resourcesUsersRolesAccess": "Kontrola přístupu na základě uživatelů a rolí",
|
||||
"resourcesErrorUpdate": "Nepodařilo se přepnout zdroj",
|
||||
"resourcesErrorUpdateDescription": "Došlo k chybě při aktualizaci zdroje",
|
||||
"access": "Access",
|
||||
"accessControl": "Kontrola přístupu",
|
||||
"access": "Přístup",
|
||||
"shareLink": "{resource} Sdílet odkaz",
|
||||
"resourceSelect": "Vyberte zdroj",
|
||||
"shareLinks": "Sdílet odkazy",
|
||||
@@ -1039,6 +1038,7 @@
|
||||
"pageNotFoundDescription": "Jejda! Stránka, kterou hledáte, neexistuje.",
|
||||
"overview": "Přehled",
|
||||
"home": "Domů",
|
||||
"accessControl": "Kontrola přístupu",
|
||||
"settings": "Nastavení",
|
||||
"usersAll": "Všichni uživatelé",
|
||||
"license": "Licence",
|
||||
|
||||
@@ -649,8 +649,7 @@
|
||||
"resourcesUsersRolesAccess": "Benutzer- und rollenbasierte Zugriffskontrolle",
|
||||
"resourcesErrorUpdate": "Fehler beim Umschalten der Ressource",
|
||||
"resourcesErrorUpdateDescription": "Beim Aktualisieren der Ressource ist ein Fehler aufgetreten",
|
||||
"access": "Access",
|
||||
"accessControl": "Zugriffskontrolle",
|
||||
"access": "Zugriff",
|
||||
"shareLink": "{resource} Freigabe-Link",
|
||||
"resourceSelect": "Ressource auswählen",
|
||||
"shareLinks": "Freigabe-Links",
|
||||
@@ -1039,6 +1038,7 @@
|
||||
"pageNotFoundDescription": "Hoppla! Die gesuchte Seite existiert nicht.",
|
||||
"overview": "Übersicht",
|
||||
"home": "Startseite",
|
||||
"accessControl": "Zugriffskontrolle",
|
||||
"settings": "Einstellungen",
|
||||
"usersAll": "Alle Benutzer",
|
||||
"license": "Lizenz",
|
||||
|
||||
@@ -649,8 +649,7 @@
|
||||
"resourcesUsersRolesAccess": "Control de acceso basado en usuarios y roles",
|
||||
"resourcesErrorUpdate": "Error al cambiar el recurso",
|
||||
"resourcesErrorUpdateDescription": "Se ha producido un error al actualizar el recurso",
|
||||
"access": "Access",
|
||||
"accessControl": "Control de acceso",
|
||||
"access": "Acceder",
|
||||
"shareLink": "{resource} Compartir Enlace",
|
||||
"resourceSelect": "Seleccionar recurso",
|
||||
"shareLinks": "Compartir enlaces",
|
||||
@@ -1039,6 +1038,7 @@
|
||||
"pageNotFoundDescription": "¡Vaya! La página que estás buscando no existe.",
|
||||
"overview": "Resumen",
|
||||
"home": "Inicio",
|
||||
"accessControl": "Control de acceso",
|
||||
"settings": "Ajustes",
|
||||
"usersAll": "Todos los usuarios",
|
||||
"license": "Licencia",
|
||||
|
||||
@@ -649,8 +649,7 @@
|
||||
"resourcesUsersRolesAccess": "Contrôle d'accès basé sur les utilisateurs et les rôles",
|
||||
"resourcesErrorUpdate": "Échec de la bascule de la ressource",
|
||||
"resourcesErrorUpdateDescription": "Une erreur s'est produite lors de la mise à jour de la ressource",
|
||||
"access": "Access",
|
||||
"accessControl": "Contrôle d'accès",
|
||||
"access": "Accès",
|
||||
"shareLink": "Lien de partage {resource}",
|
||||
"resourceSelect": "Sélectionner une ressource",
|
||||
"shareLinks": "Liens de partage",
|
||||
@@ -1039,6 +1038,7 @@
|
||||
"pageNotFoundDescription": "Oups! La page que vous recherchez n'existe pas.",
|
||||
"overview": "Vue d'ensemble",
|
||||
"home": "Accueil",
|
||||
"accessControl": "Contrôle d'accès",
|
||||
"settings": "Paramètres",
|
||||
"usersAll": "Tous les utilisateurs",
|
||||
"license": "Licence",
|
||||
|
||||
@@ -649,8 +649,7 @@
|
||||
"resourcesUsersRolesAccess": "Controllo accessi basato su utenti e ruoli",
|
||||
"resourcesErrorUpdate": "Impossibile attivare/disattivare la risorsa",
|
||||
"resourcesErrorUpdateDescription": "Si è verificato un errore durante l'aggiornamento della risorsa",
|
||||
"access": "Access",
|
||||
"accessControl": "Controllo Accessi",
|
||||
"access": "Accesso",
|
||||
"shareLink": "Link di Condivisione {resource}",
|
||||
"resourceSelect": "Seleziona risorsa",
|
||||
"shareLinks": "Link di Condivisione",
|
||||
@@ -1039,6 +1038,7 @@
|
||||
"pageNotFoundDescription": "Oops! La pagina che stai cercando non esiste.",
|
||||
"overview": "Panoramica",
|
||||
"home": "Home",
|
||||
"accessControl": "Controllo Accessi",
|
||||
"settings": "Impostazioni",
|
||||
"usersAll": "Tutti Gli Utenti",
|
||||
"license": "Licenza",
|
||||
|
||||
@@ -649,8 +649,7 @@
|
||||
"resourcesUsersRolesAccess": "사용자 및 역할 기반 접근 제어",
|
||||
"resourcesErrorUpdate": "리소스를 전환하는 데 실패했습니다.",
|
||||
"resourcesErrorUpdateDescription": "리소스를 업데이트하는 동안 오류가 발생했습니다.",
|
||||
"access": "Access",
|
||||
"accessControl": "액세스 제어",
|
||||
"access": "접속",
|
||||
"shareLink": "{resource} 공유 링크",
|
||||
"resourceSelect": "리소스 선택",
|
||||
"shareLinks": "공유 링크",
|
||||
@@ -1039,6 +1038,7 @@
|
||||
"pageNotFoundDescription": "앗! 찾고 있는 페이지가 존재하지 않습니다.",
|
||||
"overview": "개요",
|
||||
"home": "홈",
|
||||
"accessControl": "액세스 제어",
|
||||
"settings": "설정",
|
||||
"usersAll": "모든 사용자",
|
||||
"license": "라이선스",
|
||||
|
||||
@@ -649,8 +649,7 @@
|
||||
"resourcesUsersRolesAccess": "Bruker- og rollebasert tilgangskontroll",
|
||||
"resourcesErrorUpdate": "Feilet å slå av/på ressurs",
|
||||
"resourcesErrorUpdateDescription": "En feil oppstod under oppdatering av ressursen",
|
||||
"access": "Access",
|
||||
"accessControl": "Tilgangskontroll",
|
||||
"access": "Tilgang",
|
||||
"shareLink": "{resource} Del Lenke",
|
||||
"resourceSelect": "Velg ressurs",
|
||||
"shareLinks": "Del lenker",
|
||||
@@ -1039,6 +1038,7 @@
|
||||
"pageNotFoundDescription": "Oops! Siden du leter etter finnes ikke.",
|
||||
"overview": "Oversikt",
|
||||
"home": "Hjem",
|
||||
"accessControl": "Tilgangskontroll",
|
||||
"settings": "Innstillinger",
|
||||
"usersAll": "Alle brukere",
|
||||
"license": "Lisens",
|
||||
|
||||
@@ -649,8 +649,7 @@
|
||||
"resourcesUsersRolesAccess": "Gebruiker en rol-gebaseerde toegangsbeheer",
|
||||
"resourcesErrorUpdate": "Bron wisselen mislukt",
|
||||
"resourcesErrorUpdateDescription": "Er is een fout opgetreden tijdens het bijwerken van het document",
|
||||
"access": "Access",
|
||||
"accessControl": "Toegangs controle",
|
||||
"access": "Toegangsrechten",
|
||||
"shareLink": "{resource} Share link",
|
||||
"resourceSelect": "Selecteer resource",
|
||||
"shareLinks": "Links delen",
|
||||
@@ -1039,6 +1038,7 @@
|
||||
"pageNotFoundDescription": "Oeps! De pagina die je zoekt bestaat niet.",
|
||||
"overview": "Overzicht.",
|
||||
"home": "Startpagina",
|
||||
"accessControl": "Toegangs controle",
|
||||
"settings": "Instellingen",
|
||||
"usersAll": "Alle gebruikers",
|
||||
"license": "Licentie",
|
||||
|
||||
@@ -649,8 +649,7 @@
|
||||
"resourcesUsersRolesAccess": "Kontrola dostępu oparta na użytkownikach i rolach",
|
||||
"resourcesErrorUpdate": "Nie udało się przełączyć zasobu",
|
||||
"resourcesErrorUpdateDescription": "Wystąpił błąd podczas aktualizacji zasobu",
|
||||
"access": "Access",
|
||||
"accessControl": "Kontrola dostępu",
|
||||
"access": "Dostęp",
|
||||
"shareLink": "Link udostępniania {resource}",
|
||||
"resourceSelect": "Wybierz zasób",
|
||||
"shareLinks": "Linki udostępniania",
|
||||
@@ -1039,6 +1038,7 @@
|
||||
"pageNotFoundDescription": "Ups! Strona, której szukasz, nie istnieje.",
|
||||
"overview": "Przegląd",
|
||||
"home": "Strona główna",
|
||||
"accessControl": "Kontrola dostępu",
|
||||
"settings": "Ustawienia",
|
||||
"usersAll": "Wszyscy użytkownicy",
|
||||
"license": "Licencja",
|
||||
|
||||
@@ -649,8 +649,7 @@
|
||||
"resourcesUsersRolesAccess": "Controle de acesso baseado em utilizadores e funções",
|
||||
"resourcesErrorUpdate": "Falha ao alternar recurso",
|
||||
"resourcesErrorUpdateDescription": "Ocorreu um erro ao atualizar o recurso",
|
||||
"access": "Access",
|
||||
"accessControl": "Controle de Acesso",
|
||||
"access": "Acesso",
|
||||
"shareLink": "Link de Compartilhamento {resource}",
|
||||
"resourceSelect": "Selecionar recurso",
|
||||
"shareLinks": "Links de Compartilhamento",
|
||||
@@ -1039,6 +1038,7 @@
|
||||
"pageNotFoundDescription": "Ops! A página que você está procurando não existe.",
|
||||
"overview": "Visão Geral",
|
||||
"home": "Início",
|
||||
"accessControl": "Controle de Acesso",
|
||||
"settings": "Configurações",
|
||||
"usersAll": "Todos os Utilizadores",
|
||||
"license": "Licença",
|
||||
|
||||
@@ -649,8 +649,7 @@
|
||||
"resourcesUsersRolesAccess": "Контроль доступа на основе пользователей и ролей",
|
||||
"resourcesErrorUpdate": "Не удалось переключить ресурс",
|
||||
"resourcesErrorUpdateDescription": "Произошла ошибка при обновлении ресурса",
|
||||
"access": "Access",
|
||||
"accessControl": "Контроль доступа",
|
||||
"access": "Доступ",
|
||||
"shareLink": "Общая ссылка {resource}",
|
||||
"resourceSelect": "Выберите ресурс",
|
||||
"shareLinks": "Общие ссылки",
|
||||
@@ -1039,6 +1038,7 @@
|
||||
"pageNotFoundDescription": "Упс! Страница, которую вы ищете, не существует.",
|
||||
"overview": "Обзор",
|
||||
"home": "Главная",
|
||||
"accessControl": "Контроль доступа",
|
||||
"settings": "Настройки",
|
||||
"usersAll": "Все пользователи",
|
||||
"license": "Лицензия",
|
||||
|
||||
@@ -649,8 +649,7 @@
|
||||
"resourcesUsersRolesAccess": "Kullanıcı ve rol tabanlı erişim kontrolü",
|
||||
"resourcesErrorUpdate": "Kaynak değiştirilemedi",
|
||||
"resourcesErrorUpdateDescription": "Kaynak güncellenirken bir hata oluştu",
|
||||
"access": "Access",
|
||||
"accessControl": "Erişim Kontrolü",
|
||||
"access": "Erişim",
|
||||
"shareLink": "{resource} Paylaşım Bağlantısı",
|
||||
"resourceSelect": "Kaynak seçin",
|
||||
"shareLinks": "Paylaşım Bağlantıları",
|
||||
@@ -1039,6 +1038,7 @@
|
||||
"pageNotFoundDescription": "Oops! Aradığınız sayfa mevcut değil.",
|
||||
"overview": "Genel Bakış",
|
||||
"home": "Ana Sayfa",
|
||||
"accessControl": "Erişim Kontrolü",
|
||||
"settings": "Ayarlar",
|
||||
"usersAll": "Tüm Kullanıcılar",
|
||||
"license": "Lisans",
|
||||
|
||||
@@ -649,8 +649,7 @@
|
||||
"resourcesUsersRolesAccess": "基于用户和角色的访问控制",
|
||||
"resourcesErrorUpdate": "切换资源失败",
|
||||
"resourcesErrorUpdateDescription": "更新资源时出错",
|
||||
"access": "Access",
|
||||
"accessControl": "访问控制",
|
||||
"access": "访问权限",
|
||||
"shareLink": "{resource} 的分享链接",
|
||||
"resourceSelect": "选择资源",
|
||||
"shareLinks": "分享链接",
|
||||
@@ -1039,6 +1038,7 @@
|
||||
"pageNotFoundDescription": "哎呀!您正在查找的页面不存在。",
|
||||
"overview": "概览",
|
||||
"home": "首页",
|
||||
"accessControl": "访问控制",
|
||||
"settings": "设置",
|
||||
"usersAll": "所有用户",
|
||||
"license": "许可协议",
|
||||
|
||||
@@ -5,11 +5,13 @@ import { SidebarNav } from "@app/components/SidebarNav";
|
||||
import { OrgSelector } from "@app/components/OrgSelector";
|
||||
import { cn } from "@app/lib/cn";
|
||||
import { ListUserOrgsResponse } from "@server/routers/org";
|
||||
import SupporterStatus from "@app/components/SupporterStatus";
|
||||
import { Button } from "@app/components/ui/button";
|
||||
import { ArrowRight, Menu, Server } from "lucide-react";
|
||||
import { ExternalLink, Menu, Server } from "lucide-react";
|
||||
import Link from "next/link";
|
||||
import { usePathname } from "next/navigation";
|
||||
import { useUserContext } from "@app/hooks/useUserContext";
|
||||
import { useEnvContext } from "@app/hooks/useEnvContext";
|
||||
import { useTranslations } from "next-intl";
|
||||
import ProfileIcon from "@app/components/ProfileIcon";
|
||||
import ThemeSwitcher from "@app/components/ThemeSwitcher";
|
||||
@@ -42,6 +44,7 @@ export function LayoutMobileMenu({
|
||||
const pathname = usePathname();
|
||||
const isAdminPage = pathname?.startsWith("/admin");
|
||||
const { user } = useUserContext();
|
||||
const { env } = useEnvContext();
|
||||
const t = useTranslations();
|
||||
|
||||
return (
|
||||
@@ -80,7 +83,7 @@ export function LayoutMobileMenu({
|
||||
<div className="px-3 pt-3">
|
||||
{!isAdminPage &&
|
||||
user.serverAdmin && (
|
||||
<div className="mb-1">
|
||||
<div className="py-2">
|
||||
<Link
|
||||
href="/admin"
|
||||
className={cn(
|
||||
@@ -95,12 +98,11 @@ export function LayoutMobileMenu({
|
||||
<span className="flex-shrink-0 mr-2">
|
||||
<Server className="h-4 w-4" />
|
||||
</span>
|
||||
<span className="flex-1">
|
||||
<span>
|
||||
{t(
|
||||
"serverAdmin"
|
||||
)}
|
||||
</span>
|
||||
<ArrowRight className="h-4 w-4 shrink-0 ml-auto opacity-70" />
|
||||
</Link>
|
||||
</div>
|
||||
)}
|
||||
@@ -113,6 +115,22 @@ export function LayoutMobileMenu({
|
||||
</div>
|
||||
<div className="sticky bottom-0 left-0 right-0 h-8 pointer-events-none bg-gradient-to-t from-card to-transparent" />
|
||||
</div>
|
||||
<div className="px-3 pt-3 pb-3 space-y-4 border-t shrink-0">
|
||||
<SupporterStatus />
|
||||
{env?.app?.version && (
|
||||
<div className="text-xs text-muted-foreground text-center">
|
||||
<Link
|
||||
href={`https://github.com/fosrl/pangolin/releases/tag/${env.app.version}`}
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center gap-1"
|
||||
>
|
||||
v{env.app.version}
|
||||
<ExternalLink size={12} />
|
||||
</Link>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
</SheetContent>
|
||||
</Sheet>
|
||||
</div>
|
||||
|
||||
@@ -146,46 +146,6 @@ export function LayoutSidebar({
|
||||
/>
|
||||
<div className="flex-1 overflow-y-auto relative">
|
||||
<div className="px-2 pt-3">
|
||||
{!isAdminPage && user.serverAdmin && (
|
||||
<div
|
||||
className={cn(
|
||||
"shrink-0",
|
||||
isSidebarCollapsed ? "mb-4" : "mb-1"
|
||||
)}
|
||||
>
|
||||
<Link
|
||||
href="/admin"
|
||||
className={cn(
|
||||
"flex items-center transition-colors text-muted-foreground hover:text-foreground text-sm w-full hover:bg-secondary/80 dark:hover:bg-secondary/50 rounded-md",
|
||||
isSidebarCollapsed
|
||||
? "px-2 py-2 justify-center"
|
||||
: "px-3 py-1.5"
|
||||
)}
|
||||
title={
|
||||
isSidebarCollapsed
|
||||
? t("serverAdmin")
|
||||
: undefined
|
||||
}
|
||||
>
|
||||
<span
|
||||
className={cn(
|
||||
"shrink-0",
|
||||
!isSidebarCollapsed && "mr-2"
|
||||
)}
|
||||
>
|
||||
<Server className="h-4 w-4" />
|
||||
</span>
|
||||
{!isSidebarCollapsed && (
|
||||
<>
|
||||
<span className="flex-1">
|
||||
{t("serverAdmin")}
|
||||
</span>
|
||||
<ArrowRight className="h-4 w-4 shrink-0 ml-auto opacity-70" />
|
||||
</>
|
||||
)}
|
||||
</Link>
|
||||
</div>
|
||||
)}
|
||||
<SidebarNav
|
||||
sections={navItems}
|
||||
isCollapsed={isSidebarCollapsed}
|
||||
@@ -196,6 +156,40 @@ export function LayoutSidebar({
|
||||
<div className="sticky bottom-0 left-0 right-0 h-8 pointer-events-none bg-gradient-to-t from-card to-transparent" />
|
||||
</div>
|
||||
|
||||
{!isAdminPage && user.serverAdmin && (
|
||||
<div className="shrink-0 px-2 pb-2">
|
||||
<Link
|
||||
href="/admin"
|
||||
className={cn(
|
||||
"flex items-center transition-colors text-muted-foreground hover:text-foreground text-sm w-full hover:bg-secondary/80 dark:hover:bg-secondary/50 rounded-md",
|
||||
isSidebarCollapsed
|
||||
? "px-2 py-2 justify-center"
|
||||
: "px-3 py-1.5"
|
||||
)}
|
||||
title={
|
||||
isSidebarCollapsed ? t("serverAdmin") : undefined
|
||||
}
|
||||
>
|
||||
<span
|
||||
className={cn(
|
||||
"shrink-0",
|
||||
!isSidebarCollapsed && "mr-2"
|
||||
)}
|
||||
>
|
||||
<Server className="h-4 w-4" />
|
||||
</span>
|
||||
{!isSidebarCollapsed && (
|
||||
<>
|
||||
<span className="flex-1">
|
||||
{t("serverAdmin")}
|
||||
</span>
|
||||
<ArrowRight className="h-4 w-4 shrink-0 ml-auto opacity-70" />
|
||||
</>
|
||||
)}
|
||||
</Link>
|
||||
</div>
|
||||
)}
|
||||
|
||||
{isSidebarCollapsed && (
|
||||
<div className="shrink-0 flex justify-center py-2">
|
||||
<TooltipProvider>
|
||||
@@ -224,7 +218,7 @@ export function LayoutSidebar({
|
||||
|
||||
<div className="w-full border-t border-border mb-3" />
|
||||
|
||||
<div className="p-4 pt-1 flex flex-col shrink-0">
|
||||
<div className="p-4 pt-0 mt-0 flex flex-col shrink-0">
|
||||
{canShowProductUpdates && (
|
||||
<div className="mb-3 empty:mb-0">
|
||||
<ProductUpdates isCollapsed={isSidebarCollapsed} />
|
||||
|
||||
Reference in New Issue
Block a user