Skip to content
This repository was archived by the owner on Jan 2, 2026. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
4163c28
refactor: next-intl ๊ฐ€์ด๋“œ์— ๋งž๊ฒŒ message json ํŒŒ์ผ ์ˆ˜์ •
lchanss Aug 4, 2025
8b59de5
fix: ํŽ˜์ด์ง€ ๋ฒˆ์—ญ ๊ฐ์ฒด ํ‰ํƒ„ํ™”
lchanss Aug 4, 2025
4fd17cf
fix: ๋‚ด๋น„๊ฒŒ์ด์…˜๋ฐ” ๋ฒˆ์—ญ ์ ์šฉ
lchanss Aug 4, 2025
269534f
fix: ์„œ๋ธŒ๋‚ด๋น„๋ฐ” ๋ฒˆ์—ญ ์ ์šฉ
lchanss Aug 4, 2025
2beaa6d
fix: ํŽ˜์ด์ง€ ํ—ค๋” ๋ฒˆ์—ญ ์ ์šฉ
lchanss Aug 4, 2025
853b4b5
fix: ํ‘ธํ„ฐ ๋ฒˆ์—ญ ์ ์šฉ
lchanss Aug 4, 2025
a2689fa
fix: ํ—ค๋” ๋ฒˆ์—ญ ์ ์šฉ
lchanss Aug 4, 2025
670b125
fix: ๋ฉ”์ธ ๋ฒˆ์—ญ ์ ์šฉ
lchanss Aug 5, 2025
8fdd0aa
fix: ์†Œ๊ฐœ ๋ฒˆ์—ญ ์ ์šฉ
lchanss Aug 5, 2025
0b632d8
fix: ์„ธ๋ฏธ๋‚˜ ๋ฒˆ์—ญ ์ ์šฉ
lchanss Aug 5, 2025
8390b0d
fix: ๊ตฌ์„ฑ์› ๋ฒˆ์—ญ ์ ์šฉ
lchanss Aug 5, 2025
be9ed66
fix: ์—ฐ๊ตฌ ๋ฒˆ์—ญ ์ ์šฉ
lchanss Aug 5, 2025
dc13329
fix: ๊ต๊ณผ๊ณผ์ • ๋ฒˆ์—ญ ์ ์šฉ
lchanss Aug 6, 2025
05280de
fix: ๊ฒ€์ƒ‰ํƒœ๊ทธ ๋ฒˆ์—ญ ์ ์šฉ
lchanss Aug 6, 2025
cb6f880
fix: ๊ฒ€์ƒ‰ ํŽ˜์ด์ง€ ๋ฒˆ์—ญ ์ ์šฉ
lchanss Aug 7, 2025
df27894
fix: ์ค‘๋ถ„๋ฅ˜ ํŽ˜์ด์ง€ ๋ฒˆ์—ญ ์ ์šฉ
lchanss Aug 7, 2025
cb04011
fix: ํƒœ๊ทธ ๋ฒˆ์—ญ ์ ์šฉ
lchanss Aug 8, 2025
8b9fe2a
fix: ํ•™์ƒํšŒ ๋ฒˆ์—ญ ๊ตฌ์กฐ ์ˆ˜์ •
lchanss Aug 8, 2025
deece38
fix: ํƒœ๊ทธ validation ๋กœ์ง ์ˆ˜์ •
lchanss Aug 8, 2025
88259a4
fix: ํƒœ๊ทธ ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ๋กœ ๋ณ€๊ฒฝ
lchanss Aug 8, 2025
85871e5
fix: ๋ˆ„๋ฝ๋œ ๋ฒˆ์—ญ ๋ฐ ๋กœ์ง ์˜ค๋ฅ˜ ์ˆ˜์ •
lchanss Aug 8, 2025
b55023a
remove: ์ด์ „ ๋‹ค๊ตญ์–ดํŒŒ์ผ ์‚ญ์ œ
lchanss Aug 8, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 4 additions & 5 deletions app/[locale]/about/directions/LocationGuide.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,15 @@ import { getPath } from '@/utils/page';
const staffPath = getPath(staff);

export default function LocationGuide() {
const t = useTranslations('Footer');
const tContent = useTranslations('Content');
const t = useTranslations('Page.about.directions');

return (
<p className="mb-8 text-md leading-[200%]">
์ปดํ“จํ„ฐ๊ณตํ•™๋ถ€๋Š” ์„œ์šธ๋Œ€ํ•™๊ต ๊ด€์•… 301๋™(์‹ ๊ณตํ•™๊ด€1)์— ์žˆ์Šต๋‹ˆ๋‹ค.
{t('description')}
<br />
{tContent('์ฃผ์†Œ')}: {t('address')}
{t('address')}: {t('addressValue')}
<br />
{tContent('์ „ํ™”')}:{' '}
{t('contact')}:{' '}
<Link href={staffPath} className="text-link hover:underline">
ํ•™๋ถ€ ์—ฐ๋ฝ์ฒ˜
</Link>
Expand Down
12 changes: 6 additions & 6 deletions app/[locale]/about/future-careers/CareerCompanies.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ import Form from '@/components/form/Form';
import { handleServerResponse } from '@/utils/serverActionError';

export default function CareerCompanies({ companies }: { companies: FutureCareers['companies'] }) {
const t = useTranslations('Content');
const t = useTranslations('Page.about.futureCareers');

const [showCreateForm, toggleCreateForm] = useReducer((x) => !x, false);

Expand All @@ -32,7 +32,7 @@ export default function CareerCompanies({ companies }: { companies: FutureCareer
return (
<div className="mt-11 sm:max-w-fit">
<div className="mb-3 flex items-center justify-between gap-2">
<h3 className="text-base font-bold">{t('์กธ์—…์ƒ ์ฐฝ์—… ๊ธฐ์—…')}</h3>
<h3 className="text-base font-bold">{t('graduateStartups')}</h3>
{/* UI๊ฐ€ ๊ณผํ•˜๊ฒŒ ๊นจ์ง€๋Š” ๊ด€๊ณ„๋กœ ๋ชจ๋ฐ”์ผ ๋ฒ„์ „์—์„œ๋Š” ํŽธ์ง‘ X */}
<div className="hidden sm:block">
<LoginVisible staff>
Expand All @@ -56,14 +56,14 @@ export default function CareerCompanies({ companies }: { companies: FutureCareer
const TABLE_COLUMN_SIZE = ['sm:w-[3rem]', 'sm:w-[12.5rem]', 'sm:w-80', 'sm:w-20', 'sm:w-32'];

function CompanyTableHeader() {
const t = useTranslations('Content');
const t = useTranslations('Page.about.futureCareers');

return (
<div className="hidden h-10 items-center gap-3 whitespace-nowrap border-b border-neutral-200 sm:flex sm:px-3">
<p className={TABLE_COLUMN_SIZE[0]}>{t('์—ฐ๋ฒˆ')}</p>
<p className={`${TABLE_COLUMN_SIZE[1]} pl-2`}>{t('์ฐฝ์—… ๊ธฐ์—…๋ช…')}</p>
<p className={`${TABLE_COLUMN_SIZE[2]} pl-2`}>{t('ํ™ˆํŽ˜์ด์ง€')}</p>
<p className={`${TABLE_COLUMN_SIZE[3]} pl-2`}>{t('์ฐฝ์—…์—ฐ๋„')}</p>
<p className={`${TABLE_COLUMN_SIZE[1]} pl-2`}>{t('startupName')}</p>
<p className={`${TABLE_COLUMN_SIZE[2]} pl-2`}>{t('startupWebsite')}</p>
<p className={`${TABLE_COLUMN_SIZE[3]} pl-2`}>{t('startupYear')}</p>
{/* ํ‘œ ๋ณธ๋ฌธ๊ณผ UI ์ •๋ ฌ์„ ๋งž์ถ”๊ธฐ ์œ„ํ•จ */}
<LoginVisible staff>
<p className={`hidden shrink-0 sm:block ${TABLE_COLUMN_SIZE[4]}`} />
Expand Down
10 changes: 6 additions & 4 deletions app/[locale]/about/future-careers/CareerStat.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,13 @@ import { Link } from '@/i18n/routing';
import { getPath } from '@/utils/page';

export const CAREER_STAT_ROWS = ['์‚ผ์„ฑ', 'LG', '๊ธฐํƒ€ ๋Œ€๊ธฐ์—…', '์ค‘์†Œ๊ธฐ์—…', '์ง„ํ•™', '๊ธฐํƒ€'];
export const CAREER_STAT_COLS = ['ํ•™๋ถ€', '์„์‚ฌ', '๋ฐ•์‚ฌ'];
export const CAREER_STAT_COLS = ['bachelor', 'master', 'doctor'];

const careerPath = getPath(futureCareers);

export default function CareerStat({ stat }: { stat: FutureCareers['stat'] }) {
const [idx, setIdx] = useState(0);
const t = useTranslations('Content');
const t = useTranslations('Page.about.futureCareers');

const year = stat[idx].year;
const yearStat = stat.find((x) => x.year === year);
Expand All @@ -29,7 +29,7 @@ export default function CareerStat({ stat }: { stat: FutureCareers['stat'] }) {
<div className="mt-7 flex flex-col gap-3">
<div className="flex justify-between sm:w-[432px]">
<div className="flex items-center gap-2">
<h3 className="text-base font-bold">{t('์กธ์—…์ƒ ์ง„๋กœ ํ˜„ํ™ฉ')}</h3>
<h3 className="text-base font-bold">{t('graduateCareerStatus')}</h3>
<Dropdown
contents={stat.map((x) => x.year.toString())}
selectedIndex={idx}
Expand Down Expand Up @@ -68,12 +68,14 @@ export default function CareerStat({ stat }: { stat: FutureCareers['stat'] }) {
}

function TableHeader() {
const t = useTranslations('Page.about.futureCareers');

return (
<div className="flex h-8 flex-1 border-b border-b-neutral-300 bg-neutral-100">
<div className="w-[6.25rem]" />
{CAREER_STAT_COLS.map((colName) => (
<div key={colName} className="flex flex-1 items-center justify-center">
<p className="text-sm">{colName}</p>
<p className="text-sm">{t(colName)}</p>
</div>
))}
</div>
Expand Down
4 changes: 2 additions & 2 deletions app/[locale]/about/overview/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ const overviewPath = getPath(overview);
export default async function OverviewPage(props: OverviewPageProps) {
const params = await props.params;
const { description, attachments, imageURL } = await getOverview(params.locale);
const t = await getTranslations('Content');
const t = await getTranslations('Page.about.overview');

return (
<PageLayout titleType="big" removePadding>
Expand All @@ -66,7 +66,7 @@ export default async function OverviewPage(props: OverviewPageProps) {
</div>
</div>
<div className="px-5 pb-16 pt-10 sm:pb-[7.88rem] sm:pl-[6.25rem] sm:pr-[22.5rem]">
<h2 className="mb-6 text-base font-semibold">{t('ํ•™๋ถ€ ์†Œ๊ฐœ ์ฑ…์ž')}</h2>
<h2 className="mb-6 text-base font-semibold">{t('brochure')}</h2>
<div className="mb-10 flex flex-col gap-6 sm:flex-row">
<Image src={brochure1.src} width={227} height={320} alt="์†Œ๊ฐœ ์ฑ…์ž" />
<Image src={brochure2.src} width={227} height={320} alt="์†Œ๊ฐœ ์ฑ…์ž" />
Expand Down
8 changes: 4 additions & 4 deletions app/[locale]/academics/components/courses/CourseCard.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { useTranslations } from 'next-intl';
import { useEffect, useReducer, useRef } from 'react';

import { Course, GRADE, SortOption } from '@/apis/types/academics';
import { Course, SortOption } from '@/apis/types/academics';
import styles from '@/app/[locale]/academics/components/courses/style.module.css';
import { useTypedLocale } from '@/utils/hooks/useTypedLocale';

Expand All @@ -12,11 +12,11 @@ interface CourseCardProps {

const useSortedProperties = (course: Course, selectedOption: SortOption) => {
const lang = useTypedLocale();
const t = useTranslations('Tag');
const t = useTranslations('Page.courses');

const classification = course[lang].classification;
const grade = t(GRADE[course.grade]);
const credit = t(`${course.credit}ํ•™์ `);
const grade = t('grade', { grade: course.grade });
const credit = t('credit', { credit: course.credit });

switch (selectedOption) {
case '๊ต๊ณผ๋ชฉ ๊ตฌ๋ถ„':
Expand Down
22 changes: 16 additions & 6 deletions app/[locale]/academics/components/courses/CourseListHeader.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,26 @@ import { useTranslations } from 'next-intl';

import { COURSE_ROW_ITEM_WIDTH } from '@/app/[locale]/academics/components/courses/CourseListRow';

/**
* Grade mapping
* 0: ๋Œ€ํ•™์›
* 1: 1ํ•™๋…„
* 2: 2ํ•™๋…„
* 3: 3ํ•™๋…„
* 4: 4ํ•™๋…„
* 5: ํ•™๋…„
*/

export default function CourseListHeader() {
const t = useTranslations('Content');
const t = useTranslations('Page.courses');

return (
<h5 className="hidden h-11 items-center whitespace-nowrap border-y border-neutral-100 bg-neutral-100 px-4 text-md sm:flex">
<span className={COURSE_ROW_ITEM_WIDTH.name}>{t('๊ต๊ณผ๋ชฉ๋ช…')}</span>
<span className={COURSE_ROW_ITEM_WIDTH.classification}>{t('๊ต๊ณผ๋ชฉ ๊ตฌ๋ถ„')}</span>
<span className={COURSE_ROW_ITEM_WIDTH.code}>{t('๊ต๊ณผ๋ชฉ ๋ฒˆํ˜ธ')}</span>
<span className={COURSE_ROW_ITEM_WIDTH.credit}>{t('ํ•™์ ')}</span>
<span className={COURSE_ROW_ITEM_WIDTH.grade}>{t('ํ•™๋…„')}</span>
<span className={COURSE_ROW_ITEM_WIDTH.name}>{t('name')}</span>
<span className={COURSE_ROW_ITEM_WIDTH.classification}>{t('classification')}</span>
<span className={COURSE_ROW_ITEM_WIDTH.code}>{t('code')}</span>
<span className={COURSE_ROW_ITEM_WIDTH.credit}>{t('credit', { credit: 0 })}</span>
<span className={COURSE_ROW_ITEM_WIDTH.grade}>{t('grade', { grade: 5 })}</span>
</h5>
);
}
10 changes: 5 additions & 5 deletions app/[locale]/academics/components/courses/CourseListRow.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import { useTranslations } from 'next-intl';

import { Course, GRADE } from '@/apis/types/academics';
import { Course } from '@/apis/types/academics';
import CourseDetailModal from '@/app/[locale]/academics/components/courses/CourseDetailModal';
import useModal from '@/utils/hooks/useModal';
import { useTypedLocale } from '@/utils/hooks/useTypedLocale';
Expand Down Expand Up @@ -67,24 +67,24 @@ function CodeCell({ code }: { code: string }) {
}

function CreditCell({ credit }: { credit: number }) {
const t = useTranslations('Tag');
const t = useTranslations('Page.courses');

return (
<span className={`${COURSE_ROW_ITEM_WIDTH.credit} order-5 text-neutral-400 sm:order-4 sm:pl-2`}>
{credit}
<span className="sm:hidden">{t('ํ•™์ ')}</span>
<span className="sm:hidden">{t('credit', { credit })}</span>
</span>
);
}

function GradeCell({ grade }: { grade: number }) {
const t = useTranslations('Tag');
const t = useTranslations('Page.courses');

return (
<span
className={`${COURSE_ROW_ITEM_WIDTH.grade} order-4 whitespace-nowrap pr-1 text-neutral-400 sm:order-5 sm:pr-0`}
>
{t(GRADE[grade])}
{t('grade', { grade })}
</span>
);
}
12 changes: 6 additions & 6 deletions app/[locale]/academics/components/courses/CourseToolbar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -48,22 +48,22 @@ interface ViewOptionsProps {
}

function ViewOptions({ selectedOption, changeOption }: ViewOptionsProps) {
const t = useTranslations('Content');
const t = useTranslations('Page.courses');

return (
<div className="flex gap-3 text-md text-neutral-400">
<span
className={selectedOption === '๋ชฉ๋กํ˜•' ? 'text-neutral-800' : 'cursor-pointer'}
onClick={() => changeOption('๋ชฉ๋กํ˜•')}
>
{t('๋ชฉ๋กํ˜•')}
{t('listView')}
</span>
<span>|</span>
<span
className={selectedOption === '์นด๋“œํ˜•' ? 'text-neutral-800' : 'cursor-pointer'}
onClick={() => changeOption('์นด๋“œํ˜•')}
>
{t('์นด๋“œํ˜•')}
{t('cardView')}
</span>
</div>
);
Expand All @@ -74,18 +74,18 @@ interface SortOptionsProps {
changeOption: (option: SortOption) => void;
}

export const SORT_OPTIONS: SortOption[] = ['ํ•™๋…„', '๊ต๊ณผ๋ชฉ ๊ตฌ๋ถ„', 'ํ•™์ '];
const SORT_OPTIONS: SortOption[] = ['ํ•™๋…„', '๊ต๊ณผ๋ชฉ ๊ตฌ๋ถ„', 'ํ•™์ '];

function SortOptions({ selectedOption, changeOption }: SortOptionsProps) {
return (
<div className="flex flex-wrap items-center gap-2.5">
{SORT_OPTIONS.map((option) =>
option === selectedOption ? (
<Tag key={option} tag={option} defaultStyle="fill" />
<Tag key={option} tag={{ id: option, text: option }} defaultStyle="fill" />
) : (
<Tag
key={option}
tag={option}
tag={{ id: option, text: option }}
hoverStyle="fill"
defaultStyle="orange"
onClick={() => changeOption(option)}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ interface CoursePageContentProps {
export default function GraduateCoursePageContent({ courses, language }: CoursePageContentProps) {
const { selectedOption, changeOptions } = useCourseToolbar();
const { isMobile } = useResponsive();
const t = useTranslations('Content');
const t = useTranslations('Page.courses');

if (isMobile && selectedOption.view !== '๋ชฉ๋กํ˜•') {
changeOptions({ type: 'view', option: '๋ชฉ๋กํ˜•' });
Expand All @@ -31,7 +31,7 @@ export default function GraduateCoursePageContent({ courses, language }: CourseP
<LoginVisible staff>
<AddCourseButton studentType="graduate" />
</LoginVisible>
<h4 className="mb-2 text-[17px] font-bold sm:mb-8 sm:pl-5">{t('๊ต๊ณผ๋ชฉ ์ •๋ณด')}</h4>
<h4 className="mb-2 text-[17px] font-bold sm:mb-8 sm:pl-5">{t('courseInformation')}</h4>
<CourseToolbar
viewOption={selectedOption.view}
sortOption={selectedOption.sort}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ export default function UndergraduateCoursePageContent({
}: CoursePageContentProps) {
const { selectedOption, changeOptions } = useCourseToolbar();
const { isMobile } = useResponsive();
const t = useTranslations('Content');
const t = useTranslations('Page.courses');
const sortedCourses = getSortedCourses(courses, selectedOption.sort);

if (isMobile && selectedOption.view !== '๋ชฉ๋กํ˜•') {
Expand All @@ -35,7 +35,7 @@ export default function UndergraduateCoursePageContent({
<LoginVisible staff>
<AddCourseButton studentType="undergraduate" />
</LoginVisible>
<h4 className="mb-8 text-[17px] font-bold sm:pl-5">{t('๊ต๊ณผ๋ชฉ ์ •๋ณด')}</h4>
<h4 className="mb-8 text-[17px] font-bold sm:pl-5">{t('courseInformation')}</h4>
<CourseToolbar
viewOption={selectedOption.view}
sortOption={selectedOption.sort}
Expand Down
15 changes: 6 additions & 9 deletions app/[locale]/community/components/PostFooter.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ type AdjPost = {
title: string;
};

type RowType = 'next' | 'prev';
type RowType = 'next' | 'previous';

export default function PostFooter({
path,
Expand All @@ -43,7 +43,7 @@ export default function PostFooter({
return (
<div className={`flex flex-col ${margin}`}>
{nextPost && <Row post={nextPost} type="next" path={path} />}
{prevPost && <Row post={prevPost} type="prev" path={path} />}
{prevPost && <Row post={prevPost} type="previous" path={path} />}
<div className="mt-16 flex justify-end">
<LoginVisible role={role}>
{id && (
Expand Down Expand Up @@ -79,12 +79,9 @@ function RowIcon({ type }: { type: RowType }) {
}

function RowDescription({ type }: { type: RowType }) {
const t = useTranslations('Content');
const t = useTranslations('common');

const description = type == 'next' ? '๋‹ค์Œ๊ธ€' : '์ด์ „๊ธ€';
return (
<p className="mr-3 flex-shrink-0 text-md font-medium text-main-orange">{t(description)}</p>
);
return <p className="mr-3 flex-shrink-0 text-md font-medium text-main-orange">{t(type)}</p>;
}

function RowPostTitle({ title }: { title?: string }) {
Expand All @@ -101,14 +98,14 @@ function RowPostTitle({ title }: { title?: string }) {
}

function PostListLink({ href }: { href: string }) {
const t = useTranslations('Content');
const t = useTranslations('common');

return (
<PaginatedLink
href={href}
className="flex h-[35px] items-center rounded-[0.0625rem] border border-neutral-700 bg-neutral-800 px-[15px] text-md font-semibold tracking-[0.1rem] text-white hover:border-neutral-500 hover:bg-neutral-500"
>
{t('๋ชฉ๋ก')}
{t('list')}
</PaginatedLink>
);
}
Expand Down
6 changes: 3 additions & 3 deletions app/[locale]/community/council/report/[id]/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ export async function generateMetadata({ params }: Props) {

export default async function CouncilReportPage({ params }: Props) {
const { id, locale } = await params;
const t = await getTranslations('Content');
const t = await getTranslations('Page.report');
const council = await getCouncilReport(id);

const { title, description, sequence, name, createdAt } = council;
Expand All @@ -44,10 +44,10 @@ export default async function CouncilReportPage({ params }: Props) {
<h2 className="text-[1.25rem] font-semibold leading-[1.4]">{title}</h2>
<div className="flex gap-5 text-sm font-normal tracking-wide text-neutral-500">
<p>
{t('์ž‘์„ฑ์ž')}: {author}
{t('author')}: {author}
</p>
<p>
{t('์ž‘์„ฑ ๋‚ ์งœ')}: {dateStr}
{t('createdDate')}: {dateStr}
</p>
</div>
</div>
Expand Down
Loading