@monetize.software/sdk-extension 0.1.0-alpha.0 → 3.0.0-alpha.10
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.
- package/LICENSE +21 -0
- package/README.md +57 -56
- package/dist/chunks/ar-7cgIM-Vl.js +2 -0
- package/dist/chunks/ar-7cgIM-Vl.js.map +1 -0
- package/dist/chunks/ar-B2Wg_IrC.js +126 -0
- package/dist/chunks/ar-B2Wg_IrC.js.map +1 -0
- package/dist/chunks/{chrome-port-BXHR4SOG.js → chrome-port-CB1NEZOC.js} +367 -216
- package/dist/chunks/chrome-port-CB1NEZOC.js.map +1 -0
- package/dist/chunks/chrome-port-DptrBLez.js +2 -0
- package/dist/chunks/chrome-port-DptrBLez.js.map +1 -0
- package/dist/chunks/cs-BNo9Dx0Q.js +122 -0
- package/dist/chunks/cs-BNo9Dx0Q.js.map +1 -0
- package/dist/chunks/cs-S05PC5AC.js +2 -0
- package/dist/chunks/cs-S05PC5AC.js.map +1 -0
- package/dist/chunks/da-Bi4zBG14.js +2 -0
- package/dist/chunks/da-Bi4zBG14.js.map +1 -0
- package/dist/chunks/da-Do9Lq6En.js +122 -0
- package/dist/chunks/da-Do9Lq6En.js.map +1 -0
- package/dist/chunks/de-C8pDZNvx.js +141 -0
- package/dist/chunks/de-C8pDZNvx.js.map +1 -0
- package/dist/chunks/de-nCDB6D2W.js +2 -0
- package/dist/chunks/de-nCDB6D2W.js.map +1 -0
- package/dist/chunks/el-BrKaa978.js +2 -0
- package/dist/chunks/el-BrKaa978.js.map +1 -0
- package/dist/chunks/el-DzMNX-_P.js +126 -0
- package/dist/chunks/el-DzMNX-_P.js.map +1 -0
- package/dist/chunks/es-B-Wtyzrl.js +2 -0
- package/dist/chunks/es-B-Wtyzrl.js.map +1 -0
- package/dist/chunks/es-YrKt-q4w.js +141 -0
- package/dist/chunks/es-YrKt-q4w.js.map +1 -0
- package/dist/chunks/fi-Bh44pwZ4.js +122 -0
- package/dist/chunks/fi-Bh44pwZ4.js.map +1 -0
- package/dist/chunks/fi-D1SGXjnO.js +2 -0
- package/dist/chunks/fi-D1SGXjnO.js.map +1 -0
- package/dist/chunks/fr-Bc0pw4ws.js +141 -0
- package/dist/chunks/fr-Bc0pw4ws.js.map +1 -0
- package/dist/chunks/fr-BhYf-iKk.js +2 -0
- package/dist/chunks/fr-BhYf-iKk.js.map +1 -0
- package/dist/chunks/he-BXAaFv6Y.js +2 -0
- package/dist/chunks/he-BXAaFv6Y.js.map +1 -0
- package/dist/chunks/he-Bfm-bhe3.js +126 -0
- package/dist/chunks/he-Bfm-bhe3.js.map +1 -0
- package/dist/chunks/hi-D-O-B9Dn.js +126 -0
- package/dist/chunks/hi-D-O-B9Dn.js.map +1 -0
- package/dist/chunks/hi-xblDO0O7.js +2 -0
- package/dist/chunks/hi-xblDO0O7.js.map +1 -0
- package/dist/chunks/hu-CmIuAbLL.js +122 -0
- package/dist/chunks/hu-CmIuAbLL.js.map +1 -0
- package/dist/chunks/hu-Wa46p0y4.js +2 -0
- package/dist/chunks/hu-Wa46p0y4.js.map +1 -0
- package/dist/chunks/id-CQEo5X94.js +2 -0
- package/dist/chunks/id-CQEo5X94.js.map +1 -0
- package/dist/chunks/id-DN7IES-A.js +122 -0
- package/dist/chunks/id-DN7IES-A.js.map +1 -0
- package/dist/chunks/it-8AYCm0xz.js +2 -0
- package/dist/chunks/it-8AYCm0xz.js.map +1 -0
- package/dist/chunks/it-Cz5Nmqx5.js +141 -0
- package/dist/chunks/it-Cz5Nmqx5.js.map +1 -0
- package/dist/chunks/ja-BH9BlBh2.js +145 -0
- package/dist/chunks/ja-BH9BlBh2.js.map +1 -0
- package/dist/chunks/ja-q-COVayn.js +2 -0
- package/dist/chunks/ja-q-COVayn.js.map +1 -0
- package/dist/chunks/ko-B6HRCscZ.js +2 -0
- package/dist/chunks/ko-B6HRCscZ.js.map +1 -0
- package/dist/chunks/ko-CYV9QuYs.js +145 -0
- package/dist/chunks/ko-CYV9QuYs.js.map +1 -0
- package/dist/chunks/nl-BvkB900D.js +141 -0
- package/dist/chunks/nl-BvkB900D.js.map +1 -0
- package/dist/chunks/nl-CAd6_xlm.js +2 -0
- package/dist/chunks/nl-CAd6_xlm.js.map +1 -0
- package/dist/chunks/no-3s9_ormb.js +122 -0
- package/dist/chunks/no-3s9_ormb.js.map +1 -0
- package/dist/chunks/no-CAmz6bz6.js +2 -0
- package/dist/chunks/no-CAmz6bz6.js.map +1 -0
- package/dist/chunks/pl-C9WTGQtb.js +122 -0
- package/dist/chunks/pl-C9WTGQtb.js.map +1 -0
- package/dist/chunks/pl-DqUSTCaF.js +2 -0
- package/dist/chunks/pl-DqUSTCaF.js.map +1 -0
- package/dist/chunks/port-name-CF4WQQ3-.js +2 -0
- package/dist/chunks/port-name-CF4WQQ3-.js.map +1 -0
- package/dist/chunks/port-name-ervLBWAQ.js +6 -0
- package/dist/chunks/port-name-ervLBWAQ.js.map +1 -0
- package/dist/chunks/pt-8ARZnH0_.js +2 -0
- package/dist/chunks/pt-8ARZnH0_.js.map +1 -0
- package/dist/chunks/pt-uFVUv_Op.js +141 -0
- package/dist/chunks/pt-uFVUv_Op.js.map +1 -0
- package/dist/chunks/ro-BrqQ8Au-.js +122 -0
- package/dist/chunks/ro-BrqQ8Au-.js.map +1 -0
- package/dist/chunks/ro-D-NMbp2F.js +2 -0
- package/dist/chunks/ro-D-NMbp2F.js.map +1 -0
- package/dist/chunks/ru-8gbHPh0g.js +2 -0
- package/dist/chunks/ru-8gbHPh0g.js.map +1 -0
- package/dist/chunks/ru-DK594dA8.js +144 -0
- package/dist/chunks/ru-DK594dA8.js.map +1 -0
- package/dist/chunks/sv-CHNH8-mq.js +122 -0
- package/dist/chunks/sv-CHNH8-mq.js.map +1 -0
- package/dist/chunks/sv-D8a8hmx9.js +2 -0
- package/dist/chunks/sv-D8a8hmx9.js.map +1 -0
- package/dist/chunks/th-DfjUK0Y7.js +2 -0
- package/dist/chunks/th-DfjUK0Y7.js.map +1 -0
- package/dist/chunks/th-l24Pm5q-.js +126 -0
- package/dist/chunks/th-l24Pm5q-.js.map +1 -0
- package/dist/chunks/tr-ADpigSY5.js +122 -0
- package/dist/chunks/tr-ADpigSY5.js.map +1 -0
- package/dist/chunks/tr-BdBpz4tL.js +2 -0
- package/dist/chunks/tr-BdBpz4tL.js.map +1 -0
- package/dist/chunks/uk-CGqo4jek.js +144 -0
- package/dist/chunks/uk-CGqo4jek.js.map +1 -0
- package/dist/chunks/uk-Cx1zv1ao.js +2 -0
- package/dist/chunks/uk-Cx1zv1ao.js.map +1 -0
- package/dist/chunks/vi-Dk9bTu6f.js +122 -0
- package/dist/chunks/vi-Dk9bTu6f.js.map +1 -0
- package/dist/chunks/vi-oe2dW21I.js +2 -0
- package/dist/chunks/vi-oe2dW21I.js.map +1 -0
- package/dist/chunks/zh-CwczPMPp.js +2 -0
- package/dist/chunks/zh-CwczPMPp.js.map +1 -0
- package/dist/chunks/zh-LDkEV2D9.js +145 -0
- package/dist/chunks/zh-LDkEV2D9.js.map +1 -0
- package/dist/content/RemoteAuthClient.d.ts +8 -4
- package/dist/content/RemoteAuthClient.d.ts.map +1 -1
- package/dist/content/RemoteAuthClient.test-d.d.ts +2 -0
- package/dist/content/RemoteAuthClient.test-d.d.ts.map +1 -0
- package/dist/content/RemoteBillingClient.d.ts +29 -0
- package/dist/content/RemoteBillingClient.d.ts.map +1 -1
- package/dist/content/RemoteBillingClient.test-d.d.ts +2 -0
- package/dist/content/RemoteBillingClient.test-d.d.ts.map +1 -0
- package/dist/content.cjs +3 -3
- package/dist/content.cjs.map +1 -1
- package/dist/content.js +2106 -1040
- package/dist/content.js.map +1 -1
- package/dist/offscreen/server.d.ts.map +1 -1
- package/dist/offscreen.cjs +1 -1
- package/dist/offscreen.cjs.map +1 -1
- package/dist/offscreen.js +18 -15
- package/dist/offscreen.js.map +1 -1
- package/dist/shared/messages.d.ts +27 -4
- package/dist/shared/messages.d.ts.map +1 -1
- package/dist/shared/port-name.d.ts +1 -0
- package/dist/shared/port-name.d.ts.map +1 -1
- package/dist/shared/protocol.d.ts +1 -1
- package/dist/shared/protocol.d.ts.map +1 -1
- package/dist/sw.cjs +1 -1
- package/dist/sw.cjs.map +1 -1
- package/dist/sw.js +14 -14
- package/dist/sw.js.map +1 -1
- package/package.json +39 -21
- package/dist/chunks/chrome-port-BXHR4SOG.js.map +0 -1
- package/dist/chunks/chrome-port-EtYqHf3p.js +0 -2
- package/dist/chunks/chrome-port-EtYqHf3p.js.map +0 -1
- package/dist/chunks/port-name-BPfQKtdb.js +0 -5
- package/dist/chunks/port-name-BPfQKtdb.js.map +0 -1
- package/dist/chunks/port-name-qwB109u9.js +0 -2
- package/dist/chunks/port-name-qwB109u9.js.map +0 -1
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 monetize.software
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
# @monetize.software/sdk-extension
|
|
2
2
|
|
|
3
|
-
SDK
|
|
4
|
-
AuthClient
|
|
5
|
-
|
|
3
|
+
SDK for Chrome extensions. A single offscreen document holds the BillingClient,
|
|
4
|
+
AuthClient and EventTracker — the single source of truth for all tabs, popups,
|
|
5
|
+
side panels, and extension pages.
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
host
|
|
9
|
-
|
|
7
|
+
The content-script public API is **drop-in compatible** with `@monetize.software/sdk` —
|
|
8
|
+
the host writes `import { PaywallUI } from '@monetize.software/sdk-extension'` and
|
|
9
|
+
gets the same class with the same method set.
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
> ⚠️ **Bundle as an npm dependency. Do not load from a CDN.**
|
|
12
|
+
> Chrome Web Store [MV3 policy](https://developer.chrome.com/docs/webstore/program-policies/mv3-requirements) forbids remote code execution — every line of JS your extension runs must be reviewable at submission time and ship inside the extension package. `pnpm add @monetize.software/sdk-extension` and bundle it with Vite/Rollup/webpack like any other npm dep. Loading this package (or `@monetize.software/sdk`, or `@monetize.software/sdk-react`) from `esm.sh`/`unpkg`/`jsDelivr` from a content script, popup, or service worker will get the extension rejected by review, or removed retroactively if the policy violation is spotted later. This is also why we publish `sdk-extension` as a separate package — its content-script bundle has all dependencies inlined, no runtime fetch of code.
|
|
13
|
+
|
|
14
|
+
## Architecture
|
|
12
15
|
|
|
13
16
|
```
|
|
14
17
|
content script (per tab) ──port──▶ service worker ──port──▶ offscreen
|
|
@@ -19,23 +22,15 @@ content script (per tab) ──port──▶ service worker ──port──▶
|
|
|
19
22
|
UserWatcher
|
|
20
23
|
```
|
|
21
24
|
|
|
22
|
-
- **content-script:** UI + RemoteBillingClient (proxy
|
|
23
|
-
- **service worker:**
|
|
24
|
-
`chrome.identity`
|
|
25
|
-
- **offscreen:**
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
## Статус
|
|
29
|
-
|
|
30
|
-
Phase 0 — скелет: package.json, vite multi-entry, wire-protocol типы,
|
|
31
|
-
заглушки на content/offscreen/sw + demo-extension манифест. Реальная
|
|
32
|
-
маршрутизация и RemoteBillingClient — следующие фазы.
|
|
25
|
+
- **content-script:** UI + RemoteBillingClient (proxy over a port into offscreen).
|
|
26
|
+
- **service worker:** content↔offscreen router. OAuth uses a popup window opened
|
|
27
|
+
against your `apiOrigin` (custom_domain) — `chrome.identity` is **not** used.
|
|
28
|
+
- **offscreen:** the real SDK state, survives tab closes, the sole coordination
|
|
29
|
+
point for auth refresh / trial counter / analytics batching.
|
|
33
30
|
|
|
34
|
-
|
|
31
|
+
## Usage
|
|
35
32
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
**В extension'е:**
|
|
33
|
+
**In the extension:**
|
|
39
34
|
|
|
40
35
|
```ts
|
|
41
36
|
// service-worker.ts
|
|
@@ -50,64 +45,70 @@ startOffscreenServer({ paywallId: '...', apiOrigin: 'https://...' });
|
|
|
50
45
|
```
|
|
51
46
|
|
|
52
47
|
```ts
|
|
53
|
-
// content-script.ts (
|
|
48
|
+
// content-script.ts (in every tab)
|
|
54
49
|
import { PaywallUI } from '@monetize.software/sdk-extension';
|
|
55
50
|
const paywall = new PaywallUI({ paywallId: '...', apiOrigin: '...' });
|
|
56
|
-
paywall.open(); //
|
|
51
|
+
paywall.open(); // exactly like @monetize.software/sdk
|
|
57
52
|
```
|
|
58
53
|
|
|
59
|
-
|
|
54
|
+
**On websites** — keep using `@monetize.software/sdk`, nothing changes.
|
|
60
55
|
|
|
61
|
-
## Manifest:
|
|
56
|
+
## Manifest: what to declare in the host extension
|
|
62
57
|
|
|
63
|
-
SDK
|
|
64
|
-
|
|
58
|
+
The SDK itself does not add anything to the manifest — the host extension picks
|
|
59
|
+
permissions to match its own UX. Minimum for the SDK to work:
|
|
65
60
|
|
|
66
61
|
```json
|
|
67
62
|
{
|
|
68
63
|
"permissions": ["offscreen", "storage"],
|
|
69
|
-
"host_permissions": ["https://
|
|
64
|
+
"host_permissions": ["https://your-paywall-domain.com/*"],
|
|
70
65
|
"background": { "service_worker": "sw.js", "type": "module" }
|
|
71
66
|
}
|
|
72
67
|
```
|
|
73
68
|
|
|
74
|
-
|
|
69
|
+
`host_permissions` must list **your `apiOrigin`** — the `custom_domain` configured
|
|
70
|
+
for your paywall in the platform (the same value you pass to `new PaywallUI({ apiOrigin })`).
|
|
71
|
+
This is the only origin the SDK calls from offscreen / SW / content-script (bootstrap,
|
|
72
|
+
checkout, billing, auth). There is no `api.monetize.software` — every customer ships
|
|
73
|
+
their own custom domain.
|
|
74
|
+
|
|
75
|
+
`web_accessible_resources` for `offscreen.html` is **not required** — the document
|
|
76
|
+
is created by the service worker via `chrome.offscreen.createDocument`, a Chrome API
|
|
77
|
+
that doesn't need WAR. Listing it adds attack surface (any site could `<iframe>` your
|
|
78
|
+
offscreen, plus it fingerprints your extension ID).
|
|
75
79
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
service worker'ом через `chrome.offscreen.createDocument`, это chrome-API и WAR
|
|
79
|
-
не требует. Указывать его — лишняя attack surface (любой сайт сможет `<iframe>`-нить
|
|
80
|
-
ваш offscreen, плюс это fingerprint вашего extension ID).
|
|
80
|
+
The SDK does **not** use `chrome.identity` — OAuth runs via a popup window opened
|
|
81
|
+
against your `apiOrigin`, so no `"identity"` permission is needed.
|
|
81
82
|
|
|
82
|
-
### `host_permissions` —
|
|
83
|
+
### `host_permissions` — what to pick
|
|
83
84
|
|
|
84
|
-
`host_permissions`
|
|
85
|
-
offscreen / SW / content-script)
|
|
86
|
-
|
|
85
|
+
`host_permissions` control two things: where the extension can `fetch` (from
|
|
86
|
+
offscreen / SW / content-script) and which origins the content-script can be
|
|
87
|
+
injected into (together with `content_scripts.matches`).
|
|
87
88
|
|
|
88
|
-
|
|
|
89
|
+
| Scenario | Recommendation |
|
|
89
90
|
|---|---|
|
|
90
|
-
| **Host extension
|
|
91
|
-
| **Host extension
|
|
92
|
-
|
|
|
91
|
+
| **Host extension already needs `<all_urls>`** (recorder, all-sites tool, assistant) | Keep `<all_urls>`. SDK works as-is. **Risk:** Chrome Web Store review for `<all_urls>` is a manual audit and takes longer; AV vendors (Avast/Kaspersky/etc.) are more likely to flag such extensions as PUA. That's the price of broad injection — it's a property of your use case, not an SDK risk. |
|
|
92
|
+
| **Host extension only talks to your backend and gates its own features** (popup tool, side-panel app) | Do NOT request `<all_urls>`. Your `apiOrigin` (custom_domain) is enough: `["https://your-paywall-domain.com/*"]`. No content-script injection on every site needed. |
|
|
93
|
+
| **Hybrid** — popup tool, but content-script needed on a narrow list of domains | Constrain both `host_permissions` and `content_scripts.matches` to those domains: `["https://*.your-target.com/*", "https://your-paywall-domain.com/*"]`. |
|
|
93
94
|
|
|
94
|
-
|
|
95
|
-
`<all_urls>`
|
|
96
|
-
|
|
95
|
+
The main signal to CWS/AV: the narrower `host_permissions`, the less suspicion.
|
|
96
|
+
Keep `<all_urls>` only when it's genuinely required for your UX, and be ready to
|
|
97
|
+
justify it in CWS review (the "Permission justification" field).
|
|
97
98
|
|
|
98
|
-
## Demo extension
|
|
99
|
+
## Demo extension: build modes
|
|
99
100
|
|
|
100
|
-
|
|
101
|
-
|
|
101
|
+
For self-testing and e2e there's `demo-extension/` — a reference implementation.
|
|
102
|
+
Two builds are available:
|
|
102
103
|
|
|
103
104
|
```bash
|
|
104
|
-
pnpm build:demo # production build (=
|
|
105
|
-
pnpm build:demo:e2e # debug build —
|
|
105
|
+
pnpm build:demo # production build (= the template clients can copy)
|
|
106
|
+
pnpm build:demo:e2e # debug build — exposes window.__paywall for Playwright
|
|
106
107
|
```
|
|
107
108
|
|
|
108
|
-
`build:demo`
|
|
109
|
-
`import.meta.env.MODE !== 'e2e'`).
|
|
110
|
-
|
|
111
|
-
|
|
109
|
+
`build:demo` does NOT put `window.__paywall` into the bundle (dead-code-eliminated
|
|
110
|
+
via `import.meta.env.MODE !== 'e2e'`). The template clients copy stays clean: any
|
|
111
|
+
script on the page could otherwise call `paywall.open()` / `paywall.track()` and
|
|
112
|
+
abuse someone else's extension.
|
|
112
113
|
|
|
113
|
-
`pnpm dev:demo`
|
|
114
|
+
`pnpm dev:demo` builds in e2e mode (handy for live debugging from the DevTools console).
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e={"anon.heading_default":"متابعة كضيف","anon.try_again":"حاول مرة أخرى","auth.check_email_message":"تحقق من بريدك الإلكتروني للحصول على رمز التأكيد.","auth.check_email_title":"تحقق من بريدك الإلكتروني","auth.confirm_email_title":"تأكيد بريدك الإلكتروني","auth.confirmation_code":"رمز التأكيد","auth.continue_with_apple":"المتابعة مع Apple","auth.continue_with_facebook":"متابعة مع Facebook","auth.continue_with_github":"متابعة مع GitHub","auth.continue_with_google":"المتابعة مع Google","auth.create_account":"إنشاء حساب","auth.default_subtitle":"سجّل الدخول للوصول إلى جميع الميزات ومزامنة بياناتك.","auth.email":"عنوان البريد الإلكتروني","auth.email_exists":"يوجد حساب بهذا البريد الإلكتروني بالفعل.","auth.email_not_confirmed":"يرجى تأكيد بريدك الإلكتروني أولاً.","auth.forgot_password":"هل نسيت كلمة المرور؟","auth.forgot_password_title":"هل نسيت كلمة المرور؟","auth.forgot_subtitle":"أدخل بريدك الإلكتروني وسنرسل لك رابط إعادة تعيين كلمة المرور.","auth.generic_error":"حدث خطأ ما","auth.have_account":"لديك حساب؟","auth.hide_password":"إخفاء كلمة المرور","auth.invalid_credentials":"البريد الإلكتروني أو كلمة المرور غير صحيحة","auth.invalid_otp":"الرمز غير صالح أو منتهي الصلاحية.","auth.last_used_no_email":"الأخير","auth.link_purchase_subheading":"سنربط الشراء بحسابك للحفاظ على الوصول.","auth.log_in":"تسجيل الدخول","auth.log_in_link":"تسجيل الدخول","auth.login_continue_purchase":"سجّل الدخول لمتابعة عملية الشراء","auth.network_error":"خطأ في الشبكة. تحقق من اتصالك وحاول مرة أخرى.","auth.no_account":"ليس لديك حساب؟","auth.or":"أو","auth.password":"كلمة المرور","auth.passwords_mismatch":"كلمتا المرور غير متطابقتين","auth.rate_limited":"طلبات كثيرة جدًا. حاول مرة أخرى لاحقًا.","auth.repeat_password":"كرّر كلمة المرور","auth.reset_password_title":"إعادة تعيين كلمة المرور","auth.reset_sent_message":"إذا كان هذا البريد موجودًا، فقد تم إرسال رمز إعادة التعيين.","auth.restore_purchases_heading":"استعادة المشتريات","auth.restore_purchases_subheading":"يُرجى تسجيل الدخول لاستعادة مشترياتك.","auth.send_reset":"إرسال بريد إعادة التعيين","auth.service_unavailable":"الخدمة غير متاحة مؤقتًا. حاول لاحقًا.","auth.show_password":"إظهار كلمة المرور","auth.sign_out":"تسجيل الخروج","auth.sign_up":"إنشاء حساب","auth.sign_up_link":"إنشاء حساب","auth.signed_in":"تم تسجيل الدخول","auth.signin_failed":"فشل تسجيل الدخول","auth.signup_failed":"فشل التسجيل","auth.verify":"تأكيد","auth.weak_password":"كلمة المرور ضعيفة جدًا.","auth.welcome":"مرحباً!","auth.welcome_signup":"مرحبًا!","countdown.d":"ي","countdown.h":"س","countdown.m":"د","countdown.s":"ث","cta.close":"إغلاق","cta.continue":"متابعة","cta.get_lifetime_access":"احصل على وصول مدى الحياة","cta.get_plan_daily":"احصل على الخطة اليومية","cta.get_plan_monthly":"احصل على الخطة الشهرية","cta.get_plan_weekly":"احصل على الخطة الأسبوعية","cta.get_plan_yearly":"احصل على الخطة السنوية","cta.start_trial":"ابدأ تجربة مجانية لمدة {days} يوم","modal.close_aria":"إغلاق","modal.continue":"متابعة","modal.error_generic":"حدث خطأ ما","modal.loading":"جارٍ التحميل…","modal.purchase_restored_subtitle":"مرحبًا بعودتك — اشتراكك نشط بالفعل.","modal.purchase_restored_title":"تمت استعادة الاشتراك","modal.purchase_success_subtitle":"اشتراكك نشط الآن.","modal.purchase_success_title":"تم استلام الدفع","modal.verifying_subscription":"جارٍ التحقق من اشتراكك…","nav.back":"→ رجوع","nav.back_aria":"رجوع","offer.limited_time":"عرض لفترة محدودة","payment.awaiting_title":"أكمل الدفع في علامة التبويب الجديدة","payment.checking":"جارٍ التحقق…","payment.ive_paid":"لقد دفعت","payment.open_checkout_again":"افتح الدفع مرة أخرى","payment.open_checkout_button":"افتح الدفع","pricing.free_trial_days":"تجربة مجانية لمدة {days} يومًا","pricing.included_per":"متضمن لكل {interval}:","pricing.interval.day":"يوم","pricing.interval.lifetime_short":"مدى الحياة","pricing.interval.month":"شهر","pricing.interval.period":"فترة","pricing.interval.week":"أسبوع","pricing.interval.year":"سنة","pricing.money_back":"ضمان استرداد الأموال لمدة 30 يومًا","pricing.most_popular":"الأكثر شعبية","pricing.no_prices":"لا توجد أسعار متاحة.","pricing.plan_label.daily":"الخطة اليومية","pricing.plan_label.lifetime":"مدى الحياة","pricing.plan_label.monthly":"خطة شهرية","pricing.plan_label.weekly":"خطة أسبوعية","pricing.plan_label.yearly":"خطة سنوية","pricing.plans_aria":"الخطط","session.contact_support":"اتصل بالدعم","session.restore_purchases":"استعادة المشتريات","session.sign_out":"تسجيل الخروج","session.signed_in_as_prefix":"تم تسجيل الدخول باسم","session.signing_out":"جارٍ تسجيل الخروج…","support.attachments_label":"المرفقات","support.close_button":"إغلاق","support.done_button":"تم","support.email_placeholder":"أدخل بريدك الإلكتروني","support.heading":"الدعم","support.instruction":"يُرجى ملء النموذج أدناه لإرسال طلب الدعم.","support.invalid_email":"بريد إلكتروني غير صالح","support.message_length":"1-5000 حرفاً","support.message_placeholder":"أدخل رسالتك","support.required":"مطلوب","support.send_another":"إرسال طلب آخر","support.send_button":"إرسال","support.sending":"جارٍ الإرسال…","support.subject_length":"3-200 حرفاً","support.subject_placeholder":"أدخل الموضوع","support.success_heading":"تم إرسال الطلب","support.success_message_prefix":"لقد تلقينا رسالتك وسنرد على"};exports.default=e;
|
|
2
|
+
//# sourceMappingURL=ar-7cgIM-Vl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ar-7cgIM-Vl.js","sources":["../../../sdk/src/ui/i18n/locales/ar.ts"],"sourcesContent":["/**\n * Static-translations для ar. Сгенерировано из:\n * - `online/lang/static-translations.ts` (legacy, через KEY_MAP)\n * - `tools/sdk-translations.mjs` (SDK-specific строки)\n *\n * Не править вручную — изменения теряются при следующем `node tools/gen-locales.mjs`.\n * Чтобы исправить перевод — править legacy/sdk-translations.mjs и регенерить.\n */\nconst ar = {\n 'anon.heading_default': 'متابعة كضيف',\n 'anon.try_again': 'حاول مرة أخرى',\n 'auth.check_email_message': 'تحقق من بريدك الإلكتروني للحصول على رمز التأكيد.',\n 'auth.check_email_title': 'تحقق من بريدك الإلكتروني',\n 'auth.confirm_email_title': 'تأكيد بريدك الإلكتروني',\n 'auth.confirmation_code': 'رمز التأكيد',\n 'auth.continue_with_apple': 'المتابعة مع Apple',\n 'auth.continue_with_facebook': 'متابعة مع Facebook',\n 'auth.continue_with_github': 'متابعة مع GitHub',\n 'auth.continue_with_google': 'المتابعة مع Google',\n 'auth.create_account': 'إنشاء حساب',\n 'auth.default_subtitle': 'سجّل الدخول للوصول إلى جميع الميزات ومزامنة بياناتك.',\n 'auth.email': 'عنوان البريد الإلكتروني',\n 'auth.email_exists': 'يوجد حساب بهذا البريد الإلكتروني بالفعل.',\n 'auth.email_not_confirmed': 'يرجى تأكيد بريدك الإلكتروني أولاً.',\n 'auth.forgot_password': 'هل نسيت كلمة المرور؟',\n 'auth.forgot_password_title': 'هل نسيت كلمة المرور؟',\n 'auth.forgot_subtitle': 'أدخل بريدك الإلكتروني وسنرسل لك رابط إعادة تعيين كلمة المرور.',\n 'auth.generic_error': 'حدث خطأ ما',\n 'auth.have_account': 'لديك حساب؟',\n 'auth.hide_password': 'إخفاء كلمة المرور',\n 'auth.invalid_credentials': 'البريد الإلكتروني أو كلمة المرور غير صحيحة',\n 'auth.invalid_otp': 'الرمز غير صالح أو منتهي الصلاحية.',\n 'auth.last_used_no_email': 'الأخير',\n 'auth.link_purchase_subheading': 'سنربط الشراء بحسابك للحفاظ على الوصول.',\n 'auth.log_in': 'تسجيل الدخول',\n 'auth.log_in_link': 'تسجيل الدخول',\n 'auth.login_continue_purchase': 'سجّل الدخول لمتابعة عملية الشراء',\n 'auth.network_error': 'خطأ في الشبكة. تحقق من اتصالك وحاول مرة أخرى.',\n 'auth.no_account': 'ليس لديك حساب؟',\n 'auth.or': 'أو',\n 'auth.password': 'كلمة المرور',\n 'auth.passwords_mismatch': 'كلمتا المرور غير متطابقتين',\n 'auth.rate_limited': 'طلبات كثيرة جدًا. حاول مرة أخرى لاحقًا.',\n 'auth.repeat_password': 'كرّر كلمة المرور',\n 'auth.reset_password_title': 'إعادة تعيين كلمة المرور',\n 'auth.reset_sent_message': 'إذا كان هذا البريد موجودًا، فقد تم إرسال رمز إعادة التعيين.',\n 'auth.restore_purchases_heading': 'استعادة المشتريات',\n 'auth.restore_purchases_subheading': 'يُرجى تسجيل الدخول لاستعادة مشترياتك.',\n 'auth.send_reset': 'إرسال بريد إعادة التعيين',\n 'auth.service_unavailable': 'الخدمة غير متاحة مؤقتًا. حاول لاحقًا.',\n 'auth.show_password': 'إظهار كلمة المرور',\n 'auth.sign_out': 'تسجيل الخروج',\n 'auth.sign_up': 'إنشاء حساب',\n 'auth.sign_up_link': 'إنشاء حساب',\n 'auth.signed_in': 'تم تسجيل الدخول',\n 'auth.signin_failed': 'فشل تسجيل الدخول',\n 'auth.signup_failed': 'فشل التسجيل',\n 'auth.verify': 'تأكيد',\n 'auth.weak_password': 'كلمة المرور ضعيفة جدًا.',\n 'auth.welcome': 'مرحباً!',\n 'auth.welcome_signup': 'مرحبًا!',\n 'countdown.d': 'ي',\n 'countdown.h': 'س',\n 'countdown.m': 'د',\n 'countdown.s': 'ث',\n 'cta.close': 'إغلاق',\n 'cta.continue': 'متابعة',\n 'cta.get_lifetime_access': 'احصل على وصول مدى الحياة',\n 'cta.get_plan_daily': 'احصل على الخطة اليومية',\n 'cta.get_plan_monthly': 'احصل على الخطة الشهرية',\n 'cta.get_plan_weekly': 'احصل على الخطة الأسبوعية',\n 'cta.get_plan_yearly': 'احصل على الخطة السنوية',\n 'cta.start_trial': 'ابدأ تجربة مجانية لمدة {days} يوم',\n 'modal.close_aria': 'إغلاق',\n 'modal.continue': 'متابعة',\n 'modal.error_generic': 'حدث خطأ ما',\n 'modal.loading': 'جارٍ التحميل…',\n 'modal.purchase_restored_subtitle': 'مرحبًا بعودتك — اشتراكك نشط بالفعل.',\n 'modal.purchase_restored_title': 'تمت استعادة الاشتراك',\n 'modal.purchase_success_subtitle': 'اشتراكك نشط الآن.',\n 'modal.purchase_success_title': 'تم استلام الدفع',\n 'modal.verifying_subscription': 'جارٍ التحقق من اشتراكك…',\n 'nav.back': '→ رجوع',\n 'nav.back_aria': 'رجوع',\n 'offer.limited_time': 'عرض لفترة محدودة',\n 'payment.awaiting_title': 'أكمل الدفع في علامة التبويب الجديدة',\n 'payment.checking': 'جارٍ التحقق…',\n 'payment.ive_paid': 'لقد دفعت',\n 'payment.open_checkout_again': 'افتح الدفع مرة أخرى',\n 'payment.open_checkout_button': 'افتح الدفع',\n 'pricing.free_trial_days': 'تجربة مجانية لمدة {days} يومًا',\n 'pricing.included_per': 'متضمن لكل {interval}:',\n 'pricing.interval.day': 'يوم',\n 'pricing.interval.lifetime_short': 'مدى الحياة',\n 'pricing.interval.month': 'شهر',\n 'pricing.interval.period': 'فترة',\n 'pricing.interval.week': 'أسبوع',\n 'pricing.interval.year': 'سنة',\n 'pricing.money_back': 'ضمان استرداد الأموال لمدة 30 يومًا',\n 'pricing.most_popular': 'الأكثر شعبية',\n 'pricing.no_prices': 'لا توجد أسعار متاحة.',\n 'pricing.plan_label.daily': 'الخطة اليومية',\n 'pricing.plan_label.lifetime': 'مدى الحياة',\n 'pricing.plan_label.monthly': 'خطة شهرية',\n 'pricing.plan_label.weekly': 'خطة أسبوعية',\n 'pricing.plan_label.yearly': 'خطة سنوية',\n 'pricing.plans_aria': 'الخطط',\n 'session.contact_support': 'اتصل بالدعم',\n 'session.restore_purchases': 'استعادة المشتريات',\n 'session.sign_out': 'تسجيل الخروج',\n 'session.signed_in_as_prefix': 'تم تسجيل الدخول باسم',\n 'session.signing_out': 'جارٍ تسجيل الخروج…',\n 'support.attachments_label': 'المرفقات',\n 'support.close_button': 'إغلاق',\n 'support.done_button': 'تم',\n 'support.email_placeholder': 'أدخل بريدك الإلكتروني',\n 'support.heading': 'الدعم',\n 'support.instruction': 'يُرجى ملء النموذج أدناه لإرسال طلب الدعم.',\n 'support.invalid_email': 'بريد إلكتروني غير صالح',\n 'support.message_length': '1-5000 حرفاً',\n 'support.message_placeholder': 'أدخل رسالتك',\n 'support.required': 'مطلوب',\n 'support.send_another': 'إرسال طلب آخر',\n 'support.send_button': 'إرسال',\n 'support.sending': 'جارٍ الإرسال…',\n 'support.subject_length': '3-200 حرفاً',\n 'support.subject_placeholder': 'أدخل الموضوع',\n 'support.success_heading': 'تم إرسال الطلب',\n 'support.success_message_prefix': 'لقد تلقينا رسالتك وسنرد على'\n} as const;\n\nexport default ar;\n"],"names":["ar"],"mappings":"gFAQA,MAAMA,EAAK,CACT,uBAAwB,cACxB,iBAAkB,gBAClB,2BAA4B,mDAC5B,yBAA0B,2BAC1B,2BAA4B,yBAC5B,yBAA0B,cAC1B,2BAA4B,oBAC5B,8BAA+B,qBAC/B,4BAA6B,mBAC7B,4BAA6B,qBAC7B,sBAAuB,aACvB,wBAAyB,uDACzB,aAAc,0BACd,oBAAqB,2CACrB,2BAA4B,qCAC5B,uBAAwB,uBACxB,6BAA8B,uBAC9B,uBAAwB,gEACxB,qBAAsB,aACtB,oBAAqB,aACrB,qBAAsB,oBACtB,2BAA4B,6CAC5B,mBAAoB,oCACpB,0BAA2B,SAC3B,gCAAiC,yCACjC,cAAe,eACf,mBAAoB,eACpB,+BAAgC,mCAChC,qBAAsB,gDACtB,kBAAmB,iBACnB,UAAW,KACX,gBAAiB,cACjB,0BAA2B,6BAC3B,oBAAqB,0CACrB,uBAAwB,mBACxB,4BAA6B,0BAC7B,0BAA2B,8DAC3B,iCAAkC,oBAClC,oCAAqC,wCACrC,kBAAmB,2BACnB,2BAA4B,wCAC5B,qBAAsB,oBACtB,gBAAiB,eACjB,eAAgB,aAChB,oBAAqB,aACrB,iBAAkB,kBAClB,qBAAsB,mBACtB,qBAAsB,cACtB,cAAe,QACf,qBAAsB,0BACtB,eAAgB,UAChB,sBAAuB,UACvB,cAAe,IACf,cAAe,IACf,cAAe,IACf,cAAe,IACf,YAAa,QACb,eAAgB,SAChB,0BAA2B,2BAC3B,qBAAsB,yBACtB,uBAAwB,yBACxB,sBAAuB,2BACvB,sBAAuB,yBACvB,kBAAmB,oCACnB,mBAAoB,QACpB,iBAAkB,SAClB,sBAAuB,aACvB,gBAAiB,gBACjB,mCAAoC,sCACpC,gCAAiC,uBACjC,kCAAmC,oBACnC,+BAAgC,kBAChC,+BAAgC,0BAChC,WAAY,SACZ,gBAAiB,OACjB,qBAAsB,mBACtB,yBAA0B,sCAC1B,mBAAoB,eACpB,mBAAoB,WACpB,8BAA+B,sBAC/B,+BAAgC,aAChC,0BAA2B,iCAC3B,uBAAwB,wBACxB,uBAAwB,MACxB,kCAAmC,aACnC,yBAA0B,MAC1B,0BAA2B,OAC3B,wBAAyB,QACzB,wBAAyB,MACzB,qBAAsB,qCACtB,uBAAwB,eACxB,oBAAqB,uBACrB,2BAA4B,gBAC5B,8BAA+B,aAC/B,6BAA8B,YAC9B,4BAA6B,cAC7B,4BAA6B,YAC7B,qBAAsB,QACtB,0BAA2B,cAC3B,4BAA6B,oBAC7B,mBAAoB,eACpB,8BAA+B,uBAC/B,sBAAuB,qBACvB,4BAA6B,WAC7B,uBAAwB,QACxB,sBAAuB,KACvB,4BAA6B,wBAC7B,kBAAmB,QACnB,sBAAuB,4CACvB,wBAAyB,yBACzB,yBAA0B,eAC1B,8BAA+B,cAC/B,mBAAoB,QACpB,uBAAwB,gBACxB,sBAAuB,QACvB,kBAAmB,gBACnB,yBAA0B,cAC1B,8BAA+B,eAC/B,0BAA2B,iBAC3B,iCAAkC,6BACpC"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
const t = {
|
|
2
|
+
"anon.heading_default": "متابعة كضيف",
|
|
3
|
+
"anon.try_again": "حاول مرة أخرى",
|
|
4
|
+
"auth.check_email_message": "تحقق من بريدك الإلكتروني للحصول على رمز التأكيد.",
|
|
5
|
+
"auth.check_email_title": "تحقق من بريدك الإلكتروني",
|
|
6
|
+
"auth.confirm_email_title": "تأكيد بريدك الإلكتروني",
|
|
7
|
+
"auth.confirmation_code": "رمز التأكيد",
|
|
8
|
+
"auth.continue_with_apple": "المتابعة مع Apple",
|
|
9
|
+
"auth.continue_with_facebook": "متابعة مع Facebook",
|
|
10
|
+
"auth.continue_with_github": "متابعة مع GitHub",
|
|
11
|
+
"auth.continue_with_google": "المتابعة مع Google",
|
|
12
|
+
"auth.create_account": "إنشاء حساب",
|
|
13
|
+
"auth.default_subtitle": "سجّل الدخول للوصول إلى جميع الميزات ومزامنة بياناتك.",
|
|
14
|
+
"auth.email": "عنوان البريد الإلكتروني",
|
|
15
|
+
"auth.email_exists": "يوجد حساب بهذا البريد الإلكتروني بالفعل.",
|
|
16
|
+
"auth.email_not_confirmed": "يرجى تأكيد بريدك الإلكتروني أولاً.",
|
|
17
|
+
"auth.forgot_password": "هل نسيت كلمة المرور؟",
|
|
18
|
+
"auth.forgot_password_title": "هل نسيت كلمة المرور؟",
|
|
19
|
+
"auth.forgot_subtitle": "أدخل بريدك الإلكتروني وسنرسل لك رابط إعادة تعيين كلمة المرور.",
|
|
20
|
+
"auth.generic_error": "حدث خطأ ما",
|
|
21
|
+
"auth.have_account": "لديك حساب؟",
|
|
22
|
+
"auth.hide_password": "إخفاء كلمة المرور",
|
|
23
|
+
"auth.invalid_credentials": "البريد الإلكتروني أو كلمة المرور غير صحيحة",
|
|
24
|
+
"auth.invalid_otp": "الرمز غير صالح أو منتهي الصلاحية.",
|
|
25
|
+
"auth.last_used_no_email": "الأخير",
|
|
26
|
+
"auth.link_purchase_subheading": "سنربط الشراء بحسابك للحفاظ على الوصول.",
|
|
27
|
+
"auth.log_in": "تسجيل الدخول",
|
|
28
|
+
"auth.log_in_link": "تسجيل الدخول",
|
|
29
|
+
"auth.login_continue_purchase": "سجّل الدخول لمتابعة عملية الشراء",
|
|
30
|
+
"auth.network_error": "خطأ في الشبكة. تحقق من اتصالك وحاول مرة أخرى.",
|
|
31
|
+
"auth.no_account": "ليس لديك حساب؟",
|
|
32
|
+
"auth.or": "أو",
|
|
33
|
+
"auth.password": "كلمة المرور",
|
|
34
|
+
"auth.passwords_mismatch": "كلمتا المرور غير متطابقتين",
|
|
35
|
+
"auth.rate_limited": "طلبات كثيرة جدًا. حاول مرة أخرى لاحقًا.",
|
|
36
|
+
"auth.repeat_password": "كرّر كلمة المرور",
|
|
37
|
+
"auth.reset_password_title": "إعادة تعيين كلمة المرور",
|
|
38
|
+
"auth.reset_sent_message": "إذا كان هذا البريد موجودًا، فقد تم إرسال رمز إعادة التعيين.",
|
|
39
|
+
"auth.restore_purchases_heading": "استعادة المشتريات",
|
|
40
|
+
"auth.restore_purchases_subheading": "يُرجى تسجيل الدخول لاستعادة مشترياتك.",
|
|
41
|
+
"auth.send_reset": "إرسال بريد إعادة التعيين",
|
|
42
|
+
"auth.service_unavailable": "الخدمة غير متاحة مؤقتًا. حاول لاحقًا.",
|
|
43
|
+
"auth.show_password": "إظهار كلمة المرور",
|
|
44
|
+
"auth.sign_out": "تسجيل الخروج",
|
|
45
|
+
"auth.sign_up": "إنشاء حساب",
|
|
46
|
+
"auth.sign_up_link": "إنشاء حساب",
|
|
47
|
+
"auth.signed_in": "تم تسجيل الدخول",
|
|
48
|
+
"auth.signin_failed": "فشل تسجيل الدخول",
|
|
49
|
+
"auth.signup_failed": "فشل التسجيل",
|
|
50
|
+
"auth.verify": "تأكيد",
|
|
51
|
+
"auth.weak_password": "كلمة المرور ضعيفة جدًا.",
|
|
52
|
+
"auth.welcome": "مرحباً!",
|
|
53
|
+
"auth.welcome_signup": "مرحبًا!",
|
|
54
|
+
"countdown.d": "ي",
|
|
55
|
+
"countdown.h": "س",
|
|
56
|
+
"countdown.m": "د",
|
|
57
|
+
"countdown.s": "ث",
|
|
58
|
+
"cta.close": "إغلاق",
|
|
59
|
+
"cta.continue": "متابعة",
|
|
60
|
+
"cta.get_lifetime_access": "احصل على وصول مدى الحياة",
|
|
61
|
+
"cta.get_plan_daily": "احصل على الخطة اليومية",
|
|
62
|
+
"cta.get_plan_monthly": "احصل على الخطة الشهرية",
|
|
63
|
+
"cta.get_plan_weekly": "احصل على الخطة الأسبوعية",
|
|
64
|
+
"cta.get_plan_yearly": "احصل على الخطة السنوية",
|
|
65
|
+
"cta.start_trial": "ابدأ تجربة مجانية لمدة {days} يوم",
|
|
66
|
+
"modal.close_aria": "إغلاق",
|
|
67
|
+
"modal.continue": "متابعة",
|
|
68
|
+
"modal.error_generic": "حدث خطأ ما",
|
|
69
|
+
"modal.loading": "جارٍ التحميل…",
|
|
70
|
+
"modal.purchase_restored_subtitle": "مرحبًا بعودتك — اشتراكك نشط بالفعل.",
|
|
71
|
+
"modal.purchase_restored_title": "تمت استعادة الاشتراك",
|
|
72
|
+
"modal.purchase_success_subtitle": "اشتراكك نشط الآن.",
|
|
73
|
+
"modal.purchase_success_title": "تم استلام الدفع",
|
|
74
|
+
"modal.verifying_subscription": "جارٍ التحقق من اشتراكك…",
|
|
75
|
+
"nav.back": "→ رجوع",
|
|
76
|
+
"nav.back_aria": "رجوع",
|
|
77
|
+
"offer.limited_time": "عرض لفترة محدودة",
|
|
78
|
+
"payment.awaiting_title": "أكمل الدفع في علامة التبويب الجديدة",
|
|
79
|
+
"payment.checking": "جارٍ التحقق…",
|
|
80
|
+
"payment.ive_paid": "لقد دفعت",
|
|
81
|
+
"payment.open_checkout_again": "افتح الدفع مرة أخرى",
|
|
82
|
+
"payment.open_checkout_button": "افتح الدفع",
|
|
83
|
+
"pricing.free_trial_days": "تجربة مجانية لمدة {days} يومًا",
|
|
84
|
+
"pricing.included_per": "متضمن لكل {interval}:",
|
|
85
|
+
"pricing.interval.day": "يوم",
|
|
86
|
+
"pricing.interval.lifetime_short": "مدى الحياة",
|
|
87
|
+
"pricing.interval.month": "شهر",
|
|
88
|
+
"pricing.interval.period": "فترة",
|
|
89
|
+
"pricing.interval.week": "أسبوع",
|
|
90
|
+
"pricing.interval.year": "سنة",
|
|
91
|
+
"pricing.money_back": "ضمان استرداد الأموال لمدة 30 يومًا",
|
|
92
|
+
"pricing.most_popular": "الأكثر شعبية",
|
|
93
|
+
"pricing.no_prices": "لا توجد أسعار متاحة.",
|
|
94
|
+
"pricing.plan_label.daily": "الخطة اليومية",
|
|
95
|
+
"pricing.plan_label.lifetime": "مدى الحياة",
|
|
96
|
+
"pricing.plan_label.monthly": "خطة شهرية",
|
|
97
|
+
"pricing.plan_label.weekly": "خطة أسبوعية",
|
|
98
|
+
"pricing.plan_label.yearly": "خطة سنوية",
|
|
99
|
+
"pricing.plans_aria": "الخطط",
|
|
100
|
+
"session.contact_support": "اتصل بالدعم",
|
|
101
|
+
"session.restore_purchases": "استعادة المشتريات",
|
|
102
|
+
"session.sign_out": "تسجيل الخروج",
|
|
103
|
+
"session.signed_in_as_prefix": "تم تسجيل الدخول باسم",
|
|
104
|
+
"session.signing_out": "جارٍ تسجيل الخروج…",
|
|
105
|
+
"support.attachments_label": "المرفقات",
|
|
106
|
+
"support.close_button": "إغلاق",
|
|
107
|
+
"support.done_button": "تم",
|
|
108
|
+
"support.email_placeholder": "أدخل بريدك الإلكتروني",
|
|
109
|
+
"support.heading": "الدعم",
|
|
110
|
+
"support.instruction": "يُرجى ملء النموذج أدناه لإرسال طلب الدعم.",
|
|
111
|
+
"support.invalid_email": "بريد إلكتروني غير صالح",
|
|
112
|
+
"support.message_length": "1-5000 حرفاً",
|
|
113
|
+
"support.message_placeholder": "أدخل رسالتك",
|
|
114
|
+
"support.required": "مطلوب",
|
|
115
|
+
"support.send_another": "إرسال طلب آخر",
|
|
116
|
+
"support.send_button": "إرسال",
|
|
117
|
+
"support.sending": "جارٍ الإرسال…",
|
|
118
|
+
"support.subject_length": "3-200 حرفاً",
|
|
119
|
+
"support.subject_placeholder": "أدخل الموضوع",
|
|
120
|
+
"support.success_heading": "تم إرسال الطلب",
|
|
121
|
+
"support.success_message_prefix": "لقد تلقينا رسالتك وسنرد على"
|
|
122
|
+
};
|
|
123
|
+
export {
|
|
124
|
+
t as default
|
|
125
|
+
};
|
|
126
|
+
//# sourceMappingURL=ar-B2Wg_IrC.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ar-B2Wg_IrC.js","sources":["../../../sdk/src/ui/i18n/locales/ar.ts"],"sourcesContent":["/**\n * Static-translations для ar. Сгенерировано из:\n * - `online/lang/static-translations.ts` (legacy, через KEY_MAP)\n * - `tools/sdk-translations.mjs` (SDK-specific строки)\n *\n * Не править вручную — изменения теряются при следующем `node tools/gen-locales.mjs`.\n * Чтобы исправить перевод — править legacy/sdk-translations.mjs и регенерить.\n */\nconst ar = {\n 'anon.heading_default': 'متابعة كضيف',\n 'anon.try_again': 'حاول مرة أخرى',\n 'auth.check_email_message': 'تحقق من بريدك الإلكتروني للحصول على رمز التأكيد.',\n 'auth.check_email_title': 'تحقق من بريدك الإلكتروني',\n 'auth.confirm_email_title': 'تأكيد بريدك الإلكتروني',\n 'auth.confirmation_code': 'رمز التأكيد',\n 'auth.continue_with_apple': 'المتابعة مع Apple',\n 'auth.continue_with_facebook': 'متابعة مع Facebook',\n 'auth.continue_with_github': 'متابعة مع GitHub',\n 'auth.continue_with_google': 'المتابعة مع Google',\n 'auth.create_account': 'إنشاء حساب',\n 'auth.default_subtitle': 'سجّل الدخول للوصول إلى جميع الميزات ومزامنة بياناتك.',\n 'auth.email': 'عنوان البريد الإلكتروني',\n 'auth.email_exists': 'يوجد حساب بهذا البريد الإلكتروني بالفعل.',\n 'auth.email_not_confirmed': 'يرجى تأكيد بريدك الإلكتروني أولاً.',\n 'auth.forgot_password': 'هل نسيت كلمة المرور؟',\n 'auth.forgot_password_title': 'هل نسيت كلمة المرور؟',\n 'auth.forgot_subtitle': 'أدخل بريدك الإلكتروني وسنرسل لك رابط إعادة تعيين كلمة المرور.',\n 'auth.generic_error': 'حدث خطأ ما',\n 'auth.have_account': 'لديك حساب؟',\n 'auth.hide_password': 'إخفاء كلمة المرور',\n 'auth.invalid_credentials': 'البريد الإلكتروني أو كلمة المرور غير صحيحة',\n 'auth.invalid_otp': 'الرمز غير صالح أو منتهي الصلاحية.',\n 'auth.last_used_no_email': 'الأخير',\n 'auth.link_purchase_subheading': 'سنربط الشراء بحسابك للحفاظ على الوصول.',\n 'auth.log_in': 'تسجيل الدخول',\n 'auth.log_in_link': 'تسجيل الدخول',\n 'auth.login_continue_purchase': 'سجّل الدخول لمتابعة عملية الشراء',\n 'auth.network_error': 'خطأ في الشبكة. تحقق من اتصالك وحاول مرة أخرى.',\n 'auth.no_account': 'ليس لديك حساب؟',\n 'auth.or': 'أو',\n 'auth.password': 'كلمة المرور',\n 'auth.passwords_mismatch': 'كلمتا المرور غير متطابقتين',\n 'auth.rate_limited': 'طلبات كثيرة جدًا. حاول مرة أخرى لاحقًا.',\n 'auth.repeat_password': 'كرّر كلمة المرور',\n 'auth.reset_password_title': 'إعادة تعيين كلمة المرور',\n 'auth.reset_sent_message': 'إذا كان هذا البريد موجودًا، فقد تم إرسال رمز إعادة التعيين.',\n 'auth.restore_purchases_heading': 'استعادة المشتريات',\n 'auth.restore_purchases_subheading': 'يُرجى تسجيل الدخول لاستعادة مشترياتك.',\n 'auth.send_reset': 'إرسال بريد إعادة التعيين',\n 'auth.service_unavailable': 'الخدمة غير متاحة مؤقتًا. حاول لاحقًا.',\n 'auth.show_password': 'إظهار كلمة المرور',\n 'auth.sign_out': 'تسجيل الخروج',\n 'auth.sign_up': 'إنشاء حساب',\n 'auth.sign_up_link': 'إنشاء حساب',\n 'auth.signed_in': 'تم تسجيل الدخول',\n 'auth.signin_failed': 'فشل تسجيل الدخول',\n 'auth.signup_failed': 'فشل التسجيل',\n 'auth.verify': 'تأكيد',\n 'auth.weak_password': 'كلمة المرور ضعيفة جدًا.',\n 'auth.welcome': 'مرحباً!',\n 'auth.welcome_signup': 'مرحبًا!',\n 'countdown.d': 'ي',\n 'countdown.h': 'س',\n 'countdown.m': 'د',\n 'countdown.s': 'ث',\n 'cta.close': 'إغلاق',\n 'cta.continue': 'متابعة',\n 'cta.get_lifetime_access': 'احصل على وصول مدى الحياة',\n 'cta.get_plan_daily': 'احصل على الخطة اليومية',\n 'cta.get_plan_monthly': 'احصل على الخطة الشهرية',\n 'cta.get_plan_weekly': 'احصل على الخطة الأسبوعية',\n 'cta.get_plan_yearly': 'احصل على الخطة السنوية',\n 'cta.start_trial': 'ابدأ تجربة مجانية لمدة {days} يوم',\n 'modal.close_aria': 'إغلاق',\n 'modal.continue': 'متابعة',\n 'modal.error_generic': 'حدث خطأ ما',\n 'modal.loading': 'جارٍ التحميل…',\n 'modal.purchase_restored_subtitle': 'مرحبًا بعودتك — اشتراكك نشط بالفعل.',\n 'modal.purchase_restored_title': 'تمت استعادة الاشتراك',\n 'modal.purchase_success_subtitle': 'اشتراكك نشط الآن.',\n 'modal.purchase_success_title': 'تم استلام الدفع',\n 'modal.verifying_subscription': 'جارٍ التحقق من اشتراكك…',\n 'nav.back': '→ رجوع',\n 'nav.back_aria': 'رجوع',\n 'offer.limited_time': 'عرض لفترة محدودة',\n 'payment.awaiting_title': 'أكمل الدفع في علامة التبويب الجديدة',\n 'payment.checking': 'جارٍ التحقق…',\n 'payment.ive_paid': 'لقد دفعت',\n 'payment.open_checkout_again': 'افتح الدفع مرة أخرى',\n 'payment.open_checkout_button': 'افتح الدفع',\n 'pricing.free_trial_days': 'تجربة مجانية لمدة {days} يومًا',\n 'pricing.included_per': 'متضمن لكل {interval}:',\n 'pricing.interval.day': 'يوم',\n 'pricing.interval.lifetime_short': 'مدى الحياة',\n 'pricing.interval.month': 'شهر',\n 'pricing.interval.period': 'فترة',\n 'pricing.interval.week': 'أسبوع',\n 'pricing.interval.year': 'سنة',\n 'pricing.money_back': 'ضمان استرداد الأموال لمدة 30 يومًا',\n 'pricing.most_popular': 'الأكثر شعبية',\n 'pricing.no_prices': 'لا توجد أسعار متاحة.',\n 'pricing.plan_label.daily': 'الخطة اليومية',\n 'pricing.plan_label.lifetime': 'مدى الحياة',\n 'pricing.plan_label.monthly': 'خطة شهرية',\n 'pricing.plan_label.weekly': 'خطة أسبوعية',\n 'pricing.plan_label.yearly': 'خطة سنوية',\n 'pricing.plans_aria': 'الخطط',\n 'session.contact_support': 'اتصل بالدعم',\n 'session.restore_purchases': 'استعادة المشتريات',\n 'session.sign_out': 'تسجيل الخروج',\n 'session.signed_in_as_prefix': 'تم تسجيل الدخول باسم',\n 'session.signing_out': 'جارٍ تسجيل الخروج…',\n 'support.attachments_label': 'المرفقات',\n 'support.close_button': 'إغلاق',\n 'support.done_button': 'تم',\n 'support.email_placeholder': 'أدخل بريدك الإلكتروني',\n 'support.heading': 'الدعم',\n 'support.instruction': 'يُرجى ملء النموذج أدناه لإرسال طلب الدعم.',\n 'support.invalid_email': 'بريد إلكتروني غير صالح',\n 'support.message_length': '1-5000 حرفاً',\n 'support.message_placeholder': 'أدخل رسالتك',\n 'support.required': 'مطلوب',\n 'support.send_another': 'إرسال طلب آخر',\n 'support.send_button': 'إرسال',\n 'support.sending': 'جارٍ الإرسال…',\n 'support.subject_length': '3-200 حرفاً',\n 'support.subject_placeholder': 'أدخل الموضوع',\n 'support.success_heading': 'تم إرسال الطلب',\n 'support.success_message_prefix': 'لقد تلقينا رسالتك وسنرد على'\n} as const;\n\nexport default ar;\n"],"names":["ar"],"mappings":"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"}
|