Skip to content

feat: migrate exampleSite to multilingual content directories#138

Merged
htnabe merged 5 commits into
devfrom
feat/add-multilingual-support-6langs
May 23, 2026
Merged

feat: migrate exampleSite to multilingual content directories#138
htnabe merged 5 commits into
devfrom
feat/add-multilingual-support-6langs

Conversation

@htnabe
Copy link
Copy Markdown
Owner

@htnabe htnabe commented May 23, 2026

Overview

This PR migrates the example site content to language-based directories and expands multilingual coverage to additional languages.
It also updates language switching behavior/tests and adds localized content/i18n resources for the new language set.

Changes

  • Reorganized exampleSite/content into per-language directories via contentDir in exampleSite/config/_default/languages.yaml
  • Added/updated multilingual pages (about, author, privacy) and post content for:
    • de, es, fr, hi, ko, zh-cn, zh-tw
  • Added i18n files:
    • i18n/de.yaml, i18n/es.yaml, i18n/fr.yaml, i18n/hi.yaml, i18n/ko.yaml, i18n/zh-cn.yaml, i18n/zh-tw.yaml
  • Added localized params.author.career entries by language in languages.yaml
  • Updated docs for language-directory content organization:
    • docs/guidance/getting-started.en.md
    • docs/guidance/getting-started.ja.md
    • docs/develop/project-structure.md
  • Updated header language-switcher spacing and language-switcher e2e tests for maintainability

Related Issues

N/A

Checklist

  • Self-review done (following review.prompt.md)
  • Hugo production build passes: cd exampleSite && hugo --gc --minify
  • Docs updated if behavior changed
  • No unrelated changes included

Notes for Reviewers

  • Validation run locally:
    • npm test (pass)
    • npm run test:e2e (pass)
  • Playwright/Hugo run shows deprecation warnings for Hugo language keys (languageCode/languageName and related template fields). These are not introduced as breaking changes in this PR but may need follow-up migration to locale/label.

Copilot AI review requested due to automatic review settings May 23, 2026 16:54
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR migrates the theme’s exampleSite content to per-language content directories (via contentDir) and expands multilingual coverage, including updated language-switcher UI spacing and E2E test expectations.

Changes:

  • Reorganized exampleSite/content into language-based directories and updated exampleSite/config/_default/languages.yaml to use contentDir per language.
  • Added localized content pages/posts and i18n resources for additional languages (de/es/fr/hi/ko/zh-cn/zh-tw).
  • Updated the header language-switcher spacing and strengthened Playwright E2E assertions around language switcher behavior.

Findings

  • Major
    • tests/e2e/navigation.spec.ts: The new toBaseLanguageCode() logic collapses region tags (e.g. zh-cn/zh-tw) and can miss real hreflang/lang mismatches between region variants. (comment ID: 001)
  • Nit
    • exampleSite/content/fr/privacy.md: Missing expected French diacritics/accents in user-facing text. (comment ID: 002)
    • exampleSite/content/es/privacy.md: Missing expected Spanish diacritics/accents in user-facing text. (comment ID: 003)
    • exampleSite/config/_default/languages.yaml: French career string missing accent in “ingénieur”. (comment ID: 004)

Reviewed changes

Copilot reviewed 57 out of 71 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
tests/e2e/navigation.spec.ts Updates language-switcher E2E tests and adds zh-cn navigation coverage.
layouts/partials/header.html Adds consistent horizontal spacing (px-1) for header nav items including the language dropdown.
i18n/de.yaml Adds German UI translations for theme strings.
i18n/es.yaml Adds Spanish UI translations for theme strings.
i18n/fr.yaml Adds French UI translations for theme strings.
i18n/hi.yaml Adds Hindi UI translations for theme strings.
i18n/ko.yaml Adds Korean UI translations for theme strings.
i18n/zh-cn.yaml Adds Simplified Chinese UI translations for theme strings.
i18n/zh-tw.yaml Adds Traditional Chinese UI translations for theme strings.
exampleSite/config/_default/languages.yaml Defines contentDir per language and localizes author career entries by language.
docs/guidance/getting-started.en.md Documents language-directory content organization using contentDir.
docs/guidance/getting-started.ja.md Documents language-directory content organization using contentDir.
docs/develop/project-structure.md Updates project structure docs to reflect language-based content directories.
exampleSite/content/posts/tech/choosing-fonts-for-the-web.md Removes the non-language-scoped version of the post (moved into language dirs).
exampleSite/content/en/about.md Adds English About page under language directory.
exampleSite/content/en/author.md Adds English Author page under language directory.
exampleSite/content/en/privacy.md Adds English Privacy page under language directory.
exampleSite/content/en/posts/daily/protect-environment.md Adds an English Daily post under language directory.
exampleSite/content/en/posts/math/matrix.md Adds an English Math post under language directory.
exampleSite/content/en/posts/review/head-light.md Adds an English Review post under language directory.
exampleSite/content/en/posts/tech/hello-world.md Adds an English Tech post under language directory.
exampleSite/content/ja/about.md Adds Japanese About page under language directory.
exampleSite/content/ja/author.md Adds Japanese Author page under language directory.
exampleSite/content/ja/privacy.md Adds Japanese Privacy page under language directory.
exampleSite/content/ja/posts/daily/protect-environment.md Adds a Japanese Daily post under language directory.
exampleSite/content/ja/posts/math/matrix.md Adds a Japanese Math post under language directory.
exampleSite/content/ja/posts/review/head-light.md Adds a Japanese Review post under language directory.
exampleSite/content/ja/posts/tech/choosing-fonts-for-the-web.md Adds a Japanese Tech post under language directory.
exampleSite/content/ja/posts/tech/hello-world.md Adds a Japanese Tech post under language directory.
exampleSite/content/ko/about.md Adds Korean About page under language directory.
exampleSite/content/ko/author.md Adds Korean Author page under language directory.
exampleSite/content/ko/privacy.md Adds Korean Privacy page under language directory.
exampleSite/content/ko/posts/daily/protect-environment.md Adds a Korean Daily post under language directory.
exampleSite/content/ko/posts/tech/choosing-fonts-for-the-web.md Adds a Korean Tech post under language directory.
exampleSite/content/ko/posts/tech/hello-world.md Adds a Korean Tech post under language directory.
exampleSite/content/de/about.md Adds German About page under language directory.
exampleSite/content/de/author.md Adds German Author page under language directory.
exampleSite/content/de/privacy.md Adds German Privacy page under language directory.
exampleSite/content/de/posts/daily/protect-environment.md Adds a German Daily post under language directory.
exampleSite/content/de/posts/tech/choosing-fonts-for-the-web.md Adds a German Tech post under language directory.
exampleSite/content/de/posts/tech/hello-world.md Adds a German Tech post under language directory.
exampleSite/content/fr/about.md Adds French About page under language directory.
exampleSite/content/fr/author.md Adds French Author page under language directory.
exampleSite/content/fr/privacy.md Adds French Privacy page under language directory.
exampleSite/content/fr/posts/daily/protect-environment.md Adds a French Daily post under language directory.
exampleSite/content/fr/posts/tech/choosing-fonts-for-the-web.md Adds a French Tech post under language directory.
exampleSite/content/fr/posts/tech/hello-world.md Adds a French Tech post under language directory.
exampleSite/content/es/about.md Adds Spanish About page under language directory.
exampleSite/content/es/author.md Adds Spanish Author page under language directory.
exampleSite/content/es/privacy.md Adds Spanish Privacy page under language directory.
exampleSite/content/es/posts/daily/protect-environment.md Adds a Spanish Daily post under language directory.
exampleSite/content/es/posts/tech/choosing-fonts-for-the-web.md Adds a Spanish Tech post under language directory.
exampleSite/content/es/posts/tech/hello-world.md Adds a Spanish Tech post under language directory.
exampleSite/content/hi/about.md Adds Hindi About page under language directory.
exampleSite/content/hi/author.md Adds Hindi Author page under language directory.
exampleSite/content/hi/privacy.md Adds Hindi Privacy page under language directory.
exampleSite/content/hi/posts/daily/protect-environment.md Adds a Hindi Daily post under language directory.
exampleSite/content/hi/posts/tech/choosing-fonts-for-the-web.md Adds a Hindi Tech post under language directory.
exampleSite/content/hi/posts/tech/hello-world.md Adds a Hindi Tech post under language directory.
exampleSite/content/zh-cn/about.md Adds Simplified Chinese About page under language directory.
exampleSite/content/zh-cn/author.md Adds Simplified Chinese Author page under language directory.
exampleSite/content/zh-cn/privacy.md Adds Simplified Chinese Privacy page under language directory.
exampleSite/content/zh-cn/posts/daily/protect-environment.md Adds a Simplified Chinese Daily post under language directory.
exampleSite/content/zh-cn/posts/tech/choosing-fonts-for-the-web.md Adds a Simplified Chinese Tech post under language directory.
exampleSite/content/zh-cn/posts/tech/hello-world.md Adds a Simplified Chinese Tech post under language directory.
exampleSite/content/zh-tw/about.md Adds Traditional Chinese About page under language directory.
exampleSite/content/zh-tw/author.md Adds Traditional Chinese Author page under language directory.
exampleSite/content/zh-tw/privacy.md Adds Traditional Chinese Privacy page under language directory.
exampleSite/content/zh-tw/posts/daily/protect-environment.md Adds a Traditional Chinese Daily post under language directory.
exampleSite/content/zh-tw/posts/tech/choosing-fonts-for-the-web.md Adds a Traditional Chinese Tech post under language directory.
exampleSite/content/zh-tw/posts/tech/hello-world.md Adds a Traditional Chinese Tech post under language directory.

Comment thread tests/e2e/navigation.spec.ts Outdated
Comment on lines +4 to +5
const toBaseLanguageCode = (code: string) => code.toLowerCase().split("-")[0];

Comment thread exampleSite/content/fr/privacy.md Outdated
Comment thread exampleSite/content/es/privacy.md Outdated
Comment thread exampleSite/config/_default/languages.yaml Outdated
htnabe and others added 3 commits May 24, 2026 01:59
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Copilot finished work on behalf of htnabe May 23, 2026 17:02
@htnabe htnabe merged commit 61b1e1f into dev May 23, 2026
3 checks passed
@htnabe htnabe deleted the feat/add-multilingual-support-6langs branch May 23, 2026 17:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants