akimo.dev

Hugo で Disqus を多言語対応させる

結論

window.disqus_config = function() {
	this.language = '{{ .Lang }}';
}

解説

Disqus 公式のヘルプを見ると、

var disqus_config = function () {
	this.language = "ja";
};

このように言語設定を上書きできるとあります。

なので HTML テンプレートのどこかに

var disqus_config = function () {
	this.language = '{{ .Lang }}';
};

こう書いておけば基本的には良いんですが、これだと hugo --minify した時に変数名 disqus_config が短縮されて違う名前になってしまうので意味が無くなります。

しかし、JavaScript におけるグローバル変数は window オブジェクトのプロパティとして扱えるので以下のような書き方が可能です。

window.disqus_config = function() {
	this.language = '{{ .Lang }}'
}

これなら minify しても名前が変わってしまうことはありません。

参考:

Global object (グローバルオブジェクト) - MDN Web Docs 用語集: ウェブ関連用語の定義 | MDN
developer.mozilla.org

おまけ

Hugo には公式の Disqus テンプレートがありますが、そこでも var disqus_config が使われていたのでプルリクを送ったところマージされました。 ショボいけど初めて OSS に直接コントリビュートできたので嬉しいです。

Change `disqus_config` to `window.disqus_config` by akimon658 · Pull Request #9550 · gohugoio/hugo
github.com