runique 3.0.1

A Django-inspired web framework for Rust with ORM, templates, and comprehensive security middleware
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
{
  "forms": {
    "upload_dir_error": "アップロードディレクトリの作成エラー",
    "file_create_error": "ファイルの作成エラー",
    "multipart_stream_error": "マルチパートストリームエラー",
    "file_write_error": "ファイル書き込みエラー",
    "required": "このフィールドは必須です",
    "too_short": "短すぎます(最小 {})",
    "too_long": "長すぎます(最大 {})",
    "email_invalid": "無効なメールアドレス形式です",
    "url_invalid": "有効なURLを入力してください",
    "phone_invalid": "無効な電話番号(数字、+、スペース、ハイフン可、7〜15桁)",
    "hash_error": "ハッシュエラー: {}",
    "password_empty": "パスワードは空にできません",
    "filter_invalid_value": "static/media フィルターが無効な値 ({}) を受け取りました。ファイルパスが必要です。",
    "number_invalid": "無効な数値です",
    "number_required": "必須です",
    "integer_required": "整数である必要があります",
    "decimal_required": "小数形式である必要があります",
    "min_value": "最小 {} が必要です",
    "max_value": "最大 {} を超えています",
    "precision_max": "小数点以下の最大桁数は {} 桁です",
    "precision_min": "小数点以下の最小桁数は {} 桁です",
    "color_invalid": "無効なカラーです(形式: #RRGGBB または #RGB)",
    "color_no_hash": "カラーは # で始まる必要があります",
    "color_bad_hex": "16進数以外の文字が含まれています",
    "slug_invalid": "無効なスラッグです",
    "slug_no_dash": "スラッグはハイフンで始まったり終わったりしてはいけません",
    "uuid_invalid": "無効なUUID形式です(期待値: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)",
    "json_invalid": "無効なJSONです: {}",
    "ipv4_only": "IPv4アドレスのみ使用できます",
    "ipv6_only": "IPv6アドレスのみ使用できます",
    "ip_invalid": "無効なIPアドレスです",
    "date_invalid": "無効な日付形式です",
    "date_too_old": "古すぎます(最小: {})",
    "date_too_far": "遠すぎます(最大: {})",
    "time_invalid": "無効な時間形式です",
    "file_required": "少なくとも1つのファイルを選択してください",
    "data_invalid": "「{}」の値が無効です",
    "data_required": "「{}」は必須です",
    "data_password": "「{}」のパスワードをハッシュ化できなかったため、何も保存されませんでした",
    "file_extension_blocked": "ファイル '{}' は許可されていません。拡張子: {}",
    "finalize_error": "フィールド '{}' の確定中にエラーが発生しました: {}",
    "template_missing": "テンプレートが見つかりません: {}",
    "render_js_error": "JSレンダリングエラー: {}",
    "tera_not_configured": "Tera が設定されていません",
    "config_not_found": "拡張機能内に設定が見つかりません",
    "hint_slug": "形式: 文字-数字-ハイフン",
    "hint_uuid": "形式: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "hint_json": "有効なJSON形式が必要です",
    "hint_ip_v4": "IPv4形式: 192.168.1.1",
    "hint_ip_v6": "IPv6形式: 2001:0db8:85a3::8a2e:0370:7334",
    "hint_ip": "IPv4 または IPv6 形式",
    "validation_overflow": "スタックオーバーフローを検出しました:検証中に無限再帰が発生しています",
    "choice_invalid": "無効な選択です",
    "choice_invalid_value": "無効な選択: {}",
    "select_required": "オプションを選択してください",
    "checkbox_required": "少なくとも1つのオプションを選択してください",
    "multipart_error": "フォームアップロードエラー",
    "body_error": "ボディ読み取りエラー",
    "aegis_query_error": "クエリ文字列の解析に失敗: {}",
    "aegis_urlencoded_error": "URLエンコードボディの解析に失敗: {}",
    "aegis_json_error": "JSONボディの解析に失敗: {}",
    "auth_required": "認証が必要です",
    "role_insufficient": "権限が不足しています",
    "unknown_group": "GuardRules: roles([...]) に存在しないグループがあります: {}",
    "time_too_old": "早すぎます(最小: {})",
    "time_too_far": "遅すぎます(最大: {})",
    "datetime_too_old": "早すぎます(最小: {})",
    "datetime_too_far": "遅すぎます(最大: {})",
    "duration_invalid": "無効な期間です(秒数が必要です)",
    "duration_too_short": "最小期間: {} 秒",
    "duration_too_long": "最大期間: {} 秒",
    "file_max_count": "最大 {} 個のファイルまで許可されています",
    "file_too_large": "ファイル '{}' は大きすぎます ({}MB > {}MB 最大)",
    "file_invalid_image": "ファイル '{}' は有効な画像ではありません",
    "image_too_wide": "画像 '{}' は幅が大きすぎます ({}px > {}px)",
    "image_too_tall": "画像 '{}' は高さが大きすぎます ({}px > {}px)",
    "boolean_required": "このフィールドに同意する必要があります",
    "slug_unicode_invalid": "使用できるのは文字、数字、ハイフン、アンダースコアのみです",
    "unique_field_taken": "{} はすでに使用されています。",
    "unique_value_taken": "フィールド '{}' の値はすでに使用されています。",
    "unique_constraint_violated": "一意制約が違反されました。",
    "db_error": "データベースエラー: {}",
    "text_field_too_large": "テキストフィールドが大きすぎます(最大1MB)",
    "upload_too_large": "ファイルが大きすぎます(最大{}MB)"
  },
  "csrf": {
    "missing": "CSRFトークンがありません",
    "invalid": "無効なCSRFトークン",
    "invalid_or_missing": "CSRFトークンが無効または存在しません",
    "forbidden": "無効なCSRFトークン",
    "session_write_error": "セッション書き込みエラー"
  },
  "error": {
    "source": "ソース: {}",
    "AppError": "アプリケーションエラー",
    "build": "ビルドエラー: {}",
    "internal": "内部エラー",
    "forbidden": "アクセス禁止",
    "not_found": "リソースが見つかりません",
    "validation": "検証エラー: {}",
    "database": "データベースエラー: {}",
    "io": "IOエラー: {}",
    "template": "テンプレートエラー: {}",
    "custom": "カスタムエラー: {}",
    "title": {
      "bad_request": "不正なリクエスト",
      "not_found": "ページが見つかりません",
      "forbidden": "アクセス禁止",
      "validation": "検証エラー",
      "database": "データベースエラー",
      "template": "テンプレートレンダリングエラー",
      "internal": "内部サーバーエラー"
    },
    "invalid_query": "クエリパラメータが無効です:{}",
    "path_not_found": "要求されたパス '{}' は見つかりませんでした",
    "internal_occurred": "内部エラーが発生しました",
    "context_occurred": "AppError が発生しました"
  },
  "title": {
    "template": "'{}' のテンプレートエラー"
  },
  "build": {
    "subscriber_already_installed": "tracing subscriber は既にインストールされています。Runique のログ設定は無効です(RUST_LOG / with_log は効果がありません)",
    "external_outputs_ignored": "`with_log(|l| l.external())` が設定されています。設定されたログ出力は無視されます(アプリケーションが subscriber を所有します)",
    "validation_failed": "ビルド検証に失敗しました: {}",
    "check_failed": "ビルドが {} 個のチェックエラーで失敗しました",
    "template_failed": "テンプレートの読み込みに失敗しました: {}",
    "driver_not_enabled": "{} ドライバーが有効になっていません: Runique は '{}' フィーチャーなしでコンパイルされました。\n\nプロジェクトの Cargo.toml:\nrunique = { version = \"{}\", features = [\"{}\"] }\n\nrunique CLI の場合:\ncargo install runique --features {} --locked --force\n\nすべてのデータベースに対応するには 'all-databases' フィーチャーを使用してください。",
    "db_missing": "'orm' 機能が有効な場合、データベース接続が必要です",
    "component_not_ready": "コンポーネント '{}' の準備ができていません",
    "check": {
      "db_required": "データベース接続または設定が必要です(`orm` feature が有効)",
      "db_required_hint": "構築チェーンに .with_database(db) または .with_database_config(config) を追加してください",
      "admin_prefix_empty": "管理画面のルート接頭辞は空にできません",
      "admin_prefix_empty_hint": ".prefix(\"/admin\") を使うか、既定値のままにしてください",
      "extra_route_unknown": "追加ルート `{}` はリソース `{}` を指していますが、登録されていません",
      "extra_route_unknown_hint": "admin!{} で宣言したリソースのキーを使ってください",
      "cache_control_invalid": "Cache-Control ヘッダーの値が無効です: '{}'",
      "cache_control_invalid_hint": "表示可能な ASCII 文字のみを使ってください(制御文字・改行は不可)。",
      "media_root_unusable": "MEDIA_ROOT ディレクトリ '{}' を作成またはアクセスできません: {}",
      "media_root_unusable_hint": ".env で MEDIA_ROOT に書き込み可能な絶対パスを設定し(例: MEDIA_ROOT=/var/www/myapp/media)、プロセスに書き込み権限があることを確認してください。",
      "secret_key_weak": "SECRET_KEY が未設定・空・既定値、または 32 文字未満です",
      "secret_key_weak_hint": ".env で SECRET_KEY に 32 文字以上のランダムな文字列を設定してください(`runique` CLI で生成できます)",
      "public_url_missing": "公開 URL がありません: リセットリンクがリクエストの Host ヘッダーから作られてしまいます",
      "public_url_missing_hint": "builder で設定してください: .with_public_url(\"https://mysite.com\")",
      "acme_domain_missing": "ACME_ENABLED=true ですが ACME_DOMAIN が設定されていません",
      "acme_domain_missing_hint": ".env で ACME_DOMAIN に本番ドメインを設定してください",
      "acme_email_missing": "ACME_ENABLED=true ですが ACME_EMAIL が設定されていません",
      "acme_email_missing_hint": ".env で ACME_EMAIL に Let's Encrypt の連絡先メールを設定してください",
      "suggestion": "提案",
      "context": "コンテキスト"
    }
  },
  "server": {
    "operational": "Runique は稼働中です",
    "launched": "サーバーを {} で起動しました",
    "connected_db": "データベースに接続しました {} -> {}",
    "stop_hint": "停止するには Ctrl + C",
    "shutting_down": "Runique サーバーをシャットダウンしています...",
    "acme_not_compiled": "ACME_ENABLED=true ですが、`acme` フィーチャーがコンパイルされていません。",
    "acme_add_feature": "Cargo.toml に `acme` フィーチャーを追加してください。",
    "test_utils_feature_enabled": "`test-utils` フィーチャーがこのビルドに含まれています — 本番環境にデプロイする前に、[dependencies] ではなく [dev-dependencies] に設定されていることを確認してください。"
  },
  "middleware": {
    "bad_request": "不正なリクエスト",
    "slot_collision": "Runiqueミドルウェアスロットの衝突: '{}' と '{}' が両方ともスロット {} を要求しています。カスタムミドルウェアの登録数を減らすか、明示的なスロットを指定してください。"
  },
  "html": {
    "400_title": "400",
    "400_text": "不正なリクエスト:アドレスのパラメータが無効です。",
    "404_title": "404",
    "404_text": "ページが見つかりません",
    "500_title": "500",
    "500_text": "内部サーバーエラー",
    "500_notice": "チームに通知され、問題に取り組んでいます。",
    "429_title": "429",
    "429_text": "リクエストが多すぎます。しばらくお待ちください。",
    "503_title": "503",
    "503_text": "高負荷のためサービスを一時的に利用できません。しばらくしてから再度お試しください。",
    "back_home": "ホームに戻る",
    "critical_error_title": "重大なエラー",
    "critical_error_text": "エラー処理システム自体がエラーに遭遇しました。",
    "critical_error_contact": "この状況は発生すべきではありません。システム管理者に連絡してください。"
  },
  "debug": {
    "stack_trace_title": "詳細なエラートレース",
    "stack_trace_tip": "最上位のエラー(レベル 0)が通常は根本原因です。後続のエラーはエラーがコード内でどのように伝播したかを示しています。"
  },
  "flash": {
    "welcome": "ようこそ {}、アカウントが作成されました!",
    "fix_errors": "エラーを修正してください",
    "success_demo": "これは成功メッセージです。",
    "info_demo": "これは情報メッセージです。",
    "warning_demo": "これは警告メッセージです。",
    "error_demo": "これはエラーメッセージです。"
  },
  "cli": {
    "creating_project": "プロジェクト '{}' を作成中...",
    "admin_detected": "管理画面を検出 → 管理コードを生成中",
    "add_admin_hint": "管理パネルを有効にするには、ビルダーに .with_admin(...) を追加してください。",
    "daemon_error": "[Daemon] エラー: {}",
    "cargo_run_failed": "アプリケーションサーバーが正常に起動しませんでした (cargo run)",
    "file_not_found": "ファイルが見つかりません: {}\nRunique プロジェクトのルートにいることを確認してください。",
    "admin_not_found": "Admin ファイルが見つかりません: {}\nadmin!{} マクロを使用して src/admin.rs を作成してください。",
    "name_empty": "プロジェクト名は空にできません",
    "name_invalid": "プロジェクト名には文字、数字、_ または - のみ使用できます",
    "name_dash": "プロジェクト名は - で始めることができません",
    "folder_exists": "フォルダー '{}' はすでに存在します",
    "cargo_run_expect": "cargo run の起動に失敗しました",
    "project_created": "プロジェクト '{}' を作成しました!",
    "getting_started": "始めるには:",
    "cd_hint": "cd {}",
    "cargo_run_hint": "cargo run",
    "fmt_failed": "cargo fmt が失敗しました — フォーマットをスキップします: {}"
  },
  "daemon": {
    "unable_read": "読み取れません: {}",
    "parse_error": "解析エラー: {}",
    "no_resource": "admin!{} にリソースがありません — 生成するものがありません",
    "operational": "デーモン稼働中 → src/admins/admin.rs",
    "generation_error": "生成エラー: {}",
    "generated_header": "自動生成 — 手動で編集しないでください",
    "generated_notice": "`runique start` により src/admin.rs から生成されました。変更は上書きされます。"
  },
  "macro": {
    "named_fields_only": "名前付きフィールドを持つ構造体のみ",
    "structs_only": "構造体にのみ機能します",
    "forms_field_required": "構造体 '{}' には 'Forms' フィールドが必要です",
    "field_no_name": "名前のないフィールド",
    "model_form_named_only": "DeriveModelForm: 名前付きフィールドを持つ構造体のみ",
    "model_form_structs_only": "DeriveModelForm: 構造体のみ"
  },
  "parser": {
    "multiple_admin_blocks": "admin!: 1ファイルにつき admin! ブロックは1つだけです(1つ目は{}行目、2つ目は{}行目)— 統合してください",
    "title_required": "admin!: 'title' は必須です",
    "list_display_exclude_exclusive": "admin!: 'list_display' と 'list_exclude' は同時に使用できません"
  },
  "TemplateMessage": {
    "debug_info_title": "デバッグ情報",
    "debug_field_title": "タイトル",
    "debug_field_count": "フィールド数",
    "debug_error_count": "エラー数",
    "debug_main_message": "メインメッセージ",
    "debug_root_cause": "根本原因",
    "debug_details": "追加詳細",
    "debug_request_info": "リクエスト情報",
    "debug_http_method": "HTTPメソッド",
    "debug_path": "パス",
    "debug_query_params": "クエリパラメータ",
    "debug_http_headers": "HTTPヘッダー",
    "debug_template_info": "テンプレート情報",
    "debug_template_name": "テンプレート名",
    "debug_error_line": "エラー行",
    "debug_template_source": "テンプレートソースコード",
    "debug_available_templates": "利用可能なテンプレート",
    "debug_stack_trace_title": "詳細なエラートレース",
    "debug_stack_trace_tip": "最上位のエラー(レベル0)が通常根本原因です。後続のエラーは、エラーがコード内でどのように伝播したかを示します。",
    "debug_environment": "環境",
    "debug_debug_mode": "デバッグモード",
    "debug_enabled": "有効",
    "debug_disabled": "無効",
    "debug_rust_version": "Rustバージョン",
    "debug_app_version": "アプリバージョン",
    "debug_status_code": "ステータスコード",
    "debug_header_name": "名前",
    "debug_header_value": "値"
  },
  "admin": {
    "group": "グループ",
    "groups": "グループ",
    "resource": "リソース",
    "resources": "リソース",
    "can_create": "作成",
    "can_read": "閲覧",
    "can_update": "更新",
    "can_delete": "削除",
    "can_update_own": "更新",
    "can_delete_own": "削除",
    "name": "名前",
    "username": "ユーザー名",
    "email": "メールアドレス",
    "staff": "スタッフ",
    "superuser": "スーパーユーザー",
    "active": "有効",
    "user": {
      "username_too_short": "ユーザー名が短すぎます(最小3文字以上)",
      "invalid_email": "無効なメールアドレス形式です",
      "not_activated": "このアカウントはまだユーザーによって有効化されていません。受信したメールからパスワードを設定すると有効化されます。"
    },
    "login": {
      "title": "ログイン",
      "subtitle": "管理パネルにアクセスするにはログインしてください",
      "label_username": "ユーザー名",
      "label_password": "パスワード",
      "btn_submit": "ログイン",
      "error_session": "セッションの開始中にエラーが発生しました。",
      "error_credentials": "認証情報が正しくないか、権限が不足しています。",
      "error_locked": "試行回数が多すぎます。アカウントが一時的にロックされています。{}秒後に再試行してください。"
    },
    "logout": {
      "success": "ログアウトしました。"
    },
    "access": {
      "insufficient_rights": "管理画面へのアクセス権限が不足しています"
    },
    "dashboard": {
      "title": "ダッシュボード",
      "subtitle": "アプリケーションの概要",
      "card_resources": "リソース",
      "th_resource": "リソース",
      "th_key": "キー",
      "th_permissions": "権限",
      "th_actions": "アクション",
      "btn_list": "一覧",
      "btn_create": "作成",
      "see_list": "リストを見る →",
      "empty_title": "登録されたリソースがありません",
      "empty_desc": "src/admin.rsでadmin!{{}}マクロを使用してリソースを宣言し、runique startを実行してください",
      "kpi_resources": "リソース",
      "kpi_entries": "エントリー総数",
      "kpi_largest": "最大",
      "th_count": "エントリー"
    },
    "list": {
      "breadcrumb_admin": "管理",
      "entries_count_one": "件",
      "entries_count_many": "件",
      "btn_create": "作成",
      "th_id": "id",
      "th_actions": "アクション",
      "bool_true": "はい",
      "bool_false": "いいえ",
      "btn_detail": "詳細",
      "btn_edit": "編集",
      "btn_delete": "削除",
      "confirm_delete": "本当に削除しますか?",
      "empty_title": "エントリがありません",
      "empty_desc": "最初に項目を作成してください。",
      "btn_create_first": "最初の項目を作成",
      "search_placeholder": "検索..."
    },
    "create": {
      "title": "作成",
      "breadcrumb": "作成",
      "card_info": "情報",
      "no_fields": "現在使用可能なフィールドはありません。",
      "btn_cancel": "キャンセル",
      "btn_submit": "作成",
      "success": "エントリが正常に作成されました!"
    },
    "edit": {
      "title": "編集",
      "breadcrumb": "編集",
      "card_info": "情報",
      "no_fields": "現在使用可能なフィールドはありません。",
      "btn_cancel": "キャンセル",
      "btn_submit": "保存",
      "success": "エントリが正常に更新されました!"
    },
    "detail": {
      "title": "詳細",
      "breadcrumb": "詳細",
      "entry_label": "エントリ",
      "btn_list": "← 一覧",
      "btn_edit": "編集",
      "btn_delete": "削除",
      "confirm_delete": "このエントリを削除しますか?",
      "btn_reset_password": "パスワードをリセット",
      "btn_reset_password_short": "リセット"
    },
    "reset_password": {
      "btn": "パスワードをリセット",
      "success_email": "Reset link sent to {}.",
      "success_link": "Reset link (mailer not configured): {}",
      "error_no_email": "No email field found for this user.",
      "error_send": "Error sending email: {}",
      "email_subject": "パスワードのリセット",
      "email_title": "パスワードのリセット",
      "email_greeting": "こんにちは、",
      "email_body": "以下のリンクをクリックしてパスワードをリセットしてください(1時間有効):",
      "email_btn": "パスワードをリセット",
      "email_ignore": "このリセットを要求していない場合は、このメッセージを無視してください。"
    },
    "user_created": {
      "email_subject": "ようこそ — パスワードを設定してください",
      "email_sent": "{} にウェルカムメールを送信しました。",
      "email_greeting": "ようこそ、",
      "email_body": "アカウントが作成されました。以下のリンクをクリックしてパスワードを設定してください:",
      "email_btn": "パスワードを設定",
      "email_validity": "このリンクは1時間有効です。このメッセージを予期していなかった場合は、無視してください。"
    },
    "delete": {
      "title": "削除",
      "breadcrumb": "削除",
      "heading": "削除の確認",
      "btn_cancel": "← キャンセル",
      "success": "エントリが正常に削除されました!",
      "btn_confirm": "はい、完全に削除します",
      "warning": {
        "title": "警告!",
        "desc": "エントリを削除しようとしています",
        "of": "リソース",
        "irreversible": "この操作は元に戻せません。"
      },
      "not_found": "リソースが見つかりませんでした。"
    },
    "bulk": {
      "no_selection": "項目が選択されていません。",
      "no_field_selected": "変更するフィールドがありません。",
      "delete_success": "件削除しました。",
      "update_success": "件更新しました。"
    },
    "base": {
      "title": "管理",
      "breadcrumb": "管理",
      "toggle": "メニューを折りたたむ",
      "logout_title": "ログアウト",
      "theme_toggle": "テーマを切り替え",
      "back_to_site": "← サイト"
    },
    "superuser_wizard": {
      "title": "=== スーパーユーザー作成 ===",
      "algo_prompt": "[1/5] ハッシュアルゴリズム",
      "algo_argon2": "Argon2(推奨)",
      "algo_bcrypt": "Bcrypt",
      "algo_scrypt": "Scrypt",
      "algo_custom": "カスタムプロバイダー",
      "provider_path": "プロバイダーパス",
      "invalid_path": "無効なパスです。",
      "username_prompt": "[2/5] ユーザー名",
      "username_empty": "ユーザー名は空にできません。",
      "username_taken": "このユーザー名は既に使用されています。",
      "email_prompt": "[3/5] メール",
      "email_invalid": "無効なメールアドレスです。",
      "email_taken": "このメールアドレスは既に使用されています。",
      "password_prompt": "[4/5] パスワード",
      "password_too_short": "パスワードは12文字以上必要です。",
      "password_weak": "パスワードには小文字、大文字、数字、記号をそれぞれ1文字以上含めてください。",
      "confirm_prompt": "[5/5] パスワード確認",
      "password_mismatch": "パスワードが一致しません。もう一度お試しください。",
      "review_algo": "  アルゴリズム: {}",
      "review_username": "  ユーザー名  : {}",
      "review_email": "  メール      : {}",
      "review_password": "  パスワード  : ••••••••",
      "review_action": "アクション",
      "confirm_create": "確認して作成",
      "change_algo": "アルゴリズムを変更",
      "modify_password": "パスワードを変更",
      "success": "✓ スーパーユーザーが正常に作成されました!",
      "id_line": "  ID          : {}",
      "username_line": "  ユーザー名  : {}",
      "email_line": "  メール      : {}"
    },
    "builtin": {
      "invalid_id": "IDが無効です。",
      "droit_resource_required": "少なくとも1つのリソースを選択してください。",
      "droit_exists": "\"{}\" の権限は既に存在します。",
      "groupe_exists": "\"{}\" という名前のグループは既に存在します。",
      "user_username_exists": "ユーザー名「{}」は既に使用されています。",
      "user_email_exists": "メールアドレス「{}」は既に登録されています。"
    }
  },
  "makemigrations": {
    "destructive_detected": "破壊的な変更が検出されました:",
    "destructive_require_force": "--force を使用してこれらの破壊的な変更を適用してください。",
    "long_identifier_detected": "生成されたSQL識別子が長すぎます(MariaDB/MySQLの上限:64文字):",
    "long_identifier_rename_required": "関係するテーブル名/カラム名を短くしてください — Runiqueは識別子を自動的に切り詰めません。",
    "files_ready": "{}個のファイルが移行の準備ができています。",
    "snapshots_upgraded": "{}個のスナップショットを列の長さを記録するよう更新しました(マイグレーションなし)。"
  },
  "migrate": {
    "applying": "'{}'からマイグレーションを適用中...",
    "complete_up": "マイグレーションが完了しました。",
    "crate_missing": "マイグレーション crate が見つかりません: '{}' に Cargo.toml がありません。"
  },
  "reset": {
    "forgot_title": "パスワードを忘れた",
    "reset_title": "新しいパスワード",
    "success_title": "パスワードがリセットされました",
    "email_label": "メールアドレス",
    "new_password_label": "新しいパスワード",
    "confirm_label": "パスワードの確認",
    "email_mismatch": "メールアドレスがリンクと一致しません。",
    "invalid_link": "無効なリンクです。",
    "invalid_or_expired": "リセットリンクが無効または期限切れです。",
    "password_min_length": "パスワードは{}文字以上である必要があります。",
    "password_weak": "パスワードには大文字、小文字、数字、特殊文字(!@#$%...)をそれぞれ1つ以上含める必要があります。",
    "password_mismatch": "パスワードが一致しません。",
    "check_inbox": "このアドレスがアカウントに関連付けられている場合、手順を記載したメールが届きます。",
    "blocked_subject": "アカウントはブロックされています",
    "blocked_body": "<p>{} 様</p><p>お客様のアカウントでパスワードの再設定が要求されましたが、このアカウントはブロックされています。ブロックを解除するには、サイト管理者にお問い合わせください。</p><p>心当たりがない場合は、このメールを無視してください。</p>",
    "email_subject": "パスワードリセットのご案内",
    "email_body": "<p>{} 様、</p><p>以下のリンクをクリックしてパスワードをリセットしてください(1時間有効):</p><p><a href=\"{}\">{}</a></p>"
  },
  "permission": {
    "col": {
      "id": "ID",
      "can_create": "作成",
      "can_delete": "削除",
      "can_delete_own": "削除(自分の)",
      "can_read": "閲覧",
      "can_update": "更新",
      "can_update_own": "更新(自分の)",
      "groupes": "グループ",
      "resource_key": "リソース",
      "actions": "操作"
    }
  },
  "runique_test": {
    "connect_failed": "接続できません: {}",
    "begin_failed": "テスト用トランザクションを開始できません: {}",
    "env_read_failed": "{} を読み込めません: {}",
    "env_parse_failed": "{} を解析できません: {}",
    "env_line_malformed": "{} を解析できません: {} 文字目で行の形式が不正です(パスワードを含む可能性があるため、行は表示しません)",
    "no_panic_message": "メッセージなし",
    "query_failed": "失敗",
    "panicked": "パニック: {}",
    "rollback_failed": "ロールバック: {}",
    "test_failed": "{} が失敗しました。上の出力を確認してください",
    "clone_outlived": "テスト接続のクローンがハンドラーより長く生存しています。そのクローンが破棄された時点でトランザクションはロールバックされます",
    "not_a_transaction": "テストがトランザクション内で実行されなかったため、何もロールバックできませんでした",
    "nested": "runique_test は別の runique_test の中では実行できません。自分の呼び出し元を永遠に待つことになります",
    "timed_out": "ハンドラーが {} 秒以内に終わりませんでした。デッドロック、または別の接続にロックされた行ではありませんか? env ファイルの RUNIQUE_TEST_TIMEOUT で上限を変更できます",
    "bad_timeout": "{} は 0 より大きい整数の秒数である必要があります。受け取った値: \"{}\"",
    "transaction_ended": "テストのトランザクションがテスト内部で終了されました(COMMIT、または MariaDB/MySQL での DDL)。それ以前に書き込まれた内容はすべてデータベースに残っています",
    "swallowed_failures": "失敗したクエリ: {}。それでもハンドラーは Ok を返しました。どこかでエラーが握りつぶされています(想定内の失敗は expect_db_error で囲んでください)",
    "rollback_timed_out": "ロールバックが {} 秒以内に終わりませんでした",
    "expected": "想定内",
    "not_refused": "テストが拒否を想定していた内容をデータベースが受け入れました",
    "no_db_config": "env ファイルに DATABASE_URL も DB_ENGINE もありません。テスト用データベースはそこで指定する必要があり、シェルからは何も読み取りません",
    "in_memory": "インメモリ: 各テストは空のデータベースから始まります"
  },
  "test_runner": {
    "no_cargo_toml": "ここに Cargo.toml がありません。プロジェクトのルートで `runique test` を実行してください。",
    "test_utils_missing": "Cargo.toml で runique の `test-utils` フィーチャーが有効になっていません。\nリリースビルドに含まれないよう、dev-dependency として追加してください:\n    cargo add --dev runique --features test-utils",
    "test_utils_shipped": "Cargo.toml が [dev-dependencies] 以外で `test-utils` を有効にしているため、テストビルダーがリリースビルドに含まれてしまいます。\n[dependencies](および [features] のすべてのエントリ)から削除し、dev-dependency としてのみ追加してください:\n    cargo add --dev runique --features test-utils",
    "no_mod_file": "src/runique_test/mod.rs がありません。作成して、各テストファイルを宣言してください(`mod user;`)。",
    "module_not_declared": "src/main.rs がテストモジュールを宣言していません。次を追加してください:\n    #[cfg(test)]\n    mod runique_test;",
    "module_not_gated": "runique_test モジュールが `cfg(test)` で保護されていないため、すべてのビルドに含まれてしまいます。\nsrc/main.rs の `mod runique_test;` の直前に `#[cfg(test)]` を置いてください。",
    "file_not_declared_warning": "警告: src/runique_test/{}.rs が mod.rs で宣言されていないため、そのテストは実行されません。mod.rs に `mod {};` を追加してください。",
    "no_test_file": "src/runique_test/{}.rs がありません。テストファイル: {}",
    "file_not_declared": "src/runique_test/{}.rs が mod.rs で宣言されていません。`mod {};` を追加してください。",
    "cargo_spawn_failed": "cargo を実行できませんでした。",
    "output_failed": "cargo の出力を表示できませんでした。",
    "cargo_wait_failed": "cargo test が正常に終了しませんでした。",
    "tests_failed": "cargo test が失敗しました。上の出力を確認してください。",
    "build_failed": "cargo がテストをビルドできませんでした。上のエラーを確認してください。",
    "no_such_test": "テスト \"{}\" は {}.rs にありません。利用可能なテスト: {}",
    "dir_read_failed": "{} を読み込めません"
  },
  "auth": {
    "login_cannot_sign_in": "このアカウントはログインできません: 無効か、一度も有効化されていません。",
    "login_session_failed": "セッションを保存できませんでした: {}"
  }
}