@mulmoclaude/accounting-plugin 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/dist/server/atomic.d.ts +5 -3
  2. package/dist/server/atomic.d.ts.map +1 -1
  3. package/dist/server/context.d.ts +0 -7
  4. package/dist/server/context.d.ts.map +1 -1
  5. package/dist/server/http.d.ts +2 -2
  6. package/dist/server/http.d.ts.map +1 -1
  7. package/dist/server/io.d.ts.map +1 -1
  8. package/dist/server.cjs +35 -15
  9. package/dist/server.cjs.map +1 -1
  10. package/dist/server.js +34 -14
  11. package/dist/server.js.map +1 -1
  12. package/dist/shared/api.d.ts +7 -0
  13. package/dist/shared/api.d.ts.map +1 -0
  14. package/dist/shared/index.d.ts +2 -0
  15. package/dist/shared/index.d.ts.map +1 -1
  16. package/dist/shared/paths.d.ts +7 -0
  17. package/dist/shared/paths.d.ts.map +1 -0
  18. package/dist/shared.cjs +16 -0
  19. package/dist/shared.cjs.map +1 -1
  20. package/dist/shared.js +15 -1
  21. package/dist/shared.js.map +1 -1
  22. package/dist/style.css +10 -10
  23. package/dist/vue/api.d.ts.map +1 -1
  24. package/dist/vue/hostContext.d.ts +8 -0
  25. package/dist/vue/hostContext.d.ts.map +1 -1
  26. package/dist/vue/index.d.ts +1 -1
  27. package/dist/vue/index.d.ts.map +1 -1
  28. package/dist/vue/lang/de.d.ts +4 -0
  29. package/dist/vue/lang/de.d.ts.map +1 -0
  30. package/dist/vue/lang/en.d.ts +220 -0
  31. package/dist/vue/lang/en.d.ts.map +1 -0
  32. package/dist/vue/lang/es.d.ts +4 -0
  33. package/dist/vue/lang/es.d.ts.map +1 -0
  34. package/dist/vue/lang/fr.d.ts +4 -0
  35. package/dist/vue/lang/fr.d.ts.map +1 -0
  36. package/dist/vue/lang/index.d.ts +233 -0
  37. package/dist/vue/lang/index.d.ts.map +1 -0
  38. package/dist/vue/lang/ja.d.ts +4 -0
  39. package/dist/vue/lang/ja.d.ts.map +1 -0
  40. package/dist/vue/lang/ko.d.ts +4 -0
  41. package/dist/vue/lang/ko.d.ts.map +1 -0
  42. package/dist/vue/lang/ptBR.d.ts +4 -0
  43. package/dist/vue/lang/ptBR.d.ts.map +1 -0
  44. package/dist/vue/lang/zh.d.ts +4 -0
  45. package/dist/vue/lang/zh.d.ts.map +1 -0
  46. package/dist/vue.cjs +1781 -21
  47. package/dist/vue.cjs.map +1 -1
  48. package/dist/vue.js +1784 -24
  49. package/dist/vue.js.map +1 -1
  50. package/package.json +1 -1
package/dist/vue.js CHANGED
@@ -1,6 +1,6 @@
1
- import { ACCOUNTING_ACTIONS, ACCOUNTING_BOOKS_CHANNEL, FISCAL_YEAR_ENDS, SUPPORTED_COUNTRY_CODES, SUPPORTED_CURRENCY_CODES, bookChannel, countryHasFeature, currentFiscalYearRange, currentQuarterRange, decemberOfPreviousYearString, errorMessage, formatAmount, formatAmountNumeric, inputStepFor, isSupportedCountryCode, lastMonthOfPreviousQuarterString, localDateString, localMonthString, localizedCountryName, localizedCurrencyName, previousFiscalYearRange, previousMonthString, previousQuarterRange, resolveFiscalYearEnd } from "./shared.js";
2
- import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, nextTick, normalizeClass, onMounted, onUnmounted, openBlock, reactive, ref, renderList, toDisplayString, unref, vModelSelect, vModelText, watch, withDirectives, withKeys, withModifiers } from "vue";
3
- import { useI18n } from "vue-i18n";
1
+ import { ACCOUNTING_ACTIONS, ACCOUNTING_API, ACCOUNTING_BOOKS_CHANNEL, FISCAL_YEAR_ENDS, SUPPORTED_COUNTRY_CODES, SUPPORTED_CURRENCY_CODES, bookChannel, countryHasFeature, currentFiscalYearRange, currentQuarterRange, decemberOfPreviousYearString, errorMessage, formatAmount, formatAmountNumeric, inputStepFor, isSupportedCountryCode, lastMonthOfPreviousQuarterString, localDateString, localMonthString, localizedCountryName, localizedCurrencyName, previousFiscalYearRange, previousMonthString, previousQuarterRange, resolveFiscalYearEnd } from "./shared.js";
2
+ import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, effectScope, nextTick, normalizeClass, onMounted, onUnmounted, openBlock, reactive, ref, renderList, toDisplayString, unref, vModelSelect, vModelText, watch, watchEffect, withDirectives, withKeys, withModifiers } from "vue";
3
+ import { createI18n } from "vue-i18n";
4
4
  //#region src/vue/hostContext.ts
5
5
  var ctx = null;
6
6
  /** Called once by the host before any accounting View mounts. */
@@ -17,10 +17,1770 @@ function hostApiCall(path, opts) {
17
17
  function hostSubscribe(channel, handler) {
18
18
  return requireCtx().subscribe(channel, handler);
19
19
  }
20
+ /** The host's active i18n locale tag, read reactively by the plugin's own
21
+ * vue-i18n instance (see `./lang`). */
22
+ function hostLocaleTag() {
23
+ return requireCtx().localeTag();
24
+ }
25
+ //#endregion
26
+ //#region src/vue/lang/index.ts
27
+ var i18n = createI18n({
28
+ legacy: false,
29
+ locale: "en",
30
+ fallbackLocale: "en",
31
+ messages: {
32
+ en: { pluginAccounting: {
33
+ title: "Accounting",
34
+ noBook: "No books yet — click \"+ New book\" above to create your first one.",
35
+ common: {
36
+ cancel: "Cancel",
37
+ loading: "Loading…",
38
+ error: "Error: {error}",
39
+ empty: "No entries yet."
40
+ },
41
+ tabs: {
42
+ journal: "Journal",
43
+ newEntry: "New entry",
44
+ opening: "Opening",
45
+ accounts: "Accounts",
46
+ ledger: "Ledger",
47
+ balanceSheet: "Balance sheet",
48
+ profitLoss: "P&L",
49
+ settings: "Settings"
50
+ },
51
+ bookSwitcher: {
52
+ label: "Book",
53
+ newBook: "New book…",
54
+ create: "Create",
55
+ nameLabel: "Name",
56
+ currencyLabel: "Currency",
57
+ countryLabel: "Country",
58
+ countryPlaceholder: "Select a country…",
59
+ countryHint: "The country sets the tax jurisdiction so the assistant can give country-specific advice (T-number for Japan, VAT ID for the EU, etc.).",
60
+ fiscalYearEndLabel: "Fiscal year end",
61
+ fiscalYearEndQ1: "March 31 (Q1)",
62
+ fiscalYearEndQ2: "June 30 (Q2)",
63
+ fiscalYearEndQ3: "September 30 (Q3)",
64
+ fiscalYearEndQ4: "December 31 (Q4)",
65
+ fiscalYearEndHint: "Determines the fiscal year boundary used by the date-range shortcuts in this book. Default is December 31 (Q4 — calendar year).",
66
+ placeholder: "Pick a book…",
67
+ firstRunHint: "Pick a name, currency, country, and fiscal year end for your first book. The currency is set per-book and is hard to change once you start booking entries."
68
+ },
69
+ deletedNotice: {
70
+ title: "\"{bookName}\" has been deleted.",
71
+ body: "Pick another book from the dropdown above, or create a new one."
72
+ },
73
+ journalList: {
74
+ fromLabel: "From",
75
+ toLabel: "To",
76
+ accountLabel: "Account",
77
+ allAccounts: "All accounts",
78
+ void: "Void",
79
+ edit: "Edit",
80
+ voidConfirm: "Void this entry? The original stays in the journal; a reversing pair is appended.",
81
+ voidReason: "Reason (optional):",
82
+ columns: {
83
+ date: "Date",
84
+ kind: "Kind",
85
+ memo: "Memo",
86
+ lines: "Lines"
87
+ },
88
+ kind: {
89
+ normal: "—",
90
+ opening: "Opening",
91
+ void: "Reverse",
92
+ voidMarker: "Void marker"
93
+ }
94
+ },
95
+ entryForm: {
96
+ title: "New journal entry",
97
+ editTitle: "Edit journal entry",
98
+ editBanner: "When you submit, the original entry will be voided and replaced by this one.",
99
+ dateLabel: "Date",
100
+ memoLabel: "Memo",
101
+ accountLabel: "Account",
102
+ debitLabel: "Debit",
103
+ creditLabel: "Credit",
104
+ taxRegistrationIdLabel: "Tax registration ID",
105
+ taxRegistrationIdPlaceholder: "T-number / VAT ID / GSTIN…",
106
+ taxRegistrationIdMissingWarning: "Required",
107
+ addLine: "Add line",
108
+ removeLine: "Remove",
109
+ submit: "Post entry",
110
+ submitting: "Posting…",
111
+ update: "Update entry",
112
+ updating: "Updating…",
113
+ cancelEdit: "Cancel",
114
+ success: "Entry posted.",
115
+ editSuccess: "Entry updated.",
116
+ editVoidReason: "edited",
117
+ imbalance: "Imbalance: {amount}",
118
+ balanced: "Balanced ✓"
119
+ },
120
+ openingForm: {
121
+ title: "Opening balances",
122
+ asOfLabel: "As of",
123
+ explainer: "Enter your balance-sheet positions as of the start date. Income / expense accounts are not allowed here. Σ debit must equal Σ credit; the difference plug-in is Retained Earnings.",
124
+ emptyHint: "It's fine to save with everything blank — you can update opening balances later. The book just needs an opening on file before other tabs unlock.",
125
+ explainer2: "Balance-sheet accounts only.",
126
+ submit: "Save opening balances",
127
+ replaceWarning: "Saving replaces the existing opening (the old one is voided in the journal).",
128
+ none: "No opening balance set yet.",
129
+ setBy: "Set as of {date}",
130
+ success: "Opening balances saved."
131
+ },
132
+ ledger: {
133
+ selectAccount: "Select account",
134
+ closingBalance: "Closing balance",
135
+ columns: {
136
+ date: "Date",
137
+ memo: "Memo",
138
+ debit: "Debit",
139
+ credit: "Credit",
140
+ balance: "Balance",
141
+ taxRegistrationId: "Tax registration ID"
142
+ }
143
+ },
144
+ dateRange: {
145
+ shortcutLabel: "Range",
146
+ currentQuarter: "Current quarter",
147
+ previousQuarter: "Last quarter",
148
+ currentYear: "Current year",
149
+ previousYear: "Last year",
150
+ lifetime: "Lifetime",
151
+ all: "All",
152
+ fromLabel: "From",
153
+ toLabel: "To"
154
+ },
155
+ balanceSheet: {
156
+ asOfLabel: "Period",
157
+ sections: {
158
+ asset: "Assets",
159
+ liability: "Liabilities",
160
+ equity: "Equity"
161
+ },
162
+ total: "Total",
163
+ imbalance: "Imbalance: {amount}",
164
+ currentEarnings: "Current period earnings",
165
+ shortcutLabel: "Shortcut",
166
+ thisMonth: "This month",
167
+ lastMonth: "Last month",
168
+ lastQuarter: "Last quarter",
169
+ lastYear: "Last year"
170
+ },
171
+ profitLoss: {
172
+ fromLabel: "From",
173
+ toLabel: "To",
174
+ income: "Income",
175
+ expense: "Expense",
176
+ netIncome: "Net income:"
177
+ },
178
+ accounts: {
179
+ listEmpty: "No accounts in this category yet.",
180
+ openLedgerAria: "Open ledger for {code} {name}",
181
+ manageButton: "Manage accounts",
182
+ modalTitle: "Manage accounts",
183
+ addAccount: "Add account",
184
+ sectionTitle: {
185
+ asset: "Assets",
186
+ liability: "Liabilities",
187
+ equity: "Equity",
188
+ income: "Income",
189
+ expense: "Expenses"
190
+ },
191
+ columnCode: "Code",
192
+ columnName: "Name",
193
+ columnType: "Type",
194
+ columnNote: "Note",
195
+ typeOption: {
196
+ asset: "Asset",
197
+ liability: "Liability",
198
+ equity: "Equity",
199
+ income: "Income",
200
+ expense: "Expense"
201
+ },
202
+ edit: "Edit",
203
+ save: "Save",
204
+ cancel: "Cancel",
205
+ saving: "Saving…",
206
+ addToCategory: "Add {type} account",
207
+ deactivate: "Deactivate",
208
+ reactivate: "Activate",
209
+ deactivateConfirm: "Hide \"{name}\" from entry/ledger dropdowns? Existing journal entries are unaffected.",
210
+ errorEmptyCode: "Code is required.",
211
+ errorReservedCode: "Codes starting with “_” are reserved for system rows.",
212
+ errorInvalidCodeFormat: "Account code must be exactly 4 digits.",
213
+ errorCodeTypeMismatch: "Code must match the account type: 1xxx asset, 2xxx liability, 3xxx equity, 4xxx income, 5xxx expense.",
214
+ errorEmptyName: "Name is required.",
215
+ errorDuplicateCode: "An account with this code already exists.",
216
+ errorDuplicateName: "An account with this name already exists.",
217
+ success: "Account saved.",
218
+ codeReadOnlyHint: "Code can't be changed once an account is created.",
219
+ noteOptional: "(optional)"
220
+ },
221
+ settings: {
222
+ bookInfo: "Book information",
223
+ bookInfoExplain: "Edit the country to update tax-jurisdiction-specific advice. Currency cannot be changed once entries are booked.",
224
+ countryUnset: "(not set)",
225
+ fiscalYearEndExplain: "Changes only how date-range shortcuts resolve from now on; existing journal entries are not moved.",
226
+ saveChanges: "Save changes",
227
+ updateOk: "Book updated.",
228
+ rebuild: "Rebuild snapshots",
229
+ rebuildExplain: "Drops every cached monthly snapshot and recomputes them from the journal. Safe to run; useful after editing journal files by hand.",
230
+ rebuildOk: "Rebuilt {count} period(s).",
231
+ advanced: "Advanced…",
232
+ deleteBook: "Delete book",
233
+ deleteBookExplain: "Permanently deletes this book's directory. Cannot be undone.",
234
+ deleteBookConfirm: "Type \"{bookName}\" to confirm:",
235
+ deleteBookButton: "Delete forever"
236
+ },
237
+ preview: {
238
+ entry: "Posted entry on {date}",
239
+ pl: "P&L {from} → {to}: net {net}",
240
+ bs: "Balance sheet as of {date} · assets {assets}",
241
+ bookCreated: "Created book \"{name}\" ({id})"
242
+ },
243
+ previewSummary: "Accounting · {bookId}",
244
+ previewError: "Accounting: {error}",
245
+ previewGeneric: "Accounting result"
246
+ } },
247
+ ja: { pluginAccounting: {
248
+ title: "会計",
249
+ noBook: "まだ帳簿がありません — 上の \"+ 新しい帳簿\" から作成してください。",
250
+ common: {
251
+ cancel: "キャンセル",
252
+ loading: "読み込み中…",
253
+ error: "エラー: {error}",
254
+ empty: "まだエントリがありません。"
255
+ },
256
+ tabs: {
257
+ journal: "仕訳",
258
+ newEntry: "新規仕訳",
259
+ opening: "期首残高",
260
+ accounts: "勘定科目",
261
+ ledger: "元帳",
262
+ balanceSheet: "貸借対照表",
263
+ profitLoss: "損益",
264
+ settings: "設定"
265
+ },
266
+ bookSwitcher: {
267
+ label: "帳簿",
268
+ newBook: "新しい帳簿…",
269
+ create: "作成",
270
+ nameLabel: "名前",
271
+ currencyLabel: "通貨",
272
+ countryLabel: "国",
273
+ countryPlaceholder: "国を選択…",
274
+ countryHint: "国を設定すると税の管轄が決まり、アシスタントが国別のアドバイス(日本のT番号、EUのVAT IDなど)を提供できます。",
275
+ fiscalYearEndLabel: "会計年度末日",
276
+ fiscalYearEndQ1: "3月31日 (Q1)",
277
+ fiscalYearEndQ2: "6月30日 (Q2)",
278
+ fiscalYearEndQ3: "9月30日 (Q3)",
279
+ fiscalYearEndQ4: "12月31日 (Q4)",
280
+ fiscalYearEndHint: "この帳簿の日付範囲ショートカットで使う会計年度の境界を決めます。デフォルトは12月31日(Q4 — 暦年)。",
281
+ placeholder: "帳簿を選択…",
282
+ firstRunHint: "最初の帳簿の名前・通貨・国・会計年度末日を選んでください。通貨は帳簿ごとに固定で、仕訳を入力した後の変更は難しくなります。"
283
+ },
284
+ deletedNotice: {
285
+ title: "「{bookName}」を削除しました。",
286
+ body: "上のドロップダウンから別の帳簿を選ぶか、新しい帳簿を作成してください。"
287
+ },
288
+ journalList: {
289
+ fromLabel: "開始日",
290
+ toLabel: "終了日",
291
+ accountLabel: "勘定科目",
292
+ allAccounts: "すべての科目",
293
+ void: "取消",
294
+ edit: "編集",
295
+ voidConfirm: "この仕訳を取り消しますか?元の仕訳は journal に残り、逆仕訳が追記されます。",
296
+ voidReason: "理由(任意):",
297
+ columns: {
298
+ date: "日付",
299
+ kind: "種別",
300
+ memo: "メモ",
301
+ lines: "行"
302
+ },
303
+ kind: {
304
+ normal: "—",
305
+ opening: "期首",
306
+ void: "逆仕訳",
307
+ voidMarker: "取消マーカー"
308
+ }
309
+ },
310
+ entryForm: {
311
+ title: "新規仕訳",
312
+ editTitle: "仕訳の編集",
313
+ editBanner: "送信すると、元の仕訳は取り消され、この内容で置き換えられます。",
314
+ dateLabel: "日付",
315
+ memoLabel: "メモ",
316
+ accountLabel: "勘定科目",
317
+ debitLabel: "借方",
318
+ creditLabel: "貸方",
319
+ taxRegistrationIdLabel: "登録番号",
320
+ taxRegistrationIdPlaceholder: "T1234567890123",
321
+ taxRegistrationIdMissingWarning: "必須",
322
+ addLine: "行を追加",
323
+ removeLine: "削除",
324
+ submit: "起票",
325
+ submitting: "起票中…",
326
+ update: "更新",
327
+ updating: "更新中…",
328
+ cancelEdit: "キャンセル",
329
+ success: "起票しました。",
330
+ editSuccess: "仕訳を更新しました。",
331
+ editVoidReason: "編集",
332
+ imbalance: "差額: {amount}",
333
+ balanced: "バランス OK ✓"
334
+ },
335
+ openingForm: {
336
+ title: "期首残高",
337
+ asOfLabel: "基準日",
338
+ explainer: "B/S 科目(資産・負債・純資産)のみ入力可能。Σ借方=Σ貸方を満たす必要があり、差額は Retained Earnings に集約されます。",
339
+ emptyHint: "すべて空欄のまま保存しても構いません — 期首残高は後から更新できます。他のタブを利用するには、いったん期首残高が登録されている必要があります。",
340
+ explainer2: "B/S 科目のみ。",
341
+ submit: "期首残高を保存",
342
+ replaceWarning: "保存すると既存の期首残高は journal で取り消されます。",
343
+ none: "期首残高は未設定です。",
344
+ setBy: "{date} 時点で設定済み",
345
+ success: "期首残高を保存しました。"
346
+ },
347
+ ledger: {
348
+ selectAccount: "科目を選択",
349
+ closingBalance: "期末残高",
350
+ columns: {
351
+ date: "日付",
352
+ memo: "メモ",
353
+ debit: "借方",
354
+ credit: "貸方",
355
+ balance: "残高",
356
+ taxRegistrationId: "登録番号"
357
+ }
358
+ },
359
+ dateRange: {
360
+ shortcutLabel: "範囲",
361
+ currentQuarter: "今四半期",
362
+ previousQuarter: "前四半期",
363
+ currentYear: "今年度",
364
+ previousYear: "前年度",
365
+ lifetime: "開設以来",
366
+ all: "すべて",
367
+ fromLabel: "開始日",
368
+ toLabel: "終了日"
369
+ },
370
+ balanceSheet: {
371
+ asOfLabel: "対象月",
372
+ sections: {
373
+ asset: "資産",
374
+ liability: "負債",
375
+ equity: "純資産"
376
+ },
377
+ total: "合計",
378
+ imbalance: "差額: {amount}",
379
+ currentEarnings: "当期純損益",
380
+ shortcutLabel: "ショートカット",
381
+ thisMonth: "今月",
382
+ lastMonth: "先月",
383
+ lastQuarter: "前四半期",
384
+ lastYear: "前年"
385
+ },
386
+ profitLoss: {
387
+ fromLabel: "開始日",
388
+ toLabel: "終了日",
389
+ income: "収益",
390
+ expense: "費用",
391
+ netIncome: "当期純利益:"
392
+ },
393
+ accounts: {
394
+ listEmpty: "このカテゴリにはまだ勘定科目がありません。",
395
+ openLedgerAria: "{code} {name} の元帳を開く",
396
+ manageButton: "勘定科目を管理",
397
+ modalTitle: "勘定科目の管理",
398
+ addAccount: "勘定科目を追加",
399
+ sectionTitle: {
400
+ asset: "資産",
401
+ liability: "負債",
402
+ equity: "純資産",
403
+ income: "収益",
404
+ expense: "費用"
405
+ },
406
+ columnCode: "コード",
407
+ columnName: "名称",
408
+ columnType: "区分",
409
+ columnNote: "メモ",
410
+ typeOption: {
411
+ asset: "資産",
412
+ liability: "負債",
413
+ equity: "純資産",
414
+ income: "収益",
415
+ expense: "費用"
416
+ },
417
+ edit: "編集",
418
+ save: "保存",
419
+ cancel: "キャンセル",
420
+ saving: "保存中…",
421
+ addToCategory: "{type}を追加",
422
+ deactivate: "無効化",
423
+ reactivate: "有効化",
424
+ deactivateConfirm: "「{name}」を仕訳・元帳の選択肢から非表示にしますか?既存の仕訳には影響しません。",
425
+ errorEmptyCode: "コードは必須です。",
426
+ errorReservedCode: "「_」で始まるコードはシステム用に予約されています。",
427
+ errorInvalidCodeFormat: "勘定科目コードは4桁の数字で入力してください。",
428
+ errorCodeTypeMismatch: "コードの先頭桁は勘定科目タイプと一致させてください: 1xxx 資産, 2xxx 負債, 3xxx 純資産, 4xxx 収益, 5xxx 費用。",
429
+ errorEmptyName: "名称は必須です。",
430
+ errorDuplicateCode: "このコードの勘定科目は既に存在します。",
431
+ errorDuplicateName: "この名称の勘定科目は既に存在します。",
432
+ success: "勘定科目を保存しました。",
433
+ codeReadOnlyHint: "コードは作成後に変更できません。",
434
+ noteOptional: "(任意)"
435
+ },
436
+ settings: {
437
+ bookInfo: "帳簿情報",
438
+ bookInfoExplain: "国を編集すると税の管轄に応じたアドバイスが更新されます。通貨は仕訳を入力した後は変更できません。",
439
+ countryUnset: "(未設定)",
440
+ fiscalYearEndExplain: "今後の日付範囲ショートカットの解決方法のみが変わります。既存の仕訳は移動しません。",
441
+ saveChanges: "変更を保存",
442
+ updateOk: "帳簿を更新しました。",
443
+ rebuild: "スナップショット再構築",
444
+ rebuildExplain: "月次スナップショットキャッシュをすべて削除し、journal から再計算します。journal を手で編集した後のリカバリに使えます。",
445
+ rebuildOk: "{count} 期間を再構築しました。",
446
+ advanced: "詳細設定…",
447
+ deleteBook: "帳簿を削除",
448
+ deleteBookExplain: "この帳簿のディレクトリを完全に削除します。元に戻せません。",
449
+ deleteBookConfirm: "確認のため \"{bookName}\" を入力してください:",
450
+ deleteBookButton: "完全に削除"
451
+ },
452
+ preview: {
453
+ entry: "{date} の仕訳を起票",
454
+ pl: "P&L {from} → {to}: 純損益 {net}",
455
+ bs: "{date} 時点の B/S · 資産 {assets}",
456
+ bookCreated: "帳簿 \"{name}\" ({id}) を作成"
457
+ },
458
+ previewSummary: "会計 · {bookId}",
459
+ previewError: "会計: {error}",
460
+ previewGeneric: "会計の結果"
461
+ } },
462
+ zh: { pluginAccounting: {
463
+ title: "会计",
464
+ noBook: "尚无账簿 — 点击上方 \"+ 新建账簿\" 创建第一个。",
465
+ common: {
466
+ cancel: "取消",
467
+ loading: "加载中…",
468
+ error: "错误: {error}",
469
+ empty: "尚无条目。"
470
+ },
471
+ tabs: {
472
+ journal: "日记账",
473
+ newEntry: "新建分录",
474
+ opening: "期初余额",
475
+ accounts: "科目",
476
+ ledger: "明细账",
477
+ balanceSheet: "资产负债表",
478
+ profitLoss: "损益",
479
+ settings: "设置"
480
+ },
481
+ bookSwitcher: {
482
+ label: "账簿",
483
+ newBook: "新建账簿…",
484
+ create: "创建",
485
+ nameLabel: "名称",
486
+ currencyLabel: "货币",
487
+ countryLabel: "国家/地区",
488
+ countryPlaceholder: "选择国家/地区…",
489
+ countryHint: "国家/地区决定税务管辖,助手可据此提供本地化建议(日本T号、欧盟VAT ID等)。",
490
+ fiscalYearEndLabel: "财年结束日",
491
+ fiscalYearEndQ1: "3月31日 (Q1)",
492
+ fiscalYearEndQ2: "6月30日 (Q2)",
493
+ fiscalYearEndQ3: "9月30日 (Q3)",
494
+ fiscalYearEndQ4: "12月31日 (Q4)",
495
+ fiscalYearEndHint: "决定本账簿日期范围快捷方式所使用的财年边界。默认 12月31日(Q4 — 自然年)。",
496
+ placeholder: "选择账簿…",
497
+ firstRunHint: "请为第一本账簿选择名称、货币、国家/地区与财年结束日。货币按账簿固定,登账后再更改会比较困难。"
498
+ },
499
+ deletedNotice: {
500
+ title: "“{bookName}” 已删除。",
501
+ body: "请从上方下拉菜单选择其他账簿,或新建一本。"
502
+ },
503
+ journalList: {
504
+ fromLabel: "起始",
505
+ toLabel: "结束",
506
+ accountLabel: "科目",
507
+ allAccounts: "所有科目",
508
+ void: "冲销",
509
+ edit: "编辑",
510
+ voidConfirm: "冲销此分录?原始分录保留在日记账中,会追加一对反向分录。",
511
+ voidReason: "原因(可选):",
512
+ columns: {
513
+ date: "日期",
514
+ kind: "类型",
515
+ memo: "备注",
516
+ lines: "明细"
517
+ },
518
+ kind: {
519
+ normal: "—",
520
+ opening: "期初",
521
+ void: "反向",
522
+ voidMarker: "冲销标记"
523
+ }
524
+ },
525
+ entryForm: {
526
+ title: "新建分录",
527
+ editTitle: "编辑分录",
528
+ editBanner: "提交后,原分录将被冲销并以此内容替换。",
529
+ dateLabel: "日期",
530
+ memoLabel: "备注",
531
+ accountLabel: "科目",
532
+ debitLabel: "借方",
533
+ creditLabel: "贷方",
534
+ taxRegistrationIdLabel: "税务登记号",
535
+ taxRegistrationIdPlaceholder: "T-number / VAT ID / GSTIN…",
536
+ taxRegistrationIdMissingWarning: "必填",
537
+ addLine: "添加行",
538
+ removeLine: "删除",
539
+ submit: "登账",
540
+ submitting: "登账中…",
541
+ update: "更新",
542
+ updating: "更新中…",
543
+ cancelEdit: "取消",
544
+ success: "已登账。",
545
+ editSuccess: "分录已更新。",
546
+ editVoidReason: "已编辑",
547
+ imbalance: "差额: {amount}",
548
+ balanced: "已平衡 ✓"
549
+ },
550
+ openingForm: {
551
+ title: "期初余额",
552
+ asOfLabel: "基准日",
553
+ explainer: "仅允许 B/S 科目(资产 / 负债 / 权益)。Σ借方=Σ贷方,差额会落入 Retained Earnings。",
554
+ emptyHint: "可以全部留空保存——期初余额稍后再更新。账簿只需先存在一条期初记录,其他标签页才会解锁。",
555
+ explainer2: "仅 B/S 科目。",
556
+ submit: "保存期初余额",
557
+ replaceWarning: "保存会替换现有期初余额(旧的会在日记账中冲销)。",
558
+ none: "尚未设置期初余额。",
559
+ setBy: "{date} 已设置",
560
+ success: "期初余额已保存。"
561
+ },
562
+ ledger: {
563
+ selectAccount: "选择科目",
564
+ closingBalance: "期末余额",
565
+ columns: {
566
+ date: "日期",
567
+ memo: "备注",
568
+ debit: "借方",
569
+ credit: "贷方",
570
+ balance: "余额",
571
+ taxRegistrationId: "税务登记号"
572
+ }
573
+ },
574
+ dateRange: {
575
+ shortcutLabel: "范围",
576
+ currentQuarter: "本季度",
577
+ previousQuarter: "上季度",
578
+ currentYear: "本年度",
579
+ previousYear: "上年度",
580
+ lifetime: "自开账以来",
581
+ all: "全部",
582
+ fromLabel: "起始",
583
+ toLabel: "结束"
584
+ },
585
+ balanceSheet: {
586
+ asOfLabel: "期间",
587
+ sections: {
588
+ asset: "资产",
589
+ liability: "负债",
590
+ equity: "权益"
591
+ },
592
+ total: "合计",
593
+ imbalance: "差额: {amount}",
594
+ currentEarnings: "当期净损益",
595
+ shortcutLabel: "快捷方式",
596
+ thisMonth: "本月",
597
+ lastMonth: "上月",
598
+ lastQuarter: "上季度",
599
+ lastYear: "上年"
600
+ },
601
+ profitLoss: {
602
+ fromLabel: "起始",
603
+ toLabel: "结束",
604
+ income: "收入",
605
+ expense: "支出",
606
+ netIncome: "净利润:"
607
+ },
608
+ accounts: {
609
+ listEmpty: "此分类下暂无科目。",
610
+ openLedgerAria: "打开 {code} {name} 的明细账",
611
+ manageButton: "管理科目",
612
+ modalTitle: "管理科目",
613
+ addAccount: "添加科目",
614
+ sectionTitle: {
615
+ asset: "资产",
616
+ liability: "负债",
617
+ equity: "权益",
618
+ income: "收入",
619
+ expense: "费用"
620
+ },
621
+ columnCode: "代码",
622
+ columnName: "名称",
623
+ columnType: "类型",
624
+ columnNote: "备注",
625
+ typeOption: {
626
+ asset: "资产",
627
+ liability: "负债",
628
+ equity: "权益",
629
+ income: "收入",
630
+ expense: "费用"
631
+ },
632
+ edit: "编辑",
633
+ save: "保存",
634
+ cancel: "取消",
635
+ saving: "保存中…",
636
+ addToCategory: "添加{type}",
637
+ deactivate: "停用",
638
+ reactivate: "启用",
639
+ deactivateConfirm: "在分录/明细账下拉框中隐藏“{name}”?现有日记账分录不受影响。",
640
+ errorEmptyCode: "代码不能为空。",
641
+ errorReservedCode: "以 “_” 开头的代码保留给系统行使用。",
642
+ errorInvalidCodeFormat: "科目代码必须为 4 位数字。",
643
+ errorCodeTypeMismatch: "代码首位必须与科目类型匹配:1xxx 资产,2xxx 负债,3xxx 权益,4xxx 收入,5xxx 费用。",
644
+ errorEmptyName: "名称不能为空。",
645
+ errorDuplicateCode: "此代码的科目已存在。",
646
+ errorDuplicateName: "此名称的科目已存在。",
647
+ success: "科目已保存。",
648
+ codeReadOnlyHint: "科目创建后代码不能更改。",
649
+ noteOptional: "(可选)"
650
+ },
651
+ settings: {
652
+ bookInfo: "账簿信息",
653
+ bookInfoExplain: "修改国家/地区可更新税务管辖相关建议。开始登账后货币不可更改。",
654
+ countryUnset: "(未设置)",
655
+ fiscalYearEndExplain: "仅影响今后日期范围快捷方式的解析方式;现有日记账分录不会移动。",
656
+ saveChanges: "保存更改",
657
+ updateOk: "账簿已更新。",
658
+ rebuild: "重建快照",
659
+ rebuildExplain: "删除全部月度快照缓存并从日记账重新计算。手动编辑日记账后可用。",
660
+ rebuildOk: "已重建 {count} 期。",
661
+ advanced: "高级设置…",
662
+ deleteBook: "删除账簿",
663
+ deleteBookExplain: "永久删除该账簿目录。无法撤销。",
664
+ deleteBookConfirm: "请输入 \"{bookName}\" 以确认:",
665
+ deleteBookButton: "彻底删除"
666
+ },
667
+ preview: {
668
+ entry: "已记账 {date} 的分录",
669
+ pl: "P&L {from} → {to}: 净额 {net}",
670
+ bs: "{date} 资产负债表 · 资产 {assets}",
671
+ bookCreated: "已创建账簿 \"{name}\" ({id})"
672
+ },
673
+ previewSummary: "会计 · {bookId}",
674
+ previewError: "会计: {error}",
675
+ previewGeneric: "会计结果"
676
+ } },
677
+ ko: { pluginAccounting: {
678
+ title: "회계",
679
+ noBook: "장부가 없습니다 — 위의 \"+ 새 장부\"를 눌러 첫 장부를 만드세요.",
680
+ common: {
681
+ cancel: "취소",
682
+ loading: "불러오는 중…",
683
+ error: "오류: {error}",
684
+ empty: "아직 항목이 없습니다."
685
+ },
686
+ tabs: {
687
+ journal: "분개장",
688
+ newEntry: "새 분개",
689
+ opening: "기초잔액",
690
+ accounts: "계정",
691
+ ledger: "원장",
692
+ balanceSheet: "재무상태표",
693
+ profitLoss: "손익",
694
+ settings: "설정"
695
+ },
696
+ bookSwitcher: {
697
+ label: "장부",
698
+ newBook: "새 장부…",
699
+ create: "생성",
700
+ nameLabel: "이름",
701
+ currencyLabel: "통화",
702
+ countryLabel: "국가",
703
+ countryPlaceholder: "국가 선택…",
704
+ countryHint: "국가를 설정하면 세무 관할이 결정되어 어시스턴트가 국가별 안내(일본 T-번호, EU VAT ID 등)를 제공할 수 있습니다.",
705
+ fiscalYearEndLabel: "회계연도 종료일",
706
+ fiscalYearEndQ1: "3월 31일 (Q1)",
707
+ fiscalYearEndQ2: "6월 30일 (Q2)",
708
+ fiscalYearEndQ3: "9월 30일 (Q3)",
709
+ fiscalYearEndQ4: "12월 31일 (Q4)",
710
+ fiscalYearEndHint: "이 장부의 날짜 범위 단축 메뉴에 사용되는 회계연도 경계를 결정합니다. 기본값은 12월 31일(Q4 — 달력 연도)입니다.",
711
+ placeholder: "장부 선택…",
712
+ firstRunHint: "첫 장부의 이름, 통화, 국가, 회계연도 종료일을 선택하세요. 통화는 장부별로 설정되며 분개를 시작한 뒤에는 변경이 어렵습니다."
713
+ },
714
+ deletedNotice: {
715
+ title: "“{bookName}” 장부가 삭제되었습니다.",
716
+ body: "위 드롭다운에서 다른 장부를 선택하거나 새 장부를 만드세요."
717
+ },
718
+ journalList: {
719
+ fromLabel: "시작",
720
+ toLabel: "종료",
721
+ accountLabel: "계정",
722
+ allAccounts: "모든 계정",
723
+ void: "취소",
724
+ edit: "편집",
725
+ voidConfirm: "이 분개를 취소하시겠습니까? 원 분개는 분개장에 남고 반대 분개가 추가됩니다.",
726
+ voidReason: "사유(선택):",
727
+ columns: {
728
+ date: "날짜",
729
+ kind: "종류",
730
+ memo: "메모",
731
+ lines: "라인"
732
+ },
733
+ kind: {
734
+ normal: "—",
735
+ opening: "기초",
736
+ void: "반대",
737
+ voidMarker: "취소 마커"
738
+ }
739
+ },
740
+ entryForm: {
741
+ title: "새 분개",
742
+ editTitle: "분개 편집",
743
+ editBanner: "제출하면 원본 분개가 무효 처리되고 이 내용으로 대체됩니다.",
744
+ dateLabel: "날짜",
745
+ memoLabel: "메모",
746
+ accountLabel: "계정",
747
+ debitLabel: "차변",
748
+ creditLabel: "대변",
749
+ taxRegistrationIdLabel: "세무 등록번호",
750
+ taxRegistrationIdPlaceholder: "T-number / VAT ID / GSTIN…",
751
+ taxRegistrationIdMissingWarning: "필수",
752
+ addLine: "라인 추가",
753
+ removeLine: "삭제",
754
+ submit: "등록",
755
+ submitting: "등록 중…",
756
+ update: "업데이트",
757
+ updating: "업데이트 중…",
758
+ cancelEdit: "취소",
759
+ success: "분개를 등록했습니다.",
760
+ editSuccess: "분개가 업데이트되었습니다.",
761
+ editVoidReason: "편집됨",
762
+ imbalance: "차액: {amount}",
763
+ balanced: "균형 ✓"
764
+ },
765
+ openingForm: {
766
+ title: "기초잔액",
767
+ asOfLabel: "기준일",
768
+ explainer: "재무상태표 계정(자산/부채/자본)만 입력 가능. Σ차변=Σ대변이 되어야 하며 차액은 Retained Earnings에 흡수됩니다.",
769
+ emptyHint: "모두 비워둔 채 저장해도 괜찮습니다 — 기초잔액은 나중에 업데이트할 수 있습니다. 다른 탭을 사용하려면 일단 기초잔액 항목이 등록되어 있어야 합니다.",
770
+ explainer2: "재무상태표 계정만.",
771
+ submit: "기초잔액 저장",
772
+ replaceWarning: "저장 시 기존 기초잔액은 분개장에서 취소됩니다.",
773
+ none: "기초잔액이 설정되지 않았습니다.",
774
+ setBy: "{date} 기준 설정됨",
775
+ success: "기초잔액을 저장했습니다."
776
+ },
777
+ ledger: {
778
+ selectAccount: "계정 선택",
779
+ closingBalance: "기말 잔액",
780
+ columns: {
781
+ date: "날짜",
782
+ memo: "메모",
783
+ debit: "차변",
784
+ credit: "대변",
785
+ balance: "잔액",
786
+ taxRegistrationId: "세무 등록번호"
787
+ }
788
+ },
789
+ dateRange: {
790
+ shortcutLabel: "범위",
791
+ currentQuarter: "이번 분기",
792
+ previousQuarter: "지난 분기",
793
+ currentYear: "이번 연도",
794
+ previousYear: "지난 연도",
795
+ lifetime: "개설 이후",
796
+ all: "전체",
797
+ fromLabel: "시작",
798
+ toLabel: "종료"
799
+ },
800
+ balanceSheet: {
801
+ asOfLabel: "기간",
802
+ sections: {
803
+ asset: "자산",
804
+ liability: "부채",
805
+ equity: "자본"
806
+ },
807
+ total: "합계",
808
+ imbalance: "차액: {amount}",
809
+ currentEarnings: "당기 순손익",
810
+ shortcutLabel: "바로가기",
811
+ thisMonth: "이번 달",
812
+ lastMonth: "지난달",
813
+ lastQuarter: "지난 분기",
814
+ lastYear: "지난 연도"
815
+ },
816
+ profitLoss: {
817
+ fromLabel: "시작",
818
+ toLabel: "종료",
819
+ income: "수익",
820
+ expense: "비용",
821
+ netIncome: "당기순이익:"
822
+ },
823
+ accounts: {
824
+ listEmpty: "이 카테고리에는 아직 계정이 없습니다.",
825
+ openLedgerAria: "{code} {name} 원장 열기",
826
+ manageButton: "계정 관리",
827
+ modalTitle: "계정 관리",
828
+ addAccount: "계정 추가",
829
+ sectionTitle: {
830
+ asset: "자산",
831
+ liability: "부채",
832
+ equity: "자본",
833
+ income: "수익",
834
+ expense: "비용"
835
+ },
836
+ columnCode: "코드",
837
+ columnName: "이름",
838
+ columnType: "유형",
839
+ columnNote: "메모",
840
+ typeOption: {
841
+ asset: "자산",
842
+ liability: "부채",
843
+ equity: "자본",
844
+ income: "수익",
845
+ expense: "비용"
846
+ },
847
+ edit: "편집",
848
+ save: "저장",
849
+ cancel: "취소",
850
+ saving: "저장 중…",
851
+ addToCategory: "{type} 추가",
852
+ deactivate: "비활성화",
853
+ reactivate: "활성화",
854
+ deactivateConfirm: "‘{name}’을(를) 분개/원장 드롭다운에서 숨기시겠습니까? 기존 분개 항목에는 영향이 없습니다.",
855
+ errorEmptyCode: "코드는 필수입니다.",
856
+ errorReservedCode: "“_”로 시작하는 코드는 시스템 행에 예약되어 있습니다.",
857
+ errorInvalidCodeFormat: "계정 코드는 정확히 4자리 숫자여야 합니다.",
858
+ errorCodeTypeMismatch: "코드의 첫 자리는 계정 유형과 일치해야 합니다: 1xxx 자산, 2xxx 부채, 3xxx 자본, 4xxx 수익, 5xxx 비용.",
859
+ errorEmptyName: "이름은 필수입니다.",
860
+ errorDuplicateCode: "이 코드의 계정이 이미 존재합니다.",
861
+ errorDuplicateName: "이 이름의 계정이 이미 존재합니다.",
862
+ success: "계정을 저장했습니다.",
863
+ codeReadOnlyHint: "계정을 만든 후에는 코드를 변경할 수 없습니다.",
864
+ noteOptional: "(선택)"
865
+ },
866
+ settings: {
867
+ bookInfo: "장부 정보",
868
+ bookInfoExplain: "국가를 변경하면 세무 관할 기반 안내가 갱신됩니다. 분개를 시작한 뒤에는 통화를 변경할 수 없습니다.",
869
+ countryUnset: "(미설정)",
870
+ fiscalYearEndExplain: "이후 날짜 범위 단축 메뉴의 해석 방식만 변경됩니다. 기존 분개 항목은 이동되지 않습니다.",
871
+ saveChanges: "변경 저장",
872
+ updateOk: "장부를 업데이트했습니다.",
873
+ rebuild: "스냅샷 재구축",
874
+ rebuildExplain: "모든 월별 스냅샷 캐시를 지우고 분개장에서 재계산합니다. 분개 파일을 직접 편집한 뒤 복구할 때 유용합니다.",
875
+ rebuildOk: "{count}개 기간을 재구축했습니다.",
876
+ advanced: "고급…",
877
+ deleteBook: "장부 삭제",
878
+ deleteBookExplain: "이 장부의 디렉터리를 영구히 삭제합니다. 되돌릴 수 없습니다.",
879
+ deleteBookConfirm: "확인을 위해 \"{bookName}\"을 입력하세요:",
880
+ deleteBookButton: "영구 삭제"
881
+ },
882
+ preview: {
883
+ entry: "{date} 분개를 등록",
884
+ pl: "P&L {from} → {to}: 순이익 {net}",
885
+ bs: "{date} 재무상태표 · 자산 {assets}",
886
+ bookCreated: "장부 \"{name}\" ({id})를 생성했습니다"
887
+ },
888
+ previewSummary: "회계 · {bookId}",
889
+ previewError: "회계: {error}",
890
+ previewGeneric: "회계 결과"
891
+ } },
892
+ es: { pluginAccounting: {
893
+ title: "Contabilidad",
894
+ noBook: "Aún no hay libros — pulsa \"+ Nuevo libro\" arriba para crear el primero.",
895
+ common: {
896
+ cancel: "Cancelar",
897
+ loading: "Cargando…",
898
+ error: "Error: {error}",
899
+ empty: "Aún no hay entradas."
900
+ },
901
+ tabs: {
902
+ journal: "Diario",
903
+ newEntry: "Nueva entrada",
904
+ opening: "Apertura",
905
+ accounts: "Cuentas",
906
+ ledger: "Mayor",
907
+ balanceSheet: "Balance",
908
+ profitLoss: "P&L",
909
+ settings: "Ajustes"
910
+ },
911
+ bookSwitcher: {
912
+ label: "Libro",
913
+ newBook: "Nuevo libro…",
914
+ create: "Crear",
915
+ nameLabel: "Nombre",
916
+ currencyLabel: "Moneda",
917
+ countryLabel: "País",
918
+ countryPlaceholder: "Selecciona un país…",
919
+ countryHint: "El país define la jurisdicción fiscal para que el asistente pueda dar consejos específicos (T-number en Japón, ID de IVA en la UE, etc.).",
920
+ fiscalYearEndLabel: "Cierre del ejercicio",
921
+ fiscalYearEndQ1: "31 de marzo (Q1)",
922
+ fiscalYearEndQ2: "30 de junio (Q2)",
923
+ fiscalYearEndQ3: "30 de septiembre (Q3)",
924
+ fiscalYearEndQ4: "31 de diciembre (Q4)",
925
+ fiscalYearEndHint: "Define el límite del ejercicio para los atajos de rango de fechas de este libro. Por defecto: 31 de diciembre (Q4 — año natural).",
926
+ placeholder: "Elige un libro…",
927
+ firstRunHint: "Elige el nombre, la moneda, el país y el cierre de ejercicio de tu primer libro. La moneda se fija por libro y es difícil cambiarla una vez que empieces a registrar asientos."
928
+ },
929
+ deletedNotice: {
930
+ title: "“{bookName}” se ha eliminado.",
931
+ body: "Elige otro libro en el desplegable de arriba o crea uno nuevo."
932
+ },
933
+ journalList: {
934
+ fromLabel: "Desde",
935
+ toLabel: "Hasta",
936
+ accountLabel: "Cuenta",
937
+ allAccounts: "Todas",
938
+ void: "Anular",
939
+ edit: "Editar",
940
+ voidConfirm: "¿Anular esta entrada? La original permanece en el diario; se añade un par de reversión.",
941
+ voidReason: "Motivo (opcional):",
942
+ columns: {
943
+ date: "Fecha",
944
+ kind: "Tipo",
945
+ memo: "Memo",
946
+ lines: "Líneas"
947
+ },
948
+ kind: {
949
+ normal: "—",
950
+ opening: "Apertura",
951
+ void: "Reverso",
952
+ voidMarker: "Marcador de anulación"
953
+ }
954
+ },
955
+ entryForm: {
956
+ title: "Nueva entrada",
957
+ editTitle: "Editar entrada",
958
+ editBanner: "Al enviar, la entrada original será anulada y sustituida por esta.",
959
+ dateLabel: "Fecha",
960
+ memoLabel: "Memo",
961
+ accountLabel: "Cuenta",
962
+ debitLabel: "Debe",
963
+ creditLabel: "Haber",
964
+ taxRegistrationIdLabel: "ID fiscal",
965
+ taxRegistrationIdPlaceholder: "NIF / VAT ID / RFC…",
966
+ taxRegistrationIdMissingWarning: "Obligatorio",
967
+ addLine: "Añadir línea",
968
+ removeLine: "Quitar",
969
+ submit: "Asentar",
970
+ submitting: "Asentando…",
971
+ update: "Actualizar",
972
+ updating: "Actualizando…",
973
+ cancelEdit: "Cancelar",
974
+ success: "Entrada asentada.",
975
+ editSuccess: "Entrada actualizada.",
976
+ editVoidReason: "editado",
977
+ imbalance: "Descuadre: {amount}",
978
+ balanced: "Cuadrada ✓"
979
+ },
980
+ openingForm: {
981
+ title: "Saldos de apertura",
982
+ asOfLabel: "Al",
983
+ explainer: "Solo cuentas de balance (activo/pasivo/patrimonio). Σ debe = Σ haber; la diferencia va a Retained Earnings.",
984
+ emptyHint: "Puedes guardar todo en blanco — luego puedes actualizar los saldos de apertura. Solo hace falta tener una apertura registrada para desbloquear las demás pestañas.",
985
+ explainer2: "Solo cuentas de balance.",
986
+ submit: "Guardar saldos de apertura",
987
+ replaceWarning: "Al guardar se reemplaza la apertura existente (la anterior se anula en el diario).",
988
+ none: "Aún no hay saldos de apertura.",
989
+ setBy: "Establecido al {date}",
990
+ success: "Saldos guardados."
991
+ },
992
+ ledger: {
993
+ selectAccount: "Seleccionar cuenta",
994
+ closingBalance: "Saldo final",
995
+ columns: {
996
+ date: "Fecha",
997
+ memo: "Memo",
998
+ debit: "Debe",
999
+ credit: "Haber",
1000
+ balance: "Saldo",
1001
+ taxRegistrationId: "ID fiscal"
1002
+ }
1003
+ },
1004
+ dateRange: {
1005
+ shortcutLabel: "Rango",
1006
+ currentQuarter: "Trimestre actual",
1007
+ previousQuarter: "Último trimestre",
1008
+ currentYear: "Año en curso",
1009
+ previousYear: "Año anterior",
1010
+ lifetime: "Desde la apertura",
1011
+ all: "Todo",
1012
+ fromLabel: "Desde",
1013
+ toLabel: "Hasta"
1014
+ },
1015
+ balanceSheet: {
1016
+ asOfLabel: "Período",
1017
+ sections: {
1018
+ asset: "Activo",
1019
+ liability: "Pasivo",
1020
+ equity: "Patrimonio"
1021
+ },
1022
+ total: "Total",
1023
+ imbalance: "Descuadre: {amount}",
1024
+ currentEarnings: "Resultado del período",
1025
+ shortcutLabel: "Atajo",
1026
+ thisMonth: "Este mes",
1027
+ lastMonth: "Mes anterior",
1028
+ lastQuarter: "Último trimestre",
1029
+ lastYear: "Año anterior"
1030
+ },
1031
+ profitLoss: {
1032
+ fromLabel: "Desde",
1033
+ toLabel: "Hasta",
1034
+ income: "Ingresos",
1035
+ expense: "Gastos",
1036
+ netIncome: "Resultado neto:"
1037
+ },
1038
+ accounts: {
1039
+ listEmpty: "No hay cuentas en esta categoría.",
1040
+ openLedgerAria: "Abrir mayor de {code} {name}",
1041
+ manageButton: "Gestionar cuentas",
1042
+ modalTitle: "Gestionar cuentas",
1043
+ addAccount: "Añadir cuenta",
1044
+ sectionTitle: {
1045
+ asset: "Activos",
1046
+ liability: "Pasivos",
1047
+ equity: "Patrimonio",
1048
+ income: "Ingresos",
1049
+ expense: "Gastos"
1050
+ },
1051
+ columnCode: "Código",
1052
+ columnName: "Nombre",
1053
+ columnType: "Tipo",
1054
+ columnNote: "Nota",
1055
+ typeOption: {
1056
+ asset: "Activo",
1057
+ liability: "Pasivo",
1058
+ equity: "Patrimonio",
1059
+ income: "Ingreso",
1060
+ expense: "Gasto"
1061
+ },
1062
+ edit: "Editar",
1063
+ save: "Guardar",
1064
+ cancel: "Cancelar",
1065
+ saving: "Guardando…",
1066
+ addToCategory: "Añadir cuenta de {type}",
1067
+ deactivate: "Desactivar",
1068
+ reactivate: "Activar",
1069
+ deactivateConfirm: "¿Ocultar “{name}” de los desplegables de asientos / mayor? Los asientos existentes no se ven afectados.",
1070
+ errorEmptyCode: "El código es obligatorio.",
1071
+ errorReservedCode: "Los códigos que empiezan por “_” están reservados para filas del sistema.",
1072
+ errorInvalidCodeFormat: "El código de cuenta debe tener exactamente 4 dígitos.",
1073
+ errorCodeTypeMismatch: "El código debe coincidir con el tipo de cuenta: 1xxx activo, 2xxx pasivo, 3xxx patrimonio, 4xxx ingreso, 5xxx gasto.",
1074
+ errorEmptyName: "El nombre es obligatorio.",
1075
+ errorDuplicateCode: "Ya existe una cuenta con este código.",
1076
+ errorDuplicateName: "Ya existe una cuenta con este nombre.",
1077
+ success: "Cuenta guardada.",
1078
+ codeReadOnlyHint: "El código no puede cambiarse una vez creada la cuenta.",
1079
+ noteOptional: "(opcional)"
1080
+ },
1081
+ settings: {
1082
+ bookInfo: "Información del libro",
1083
+ bookInfoExplain: "Edita el país para actualizar los consejos según la jurisdicción fiscal. La moneda no puede cambiarse una vez registrados los asientos.",
1084
+ countryUnset: "(sin definir)",
1085
+ fiscalYearEndExplain: "Solo cambia cómo se resuelven los atajos de rango de fechas en adelante; los asientos existentes no se mueven.",
1086
+ saveChanges: "Guardar cambios",
1087
+ updateOk: "Libro actualizado.",
1088
+ rebuild: "Reconstruir snapshots",
1089
+ rebuildExplain: "Borra todos los snapshots mensuales y los recalcula desde el diario. Útil tras editar el diario a mano.",
1090
+ rebuildOk: "Reconstruidos {count} período(s).",
1091
+ advanced: "Avanzado…",
1092
+ deleteBook: "Eliminar libro",
1093
+ deleteBookExplain: "Elimina permanentemente el directorio del libro. No se puede deshacer.",
1094
+ deleteBookConfirm: "Escribe \"{bookName}\" para confirmar:",
1095
+ deleteBookButton: "Eliminar para siempre"
1096
+ },
1097
+ preview: {
1098
+ entry: "Entrada asentada el {date}",
1099
+ pl: "P&L {from} → {to}: neto {net}",
1100
+ bs: "Balance al {date} · activos {assets}",
1101
+ bookCreated: "Libro \"{name}\" ({id}) creado"
1102
+ },
1103
+ previewSummary: "Contabilidad · {bookId}",
1104
+ previewError: "Contabilidad: {error}",
1105
+ previewGeneric: "Resultado de contabilidad"
1106
+ } },
1107
+ "pt-BR": { pluginAccounting: {
1108
+ title: "Contabilidade",
1109
+ noBook: "Ainda não há livros — clique em \"+ Novo livro\" acima para criar o primeiro.",
1110
+ common: {
1111
+ cancel: "Cancelar",
1112
+ loading: "Carregando…",
1113
+ error: "Erro: {error}",
1114
+ empty: "Ainda não há lançamentos."
1115
+ },
1116
+ tabs: {
1117
+ journal: "Diário",
1118
+ newEntry: "Novo lançamento",
1119
+ opening: "Abertura",
1120
+ accounts: "Contas",
1121
+ ledger: "Razão",
1122
+ balanceSheet: "Balanço",
1123
+ profitLoss: "DRE",
1124
+ settings: "Configurações"
1125
+ },
1126
+ bookSwitcher: {
1127
+ label: "Livro",
1128
+ newBook: "Novo livro…",
1129
+ create: "Criar",
1130
+ nameLabel: "Nome",
1131
+ currencyLabel: "Moeda",
1132
+ countryLabel: "País",
1133
+ countryPlaceholder: "Selecione um país…",
1134
+ countryHint: "O país define a jurisdição fiscal para que o assistente possa dar conselhos específicos (T-number no Japão, ID de IVA na UE, etc.).",
1135
+ fiscalYearEndLabel: "Encerramento do exercício",
1136
+ fiscalYearEndQ1: "31 de março (Q1)",
1137
+ fiscalYearEndQ2: "30 de junho (Q2)",
1138
+ fiscalYearEndQ3: "30 de setembro (Q3)",
1139
+ fiscalYearEndQ4: "31 de dezembro (Q4)",
1140
+ fiscalYearEndHint: "Define o limite do exercício social usado pelos atalhos de período deste livro. Padrão: 31 de dezembro (Q4 — ano civil).",
1141
+ placeholder: "Selecione um livro…",
1142
+ firstRunHint: "Escolha o nome, a moeda, o país e o encerramento do exercício do seu primeiro livro. A moeda é definida por livro e fica difícil alterar depois de começar a lançar."
1143
+ },
1144
+ deletedNotice: {
1145
+ title: "“{bookName}” foi excluído.",
1146
+ body: "Selecione outro livro no menu acima ou crie um novo."
1147
+ },
1148
+ journalList: {
1149
+ fromLabel: "De",
1150
+ toLabel: "Até",
1151
+ accountLabel: "Conta",
1152
+ allAccounts: "Todas as contas",
1153
+ void: "Estornar",
1154
+ edit: "Editar",
1155
+ voidConfirm: "Estornar este lançamento? O original permanece no diário e um par de reversão é anexado.",
1156
+ voidReason: "Motivo (opcional):",
1157
+ columns: {
1158
+ date: "Data",
1159
+ kind: "Tipo",
1160
+ memo: "Memo",
1161
+ lines: "Linhas"
1162
+ },
1163
+ kind: {
1164
+ normal: "—",
1165
+ opening: "Abertura",
1166
+ void: "Reverso",
1167
+ voidMarker: "Marcador de estorno"
1168
+ }
1169
+ },
1170
+ entryForm: {
1171
+ title: "Novo lançamento",
1172
+ editTitle: "Editar lançamento",
1173
+ editBanner: "Ao enviar, o lançamento original será estornado e substituído por este.",
1174
+ dateLabel: "Data",
1175
+ memoLabel: "Memo",
1176
+ accountLabel: "Conta",
1177
+ debitLabel: "Débito",
1178
+ creditLabel: "Crédito",
1179
+ taxRegistrationIdLabel: "Inscrição fiscal",
1180
+ taxRegistrationIdPlaceholder: "CNPJ / VAT ID / GSTIN…",
1181
+ taxRegistrationIdMissingWarning: "Obrigatório",
1182
+ addLine: "Adicionar linha",
1183
+ removeLine: "Remover",
1184
+ submit: "Lançar",
1185
+ submitting: "Lançando…",
1186
+ update: "Atualizar",
1187
+ updating: "Atualizando…",
1188
+ cancelEdit: "Cancelar",
1189
+ success: "Lançamento registrado.",
1190
+ editSuccess: "Lançamento atualizado.",
1191
+ editVoidReason: "editado",
1192
+ imbalance: "Diferença: {amount}",
1193
+ balanced: "Equilibrado ✓"
1194
+ },
1195
+ openingForm: {
1196
+ title: "Saldos iniciais",
1197
+ asOfLabel: "Em",
1198
+ explainer: "Apenas contas de balanço (ativo/passivo/patrimônio). Σ débito = Σ crédito; a diferença entra em Retained Earnings.",
1199
+ emptyHint: "Você pode salvar tudo em branco — os saldos iniciais podem ser atualizados depois. Basta ter uma abertura registrada para que as outras abas sejam liberadas.",
1200
+ explainer2: "Apenas contas de balanço.",
1201
+ submit: "Salvar saldos iniciais",
1202
+ replaceWarning: "Salvar substitui a abertura existente (a anterior é estornada no diário).",
1203
+ none: "Ainda não há saldo inicial.",
1204
+ setBy: "Definido em {date}",
1205
+ success: "Saldos iniciais salvos."
1206
+ },
1207
+ ledger: {
1208
+ selectAccount: "Selecionar conta",
1209
+ closingBalance: "Saldo final",
1210
+ columns: {
1211
+ date: "Data",
1212
+ memo: "Memo",
1213
+ debit: "Débito",
1214
+ credit: "Crédito",
1215
+ balance: "Saldo",
1216
+ taxRegistrationId: "Inscrição fiscal"
1217
+ }
1218
+ },
1219
+ dateRange: {
1220
+ shortcutLabel: "Período",
1221
+ currentQuarter: "Trimestre atual",
1222
+ previousQuarter: "Último trimestre",
1223
+ currentYear: "Ano atual",
1224
+ previousYear: "Ano anterior",
1225
+ lifetime: "Desde a abertura",
1226
+ all: "Tudo",
1227
+ fromLabel: "De",
1228
+ toLabel: "Até"
1229
+ },
1230
+ balanceSheet: {
1231
+ asOfLabel: "Período",
1232
+ sections: {
1233
+ asset: "Ativo",
1234
+ liability: "Passivo",
1235
+ equity: "Patrimônio"
1236
+ },
1237
+ total: "Total",
1238
+ imbalance: "Diferença: {amount}",
1239
+ currentEarnings: "Resultado do período",
1240
+ shortcutLabel: "Atalho",
1241
+ thisMonth: "Este mês",
1242
+ lastMonth: "Mês anterior",
1243
+ lastQuarter: "Último trimestre",
1244
+ lastYear: "Ano anterior"
1245
+ },
1246
+ profitLoss: {
1247
+ fromLabel: "De",
1248
+ toLabel: "Até",
1249
+ income: "Receita",
1250
+ expense: "Despesa",
1251
+ netIncome: "Resultado líquido:"
1252
+ },
1253
+ accounts: {
1254
+ listEmpty: "Ainda não há contas nesta categoria.",
1255
+ openLedgerAria: "Abrir razão de {code} {name}",
1256
+ manageButton: "Gerenciar contas",
1257
+ modalTitle: "Gerenciar contas",
1258
+ addAccount: "Adicionar conta",
1259
+ sectionTitle: {
1260
+ asset: "Ativos",
1261
+ liability: "Passivos",
1262
+ equity: "Patrimônio",
1263
+ income: "Receitas",
1264
+ expense: "Despesas"
1265
+ },
1266
+ columnCode: "Código",
1267
+ columnName: "Nome",
1268
+ columnType: "Tipo",
1269
+ columnNote: "Observação",
1270
+ typeOption: {
1271
+ asset: "Ativo",
1272
+ liability: "Passivo",
1273
+ equity: "Patrimônio",
1274
+ income: "Receita",
1275
+ expense: "Despesa"
1276
+ },
1277
+ edit: "Editar",
1278
+ save: "Salvar",
1279
+ cancel: "Cancelar",
1280
+ saving: "Salvando…",
1281
+ addToCategory: "Adicionar conta de {type}",
1282
+ deactivate: "Desativar",
1283
+ reactivate: "Ativar",
1284
+ deactivateConfirm: "Ocultar “{name}” dos menus de lançamentos / razão? Os lançamentos existentes não são afetados.",
1285
+ errorEmptyCode: "O código é obrigatório.",
1286
+ errorReservedCode: "Códigos iniciados por “_” são reservados para linhas do sistema.",
1287
+ errorInvalidCodeFormat: "O código da conta deve ter exatamente 4 dígitos.",
1288
+ errorCodeTypeMismatch: "O código deve corresponder ao tipo de conta: 1xxx ativo, 2xxx passivo, 3xxx patrimônio, 4xxx receita, 5xxx despesa.",
1289
+ errorEmptyName: "O nome é obrigatório.",
1290
+ errorDuplicateCode: "Já existe uma conta com este código.",
1291
+ errorDuplicateName: "Já existe uma conta com este nome.",
1292
+ success: "Conta salva.",
1293
+ codeReadOnlyHint: "O código não pode ser alterado depois que a conta é criada.",
1294
+ noteOptional: "(opcional)"
1295
+ },
1296
+ settings: {
1297
+ bookInfo: "Informações do livro",
1298
+ bookInfoExplain: "Edite o país para atualizar as recomendações conforme a jurisdição fiscal. A moeda não pode ser alterada após registrar lançamentos.",
1299
+ countryUnset: "(não definido)",
1300
+ fiscalYearEndExplain: "Apenas altera como os atalhos de período são resolvidos a partir de agora; lançamentos existentes não são movidos.",
1301
+ saveChanges: "Salvar alterações",
1302
+ updateOk: "Livro atualizado.",
1303
+ rebuild: "Reconstruir snapshots",
1304
+ rebuildExplain: "Apaga todos os snapshots mensais e recalcula a partir do diário. Útil após editar o diário manualmente.",
1305
+ rebuildOk: "Reconstruído(s) {count} período(s).",
1306
+ advanced: "Avançado…",
1307
+ deleteBook: "Excluir livro",
1308
+ deleteBookExplain: "Exclui permanentemente o diretório do livro. Não pode ser desfeito.",
1309
+ deleteBookConfirm: "Digite \"{bookName}\" para confirmar:",
1310
+ deleteBookButton: "Excluir para sempre"
1311
+ },
1312
+ preview: {
1313
+ entry: "Lançamento em {date}",
1314
+ pl: "P&L {from} → {to}: líquido {net}",
1315
+ bs: "Balanço em {date} · ativos {assets}",
1316
+ bookCreated: "Livro \"{name}\" ({id}) criado"
1317
+ },
1318
+ previewSummary: "Contabilidade · {bookId}",
1319
+ previewError: "Contabilidade: {error}",
1320
+ previewGeneric: "Resultado da contabilidade"
1321
+ } },
1322
+ fr: { pluginAccounting: {
1323
+ title: "Comptabilité",
1324
+ noBook: "Pas encore de livres — cliquez sur \"+ Nouveau livre\" en haut pour créer le premier.",
1325
+ common: {
1326
+ cancel: "Annuler",
1327
+ loading: "Chargement…",
1328
+ error: "Erreur : {error}",
1329
+ empty: "Aucune écriture pour l'instant."
1330
+ },
1331
+ tabs: {
1332
+ journal: "Journal",
1333
+ newEntry: "Nouvelle écriture",
1334
+ opening: "Ouverture",
1335
+ accounts: "Comptes",
1336
+ ledger: "Grand livre",
1337
+ balanceSheet: "Bilan",
1338
+ profitLoss: "Résultat",
1339
+ settings: "Paramètres"
1340
+ },
1341
+ bookSwitcher: {
1342
+ label: "Livre",
1343
+ newBook: "Nouveau livre…",
1344
+ create: "Créer",
1345
+ nameLabel: "Nom",
1346
+ currencyLabel: "Devise",
1347
+ countryLabel: "Pays",
1348
+ countryPlaceholder: "Sélectionner un pays…",
1349
+ countryHint: "Le pays définit la juridiction fiscale afin que l'assistant puisse donner des conseils ciblés (T-number au Japon, ID TVA dans l'UE, etc.).",
1350
+ fiscalYearEndLabel: "Clôture de l'exercice",
1351
+ fiscalYearEndQ1: "31 mars (Q1)",
1352
+ fiscalYearEndQ2: "30 juin (Q2)",
1353
+ fiscalYearEndQ3: "30 septembre (Q3)",
1354
+ fiscalYearEndQ4: "31 décembre (Q4)",
1355
+ fiscalYearEndHint: "Définit la limite de l'exercice utilisée par les raccourcis de plage de dates de ce livre. Par défaut : 31 décembre (Q4 — année civile).",
1356
+ placeholder: "Sélectionner un livre…",
1357
+ firstRunHint: "Choisissez le nom, la devise, le pays et la clôture de l'exercice de votre premier livre. La devise est figée par livre et difficile à changer une fois les écritures commencées."
1358
+ },
1359
+ deletedNotice: {
1360
+ title: "« {bookName} » a été supprimé.",
1361
+ body: "Choisissez un autre livre dans la liste ci-dessus ou créez-en un nouveau."
1362
+ },
1363
+ journalList: {
1364
+ fromLabel: "Du",
1365
+ toLabel: "Au",
1366
+ accountLabel: "Compte",
1367
+ allAccounts: "Tous",
1368
+ void: "Annuler",
1369
+ edit: "Modifier",
1370
+ voidConfirm: "Annuler cette écriture ? L'originale reste dans le journal ; une paire de contre-passation est ajoutée.",
1371
+ voidReason: "Motif (optionnel) :",
1372
+ columns: {
1373
+ date: "Date",
1374
+ kind: "Type",
1375
+ memo: "Mémo",
1376
+ lines: "Lignes"
1377
+ },
1378
+ kind: {
1379
+ normal: "—",
1380
+ opening: "Ouverture",
1381
+ void: "Contre-passation",
1382
+ voidMarker: "Marqueur d'annulation"
1383
+ }
1384
+ },
1385
+ entryForm: {
1386
+ title: "Nouvelle écriture",
1387
+ editTitle: "Modifier l'écriture",
1388
+ editBanner: "À l'envoi, l'écriture d'origine sera contre-passée et remplacée par celle-ci.",
1389
+ dateLabel: "Date",
1390
+ memoLabel: "Mémo",
1391
+ accountLabel: "Compte",
1392
+ debitLabel: "Débit",
1393
+ creditLabel: "Crédit",
1394
+ taxRegistrationIdLabel: "N° d'identification fiscale",
1395
+ taxRegistrationIdPlaceholder: "TVA / SIRET / GSTIN…",
1396
+ taxRegistrationIdMissingWarning: "Obligatoire",
1397
+ addLine: "Ajouter une ligne",
1398
+ removeLine: "Supprimer",
1399
+ submit: "Comptabiliser",
1400
+ submitting: "Comptabilisation…",
1401
+ update: "Mettre à jour",
1402
+ updating: "Mise à jour…",
1403
+ cancelEdit: "Annuler",
1404
+ success: "Écriture comptabilisée.",
1405
+ editSuccess: "Écriture mise à jour.",
1406
+ editVoidReason: "modifiée",
1407
+ imbalance: "Déséquilibre : {amount}",
1408
+ balanced: "Équilibré ✓"
1409
+ },
1410
+ openingForm: {
1411
+ title: "Soldes d'ouverture",
1412
+ asOfLabel: "Au",
1413
+ explainer: "Comptes de bilan uniquement (actif/passif/capitaux). Σ débit = Σ crédit ; le solde tombe sur Retained Earnings.",
1414
+ emptyHint: "Vous pouvez enregistrer en laissant tout vide — les soldes d'ouverture peuvent être mis à jour plus tard. Il suffit qu'une ouverture soit enregistrée pour débloquer les autres onglets.",
1415
+ explainer2: "Comptes de bilan uniquement.",
1416
+ submit: "Enregistrer les soldes d'ouverture",
1417
+ replaceWarning: "Enregistrer remplace l'ouverture existante (l'ancienne est contre-passée dans le journal).",
1418
+ none: "Aucun solde d'ouverture défini.",
1419
+ setBy: "Défini au {date}",
1420
+ success: "Soldes d'ouverture enregistrés."
1421
+ },
1422
+ ledger: {
1423
+ selectAccount: "Sélectionner un compte",
1424
+ closingBalance: "Solde de clôture",
1425
+ columns: {
1426
+ date: "Date",
1427
+ memo: "Mémo",
1428
+ debit: "Débit",
1429
+ credit: "Crédit",
1430
+ balance: "Solde",
1431
+ taxRegistrationId: "N° d'identification fiscale"
1432
+ }
1433
+ },
1434
+ dateRange: {
1435
+ shortcutLabel: "Plage",
1436
+ currentQuarter: "Trimestre en cours",
1437
+ previousQuarter: "Trimestre précédent",
1438
+ currentYear: "Exercice en cours",
1439
+ previousYear: "Exercice précédent",
1440
+ lifetime: "Depuis l'ouverture",
1441
+ all: "Tout",
1442
+ fromLabel: "Du",
1443
+ toLabel: "Au"
1444
+ },
1445
+ balanceSheet: {
1446
+ asOfLabel: "Période",
1447
+ sections: {
1448
+ asset: "Actif",
1449
+ liability: "Passif",
1450
+ equity: "Capitaux"
1451
+ },
1452
+ total: "Total",
1453
+ imbalance: "Déséquilibre : {amount}",
1454
+ currentEarnings: "Résultat de la période",
1455
+ shortcutLabel: "Raccourci",
1456
+ thisMonth: "Ce mois-ci",
1457
+ lastMonth: "Mois précédent",
1458
+ lastQuarter: "Trimestre précédent",
1459
+ lastYear: "Année précédente"
1460
+ },
1461
+ profitLoss: {
1462
+ fromLabel: "Du",
1463
+ toLabel: "Au",
1464
+ income: "Produits",
1465
+ expense: "Charges",
1466
+ netIncome: "Résultat net :"
1467
+ },
1468
+ accounts: {
1469
+ listEmpty: "Aucun compte dans cette catégorie pour l'instant.",
1470
+ openLedgerAria: "Ouvrir le grand livre de {code} {name}",
1471
+ manageButton: "Gérer les comptes",
1472
+ modalTitle: "Gérer les comptes",
1473
+ addAccount: "Ajouter un compte",
1474
+ sectionTitle: {
1475
+ asset: "Actifs",
1476
+ liability: "Passifs",
1477
+ equity: "Capitaux propres",
1478
+ income: "Produits",
1479
+ expense: "Charges"
1480
+ },
1481
+ columnCode: "Code",
1482
+ columnName: "Nom",
1483
+ columnType: "Type",
1484
+ columnNote: "Note",
1485
+ typeOption: {
1486
+ asset: "Actif",
1487
+ liability: "Passif",
1488
+ equity: "Capitaux propres",
1489
+ income: "Produit",
1490
+ expense: "Charge"
1491
+ },
1492
+ edit: "Modifier",
1493
+ save: "Enregistrer",
1494
+ cancel: "Annuler",
1495
+ saving: "Enregistrement…",
1496
+ addToCategory: "Ajouter un compte de {type}",
1497
+ deactivate: "Désactiver",
1498
+ reactivate: "Activer",
1499
+ deactivateConfirm: "Masquer « {name} » des listes déroulantes d’écriture / grand livre ? Les écritures existantes ne sont pas affectées.",
1500
+ errorEmptyCode: "Le code est requis.",
1501
+ errorReservedCode: "Les codes commençant par « _ » sont réservés aux lignes système.",
1502
+ errorInvalidCodeFormat: "Le code de compte doit comporter exactement 4 chiffres.",
1503
+ errorCodeTypeMismatch: "Le code doit correspondre au type de compte : 1xxx actif, 2xxx passif, 3xxx capitaux propres, 4xxx produit, 5xxx charge.",
1504
+ errorEmptyName: "Le nom est requis.",
1505
+ errorDuplicateCode: "Un compte avec ce code existe déjà.",
1506
+ errorDuplicateName: "Un compte portant ce nom existe déjà.",
1507
+ success: "Compte enregistré.",
1508
+ codeReadOnlyHint: "Le code ne peut pas être modifié une fois le compte créé.",
1509
+ noteOptional: "(facultatif)"
1510
+ },
1511
+ settings: {
1512
+ bookInfo: "Informations du livre",
1513
+ bookInfoExplain: "Modifiez le pays pour mettre à jour les conseils selon la juridiction fiscale. La devise ne peut pas être changée une fois des écritures saisies.",
1514
+ countryUnset: "(non défini)",
1515
+ fiscalYearEndExplain: "Modifie uniquement la résolution des raccourcis de plage de dates à partir de maintenant ; les écritures existantes ne sont pas déplacées.",
1516
+ saveChanges: "Enregistrer les modifications",
1517
+ updateOk: "Livre mis à jour.",
1518
+ rebuild: "Reconstruire les snapshots",
1519
+ rebuildExplain: "Supprime tous les snapshots mensuels et les recalcule depuis le journal. Utile après modification manuelle du journal.",
1520
+ rebuildOk: "{count} période(s) reconstruite(s).",
1521
+ advanced: "Avancé…",
1522
+ deleteBook: "Supprimer le livre",
1523
+ deleteBookExplain: "Supprime définitivement le répertoire du livre. Irréversible.",
1524
+ deleteBookConfirm: "Tapez \"{bookName}\" pour confirmer :",
1525
+ deleteBookButton: "Supprimer définitivement"
1526
+ },
1527
+ preview: {
1528
+ entry: "Écriture comptabilisée le {date}",
1529
+ pl: "P&L {from} → {to} : net {net}",
1530
+ bs: "Bilan au {date} · actif {assets}",
1531
+ bookCreated: "Livre \"{name}\" ({id}) créé"
1532
+ },
1533
+ previewSummary: "Comptabilité · {bookId}",
1534
+ previewError: "Comptabilité : {error}",
1535
+ previewGeneric: "Résultat comptable"
1536
+ } },
1537
+ de: { pluginAccounting: {
1538
+ title: "Buchhaltung",
1539
+ noBook: "Noch keine Bücher — klicken Sie oben auf \"+ Neues Buch\", um das erste anzulegen.",
1540
+ common: {
1541
+ cancel: "Abbrechen",
1542
+ loading: "Lädt…",
1543
+ error: "Fehler: {error}",
1544
+ empty: "Noch keine Einträge."
1545
+ },
1546
+ tabs: {
1547
+ journal: "Journal",
1548
+ newEntry: "Neuer Eintrag",
1549
+ opening: "Eröffnung",
1550
+ accounts: "Konten",
1551
+ ledger: "Hauptbuch",
1552
+ balanceSheet: "Bilanz",
1553
+ profitLoss: "GuV",
1554
+ settings: "Einstellungen"
1555
+ },
1556
+ bookSwitcher: {
1557
+ label: "Buch",
1558
+ newBook: "Neues Buch…",
1559
+ create: "Anlegen",
1560
+ nameLabel: "Name",
1561
+ currencyLabel: "Währung",
1562
+ countryLabel: "Land",
1563
+ countryPlaceholder: "Land auswählen…",
1564
+ countryHint: "Das Land legt die Steuerjurisdiktion fest, damit der Assistent länderspezifische Hinweise geben kann (T-Nummer in Japan, USt-IdNr. in der EU usw.).",
1565
+ fiscalYearEndLabel: "Geschäftsjahresende",
1566
+ fiscalYearEndQ1: "31. März (Q1)",
1567
+ fiscalYearEndQ2: "30. Juni (Q2)",
1568
+ fiscalYearEndQ3: "30. September (Q3)",
1569
+ fiscalYearEndQ4: "31. Dezember (Q4)",
1570
+ fiscalYearEndHint: "Bestimmt die Geschäftsjahresgrenze, die für die Datumsbereich-Schnellauswahl in diesem Buch verwendet wird. Standard: 31. Dezember (Q4 — Kalenderjahr).",
1571
+ placeholder: "Buch auswählen…",
1572
+ firstRunHint: "Wählen Sie Name, Währung, Land und Geschäftsjahresende für Ihr erstes Buch. Die Währung ist pro Buch fest und nach den ersten Buchungen schwer zu ändern."
1573
+ },
1574
+ deletedNotice: {
1575
+ title: "Das Buch \"{bookName}\" wurde gelöscht.",
1576
+ body: "Wählen Sie oben ein anderes Buch aus oder legen Sie ein neues an."
1577
+ },
1578
+ journalList: {
1579
+ fromLabel: "Von",
1580
+ toLabel: "Bis",
1581
+ accountLabel: "Konto",
1582
+ allAccounts: "Alle Konten",
1583
+ void: "Stornieren",
1584
+ edit: "Bearbeiten",
1585
+ voidConfirm: "Diesen Eintrag stornieren? Das Original bleibt im Journal; ein Stornopaar wird angehängt.",
1586
+ voidReason: "Grund (optional):",
1587
+ columns: {
1588
+ date: "Datum",
1589
+ kind: "Art",
1590
+ memo: "Memo",
1591
+ lines: "Zeilen"
1592
+ },
1593
+ kind: {
1594
+ normal: "—",
1595
+ opening: "Eröffnung",
1596
+ void: "Storno",
1597
+ voidMarker: "Storno-Marker"
1598
+ }
1599
+ },
1600
+ entryForm: {
1601
+ title: "Neuer Eintrag",
1602
+ editTitle: "Eintrag bearbeiten",
1603
+ editBanner: "Beim Absenden wird der Originaleintrag storniert und durch diesen ersetzt.",
1604
+ dateLabel: "Datum",
1605
+ memoLabel: "Memo",
1606
+ accountLabel: "Konto",
1607
+ debitLabel: "Soll",
1608
+ creditLabel: "Haben",
1609
+ taxRegistrationIdLabel: "Steuernummer",
1610
+ taxRegistrationIdPlaceholder: "USt-IdNr. / VAT ID / GSTIN…",
1611
+ taxRegistrationIdMissingWarning: "Erforderlich",
1612
+ addLine: "Zeile hinzufügen",
1613
+ removeLine: "Entfernen",
1614
+ submit: "Buchen",
1615
+ submitting: "Bucht…",
1616
+ update: "Aktualisieren",
1617
+ updating: "Aktualisiert…",
1618
+ cancelEdit: "Abbrechen",
1619
+ success: "Eintrag gebucht.",
1620
+ editSuccess: "Eintrag aktualisiert.",
1621
+ editVoidReason: "bearbeitet",
1622
+ imbalance: "Differenz: {amount}",
1623
+ balanced: "Ausgeglichen ✓"
1624
+ },
1625
+ openingForm: {
1626
+ title: "Eröffnungsbilanz",
1627
+ asOfLabel: "Per",
1628
+ explainer: "Nur Bilanzkonten (Aktiva/Passiva/Eigenkapital). Σ Soll = Σ Haben; die Differenz fließt in Retained Earnings.",
1629
+ emptyHint: "Sie können das Formular leer speichern — die Eröffnungsbilanz lässt sich später aktualisieren. Es reicht, dass einmalig eine Eröffnung hinterlegt ist, damit die übrigen Tabs freigeschaltet werden.",
1630
+ explainer2: "Nur Bilanzkonten.",
1631
+ submit: "Eröffnungsbilanz speichern",
1632
+ replaceWarning: "Beim Speichern wird die bestehende Eröffnung ersetzt (die alte wird im Journal storniert).",
1633
+ none: "Noch keine Eröffnungsbilanz.",
1634
+ setBy: "Per {date} festgelegt",
1635
+ success: "Eröffnungsbilanz gespeichert."
1636
+ },
1637
+ ledger: {
1638
+ selectAccount: "Konto wählen",
1639
+ closingBalance: "Schlusssaldo",
1640
+ columns: {
1641
+ date: "Datum",
1642
+ memo: "Memo",
1643
+ debit: "Soll",
1644
+ credit: "Haben",
1645
+ balance: "Saldo",
1646
+ taxRegistrationId: "Steuernummer"
1647
+ }
1648
+ },
1649
+ dateRange: {
1650
+ shortcutLabel: "Bereich",
1651
+ currentQuarter: "Aktuelles Quartal",
1652
+ previousQuarter: "Letztes Quartal",
1653
+ currentYear: "Aktuelles Jahr",
1654
+ previousYear: "Letztes Jahr",
1655
+ lifetime: "Seit Eröffnung",
1656
+ all: "Alle",
1657
+ fromLabel: "Von",
1658
+ toLabel: "Bis"
1659
+ },
1660
+ balanceSheet: {
1661
+ asOfLabel: "Periode",
1662
+ sections: {
1663
+ asset: "Aktiva",
1664
+ liability: "Passiva",
1665
+ equity: "Eigenkapital"
1666
+ },
1667
+ total: "Summe",
1668
+ imbalance: "Differenz: {amount}",
1669
+ currentEarnings: "Periodenergebnis",
1670
+ shortcutLabel: "Schnellauswahl",
1671
+ thisMonth: "Dieser Monat",
1672
+ lastMonth: "Letzter Monat",
1673
+ lastQuarter: "Letztes Quartal",
1674
+ lastYear: "Letztes Jahr"
1675
+ },
1676
+ profitLoss: {
1677
+ fromLabel: "Von",
1678
+ toLabel: "Bis",
1679
+ income: "Erträge",
1680
+ expense: "Aufwendungen",
1681
+ netIncome: "Jahresüberschuss:"
1682
+ },
1683
+ accounts: {
1684
+ listEmpty: "In dieser Kategorie sind noch keine Konten vorhanden.",
1685
+ openLedgerAria: "Hauptbuch für {code} {name} öffnen",
1686
+ manageButton: "Konten verwalten",
1687
+ modalTitle: "Konten verwalten",
1688
+ addAccount: "Konto hinzufügen",
1689
+ sectionTitle: {
1690
+ asset: "Aktiva",
1691
+ liability: "Passiva",
1692
+ equity: "Eigenkapital",
1693
+ income: "Erträge",
1694
+ expense: "Aufwendungen"
1695
+ },
1696
+ columnCode: "Code",
1697
+ columnName: "Name",
1698
+ columnType: "Typ",
1699
+ columnNote: "Notiz",
1700
+ typeOption: {
1701
+ asset: "Aktivkonto",
1702
+ liability: "Passivkonto",
1703
+ equity: "Eigenkapital",
1704
+ income: "Ertrag",
1705
+ expense: "Aufwand"
1706
+ },
1707
+ edit: "Bearbeiten",
1708
+ save: "Speichern",
1709
+ cancel: "Abbrechen",
1710
+ saving: "Wird gespeichert…",
1711
+ addToCategory: "Konto vom Typ {type} hinzufügen",
1712
+ deactivate: "Deaktivieren",
1713
+ reactivate: "Aktivieren",
1714
+ deactivateConfirm: "Soll „{name}“ aus den Buchungs- und Kontodropdowns ausgeblendet werden? Bestehende Buchungen bleiben unberührt.",
1715
+ errorEmptyCode: "Code ist erforderlich.",
1716
+ errorReservedCode: "Codes, die mit „_“ beginnen, sind für Systemzeilen reserviert.",
1717
+ errorInvalidCodeFormat: "Der Kontocode muss genau 4 Ziffern haben.",
1718
+ errorCodeTypeMismatch: "Der Code muss zur Kontoart passen: 1xxx Aktivkonto, 2xxx Passivkonto, 3xxx Eigenkapital, 4xxx Ertrag, 5xxx Aufwand.",
1719
+ errorEmptyName: "Name ist erforderlich.",
1720
+ errorDuplicateCode: "Ein Konto mit diesem Code existiert bereits.",
1721
+ errorDuplicateName: "Ein Konto mit diesem Namen existiert bereits.",
1722
+ success: "Konto gespeichert.",
1723
+ codeReadOnlyHint: "Der Code kann nach dem Anlegen des Kontos nicht mehr geändert werden.",
1724
+ noteOptional: "(optional)"
1725
+ },
1726
+ settings: {
1727
+ bookInfo: "Buchinformationen",
1728
+ bookInfoExplain: "Ändern Sie das Land, um die Hinweise zur Steuerjurisdiktion zu aktualisieren. Die Währung kann nach gebuchten Einträgen nicht mehr geändert werden.",
1729
+ countryUnset: "(nicht gesetzt)",
1730
+ fiscalYearEndExplain: "Ändert nur, wie die Datumsbereich-Schnellauswahl ab jetzt aufgelöst wird; bestehende Buchungen werden nicht verschoben.",
1731
+ saveChanges: "Änderungen speichern",
1732
+ updateOk: "Buch aktualisiert.",
1733
+ rebuild: "Snapshots neu aufbauen",
1734
+ rebuildExplain: "Verwirft alle Monats-Snapshots und berechnet sie aus dem Journal neu. Nützlich nach manueller Bearbeitung.",
1735
+ rebuildOk: "{count} Periode(n) neu aufgebaut.",
1736
+ advanced: "Erweitert…",
1737
+ deleteBook: "Buch löschen",
1738
+ deleteBookExplain: "Löscht das Buch-Verzeichnis dauerhaft. Nicht rückgängig zu machen.",
1739
+ deleteBookConfirm: "Tippen Sie \"{bookName}\" zur Bestätigung:",
1740
+ deleteBookButton: "Endgültig löschen"
1741
+ },
1742
+ preview: {
1743
+ entry: "Eintrag am {date} gebucht",
1744
+ pl: "GuV {from} → {to}: netto {net}",
1745
+ bs: "Bilanz per {date} · Aktiva {assets}",
1746
+ bookCreated: "Buch \"{name}\" ({id}) angelegt"
1747
+ },
1748
+ previewSummary: "Buchhaltung · {bookId}",
1749
+ previewError: "Buchhaltung: {error}",
1750
+ previewGeneric: "Buchhaltungs-Ergebnis"
1751
+ } }
1752
+ }
1753
+ });
1754
+ var syncScope = effectScope(true);
1755
+ var syncing = false;
1756
+ /** Mirror the host's active locale onto this instance exactly once, in a detached
1757
+ * effect so it lives for the app's lifetime rather than a single component's.
1758
+ * Called lazily on the first `useAccountingI18n()` — by then the host has called
1759
+ * `configureAccountingHost(...)`, so `hostLocaleTag()` resolves. */
1760
+ function ensureLocaleSync() {
1761
+ if (syncing) return;
1762
+ syncScope.run(() => {
1763
+ watchEffect(() => {
1764
+ i18n.global.locale.value = hostLocaleTag();
1765
+ });
1766
+ });
1767
+ syncing = true;
1768
+ }
1769
+ /** The plugin's i18n composable — a drop-in for vue-i18n's `useI18n()` over the
1770
+ * plugin's own self-contained instance. Returns `{ t, locale }` (destructured at
1771
+ * the call site, exactly like `useI18n()`), with `t` reading the plugin's keys
1772
+ * and `locale` the reactive tag for date/number formatting. */
1773
+ function useAccountingI18n() {
1774
+ ensureLocaleSync();
1775
+ return {
1776
+ t: i18n.global.t,
1777
+ locale: i18n.global.locale
1778
+ };
1779
+ }
20
1780
  //#endregion
21
1781
  //#region src/vue/api.ts
22
- var DISPATCH_URL = "/api/accounting";
23
- var DISPATCH_METHOD = "POST";
1782
+ var DISPATCH_URL = ACCOUNTING_API.dispatch.path;
1783
+ var DISPATCH_METHOD = ACCOUNTING_API.dispatch.method;
24
1784
  function call(action, args = {}) {
25
1785
  return hostApiCall(DISPATCH_URL, {
26
1786
  method: DISPATCH_METHOD,
@@ -139,7 +1899,7 @@ var NewBookForm_default = /* @__PURE__ */ defineComponent({
139
1899
  },
140
1900
  emits: ["cancel", "created"],
141
1901
  setup(__props, { emit: __emit }) {
142
- const { t, locale } = useI18n();
1902
+ const { t, locale } = useAccountingI18n();
143
1903
  function regionFromLocaleTag(tag) {
144
1904
  try {
145
1905
  const { region } = new Intl.Locale(tag).maximize();
@@ -305,7 +2065,7 @@ var BookSwitcher_default = /* @__PURE__ */ defineComponent({
305
2065
  "book-created"
306
2066
  ],
307
2067
  setup(__props, { emit: __emit }) {
308
- const { t } = useI18n();
2068
+ const { t } = useAccountingI18n();
309
2069
  const props = __props;
310
2070
  const emit = __emit;
311
2071
  const showNewBook = ref(false);
@@ -406,7 +2166,7 @@ var DateRangePicker_default = /* @__PURE__ */ defineComponent({
406
2166
  },
407
2167
  emits: ["update:modelValue"],
408
2168
  setup(__props, { emit: __emit }) {
409
- const { t } = useI18n();
2169
+ const { t } = useAccountingI18n();
410
2170
  const props = __props;
411
2171
  const emit = __emit;
412
2172
  const hasOpeningDate = computed(() => Boolean(props.openingDate));
@@ -579,7 +2339,7 @@ var AccountRow_default = /* @__PURE__ */ defineComponent({
579
2339
  props: { account: {} },
580
2340
  emits: ["edit", "toggleActive"],
581
2341
  setup(__props, { emit: __emit }) {
582
- const { t } = useI18n();
2342
+ const { t } = useAccountingI18n();
583
2343
  const props = __props;
584
2344
  const emit = __emit;
585
2345
  const inactive = computed(() => props.account.active === false);
@@ -703,7 +2463,7 @@ var AccountEditor_default = /* @__PURE__ */ defineComponent({
703
2463
  },
704
2464
  emits: ["save", "cancel"],
705
2465
  setup(__props, { emit: __emit }) {
706
- const { t } = useI18n();
2466
+ const { t } = useAccountingI18n();
707
2467
  const props = __props;
708
2468
  const emit = __emit;
709
2469
  const TYPE_OPTIONS = [
@@ -884,7 +2644,7 @@ var AccountsModal_default = /* @__PURE__ */ defineComponent({
884
2644
  },
885
2645
  emits: ["close", "changed"],
886
2646
  setup(__props, { emit: __emit }) {
887
- const { t } = useI18n();
2647
+ const { t } = useAccountingI18n();
888
2648
  const props = __props;
889
2649
  const emit = __emit;
890
2650
  const ACCOUNT_TYPES = [
@@ -1218,7 +2978,7 @@ var JournalEntryForm_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
1218
2978
  },
1219
2979
  emits: ["submitted", "cancel"],
1220
2980
  setup(__props, { emit: __emit }) {
1221
- const { t } = useI18n();
2981
+ const { t } = useAccountingI18n();
1222
2982
  const props = __props;
1223
2983
  const emit = __emit;
1224
2984
  const showAccountsModal = ref(false);
@@ -1525,7 +3285,7 @@ var _plugin_vue_export_helper_default = (sfc, props) => {
1525
3285
  };
1526
3286
  //#endregion
1527
3287
  //#region src/vue/components/JournalEntryForm.vue
1528
- var JournalEntryForm_default = /*#__PURE__*/ _plugin_vue_export_helper_default(JournalEntryForm_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-22376c52"]]);
3288
+ var JournalEntryForm_default = /*#__PURE__*/ _plugin_vue_export_helper_default(JournalEntryForm_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-ba23c744"]]);
1529
3289
  //#endregion
1530
3290
  //#region src/vue/components/JournalList.vue?vue&type=script&setup=true&lang.ts
1531
3291
  var _hoisted_1$8 = { class: "flex flex-col h-full gap-3" };
@@ -1637,7 +3397,7 @@ var JournalList_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__
1637
3397
  },
1638
3398
  emits: ["editOpening", "preselectConsumed"],
1639
3399
  setup(__props, { emit: __emit }) {
1640
- const { t } = useI18n();
3400
+ const { t } = useAccountingI18n();
1641
3401
  const props = __props;
1642
3402
  const emit = __emit;
1643
3403
  const showNewForm = ref(false);
@@ -1957,7 +3717,7 @@ var JournalList_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__
1957
3717
  ]);
1958
3718
  };
1959
3719
  }
1960
- }), [["__scopeId", "data-v-404eebe9"]]);
3720
+ }), [["__scopeId", "data-v-7446c210"]]);
1961
3721
  //#endregion
1962
3722
  //#region src/vue/components/OpeningBalancesForm.vue?vue&type=script&setup=true&lang.ts
1963
3723
  var _hoisted_1$7 = { class: "flex items-center justify-between gap-2" };
@@ -2030,7 +3790,7 @@ var OpeningBalancesForm_default = /*#__PURE__*/ _plugin_vue_export_helper_defaul
2030
3790
  },
2031
3791
  emits: ["submitted"],
2032
3792
  setup(__props, { emit: __emit }) {
2033
- const { t } = useI18n();
3793
+ const { t } = useAccountingI18n();
2034
3794
  const props = __props;
2035
3795
  const emit = __emit;
2036
3796
  const showAccountsModal = ref(false);
@@ -2232,7 +3992,7 @@ var OpeningBalancesForm_default = /*#__PURE__*/ _plugin_vue_export_helper_defaul
2232
3992
  }, null, 8, ["book-id", "accounts"])) : createCommentVNode("", true)], 64);
2233
3993
  };
2234
3994
  }
2235
- }), [["__scopeId", "data-v-3a945c22"]]);
3995
+ }), [["__scopeId", "data-v-530643ac"]]);
2236
3996
  //#endregion
2237
3997
  //#region src/vue/components/AccountsList.vue?vue&type=script&setup=true&lang.ts
2238
3998
  var _hoisted_1$6 = {
@@ -2267,7 +4027,7 @@ var AccountsList_default = /* @__PURE__ */ defineComponent({
2267
4027
  },
2268
4028
  emits: ["selectAccount", "changed"],
2269
4029
  setup(__props, { emit: __emit }) {
2270
- const { t } = useI18n();
4030
+ const { t } = useAccountingI18n();
2271
4031
  const props = __props;
2272
4032
  const emit = __emit;
2273
4033
  const ACCOUNT_TYPES = [
@@ -2393,7 +4153,7 @@ var Ledger_default = /* @__PURE__ */ defineComponent({
2393
4153
  preselectAccountCode: {}
2394
4154
  },
2395
4155
  setup(__props) {
2396
- const { t } = useI18n();
4156
+ const { t } = useAccountingI18n();
2397
4157
  const props = __props;
2398
4158
  const accountCode = ref("");
2399
4159
  const ledger = ref(null);
@@ -2574,7 +4334,7 @@ var BalanceSheet_default = /* @__PURE__ */ defineComponent({
2574
4334
  },
2575
4335
  emits: ["selectAccount"],
2576
4336
  setup(__props, { emit: __emit }) {
2577
- const { t } = useI18n();
4337
+ const { t } = useAccountingI18n();
2578
4338
  const props = __props;
2579
4339
  const emit = __emit;
2580
4340
  const period = ref(localMonthString());
@@ -2762,7 +4522,7 @@ var ProfitLoss_default = /* @__PURE__ */ defineComponent({
2762
4522
  },
2763
4523
  emits: ["selectAccount"],
2764
4524
  setup(__props, { emit: __emit }) {
2765
- const { t } = useI18n();
4525
+ const { t } = useAccountingI18n();
2766
4526
  const props = __props;
2767
4527
  const emit = __emit;
2768
4528
  const resolvedFiscalYearEnd = computed(() => resolveFiscalYearEnd(props.fiscalYearEnd));
@@ -2933,7 +4693,7 @@ var BookSettings_default = /* @__PURE__ */ defineComponent({
2933
4693
  },
2934
4694
  emits: ["deleted", "books-changed"],
2935
4695
  setup(__props, { emit: __emit }) {
2936
- const { t, locale } = useI18n();
4696
+ const { t, locale } = useAccountingI18n();
2937
4697
  const props = __props;
2938
4698
  const emit = __emit;
2939
4699
  const rebuilding = ref(false);
@@ -3204,7 +4964,7 @@ var View_default = /* @__PURE__ */ defineComponent({
3204
4964
  __name: "View",
3205
4965
  props: { selectedResult: {} },
3206
4966
  setup(__props) {
3207
- const { t } = useI18n();
4967
+ const { t } = useAccountingI18n();
3208
4968
  const props = __props;
3209
4969
  const TAB_KEYS = [
3210
4970
  "journal",
@@ -3572,7 +5332,7 @@ var Preview_default = /* @__PURE__ */ defineComponent({
3572
5332
  jsonData: {}
3573
5333
  },
3574
5334
  setup(__props) {
3575
- const { t } = useI18n();
5335
+ const { t } = useAccountingI18n();
3576
5336
  const props = __props;
3577
5337
  function summariseError(json) {
3578
5338
  const { error } = json;