Obsidianの言語設定と曜日表記について

DailyNoteに曜日を日本語で表示をしたかったのがきっかけで少し調べてみた。普段はあまりJavaScriptを書かなく、Obsidianの中身もあまり詳しくないので、変なところやもっと簡単な方法があったら教えてください。

言語設定による曜日の表示の違い

普通にDailyNoteプラグインのtemplateに

{{date:YYYY年M月D日(ddd)}}

と書くと、Obsidianの言語設定によって出力が下記のように変わってしまう。

英語
2022年9月1日(Thu)

日本語
2022年9月1日(木)

自分はコマンドパレットの補完がアルファベットで済むように、言語設定を英語にしている。しかし、DailyNoteの表示には、より直感的な日本語で曜日を表示したい。
(最近、ぷーおんさんのObsidianでつなげる情報管理術 を読んで機能をちゃんと使い出した)

日時関連のライブラリ

どうしたもんかとTemplateプラグインのDateのドキュメントを見ると、細かいフォーマットの指定はmoment.jsのドキュメントへ飛ばされる。内部ではこれを使っているのだろう。読み進めると、ローカライズもできるようになっている。

テンプレート拡張ライブラリ

この辺をいじるのはプラグインを作らなきゃいけないかなと思いきや、前述のぷーおんさん本で知ったTemplater というテンプレート機能を拡張するプラグインを使えば何とかなるかもと思い、いじってみる。

同じくDate周りのドキュメントを見ると当然ながらmoment.jsを使っている。テンプレートの中でmomentオブジェクトを触れそうなのでやってみる。localeを"ja"にしてあげるだけ。(日付の算出方法はぷーおんさん本を参照させていただきました)

<%* moment.locale("ja"); %># {{date:YYYY年M月D日}}(<% tp.date.now("ddd", 0, tp.file.title, "YYYY-MM-DD") %>)

とすると、「2022年9月1日(木)」と表示される。

シンプルに実装する

これで良いかと思いつついじっていると、どうもmomentオブジェクトはObsidianが生きている限り存在して、その後もlocaleを変えたものが使われているようだ。変に他に影響するのも嫌なのでもっとシンプル実装をしてみた。さっきのはただmoment.jsと遊びたかっただけなのである。

日付から曜日が何番目かの数字(0~6)が取れるので、それに対応する日本語を用意してあげるだけ。

わかりやすく改行を入れるとこんな感じ。

<%* 
    weekdays = ["日", "月", "火", "水", "木", "金", "土"]; 
    weekday = weekdays[tp.date.now("d", 0, tp.file.title, "YYYY-MM-DD")] 
%>
# {{date:YYYY年M月D日}}(<% weekday %>)

テンプレート中に改行入れると、ファイルを作るときも改行が入ってしまうので一行にするとこんな感じ。

<%* weekdays = ["日", "月", "火", "水", "木", "金", "土"]; weekday = weekdays[tp.date.now("d", 0, tp.file.title, "YYYY-MM-DD")] %># {{date:YYYY年M月D日}}(<% weekday %>) 

まとめ

というわけで、ちょっとだけObsidianの中に触れてみました。
Templater を使うとJavaScriptが埋め込めるので、ちょっとした処理を入れるのに便利そうです。全体に影響を与えるようなものは思わぬ不具合を起こすので気をつけましょう。

何度も登場した、ぷーおんさんの本はObsidianに興味がある方、もっと深く使ってみたい方、知的生産に興味のある方など幅広くおすすめです。

ブックカタリストのぷーおんさん会もおすすめです。熱いです。


この記事が気に入ったらサポートをしてみませんか?