{
  "_generated": "scripts/build-config.mjs 가 만든다. 직접 고치지 말고 스크립트를 고쳐 다시 돌린다.",
  "version": 1,
  "event_config": "event.json",
  "langs": [
    "ko",
    "en",
    "zh"
  ],
  "default_lang": "ko",
  "value_lang": "ko",
  "value_rule": "저장·엑셀·참가증은 value 만 쓴다(늘 한국어). label 은 화면용. 직접 입력란만 사람이 적은 그대로 남는다.",
  "lang_names": {
    "ko": "한국어",
    "en": "English",
    "zh": "中文"
  },
  "types": {
    "text": "한 줄 글",
    "email": "이메일 한 줄",
    "tel": "전화번호 — validate 참고",
    "select": "단일 선택(드롭다운)",
    "chips": "단일 선택(버튼) — select 와 검증이 같다",
    "multi": "다중 선택(버튼) — min / max",
    "checkbox": "동의 체크 — 체크하면 value 를 저장",
    "other": "options 와 따로 둔다. 화면은 options 끝에 other.label 을 붙이고, 고르면 other.input_key 입력란이 필수가 된다. other.value('기타')는 options 의 value 와 겹치지 않는다."
  },
  "ui": {
    "submit": {
      "ko": "참가증 받기",
      "en": "Get my pass",
      "zh": "领取参会证"
    },
    "submitting": {
      "ko": "번호 받는 중…",
      "en": "Getting your number…",
      "zh": "正在领取号码…"
    },
    "select_placeholder": {
      "ko": "선택하세요",
      "en": "Select",
      "zh": "请选择"
    },
    "optional": {
      "ko": "선택",
      "en": "Optional",
      "zh": "选填"
    },
    "required": {
      "ko": "필수",
      "en": "Required",
      "zh": "必填"
    },
    "unconfirmed": {
      "ko": "미확정",
      "en": "To be confirmed",
      "zh": "待定"
    },
    "form_error": {
      "ko": "빨간 칸을 확인해 주세요",
      "en": "Please check the fields in red",
      "zh": "请检查标红的项目"
    },
    "selected_count": {
      "ko": "{n}/{max} 선택",
      "en": "{n}/{max} selected",
      "zh": "已选 {n}/{max}"
    },
    "left": {
      "ko": "필수 {n}개 남음",
      "en": "{n} to fill",
      "zh": "还有 {n} 项必填"
    },
    "ready": {
      "ko": "완료",
      "en": "All set",
      "zh": "已填完"
    },
    "more": {
      "ko": "내용",
      "en": "Details",
      "zh": "详情"
    },
    "onsite": {
      "ko": "현장 입력",
      "en": "On-site entry",
      "zh": "现场录入"
    },
    "revisit": {
      "ko": "받은 참가증 다시 보기",
      "en": "View my pass again",
      "zh": "查看已领取的参会证"
    },
    "already": {
      "ko": "이미 등록된 학번 또는 전화번호입니다. 등록할 때 쓴 학번과 전화번호를 그대로 넣으면 같은 참가증을 다시 받을 수 있습니다",
      "en": "This student ID or phone number is already registered. Enter the student ID and phone number you registered with to get the same pass again",
      "zh": "该学号或电话号码已报名。填写报名时使用的学号和电话号码，即可重新领取同一张参会证"
    },
    "net": {
      "ko": "연결이 불안정합니다. 다시 눌러 주세요",
      "en": "Connection problem. Please tap again",
      "zh": "网络不稳定，请再点一次"
    },
    "busy": {
      "ko": "잠시 뒤 다시 눌러 주세요",
      "en": "Please try again in a moment",
      "zh": "请稍后再试"
    },
    "server": {
      "ko": "잠시 문제가 생겼습니다. 다시 눌러 주세요",
      "en": "Something went wrong. Please tap again",
      "zh": "出现问题，请再点一次"
    },
    "load_fail": {
      "ko": "페이지를 불러오지 못했습니다. 새로고침해 주세요",
      "en": "Could not load the page. Please refresh",
      "zh": "页面加载失败，请刷新"
    },
    "res_done": {
      "ko": "등록이 끝났습니다",
      "en": "You are registered",
      "zh": "报名完成"
    },
    "res_again": {
      "ko": "이미 등록된 참가증입니다",
      "en": "You were already registered",
      "zh": "您已报名"
    },
    "res_mine": {
      "ko": "내 참가증",
      "en": "My pass",
      "zh": "我的参会证"
    },
    "res_no": {
      "ko": "내 참가번호",
      "en": "My number",
      "zh": "我的号码"
    },
    "save": {
      "ko": "갤러리에 저장",
      "en": "Save to gallery",
      "zh": "保存到相册"
    },
    "save_desktop": {
      "ko": "참가증 내려받기",
      "en": "Download my pass",
      "zh": "下载参会证"
    },
    "save_ok": {
      "ko": "사진첩에 저장했어요",
      "en": "Saved to Photos",
      "zh": "已保存到相册"
    },
    "save_not_yet": {
      "ko": "아직 저장하지 않았어요 — 아래 버튼을 눌러 「이미지 저장」을 고르세요",
      "en": "Not saved yet — tap the button below and choose \"Save Image\"",
      "zh": "还没有保存 — 请点下方按钮，选择“存储图像”"
    },
    "save_fail": {
      "ko": "바로 저장되지 않았어요 — 이미지를 길게 눌러 저장하세요",
      "en": "Couldn't save directly — press and hold the image to save it",
      "zh": "未能直接保存 — 请长按图片保存"
    },
    "save_android": {
      "ko": "갤러리(사진첩)의 Download 앨범에 저장됩니다 — 안 보이면 아래 버튼을 다시 누르세요",
      "en": "Saving to the Download album in your gallery — if you can't see it, tap the button below again",
      "zh": "保存到相册的 Download 相簿 — 如果看不到，请再点下方按钮"
    },
    "save_hint": {
      "ko": "저장이 안 되면 이미지를 길게 눌러 저장하거나 이 화면을 캡처하세요",
      "en": "If saving doesn't work, press and hold the image to save it, or take a screenshot",
      "zh": "无法保存时，请长按图片保存，或截取此屏幕"
    },
    "inapp_hint": {
      "ko": "이 앱에서는 바로 저장되지 않습니다. 참가증을 길게 눌러 저장하거나 다른 브라우저로 여세요",
      "en": "This app can't save files. Press and hold the pass to save it, or open this page in another browser",
      "zh": "此应用无法直接保存。请长按参会证保存，或用其他浏览器打开"
    },
    "open_browser": {
      "ko": "다른 브라우저로 열기",
      "en": "Open in another browser",
      "zh": "用其他浏览器打开"
    },
    "copied": {
      "ko": "주소를 복사했습니다. 사파리나 크롬에 붙여 넣어 여세요",
      "en": "Link copied. Paste it into Safari or Chrome",
      "zh": "链接已复制，请粘贴到 Safari 或 Chrome 打开"
    },
    "call": {
      "ko": "현장에서는 이 번호로 부릅니다",
      "en": "At the fair, we call you by this number",
      "zh": "现场将按此号码叫号"
    },
    "making": {
      "ko": "참가증을 만드는 중…",
      "en": "Making your pass…",
      "zh": "正在生成参会证…"
    },
    "next": {
      "ko": "다음 사람 입력",
      "en": "Next person",
      "zh": "录入下一位"
    },
    "not_found": {
      "ko": "참가증을 찾을 수 없습니다",
      "en": "Pass not found",
      "zh": "未找到参会证"
    },
    "home": {
      "ko": "처음 화면으로",
      "en": "Back to the form",
      "zh": "返回报名页"
    },
    "page_title": {
      "ko": "참가 등록",
      "en": "Registration",
      "zh": "报名"
    },
    "card_alt": {
      "ko": "참가증 — 참가번호 {no}",
      "en": "Pass — number {no}",
      "zh": "参会证 — 号码 {no}"
    },
    "errors": {
      "required": {
        "ko": "꼭 채워 주세요",
        "en": "This is required",
        "zh": "此项为必填"
      },
      "invalid": {
        "ko": "다시 확인해 주세요",
        "en": "Please check this",
        "zh": "请检查此项"
      },
      "too_long": {
        "ko": "너무 깁니다",
        "en": "This is too long",
        "zh": "内容过长"
      },
      "too_many": {
        "ko": "너무 많이 골랐습니다",
        "en": "Too many selected",
        "zh": "选择过多"
      },
      "not_option": {
        "ko": "목록에서 골라 주세요",
        "en": "Please choose from the list",
        "zh": "请从列表中选择"
      },
      "other_required": {
        "ko": "직접 입력 칸을 채워 주세요",
        "en": "Please type your answer",
        "zh": "请填写具体内容"
      },
      "already_registered": {
        "ko": "이미 등록된 정보입니다",
        "en": "Already registered",
        "zh": "已登记"
      }
    }
  },
  "error_code_map": {
    "_note": "서버 오류 코드(app/forms.py) → 항목 errors 의 키. 항목에 그 키가 없으면 ui.errors[서버 코드]를 쓴다.",
    "required": "required",
    "invalid": "invalid",
    "too_long": "max",
    "too_many": "max",
    "not_option": "invalid",
    "other_required": "other_required",
    "already_registered": "already_registered"
  },
  "conflict_note": "POST /api/register 409 {ok:false, code:'already_registered', field:'student_id'|'phone', errors:{field:'already_registered'}} — 학번·전화 중 하나만 기존 등록과 같을 때. 둘 다 같으면 200 existing:true 로 그 참가증이 돌아온다. 409 에는 이름·번호·토큰이 없다(남의 참가증을 못 열게).",
  "fields": [
    {
      "key": "name",
      "type": "text",
      "required": true,
      "excel_header": "이름",
      "label": {
        "ko": "이름",
        "en": "Name",
        "zh": "姓名"
      },
      "placeholder": {
        "ko": "여권에 적힌 이름 그대로",
        "en": "As shown on your passport",
        "zh": "与护照上的姓名一致"
      },
      "paper_help": {
        "ko": "여권에 적힌 이름 그대로",
        "en": "As shown on your passport",
        "zh": "与护照上的姓名一致"
      },
      "autocomplete": "name",
      "max_length": 80,
      "errors": {
        "required": {
          "ko": "이름을 적어 주세요",
          "en": "Please enter your name",
          "zh": "请填写姓名"
        },
        "max": {
          "ko": "80자 안으로 적어 주세요",
          "en": "Please keep it under 80 characters",
          "zh": "请不要超过80个字符"
        }
      }
    },
    {
      "key": "email",
      "type": "email",
      "required": true,
      "excel_header": "이메일",
      "label": {
        "ko": "이메일",
        "en": "Email",
        "zh": "电子邮箱"
      },
      "placeholder": {
        "ko": "name@example.com",
        "en": "name@example.com",
        "zh": "name@example.com"
      },
      "inputmode": "email",
      "autocomplete": "email",
      "max_length": 120,
      "errors": {
        "required": {
          "ko": "이메일을 적어 주세요",
          "en": "Please enter your email",
          "zh": "请填写电子邮箱"
        },
        "invalid": {
          "ko": "이메일 주소를 다시 확인해 주세요",
          "en": "Please check your email address",
          "zh": "请检查邮箱地址"
        }
      }
    },
    {
      "key": "phone",
      "type": "tel",
      "required": true,
      "excel_header": "전화번호",
      "label": {
        "ko": "전화번호",
        "en": "Phone number",
        "zh": "电话号码"
      },
      "placeholder": {
        "ko": "010-1234-5678",
        "en": "010-1234-5678",
        "zh": "010-1234-5678"
      },
      "inputmode": "tel",
      "autocomplete": "tel",
      "validate": {
        "digits_only": true,
        "min_digits": 8,
        "max_digits": 15,
        "kr_mobile_format": "010-0000-0000",
        "note": "숫자만 남긴 뒤: 82로 시작하는 12자리는 앞 82를 0으로(작년 4건), 10으로 시작하는 10자리는 앞에 0(작년 1건). 01로 시작하는 한국 휴대폰이면 010-0000-0000 꼴로 저장. 그 밖의 8~15자리는 받는다 — 작년 3건이 중국 휴대폰 번호였다."
      },
      "errors": {
        "required": {
          "ko": "전화번호를 적어 주세요",
          "en": "Please enter your phone number",
          "zh": "请填写电话号码"
        },
        "invalid": {
          "ko": "전화번호를 다시 확인해 주세요",
          "en": "Please check your phone number",
          "zh": "请检查电话号码"
        },
        "already_registered": {
          "ko": "이미 등록된 전화번호입니다. 처음 등록할 때 쓴 학번을 함께 적으면 그 참가증을 다시 받습니다",
          "en": "This phone number is already registered. Enter the student ID you used then to get the same pass again",
          "zh": "该电话号码已登记。填写当时使用的学号，即可重新领取同一张参会证"
        }
      }
    },
    {
      "key": "student_id",
      "type": "text",
      "required": true,
      "excel_header": "학번",
      "label": {
        "ko": "학번",
        "en": "Student ID",
        "zh": "学号"
      },
      "placeholder": {
        "ko": "20251234",
        "en": "20251234",
        "zh": "20251234"
      },
      "inputmode": "numeric",
      "autocomplete": "off",
      "validate": {
        "min_chars": 5,
        "max_chars": 20,
        "typical_digits": 8,
        "note": "inputmode numeric 은 키패드 힌트일 뿐 숫자만 강제하지 않는다. 작년 330명 중 327명이 8자리 숫자였지만 5자리 1명·숫자 아닌 값 2명이 있었다 — 8자리 숫자로 묶으면 번호를 못 받는 사람이 생긴다. 서버(app/forms.py sid_norm)는 영문·숫자만 남겨 중복·조회 키로 쓰고 5자 미만을 거부한다."
      },
      "errors": {
        "required": {
          "ko": "학번을 적어 주세요",
          "en": "Please enter your student ID",
          "zh": "请填写学号"
        },
        "invalid": {
          "ko": "학번을 다시 확인해 주세요",
          "en": "Please check your student ID",
          "zh": "请检查学号"
        },
        "already_registered": {
          "ko": "이미 등록된 학번입니다. 처음 등록할 때 쓴 전화번호를 함께 적으면 그 참가증을 다시 받습니다",
          "en": "This student ID is already registered. Enter the phone number you used then to get the same pass again",
          "zh": "该学号已登记。填写当时使用的电话号码，即可重新领取同一张参会证"
        }
      }
    },
    {
      "key": "nationality",
      "type": "select",
      "required": true,
      "excel_header": "국적",
      "label": {
        "ko": "국적",
        "en": "Nationality",
        "zh": "国籍"
      },
      "placeholder": {
        "ko": "나라를 고르세요",
        "en": "Choose your country",
        "zh": "请选择国家"
      },
      "source": "countries.json",
      "source_note": "options 에는 우선 17개국만 인라인으로 둔다. 허용 값은 countries.json 의 countries[].value 전체다 — 서버 검증도 그 파일을 읽는다. 'other' 는 없다(목록에 다 있다).",
      "groups": {
        "priority": {
          "ko": "자주 고른 나라",
          "en": "Most common",
          "zh": "常见国家"
        },
        "all": {
          "ko": "모든 나라",
          "en": "All countries",
          "zh": "所有国家"
        }
      },
      "search_placeholder": {
        "ko": "나라 이름 검색",
        "en": "Search country",
        "zh": "搜索国家"
      },
      "options": [
        {
          "value": "네팔",
          "label": {
            "ko": "네팔",
            "en": "Nepal",
            "zh": "尼泊尔"
          },
          "priority": true,
          "code": "NP",
          "freq_2025": 86
        },
        {
          "value": "중국",
          "label": {
            "ko": "중국",
            "en": "China",
            "zh": "中国"
          },
          "priority": true,
          "code": "CN",
          "freq_2025": 67
        },
        {
          "value": "방글라데시",
          "label": {
            "ko": "방글라데시",
            "en": "Bangladesh",
            "zh": "孟加拉国"
          },
          "priority": true,
          "code": "BD",
          "freq_2025": 57
        },
        {
          "value": "베트남",
          "label": {
            "ko": "베트남",
            "en": "Vietnam",
            "zh": "越南"
          },
          "priority": true,
          "code": "VN",
          "freq_2025": 54
        },
        {
          "value": "우즈베키스탄",
          "label": {
            "ko": "우즈베키스탄",
            "en": "Uzbekistan",
            "zh": "乌兹别克斯坦"
          },
          "priority": true,
          "code": "UZ",
          "freq_2025": 29
        },
        {
          "value": "파키스탄",
          "label": {
            "ko": "파키스탄",
            "en": "Pakistan",
            "zh": "巴基斯坦"
          },
          "priority": true,
          "code": "PK",
          "freq_2025": 19
        },
        {
          "value": "몽골",
          "label": {
            "ko": "몽골",
            "en": "Mongolia",
            "zh": "蒙古"
          },
          "priority": true,
          "code": "MN",
          "freq_2025": 3
        },
        {
          "value": "카자흐스탄",
          "label": {
            "ko": "카자흐스탄",
            "en": "Kazakhstan",
            "zh": "哈萨克斯坦"
          },
          "priority": true,
          "code": "KZ",
          "freq_2025": 3
        },
        {
          "value": "카메룬",
          "label": {
            "ko": "카메룬",
            "en": "Cameroon",
            "zh": "喀麦隆"
          },
          "priority": true,
          "code": "CM",
          "freq_2025": 2
        },
        {
          "value": "인도네시아",
          "label": {
            "ko": "인도네시아",
            "en": "Indonesia",
            "zh": "印度尼西亚"
          },
          "priority": true,
          "code": "ID",
          "freq_2025": 2
        },
        {
          "value": "러시아",
          "label": {
            "ko": "러시아",
            "en": "Russia",
            "zh": "俄罗斯"
          },
          "priority": true,
          "code": "RU",
          "freq_2025": 2
        },
        {
          "value": "부룬디",
          "label": {
            "ko": "부룬디",
            "en": "Burundi",
            "zh": "布隆迪"
          },
          "priority": true,
          "code": "BI",
          "freq_2025": 1
        },
        {
          "value": "브라질",
          "label": {
            "ko": "브라질",
            "en": "Brazil",
            "zh": "巴西"
          },
          "priority": true,
          "code": "BR",
          "freq_2025": 1
        },
        {
          "value": "말레이시아",
          "label": {
            "ko": "말레이시아",
            "en": "Malaysia",
            "zh": "马来西亚"
          },
          "priority": true,
          "code": "MY",
          "freq_2025": 1
        },
        {
          "value": "스리랑카",
          "label": {
            "ko": "스리랑카",
            "en": "Sri Lanka",
            "zh": "斯里兰卡"
          },
          "priority": true,
          "code": "LK",
          "freq_2025": 1
        },
        {
          "value": "프랑스",
          "label": {
            "ko": "프랑스",
            "en": "France",
            "zh": "法国"
          },
          "priority": true,
          "code": "FR",
          "freq_2025": 1
        },
        {
          "value": "튀니지",
          "label": {
            "ko": "튀니지",
            "en": "Tunisia",
            "zh": "突尼斯"
          },
          "priority": true,
          "code": "TN",
          "freq_2025": 1
        }
      ],
      "errors": {
        "required": {
          "ko": "국적을 골라 주세요",
          "en": "Please choose your nationality",
          "zh": "请选择国籍"
        }
      }
    },
    {
      "key": "grade",
      "type": "select",
      "presentation": [
        "select",
        "chips"
      ],
      "required": true,
      "excel_header": "학년",
      "presentation_note": "드롭다운이냐 버튼이냐는 디자인이 정한다. 둘 다 단일 선택이라 검증은 같다.",
      "label": {
        "ko": "학년",
        "en": "Year",
        "zh": "年级"
      },
      "placeholder": {
        "ko": "학년을 고르세요",
        "en": "Choose your year",
        "zh": "请选择年级"
      },
      "options": [
        {
          "value": "1학년",
          "label": {
            "ko": "1학년",
            "en": "1st year",
            "zh": "一年级"
          },
          "freq_2025": 67
        },
        {
          "value": "2학년",
          "label": {
            "ko": "2학년",
            "en": "2nd year",
            "zh": "二年级"
          },
          "freq_2025": 74
        },
        {
          "value": "3학년",
          "label": {
            "ko": "3학년",
            "en": "3rd year",
            "zh": "三年级"
          },
          "freq_2025": 55
        },
        {
          "value": "4학년",
          "label": {
            "ko": "4학년",
            "en": "4th year",
            "zh": "四年级"
          },
          "freq_2025": 85
        },
        {
          "value": "5학년",
          "label": {
            "ko": "5학년",
            "en": "5th year",
            "zh": "五年级"
          },
          "freq_2025": 8
        },
        {
          "value": "졸업생",
          "label": {
            "ko": "졸업생",
            "en": "Graduated",
            "zh": "已毕业"
          },
          "freq_2025": 20
        },
        {
          "value": "대학원생",
          "label": {
            "ko": "대학원생",
            "en": "Graduate student",
            "zh": "研究生"
          },
          "freq_2025": 13,
          "note": "작년 표기 12가지를 묶은 수: 대학원생·석사·Masters·Postgraduate·국제대학원·연구생 등"
        },
        {
          "value": "교환학생",
          "label": {
            "ko": "교환학생",
            "en": "Exchange student",
            "zh": "交换生"
          },
          "freq_2025": 2
        }
      ],
      "other": {
        "value": "기타",
        "input_key": "grade_other",
        "label": {
          "ko": "기타(직접 입력)",
          "en": "Other (type in)",
          "zh": "其他（请填写）"
        },
        "placeholder": {
          "ko": "직접 적어 주세요",
          "en": "Type here",
          "zh": "请填写"
        },
        "max_length": 100,
        "freq_2025": 6,
        "note": "작년 직접 입력 6건: 학년 없는 Undergraduate 표기 3 · IELTS 2 · 빈칸 1"
      },
      "errors": {
        "required": {
          "ko": "하나를 골라 주세요",
          "en": "Please choose one",
          "zh": "请选择一项"
        },
        "other_required": {
          "ko": "직접 입력 칸을 채워 주세요",
          "en": "Please type your answer",
          "zh": "请填写具体内容"
        }
      }
    },
    {
      "key": "major",
      "type": "select",
      "required": true,
      "excel_header": "학과",
      "label": {
        "ko": "학과",
        "en": "Major",
        "zh": "专业"
      },
      "placeholder": {
        "ko": "학과를 고르세요",
        "en": "Choose your major",
        "zh": "请选择专业"
      },
      "note": "작년 응답 18개 표기를 빈도순으로 그대로 둔다(2026 공식 모집단위와 다르다 — 유학생은 부산국제대학 BIC 소속으로 추정). en 은 동명대 영문 사이트·BIC 표기와 맞는 것은 그것(en_basis), 없으면 자연스러운 영어. zh 는 공식 표기가 없어 뜻을 옮긴 번역이다(학과 이름처럼 '系·学院'을 붙이지 않았다).",
      "options": [
        {
          "value": "기계자동차공학부",
          "label": {
            "ko": "기계자동차공학부",
            "en": "Mechanical and Automotive Engineering",
            "zh": "机械与汽车工程"
          },
          "freq_2025": 148,
          "en_basis": "BIC"
        },
        {
          "value": "글로벌비즈니스학과",
          "label": {
            "ko": "글로벌비즈니스학과",
            "en": "Global Business",
            "zh": "全球商务"
          },
          "freq_2025": 56,
          "en_basis": "BIC",
          "confirm": true,
          "note": "작년 응답 표기는 영어 'Global Business'. 저장 값은 한국어여야 해서(노바디) BIC 소속 학과명 '글로벌비즈니스학과'로 적었다 — 확인 필요"
        },
        {
          "value": "경영학과",
          "label": {
            "ko": "경영학과",
            "en": "Business Administration",
            "zh": "工商管理"
          },
          "freq_2025": 27,
          "en_basis": "동명대 영문 사이트"
        },
        {
          "value": "AI & 컴퓨터공학과",
          "label": {
            "ko": "AI & 컴퓨터공학과",
            "en": "AI & Computer Engineering",
            "zh": "AI与计算机工程"
          },
          "freq_2025": 21,
          "en_basis": "BIC"
        },
        {
          "value": "정보보호학과",
          "label": {
            "ko": "정보보호학과",
            "en": "Information System and Security",
            "zh": "信息系统与安全"
          },
          "freq_2025": 19,
          "en_basis": "BIC"
        },
        {
          "value": "국제통상물류학과",
          "label": {
            "ko": "국제통상물류학과",
            "en": "International Trade and Logistics",
            "zh": "国际贸易与物流"
          },
          "freq_2025": 15,
          "en_basis": "동명대 영문 사이트"
        },
        {
          "value": "유아교육학과",
          "label": {
            "ko": "유아교육학과",
            "en": "Early Childhood Education",
            "zh": "学前教育"
          },
          "freq_2025": 10,
          "en_basis": "동명대 영문 사이트"
        },
        {
          "value": "한국학과",
          "label": {
            "ko": "한국학과",
            "en": "Korean Studies",
            "zh": "韩国学"
          },
          "freq_2025": 9,
          "en_basis": "자연 영어"
        },
        {
          "value": "항만물류시스템학과",
          "label": {
            "ko": "항만물류시스템학과",
            "en": "Port Logistics System",
            "zh": "港口物流系统"
          },
          "freq_2025": 5,
          "en_basis": "동명대 영문 사이트"
        },
        {
          "value": "호텔관광학과",
          "label": {
            "ko": "호텔관광학과",
            "en": "Hotel & Tourism",
            "zh": "酒店与旅游"
          },
          "freq_2025": 4,
          "en_basis": "자연 영어"
        },
        {
          "value": "미디어커뮤니케이션학과",
          "label": {
            "ko": "미디어커뮤니케이션학과",
            "en": "Media & Communication",
            "zh": "媒体传播"
          },
          "freq_2025": 4,
          "en_basis": "자연 영어"
        },
        {
          "value": "디자인학과",
          "label": {
            "ko": "디자인학과",
            "en": "Design",
            "zh": "设计"
          },
          "freq_2025": 3,
          "en_basis": "자연 영어"
        },
        {
          "value": "컴퓨터공학과",
          "label": {
            "ko": "컴퓨터공학과",
            "en": "Computer Engineering",
            "zh": "计算机工程"
          },
          "freq_2025": 3,
          "en_basis": "BIC 하위 페이지",
          "note": "동명대 영문 사이트는 국문 컴퓨터공학과를 'Computer Science'로 적는다. 유학생 대상이라 BIC 표기를 골랐다"
        },
        {
          "value": "글로벌한국학과",
          "label": {
            "ko": "글로벌한국학과",
            "en": "Global Korean Studies",
            "zh": "全球韩国学"
          },
          "freq_2025": 2,
          "en_basis": "BIC"
        },
        {
          "value": "문화디자인경영",
          "label": {
            "ko": "문화디자인경영",
            "en": "Culture & Design Management",
            "zh": "文化设计管理"
          },
          "freq_2025": 1,
          "en_basis": "자연 영어"
        },
        {
          "value": "기술경영학과",
          "label": {
            "ko": "기술경영학과",
            "en": "Tech Management and Innovation",
            "zh": "技术管理与创新"
          },
          "freq_2025": 1,
          "en_basis": "BIC"
        },
        {
          "value": "글로벌관광학과",
          "label": {
            "ko": "글로벌관광학과",
            "en": "Global Tourism",
            "zh": "全球旅游"
          },
          "freq_2025": 1,
          "en_basis": "동명대 영문 사이트"
        },
        {
          "value": "언론영상광고학과",
          "label": {
            "ko": "언론영상광고학과",
            "en": "Journalism, Film & Advertising",
            "zh": "新闻影像广告"
          },
          "freq_2025": 1,
          "en_basis": "자연 영어"
        }
      ],
      "other": {
        "value": "기타",
        "input_key": "major_other",
        "label": {
          "ko": "기타(직접 입력)",
          "en": "Other (type in)",
          "zh": "其他（请填写）"
        },
        "placeholder": {
          "ko": "직접 적어 주세요",
          "en": "Type here",
          "zh": "请填写"
        },
        "max_length": 100
      },
      "errors": {
        "required": {
          "ko": "학과를 골라 주세요",
          "en": "Please choose your major",
          "zh": "请选择专业"
        },
        "other_required": {
          "ko": "직접 입력 칸을 채워 주세요",
          "en": "Please type your answer",
          "zh": "请填写具体内容"
        }
      }
    },
    {
      "key": "topik",
      "type": "chips",
      "required": true,
      "excel_header": "TOPIK(KIIP)",
      "label": {
        "ko": "TOPIK(KIIP)",
        "en": "TOPIK (KIIP)",
        "zh": "TOPIK（KIIP）"
      },
      "options": [
        {
          "value": "없음",
          "label": {
            "ko": "없음",
            "en": "None",
            "zh": "无"
          },
          "freq_2025": 210
        },
        {
          "value": "1급",
          "label": {
            "ko": "1급",
            "en": "Level 1",
            "zh": "1级"
          },
          "freq_2025": 50
        },
        {
          "value": "2급",
          "label": {
            "ko": "2급",
            "en": "Level 2",
            "zh": "2级"
          },
          "freq_2025": 24
        },
        {
          "value": "3급",
          "label": {
            "ko": "3급",
            "en": "Level 3",
            "zh": "3级"
          },
          "freq_2025": 20
        },
        {
          "value": "4급",
          "label": {
            "ko": "4급",
            "en": "Level 4",
            "zh": "4级"
          },
          "freq_2025": 16
        },
        {
          "value": "5급",
          "label": {
            "ko": "5급",
            "en": "Level 5",
            "zh": "5级"
          },
          "freq_2025": 6
        },
        {
          "value": "6급",
          "label": {
            "ko": "6급",
            "en": "Level 6",
            "zh": "6级"
          },
          "freq_2025": 4
        }
      ],
      "errors": {
        "required": {
          "ko": "하나를 골라 주세요",
          "en": "Please choose one",
          "zh": "请选择一项"
        }
      }
    },
    {
      "key": "plan",
      "type": "chips",
      "required": true,
      "excel_header": "앞으로의 계획",
      "label": {
        "ko": "앞으로의 계획",
        "en": "Career plan",
        "zh": "今后计划"
      },
      "options": [
        {
          "value": "한국에서 취업",
          "label": {
            "ko": "한국에서 취업",
            "en": "Work in Korea",
            "zh": "在韩国就业"
          },
          "freq_2025": 217
        },
        {
          "value": "대학원 진학",
          "label": {
            "ko": "대학원 진학",
            "en": "Graduate school",
            "zh": "读研究生"
          },
          "freq_2025": 70
        },
        {
          "value": "본국으로 귀국",
          "label": {
            "ko": "본국으로 귀국",
            "en": "Return to my home country",
            "zh": "回国"
          },
          "freq_2025": 32,
          "confirm": true,
          "note": "작년 저장 표기는 '본국으로 돌아갑니다'. 올해 선택지 초안대로 '본국으로 귀국'으로 적었다 — 작년 엑셀과 이어 볼 일이 있으면 되돌린다"
        }
      ],
      "other": {
        "value": "기타",
        "input_key": "plan_other",
        "label": {
          "ko": "기타(직접 입력)",
          "en": "Other (type in)",
          "zh": "其他（请填写）"
        },
        "placeholder": {
          "ko": "직접 적어 주세요",
          "en": "Type here",
          "zh": "请填写"
        },
        "max_length": 100,
        "freq_2025": 11,
        "note": "작년 직접 입력 11건(영어 8 · 중국어 2 등)"
      },
      "errors": {
        "required": {
          "ko": "하나를 골라 주세요",
          "en": "Please choose one",
          "zh": "请选择一项"
        },
        "other_required": {
          "ko": "직접 입력 칸을 채워 주세요",
          "en": "Please type your answer",
          "zh": "请填写具体内容"
        }
      }
    },
    {
      "key": "jobs",
      "type": "multi",
      "required": true,
      "min": 1,
      "excel_header": "희망 직무",
      "label": {
        "ko": "희망 직무",
        "en": "Jobs you want",
        "zh": "希望从事的工作"
      },
      "paper_help": {
        "ko": "1개 이상 골라 주세요",
        "en": "Choose one or more",
        "zh": "请选择一项或多项"
      },
      "note": "앞 7개는 작년 선택지(빈도순). 물류·무역 / IT·개발 / 교육은 작년 직접 입력에서 되풀이된 말을 올렸다 — 그래야 '기타'에 흩어지지 않는다. 빈도는 직접 입력 낱말 기준 재집계.",
      "options": [
        {
          "value": "사무직",
          "label": {
            "ko": "사무직",
            "en": "Office work",
            "zh": "办公室文职"
          },
          "freq_2025": 225
        },
        {
          "value": "마케팅",
          "label": {
            "ko": "마케팅",
            "en": "Marketing",
            "zh": "市场营销"
          },
          "freq_2025": 113
        },
        {
          "value": "생산직",
          "label": {
            "ko": "생산직",
            "en": "Production",
            "zh": "生产岗位"
          },
          "freq_2025": 112
        },
        {
          "value": "식당",
          "label": {
            "ko": "식당",
            "en": "Restaurant",
            "zh": "餐饮"
          },
          "freq_2025": 91
        },
        {
          "value": "호텔서비스",
          "label": {
            "ko": "호텔서비스",
            "en": "Hotel service",
            "zh": "酒店服务"
          },
          "freq_2025": 88
        },
        {
          "value": "디자인",
          "label": {
            "ko": "디자인",
            "en": "Design",
            "zh": "设计"
          },
          "freq_2025": 61
        },
        {
          "value": "CAD 등 설계",
          "label": {
            "ko": "CAD 등 설계",
            "en": "CAD drafting",
            "zh": "CAD等设计制图"
          },
          "freq_2025": 51
        },
        {
          "value": "물류·무역",
          "label": {
            "ko": "물류·무역",
            "en": "Logistics & trade",
            "zh": "物流·贸易"
          },
          "freq_2025": 11,
          "from_free_text": true,
          "note": "Logistics·국제물류·물류 관련 업무·Port and Logistics Management·무역 등"
        },
        {
          "value": "IT·개발",
          "label": {
            "ko": "IT·개발",
            "en": "IT & development",
            "zh": "IT·开发"
          },
          "freq_2025": 5,
          "from_free_text": true,
          "note": "IT·Web developer·Tech support·Security"
        },
        {
          "value": "교육",
          "label": {
            "ko": "교육",
            "en": "Education",
            "zh": "教育"
          },
          "freq_2025": 5,
          "from_free_text": true,
          "note": "교사·Teacher·老师·교육"
        }
      ],
      "other": {
        "value": "기타",
        "input_key": "jobs_other",
        "label": {
          "ko": "기타(직접 입력)",
          "en": "Other (type in)",
          "zh": "其他（请填写）"
        },
        "placeholder": {
          "ko": "직접 적어 주세요",
          "en": "Type here",
          "zh": "请填写"
        },
        "max_length": 100
      },
      "errors": {
        "required": {
          "ko": "하나 이상 골라 주세요",
          "en": "Please choose at least one",
          "zh": "请至少选择一项"
        },
        "other_required": {
          "ko": "직접 입력 칸을 채워 주세요",
          "en": "Please type your answer",
          "zh": "请填写具体内容"
        }
      }
    },
    {
      "key": "consent",
      "type": "checkbox",
      "required": true,
      "excel_header": "개인정보 동의",
      "value": "네",
      "value_note": "체크하면 저장되는 값. 작년 저장 표기 '네 (YES)'의 한국어 부분. 올해는 체크해야 번호를 준다(작년엔 '아니오' 10명도 등록됐다).",
      "label": {
        "ko": "개인정보 동의여부",
        "en": "Consent to Collect and Use Personal Information",
        "zh": "个人信息收集与使用同意"
      },
      "statement": {
        "ko": "상기 본인은 채용박람회 참가와 관련하여 성명, 연락처, 소속 등의 개인정보가 행사 운영 및 안내 등 행사 관련 목적에 한해서만 수집·이용되며, 행사 종료 후 1년 이내 파기됨을 확인하고 이에 동의하십니까? 동의를 거부할 수 있으며, 거부하면 참가증이 발급되지 않습니다.",
        "en": "I hereby consent to the collection and use of my personal information (such as name, contact details, and affiliation) solely for the purposes of managing and providing information related to this job fair. I understand that my information will be deleted within one year after the event ends. You may refuse, but a participant pass cannot be issued without consent.",
        "zh": "本人确认并同意：为参加本次招聘会，本人的姓名、联系方式、所属等个人信息仅为活动运营及通知等与活动相关的目的而收集和使用，并将在活动结束后一年内销毁。您可以拒绝同意，但拒绝后将无法领取参会证。"
      },
      "statement_source": "ko·en 은 2025 구글폼 동의 문항 머리글 그대로(구글폼 필수 표시 '*'만 뺐다), zh 는 번역. 그 뒤에 거부할 수 있다는 것과 거부하면 참가증이 안 나온다는 안내 한 줄을 붙였다(개인정보 보호법 제15조 제2항 제4호 — 작년 문구엔 없었다). ko 원문 '수집·이용'의 가운뎃점은 원래 U+2027(HYPHENATION POINT)인데 웹 글꼴(web/fonts/pretendard 서브셋)의 unicode-range 에 없어 시스템 글꼴로 새므로 화면용은 U+00B7(·)로 바꿨다. 원문은 CONSENT_2025 상수에 그대로 있다.",
      "check_label": {
        "ko": "네, 동의합니다",
        "en": "Yes, I agree",
        "zh": "是，我同意"
      },
      "errors": {
        "required": {
          "ko": "동의해야 참가증을 받을 수 있습니다",
          "en": "You need to agree to get your pass",
          "zh": "需同意后才能领取参会证"
        }
      }
    }
  ],
  "excel_columns": [
    {
      "header": "참가번호",
      "source": "system:no"
    },
    {
      "header": "등록일시",
      "source": "system:created_at"
    },
    {
      "header": "이름",
      "source": "name"
    },
    {
      "header": "국적",
      "source": "nationality"
    },
    {
      "header": "학년",
      "source": "grade"
    },
    {
      "header": "학과",
      "source": "major"
    },
    {
      "header": "학번",
      "source": "student_id"
    },
    {
      "header": "전화번호",
      "source": "phone"
    },
    {
      "header": "이메일",
      "source": "email"
    },
    {
      "header": "TOPIK(KIIP)",
      "source": "topik"
    },
    {
      "header": "앞으로의 계획",
      "source": "plan"
    },
    {
      "header": "희망 직무",
      "source": "jobs"
    },
    {
      "header": "개인정보 동의",
      "source": "consent"
    },
    {
      "header": "등록 경로",
      "source": "system:src"
    },
    {
      "header": "화면 언어",
      "source": "system:lang"
    }
  ],
  "excel_note": "계획서 「엑셀 머리글」 순서 그대로, 단 '지원 희망 기업'은 폼에서 기업을 빼며 같이 뺐다(2026-10-12). 둘째 시트 '집계'(국적·학과·학년별 인원)는 백엔드가 만든다."
}
