@kernhq/module-billing 0.3.6 → 0.4.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 (2) hide show
  1. package/package.json +3 -3
  2. package/src/client/i18n.ts +712 -12
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kernhq/module-billing",
3
- "version": "0.3.6",
3
+ "version": "0.4.0",
4
4
  "description": "Kern billing module: plans, entitlements, subscriptions and Stripe — the mechanism that lets any Kern instance sell seats on itself",
5
5
  "homepage": "https://github.com/KernAIO/module-billing#readme",
6
6
  "license": "AGPL-3.0-only",
@@ -55,7 +55,7 @@
55
55
  "@kernhq/contracts": "^0.7.0",
56
56
  "@kernhq/kernel": "^0.7.0",
57
57
  "@kernhq/tsconfig": "^0.1.0",
58
- "@kernhq/ui": "^0.10.0",
58
+ "@kernhq/ui": "^0.12.5",
59
59
  "@tanstack/svelte-query": "^6.1.0",
60
60
  "@types/node": "^24.0.0",
61
61
  "@types/pg": "^8.15.0",
@@ -69,7 +69,7 @@
69
69
  "peerDependencies": {
70
70
  "@kernhq/contracts": "^0.7.0",
71
71
  "@kernhq/kernel": "^0.7.0",
72
- "@kernhq/ui": "^0.10.0",
72
+ "@kernhq/ui": "^0.12.5",
73
73
  "@tanstack/svelte-query": "^6.1.0",
74
74
  "svelte": "^5.46.0"
75
75
  },
@@ -1,27 +1,727 @@
1
1
  /**
2
2
  * Billing's own strings, in every locale the platform ships.
3
3
  *
4
- * A module ships separately from the app, so Paraglide cannot compile these the shell merges
5
- * them into the framework's message runtime when it registers this module, and `t()` resolves
6
- * against the merged map. Keys are namespaced by module id, which is what keeps two modules from
7
- * colliding in that one map.
4
+ * A module ships separately from the app, so Paraglide which compiles only the app's
5
+ * `messages/*.json` — cannot see these. The shell merges them into the framework's message runtime
6
+ * when it registers the module, and `t()` resolves against the merged map.
8
7
  *
9
- * Bundles are thunks so a locale is only fetched when it is the one in use; English is the
10
- * fallback and is therefore always loaded.
8
+ * A **counted** message is a map of CLDR plural category to string; `t(key, { count })` picks the
9
+ * form. Words every module needs and none owns come from the framework's `common` bundle.
11
10
  */
12
11
  import { type Message, scopedT } from '@kernhq/ui'
13
12
 
14
- export const en: Record<string, Message> = {}
13
+ export const en: Record<string, Message> = {
14
+ 'billing.actions': 'Billing actions',
15
+ 'billing.admin_action_clear_override': 'Clear limit override',
16
+ 'billing.admin_action_extend_trial': 'Extend trial by 14 days',
17
+ 'billing.admin_action_resume': 'Resume',
18
+ 'billing.admin_action_set_plan': 'Change plan',
19
+ 'billing.admin_action_stripe': 'Open in Stripe',
20
+ 'billing.admin_action_suspend': 'Suspend',
21
+ 'billing.admin_archive_body':
22
+ 'It stops being offered and disappears from the pricing page. Workspaces already on it stay on it and keep their limits. Nothing is deleted.',
23
+ 'billing.admin_archive_confirm': 'Archive plan',
24
+ 'billing.admin_archive_title': 'Archive {name}?',
25
+ 'billing.admin_cancel': 'Cancel',
26
+ 'billing.admin_col_plan': 'Plan',
27
+ 'billing.admin_col_renews': 'Renews',
28
+ 'billing.admin_col_revenue': 'Per month',
29
+ 'billing.admin_col_seats': 'Seats',
30
+ 'billing.admin_col_status': 'Status',
31
+ 'billing.admin_col_storage': 'Storage',
32
+ 'billing.admin_col_workspace': 'Workspace',
33
+ 'billing.admin_empty': 'No workspaces yet',
34
+ 'billing.admin_empty_hint': 'A workspace appears here as soon as somebody creates one.',
35
+ 'billing.admin_error': 'The workspace list could not be loaded',
36
+ 'billing.admin_mrr': 'Per month',
37
+ 'billing.admin_no_payments':
38
+ 'No Stripe key is configured, so this instance cannot take a payment. Plans and limits still apply.',
39
+ 'billing.admin_overridden': 'Overridden',
40
+ 'billing.admin_overridden_hint': 'This workspace has limits set by hand, so its plan does not decide them.',
41
+ 'billing.admin_paying': 'Paying',
42
+ 'billing.admin_plan_archive': 'Archive',
43
+ 'billing.admin_plan_archived_toast': '{name} archived',
44
+ 'billing.admin_plan_audit_days': 'Audit log kept (days)',
45
+ 'billing.admin_plan_changed_toast': 'Plan changed',
46
+ 'billing.admin_plan_currency': 'Currency',
47
+ 'billing.admin_plan_description': 'Description',
48
+ 'billing.admin_plan_draft': 'Draft',
49
+ 'billing.admin_plan_edit': 'Edit',
50
+ 'billing.admin_plan_interval': 'Billed',
51
+ 'billing.admin_plan_interval_month': 'Monthly',
52
+ 'billing.admin_plan_interval_year': 'Yearly',
53
+ 'billing.admin_plan_limits': 'What it includes',
54
+ 'billing.admin_plan_limits_hint': 'Leave a limit empty for unlimited.',
55
+ 'billing.admin_plan_name': 'Name',
56
+ 'billing.admin_plan_new': 'New plan',
57
+ 'billing.admin_plan_none': 'No plan (unlimited)',
58
+ 'billing.admin_plan_order': 'Order',
59
+ 'billing.admin_plan_per_seat': 'Charge per user',
60
+ 'billing.admin_plan_per_seat_hint': 'Off charges the price once for the whole workspace.',
61
+ 'billing.admin_plan_price': 'Price',
62
+ 'billing.admin_plan_price_hint': 'In whole currency units, so 8 is $8.00.',
63
+ 'billing.admin_plan_publish': 'Publish',
64
+ 'billing.admin_plan_published': 'Published',
65
+ 'billing.admin_plan_published_toast': '{name} is now on the pricing page',
66
+ 'billing.admin_plan_saved': 'Plan saved',
67
+ 'billing.admin_plan_seats': 'Seats',
68
+ 'billing.admin_plan_slug': 'Slug',
69
+ 'billing.admin_plan_slug_hint':
70
+ 'Appears in URLs and on the pricing page. It cannot be reused by another plan.',
71
+ 'billing.admin_plan_sso': 'Single sign-on',
72
+ 'billing.admin_plan_storage_gb': 'Storage (GB)',
73
+ 'billing.admin_plan_stripe_price': 'Stripe price ID',
74
+ 'billing.admin_plan_stripe_price_hint':
75
+ 'Without one, this plan cannot be bought — only assigned by an administrator.',
76
+ 'billing.admin_plan_trial_days': 'Trial days',
77
+ 'billing.admin_plan_unpublish': 'Unpublish',
78
+ 'billing.admin_plan_unpublished_toast': '{name} is no longer offered',
79
+ 'billing.admin_plans_empty': 'No plans yet',
80
+ 'billing.admin_plans_empty_hint': 'Create one to start charging for workspaces on this instance.',
81
+ 'billing.admin_plans_nav': 'Plans',
82
+ 'billing.admin_plans_subtitle':
83
+ 'What this instance sells. A published plan is what the pricing page shows.',
84
+ 'billing.admin_plans_title': 'Plans',
85
+ 'billing.admin_resumed_toast': '{name} resumed',
86
+ 'billing.admin_save': 'Save',
87
+ 'billing.admin_search': 'Search workspaces',
88
+ 'billing.admin_set_plan_body':
89
+ 'This takes effect at once and does not go through Stripe. Use it to comp an account or correct a mistake, not to sell one.',
90
+ 'billing.admin_set_plan_title': 'Change the plan for {name}',
91
+ 'billing.admin_subscriptions_nav': 'Subscriptions',
92
+ 'billing.admin_subscriptions_subtitle': 'Every workspace on this instance, and what it pays.',
93
+ 'billing.admin_subscriptions_title': 'Subscriptions',
94
+ 'billing.admin_suspend_body':
95
+ 'Everyone in {name} keeps their sign-in and can read and export what is theirs. Nobody can write until you resume it. Nothing is deleted.',
96
+ 'billing.admin_suspend_confirm': 'Suspend workspace',
97
+ 'billing.admin_suspend_title': 'Suspend this workspace?',
98
+ 'billing.admin_suspended_count': 'Suspended',
99
+ 'billing.admin_suspended_toast': '{name} suspended',
100
+ 'billing.admin_trial_extended_toast': 'Trial extended by 14 days',
101
+ 'billing.admin_workspaces': 'Workspaces',
102
+ 'billing.blocked_seats': 'This plan includes {seats} seats and this workspace has {used} members.',
103
+ 'billing.cancels': 'Ends',
104
+ 'billing.change_plan': 'Change plan',
105
+ 'billing.choose_plan': 'Choose',
106
+ 'billing.current': 'Current',
107
+ 'billing.current_plan': 'Current plan',
108
+ 'billing.error': 'Billing could not be loaded',
109
+ 'billing.free': 'Free',
110
+ 'billing.invoice_amount': 'Amount',
111
+ 'billing.invoice_date': 'Date',
112
+ 'billing.invoice_number': 'Invoice',
113
+ 'billing.invoice_view': 'View',
114
+ 'billing.invoices_empty': 'No invoices yet',
115
+ 'billing.invoices_empty_hint': 'An invoice appears here after the first payment.',
116
+ 'billing.invoices_section': 'Invoices',
117
+ 'billing.manage_payment': 'Manage payment',
118
+ 'billing.no_permission': 'You do not have permission to change this.',
119
+ 'billing.no_plan': 'No plan',
120
+ 'billing.no_plan_hint': 'Nothing is charged for this workspace, and no limits apply.',
121
+ 'billing.no_plans': 'No plans are on offer',
122
+ 'billing.no_plans_hint': 'An instance administrator has not published any.',
123
+ 'billing.past_due_hint':
124
+ 'We could not take the last payment. Update the card to keep this workspace working.',
125
+ 'billing.payments_disabled': 'This instance is not set up to take payments.',
126
+ 'billing.per_month': 'per month',
127
+ 'billing.per_user_month': 'per user, per month',
128
+ 'billing.per_user_year': 'per user, per year',
129
+ 'billing.per_year': 'per year',
130
+ 'billing.plan_section': 'Plan',
131
+ 'billing.renews': 'Renews',
132
+ 'billing.retry': 'Try again',
133
+ 'billing.seats': 'Seats',
134
+ 'billing.settings_nav': 'Billing',
135
+ 'billing.status': 'Status',
136
+ 'billing.status_active': 'Active',
137
+ 'billing.status_canceled': 'Cancelled',
138
+ 'billing.status_past_due': 'Payment failed',
139
+ 'billing.status_suspended': 'Suspended',
140
+ 'billing.status_trialing': 'Trial',
141
+ 'billing.storage': 'Storage',
142
+ 'billing.subtitle': 'What this workspace is on, and what it is using.',
143
+ 'billing.suspended_hint':
144
+ 'This workspace is read-only until its subscription is current. Nothing has been deleted.',
145
+ 'billing.title': 'Billing',
146
+ 'billing.trial_days_left': {
147
+ one: '{n} day left',
148
+ other: '{n} days left',
149
+ },
150
+ 'billing.trial_ends_today': 'Ends today',
151
+ 'billing.unlimited': 'Unlimited',
152
+ 'billing.usage_of': '{used} of {limit}',
153
+ }
15
154
 
16
155
  export type BillingMessageKey = keyof typeof en
17
156
 
18
- const ar: Record<string, Message> = {}
157
+ const ar: Record<string, Message> = {
158
+ 'billing.actions': 'إجراءات الفوترة',
159
+ 'billing.admin_action_clear_override': 'إلغاء الحدود اليدوية',
160
+ 'billing.admin_action_extend_trial': 'تمديد الفترة التجريبية ١٤ يوماً',
161
+ 'billing.admin_action_resume': 'استئناف',
162
+ 'billing.admin_action_set_plan': 'تغيير الخطة',
163
+ 'billing.admin_action_stripe': 'افتح في Stripe',
164
+ 'billing.admin_action_suspend': 'إيقاف',
165
+ 'billing.admin_archive_body':
166
+ 'تتوقف عن العرض وتختفي من صفحة الأسعار. تبقى مساحات العمل التي تستخدمها عليها بحدودها نفسها. لا يُحذف شيء.',
167
+ 'billing.admin_archive_confirm': 'أرشفة الخطة',
168
+ 'billing.admin_archive_title': 'أرشفة {name}؟',
169
+ 'billing.admin_cancel': 'إلغاء',
170
+ 'billing.admin_col_plan': 'الخطة',
171
+ 'billing.admin_col_renews': 'التجديد',
172
+ 'billing.admin_col_revenue': 'شهرياً',
173
+ 'billing.admin_col_seats': 'المقاعد',
174
+ 'billing.admin_col_status': 'الحالة',
175
+ 'billing.admin_col_storage': 'التخزين',
176
+ 'billing.admin_col_workspace': 'مساحة العمل',
177
+ 'billing.admin_empty': 'لا مساحات عمل بعد',
178
+ 'billing.admin_empty_hint': 'تظهر هنا فور أن ينشئ أحدهم واحدة.',
179
+ 'billing.admin_error': 'تعذّر تحميل قائمة مساحات العمل',
180
+ 'billing.admin_mrr': 'شهرياً',
181
+ 'billing.admin_no_payments':
182
+ 'لا يوجد مفتاح Stripe مضبوط، لذا لا تستطيع هذه النسخة استقبال أي دفعة. تبقى الخطط والحدود سارية.',
183
+ 'billing.admin_overridden': 'يدوي',
184
+ 'billing.admin_overridden_hint': 'حدود مساحة العمل هذه مضبوطة يدوياً، فخطتها لا تحددها.',
185
+ 'billing.admin_paying': 'تدفع',
186
+ 'billing.admin_plan_archive': 'أرشفة',
187
+ 'billing.admin_plan_archived_toast': 'أُرشفت {name}',
188
+ 'billing.admin_plan_audit_days': 'حفظ سجل التدقيق (أيام)',
189
+ 'billing.admin_plan_changed_toast': 'تغيّرت الخطة',
190
+ 'billing.admin_plan_currency': 'العملة',
191
+ 'billing.admin_plan_description': 'الوصف',
192
+ 'billing.admin_plan_draft': 'مسودة',
193
+ 'billing.admin_plan_edit': 'تحرير',
194
+ 'billing.admin_plan_interval': 'دورة الفوترة',
195
+ 'billing.admin_plan_interval_month': 'شهرياً',
196
+ 'billing.admin_plan_interval_year': 'سنوياً',
197
+ 'billing.admin_plan_limits': 'ما تتضمنه',
198
+ 'billing.admin_plan_limits_hint': 'اترك الحقل فارغاً ليكون بلا حدود.',
199
+ 'billing.admin_plan_name': 'الاسم',
200
+ 'billing.admin_plan_new': 'خطة جديدة',
201
+ 'billing.admin_plan_none': 'بلا خطة (بلا حدود)',
202
+ 'billing.admin_plan_order': 'الترتيب',
203
+ 'billing.admin_plan_per_seat': 'الاحتساب لكل مستخدم',
204
+ 'billing.admin_plan_per_seat_hint': 'عند الإيقاف يُحتسب السعر مرة واحدة لمساحة العمل كلها.',
205
+ 'billing.admin_plan_price': 'السعر',
206
+ 'billing.admin_plan_price_hint': 'بوحدات العملة الكاملة، فـ٨ تعني ٨٫٠٠ دولار.',
207
+ 'billing.admin_plan_publish': 'نشر',
208
+ 'billing.admin_plan_published': 'منشورة',
209
+ 'billing.admin_plan_published_toast': '{name} صارت على صفحة الأسعار',
210
+ 'billing.admin_plan_saved': 'حُفظت الخطة',
211
+ 'billing.admin_plan_seats': 'المقاعد',
212
+ 'billing.admin_plan_slug': 'المُعرِّف',
213
+ 'billing.admin_plan_slug_hint': 'يظهر في الروابط وفي صفحة الأسعار، ولا يمكن لخطة أخرى استخدامه.',
214
+ 'billing.admin_plan_sso': 'الدخول الموحّد',
215
+ 'billing.admin_plan_storage_gb': 'التخزين (غيغابايت)',
216
+ 'billing.admin_plan_stripe_price': 'مُعرِّف السعر في Stripe',
217
+ 'billing.admin_plan_stripe_price_hint': 'بدونه لا يمكن شراء هذه الخطة، بل يسندها المدير فقط.',
218
+ 'billing.admin_plan_trial_days': 'أيام التجربة',
219
+ 'billing.admin_plan_unpublish': 'إلغاء النشر',
220
+ 'billing.admin_plan_unpublished_toast': '{name} لم تعد معروضة',
221
+ 'billing.admin_plans_empty': 'لا خطط بعد',
222
+ 'billing.admin_plans_empty_hint': 'أنشئ واحدة لتبدأ تحصيل رسوم مساحات العمل في هذه النسخة.',
223
+ 'billing.admin_plans_nav': 'الخطط',
224
+ 'billing.admin_plans_subtitle': 'ما تبيعه هذه النسخة. الخطة المنشورة هي ما تعرضه صفحة الأسعار.',
225
+ 'billing.admin_plans_title': 'الخطط',
226
+ 'billing.admin_resumed_toast': 'استُؤنفت {name}',
227
+ 'billing.admin_save': 'حفظ',
228
+ 'billing.admin_search': 'ابحث في مساحات العمل',
229
+ 'billing.admin_set_plan_body':
230
+ 'يسري هذا فوراً ولا يمر عبر Stripe. استخدمه لإعفاء حساب أو تصحيح خطأ، لا للبيع.',
231
+ 'billing.admin_set_plan_title': 'تغيير خطة {name}',
232
+ 'billing.admin_subscriptions_nav': 'الاشتراكات',
233
+ 'billing.admin_subscriptions_subtitle': 'كل مساحات العمل في هذه النسخة، وما تدفعه.',
234
+ 'billing.admin_subscriptions_title': 'الاشتراكات',
235
+ 'billing.admin_suspend_body':
236
+ 'يظل بإمكان كل من في {name} تسجيل الدخول وقراءة بياناتهم وتصديرها. لا يستطيع أحد الكتابة حتى تستأنفها. لا يُحذف شيء.',
237
+ 'billing.admin_suspend_confirm': 'إيقاف مساحة العمل',
238
+ 'billing.admin_suspend_title': 'إيقاف مساحة العمل هذه؟',
239
+ 'billing.admin_suspended_count': 'موقوفة',
240
+ 'billing.admin_suspended_toast': 'أُوقفت {name}',
241
+ 'billing.admin_trial_extended_toast': 'مُددت الفترة التجريبية ١٤ يوماً',
242
+ 'billing.admin_workspaces': 'مساحات العمل',
243
+ 'billing.blocked_seats': 'تتضمن هذه الخطة {seats} مقعداً، ولدى مساحة العمل {used} عضواً.',
244
+ 'billing.cancels': 'تنتهي في',
245
+ 'billing.change_plan': 'تغيير الخطة',
246
+ 'billing.choose_plan': 'اختيار',
247
+ 'billing.current': 'الحالية',
248
+ 'billing.current_plan': 'الخطة الحالية',
249
+ 'billing.error': 'تعذّر تحميل الفوترة',
250
+ 'billing.free': 'مجاني',
251
+ 'billing.invoice_amount': 'المبلغ',
252
+ 'billing.invoice_date': 'التاريخ',
253
+ 'billing.invoice_number': 'الفاتورة',
254
+ 'billing.invoice_view': 'عرض',
255
+ 'billing.invoices_empty': 'لا فواتير بعد',
256
+ 'billing.invoices_empty_hint': 'تظهر الفاتورة هنا بعد أول عملية دفع.',
257
+ 'billing.invoices_section': 'الفواتير',
258
+ 'billing.manage_payment': 'إدارة الدفع',
259
+ 'billing.no_permission': 'لا تملك صلاحية تغيير هذا.',
260
+ 'billing.no_plan': 'بلا خطة',
261
+ 'billing.no_plan_hint': 'لا يُحصَّل أي مبلغ عن مساحة العمل هذه، ولا تنطبق عليها حدود.',
262
+ 'billing.no_plans': 'لا توجد خطط معروضة',
263
+ 'billing.no_plans_hint': 'لم ينشر مدير النسخة أي خطة بعد.',
264
+ 'billing.past_due_hint': 'تعذّر تحصيل آخر دفعة. حدِّث البطاقة كي تستمر مساحة العمل في العمل.',
265
+ 'billing.payments_disabled': 'لم تُهيَّأ هذه النسخة لاستقبال المدفوعات.',
266
+ 'billing.per_month': 'شهرياً',
267
+ 'billing.per_user_month': 'لكل مستخدم شهرياً',
268
+ 'billing.per_user_year': 'لكل مستخدم سنوياً',
269
+ 'billing.per_year': 'سنوياً',
270
+ 'billing.plan_section': 'الخطة',
271
+ 'billing.renews': 'تتجدد في',
272
+ 'billing.retry': 'أعد المحاولة',
273
+ 'billing.seats': 'المقاعد',
274
+ 'billing.settings_nav': 'الفوترة',
275
+ 'billing.status': 'الحالة',
276
+ 'billing.status_active': 'نشط',
277
+ 'billing.status_canceled': 'مُلغى',
278
+ 'billing.status_past_due': 'تعذّر الدفع',
279
+ 'billing.status_suspended': 'موقوف',
280
+ 'billing.status_trialing': 'فترة تجريبية',
281
+ 'billing.storage': 'التخزين',
282
+ 'billing.subtitle': 'الخطة التي تعمل عليها مساحة العمل هذه، وما تستهلكه.',
283
+ 'billing.suspended_hint': 'مساحة العمل هذه للقراءة فقط حتى تُسوَّى قيمة الاشتراك. لم يُحذف أي شيء.',
284
+ 'billing.title': 'الفوترة',
285
+ 'billing.trial_days_left': {
286
+ zero: 'لم يتبقَّ أي يوم',
287
+ one: 'بقي يوم واحد',
288
+ two: 'بقي يومان',
289
+ few: 'بقيت {n} أيام',
290
+ many: 'بقي {n} يوماً',
291
+ other: 'بقي {n} يوم',
292
+ },
293
+ 'billing.trial_ends_today': 'تنتهي اليوم',
294
+ 'billing.unlimited': 'بلا حدود',
295
+ 'billing.usage_of': '{used} من {limit}',
296
+ }
19
297
 
20
- const de: Record<string, Message> = {}
298
+ const de: Record<string, Message> = {
299
+ 'billing.actions': 'Abrechnungsaktionen',
300
+ 'billing.admin_action_clear_override': 'Manuelle Grenzen aufheben',
301
+ 'billing.admin_action_extend_trial': 'Testphase um 14 Tage verlängern',
302
+ 'billing.admin_action_resume': 'Entsperren',
303
+ 'billing.admin_action_set_plan': 'Tarif wechseln',
304
+ 'billing.admin_action_stripe': 'In Stripe öffnen',
305
+ 'billing.admin_action_suspend': 'Sperren',
306
+ 'billing.admin_archive_body':
307
+ 'Der Tarif wird nicht mehr angeboten und verschwindet von der Preisseite. Arbeitsbereiche, die ihn haben, behalten ihn und ihre Grenzen. Es wird nichts gelöscht.',
308
+ 'billing.admin_archive_confirm': 'Tarif archivieren',
309
+ 'billing.admin_archive_title': '{name} archivieren?',
310
+ 'billing.admin_cancel': 'Abbrechen',
311
+ 'billing.admin_col_plan': 'Tarif',
312
+ 'billing.admin_col_renews': 'Verlängert am',
313
+ 'billing.admin_col_revenue': 'Pro Monat',
314
+ 'billing.admin_col_seats': 'Plätze',
315
+ 'billing.admin_col_status': 'Status',
316
+ 'billing.admin_col_storage': 'Speicher',
317
+ 'billing.admin_col_workspace': 'Arbeitsbereich',
318
+ 'billing.admin_empty': 'Noch keine Arbeitsbereiche',
319
+ 'billing.admin_empty_hint': 'Sobald jemand einen anlegt, erscheint er hier.',
320
+ 'billing.admin_error': 'Die Liste der Arbeitsbereiche konnte nicht geladen werden',
321
+ 'billing.admin_mrr': 'Pro Monat',
322
+ 'billing.admin_no_payments':
323
+ 'Es ist kein Stripe-Schlüssel hinterlegt, diese Instanz kann also keine Zahlung annehmen. Tarife und Grenzen gelten trotzdem.',
324
+ 'billing.admin_overridden': 'Manuell',
325
+ 'billing.admin_overridden_hint':
326
+ 'Die Grenzen dieses Arbeitsbereichs sind von Hand gesetzt, sein Tarif bestimmt sie nicht.',
327
+ 'billing.admin_paying': 'Zahlend',
328
+ 'billing.admin_plan_archive': 'Archivieren',
329
+ 'billing.admin_plan_archived_toast': '{name} archiviert',
330
+ 'billing.admin_plan_audit_days': 'Auditprotokoll aufbewahren (Tage)',
331
+ 'billing.admin_plan_changed_toast': 'Tarif geändert',
332
+ 'billing.admin_plan_currency': 'Währung',
333
+ 'billing.admin_plan_description': 'Beschreibung',
334
+ 'billing.admin_plan_draft': 'Entwurf',
335
+ 'billing.admin_plan_edit': 'Bearbeiten',
336
+ 'billing.admin_plan_interval': 'Abrechnung',
337
+ 'billing.admin_plan_interval_month': 'Monatlich',
338
+ 'billing.admin_plan_interval_year': 'Jährlich',
339
+ 'billing.admin_plan_limits': 'Was enthalten ist',
340
+ 'billing.admin_plan_limits_hint': 'Für unbegrenzt das Feld leer lassen.',
341
+ 'billing.admin_plan_name': 'Name',
342
+ 'billing.admin_plan_new': 'Neuer Tarif',
343
+ 'billing.admin_plan_none': 'Kein Tarif (unbegrenzt)',
344
+ 'billing.admin_plan_order': 'Reihenfolge',
345
+ 'billing.admin_plan_per_seat': 'Pro Person berechnen',
346
+ 'billing.admin_plan_per_seat_hint':
347
+ 'Ausgeschaltet wird der Preis einmal für den ganzen Arbeitsbereich berechnet.',
348
+ 'billing.admin_plan_price': 'Preis',
349
+ 'billing.admin_plan_price_hint': 'In ganzen Währungseinheiten, 8 bedeutet also 8,00 $.',
350
+ 'billing.admin_plan_publish': 'Veröffentlichen',
351
+ 'billing.admin_plan_published': 'Veröffentlicht',
352
+ 'billing.admin_plan_published_toast': '{name} steht jetzt auf der Preisseite',
353
+ 'billing.admin_plan_saved': 'Tarif gespeichert',
354
+ 'billing.admin_plan_seats': 'Plätze',
355
+ 'billing.admin_plan_slug': 'Kennung',
356
+ 'billing.admin_plan_slug_hint':
357
+ 'Erscheint in URLs und auf der Preisseite. Kein anderer Tarif kann sie verwenden.',
358
+ 'billing.admin_plan_sso': 'Single Sign-on',
359
+ 'billing.admin_plan_storage_gb': 'Speicher (GB)',
360
+ 'billing.admin_plan_stripe_price': 'Stripe-Preis-ID',
361
+ 'billing.admin_plan_stripe_price_hint':
362
+ 'Ohne sie kann dieser Tarif nicht gekauft, sondern nur von einer Verwaltung zugewiesen werden.',
363
+ 'billing.admin_plan_trial_days': 'Testtage',
364
+ 'billing.admin_plan_unpublish': 'Zurückziehen',
365
+ 'billing.admin_plan_unpublished_toast': '{name} wird nicht mehr angeboten',
366
+ 'billing.admin_plans_empty': 'Noch keine Tarife',
367
+ 'billing.admin_plans_empty_hint':
368
+ 'Legen Sie einen an, um für Arbeitsbereiche dieser Instanz Geld zu verlangen.',
369
+ 'billing.admin_plans_nav': 'Tarife',
370
+ 'billing.admin_plans_subtitle':
371
+ 'Was diese Instanz verkauft. Ein veröffentlichter Tarif ist das, was die Preisseite zeigt.',
372
+ 'billing.admin_plans_title': 'Tarife',
373
+ 'billing.admin_resumed_toast': '{name} entsperrt',
374
+ 'billing.admin_save': 'Speichern',
375
+ 'billing.admin_search': 'Arbeitsbereiche suchen',
376
+ 'billing.admin_set_plan_body':
377
+ 'Das wirkt sofort und läuft nicht über Stripe. Nutzen Sie es, um ein Konto freizugeben oder einen Fehler zu korrigieren, nicht um zu verkaufen.',
378
+ 'billing.admin_set_plan_title': 'Tarif für {name} ändern',
379
+ 'billing.admin_subscriptions_nav': 'Abonnements',
380
+ 'billing.admin_subscriptions_subtitle': 'Jeder Arbeitsbereich dieser Instanz und was er zahlt.',
381
+ 'billing.admin_subscriptions_title': 'Abonnements',
382
+ 'billing.admin_suspend_body':
383
+ 'Alle in {name} können sich weiter anmelden und ihre Daten lesen und exportieren. Bis zur Entsperrung kann niemand schreiben. Es wird nichts gelöscht.',
384
+ 'billing.admin_suspend_confirm': 'Arbeitsbereich sperren',
385
+ 'billing.admin_suspend_title': 'Diesen Arbeitsbereich sperren?',
386
+ 'billing.admin_suspended_count': 'Gesperrt',
387
+ 'billing.admin_suspended_toast': '{name} gesperrt',
388
+ 'billing.admin_trial_extended_toast': 'Testphase um 14 Tage verlängert',
389
+ 'billing.admin_workspaces': 'Arbeitsbereiche',
390
+ 'billing.blocked_seats':
391
+ 'Dieser Tarif enthält {seats} Plätze, dieser Arbeitsbereich hat {used} Mitglieder.',
392
+ 'billing.cancels': 'Endet am',
393
+ 'billing.change_plan': 'Tarif wechseln',
394
+ 'billing.choose_plan': 'Auswählen',
395
+ 'billing.current': 'Aktuell',
396
+ 'billing.current_plan': 'Aktueller Tarif',
397
+ 'billing.error': 'Die Abrechnung konnte nicht geladen werden',
398
+ 'billing.free': 'Kostenlos',
399
+ 'billing.invoice_amount': 'Betrag',
400
+ 'billing.invoice_date': 'Datum',
401
+ 'billing.invoice_number': 'Rechnung',
402
+ 'billing.invoice_view': 'Ansehen',
403
+ 'billing.invoices_empty': 'Noch keine Rechnungen',
404
+ 'billing.invoices_empty_hint': 'Nach der ersten Zahlung erscheint hier eine Rechnung.',
405
+ 'billing.invoices_section': 'Rechnungen',
406
+ 'billing.manage_payment': 'Zahlung verwalten',
407
+ 'billing.no_permission': 'Sie dürfen das nicht ändern.',
408
+ 'billing.no_plan': 'Kein Tarif',
409
+ 'billing.no_plan_hint': 'Für diesen Arbeitsbereich wird nichts berechnet, und es gelten keine Grenzen.',
410
+ 'billing.no_plans': 'Es werden keine Tarife angeboten',
411
+ 'billing.no_plans_hint': 'Eine Instanzverwaltung hat noch keinen veröffentlicht.',
412
+ 'billing.past_due_hint':
413
+ 'Die letzte Zahlung konnte nicht eingezogen werden. Aktualisieren Sie die Karte, damit dieser Arbeitsbereich weiterläuft.',
414
+ 'billing.payments_disabled': 'Diese Instanz ist nicht für Zahlungen eingerichtet.',
415
+ 'billing.per_month': 'pro Monat',
416
+ 'billing.per_user_month': 'pro Person und Monat',
417
+ 'billing.per_user_year': 'pro Person und Jahr',
418
+ 'billing.per_year': 'pro Jahr',
419
+ 'billing.plan_section': 'Tarif',
420
+ 'billing.renews': 'Verlängert am',
421
+ 'billing.retry': 'Erneut versuchen',
422
+ 'billing.seats': 'Plätze',
423
+ 'billing.settings_nav': 'Abrechnung',
424
+ 'billing.status': 'Status',
425
+ 'billing.status_active': 'Aktiv',
426
+ 'billing.status_canceled': 'Gekündigt',
427
+ 'billing.status_past_due': 'Zahlung fehlgeschlagen',
428
+ 'billing.status_suspended': 'Gesperrt',
429
+ 'billing.status_trialing': 'Testphase',
430
+ 'billing.storage': 'Speicher',
431
+ 'billing.subtitle': 'Welchen Tarif dieser Arbeitsbereich hat und was er verbraucht.',
432
+ 'billing.suspended_hint':
433
+ 'Dieser Arbeitsbereich ist schreibgeschützt, bis das Abonnement ausgeglichen ist. Es wurde nichts gelöscht.',
434
+ 'billing.title': 'Abrechnung',
435
+ 'billing.trial_days_left': {
436
+ one: 'Noch {n} Tag',
437
+ other: 'Noch {n} Tage',
438
+ },
439
+ 'billing.trial_ends_today': 'Endet heute',
440
+ 'billing.unlimited': 'Unbegrenzt',
441
+ 'billing.usage_of': '{used} von {limit}',
442
+ }
21
443
 
22
- const fa: Record<string, Message> = {}
444
+ const fa: Record<string, Message> = {
445
+ 'billing.actions': 'کارهای پرداخت',
446
+ 'billing.admin_action_clear_override': 'برداشتن محدودیت دستی',
447
+ 'billing.admin_action_extend_trial': '۱۴ روز تمدید دوره آزمایشی',
448
+ 'billing.admin_action_resume': 'از سرگیری',
449
+ 'billing.admin_action_set_plan': 'تغییر طرح',
450
+ 'billing.admin_action_stripe': 'باز کردن در Stripe',
451
+ 'billing.admin_action_suspend': 'تعلیق',
452
+ 'billing.admin_archive_body':
453
+ 'دیگر ارائه نمی‌شود و از صفحه‌ی قیمت‌ها برداشته می‌شود. فضاهای کاری که روی آن هستند، روی آن می‌مانند و محدودیت‌هایشان را نگه می‌دارند. چیزی حذف نمی‌شود.',
454
+ 'billing.admin_archive_confirm': 'بایگانی طرح',
455
+ 'billing.admin_archive_title': '{name} بایگانی شود؟',
456
+ 'billing.admin_cancel': 'صرف‌نظر',
457
+ 'billing.admin_col_plan': 'طرح',
458
+ 'billing.admin_col_renews': 'تمدید',
459
+ 'billing.admin_col_revenue': 'ماهانه',
460
+ 'billing.admin_col_seats': 'کاربران',
461
+ 'billing.admin_col_status': 'وضعیت',
462
+ 'billing.admin_col_storage': 'فضای ذخیره‌سازی',
463
+ 'billing.admin_col_workspace': 'فضای کاری',
464
+ 'billing.admin_empty': 'هنوز فضای کاری‌ای نیست',
465
+ 'billing.admin_empty_hint': 'به‌محض اینکه کسی فضای کاری بسازد، اینجا نمایان می‌شود.',
466
+ 'billing.admin_error': 'فهرست فضاهای کاری بارگذاری نشد',
467
+ 'billing.admin_mrr': 'ماهانه',
468
+ 'billing.admin_no_payments':
469
+ 'کلید Stripe تنظیم نشده است، پس این نمونه نمی‌تواند پرداختی بگیرد. طرح‌ها و محدودیت‌ها همچنان اعمال می‌شوند.',
470
+ 'billing.admin_overridden': 'دست‌نویس',
471
+ 'billing.admin_overridden_hint': 'محدودیت‌های این فضای کاری دستی تعیین شده، پس طرحش آن‌ها را تعیین نمی‌کند.',
472
+ 'billing.admin_paying': 'پرداخت‌کننده',
473
+ 'billing.admin_plan_archive': 'بایگانی',
474
+ 'billing.admin_plan_archived_toast': '{name} بایگانی شد',
475
+ 'billing.admin_plan_audit_days': 'نگه‌داری گزارش رویدادها (روز)',
476
+ 'billing.admin_plan_changed_toast': 'طرح تغییر کرد',
477
+ 'billing.admin_plan_currency': 'واحد پول',
478
+ 'billing.admin_plan_description': 'توضیح',
479
+ 'billing.admin_plan_draft': 'پیش‌نویس',
480
+ 'billing.admin_plan_edit': 'ویرایش',
481
+ 'billing.admin_plan_interval': 'دوره',
482
+ 'billing.admin_plan_interval_month': 'ماهانه',
483
+ 'billing.admin_plan_interval_year': 'سالانه',
484
+ 'billing.admin_plan_limits': 'آنچه در بر می‌گیرد',
485
+ 'billing.admin_plan_limits_hint': 'محدودیت را خالی بگذارید تا بی‌حد باشد.',
486
+ 'billing.admin_plan_name': 'نام',
487
+ 'billing.admin_plan_new': 'طرح جدید',
488
+ 'billing.admin_plan_none': 'بدون طرح (بی‌حد)',
489
+ 'billing.admin_plan_order': 'ترتیب',
490
+ 'billing.admin_plan_per_seat': 'دریافت به‌ازای هر کاربر',
491
+ 'billing.admin_plan_per_seat_hint': 'اگر خاموش باشد، قیمت یک‌بار برای کل فضای کاری گرفته می‌شود.',
492
+ 'billing.admin_plan_price': 'قیمت',
493
+ 'billing.admin_plan_price_hint': 'به واحد کامل پول، پس ۸ یعنی ۸٫۰۰ دلار.',
494
+ 'billing.admin_plan_publish': 'انتشار',
495
+ 'billing.admin_plan_published': 'منتشرشده',
496
+ 'billing.admin_plan_published_toast': '{name} اکنون در صفحه‌ی قیمت‌ها است',
497
+ 'billing.admin_plan_saved': 'طرح ذخیره شد',
498
+ 'billing.admin_plan_seats': 'کاربران',
499
+ 'billing.admin_plan_slug': 'شناسه',
500
+ 'billing.admin_plan_slug_hint':
501
+ 'در نشانی‌ها و صفحه‌ی قیمت‌ها می‌آید. طرح دیگری نمی‌تواند دوباره از آن استفاده کند.',
502
+ 'billing.admin_plan_sso': 'ورود یکپارچه',
503
+ 'billing.admin_plan_storage_gb': 'فضای ذخیره‌سازی (گیگابایت)',
504
+ 'billing.admin_plan_stripe_price': 'شناسه‌ی قیمت در Stripe',
505
+ 'billing.admin_plan_stripe_price_hint': 'بدون آن، این طرح خریدنی نیست — فقط مدیر می‌تواند آن را بدهد.',
506
+ 'billing.admin_plan_trial_days': 'روزهای آزمایشی',
507
+ 'billing.admin_plan_unpublish': 'برداشتن از انتشار',
508
+ 'billing.admin_plan_unpublished_toast': '{name} دیگر ارائه نمی‌شود',
509
+ 'billing.admin_plans_empty': 'هنوز طرحی نیست',
510
+ 'billing.admin_plans_empty_hint': 'یکی بسازید تا بتوانید برای فضاهای کاری این نمونه هزینه بگیرید.',
511
+ 'billing.admin_plans_nav': 'طرح‌ها',
512
+ 'billing.admin_plans_subtitle':
513
+ 'آنچه این نمونه می‌فروشد. طرح منتشرشده همان است که در صفحه‌ی قیمت‌ها دیده می‌شود.',
514
+ 'billing.admin_plans_title': 'طرح‌ها',
515
+ 'billing.admin_resumed_toast': '{name} از سر گرفته شد',
516
+ 'billing.admin_save': 'ذخیره',
517
+ 'billing.admin_search': 'جست‌وجوی فضاهای کاری',
518
+ 'billing.admin_set_plan_body':
519
+ 'این بی‌درنگ اثر می‌گذارد و از Stripe نمی‌گذرد. برای رایگان‌کردن یک حساب یا جبران اشتباه از آن استفاده کنید، نه برای فروش.',
520
+ 'billing.admin_set_plan_title': 'تغییر طرح {name}',
521
+ 'billing.admin_subscriptions_nav': 'اشتراک‌ها',
522
+ 'billing.admin_subscriptions_subtitle': 'هر فضای کاری روی این نمونه، و آنچه می‌پردازد.',
523
+ 'billing.admin_subscriptions_title': 'اشتراک‌ها',
524
+ 'billing.admin_suspend_body':
525
+ 'همه در {name} ورودشان را نگه می‌دارند و می‌توانند آنچه را مال خودشان است بخوانند و برون‌ریزی کنند. تا از سرگیری، کسی نمی‌تواند چیزی بنویسد. چیزی حذف نمی‌شود.',
526
+ 'billing.admin_suspend_confirm': 'تعلیق فضای کاری',
527
+ 'billing.admin_suspend_title': 'این فضای کاری معلق شود؟',
528
+ 'billing.admin_suspended_count': 'معلق',
529
+ 'billing.admin_suspended_toast': '{name} معلق شد',
530
+ 'billing.admin_trial_extended_toast': 'دوره آزمایشی ۱۴ روز تمدید شد',
531
+ 'billing.admin_workspaces': 'فضاهای کاری',
532
+ 'billing.blocked_seats': 'این طرح {seats} کاربر دارد و این فضای کاری {used} عضو دارد.',
533
+ 'billing.cancels': 'پایان',
534
+ 'billing.change_plan': 'تغییر طرح',
535
+ 'billing.choose_plan': 'انتخاب',
536
+ 'billing.current': 'کنونی',
537
+ 'billing.current_plan': 'طرح کنونی',
538
+ 'billing.error': 'اطلاعات پرداخت بارگذاری نشد',
539
+ 'billing.free': 'رایگان',
540
+ 'billing.invoice_amount': 'مبلغ',
541
+ 'billing.invoice_date': 'تاریخ',
542
+ 'billing.invoice_number': 'صورتحساب',
543
+ 'billing.invoice_view': 'نمایش',
544
+ 'billing.invoices_empty': 'هنوز صورتحسابی نیست',
545
+ 'billing.invoices_empty_hint': 'پس از نخستین پرداخت، صورتحساب اینجا می‌آید.',
546
+ 'billing.invoices_section': 'صورتحساب‌ها',
547
+ 'billing.manage_payment': 'مدیریت پرداخت',
548
+ 'billing.no_permission': 'اجازه‌ی تغییر این را ندارید.',
549
+ 'billing.no_plan': 'بدون طرح',
550
+ 'billing.no_plan_hint': 'برای این فضای کاری چیزی دریافت نمی‌شود و هیچ محدودیتی هم اعمال نمی‌شود.',
551
+ 'billing.no_plans': 'طرحی ارائه نشده است',
552
+ 'billing.no_plans_hint': 'مدیر این نمونه هنوز هیچ طرحی را منتشر نکرده است.',
553
+ 'billing.past_due_hint': 'آخرین پرداخت انجام نشد. برای اینکه این فضای کاری کار کند، کارت را به‌روز کنید.',
554
+ 'billing.payments_disabled': 'این نمونه برای دریافت پرداخت پیکربندی نشده است.',
555
+ 'billing.per_month': 'ماهانه',
556
+ 'billing.per_user_month': 'برای هر کاربر، ماهانه',
557
+ 'billing.per_user_year': 'برای هر کاربر، سالانه',
558
+ 'billing.per_year': 'سالانه',
559
+ 'billing.plan_section': 'طرح',
560
+ 'billing.renews': 'تمدید',
561
+ 'billing.retry': 'تلاش دوباره',
562
+ 'billing.seats': 'کاربران',
563
+ 'billing.settings_nav': 'پرداخت',
564
+ 'billing.status': 'وضعیت',
565
+ 'billing.status_active': 'فعال',
566
+ 'billing.status_canceled': 'لغوشده',
567
+ 'billing.status_past_due': 'پرداخت ناموفق',
568
+ 'billing.status_suspended': 'معلق',
569
+ 'billing.status_trialing': 'آزمایشی',
570
+ 'billing.storage': 'فضای ذخیره‌سازی',
571
+ 'billing.subtitle': 'اینکه این فضای کاری روی چه طرحی است و چه اندازه از آن را به کار می‌برد.',
572
+ 'billing.suspended_hint': 'تا وقتی اشتراک این فضای کاری به‌روز نشود، فقط خواندنی است. چیزی حذف نشده است.',
573
+ 'billing.title': 'پرداخت',
574
+ 'billing.trial_days_left': {
575
+ one: '{n} روز مانده',
576
+ other: '{n} روز مانده',
577
+ },
578
+ 'billing.trial_ends_today': 'امروز تمام می‌شود',
579
+ 'billing.unlimited': 'بی‌حد',
580
+ 'billing.usage_of': '{used} از {limit}',
581
+ }
23
582
 
24
- const tr: Record<string, Message> = {}
583
+ const tr: Record<string, Message> = {
584
+ 'billing.actions': 'Ödeme işlemleri',
585
+ 'billing.admin_action_clear_override': 'Elle konan sınırı kaldır',
586
+ 'billing.admin_action_extend_trial': 'Deneme süresini 14 gün uzat',
587
+ 'billing.admin_action_resume': 'Sürdür',
588
+ 'billing.admin_action_set_plan': 'Tarifeyi değiştir',
589
+ 'billing.admin_action_stripe': "Stripe'ta aç",
590
+ 'billing.admin_action_suspend': 'Askıya al',
591
+ 'billing.admin_archive_body':
592
+ 'Artık sunulmaz ve fiyat sayfasından kalkar. Hâlihazırda bu tarifedeki çalışma alanları tarifede kalır ve sınırlarını korur. Hiçbir şey silinmez.',
593
+ 'billing.admin_archive_confirm': 'Tarifeyi arşivle',
594
+ 'billing.admin_archive_title': '{name} arşivlensin mi?',
595
+ 'billing.admin_cancel': 'Vazgeç',
596
+ 'billing.admin_col_plan': 'Tarife',
597
+ 'billing.admin_col_renews': 'Yenilenme',
598
+ 'billing.admin_col_revenue': 'Aylık',
599
+ 'billing.admin_col_seats': 'Kullanıcı',
600
+ 'billing.admin_col_status': 'Durum',
601
+ 'billing.admin_col_storage': 'Depolama',
602
+ 'billing.admin_col_workspace': 'Çalışma alanı',
603
+ 'billing.admin_empty': 'Henüz çalışma alanı yok',
604
+ 'billing.admin_empty_hint': 'Biri oluşturur oluşturmaz burada görünür.',
605
+ 'billing.admin_error': 'Çalışma alanı listesi yüklenemedi',
606
+ 'billing.admin_mrr': 'Aylık',
607
+ 'billing.admin_no_payments':
608
+ 'Stripe anahtarı tanımlı değil, bu yüzden bu sunucu ödeme alamaz. Tarifeler ve sınırlar yine de geçerlidir.',
609
+ 'billing.admin_overridden': 'Elle ayarlı',
610
+ 'billing.admin_overridden_hint':
611
+ 'Bu çalışma alanının sınırları elle konmuş, dolayısıyla tarifesi belirlemiyor.',
612
+ 'billing.admin_paying': 'Ödeyen',
613
+ 'billing.admin_plan_archive': 'Arşivle',
614
+ 'billing.admin_plan_archived_toast': '{name} arşivlendi',
615
+ 'billing.admin_plan_audit_days': 'Denetim kaydı saklama (gün)',
616
+ 'billing.admin_plan_changed_toast': 'Tarife değişti',
617
+ 'billing.admin_plan_currency': 'Para birimi',
618
+ 'billing.admin_plan_description': 'Açıklama',
619
+ 'billing.admin_plan_draft': 'Taslak',
620
+ 'billing.admin_plan_edit': 'Düzenle',
621
+ 'billing.admin_plan_interval': 'Faturalama',
622
+ 'billing.admin_plan_interval_month': 'Aylık',
623
+ 'billing.admin_plan_interval_year': 'Yıllık',
624
+ 'billing.admin_plan_limits': 'Neleri kapsıyor',
625
+ 'billing.admin_plan_limits_hint': 'Sınırsız olması için boş bırakın.',
626
+ 'billing.admin_plan_name': 'Ad',
627
+ 'billing.admin_plan_new': 'Yeni tarife',
628
+ 'billing.admin_plan_none': 'Tarife yok (sınırsız)',
629
+ 'billing.admin_plan_order': 'Sıra',
630
+ 'billing.admin_plan_per_seat': 'Kullanıcı başına ücretlendir',
631
+ 'billing.admin_plan_per_seat_hint': 'Kapalıyken ücret tüm çalışma alanı için bir kez alınır.',
632
+ 'billing.admin_plan_price': 'Fiyat',
633
+ 'billing.admin_plan_price_hint': 'Tam para birimi olarak, yani 8 demek 8,00 $ demektir.',
634
+ 'billing.admin_plan_publish': 'Yayımla',
635
+ 'billing.admin_plan_published': 'Yayımlandı',
636
+ 'billing.admin_plan_published_toast': '{name} artık fiyat sayfasında',
637
+ 'billing.admin_plan_saved': 'Tarife kaydedildi',
638
+ 'billing.admin_plan_seats': 'Kullanıcı',
639
+ 'billing.admin_plan_slug': 'Kısa ad',
640
+ 'billing.admin_plan_slug_hint':
641
+ "URL'lerde ve fiyat sayfasında görünür. Başka bir tarife aynısını kullanamaz.",
642
+ 'billing.admin_plan_sso': 'Tek oturum açma',
643
+ 'billing.admin_plan_storage_gb': 'Depolama (GB)',
644
+ 'billing.admin_plan_stripe_price': 'Stripe fiyat kimliği',
645
+ 'billing.admin_plan_stripe_price_hint':
646
+ 'Bu olmadan tarife satın alınamaz — yalnızca bir yönetici atayabilir.',
647
+ 'billing.admin_plan_trial_days': 'Deneme günü',
648
+ 'billing.admin_plan_unpublish': 'Yayımdan kaldır',
649
+ 'billing.admin_plan_unpublished_toast': '{name} artık sunulmuyor',
650
+ 'billing.admin_plans_empty': 'Henüz tarife yok',
651
+ 'billing.admin_plans_empty_hint':
652
+ 'Bu sunucudaki çalışma alanlarından ücret almaya başlamak için bir tane oluşturun.',
653
+ 'billing.admin_plans_nav': 'Tarifeler',
654
+ 'billing.admin_plans_subtitle': 'Bu sunucunun sattıkları. Fiyat sayfasında görünen, yayımlanmış tarifedir.',
655
+ 'billing.admin_plans_title': 'Tarifeler',
656
+ 'billing.admin_resumed_toast': '{name} sürdürüldü',
657
+ 'billing.admin_save': 'Kaydet',
658
+ 'billing.admin_search': 'Çalışma alanlarında ara',
659
+ 'billing.admin_set_plan_body':
660
+ "Bu hemen etkili olur ve Stripe'tan geçmez. Bir hesabı bedava yapmak ya da bir hatayı düzeltmek için kullanın, satış için değil.",
661
+ 'billing.admin_set_plan_title': '{name} için tarifeyi değiştir',
662
+ 'billing.admin_subscriptions_nav': 'Abonelikler',
663
+ 'billing.admin_subscriptions_subtitle': 'Bu sunucudaki her çalışma alanı ve ne ödediği.',
664
+ 'billing.admin_subscriptions_title': 'Abonelikler',
665
+ 'billing.admin_suspend_body':
666
+ '{name} içindeki herkes girişini korur, kendine ait olanı okuyup dışa aktarabilir. Siz sürdürene kadar kimse yazamaz. Hiçbir şey silinmez.',
667
+ 'billing.admin_suspend_confirm': 'Çalışma alanını askıya al',
668
+ 'billing.admin_suspend_title': 'Bu çalışma alanı askıya alınsın mı?',
669
+ 'billing.admin_suspended_count': 'Askıda',
670
+ 'billing.admin_suspended_toast': '{name} askıya alındı',
671
+ 'billing.admin_trial_extended_toast': 'Deneme süresi 14 gün uzatıldı',
672
+ 'billing.admin_workspaces': 'Çalışma alanları',
673
+ 'billing.blocked_seats': 'Bu tarife {seats} kullanıcı içeriyor ve bu çalışma alanında {used} üye var.',
674
+ 'billing.cancels': 'Bitiş',
675
+ 'billing.change_plan': 'Tarifeyi değiştir',
676
+ 'billing.choose_plan': 'Seç',
677
+ 'billing.current': 'Şu anki',
678
+ 'billing.current_plan': 'Şu anki tarife',
679
+ 'billing.error': 'Ödeme bilgileri yüklenemedi',
680
+ 'billing.free': 'Ücretsiz',
681
+ 'billing.invoice_amount': 'Tutar',
682
+ 'billing.invoice_date': 'Tarih',
683
+ 'billing.invoice_number': 'Fatura',
684
+ 'billing.invoice_view': 'Görüntüle',
685
+ 'billing.invoices_empty': 'Henüz fatura yok',
686
+ 'billing.invoices_empty_hint': 'İlk ödemeden sonra burada bir fatura görünür.',
687
+ 'billing.invoices_section': 'Faturalar',
688
+ 'billing.manage_payment': 'Ödemeyi yönet',
689
+ 'billing.no_permission': 'Bunu değiştirme yetkiniz yok.',
690
+ 'billing.no_plan': 'Tarife yok',
691
+ 'billing.no_plan_hint': 'Bu çalışma alanı için ücret alınmaz ve hiçbir sınır uygulanmaz.',
692
+ 'billing.no_plans': 'Sunulan tarife yok',
693
+ 'billing.no_plans_hint': 'Bir sunucu yöneticisi henüz tarife yayımlamamış.',
694
+ 'billing.past_due_hint':
695
+ 'Son ödemeyi alamadık. Bu çalışma alanının çalışmayı sürdürmesi için kartı güncelleyin.',
696
+ 'billing.payments_disabled': 'Bu sunucu ödeme alacak şekilde ayarlanmamış.',
697
+ 'billing.per_month': 'aylık',
698
+ 'billing.per_user_month': 'kullanıcı başına, aylık',
699
+ 'billing.per_user_year': 'kullanıcı başına, yıllık',
700
+ 'billing.per_year': 'yıllık',
701
+ 'billing.plan_section': 'Tarife',
702
+ 'billing.renews': 'Yenilenme',
703
+ 'billing.retry': 'Yeniden dene',
704
+ 'billing.seats': 'Kullanıcı',
705
+ 'billing.settings_nav': 'Ödeme',
706
+ 'billing.status': 'Durum',
707
+ 'billing.status_active': 'Etkin',
708
+ 'billing.status_canceled': 'İptal edildi',
709
+ 'billing.status_past_due': 'Ödeme başarısız',
710
+ 'billing.status_suspended': 'Askıda',
711
+ 'billing.status_trialing': 'Deneme',
712
+ 'billing.storage': 'Depolama',
713
+ 'billing.subtitle': 'Bu çalışma alanının hangi tarifede olduğu ve ne kadarını kullandığı.',
714
+ 'billing.suspended_hint':
715
+ 'Aboneliği güncellenene kadar bu çalışma alanı salt okunur. Hiçbir şey silinmedi.',
716
+ 'billing.title': 'Ödeme',
717
+ 'billing.trial_days_left': {
718
+ one: '{n} gün kaldı',
719
+ other: '{n} gün kaldı',
720
+ },
721
+ 'billing.trial_ends_today': 'Bugün bitiyor',
722
+ 'billing.unlimited': 'Sınırsız',
723
+ 'billing.usage_of': '{limit} içinden {used}',
724
+ }
25
725
 
26
726
  /** In the shape `defineClientModule().messages` expects. */
27
727
  export const billingMessageBundles = {
@@ -32,5 +732,5 @@ export const billingMessageBundles = {
32
732
  tr: async () => tr,
33
733
  }
34
734
 
35
- /** `t('settings_nav')` — the module id is implied. */
735
+ /** `t('settings_nav')` — the module id is implied; `t('common.save')` reaches the shared bundle. */
36
736
  export const t = scopedT('billing')