Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/gurusabarish/hugo-profile/llms.txt

Use this file to discover all available pages before exploring further.

Hugo Profile supports multilingual sites out of the box with built-in translation files for English, Spanish, and French. All UI strings — navigation labels, section headings, button text, and more — are driven by Hugo’s i18n system, making it straightforward to serve your portfolio in multiple languages from a single codebase.

Built-in Languages

The theme ships with translation files for three languages:
CodeLanguageFile
enEnglishi18n/en.toml
esEspañoli18n/es.toml
frFrançaisi18n/fr.toml

Setting Up Multiple Languages

To enable multilingual support, add a languages block to your hugo.yaml. Each language entry sets a display name, sort weight, and content directory:
defaultContentLanguage: "en"
defaultContentLanguageInSubdir: false

languages:
  en:
    languageName: "English"
    weight: 1
    contentDir: "content"
    menu:
      main:
        - identifier: blog
          name: Blog
          title: Blog posts
          url: /blogs
          weight: 1
  es:
    languageName: "Español"
    weight: 2
    contentDir: "content/es"
    menu:
      main:
        - identifier: blog
          name: Blog
          title: Publicaciones del blog
          url: /es/blogs
          weight: 1
  fr:
    languageName: "Français"
    weight: 3
    contentDir: "content/fr"
    menu:
      main:
        - identifier: blog
          name: Blog
          title: Articles de blog
          url: /fr/blogs
          weight: 1
  • defaultContentLanguage — the language served at the root URL (e.g., /).
  • defaultContentLanguageInSubdir — when true, the default language is also served from a subpath such as /en/. Defaults to false.

Language-Specific Content and Params

Each language can override any params value — hero text, about content, experience entries, and more. These overrides live under languages.<lang>.params and are merged on top of the global params block at build time:
languages:
  es:
    contentDir: "content/es"
    languageName: "Español"
    weight: 2
    params:
      hero:
        intro: "Hola, mi nombre es"
        title: "Isabella."
        subtitle: "Construyo cosas para la web"
      about:
        title: "Sobre Mí"
        content: "Soy una desarrolladora de software..."
      contact:
        content: "Mi bandeja de entrada siempre está abierta."
        btnName: Escríbeme
Sections that can be overridden per language include: hero, about, experience, education, projects, achievements, and contact.

Language Switcher

When two or more languages are configured, Hugo Profile automatically renders a language switcher dropdown in the navbar. No additional configuration is needed — the dropdown appears as soon as multiple languages are detected.

Translation File Structure

The i18n files use Hugo’s TOML translation format. Below is the complete set of keys from i18n/en.toml:
# Navigation
[nav_about]
other = "About"

[nav_experience]
other = "Experience"

[nav_education]
other = "Education"

[nav_projects]
other = "Projects"

[nav_achievements]
other = "Achievements"

[nav_contact]
other = "Contact"

[search_placeholder]
other = "Search..."

# Section headings
[about]
other = "About Me"

[experience]
other = "Experience"

[education]
other = "Education"

[projects]
other = "Projects"

[achievements]
other = "Achievements"

[contact]
other = "Get in Touch"

# Contact form
[contact_email_placeholder]
other = "Enter your email"

[contact_message_placeholder]
other = "Enter your message"

# Footer
[recent_posts]
other = "Recent Posts"

# Common terms
[read]
other = "Read"

[toc]
other = "Table Of Contents"

[tags]
other = "Tags"

[social]
other = "Social"

[copyright]
other = "All Rights Reserved"

[email_text]
other = "Check out this site"

[page_not_found]
other = "Page not found"

[min_read]
other = "min read"

Adding a New Language

1

Create a translation file

Create i18n/de.toml in your site root (not inside the theme directory) and add translations for all keys. For example:
[nav_about]
other = "Über uns"

[nav_experience]
other = "Erfahrung"

[nav_education]
other = "Ausbildung"

[nav_projects]
other = "Projekte"

[nav_achievements]
other = "Leistungen"

[nav_contact]
other = "Kontakt"

[search_placeholder]
other = "Suchen..."

[min_read]
other = "Min. Lesezeit"

# Add all other keys from en.toml...
2

Register the language in hugo.yaml

Add an entry under the languages block with the language name, weight, and content directory:
languages:
  de:
    languageName: "Deutsch"
    weight: 4
    contentDir: "content/de"
3

Create language-specific content (optional)

Place your translated Markdown files under content/de/. For example, content/de/blogs/mein-post.md will be served at /de/blogs/mein-post/.If no language-specific content directory is provided, Hugo will fall back to the default language content.

Overriding Specific Translations

To change individual strings without creating or modifying an i18n file, use params.terms in hugo.yaml. These values take precedence over the i18n lookup. The full set of overridable term keys is:
params:
  terms:
    read: "Read"
    toc: "Table Of Contents"
    tags: "Tags"
    social: "Social"
    copyright: "All rights reserved"
    emailText: "Check out this site"
    pageNotFound: "Page not found"
KeyUsed in
read”Read” button on list page and footer cards
tocTable of contents heading on single posts
tagsTags section heading on single posts
socialSocial share heading on single posts
copyrightFooter copyright notice
emailTextEmail share link body text
pageNotFound404 page heading and image alt text
params.terms overrides apply globally across all languages. If you need language-specific overrides, use the i18n files — one per language — rather than params.terms.

Further Reading

For advanced multilingual features such as translation linking, language-specific menus, and URL structures, refer to the Hugo Multilingual Documentation.

Build docs developers (and LLMs) love