多言語サイトしたい(.Site.Languages
)
1defaultContentLanguage = "ja"
2defaultContentLanguageInSubdir = true
3
4[languages]
5 [languages.ja]
6 languageCode = "ja"
7 languageName = "日本語"
8 title = "日本語のサイト名"
9 weight = 0
10 [languages.en]
11 languageCode = "en"
12 languageName = "English"
13 title = "英語のサイト名"
14 weight = 10
Hugoはデフォルトで多言語サイトに対応できます。
全体設定でデフォルトの言語と言語別サブディレクトリの設定を定義します。
デフォルトの言語はen
(英語)です。
サイトで使用する言語の設定は[languages]
セクションで定義します。
日本語は[languages.ja]
、フランス語は[languages.fr]
で設定できます。
言語ごとの詳細設定は、それぞれの言語セクションの中で定義します。
languageCode
はRFC5646で定義されている言語コードをすべて小文字で設定します
多言語コンテンツを作成したい
Hugoでは、ファイル名を基準にした方法と、サブディレクトリ名を基準にした方法で多言語に対応するコンテンツを管理できます。 どちらを選択するかは、作成する用途に合わせて決めることになると思います。 それぞれに一長一短あると思いますが、混ぜるのは危険です(たぶん)。
ファイル名で管理したい
全体設定に追記することはとくにありません。
コンテンツファイルの名前を以下のように{ファイル名}.{言語名}.md
にします。
{言語名}
を省略した場合は、デフォルトの言語に設定されます。
/content/about.ja.md # {BaseURL}/ja/about/
/content/about.en.md # {BaseURL}/en/about/
とくに理由がなければ、多言語コンテンツのファイル名は揃えるとよいです。
これらは、自動で言語スイッチャーに登録されます。
ファイル名が異なる場合でも、frontmatterで同じtranslationKey
を設定することで、異なる言語間の関係を張ることができます。
サブディレクトリ名で管理したい(contentDir
)
1[languages]
2 [languages.ja]
3 languageCode = "ja"
4 languageName = "日本語"
5 title = "日本語のサイト名"
6 contentDir = "content/ja"
7 weight = 0
8 [languages.en]
9 disabled = false
10 languageCode = "en"
11 languageDirection = "ltr"
12 languageName = "English"
13 title = "英語のサイト名"
14 contentDir = "content/en"
15 weight = 10
言語ごとの詳細設定でcontentDir
を指定します。
コンテンツ数が多くなる場合は、こちらの方法がよいかもしれません。
翻訳ページを表示したい
{{ if .IsTranslated }}
<h4>{{ i18n "translations" }}<h4>
<ul>
{{ range .Translations }}
<li>
<a href="{{ .Permalink }}">{{ .Lang }}: {{ .Title }}{{ if .IsPage }}({{ i18n "wordCount" . }}){{ end }}</a>
</li>
{{ end }}
</ul>
{{ end }}
上記サンプルは公式ページからの写経です。
.IsTranslated
で翻訳コンテンツがあるかを確認して、順序なしリスト(ul
)で表示します。
翻訳コンテンツは{{ .Translations }}
に格納されています。
{{ range .Translations }}...{{ end }}
で、関連する翻訳コンテンツ(のオブジェクト)をループし、
それぞれのコンテンツのURL({{ .Permalink }}
)、言語名({{ .Lang }}
)、ページのタイトル({{ .Title }}
)を取り出して表示します。
ページ型(.IsPage
)の場合は、さらに本文の文字数({{ .wordCount }}
)も表示します。