Merge pull request #149 from Lapikud/miniturniirid

Mini-tournament info updated, new sponsors
This commit is contained in:
2026-09-11 17:55:10 +03:00
committed by GitHub
22 changed files with 468 additions and 22 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 746 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 124 KiB

1
public/sponsors/tlu.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 18 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 62 KiB

View File

@@ -254,13 +254,13 @@ export default function Expo() {
className={`relative overflow-hidden ${DIVIDER} min-h-[360px] md:min-h-[480px]`} className={`relative overflow-hidden ${DIVIDER} min-h-[360px] md:min-h-[480px]`}
> >
<Image <Image
src="/images/landing/compete_teaser.jpg" src="/images/miniturniirid/minitournaments.jpg"
alt="" alt=""
fill fill
className="object-cover" className="object-cover"
sizes="100vw" sizes="100vw"
/> />
<div className="absolute inset-0 bg-gradient-to-r from-[#0E0F19] via-[#0E0F19]/85 to-[#0E0F19]/30" /> <div className="absolute inset-0 bg-gradient-to-r from-[#0E0F19] via-[#0E0F19]/50 to-[#0E0F19]/30" />
<div <div
className={`relative z-10 flex flex-col justify-center h-full min-h-[360px] md:min-h-[480px] max-w-2xl gap-6 py-10 ${GUTTER}`} className={`relative z-10 flex flex-col justify-center h-full min-h-[360px] md:min-h-[480px] max-w-2xl gap-6 py-10 ${GUTTER}`}
> >
@@ -272,7 +272,7 @@ export default function Expo() {
<p className="text-[#EEE5E5] text-base md:text-lg max-w-md"> <p className="text-[#EEE5E5] text-base md:text-lg max-w-md">
{t("expo.miniTournaments.description")} {t("expo.miniTournaments.description")}
</p> </p>
<Link href="/turniirid" className="w-fit"> <Link href="/turniirid/miniturniirid" className="w-fit">
<button <button
className={`${vipnagorgialla.className} px-4 py-2 border-4 border-transparent bg-[#00A3E0] hover:bg-[#E5E5EE] text-[#0A121F] cursor-pointer font-bold italic leading-none uppercase transition`} className={`${vipnagorgialla.className} px-4 py-2 border-4 border-transparent bg-[#00A3E0] hover:bg-[#E5E5EE] text-[#0A121F] cursor-pointer font-bold italic leading-none uppercase transition`}
> >
@@ -322,7 +322,7 @@ export default function Expo() {
</section> </section>
{/* Universities */} {/* Universities */}
<section className={`${DIVIDER} ${GUTTER} py-12 md:py-16`}> <section className={`${DIVIDER} ${GUTTER} py-12 md:py-16 hidden`}>
<SectionHeading>{t("expo.universities")}</SectionHeading> <SectionHeading>{t("expo.universities")}</SectionHeading>
<div className="grid grid-cols-2 lg:grid-cols-4 gap-6 lg:gap-8"> <div className="grid grid-cols-2 lg:grid-cols-4 gap-6 lg:gap-8">
{universities.map((uni) => ( {universities.map((uni) => (

View File

@@ -26,10 +26,10 @@ export default async function Home({
<Livestreams /> <Livestreams />
{/* Nav cards: Piletid + Ajakava + Turniirid */} {/* Nav cards: Piletid + Ajakava + Turniirid */}
<div className="grid grid-cols-1 md:grid-cols-3 md:h-65 border-b-3 border-[#1F5673]"> <div className="grid grid-cols-1 lg:grid-cols-2 3xl:grid-cols-4 3xl:h-65 border-b-3 border-[#1F5673]">
<Link <Link
href="/piletid" href="/piletid"
className="px-8 md:px-12 py-8 flex flex-col justify-center gap-4 border-b-3 md:border-b-0 md:border-r-3 group border-[#1F5673] hover:bg-[#007CAB] dark:hover:bg-[#00A3E0] transition" className="px-8 xl:px-12 py-8 flex flex-col justify-center gap-4 border-b-3 3xl:border-b-0 lg:border-r-3 group border-[#1F5673] hover:bg-[#007CAB] dark:hover:bg-[#00A3E0] transition"
> >
<div className="flex flex-col gap-4"> <div className="flex flex-col gap-4">
<span <span
@@ -56,7 +56,7 @@ export default async function Home({
<Link <Link
href="/ajakava" href="/ajakava"
className="px-8 md:px-12 py-8 flex flex-col justify-center gap-4 border-b-3 md:border-b-0 md:border-r-3 group border-[#1F5673] hover:bg-[#007CAB] dark:hover:bg-[#00A3E0] transition" className="px-8 xl:px-12 py-8 flex flex-col justify-center gap-4 border-b-3 3xl:border-b-0 3xl:border-r-3 group border-[#1F5673] hover:bg-[#007CAB] dark:hover:bg-[#00A3E0] transition"
> >
<div className="flex flex-col gap-4"> <div className="flex flex-col gap-4">
<span <span
@@ -81,9 +81,30 @@ export default async function Home({
</div> </div>
</Link> </Link>
<Link
href="/messiala"
className="px-8 xl:px-12 py-8 flex flex-col justify-center gap-4 border-b-3 lg:border-b-0 lg:border-r-3 group border-[#1F5673] hover:bg-[#007CAB] dark:hover:bg-[#00A3E0] transition"
>
<div className="flex flex-col gap-4">
<span className="material-symbols-outlined text-[clamp(2rem,1.5rem+1.5vw,3.5rem)]! text-[#007CAB] dark:text-[#00A3E0] dark:group-hover:text-[#EEE5E5] group-hover:text-[#EEE5E5]">
festival
</span>
</div>
<div className="flex flex-row justify-between gap-4 items-center">
<h2
className={`text-[clamp(2rem,1.8rem+1vw,3rem)] ${vipnagorgialla.className} font-bold italic uppercase dark:text-[#EEE5E5] text-[#2A2C3F] dark:group-hover:text-[#2A2C3F] group-hover:text-black`}
>
{t("navigation.expo")}
</h2>
<span className="material-symbols-outlined text-[clamp(2rem,1.5rem+1.5vw,3.5rem)]! font-bold! text-[#007CAB] dark:text-[#00A3E0] group-hover:translate-x-2 dark:group-hover:text-[#EEE5E5] group-hover:text-[#EEE5E5] transition">
arrow_right_alt
</span>
</div>
</Link>
<Link <Link
href="/turniirid" href="/turniirid"
className="px-8 md:px-12 py-8 flex flex-col justify-center gap-4 group border-[#1F5673] hover:bg-[#007CAB] dark:hover:bg-[#00A3E0] transition" className="px-8 xl:px-12 py-8 flex flex-col justify-center gap-4 group border-[#1F5673] hover:bg-[#007CAB] dark:hover:bg-[#00A3E0] transition"
> >
<div className="flex flex-col gap-4"> <div className="flex flex-col gap-4">
<span className="material-symbols-outlined text-[clamp(2rem,1.5rem+1.5vw,3.5rem)]! text-[#007CAB] dark:text-[#00A3E0] dark:group-hover:text-[#EEE5E5] group-hover:text-[#EEE5E5]"> <span className="material-symbols-outlined text-[clamp(2rem,1.5rem+1.5vw,3.5rem)]! text-[#007CAB] dark:text-[#00A3E0] dark:group-hover:text-[#EEE5E5] group-hover:text-[#EEE5E5]">

View File

@@ -0,0 +1,191 @@
import { vipnagorgialla } from "@/components/Vipnagorgialla";
import Image from "next/image";
import Link from "next/link";
import { getTranslations, setRequestLocale } from "next-intl/server";
import { miniTournaments } from "@/data/miniturniirid";
/** Horizontal padding used by the page (64px at the design width). */
const GUTTER = "px-4 sm:px-8 lg:px-16";
// TODO: replace with the real mini-tournaments rules URL once it exists.
// Placeholder points at the TipiLAN ruleset repo root.
const RULES_URL =
"https://git.edunaut.ee/slunk/TipiLAN_reeglistik_ruleset";
/**
* One mini-tournament tile: a cyan-bordered cover image above a bold caption
* "Title Prize". Games without artwork yet fall back to a text tile.
*/
function MiniCard({
title,
prizePool,
format,
includesGiftBags,
organizer,
organizerUrl,
image,
organizedBy,
giftBagsLabel,
}: (typeof miniTournaments)[number] & {
organizedBy: string;
giftBagsLabel: string;
}) {
return (
<div className="flex flex-col gap-3">
<div className="relative aspect-video border-[3px] border-[#00A3E0] overflow-hidden bg-[#0E0F19]">
{image ? (
<Image
src={image}
alt={title}
fill
className="object-cover"
sizes="(max-width: 768px) 100vw, 33vw"
/>
) : (
<span
className={`${vipnagorgialla.className} absolute inset-0 flex items-center justify-center p-4 text-center font-bold italic uppercase text-white/85 leading-tight text-[clamp(1rem,0.8rem+1vw,1.5rem)]`}
>
{title}
</span>
)}
</div>
<div className="flex flex-wrap items-center gap-x-2 gap-y-1">
<span className="font-bold text-white leading-tight text-[clamp(1rem,0.85rem+0.8vw,1.5rem)]">
{title}{format ? `, ${format}` : ""}
</span>
<span className="text-xl font-bold leading-none text-white md:text-2xl">-</span>
{prizePool === "giftBags" ? (
<span
className="inline-flex items-center gap-1 text-[#EEE5E5]"
title={giftBagsLabel}
>
<span
className="material-symbols-outlined text-2xl! leading-none! md:text-3xl!"
aria-hidden="true"
>
redeem
</span>
<span className="text-xl font-bold leading-tight md:text-2xl">
{giftBagsLabel}
</span>
</span>
) : (
<span className="text-xl font-bold leading-tight text-[#EEE5E5] md:text-2xl">
{prizePool}
</span>
)}
{includesGiftBags && prizePool !== "giftBags" && (
<>
<span className="text-xl font-bold leading-none text-white md:text-2xl">+</span>
<span
className="inline-flex items-center gap-1 text-[#EEE5E5]"
title={giftBagsLabel}
>
<span
className="material-symbols-outlined text-2xl! leading-none! md:text-3xl!"
aria-hidden="true"
>
redeem
</span>
<span className="text-xl font-bold leading-tight md:text-2xl">
{giftBagsLabel}
</span>
</span>
</>
)}
</div>
{organizer && (
<span className="text-sm italic text-[#EEE5E5]/60">
{organizedBy}: {organizerUrl ? (
<Link
href={organizerUrl}
target="_blank"
rel="noopener noreferrer"
className="text-[#00A3E0] hover:text-[#EEE5EE] transition-colors"
>
{organizer}
</Link>
) : (
<span className="text-[#00A3E0]">{organizer}</span>
)}
</span>
)}
</div>
);
}
export default async function MiniTournaments({
params,
}: {
params: Promise<{ locale: string }>;
}) {
const { locale } = await params;
setRequestLocale(locale);
const t = await getTranslations({ locale });
return (
<div className="bg-[#0E0F19] min-h-screen pt-16 md:pt-20">
<div className="mx-auto w-full max-w-[1920px]">
{/* Header */}
<div className={`${GUTTER} pt-12 md:pt-16`}>
<h1
className={`${vipnagorgialla.className} font-bold italic uppercase text-[#EEE5E5] leading-none text-[clamp(1.75rem,1.4rem+3vw,3.5rem)]`}
>
{t("minipage.title")}
</h1>
<p className="mt-4 text-[#EEE5E5]/70 italic text-lg md:text-xl">
{t("minipage.date")}
</p>
<p className="mt-4 text-[#EEE5E5] max-w-2xl text-base md:text-lg">
{t("minipage.description")}
</p>
{/* Buttons */}
<div className="mt-8 flex flex-wrap gap-4">
<Link
href={RULES_URL}
target="_blank"
rel="noopener noreferrer"
className={`${vipnagorgialla.className} font-bold italic leading-none text-lg uppercase px-4 py-3 border-4 border-[#00A3E0] bg-transparent text-[#00A3E0] hover:bg-[#00A3E0] hover:text-[#0A121F] transition`}
>
{t("minipage.readRules")}
</Link>
<Link
href="/piletid"
className={`${vipnagorgialla.className} font-bold italic leading-none text-lg uppercase px-4 py-3 border-4 border-transparent bg-[#00A3E0] hover:bg-[#E5E5EE] text-[#0A121F] transition`}
>
{t("minipage.buyTicket")}
</Link>
</div>
</div>
{/* Tournament groups */}
<div className={`${GUTTER} py-12 md:py-16`}>
{["simRacing", "fightingGames", "other"].map((category) => {
const games = miniTournaments.filter((game) => game.category === category);
return (
<section key={category} className="mb-14 last:mb-0">
<h2
className={`${vipnagorgialla.className} mb-6 text-3xl font-bold italic uppercase text-[#00A3E0] md:text-4xl`}
>
{t(`minipage.categories.${category}`)}
</h2>
<div className="grid grid-cols-1 gap-6 sm:grid-cols-2 lg:grid-cols-3 lg:gap-8">
{games.map((game) => (
<MiniCard
key={game.title}
{...game}
organizedBy={t("minipage.organizedBy")}
giftBagsLabel={t("minipage.giftBags")}
/>
))}
</div>
</section>
);
})}
</div>
</div>
</div>
);
}

View File

@@ -1,7 +1,7 @@
import { vipnagorgialla } from "@/components/Vipnagorgialla"; import { vipnagorgialla } from "@/components/Vipnagorgialla";
import Link from "next/link"; import Link from "next/link";
import Image from "next/image"; import Image from "next/image";
import { setRequestLocale } from "next-intl/server"; import { getTranslations, setRequestLocale } from "next-intl/server";
interface TournamentCardProps { interface TournamentCardProps {
title: string; title: string;
@@ -50,6 +50,7 @@ export default async function Tourney({
}) { }) {
const { locale } = await params; const { locale } = await params;
setRequestLocale(locale); setRequestLocale(locale);
const t = await getTranslations({ locale });
return ( return (
<div className="bg-[#0E0F19] min-h-0 flex flex-col flex-1"> <div className="bg-[#0E0F19] min-h-0 flex flex-col flex-1">
{/* 1x2 Grid */} {/* 1x2 Grid */}
@@ -59,7 +60,7 @@ export default async function Tourney({
title="COUNTER-STRIKE 2" title="COUNTER-STRIKE 2"
buttonHref="/turniirid/cs2" buttonHref="/turniirid/cs2"
backgroundImage="/images/landing/cs2_tournament.jpg" backgroundImage="/images/landing/cs2_tournament.jpg"
className="border-b-[3px] md:border-b-0 md:border-r-3" className="border-b-[3px] md:border-b-0 md:border-r-3 min-h-[50vh]"
/> />
{/* LoL */} {/* LoL */}
@@ -68,7 +69,17 @@ export default async function Tourney({
buttonHref="/turniirid/lol" buttonHref="/turniirid/lol"
backgroundImage="/images/landing/lol_tournament.png" backgroundImage="/images/landing/lol_tournament.png"
objectPosition="bottom left" objectPosition="bottom left"
className="border-b-0" className="border-b-0 min-h-[50vh]"
/>
</div>
{/* Full-width Mini-tournaments */}
<div className="grid grid-cols-1 auto-rows-fr">
<TournamentCard
title={t("expo.miniTournaments.title").toUpperCase()}
buttonHref="/turniirid/miniturniirid"
backgroundImage="/images/miniturniirid/minitournaments.jpg"
className="border-t-[3px] min-h-[50vh]"
/> />
</div> </div>
</div> </div>

View File

@@ -45,6 +45,7 @@
@theme { @theme {
--breakpoint-xs: 30rem; --breakpoint-xs: 30rem;
--breakpoint-3xl: 112rem;
} }
body { body {

View File

@@ -48,7 +48,7 @@ const Header = ({ navItems }: HeaderProps) => {
const dropdownNavItems = mainNavItems; const dropdownNavItems = mainNavItems;
const navIconByHref: Partial<Record<NavItem["href"], string>> = { const navIconByHref: Partial<Record<NavItem["href"], string>> = {
"/messiala": "weekend", "/messiala": "festival",
"/ajakava": "event_note", "/ajakava": "event_note",
"/piletid": "local_activity", "/piletid": "local_activity",
"/turniirid": "rewarded_ads", "/turniirid": "rewarded_ads",

View File

@@ -89,6 +89,22 @@ const highlightedSponsors: Sponsor[] = [
]; ];
const sponsors: Sponsor[] = [ const sponsors: Sponsor[] = [
{
href: "https://www.tlu.ee",
src: "/sponsors/tlu.svg",
alt: "Tallinn Ülikool",
width: 292,
height: 60,
className: "brightness-0 invert scale-115",
},
{
href: "https://www.tlu.ee/dt",
src: "/sponsors/tludti.svg",
alt: "Tallinn Ülikooli Digitehnoloogiate Instituut",
width: 220,
height: 65,
className: "brightness-0 invert scale-115",
},
// Gaming and technology // Gaming and technology
{ {
href: "https://k-space.ee/", href: "https://k-space.ee/",

164
src/data/miniturniirid.ts Normal file
View File

@@ -0,0 +1,164 @@
// Content for the Miniturniirid (mini-tournaments) page.
//
// Game titles and prize amounts are proper nouns / language-neutral, so they
// live here as plain strings rather than in the translation files (same
// convention as src/data/expo.ts). Page headings and button labels are
// translated (see the `minipage` block in translations/et.json + en.json).
//
// Cover images live in public/images/miniturniirid/. `image` is optional and
// games without artwork fall back to a text tile showing the title.
export type MiniTournamentCategory = "simRacing" | "fightingGames" | "other";
export type PrizePool = string | "giftBags";
export interface MiniTournament {
/** Game name (proper noun, shown as-is). */
title: string;
/** Category used to group tournaments on the page. */
category: MiniTournamentCategory;
/** Total prize pool, including non-cash prizes where applicable. */
prizePool: PrizePool;
/** Prizes for first through fourth place. */
placements: string[];
/** Tournament format, when it is part of the published name. */
format?: string;
/** Whether the tournament also awards gift bags alongside its cash pool. */
includesGiftBags?: boolean;
/** Organization running the tournament, when one has been confirmed. */
organizer?: string;
/** Public organizer page. */
organizerUrl?: string;
/** Cover image under /public. Rendered object-cover. Optional. */
image?: string;
}
export const miniTournaments: MiniTournament[] = [
{
title: "GT7",
category: "simRacing",
organizer: "Red Bull",
organizerUrl: "https://www.redbull.com/ee-et/",
prizePool: "200€",
placements: ["100€", "60€", "40€"],
image: "/images/miniturniirid/gran_turismo.jpg",
},
{
title: "WRC, Dirt Rally 2",
category: "simRacing",
organizer: "EVAL",
organizerUrl: "https://www.simracing.ee/",
prizePool: "350€",
placements: ["200€", "100€", "50€", "Kinkekott ainult"],
includesGiftBags: true,
image: "/images/miniturniirid/wrc.jpg",
},
{
title: "Tekken 8",
category: "fightingGames",
organizer: "BFGL",
organizerUrl: "https://www.instagram.com/baltic_fighting_game_league/",
prizePool: "100€",
placements: ["50€", "30€", "20€"],
image: "/images/miniturniirid/tekken8.jpg",
},
{
title: "Street Fighter 6",
category: "fightingGames",
organizer: "BFGL",
organizerUrl: "https://www.instagram.com/baltic_fighting_game_league/",
prizePool: "100€",
placements: ["50€", "30€", "20€"],
image: "/images/miniturniirid/street_fighter.jpg",
},
{
title: "2XKO",
category: "fightingGames",
organizer: "BFGL",
organizerUrl: "https://www.instagram.com/baltic_fighting_game_league/",
prizePool: "100€",
placements: ["50€", "30€", "20€"],
image: "/images/miniturniirid/2xko.png",
},
{
title: "Super Smash Bros. Ultimate",
category: "fightingGames",
organizer: "BFGL",
organizerUrl: "https://www.instagram.com/baltic_fighting_game_league/",
prizePool: "100€",
placements: ["50€", "30€", "20€"],
image: "/images/miniturniirid/super_smash_bros.jpg",
},
{
title: "Invincible Vs.",
category: "fightingGames",
organizer: "BFGL",
organizerUrl: "https://www.instagram.com/baltic_fighting_game_league/",
prizePool: "100€",
placements: ["50€", "30€", "20€"],
image: "/images/miniturniirid/invincible_vs.png",
},
{
title: "Marvel Tokon: Fighting Souls",
category: "fightingGames",
organizer: "BFGL",
organizerUrl: "https://www.instagram.com/baltic_fighting_game_league/",
prizePool: "100€",
placements: ["50€", "30€", "20€"],
image: "/images/miniturniirid/marvel_tokon.png",
},
{
title: "Avatar Legends: The Fighting Game",
category: "fightingGames",
organizer: "BFGL",
organizerUrl: "https://www.instagram.com/baltic_fighting_game_league/",
prizePool: "100€",
placements: ["50€", "30€", "20€"],
image: "/images/miniturniirid/avatar_legends.jpg",
},
{
title: "EA FC",
category: "other",
prizePool: "100€",
placements: ["50€", "30€", "20€"],
image: "/images/miniturniirid/fc26.jpg",
},
{
title: "osu!",
category: "other",
prizePool: "100€",
placements: ["50€", "30€", "20€"],
image: "/images/miniturniirid/osu.jpg",
},
{
title: "Counter-Strike 1.6",
category: "other",
organizer: "K-space",
organizerUrl: "https://k-space.ee/",
prizePool: "giftBags",
placements: ["Kinkekott", "Kinkekott", "Kinkekott", "Kinkekott"],
image: "/images/miniturniirid/cs16.jpg",
},
{
title: "Quake",
category: "other",
prizePool: "giftBags",
placements: ["Kinkekott", "Kinkekott", "Kinkekott", "Kinkekott"],
image: "/images/miniturniirid/quake.jpg",
},
{
title: "Rocket League",
category: "other",
format: "2v2",
prizePool: "50€",
placements: ["25€ + 25€", "Kinkekott 2x", "Kinkekott 2x"],
includesGiftBags: true,
image: "/images/miniturniirid/rocket_league.jpg",
},
{
title: "Dwarf Escape",
category: "other",
prizePool: "50€",
placements: ["25€", "15€", "10€"],
image: "/images/miniturniirid/dwarf_escape.png",
},
];

View File

@@ -120,7 +120,7 @@ export const scheduleData: Record<string, ScheduleItem[]> = {
"schedule.locations.studentHouse", "schedule.locations.studentHouse",
"schedule.locations.lobbyAndLanArea" "schedule.locations.lobbyAndLanArea"
], ],
time: "*01:00", time: "~01:00",
}, },
], ],
sep12: [ sep12: [
@@ -316,7 +316,7 @@ export const scheduleData: Record<string, ScheduleItem[]> = {
{ {
titleKey: "schedule.events.doorsClose", titleKey: "schedule.events.doorsClose",
locationKey: "schedule.locations.auditorium", locationKey: "schedule.locations.auditorium",
time: "*01:30", time: "~01:30",
}, },
], ],
sep13: [ sep13: [
@@ -361,17 +361,17 @@ export const scheduleData: Record<string, ScheduleItem[]> = {
{ {
titleKey: "schedule.events.awardCeremony", titleKey: "schedule.events.awardCeremony",
locationKey: "schedule.locations.auditorium", locationKey: "schedule.locations.auditorium",
time: "18:30", time: "~18:30",
}, },
{ {
titleKey: "schedule.events.closingCeremony", titleKey: "schedule.events.closingCeremony",
locationKey: "schedule.locations.auditorium", locationKey: "schedule.locations.auditorium",
time: "19:00", time: "~19:00",
}, },
{ {
titleKey: "schedule.events.doorsClose", titleKey: "schedule.events.doorsClose",
locationKey: "schedule.locations.auditorium", locationKey: "schedule.locations.auditorium",
time: "19:30", time: "~19:30",
}, },
], ],
}; };

View File

@@ -46,6 +46,10 @@ export const routing = defineRouting({
et: "/turniirid", et: "/turniirid",
en: "/tournaments", en: "/tournaments",
}, },
"/turniirid/miniturniirid": {
et: "/turniirid/miniturniirid",
en: "/tournaments/minitournaments",
},
}, },
}); });

View File

@@ -8,7 +8,8 @@
"tickets": "Tickets", "tickets": "Tickets",
"rules": "Game rules", "rules": "Game rules",
"stream": "Stream", "stream": "Stream",
"tournaments": "Tourna\u00ADments" "tournaments": "Tourna\u00ADments",
"minitournaments": "Mini-tournaments"
}, },
"common": { "common": {
"loading": "Loading...", "loading": "Loading...",
@@ -175,6 +176,22 @@
"buyTicket": "BUY TICKETS" "buyTicket": "BUY TICKETS"
} }
}, },
"minipage": {
"title": "Mini-tournaments",
"date": "11 & 12 September",
"description": "TipiLAN hosts a variety of fun and competitive mini-tournaments. The full prize pool for each tournament is shown next to it.",
"readRules": "READ RULES",
"buyTicket": "BUY TICKETS",
"organizedBy": "Organized by",
"prizePool": "Prize pool",
"giftBags": "Gifts",
"top": "Top {place}",
"categories": {
"simRacing": "Sim Racing",
"fightingGames": "Fighting Games",
"other": "Other Tournaments"
}
},
"cs2page": { "cs2page": {
"title": "COUNTER-STRIKE 2 TOURNAMENT", "title": "COUNTER-STRIKE 2 TOURNAMENT",
"buyTicket": "BUY TICKET", "buyTicket": "BUY TICKET",
@@ -839,7 +856,8 @@
"entranceHall": "Lobby", "entranceHall": "Lobby",
"fuajeeLanAla": "Fuajee/LAN Area", "fuajeeLanAla": "Fuajee/LAN Area",
"foyerAndLanArea": "Fuajee/LAN Area", "foyerAndLanArea": "Fuajee/LAN Area",
"lobbyAndLanArea": "Lobby/LAN area" "lobbyAndLanArea": "Lobby/LAN area",
"miniTournaments": "Mini-tournaments"
}, },
"transportInfo": "Come to TipiLAN by public transport if possible! Buses 10, 11, 19, 23, 24A, 27, 33, 36, 37, 45, 67 and trolleybuses 72 and 83 will take you to TalTech. If you come by car, don't come alone - bring your friends!" "transportInfo": "Come to TipiLAN by public transport if possible! Buses 10, 11, 19, 23, 24A, 27, 33, 36, 37, 45, 67 and trolleybuses 72 and 83 will take you to TalTech. If you come by car, don't come alone - bring your friends!"
}, },

View File

@@ -8,7 +8,8 @@
"tickets": "Piletid", "tickets": "Piletid",
"rules": "Reeglid", "rules": "Reeglid",
"stream": "Striim", "stream": "Striim",
"tournaments": "Turniirid" "tournaments": "Turniirid",
"minitournaments": "Miniturniirid"
}, },
"common": { "common": {
"loading": "Laadimine...", "loading": "Laadimine...",
@@ -176,6 +177,22 @@
"buyTicket": "OSTA PILET" "buyTicket": "OSTA PILET"
} }
}, },
"minipage": {
"title": "Miniturniirid",
"date": "11. ja 12. september",
"description": "TipiLANil toimub mitmeid erinevaid lõbusaid ja võistlushimu tekitavaid miniturniire. Iga turniiri juures on välja toodud terve turniiri auhinnafond.",
"readRules": "LOE REEGLEID",
"buyTicket": "OSTA PILET",
"organizedBy": "Korraldaja",
"prizePool": "Auhinnafond",
"giftBags": "Kinkekotid",
"top": "Top {place}",
"categories": {
"simRacing": "Sim Racing",
"fightingGames": "Võitlusmängud",
"other": "Muud turniirid"
}
},
"cs2page": { "cs2page": {
"title": "COUNTER-STRIKE 2 TURNIIR", "title": "COUNTER-STRIKE 2 TURNIIR",
"buyTicket": "OSTA PILET", "buyTicket": "OSTA PILET",
@@ -840,7 +857,8 @@
"entranceHall": "Fuajee", "entranceHall": "Fuajee",
"fuajeeLanAla": "Fuajee/LAN-ala", "fuajeeLanAla": "Fuajee/LAN-ala",
"foyerAndLanArea": "Fuajee/LAN-ala", "foyerAndLanArea": "Fuajee/LAN-ala",
"lobbyAndLanArea": "Fuajee/LAN-ala" "lobbyAndLanArea": "Fuajee/LAN-ala",
"miniTournaments": "Miniturniirid"
}, },
"transportInfo": "Tule võimaluse korral TipiLANile ühistranspordiga! TalTechi toovad sind bussid 10, 11, 19, 23, 24A, 27, 33, 36, 37, 45, 67 ning trollid 72 ja 83. Kui tuled autoga, siis ära tule üksi, võta sõbrad kaasa!" "transportInfo": "Tule võimaluse korral TipiLANile ühistranspordiga! TalTechi toovad sind bussid 10, 11, 19, 23, 24A, 27, 33, 36, 37, 45, 67 ning trollid 72 ja 83. Kui tuled autoga, siis ära tule üksi, võta sõbrad kaasa!"
}, },