How to call a language specific param in 0.112.x?

I have the following:

In language.toml

[en-ph]
  languageName = "English (PH)"
  languageCode = "en-PH"
  timeZone = "Asia/Manila"
  [en-ph.params]
    languageCodeCountry = "ph"              # custom
    languageFlag = "🇵🇭"                     # custom
    tzOffset = "8h"                        # custom
    tzAbbr = "ACT"                          # custom
    tzAbbrTitle = "Asean Common Time"                        # custom

[ko]
  languageName = "한국어"
  languageCode = "ko"
  timeZone = "Asia/Seoul"
  [ko.params]
    languageCodeCountry = "kr"              # custom
    languageFlag = "🇰🇷"                     # custom
    tzOffset = "9h"                        # custom
    tzAbbr = "KST"                          # custom
    tzAbbrTitle = "Korea Standard Time"                        # custom

In a template file:

{{ if .IsTranslated -}}
  {{ range .Translations }}
    <div class="item">
      <a href="{{ .Permalink }}" lang="{{ or (.Site.LanguageCode) (.Site.Language.Lang) }}" class="large-flag" title="{{ .Site.Language.LanguageName }}">{{ site.Params.languageflag }}</a>
    </div>
  {{ end }}
{{ else }}
  {{ range .Site.Languages }}
    {{ if not (eq .Lang $.Site.Language.Lang) }}
      <div class="item">
        <span class="large-flag no-lang" title="{{ .Params.LanguageName }}">{{ site.Params.languageflag }}</span>
      </div>
    {{ end }}
  {{ end }}
{{ end }}

Or,

{{ if .IsTranslated -}}
  {{ range .Translations }}
    <li><a rel="alternate" href="{{ .RelPermalink }}" hreflang="{{ site.LanguageCode | default .Lang }}" lang="{{ site.LanguageCode | default .Lang }}">{{ .Language.LanguageName }}</a> {{ site.Params.languageflag }} </li>
  {{ end -}}
{{ else -}}
  {{ range site.Languages -}}
    {{ if ne site.Language.Lang .Lang }}
      <li><a rel="alternate" href="{{ .Lang | relURL }}" hreflang="{{ .Params.LanguageCode | default .Lang }}" lang="{{ .Params.LanguageCode | default .Lang }}">{{ .LanguageName }}</a> {{ site.Params.languageflag }} </li>
    {{ end -}}
  {{ end -}}
{{ end -}}

In the old way, we can use something like{{ .Site.Language.Params.languageflag }}, where .Site.Language does the magic.

In the new way, {{ site.Params.languageflag }} is displaying the Page’s current language, do we need to enclose {{ site.Params.languageflag }} in an if-then-else statement?

Trying to wrap my head around the new method. Or, maybe range the language params or something.

Hah, my brain is not working. I’m curretly focused on preparing for my new job. LOL.

Ahh, duh.

Instead of using site.Params I switched to .Site.Params.

A good sleep can do wonders.

/headbang

Those two things are the same. You must have had a different problem. Or something.

Ahh, that’s weird then.

I get different results.

Here’s the code:

<ul class="navbar">site.Params:
  {{ if .IsTranslated -}}
    {{ range .Translations }}
      <li><a href="{{ .Permalink }}" lang="{{ .Site.LanguageCode }}" title="{{ .Site.Language.LanguageName }}">{{ .Site.Language.LanguageName }}</a> {{ site.Params.languageflag }}</li>
    {{ end }}
  {{ else }}
    {{ range .Site.Languages }}
      {{ if ne .Lang $.Site.Language.Lang }}
        <li><a href="{{ .Permalink }}" lang="{{ .Site.LanguageCode }}" title="{{ .Site.Language.LanguageName }}">{{ .Site.Language.LanguageName }}</a> {{ site.Params.languageflag }}</li>
      {{ end }}
    {{ end }}
  {{ end }}
</ul>

<ul class="navbar">.Site.Params:
  {{ if .IsTranslated -}}
    {{ range .Translations }}
      <li><a href="{{ .Permalink }}" lang="{{ .Site.LanguageCode }}" title="{{ .Site.Language.LanguageName }}">{{ .Site.Language.LanguageName }}</a> {{ .Site.Params.languageflag }}</li>
    {{ end }}
  {{ else }}
    {{ range .Site.Languages }}
      {{ if ne .Lang $.Site.Language.Lang }}
        <li><a href="{{ .Permalink }}" lang="{{ .Site.LanguageCode }}" title="{{ .Site.Language.LanguageName }}">{{ .Site.Language.LanguageName }}</a> {{ .Site.Params.languageflag }}</li>
      {{ end }}
    {{ end }}
  {{ end }}
</ul>

I get this: https://hugo-test-site.pages.dev

site.Params - pulls in the Page’s current language while
.Site.Params - pulls in the correct language param from the translation range

It’s the same with another site with a different theme (no online version yet, I haven’t uploaded it).

Test site repo: GitHub - techmagus/hugo-test-site: YourOnly.One's Hugo Test Site

Yeah, OK, that makes sense. Within the range you needed the site associated with current iteration, not the site associated with the page itself.

1 Like

In general:

  • A language configuration configures a language and (mainly) a Site
  • So, all config sections on the language config section that also exists on the Site config will be merged into the Site
  • The above includes Params, so every param in .Site.Params is language specific (to put it simply)

With Hugo 0.112.0 we removed lots of complexity in this area (which is always good) and we may also have broken some sites that relied on some undocumented behaviour that we didn’t think about.

1 Like

Yep, it’s a good thing.

And it’ll show us where to change and upgrade. Like in my case :slight_smile:

1 Like

This topic was automatically closed 2 days after the last reply. New replies are no longer allowed.