n8nを日本語で使う:画面の言語、日本語化の現状と、日本語データでつまずくところ

公開 書いた人 大林 諒

n8nの画面を日本語にできるのか、日本語のデータを流すとどこで詰まるのかを1本にまとめました。結論は、2026年10月時点の安定版2.44.7に日本語の画面はなく、英語のまま使うのが一番早いです。日本語のデータで詰まるのはCSVの文字コード、全角半角、時差、メールの送信者名、正規表現といった決まった場所だけで、どれも直せます。例は「問い合わせ受付」ワークフロー(フォーム→Googleスプレッドシート「問い合わせ一覧」→Slackの #問い合わせ)で、作り方そのものは「n8nの使い方入門:最初のワークフローを作って動かす」にあります。

この記事の内容
  1. 先に決めること
  2. 画面の言語の今(2.44.7)
  3. 英語の画面のまま迷わないための対応表
  4. 日本語のデータで詰まるところ
  5. ブラウザの翻訳で画面を訳すときの注意
  6. 応用
  7. できないことと、その代わり
  8. よく詰まるところ
  9. 次にやること

先に決めること

画面は英語のまま使う

公式の日本語訳がなく、設定で切り替える方法もないので、日本語化の方法を探すより英語に慣れたほうが早く終わります。毎日出てくる単語は限られています。このコラムも画面の文言は英語の表示そのままで書いています。

時刻の基準を日本時間にする

n8nの時刻は、インスタンス全体、ワークフローごと、コンテナのOSの3か所で決まります。何もしないとアメリカ東部時間(America/New_York)で動きます。最初にインスタンス全体を Asia/Tokyo にし、ワークフローごとの設定は空のままにしておくのが、運用していて一番混乱しない形です。

外とやり取りする文字コードはUTF-8に揃える

n8nの中は全部UTF-8です。Shift_JISが出てくるのは古い基幹システムや会計ソフトのCSVくらいなので、入口でUTF-8に直し、出口で要るときだけ戻すと決めておけば、途中で文字コードを気にせずに済みます。

表記ゆれは入口で1回だけ直す

全角半角や空白のゆれをノードごとに直すと、直し漏れが必ず出ます。きっかけの直後に整えるノードを1つ置き、以降はそこから値を取ります。

画面の言語の今(2.44.7)

n8n 2.44.7 に同梱の、画面の文言を持つ @n8n/i18n(2.44.x)には、英語の en.json が1つあるだけです(文言はおよそ9,600件)。GitHubの packages/frontend/@n8n/i18n/src/locales も、2026年10月26日時点で en.json とそのテスト用のファイルだけです。公式ドキュメント docs.n8n.io も英語だけです。

N8N_DEFAULT_LOCALE は何をするか

N8N_DEFAULT_LOCALE は画面の言語を決める環境変数です。初期値は en で、de のような2文字の言語コードを入れます。de-AT のような地域付きの書き方は使えません。英語以外を指定すると、その言語の訳を探して表示し、訳が無い文言は英語に戻ります。

つまり N8N_DEFAULT_LOCALE=ja を入れても、日本語の訳がどこにも無いので見た目は変わりません。2.44.7の中身では、英語以外のときに増える動きはノードとCredentialの訳のファイルを読みに行くことだけで、そのファイルも同梱されていません。

訳は、ボタンやメニューの文言(言語ごとに1ファイル)と、ノード・Credentialの設定項目(ノードごとに1ファイル)の2段に分かれます。訳を足す手順の説明は、ソースコードから自分でビルドして起動する前提で書かれています。

日本語の訳が入らない理由

有志が日本語の訳を作り、公式に取り込むよう提案したことはあります。2025年10月に出た日本語の訳の提案(GitHubのPull Request #21208)は、取り込まれないまま2026年8月に閉じられました。2025年1月の中国語の提案(#12457)では、n8nの担当者が「今は編集画面の翻訳を受け付けていない」と書いて閉じています。この方針のままなら、公式の日本語の画面が近いうちに出る見込みは薄いです。

Cloudとセルフホストの違い

項目n8n Cloudセルフホスト
画面の言語英語のみ英語のみ
N8N_DEFAULT_LOCALE設定する場所がない設定できるが、訳が無いので変わらない
個人設定(Personal settings)名前・パスワード・2段階認証・Theme(配色)。言語の項目はない同じ
自分で訳を当てるできないソースから自分でビルドすればできる
タイムゾーンCloudの管理画面「Instance settings」の「Runtime」環境変数 GENERIC_TIMEZONE と TZ
Personal settingsの画面。Personalizationの欄にThemeだけがあり、言語の項目がない
Personal settingsの画面。Personalizationの欄にThemeだけがあり、言語の項目がない

自分で訳を当てるのはやめておく

セルフホストなら、en.json を写した ja.json に訳を書いてビルドすれば日本語の画面は作れます。ただし文言は約9,600件あり、n8nは月に何度も版が上がって文言が変わります。毎回自分でビルドし直すことになり、脆弱性の修正が出てもすぐには上げられません。公式以外が配る、訳を当てた版も同じ理由で本番には向きません。版の上げ方は「n8nを止めずに運用する:アップデート・バックアップ・エラー通知・脆弱性」にまとめています。

英語の画面のまま迷わないための対応表

運用で毎日目にする英語はこの程度です(2.44.7の画面)。

画面の英語出てくる場所意味
Overview左のメニュー全ワークフロー・Credential・実行の一覧
Personal左のメニュー自分専用の置き場
Create workflowOverviewの右上ワークフローを新しく作る
Add first step…空のキャンバスの中央最初のノード(きっかけ)を置く
Search nodes…ノードパネルの上ノードを名前で探す
On a scheduleきっかけの一覧決まった時刻に動かす(Schedule Trigger)
On form submissionきっかけの一覧フォームが送信されたら動かす(n8n Form Trigger)
Execute stepノードの詳細画面の上このノードだけ動かす
Execute workflowキャンバスの下全体をテストで動かす
Publish / Unpublishキャンバスの右上本番に出す / 本番を止める
Create new credentialノードの認証情報の欄認証情報を新しく作る
Executionsキャンバス上部のタブ実行の記録
Success / Error / Running / Waiting実行一覧成功 / 失敗 / 実行中 / 待機中
Retry execution失敗した実行の詳細やり直す
Debug in editor / Copy to editor実行の詳細その実行のデータを編集画面に読み込む
Fixed / Expression設定欄の上固定値 / 式
Schema / Table / JSONINPUT・OUTPUTの上データの見え方の切り替え
Pin data / UnpinOUTPUTの右上テスト用にデータを固定する / 外す
No output data returnedOUTPUT動いたが出力が0件
Add option設定欄の下追加の設定を足す
Settingsノードの詳細画面のタブノードの動き方の設定
Always Output DataノードのSettings出力が0件でも空のitemを1件出す
Execute OnceノードのSettings最初の1件だけで1回動く
Retry On FailノードのSettings失敗したら間を空けてやり直す
On ErrorノードのSettings失敗したときに止めるか続けるか
TimezoneワークフローのSettingsこのワークフローだけのタイムゾーン
Error Workflow (to notify when this one errors)ワークフローのSettings失敗したときに動かす別のワークフロー
Test URL / Production URLWebhookやForm Triggerテスト用のURL / 本番用のURL
Duplicate / Downloadワークフローの三点メニュー複製 / JSONで保存
Data tables / VariablesOverviewのタブn8nの中の表 / 共通で使う値

詰まるのはボタンより英語のエラー文です。下の5つは相手のサービスの応答に応じて出る決まり文句で、括弧はHTTPの状態コードです。

エラー文意味見るところ
Problem running workflowワークフローを動かせなかった下に続く理由の文
No output data returnedノードは動いたが出力が0件で、後ろが動かない条件の書き方。0件でも進めたいなら「Always Output Data」
The node ‘…’ doesn’t exist, but it’s used in an expression here.式で名指ししたノードが無いノード名を変えていないか
No path back to node式で指したノードが今のノードの前につながっていないつなぎ方。別の枝なら .first() などで取る
Bad request – please check your parameters送った値が相手の形式に合わない(400)必須の欄・値の形
Authorization failed – please check your credentials認証に失敗した(401)キーの期限切れ・貼り間違い
Forbidden – perhaps check your credentials?相手に拒否された(403)権限・スコープ・共有の設定
The resource you are requesting could not be found対象が見つからない(404)ID・URLの誤り、削除されていないか
The service is receiving too many requests from you呼びすぎ(429)間隔を空ける、「Retry On Fail」
失敗したノードを開き、OUTPUTにForbidden - perhaps check your credentials? が出ているところ
失敗したノードを開き、OUTPUTにForbidden – perhaps check your credentials? が出ているところ

日本語のデータで詰まるところ

文字化け:CSVのShift_JISとBOM

CSVを読むのは「Extract from File」ノードの「Extract From CSV」です。2.44.7でこの操作が選べる文字コードは、ASCII・Latin1・UCS-2・UTF-8・UTF16LEなど欧文向けだけで、Shift_JISはありません。Shift_JISのCSVをそのまま読ませると、日本語が ���₢���킹 のように崩れます。

同じノードの「Extract From Text File」はShift_JISを選べるので、いったん文字列として読み、UTF-8のファイルに作り直してからCSVとして読みます。

  1. CSVが届くノード(Gmailの添付、Google Driveのダウンロードなど)の後ろに「Extract from File」を置き、「Operation」を「Extract From Text File」にする
  2. 「Input Binary Field」にファイルが入っている欄の名前を入れる(多くは data、Gmailの添付は attachment_0)。「Destination Output Field」は text にする
  3. 「Add option」から「File Encoding」を足し、shiftjis を選ぶ
  4. 後ろに「Convert to File」を置き、「Operation」を「Convert to Text File」、「Text Input Field」を text にする。「Encoding」は初期値の utf8 のまま
  5. 後ろにもう一度「Extract from File」を置き、「Operation」を「Extract From CSV」にする

shiftjis はWindowsの拡張文字(①や「髙」など)まで読めます。

Extract from File(Extract From Text File)のOptionsでFile Encodingにshiftjisを選んだところ
Extract from File(Extract From Text File)のOptionsでFile Encodingにshiftjisを選んだところ

もう1つの落とし穴がBOMです。BOMはファイルの先頭に付く目に見えない印で、ExcelでCSV UTF-8として保存すると付きます。「Extract From CSV」の「Exclude Byte Order Mark (BOM)」は初期値がオフで、このまま読むと1列目の見出しの頭にBOMが混ざり、$json.会社名 が空になります。CSVを読むときは「Add option」からこれを足してオンにします。

書き出す側は、「Convert to File」の「Convert to CSV」が2.44.7ではBOM付きのUTF-8を作るので、Excelでそのまま開けます。相手のシステムがShift_JISしか受け付けないときは、「Convert to CSV」→「Extract from File」(Extract From Text File、text に出す)→「Convert to File」(Convert to Text File、「Encoding」を shiftjis)とつなぎます。Shift_JISに無い文字(絵文字や「𠮷」など)は ? に置き換わります。

文字化けは化け方で原因が分かります。

見え方の例起きたこと直し方
縺雁撫縺�蜷医o縺�UTF-8のファイルをShift_JISとして開いた(BOMなしのCSVをExcelで開いたときなど)BOM付きUTF-8で書き出す
���₢���킹Shift_JISのファイルをUTF-8として読んだ上の5ステップでUTF-8に直す
1列目だけ値が取れない先頭にBOMが残っている「Exclude Byte Order Mark (BOM)」をオン
大æ…UTF-8の文字をLatin-1として表示した送る側で文字コードを付ける(メールは下で説明)

古いWebサイトのフォームがShift_JISで送ってくるときの受け方は、「n8nで外部サービスとつなぐ:Webhook・HTTP Request・API」に書いています。

全角半角と空白

フォームの入力は、全角英数字、半角カナ、全角スペースが混ざって届き、同じ会社が別の行として並びます。直すにはJavaScriptの normalize('NFKC') が一番早く、式の中でそのまま使えます。

元の文字NFKCのあと注意
ABC 123ABC 123全角英数字と全角スペースが半角になる
カブシキガイシャカブシキガイシャ半角カナが全角カナになる
03-1234-567803-1234-5678全角のハイフンも半角になる
㈱サンプル(株)サンプル1文字の㈱が3文字になる
①1意味が変わる
~(全角チルダ)~〜(波ダッシュ)は変わらない
㎡m2単位記号がばらける

下の4行は副作用です。会社名・メールアドレス・電話番号にはかけ、問い合わせの内容にはかけない、と分けます。

「問い合わせフォーム」の直後に「Edit Fields (Set)」を置き、「Mode」を「Manual Mapping」、「Include Other Input Fields」をオンにして、「Fields to Set」に次の3つを足します。電話番号は、フォームに「電話番号」(tel)の項目を足している場合です。

NameValue
company{{ $json.company.normalize('NFKC').replace(/\s+/g, ' ').trim() }}
email{{ $json.email.normalize('NFKC').trim().toLowerCase() }}
tel{{ ($json.tel ?? '').normalize('NFKC').replace(/[^0-9]/g, '') }}

trim() は全角スペースも消します。\s も全角スペースに当たるので、間の空白は半角1つに揃います。

Edit Fields (Set)にcompany・email・telの3つを足し、プレビューに半角に揃った値が出ているところ
Edit Fields (Set)にcompany・email・telの3つを足し、プレビューに半角に揃った値が出ているところ

n8nの文字列の関数には、日本語で思わぬ動きをするものがあります(2.44.7で確認)。

書き方結果どうするか
"株式会社ABC".replaceSpecialChars()Zhu Shi Hui She ABC漢字が中国語の読みのローマ字になる。日本語には使わない
"山田です。yamada@example.com".extractEmail()山田です。yamada@example.com前の日本語までくっつく。正規表現で取る
"yamada@example.com".isEmail()false先に normalize('NFKC') をかける
"123".toNumber()エラーで止まる先に normalize('NFKC') をかける

extractEmail() の代わりは {{ $json.message.match(/[\w.+-]+@[\w-]+(\.[\w-]+)+/)?.[0] }} です。

電話番号はGoogle Sheetsでもう一度崩れます。「Append Row」の「Cell Format」は初期値が「Let Google Sheets format」で、手で打ったのと同じ扱いになり、0312345678 の先頭の0が消えます。「Add option」から「Cell Format」を足して「Let n8n format」にするか、その列を書式なしテキストにします。詳しくは「n8nとGoogleスプレッドシート連携:読み書き・更新・重複を防ぐ」に分けています。

日付と時差

受付日時がずれる原因は、ほぼタイムゾーンです。

場所設定のしかた効くもの
インスタンス全体セルフホストは GENERIC_TIMEZONE=Asia/Tokyo。Cloudは「Instance settings」の「Runtime」の「Time zone」→「Save and restart」Schedule Trigger、式の $now
ワークフローごと右上の三点メニューの「Settings」→「Timezone」そのワークフローだけ上書き
コンテナのOSセルフホストの TZ=Asia/TokyoCodeノードの new Date()、ログの時刻

セルフホストの設定の書き方と、Codeノードを別のコンテナ(task-runners)で動かしているときに両方へ渡す話は、「n8nをセルフホストで導入する:Docker ComposeでVPSに立て、独自ドメインとHTTPSで使う」に書いています。

式の日付はLuxonという部品で扱い、ワークフローのタイムゾーンに従います。new Date() はワークフローの設定を見ないので、Codeノードでも DateTime を使います。外から来る日時は、末尾に Z か +09:00 があれば DateTime.fromISO() が日本時間に直します。無い文字列は日本時間として読まれるので、相手がUTCで返しているなら DateTime.fromSQL($json.created, { zone: 'utc' }).setZone('Asia/Tokyo') のように、UTCとして読んでから日本時間に直します。

日本語の日付の読み書きは、書式を指定すれば通ります。

{{ DateTime.fromFormat('2026年10月26日 9時5分', 'yyyy年M月d日 H時m分').toISO() }}
→ 2026-10-26T09:05:00.000+09:00

{{ $now.setLocale('ja').toFormat('M月d日(EEE)') }}
→ 10月26日(月)

{{ $now.setLocale('ja-JP-u-ca-japanese').toLocaleString(DateTime.DATE_FULL) }}
→ 令和8年10月26日

setLocale('ja') を付けないと、曜日や月の名前は Mon、October のように英語で出ます。式の日付の扱い全体は「n8nの式(Expression)とデータの扱い:$json・ノードの参照・日付・JSON」で詳しく書きます。

メールの件名と送信者名

受け取る側はほとんど心配いりません。「Email Trigger (IMAP)」の「Format」が「Simple」か「Resolved」なら、ISO-2022-JPの件名と本文も読める形で出てきます。「RAW」だけは本文をbase64urlのまま返すので、自分で戻す手間が要ります。Gmailノードで読む場合も、件名はGmail側で読める形になって届きます。

詰まるのは送る側の送信者名です。Gmailノードの「Send」で「Sender Name」を空にしておくと、送信者名がGmailアカウントの表示名のまま差し込まれます。運用しているn8nで、受け取った側に送信者名が å¤§æ… のように化けて出たことがあり、受信側のメールサーバーによって起きたり起きなかったりしました。「Add option」から「Sender Name」を足して名前を入れると化けなくなります。「Send Email」ノードなら「From Email」に 問い合わせ窓口 <info@example.co.jp> の形で名前ごと書けます。

もう1つ、GmailノードとSend Emailノードは、初期設定で本文の最後に英語の一文「This email was sent automatically with n8n」を足します。日本語の自動返信の末尾に英語が付くのは不自然なので、「Append n8n Attribution」をオフにします。Gmailの細かい設定は「n8nとGmail連携:受信をきっかけに動かす、送る、振り分ける」にまとめます。

GmailノードのOptionsにSender Nameを足して日本語の名前を入れ、Append n8n Attributionをオフにしたところ
GmailノードのOptionsにSender Nameを足して日本語の名前を入れ、Append n8n Attributionをオフにしたところ

正規表現と日本語

n8nの正規表現はJavaScriptのもので、英語の資料の書き方のままだと日本語で外れます。

  • \w は英数字とアンダースコアだけで、ひらがなや漢字には当たらない
  • \b(単語の区切り)は日本語の文の中では働かない。「見積」が含まれるかは /見積/ で十分
  • 文字の種類で絞るときは u を付け、/\p{Script=Han}+/u(漢字)、/\p{Script=Hiragana}+/u(ひらがな)を使う
  • 長音の「ー」はカタカナに数えられない。カタカナだけの判定は /^[\p{Script=Katakana}ー]+$/u
  • .length は絵文字や「𠮷」を2と数える。文字数を正しく数えるなら [...$json.message].length
  • 全角半角が混ざる値は、先に normalize('NFKC') をかけてから当てる

「Filter」や「If」ノードの条件にある「matches regex」は、見積|料金 のようにそのまま書いても、/見積|料金/u のように前後を / で囲んで書いても通ります。

日本語でLLMに指示するとき

AIのノードへの指示や分類の名前は日本語で構いません。AI Agentに渡す道具のノード名だけは英数字にします。日本語の部分は _ に置き換わるので、日本語だけの名前の道具が2つあると、どちらも _ になって区別できません。指示の書き方やモデルの選び方は「n8nでAIエージェントを作る:ChatGPT・Claude・Geminiをつなぐ」に書いています。

フォームの画面に残る英語

n8n Form Triggerのフォームは、項目名や説明を日本語にできますが、初期のままだと英語が残ります。「Add option」から次の3つを変えます。

  • 「Button Label」:初期値の Submit を「送信する」に
  • 「Form Response」の「Text to Show」:初期値の Your response has been recorded を「送信しました。2営業日以内に担当からご連絡します」に
  • 「Append n8n Attribution」:オフにして、下の「Form automated with n8n」を消す

設定で変えられない英語も残ります。必須の欄を空で送ったときの「This field is required」、Dropdownの最初の「Select an option …」です。ページの言語も英語として扱われます。社外の人が使うフォームでここが気になるなら、自社サイトのフォームからWebhookで受ける形に切り替えます。

フォームを日本語にした状態で必須の欄を空のまま送り、This field is requiredが出ているところ
フォームを日本語にした状態で必須の欄を空のまま送り、This field is requiredが出ているところ

ブラウザの翻訳で画面を訳すときの注意

Chromeの翻訳で編集画面を丸ごと日本語にはできますが、おすすめしません。

  • キャンバスのノード名、設定項目の名前まで訳され、公式ドキュメントやエラー文と照らし合わせられなくなる。「Execute workflow」が「ワークフローを実行」になり、検索しても答えが出ない
  • 式の欄やCodeノードの中の英語まで訳されることがあり、画面の表示と実際の中身がずれる。その状態で書き換えると、式やコードが壊れて保存される

n8nの画面には翻訳をかけず、分からないエラー文だけをコピーして翻訳にかけます。Chromeでn8nのドメインを「このサイトは翻訳しない」にしておけば、うっかり訳されることもありません。公式ドキュメントは翻訳をかけて読んで構いません。

応用

  • 英語の問い合わせは、途中に「DeepL」か「Google Translate」ノードを置いて日本語にしてから #問い合わせ に送る。元の英語はシートに残す
  • 整える「Edit Fields (Set)」を別のワークフローに切り出し、ほかのワークフローからも呼ぶ。作り方は「n8nの定期実行とサブワークフロー:Schedule Triggerと部品化」
  • Shift_JISのCSVの変換も同じように部品にし、ファイルを渡せば行が返る形にする

できないことと、その代わり

できないこと理由代わりの手
画面を日本語にする公式の訳が英語だけで、編集画面の翻訳は受け付けられていないこの記事の対応表を見ながら英語のまま使う
Extract From CSVでShift_JISを直接読む選べる文字コードにShift_JISが無いExtract From Text File(shiftjis)→Convert to Text File→Extract From CSV
フォームの必須エラーなどを日本語にする文言がフォームのひな形に直接書かれている自社サイトのフォームからWebhookで受ける
Schedule Triggerで日本の祝日を飛ばす祝日の考えが無いGoogleカレンダーの日本の祝日カレンダーかData tablesの祝日一覧を見て、Ifで止める
「令和8年10月26日」のような和暦を読むLuxonの書式で元号を読めないCodeノードで元号を西暦に直してから読む
Shift_JISに無い文字を書き出す変換で ? に置き換わる相手がUTF-8を受け付けるか確かめ、受け付けるならUTF-8で渡す

よく詰まるところ

症状原因直し方
N8N_DEFAULT_LOCALE=ja を入れたのに英語のまま日本語の訳が存在しない外してよい。英語のまま使う
CSVの日本語が ��� になるShift_JISのCSVをUTF-8として読んだExtract From Text Fileでshiftjisを選んでから読む
CSVの1列目だけ $json.会社名 が空見出しの頭にBOMが混ざっている「Exclude Byte Order Mark (BOM)」をオン
書き出したCSVをExcelで開くと化けるBOMなしのUTF-8を作った(Convert to Text Fileなど)Convert to CSVで作るか、「Add Byte Order Mark (BOM)」をオン
同じ会社が別の行として並ぶ全角半角・空白がゆれている入口の「Edit Fields (Set)」で normalize('NFKC')
電話番号の先頭の0が消えるCell Formatが「Let Google Sheets format」「Let n8n format」にするか、列を書式なしテキストに
受付日時が13〜14時間ずれるタイムゾーンが初期値のニューヨークインスタンスを Asia/Tokyo にする
Codeノードの時刻だけ9時間ずれるnew Date() がコンテナのOSの時刻(UTC)で動いているTZ を設定するか、Luxonの DateTime を使う
送ったメールの送信者名が化けるGmailノードの「Sender Name」が空「Sender Name」に名前を入れる
自動返信の最後に英語の一文が付く「Append n8n Attribution」が初期値でオンオフにする
正規表現が日本語に当たらない\w や \b を使っている文字そのものか \p{Script=Han} などに u を付ける
翻訳をかけて直した式が壊れたブラウザの翻訳が式の欄まで訳したn8nのドメインを翻訳しない設定にし、式を書き直す

次にやること

  • n8nの使い方入門:最初のワークフローを作って動かす
  • n8nをセルフホストで導入する:Docker ComposeでVPSに立て、独自ドメインとHTTPSで使う
  • n8nの式(Expression)とデータの扱い:$json・ノードの参照・日付・JSON
  • n8nでAIエージェントを作る:ChatGPT・Claude・Geminiをつなぐ

あわせて読む