ruby-handlebarsのプレースホルダーに日本語を使いたい
handlebarsって便利ですよね。
さてプレースホルダー {{hoge}}
に日本語を使いたい場面などありませんか?
ありませんか。まあ普通はそうです。
しかし私にはそんなタイミングがあったのです。
handlebars.rbでは使えたのですが、さすがにこれはもう古すぎですし、V8エンジンが必要だとかでRails7で使うには面倒です。
そこでruby-handlebarsを使いたいわけですが、こちらは何と日本語に対応していません。
例えば{{名前}}
等を使うと、下記エラーが発生します。
Extra input after last repetition at line 1 char 1. (Parslet::ParseFailed)
そこで何とかしていきたいと思います。
環境
Service | Version |
---|---|
Ruby | 3.2.2 |
Ruby on Rails | 7.0.8 |
ruby-handlebars | 0.4.1 |
原因
ruby-HandlebarsではParslet::Parser
を継承したHandlebars::Parser
にルールを定義してparseしています。
しかしここに日本語用のルールが無いためエラーが発生しています。
対応
日本語のルールが無いのであれば、追加すればよいのです。
ということでモンキーパッチを当てていきます。
config/initialize/handlebars.rb
module Handlebars class Parser # 日本語を含む識別子のための新しいルール # \p{Han} は漢字、\p{Hiragana} はひらがな、\p{Katakana} はカタカナを表します rule(:japanese_identifier) { match['\p{Han}\p{Hiragana}\p{Katakana}\-a-zA-Z0-9_\?'].repeat(1) } # 既存のidentifierルールを拡張 rule(:identifier) { (else_kw >> space? >> dccurly).absent? >> japanese_identifier } end end
以上デース