テンプレートを多言語化したい(/i18n/

{{ i18n "見出し文字列" }}
{{ i18n "read_more" }}    <!-- つづきを読む / Read more -->
{{ i18n "word_count" }}   <!-- ○単語 / ○ words -->
{{ i18n "reading_time" }} <!-- ○分で読めます / ○ minutes read -->

lang.Translate関数を使って、テンプレートを多言語化できます。 この関数はi18nTのエイリアス名で使うことが多いです。

テンプレートで使う一部の文字列を多言語対応したい場合に使います。 たとえば、記事の詳細をクリックするボタンの表示を日本語では「つづきを読む」、英語では「Read More」とできます。

翻訳するために、Hugoの所定の位置に翻訳ファイルを配置し、その中に翻訳の対応表を定義します。

翻訳ファイルを作成したい

i18n/
 |--- ja.toml      # 日本語
 |--- en.toml      # 英語
 |--- de.toml      # ドイツ語
 |--- fr.toml      # フランス語
 |--- zh-tw.toml   # 中国語-台湾(繁体字)

翻訳ファイルは/i18n/ディレクトリに配置します。 ファイル名は言語コードにします。

翻訳したい

 1# /i18n/ja.toml
 2[read_more]
 3other = "つづきを読む"
 4
 5[word_count]
 6one = "1文字"
 7other = "{{ .Count }}文字"
 8
 9[reading_time]
10one = "1分で読めます"
11other = "{{ .Count }}分で読めます"
 1# /i18n/en.toml
 2[read_more]
 3other = "Read More"
 4
 5[word_count]
 6one = "One word"
 7other = "{{ .Count }} words"
 8
 9[reading_time]
10one = "One minute read"
11other = "{{ .Count }} minutes read"

冒頭のサンプルに対応した日英の翻訳ファイルのサンプルです。 i18n関数の引数に指定した見出し文字列をセクション名にします。 セクション内のフィールドはCLDR Language Plural RulesCategoryカラムの文字列を指定できます。

単数形/複数形による数え方の変化は日本語だとあまり馴染みがないかもしれません。 上記のルールを確認しても、日本語はotherしかありません。 英語の場合はoneotherの他にtwofewを設定することで、 「1st」、「2nd」、「3rd」、「4th」・・・という表記に対応できます。

注釈

日本語も「いち」「に」「さん」・・・を「ひとつ」「ふたつ」「みっつ」・・・と数えたりするので「馴染みがない」というのは不正確かもしれません。 むしろバリエーションが多すぎて、ルールとして規定できないというのが正しいのかも?