벙커키즈
경력근거: 9개국 유저 모두가 자기 언어로 몰입할 수 있는 다국어 UX
※ 실제 산출물이 아닌 AI 예측 시안입니다.
위프는 한국과 일본을 중심으로 9개국에서 서비스하고, 9개국 유저 모두가 자기 언어로 몰입하는 다국어 UX 가 팀이 지금 푸는 문제로 적혀 있습니다. 문구가 웹과 iOS, 안드로이드 단일 코드베이스를 타고 한꺼번에 나가기 때문에, 한 자리가 비면 세 플랫폼에서 같은 순간에 드러납니다. 게다가 위프의 문구에는 닉네임과 캐릭터 이름처럼 유저가 지은 말이 들어가는 자리가 많아, 글자를 그대로 세는 점검으로는 잘리는 자리를 못 잡습니다. 그 가정 길이를 표로 들고 재는 점검이 위프 같은 제품에서 뜻을 가지는 이유입니다. 이 포트폴리오가 보여주는 것은 자리와 나라를 짝지어 훑는 규칙, 치환을 거친 길이 계산, 그리고 그 결과를 읽는 화면입니다. 번역 품질 판단이나 각 나라 시장의 운영 전문성은 주장하지 않습니다. 태국어 문구가 자연스러운지, 인도네시아에서 어떤 말이 먹히는지는 번역자와 현지 담당의 몫으로 둡니다.
팀이 지금 푸는 문제 여덟 줄 가운데 한 줄이 9개국 유저의 다국어 경험이고, 일본 시장 고도화가 새 장르 출시와 나란히 진행 중입니다. 나라를 늘리는 쪽과 화면을 바꾸는 쪽이 동시에 움직이면 문구가 비는 자리는 사람이 눈으로 세기 어렵습니다.
단일 코드베이스로 세 플랫폼을 함께 내보내고 프론트엔드는 React 기반 SPA 에 하이브리드 앱이 얹힌 구조입니다. 문구 하나가 세 화면에 같이 나가므로 칸을 넘치면 세 곳에서 한꺼번에 잘립니다.
우대사항에 다국어 서비스 운영 경험이 적혀 있고, 리드타임 단축과 사용자 부정 경험 최소화가 모든 의사결정의 기준입니다. 내보내기 직전에 자동으로 도는 점검이 그 두 기준에 동시에 닿습니다.
화면 자리마다 어느 나라 말이 반드시 있어야 하는지 적은 표와 지금 등록된 문구 목록을 받아, 자리와 나라를 짝지어 한 칸씩 확인합니다. 문구 길이는 글자를 그대로 세지 않고 닉네임이나 일수처럼 실행할 때 값이 들어가는 자리를 가정 길이로 바꿔 센 뒤 칸 너비와 견줍니다. 한국어 원문을 고친 시각이 다른 나라 문구보다 나중이면 옛 문구가 그대로 나가는 자리로 세우고, 어느 화면도 가져다 쓰지 않는 문구는 따로 모아, 운영 담당자가 나라별 빌드를 내보내기 전에 손볼 곳을 정합니다.
위프를 나라별로 내보내기 전에 문구를 점검하는 콘텐츠 운영 담당자
나라를 늘리는 일과 화면을 고치는 일이 같은 주에 벌어지면 문구는 자리마다 다른 속도로 채워집니다. 자리와 나라를 짝지어 매번 훑고 길이까지 재면 손볼 곳이 다섯 갈래로 나뉘고, 내보낸 뒤 그 나라 유저가 영어 화면을 마주하는 일이 줄어듭니다.
화면 자리 표와 문구 목록, 값이 들어가는 자리의 가정 길이 표를 올리면 자리와 나라마다 다섯 판정 중 하나가 붙고 사유별로 나오는 관리자 페이지입니다. 문구는 저장소에서 이미 내보낸 표 형태를 받는다고 두고 시작하며, 실제 화면 렌더링 폭 측정은 다루지 않습니다.
자리와 나라를 짝지은 문구 480건에 손으로 매긴 정답 판정을 붙여 자동 판정과 대조하고 사유별 일치율을 냅니다. 2주차부터 GCP 로 배포해 운영 담당자가 웹 주소로 들어와 자기 문구 파일을 올려 봅니다.
판정을 나라별 빌드 파이프라인의 검사 단계로 붙여 내보낼 때마다 자동으로 돌리고, 필수 나라 문구가 비어 있으면 그 목록을 빌드 결과에 세워 두는 단계입니다.
담당자가 문구 목록과 화면 자리 표를 올리면 손볼 자리가 사유별로 화면에 나오는 과정을 시연합니다.
자리와 나라를 짝지은 480칸을 하나씩 열어 제가 정답 판정을 붙인 뒤, 자동 판정과 사유까지 맞춰 봅니다. 문구도 정답도 제가 채운 합성 기준이라, 이 값이 말하는 것은 화면이 도는 조건이지 현지화 성능이 아닙니다.
표가 망가진 30가지 경우를 먼저 올려 봅니다. 고친 시각 칸이 비었거나 가정 길이 표에 없는 자리가 문구에 들어 있거나 나라 목록 칸이 통째로 빈 자리가 와도 화면이 서고, 길이를 셀 수 없는 문구는 판정 자리 대신 hedge 로 내려갑니다.
문구 2만 줄·자리 1천 건을 올렸을 때 판정이 끝나는 시간을 재고, 내보낼 때마다 돌려도 되는 범위인지 봅니다.
일치율도 처리 시간도 제가 채운 문구 표 위에서 나온 자가채점 값입니다. 태국 유저가 첫 화면에서 앱을 덜 지웠는지는 위프의 나라별 설치 이후 기록을 붙여야 알 수 있고, 지금은 그 기록이 없어 일치율과 처리 시간만 적었습니다. 정답 서식과 평가 러너는 그 기록이 붙는 날 바로 쓰도록 먼저 만들어 두었습니다.
문구 480건의 정답을 제가 직접 매겼으니, 사유별 일치율은 제 판단과 제 규칙이 어긋나지 않았다는 확인이지 현지화 품질의 성능 수치가 아닙니다. 위프의 실제 문구 파일과 화면 자리 표가 들어와야 이 화면이 쓸 만한지 알 수 있습니다.
깨끗하게 채운 표만 넣으면 이 화면은 늘 옳은 답을 냅니다. 그래서 고친 시각이 비어 있는 줄, 칸 너비와 글자 수가 똑같은 문구, 어느 자리도 쓰지 않는 문구 같은 경계 케이스를 일부러 섞어 두었습니다.
이 포트폴리오는 자리와 나라를 짝짓는 규칙과 길이 계산, 그 결과를 읽는 화면을 보여줍니다. 번역 품질 판단이나 각 나라 시장 운영의 깊이는 주장하지 않습니다. 판정은 짝짓기와 글자 수 비교가 하고 모델은 번역자에게 넘길 문장만 씁니다.
칸을 넘침은 글자 수로 잰 값이라 실제 화면과 어긋날 수 있습니다. 같은 글자 수라도 태국어는 위아래로 획이 붙고 일본어는 폭이 넓어, 이 판정은 확정이 아니라 담당자가 실제 화면에서 열어 볼 후보로 냅니다.
실제 위프의 문구에는 성별이나 수량에 따라 갈라지는 문장과 나라마다 다른 어순 자리가 있습니다. 여기서는 한 자리에 한 문구만 다루므로, 갈라지는 문장을 붙이는 일은 운영 과제로 둡니다.
① 인라인 샘플 · ② seed.json 다운로드 · ③ 증강 프롬프트. 세 층 모두 동일한 schema 에서 파생.
지금 저장소에 등록된 화면 문구 목록입니다. 판정의 대상 표이며, 고친 시각 칸이 비어 있는 줄과 어느 자리도 쓰지 않는 문구를 담아 값이 모자란 채로도 판정이 서는 경로를 보여줍니다.
| line_no | string_key | locale | text | updated_at | translator |
|---|---|---|---|---|---|
| UI-00401 | chat.send_button | ko | 보내기 | 2026-09-01T10:00:00 | loc.kim |
| UI-00402 | chat.send_button | ja | いますぐメッセージを送信する | 2026-09-02T11:00:00 | loc.sato |
| UI-00403 | chat.send_button | en | Send | 2026-09-01T10:05:00 | loc.kim |
| UI-00404 | chat.typing_hint | ko | 캐릭터가 입력 중입니다 | 2026-09-01T10:10:00 | loc.kim |
| UI-00410 | onboard.title | ko | 당신만의 캐릭터를 만들어 보세요 | 2026-09-14T09:00:00 | loc.kim |
아래 JSON Schema 에 맞는 화면 문구 행을 더 만들어 주세요. {"type":"object","properties":{"line_no":{"type":"string"},"string_key":{"type":"string"},"locale":{"type":"string"},"text":{"type":"string"},"updated_at":{"type":["string","null"]},"translator":{"type":["string","null"]}},"required":["line_no","string_key","locale","text","updated_at","translator"]} 쉬운 데이터만 만들지 말 것 — 다음 하드 케이스를 의도적으로 섞어라: (1) updated_at 이 null 인 줄, (2) 같은 string_key 인데 한국어보다 고친 시각이 앞선 다른 나라 줄, (3) screen_slots 에 없는 string_key 를 가진 줄, (4) 칸 너비와 글자 수가 똑같은 문구. 나라 코드는 ko·ja·en·th·id·vi·es·pt·zh-TW 중에서 쓰고, 생성한 행은 반드시 위 스키마를 통과해야 하며, 형식을 깨뜨리는 시도는 별도로 3건만 표시해 두세요.{"type":"object","properties":{"line_no":{"type":"string"},"string_key":{"type":"string"},"locale":{"type":"string"},"text":{"type":"string"},"updated_at":{"type":["string","null"]},"translator":{"type":["string","null"]}},"required":["line_no","string_key","locale","text","updated_at","translator"]}화면 자리마다 칸 너비와 반드시 있어야 하는 나라를 적은 기준 표입니다. 나라 목록은 쉼표로 이어 적혀 있어 자리와 나라를 짝지을 때 풀어서 씁니다.
| slot_id | screen_name | string_key | max_chars | required_locales |
|---|---|---|---|---|
| SL-0101 | 대화 화면 | chat.send_button | 10 | ko,ja,en |
| SL-0102 | 대화 화면 | chat.typing_hint | 24 | ko,ja |
| SL-0110 | 온보딩 | onboard.title | 28 | ko,ja,en,th |
| SL-0111 | 온보딩 | onboard.cta | 12 | ko,ja |
| SL-0120 | 결제 | paywall.subtitle | 32 | ko,ja |
아래 JSON Schema 에 맞는 화면 자리 행을 더 만들어 주세요. {"type":"object","properties":{"slot_id":{"type":"string"},"screen_name":{"type":"string"},"string_key":{"type":"string"},"max_chars":{"type":"integer","minimum":1},"required_locales":{"type":"string"}},"required":["slot_id","screen_name","string_key","max_chars","required_locales"]} 쉬운 데이터만 만들지 말 것 — 다음 하드 케이스를 의도적으로 섞어라: (1) required_locales 에 나라가 하나만 적힌 자리, (2) max_chars 가 열 자 아래인 좁은 자리, (3) 같은 string_key 를 쓰는 자리가 둘 이상인 경우, (4) ui_strings 에 문구가 한 줄도 없는 자리. 생성한 행은 반드시 위 스키마를 통과해야 합니다.{"type":"object","properties":{"slot_id":{"type":"string"},"screen_name":{"type":"string"},"string_key":{"type":"string"},"max_chars":{"type":"integer","minimum":1},"required_locales":{"type":"string"}},"required":["slot_id","screen_name","string_key","max_chars","required_locales"]}문구 안에서 실행할 때 값이 들어가는 자리의 가정 길이를 적은 계수 표입니다. 화면에 뜰 글자 수는 이 가정 길이로 바꿔 세며 판정은 그 값으로 합니다.
| token | token_label | assumed_len | token_note |
|---|---|---|---|
| {nickname} | 유저 닉네임 | 6 | 위프 닉네임 길이 분포에서 위쪽 10%에 해당하는 길이를 씁니다. |
| {days} | 연속 대화 일수 | 3 | 세 자리까지 늘어나는 값이라 가장 긴 쪽으로 잡습니다. |
| {character} | 캐릭터 이름 | 8 | 창작자가 붙이는 이름이라 길이가 넓게 퍼집니다. |
| {count} | 남은 회차 수 | 3 | 세 자리까지 잡습니다. |
| {price} | 표시 금액 | 7 | 엔화와 루피아 표기가 원화보다 길어 가장 긴 쪽을 씁니다. |
아래 JSON Schema 에 맞는 가정 길이 행을 더 만들어 주세요. {"type":"object","properties":{"token":{"type":"string"},"token_label":{"type":"string"},"assumed_len":{"type":"integer","minimum":0},"token_note":{"type":"string"}},"required":["token","token_label","assumed_len","token_note"]} 쉬운 데이터만 만들지 말 것 — 다음 하드 케이스를 의도적으로 섞어라: (1) assumed_len 이 한 자리인 자리, (2) 나라마다 길이가 크게 갈려 가장 긴 쪽으로 잡은 자리, (3) 이름이 서로 비슷해 사람이 헷갈리는 자리 쌍. 자리 이름은 중괄호로 감싸고, 생성한 행은 반드시 위 스키마를 통과해야 합니다.{"type":"object","properties":{"token":{"type":"string"},"token_label":{"type":"string"},"assumed_len":{"type":"integer","minimum":0},"token_note":{"type":"string"}},"required":["token","token_label","assumed_len","token_note"]}| TypeScript | 화면 자리 표와 판정 결과의 타입을 한 곳에 정의해 앱 쪽 문구 키와 점검 화면이 같은 이름을 씁니다. |
| React | 사유별 목록과 자리 하나를 펼쳐 보는 상세, 나라별 채움 현황을 그리는 화면입니다. |
| Vue | 같은 문구 키를 쓰는 별도 랜딩 페이지가 Vue 로 되어 있다고 두고, 점검 대상 자리 표를 두 프레임워크에서 같은 형식으로 뽑아내는 수집기를 만듭니다. |
| Svelte | 판정 결과를 사내 위키에 붙이는 가벼운 위젯을 Svelte 로 만들어, 화면 코드가 달라도 같은 결과 형식을 읽는지 확인합니다. |
| Python | 자리와 나라를 짝지어 훑는 판정 엔진과 길이 계산을 담는 언어입니다. |
| Go | 내보내기 파이프라인이 부르는 검사 명령을 Go 로 만들어 빌드 단계에서 빠르게 돌립니다. |
| GCP | 2주차부터 배포와 운영을 맡습니다. 판정 결과와 올린 문구 파일을 Cloud Storage 에 남기고 Cloud Run 으로 점검 화면을 띄웁니다. |
| CI/CD | 3주차에 판정을 나라별 빌드 파이프라인의 검사 단계로 붙여 내보낼 때마다 자동으로 돌립니다. |
| LLM | 판정이 정해진 뒤 잘리거나 빈 자리를 운영 담당자가 번역자에게 그대로 넘길 한 문장으로 바꿉니다. |
✗ fail → 실제로는 잘리지 않는 자리가 절반을 넘으면 칸 너비를 글자 수 대신 화면에서 잰 값으로 다시 받습니다.
✓ pass → 가정 길이가 대체로 맞으면 2주차 정답 대조와 GCP 배포로 넘어갑니다.
✗ fail → 어긋난 자리를 모아 가정 길이 표와 시각 비교 기준을 다시 봅니다.
✓ pass → 겹침이 높으면 3주차 나라별 빌드 연결로 넘어갑니다.
위 예측 UI 는 3주차까지 완주했을 때의 화면입니다. 1주차에 실제로 만드는 것은 아래 표시된 화면 하나입니다.
verdict사유 라벨 · target_no + 한 줄 요약(근거 수치 포함)화면·코드·면접에서 이 단어를 그대로 씁니다. 키는 출력 스키마의 enum 과 같습니다.
그 나라 말로 채워짐채워짐번역이 없음번역 없음칸을 넘침칸 넘침원문이 바뀐 뒤 그대로원문 뒤처짐쓰이지 않는 문구안 쓰는 문구화면 자리와 나라를 짝지은 한 칸이, 또는 어느 자리도 쓰지 않는 문구 한 줄이 어떤 판정을 받는지 남기는 형식입니다. 판정은 규칙이 정하고 번역자에게 넘길 한 문장만 모델이 씁니다.
{"type":"object","properties":{"target_no":{"type":"string"},"target_kind":{"type":"string","enum":["화면 자리","등록된 문구"]},"slot_id":{"type":["string","null"]},"line_no":{"type":["string","null"]},"string_key":{"type":"string"},"locale":{"type":["string","null"]},"verdict":{"type":"string","enum":["그 나라 말로 채워짐","번역이 없음","칸을 넘침","원문이 바뀐 뒤 그대로","쓰이지 않는 문구"]},"shown_chars":{"type":["integer","null"],"description":"화면에 실제로 뜨는 글자 수입니다. text 의 글자 수에서 안에 든 placeholder_spec.token 의 글자 수를 빼고 그 token 의 assumed_len 을 더해 구합니다. 견줄 문구가 없으면 비웁니다."},"max_chars":{"type":["integer","null"]},"evidence":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"agg":{"type":["string","null"]},"value":{}},"required":["field","value"]}},"summary":{"type":"string"},"hedge":{"type":["string","null"]}},"required":["target_no","target_kind","string_key","verdict","shown_chars","evidence","summary"]}[
{
"target_no": "SL-0110:th",
"target_kind": "화면 자리",
"slot_id": "SL-0110",
"line_no": null,
"string_key": "onboard.title",
"locale": "th",
"verdict": "번역이 없음",
"shown_chars": null,
"max_chars": 28,
"evidence": [
{
"field": "slot_id",
"value": "SL-0110"
},
{
"field": "screen_name",
"value": "온보딩"
},
{
"field": "required_locales",
"value": "ko,ja,en,th"
},
{
"field": "line_no",
"agg": "count",
"value": 0
}
],
"summary": "온보딩 첫 화면 제목이 태국어로 등록되지 않아 태국 유저는 첫 화면에서 영어를 봅니다.",
"hedge": null
},
{
"target_no": "SL-0140:ja",
"target_kind": "화면 자리",
"slot_id": "SL-0140",
"line_no": "UI-00441",
"string_key": "profile.greeting",
"locale": "ja",
"verdict": "칸을 넘침",
"shown_chars": 26,
"max_chars": 24,
"evidence": [
{
"field": "line_no",
"value": "UI-00441"
},
{
"field": "text",
"value": "{nickname}さん、おかえりなさい。今日も話しませんか"
},
{
"field": "token",
"value": "{nickname}"
},
{
"field": "assumed_len",
"value": 6
},
{
"field": "max_chars",
"value": 24
}
],
"summary": "프로필 인사말의 일본어 문구는 닉네임 자리를 여섯 글자로 놓고 세면 26자라 칸 24자에서 뒷말이 잘립니다.",
"hedge": "닉네임이 여섯 글자보다 짧은 유저에게는 잘리지 않으므로, 닉네임 길이 가정을 바꾸면 이 판정도 바뀝니다."
},
{
"target_no": "SL-0120:ja",
"target_kind": "화면 자리",
"slot_id": "SL-0120",
"line_no": "UI-00421",
"string_key": "paywall.subtitle",
"locale": "ja",
"verdict": "원문이 바뀐 뒤 그대로",
"shown_chars": 9,
"max_chars": 32,
"evidence": [
{
"field": "line_no",
"value": "UI-00421"
},
{
"field": "updated_at",
"value": "2026-08-02T10:00:00"
},
{
"field": "updated_at",
"value": "2026-09-18T14:00:00"
},
{
"field": "text",
"value": "今なら初月無料です"
}
],
"summary": "결제 화면 한국어 문구를 9월 18일에 고쳤는데 일본어는 8월 2일 그대로라 일본 유저는 옛 혜택 문구를 봅니다.",
"hedge": null
},
{
"target_no": "UI-00460",
"target_kind": "등록된 문구",
"slot_id": null,
"line_no": "UI-00460",
"string_key": "story.tag_thriller",
"locale": "ko",
"verdict": "쓰이지 않는 문구",
"shown_chars": 3,
"max_chars": null,
"evidence": [
{
"field": "line_no",
"value": "UI-00460"
},
{
"field": "string_key",
"value": "story.tag_thriller"
},
{
"field": "text",
"value": "스릴러"
},
{
"field": "slot_id",
"agg": "count",
"value": 0
}
],
"summary": "스릴러 태그 문구는 어느 화면 자리도 가져다 쓰지 않아 번역 예산만 따라붙습니다.",
"hedge": "새 장르를 준비하며 미리 넣어 둔 문구일 수 있어, 지울지 남길지는 담당자가 장르 계획과 함께 정합니다."
},
{
"target_no": "SL-0130:id",
"target_kind": "화면 자리",
"slot_id": "SL-0130",
"line_no": "UI-00432",
"string_key": "story.tag_romance",
"locale": "id",
"verdict": "그 나라 말로 채워짐",
"shown_chars": 8,
"max_chars": 12,
"evidence": [
{
"field": "line_no",
"value": "UI-00432"
},
{
"field": "text",
"value": "Romantis"
},
{
"field": "max_chars",
"value": 12
},
{
"field": "required_locales",
"value": "ko,ja,id"
}
],
"summary": "캐릭터 목록의 로맨스 태그는 인도네시아어로 여덟 글자라 칸 12자 안에 들어갑니다.",
"hedge": null
},
{
"target_no": "SL-0150:en",
"target_kind": "화면 자리",
"slot_id": "SL-0150",
"line_no": "UI-00451",
"string_key": "settings.lang_label",
"locale": "en",
"verdict": "그 나라 말로 채워짐",
"shown_chars": 8,
"max_chars": 14,
"evidence": [
{
"field": "line_no",
"value": "UI-00451"
},
{
"field": "text",
"value": "Language"
},
{
"field": "updated_at",
"value": null
},
{
"field": "max_chars",
"value": 14
}
],
"summary": "설정 화면 언어 라벨은 영어로 여덟 글자라 칸 14자 안에 들어갑니다.",
"hedge": "고친 시각 칸이 비어 있어 한국어 원문보다 앞선 문구인지는 견주지 못했습니다."
},
{
"target_no": "SL-0141:ko",
"target_kind": "화면 자리",
"slot_id": "SL-0141",
"line_no": "UI-00470",
"string_key": "profile.streak_note",
"locale": "ko",
"verdict": "그 나라 말로 채워짐",
"shown_chars": 15,
"max_chars": 15,
"evidence": [
{
"field": "line_no",
"value": "UI-00470"
},
{
"field": "text",
"value": "{days}일 연속 대화 중입니다"
},
{
"field": "token",
"value": "{days}"
},
{
"field": "assumed_len",
"value": 3
},
{
"field": "max_chars",
"value": 15
}
],
"summary": "연속 대화 안내는 일수 자리를 세 글자로 놓고 세면 15자라 칸 15자에 꼭 맞습니다.",
"hedge": null
}
][자동 검증 · 코드가 판정합니다] 1. verdict 가 다섯 값 중 하나이고 target_kind 가 화면 자리와 등록된 문구 두 값 중 하나인지 확인합니다. 판정 값은 규칙이 채우므로 모델이 목록 밖 값을 적으면 그 응답을 버립니다. 2. target_no 와 target_kind, string_key, verdict, shown_chars, evidence, summary 일곱 칸이 빠짐없이 있는지 확인합니다. 3. max_chars 가 1 이상이고 assumed_len 이 0 이상인지 확인합니다. 4. shown_chars 가 text 의 글자 수에서 안에 든 token 의 글자 수를 빼고 그 token 의 assumed_len 을 더한 값과 같은지 다시 계산합니다. 자리가 여럿 들어 있으면 자리마다 같은 계산을 더합니다. 5. 번역이 없음은 그 자리의 required_locales 를 쉼표로 풀어 나온 나라에 대해 같은 string_key 의 ui_strings.locale 이 없는지 다시 계산합니다. 6. 칸을 넘침은 shown_chars 가 그 자리의 max_chars 보다 큰지 다시 계산합니다. 두 값이 같으면 칸 안에 들어간 것으로 둡니다. 7. 원문이 바뀐 뒤 그대로는 같은 string_key 의 한국어 updated_at 이 그 나라 updated_at 보다 나중인지 다시 계산합니다. 다만 둘 중 하나가 비어 있으면 견주지 않고 그 사실을 hedge 에 적습니다. 8. 쓰이지 않는 문구는 그 줄의 string_key 가 screen_slots.string_key 어디에도 없는지 다시 계산합니다. 9. evidence 의 field 가 ui_strings·screen_slots·placeholder_spec 세 표에 실재하는 컬럼인지 대조합니다. 세 표에 없는 이름이 나오면 요약을 모델이 지어냈다는 뜻이라 규칙이 만든 기본 문장으로 되돌립니다. 10. evidence 에 적은 value 가 그 행 원문 값과 같은지 봅니다. 한 행이 아니라 여러 행을 세어 나온 수치라면 agg 를 달아 그렇다고 밝힙니다. 11. summary 는 번역자에게 넘어가는 문장이므로 존댓말 한 문장으로 닫히는지 봅니다. [평가 러너 · 2주차] 손으로 매긴 정답 판정 480건과 자동 판정을 대조해 사유별 일치율을 내고, 어긋난 자리는 따로 모아 가정 길이 표를 다시 잡을지 정합니다. 무작위로 문구를 지우거나 길게 늘인 표를 만들어 심은 개수와 잡은 개수를 견주는 일도 이 러너에서 합니다. [수동 검증 · 사람이 봅니다] 1. 칸을 넘침으로 걸린 자리 20건을 실제 화면에서 열어 정말 잘리는지 담당자가 확인하고 가정 길이를 조정합니다. 2. 쓰이지 않는 문구로 걸린 줄을 모아 새 장르를 준비하며 미리 넣어 둔 것인지 정리 대상인지 정합니다.