이 문서는 다음 유지보수자를 위한 인수인계 기록이다.
이번 패스의 핵심은 문자열, 메뉴, 언어 URL 정책을 모두 중앙화해서, 나중에 언어가 더 늘어나도 같은 규칙으로 확장할 수 있게 만든 것이다.
이번 패스의 핵심 수정
1) 메뉴의 단일 원본을 config/_default/hugo.toml 로 이동
파일:
config/_default/hugo.toml
변경 내용:
[[menus.main]]을 한 곳에만 두어 전체 언어가 같은 메뉴 정의를 공유하도록 정리했다.identifier는 번역 키와 동일하게 유지했다.pageRef기반으로 현재 언어의 대응 페이지를 자동 연결하도록 정리했다.
중요한 이유:
- 메뉴 문구를 언어 파일마다 복제하지 않아도 된다.
- 새 언어를 추가해도 메뉴 구조는 한 번만 수정하면 된다.
2) 언어 메타 파일은 최소 정보만 유지
파일:
config/_default/languages.ko.tomlconfig/_default/languages.en.tomlconfig/_default/languages.jp.tomlconfig/_default/languages.cn.toml
변경 내용:
- 언어별 메타, 로케일, 콘텐츠 경로, 정렬 순서만 남겼다.
- 메뉴 블록은 제거하고
hugo.toml의 중앙 메뉴 정의만 사용한다. - 기본 언어가
/ko/같은 서브디렉터리로 노출되는지는 언어 파일이 아니라hugo.toml이 제어한다.
중요한 이유:
- 언어 설정과 메뉴 설정의 책임이 분리된다.
- 언어 파일은 콘텐츠 경로와 표시 메타만 책임지게 된다.
3) 기본 언어도 하위 경로를 쓰도록 URL 정책을 고정
파일:
config/_default/hugo.toml
변경 내용:
defaultContentLanguageInSubdir = true로 바꿔서 기본 언어도/ko/같은 언어 접두사를 갖도록 정리했다.disableDefaultLanguageRedirect = false를 명시해 루트(/) 접근 시 기본 언어 서브디렉터리로 안내하는 동작을 유지했다.content/ko,content/en,content/jp,content/cn구조는 그대로 두고, URL 접두사만 전역 설정으로 통제하게 했다.
중요한 이유:
content/ko로 분리해 두었더라도, 기본 언어는 설정값이false면 루트(/)로 노출되는 것이 Hugo 기본 동작이다.- 폴더 구조가 잘못된 것이 아니라 URL 정책이 루트 우선으로 되어 있었던 것이다.
- 이후 사이트가 커져도 언어별 URL 규칙이 흔들리지 않는다.
4) 로케일별 퍼머링크는 front matter 의 slug / url 로 조절
파일:
- 각 언어의 콘텐츠 파일들
변경 내용:
- 번역된 페이지는 동일한 translationKey 로 묶고, 필요할 때만
slug나url로 언어별 경로를 분리할 수 있다. - 섹션 페이지는
url중심으로 관리하는 편이 안전하다. - 일반 페이지는
slug로 로케일별 URL 을 개별화할 수 있다.
중요한 이유:
- 언어별 문서 제목이 같아도 URL 은 독립적으로 제어할 수 있다.
- 나중에 콘텐츠가 늘어도 하드코딩 없이 경로 정책을 유지할 수 있다.
5) 번역 문자열의 실제 원본을 theme i18n 으로 통합
파일:
themes/(0000-0000-0000-0001)/i18n/en.yamlthemes/(0000-0000-0000-0001)/i18n/ko.yamlthemes/(0000-0000-0000-0001)/i18n/jp.yamlthemes/(0000-0000-0000-0001)/i18n/cn.yaml
변경 내용:
- 프로젝트 루트
i18n/은 비워 둔 상태로 정리했다. - 텍스트와 메뉴 라벨은 테마 i18n 이 1순위가 되도록 맞췄다.
home,blog,categories,tags,about,contact같은 기본 내비게이션 문자열은 언어별로 교체 가능하게 유지한다.
중요한 이유:
- 페이지 본문과 UI 문구의 책임이 분리된다.
- 번역은 콘텐츠, 공통 라벨은 테마로 모여서 유지보수가 쉬워진다.
이번 패스에서 확인한 트리 구조
content/
└─ ko/
├─ _index.md
├─ about/_index.md
├─ blog/
│ ├─ _index.md
│ └─ theme-upgrade-lab/
│ ├─ _index.md
│ ├─ 00-full-coverage.md
│ ├─ 01-foundation/
│ │ ├─ _index.md
│ │ ├─ design-tokens.md
│ │ ├─ color-surface.md
│ │ ├─ layout-spacing.md
│ │ └─ typography-language.md
│ ├─ 02-components/
│ │ ├─ _index.md
│ │ ├─ controls-cards.md
│ │ ├─ cta-shortcode.md
│ │ └─ media-figure.md
│ ├─ 03-rendering/
│ │ ├─ _index.md
│ │ ├─ markdown-rendering.md
│ │ ├─ shortcode-composition.md
│ │ └─ edge-cases.md
│ ├─ 04-architecture/
│ │ ├─ _index.md
│ │ ├─ taxonomy-navigation.md
│ │ └─ bundles-resources/
│ │ ├─ index.md
│ │ ├─ cover.svg
│ │ └─ diagram.svg
│ ├─ 05-operations/
│ │ ├─ _index.md
│ │ ├─ update-log.md
│ │ ├─ upgrade-summary.md
│ │ └─ verification-log.md
│ └─ 06-public-posts/
│ ├─ _index.md
│ ├─ 01-productivity-routine.md
│ ├─ 02-budget-guide.md
│ ├─ 03-weekend-cleanup.md
│ └─ 04-travel-checklist.md
├─ categories/_index.md
├─ contact/_index.md
└─ tags/_index.md
주의사항
- 디자인은 페이지 내부에서 고정 수치를 늘리지 말고,
theme-vars.css계층을 먼저 바꿔야 한다. config/_default/params.toml은 중앙 정책의 원본이지, 개별 페이지 전용 색상표가 아니다.- 언어별 콘텐츠는 같은 트리 구조를 유지해야 번역/비교/검증이 쉬워진다.
배포 전 마지막 확인
- 홈, 소개, 연락, 블로그 목록이 모두 열리는가
- 토큰 페이지의 색상/간격/폰트/반경이 실제 화면에서 보이는가
- CTA, figure, collapse, raw HTML, ltr/rtl 이 모두 정상 동작하는가
- page bundle 리소스가 상대 경로로 깨지지 않는가