Development #24
@@ -3,7 +3,7 @@ import { msg } from "@lingui/core/macro";
|
||||
import { AdminDashboard } from "@/features/admin";
|
||||
import { tournamentQueries } from "@/features/tournaments/queries";
|
||||
import { telemetryQueries } from "@/features/telemetry/queries";
|
||||
import { lastNDays } from "@/features/telemetry/range";
|
||||
import { isoDay, lastNDays } from "@/features/telemetry/range";
|
||||
import { prefetchServerQuery } from "@/lib/tanstack-query/utils/prefetch";
|
||||
|
||||
export const Route = createFileRoute("/_authed/admin/")({
|
||||
@@ -15,6 +15,11 @@ export const Route = createFileRoute("/_authed/admin/")({
|
||||
context.queryClient,
|
||||
telemetryQueries.errorGroups({ from: month.from, to: month.to })
|
||||
);
|
||||
const today = isoDay(new Date());
|
||||
prefetchServerQuery(
|
||||
context.queryClient,
|
||||
telemetryQueries.rollups({ metrics: ["server_fn.count"], from: today, to: today })
|
||||
);
|
||||
},
|
||||
loader: () => ({
|
||||
header: {
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
import { Text, UnstyledButton } from "@mantine/core";
|
||||
import { Icon } from "@phosphor-icons/react";
|
||||
import classes from "./nav-tile.module.css";
|
||||
|
||||
interface NavTileProps {
|
||||
label: string;
|
||||
Icon: Icon;
|
||||
onClick?: () => void;
|
||||
disabled?: boolean;
|
||||
}
|
||||
|
||||
/** A single square-ish nav tile with icon-over-label and press feedback. */
|
||||
export const NavTile = ({ label, Icon, onClick, disabled }: NavTileProps) => (
|
||||
<UnstyledButton
|
||||
className={`${classes.tile} flxn-tile`}
|
||||
onClick={onClick}
|
||||
disabled={disabled}
|
||||
>
|
||||
<span className={`${classes.icon} flxn-tile-icon`}>
|
||||
<Icon size={22} weight="bold" />
|
||||
</span>
|
||||
<Text size="xs" fw={600} lineClamp={2} lh={1.2}>
|
||||
{label}
|
||||
</Text>
|
||||
</UnstyledButton>
|
||||
);
|
||||
|
||||
export default NavTile;
|
||||
@@ -0,0 +1,43 @@
|
||||
.tile {
|
||||
-webkit-tap-highlight-color: transparent;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 8px;
|
||||
padding: 14px 8px;
|
||||
border-radius: var(--mantine-radius-md);
|
||||
border: 1px solid var(--mantine-color-default-border);
|
||||
background-color: var(--mantine-color-body);
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.icon {
|
||||
color: var(--mantine-primary-color-filled);
|
||||
display: flex;
|
||||
}
|
||||
|
||||
@media (hover: hover) {
|
||||
.tile:hover:not(:disabled) {
|
||||
background-color: var(--mantine-color-default-hover);
|
||||
}
|
||||
}
|
||||
|
||||
.tile:active:not(:disabled) {
|
||||
background-color: var(--mantine-color-default-hover);
|
||||
}
|
||||
|
||||
.tile:disabled {
|
||||
opacity: 0.5;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
@media (prefers-reduced-motion: no-preference) {
|
||||
.tile {
|
||||
transition: background-color 120ms ease-out, transform 120ms cubic-bezier(0.32, 0.72, 0, 1);
|
||||
}
|
||||
|
||||
.tile:active:not(:disabled) {
|
||||
transform: scale(0.97);
|
||||
}
|
||||
}
|
||||
@@ -1,87 +0,0 @@
|
||||
import { Card, Group, Stack, Text } from "@mantine/core";
|
||||
import { Trans } from "@lingui/react/macro";
|
||||
import { useNavigate } from "@tanstack/react-router";
|
||||
import { CheckCircleIcon, XCircleIcon } from "@phosphor-icons/react";
|
||||
import { useServerQuery } from "@/lib/tanstack-query/hooks";
|
||||
import { searchActivities } from "@/features/activities/server";
|
||||
import { activityKeys } from "@/features/activities/queries";
|
||||
import { RelativeTime } from "@/features/telemetry/components/shared";
|
||||
import type { PlayerInfo } from "@/features/players/types";
|
||||
|
||||
const FEED_PARAMS = { perPage: 10 } as const;
|
||||
|
||||
const playerName = (player?: string | PlayerInfo): string | null => {
|
||||
if (!player || typeof player === "string") return null;
|
||||
return [player.first_name, player.last_name].filter(Boolean).join(" ") || null;
|
||||
};
|
||||
|
||||
export const ActivityFeed = () => {
|
||||
const navigate = useNavigate();
|
||||
|
||||
const { data } = useServerQuery({
|
||||
queryKey: activityKeys.search(FEED_PARAMS),
|
||||
queryFn: () => searchActivities({ data: FEED_PARAMS }),
|
||||
options: {
|
||||
refetchInterval: 30_000,
|
||||
},
|
||||
});
|
||||
|
||||
return (
|
||||
<Card withBorder radius="md" p="md">
|
||||
<Stack gap="sm">
|
||||
<Group justify="space-between">
|
||||
<Text fw={600} size="sm">
|
||||
<Trans>Recent activity</Trans>
|
||||
</Text>
|
||||
</Group>
|
||||
<Stack gap="xs">
|
||||
{data?.items.map((activity) => {
|
||||
const name = playerName(activity.player);
|
||||
return (
|
||||
<Group
|
||||
key={activity.id}
|
||||
gap="xs"
|
||||
wrap="nowrap"
|
||||
onClick={() => navigate({ to: "/admin/telemetry/functions" })}
|
||||
style={{ cursor: "pointer" }}
|
||||
>
|
||||
{activity.success ? (
|
||||
<CheckCircleIcon
|
||||
size={14}
|
||||
color="var(--mantine-color-green-6)"
|
||||
style={{ flexShrink: 0 }}
|
||||
/>
|
||||
) : (
|
||||
<XCircleIcon
|
||||
size={14}
|
||||
color="var(--mantine-color-red-6)"
|
||||
style={{ flexShrink: 0 }}
|
||||
/>
|
||||
)}
|
||||
<Text size="xs" truncate style={{ flex: 1, minWidth: 0 }}>
|
||||
{activity.name}
|
||||
{name && (
|
||||
<Text component="span" size="xs" c="dimmed">
|
||||
{" "}
|
||||
· {name}
|
||||
</Text>
|
||||
)}
|
||||
</Text>
|
||||
<Text size="xs" c="dimmed" style={{ flexShrink: 0 }}>
|
||||
<RelativeTime date={activity.created} />
|
||||
</Text>
|
||||
</Group>
|
||||
);
|
||||
})}
|
||||
{data && data.items.length === 0 && (
|
||||
<Text size="sm" c="dimmed">
|
||||
<Trans>No activity yet</Trans>
|
||||
</Text>
|
||||
)}
|
||||
</Stack>
|
||||
</Stack>
|
||||
</Card>
|
||||
);
|
||||
};
|
||||
|
||||
export default ActivityFeed;
|
||||
@@ -1,62 +0,0 @@
|
||||
import { Badge, Card, Group, Stack, Text, UnstyledButton } from "@mantine/core";
|
||||
import { Trans } from "@lingui/react/macro";
|
||||
import { useNavigate } from "@tanstack/react-router";
|
||||
import { CheckCircleIcon, WarningCircleIcon } from "@phosphor-icons/react";
|
||||
import { useClientErrorGroups } from "@/features/telemetry/queries";
|
||||
import { RelativeTime } from "@/features/telemetry/components/shared";
|
||||
import { lastNDays } from "@/features/telemetry/range";
|
||||
|
||||
export const ErrorsCard = () => {
|
||||
const navigate = useNavigate();
|
||||
const range = lastNDays(30);
|
||||
|
||||
const { data: groups } = useClientErrorGroups({ from: range.from, to: range.to });
|
||||
|
||||
return (
|
||||
<UnstyledButton w="100%" onClick={() => navigate({ to: "/admin/telemetry/errors" })}>
|
||||
<Card withBorder radius="md" p="md">
|
||||
<Stack gap="sm">
|
||||
<Group justify="space-between" wrap="nowrap">
|
||||
<Text fw={600} size="sm">
|
||||
<Trans>Client errors</Trans>
|
||||
</Text>
|
||||
{groups && groups.length > 0 ? (
|
||||
<Badge color="red" variant="light">
|
||||
{groups.length}
|
||||
</Badge>
|
||||
) : (
|
||||
<CheckCircleIcon size={18} color="var(--mantine-color-green-6)" weight="fill" />
|
||||
)}
|
||||
</Group>
|
||||
{groups && groups.length > 0 ? (
|
||||
<Stack gap="xs">
|
||||
{groups.slice(0, 3).map((group) => (
|
||||
<Group key={group.group_hash} gap="xs" wrap="nowrap" align="flex-start">
|
||||
<WarningCircleIcon
|
||||
size={14}
|
||||
color="var(--mantine-color-red-6)"
|
||||
style={{ flexShrink: 0, marginTop: 2 }}
|
||||
/>
|
||||
<Stack gap={0} style={{ minWidth: 0 }}>
|
||||
<Text size="xs" lineClamp={1}>
|
||||
{group.sample.message}
|
||||
</Text>
|
||||
<Text size="xs" c="dimmed">
|
||||
<RelativeTime date={group.lastSeen} />
|
||||
</Text>
|
||||
</Stack>
|
||||
</Group>
|
||||
))}
|
||||
</Stack>
|
||||
) : (
|
||||
<Text size="sm" c="dimmed">
|
||||
<Trans>No unresolved errors</Trans>
|
||||
</Text>
|
||||
)}
|
||||
</Stack>
|
||||
</Card>
|
||||
</UnstyledButton>
|
||||
);
|
||||
};
|
||||
|
||||
export default ErrorsCard;
|
||||
@@ -1,57 +1,51 @@
|
||||
import { Suspense } from "react";
|
||||
import { Box, SimpleGrid, Stack } from "@mantine/core";
|
||||
import { CardSkeleton, StatTileSkeleton } from "@/components/skeletons";
|
||||
import { Group, SimpleGrid, Skeleton, Stack } from "@mantine/core";
|
||||
import QuietBoundary from "./quiet-boundary";
|
||||
import NowStrip from "./now-strip";
|
||||
import TournamentCard from "./tournament-card";
|
||||
import UsageCard from "./usage-card";
|
||||
import ErrorsCard from "./errors-card";
|
||||
import ActivityFeed from "./activity-feed";
|
||||
import SectionBox from "./section-box";
|
||||
import StatusStrip from "./status-strip";
|
||||
import TournamentSection from "./tournament-section";
|
||||
import ToolsList from "./tools-list";
|
||||
|
||||
const NowStripSkeleton = () => (
|
||||
<SimpleGrid cols={3} spacing="xs">
|
||||
<StatTileSkeleton />
|
||||
<StatTileSkeleton />
|
||||
<StatTileSkeleton />
|
||||
</SimpleGrid>
|
||||
const StripSkeleton = () => (
|
||||
<SectionBox>
|
||||
<Group grow>
|
||||
{[0, 1, 2].map((i) => (
|
||||
<Stack key={i} gap={4} align="center">
|
||||
<Skeleton height={22} width={32} radius="sm" />
|
||||
<Skeleton height={10} width={56} radius="sm" />
|
||||
</Stack>
|
||||
))}
|
||||
</Group>
|
||||
</SectionBox>
|
||||
);
|
||||
|
||||
const TournamentSkeleton = () => (
|
||||
<SectionBox>
|
||||
<Skeleton height={24} width={180} radius="sm" />
|
||||
<SimpleGrid cols={3} spacing="sm" mt="sm">
|
||||
<Skeleton height={72} radius="md" />
|
||||
<Skeleton height={72} radius="md" />
|
||||
<Skeleton height={72} radius="md" />
|
||||
</SimpleGrid>
|
||||
</SectionBox>
|
||||
);
|
||||
|
||||
export const AdminDashboard = () => (
|
||||
<Stack gap="md" pb="md">
|
||||
<Stack gap="md" px="md" pt="md">
|
||||
<QuietBoundary>
|
||||
<Suspense fallback={<NowStripSkeleton />}>
|
||||
<NowStrip />
|
||||
</Suspense>
|
||||
</QuietBoundary>
|
||||
<SimpleGrid cols={{ base: 1, md: 2 }} spacing="md">
|
||||
<QuietBoundary>
|
||||
<Suspense fallback={<CardSkeleton />}>
|
||||
<TournamentCard />
|
||||
</Suspense>
|
||||
</QuietBoundary>
|
||||
<QuietBoundary>
|
||||
<Suspense fallback={<CardSkeleton />}>
|
||||
<ErrorsCard />
|
||||
</Suspense>
|
||||
</QuietBoundary>
|
||||
</SimpleGrid>
|
||||
<SimpleGrid cols={{ base: 1, md: 2 }} spacing="md">
|
||||
<QuietBoundary>
|
||||
<Suspense fallback={<CardSkeleton />}>
|
||||
<UsageCard />
|
||||
</Suspense>
|
||||
</QuietBoundary>
|
||||
<QuietBoundary>
|
||||
<ActivityFeed />
|
||||
</QuietBoundary>
|
||||
</SimpleGrid>
|
||||
</Stack>
|
||||
<Box>
|
||||
<ToolsList />
|
||||
</Box>
|
||||
</Stack>
|
||||
<>
|
||||
<QuietBoundary>
|
||||
<Suspense fallback={<StripSkeleton />}>
|
||||
<SectionBox>
|
||||
<StatusStrip />
|
||||
</SectionBox>
|
||||
</Suspense>
|
||||
</QuietBoundary>
|
||||
<QuietBoundary>
|
||||
<Suspense fallback={<TournamentSkeleton />}>
|
||||
<TournamentSection />
|
||||
</Suspense>
|
||||
</QuietBoundary>
|
||||
<ToolsList />
|
||||
</>
|
||||
);
|
||||
|
||||
export default AdminDashboard;
|
||||
|
||||
@@ -1,61 +0,0 @@
|
||||
import { useMemo } from "react";
|
||||
import { SimpleGrid } from "@mantine/core";
|
||||
import { useLingui } from "@lingui/react/macro";
|
||||
import { useNavigate } from "@tanstack/react-router";
|
||||
import {
|
||||
useClientErrorGroups,
|
||||
useRollupRange,
|
||||
useTelemetryRuntimeStatus,
|
||||
} from "@/features/telemetry/queries";
|
||||
import { StatTile } from "@/features/telemetry/components/charts";
|
||||
import { isoDay, lastNDays, listDays } from "@/features/telemetry/range";
|
||||
|
||||
export const NowStrip = () => {
|
||||
const { t } = useLingui();
|
||||
const navigate = useNavigate();
|
||||
const range = useMemo(() => lastNDays(7), []);
|
||||
|
||||
const { data: status } = useTelemetryRuntimeStatus();
|
||||
const { data: errorGroups } = useClientErrorGroups({
|
||||
from: lastNDays(30).from,
|
||||
to: range.to,
|
||||
});
|
||||
const { data: rollups } = useRollupRange({
|
||||
metrics: ["server_fn.count"],
|
||||
from: range.from,
|
||||
to: range.to,
|
||||
});
|
||||
|
||||
const { callsToday, callsSeries } = useMemo(() => {
|
||||
const byDate = new Map<string, number>();
|
||||
for (const row of rollups ?? []) {
|
||||
byDate.set(row.date, (byDate.get(row.date) ?? 0) + row.value);
|
||||
}
|
||||
return {
|
||||
callsToday: byDate.get(isoDay(new Date())) ?? 0,
|
||||
callsSeries: listDays(range).map((day) => byDate.get(day) ?? 0),
|
||||
};
|
||||
}, [rollups, range]);
|
||||
|
||||
const unresolved = errorGroups?.length ?? 0;
|
||||
|
||||
return (
|
||||
<SimpleGrid cols={3} spacing="xs">
|
||||
<StatTile label={t`Online now`} value={status?.activeSseConnections ?? 0} />
|
||||
<StatTile
|
||||
label={t`Open errors`}
|
||||
value={unresolved}
|
||||
caption={undefined}
|
||||
onClick={() => navigate({ to: "/admin/telemetry/errors" })}
|
||||
/>
|
||||
<StatTile
|
||||
label={t`Calls today`}
|
||||
value={callsToday.toLocaleString()}
|
||||
spark={callsSeries}
|
||||
onClick={() => navigate({ to: "/admin/telemetry/usage" })}
|
||||
/>
|
||||
</SimpleGrid>
|
||||
);
|
||||
};
|
||||
|
||||
export default NowStrip;
|
||||
@@ -1,5 +1,5 @@
|
||||
import { Component, ReactNode } from "react";
|
||||
import { Card, Text } from "@mantine/core";
|
||||
import { Text } from "@mantine/core";
|
||||
import { Trans } from "@lingui/react/macro";
|
||||
|
||||
interface QuietBoundaryProps {
|
||||
@@ -20,11 +20,9 @@ export class QuietBoundary extends Component<QuietBoundaryProps, QuietBoundarySt
|
||||
render() {
|
||||
if (this.state.hasError) {
|
||||
return (
|
||||
<Card withBorder radius="md" p="md">
|
||||
<Text size="sm" c="dimmed">
|
||||
<Trans>Unavailable right now</Trans>
|
||||
</Text>
|
||||
</Card>
|
||||
<Text size="sm" c="dimmed">
|
||||
<Trans>Unavailable right now</Trans>
|
||||
</Text>
|
||||
);
|
||||
}
|
||||
return this.props.children;
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
import { ReactNode } from "react";
|
||||
import { Box } from "@mantine/core";
|
||||
|
||||
export const SectionBox = ({ children }: { children: ReactNode }) => (
|
||||
<Box
|
||||
px="md"
|
||||
py="sm"
|
||||
style={{ borderBottom: "1px solid var(--mantine-color-default-border)" }}
|
||||
>
|
||||
{children}
|
||||
</Box>
|
||||
);
|
||||
|
||||
export default SectionBox;
|
||||
@@ -0,0 +1,74 @@
|
||||
import { useMemo } from "react";
|
||||
import { Group, Stack, Text, UnstyledButton } from "@mantine/core";
|
||||
import { useLingui } from "@lingui/react/macro";
|
||||
import { useNavigate } from "@tanstack/react-router";
|
||||
import {
|
||||
useClientErrorGroups,
|
||||
useRollupRange,
|
||||
useTelemetryRuntimeStatus,
|
||||
} from "@/features/telemetry/queries";
|
||||
import { isoDay, lastNDays } from "@/features/telemetry/range";
|
||||
|
||||
interface StatProps {
|
||||
value: string | number;
|
||||
label: string;
|
||||
alert?: boolean;
|
||||
onClick: () => void;
|
||||
}
|
||||
|
||||
const Stat = ({ value, label, alert, onClick }: StatProps) => (
|
||||
<UnstyledButton className="flxn-press" onClick={onClick}>
|
||||
<Stack gap={0} align="center">
|
||||
<Text fz="lg" fw={700} lh={1.3} c={alert ? "red" : undefined}>
|
||||
{value}
|
||||
</Text>
|
||||
<Text size="xs" c="dimmed">
|
||||
{label}
|
||||
</Text>
|
||||
</Stack>
|
||||
</UnstyledButton>
|
||||
);
|
||||
|
||||
export const StatusStrip = () => {
|
||||
const { t } = useLingui();
|
||||
const navigate = useNavigate();
|
||||
const today = useMemo(() => isoDay(new Date()), []);
|
||||
const month = useMemo(() => lastNDays(30), []);
|
||||
|
||||
const { data: status } = useTelemetryRuntimeStatus();
|
||||
const { data: errorGroups } = useClientErrorGroups({ from: month.from, to: month.to });
|
||||
const { data: rollups } = useRollupRange({
|
||||
metrics: ["server_fn.count"],
|
||||
from: today,
|
||||
to: today,
|
||||
});
|
||||
|
||||
const callsToday = useMemo(
|
||||
() => (rollups ?? []).reduce((sum, row) => sum + row.value, 0),
|
||||
[rollups]
|
||||
);
|
||||
const openErrors = errorGroups?.length ?? 0;
|
||||
|
||||
return (
|
||||
<Group grow>
|
||||
<Stat
|
||||
value={status?.activeSseConnections ?? 0}
|
||||
label={t`Online`}
|
||||
onClick={() => navigate({ to: "/admin/telemetry/players" })}
|
||||
/>
|
||||
<Stat
|
||||
value={openErrors}
|
||||
label={t`Open errors`}
|
||||
alert={openErrors > 0}
|
||||
onClick={() => navigate({ to: "/admin/telemetry/errors" })}
|
||||
/>
|
||||
<Stat
|
||||
value={callsToday.toLocaleString()}
|
||||
label={t`Calls today`}
|
||||
onClick={() => navigate({ to: "/admin/telemetry/usage" })}
|
||||
/>
|
||||
</Group>
|
||||
);
|
||||
};
|
||||
|
||||
export default StatusStrip;
|
||||
@@ -6,6 +6,7 @@ import {
|
||||
TrophyIcon,
|
||||
MedalIcon,
|
||||
CrownIcon,
|
||||
PulseIcon,
|
||||
} from "@phosphor-icons/react";
|
||||
import ListLink from "@/components/list-link";
|
||||
import ListButton from "@/components/list-button";
|
||||
@@ -50,6 +51,11 @@ export const ToolsList = () => {
|
||||
Icon={TrophyIcon}
|
||||
to="/admin/tournaments"
|
||||
/>
|
||||
<ListLink
|
||||
label={t`Telemetry`}
|
||||
Icon={PulseIcon}
|
||||
to="/admin/telemetry/functions"
|
||||
/>
|
||||
<ListLink
|
||||
label={t`Award Badges`}
|
||||
Icon={CrownIcon}
|
||||
|
||||
@@ -1,76 +0,0 @@
|
||||
import { Button, Card, Group, Stack, Text } from "@mantine/core";
|
||||
import { Trans, useLingui } from "@lingui/react/macro";
|
||||
import { useNavigate } from "@tanstack/react-router";
|
||||
import { PlayIcon, TrophyIcon, UsersThreeIcon, GearIcon } from "@phosphor-icons/react";
|
||||
import { useCurrentTournament } from "@/features/tournaments/queries";
|
||||
import { Countdown } from "@/components/countdown";
|
||||
|
||||
export const TournamentCard = () => {
|
||||
const { t } = useLingui();
|
||||
const navigate = useNavigate();
|
||||
const { data: tournament } = useCurrentTournament();
|
||||
|
||||
if (!tournament) {
|
||||
return (
|
||||
<Card withBorder radius="md" p="md">
|
||||
<Stack gap="sm">
|
||||
<Text size="sm" c="dimmed">
|
||||
<Trans>No tournaments yet</Trans>
|
||||
</Text>
|
||||
<Button
|
||||
variant="light"
|
||||
leftSection={<TrophyIcon size={16} />}
|
||||
onClick={() => navigate({ to: "/admin/tournaments" })}
|
||||
>
|
||||
<Trans>Manage Tournaments</Trans>
|
||||
</Button>
|
||||
</Stack>
|
||||
</Card>
|
||||
);
|
||||
}
|
||||
|
||||
const upcoming = !!tournament.start_time && Date.parse(tournament.start_time) > Date.now();
|
||||
|
||||
return (
|
||||
<Card withBorder radius="md" p="md">
|
||||
<Stack gap="sm">
|
||||
<Group justify="space-between" align="flex-start" wrap="nowrap">
|
||||
<Stack gap={2}>
|
||||
<Text fw={600} truncate>
|
||||
{tournament.name}
|
||||
</Text>
|
||||
{upcoming && (
|
||||
<Countdown date={new Date(tournament.start_time)} label={t`Starts in`} />
|
||||
)}
|
||||
</Stack>
|
||||
<TrophyIcon size={20} />
|
||||
</Group>
|
||||
<Button
|
||||
leftSection={<PlayIcon size={16} weight="fill" />}
|
||||
fullWidth
|
||||
onClick={() => navigate({ to: `/admin/tournaments/run/${tournament.id}` })}
|
||||
>
|
||||
<Trans>Run Tournament</Trans>
|
||||
</Button>
|
||||
<Group grow>
|
||||
<Button
|
||||
variant="light"
|
||||
leftSection={<UsersThreeIcon size={16} />}
|
||||
onClick={() => navigate({ to: `/admin/tournaments/${tournament.id}/enrollment` })}
|
||||
>
|
||||
<Trans>Enrollment</Trans>
|
||||
</Button>
|
||||
<Button
|
||||
variant="light"
|
||||
leftSection={<GearIcon size={16} />}
|
||||
onClick={() => navigate({ to: `/admin/tournaments/${tournament.id}` })}
|
||||
>
|
||||
<Trans>Manage</Trans>
|
||||
</Button>
|
||||
</Group>
|
||||
</Stack>
|
||||
</Card>
|
||||
);
|
||||
};
|
||||
|
||||
export default TournamentCard;
|
||||
@@ -0,0 +1,48 @@
|
||||
import { SimpleGrid, Text, Title } from "@mantine/core";
|
||||
import { useLingui } from "@lingui/react/macro";
|
||||
import { useNavigate } from "@tanstack/react-router";
|
||||
import { GearIcon, PlayIcon, UsersThreeIcon } from "@phosphor-icons/react";
|
||||
import { useCurrentTournament } from "@/features/tournaments/queries";
|
||||
import { NavTile } from "@/components/nav-tile";
|
||||
import { Countdown } from "@/components/countdown";
|
||||
import SectionBox from "./section-box";
|
||||
|
||||
export const TournamentSection = () => {
|
||||
const { t } = useLingui();
|
||||
const navigate = useNavigate();
|
||||
const { data: tournament } = useCurrentTournament();
|
||||
|
||||
if (!tournament) return null;
|
||||
|
||||
const upcoming = !!tournament.start_time && Date.parse(tournament.start_time) > Date.now();
|
||||
|
||||
return (
|
||||
<SectionBox>
|
||||
<Title order={3}>{tournament.name}</Title>
|
||||
{upcoming && (
|
||||
<Text size="sm" c="dimmed" component="div">
|
||||
<Countdown date={new Date(tournament.start_time)} label={t`Starts in`} />
|
||||
</Text>
|
||||
)}
|
||||
<SimpleGrid cols={3} spacing="sm" mt="sm">
|
||||
<NavTile
|
||||
label={t`Run`}
|
||||
Icon={PlayIcon}
|
||||
onClick={() => navigate({ to: `/admin/tournaments/run/${tournament.id}` })}
|
||||
/>
|
||||
<NavTile
|
||||
label={t`Enrollment`}
|
||||
Icon={UsersThreeIcon}
|
||||
onClick={() => navigate({ to: `/admin/tournaments/${tournament.id}/enrollment` })}
|
||||
/>
|
||||
<NavTile
|
||||
label={t`Manage`}
|
||||
Icon={GearIcon}
|
||||
onClick={() => navigate({ to: `/admin/tournaments/${tournament.id}` })}
|
||||
/>
|
||||
</SimpleGrid>
|
||||
</SectionBox>
|
||||
);
|
||||
};
|
||||
|
||||
export default TournamentSection;
|
||||
@@ -1,55 +0,0 @@
|
||||
import { useMemo } from "react";
|
||||
import { Card, Group, Stack, Text, UnstyledButton } from "@mantine/core";
|
||||
import { Trans, useLingui } from "@lingui/react/macro";
|
||||
import { useNavigate } from "@tanstack/react-router";
|
||||
import { useRollupRange } from "@/features/telemetry/queries";
|
||||
import { Sparkline } from "@/features/telemetry/components/charts";
|
||||
import { fillDailySeries, lastNDays, listDays } from "@/features/telemetry/range";
|
||||
|
||||
export const UsageCard = () => {
|
||||
const { t } = useLingui();
|
||||
const navigate = useNavigate();
|
||||
const range = useMemo(() => lastNDays(7), []);
|
||||
|
||||
const { data: rollups } = useRollupRange({
|
||||
metrics: ["dau", "page_view.count"],
|
||||
from: range.from,
|
||||
to: range.to,
|
||||
});
|
||||
|
||||
const { dauSeries, pageViewSeries } = useMemo(() => {
|
||||
const days = listDays(range);
|
||||
return {
|
||||
dauSeries: fillDailySeries(rollups ?? [], "dau", "", days),
|
||||
pageViewSeries: fillDailySeries(rollups ?? [], "page_view.count", "", days),
|
||||
};
|
||||
}, [rollups, range]);
|
||||
|
||||
return (
|
||||
<UnstyledButton w="100%" onClick={() => navigate({ to: "/admin/telemetry/usage" })}>
|
||||
<Card withBorder radius="md" p="md">
|
||||
<Stack gap="sm">
|
||||
<Group justify="space-between">
|
||||
<Text fw={600} size="sm">
|
||||
<Trans>Usage, 7 days</Trans>
|
||||
</Text>
|
||||
</Group>
|
||||
<Stack gap={4}>
|
||||
<Text size="xs" c="dimmed">
|
||||
<Trans>Active players</Trans>
|
||||
</Text>
|
||||
<Sparkline data={dauSeries} height={36} showArea label={t`Daily active players`} />
|
||||
</Stack>
|
||||
<Stack gap={4}>
|
||||
<Text size="xs" c="dimmed">
|
||||
<Trans>Page views</Trans>
|
||||
</Text>
|
||||
<Sparkline data={pageViewSeries} height={36} showArea label={t`Daily page views`} />
|
||||
</Stack>
|
||||
</Stack>
|
||||
</Card>
|
||||
</UnstyledButton>
|
||||
);
|
||||
};
|
||||
|
||||
export default UsageCard;
|
||||
@@ -1,5 +1,5 @@
|
||||
import { ReactNode } from "react";
|
||||
import { Box, Card, Group, Stack, Text, UnstyledButton } from "@mantine/core";
|
||||
import { Box, Group, Stack, Text, UnstyledButton } from "@mantine/core";
|
||||
import Sparkline from "./sparkline";
|
||||
|
||||
interface StatTileProps {
|
||||
@@ -13,12 +13,9 @@ interface StatTileProps {
|
||||
|
||||
export const StatTile = ({ label, value, delta, spark, caption, onClick }: StatTileProps) => {
|
||||
const content = (
|
||||
<Stack gap={4}>
|
||||
<Text size="xs" c="dimmed">
|
||||
{label}
|
||||
</Text>
|
||||
<Stack gap={2}>
|
||||
<Group gap="xs" align="baseline" wrap="nowrap">
|
||||
<Text fz={24} fw={600} lh={1.2}>
|
||||
<Text fz="xl" fw={700} lh={1.2}>
|
||||
{value}
|
||||
</Text>
|
||||
{delta !== undefined && delta !== 0 && (
|
||||
@@ -28,6 +25,9 @@ export const StatTile = ({ label, value, delta, spark, caption, onClick }: StatT
|
||||
</Text>
|
||||
)}
|
||||
</Group>
|
||||
<Text size="xs" c="dimmed">
|
||||
{label}
|
||||
</Text>
|
||||
{caption && <Box>{caption}</Box>}
|
||||
{spark && spark.length > 0 && <Sparkline data={spark} height={28} />}
|
||||
</Stack>
|
||||
@@ -35,19 +35,13 @@ export const StatTile = ({ label, value, delta, spark, caption, onClick }: StatT
|
||||
|
||||
if (onClick) {
|
||||
return (
|
||||
<UnstyledButton onClick={onClick} w="100%">
|
||||
<Card withBorder radius="md" p="md">
|
||||
{content}
|
||||
</Card>
|
||||
<UnstyledButton className="flxn-press" onClick={onClick} w="100%">
|
||||
{content}
|
||||
</UnstyledButton>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<Card withBorder radius="md" p="md">
|
||||
{content}
|
||||
</Card>
|
||||
);
|
||||
return content;
|
||||
};
|
||||
|
||||
export default StatTile;
|
||||
|
||||
@@ -2,7 +2,7 @@ import { Suspense, useMemo, useState } from "react";
|
||||
import { Trans, useLingui } from "@lingui/react/macro";
|
||||
import {
|
||||
Badge,
|
||||
Card,
|
||||
Divider,
|
||||
Group,
|
||||
SegmentedControl,
|
||||
SimpleGrid,
|
||||
@@ -10,7 +10,7 @@ import {
|
||||
Text,
|
||||
Title,
|
||||
} from "@mantine/core";
|
||||
import { CardSkeleton, StatTileSkeleton } from "@/components/skeletons";
|
||||
import { ListSkeleton, StatTileSkeleton } from "@/components/skeletons";
|
||||
import { useRollupRange } from "../queries";
|
||||
import { fillDailySeries, lastNDays, latestValue, listDays, sumByDim } from "../range";
|
||||
import { BarList, Sparkline, StatTile } from "./charts";
|
||||
@@ -171,30 +171,30 @@ const UsageSections = ({ from, to }: { from: string; to: string }) => {
|
||||
/>
|
||||
<StatTile label={<Trans>Sessions</Trans>} value={sessions.toLocaleString()} />
|
||||
</SimpleGrid>
|
||||
<Card withBorder radius="md" p="md">
|
||||
<Stack gap="xs">
|
||||
<Text size="xs" c="dimmed">
|
||||
<Trans>Page views by route</Trans>
|
||||
</Text>
|
||||
<BarList items={pageViewItems} />
|
||||
</Stack>
|
||||
</Card>
|
||||
<Stack gap="xs">
|
||||
<Text size="xs" c="dimmed">
|
||||
<Trans>Page views by route</Trans>
|
||||
</Text>
|
||||
<BarList items={pageViewItems} />
|
||||
</Stack>
|
||||
</Stack>
|
||||
|
||||
<Divider />
|
||||
|
||||
<Stack gap="sm">
|
||||
<Title order={4}>
|
||||
<Trans>Server functions</Trans>
|
||||
</Title>
|
||||
<Card withBorder radius="md" p="md">
|
||||
<Stack gap="xs">
|
||||
<Text size="xs" c="dimmed">
|
||||
<Trans>Top functions by call count</Trans>
|
||||
</Text>
|
||||
<BarList items={serverFnItems} />
|
||||
</Stack>
|
||||
</Card>
|
||||
<Stack gap="xs">
|
||||
<Text size="xs" c="dimmed">
|
||||
<Trans>Top functions by call count</Trans>
|
||||
</Text>
|
||||
<BarList items={serverFnItems} />
|
||||
</Stack>
|
||||
</Stack>
|
||||
|
||||
<Divider />
|
||||
|
||||
<Stack gap="sm">
|
||||
<Title order={4}>
|
||||
<Trans>Errors</Trans>
|
||||
@@ -206,6 +206,8 @@ const UsageSections = ({ from, to }: { from: string; to: string }) => {
|
||||
/>
|
||||
</Stack>
|
||||
|
||||
<Divider />
|
||||
|
||||
<Stack gap="sm">
|
||||
<Title order={4}>
|
||||
<Trans>Vitals</Trans>
|
||||
@@ -261,14 +263,13 @@ export const UsageScreen = () => {
|
||||
<Suspense
|
||||
fallback={
|
||||
<Stack gap="lg">
|
||||
<StatTileSkeleton withCard align="row" />
|
||||
<StatTileSkeleton align="row" />
|
||||
<SimpleGrid cols={3} spacing="sm">
|
||||
<StatTileSkeleton withCard />
|
||||
<StatTileSkeleton withCard />
|
||||
<StatTileSkeleton withCard />
|
||||
<StatTileSkeleton />
|
||||
<StatTileSkeleton />
|
||||
<StatTileSkeleton />
|
||||
</SimpleGrid>
|
||||
<CardSkeleton withAvatar={false} withBadge={false} />
|
||||
<CardSkeleton withAvatar={false} withBadge={false} />
|
||||
<ListSkeleton rows={6} withTrailing="text" />
|
||||
</Stack>
|
||||
}
|
||||
>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { useTournament } from "../queries";
|
||||
import { Box, List } from "@mantine/core";
|
||||
import { List } from "@mantine/core";
|
||||
import ListButton from "@/components/list-button";
|
||||
import Sheet from "@/components/sheet/sheet";
|
||||
import TournamentForm from "./tournament-form";
|
||||
@@ -12,9 +12,7 @@ import {
|
||||
import { useSheet } from "@/hooks/use-sheet";
|
||||
import ListLink from "@/components/list-link";
|
||||
import EditRules from "./edit-rules";
|
||||
import Button from "@/components/button";
|
||||
import { Trans, useLingui } from "@lingui/react/macro";
|
||||
import { useNavigate } from "@tanstack/react-router";
|
||||
import { useLingui } from "@lingui/react/macro";
|
||||
|
||||
interface ManageTournamentProps {
|
||||
tournamentId: string;
|
||||
@@ -22,7 +20,6 @@ interface ManageTournamentProps {
|
||||
|
||||
const ManageTournament = ({ tournamentId }: ManageTournamentProps) => {
|
||||
const { t } = useLingui();
|
||||
const navigate = useNavigate();
|
||||
const { data: tournament } = useTournament(tournamentId);
|
||||
|
||||
if (!tournament) throw new Error("Tournament not found.");
|
||||
@@ -39,18 +36,12 @@ const ManageTournament = ({ tournamentId }: ManageTournamentProps) => {
|
||||
|
||||
return (
|
||||
<>
|
||||
<Box px="md" py="md">
|
||||
<Button
|
||||
leftSection={<TreeStructureIcon weight="bold" size={20} />}
|
||||
onClick={() =>
|
||||
navigate({ to: `/admin/tournaments/run/${tournamentId}` })
|
||||
}
|
||||
>
|
||||
<Trans>Run Tournament</Trans>
|
||||
</Button>
|
||||
</Box>
|
||||
|
||||
<List p="0">
|
||||
<ListLink
|
||||
label={t`Run Tournament`}
|
||||
Icon={TreeStructureIcon}
|
||||
to={`/admin/tournaments/run/${tournamentId}`}
|
||||
/>
|
||||
<ListLink
|
||||
label={t`Enrollment & Teams`}
|
||||
Icon={UsersThreeIcon}
|
||||
|
||||
@@ -30,28 +30,9 @@ const RulesContent = lazy(
|
||||
() => import("../../upcoming-tournament/rules-content")
|
||||
);
|
||||
|
||||
interface NavTileProps {
|
||||
label: string;
|
||||
Icon: Icon;
|
||||
onClick?: () => void;
|
||||
disabled?: boolean;
|
||||
}
|
||||
import { NavTile } from "@/components/nav-tile";
|
||||
|
||||
/** A single square-ish nav tile with icon-over-label and press feedback. */
|
||||
export const NavTile = ({ label, Icon, onClick, disabled }: NavTileProps) => (
|
||||
<UnstyledButton
|
||||
className={`${classes.tile} flxn-tile`}
|
||||
onClick={onClick}
|
||||
disabled={disabled}
|
||||
>
|
||||
<span className={`${classes.icon} flxn-tile-icon`}>
|
||||
<Icon size={22} weight="bold" />
|
||||
</span>
|
||||
<Text size="xs" fw={600} lineClamp={2} lh={1.2}>
|
||||
{label}
|
||||
</Text>
|
||||
</UnstyledButton>
|
||||
);
|
||||
export { NavTile };
|
||||
|
||||
interface NavGridProps {
|
||||
tournament: Tournament;
|
||||
|
||||
+51
-82
@@ -153,7 +153,7 @@ msgstr "{0}ms"
|
||||
msgid "{count, plural, one {Players (#)} other {Players (#)}}"
|
||||
msgstr "{count, plural, one {Spieler (#)} other {Spieler (#)}}"
|
||||
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:134
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:115
|
||||
#: src/features/tournaments/components/upcoming-tournament/team-list-button.tsx:24
|
||||
msgid "{count, plural, one {Teams (#)} other {Teams (#)}}"
|
||||
msgstr "{count, plural, one {Teams (#)} other {Teams (#)}}"
|
||||
@@ -355,7 +355,7 @@ msgstr "2. Frühere Abgabe"
|
||||
msgid "2nd place"
|
||||
msgstr "2. Platz"
|
||||
|
||||
#: src/features/telemetry/components/usage-screen.tsx:256
|
||||
#: src/features/telemetry/components/usage-screen.tsx:258
|
||||
msgid "30d"
|
||||
msgstr "30 T"
|
||||
|
||||
@@ -371,7 +371,7 @@ msgstr "3. Platz"
|
||||
msgid "5s"
|
||||
msgstr "5 s"
|
||||
|
||||
#: src/features/telemetry/components/usage-screen.tsx:255
|
||||
#: src/features/telemetry/components/usage-screen.tsx:257
|
||||
msgid "7d"
|
||||
msgstr "7 T"
|
||||
|
||||
@@ -420,10 +420,6 @@ msgstr "Konto erfolgreich erstellt!"
|
||||
msgid "Active device: {0}"
|
||||
msgstr "Aktives Gerät: {0}"
|
||||
|
||||
#: src/features/admin/components/dashboard/usage-card.tsx:39
|
||||
msgid "Active players"
|
||||
msgstr "Aktive Spieler"
|
||||
|
||||
#: src/features/activities/components/activities-table.tsx:159
|
||||
msgid "Activity Details"
|
||||
msgstr "Aktivitätsdetails"
|
||||
@@ -441,7 +437,7 @@ msgid "Add Team"
|
||||
msgstr "Team hinzufügen"
|
||||
|
||||
#: src/app/routes/_authed/admin.tsx:15
|
||||
#: src/app/routes/_authed/admin/index.tsx:22
|
||||
#: src/app/routes/_authed/admin/index.tsx:27
|
||||
#: src/features/core/hooks/use-links.ts:37
|
||||
msgid "Admin"
|
||||
msgstr "Admin"
|
||||
@@ -564,7 +560,7 @@ msgstr "Ø Sieg-Marge"
|
||||
msgid "Award Badge"
|
||||
msgstr "Abzeichen verleihen"
|
||||
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:54
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:60
|
||||
msgid "Award Badges"
|
||||
msgstr "Abzeichen verleihen"
|
||||
|
||||
@@ -598,15 +594,15 @@ msgstr "Zurück"
|
||||
msgid "Badge awarded to {playerName}"
|
||||
msgstr "Abzeichen an {playerName} verliehen"
|
||||
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:85
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:91
|
||||
msgid "Badge recalculation failed. Check the server logs."
|
||||
msgstr "Abzeichen-Neuberechnung fehlgeschlagen. Prüfe die Server-Logs."
|
||||
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:38
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:39
|
||||
msgid "Badge recalculation is already running"
|
||||
msgstr "Abzeichen-Neuberechnung läuft bereits"
|
||||
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:37
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:38
|
||||
msgid "Badge recalculation started in the background"
|
||||
msgstr "Abzeichen-Neuberechnung im Hintergrund gestartet"
|
||||
|
||||
@@ -631,13 +627,13 @@ msgstr "Zirkus"
|
||||
msgid "Both teams cannot have 10 cups"
|
||||
msgstr "Beide Teams können nicht 10 Becher haben"
|
||||
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:106
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:87
|
||||
#: src/features/tournaments/components/upcoming-tournament/index.tsx:151
|
||||
msgid "Bracket"
|
||||
msgstr "Turnierbaum"
|
||||
|
||||
#: src/app/routes/_authed/admin/preview.tsx:13
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:96
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:102
|
||||
msgid "Bracket Preview"
|
||||
msgstr "Turnierbaum-Vorschau"
|
||||
|
||||
@@ -654,7 +650,7 @@ msgstr "Brutal"
|
||||
msgid "CA"
|
||||
msgstr "CA"
|
||||
|
||||
#: src/features/admin/components/dashboard/now-strip.tsx:52
|
||||
#: src/features/admin/components/dashboard/status-strip.tsx:67
|
||||
msgid "Calls today"
|
||||
msgstr "Aufrufe heute"
|
||||
|
||||
@@ -720,16 +716,12 @@ msgstr "Ausgewählten Spieler entfernen"
|
||||
msgid "Client error spike"
|
||||
msgstr "Anstieg von Client-Fehlern"
|
||||
|
||||
#: src/features/admin/components/dashboard/errors-card.tsx:21
|
||||
msgid "Client errors"
|
||||
msgstr "Client-Fehler"
|
||||
|
||||
#: src/features/telemetry/components/usage-screen.tsx:203
|
||||
msgid "Client errors per day"
|
||||
msgstr "Client-Fehler pro Tag"
|
||||
|
||||
#: src/components/sheet/modal.tsx:35
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:169
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:150
|
||||
#: src/features/tournaments/components/upcoming-tournament/rules-list-button.tsx:36
|
||||
msgid "Close"
|
||||
msgstr "Schließen"
|
||||
@@ -883,15 +875,10 @@ msgstr "Becher erzielt"
|
||||
msgid "Custom Hex Code"
|
||||
msgstr "Benutzerdefinierter Hex-Code"
|
||||
|
||||
#: src/features/admin/components/dashboard/usage-card.tsx:41
|
||||
#: src/features/telemetry/components/usage-screen.tsx:159
|
||||
msgid "Daily active players"
|
||||
msgstr "Täglich aktive Spieler"
|
||||
|
||||
#: src/features/admin/components/dashboard/usage-card.tsx:47
|
||||
msgid "Daily page views"
|
||||
msgstr "Tägliche Seitenaufrufe"
|
||||
|
||||
#: src/features/settings/components/color-scheme-picker.tsx:39
|
||||
msgid "Dark"
|
||||
msgstr "Dunkel"
|
||||
@@ -947,7 +934,7 @@ msgstr "Nachfolgende Matches wurden zurückgesetzt, da sich durch die Korrektur
|
||||
msgid "Duration"
|
||||
msgstr "Dauer"
|
||||
|
||||
#: src/features/telemetry/components/usage-screen.tsx:233
|
||||
#: src/features/telemetry/components/usage-screen.tsx:235
|
||||
msgid "Duration p50 / p95"
|
||||
msgstr "Dauer p50 / p95"
|
||||
|
||||
@@ -970,12 +957,12 @@ msgstr "Match bearbeiten"
|
||||
msgid "Edit match score"
|
||||
msgstr "Spielstand bearbeiten"
|
||||
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:114
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:95
|
||||
msgid "Edit Prediction"
|
||||
msgstr "Tipp bearbeiten"
|
||||
|
||||
#: src/features/tournaments/components/manage-tournament.tsx:65
|
||||
#: src/features/tournaments/components/manage-tournament.tsx:92
|
||||
#: src/features/tournaments/components/manage-tournament.tsx:56
|
||||
#: src/features/tournaments/components/manage-tournament.tsx:83
|
||||
msgid "Edit Rules"
|
||||
msgstr "Regeln bearbeiten"
|
||||
|
||||
@@ -984,8 +971,8 @@ msgstr "Regeln bearbeiten"
|
||||
msgid "Edit Team"
|
||||
msgstr "Team bearbeiten"
|
||||
|
||||
#: src/features/tournaments/components/manage-tournament.tsx:60
|
||||
#: src/features/tournaments/components/manage-tournament.tsx:72
|
||||
#: src/features/tournaments/components/manage-tournament.tsx:51
|
||||
#: src/features/tournaments/components/manage-tournament.tsx:63
|
||||
msgid "Edit Tournament"
|
||||
msgstr "Turnier bearbeiten"
|
||||
|
||||
@@ -1048,7 +1035,7 @@ msgstr "Angemeldete Spieler"
|
||||
|
||||
#: src/features/tournaments/components/enrollment/enrollment-stats.tsx:28
|
||||
#: src/features/tournaments/components/enrollment/team-section.tsx:240
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:145
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:126
|
||||
#: src/features/tournaments/components/upcoming-tournament/team-list-button.tsx:31
|
||||
msgid "Enrolled Teams"
|
||||
msgstr "Angemeldete Teams"
|
||||
@@ -1058,13 +1045,13 @@ msgid "Enrolling as a free agent adds you to a pool of players looking for teamm
|
||||
msgstr "Als Free Agent kommst du in einen Pool von Spielern, die noch einen Teampartner suchen."
|
||||
|
||||
#: src/app/routes/_authed/admin/tournaments/$id/enrollment.tsx:33
|
||||
#: src/features/admin/components/dashboard/tournament-card.tsx:61
|
||||
#: src/features/admin/components/dashboard/tournament-section.tsx:34
|
||||
#: src/features/tournaments/components/upcoming-tournament/enroll-free-agent.tsx:29
|
||||
#: src/features/tournaments/components/upcoming-tournament/index.tsx:69
|
||||
msgid "Enrollment"
|
||||
msgstr "Anmeldung"
|
||||
|
||||
#: src/features/tournaments/components/manage-tournament.tsx:55
|
||||
#: src/features/tournaments/components/manage-tournament.tsx:46
|
||||
msgid "Enrollment & Teams"
|
||||
msgstr "Anmeldungen & Teams"
|
||||
|
||||
@@ -1181,7 +1168,7 @@ msgstr "Aktives Gerät konnte nicht festgelegt werden"
|
||||
msgid "Failed to set volume"
|
||||
msgstr "Lautstärke konnte nicht festgelegt werden"
|
||||
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:41
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:42
|
||||
msgid "Failed to start badge recalculation"
|
||||
msgstr "Abzeichen-Neuberechnung konnte nicht gestartet werden"
|
||||
|
||||
@@ -1251,7 +1238,7 @@ msgstr "Free-Agent-Anmeldung"
|
||||
msgid "Free Agents"
|
||||
msgstr "Free Agents"
|
||||
|
||||
#: src/features/telemetry/components/usage-screen.tsx:226
|
||||
#: src/features/telemetry/components/usage-screen.tsx:228
|
||||
msgid "Function"
|
||||
msgstr "Funktion"
|
||||
|
||||
@@ -1319,7 +1306,7 @@ msgstr "Gruppenphase erfolgreich erstellt!"
|
||||
msgid "Group Stage Setup"
|
||||
msgstr "Gruppenphase einrichten"
|
||||
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:98
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:79
|
||||
msgid "Groups"
|
||||
msgstr "Gruppen"
|
||||
|
||||
@@ -1465,7 +1452,7 @@ msgid "Last name must be 3-20 characters long and contain only letters"
|
||||
msgstr "Der Nachname muss 3-20 Zeichen lang sein und darf nur Buchstaben enthalten"
|
||||
|
||||
#. placeholder {0}: migrationStatus.result.totalBadgesEarned
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:73
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:79
|
||||
msgid "Last recalculation: {0, plural, one {# badge earned} other {# badges earned}}"
|
||||
msgstr "Letzte Neuberechnung: {0, plural, one {# Abzeichen verdient} other {# Abzeichen verdient}}"
|
||||
|
||||
@@ -1530,7 +1517,7 @@ msgstr "S"
|
||||
msgid "Mainline"
|
||||
msgstr "Mainline"
|
||||
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:114
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:95
|
||||
msgid "Make Prediction"
|
||||
msgstr "Tipp abgeben"
|
||||
|
||||
@@ -1538,8 +1525,8 @@ msgstr "Tipp abgeben"
|
||||
msgid "Make Your Prediction"
|
||||
msgstr "Gib deinen Tipp ab"
|
||||
|
||||
#: src/features/admin/components/dashboard/tournament-card.tsx:68
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:89
|
||||
#: src/features/admin/components/dashboard/tournament-section.tsx:39
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:70
|
||||
#: src/features/tournaments/components/upcoming-tournament/index.tsx:144
|
||||
msgid "Manage"
|
||||
msgstr "Verwalten"
|
||||
@@ -1554,8 +1541,7 @@ msgid "Manage Team Songs/Logos"
|
||||
msgstr "Team-Songs/Logos verwalten"
|
||||
|
||||
#: src/app/routes/_authed/admin/tournaments/index.tsx:17
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:49
|
||||
#: src/features/admin/components/dashboard/tournament-card.tsx:25
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:50
|
||||
msgid "Manage Tournaments"
|
||||
msgstr "Turniere verwalten"
|
||||
|
||||
@@ -1642,7 +1628,7 @@ msgstr "MAU"
|
||||
msgid "Me"
|
||||
msgstr "Ich"
|
||||
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:59
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:65
|
||||
msgid "Migrate Badge Progress"
|
||||
msgstr "Abzeichen-Fortschritt migrieren"
|
||||
|
||||
@@ -1748,10 +1734,6 @@ msgstr "Keine aktive Wiedergabe zum Erfassen"
|
||||
msgid "No Activities Found"
|
||||
msgstr "Keine Aktivitäten gefunden"
|
||||
|
||||
#: src/features/admin/components/dashboard/activity-feed.tsx:78
|
||||
msgid "No activity yet"
|
||||
msgstr "Noch keine Aktivität"
|
||||
|
||||
#: src/features/badges/components/badge-stats-table.tsx:45
|
||||
msgid "No Badges Available"
|
||||
msgstr "Keine Abzeichen verfügbar"
|
||||
@@ -1844,15 +1826,10 @@ msgstr "Keine Teams gefunden, die zu \"{search}\" passen"
|
||||
msgid "No tournaments found"
|
||||
msgstr "Keine Turniere gefunden"
|
||||
|
||||
#: src/features/admin/components/dashboard/tournament-card.tsx:18
|
||||
msgid "No tournaments yet"
|
||||
msgstr "Noch keine Turniere"
|
||||
|
||||
#: src/features/tournaments/components/tournament-card-list.tsx:40
|
||||
msgid "No Tournaments Yet"
|
||||
msgstr "Noch keine Turniere"
|
||||
|
||||
#: src/features/admin/components/dashboard/errors-card.tsx:53
|
||||
#: src/features/telemetry/components/error-browser/error-browser.tsx:27
|
||||
msgid "No unresolved errors"
|
||||
msgstr "Keine offenen Fehler"
|
||||
@@ -1914,15 +1891,15 @@ msgstr "Sobald du angemeldet bist, kannst du andere Free Agents und ihre Telefon
|
||||
msgid "One time code"
|
||||
msgstr "Einmalcode"
|
||||
|
||||
#: src/features/admin/components/dashboard/now-strip.tsx:44
|
||||
msgid "Online now"
|
||||
msgstr "Gerade online"
|
||||
#: src/features/admin/components/dashboard/status-strip.tsx:56
|
||||
msgid "Online"
|
||||
msgstr "Online"
|
||||
|
||||
#: src/features/admin/components/dashboard/now-strip.tsx:46
|
||||
#: src/features/admin/components/dashboard/status-strip.tsx:61
|
||||
msgid "Open errors"
|
||||
msgstr "Offene Fehler"
|
||||
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:89
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:95
|
||||
msgid "Open Pocketbase"
|
||||
msgstr "Pocketbase öffnen"
|
||||
|
||||
@@ -1972,11 +1949,7 @@ msgstr "p50"
|
||||
msgid "p95"
|
||||
msgstr "p95"
|
||||
|
||||
#: src/features/admin/components/dashboard/usage-card.tsx:45
|
||||
msgid "Page views"
|
||||
msgstr "Seitenaufrufe"
|
||||
|
||||
#: src/features/telemetry/components/usage-screen.tsx:177
|
||||
#: src/features/telemetry/components/usage-screen.tsx:176
|
||||
msgid "Page views by route"
|
||||
msgstr "Seitenaufrufe nach Route"
|
||||
|
||||
@@ -2095,7 +2068,7 @@ msgstr "Punktevergabe für Tipps:"
|
||||
|
||||
#: src/app/routes/_authed/tournaments/$id.predictions.tsx:23
|
||||
#: src/features/predictions/components/prediction-leaderboard.tsx:147
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:123
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:104
|
||||
msgid "Predictions"
|
||||
msgstr "Tipps"
|
||||
|
||||
@@ -2146,14 +2119,10 @@ msgstr "Reaktionen"
|
||||
|
||||
#. placeholder {0}: migrationStatus.playersProcessed
|
||||
#. placeholder {1}: migrationStatus.totalPlayers
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:66
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:72
|
||||
msgid "Recalculating badges in the background ({0}/{1})"
|
||||
msgstr "Abzeichen werden im Hintergrund neu berechnet ({0}/{1})"
|
||||
|
||||
#: src/features/admin/components/dashboard/activity-feed.tsx:34
|
||||
msgid "Recent activity"
|
||||
msgstr "Letzte Aktivität"
|
||||
|
||||
#: src/features/tournaments/components/started-tournament/sections/recent-results.tsx:34
|
||||
msgid "Recently finished"
|
||||
msgstr "Kürzlich beendet"
|
||||
@@ -2218,17 +2187,20 @@ msgstr "Runde {0}"
|
||||
msgid "Route"
|
||||
msgstr "Route"
|
||||
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:142
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:123
|
||||
#: src/features/tournaments/components/upcoming-tournament/rules-list-button.tsx:23
|
||||
msgid "Rules"
|
||||
msgstr "Regeln"
|
||||
|
||||
#: src/features/admin/components/dashboard/tournament-section.tsx:29
|
||||
msgid "Run"
|
||||
msgstr "Starten"
|
||||
|
||||
#: src/app/routes/_authed/admin/tournaments/run.$id.tsx:36
|
||||
msgid "Run {name}"
|
||||
msgstr "{name} ausführen"
|
||||
|
||||
#: src/features/admin/components/dashboard/tournament-card.tsx:53
|
||||
#: src/features/tournaments/components/manage-tournament.tsx:49
|
||||
#: src/features/tournaments/components/manage-tournament.tsx:41
|
||||
msgid "Run Tournament"
|
||||
msgstr "Turnier starten"
|
||||
|
||||
@@ -2517,7 +2489,7 @@ msgstr "Startzeit ist erforderlich"
|
||||
msgid "Start typing to search..."
|
||||
msgstr "Tippen, um zu suchen …"
|
||||
|
||||
#: src/features/admin/components/dashboard/tournament-card.tsx:43
|
||||
#: src/features/admin/components/dashboard/tournament-section.tsx:24
|
||||
msgid "Starts in"
|
||||
msgstr "Beginnt in"
|
||||
|
||||
@@ -2639,7 +2611,7 @@ msgstr "Team erfolgreich aktualisiert!"
|
||||
#: src/features/players/components/profile/skeleton.tsx:75
|
||||
#: src/features/tournaments/components/profile/index.tsx:32
|
||||
#: src/features/tournaments/components/profile/skeleton.tsx:89
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:137
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:118
|
||||
msgid "Teams"
|
||||
msgstr "Teams"
|
||||
|
||||
@@ -2648,6 +2620,7 @@ msgid "Teams created successfully!"
|
||||
msgstr "Teams erfolgreich erstellt!"
|
||||
|
||||
#: src/app/routes/_authed/admin/telemetry.tsx:20
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:55
|
||||
msgid "Telemetry"
|
||||
msgstr "Telemetrie"
|
||||
|
||||
@@ -2730,7 +2703,7 @@ msgstr "Die besten {0, plural, one {# Team} other {# Teams}} aus jeder Gruppe ko
|
||||
msgid "Top {n} advance"
|
||||
msgstr "Top {n} kommen weiter"
|
||||
|
||||
#: src/features/telemetry/components/usage-screen.tsx:191
|
||||
#: src/features/telemetry/components/usage-screen.tsx:190
|
||||
msgid "Top functions by call count"
|
||||
msgstr "Top-Funktionen nach Aufrufanzahl"
|
||||
|
||||
@@ -2757,7 +2730,7 @@ msgstr "Turnier erfolgreich erstellt!"
|
||||
msgid "Tournament not found"
|
||||
msgstr "Turnier nicht gefunden"
|
||||
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:152
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:133
|
||||
#: src/features/tournaments/components/upcoming-tournament/rules-list-button.tsx:25
|
||||
msgid "Tournament Rules"
|
||||
msgstr "Turnierregeln"
|
||||
@@ -2786,7 +2759,7 @@ msgstr "trackId ist für die playTrack-Aktion erforderlich"
|
||||
msgid "Try the new themes"
|
||||
msgstr "Probier die neuen Designs aus"
|
||||
|
||||
#: src/features/admin/components/dashboard/quiet-boundary.tsx:26
|
||||
#: src/features/admin/components/dashboard/quiet-boundary.tsx:24
|
||||
msgid "Unavailable right now"
|
||||
msgstr "Gerade nicht verfügbar"
|
||||
|
||||
@@ -2851,10 +2824,6 @@ msgstr "Turnier aktualisieren"
|
||||
msgid "Usage"
|
||||
msgstr "Nutzung"
|
||||
|
||||
#: src/features/admin/components/dashboard/usage-card.tsx:34
|
||||
msgid "Usage, 7 days"
|
||||
msgstr "Nutzung, 7 Tage"
|
||||
|
||||
#: src/features/activities/components/activities-table.tsx:202
|
||||
#: src/features/telemetry/components/client-events-table.tsx:146
|
||||
msgid "User Agent"
|
||||
@@ -2898,7 +2867,7 @@ msgstr "Tipps ansehen"
|
||||
msgid "Viewport"
|
||||
msgstr "Viewport"
|
||||
|
||||
#: src/features/telemetry/components/usage-screen.tsx:211
|
||||
#: src/features/telemetry/components/usage-screen.tsx:213
|
||||
msgid "Vitals"
|
||||
msgstr "Vitals"
|
||||
|
||||
|
||||
+51
-82
@@ -153,7 +153,7 @@ msgstr "{0}ms"
|
||||
msgid "{count, plural, one {Players (#)} other {Players (#)}}"
|
||||
msgstr "{count, plural, one {Players (#)} other {Players (#)}}"
|
||||
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:134
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:115
|
||||
#: src/features/tournaments/components/upcoming-tournament/team-list-button.tsx:24
|
||||
msgid "{count, plural, one {Teams (#)} other {Teams (#)}}"
|
||||
msgstr "{count, plural, one {Teams (#)} other {Teams (#)}}"
|
||||
@@ -355,7 +355,7 @@ msgstr "2. Earlier submission"
|
||||
msgid "2nd place"
|
||||
msgstr "2nd place"
|
||||
|
||||
#: src/features/telemetry/components/usage-screen.tsx:256
|
||||
#: src/features/telemetry/components/usage-screen.tsx:258
|
||||
msgid "30d"
|
||||
msgstr "30d"
|
||||
|
||||
@@ -371,7 +371,7 @@ msgstr "3rd place"
|
||||
msgid "5s"
|
||||
msgstr "5s"
|
||||
|
||||
#: src/features/telemetry/components/usage-screen.tsx:255
|
||||
#: src/features/telemetry/components/usage-screen.tsx:257
|
||||
msgid "7d"
|
||||
msgstr "7d"
|
||||
|
||||
@@ -420,10 +420,6 @@ msgstr "Account created successfully!"
|
||||
msgid "Active device: {0}"
|
||||
msgstr "Active device: {0}"
|
||||
|
||||
#: src/features/admin/components/dashboard/usage-card.tsx:39
|
||||
msgid "Active players"
|
||||
msgstr "Active players"
|
||||
|
||||
#: src/features/activities/components/activities-table.tsx:159
|
||||
msgid "Activity Details"
|
||||
msgstr "Activity Details"
|
||||
@@ -441,7 +437,7 @@ msgid "Add Team"
|
||||
msgstr "Add Team"
|
||||
|
||||
#: src/app/routes/_authed/admin.tsx:15
|
||||
#: src/app/routes/_authed/admin/index.tsx:22
|
||||
#: src/app/routes/_authed/admin/index.tsx:27
|
||||
#: src/features/core/hooks/use-links.ts:37
|
||||
msgid "Admin"
|
||||
msgstr "Admin"
|
||||
@@ -564,7 +560,7 @@ msgstr "Avg Win Margin"
|
||||
msgid "Award Badge"
|
||||
msgstr "Award Badge"
|
||||
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:54
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:60
|
||||
msgid "Award Badges"
|
||||
msgstr "Award Badges"
|
||||
|
||||
@@ -598,15 +594,15 @@ msgstr "Back"
|
||||
msgid "Badge awarded to {playerName}"
|
||||
msgstr "Badge awarded to {playerName}"
|
||||
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:85
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:91
|
||||
msgid "Badge recalculation failed. Check the server logs."
|
||||
msgstr "Badge recalculation failed. Check the server logs."
|
||||
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:38
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:39
|
||||
msgid "Badge recalculation is already running"
|
||||
msgstr "Badge recalculation is already running"
|
||||
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:37
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:38
|
||||
msgid "Badge recalculation started in the background"
|
||||
msgstr "Badge recalculation started in the background"
|
||||
|
||||
@@ -631,13 +627,13 @@ msgstr "Big Top"
|
||||
msgid "Both teams cannot have 10 cups"
|
||||
msgstr "Both teams cannot have 10 cups"
|
||||
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:106
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:87
|
||||
#: src/features/tournaments/components/upcoming-tournament/index.tsx:151
|
||||
msgid "Bracket"
|
||||
msgstr "Bracket"
|
||||
|
||||
#: src/app/routes/_authed/admin/preview.tsx:13
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:96
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:102
|
||||
msgid "Bracket Preview"
|
||||
msgstr "Bracket Preview"
|
||||
|
||||
@@ -654,7 +650,7 @@ msgstr "Brutal"
|
||||
msgid "CA"
|
||||
msgstr "CA"
|
||||
|
||||
#: src/features/admin/components/dashboard/now-strip.tsx:52
|
||||
#: src/features/admin/components/dashboard/status-strip.tsx:67
|
||||
msgid "Calls today"
|
||||
msgstr "Calls today"
|
||||
|
||||
@@ -720,16 +716,12 @@ msgstr "Clear selected player"
|
||||
msgid "Client error spike"
|
||||
msgstr "Client error spike"
|
||||
|
||||
#: src/features/admin/components/dashboard/errors-card.tsx:21
|
||||
msgid "Client errors"
|
||||
msgstr "Client errors"
|
||||
|
||||
#: src/features/telemetry/components/usage-screen.tsx:203
|
||||
msgid "Client errors per day"
|
||||
msgstr "Client errors per day"
|
||||
|
||||
#: src/components/sheet/modal.tsx:35
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:169
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:150
|
||||
#: src/features/tournaments/components/upcoming-tournament/rules-list-button.tsx:36
|
||||
msgid "Close"
|
||||
msgstr "Close"
|
||||
@@ -883,15 +875,10 @@ msgstr "Cups Made"
|
||||
msgid "Custom Hex Code"
|
||||
msgstr "Custom Hex Code"
|
||||
|
||||
#: src/features/admin/components/dashboard/usage-card.tsx:41
|
||||
#: src/features/telemetry/components/usage-screen.tsx:159
|
||||
msgid "Daily active players"
|
||||
msgstr "Daily active players"
|
||||
|
||||
#: src/features/admin/components/dashboard/usage-card.tsx:47
|
||||
msgid "Daily page views"
|
||||
msgstr "Daily page views"
|
||||
|
||||
#: src/features/settings/components/color-scheme-picker.tsx:39
|
||||
msgid "Dark"
|
||||
msgstr "Dark"
|
||||
@@ -947,7 +934,7 @@ msgstr "Downstream matches were reset because the correction changed who advance
|
||||
msgid "Duration"
|
||||
msgstr "Duration"
|
||||
|
||||
#: src/features/telemetry/components/usage-screen.tsx:233
|
||||
#: src/features/telemetry/components/usage-screen.tsx:235
|
||||
msgid "Duration p50 / p95"
|
||||
msgstr "Duration p50 / p95"
|
||||
|
||||
@@ -970,12 +957,12 @@ msgstr "Edit Match"
|
||||
msgid "Edit match score"
|
||||
msgstr "Edit match score"
|
||||
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:114
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:95
|
||||
msgid "Edit Prediction"
|
||||
msgstr "Edit Prediction"
|
||||
|
||||
#: src/features/tournaments/components/manage-tournament.tsx:65
|
||||
#: src/features/tournaments/components/manage-tournament.tsx:92
|
||||
#: src/features/tournaments/components/manage-tournament.tsx:56
|
||||
#: src/features/tournaments/components/manage-tournament.tsx:83
|
||||
msgid "Edit Rules"
|
||||
msgstr "Edit Rules"
|
||||
|
||||
@@ -984,8 +971,8 @@ msgstr "Edit Rules"
|
||||
msgid "Edit Team"
|
||||
msgstr "Edit Team"
|
||||
|
||||
#: src/features/tournaments/components/manage-tournament.tsx:60
|
||||
#: src/features/tournaments/components/manage-tournament.tsx:72
|
||||
#: src/features/tournaments/components/manage-tournament.tsx:51
|
||||
#: src/features/tournaments/components/manage-tournament.tsx:63
|
||||
msgid "Edit Tournament"
|
||||
msgstr "Edit Tournament"
|
||||
|
||||
@@ -1048,7 +1035,7 @@ msgstr "Enrolled Players"
|
||||
|
||||
#: src/features/tournaments/components/enrollment/enrollment-stats.tsx:28
|
||||
#: src/features/tournaments/components/enrollment/team-section.tsx:240
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:145
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:126
|
||||
#: src/features/tournaments/components/upcoming-tournament/team-list-button.tsx:31
|
||||
msgid "Enrolled Teams"
|
||||
msgstr "Enrolled Teams"
|
||||
@@ -1058,13 +1045,13 @@ msgid "Enrolling as a free agent adds you to a pool of players looking for teamm
|
||||
msgstr "Enrolling as a free agent adds you to a pool of players looking for teammates."
|
||||
|
||||
#: src/app/routes/_authed/admin/tournaments/$id/enrollment.tsx:33
|
||||
#: src/features/admin/components/dashboard/tournament-card.tsx:61
|
||||
#: src/features/admin/components/dashboard/tournament-section.tsx:34
|
||||
#: src/features/tournaments/components/upcoming-tournament/enroll-free-agent.tsx:29
|
||||
#: src/features/tournaments/components/upcoming-tournament/index.tsx:69
|
||||
msgid "Enrollment"
|
||||
msgstr "Enrollment"
|
||||
|
||||
#: src/features/tournaments/components/manage-tournament.tsx:55
|
||||
#: src/features/tournaments/components/manage-tournament.tsx:46
|
||||
msgid "Enrollment & Teams"
|
||||
msgstr "Enrollment & Teams"
|
||||
|
||||
@@ -1181,7 +1168,7 @@ msgstr "Failed to set active device"
|
||||
msgid "Failed to set volume"
|
||||
msgstr "Failed to set volume"
|
||||
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:41
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:42
|
||||
msgid "Failed to start badge recalculation"
|
||||
msgstr "Failed to start badge recalculation"
|
||||
|
||||
@@ -1251,7 +1238,7 @@ msgstr "Free Agent Enrollment"
|
||||
msgid "Free Agents"
|
||||
msgstr "Free Agents"
|
||||
|
||||
#: src/features/telemetry/components/usage-screen.tsx:226
|
||||
#: src/features/telemetry/components/usage-screen.tsx:228
|
||||
msgid "Function"
|
||||
msgstr "Function"
|
||||
|
||||
@@ -1319,7 +1306,7 @@ msgstr "Group stage generated successfully!"
|
||||
msgid "Group Stage Setup"
|
||||
msgstr "Group Stage Setup"
|
||||
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:98
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:79
|
||||
msgid "Groups"
|
||||
msgstr "Groups"
|
||||
|
||||
@@ -1465,7 +1452,7 @@ msgid "Last name must be 3-20 characters long and contain only letters"
|
||||
msgstr "Last name must be 3-20 characters long and contain only letters"
|
||||
|
||||
#. placeholder {0}: migrationStatus.result.totalBadgesEarned
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:73
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:79
|
||||
msgid "Last recalculation: {0, plural, one {# badge earned} other {# badges earned}}"
|
||||
msgstr "Last recalculation: {0, plural, one {# badge earned} other {# badges earned}}"
|
||||
|
||||
@@ -1530,7 +1517,7 @@ msgstr "M"
|
||||
msgid "Mainline"
|
||||
msgstr "Mainline"
|
||||
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:114
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:95
|
||||
msgid "Make Prediction"
|
||||
msgstr "Make Prediction"
|
||||
|
||||
@@ -1538,8 +1525,8 @@ msgstr "Make Prediction"
|
||||
msgid "Make Your Prediction"
|
||||
msgstr "Make Your Prediction"
|
||||
|
||||
#: src/features/admin/components/dashboard/tournament-card.tsx:68
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:89
|
||||
#: src/features/admin/components/dashboard/tournament-section.tsx:39
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:70
|
||||
#: src/features/tournaments/components/upcoming-tournament/index.tsx:144
|
||||
msgid "Manage"
|
||||
msgstr "Manage"
|
||||
@@ -1554,8 +1541,7 @@ msgid "Manage Team Songs/Logos"
|
||||
msgstr "Manage Team Songs/Logos"
|
||||
|
||||
#: src/app/routes/_authed/admin/tournaments/index.tsx:17
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:49
|
||||
#: src/features/admin/components/dashboard/tournament-card.tsx:25
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:50
|
||||
msgid "Manage Tournaments"
|
||||
msgstr "Manage Tournaments"
|
||||
|
||||
@@ -1642,7 +1628,7 @@ msgstr "MAU"
|
||||
msgid "Me"
|
||||
msgstr "Me"
|
||||
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:59
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:65
|
||||
msgid "Migrate Badge Progress"
|
||||
msgstr "Migrate Badge Progress"
|
||||
|
||||
@@ -1748,10 +1734,6 @@ msgstr "No active playback to capture"
|
||||
msgid "No Activities Found"
|
||||
msgstr "No Activities Found"
|
||||
|
||||
#: src/features/admin/components/dashboard/activity-feed.tsx:78
|
||||
msgid "No activity yet"
|
||||
msgstr "No activity yet"
|
||||
|
||||
#: src/features/badges/components/badge-stats-table.tsx:45
|
||||
msgid "No Badges Available"
|
||||
msgstr "No Badges Available"
|
||||
@@ -1844,15 +1826,10 @@ msgstr "No teams found matching \"{search}\""
|
||||
msgid "No tournaments found"
|
||||
msgstr "No tournaments found"
|
||||
|
||||
#: src/features/admin/components/dashboard/tournament-card.tsx:18
|
||||
msgid "No tournaments yet"
|
||||
msgstr "No tournaments yet"
|
||||
|
||||
#: src/features/tournaments/components/tournament-card-list.tsx:40
|
||||
msgid "No Tournaments Yet"
|
||||
msgstr "No Tournaments Yet"
|
||||
|
||||
#: src/features/admin/components/dashboard/errors-card.tsx:53
|
||||
#: src/features/telemetry/components/error-browser/error-browser.tsx:27
|
||||
msgid "No unresolved errors"
|
||||
msgstr "No unresolved errors"
|
||||
@@ -1914,15 +1891,15 @@ msgstr "Once enrolled, you can view other free agents and their phone number in
|
||||
msgid "One time code"
|
||||
msgstr "One time code"
|
||||
|
||||
#: src/features/admin/components/dashboard/now-strip.tsx:44
|
||||
msgid "Online now"
|
||||
msgstr "Online now"
|
||||
#: src/features/admin/components/dashboard/status-strip.tsx:56
|
||||
msgid "Online"
|
||||
msgstr "Online"
|
||||
|
||||
#: src/features/admin/components/dashboard/now-strip.tsx:46
|
||||
#: src/features/admin/components/dashboard/status-strip.tsx:61
|
||||
msgid "Open errors"
|
||||
msgstr "Open errors"
|
||||
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:89
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:95
|
||||
msgid "Open Pocketbase"
|
||||
msgstr "Open Pocketbase"
|
||||
|
||||
@@ -1972,11 +1949,7 @@ msgstr "p50"
|
||||
msgid "p95"
|
||||
msgstr "p95"
|
||||
|
||||
#: src/features/admin/components/dashboard/usage-card.tsx:45
|
||||
msgid "Page views"
|
||||
msgstr "Page views"
|
||||
|
||||
#: src/features/telemetry/components/usage-screen.tsx:177
|
||||
#: src/features/telemetry/components/usage-screen.tsx:176
|
||||
msgid "Page views by route"
|
||||
msgstr "Page views by route"
|
||||
|
||||
@@ -2095,7 +2068,7 @@ msgstr "Prediction Scoring:"
|
||||
|
||||
#: src/app/routes/_authed/tournaments/$id.predictions.tsx:23
|
||||
#: src/features/predictions/components/prediction-leaderboard.tsx:147
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:123
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:104
|
||||
msgid "Predictions"
|
||||
msgstr "Predictions"
|
||||
|
||||
@@ -2146,14 +2119,10 @@ msgstr "Reactions"
|
||||
|
||||
#. placeholder {0}: migrationStatus.playersProcessed
|
||||
#. placeholder {1}: migrationStatus.totalPlayers
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:66
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:72
|
||||
msgid "Recalculating badges in the background ({0}/{1})"
|
||||
msgstr "Recalculating badges in the background ({0}/{1})"
|
||||
|
||||
#: src/features/admin/components/dashboard/activity-feed.tsx:34
|
||||
msgid "Recent activity"
|
||||
msgstr "Recent activity"
|
||||
|
||||
#: src/features/tournaments/components/started-tournament/sections/recent-results.tsx:34
|
||||
msgid "Recently finished"
|
||||
msgstr "Recently finished"
|
||||
@@ -2218,17 +2187,20 @@ msgstr "Round {0}"
|
||||
msgid "Route"
|
||||
msgstr "Route"
|
||||
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:142
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:123
|
||||
#: src/features/tournaments/components/upcoming-tournament/rules-list-button.tsx:23
|
||||
msgid "Rules"
|
||||
msgstr "Rules"
|
||||
|
||||
#: src/features/admin/components/dashboard/tournament-section.tsx:29
|
||||
msgid "Run"
|
||||
msgstr "Run"
|
||||
|
||||
#: src/app/routes/_authed/admin/tournaments/run.$id.tsx:36
|
||||
msgid "Run {name}"
|
||||
msgstr "Run {name}"
|
||||
|
||||
#: src/features/admin/components/dashboard/tournament-card.tsx:53
|
||||
#: src/features/tournaments/components/manage-tournament.tsx:49
|
||||
#: src/features/tournaments/components/manage-tournament.tsx:41
|
||||
msgid "Run Tournament"
|
||||
msgstr "Run Tournament"
|
||||
|
||||
@@ -2517,7 +2489,7 @@ msgstr "Start time is required"
|
||||
msgid "Start typing to search..."
|
||||
msgstr "Start typing to search..."
|
||||
|
||||
#: src/features/admin/components/dashboard/tournament-card.tsx:43
|
||||
#: src/features/admin/components/dashboard/tournament-section.tsx:24
|
||||
msgid "Starts in"
|
||||
msgstr "Starts in"
|
||||
|
||||
@@ -2639,7 +2611,7 @@ msgstr "Team updated successfully!"
|
||||
#: src/features/players/components/profile/skeleton.tsx:75
|
||||
#: src/features/tournaments/components/profile/index.tsx:32
|
||||
#: src/features/tournaments/components/profile/skeleton.tsx:89
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:137
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:118
|
||||
msgid "Teams"
|
||||
msgstr "Teams"
|
||||
|
||||
@@ -2648,6 +2620,7 @@ msgid "Teams created successfully!"
|
||||
msgstr "Teams created successfully!"
|
||||
|
||||
#: src/app/routes/_authed/admin/telemetry.tsx:20
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:55
|
||||
msgid "Telemetry"
|
||||
msgstr "Telemetry"
|
||||
|
||||
@@ -2730,7 +2703,7 @@ msgstr "Top {0, plural, one {# team} other {# teams}} from each group will advan
|
||||
msgid "Top {n} advance"
|
||||
msgstr "Top {n} advance"
|
||||
|
||||
#: src/features/telemetry/components/usage-screen.tsx:191
|
||||
#: src/features/telemetry/components/usage-screen.tsx:190
|
||||
msgid "Top functions by call count"
|
||||
msgstr "Top functions by call count"
|
||||
|
||||
@@ -2757,7 +2730,7 @@ msgstr "Tournament created successfully!"
|
||||
msgid "Tournament not found"
|
||||
msgstr "Tournament not found"
|
||||
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:152
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:133
|
||||
#: src/features/tournaments/components/upcoming-tournament/rules-list-button.tsx:25
|
||||
msgid "Tournament Rules"
|
||||
msgstr "Tournament Rules"
|
||||
@@ -2786,7 +2759,7 @@ msgstr "trackId is required for playTrack action"
|
||||
msgid "Try the new themes"
|
||||
msgstr "Try the new themes"
|
||||
|
||||
#: src/features/admin/components/dashboard/quiet-boundary.tsx:26
|
||||
#: src/features/admin/components/dashboard/quiet-boundary.tsx:24
|
||||
msgid "Unavailable right now"
|
||||
msgstr "Unavailable right now"
|
||||
|
||||
@@ -2851,10 +2824,6 @@ msgstr "Update Tournament"
|
||||
msgid "Usage"
|
||||
msgstr "Usage"
|
||||
|
||||
#: src/features/admin/components/dashboard/usage-card.tsx:34
|
||||
msgid "Usage, 7 days"
|
||||
msgstr "Usage, 7 days"
|
||||
|
||||
#: src/features/activities/components/activities-table.tsx:202
|
||||
#: src/features/telemetry/components/client-events-table.tsx:146
|
||||
msgid "User Agent"
|
||||
@@ -2898,7 +2867,7 @@ msgstr "View Predictions"
|
||||
msgid "Viewport"
|
||||
msgstr "Viewport"
|
||||
|
||||
#: src/features/telemetry/components/usage-screen.tsx:211
|
||||
#: src/features/telemetry/components/usage-screen.tsx:213
|
||||
msgid "Vitals"
|
||||
msgstr "Vitals"
|
||||
|
||||
|
||||
+51
-82
@@ -153,7 +153,7 @@ msgstr "{0}ms"
|
||||
msgid "{count, plural, one {Players (#)} other {Players (#)}}"
|
||||
msgstr "{count, plural, one {Jugadores (#)} other {Jugadores (#)}}"
|
||||
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:134
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:115
|
||||
#: src/features/tournaments/components/upcoming-tournament/team-list-button.tsx:24
|
||||
msgid "{count, plural, one {Teams (#)} other {Teams (#)}}"
|
||||
msgstr "{count, plural, one {Equipos (#)} other {Equipos (#)}}"
|
||||
@@ -355,7 +355,7 @@ msgstr "2. Envío más temprano"
|
||||
msgid "2nd place"
|
||||
msgstr "2do lugar"
|
||||
|
||||
#: src/features/telemetry/components/usage-screen.tsx:256
|
||||
#: src/features/telemetry/components/usage-screen.tsx:258
|
||||
msgid "30d"
|
||||
msgstr "30d"
|
||||
|
||||
@@ -371,7 +371,7 @@ msgstr "3er lugar"
|
||||
msgid "5s"
|
||||
msgstr "5s"
|
||||
|
||||
#: src/features/telemetry/components/usage-screen.tsx:255
|
||||
#: src/features/telemetry/components/usage-screen.tsx:257
|
||||
msgid "7d"
|
||||
msgstr "7d"
|
||||
|
||||
@@ -420,10 +420,6 @@ msgstr "¡Cuenta creada exitosamente!"
|
||||
msgid "Active device: {0}"
|
||||
msgstr "Dispositivo activo: {0}"
|
||||
|
||||
#: src/features/admin/components/dashboard/usage-card.tsx:39
|
||||
msgid "Active players"
|
||||
msgstr "Jugadores activos"
|
||||
|
||||
#: src/features/activities/components/activities-table.tsx:159
|
||||
msgid "Activity Details"
|
||||
msgstr "Detalles de la actividad"
|
||||
@@ -441,7 +437,7 @@ msgid "Add Team"
|
||||
msgstr "Agregar Equipo"
|
||||
|
||||
#: src/app/routes/_authed/admin.tsx:15
|
||||
#: src/app/routes/_authed/admin/index.tsx:22
|
||||
#: src/app/routes/_authed/admin/index.tsx:27
|
||||
#: src/features/core/hooks/use-links.ts:37
|
||||
msgid "Admin"
|
||||
msgstr "Admin"
|
||||
@@ -564,7 +560,7 @@ msgstr "Prom. Margen de Victoria"
|
||||
msgid "Award Badge"
|
||||
msgstr "Otorgar insignia"
|
||||
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:54
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:60
|
||||
msgid "Award Badges"
|
||||
msgstr "Otorgar insignias"
|
||||
|
||||
@@ -598,15 +594,15 @@ msgstr "Atrás"
|
||||
msgid "Badge awarded to {playerName}"
|
||||
msgstr "Insignia otorgada a {playerName}"
|
||||
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:85
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:91
|
||||
msgid "Badge recalculation failed. Check the server logs."
|
||||
msgstr "Falló el recálculo de insignias. Revisa los registros del servidor."
|
||||
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:38
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:39
|
||||
msgid "Badge recalculation is already running"
|
||||
msgstr "El recálculo de insignias ya está en curso"
|
||||
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:37
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:38
|
||||
msgid "Badge recalculation started in the background"
|
||||
msgstr "Recálculo de insignias iniciado en segundo plano"
|
||||
|
||||
@@ -631,13 +627,13 @@ msgstr "Circo"
|
||||
msgid "Both teams cannot have 10 cups"
|
||||
msgstr "Los dos equipos no pueden tener 10 vasos"
|
||||
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:106
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:87
|
||||
#: src/features/tournaments/components/upcoming-tournament/index.tsx:151
|
||||
msgid "Bracket"
|
||||
msgstr "Bracket"
|
||||
|
||||
#: src/app/routes/_authed/admin/preview.tsx:13
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:96
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:102
|
||||
msgid "Bracket Preview"
|
||||
msgstr "Vista previa del bracket"
|
||||
|
||||
@@ -654,7 +650,7 @@ msgstr "Brutal"
|
||||
msgid "CA"
|
||||
msgstr "VC"
|
||||
|
||||
#: src/features/admin/components/dashboard/now-strip.tsx:52
|
||||
#: src/features/admin/components/dashboard/status-strip.tsx:67
|
||||
msgid "Calls today"
|
||||
msgstr "Llamadas hoy"
|
||||
|
||||
@@ -720,16 +716,12 @@ msgstr "Quitar jugador seleccionado"
|
||||
msgid "Client error spike"
|
||||
msgstr "Aumento de errores de cliente"
|
||||
|
||||
#: src/features/admin/components/dashboard/errors-card.tsx:21
|
||||
msgid "Client errors"
|
||||
msgstr "Errores de cliente"
|
||||
|
||||
#: src/features/telemetry/components/usage-screen.tsx:203
|
||||
msgid "Client errors per day"
|
||||
msgstr "Errores de cliente por día"
|
||||
|
||||
#: src/components/sheet/modal.tsx:35
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:169
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:150
|
||||
#: src/features/tournaments/components/upcoming-tournament/rules-list-button.tsx:36
|
||||
msgid "Close"
|
||||
msgstr "Cerrar"
|
||||
@@ -883,15 +875,10 @@ msgstr "Vasos anotados"
|
||||
msgid "Custom Hex Code"
|
||||
msgstr "Código hex personalizado"
|
||||
|
||||
#: src/features/admin/components/dashboard/usage-card.tsx:41
|
||||
#: src/features/telemetry/components/usage-screen.tsx:159
|
||||
msgid "Daily active players"
|
||||
msgstr "Jugadores activos diarios"
|
||||
|
||||
#: src/features/admin/components/dashboard/usage-card.tsx:47
|
||||
msgid "Daily page views"
|
||||
msgstr "Vistas de página diarias"
|
||||
|
||||
#: src/features/settings/components/color-scheme-picker.tsx:39
|
||||
msgid "Dark"
|
||||
msgstr "Oscuro"
|
||||
@@ -947,7 +934,7 @@ msgstr "Los partidos posteriores se reiniciaron porque la corrección cambió qu
|
||||
msgid "Duration"
|
||||
msgstr "Duración"
|
||||
|
||||
#: src/features/telemetry/components/usage-screen.tsx:233
|
||||
#: src/features/telemetry/components/usage-screen.tsx:235
|
||||
msgid "Duration p50 / p95"
|
||||
msgstr "Duración p50 / p95"
|
||||
|
||||
@@ -970,12 +957,12 @@ msgstr "Editar partido"
|
||||
msgid "Edit match score"
|
||||
msgstr "Editar marcador del partido"
|
||||
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:114
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:95
|
||||
msgid "Edit Prediction"
|
||||
msgstr "Editar predicción"
|
||||
|
||||
#: src/features/tournaments/components/manage-tournament.tsx:65
|
||||
#: src/features/tournaments/components/manage-tournament.tsx:92
|
||||
#: src/features/tournaments/components/manage-tournament.tsx:56
|
||||
#: src/features/tournaments/components/manage-tournament.tsx:83
|
||||
msgid "Edit Rules"
|
||||
msgstr "Editar reglas"
|
||||
|
||||
@@ -984,8 +971,8 @@ msgstr "Editar reglas"
|
||||
msgid "Edit Team"
|
||||
msgstr "Editar equipo"
|
||||
|
||||
#: src/features/tournaments/components/manage-tournament.tsx:60
|
||||
#: src/features/tournaments/components/manage-tournament.tsx:72
|
||||
#: src/features/tournaments/components/manage-tournament.tsx:51
|
||||
#: src/features/tournaments/components/manage-tournament.tsx:63
|
||||
msgid "Edit Tournament"
|
||||
msgstr "Editar torneo"
|
||||
|
||||
@@ -1048,7 +1035,7 @@ msgstr "Jugadores inscritos"
|
||||
|
||||
#: src/features/tournaments/components/enrollment/enrollment-stats.tsx:28
|
||||
#: src/features/tournaments/components/enrollment/team-section.tsx:240
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:145
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:126
|
||||
#: src/features/tournaments/components/upcoming-tournament/team-list-button.tsx:31
|
||||
msgid "Enrolled Teams"
|
||||
msgstr "Equipos inscritos"
|
||||
@@ -1058,13 +1045,13 @@ msgid "Enrolling as a free agent adds you to a pool of players looking for teamm
|
||||
msgstr "Inscribirte como agente libre te agrega a un grupo de jugadores buscando compañeros de equipo."
|
||||
|
||||
#: src/app/routes/_authed/admin/tournaments/$id/enrollment.tsx:33
|
||||
#: src/features/admin/components/dashboard/tournament-card.tsx:61
|
||||
#: src/features/admin/components/dashboard/tournament-section.tsx:34
|
||||
#: src/features/tournaments/components/upcoming-tournament/enroll-free-agent.tsx:29
|
||||
#: src/features/tournaments/components/upcoming-tournament/index.tsx:69
|
||||
msgid "Enrollment"
|
||||
msgstr "Inscripción"
|
||||
|
||||
#: src/features/tournaments/components/manage-tournament.tsx:55
|
||||
#: src/features/tournaments/components/manage-tournament.tsx:46
|
||||
msgid "Enrollment & Teams"
|
||||
msgstr "Inscripción y equipos"
|
||||
|
||||
@@ -1181,7 +1168,7 @@ msgstr "No se pudo establecer el dispositivo activo"
|
||||
msgid "Failed to set volume"
|
||||
msgstr "No se pudo ajustar el volumen"
|
||||
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:41
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:42
|
||||
msgid "Failed to start badge recalculation"
|
||||
msgstr "No se pudo iniciar el recálculo de insignias"
|
||||
|
||||
@@ -1251,7 +1238,7 @@ msgstr "Inscripción de agente libre"
|
||||
msgid "Free Agents"
|
||||
msgstr "Agentes libres"
|
||||
|
||||
#: src/features/telemetry/components/usage-screen.tsx:226
|
||||
#: src/features/telemetry/components/usage-screen.tsx:228
|
||||
msgid "Function"
|
||||
msgstr "Función"
|
||||
|
||||
@@ -1319,7 +1306,7 @@ msgstr "¡Fase de grupos generada con éxito!"
|
||||
msgid "Group Stage Setup"
|
||||
msgstr "Configuración de la fase de grupos"
|
||||
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:98
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:79
|
||||
msgid "Groups"
|
||||
msgstr "Grupos"
|
||||
|
||||
@@ -1465,7 +1452,7 @@ msgid "Last name must be 3-20 characters long and contain only letters"
|
||||
msgstr "El apellido debe tener entre 3 y 20 caracteres y contener solo letras"
|
||||
|
||||
#. placeholder {0}: migrationStatus.result.totalBadgesEarned
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:73
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:79
|
||||
msgid "Last recalculation: {0, plural, one {# badge earned} other {# badges earned}}"
|
||||
msgstr "Último recálculo: {0, plural, one {# insignia obtenida} other {# insignias obtenidas}}"
|
||||
|
||||
@@ -1530,7 +1517,7 @@ msgstr "J"
|
||||
msgid "Mainline"
|
||||
msgstr "Mainline"
|
||||
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:114
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:95
|
||||
msgid "Make Prediction"
|
||||
msgstr "Hacer predicción"
|
||||
|
||||
@@ -1538,8 +1525,8 @@ msgstr "Hacer predicción"
|
||||
msgid "Make Your Prediction"
|
||||
msgstr "Haz tu predicción"
|
||||
|
||||
#: src/features/admin/components/dashboard/tournament-card.tsx:68
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:89
|
||||
#: src/features/admin/components/dashboard/tournament-section.tsx:39
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:70
|
||||
#: src/features/tournaments/components/upcoming-tournament/index.tsx:144
|
||||
msgid "Manage"
|
||||
msgstr "Administrar"
|
||||
@@ -1554,8 +1541,7 @@ msgid "Manage Team Songs/Logos"
|
||||
msgstr "Administrar canciones/logos del equipo"
|
||||
|
||||
#: src/app/routes/_authed/admin/tournaments/index.tsx:17
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:49
|
||||
#: src/features/admin/components/dashboard/tournament-card.tsx:25
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:50
|
||||
msgid "Manage Tournaments"
|
||||
msgstr "Administrar torneos"
|
||||
|
||||
@@ -1642,7 +1628,7 @@ msgstr "MAU"
|
||||
msgid "Me"
|
||||
msgstr "Yo"
|
||||
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:59
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:65
|
||||
msgid "Migrate Badge Progress"
|
||||
msgstr "Migrar progreso de insignias"
|
||||
|
||||
@@ -1748,10 +1734,6 @@ msgstr "No hay reproducción activa para capturar"
|
||||
msgid "No Activities Found"
|
||||
msgstr "No se encontraron actividades"
|
||||
|
||||
#: src/features/admin/components/dashboard/activity-feed.tsx:78
|
||||
msgid "No activity yet"
|
||||
msgstr "Aún no hay actividad"
|
||||
|
||||
#: src/features/badges/components/badge-stats-table.tsx:45
|
||||
msgid "No Badges Available"
|
||||
msgstr "No hay insignias disponibles"
|
||||
@@ -1844,15 +1826,10 @@ msgstr "No se encontraron equipos que coincidan con \"{search}\""
|
||||
msgid "No tournaments found"
|
||||
msgstr "No se encontraron torneos"
|
||||
|
||||
#: src/features/admin/components/dashboard/tournament-card.tsx:18
|
||||
msgid "No tournaments yet"
|
||||
msgstr "Aún no hay torneos"
|
||||
|
||||
#: src/features/tournaments/components/tournament-card-list.tsx:40
|
||||
msgid "No Tournaments Yet"
|
||||
msgstr "Aún no hay torneos"
|
||||
|
||||
#: src/features/admin/components/dashboard/errors-card.tsx:53
|
||||
#: src/features/telemetry/components/error-browser/error-browser.tsx:27
|
||||
msgid "No unresolved errors"
|
||||
msgstr "No hay errores sin resolver"
|
||||
@@ -1914,15 +1891,15 @@ msgstr "Una vez inscrito, puedes ver a otros agentes libres y su número de tel
|
||||
msgid "One time code"
|
||||
msgstr "Código de un solo uso"
|
||||
|
||||
#: src/features/admin/components/dashboard/now-strip.tsx:44
|
||||
msgid "Online now"
|
||||
msgstr "En línea ahora"
|
||||
#: src/features/admin/components/dashboard/status-strip.tsx:56
|
||||
msgid "Online"
|
||||
msgstr "En línea"
|
||||
|
||||
#: src/features/admin/components/dashboard/now-strip.tsx:46
|
||||
#: src/features/admin/components/dashboard/status-strip.tsx:61
|
||||
msgid "Open errors"
|
||||
msgstr "Errores abiertos"
|
||||
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:89
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:95
|
||||
msgid "Open Pocketbase"
|
||||
msgstr "Abrir Pocketbase"
|
||||
|
||||
@@ -1972,11 +1949,7 @@ msgstr "p50"
|
||||
msgid "p95"
|
||||
msgstr "p95"
|
||||
|
||||
#: src/features/admin/components/dashboard/usage-card.tsx:45
|
||||
msgid "Page views"
|
||||
msgstr "Vistas de página"
|
||||
|
||||
#: src/features/telemetry/components/usage-screen.tsx:177
|
||||
#: src/features/telemetry/components/usage-screen.tsx:176
|
||||
msgid "Page views by route"
|
||||
msgstr "Vistas de página por ruta"
|
||||
|
||||
@@ -2095,7 +2068,7 @@ msgstr "Puntuación de predicciones:"
|
||||
|
||||
#: src/app/routes/_authed/tournaments/$id.predictions.tsx:23
|
||||
#: src/features/predictions/components/prediction-leaderboard.tsx:147
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:123
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:104
|
||||
msgid "Predictions"
|
||||
msgstr "Predicciones"
|
||||
|
||||
@@ -2146,14 +2119,10 @@ msgstr "Reacciones"
|
||||
|
||||
#. placeholder {0}: migrationStatus.playersProcessed
|
||||
#. placeholder {1}: migrationStatus.totalPlayers
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:66
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:72
|
||||
msgid "Recalculating badges in the background ({0}/{1})"
|
||||
msgstr "Recalculando insignias en segundo plano ({0}/{1})"
|
||||
|
||||
#: src/features/admin/components/dashboard/activity-feed.tsx:34
|
||||
msgid "Recent activity"
|
||||
msgstr "Actividad reciente"
|
||||
|
||||
#: src/features/tournaments/components/started-tournament/sections/recent-results.tsx:34
|
||||
msgid "Recently finished"
|
||||
msgstr "Recién terminados"
|
||||
@@ -2218,17 +2187,20 @@ msgstr "Ronda {0}"
|
||||
msgid "Route"
|
||||
msgstr "Ruta"
|
||||
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:142
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:123
|
||||
#: src/features/tournaments/components/upcoming-tournament/rules-list-button.tsx:23
|
||||
msgid "Rules"
|
||||
msgstr "Reglas"
|
||||
|
||||
#: src/features/admin/components/dashboard/tournament-section.tsx:29
|
||||
msgid "Run"
|
||||
msgstr "Iniciar"
|
||||
|
||||
#: src/app/routes/_authed/admin/tournaments/run.$id.tsx:36
|
||||
msgid "Run {name}"
|
||||
msgstr "Ejecutar {name}"
|
||||
|
||||
#: src/features/admin/components/dashboard/tournament-card.tsx:53
|
||||
#: src/features/tournaments/components/manage-tournament.tsx:49
|
||||
#: src/features/tournaments/components/manage-tournament.tsx:41
|
||||
msgid "Run Tournament"
|
||||
msgstr "Iniciar torneo"
|
||||
|
||||
@@ -2517,7 +2489,7 @@ msgstr "Se requiere la hora de inicio"
|
||||
msgid "Start typing to search..."
|
||||
msgstr "Empieza a escribir para buscar..."
|
||||
|
||||
#: src/features/admin/components/dashboard/tournament-card.tsx:43
|
||||
#: src/features/admin/components/dashboard/tournament-section.tsx:24
|
||||
msgid "Starts in"
|
||||
msgstr "Comienza en"
|
||||
|
||||
@@ -2639,7 +2611,7 @@ msgstr "¡Equipo actualizado exitosamente!"
|
||||
#: src/features/players/components/profile/skeleton.tsx:75
|
||||
#: src/features/tournaments/components/profile/index.tsx:32
|
||||
#: src/features/tournaments/components/profile/skeleton.tsx:89
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:137
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:118
|
||||
msgid "Teams"
|
||||
msgstr "Equipos"
|
||||
|
||||
@@ -2648,6 +2620,7 @@ msgid "Teams created successfully!"
|
||||
msgstr "¡Equipos creados exitosamente!"
|
||||
|
||||
#: src/app/routes/_authed/admin/telemetry.tsx:20
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:55
|
||||
msgid "Telemetry"
|
||||
msgstr "Telemetría"
|
||||
|
||||
@@ -2730,7 +2703,7 @@ msgstr "{0, plural, one {El mejor equipo de cada grupo avanzará} other {Los mej
|
||||
msgid "Top {n} advance"
|
||||
msgstr "Los mejores {n} avanzan"
|
||||
|
||||
#: src/features/telemetry/components/usage-screen.tsx:191
|
||||
#: src/features/telemetry/components/usage-screen.tsx:190
|
||||
msgid "Top functions by call count"
|
||||
msgstr "Funciones principales por cantidad de llamadas"
|
||||
|
||||
@@ -2757,7 +2730,7 @@ msgstr "¡Torneo creado exitosamente!"
|
||||
msgid "Tournament not found"
|
||||
msgstr "Torneo no encontrado"
|
||||
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:152
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:133
|
||||
#: src/features/tournaments/components/upcoming-tournament/rules-list-button.tsx:25
|
||||
msgid "Tournament Rules"
|
||||
msgstr "Reglas del torneo"
|
||||
@@ -2786,7 +2759,7 @@ msgstr "Se requiere trackId para la acción playTrack"
|
||||
msgid "Try the new themes"
|
||||
msgstr "Prueba los nuevos temas"
|
||||
|
||||
#: src/features/admin/components/dashboard/quiet-boundary.tsx:26
|
||||
#: src/features/admin/components/dashboard/quiet-boundary.tsx:24
|
||||
msgid "Unavailable right now"
|
||||
msgstr "No disponible por ahora"
|
||||
|
||||
@@ -2851,10 +2824,6 @@ msgstr "Actualizar torneo"
|
||||
msgid "Usage"
|
||||
msgstr "Uso"
|
||||
|
||||
#: src/features/admin/components/dashboard/usage-card.tsx:34
|
||||
msgid "Usage, 7 days"
|
||||
msgstr "Uso, 7 días"
|
||||
|
||||
#: src/features/activities/components/activities-table.tsx:202
|
||||
#: src/features/telemetry/components/client-events-table.tsx:146
|
||||
msgid "User Agent"
|
||||
@@ -2898,7 +2867,7 @@ msgstr "Ver predicciones"
|
||||
msgid "Viewport"
|
||||
msgstr "Viewport"
|
||||
|
||||
#: src/features/telemetry/components/usage-screen.tsx:211
|
||||
#: src/features/telemetry/components/usage-screen.tsx:213
|
||||
msgid "Vitals"
|
||||
msgstr "Vitales"
|
||||
|
||||
|
||||
+51
-82
@@ -153,7 +153,7 @@ msgstr "{0}ms"
|
||||
msgid "{count, plural, one {Players (#)} other {Players (#)}}"
|
||||
msgstr "{count, plural, one {プレイヤー(#)} other {プレイヤー(#)}}"
|
||||
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:134
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:115
|
||||
#: src/features/tournaments/components/upcoming-tournament/team-list-button.tsx:24
|
||||
msgid "{count, plural, one {Teams (#)} other {Teams (#)}}"
|
||||
msgstr "{count, plural, one {チーム(#)} other {チーム(#)}}"
|
||||
@@ -355,7 +355,7 @@ msgstr "2. 早い提出"
|
||||
msgid "2nd place"
|
||||
msgstr "2位"
|
||||
|
||||
#: src/features/telemetry/components/usage-screen.tsx:256
|
||||
#: src/features/telemetry/components/usage-screen.tsx:258
|
||||
msgid "30d"
|
||||
msgstr "30日"
|
||||
|
||||
@@ -371,7 +371,7 @@ msgstr "3位"
|
||||
msgid "5s"
|
||||
msgstr "5秒"
|
||||
|
||||
#: src/features/telemetry/components/usage-screen.tsx:255
|
||||
#: src/features/telemetry/components/usage-screen.tsx:257
|
||||
msgid "7d"
|
||||
msgstr "7日"
|
||||
|
||||
@@ -420,10 +420,6 @@ msgstr "アカウントが作成されました!"
|
||||
msgid "Active device: {0}"
|
||||
msgstr "アクティブなデバイス: {0}"
|
||||
|
||||
#: src/features/admin/components/dashboard/usage-card.tsx:39
|
||||
msgid "Active players"
|
||||
msgstr "アクティブなプレイヤー"
|
||||
|
||||
#: src/features/activities/components/activities-table.tsx:159
|
||||
msgid "Activity Details"
|
||||
msgstr "アクティビティの詳細"
|
||||
@@ -441,7 +437,7 @@ msgid "Add Team"
|
||||
msgstr "チームを追加"
|
||||
|
||||
#: src/app/routes/_authed/admin.tsx:15
|
||||
#: src/app/routes/_authed/admin/index.tsx:22
|
||||
#: src/app/routes/_authed/admin/index.tsx:27
|
||||
#: src/features/core/hooks/use-links.ts:37
|
||||
msgid "Admin"
|
||||
msgstr "管理者"
|
||||
@@ -564,7 +560,7 @@ msgstr "平均勝差"
|
||||
msgid "Award Badge"
|
||||
msgstr "バッジを付与"
|
||||
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:54
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:60
|
||||
msgid "Award Badges"
|
||||
msgstr "バッジを付与"
|
||||
|
||||
@@ -598,15 +594,15 @@ msgstr "戻る"
|
||||
msgid "Badge awarded to {playerName}"
|
||||
msgstr "{playerName}にバッジを付与しました"
|
||||
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:85
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:91
|
||||
msgid "Badge recalculation failed. Check the server logs."
|
||||
msgstr "バッジの再計算に失敗しました。サーバーログを確認してください。"
|
||||
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:38
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:39
|
||||
msgid "Badge recalculation is already running"
|
||||
msgstr "バッジの再計算はすでに実行中です"
|
||||
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:37
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:38
|
||||
msgid "Badge recalculation started in the background"
|
||||
msgstr "バックグラウンドでバッジの再計算を開始しました"
|
||||
|
||||
@@ -631,13 +627,13 @@ msgstr "サーカス"
|
||||
msgid "Both teams cannot have 10 cups"
|
||||
msgstr "両チーム同時に10カップにはなりません"
|
||||
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:106
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:87
|
||||
#: src/features/tournaments/components/upcoming-tournament/index.tsx:151
|
||||
msgid "Bracket"
|
||||
msgstr "ブラケット"
|
||||
|
||||
#: src/app/routes/_authed/admin/preview.tsx:13
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:96
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:102
|
||||
msgid "Bracket Preview"
|
||||
msgstr "ブラケットプレビュー"
|
||||
|
||||
@@ -654,7 +650,7 @@ msgstr "ブルータル"
|
||||
msgid "CA"
|
||||
msgstr "CA"
|
||||
|
||||
#: src/features/admin/components/dashboard/now-strip.tsx:52
|
||||
#: src/features/admin/components/dashboard/status-strip.tsx:67
|
||||
msgid "Calls today"
|
||||
msgstr "本日の呼び出し数"
|
||||
|
||||
@@ -720,16 +716,12 @@ msgstr "選択したプレイヤーを解除"
|
||||
msgid "Client error spike"
|
||||
msgstr "クライアントエラー急増"
|
||||
|
||||
#: src/features/admin/components/dashboard/errors-card.tsx:21
|
||||
msgid "Client errors"
|
||||
msgstr "クライアントエラー"
|
||||
|
||||
#: src/features/telemetry/components/usage-screen.tsx:203
|
||||
msgid "Client errors per day"
|
||||
msgstr "1日あたりのクライアントエラー数"
|
||||
|
||||
#: src/components/sheet/modal.tsx:35
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:169
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:150
|
||||
#: src/features/tournaments/components/upcoming-tournament/rules-list-button.tsx:36
|
||||
msgid "Close"
|
||||
msgstr "閉じる"
|
||||
@@ -883,15 +875,10 @@ msgstr "決めたカップ"
|
||||
msgid "Custom Hex Code"
|
||||
msgstr "カスタムHEXコード"
|
||||
|
||||
#: src/features/admin/components/dashboard/usage-card.tsx:41
|
||||
#: src/features/telemetry/components/usage-screen.tsx:159
|
||||
msgid "Daily active players"
|
||||
msgstr "デイリーアクティブプレイヤー数"
|
||||
|
||||
#: src/features/admin/components/dashboard/usage-card.tsx:47
|
||||
msgid "Daily page views"
|
||||
msgstr "1日あたりのページビュー数"
|
||||
|
||||
#: src/features/settings/components/color-scheme-picker.tsx:39
|
||||
msgid "Dark"
|
||||
msgstr "ダーク"
|
||||
@@ -947,7 +934,7 @@ msgstr "修正により勝ち上がりの相手が変わったため、以降の
|
||||
msgid "Duration"
|
||||
msgstr "所要時間"
|
||||
|
||||
#: src/features/telemetry/components/usage-screen.tsx:233
|
||||
#: src/features/telemetry/components/usage-screen.tsx:235
|
||||
msgid "Duration p50 / p95"
|
||||
msgstr "所要時間 p50 / p95"
|
||||
|
||||
@@ -970,12 +957,12 @@ msgstr "試合を編集"
|
||||
msgid "Edit match score"
|
||||
msgstr "試合スコアを編集"
|
||||
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:114
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:95
|
||||
msgid "Edit Prediction"
|
||||
msgstr "予想を編集"
|
||||
|
||||
#: src/features/tournaments/components/manage-tournament.tsx:65
|
||||
#: src/features/tournaments/components/manage-tournament.tsx:92
|
||||
#: src/features/tournaments/components/manage-tournament.tsx:56
|
||||
#: src/features/tournaments/components/manage-tournament.tsx:83
|
||||
msgid "Edit Rules"
|
||||
msgstr "ルールを編集"
|
||||
|
||||
@@ -984,8 +971,8 @@ msgstr "ルールを編集"
|
||||
msgid "Edit Team"
|
||||
msgstr "チームを編集"
|
||||
|
||||
#: src/features/tournaments/components/manage-tournament.tsx:60
|
||||
#: src/features/tournaments/components/manage-tournament.tsx:72
|
||||
#: src/features/tournaments/components/manage-tournament.tsx:51
|
||||
#: src/features/tournaments/components/manage-tournament.tsx:63
|
||||
msgid "Edit Tournament"
|
||||
msgstr "トーナメントを編集"
|
||||
|
||||
@@ -1048,7 +1035,7 @@ msgstr "登録済みプレイヤー"
|
||||
|
||||
#: src/features/tournaments/components/enrollment/enrollment-stats.tsx:28
|
||||
#: src/features/tournaments/components/enrollment/team-section.tsx:240
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:145
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:126
|
||||
#: src/features/tournaments/components/upcoming-tournament/team-list-button.tsx:31
|
||||
msgid "Enrolled Teams"
|
||||
msgstr "登録済みチーム"
|
||||
@@ -1058,13 +1045,13 @@ msgid "Enrolling as a free agent adds you to a pool of players looking for teamm
|
||||
msgstr "フリーエージェントとして登録すると、チームメイトを探しているプレイヤーのプールに追加されます。"
|
||||
|
||||
#: src/app/routes/_authed/admin/tournaments/$id/enrollment.tsx:33
|
||||
#: src/features/admin/components/dashboard/tournament-card.tsx:61
|
||||
#: src/features/admin/components/dashboard/tournament-section.tsx:34
|
||||
#: src/features/tournaments/components/upcoming-tournament/enroll-free-agent.tsx:29
|
||||
#: src/features/tournaments/components/upcoming-tournament/index.tsx:69
|
||||
msgid "Enrollment"
|
||||
msgstr "参加登録"
|
||||
|
||||
#: src/features/tournaments/components/manage-tournament.tsx:55
|
||||
#: src/features/tournaments/components/manage-tournament.tsx:46
|
||||
msgid "Enrollment & Teams"
|
||||
msgstr "参加登録とチーム"
|
||||
|
||||
@@ -1181,7 +1168,7 @@ msgstr "アクティブなデバイスの設定に失敗しました"
|
||||
msgid "Failed to set volume"
|
||||
msgstr "音量の設定に失敗しました"
|
||||
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:41
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:42
|
||||
msgid "Failed to start badge recalculation"
|
||||
msgstr "バッジの再計算を開始できませんでした"
|
||||
|
||||
@@ -1251,7 +1238,7 @@ msgstr "フリーエージェント登録"
|
||||
msgid "Free Agents"
|
||||
msgstr "フリーエージェント"
|
||||
|
||||
#: src/features/telemetry/components/usage-screen.tsx:226
|
||||
#: src/features/telemetry/components/usage-screen.tsx:228
|
||||
msgid "Function"
|
||||
msgstr "関数"
|
||||
|
||||
@@ -1319,7 +1306,7 @@ msgstr "グループステージを生成しました!"
|
||||
msgid "Group Stage Setup"
|
||||
msgstr "グループステージ設定"
|
||||
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:98
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:79
|
||||
msgid "Groups"
|
||||
msgstr "グループ"
|
||||
|
||||
@@ -1465,7 +1452,7 @@ msgid "Last name must be 3-20 characters long and contain only letters"
|
||||
msgstr "姓は3〜20文字の英字のみで入力してください"
|
||||
|
||||
#. placeholder {0}: migrationStatus.result.totalBadgesEarned
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:73
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:79
|
||||
msgid "Last recalculation: {0, plural, one {# badge earned} other {# badges earned}}"
|
||||
msgstr "前回の再計算:{0, plural, one {# 個のバッジを獲得} other {# 個のバッジを獲得}}"
|
||||
|
||||
@@ -1530,7 +1517,7 @@ msgstr "M"
|
||||
msgid "Mainline"
|
||||
msgstr "メインライン"
|
||||
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:114
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:95
|
||||
msgid "Make Prediction"
|
||||
msgstr "予想する"
|
||||
|
||||
@@ -1538,8 +1525,8 @@ msgstr "予想する"
|
||||
msgid "Make Your Prediction"
|
||||
msgstr "予想を入力"
|
||||
|
||||
#: src/features/admin/components/dashboard/tournament-card.tsx:68
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:89
|
||||
#: src/features/admin/components/dashboard/tournament-section.tsx:39
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:70
|
||||
#: src/features/tournaments/components/upcoming-tournament/index.tsx:144
|
||||
msgid "Manage"
|
||||
msgstr "管理"
|
||||
@@ -1554,8 +1541,7 @@ msgid "Manage Team Songs/Logos"
|
||||
msgstr "チームの曲・ロゴを管理"
|
||||
|
||||
#: src/app/routes/_authed/admin/tournaments/index.tsx:17
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:49
|
||||
#: src/features/admin/components/dashboard/tournament-card.tsx:25
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:50
|
||||
msgid "Manage Tournaments"
|
||||
msgstr "トーナメント管理"
|
||||
|
||||
@@ -1642,7 +1628,7 @@ msgstr "MAU"
|
||||
msgid "Me"
|
||||
msgstr "自分"
|
||||
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:59
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:65
|
||||
msgid "Migrate Badge Progress"
|
||||
msgstr "バッジ進捗を移行"
|
||||
|
||||
@@ -1748,10 +1734,6 @@ msgstr "キャプチャする再生中のプレイバックがありません"
|
||||
msgid "No Activities Found"
|
||||
msgstr "アクティビティが見つかりません"
|
||||
|
||||
#: src/features/admin/components/dashboard/activity-feed.tsx:78
|
||||
msgid "No activity yet"
|
||||
msgstr "まだアクティビティがありません"
|
||||
|
||||
#: src/features/badges/components/badge-stats-table.tsx:45
|
||||
msgid "No Badges Available"
|
||||
msgstr "利用可能なバッジがありません"
|
||||
@@ -1844,15 +1826,10 @@ msgstr "「{search}」に一致するチームが見つかりません"
|
||||
msgid "No tournaments found"
|
||||
msgstr "トーナメントが見つかりません"
|
||||
|
||||
#: src/features/admin/components/dashboard/tournament-card.tsx:18
|
||||
msgid "No tournaments yet"
|
||||
msgstr "トーナメントはまだありません"
|
||||
|
||||
#: src/features/tournaments/components/tournament-card-list.tsx:40
|
||||
msgid "No Tournaments Yet"
|
||||
msgstr "トーナメントはまだありません"
|
||||
|
||||
#: src/features/admin/components/dashboard/errors-card.tsx:53
|
||||
#: src/features/telemetry/components/error-browser/error-browser.tsx:27
|
||||
msgid "No unresolved errors"
|
||||
msgstr "未解決のエラーはありません"
|
||||
@@ -1914,15 +1891,15 @@ msgstr "登録が完了すると、他のフリーエージェントとその電
|
||||
msgid "One time code"
|
||||
msgstr "ワンタイムコード"
|
||||
|
||||
#: src/features/admin/components/dashboard/now-strip.tsx:44
|
||||
msgid "Online now"
|
||||
msgstr "現在オンライン"
|
||||
#: src/features/admin/components/dashboard/status-strip.tsx:56
|
||||
msgid "Online"
|
||||
msgstr "オンライン"
|
||||
|
||||
#: src/features/admin/components/dashboard/now-strip.tsx:46
|
||||
#: src/features/admin/components/dashboard/status-strip.tsx:61
|
||||
msgid "Open errors"
|
||||
msgstr "未解決のエラー"
|
||||
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:89
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:95
|
||||
msgid "Open Pocketbase"
|
||||
msgstr "Pocketbaseを開く"
|
||||
|
||||
@@ -1972,11 +1949,7 @@ msgstr "p50"
|
||||
msgid "p95"
|
||||
msgstr "p95"
|
||||
|
||||
#: src/features/admin/components/dashboard/usage-card.tsx:45
|
||||
msgid "Page views"
|
||||
msgstr "ページビュー数"
|
||||
|
||||
#: src/features/telemetry/components/usage-screen.tsx:177
|
||||
#: src/features/telemetry/components/usage-screen.tsx:176
|
||||
msgid "Page views by route"
|
||||
msgstr "ルート別ページビュー数"
|
||||
|
||||
@@ -2095,7 +2068,7 @@ msgstr "予想の得点方式:"
|
||||
|
||||
#: src/app/routes/_authed/tournaments/$id.predictions.tsx:23
|
||||
#: src/features/predictions/components/prediction-leaderboard.tsx:147
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:123
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:104
|
||||
msgid "Predictions"
|
||||
msgstr "予想"
|
||||
|
||||
@@ -2146,14 +2119,10 @@ msgstr "リアクション"
|
||||
|
||||
#. placeholder {0}: migrationStatus.playersProcessed
|
||||
#. placeholder {1}: migrationStatus.totalPlayers
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:66
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:72
|
||||
msgid "Recalculating badges in the background ({0}/{1})"
|
||||
msgstr "バックグラウンドでバッジを再計算中({0}/{1})"
|
||||
|
||||
#: src/features/admin/components/dashboard/activity-feed.tsx:34
|
||||
msgid "Recent activity"
|
||||
msgstr "最近のアクティビティ"
|
||||
|
||||
#: src/features/tournaments/components/started-tournament/sections/recent-results.tsx:34
|
||||
msgid "Recently finished"
|
||||
msgstr "最近終了した試合"
|
||||
@@ -2218,17 +2187,20 @@ msgstr "ラウンド{0}"
|
||||
msgid "Route"
|
||||
msgstr "ルート"
|
||||
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:142
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:123
|
||||
#: src/features/tournaments/components/upcoming-tournament/rules-list-button.tsx:23
|
||||
msgid "Rules"
|
||||
msgstr "ルール"
|
||||
|
||||
#: src/features/admin/components/dashboard/tournament-section.tsx:29
|
||||
msgid "Run"
|
||||
msgstr "実行"
|
||||
|
||||
#: src/app/routes/_authed/admin/tournaments/run.$id.tsx:36
|
||||
msgid "Run {name}"
|
||||
msgstr "{name}を実行"
|
||||
|
||||
#: src/features/admin/components/dashboard/tournament-card.tsx:53
|
||||
#: src/features/tournaments/components/manage-tournament.tsx:49
|
||||
#: src/features/tournaments/components/manage-tournament.tsx:41
|
||||
msgid "Run Tournament"
|
||||
msgstr "トーナメントを実行"
|
||||
|
||||
@@ -2517,7 +2489,7 @@ msgstr "開始時間を入力してください"
|
||||
msgid "Start typing to search..."
|
||||
msgstr "入力して検索..."
|
||||
|
||||
#: src/features/admin/components/dashboard/tournament-card.tsx:43
|
||||
#: src/features/admin/components/dashboard/tournament-section.tsx:24
|
||||
msgid "Starts in"
|
||||
msgstr "開始まで"
|
||||
|
||||
@@ -2639,7 +2611,7 @@ msgstr "チームを更新しました!"
|
||||
#: src/features/players/components/profile/skeleton.tsx:75
|
||||
#: src/features/tournaments/components/profile/index.tsx:32
|
||||
#: src/features/tournaments/components/profile/skeleton.tsx:89
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:137
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:118
|
||||
msgid "Teams"
|
||||
msgstr "チーム"
|
||||
|
||||
@@ -2648,6 +2620,7 @@ msgid "Teams created successfully!"
|
||||
msgstr "チームを作成しました!"
|
||||
|
||||
#: src/app/routes/_authed/admin/telemetry.tsx:20
|
||||
#: src/features/admin/components/dashboard/tools-list.tsx:55
|
||||
msgid "Telemetry"
|
||||
msgstr "テレメトリー"
|
||||
|
||||
@@ -2730,7 +2703,7 @@ msgstr "各グループの上位{0, plural, one {#チーム} other {#チーム}}
|
||||
msgid "Top {n} advance"
|
||||
msgstr "上位{n}チームが勝ち上がり"
|
||||
|
||||
#: src/features/telemetry/components/usage-screen.tsx:191
|
||||
#: src/features/telemetry/components/usage-screen.tsx:190
|
||||
msgid "Top functions by call count"
|
||||
msgstr "呼び出し数の多い関数"
|
||||
|
||||
@@ -2757,7 +2730,7 @@ msgstr "トーナメントを作成しました!"
|
||||
msgid "Tournament not found"
|
||||
msgstr "トーナメントが見つかりません"
|
||||
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:152
|
||||
#: src/features/tournaments/components/started-tournament/sections/nav-grid.tsx:133
|
||||
#: src/features/tournaments/components/upcoming-tournament/rules-list-button.tsx:25
|
||||
msgid "Tournament Rules"
|
||||
msgstr "トーナメントルール"
|
||||
@@ -2786,7 +2759,7 @@ msgstr "playTrackアクションにはtrackIdが必要です"
|
||||
msgid "Try the new themes"
|
||||
msgstr "新しいテーマを試してみましょう"
|
||||
|
||||
#: src/features/admin/components/dashboard/quiet-boundary.tsx:26
|
||||
#: src/features/admin/components/dashboard/quiet-boundary.tsx:24
|
||||
msgid "Unavailable right now"
|
||||
msgstr "現在利用できません"
|
||||
|
||||
@@ -2851,10 +2824,6 @@ msgstr "トーナメントを更新"
|
||||
msgid "Usage"
|
||||
msgstr "利用状況"
|
||||
|
||||
#: src/features/admin/components/dashboard/usage-card.tsx:34
|
||||
msgid "Usage, 7 days"
|
||||
msgstr "利用状況(7日間)"
|
||||
|
||||
#: src/features/activities/components/activities-table.tsx:202
|
||||
#: src/features/telemetry/components/client-events-table.tsx:146
|
||||
msgid "User Agent"
|
||||
@@ -2898,7 +2867,7 @@ msgstr "予想を見る"
|
||||
msgid "Viewport"
|
||||
msgstr "ビューポート"
|
||||
|
||||
#: src/features/telemetry/components/usage-screen.tsx:211
|
||||
#: src/features/telemetry/components/usage-screen.tsx:213
|
||||
msgid "Vitals"
|
||||
msgstr "バイタル"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user