From 53060c20306b4529a651d21bfc3b169cea9f1183 Mon Sep 17 00:00:00 2001 From: Zakher Masri <46135573+zaaakher@users.noreply.github.com> Date: Sun, 25 Aug 2024 17:47:34 +0300 Subject: [PATCH] chore: add Arabic translation (#6422) * chore: add Arabic translation * chore: add arabic to phrases-experience * chore: use `ar-AR` as language code * chore: sync keys * chore: add changeset and update elements --------- Co-authored-by: Gao Sun --- .changeset/young-moons-deny.md | 6 + packages/elements/lit-localize.json | 18 +- packages/elements/xliff/ar-AR.xlf | 50 +++++ packages/phrases-experience/src/index.ts | 3 + .../src/locales/ar-ar/action.ts | 36 ++++ .../src/locales/ar-ar/description.ts | 100 +++++++++ .../src/locales/ar-ar/development-tenant.ts | 5 + .../src/locales/ar-ar/error/index.ts | 24 +++ .../locales/ar-ar/error/password-rejected.ts | 16 ++ .../src/locales/ar-ar/index.ts | 29 +++ .../src/locales/ar-ar/input.ts | 11 + .../src/locales/ar-ar/list.ts | 7 + .../src/locales/ar-ar/mfa.ts | 54 +++++ .../src/locales/ar-ar/secondary.ts | 6 + .../src/locales/ar-ar/user-scopes.ts | 15 ++ packages/phrases/src/index.ts | 3 + .../src/locales/ar-ar/errors/application.ts | 25 +++ .../phrases/src/locales/ar-ar/errors/auth.ts | 12 ++ .../src/locales/ar-ar/errors/connector.ts | 39 ++++ .../src/locales/ar-ar/errors/domain.ts | 12 ++ .../src/locales/ar-ar/errors/entity.ts | 13 ++ .../phrases/src/locales/ar-ar/errors/guard.ts | 10 + .../phrases/src/locales/ar-ar/errors/hook.ts | 7 + .../phrases/src/locales/ar-ar/errors/index.ts | 55 +++++ .../locales/ar-ar/errors/jwt-customizer.ts | 6 + .../src/locales/ar-ar/errors/localization.ts | 7 + .../phrases/src/locales/ar-ar/errors/log.ts | 5 + .../phrases/src/locales/ar-ar/errors/oidc.ts | 22 ++ .../src/locales/ar-ar/errors/organization.ts | 5 + .../src/locales/ar-ar/errors/password.ts | 7 + .../src/locales/ar-ar/errors/request.ts | 6 + .../src/locales/ar-ar/errors/resource.ts | 7 + .../phrases/src/locales/ar-ar/errors/role.ts | 14 ++ .../phrases/src/locales/ar-ar/errors/scope.ts | 6 + .../src/locales/ar-ar/errors/session.ts | 44 ++++ .../ar-ar/errors/sign-in-experiences.ts | 22 ++ .../locales/ar-ar/errors/single-sign-on.ts | 8 + .../src/locales/ar-ar/errors/storage.ts | 7 + .../src/locales/ar-ar/errors/subscription.ts | 7 + .../src/locales/ar-ar/errors/swagger.ts | 7 + .../phrases/src/locales/ar-ar/errors/user.ts | 41 ++++ .../locales/ar-ar/errors/verification-code.ts | 11 + packages/phrases/src/locales/ar-ar/index.ts | 13 ++ .../admin-console/api-resource-details.ts | 38 ++++ .../admin-console/api-resources.ts | 19 ++ .../admin-console/application-details.ts | 199 ++++++++++++++++++ .../translation/admin-console/applications.ts | 58 +++++ .../ar-ar/translation/admin-console/cloud.ts | 87 ++++++++ .../translation/admin-console/components.ts | 15 ++ .../admin-console/connector-details.ts | 71 +++++++ .../translation/admin-console/connectors.ts | 86 ++++++++ .../translation/admin-console/contact.ts | 26 +++ .../translation/admin-console/dashboard.ts | 21 ++ .../ar-ar/translation/admin-console/domain.ts | 56 +++++ .../admin-console/enterprise-sso-details.ts | 79 +++++++ .../admin-console/enterprise-sso.ts | 72 +++++++ .../ar-ar/translation/admin-console/errors.ts | 29 +++ .../translation/admin-console/general.ts | 77 +++++++ .../translation/admin-console/get-started.ts | 38 ++++ .../ar-ar/translation/admin-console/guide.ts | 41 ++++ .../ar-ar/translation/admin-console/index.ts | 102 +++++++++ .../translation/admin-console/invitation.ts | 14 ++ .../translation/admin-console/jwt-claims.ts | 66 ++++++ .../translation/admin-console/log-details.ts | 18 ++ .../ar-ar/translation/admin-console/logs.ts | 12 ++ .../ar-ar/translation/admin-console/menu.ts | 13 ++ .../ar-ar/translation/admin-console/mfa.ts | 32 +++ .../admin-console/organization-details.ts | 77 +++++++ .../organization-role-details.ts | 39 ++++ .../admin-console/organization-template.ts | 43 ++++ .../admin-console/organizations.ts | 75 +++++++ .../translation/admin-console/permissions.ts | 15 ++ .../translation/admin-console/profile.ts | 107 ++++++++++ .../admin-console/protected-app.ts | 42 ++++ .../translation/admin-console/role-details.ts | 74 +++++++ .../ar-ar/translation/admin-console/roles.ts | 39 ++++ .../admin-console/session-expired.ts | 8 + .../admin-console/sign-in-exp/content.ts | 46 ++++ .../admin-console/sign-in-exp/index.ts | 119 +++++++++++ .../sign-in-exp/password-policy.ts | 26 +++ .../sign-in-exp/sign-up-and-sign-in.ts | 71 +++++++ .../translation/admin-console/signing-keys.ts | 43 ++++ .../admin-console/subscription/index.ts | 69 ++++++ .../admin-console/subscription/quota-item.ts | 176 ++++++++++++++++ .../admin-console/subscription/quota-table.ts | 120 +++++++++++ .../admin-console/subscription/usage.ts | 62 ++++++ .../translation/admin-console/tab-sections.ts | 10 + .../ar-ar/translation/admin-console/tabs.ts | 22 ++ .../admin-console/tenant-members.ts | 62 ++++++ .../translation/admin-console/tenants.ts | 113 ++++++++++ .../ar-ar/translation/admin-console/topbar.ts | 6 + .../admin-console/upsell/add-on.ts | 18 ++ .../upsell/featured-plan-content.ts | 21 ++ .../translation/admin-console/upsell/index.ts | 48 +++++ .../admin-console/upsell/paywall.ts | 72 +++++++ .../translation/admin-console/user-details.ts | 155 ++++++++++++++ .../ar-ar/translation/admin-console/users.ts | 27 +++ .../admin-console/webhook-details.ts | 59 ++++++ .../translation/admin-console/webhooks.ts | 43 ++++ .../translation/admin-console/welcome.ts | 8 + .../src/locales/ar-ar/translation/demo-app.ts | 13 ++ .../src/locales/ar-ar/translation/index.ts | 11 + .../src/locales/ar-ar/translation/oidc.ts | 5 + 103 files changed, 4013 insertions(+), 1 deletion(-) create mode 100644 .changeset/young-moons-deny.md create mode 100644 packages/elements/xliff/ar-AR.xlf create mode 100644 packages/phrases-experience/src/locales/ar-ar/action.ts create mode 100644 packages/phrases-experience/src/locales/ar-ar/description.ts create mode 100644 packages/phrases-experience/src/locales/ar-ar/development-tenant.ts create mode 100644 packages/phrases-experience/src/locales/ar-ar/error/index.ts create mode 100644 packages/phrases-experience/src/locales/ar-ar/error/password-rejected.ts create mode 100644 packages/phrases-experience/src/locales/ar-ar/index.ts create mode 100644 packages/phrases-experience/src/locales/ar-ar/input.ts create mode 100644 packages/phrases-experience/src/locales/ar-ar/list.ts create mode 100644 packages/phrases-experience/src/locales/ar-ar/mfa.ts create mode 100644 packages/phrases-experience/src/locales/ar-ar/secondary.ts create mode 100644 packages/phrases-experience/src/locales/ar-ar/user-scopes.ts create mode 100644 packages/phrases/src/locales/ar-ar/errors/application.ts create mode 100644 packages/phrases/src/locales/ar-ar/errors/auth.ts create mode 100644 packages/phrases/src/locales/ar-ar/errors/connector.ts create mode 100644 packages/phrases/src/locales/ar-ar/errors/domain.ts create mode 100644 packages/phrases/src/locales/ar-ar/errors/entity.ts create mode 100644 packages/phrases/src/locales/ar-ar/errors/guard.ts create mode 100644 packages/phrases/src/locales/ar-ar/errors/hook.ts create mode 100644 packages/phrases/src/locales/ar-ar/errors/index.ts create mode 100644 packages/phrases/src/locales/ar-ar/errors/jwt-customizer.ts create mode 100644 packages/phrases/src/locales/ar-ar/errors/localization.ts create mode 100644 packages/phrases/src/locales/ar-ar/errors/log.ts create mode 100644 packages/phrases/src/locales/ar-ar/errors/oidc.ts create mode 100644 packages/phrases/src/locales/ar-ar/errors/organization.ts create mode 100644 packages/phrases/src/locales/ar-ar/errors/password.ts create mode 100644 packages/phrases/src/locales/ar-ar/errors/request.ts create mode 100644 packages/phrases/src/locales/ar-ar/errors/resource.ts create mode 100644 packages/phrases/src/locales/ar-ar/errors/role.ts create mode 100644 packages/phrases/src/locales/ar-ar/errors/scope.ts create mode 100644 packages/phrases/src/locales/ar-ar/errors/session.ts create mode 100644 packages/phrases/src/locales/ar-ar/errors/sign-in-experiences.ts create mode 100644 packages/phrases/src/locales/ar-ar/errors/single-sign-on.ts create mode 100644 packages/phrases/src/locales/ar-ar/errors/storage.ts create mode 100644 packages/phrases/src/locales/ar-ar/errors/subscription.ts create mode 100644 packages/phrases/src/locales/ar-ar/errors/swagger.ts create mode 100644 packages/phrases/src/locales/ar-ar/errors/user.ts create mode 100644 packages/phrases/src/locales/ar-ar/errors/verification-code.ts create mode 100644 packages/phrases/src/locales/ar-ar/index.ts create mode 100644 packages/phrases/src/locales/ar-ar/translation/admin-console/api-resource-details.ts create mode 100644 packages/phrases/src/locales/ar-ar/translation/admin-console/api-resources.ts create mode 100644 packages/phrases/src/locales/ar-ar/translation/admin-console/application-details.ts create mode 100644 packages/phrases/src/locales/ar-ar/translation/admin-console/applications.ts create mode 100644 packages/phrases/src/locales/ar-ar/translation/admin-console/cloud.ts create mode 100644 packages/phrases/src/locales/ar-ar/translation/admin-console/components.ts create mode 100644 packages/phrases/src/locales/ar-ar/translation/admin-console/connector-details.ts create mode 100644 packages/phrases/src/locales/ar-ar/translation/admin-console/connectors.ts create mode 100644 packages/phrases/src/locales/ar-ar/translation/admin-console/contact.ts create mode 100644 packages/phrases/src/locales/ar-ar/translation/admin-console/dashboard.ts create mode 100644 packages/phrases/src/locales/ar-ar/translation/admin-console/domain.ts create mode 100644 packages/phrases/src/locales/ar-ar/translation/admin-console/enterprise-sso-details.ts create mode 100644 packages/phrases/src/locales/ar-ar/translation/admin-console/enterprise-sso.ts create mode 100644 packages/phrases/src/locales/ar-ar/translation/admin-console/errors.ts create mode 100644 packages/phrases/src/locales/ar-ar/translation/admin-console/general.ts create mode 100644 packages/phrases/src/locales/ar-ar/translation/admin-console/get-started.ts create mode 100644 packages/phrases/src/locales/ar-ar/translation/admin-console/guide.ts create mode 100644 packages/phrases/src/locales/ar-ar/translation/admin-console/index.ts create mode 100644 packages/phrases/src/locales/ar-ar/translation/admin-console/invitation.ts create mode 100644 packages/phrases/src/locales/ar-ar/translation/admin-console/jwt-claims.ts create mode 100644 packages/phrases/src/locales/ar-ar/translation/admin-console/log-details.ts create mode 100644 packages/phrases/src/locales/ar-ar/translation/admin-console/logs.ts create mode 100644 packages/phrases/src/locales/ar-ar/translation/admin-console/menu.ts create mode 100644 packages/phrases/src/locales/ar-ar/translation/admin-console/mfa.ts create mode 100644 packages/phrases/src/locales/ar-ar/translation/admin-console/organization-details.ts create mode 100644 packages/phrases/src/locales/ar-ar/translation/admin-console/organization-role-details.ts create mode 100644 packages/phrases/src/locales/ar-ar/translation/admin-console/organization-template.ts create mode 100644 packages/phrases/src/locales/ar-ar/translation/admin-console/organizations.ts create mode 100644 packages/phrases/src/locales/ar-ar/translation/admin-console/permissions.ts create mode 100644 packages/phrases/src/locales/ar-ar/translation/admin-console/profile.ts create mode 100644 packages/phrases/src/locales/ar-ar/translation/admin-console/protected-app.ts create mode 100644 packages/phrases/src/locales/ar-ar/translation/admin-console/role-details.ts create mode 100644 packages/phrases/src/locales/ar-ar/translation/admin-console/roles.ts create mode 100644 packages/phrases/src/locales/ar-ar/translation/admin-console/session-expired.ts create mode 100644 packages/phrases/src/locales/ar-ar/translation/admin-console/sign-in-exp/content.ts create mode 100644 packages/phrases/src/locales/ar-ar/translation/admin-console/sign-in-exp/index.ts create mode 100644 packages/phrases/src/locales/ar-ar/translation/admin-console/sign-in-exp/password-policy.ts create mode 100644 packages/phrases/src/locales/ar-ar/translation/admin-console/sign-in-exp/sign-up-and-sign-in.ts create mode 100644 packages/phrases/src/locales/ar-ar/translation/admin-console/signing-keys.ts create mode 100644 packages/phrases/src/locales/ar-ar/translation/admin-console/subscription/index.ts create mode 100644 packages/phrases/src/locales/ar-ar/translation/admin-console/subscription/quota-item.ts create mode 100644 packages/phrases/src/locales/ar-ar/translation/admin-console/subscription/quota-table.ts create mode 100644 packages/phrases/src/locales/ar-ar/translation/admin-console/subscription/usage.ts create mode 100644 packages/phrases/src/locales/ar-ar/translation/admin-console/tab-sections.ts create mode 100644 packages/phrases/src/locales/ar-ar/translation/admin-console/tabs.ts create mode 100644 packages/phrases/src/locales/ar-ar/translation/admin-console/tenant-members.ts create mode 100644 packages/phrases/src/locales/ar-ar/translation/admin-console/tenants.ts create mode 100644 packages/phrases/src/locales/ar-ar/translation/admin-console/topbar.ts create mode 100644 packages/phrases/src/locales/ar-ar/translation/admin-console/upsell/add-on.ts create mode 100644 packages/phrases/src/locales/ar-ar/translation/admin-console/upsell/featured-plan-content.ts create mode 100644 packages/phrases/src/locales/ar-ar/translation/admin-console/upsell/index.ts create mode 100644 packages/phrases/src/locales/ar-ar/translation/admin-console/upsell/paywall.ts create mode 100644 packages/phrases/src/locales/ar-ar/translation/admin-console/user-details.ts create mode 100644 packages/phrases/src/locales/ar-ar/translation/admin-console/users.ts create mode 100644 packages/phrases/src/locales/ar-ar/translation/admin-console/webhook-details.ts create mode 100644 packages/phrases/src/locales/ar-ar/translation/admin-console/webhooks.ts create mode 100644 packages/phrases/src/locales/ar-ar/translation/admin-console/welcome.ts create mode 100644 packages/phrases/src/locales/ar-ar/translation/demo-app.ts create mode 100644 packages/phrases/src/locales/ar-ar/translation/index.ts create mode 100644 packages/phrases/src/locales/ar-ar/translation/oidc.ts diff --git a/.changeset/young-moons-deny.md b/.changeset/young-moons-deny.md new file mode 100644 index 000000000..80b3202bc --- /dev/null +++ b/.changeset/young-moons-deny.md @@ -0,0 +1,6 @@ +--- +"@logto/phrases-experience": minor +"@logto/phrases": minor +--- + +add ar-AR language (credit to @zaaakher) diff --git a/packages/elements/lit-localize.json b/packages/elements/lit-localize.json index 6df04a74a..52cfa81fa 100644 --- a/packages/elements/lit-localize.json +++ b/packages/elements/lit-localize.json @@ -1,7 +1,23 @@ { "$schema": "https://raw.githubusercontent.com/lit/lit/main/packages/localize-tools/config.schema.json", "sourceLocale": "en", - "targetLocales": ["de", "es", "fr", "it", "ja", "ko", "pl-PL", "pt-BR", "pt-PT", "ru", "tr-TR", "zh-CN", "zh-HK", "zh-TW"], + "targetLocales": [ + "ar-AR", + "de", + "es", + "fr", + "it", + "ja", + "ko", + "pl-PL", + "pt-BR", + "pt-PT", + "ru", + "tr-TR", + "zh-CN", + "zh-HK", + "zh-TW" + ], "tsConfig": "./tsconfig.json", "output": { "mode": "runtime", diff --git a/packages/elements/xliff/ar-AR.xlf b/packages/elements/xliff/ar-AR.xlf new file mode 100644 index 000000000..f1ab3c7ec --- /dev/null +++ b/packages/elements/xliff/ar-AR.xlf @@ -0,0 +1,50 @@ + + + + + + Title + + + Actions + + + Profile + + + No user provided. + + + Personal information + + + Change + + + Update + + + Update name + + + Save + + + Not set + A fallback title when the title or heading of a component is not provided. + + + Avatar + The avatar of the user. + + + Name + The name of the user. + + + Person Doe + The placeholder for the name input field. + + + + diff --git a/packages/phrases-experience/src/index.ts b/packages/phrases-experience/src/index.ts index 0a9f8cac2..1d74ead14 100644 --- a/packages/phrases-experience/src/index.ts +++ b/packages/phrases-experience/src/index.ts @@ -3,6 +3,7 @@ import { languages, fallback } from '@logto/language-kit'; import type { NormalizeKeyPaths } from '@silverhand/essentials'; import { z } from 'zod'; +import arAR from './locales/ar-ar/index.js'; import de from './locales/de/index.js'; import en from './locales/en/index.js'; import es from './locales/es/index.js'; @@ -25,6 +26,7 @@ export type { LocalePhrase } from './types.js'; export type I18nKey = NormalizeKeyPaths; export const builtInLanguages = [ + 'ar-AR', 'de', 'en', 'es', @@ -54,6 +56,7 @@ export type BuiltInLanguageTag = z.infer; export type Resource = Record; const resource: Resource = { + 'ar-AR': arAR, de, en, es, diff --git a/packages/phrases-experience/src/locales/ar-ar/action.ts b/packages/phrases-experience/src/locales/ar-ar/action.ts new file mode 100644 index 000000000..95f2853b3 --- /dev/null +++ b/packages/phrases-experience/src/locales/ar-ar/action.ts @@ -0,0 +1,36 @@ +const action = { + sign_in: 'تسجيل الدخول', + continue: 'متابعة', + create_account: 'إنشاء حساب', + create_account_without_linking: 'إنشاء حساب جديد بدلاً من الربط', + create: 'إنشاء', + enter_passcode: 'أدخل رمز التحقق', + confirm: 'تأكيد', + cancel: 'إلغاء', + save_password: 'حفظ كلمة المرور', + bind: 'ربط مع {{address}}', + bind_and_continue: 'ربط ومتابعة', + back: 'العودة', + nav_back: 'رجوع', + nav_skip: 'تخطي', + agree: 'موافق', + got_it: 'فهمت', + sign_in_with: 'تسجيل الدخول باستخدام {{name}}', + forgot_password: 'هل نسيت كلمة المرور؟', + switch_to: 'التبديل إلى {{method}}', + sign_in_via_passcode: 'تسجيل الدخول باستخدام رمز التحقق', + sign_in_via_password: 'تسجيل الدخول باستخدام كلمة المرور', + change: 'تغيير {{method}}', + link_another_email: 'ربط بريد إلكتروني آخر', + link_another_phone: 'ربط هاتف آخر', + link_another_email_or_phone: 'ربط بريد إلكتروني أو هاتف آخر', + show_password: 'عرض كلمة المرور', + copy: 'نسخ', + verify_via_passkey: 'التحقق عبر مفتاح التحقق', + download: 'تحميل', + single_sign_on: 'تسجيل الدخول الموحد', + authorize: 'التفويض', + use_another_account: 'استخدام حساب آخر', +}; + +export default Object.freeze(action); diff --git a/packages/phrases-experience/src/locales/ar-ar/description.ts b/packages/phrases-experience/src/locales/ar-ar/description.ts new file mode 100644 index 000000000..9609ff698 --- /dev/null +++ b/packages/phrases-experience/src/locales/ar-ar/description.ts @@ -0,0 +1,100 @@ +const description = { + email: 'البريد الإلكتروني', + phone_number: 'رقم الهاتف', + username: 'اسم المستخدم', + reminder: 'تذكير', + not_found: '404 غير موجود', + agree_with_terms: 'لقد قرأت وأوافق على ', + agree_with_terms_modal: 'للمتابعة، يرجى الموافقة على .', + terms_of_use: 'شروط الاستخدام', + sign_in: 'تسجيل الدخول', + privacy_policy: 'سياسة الخصوصية', + create_account: 'إنشاء حساب', + or: 'أو', + and: 'و', + enter_passcode: 'تم إرسال رمز التحقق إلى {{address}} {{target}} الخاص بك', + passcode_sent: 'تم إعادة إرسال رمز التحقق', + resend_after_seconds: 'لم تستلمه بعد؟ إعادة إرسال بعد {{seconds}} ثانية', + resend_passcode: 'لم تستلمه بعد؟ إعادة إرسال رمز التحقق', + create_account_id_exists: 'الحساب بنوع {{type}} {{value}} موجود بالفعل، هل ترغب في تسجيل الدخول؟', + link_account_id_exists: 'الحساب بنوع {{type}} {{value}} موجود بالفعل. هل ترغب في ربطه؟', + sign_in_id_does_not_exist: + 'الحساب بنوع {{type}} {{value}} غير موجود، هل ترغب في إنشاء حساب جديد؟', + sign_in_id_does_not_exist_alert: 'الحساب بنوع {{type}} {{value}} غير موجود.', + create_account_id_exists_alert: + 'الحساب بنوع {{type}} {{value}} مرتبط بحساب آخر. يرجى المحاولة باستخدام {{type}} آخر.', + social_identity_exist: + 'الـ {{type}} {{value}} مرتبط بحساب آخر. يرجى المحاولة باستخدام {{type}} آخر.', + bind_account_title: 'ربط أو إنشاء حساب', + social_create_account: 'يمكنك إنشاء حساب جديد.', + social_link_email: 'يمكنك ربط بريد إلكتروني آخر', + social_link_phone: 'يمكنك ربط رقم هاتف آخر', + social_link_email_or_phone: 'يمكنك ربط بريد إلكتروني أو رقم هاتف آخر', + social_bind_with_existing: 'لقد وجدنا حسابًا ذا صلة تم تسجيله، ويمكنك ربطه مباشرة.', + skip_social_linking: 'تخطي ربط الحساب الحالي؟', + reset_password: 'إعادة تعيين كلمة المرور', + reset_password_description: + 'أدخل {{types, list(type: disjunction;)}} المرتبطة بحسابك، وسنرسل لك رمز التحقق لإعادة تعيين كلمة المرور.', + new_password: 'كلمة المرور الجديدة', + set_password: 'تعيين كلمة المرور', + password_changed: 'تم تغيير كلمة المرور', + no_account: 'لا يوجد حساب بعد؟ ', + have_account: 'هل لديك حساب بالفعل؟', + enter_password: 'أدخل كلمة المرور', + enter_password_for: 'تسجيل الدخول باستخدام كلمة المرور إلى {{method}} {{value}}', + enter_username: 'تعيين اسم المستخدم', + enter_username_description: + 'اسم المستخدم هو بديل لتسجيل الدخول. يجب أن يحتوي اسم المستخدم فقط على الأحرف والأرقام وشرطات السفل.', + link_email: 'ربط البريد الإلكتروني', + link_phone: 'ربط الهاتف', + link_email_or_phone: 'ربط البريد الإلكتروني أو الهاتف', + link_email_description: 'لزيادة الأمان، يرجى ربط بريدك الإلكتروني بالحساب.', + link_phone_description: 'لزيادة الأمان، يرجى ربط هاتفك بالحساب.', + link_email_or_phone_description: 'لزيادة الأمان، يرجى ربط بريدك الإلكتروني أو هاتفك بالحساب.', + continue_with_more_information: 'لزيادة الأمان، يرجى استكمال تفاصيل الحساب أدناه.', + create_your_account: 'إنشاء حسابك', + sign_in_to_your_account: 'تسجيل الدخول إلى حسابك', + no_region_code_found: 'لم يتم العثور على رمز المنطقة', + verify_email: 'تحقق من بريدك الإلكتروني', + verify_phone: 'تحقق من رقم هاتفك', + password_requirements: 'متطلبات كلمة المرور {{items, list}}.', + password_requirement: { + length_one: 'يتطلب حرف واحد على الأقل', + length_other: 'يتطلب {{count}} أحرف على الأقل', + character_types_one: + 'يجب أن يحتوي على حرف واحد على الأقل من الأحرف الكبيرة والصغيرة والأرقام والرموز', + character_types_other: + 'يجب أن يحتوي على {{count}} أنواع على الأقل من الأحرف الكبيرة والصغيرة والأرقام والرموز', + }, + use: 'استخدام', + single_sign_on_email_form: 'أدخل عنوان بريدك الإلكتروني الخاص بالشركة', + single_sign_on_connectors_list: + 'لقد قامت الشركة بتمكين تسجيل الدخول الموحد لحساب البريد الإلكتروني {{email}}. يمكنك الاستمرار في تسجيل الدخول باستخدام موفرات SSO التالية.', + single_sign_on_enabled: 'تم تمكين تسجيل الدخول الموحد لهذا الحساب', + authorize_title: 'السماح لـ {{name}}', + request_permission: '{{name}} يطلب الوصول إلى:', + grant_organization_access: 'منح الوصول إلى المؤسسة:', + authorize_personal_data_usage: 'السماح باستخدام البيانات الشخصية الخاصة بك:', + authorize_organization_access: 'السماح بالوصول إلى المؤسسة المحددة:', + user_scopes: 'بيانات المستخدم الشخصية', + organization_scopes: 'الوصول إلى المؤسسة', + authorize_agreement: `بالسماح بالوصول، فإنك توافق على لـ {{name}}.`, + authorize_agreement_with_redirect: `بالسماح بالوصول، فإنك توافق على لـ {{name}}، وسيتم توجيهك إلى {{uri}}.`, + not_you: 'ليس أنت؟', + user_id: 'معرف المستخدم: {{id}}', + redirect_to: 'سيتم توجيهك إلى {{name}}.', + auto_agreement: 'من خلال المتابعة، فإنك توافق على .', + /** UNTRANSLATED */ + identifier_sign_in_description: 'Enter you {{types, list(type: disjunction;)}} to sign in.', + /** UNTRANSLATED */ + all_sign_in_options: 'All sign-in options', + /** UNTRANSLATED */ + identifier_register_description: + 'Enter you {{types, list(type: disjunction;)}} to create a new account.', + /** UNTRANSLATED */ + all_account_creation_options: 'All account creation options', + /** UNTRANSLATED */ + back_to_sign_in: 'Back to sign in', +}; + +export default Object.freeze(description); diff --git a/packages/phrases-experience/src/locales/ar-ar/development-tenant.ts b/packages/phrases-experience/src/locales/ar-ar/development-tenant.ts new file mode 100644 index 000000000..a4428e6a8 --- /dev/null +++ b/packages/phrases-experience/src/locales/ar-ar/development-tenant.ts @@ -0,0 +1,5 @@ +const development_tenant = { + notification: 'أنت في وضع التطوير', +}; + +export default Object.freeze(development_tenant); diff --git a/packages/phrases-experience/src/locales/ar-ar/error/index.ts b/packages/phrases-experience/src/locales/ar-ar/error/index.ts new file mode 100644 index 000000000..771487ac3 --- /dev/null +++ b/packages/phrases-experience/src/locales/ar-ar/error/index.ts @@ -0,0 +1,24 @@ +import password_rejected from './password-rejected.js'; + +const error = { + general_required: `{{types, list(type: disjunction;)}} مطلوب`, + general_invalid: `{{types, list(type: disjunction;)}} غير صالح`, + username_required: 'اسم المستخدم مطلوب', + password_required: 'كلمة المرور مطلوبة', + username_exists: 'اسم المستخدم موجود بالفعل', + username_should_not_start_with_number: 'يجب ألا يبدأ اسم المستخدم برقم', + username_invalid_charset: 'يجب أن يحتوي اسم المستخدم فقط على الحروف والأرقام والشرطات السفلية.', + invalid_email: 'البريد الإلكتروني غير صالح', + invalid_phone: 'رقم الهاتف غير صالح', + passwords_do_not_match: 'كلمات المرور غير متطابقة. يرجى المحاولة مرة أخرى.', + invalid_passcode: 'رمز التحقق غير صالح.', + invalid_connector_auth: 'التوثيق غير صالح', + invalid_connector_request: 'بيانات الموصل غير صالحة', + unknown: 'خطأ غير معروف. يرجى المحاولة مرة أخرى لاحقًا.', + invalid_session: 'الجلسة غير موجودة. يرجى العودة وتسجيل الدخول مرة أخرى.', + timeout: 'انتهت مهلة الطلب. يرجى المحاولة مرة أخرى لاحقًا.', + password_rejected, + sso_not_enabled: 'تسجيل الدخول الموحد غير ممكّن لحساب البريد الإلكتروني هذا.', +}; + +export default Object.freeze(error); diff --git a/packages/phrases-experience/src/locales/ar-ar/error/password-rejected.ts b/packages/phrases-experience/src/locales/ar-ar/error/password-rejected.ts new file mode 100644 index 000000000..46505cf4e --- /dev/null +++ b/packages/phrases-experience/src/locales/ar-ar/error/password-rejected.ts @@ -0,0 +1,16 @@ +const password_rejected = { + too_short: 'الحد الأدنى للطول هو {{min}}.', + too_long: 'الحد الأقصى للطول هو {{max}}.', + character_types: 'مطلوب على الأقل {{min}} أنواع من الأحرف.', + unsupported_characters: 'تم العثور على حرف غير مدعوم.', + pwned: 'تجنب استخدام كلمات مرور بسيطة يسهل تخمينها.', + restricted_found: 'تجنب الاستخدام المفرط لـ {{list, list}}.', + restricted: { + repetition: 'حروف متكررة', + sequence: 'حروف متتالية', + user_info: 'معلوماتك الشخصية', + words: 'سياق المنتج', + }, +}; + +export default Object.freeze(password_rejected); diff --git a/packages/phrases-experience/src/locales/ar-ar/index.ts b/packages/phrases-experience/src/locales/ar-ar/index.ts new file mode 100644 index 000000000..3a12eba77 --- /dev/null +++ b/packages/phrases-experience/src/locales/ar-ar/index.ts @@ -0,0 +1,29 @@ +import { type DeepPartial } from '@silverhand/essentials'; + +import type { LocalePhrase } from '../../types.js'; + +import action from './action.js'; +import description from './description.js'; +import development_tenant from './development-tenant.js'; +import error from './error/index.js'; +import input from './input.js'; +import list from './list.js'; +import mfa from './mfa.js'; +import secondary from './secondary.js'; +import user_scopes from './user-scopes.js'; + +const ar_ar = { + translation: { + input, + secondary, + action, + description, + error, + list, + mfa, + development_tenant, + user_scopes, + }, +} satisfies DeepPartial; + +export default Object.freeze(ar_ar); diff --git a/packages/phrases-experience/src/locales/ar-ar/input.ts b/packages/phrases-experience/src/locales/ar-ar/input.ts new file mode 100644 index 000000000..da7776478 --- /dev/null +++ b/packages/phrases-experience/src/locales/ar-ar/input.ts @@ -0,0 +1,11 @@ +const input = { + username: 'اسم المستخدم', + password: 'كلمة المرور', + email: 'البريد الإلكتروني', + phone_number: 'رقم الهاتف', + confirm_password: 'تأكيد كلمة المرور', + search_region_code: 'رمز منطقة البحث', + backup_code: 'رمز النسخ الاحتياطي', +}; + +export default Object.freeze(input); diff --git a/packages/phrases-experience/src/locales/ar-ar/list.ts b/packages/phrases-experience/src/locales/ar-ar/list.ts new file mode 100644 index 000000000..cfa1d5385 --- /dev/null +++ b/packages/phrases-experience/src/locales/ar-ar/list.ts @@ -0,0 +1,7 @@ +const list = { + or: 'أو', + and: 'و', + separator: '،', +}; + +export default Object.freeze(list); diff --git a/packages/phrases-experience/src/locales/ar-ar/mfa.ts b/packages/phrases-experience/src/locales/ar-ar/mfa.ts new file mode 100644 index 000000000..aa1ce9e52 --- /dev/null +++ b/packages/phrases-experience/src/locales/ar-ar/mfa.ts @@ -0,0 +1,54 @@ +const mfa = { + totp: 'رمز OTP لتطبيق المصادقة', + webauthn: 'مفتاح المرور', + backup_code: 'رمز النسخ الاحتياطي', + link_totp_description: 'مثال: Google Authenticator، إلخ.', + link_webauthn_description: 'ربط جهازك أو جهاز USB الخاص بك', + link_backup_code_description: 'إنشاء رمز نسخ احتياطي', + verify_totp_description: 'أدخل الرمز المرة الواحدة في التطبيق', + verify_webauthn_description: 'تحقق من جهازك أو جهاز USB الخاص بك', + verify_backup_code_description: 'الصق رمز النسخ الاحتياطي الذي حفظته', + add_mfa_factors: 'إضافة التحقق من خطوتين', + add_mfa_description: 'تم تمكين التحقق من خطوتين. حدد طريقة التحقق الثانية لتسجيل الدخول الآمن.', + verify_mfa_factors: 'التحقق من خطوتين', + verify_mfa_description: + 'تم تمكين التحقق من خطوتين لهذا الحساب. يرجى تحديد الطريقة الثانية للتحقق من هويتك.', + add_authenticator_app: 'إضافة تطبيق المصادقة', + step: 'الخطوة {{step, number}}: {{content}}', + scan_qr_code: 'مسح رمز الاستجابة السريعة هذا', + scan_qr_code_description: + 'مسح رمز الاستجابة السريعة التالي باستخدام تطبيق المصادقة الخاص بك ، مثل Google Authenticator و Duo Mobile و Authy ، إلخ.', + qr_code_not_available: 'لا يمكن مسح رمز الاستجابة السريعة؟', + copy_and_paste_key: 'انسخ والصق المفتاح', + copy_and_paste_key_description: + 'انسخ والصق المفتاح التالي في تطبيق المصادقة الخاص بك ، مثل Google Authenticator و Duo Mobile و Authy ، إلخ.', + want_to_scan_qr_code: 'هل ترغب في مسح رمز الاستجابة السريعة؟', + enter_one_time_code: 'أدخل الرمز لمرة واحدة', + enter_one_time_code_link_description: + 'أدخل رمز التحقق المكون من 6 أرقام الذي تم إنشاؤه بواسطة تطبيق المصادقة.', + enter_one_time_code_description: + 'تم تمكين التحقق من خطوتين لهذا الحساب. يرجى إدخال الرمز لمرة واحدة المعروض على تطبيق المصادقة المرتبط بك.', + link_another_mfa_factor: 'التبديل إلى طريقة أخرى', + save_backup_code: 'احفظ رمز النسخ الاحتياطي الخاص بك', + save_backup_code_description: + 'يمكنك استخدام أحد هذه الرموز الاحتياطية للوصول إلى حسابك إذا واجهتك مشكلة أثناء التحقق من خطوتين بطرق أخرى. يمكن استخدام كل رمز مرة واحدة فقط.', + backup_code_hint: 'تأكد من نسخها وحفظها في مكان آمن.', + enter_a_backup_code: 'أدخل رمز النسخ الاحتياطي', + enter_backup_code_description: + 'أدخل رمز النسخ الاحتياطي الذي حفظته عند تمكين التحقق من خطوتين في البداية.', + create_a_passkey: 'إنشاء مفتاح المرور', + create_passkey_description: + 'سجل مفتاح المرور الخاص بك باستخدام بيومتريات الجهاز أو مفاتيح الأمان (مثل YubiKey) أو الأساليب المتاحة الأخرى.', + try_another_verification_method: 'جرب طريقة أخرى للتحقق', + verify_via_passkey: 'التحقق عبر مفتاح المرور', + verify_via_passkey_description: + 'استخدم مفتاح المرور للتحقق من خلال كلمة المرور الخاصة بجهازك أو البيومتريات ، أو مسح رمز الاستجابة السريعة ، أو استخدام مفتاح الأمان USB مثل YubiKey.', + secret_key_copied: 'تم نسخ المفتاح السري.', + backup_code_copied: 'تم نسخ رمز النسخ الاحتياطي.', + webauthn_not_ready: 'WebAuthn غير جاهز حاليًا. يرجى المحاولة مرة أخرى لاحقًا.', + webauthn_not_supported: 'WebAuthn غير مدعوم في هذا المتصفح.', + webauthn_failed_to_create: 'فشل في الإنشاء. يرجى المحاولة مرة أخرى.', + webauthn_failed_to_verify: 'فشل التحقق. يرجى المحاولة مرة أخرى.', +}; + +export default Object.freeze(mfa); diff --git a/packages/phrases-experience/src/locales/ar-ar/secondary.ts b/packages/phrases-experience/src/locales/ar-ar/secondary.ts new file mode 100644 index 000000000..68dda566b --- /dev/null +++ b/packages/phrases-experience/src/locales/ar-ar/secondary.ts @@ -0,0 +1,6 @@ +const secondary = { + social_bind_with: + 'هل لديك حساب بالفعل؟ قم بتسجيل الدخول لربط {{methods, list(type: disjunction;)}} بالهوية الاجتماعية الخاصة بك.', +}; + +export default Object.freeze(secondary); diff --git a/packages/phrases-experience/src/locales/ar-ar/user-scopes.ts b/packages/phrases-experience/src/locales/ar-ar/user-scopes.ts new file mode 100644 index 000000000..72a4d35f6 --- /dev/null +++ b/packages/phrases-experience/src/locales/ar-ar/user-scopes.ts @@ -0,0 +1,15 @@ +const user_scopes = { + descriptions: { + custom_data: 'بياناتك المخصصة', + email: 'عنوان بريدك الإلكتروني', + phone: 'رقم هاتفك', + profile: 'اسمك، اسم المستخدم، الصورة الرمزية ومعلومات الملف الشخصي الأخرى', + roles: 'الأدوار الخاصة بك', + identities: 'هوياتك الاجتماعية المرتبطة', + 'urn:logto:scope:organizations': 'معلومات منظماتك', + 'urn:logto:scope:organization_roles': 'أدوار المنظمة الخاصة بك', + address: 'عنوانك', + }, +}; + +export default Object.freeze(user_scopes); diff --git a/packages/phrases/src/index.ts b/packages/phrases/src/index.ts index 96adfb509..574e42d47 100644 --- a/packages/phrases/src/index.ts +++ b/packages/phrases/src/index.ts @@ -3,6 +3,7 @@ import { languages, fallback } from '@logto/language-kit'; import type { DeepPartial, NormalizeKeyPaths } from '@silverhand/essentials'; import { z } from 'zod'; +import arAR from './locales/ar-ar/index.js'; import de from './locales/de/index.js'; import en from './locales/en/index.js'; import es from './locales/es/index.js'; @@ -26,6 +27,7 @@ export type DefaultLocale = 'en'; export type I18nKey = NormalizeKeyPaths; export const builtInLanguages = [ + 'ar-AR', 'de', 'en', 'es', @@ -72,6 +74,7 @@ export type Resource = Record< }; const resource: Resource = { + 'ar-AR': arAR, de, en, es, diff --git a/packages/phrases/src/locales/ar-ar/errors/application.ts b/packages/phrases/src/locales/ar-ar/errors/application.ts new file mode 100644 index 000000000..46f895f8a --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/errors/application.ts @@ -0,0 +1,25 @@ +const application = { + invalid_type: 'يمكن أن تحتوي التطبيقات الآلية فقط على أدوار مرتبطة.', + role_exists: 'تمت إضافة معرف الدور {{roleId}} بالفعل إلى هذا التطبيق.', + invalid_role_type: 'لا يمكن تعيين دور نوع المستخدم لتطبيق آلي إلى آلة.', + invalid_third_party_application_type: + 'يمكن تحديد التطبيقات الويب التقليدية فقط كتطبيقات طرف ثالث.', + third_party_application_only: 'الميزة متاحة فقط لتطبيقات الطرف الثالث.', + user_consent_scopes_not_found: 'نطاقات موافقة المستخدم غير صالحة.', + consent_management_api_scopes_not_allowed: + 'لا يُسمح باستخدام نطاقات واجهة برمجة التطبيقات لإدارة الموافقة.', + protected_app_metadata_is_required: 'مطلوب بيانات التطبيق المحمي.', + protected_app_not_configured: + 'مزود التطبيق المحمي غير مكون. هذه الميزة غير متاحة في النسخة المفتوحة المصدر.', + cloudflare_unknown_error: 'حدث خطأ غير معروف عند طلب واجهة برمجة التطبيقات من Cloudflare', + protected_application_only: 'الميزة متاحة فقط للتطبيقات المحمية.', + protected_application_misconfigured: 'تم تكوين التطبيق المحمي بشكل غير صحيح.', + protected_application_subdomain_exists: 'تم استخدام نطاق فرعي للتطبيق المحمي بالفعل.', + invalid_subdomain: 'نطاق فرعي غير صالح.', + custom_domain_not_found: 'لم يتم العثور على نطاق مخصص.', + should_delete_custom_domains_first: 'يجب حذف النطاقات المخصصة أولاً.', + no_legacy_secret_found: 'لا يحتوي التطبيق على سر تراثي.', + secret_name_exists: 'اسم السر موجود بالفعل.', +}; + +export default Object.freeze(application); diff --git a/packages/phrases/src/locales/ar-ar/errors/auth.ts b/packages/phrases/src/locales/ar-ar/errors/auth.ts new file mode 100644 index 000000000..fbeea4549 --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/errors/auth.ts @@ -0,0 +1,12 @@ +const auth = { + authorization_header_missing: 'تفقد رأس الطلب (Authorization header).', + authorization_token_type_not_supported: 'نوع التصريح غير مدعوم.', + unauthorized: 'غير مصرح. يرجى التحقق من بيانات الاعتماد ونطاقها.', + forbidden: 'ممنوع. يرجى التحقق من أدوار المستخدم والأذونات.', + expected_role_not_found: + 'لم يتم العثور على الدور المتوقع. يرجى التحقق من أدوار المستخدم والأذونات.', + jwt_sub_missing: 'القيمة `sub` مفقودة في JWT.', + require_re_authentication: 'مطلوب إعادة المصادقة لإجراء حماية.', +}; + +export default Object.freeze(auth); diff --git a/packages/phrases/src/locales/ar-ar/errors/connector.ts b/packages/phrases/src/locales/ar-ar/errors/connector.ts new file mode 100644 index 000000000..12f450b7b --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/errors/connector.ts @@ -0,0 +1,39 @@ +const connector = { + general: 'حدث خطأ في الموصل: {{errorDescription}}', + not_found: 'تعذر العثور على أي موصل متاح للنوع: {{type}}.', + not_enabled: 'الموصل غير ممكّن.', + invalid_metadata: 'بيانات الموصل غير صالحة.', + invalid_config_guard: 'حارس تكوين الموصل غير صالح.', + unexpected_type: 'نوع الموصل غير متوقع.', + invalid_request_parameters: 'الطلب يحتوي على معلمة(معلمات) إدخال غير صحيحة.', + insufficient_request_parameters: 'قد يفتقر الطلب إلى بعض المعلمات الإدخال.', + invalid_config: 'تكوين الموصل غير صالح.', + invalid_certificate: 'شهادة الموصل غير صالحة، يرجى التأكد من أن الشهادة مشفرة بترميز PEM.', + invalid_response: 'استجابة الموصل غير صالحة.', + template_not_found: 'تعذر العثور على القالب الصحيح في تكوين الموصل.', + template_not_supported: 'الموصل لا يدعم نوع القالب هذا.', + rate_limit_exceeded: 'تم تجاوز حد معدل التشغيل. يرجى المحاولة مرة أخرى لاحقًا.', + not_implemented: '{{method}}: لم يتم تنفيذه بعد.', + social_invalid_access_token: 'رمز الوصول للموصل غير صالح.', + invalid_auth_code: 'رمز المصادقة للموصل غير صالح.', + social_invalid_id_token: 'رمز الهوية للموصل غير صالح.', + authorization_failed: 'فشلت عملية ترخيص المستخدم.', + social_auth_code_invalid: 'تعذر الحصول على رمز الوصول، يرجى التحقق من رمز الترخيص.', + more_than_one_sms: 'عدد موصلات الرسائل القصيرة أكبر من 1.', + more_than_one_email: 'عدد موصلات البريد الإلكتروني أكبر من 1.', + more_than_one_connector_factory: + 'تم العثور على مصانع موصل متعددة (بالمعرف {{connectorIds}})، قد تقوم بإلغاء تثبيت تلك غير الضرورية.', + db_connector_type_mismatch: 'هناك موصل في قاعدة البيانات لا يتطابق مع النوع.', + not_found_with_connector_id: 'تعذر العثور على الموصل بالمعرف القياسي المحدد.', + multiple_instances_not_supported: 'لا يمكن إنشاء عدة مثيلات باستخدام الموصل القياسي المحدد.', + invalid_type_for_syncing_profile: + 'يمكنك مزامنة ملف تعريف المستخدم فقط مع موصلات التواصل الاجتماعي.', + can_not_modify_target: 'لا يمكن تعديل موصل الهدف.', + should_specify_target: 'يجب تحديد الهدف.', + multiple_target_with_same_platform: + 'لا يمكن أن يكون لديك موصلات اجتماعية متعددة لها نفس الهدف والمنصة.', + cannot_overwrite_metadata_for_non_standard_connector: + 'لا يمكن استبدال بيانات الموصل غير القياسي هذا.', +}; + +export default Object.freeze(connector); diff --git a/packages/phrases/src/locales/ar-ar/errors/domain.ts b/packages/phrases/src/locales/ar-ar/errors/domain.ts new file mode 100644 index 000000000..3e8bad6c5 --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/errors/domain.ts @@ -0,0 +1,12 @@ +const domain = { + not_configured: 'مزود اسم المضيف غير مكون.', + cloudflare_data_missing: 'البيانات الخاصة بـ cloudflare مفقودة، يرجى التحقق.', + cloudflare_unknown_error: 'حدث خطأ غير معروف عند طلب واجهة برمجة تطبيقات Cloudflare', + cloudflare_response_error: 'تم الحصول على استجابة غير متوقعة من Cloudflare.', + limit_to_one_domain: 'يمكنك فقط امتلاك نطاق مخصص واحد.', + hostname_already_exists: 'هذا النطاق موجود بالفعل في خادمنا.', + cloudflare_not_found: 'لا يمكن العثور على اسم المضيف في Cloudflare', + domain_is_not_allowed: 'هذا النطاق غير مسموح به.', +}; + +export default Object.freeze(domain); diff --git a/packages/phrases/src/locales/ar-ar/errors/entity.ts b/packages/phrases/src/locales/ar-ar/errors/entity.ts new file mode 100644 index 000000000..6d0b3aeff --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/errors/entity.ts @@ -0,0 +1,13 @@ +const entity = { + invalid_input: 'إدخال غير صالح. يجب ألا يكون قائمة القيم فارغة.', + create_failed: 'فشل في إنشاء {{name}}.', + db_constraint_violated: 'انتهاك قيد قاعدة البيانات.', + not_exists: 'لا يوجد {{name}}.', + not_exists_with_id: 'لا يوجد {{name}} بالمعرف `{{id}}`.', + not_found: 'المورد غير موجود.', + relation_foreign_key_not_found: + 'لا يمكن العثور على مفتاح أجنبي واحد أو أكثر. يرجى التحقق من الإدخال والتأكد من وجود جميع الكيانات المشار إليها.', + unique_integrity_violation: 'الكيان موجود بالفعل. يرجى التحقق من الإدخال والمحاولة مرة أخرى.', +}; + +export default Object.freeze(entity); diff --git a/packages/phrases/src/locales/ar-ar/errors/guard.ts b/packages/phrases/src/locales/ar-ar/errors/guard.ts new file mode 100644 index 000000000..6c3847c3e --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/errors/guard.ts @@ -0,0 +1,10 @@ +const guard = { + invalid_input: 'الطلب {{type}} غير صالح.', + invalid_pagination: 'قيمة ترقيم الصفحات في الطلب غير صالحة.', + can_not_get_tenant_id: 'غير قادر على الحصول على معرف المستأجر من الطلب.', + file_size_exceeded: 'تم تجاوز حجم الملف.', + mime_type_not_allowed: 'نوع MIME غير مسموح به.', + not_allowed_for_admin_tenant: 'غير مسموح للمستأجر الإداري.', +}; + +export default Object.freeze(guard); diff --git a/packages/phrases/src/locales/ar-ar/errors/hook.ts b/packages/phrases/src/locales/ar-ar/errors/hook.ts new file mode 100644 index 000000000..5caa00565 --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/errors/hook.ts @@ -0,0 +1,7 @@ +const hook = { + missing_events: 'يجب أن تقدم على الأقل حدث واحد.', + send_test_payload_failed: 'فشل في إرسال حمولة الاختبار: {{message}}', + endpoint_responded_with_error: 'ردت النقطة النهائية بخطأ.', +}; + +export default Object.freeze(hook); diff --git a/packages/phrases/src/locales/ar-ar/errors/index.ts b/packages/phrases/src/locales/ar-ar/errors/index.ts new file mode 100644 index 000000000..40df6998e --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/errors/index.ts @@ -0,0 +1,55 @@ +import application from './application.js'; +import auth from './auth.js'; +import connector from './connector.js'; +import domain from './domain.js'; +import entity from './entity.js'; +import guard from './guard.js'; +import hook from './hook.js'; +import jwt_customizer from './jwt-customizer.js'; +import localization from './localization.js'; +import log from './log.js'; +import oidc from './oidc.js'; +import organization from './organization.js'; +import password from './password.js'; +import request from './request.js'; +import resource from './resource.js'; +import role from './role.js'; +import scope from './scope.js'; +import session from './session.js'; +import sign_in_experiences from './sign-in-experiences.js'; +import single_sign_on from './single-sign-on.js'; +import storage from './storage.js'; +import subscription from './subscription.js'; +import swagger from './swagger.js'; +import user from './user.js'; +import verification_code from './verification-code.js'; + +const errors = { + request, + auth, + guard, + oidc, + user, + password, + session, + connector, + verification_code, + sign_in_experiences, + jwt_customizer, + localization, + swagger, + entity, + log, + role, + scope, + storage, + resource, + hook, + domain, + subscription, + application, + organization, + single_sign_on, +}; + +export default Object.freeze(errors); diff --git a/packages/phrases/src/locales/ar-ar/errors/jwt-customizer.ts b/packages/phrases/src/locales/ar-ar/errors/jwt-customizer.ts new file mode 100644 index 000000000..d09bfd6fb --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/errors/jwt-customizer.ts @@ -0,0 +1,6 @@ +const jwt_customizer = { + general: 'حدث خطأ أثناء تخصيص رمز JWT. يرجى المحاولة مرة أخرى لاحقًا.', + can_not_create_for_admin_tenant: 'لا يمكن إنشاء مخصص رمز JWT للمستأجر الإداري.', +}; + +export default Object.freeze(jwt_customizer); diff --git a/packages/phrases/src/locales/ar-ar/errors/localization.ts b/packages/phrases/src/locales/ar-ar/errors/localization.ts new file mode 100644 index 000000000..eb3f1ddca --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/errors/localization.ts @@ -0,0 +1,7 @@ +const localization = { + cannot_delete_default_language: 'تم تعيين {{languageTag}} كلغة افتراضية ولا يمكن حذفها.', + invalid_translation_structure: + 'هياكل بيانات غير صالحة. يرجى التحقق من المدخلات الخاصة بك والمحاولة مرة أخرى.', +}; + +export default Object.freeze(localization); diff --git a/packages/phrases/src/locales/ar-ar/errors/log.ts b/packages/phrases/src/locales/ar-ar/errors/log.ts new file mode 100644 index 000000000..bed382b31 --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/errors/log.ts @@ -0,0 +1,5 @@ +const log = { + invalid_type: 'نوع السجل غير صالح.', +}; + +export default Object.freeze(log); diff --git a/packages/phrases/src/locales/ar-ar/errors/oidc.ts b/packages/phrases/src/locales/ar-ar/errors/oidc.ts new file mode 100644 index 000000000..9b067f179 --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/errors/oidc.ts @@ -0,0 +1,22 @@ +const oidc = { + aborted: 'أنهى المستخدم التفاعل.', + invalid_scope: 'نطاق غير صالح: {{error_description}}.', + invalid_token: 'الرمز غير صالح.', + invalid_client_metadata: 'بيانات العميل غير صالحة.', + insufficient_scope: 'الرمز ناقص في النطاق `{{scope}}`.', + invalid_request: 'الطلب غير صالح.', + invalid_grant: 'طلب المنحة غير صالح.', + invalid_redirect_uri: '`redirect_uri` لا يتطابق مع أي من `redirect_uris` المسجلة للعميل.', + access_denied: 'تم رفض الوصول.', + invalid_target: 'مؤشر المورد غير صالح.', + unsupported_grant_type: 'نوع `grant_type` المطلوب غير مدعوم.', + unsupported_response_mode: 'طريقة الاستجابة `response_mode` المطلوبة غير مدعومة.', + unsupported_response_type: 'نوع الاستجابة `response_type` المطلوب غير مدعوم.', + provider_error: 'خطأ داخلي في OIDC: {{message}}.', + server_error: 'حدث خطأ OIDC غير معروف. يرجى المحاولة مرة أخرى لاحقًا.', + provider_error_fallback: 'حدث خطأ OIDC: {{code}}.', + key_required: 'مطلوب مفتاح واحد على الأقل.', + key_not_found: 'لم يتم العثور على المفتاح بالمعرف {{id}}.', +}; + +export default Object.freeze(oidc); diff --git a/packages/phrases/src/locales/ar-ar/errors/organization.ts b/packages/phrases/src/locales/ar-ar/errors/organization.ts new file mode 100644 index 000000000..98b4616cb --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/errors/organization.ts @@ -0,0 +1,5 @@ +const organization = { + require_membership: 'يجب أن يكون المستخدم عضوًا في المنظمة للمتابعة.', +}; + +export default Object.freeze(organization); diff --git a/packages/phrases/src/locales/ar-ar/errors/password.ts b/packages/phrases/src/locales/ar-ar/errors/password.ts new file mode 100644 index 000000000..c145a72a8 --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/errors/password.ts @@ -0,0 +1,7 @@ +const password = { + unsupported_encryption_method: 'طريقة التشفير {{name}} غير مدعومة.', + pepper_not_found: 'رمز تشفير كلمة المرور غير موجود. يرجى التحقق من البيئة الأساسية الخاصة بك.', + rejected: 'تم رفض كلمة المرور. يرجى التحقق مما إذا كانت كلمة المرور تلبي المتطلبات.', +}; + +export default Object.freeze(password); diff --git a/packages/phrases/src/locales/ar-ar/errors/request.ts b/packages/phrases/src/locales/ar-ar/errors/request.ts new file mode 100644 index 000000000..89129984a --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/errors/request.ts @@ -0,0 +1,6 @@ +const request = { + invalid_input: 'الإدخال غير صالح. {{details}}', + general: 'حدث خطأ في الطلب.', +}; + +export default Object.freeze(request); diff --git a/packages/phrases/src/locales/ar-ar/errors/resource.ts b/packages/phrases/src/locales/ar-ar/errors/resource.ts new file mode 100644 index 000000000..8c37f93a6 --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/errors/resource.ts @@ -0,0 +1,7 @@ +const resource = { + resource_identifier_in_use: 'معرف الواجهة البرمجية {{indicator}} قيد الاستخدام بالفعل', + cannot_delete_management_api: 'لا يمكن حذف واجهة برمجة التطبيقات الإدارية لـ Logto.', + cannot_modify_management_api: 'لا يمكن تعديل واجهة برمجة التطبيقات الإدارية لـ Logto.', +}; + +export default Object.freeze(resource); diff --git a/packages/phrases/src/locales/ar-ar/errors/role.ts b/packages/phrases/src/locales/ar-ar/errors/role.ts new file mode 100644 index 000000000..1dcfee76e --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/errors/role.ts @@ -0,0 +1,14 @@ +const role = { + name_in_use: 'اسم الدور {{name}} مستخدم بالفعل', + scope_exists: 'تمت إضافة معرف النطاق {{scopeId}} بالفعل إلى هذا الدور', + management_api_scopes_not_assignable_to_user_role: + 'لا يمكن تعيين نطاقات واجهة برمجة التطبيقات لإدارة الدور لدور المستخدم.', + user_exists: 'تمت إضافة معرف المستخدم {{userId}} بالفعل إلى هذا الدور', + application_exists: 'تمت إضافة معرف التطبيق {{applicationId}} بالفعل إلى هذا الدور', + default_role_missing: + 'بعض أسماء الأدوار الافتراضية غير موجودة في قاعدة البيانات، يرجى التأكد من إنشاء الأدوار أولاً', + internal_role_violation: + 'قد تحاول تحديث أو حذف دور داخلي ممنوع بواسطة Logto. إذا كنت تقوم بإنشاء دور جديد، جرب اسمًا آخر لا يبدأ بـ "#internal:".', +}; + +export default Object.freeze(role); diff --git a/packages/phrases/src/locales/ar-ar/errors/scope.ts b/packages/phrases/src/locales/ar-ar/errors/scope.ts new file mode 100644 index 000000000..09eb67a72 --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/errors/scope.ts @@ -0,0 +1,6 @@ +const scope = { + name_exists: 'اسم النطاق {{name}} مستخدم بالفعل', + name_with_space: 'اسم النطاق لا يمكن أن يحتوي على أي مسافات.', +}; + +export default Object.freeze(scope); diff --git a/packages/phrases/src/locales/ar-ar/errors/session.ts b/packages/phrases/src/locales/ar-ar/errors/session.ts new file mode 100644 index 000000000..4585a9d55 --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/errors/session.ts @@ -0,0 +1,44 @@ +const session = { + not_found: 'الجلسة غير موجودة. يرجى العودة وتسجيل الدخول مرة أخرى.', + invalid_credentials: 'اسم المستخدم أو كلمة المرور غير صحيحة. يرجى التحقق من المدخلات الخاصة بك.', + invalid_sign_in_method: 'طريقة تسجيل الدخول الحالية غير متاحة.', + invalid_connector_id: 'تعذر العثور على موصل متاح بالمعرف {{connectorId}}.', + insufficient_info: 'معلومات تسجيل الدخول غير كافية.', + connector_id_mismatch: 'معرف الموصل غير متطابق مع سجل الجلسة.', + connector_session_not_found: 'جلسة الموصل غير موجودة. يرجى العودة وتسجيل الدخول مرة أخرى.', + verification_session_not_found: 'لم يتم التحقق بنجاح. أعد بدء عملية التحقق وحاول مرة أخرى.', + verification_expired: 'انتهت مدة الاتصال. قم بالتحقق مرة أخرى لضمان سلامة حسابك.', + verification_blocked_too_many_attempts: + 'الكثير من المحاولات في وقت قصير. يرجى المحاولة مرة أخرى {{relativeTime}}.', + unauthorized: 'يرجى تسجيل الدخول أولاً.', + unsupported_prompt_name: 'اسم الإشعار غير مدعوم.', + forgot_password_not_enabled: 'نسيت كلمة المرور غير ممكّنة.', + verification_failed: 'لم يتم التحقق بنجاح. أعد بدء عملية التحقق وحاول مرة أخرى.', + connector_validation_session_not_found: 'جلسة الموصل للتحقق من الرمز غير موجودة.', + csrf_token_mismatch: 'عدم تطابق رمز CSRF.', + identifier_not_found: 'معرف المستخدم غير موجود. يرجى العودة وتسجيل الدخول مرة أخرى.', + interaction_not_found: 'جلسة التفاعل غير موجودة. يرجى العودة وبدء الجلسة مرة أخرى.', + invalid_interaction_type: 'هذا الإجراء غير مدعوم للتفاعل الحالي. يرجى بدء جلسة جديدة.', + not_supported_for_forgot_password: 'هذا الإجراء غير مدعوم لنسيان كلمة المرور.', + identity_conflict: 'تم اكتشاف تضارب في الهوية. يرجى بدء جلسة جديدة للمتابعة بهوية مختلفة.', + identifier_not_verified: + 'لم يتم التحقق من المعرف المقدم {{identifier}}. يرجى إنشاء سجل التحقق لهذا المعرف واستكمال عملية التحقق.', + mfa: { + require_mfa_verification: 'مطلوب التحقق من MFA لتسجيل الدخول.', + mfa_sign_in_only: 'MFA متاحة فقط لجلسة تسجيل الدخول.', + pending_info_not_found: 'لم يتم العثور على معلومات MFA المعلقة ، يرجى بدء MFA أولاً.', + invalid_totp_code: 'رمز TOTP غير صالح.', + webauthn_verification_failed: 'فشل التحقق من WebAuthn.', + webauthn_verification_not_found: 'لم يتم العثور على التحقق من WebAuthn.', + bind_mfa_existed: 'MFA موجود بالفعل.', + backup_code_can_not_be_alone: 'لا يمكن أن يكون رمز النسخ الاحتياطي هو الـ MFA الوحيد.', + backup_code_required: 'مطلوب رمز النسخ الاحتياطي.', + invalid_backup_code: 'رمز النسخ الاحتياطي غير صالح.', + mfa_policy_not_user_controlled: 'سياسة MFA ليست تحت سيطرة المستخدم.', + mfa_factor_not_enabled: 'عامل MFA غير ممكّن.', + }, + sso_enabled: + 'تم تمكين تسجيل الدخول الموحد لهذا البريد الإلكتروني المحدد. يرجى تسجيل الدخول باستخدام SSO.', +}; + +export default Object.freeze(session); diff --git a/packages/phrases/src/locales/ar-ar/errors/sign-in-experiences.ts b/packages/phrases/src/locales/ar-ar/errors/sign-in-experiences.ts new file mode 100644 index 000000000..b4fe2f617 --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/errors/sign-in-experiences.ts @@ -0,0 +1,22 @@ +const sign_in_experiences = { + empty_content_url_of_terms_of_use: + 'عنوان URL لمحتوى "شروط الاستخدام" فارغ. يرجى إضافة عنوان URL للمحتوى إذا تم تمكين "شروط الاستخدام".', + empty_social_connectors: + 'الموصلات الاجتماعية فارغة. يرجى إضافة الموصلات الاجتماعية الممكّنة عند تمكين طريقة تسجيل الدخول الاجتماعية.', + enabled_connector_not_found: 'لم يتم العثور على موصل {{type}} الممكّن.', + not_one_and_only_one_primary_sign_in_method: + 'يجب أن يكون هناك طريقة واحدة وفقط لتسجيل الدخول الأساسية. يرجى التحقق من المدخلات الخاصة بك.', + username_requires_password: 'يجب تمكين تعيين كلمة مرور لمعرف تسجيل الدخول باسم المستخدم.', + passwordless_requires_verify: 'يجب تمكين التحقق لمعرف تسجيل الدخول بالبريد الإلكتروني / الهاتف.', + miss_sign_up_identifier_in_sign_in: 'يجب أن تحتوي طرق تسجيل الدخول على معرف التسجيل.', + password_sign_in_must_be_enabled: + 'يجب تمكين تسجيل الدخول بكلمة المرور عندما يكون تعيين كلمة المرور مطلوبًا في التسجيل.', + code_sign_in_must_be_enabled: + 'يجب تمكين تسجيل الدخول برمز التحقق عندما لا يكون تعيين كلمة المرور مطلوبًا في التسجيل.', + unsupported_default_language: 'هذه اللغة - {{language}} غير مدعومة في الوقت الحالي.', + at_least_one_authentication_factor: 'يجب عليك تحديد عامل مصادقة واحد على الأقل.', + backup_code_cannot_be_enabled_alone: 'لا يمكن تمكين رمز النسخ الاحتياطي بمفرده.', + duplicated_mfa_factors: 'عوامل MFA مكررة.', +}; + +export default Object.freeze(sign_in_experiences); diff --git a/packages/phrases/src/locales/ar-ar/errors/single-sign-on.ts b/packages/phrases/src/locales/ar-ar/errors/single-sign-on.ts new file mode 100644 index 000000000..c90a5211c --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/errors/single-sign-on.ts @@ -0,0 +1,8 @@ +const single_sign_on = { + forbidden_domains: 'لا يُسمح بنطاقات البريد الإلكتروني العامة.', + duplicated_domains: 'هناك نطاقات مكررة.', + invalid_domain_format: 'تنسيق النطاق غير صالح.', + duplicate_connector_name: 'اسم الموصل مكرر. يرجى اختيار اسم مختلف.', +}; + +export default Object.freeze(single_sign_on); diff --git a/packages/phrases/src/locales/ar-ar/errors/storage.ts b/packages/phrases/src/locales/ar-ar/errors/storage.ts new file mode 100644 index 000000000..f17cd7ec1 --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/errors/storage.ts @@ -0,0 +1,7 @@ +const storage = { + not_configured: 'مزود التخزين غير مكون.', + missing_parameter: 'معلمة مفقودة {{parameter}} لمزود التخزين.', + upload_error: 'فشل في تحميل الملف إلى مزود التخزين.', +}; + +export default Object.freeze(storage); diff --git a/packages/phrases/src/locales/ar-ar/errors/subscription.ts b/packages/phrases/src/locales/ar-ar/errors/subscription.ts new file mode 100644 index 000000000..3cc042ff5 --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/errors/subscription.ts @@ -0,0 +1,7 @@ +const subscription = { + limit_exceeded: 'لقد وصلت إلى الحد الأقصى لخطة الاشتراك الخاصة بك.', + get_plan_failed: 'غير قادر على الحصول على خطة الاشتراك للمستأجر.', + tenant_suspended: 'تم تعليق المستأجر. يرجى الاتصال بالمسؤول الخاص بك.', +}; + +export default Object.freeze(subscription); diff --git a/packages/phrases/src/locales/ar-ar/errors/swagger.ts b/packages/phrases/src/locales/ar-ar/errors/swagger.ts new file mode 100644 index 000000000..458699d8f --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/errors/swagger.ts @@ -0,0 +1,7 @@ +const swagger = { + invalid_zod_type: 'نوع Zod غير صالح. يرجى التحقق من تكوين حارس المسار.', + not_supported_zod_type_for_params: + 'نوع Zod غير مدعوم للمعلمات. يرجى التحقق من تكوين حارس المسار.', +}; + +export default Object.freeze(swagger); diff --git a/packages/phrases/src/locales/ar-ar/errors/user.ts b/packages/phrases/src/locales/ar-ar/errors/user.ts new file mode 100644 index 000000000..5212c1ea1 --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/errors/user.ts @@ -0,0 +1,41 @@ +const user = { + username_already_in_use: 'اسم المستخدم هذا مستخدم بالفعل.', + email_already_in_use: 'هذا البريد الإلكتروني مرتبط بحساب موجود بالفعل.', + phone_already_in_use: 'هذا الرقم الهاتفي مرتبط بحساب موجود بالفعل.', + invalid_email: 'عنوان البريد الإلكتروني غير صالح.', + invalid_phone: 'رقم الهاتف غير صالح.', + email_not_exist: 'عنوان البريد الإلكتروني غير مسجل حتى الآن.', + phone_not_exist: 'رقم الهاتف غير مسجل حتى الآن.', + identity_not_exist: 'الحساب الاجتماعي غير مسجل حتى الآن.', + identity_already_in_use: 'تم ربط الحساب الاجتماعي بحساب موجود بالفعل.', + social_account_exists_in_profile: 'لقد قمت بربط هذا الحساب الاجتماعي بالفعل.', + cannot_delete_self: 'لا يمكنك حذف نفسك.', + sign_up_method_not_enabled: 'طريقة التسجيل هذه غير ممكّنة.', + sign_in_method_not_enabled: 'طريقة تسجيل الدخول هذه غير ممكّنة.', + same_password: 'لا يمكن أن تكون كلمة المرور الجديدة هي نفس كلمة المرور القديمة.', + password_required_in_profile: 'يجب عليك تعيين كلمة مرور قبل تسجيل الدخول.', + new_password_required_in_profile: 'يجب عليك تعيين كلمة مرور جديدة.', + password_exists_in_profile: 'كلمة المرور موجودة بالفعل في ملف التعريف الخاص بك.', + username_required_in_profile: 'يجب عليك تعيين اسم مستخدم قبل تسجيل الدخول.', + username_exists_in_profile: 'اسم المستخدم موجود بالفعل في ملف التعريف الخاص بك.', + email_required_in_profile: 'يجب عليك إضافة عنوان بريد إلكتروني قبل تسجيل الدخول.', + email_exists_in_profile: 'تم ربط ملف التعريف الخاص بك بالفعل بعنوان بريد إلكتروني.', + phone_required_in_profile: 'يجب عليك إضافة رقم هاتف قبل تسجيل الدخول.', + phone_exists_in_profile: 'تم ربط ملف التعريف الخاص بك بالفعل برقم هاتف.', + email_or_phone_required_in_profile: + 'يجب عليك إضافة عنوان بريد إلكتروني أو رقم هاتف قبل تسجيل الدخول.', + suspended: 'تم تعليق هذا الحساب.', + user_not_exist: 'المستخدم بالمعرف {{ identifier }} غير موجود.', + missing_profile: 'يجب عليك تقديم معلومات إضافية قبل تسجيل الدخول.', + role_exists: 'تمت إضافة معرف الدور {{roleId}} بالفعل لهذا المستخدم.', + invalid_role_type: 'نوع الدور غير صالح، لا يمكن تعيين دور آلة إلى المستخدم.', + missing_mfa: 'يجب عليك ربط MFA الإضافي قبل تسجيل الدخول.', + totp_already_in_use: 'تم استخدام TOTP بالفعل.', + backup_code_already_in_use: 'تم استخدام رمز النسخ الاحتياطي بالفعل.', + password_algorithm_required: 'مطلوب خوارزمية كلمة المرور.', + password_and_digest: 'لا يمكنك تعيين كلمة مرور عادية ومعلومات تجزئة كلمة المرور معًا.', + /** UNTRANSLATED */ + personal_access_token_name_exists: 'Personal access token name already exists.', +}; + +export default Object.freeze(user); diff --git a/packages/phrases/src/locales/ar-ar/errors/verification-code.ts b/packages/phrases/src/locales/ar-ar/errors/verification-code.ts new file mode 100644 index 000000000..3e335087e --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/errors/verification-code.ts @@ -0,0 +1,11 @@ +const verification_code = { + phone_email_empty: 'كل من رقم الهاتف والبريد الإلكتروني فارغين.', + not_found: 'لم يتم العثور على رمز التحقق. يرجى إرسال رمز التحقق أولاً.', + phone_mismatch: 'عدم تطابق الهاتف. يرجى طلب رمز تحقق جديد.', + email_mismatch: 'عدم تطابق البريد الإلكتروني. يرجى طلب رمز تحقق جديد.', + code_mismatch: 'رمز التحقق غير صالح.', + expired: 'انتهت صلاحية رمز التحقق. يرجى طلب رمز تحقق جديد.', + exceed_max_try: 'تجاوز الحد الأقصى لمحاولات رمز التحقق. يرجى طلب رمز تحقق جديد.', +}; + +export default Object.freeze(verification_code); diff --git a/packages/phrases/src/locales/ar-ar/index.ts b/packages/phrases/src/locales/ar-ar/index.ts new file mode 100644 index 000000000..c732036fc --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/index.ts @@ -0,0 +1,13 @@ +import { type DeepPartial } from '@silverhand/essentials'; + +import type { LocalePhrase } from '../../types.js'; + +import errors from './errors/index.js'; +import translation from './translation/index.js'; + +const ar_ar = { + translation, + errors, +} satisfies DeepPartial; + +export default Object.freeze(ar_ar); diff --git a/packages/phrases/src/locales/ar-ar/translation/admin-console/api-resource-details.ts b/packages/phrases/src/locales/ar-ar/translation/admin-console/api-resource-details.ts new file mode 100644 index 000000000..1e68483b9 --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/translation/admin-console/api-resource-details.ts @@ -0,0 +1,38 @@ +const api_resource_details = { + page_title: 'تفاصيل مورد واجهة برمجة التطبيق', + back_to_api_resources: 'العودة إلى موارد واجهة برمجة التطبيق', + general_tab: 'عام', + permissions_tab: 'الصلاحيات', + settings: 'الإعدادات', + settings_description: + 'موارد واجهة برمجة التطبيق، المعروفة أيضًا بمؤشرات الموارد، تشير إلى الخدمات أو الموارد المستهدفة التي يتم طلبها، عادةً، بتنسيق متغير URI يمثل هوية المورد.', + management_api_settings_description: + 'واجهة برمجة التطبيق لـ Logto هي مجموعة شاملة من واجهات برمجة التطبيق التي تمكن المسؤولين من إدارة مجموعة واسعة من المهام المتعلقة بالهوية، وفرض سياسات الأمان، والامتثال للتشريعات والمعايير.', + management_api_notice: + 'تمثل هذه الواجهة برمجة التطبيق كيان Logto ولا يمكن تعديلها أو حذفها. قم بإنشاء تطبيق من الجهاز إلى التطبيق لاستدعاء واجهة برمجة التطبيق لـ Logto. تعرف على المزيد', + token_expiration_time_in_seconds: 'وقت انتهاء صلاحية الرمز (بالثواني)', + token_expiration_time_in_seconds_placeholder: 'أدخل وقت انتهاء صلاحية الرمز الخاص بك', + delete_description: + 'لا يمكن التراجع عن هذا الإجراء. سيتم حذف المورد واجهة برمجة التطبيق بشكل دائم. يرجى إدخال اسم مورد واجهة برمجة التطبيق {{name}} للتأكيد.', + enter_your_api_resource_name: 'أدخل اسم مورد واجهة برمجة التطبيق الخاص بك', + api_resource_deleted: 'تم حذف مورد واجهة برمجة التطبيق {{name}} بنجاح', + permission: { + create_button: 'إنشاء صلاحية', + create_title: 'إنشاء صلاحية', + create_subtitle: 'تعريف الصلاحيات (نطاقات) المطلوبة لهذه واجهة برمجة التطبيق.', + confirm_create: 'إنشاء صلاحية', + edit_title: 'تحرير صلاحية واجهة برمجة التطبيق', + edit_subtitle: 'تعريف الصلاحيات (نطاقات) المطلوبة لواجهة برمجة التطبيق {{resourceName}}.', + name: 'اسم الصلاحية', + name_placeholder: 'قراءة:مورد', + forbidden_space_in_name: 'يجب ألا يحتوي اسم الصلاحية على أي مسافات.', + description: 'الوصف', + description_placeholder: 'القدرة على قراءة الموارد', + permission_created: 'تم إنشاء الصلاحية {{name}} بنجاح', + delete_description: + 'إذا تم حذف هذه الصلاحية، فسيفقد المستخدم الذي يمتلك هذه الصلاحية الوصول الذي تمنحه.', + deleted: 'تم حذف الصلاحية "{{name}}" بنجاح.', + }, +}; + +export default Object.freeze(api_resource_details); diff --git a/packages/phrases/src/locales/ar-ar/translation/admin-console/api-resources.ts b/packages/phrases/src/locales/ar-ar/translation/admin-console/api-resources.ts new file mode 100644 index 000000000..5472cf702 --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/translation/admin-console/api-resources.ts @@ -0,0 +1,19 @@ +const api_resources = { + page_title: 'موارد واجهة برمجة التطبيقات', + title: 'موارد واجهة برمجة التطبيقات', + subtitle: 'تعريف واجهات برمجة التطبيقات التي يمكن لتطبيقاتك المصرح لها استخدامها', + create: 'إنشاء مورد واجهة برمجة التطبيقات', + api_name: 'اسم واجهة برمجة التطبيقات', + api_name_placeholder: 'أدخل اسم واجهة برمجة التطبيقات الخاصة بك', + api_identifier: 'معرف واجهة برمجة التطبيقات', + api_identifier_placeholder: 'https://معرف-واجهة-التطبيق-الخاصة-بك/', + api_identifier_tip: + 'المعرف الفريد لمورد واجهة برمجة التطبيقات. يجب أن يكون عنوان URI مطلقًا ولا يحتوي على جزء العنوان (#). يساوي معلمة المورد في OAuth 2.0.', + default_api: 'واجهة برمجة التطبيقات الافتراضية', + default_api_label: + 'يمكن تعيين واجهة برمجة التطبيقات الافتراضية صفر أو واحدة فقط لكل مستأجر.\nعند تعيين واجهة برمجة التطبيقات الافتراضية، يمكن تجاهل معلمة المورد في طلب المصادقة. ستستخدم عمليات تبادل الرموز المميزة لاحقًا تلك الواجهة برمجة التطبيقات كجمهور افتراضي، مما يؤدي إلى إصدار JWTs. تعرف على المزيد', + api_resource_created: 'تم إنشاء مورد واجهة برمجة التطبيقات {{name}} بنجاح', + invalid_resource_indicator_format: 'يجب أن يكون مؤشر واجهة البرمجة معرفًا صحيحًا لعنوان URI.', +}; + +export default Object.freeze(api_resources); diff --git a/packages/phrases/src/locales/ar-ar/translation/admin-console/application-details.ts b/packages/phrases/src/locales/ar-ar/translation/admin-console/application-details.ts new file mode 100644 index 000000000..81c75d4fb --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/translation/admin-console/application-details.ts @@ -0,0 +1,199 @@ +const application_details = { + page_title: 'تفاصيل التطبيق', + back_to_applications: 'العودة إلى التطبيقات', + check_guide: 'تحقق من الدليل', + settings: 'الإعدادات', + settings_description: + 'تعتبر "التطبيق" برنامجًا أو خدمة مسجلة يمكنه الوصول إلى معلومات المستخدم أو التصرف نيابة عن المستخدم. يساعد التطبيقات في التعرف على من يطلب ما من Logto والتعامل مع عملية تسجيل الدخول والإذن. قم بملء الحقول المطلوبة للمصادقة.', + integration: 'التكامل', + integration_description: + 'نشر مع العمال الآمنة لـ Logto ، المدعومة بشبكة Cloudflare للأداء على أعلى مستوى وبدء بارد بدون تأخير في جميع أنحاء العالم.', + service_configuration: 'تكوين الخدمة', + service_configuration_description: 'أكمل التكوينات اللازمة في خدمتك.', + session: 'الجلسة', + endpoints_and_credentials: 'نقاط النهاية وبيانات الاعتماد', + endpoints_and_credentials_description: + 'استخدم نقاط النهاية وبيانات الاعتماد التالية لإعداد اتصال OIDC في التطبيق الخاص بك.', + refresh_token_settings: 'رمز التحديث', + refresh_token_settings_description: 'إدارة قواعد رمز التحديث لهذا التطبيق.', + machine_logs: 'سجلات الجهاز', + application_name: 'اسم التطبيق', + application_name_placeholder: 'تطبيقي', + description: 'الوصف', + description_placeholder: 'أدخل وصف التطبيق الخاص بك', + config_endpoint: 'نقطة نهاية تكوين موفر الهوية المفتوحة', + issuer_endpoint: 'نقطة نهاية المصدر', + authorization_endpoint: 'نقطة نهاية الترخيص', + authorization_endpoint_tip: + 'نقطة النهاية لأداء المصادقة والترخيص. يُستخدم لـ OpenID Connect المصادقة.', + show_endpoint_details: 'إظهار تفاصيل النقطة النهائية', + hide_endpoint_details: 'إخفاء تفاصيل النقطة النهائية', + logto_endpoint: 'نقطة نهاية Logto', + application_id: 'معرف التطبيق', + application_id_tip: + 'معرف التطبيق الفريد الذي يتم إنشاؤه عادةً بواسطة Logto. يُشير أيضًا إلى "client_id" في OpenID Connect.', + application_secret: 'سر التطبيق', + application_secret_other: 'أسرار التطبيق', + redirect_uri: 'عنوان URI لإعادة التوجيه', + redirect_uris: 'عناوين URI لإعادة التوجيه', + redirect_uri_placeholder: 'https://your.website.com/app', + redirect_uri_placeholder_native: 'io.logto://callback', + redirect_uri_tip: + 'عنوان URI الذي يتم إعادة التوجيه إليه بعد تسجيل المستخدم (سواء نجح أم فشل). انظر OpenID Connect AuthRequest لمزيد من المعلومات.', + post_sign_out_redirect_uri: 'عنوان URI لإعادة التوجيه بعد تسجيل الخروج', + post_sign_out_redirect_uris: 'عناوين URI لإعادة التوجيه بعد تسجيل الخروج', + post_sign_out_redirect_uri_placeholder: 'https://your.website.com/home', + post_sign_out_redirect_uri_tip: + 'عنوان URI الذي يتم إعادة التوجيه إليه بعد تسجيل المستخدم الخروج (اختياري). قد لا يكون له تأثير عملي في بعض أنواع التطبيقات.', + cors_allowed_origins: 'المصادر المسموح بها لـ CORS', + cors_allowed_origins_placeholder: 'https://your.website.com', + cors_allowed_origins_tip: + 'بشكل افتراضي ، سيتم السماح بجميع مصادر عناوين URI لإعادة التوجيه. عادةً ما لا يلزم اتخاذ أي إجراء لهذا الحقل. انظر وثائق MDN للحصول على معلومات مفصلة.', + token_endpoint: 'نقطة نهاية الرمز', + user_info_endpoint: 'نقطة نهاية معلومات المستخدم', + enable_admin_access: 'تمكين الوصول الإداري', + enable_admin_access_label: + 'تمكين أو تعطيل الوصول إلى واجهة برمجة التطبيقات للإدارة. بمجرد التمكين ، يمكنك استخدام رموز الوصول لاستدعاء واجهة برمجة التطبيقات للإدارة نيابة عن هذا التطبيق.', + always_issue_refresh_token: 'إصدار رمز التحديث دائمًا', + always_issue_refresh_token_label: + 'عند التمكين ، ستصدر Logto دائمًا رموز التحديث ، بغض النظر عما إذا تم تقديم "prompt=consent" في طلب المصادقة. ومع ذلك ، يُنصح بعدم استخدام هذه الممارسة إلا إذا كان ضروريًا ، حيث أنها غير متوافقة مع OpenID Connect وقد تسبب مشاكل بالإمكان.', + refresh_token_ttl: 'مدة صلاحية رمز التحديث (TTL) بالأيام', + refresh_token_ttl_tip: + 'المدة التي يمكن فيها استخدام رمز التحديث لطلب رموز وصول جديدة قبل أن ينتهي صلاحيته ويصبح غير صالح. ستمتد طلبات الرموز إلى هذه القيمة.', + rotate_refresh_token: 'تدوير رمز التحديث', + rotate_refresh_token_label: + 'عند التمكين ، سيصدر Logto رمز تحديث جديد لطلبات الرموز عند مرور 70٪ من وقت الحياة الأصلي (TTL) أو تلبية شروط معينة. تعرف على المزيد', + backchannel_logout: 'تسجيل الخروج الخلفي', + backchannel_logout_description: + 'قم بتكوين نقطة نهاية تسجيل الخروج الخلفية لـ OpenID Connect وما إذا كانت الجلسة مطلوبة لهذا التطبيق.', + backchannel_logout_uri: 'عنوان URI لتسجيل الخروج الخلفي', + backchannel_logout_uri_session_required: 'هل الجلسة مطلوبة؟', + backchannel_logout_uri_session_required_description: + 'عند التمكين ، يتطلب RP تضمين مطالبة "sid" (معرف الجلسة) في رمز التسجيل الخروج لتحديد جلسة RP مع OP عند استخدام "backchannel_logout_uri".', + delete_description: + 'لا يمكن التراجع عن هذا الإجراء. سيتم حذف التطبيق بشكل دائم. يرجى إدخال اسم التطبيق {{name}} للتأكيد.', + enter_your_application_name: 'أدخل اسم التطبيق الخاص بك', + application_deleted: 'تم حذف التطبيق {{name}} بنجاح', + redirect_uri_required: 'يجب عليك إدخال عنوان URI لإعادة التوجيه واحد على الأقل', + app_domain_description_1: + 'لا تتردد في استخدام نطاقك مع {{domain}} المدعومة بواسطة Logto ، والتي تكون صالحة بشكل دائم.', + app_domain_description_2: + 'لا تتردد في استخدام نطاقك {{domain}} الذي يكون صالحًا بشكل دائم.', + custom_rules: 'قواعد المصادقة المخصصة', + custom_rules_placeholder: '^/(admin|privacy)/.+$', + custom_rules_description: + 'قم بتعيين قواعد بتعابير منتظمة للمسارات التي تتطلب المصادقة. الافتراضي: حماية الموقع بأكمله إذا تركته فارغًا.', + authentication_routes: 'مسارات المصادقة', + custom_rules_tip: + 'فيما يلي سيناريوهان:
  1. لحماية المسارات "/admin" و "/privacy" فقط بالمصادقة: ^/(admin|privacy)/.*
  2. للاستثناء من ملفات JPG من المصادقة: ^(?!.*\\.jpg$).*$
', + authentication_routes_description: + 'قم بتوجيه زر المصادقة الخاص بك باستخدام المسارات المحددة. ملاحظة: هذه المسارات لا يمكن استبدالها.', + protect_origin_server: 'حماية خادم المصدر الخاص بك', + protect_origin_server_description: + 'تأكد من حماية خادم المصدر الخاص بك من الوصول المباشر. راجع الدليل للحصول على تعليمات مفصلة أكثر.', + session_duration: 'مدة الجلسة (بالأيام)', + try_it: 'جربها', + no_organization_placeholder: 'لم يتم العثور على أي منظمة. انتقل إلى المنظمات', + field_custom_data: 'بيانات مخصصة', + field_custom_data_tip: + 'معلومات تطبيق مخصصة إضافية غير مدرجة في خصائص التطبيق المحددة مسبقًا ، مثل الإعدادات والتكوينات الخاصة بالأعمال.', + custom_data_invalid: 'يجب أن تكون البيانات المخصصة كائن JSON صالح', + branding: { + name: 'العلامة التجارية', + description: 'قم بتخصيص شعار التطبيق ولون العلامة التجارية لتجربة المستوى التطبيق.', + description_third_party: 'قم بتخصيص اسم التطبيق وشعاره على شاشة الموافقة.', + app_logo: 'شعار التطبيق', + app_level_sie: 'تجربة تسجيل الدخول على مستوى التطبيق', + app_level_sie_switch: + 'قم بتمكين تجربة تسجيل الدخول على مستوى التطبيق وإعداد العلامة التجارية الخاصة بالتطبيق. إذا تم تعطيلها ، سيتم استخدام تجربة تسجيل الدخول الشاملة.', + more_info: 'مزيد من المعلومات', + more_info_description: 'قدم للمستخدمين مزيد من التفاصيل حول التطبيق على شاشة الموافقة.', + display_name: 'اسم العرض', + application_logo: 'شعار التطبيق', + application_logo_dark: 'شعار التطبيق (داكن)', + brand_color: 'لون العلامة التجارية', + brand_color_dark: 'لون العلامة التجارية (داكن)', + terms_of_use_url: 'عنوان URL لشروط استخدام التطبيق', + privacy_policy_url: 'عنوان URL لسياسة الخصوصية للتطبيق', + }, + permissions: { + name: 'الأذونات', + description: + 'حدد الأذونات التي يحتاجها التطبيق الطرف الثالث للموافقة على الوصول إلى أنواع بيانات محددة.', + user_permissions: 'بيانات المستخدم الشخصية', + organization_permissions: 'وصول المنظمة', + table_name: 'منح الأذونات', + field_name: 'الأذن', + field_description: 'معروضة على شاشة الموافقة', + delete_text: 'إزالة الأذن', + permission_delete_confirm: + 'سيؤدي هذا الإجراء إلى سحب الأذونات الممنوحة للتطبيق الطرف الثالث ، مما يمنعه من طلب موافقة المستخدم على أنواع بيانات محددة. هل أنت متأكد أنك تريد المتابعة؟', + permissions_assignment_description: + 'حدد الأذونات التي يطلبها التطبيق الطرف الثالث للموافقة على الوصول إلى أنواع بيانات محددة.', + user_profile: 'بيانات المستخدم', + api_permissions: 'أذونات واجهة برمجة التطبيقات', + organization: 'أذونات المنظمة', + user_permissions_assignment_form_title: 'Add the user profile permissions', + organization_permissions_assignment_form_title: 'Add the organization permissions', + api_resource_permissions_assignment_form_title: 'Add the API resource permissions', + user_data_permission_description_tips: + 'You can modify the description of the personal user data permissions via "Sign-in Experience > Content > Manage Language"', + permission_description_tips: + 'When Logto is used as an Identity Provider (IdP) for authentication in third-party apps, and users are asked for authorization, this description appears on the consent screen.', + user_title: 'User', + user_description: + 'Select the permissions requested by the third-party app for accessing specific user data.', + grant_user_level_permissions: 'Grant permissions of user data', + organization_title: 'Organization', + organization_description: + 'Select the permissions requested by the third-party app for accessing specific organization data.', + grant_organization_level_permissions: 'Grant permissions of organization data', + }, + roles: { + assign_button: 'Assign roles', + delete_description: + 'This action will remove this role from this machine-to-machine app. The role itself will still exist, but it will no longer be associated with this machine-to-machine app.', + deleted: '{{name}} was successfully removed from this user.', + assign_title: 'Assign roles to {{name}}', + assign_subtitle: + 'Machine-to-machine apps must have machine-to-machine type of roles to access related API resources.', + assign_role_field: 'Assign roles', + role_search_placeholder: 'Search by role name', + added_text: '{{value, number}} added', + assigned_app_count: '{{value, number}} applications', + confirm_assign: 'Assign roles', + role_assigned: 'Successfully assigned role(s)', + search: 'Search by role name, description or ID', + empty: 'No role available', + }, + secrets: { + value: 'Value', + /** UNTRANSLATED */ + empty: 'The application does not have any secrets.', + created_at: 'Created at', + expires_at: 'Expires at', + never: 'Never', + create_new_secret: 'Create new secret', + delete_confirmation: + 'This action cannot be undone. Are you sure you want to delete this secret?', + legacy_secret: 'Legacy secret', + expired: 'Expired', + expired_tooltip: 'This secret was expired on {{date}}.', + create_modal: { + title: 'Create application secret', + expiration: 'Expiration', + expiration_description: 'The secret will expire at {{date}}.', + expiration_description_never: + 'The secret will never expire. We recommend setting an expiration date for enhanced security.', + days: '{{count}} day', + days_other: '{{count}} days', + created: 'The secret {{name}} has been successfully created.', + }, + edit_modal: { + title: 'Edit application secret', + edited: 'The secret {{name}} has been successfully edited.', + }, + }, +}; + +export default Object.freeze(application_details); diff --git a/packages/phrases/src/locales/ar-ar/translation/admin-console/applications.ts b/packages/phrases/src/locales/ar-ar/translation/admin-console/applications.ts new file mode 100644 index 000000000..77352098d --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/translation/admin-console/applications.ts @@ -0,0 +1,58 @@ +const applications = { + page_title: 'التطبيقات', + title: 'التطبيقات', + subtitle: 'إنشاء وإدارة التطبيقات للمصادقة بواسطة OIDC.', + subtitle_with_app_type: 'قم بإعداد مصادقة Logto لتطبيقك {{name}}', + create: 'إنشاء تطبيق', + create_subtitle_third_party: + 'استخدم Logto كموفر هوية (IdP) للتكامل بسهولة مع التطبيقات من جهات خارجية', + application_name: 'اسم التطبيق', + application_name_placeholder: 'تطبيقي', + application_description: 'وصف التطبيق', + application_description_placeholder: 'أدخل وصف التطبيق الخاص بك', + select_application_type: 'حدد نوع التطبيق', + no_application_type_selected: 'لم تقم بتحديد أي نوع للتطبيق حتى الآن', + application_created: 'تم إنشاء التطبيق بنجاح.', + tab: { + my_applications: 'تطبيقاتي', + third_party_applications: 'تطبيقات الجهات الخارجية', + }, + app_id: 'معرف التطبيق', + type: { + native: { + title: 'تطبيق محلي', + subtitle: 'تطبيق يعمل في بيئة محلية', + description: 'على سبيل المثال، تطبيق iOS، تطبيق Android', + }, + spa: { + title: 'تطبيق صفحة واحدة', + subtitle: 'تطبيق يعمل في متصفح الويب ويحدث البيانات بشكل ديناميكي في المكان', + description: 'على سبيل المثال، تطبيق React DOM، تطبيق Vue', + }, + traditional: { + title: 'تطبيق ويب تقليدي', + subtitle: 'تطبيق يقوم بعرض الصفحات وتحديثها عن طريق خادم الويب فقط', + description: 'على سبيل المثال، Next.js، PHP', + }, + machine_to_machine: { + title: 'الجهاز إلى الجهاز', + subtitle: 'تطبيق (عادةً خدمة) يتحدث مباشرة إلى الموارد', + description: 'على سبيل المثال، خدمة الخلفية', + }, + protected: { + title: 'تطبيق محمي', + subtitle: 'تطبيق محمي بواسطة Logto', + description: 'غير متوفر', + }, + third_party: { + title: 'تطبيق الجهة الخارجية', + subtitle: 'تطبيق يستخدم كموصل IdP من جهة خارجية', + description: 'على سبيل المثال، OIDC، SAML', + }, + }, + placeholder_title: 'حدد نوع التطبيق للمتابعة', + placeholder_description: + 'يستخدم Logto كيان التطبيق لـ OIDC للمساعدة في مهام مثل تحديد التطبيقات الخاصة بك وإدارة تسجيل الدخول وإنشاء سجلات التدقيق.', +}; + +export default Object.freeze(applications); diff --git a/packages/phrases/src/locales/ar-ar/translation/admin-console/cloud.ts b/packages/phrases/src/locales/ar-ar/translation/admin-console/cloud.ts new file mode 100644 index 000000000..9060ef037 --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/translation/admin-console/cloud.ts @@ -0,0 +1,87 @@ +const cloud = { + general: { + onboarding: 'عملية التسجيل', + }, + welcome: { + page_title: 'مرحبًا', + title: 'مرحبًا بك في سحابة Logto! نحب أن نتعرف عليك قليلاً.', + description: 'لنجعل تجربة Logto فريدة لك من خلال معرفة المزيد عنك. معلوماتك آمنة معنا.', + project_field: 'أستخدم Logto لـ', + project_options: { + personal: 'مشروع شخصي', + company: 'مشروع الشركة', + }, + company_name_field: 'اسم الشركة', + company_name_placeholder: 'Acme.co', + stage_field: 'ما هو مرحلة منتجك حاليًا؟', + stage_options: { + new_product: 'بدء مشروع جديد والبحث عن حل سريع وجاهز', + existing_product: + 'الانتقال من المصادقة الحالية (مثل البناء الذاتي، Auth0، Cognito، Microsoft)', + target_enterprise_ready: + 'لقد حصلت للتو على عملاء أكبر والآن أرغب في جعل منتجي جاهزًا للبيع للشركات', + }, + additional_features_field: 'هل لديك أي شيء آخر تود أن نعرفه؟', + additional_features_options: { + customize_ui_and_flow: + 'بناء وإدارة واجهة المستخدم الخاصة بي، وليس فقط استخدام حل Logto الجاهز وقابل للتخصيص', + compliance: 'SOC2 و GDPR ضروريان', + export_user_data: 'تحتاج إلى القدرة على تصدير بيانات المستخدم من Logto', + budget_control: 'لدي مراقبة ميزانية صارمة جدًا', + bring_own_auth: 'لدي خدمات المصادقة الخاصة بي وأحتاج فقط إلى بعض ميزات Logto', + others: 'لا شيء من هذه الخيارات', + }, + }, + create_tenant: { + page_title: 'إنشاء مستأجر', + title: 'أنشئ أول مستأجر لك', + description: + 'المستأجر هو بيئة معزولة حيث يمكنك إدارة هويات المستخدمين والتطبيقات وجميع الموارد الأخرى في Logto.', + invite_collaborators: 'ادعو مشاركيك عبر البريد الإلكتروني', + }, + sie: { + page_title: 'تخصيص تجربة تسجيل الدخول', + title: 'لنقم بتخصيص تجربة تسجيل الدخول الخاصة بك بسهولة أولاً', + inspire: { + title: 'إنشاء أمثلة جذابة', + description: 'هل تشعر بالتردد حول تجربة تسجيل الدخول؟ فقط انقر على "ألهمني" ودع السحر يحدث!', + inspire_me: 'ألهمني', + }, + logo_field: 'شعار التطبيق', + color_field: 'لون العلامة التجارية', + identifier_field: 'المعرف', + identifier_options: { + email: 'البريد الإلكتروني', + phone: 'الهاتف', + user_name: 'اسم المستخدم', + }, + authn_field: 'المصادقة', + authn_options: { + password: 'كلمة المرور', + verification_code: 'رمز التحقق', + }, + social_field: 'تسجيل الدخول الاجتماعي', + finish_and_done: 'انتهاء وتم', + preview: { + mobile_tab: 'الجوال', + web_tab: 'الويب', + }, + connectors: { + unlocked_later: 'سيتم فتحه لاحقًا', + unlocked_later_tip: + 'بمجرد الانتهاء من عملية التسجيل والدخول إلى المنتج، ستتمكن من الوصول إلى المزيد من طرق تسجيل الدخول الاجتماعي.', + notice: + 'يرجى تجنب استخدام موصل العرض التوضيحي لأغراض الإنتاج. بمجرد الانتهاء من الاختبار، يرجى حذف موصل العرض التوضيحي وإعداد موصلك الخاص بك ببيانات الاعتماد الخاصة بك.', + }, + }, + socialCallback: { + title: 'لقد قمت بتسجيل الدخول بنجاح', + description: + 'لقد قمت بتسجيل الدخول بنجاح باستخدام حسابك الاجتماعي. لضمان التكامل السلس والوصول إلى جميع ميزات Logto، نوصي بمتابعة تكوين موصلك الاجتماعي الخاص بك.', + }, + tenant: { + create_tenant: 'إنشاء مستأجر', + }, +}; + +export default Object.freeze(cloud); diff --git a/packages/phrases/src/locales/ar-ar/translation/admin-console/components.ts b/packages/phrases/src/locales/ar-ar/translation/admin-console/components.ts new file mode 100644 index 000000000..5a436e1c8 --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/translation/admin-console/components.ts @@ -0,0 +1,15 @@ +const components = { + uploader: { + action_description: 'اسحب وأفلت أو تصفح', + uploading: 'جاري التحميل...', + image_limit: + 'قم بتحميل الصورة بحجم أقل من {{size, number}} كيلوبايت، {{extensions, list(style: narrow; type: conjunction;)}} فقط.', + error_upload: 'حدث خطأ ما. فشل تحميل الملف.', + error_file_size: 'حجم الملف كبير جدًا. يرجى تحميل ملف بحجم أقل من {{limitWithUnit}}.', + error_file_type: + 'نوع الملف غير مدعوم. {{extensions, list(style: narrow; type: conjunction;)}} فقط.', + error_file_count: 'يمكنك تحميل ملف واحد فقط.', + }, +}; + +export default Object.freeze(components); diff --git a/packages/phrases/src/locales/ar-ar/translation/admin-console/connector-details.ts b/packages/phrases/src/locales/ar-ar/translation/admin-console/connector-details.ts new file mode 100644 index 000000000..f60a8523f --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/translation/admin-console/connector-details.ts @@ -0,0 +1,71 @@ +const connector_details = { + page_title: 'تفاصيل الموصل', + back_to_connectors: 'العودة إلى الموصلات', + check_readme: 'تحقق من README', + settings: 'الإعدادات العامة', + settings_description: + 'تلعب الموصلات دورًا حاسمًا في Logto. بمساعدتها ، يتيح Logto للمستخدمين النهائيين استخدام التسجيل أو تسجيل الدخول بدون كلمة مرور وإمكانيات تسجيل الدخول باستخدام حسابات اجتماعية.', + parameter_configuration: 'تكوين المعلمة', + test_connection: 'اختبار', + save_error_empty_config: 'يرجى إدخال التكوين', + send: 'إرسال', + send_error_invalid_format: 'إدخال غير صالح', + edit_config_label: 'أدخل JSON الخاص بك هنا', + test_email_sender: 'اختبار موصل البريد الإلكتروني الخاص بك', + test_sms_sender: 'اختبار موصل الرسائل القصيرة الخاص بك', + test_email_placeholder: 'john.doe@example.com', + test_sms_placeholder: '+1 555-123-4567', + test_message_sent: 'تم إرسال رسالة الاختبار', + test_sender_description: + 'يستخدم Logto القالب "العام" للفحص. ستتلقى رسالة إذا تم تكوين الموصل الخاص بك بشكل صحيح.', + options_change_email: 'تغيير موصل البريد الإلكتروني', + options_change_sms: 'تغيير موصل الرسائل القصيرة', + connector_deleted: 'تم حذف الموصل بنجاح', + type_email: 'موصل البريد الإلكتروني', + type_sms: 'موصل الرسائل القصيرة', + type_social: 'موصل اجتماعي', + in_used_social_deletion_description: + 'هذا الموصل قيد الاستخدام في تجربة تسجيل الدخول الخاصة بك. عن طريق الحذف ، سيتم حذف تجربة تسجيل الدخول في إعدادات تجربة تسجيل الدخول. ستحتاج إلى إعادة تكوينه إذا قررت إضافته مرة أخرى.', + in_used_passwordless_deletion_description: + 'هذا {{name}} قيد الاستخدام في تجربة تسجيل الدخول الخاصة بك. عن طريق الحذف ، لن تعمل تجربة تسجيل الدخول الخاصة بك بشكل صحيح حتى تحل الصراع. ستحتاج إلى إعادة تكوينه إذا قررت إضافته مرة أخرى.', + deletion_description: + 'أنت تقوم بإزالة هذا الموصل. لا يمكن التراجع عنها ، وستحتاج إلى إعادة تكوينه إذا قررت إضافته مرة أخرى.', + logto_email: { + total_email_sent: 'إجمالي البريد الإلكتروني المرسل: {{value, number}}', + total_email_sent_tip: + 'يستخدم Logto SendGrid للبريد الإلكتروني المدمج الآمن والمستقر. إنه مجاني تمامًا للاستخدام. تعرف على المزيد', + email_template_title: 'قالب البريد الإلكتروني', + template_description: + 'يستخدم البريد الإلكتروني المدمج قوالب افتراضية لتسليم سلس لرسائل التحقق. لا يلزم أي تكوين ، ويمكنك تخصيص معلومات العلامة التجارية الأساسية.', + template_description_link_text: 'عرض القوالب', + description_action_text: 'عرض القوالب', + from_email_field: 'عنوان البريد الإلكتروني المرسل', + sender_name_field: 'اسم المرسل', + sender_name_tip: + 'قم بتخصيص اسم المرسل للرسائل الإلكترونية. إذا تركته فارغًا ، سيتم استخدام "التحقق" كاسم افتراضي.', + sender_name_placeholder: 'اسم المرسل الخاص بك', + company_information_field: 'معلومات الشركة', + company_information_description: + 'عرض اسم الشركة أو العنوان أو الرمز البريدي في أسفل الرسائل الإلكترونية لتعزيز المصداقية.', + company_information_placeholder: 'معلومات الشركة الأساسية', + email_logo_field: 'شعار البريد الإلكتروني', + email_logo_tip: + 'عرض شعار العلامة التجارية الخاصة بك في أعلى الرسائل الإلكترونية. استخدم نفس الصورة لكل من وضع الضوء الفاتح ووضع الضوء الداكن.', + urls_not_allowed: 'غير مسموح بالروابط', + test_notes: 'يستخدم Logto القالب "العام" للفحص.', + }, + google_one_tap: { + title: 'Google One Tap', + description: + 'Google One Tap هو طريقة آمنة وسهلة للمستخدمين لتسجيل الدخول إلى موقع الويب الخاص بك.', + enable_google_one_tap: 'تمكين Google One Tap', + enable_google_one_tap_description: + 'تمكين Google One Tap في تجربة تسجيل الدخول الخاصة بك: اسمح للمستخدمين بالتسجيل أو تسجيل الدخول بسرعة باستخدام حساب Google الخاص بهم إذا كانوا قد قاموا بتسجيل الدخول بالفعل على جهازهم.', + configure_google_one_tap: 'تكوين Google One Tap', + auto_select: 'تحديد الاعتمادية تلقائيًا إذا أمكن', + close_on_tap_outside: 'إلغاء الإشعار إذا قام المستخدم بالنقر / الضغط خارجه', + itp_support: 'تمكين تجربة مستخدم محسنة لـ One Tap على متصفحات ITP', + }, +}; + +export default Object.freeze(connector_details); diff --git a/packages/phrases/src/locales/ar-ar/translation/admin-console/connectors.ts b/packages/phrases/src/locales/ar-ar/translation/admin-console/connectors.ts new file mode 100644 index 000000000..e3a359b90 --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/translation/admin-console/connectors.ts @@ -0,0 +1,86 @@ +const connectors = { + page_title: 'الموصلات', + title: 'الموصلات', + subtitle: + 'قم بإعداد الموصلات لتمكين تجربة تسجيل الدخول بدون كلمة مرور والتسجيل بواسطة وسائل التواصل الاجتماعي', + create: 'إضافة موصل اجتماعي', + config_sie_notice: 'لقد قمت بإعداد الموصلات. تأكد من تكوينها في {{link}}.', + config_sie_link_text: 'تجربة تسجيل الدخول', + tab_email_sms: 'موصلات البريد الإلكتروني والرسائل القصيرة', + tab_social: 'موصلات وسائل التواصل الاجتماعي', + connector_name: 'اسم الموصل', + demo_tip: + 'الحد الأقصى لعدد الرسائل المسموح بها لهذا الموصل التجريبي محدود إلى 100 ولا يُنصح باستخدامه في بيئة إنتاجية.', + social_demo_tip: + 'تم تصميم الموصل التجريبي حصريًا لأغراض العرض ولا يُنصح باستخدامه في بيئة إنتاجية.', + connector_type: 'النوع', + connector_status: 'تجربة تسجيل الدخول', + connector_status_in_use: 'قيد الاستخدام', + connector_status_not_in_use: 'غير قيد الاستخدام', + not_in_use_tip: { + content: + 'غير قيد الاستخدام يعني أن تجربة تسجيل الدخول الخاصة بك لم تستخدم هذا طريقة تسجيل الدخول. {{link}} لإضافة هذه طريقة تسجيل الدخول. ', + go_to_sie: 'انتقل إلى تجربة تسجيل الدخول', + }, + placeholder_title: 'موصل اجتماعي', + placeholder_description: + 'قدمت Logto العديد من موصلات تسجيل الدخول بواسطة وسائل التواصل الاجتماعي المستخدمة على نطاق واسع في الوقت الحالي يمكنك إنشاء موصل خاص بك باستخدام بروتوكولات قياسية.', + save_and_done: 'حفظ وانتهاء', + type: { + email: 'موصل بريد إلكتروني', + sms: 'موصل رسائل قصيرة', + social: 'موصل اجتماعي', + }, + setup_title: { + email: 'إعداد موصل البريد الإلكتروني', + sms: 'إعداد موصل الرسائل القصيرة', + social: 'إضافة موصل اجتماعي', + }, + guide: { + subtitle: 'دليل خطوة بخطوة لتكوين الموصل الخاص بك', + general_setting: 'الإعدادات العامة', + parameter_configuration: 'تكوين المعلمات', + test_connection: 'اختبار الاتصال', + name: 'اسم زر تسجيل الدخول الاجتماعي', + name_placeholder: 'أدخل اسم زر تسجيل الدخول الاجتماعي', + name_tip: + 'سيتم عرض اسم زر الموصل على النحو التالي "المتابعة مع {{name}}". يجب أن تكون حذرًا من طول الاسم في حالة أصبح طويلاً جدًا.', + connector_logo: 'شعار الموصل', + connector_logo_tip: 'سيتم عرض الشعار على زر تسجيل الدخول للموصل.', + target: 'اسم مزود الهوية', + target_placeholder: 'أدخل اسم مزود الهوية للموصل', + target_tip: 'قيمة "اسم مزود الهوية" يمكن أن تكون سلسلة معرف فريد لتمييز هوياتك الاجتماعية.', + target_tip_standard: + 'قيمة "اسم مزود الهوية" يمكن أن تكون سلسلة معرف فريد لتمييز هوياتك الاجتماعية. لا يمكن تغيير هذا الإعداد بعد بناء الموصل.', + target_tooltip: + 'يشير "اسم مزود الهوية" في موصلات Logto الاجتماعية إلى "المصدر" لهوياتك الاجتماعية. في تصميم Logto ، لا نقبل نفس "اسم مزود الهوية" لمنصة محددة لتجنب التعارضات. يجب أن تكون حذرًا جدًا قبل إضافة موصل لأنه لا يمكنك تغيير قيمته بمجرد إنشائه. تعلم المزيد', + target_conflict: + 'اسم مزود الهوية المدخل يتطابق مع موصل name الموجود. قد يتسبب استخدام نفس اسم مزود الهوية في سلوك غير متوقع لتسجيل الدخول حيث يمكن للمستخدمين الوصول إلى نفس الحساب من خلال موصلين مختلفين.', + target_conflict_line2: + 'إذا كنت ترغب في استبدال الموصل الحالي بنفس مزود الهوية والسماح للمستخدمين السابقين بتسجيل الدخول دون التسجيل مرة أخرى ، فيرجى حذف موصل name وإنشاء واحد جديد بنفس "اسم مزود الهوية".', + target_conflict_line3: + 'إذا كنت ترغب في الاتصال بمزود هوية مختلف ، فيرجى تعديل "اسم مزود الهوية" والمتابعة.', + config: 'أدخل تكوين JSON الخاص بك', + sync_profile: 'مزامنة معلومات الملف الشخصي', + sync_profile_only_at_sign_up: 'مزامنة فقط عند التسجيل', + sync_profile_each_sign_in: 'قم بمزامنة في كل مرة تسجيل دخول', + sync_profile_tip: + 'قم بمزامنة الملف الشخصي الأساسي من موفر الخدمة الاجتماعية ، مثل أسماء المستخدمين وصورهم الرمزية.', + callback_uri: 'عنوان URI للرد', + callback_uri_description: + 'يُطلق عليه أيضًا اسم عنوان URI للتوجيه ، وهو عنوان URI في Logto الذي سيتم إرسال المستخدمين إليه بعد المصادقة الاجتماعية ، قم بنسخه ولصقه في صفحة تكوين مزود الخدمة الاجتماعية.', + acs_url: 'عنوان URL لخدمة استهلاك الادعاء', + }, + platform: { + universal: 'عالمي', + web: 'ويب', + native: 'تطبيق محمول', + }, + add_multi_platform: 'يدعم منصات متعددة ، حدد منصة للمتابعة', + drawer_title: 'دليل الموصل', + drawer_subtitle: 'اتبع التعليمات لدمج الموصل الخاص بك', + unknown: 'موصل غير معروف', + standard_connectors: 'موصلات قياسية', +}; + +export default Object.freeze(connectors); diff --git a/packages/phrases/src/locales/ar-ar/translation/admin-console/contact.ts b/packages/phrases/src/locales/ar-ar/translation/admin-console/contact.ts new file mode 100644 index 000000000..0f1738b54 --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/translation/admin-console/contact.ts @@ -0,0 +1,26 @@ +const contact = { + title: 'احصل على مساعدة', + description: 'لطلب المساعدة أو إرسال ملاحظات حول المنتج، يرجى التواصل معنا عبر الوسائل التالية.', + discord: { + title: 'انضم إلى مجتمع Discord', + description: 'تواصل مع المطورين الآخرين لإيجاد حلول', + button: 'انضم', + }, + github: { + title: 'التواصل على GitHub', + description: 'إنشاء مشكلة وإرسالها على GitHub', + button: 'افتح', + }, + email: { + title: 'الاتصال بالدعم عبر البريد الإلكتروني', + description: 'أرسل لنا بريدًا إلكترونيًا لمزيد من المعلومات والمساعدة', + button: 'أرسل', + }, + reserve: { + title: 'احجز وقتك مع فريق Logto', + description: 'احجز جلسة للدردشة المباشرة بسرعة', + button: 'احجز', + }, +}; + +export default Object.freeze(contact); diff --git a/packages/phrases/src/locales/ar-ar/translation/admin-console/dashboard.ts b/packages/phrases/src/locales/ar-ar/translation/admin-console/dashboard.ts new file mode 100644 index 000000000..9ffc07a9e --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/translation/admin-console/dashboard.ts @@ -0,0 +1,21 @@ +const dashboard = { + page_title: 'لوحة القيادة', + title: 'لوحة القيادة', + description: 'احصل على نظرة عامة عن أداء تطبيقك', + total_users: 'إجمالي المستخدمين', + total_users_tip: 'إجمالي المستخدمين', + new_users_today: 'المستخدمون الجدد اليوم', + new_users_today_tip: 'عدد المستخدمين الجدد المسجلين في تطبيقك اليوم', + new_users_7_days: 'المستخدمون الجدد خلال 7 أيام', + new_users_7_days_tip: 'عدد المستخدمين الجدد المسجلين في تطبيقك خلال الأيام السبعة الماضية', + daily_active_users: 'المستخدمون النشطون يوميًا', + daily_active_users_tip: 'عدد المستخدمين الفريدين الذين قاموا بتبادل الرموز في تطبيقك اليوم', + weekly_active_users: 'المستخدمون النشطون أسبوعيًا', + weekly_active_users_tip: + 'عدد المستخدمين الفريدين الذين قاموا بتبادل الرموز في تطبيقك خلال الأسبوع الماضي', + monthly_active_users: 'المستخدمون النشطون شهريًا', + monthly_active_users_tip: + 'عدد المستخدمين الفريدين الذين قاموا بتبادل الرموز في تطبيقك خلال الشهر الماضي', +}; + +export default Object.freeze(dashboard); diff --git a/packages/phrases/src/locales/ar-ar/translation/admin-console/domain.ts b/packages/phrases/src/locales/ar-ar/translation/admin-console/domain.ts new file mode 100644 index 000000000..ea4944550 --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/translation/admin-console/domain.ts @@ -0,0 +1,56 @@ +const domain = { + status: { + connecting: 'جارٍ الاتصال...', + in_use: 'قيد الاستخدام', + failed_to_connect: 'فشل الاتصال', + }, + update_endpoint_notice: + 'لا تنسى تحديث النطاق لعنوان URI لموصل الشبكة الاجتماعية ونقطة النهاية الخاصة بـ Logto في تطبيقك إذا كنت ترغب في استخدام نطاق مخصص للميزات. {{link}}', + error_hint: 'تأكد من تحديث سجلات DNS الخاصة بك. سنستمر في التحقق كل {{value}} ثانية.', + custom: { + custom_domain: 'نطاق مخصص', + custom_domain_description: + 'تحسين العلامة التجارية الخاصة بك عن طريق استخدام نطاق مخصص. سيتم استخدام هذا النطاق في تجربة تسجيل الدخول الخاصة بك.', + custom_domain_field: 'نطاق مخصص', + custom_domain_placeholder: 'your.domain.com', + add_domain: 'إضافة نطاق', + invalid_domain_format: + 'يرجى تقديم عنوان URL صالح للنطاق مع حد أدنى من ثلاثة أجزاء ، على سبيل المثال "your.domain.com".', + verify_domain: 'التحقق من النطاق', + enable_ssl: 'تمكين SSL', + checking_dns_tip: + 'بعد تكوين سجلات DNS ، سيتم تشغيل العملية تلقائيًا وقد تستغرق حتى 24 ساعة. يمكنك ترك هذه الواجهة أثناء تشغيلها.', + enable_ssl_tip: + 'سيتم تشغيل تمكين SSL تلقائيًا وقد يستغرق حتى 24 ساعة. يمكنك ترك هذه الواجهة أثناء تشغيلها.', + generating_dns_records: 'جارٍ إنشاء سجلات DNS...', + add_dns_records: 'يرجى إضافة هذه السجلات DNS إلى موفر خدمة DNS الخاص بك.', + dns_table: { + type_field: 'النوع', + name_field: 'الاسم', + value_field: 'القيمة', + }, + deletion: { + delete_domain: 'حذف النطاق', + reminder: 'حذف النطاق المخصص', + description: 'هل أنت متأكد أنك تريد حذف هذا النطاق المخصص؟', + in_used_description: 'هل أنت متأكد أنك تريد حذف هذا النطاق المخصص "{{domain}}"؟', + in_used_tip: + 'إذا قمت بإعداد هذا النطاق المخصص في موفر موصل الشبكة الاجتماعية أو نقطة النهاية التطبيقية الخاصة بك من قبل ، فسيتعين عليك تعديل عنوان URI إلى النطاق الافتراضي لـ Logto "{{domain}}" أولاً. هذا ضروري لعمل زر تسجيل الدخول الاجتماعي بشكل صحيح.', + deleted: 'تم حذف النطاق المخصص بنجاح!', + }, + }, + default: { + default_domain: 'النطاق الافتراضي', + default_domain_description: + 'يوفر Logto نطاقًا افتراضيًا معينًا مسبقًا ، جاهزًا للاستخدام دون أي إعدادات إضافية. يعمل هذا النطاق الافتراضي كخيار احتياطي حتى إذا قمت بتمكين نطاق مخصص.', + default_domain_field: 'النطاق الافتراضي لـ Logto', + }, + custom_endpoint_note: + 'يمكنك تخصيص اسم النطاق لهذه النقاط النهائية حسب متطلباتك. اختر إما "{{custom}}" أو "{{default}}".', + custom_social_callback_url_note: + 'يمكنك تخصيص اسم النطاق لهذا العنوان URI لمطابقة نقطة النهاية لتطبيقك. اختر إما "{{custom}}" أو "{{default}}".', + custom_acs_url_note: + 'يمكنك تخصيص اسم النطاق لهذا العنوان URI لمطابقة عنوان خدمة استهلاك مزود الهوية الخاص بك. اختر إما "{{custom}}" أو "{{default}}".', +}; + +export default Object.freeze(domain); diff --git a/packages/phrases/src/locales/ar-ar/translation/admin-console/enterprise-sso-details.ts b/packages/phrases/src/locales/ar-ar/translation/admin-console/enterprise-sso-details.ts new file mode 100644 index 000000000..704d29978 --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/translation/admin-console/enterprise-sso-details.ts @@ -0,0 +1,79 @@ +const enterprise_sso_details = { + back_to_sso_connectors: 'العودة إلى SSO للشركات', + page_title: 'تفاصيل موصّل SSO للشركات', + readme_drawer_title: 'SSO للشركات', + readme_drawer_subtitle: + 'قم بإعداد موصّلات SSO للشركات لتمكين تسجيل الدخول الموحد للمستخدمين النهائيين', + tab_experience: 'تجربة SSO', + tab_connection: 'الاتصال', + general_settings_title: 'عام', + custom_branding_title: 'العرض', + custom_branding_description: + 'قم بتخصيص الاسم والشعار المعروضين في تدفق تسجيل الدخول الموحد للمستخدمين النهائيين. عندما يكون فارغًا ، يتم استخدام القيم الافتراضية.', + email_domain_field_name: 'نطاقات البريد الإلكتروني للشركة', + email_domain_field_description: + 'يمكن للمستخدمين الذين لديهم هذه النطاقات البريدية استخدام SSO للمصادقة. يرجى التحقق من ملكية النطاق قبل الإضافة.', + email_domain_field_placeholder: + 'أدخل نطاقات البريد الإلكتروني واحدة أو أكثر (على سبيل المثال yourcompany.com)', + sync_profile_field_name: 'مزامنة معلومات الملف الشخصي من موفر الهوية', + sync_profile_option: { + register_only: 'مزامنة فقط عند تسجيل الدخول الأول', + each_sign_in: 'مزامنة دائمًا عند كل تسجيل دخول', + }, + connector_name_field_name: 'اسم الموصّل', + display_name_field_name: 'اسم العرض', + connector_logo_field_name: 'شعار العرض', + connector_logo_field_description: + 'يجب أن يكون كل صورة أقل من 500 كيلوبايت ، SVG ، PNG ، JPG ، JPEG فقط.', + branding_logo_context: 'تحميل الشعار', + branding_logo_error: 'خطأ في تحميل الشعار: {{error}}', + branding_light_logo_context: 'تحميل شعار الوضع الفاتح', + branding_light_logo_error: 'خطأ في تحميل شعار الوضع الفاتح: {{error}}', + branding_logo_field_name: 'الشعار', + branding_logo_field_placeholder: 'https://your.domain/logo.png', + branding_dark_logo_context: 'تحميل شعار الوضع الداكن', + branding_dark_logo_error: 'خطأ في تحميل شعار الوضع الداكن: {{error}}', + branding_dark_logo_field_name: 'الشعار (الوضع الداكن)', + branding_dark_logo_field_placeholder: 'https://your.domain/dark-mode-logo.png', + check_connection_guide: 'دليل الاتصال', + enterprise_sso_deleted: 'تم حذف موصّل SSO للشركات بنجاح', + delete_confirm_modal_title: 'حذف موصّل SSO للشركات', + delete_confirm_modal_content: + 'هل أنت متأكد أنك تريد حذف هذا الموصّل الشركات؟ لن يستخدم المستخدمون من موفري الهوية تسجيل الدخول الموحد.', + upload_idp_metadata_title_saml: 'تحميل البيانات الوصفية', + upload_idp_metadata_description_saml: 'قم بتكوين البيانات الوصفية المنسوخة من موفر الهوية.', + upload_idp_metadata_title_oidc: 'تحميل بيانات الاعتمادات', + upload_idp_metadata_description_oidc: + 'قم بتكوين بيانات الاعتمادات ومعلومات رمز OIDC المنسوخة من موفر الهوية.', + upload_idp_metadata_button_text: 'تحميل ملف البيانات الوصفية بتنسيق XML', + upload_signing_certificate_button_text: 'تحميل ملف شهادة التوقيع', + configure_domain_field_info_text: + 'أضف نطاق البريد الإلكتروني لتوجيه المستخدمين الشركات إلى موفر هويتهم لتسجيل الدخول الموحد.', + email_domain_field_required: 'مطلوب نطاق البريد الإلكتروني لتمكين SSO للشركات.', + upload_saml_idp_metadata_info_text_url: + 'قم بلصق عنوان URL للبيانات الوصفية من موفر الهوية للاتصال.', + upload_saml_idp_metadata_info_text_xml: 'قم بلصق البيانات الوصفية من موفر الهوية للاتصال.', + upload_saml_idp_metadata_info_text_manual: 'املأ البيانات الوصفية من موفر الهوية للاتصال.', + upload_oidc_idp_info_text: 'املأ المعلومات من موفر الهوية للاتصال.', + service_provider_property_title: 'قم بالتكوين في موفر الهوية', + service_provider_property_description: + 'قم بإعداد تكامل التطبيق باستخدام {{protocol}} في موفر الهوية الخاص بك. أدخل التفاصيل المقدمة من قِبل Logto.', + attribute_mapping_title: 'تعيينات السمات', + attribute_mapping_description: + 'قم بمزامنة ملفات تعريف المستخدمين من موفر الهوية عن طريق تكوين تعيين السمات للمستخدم إما على جانب موفر الهوية أو جانب Logto.', + saml_preview: { + sign_on_url: 'عنوان URL لتسجيل الدخول', + entity_id: 'المُصدر', + x509_certificate: 'شهادة التوقيع', + certificate_content: 'تنتهي صلاحيتها في {{date}}', + }, + oidc_preview: { + authorization_endpoint: 'نقطة الوصول للتفويض', + token_endpoint: 'نقطة الوصول للرمز', + userinfo_endpoint: 'نقطة وصول معلومات المستخدم', + jwks_uri: 'نقطة وصول مجموعة مفاتيح JSON', + issuer: 'المُصدر', + }, +}; + +export default Object.freeze(enterprise_sso_details); diff --git a/packages/phrases/src/locales/ar-ar/translation/admin-console/enterprise-sso.ts b/packages/phrases/src/locales/ar-ar/translation/admin-console/enterprise-sso.ts new file mode 100644 index 000000000..8938f320a --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/translation/admin-console/enterprise-sso.ts @@ -0,0 +1,72 @@ +const enterprise_sso = { + page_title: 'تسجيل الدخول الموحد للمؤسسة', + title: 'تسجيل الدخول الموحد للمؤسسة', + subtitle: 'قم بتوصيل موفر هوية المؤسسة وتمكين تسجيل الدخول الموحد بواسطة مزود الخدمة.', + create: 'إضافة موصل المؤسسة', + col_connector_name: 'اسم الموصل', + col_type: 'النوع', + col_email_domain: 'نطاق البريد الإلكتروني', + placeholder_title: 'موصل المؤسسة', + placeholder_description: + 'لقد قدمت Logto العديد من موفري هوية المؤسسة المدمجة للاتصال، في الوقت نفسه يمكنك إنشاء موفر خاص بك باستخدام بروتوكولات SAML و OIDC.', + create_modal: { + title: 'إضافة موصل المؤسسة', + text_divider: 'أو يمكنك تخصيص الموصل الخاص بك باستخدام بروتوكول قياسي.', + connector_name_field_title: 'اسم الموصل', + connector_name_field_placeholder: 'على سبيل المثال، {اسم الشركة} - {اسم موفر الهوية}', + create_button_text: 'إنشاء الموصل', + }, + guide: { + subtitle: 'دليل خطوة بخطوة لتوصيل موفر هوية المؤسسة.', + finish_button_text: 'متابعة', + }, + basic_info: { + title: 'قم بتكوين الخدمة في موفر الهوية', + description: + 'قم بإنشاء تكامل تطبيق جديد باستخدام SAML 2.0 في موفر الهوية {{name}} الخاص بك. ثم قم بلصق القيمة التالية فيه.', + saml: { + acs_url_field_name: 'عنوان URL لخدمة المستهلك للتأكيد (رد URL)', + audience_uri_field_name: 'معرف الجمهور (معرف SP)', + }, + oidc: { + redirect_uri_field_name: 'عنوان URL لإعادة التوجيه (عنوان URL للرد)', + }, + }, + attribute_mapping: { + title: 'تعيين السمات', + description: + 'السمات `id` و `email` مطلوبة لمزامنة ملف تعريف المستخدم من موفر الهوية. أدخل اسم الادعاء والقيمة التالية في موفر الهوية الخاص بك.', + col_sp_claims: 'قيمة موفر الخدمة (Logto)', + col_idp_claims: 'اسم الادعاء لموفر الهوية', + idp_claim_tooltip: 'اسم الادعاء لموفر الهوية', + }, + metadata: { + title: 'قم بتكوين بيانات الموفر', + description: 'قم بتكوين بيانات الموفر من موفر الهوية', + dropdown_trigger_text: 'استخدم طريقة تكوين أخرى', + dropdown_title: 'حدد طريقة التكوين الخاصة بك', + metadata_format_url: 'أدخل عنوان URL للبيانات', + metadata_format_xml: 'قم بتحميل ملف XML لبيانات الموفر', + metadata_format_manual: 'أدخل تفاصيل البيانات يدويًا', + saml: { + metadata_url_field_name: 'عنوان URL للبيانات', + metadata_url_description: + 'استرجع البيانات بشكل ديناميكي من عنوان URL للبيانات واحتفظ بالشهادة محدثة.', + metadata_xml_field_name: 'ملف XML لبيانات موفر الهوية', + metadata_xml_uploader_text: 'قم بتحميل ملف XML لبيانات الموفر', + sign_in_endpoint_field_name: 'عنوان URL لتسجيل الدخول', + idp_entity_id_field_name: 'معرف موفر الهوية (المُصدر)', + certificate_field_name: 'شهادة التوقيع', + certificate_placeholder: 'انسخ والصق شهادة x509', + certificate_required: 'شهادة التوقيع مطلوبة.', + }, + oidc: { + client_id_field_name: 'معرف العميل', + client_secret_field_name: 'السر الخاص بالعميل', + issuer_field_name: 'المُصدر', + scope_field_name: 'النطاق', + }, + }, +}; + +export default Object.freeze(enterprise_sso); diff --git a/packages/phrases/src/locales/ar-ar/translation/admin-console/errors.ts b/packages/phrases/src/locales/ar-ar/translation/admin-console/errors.ts new file mode 100644 index 000000000..43da6413a --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/translation/admin-console/errors.ts @@ -0,0 +1,29 @@ +const errors = { + something_went_wrong: 'عفوًا! حدث خطأ ما.', + page_not_found: 'الصفحة غير موجودة', + unknown_server_error: 'حدث خطأ غير معروف في الخادم', + empty: 'لا توجد بيانات', + missing_total_number: 'تعذر العثور على "Total-Number" في رؤوس الاستجابة', + invalid_uri_format: 'تنسيق عنوان URI غير صالح', + invalid_origin_format: 'تنسيق أصل URI غير صالح', + invalid_json_format: 'تنسيق JSON غير صالح', + invalid_regex: 'تعبير عادي غير صالح', + invalid_error_message_format: 'تنسيق رسالة الخطأ غير صالح.', + required_field_missing: 'يرجى إدخال {{field}}', + required_field_missing_plural: 'يجب عليك إدخال ما لا يقل عن {{field}} واحد', + more_details: 'مزيد من التفاصيل', + username_pattern_error: + 'يجب أن يحتوي اسم المستخدم فقط على الحروف والأرقام والشرطة السفلية ولا يجب أن يبدأ برقم.', + email_pattern_error: 'عنوان البريد الإلكتروني غير صالح.', + phone_pattern_error: 'رقم الهاتف غير صالح.', + insecure_contexts: 'السياقات غير الآمنة (غير HTTPS) غير مدعومة.', + unexpected_error: 'حدث خطأ غير متوقع.', + not_found: '404 غير موجود', + create_internal_role_violation: + 'أنت تقوم بإنشاء دور داخلي جديد وهذا ممنوع من قبل Logto. جرب اسمًا آخرًا لا يبدأ بـ "#internal:".', + should_be_an_integer: 'يجب أن يكون عدد صحيح.', + number_should_be_between_inclusive: + 'يجب أن يكون العدد بين {{min}} و {{max}} (شاملاً لكلا الحدود).', +}; + +export default Object.freeze(errors); diff --git a/packages/phrases/src/locales/ar-ar/translation/admin-console/general.ts b/packages/phrases/src/locales/ar-ar/translation/admin-console/general.ts new file mode 100644 index 000000000..b3e3c84dd --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/translation/admin-console/general.ts @@ -0,0 +1,77 @@ +const general = { + placeholder: 'نص العنصر', + submit: 'إرسال', + skip: 'تخطي', + next: 'التالي', + back: 'السابق', + retry: 'حاول مرة أخرى', + done: 'تم', + search: 'بحث', + search_placeholder: 'بحث', + clear_result: 'مسح النتائج', + save: 'حفظ', + save_changes: 'حفظ التغييرات', + saved: 'تم الحفظ', + discard: 'تجاهل', + loading: 'جاري التحميل...', + redirecting: 'جاري التوجيه...', + add: 'إضافة', + added: 'تمت الإضافة', + cancel: 'إلغاء', + confirm: 'تأكيد', + check_out: 'الدفع', + create: 'إنشاء', + set_up: 'إعداد', + customize: 'تخصيص', + enable: 'تمكين', + reminder: 'تذكير', + edit: 'تعديل', + delete: 'حذف', + deleted: 'تم الحذف', + more_options: 'المزيد من الخيارات', + close: 'إغلاق', + copy: 'نسخ', + copying: 'جاري النسخ', + copied: 'تم النسخ', + required: 'مطلوب', + add_another: 'إضافة آخر', + create_another: 'إنشاء آخر', + deletion_confirmation: 'هل أنت متأكد أنك تريد حذف {{title}} هذا؟', + settings_nav: 'الإعدادات', + unsaved_changes_warning: 'لقد قمت بإجراء بعض التغييرات. هل أنت متأكد أنك تريد مغادرة هذه الصفحة؟', + leave_page: 'مغادرة الصفحة', + stay_on_page: 'البقاء على الصفحة', + type_to_search: 'اكتب للبحث', + got_it: 'فهمت', + continue: 'متابعة', + page_info: '{{min, number}}-{{max, number}} من {{total, number}}', + learn_more: 'معرفة المزيد', + /** UNTRANSLATED */ + tab_error_one: '{{count, number}} error', + /** UNTRANSLATED */ + tab_error_other: '{{count, number}} errors', + skip_for_now: 'تخطي للآن', + remove: 'إزالة', + visit: 'زيارة', + join: 'انضمام', + try_now: 'جرب الآن', + multiple_form_field: '(متعدد)', + demo: 'عرض', + unnamed: 'بدون اسم', + view: 'عرض', + open: 'فتح', + hide: 'إخفاء', + unknown_error: 'خطأ غير معروف، يرجى المحاولة مرة أخرى لاحقًا.', + select: 'اختيار', + contact_us_action: 'اتصل بنا', + description: 'الوصف', + name: 'الاسم', + add_field: 'إضافة {{field}}', + create_field: 'إنشاء {{field}}', + edit_field: 'تعديل {{field}}', + delete_field: 'حذف {{field}}', + coming_soon: 'قريبًا', + or: 'أو', +}; + +export default Object.freeze(general); diff --git a/packages/phrases/src/locales/ar-ar/translation/admin-console/get-started.ts b/packages/phrases/src/locales/ar-ar/translation/admin-console/get-started.ts new file mode 100644 index 000000000..96ca63376 --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/translation/admin-console/get-started.ts @@ -0,0 +1,38 @@ +const get_started = { + page_title: 'البدء', + title: 'شيء لمساعدتك على النجاح', + subtitle: 'بعض الأشياء التي يمكنك القيام بها للحصول بسرعة على قيمة Logto', + develop: { + title: 'التطوير: قم بدمج تطبيقك في 5 دقائق', + title_cloud: 'التطوير: قم بدمج تطبيقك بأمان في دقائق', + subtitle_cloud: 'أو قم بدمج تطبيقك في 5 دقائق باستخدام SDKs والبرامج التعليمية الجاهزة لدينا.', + }, + customize: { + title: 'تخصيص: قدم تجربة تسجيل دخول رائعة', + preview: { + title: 'تحقق من المعاينة المباشرة لتجربة تسجيل الدخول التي قمت بتخصيصها للتو', + subtitle: 'جرب تجربة تسجيل الدخول الخاصة بـ Logto الآن لمعرفة كيف يعمل', + }, + connector: { + title: 'إضافة المزيد من الموصلات لدعم طرق تسجيل الدخول الاجتماعي الأخرى', + subtitle: 'جرب تسجيل الدخول بدون كلمة مرور وقم بتمكين تجربة آمنة وسلسة لعملائك', + }, + continue_customizing: 'متابعة التخصيص', + try_now: 'جرب الآن', + add_more: 'إضافة المزيد', + }, + secure: { + title: 'تأمين: حماية مواردك', + }, + manage: { + title: 'إدارة: تعريف التحكم في الوصول لمنتجك والمستخدمين', + rbac: { + title: 'إضافة التحكم في الوصول بناءً على الأدوار لحماية مواردك', + subtitle: 'تحكم في مواردك من خلال تفويض الأدوار المقياسي لحالات الاستخدام المتنوعة.', + }, + create_roles: 'إنشاء الأدوار', + }, + view_all: 'عرض الكل →', +}; + +export default Object.freeze(get_started); diff --git a/packages/phrases/src/locales/ar-ar/translation/admin-console/guide.ts b/packages/phrases/src/locales/ar-ar/translation/admin-console/guide.ts new file mode 100644 index 000000000..18f213e57 --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/translation/admin-console/guide.ts @@ -0,0 +1,41 @@ +const guide = { + start_building: 'ابدأ البناء', + get_started: 'ابدأ', + categories: { + featured: 'شائع ومناسب لك', + Traditional: 'تطبيق ويب تقليدي', + SPA: 'تطبيق صفحة واحدة', + Native: 'تطبيق محلي', + MachineToMachine: 'ماكينة إلى ماكينة', + Protected: 'تكامل غير محمي', + ThirdParty: 'تطبيق طرف ثالث', + }, + filter: { + title: 'تصفية الإطار', + placeholder: 'البحث عن إطار', + }, + checkout_tutorial: 'تحقق من درس {{name}}', + do_not_need_tutorial: 'إذا لم تحتاج إلى درس، يمكنك المتابعة بدون دليل إطار', + finish_and_done: 'انتهاء وتمام', + cannot_find_guide: 'لا يمكن العثور على الدليل الخاص بك؟', + describe_guide_looking_for: 'صف الدليل الذي تبحث عنه', + request_guide_successfully: 'تم إرسال طلبك بنجاح. شكرًا لك!', + app: { + select_framework_or_tutorial: 'اختر إطارًا أو درسًا', + guide_modal_title: 'ابدأ مع SDK والدروس', + modal_subtitle: 'ابدأ عملية تطوير التطبيق الخاص بك باستخدام SDK والدروس المُعدة مسبقًا.', + select_a_framework: 'اختر إطارًا', + continue_without_framework: 'إنشاء تطبيق بدون إطار', + describe_guide_looking_for_placeholder: 'مثال: أرغب في دمج Logto في تطبيق Angular الخاص بي.', + }, + api: { + modal_title: 'ابدأ مع الدروس', + modal_subtitle: 'ابدأ عملية تطوير التطبيق الخاص بك باستخدام الدروس المُعدة مسبقًا.', + select_a_tutorial: 'اختر درسًا', + continue_without_tutorial: 'المتابعة بدون درس', + describe_guide_looking_for_placeholder: + 'مثال: أرغب في حماية واجهة برمجة التطبيقات الخاصة بي باستخدام deno.', + }, +}; + +export default Object.freeze(guide); diff --git a/packages/phrases/src/locales/ar-ar/translation/admin-console/index.ts b/packages/phrases/src/locales/ar-ar/translation/admin-console/index.ts new file mode 100644 index 000000000..d85910d39 --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/translation/admin-console/index.ts @@ -0,0 +1,102 @@ +import api_resource_details from './api-resource-details.js'; +import api_resources from './api-resources.js'; +import application_details from './application-details.js'; +import applications from './applications.js'; +import cloud from './cloud.js'; +import components from './components.js'; +import connector_details from './connector-details.js'; +import connectors from './connectors.js'; +import contact from './contact.js'; +import dashboard from './dashboard.js'; +import domain from './domain.js'; +import enterprise_sso_details from './enterprise-sso-details.js'; +import enterprise_sso from './enterprise-sso.js'; +import errors from './errors.js'; +import general from './general.js'; +import get_started from './get-started.js'; +import guide from './guide.js'; +import invitation from './invitation.js'; +import jwt_claims from './jwt-claims.js'; +import log_details from './log-details.js'; +import logs from './logs.js'; +import menu from './menu.js'; +import mfa from './mfa.js'; +import organization_details from './organization-details.js'; +import organization_role_details from './organization-role-details.js'; +import organization_template from './organization-template.js'; +import organizations from './organizations.js'; +import permissions from './permissions.js'; +import profile from './profile.js'; +import protected_app from './protected-app.js'; +import role_details from './role-details.js'; +import roles from './roles.js'; +import session_expired from './session-expired.js'; +import sign_in_exp from './sign-in-exp/index.js'; +import signing_keys from './signing-keys.js'; +import subscription from './subscription/index.js'; +import tab_sections from './tab-sections.js'; +import tabs from './tabs.js'; +import tenant_members from './tenant-members.js'; +import tenants from './tenants.js'; +import topbar from './topbar.js'; +import upsell from './upsell/index.js'; +import user_details from './user-details.js'; +import users from './users.js'; +import webhook_details from './webhook-details.js'; +import webhooks from './webhooks.js'; +import welcome from './welcome.js'; + +const admin_console = { + title: 'Admin Console', + admin_user: 'Admin', + system_app: 'System', + menu, + general, + errors, + tab_sections, + tabs, + applications, + application_details, + api_resources, + api_resource_details, + connectors, + connector_details, + enterprise_sso, + enterprise_sso_details, + get_started, + users, + user_details, + contact, + sign_in_exp, + dashboard, + logs, + log_details, + session_expired, + welcome, + roles, + role_details, + permissions, + cloud, + profile, + components, + webhooks, + webhook_details, + domain, + tenants, + tenant_members, + topbar, + subscription, + upsell, + guide, + mfa, + organizations, + organization_details, + protected_app, + jwt_claims, + invitation, + signing_keys, + organization_template, + organization_role_details, +}; + +export default Object.freeze(admin_console); diff --git a/packages/phrases/src/locales/ar-ar/translation/admin-console/invitation.ts b/packages/phrases/src/locales/ar-ar/translation/admin-console/invitation.ts new file mode 100644 index 000000000..dafa199c2 --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/translation/admin-console/invitation.ts @@ -0,0 +1,14 @@ +const invitation = { + find_your_tenants: 'ابحث عن المستأجرين الخاصين بك', + find_tenants_description: + 'قد يكون عنوان بريدك الإلكتروني مسجل بالفعل في عدة مستأجرين. يمكنك اختيار الانضمام إلى المستأجرين الموجودين أو الاستمرار في إنشاء مستأجر جديد.', + create_new_tenant: 'إنشاء مستأجر جديد', + email_not_match_title: 'أنت مسجل حاليًا بواسطة\n{{email}}', + email_not_match_description: + 'يرجى تسجيل الدخول باستخدام الحساب الصحيح لقبول الدعوة وأن تصبح عضوًا في المنظمة.', + switch_account: 'تسجيل الدخول باستخدام حساب آخر', + invalid_invitation_status: 'دعوة غير صالحة. يرجى الاتصال بالمسؤول والمحاولة مرة أخرى.', + invitation_not_found: 'لم يتم العثور على الدعوة. يرجى الاتصال بالمسؤول.', +}; + +export default Object.freeze(invitation); diff --git a/packages/phrases/src/locales/ar-ar/translation/admin-console/jwt-claims.ts b/packages/phrases/src/locales/ar-ar/translation/admin-console/jwt-claims.ts new file mode 100644 index 000000000..2e5871cd5 --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/translation/admin-console/jwt-claims.ts @@ -0,0 +1,66 @@ +const jwt_claims = { + title: 'JWT المخصص', + description: + 'قم بإعداد مطالبات JWT المخصصة لتضمينها في رمز الوصول. يمكن استخدام هذه المطالبات لتمرير معلومات إضافية إلى تطبيقك.', + user_jwt: { + card_title: 'للمستخدم', + card_field: 'رمز الوصول للمستخدم', + card_description: 'إضافة بيانات محددة للمستخدم أثناء إصدار رمز الوصول.', + for: 'للمستخدم', + }, + machine_to_machine_jwt: { + card_title: 'للآلة إلى الآلة', + card_field: 'رمز الوصول من الآلة إلى الآلة', + card_description: 'إضافة بيانات إضافية أثناء إصدار رمز الوصول من الآلة إلى الآلة.', + for: 'للآلة إلى الآلة', + }, + code_editor_title: 'تخصيص مطالبات {{token}}', + custom_jwt_create_button: 'إضافة مطالبات مخصصة', + custom_jwt_item: 'مطالبات مخصصة {{for}}', + delete_modal_title: 'حذف المطالبات المخصصة', + delete_modal_content: 'هل أنت متأكد أنك تريد حذف المطالبات المخصصة؟', + clear: 'مسح', + cleared: 'تم المسح', + restore: 'استعادة الافتراضيات', + restored: 'تمت الاستعادة', + data_source_tab: 'مصدر البيانات', + test_tab: 'سياق الاختبار', + jwt_claims_description: 'المطالبات الافتراضية مضمنة تلقائيًا في JWT ولا يمكن استبدالها.', + user_data: { + title: 'بيانات المستخدم', + subtitle: 'استخدم معلمة الإدخال `data.user` لتوفير معلومات المستخدم الحيوية.', + }, + grant_data: { + title: 'بيانات المنحة', + subtitle: + 'استخدم معلمة الإدخال `data.grant` لتوفير معلومات المنحة الحيوية، متاحة فقط لتبادل الرموز.', + }, + token_data: { + title: 'بيانات الرمز', + subtitle: 'استخدم معلمة الإدخال `token` لحمولة رمز الوصول الحالي.', + }, + fetch_external_data: { + title: 'استرجاع البيانات الخارجية', + subtitle: 'دمج البيانات من واجهات برمجة التطبيقات الخارجية مباشرة في المطالبات.', + description: + 'استخدم وظيفة `fetch` لاستدعاء واجهات برمجة التطبيقات الخارجية الخاصة بك وتضمين البيانات في المطالبات المخصصة الخاصة بك. مثال: ', + }, + environment_variables: { + title: 'تعيين متغيرات البيئة', + subtitle: 'استخدم متغيرات البيئة لتخزين المعلومات الحساسة.', + input_field_title: 'إضافة متغيرات البيئة', + sample_code: 'الوصول إلى متغيرات البيئة في معالج المطالبات JWT المخصص الخاص بك. مثال: ', + }, + jwt_claims_hint: + 'قم بتقييد المطالبات المخصصة إلى أقل من 50 كيلوبايت. المطالبات الافتراضية في JWT مضمنة تلقائيًا في الرمز ولا يمكن استبدالها.', + tester: { + subtitle: 'ضبط رمز وبيانات المستخدم الوهمية للاختبار.', + run_button: 'تشغيل الاختبار', + result_title: 'نتيجة الاختبار', + }, + form_error: { + invalid_json: 'تنسيق JSON غير صالح', + }, +}; + +export default Object.freeze(jwt_claims); diff --git a/packages/phrases/src/locales/ar-ar/translation/admin-console/log-details.ts b/packages/phrases/src/locales/ar-ar/translation/admin-console/log-details.ts new file mode 100644 index 000000000..199c85742 --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/translation/admin-console/log-details.ts @@ -0,0 +1,18 @@ +const log_details = { + page_title: 'تفاصيل سجل التدقيق', + back_to_logs: 'العودة إلى سجلات التدقيق', + back_to: 'العودة إلى {{name}}', + success: 'نجاح', + failed: 'فشل', + event_key: 'مفتاح الحدث', + application: 'التطبيق', + ip_address: 'عنوان IP', + user: 'المستخدم', + log_id: 'معرف السجل', + time: 'الوقت', + user_agent: 'وكيل المستخدم', + tab_details: 'التفاصيل', + raw_data: 'البيانات الخام', +}; + +export default Object.freeze(log_details); diff --git a/packages/phrases/src/locales/ar-ar/translation/admin-console/logs.ts b/packages/phrases/src/locales/ar-ar/translation/admin-console/logs.ts new file mode 100644 index 000000000..43f513801 --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/translation/admin-console/logs.ts @@ -0,0 +1,12 @@ +const logs = { + page_title: 'سجلات التدقيق', + title: 'سجلات التدقيق', + subtitle: 'عرض بيانات السجل لأحداث المصادقة التي قام بها مستخدموك', + event: 'حدث', + user: 'مستخدم', + application: 'تطبيق', + time: 'الوقت', + filter_by: 'تصفية حسب', +}; + +export default Object.freeze(logs); diff --git a/packages/phrases/src/locales/ar-ar/translation/admin-console/menu.ts b/packages/phrases/src/locales/ar-ar/translation/admin-console/menu.ts new file mode 100644 index 000000000..31db5d317 --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/translation/admin-console/menu.ts @@ -0,0 +1,13 @@ +const menu = { + profile: 'الملف الشخصي', + language: 'اللغة', + appearance: { + label: 'المظهر', + light: 'وضع النهار', + dark: 'وضع الليل', + system: 'مزامنة مع النظام', + }, + sign_out: 'تسجيل الخروج', +}; + +export default Object.freeze(menu); diff --git a/packages/phrases/src/locales/ar-ar/translation/admin-console/mfa.ts b/packages/phrases/src/locales/ar-ar/translation/admin-console/mfa.ts new file mode 100644 index 000000000..0caf48390 --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/translation/admin-console/mfa.ts @@ -0,0 +1,32 @@ +const mfa = { + title: 'المصادقة متعددة العوامل', + description: 'أضف المصادقة متعددة العوامل لتعزيز أمان تجربة تسجيل الدخول الخاصة بك.', + factors: 'العوامل', + multi_factors: 'العوامل المتعددة', + multi_factors_description: 'يحتاج المستخدمون إلى التحقق من إحدى العوامل الممكّنة للتحقق الثنائي.', + totp: 'OTP لتطبيق المصادقة', + otp_description: 'ربط تطبيق Google Authenticator وما إلى ذلك للتحقق من كلمات المرور لمرة واحدة.', + webauthn: 'WebAuthn (مفتاح المرور)', + webauthn_description: + 'التحقق عبر طريقة مدعومة من المتصفح: البيومتريات أو مسح الهاتف أو مفتاح الأمان وما إلى ذلك.', + webauthn_native_tip: 'WebAuthn غير مدعوم للتطبيقات الأصلية.', + webauthn_domain_tip: + 'يربط WebAuthn المفاتيح العامة بالنطاق المحدد. ستمنع تعديل نطاق الخدمة المستخدمين من المصادقة باستخدام مفاتيح المرور الحالية.', + backup_code: 'رمز النسخ الاحتياطي', + backup_code_description: 'إنشاء 10 رموز احتياطية لمرة واحدة بعد تعيين المستخدمين لأي طريقة MFA.', + backup_code_setup_hint: + 'عندما لا يمكن للمستخدمين التحقق من العوامل MFA أعلاه ، استخدم الخيار الاحتياطي.', + backup_code_error_hint: + 'لاستخدام رمز النسخ الاحتياطي ، تحتاج إلى طريقة MFA واحدة على الأقل للمصادقة الناجحة للمستخدم.', + policy: 'السياسة', + policy_description: 'تعيين سياسة MFA لعمليات تسجيل الدخول والتسجيل.', + two_step_sign_in_policy: 'سياسة التحقق الثنائي في تسجيل الدخول', + user_controlled: 'يمكن للمستخدمين تمكين أو تعطيل MFA بأنفسهم', + user_controlled_tip: + 'يمكن للمستخدمين تخطي إعداد MFA في المرة الأولى عند تسجيل الدخول أو التسجيل ، أو تمكينه / تعطيله في إعدادات الحساب.', + mandatory: 'يتطلب دائمًا من المستخدمين استخدام MFA عند تسجيل الدخول', + mandatory_tip: + 'يجب على المستخدمين إعداد MFA في المرة الأولى عند تسجيل الدخول أو التسجيل ، واستخدامه في جميع تسجيلات الدخول المستقبلية.', +}; + +export default Object.freeze(mfa); diff --git a/packages/phrases/src/locales/ar-ar/translation/admin-console/organization-details.ts b/packages/phrases/src/locales/ar-ar/translation/admin-console/organization-details.ts new file mode 100644 index 000000000..dfd11b627 --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/translation/admin-console/organization-details.ts @@ -0,0 +1,77 @@ +const organization_details = { + page_title: 'تفاصيل المؤسسة', + delete_confirmation: + 'بمجرد الحذف ، سيفقد جميع الأعضاء عضويتهم وأدوارهم في هذه المؤسسة. لا يمكن التراجع عن هذا الإجراء.', + organization_id: 'معرف المؤسسة', + settings_description: + 'تمثل المؤسسات الفرق والعملاء التجاريين وشركات الشركاء التي يمكنها الوصول إلى تطبيقاتك.', + name_placeholder: 'اسم المؤسسة ، ليس مطلوبًا أن يكون فريدًا.', + description_placeholder: 'وصف المؤسسة.', + member: 'عضو', + member_other: 'أعضاء', + add_members_to_organization: 'إضافة أعضاء إلى المؤسسة {{name}}', + add_members_to_organization_description: + 'ابحث عن المستخدمين المناسبين عن طريق البحث بالاسم أو البريد الإلكتروني أو الهاتف أو معرف المستخدم. لا يتم عرض الأعضاء الحاليين في نتائج البحث.', + add_with_organization_role: 'إضافة بأدوار المؤسسة', + user: 'مستخدم', + application: 'تطبيق', + application_other: 'تطبيقات', + add_applications_to_organization: 'إضافة تطبيقات إلى المؤسسة {{name}}', + add_applications_to_organization_description: + 'ابحث عن التطبيقات المناسبة عن طريق البحث بمعرف التطبيق أو الاسم أو الوصف. لا يتم عرض التطبيقات الحالية في نتائج البحث.', + at_least_one_application: 'مطلوب تطبيق واحد على الأقل.', + remove_application_from_organization: 'إزالة التطبيق من المؤسسة', + remove_application_from_organization_description: + 'بمجرد إزالته ، سيفقد التطبيق ارتباطه وأدواره في هذه المؤسسة. لا يمكن التراجع عن هذا الإجراء.', + search_application_placeholder: 'البحث بواسطة معرف التطبيق أو الاسم أو الوصف', + roles: 'أدوار المؤسسة', + authorize_to_roles: 'السماح لـ {{name}} بالوصول إلى الأدوار التالية:', + edit_organization_roles: 'تحرير أدوار المؤسسة', + edit_organization_roles_title: 'تحرير أدوار المؤسسة لـ {{name}}', + remove_user_from_organization: 'إزالة المستخدم من المؤسسة', + remove_user_from_organization_description: + 'بمجرد إزالته ، سيفقد المستخدم عضويته وأدواره في هذه المؤسسة. لا يمكن التراجع عن هذا الإجراء.', + search_user_placeholder: 'البحث بالاسم أو البريد الإلكتروني أو الهاتف أو معرف المستخدم', + at_least_one_user: 'مطلوب مستخدم واحد على الأقل.', + organization_roles_tooltip: 'الأدوار المعينة لـ {{type}} داخل هذه المؤسسة.', + custom_data: 'بيانات مخصصة', + custom_data_tip: + 'البيانات المخصصة هي كائن JSON يمكن استخدامه لتخزين بيانات إضافية مرتبطة بالمؤسسة.', + invalid_json_object: 'كائن JSON غير صالح.', + branding: { + logo: 'شعارات المؤسسة', + logo_tooltip: + 'يمكنك تمرير معرف المؤسسة لعرض هذا الشعار في تجربة تسجيل الدخول ؛ الإصدار الداكن من الشعار مطلوب إذا تم تمكين الوضع الداكن في إعدادات تجربة تسجيل الدخول الشاملة. تعلم المزيد', + }, + jit: { + title: 'التوفير في اللحظة الأخيرة', + description: + 'يمكن للمستخدمين الانضمام تلقائيًا إلى المؤسسة وتعيينهم أدوارًا عند تسجيلهم الأول من خلال بعض طرق المصادقة. يمكنك تعيين متطلبات لتلبية التوفير في اللحظة الأخيرة.', + email_domain: 'توفير نطاق البريد الإلكتروني', + email_domain_description: + 'سينضم المستخدمون الجدد الذين يسجلون الاشتراك باستخدام عناوين البريد الإلكتروني المتحققة أو من خلال تسجيل الدخول الاجتماعي باستخدام عناوين البريد الإلكتروني المتحققة تلقائيًا إلى المؤسسة. تعلم المزيد', + email_domain_placeholder: 'أدخل نطاقات البريد الإلكتروني للتوفير في اللحظة الأخيرة', + invalid_domain: 'نطاق غير صالح', + domain_already_added: 'تمت إضافة النطاق بالفعل', + sso_enabled_domain_warning: + 'لقد أدخلت واحدًا أو أكثر من نطاقات البريد الإلكتروني المرتبطة بـ SSO المؤسسة. سيتبع المستخدمون الذين لديهم هذه البريد الإلكتروني تدفق SSO القياسي ولن يتم توفيرهم لهذه المؤسسة ما لم يتم تكوين توفير SSO المؤسسة.', + enterprise_sso: 'توفير SSO المؤسسة', + no_enterprise_connector_set: + 'لم تقم بإعداد أي موصل SSO المؤسسة بعد. أضف الموصلات أولاً لتمكين توفير SSO المؤسسة. إعداد', + add_enterprise_connector: 'إضافة موصل المؤسسة', + enterprise_sso_description: + 'سينضم المستخدمون الجدد أو المستخدمون الحاليون الذين يسجلون الدخول من خلال SSO المؤسسة للمرة الأولى تلقائيًا إلى المؤسسة. تعلم المزيد', + organization_roles: 'أدوار المؤسسة الافتراضية', + organization_roles_description: + 'تعيين الأدوار للمستخدمين عند الانضمام إلى المؤسسة من خلال التوفير في اللحظة الأخيرة.', + }, + mfa: { + title: 'المصادقة ذات العوامل المتعددة (MFA)', + tip: 'عندما يتطلب MFA ، سيتم رفض المستخدمين الذين ليس لديهم MFA مكون عند محاولة تبادل رمز المؤسسة. لا يؤثر هذا الإعداد على مصادقة المستخدم.', + description: 'يتطلب من المستخدمين تكوين المصادقة ذات العوامل المتعددة للوصول إلى هذه المؤسسة.', + no_mfa_warning: + 'لم يتم تمكين أي طرق مصادقة ذات عوامل متعددة للمستأجر الخاص بك. لن يتمكن المستخدمون من الوصول إلى هذه المؤسسة حتى يتم تمكين طريقة واحدة على الأقل طريقة مصادقة ذات عوامل متعددة.', + }, +}; + +export default Object.freeze(organization_details); diff --git a/packages/phrases/src/locales/ar-ar/translation/admin-console/organization-role-details.ts b/packages/phrases/src/locales/ar-ar/translation/admin-console/organization-role-details.ts new file mode 100644 index 000000000..8ce9034f2 --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/translation/admin-console/organization-role-details.ts @@ -0,0 +1,39 @@ +const organization_role_details = { + page_title: 'تفاصيل دور المؤسسة', + back_to_org_roles: 'العودة إلى أدوار المؤسسة', + delete_confirm: + 'بالقيام بذلك، ستتم إزالة الأذونات المرتبطة بهذا الدور من المستخدمين المتأثرين وحذف العلاقات بين أدوار المؤسسة وأعضاء المؤسسة وأذونات المؤسسة.', + deleted: 'تم حذف دور المؤسسة {{name}} بنجاح.', + permissions: { + tab: 'الأذونات', + name_column: 'الأذن', + description_column: 'الوصف', + type_column: 'نوع الأذن', + type: { + api: 'أذن API', + org: 'أذن المؤسسة', + }, + assign_permissions: 'تعيين الأذونات', + remove_permission: 'إزالة الأذن', + remove_confirmation: + 'إذا تمت إزالة هذا الأذن، سيفقد المستخدم الذي يحمل هذا الدور في الشركة الوصول الذي يتم منحه بهذا الأذن.', + removed: 'تمت إزالة الأذن {{name}} من دور المؤسسة بنجاح', + assign_description: + 'تعيين الأذونات للأدوار داخل هذه المؤسسة. يمكن أن تشمل هذه الأذونات كل من أذونات المؤسسة وأذونات API.', + organization_permissions: 'أذونات المؤسسة', + api_permissions: 'أذونات API', + assign_organization_permissions: 'تعيين أذونات المؤسسة', + assign_api_permissions: 'تعيين أذونات API', + }, + general: { + tab: 'عام', + settings: 'الإعدادات', + description: + 'دور المؤسسة هو تجميع للأذونات التي يمكن تعيينها للمستخدمين. يمكن أن تأتي الأذونات من أذونات المؤسسة المحددة مسبقًا وأذونات API.', + name_field: 'الاسم', + description_field: 'الوصف', + description_field_placeholder: 'المستخدمين ذوي أذونات العرض فقط', + }, +}; + +export default Object.freeze(organization_role_details); diff --git a/packages/phrases/src/locales/ar-ar/translation/admin-console/organization-template.ts b/packages/phrases/src/locales/ar-ar/translation/admin-console/organization-template.ts new file mode 100644 index 000000000..b96788618 --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/translation/admin-console/organization-template.ts @@ -0,0 +1,43 @@ +const organization_template = { + title: 'قالب المؤسسة', + subtitle: + 'في تطبيقات SaaS متعددة المستأجرين ، يحدد قالب المؤسسة سياسات التحكم في الوصول المشتركة (الأذونات والأدوار) لعدة مؤسسات.', + roles: { + tab_name: 'أدوار المؤسسة', + search_placeholder: 'البحث بواسطة اسم الدور', + create_title: 'إنشاء دور المؤسسة', + role_column: 'دور المؤسسة', + permissions_column: 'الأذونات', + placeholder_title: 'دور المؤسسة', + placeholder_description: + 'دور المؤسسة هو تجميع للأذونات التي يمكن تعيينها للمستخدمين. يجب أن تكون الأذونات من الأذونات المؤسسة المحددة مسبقًا.', + create_modal: { + title: 'إنشاء دور المؤسسة', + create: 'إنشاء دور', + name: 'اسم الدور', + description: 'الوصف', + type: 'نوع الدور', + created: 'تم إنشاء دور المؤسسة {{name}} بنجاح.', + }, + }, + permissions: { + tab_name: 'أذونات المؤسسة', + search_placeholder: 'البحث بواسطة اسم الأذن', + create_org_permission: 'إنشاء أذن المؤسسة', + permission_column: 'أذن المؤسسة', + description_column: 'الوصف', + placeholder_title: 'أذن المؤسسة', + placeholder_description: 'أذن المؤسسة يشير إلى التصريح بالوصول إلى مورد في سياق المؤسسة.', + delete_confirm: + 'إذا تم حذف هذا الأذن ، فسيفقد جميع أدوار المؤسسة التي تحتوي على هذا الأذن هذا الأذن ، وسيفقد المستخدمون الذين لديهم هذا الأذن الوصول الذي تمنحه.', + create_title: 'إنشاء أذن المؤسسة', + edit_title: 'تحرير أذن المؤسسة', + permission_field_name: 'اسم الأذن', + description_field_name: 'الوصف', + description_field_placeholder: 'قراءة سجل المواعيد', + create_permission: 'إنشاء أذن', + created: 'تم إنشاء أذن المؤسسة {{name}} بنجاح.', + }, +}; + +export default Object.freeze(organization_template); diff --git a/packages/phrases/src/locales/ar-ar/translation/admin-console/organizations.ts b/packages/phrases/src/locales/ar-ar/translation/admin-console/organizations.ts new file mode 100644 index 000000000..c98965af1 --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/translation/admin-console/organizations.ts @@ -0,0 +1,75 @@ +const organizations = { + organization: 'المؤسسة', + page_title: 'المؤسسات', + title: 'المؤسسات', + subtitle: + 'تستخدم المؤسسات عادة في تطبيقات SaaS أو تطبيقات متعددة المستأجرين المماثلة وتمثل عملائك الذين هم فرق أو مؤسسات أو شركات بأكملها. تعمل المؤسسات كعنصر أساسي للمصادقة والترخيص للأعمال التجارية بين الشركات.', + organization_template: 'نموذج المؤسسة', + organization_id: 'معرف المؤسسة', + members: 'الأعضاء', + machine_to_machine: 'تطبيقات من الجهاز إلى الجهاز', + create_organization: 'إنشاء مؤسسة', + setup_organization: 'إعداد مؤسستك', + organization_list_placeholder_title: 'المؤسسة', + organization_list_placeholder_text: + 'تستخدم المؤسسات في العادة في تطبيقات SaaS أو تطبيقات متعددة المستأجرين المماثلة كممارسة جيدة. تمكنك من تطوير تطبيقات تسمح للعملاء بإنشاء وإدارة المؤسسات ودعوة الأعضاء وتعيين الأدوار.', + organization_name_placeholder: 'مؤسستي', + organization_description_placeholder: 'وصف موجز للمؤسسة', + organization_permission: 'إذن المؤسسة', + organization_permission_other: 'أذونات المؤسسة', + create_permission_placeholder: 'قراءة سجل المواعيد', + organization_role: 'دور المؤسسة', + organization_role_other: 'أدوار المؤسسة', + organization_role_description: + 'دور المؤسسة هو تجميع للأذونات التي يمكن تعيينها للمستخدمين. يجب أن تأتي الأذونات من أذونات المؤسسة المحددة مسبقًا.', + role: 'الدور', + search_placeholder: 'البحث بواسطة اسم المؤسسة أو المعرف', + search_role_placeholder: 'اكتب للبحث وتحديد الأدوار', + empty_placeholder: '🤔 ليس لديك أي {{entity}} معدة حتى الآن.', + organization_and_member: 'المؤسسة والعضو', + organization_and_member_description: + 'المؤسسة هي مجموعة من المستخدمين ويمكن أن تمثل الفرق والعملاء التجاريين وشركات الشركاء، حيث يكون كل مستخدم عضوًا. يمكن أن تكون هذه الكيانات الأساسية للتعامل مع متطلباتك المتعددة للمستأجرين.', + guide: { + title: 'ابدأ بالأدلة', + subtitle: 'ابدأ إعدادات المؤسسة الخاصة بك مع أدلتنا', + introduction: { + title: 'لنفهم كيف تعمل المؤسسة في Logto', + section_1: { + title: 'المؤسسة هي مجموعة من المستخدمين (الهويات)', + }, + section_2: { + title: 'تم تصميم نموذج المؤسسة للتحكم في وصول التطبيقات متعددة المستأجرين', + description: + 'في تطبيقات SaaS متعددة المستأجرين ، غالبًا ما تشترك المؤسسات المتعددة في نفس نموذج التحكم في الوصول ، والذي يشمل الأذونات والأدوار. في Logto ، نسميه "نموذج المؤسسة".', + permission_description: 'إذن المؤسسة يشير إلى التصريح بالوصول إلى مورد في سياق المؤسسة.', + role_description_deprecated: 'دور المؤسسة هو تجميع لأذونات المؤسسة يمكن تعيينها للأعضاء.', + role_description: + 'دور المؤسسة هو تجميع لأذونات المؤسسة أو أذونات واجهة برمجة التطبيقات يمكن تعيينها للأعضاء.', + }, + section_3: { + title: 'هل يمكنني تعيين أذونات واجهة برمجة التطبيقات لأدوار المؤسسة؟', + description: + 'نعم ، يمكنك تعيين أذونات واجهة برمجة التطبيقات لأدوار المؤسسة. يوفر Logto المرونة في إدارة أدوار المؤسسة الخاصة بك ، مما يتيح لك تضمين كل من أذونات المؤسسة وأذونات واجهة برمجة التطبيقات ضمن تلك الأدوار.', + }, + section_4: { + title: 'تفاعل مع الرسم التوضيحي لرؤية كيفية ربط كل شيء', + description: + 'لنأخذ مثالًا. جون وسارة في مؤسسات مختلفة بأدوار مختلفة في سياق مؤسسات مختلفة. مرر المؤشر فوق الوحدات المختلفة وشاهد ما يحدث.', + }, + }, + organization_permissions: 'أذونات المؤسسة', + organization_roles: 'أدوار المؤسسة', + admin: 'المسؤول', + member: 'العضو', + guest: 'الضيف', + role_description: 'الدور "{{role}}" يشترك في نفس نموذج المؤسسة عبر مؤسسات مختلفة.', + john: 'جون', + john_tip: + 'جون ينتمي إلى مؤسستين بالبريد الإلكتروني "john@email.com" كمعرف واحد. إنه المسؤول في المؤسسة A وضيف في المؤسسة B.', + sarah: 'سارة', + sarah_tip: + 'سارة تنتمي إلى مؤسسة واحدة بالبريد الإلكتروني "sarah@email.com" كمعرف واحد. إنها المسؤولة في المؤسسة B.', + }, +}; + +export default Object.freeze(organizations); diff --git a/packages/phrases/src/locales/ar-ar/translation/admin-console/permissions.ts b/packages/phrases/src/locales/ar-ar/translation/admin-console/permissions.ts new file mode 100644 index 000000000..70ff01377 --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/translation/admin-console/permissions.ts @@ -0,0 +1,15 @@ +const permissions = { + search_placeholder: 'البحث حسب اسم الواجهة البرمجية أو اسم الصلاحية', + search_placeholder_without_api: 'البحث حسب اسم الصلاحية', + name_column: 'الصلاحية', + description_column: 'الوصف', + api_column: 'واجهة برمجية', + placeholder_title: 'الصلاحية', + placeholder_description: 'الصلاحية تشير إلى التصريح بالوصول إلى مورد (نسميه مورد واجهة برمجية).', + edit: 'تعديل الصلاحية', + delete: 'حذف الصلاحية', + remove: 'إزالة الصلاحية', + edit_title: 'تعديل صلاحية واجهة برمجية', +}; + +export default Object.freeze(permissions); diff --git a/packages/phrases/src/locales/ar-ar/translation/admin-console/profile.ts b/packages/phrases/src/locales/ar-ar/translation/admin-console/profile.ts new file mode 100644 index 000000000..1c4054285 --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/translation/admin-console/profile.ts @@ -0,0 +1,107 @@ +const profile = { + page_title: 'إعدادات الحساب', + title: 'إعدادات الحساب', + description: 'قم بتغيير إعدادات حسابك وإدارة معلوماتك الشخصية هنا لضمان أمان حسابك.', + settings: { + title: 'إعدادات الملف الشخصي', + profile_information: 'معلومات الملف الشخصي', + avatar: 'الصورة الرمزية', + name: 'الاسم', + username: 'اسم المستخدم', + }, + link_account: { + title: 'ربط الحساب', + email_sign_in: 'تسجيل الدخول بالبريد الإلكتروني', + email: 'البريد الإلكتروني', + social_sign_in: 'تسجيل الدخول بوسائل التواصل الاجتماعي', + link_email: 'ربط البريد الإلكتروني', + link_email_subtitle: 'قم بربط بريدك الإلكتروني لتسجيل الدخول أو للمساعدة في استعادة الحساب.', + email_required: 'البريد الإلكتروني مطلوب', + invalid_email: 'عنوان البريد الإلكتروني غير صالح', + identical_email_address: 'عنوان البريد الإلكتروني المدخل مطابق للحالي', + anonymous: 'مجهول', + }, + password: { + title: 'كلمة المرور والأمان', + password: 'كلمة المرور', + password_setting: 'إعداد كلمة المرور', + new_password: 'كلمة المرور الجديدة', + confirm_password: 'تأكيد كلمة المرور', + enter_password: 'أدخل كلمة المرور الحالية', + enter_password_subtitle: + 'تحقق من أنه أنت لحماية أمان حسابك. يرجى إدخال كلمة المرور الحالية قبل تغييرها.', + set_password: 'تعيين كلمة المرور', + verify_via_password: 'التحقق عبر كلمة المرور', + show_password: 'إظهار كلمة المرور', + required: 'كلمة المرور مطلوبة', + do_not_match: 'كلمات المرور غير متطابقة. يرجى المحاولة مرة أخرى.', + }, + code: { + enter_verification_code: 'أدخل رمز التحقق', + enter_verification_code_subtitle: 'تم إرسال رمز التحقق إلى {{target}}', + verify_via_code: 'التحقق عبر رمز التحقق', + resend: 'إعادة إرسال رمز التحقق', + resend_countdown: 'إعادة إرسال في {{countdown}} ثانية', + }, + delete_account: { + title: 'حذف الحساب', + label: 'حذف الحساب', + description: + 'سيؤدي حذف حسابك إلى إزالة جميع المعلومات الشخصية وبيانات المستخدم والتكوين. لا يمكن التراجع عن هذا الإجراء.', + button: 'حذف الحساب', + p: { + has_issue: + 'نأسف لسماع أنك ترغب في حذف حسابك. قبل أن تتمكن من حذف حسابك ، يجب عليك حل المشكلات التالية.', + after_resolved: + 'بمجرد حل المشكلات ، يمكنك حذف حسابك. يرجى عدم التردد في الاتصال بنا إذا كنت بحاجة إلى أي مساعدة.', + check_information: + 'نأسف لسماع أنك ترغب في حذف حسابك. يرجى التحقق من المعلومات التالية بعناية قبل المتابعة.', + remove_all_data: + 'سيؤدي حذف حسابك إلى إزالة جميع البيانات المتعلقة بك في Logto Cloud. لذا يرجى التأكد من نسخ أي بيانات مهمة قبل المتابعة.', + confirm_information: + 'يرجى تأكيد أن المعلومات أعلاه هي ما تتوقعه. بمجرد حذف حسابك ، لن نتمكن من استعادته.', + has_admin_role: 'نظرًا لأن لديك دور المسؤول في المستأجر التالي ، سيتم حذفه مع حسابك:', + has_admin_role_other: + 'نظرًا لأن لديك دور المسؤول في المستأجرات التالية ، سيتم حذفها مع حسابك:', + quit_tenant: 'أنت على وشك الخروج من المستأجر التالي:', + quit_tenant_other: 'أنت على وشك الخروج من المستأجرات التالية:', + }, + issues: { + paid_plan: 'المستأجر التالي لديه خطة مدفوعة ، يرجى إلغاء الاشتراك أولاً:', + paid_plan_other: 'المستأجرات التالية لديها خطط مدفوعة ، يرجى إلغاء الاشتراك أولاً:', + subscription_status: 'المستأجر التالي لديه مشكلة في حالة الاشتراك:', + subscription_status_other: 'المستأجرات التالية لديها مشكلات في حالة الاشتراك:', + open_invoice: 'المستأجر التالي لديه فاتورة مفتوحة:', + open_invoice_other: 'المستأجرات التالية لديها فواتير مفتوحة:', + }, + error_occurred: 'حدث خطأ', + error_occurred_description: 'عذرًا ، حدث خطأ ما أثناء حذف حسابك:', + request_id: 'معرف الطلب: {{requestId}}', + try_again_later: + 'يرجى المحاولة مرة أخرى في وقت لاحق. إذا استمرت المشكلة ، يرجى الاتصال بفريق Logto مع معرف الطلب.', + final_confirmation: 'تأكيد نهائي', + about_to_start_deletion: 'أنت على وشك بدء عملية الحذف ولا يمكن التراجع عن هذا الإجراء.', + permanently_delete: 'حذف بشكل دائم', + }, + set: 'تعيين', + change: 'تغيير', + link: 'ربط', + unlink: 'إلغاء الربط', + not_set: 'غير محدد', + change_avatar: 'تغيير الصورة الرمزية', + change_name: 'تغيير الاسم', + change_username: 'تغيير اسم المستخدم', + set_name: 'تعيين الاسم', + email_changed: 'تم تغيير البريد الإلكتروني.', + password_changed: 'تم تغيير كلمة المرور.', + updated: 'تم تحديث {{target}}.', + linked: 'تم ربط {{target}}.', + unlinked: 'تم إلغاء ربط {{target}}.', + email_exists_reminder: + 'هذا البريد الإلكتروني {{email}} مرتبط بحساب موجود بالفعل. ربط بريد إلكتروني آخر هنا.', + unlink_confirm_text: 'نعم ، إلغاء الربط', + unlink_reminder: + 'لن يتمكن المستخدمون من تسجيل الدخول باستخدام حساب إذا قمت بإلغاء الربط. هل أنت متأكد من المتابعة؟', +}; + +export default Object.freeze(profile); diff --git a/packages/phrases/src/locales/ar-ar/translation/admin-console/protected-app.ts b/packages/phrases/src/locales/ar-ar/translation/admin-console/protected-app.ts new file mode 100644 index 000000000..812d5525c --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/translation/admin-console/protected-app.ts @@ -0,0 +1,42 @@ +const protected_app = { + name: 'تطبيق محمي', + title: 'إنشاء تطبيق محمي: إضافة المصادقة بسهولة وسرعة رائعة', + description: + 'يحافظ تطبيق محمي بشكل آمن على جلسات المستخدم ويقوم بتوجيه طلبات التطبيق الخاص بك. مدعوم بواسطة Cloudflare Workers ، استمتع بأداء الطبقة العليا وبدء بارد بدون تأخير في جميع أنحاء العالم. تعرف أكثر', + fast_create: 'إنشاء سريع', + modal_title: 'إنشاء تطبيق محمي', + modal_subtitle: + 'قم بتمكين الحماية الآمنة والسريعة بنقرات قليلة. أضف المصادقة إلى تطبيق الويب الحالي الخاص بك بسهولة.', + form: { + url_field_label: 'عنوان URL الأصلي الخاص بك', + url_field_placeholder: 'https://domain.com/', + url_field_description: 'قدم عنوان تطبيقك الذي يحتاج إلى حماية المصادقة.', + url_field_modification_notice: + 'قد يستغرق تحديث عنوان URL الأصلي من 1 إلى 2 دقيقة ليصبح فعالًا في جميع مواقع الشبكة العالمية.', + url_field_tooltip: + 'قدم عنوان تطبيقك ، باستثناء أي "/ pathname". بعد الإنشاء ، يمكنك تخصيص قواعد مصادقة المسار.', + domain_field_label: 'نطاق التطبيق', + domain_field_placeholder: 'نطاقك', + domain_field_description: + 'يعمل هذا العنوان كوكيل حماية المصادقة لعنوان URL الأصلي. يمكن تطبيق النطاق المخصص بعد الإنشاء.', + domain_field_description_short: 'يعمل هذا العنوان كوكيل حماية المصادقة لعنوان URL الأصلي.', + domain_field_tooltip: + 'سيتم استضافة التطبيقات المحمية بواسطة Logto في "نطاقك.{{domain}}" افتراضيًا. يمكن تطبيق النطاق المخصص بعد الإنشاء.', + create_application: 'إنشاء التطبيق', + create_protected_app: 'إنشاء سريع', + errors: { + domain_required: 'مطلوب نطاقك.', + domain_in_use: 'اسم النطاق الفرعي هذا مستخدم بالفعل.', + invalid_domain_format: + 'تنسيق النطاق الفرعي غير صالح: استخدم فقط الأحرف الصغيرة والأرقام والشرطات "-".', + url_required: 'مطلوب عنوان URL الأصلي.', + invalid_url: + 'تنسيق عنوان URL الأصلي غير صالح: استخدم http:// أو https://. ملاحظة: "/ pathname" غير مدعوم حاليًا.', + localhost: + 'يرجى تعريض خادمك المحلي للإنترنت أولاً. تعرف على المزيد حول التطوير المحلي.', + }, + }, + success_message: '🎉 تم تمكين المصادقة على التطبيق بنجاح! استكشف تجربة موقع الويب الجديدة.', +}; + +export default Object.freeze(protected_app); diff --git a/packages/phrases/src/locales/ar-ar/translation/admin-console/role-details.ts b/packages/phrases/src/locales/ar-ar/translation/admin-console/role-details.ts new file mode 100644 index 000000000..8374e68bf --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/translation/admin-console/role-details.ts @@ -0,0 +1,74 @@ +const role_details = { + back_to_roles: 'العودة إلى الأدوار', + identifier: 'المعرف', + delete_description: + 'بالقيام بذلك، سيتم إزالة الأذونات المرتبطة بهذا الدور من المستخدمين المتأثرين وحذف الربط بين الأدوار والمستخدمين والأذونات.', + role_deleted: 'تم حذف {{name}} بنجاح.', + general_tab: 'عام', + users_tab: 'المستخدمين', + m2m_apps_tab: 'تطبيقات الجهاز إلى الجهاز', + permissions_tab: 'الأذونات', + settings: 'الإعدادات', + settings_description: + 'الأدوار هي مجموعة من الأذونات التي يمكن تعيينها للمستخدمين. كما توفر وسيلة لتجميع الأذونات المحددة لواجهات برمجة التطبيقات المختلفة، مما يجعل من الأكثر كفاءة إضافة أو إزالة أو ضبط الأذونات مقارنة بتعيينها بشكل فردي للمستخدمين.', + field_name: 'الاسم', + field_description: 'الوصف', + field_is_default: 'الدور الافتراضي', + field_is_default_description: + 'تعيين هذا الدور كدور افتراضي للمستخدمين الجدد. يمكن تعيين عدة أدوار افتراضية. ستؤثر هذه العملية أيضًا على الأدوار الافتراضية للمستخدمين الذين تم إنشاؤهم عبر واجهة برمجة التطبيقات للإدارة.', + type_m2m_role_tag: 'الجهاز إلى الجهاز', + type_user_role_tag: 'المستخدم', + m2m_role_notification: + 'قم بتعيين هذا الدور من الجهاز إلى الجهاز لتطبيق الجهاز إلى موارد واجهة برمجة التطبيقات ذات الصلة. قم بإنشاء تطبيق الجهاز إلى الجهاز أولاً إذا لم تكن قد قمت بذلك بالفعل.', + permission: { + assign_button: 'تعيين الأذونات', + assign_title: 'تعيين الأذونات', + assign_subtitle: + 'تعيين الأذونات لهذا الدور. سيحصل الدور على الأذونات المضافة، وسيكون للمستخدمين بهذا الدور هذه الأذونات.', + assign_form_field: 'تعيين الأذونات', + added_text_one: 'تمت إضافة {{count, number}} أذونة', + added_text_other: 'تمت إضافة {{count, number}} أذونة', + api_permission_count_one: '{{count, number}} أذونة', + api_permission_count_other: '{{count, number}} أذونة', + confirm_assign: 'تعيين الأذونات', + permission_assigned: 'تم تعيين الأذونات المحددة بنجاح لهذا الدور', + deletion_description: + 'إذا تمت إزالة هذه الأذونة، فسيفقد المستخدم المتأثر بهذا الدور الوصول الذي يتم منحه بواسطة هذه الأذونة.', + permission_deleted: 'تمت إزالة الأذونة "{{name}}" بنجاح من هذا الدور', + empty: 'لا توجد أذونة متاحة', + }, + users: { + assign_button: 'تعيين المستخدمين', + name_column: 'المستخدم', + app_column: 'التطبيق', + latest_sign_in_column: 'آخر تسجيل دخول', + delete_description: + 'سيظل المستخدم في مجموعة المستخدمين الخاصة بك ولكنه سيفقد الترخيص لهذا الدور.', + deleted: 'تمت إزالة {{name}} بنجاح من هذا الدور', + assign_title: 'تعيين المستخدمين إلى {{name}}', + assign_subtitle: + 'ابحث عن المستخدمين المناسبين عن طريق البحث بالاسم أو البريد الإلكتروني أو الهاتف أو معرف المستخدم.', + assign_field: 'تعيين المستخدمين', + confirm_assign: 'تعيين المستخدمين', + assigned_toast_text: 'تم تعيين المستخدمين المحددين بنجاح لهذا الدور', + empty: 'لا يوجد مستخدم متاح', + }, + applications: { + assign_button: 'تعيين تطبيقات الجهاز إلى الجهاز', + name_column: 'التطبيق', + app_column: 'تطبيق الجهاز إلى الجهاز', + description_column: 'الوصف', + delete_description: + 'سيظل التطبيق في مجموعة التطبيقات الخاصة بك ولكنه سيفقد الترخيص لهذا الدور.', + deleted: 'تمت إزالة {{name}} بنجاح من هذا الدور', + assign_title: 'تعيين تطبيقات الجهاز إلى الجهاز لـ {{name}}', + assign_subtitle: + 'ابحث عن تطبيقات الجهاز إلى الجهاز المناسبة عن طريق البحث بالاسم أو الوصف أو معرف التطبيق.', + assign_field: 'تعيين تطبيقات الجهاز إلى الجهاز', + confirm_assign: 'تعيين تطبيقات الجهاز إلى الجهاز', + assigned_toast_text: 'تم تعيين التطبيقات المحددة بنجاح لهذا الدور', + empty: 'لا يوجد تطبيق متاح', + }, +}; + +export default Object.freeze(role_details); diff --git a/packages/phrases/src/locales/ar-ar/translation/admin-console/roles.ts b/packages/phrases/src/locales/ar-ar/translation/admin-console/roles.ts new file mode 100644 index 000000000..20344ce8f --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/translation/admin-console/roles.ts @@ -0,0 +1,39 @@ +const roles = { + page_title: 'الأدوار', + title: 'الأدوار', + subtitle: + 'تتضمن الأدوار الأذونات التي تحدد ما يمكن للمستخدم القيام به. يستخدم RBAC الأدوار لمنح المستخدمين الوصول إلى الموارد لإجراءات محددة.', + create: 'إنشاء دور', + role_name: 'اسم الدور', + role_type: 'نوع الدور', + type_user: 'مستخدم', + type_machine_to_machine: 'من الجهاز إلى الجهاز', + role_description: 'الوصف', + role_name_placeholder: 'أدخل اسم الدور الخاص بك', + role_description_placeholder: 'أدخل وصف الدور الخاص بك', + col_roles: 'الأدوار', + col_type: 'النوع', + col_description: 'الوصف', + col_assigned_entities: 'المعينة', + user_counts: '{{count}} مستخدم', + application_counts: '{{count}} تطبيق', + user_count: '{{count}} مستخدم', + application_count: '{{count}} تطبيق', + assign_permissions: 'تعيين الأذونات', + create_role_title: 'إنشاء دور', + create_role_description: 'استخدم الأدوار لتنظيم الأذونات وتعيينها للمستخدمين.', + create_role_button: 'إنشاء دور', + role_created: 'تم إنشاء الدور {{name}} بنجاح.', + search: 'البحث بواسطة اسم الدور أو الوصف أو المعرف', + placeholder_title: 'الأدوار', + placeholder_description: + 'الأدوار هي مجموعة من الأذونات التي يمكن تعيينها للمستخدمين. تأكد من إضافة الأذونات أولاً قبل إنشاء الأدوار.', + assign_roles: 'تعيين الأدوار', + management_api_access_notification: + 'للوصول إلى واجهة برمجة تطبيقات إدارة Logto، حدد الأدوار ذات الأذونات لواجهة برمجة التطبيقات .', + with_management_api_access_tip: + 'يتضمن هذا الدور من الجهاز إلى الجهاز أذونات واجهة برمجة تطبيقات إدارة Logto', + role_creation_hint: 'لا يمكنك العثور على الدور المناسب؟ إنشاء دور', +}; + +export default Object.freeze(roles); diff --git a/packages/phrases/src/locales/ar-ar/translation/admin-console/session-expired.ts b/packages/phrases/src/locales/ar-ar/translation/admin-console/session-expired.ts new file mode 100644 index 000000000..5b5b10bd7 --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/translation/admin-console/session-expired.ts @@ -0,0 +1,8 @@ +const session_expired = { + title: 'انتهت صلاحية الجلسة', + subtitle: + 'قد تكون جلستك قد انتهت وتم قطع الاتصال. انقر على الزر أدناه لتسجيل الدخول إلى واجهة التحكم الإدارية مرة أخرى.', + button: 'تسجيل الدخول مرة أخرى', +}; + +export default Object.freeze(session_expired); diff --git a/packages/phrases/src/locales/ar-ar/translation/admin-console/sign-in-exp/content.ts b/packages/phrases/src/locales/ar-ar/translation/admin-console/sign-in-exp/content.ts new file mode 100644 index 000000000..932745d9e --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/translation/admin-console/sign-in-exp/content.ts @@ -0,0 +1,46 @@ +const content = { + terms_of_use: { + title: 'الشروط', + terms_of_use: 'رابط شروط الاستخدام', + terms_of_use_placeholder: 'https://your.terms.of.use/', + privacy_policy: 'رابط سياسة الخصوصية', + privacy_policy_placeholder: 'https://your.privacy.policy/', + agree_to_terms: 'موافقة على الشروط', + agree_policies: { + automatic: 'الموافقة التلقائية على الشروط', + manual_registration_only: 'الموافقة عبر خانة الاختيار في عملية التسجيل فقط', + manual: 'الموافقة عبر خانة الاختيار في عملية التسجيل وتسجيل الدخول', + }, + }, + languages: { + title: 'اللغات', + enable_auto_detect: 'تمكين الكشف التلقائي', + description: + 'يكتشف البرنامج الخاص بك إعدادات لغة المستخدم ويقوم بالتبديل إلى اللغة المحلية. يمكنك إضافة لغات جديدة عن طريق ترجمة واجهة المستخدم من الإنجليزية إلى لغة أخرى.', + manage_language: 'إدارة اللغة', + default_language: 'اللغة الافتراضية', + default_language_description_auto: + 'سيتم استخدام اللغة الافتراضية عندما لا يتم تغطية لغة المستخدم المكتشفة في مكتبة اللغة الحالية.', + default_language_description_fixed: + 'عند تعطيل الكشف التلقائي، اللغة الافتراضية هي اللغة الوحيدة التي سيعرضها البرنامج الخاص بك. قم بتشغيل الكشف التلقائي لتوسيع اللغة.', + }, + manage_language: { + title: 'إدارة اللغة', + subtitle: + 'قم بتعريب تجربة المنتج عن طريق إضافة لغات وترجمات. يمكن تعيين مساهمتك كلغة افتراضية.', + add_language: 'إضافة لغة', + logto_provided: 'توفرها Logto', + key: 'مفتاح', + logto_source_values: 'قيم المصدر Logto', + custom_values: 'قيم مخصصة', + clear_all_tip: 'مسح جميع القيم', + unsaved_description: 'لن يتم حفظ التغييرات إذا غادرت هذه الصفحة دون حفظها.', + deletion_tip: 'حذف اللغة', + deletion_title: 'هل ترغب في حذف اللغة المضافة؟', + deletion_description: 'بعد الحذف، لن يتمكن مستخدموك من التصفح باللغة المحذوفة مرة أخرى.', + default_language_deletion_title: 'لا يمكن حذف اللغة الافتراضية.', + default_language_deletion_description: 'تم تعيين {{language}} كلغتك الافتراضية ولا يمكن حذفها.', + }, +}; + +export default Object.freeze(content); diff --git a/packages/phrases/src/locales/ar-ar/translation/admin-console/sign-in-exp/index.ts b/packages/phrases/src/locales/ar-ar/translation/admin-console/sign-in-exp/index.ts new file mode 100644 index 000000000..abf21f1b1 --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/translation/admin-console/sign-in-exp/index.ts @@ -0,0 +1,119 @@ +import content from './content.js'; +import password_policy from './password-policy.js'; +import sign_up_and_sign_in from './sign-up-and-sign-in.js'; + +const sign_in_exp = { + page_title: 'تجربة تسجيل الدخول', + title: 'تجربة تسجيل الدخول', + description: 'قم بتخصيص واجهة تسجيل الدخول لتتناسب مع علامتك التجارية وعرضها في الوقت الحقيقي', + tabs: { + branding: 'العلامة التجارية', + sign_up_and_sign_in: 'التسجيل وتسجيل الدخول', + content: 'المحتوى', + password_policy: 'سياسة كلمة المرور', + }, + welcome: { + title: 'تخصيص تجربة تسجيل الدخول', + description: + 'ابدأ بسرعة مع إعداد تسجيل الدخول الأول الخاص بك. يرشدك هذا الدليل خلال جميع الإعدادات اللازمة.', + get_started: 'ابدأ', + apply_remind: 'يرجى ملاحظة أن تجربة تسجيل الدخول ستنطبق على جميع التطبيقات تحت هذا الحساب.', + }, + color: { + title: 'اللون', + primary_color: 'لون العلامة التجارية', + dark_primary_color: 'لون العلامة التجارية (الداكن)', + dark_mode: 'تمكين الوضع الداكن', + dark_mode_description: + 'سيحتوي تطبيقك على نمط وضع داكن مولد تلقائيًا بناءً على لون العلامة التجارية الخاصة بك وخوارزمية Logto. يمكنك تخصيصه بحرية.', + dark_mode_reset_tip: 'إعادة حساب لون الوضع الداكن بناءً على لون العلامة التجارية.', + reset: 'إعادة الحساب', + }, + branding: { + title: 'منطقة العلامة التجارية', + ui_style: 'النمط', + with_light: '{{value}}', + with_dark: '{{value}} (داكن)', + app_logo_and_favicon: 'شعار التطبيق ورمز الموقع', + company_logo_and_favicon: 'شعار الشركة ورمز الموقع', + }, + branding_uploads: { + app_logo: { + title: 'شعار التطبيق', + url: 'رابط شعار التطبيق', + url_placeholder: 'https://your.cdn.domain/logo.png', + error: 'شعار التطبيق: {{error}}', + }, + company_logo: { + title: 'شعار الشركة', + url: 'رابط شعار الشركة', + url_placeholder: 'https://your.cdn.domain/logo.png', + error: 'شعار الشركة: {{error}}', + }, + organization_logo: { + title: 'تحميل صورة', + url: 'رابط شعار المنظمة', + url_placeholder: 'https://your.cdn.domain/logo.png', + error: 'شعار المنظمة: {{error}}', + }, + connector_logo: { + title: 'تحميل صورة', + url: 'رابط شعار الموصل', + url_placeholder: 'https://your.cdn.domain/logo.png', + error: 'شعار الموصل: {{error}}', + }, + favicon: { + title: 'رمز الموقع', + url: 'رابط رمز الموقع', + url_placeholder: 'https://your.cdn.domain/favicon.ico', + error: 'رمز الموقع: {{error}}', + }, + }, + custom_ui: { + title: 'واجهة مخصصة', + css_code_editor_title: 'CSS مخصص', + css_code_editor_description1: 'انظر إلى مثال لـ CSS مخصص.', + css_code_editor_description2: '{{link}}', + css_code_editor_description_link_content: 'تعلم المزيد', + css_code_editor_content_placeholder: + 'أدخل CSS المخصص الخاص بك لتخصيص أنماط أي شيء وفقًا لمواصفاتك الدقيقة. اعبر عن إبداعك واجعل واجهة المستخدم الخاصة بك تبرز.', + bring_your_ui_title: 'اجلب واجهتك الخاصة', + bring_your_ui_description: + 'قم بتحميل حزمة مضغوطة (.zip) لاستبدال واجهة المستخدم المُعدة مسبقًا في Logto بالشفرة الخاصة بك. تعلم المزيد', + preview_with_bring_your_ui_description: + 'تم تحميل أصول واجهة المستخدم المخصصة الخاصة بك بنجاح ويتم تقديمها الآن. وبالتالي ، تم تعطيل نافذة المعاينة المدمجة.\nلتجربة واجهة تسجيل الدخول المخصصة الخاصة بك ، انقر فوق زر "المعاينة المباشرة" لفتحها في علامة تبويب مستعرض جديدة.', + }, + sign_up_and_sign_in, + content, + password_policy, + setup_warning: { + no_connector_sms: + 'لم يتم إعداد أي موصل SMS بعد. قبل إكمال التكوين ، لن يتمكن المستخدمون من تسجيل الدخول باستخدام هذه الطريقة. {{link}} في "الموصلات"', + no_connector_email: + 'لم يتم إعداد أي موصل بريد إلكتروني بعد. قبل إكمال التكوين ، لن يتمكن المستخدمون من تسجيل الدخول باستخدام هذه الطريقة. {{link}} في "الموصلات"', + no_connector_social: + 'لم تقم بإعداد أي موصل اجتماعي بعد. أضف الموصلات أولاً لتطبيق طرق تسجيل الدخول الاجتماعي. {{link}} في "الموصلات".', + setup_link: 'إعداد', + }, + save_alert: { + description: + 'أنت تقوم بتنفيذ إجراءات تسجيل الدخول والتسجيل الجديدة. قد يتأثر جميع مستخدميك بالتغيير الجديد. هل أنت متأكد من الالتزام بالتغيير؟', + before: 'قبل', + after: 'بعد', + sign_up: 'التسجيل', + sign_in: 'تسجيل الدخول', + social: 'اجتماعي', + }, + preview: { + title: 'معاينة تسجيل الدخول', + live_preview: 'معاينة مباشرة', + live_preview_tip: 'حفظ لمعاينة التغييرات', + native: 'التطبيق الأصلي', + desktop_web: 'الويب على سطح المكتب', + mobile_web: 'الويب على الهاتف المحمول', + desktop: 'سطح المكتب', + mobile: 'الهاتف المحمول', + }, +}; + +export default Object.freeze(sign_in_exp); diff --git a/packages/phrases/src/locales/ar-ar/translation/admin-console/sign-in-exp/password-policy.ts b/packages/phrases/src/locales/ar-ar/translation/admin-console/sign-in-exp/password-policy.ts new file mode 100644 index 000000000..2323c24c3 --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/translation/admin-console/sign-in-exp/password-policy.ts @@ -0,0 +1,26 @@ +const password_policy = { + password_requirements: 'متطلبات كلمة المرور', + minimum_length: 'الحد الأدنى للطول', + minimum_length_description: 'يوصي NIST باستخدام على الأقل 8 أحرف للمنتجات على الويب.', + minimum_length_error: 'يجب أن يكون الحد الأدنى للطول بين {{min}} و {{max}} (شاملاً).', + minimum_required_char_types: 'الحد الأدنى لأنواع الأحرف المطلوبة', + minimum_required_char_types_description: + 'أنواع الأحرف: الأحرف الكبيرة (A-Z)، الأحرف الصغيرة (a-z)، الأرقام (0-9)، والرموز الخاصة ({{symbols}}).', + password_rejection: 'رفض كلمة المرور', + compromised_passwords: 'رفض كلمات المرور المخترقة', + breached_passwords: 'كلمات المرور المخترقة', + breached_passwords_description: + 'رفض كلمات المرور التي تم العثور عليها سابقًا في قواعد البيانات المخترقة.', + restricted_phrases: 'تقييد عبارات ضعيفة من الناحية الأمنية', + restricted_phrases_tooltip: + 'يجب تجنب استخدام هذه العبارات في كلمة المرور ما لم تجمعها مع 3 أحرف إضافية أو أكثر.', + repetitive_or_sequential_characters: 'أحرف متكررة أو متسلسلة', + repetitive_or_sequential_characters_description: 'مثال: "AAAA"، "1234"، و "abcd".', + user_information: 'معلومات المستخدم', + user_information_description: 'مثال: عنوان البريد الإلكتروني، رقم الهاتف، اسم المستخدم، إلخ.', + custom_words: 'كلمات مخصصة', + custom_words_description: 'كلمات ذات صلة بالسياق، غير حساسة لحالة الأحرف، وكل كلمة في سطر منفصل.', + custom_words_placeholder: 'اسم الخدمة الخاص بك، اسم الشركة، إلخ.', +}; + +export default Object.freeze(password_policy); diff --git a/packages/phrases/src/locales/ar-ar/translation/admin-console/sign-in-exp/sign-up-and-sign-in.ts b/packages/phrases/src/locales/ar-ar/translation/admin-console/sign-in-exp/sign-up-and-sign-in.ts new file mode 100644 index 000000000..0c7fee521 --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/translation/admin-console/sign-in-exp/sign-up-and-sign-in.ts @@ -0,0 +1,71 @@ +const sign_up_and_sign_in = { + identifiers_email: 'عنوان البريد الإلكتروني', + identifiers_phone: 'رقم الهاتف', + identifiers_username: 'اسم المستخدم', + identifiers_email_or_sms: 'عنوان البريد الإلكتروني أو رقم الهاتف', + identifiers_none: 'غير مطبق', + and: 'و', + or: 'أو', + sign_up: { + title: 'التسجيل', + sign_up_identifier: 'معرف التسجيل', + identifier_description: + 'معرف التسجيل مطلوب لإنشاء الحساب ويجب أن يتم تضمينه في شاشة تسجيل الدخول الخاصة بك.', + sign_up_authentication: 'إعدادات المصادقة للتسجيل', + authentication_description: 'سيكون على المستخدمين إكمال جميع الإجراءات المحددة في التدفق.', + set_a_password_option: 'إنشاء كلمة المرور الخاصة بك', + verify_at_sign_up_option: 'التحقق عند التسجيل', + social_only_creation_description: '(ينطبق هذا على إنشاء الحساب الاجتماعي فقط)', + }, + sign_in: { + title: 'تسجيل الدخول', + sign_in_identifier_and_auth: 'معرف وإعدادات المصادقة لتسجيل الدخول', + description: + 'يمكن للمستخدمين تسجيل الدخول باستخدام أي من الخيارات المتاحة. قم بضبط التخطيط عن طريق سحب وإسقاط الخيارات أدناه.', + add_sign_in_method: 'إضافة طريقة تسجيل الدخول', + password_auth: 'كلمة المرور', + verification_code_auth: 'رمز التحقق', + auth_swap_tip: 'قم بتبديل الخيارات أدناه لتحديد الظهور الأول في التدفق.', + require_auth_factor: 'يجب عليك تحديد عامل مصادقة واحد على الأقل.', + }, + social_sign_in: { + title: 'تسجيل الدخول الاجتماعي', + social_sign_in: 'تسجيل الدخول الاجتماعي', + description: + 'اعتمادًا على المعرف الإلزامي الذي قمت بإعداده ، قد يُطلب من المستخدم تقديم معرف عند التسجيل باستخدام موصل اجتماعي.', + add_social_connector: 'إضافة موصل اجتماعي', + set_up_hint: { + not_in_list: 'غير مدرج؟', + set_up_more: 'إعداد', + go_to: 'موصلات اجتماعية أخرى الآن.', + }, + automatic_account_linking: 'ربط الحساب التلقائي', + automatic_account_linking_label: + 'عند التشغيل ، إذا قام المستخدم بتسجيل الدخول باستخدام هوية اجتماعية جديدة في النظام ، وهناك حساب واحد فقط موجود بنفس المعرف (على سبيل المثال ، البريد الإلكتروني) ، فسيقوم Logto بربط الحساب بالهوية الاجتماعية تلقائيًا بدلاً من طلب المستخدم لربط الحساب.', + }, + tip: { + set_a_password: 'مجموعة فريدة من كلمة المرور لاسم المستخدم الخاص بك ضرورية.', + verify_at_sign_up: + 'ندعم حاليًا التحقق من البريد الإلكتروني الموثوق. قد يحتوي قاعدة المستخدمين الخاصة بك على عدد كبير من عناوين البريد الإلكتروني ذات جودة منخفضة إذا لم يتم التحقق.', + password_auth: 'هذا أمر ضروري حيث قمت بتمكين خيار إنشاء كلمة مرور أثناء عملية التسجيل.', + verification_code_auth: + 'هذا أمر ضروري حيث قمت بتمكين خيار تقديم رمز التحقق عند التسجيل. يمكنك إلغاء التحديد عند السماح بإعداد كلمة المرور في عملية التسجيل.', + delete_sign_in_method: 'هذا أمر ضروري حيث قمت باختيار {{identifier}} كمعرف مطلوب.', + }, + advanced_options: { + title: 'خيارات متقدمة', + enable_single_sign_on: 'تمكين تسجيل الدخول الموحد للمؤسسة (SSO)', + enable_single_sign_on_description: + 'تمكين المستخدمين من تسجيل الدخول إلى التطبيق باستخدام تسجيل الدخول الموحد مع هوياتهم في المؤسسة.', + single_sign_on_hint: { + prefix: 'انتقل إلى ', + link: '"تسجيل الدخول الموحد للمؤسسة"', + suffix: 'لمزيد من إعدادات الموصلات في المؤسسة.', + }, + enable_user_registration: 'تمكين تسجيل المستخدم', + enable_user_registration_description: + 'تمكين أو تعطيل تسجيل المستخدم. بمجرد تعطيله ، يمكن للمستخدمين ما زالوا يتم إضافتهم في وحدة التحكم الإدارية ولكن المستخدمين لم يعد بإمكانهم إنشاء حسابات من خلال واجهة تسجيل الدخول.', + }, +}; + +export default Object.freeze(sign_up_and_sign_in); diff --git a/packages/phrases/src/locales/ar-ar/translation/admin-console/signing-keys.ts b/packages/phrases/src/locales/ar-ar/translation/admin-console/signing-keys.ts new file mode 100644 index 000000000..e3fb6465e --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/translation/admin-console/signing-keys.ts @@ -0,0 +1,43 @@ +const signing_keys = { + title: 'مفاتيح التوقيع', + description: 'إدارة آمنة لمفاتيح التوقيع المستخدمة في تطبيقاتك.', + private_key: 'مفاتيح OIDC الخاصة', + private_keys_description: 'تستخدم مفاتيح OIDC الخاصة لتوقيع رموز JWT.', + cookie_key: 'مفاتيح ملف تعريف الارتباط OIDC', + cookie_keys_description: 'تستخدم مفاتيح ملف تعريف الارتباط OIDC لتوقيع ملفات تعريف الارتباط.', + private_keys_in_use: 'المفاتيح الخاصة المستخدمة', + cookie_keys_in_use: 'مفاتيح ملف تعريف الارتباط المستخدمة', + rotate_private_keys: 'تدوير المفاتيح الخاصة', + rotate_cookie_keys: 'تدوير مفاتيح ملف تعريف الارتباط', + rotate_private_keys_description: + 'سيؤدي هذا الإجراء إلى إنشاء مفتاح توقيع خاص جديد وتدوير المفتاح الحالي وإزالة المفتاح السابق. ستظل رموز JWT الموقعة بالمفتاح الحالي صالحة حتى الحذف أو جولة أخرى من التدوير.', + rotate_cookie_keys_description: + 'سيؤدي هذا الإجراء إلى إنشاء مفتاح ملف تعريف الارتباط جديد وتدوير المفتاح الحالي وإزالة المفتاح السابق. ستظل ملفات تعريف الارتباط الحالية صالحة حتى الحذف أو جولة أخرى من التدوير.', + select_private_key_algorithm: 'حدد خوارزمية مفتاح التوقيع للمفتاح الخاص الجديد', + rotate_button: 'تدوير', + table_column: { + id: 'المعرف', + status: 'الحالة', + algorithm: 'خوارزمية مفتاح التوقيع', + }, + status: { + current: 'الحالي', + previous: 'السابق', + }, + reminder: { + rotate_private_key: + 'هل أنت متأكد أنك تريد تدوير مفاتيح OIDC الخاصة؟ سيتم توقيع رموز JWT الصادرة الجديدة بواسطة المفتاح الجديد. ستظل رموز JWT الحالية صالحة حتى تقوم بتدويرها مرة أخرى أو حذفها.', + rotate_cookie_key: + 'هل أنت متأكد أنك تريد تدوير مفاتيح ملف تعريف الارتباط OIDC؟ سيتم توقيع ملفات تعريف الارتباط الجديدة التي تم إنشاؤها في جلسات تسجيل الدخول بواسطة المفتاح الجديد. ستظل ملفات تعريف الارتباط الحالية صالحة حتى تقوم بتدويرها مرة أخرى أو حذفها.', + delete_private_key: + 'هل أنت متأكد أنك تريد حذف مفتاح OIDC الخاص؟ لن تكون رموز JWT الحالية الموقعة بمفتاح التوقيع الخاص هذا صالحة بعد الآن.', + delete_cookie_key: + 'هل أنت متأكد أنك تريد حذف مفتاح ملف تعريف الارتباط OIDC؟ لن تكون جلسات تسجيل الدخول السابقة التي تحمل ملفات تعريف الارتباط الموقعة بمفتاح ملف تعريف الارتباط هذا صالحة بعد الآن. سيتطلب إعادة المصادقة لهؤلاء المستخدمين.', + }, + messages: { + rotate_key_success: 'تم تدوير مفاتيح التوقيع بنجاح.', + delete_key_success: 'تم حذف المفتاح بنجاح.', + }, +}; + +export default Object.freeze(signing_keys); diff --git a/packages/phrases/src/locales/ar-ar/translation/admin-console/subscription/index.ts b/packages/phrases/src/locales/ar-ar/translation/admin-console/subscription/index.ts new file mode 100644 index 000000000..70a79f365 --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/translation/admin-console/subscription/index.ts @@ -0,0 +1,69 @@ +import quota_item from './quota-item.js'; +import quota_table from './quota-table.js'; +import usage from './usage.js'; + +const subscription = { + free_plan: 'خطة مجانية', + free_plan_description: 'للمشاريع الجانبية وتجارب Logto الأولية. بدون بطاقة ائتمان.', + pro_plan: 'خطة Pro', + pro_plan_description: 'للاستفادة من الأعمال بدون قلق مع Logto.', + enterprise: 'الشركات', + current_plan: 'الخطة الحالية', + current_plan_description: + 'هذه هي الخطة الحالية الخاصة بك. يمكنك بسهولة رؤية استخدام الخطة الخاصة بك ، والتحقق من فاتورتك القادمة ، وإجراء التغييرات على الخطة حسب الحاجة.', + plan_usage: 'استخدام الخطة', + plan_cycle: 'دورة الخطة: {{period}}. يتم تجديد الاستخدام في {{renewDate}}.', + next_bill: 'الفاتورة القادمة', + next_bill_hint: 'لمعرفة المزيد حول الحساب ، يرجى الرجوع إلى هذه المقالة article.', + next_bill_tip: + 'الأسعار المعروضة هنا لا تشمل الضرائب. سيتم حساب مبلغ الضريبة بناءً على المعلومات التي تقدمها ومتطلبات التنظيم المحلية ، وسيتم عرضه في فواتيرك.', + manage_payment: 'إدارة الدفع', + overfill_quota_warning: 'لقد وصلت إلى حد الحصة الخاصة بك. لمنع أي مشكلة ، قم بترقية الخطة.', + upgrade_pro: 'ترقية Pro', + update_payment: 'تحديث الدفع', + payment_error: + 'تم اكتشاف مشكلة في الدفع. تعذر معالجة ${{price, number}} للدورة السابقة. قم بتحديث الدفع لتجنب تعليق خدمة Logto.', + downgrade: 'تخفيض', + current: 'الحالي', + upgrade: 'ترقية', + quota_table, + billing_history: { + invoice_column: 'الفواتير', + status_column: 'الحالة', + amount_column: 'المبلغ', + invoice_created_date_column: 'تاريخ إنشاء الفاتورة', + invoice_status: { + void: 'ملغاة', + paid: 'مدفوعة', + open: 'مفتوحة', + uncollectible: 'متأخرة', + }, + }, + quota_item, + downgrade_modal: { + title: 'هل أنت متأكد أنك تريد التخفيض؟', + description: + 'إذا قررت التبديل إلى , يرجى ملاحظة أنه لن يكون لديك بعد الآن الوصول إلى الحصة والميزات التي كانت موجودة في .', + before: 'قبل: ', + after: 'بعد: ', + downgrade: 'تخفيض', + }, + not_eligible_modal: { + downgrade_title: 'غير مؤهل للتخفيض', + downgrade_description: 'تأكد من تلبية المعايير التالية قبل التخفيض إلى .', + downgrade_help_tip: 'هل تحتاج إلى مساعدة في التخفيض؟ اتصل بنا.', + upgrade_title: 'تذكير ودي لمبتكرينا المبكرين المحترمين', + upgrade_description: + 'أنت تستخدم حاليًا أكثر مما يسمح به . Logto الآن رسميًا ، بما في ذلك ميزات مصممة خصيصًا لكل خطة. قبل أن تفكر في الترقية إلى , تأكد من تلبية المعايير التالية قبل الترقية.', + upgrade_pro_tip: ' أو النظر في الترقية إلى خطة Pro.', + upgrade_help_tip: 'هل تحتاج إلى مساعدة في الترقية؟ اتصل بنا.', + a_maximum_of: 'الحد الأقصى لـ ', + }, + upgrade_success: 'تم الترقية بنجاح إلى ', + downgrade_success: 'تم التخفيض بنجاح إلى ', + subscription_check_timeout: 'انتهت مهلة فحص الاشتراك. يرجى التحديث في وقت لاحق.', + no_subscription: 'لا يوجد اشتراك', + usage, +}; + +export default Object.freeze(subscription); diff --git a/packages/phrases/src/locales/ar-ar/translation/admin-console/subscription/quota-item.ts b/packages/phrases/src/locales/ar-ar/translation/admin-console/subscription/quota-item.ts new file mode 100644 index 000000000..adda1442f --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/translation/admin-console/subscription/quota-item.ts @@ -0,0 +1,176 @@ +const quota_item = { + tenant_limit: { + name: 'المستأجرون', + limited: '{{count, number}} مستأجر', + limited_other: '{{count, number}} مستأجرين', + unlimited: 'عدد غير محدود من المستأجرين', + not_eligible: 'قم بإزالة المستأجرين الخاصين بك', + }, + mau_limit: { + name: 'المستخدمون النشطون شهريًا', + limited: '{{count, number}} مستخدم نشط شهريًا', + unlimited: 'عدد غير محدود من المستخدمين النشطين شهريًا', + not_eligible: 'قم بإزالة جميع المستخدمين الخاصين بك', + }, + token_limit: { + name: 'الرموز', + limited: '{{count, number}} رمز', + limited_other: '{{count, number}} رموز', + unlimited: 'عدد غير محدود من الرموز', + not_eligible: 'قم بإزالة جميع المستخدمين الخاصين بك لمنع إنشاء رموز جديدة', + }, + applications_limit: { + name: 'التطبيقات', + limited: '{{count, number}} تطبيق', + limited_other: '{{count, number}} تطبيقات', + unlimited: 'عدد غير محدود من التطبيقات', + not_eligible: 'قم بإزالة التطبيقات الخاصة بك', + }, + machine_to_machine_limit: { + name: 'تطبيقات الجهاز إلى الجهاز', + limited: '{{count, number}} تطبيق الجهاز إلى الجهاز', + limited_other: '{{count, number}} تطبيقات الجهاز إلى الجهاز', + unlimited: 'عدد غير محدود من تطبيقات الجهاز إلى الجهاز', + not_eligible: 'قم بإزالة تطبيقات الجهاز إلى الجهاز الخاصة بك', + }, + third_party_applications_limit: { + name: 'تطبيقات الطرف الثالث', + limited: '{{count, number}} تطبيق الطرف الثالث', + limited_other: '{{count, number}} تطبيقات الطرف الثالث', + unlimited: 'عدد غير محدود من تطبيقات الطرف الثالث', + not_eligible: 'قم بإزالة تطبيقات الطرف الثالث الخاصة بك', + }, + resources_limit: { + name: 'موارد الواجهة البرمجية', + limited: '{{count, number}} مورد واجهة برمجة تطبيقات', + limited_other: '{{count, number}} موارد واجهة برمجة تطبيقات', + unlimited: 'عدد غير محدود من موارد الواجهة البرمجية', + not_eligible: 'قم بإزالة موارد الواجهة البرمجية الخاصة بك', + }, + scopes_per_resource_limit: { + name: 'أذونات الموارد', + limited: '{{count, number}} إذن لكل مورد', + limited_other: '{{count, number}} أذونات لكل مورد', + unlimited: 'عدد غير محدود من الأذونات لكل مورد', + not_eligible: 'قم بإزالة أذونات الموارد الخاصة بك', + }, + custom_domain_enabled: { + name: 'النطاق المخصص', + limited: 'النطاق المخصص', + unlimited: 'النطاق المخصص', + not_eligible: 'قم بإزالة النطاق المخصص الخاص بك', + }, + omni_sign_in_enabled: { + name: 'تسجيل الدخول الموحد', + limited: 'تسجيل الدخول الموحد', + unlimited: 'تسجيل الدخول الموحد', + not_eligible: 'قم بتعطيل تسجيل الدخول الموحد الخاص بك', + }, + built_in_email_connector_enabled: { + name: 'موصل البريد الإلكتروني المدمج', + limited: 'موصل البريد الإلكتروني المدمج', + unlimited: 'موصل البريد الإلكتروني المدمج', + not_eligible: 'قم بإزالة موصل البريد الإلكتروني المدمج الخاص بك', + }, + social_connectors_limit: { + name: 'موصلات التواصل الاجتماعي', + limited: '{{count, number}} موصل تواصل اجتماعي', + limited_other: '{{count, number}} موصلات تواصل اجتماعي', + unlimited: 'عدد غير محدود من موصلات التواصل الاجتماعي', + not_eligible: 'قم بإزالة موصلات التواصل الاجتماعي الخاصة بك', + }, + standard_connectors_limit: { + name: 'موصلات قياسية مجانية', + limited: '{{count, number}} موصل قياسي مجاني', + limited_other: '{{count, number}} موصلات قياسية مجانية', + unlimited: 'عدد غير محدود من موصلات القياسية', + not_eligible: 'قم بإزالة موصلات القياسية الخاصة بك', + }, + roles_limit: { + name: 'الأدوار', + limited: '{{count, number}} دور', + limited_other: '{{count, number}} أدوار', + unlimited: 'عدد غير محدود من الأدوار', + not_eligible: 'قم بإزالة الأدوار الخاصة بك', + }, + machine_to_machine_roles_limit: { + name: 'أدوار الجهاز إلى الجهاز', + limited: '{{count, number}} دور الجهاز إلى الجهاز', + limited_other: '{{count, number}} أدوار الجهاز إلى الجهاز', + unlimited: 'عدد غير محدود من أدوار الجهاز إلى الجهاز', + not_eligible: 'قم بإزالة أدوار الجهاز إلى الجهاز الخاصة بك', + }, + scopes_per_role_limit: { + name: 'أذونات الأدوار', + limited: '{{count, number}} إذن لكل دور', + limited_other: '{{count, number}} أذونات لكل دور', + unlimited: 'عدد غير محدود من الأذونات لكل دور', + not_eligible: 'قم بإزالة أذونات الأدوار الخاصة بك', + }, + hooks_limit: { + name: 'الخطافات', + limited: '{{count, number}} خطاف', + limited_other: '{{count, number}} خطافات', + unlimited: 'عدد غير محدود من الخطافات', + not_eligible: 'قم بإزالة الخطافات الخاصة بك', + }, + organizations_enabled: { + name: 'المنظمات', + limited: 'المنظمات', + unlimited: 'المنظمات', + not_eligible: 'قم بإزالة المنظمات الخاصة بك', + }, + audit_logs_retention_days: { + name: 'احتفاظ بسجلات التدقيق', + limited: 'احتفاظ بسجلات التدقيق: {{count, number}} يوم', + limited_other: 'احتفاظ بسجلات التدقيق: {{count, number}} أيام', + unlimited: 'عدد غير محدود من الأيام', + not_eligible: 'لا توجد سجلات تدقيق', + }, + email_ticket_support: { + name: 'دعم تذاكر البريد الإلكتروني', + limited: '{{count, number}} ساعة دعم تذاكر البريد الإلكتروني', + limited_other: '{{count, number}} ساعات دعم تذاكر البريد الإلكتروني', + unlimited: 'دعم تذاكر البريد الإلكتروني', + not_eligible: 'لا يوجد دعم تذاكر البريد الإلكتروني', + }, + mfa_enabled: { + name: 'المصادقة ذات العوامل المتعددة', + limited: 'المصادقة ذات العوامل المتعددة', + unlimited: 'المصادقة ذات العوامل المتعددة', + not_eligible: 'قم بإزالة المصادقة ذات العوامل المتعددة الخاصة بك', + }, + sso_enabled: { + name: 'SSO المؤسسي', + limited: 'SSO المؤسسي', + unlimited: 'SSO المؤسسي', + not_eligible: 'قم بإزالة SSO المؤسسي الخاص بك', + }, + tenant_members_limit: { + name: 'أعضاء المستأجر', + limited: '{{count, number}} عضو في المستأجر', + limited_other: '{{count, number}} أعضاء المستأجر', + unlimited: 'عدد غير محدود من أعضاء المستأجر', + not_eligible: 'قم بإزالة أعضاء المستأجر الخاصين بك', + }, + custom_jwt_enabled: { + name: 'JWT المخصص', + limited: 'JWT المخصص', + unlimited: 'JWT المخصص', + not_eligible: 'قم بإزالة مُعدّل العبارات JWT الخاص بك', + }, + impersonation_enabled: { + name: 'التمثيل', + limited: 'التمثيل', + unlimited: 'التمثيل', + not_eligible: 'لا يُسمح بالتمثيل', + }, + bring_your_ui_enabled: { + name: 'اجلب واجهة المستخدم الخاصة بك', + limited: 'اجلب واجهة المستخدم الخاصة بك', + unlimited: 'اجلب واجهة المستخدم الخاصة بك', + not_eligible: 'قم بإزالة أصول واجهة المستخدم المخصصة الخاصة بك', + }, +}; + +export default Object.freeze(quota_item); diff --git a/packages/phrases/src/locales/ar-ar/translation/admin-console/subscription/quota-table.ts b/packages/phrases/src/locales/ar-ar/translation/admin-console/subscription/quota-table.ts new file mode 100644 index 000000000..b1644247f --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/translation/admin-console/subscription/quota-table.ts @@ -0,0 +1,120 @@ +const quota_table = { + quota: { + title: 'الأساسيات', + base_price: 'السعر الأساسي', + mau_limit: 'حد MAU', + included_tokens: 'الرموز المضمنة', + }, + application: { + title: 'التطبيقات', + total: 'إجمالي التطبيقات', + m2m: 'تطبيقات من الجهاز إلى الجهاز', + third_party: 'تطبيقات الطرف الثالث', + }, + resource: { + title: 'موارد واجهة برمجة التطبيقات', + resource_count: 'عدد الموارد', + scopes_per_resource: 'أذونات لكل مورد', + }, + branding: { + title: 'واجهة المستخدم والعلامة التجارية', + custom_domain: 'نطاق مخصص', + custom_css: 'CSS مخصص', + logo_and_favicon: 'شعار ورمز الموقع', + bring_your_ui: 'اجلب واجهتك الخاصة', + dark_mode: 'الوضع الداكن', + i18n: 'التعدد اللغوي', + }, + user_authn: { + title: 'مصادقة المستخدم', + omni_sign_in: 'تسجيل الدخول الموحد', + password: 'كلمة المرور', + passwordless: 'بدون كلمة مرور - البريد الإلكتروني والرسائل القصيرة', + email_connector: 'موصل البريد الإلكتروني', + sms_connector: 'موصل الرسائل القصيرة', + social_connectors: 'موصلات التواصل الاجتماعي', + standard_connectors: 'موصلات قياسية', + built_in_email_connector: 'موصل البريد الإلكتروني المدمج', + mfa: 'المصادقة متعددة العوامل', + sso: 'SSO المؤسسية', + impersonation: 'التمثيل', + }, + user_management: { + title: 'إدارة المستخدمين', + user_management: 'إدارة المستخدمين', + roles: 'الأدوار', + machine_to_machine_roles: 'أدوار من الجهاز إلى الجهاز', + scopes_per_role: 'أذونات لكل دور', + }, + organizations: { + title: 'المؤسسات', + organizations: 'المؤسسات', + organization: 'المؤسسة', + organization_count: 'عدد المؤسسات', + allowed_users_per_org: 'المستخدمين لكل مؤسسة', + invitation: 'الدعوة (واجهة برمجة التطبيقات للإدارة)', + org_roles: 'أدوار المؤسسة', + org_permissions: 'أذونات المؤسسة', + just_in_time_provisioning: 'التوفير في الوقت المناسب', + }, + support: { + title: 'الامتثال والدعم', + community: 'المجتمع', + customer_ticket: 'دعم التذاكر', + premium: 'متميز', + email_ticket_support: 'دعم التذاكر عبر البريد الإلكتروني', + /** UNTRANSLATED */ + discord_private_channel: 'Discord private channel', + /** UNTRANSLATED */ + premium_support: 'Premium support', + /** UNTRANSLATED */ + developer_onboarding: 'Developer onboarding', + /** UNTRANSLATED */ + solution_engineer_support: 'Solution engineer', + /** UNTRANSLATED */ + sla: 'SLA', + /** UNTRANSLATED */ + dedicated_computing_resources: 'Dedicated computing resources', + }, + compliance: { + /** UNTRANSLATED */ + title: 'Compliance', + /** UNTRANSLATED */ + soc2_compliant: 'SOC2 compliant', + /** UNTRANSLATED */ + soc2_report: 'SOC2 report', + /** UNTRANSLATED */ + hipaa_or_baa_report: 'HIPAA/BAA report', + }, + developers_and_platform: { + title: 'المطورين والمنصة', + hooks: 'الخطافات', + audit_logs_retention: 'احتفاظ بسجلات التدقيق', + jwt_claims: 'مطالبات JWT', + tenant_members: 'أعضاء المستأجر', + }, + unlimited: 'غير محدود', + contact: 'اتصل', + monthly_price: '${{value, number}}/شهر', + days_one: '{{count, number}} يوم', + days_other: '{{count, number}} أيام', + add_on: 'إضافة', + tier: 'المستوى {{value, number}}: ', + million: '{{value, number}} مليون', + mau_tip: + 'MAU (المستخدم النشط شهريًا) يعني عدد المستخدمين الفريدة الذين قاموا بتبادل رمز واحد على الأقل مع Logto في دورة الفوترة.', + tokens_tip: 'جميع أنواع الرموز التي تصدرها Logto ، بما في ذلك رمز الوصول ورمز التحديث ، إلخ.', + mao_tip: + 'MAO (المؤسسة النشطة شهريًا) يعني عدد المؤسسات الفريدة التي لديها مستخدم نشط شهريًا واحد على الأقل في دورة الفوترة.', + third_party_tip: + 'استخدم Logto كموفر هوية OIDC الخاص بك لتسجيل الدخول ومنح الأذونات لتطبيقات الطرف الثالث.', + included: '{{value, number}} مضمن', + included_mao: '{{value, number}} MAO مضمنة', + extra_quota_price: 'ثم ${{value, number}} شهريًا / لكل واحد بعد ذلك', + per_month_each: '${{value, number}} شهريًا / لكل واحد', + extra_mao_price: 'ثم ${{value, number}} شهريًا لكل MAO', + per_month: '${{value, number}} شهريًا', + per_member: 'ثم ${{value, number}} لكل عضو', +}; + +export default Object.freeze(quota_table); diff --git a/packages/phrases/src/locales/ar-ar/translation/admin-console/subscription/usage.ts b/packages/phrases/src/locales/ar-ar/translation/admin-console/subscription/usage.ts new file mode 100644 index 000000000..74d6839a4 --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/translation/admin-console/subscription/usage.ts @@ -0,0 +1,62 @@ +const usage = { + status_active: 'تشغيل', + status_inactive: 'إيقاف', + mau: { + title: 'MAU', + description: '{{usage}}', + tooltip: + 'MAU هو مستخدم فريد قام بتبادل رمز واحد على الأقل مع Logto خلال دورة فوترة. غير محدود لخطة Pro. تعرف أكثر', + }, + organizations: { + title: 'المؤسسات', + description: '{{usage}}', + tooltip: + 'ميزة إضافية بسعر ثابت قدره ${{price, number}} شهريًا. لا يتأثر السعر بعدد المؤسسات أو مستوى نشاطها.', + }, + mfa: { + title: 'MFA', + description: '{{usage}}', + tooltip: + 'ميزة إضافية بسعر ثابت قدره ${{price, number}} شهريًا. لا يتأثر السعر بعدد عوامل المصادقة المستخدمة.', + }, + enterprise_sso: { + title: 'SSO للشركات', + description: '{{usage}}', + tooltip: 'ميزة إضافية بسعر قدره ${{price, number}} للاتصال بواجهة SSO شهريًا.', + }, + api_resources: { + title: 'موارد واجهة برمجة التطبيقات', + description: '{{usage}} (مجانًا لأول 3)', + tooltip: + 'ميزة إضافية بسعر قدره ${{price, number}} لكل مورد في واجهة برمجة التطبيقات شهريًا. الموارد الأولى 3 مجانية.', + }, + machine_to_machine: { + title: 'من الجهاز إلى الجهاز', + description: '{{usage}} (مجانًا لأول 1)', + tooltip: + 'ميزة إضافية بسعر قدره ${{price, number}} لكل تطبيق من الجهاز إلى الجهاز شهريًا. التطبيق الأول من الجهاز إلى الجهاز مجاني.', + }, + tenant_members: { + title: 'أعضاء المستأجر', + description: '{{usage}} (مجانًا لأول 3)', + tooltip: + 'ميزة إضافية بسعر قدره ${{price, number}} لكل عضو في المستأجر شهريًا. الأعضاء الأولى 3 في المستأجر مجانية.', + }, + tokens: { + title: 'الرموز', + description: '{{usage}}', + tooltip: 'ميزة إضافية بسعر قدره ${{price, number}} لكل مليون رمز. الرموز الأولى مليون مشمولة.', + }, + hooks: { + title: 'الخطافات', + description: '{{usage}} (مجانًا لأول 10)', + tooltip: 'ميزة إضافية بسعر قدره ${{price, number}} لكل خطاف. الخطافات الأولى 10 مشمولة.', + }, + pricing: { + /** UNTRANSLATED */ + add_on_changes_in_current_cycle_notice: + 'If you make any changes during the current billing cycle, your next bill may be slightly higher for the first month after the change. It will be ${{price, number}} base price plus add-on costs for unbilled usage from the current cycle and the full charge for the next cycle. Learn more', + }, +}; + +export default Object.freeze(usage); diff --git a/packages/phrases/src/locales/ar-ar/translation/admin-console/tab-sections.ts b/packages/phrases/src/locales/ar-ar/translation/admin-console/tab-sections.ts new file mode 100644 index 000000000..a0ad14a88 --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/translation/admin-console/tab-sections.ts @@ -0,0 +1,10 @@ +const tab_sections = { + overview: 'نظرة عامة', + authentication: 'المصادقة', + authorization: 'الترخيص', + users: 'المستخدمين', + developer: 'المطور', + tenant: 'المستأجر', +}; + +export default Object.freeze(tab_sections); diff --git a/packages/phrases/src/locales/ar-ar/translation/admin-console/tabs.ts b/packages/phrases/src/locales/ar-ar/translation/admin-console/tabs.ts new file mode 100644 index 000000000..8b1756eb5 --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/translation/admin-console/tabs.ts @@ -0,0 +1,22 @@ +const tabs = { + get_started: 'البدء', + dashboard: 'لوحة القيادة', + applications: 'التطبيقات', + api_resources: 'موارد API', + sign_in_experience: 'تجربة تسجيل الدخول', + connectors: 'الموصلات', + enterprise_sso: 'SSO المؤسسات', + webhooks: 'Webhooks', + organizations: 'المؤسسات', + users: 'إدارة المستخدمين', + audit_logs: 'سجلات التدقيق', + roles: 'الأدوار', + docs: 'الوثائق', + tenant_settings: 'إعدادات المستأجر', + mfa: 'المصادقة ذات العوامل المتعددة', + customize_jwt: 'تخصيص JWT', + signing_keys: 'مفاتيح التوقيع', + organization_template: 'قالب المؤسسة', +}; + +export default Object.freeze(tabs); diff --git a/packages/phrases/src/locales/ar-ar/translation/admin-console/tenant-members.ts b/packages/phrases/src/locales/ar-ar/translation/admin-console/tenant-members.ts new file mode 100644 index 000000000..4718892a5 --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/translation/admin-console/tenant-members.ts @@ -0,0 +1,62 @@ +const tenant_members = { + members: 'الأعضاء', + invitations: 'الدعوات', + invite_members: 'دعوة الأعضاء', + user: 'المستخدم', + roles: 'الأدوار', + admin: 'المسؤول', + collaborator: 'المشارك', + invitation_status: 'حالة الدعوة', + inviter: 'المدعو', + expiration_date: 'تاريخ الانتهاء', + invite_modal: { + title: 'دعوة الأشخاص إلى Logto Cloud', + subtitle: 'لدعوة الأعضاء إلى منظمة ما، يجب أن يقبلوا الدعوة.', + to: 'إلى', + added_as: 'تمت إضافتهم بصفة', + email_input_placeholder: 'johndoe@example.com', + }, + invitation_statuses: { + pending: 'قيد الانتظار', + accepted: 'تم قبولها', + expired: 'منتهية الصلاحية', + revoked: 'تم إلغاؤها', + }, + invitation_empty_placeholder: { + title: 'دعوة أعضاء الفريق', + description: + 'لا توجد أعضاء مدعوون حاليًا في المنظمة الخاصة بك.\nللمساعدة في التكامل الخاص بك، قم بإضافة المزيد من الأعضاء أو المسؤولين.', + }, + menu_options: { + edit: 'تعديل دور المستأجر', + delete: 'إزالة المستخدم من المستأجر', + resend_invite: 'إعادة إرسال الدعوة', + revoke: 'إلغاء الدعوة', + delete_invitation_record: 'حذف سجل الدعوة هذا', + }, + edit_modal: { + title: 'تغيير أدوار {{name}}', + }, + delete_user_confirm: 'هل أنت متأكد أنك تريد إزالة هذا المستخدم من هذا المستأجر؟', + assign_admin_confirm: + 'هل أنت متأكد أنك تريد جعل المستخدم (أو المستخدمين) المحددين مسؤولين؟ ستمنح صلاحيات المسؤول للمستخدم (أو المستخدمين) التالية.
  • تغيير خطة الفوترة للمستأجر
  • إضافة أو إزالة المشاركين
  • حذف المستأجر
', + revoke_invitation_confirm: 'هل أنت متأكد أنك تريد إلغاء هذه الدعوة؟', + delete_invitation_confirm: 'هل أنت متأكد أنك تريد حذف سجل الدعوة هذا؟', + messages: { + invitation_sent: 'تم إرسال الدعوة.', + invitation_revoked: 'تم إلغاء الدعوة.', + invitation_resend: 'تم إعادة إرسال الدعوة.', + invitation_deleted: 'تم حذف سجل الدعوة.', + }, + errors: { + email_required: 'البريد الإلكتروني للمدعو مطلوب.', + email_exists: 'عنوان البريد الإلكتروني موجود بالفعل.', + member_exists: 'هذا المستخدم بالفعل عضو في هذه المنظمة.', + pending_invitation_exists: + 'يوجد دعوة قيد الانتظار. قم بحذف البريد الإلكتروني المرتبط أو إلغاء الدعوة.', + invalid_email: 'عنوان البريد الإلكتروني غير صالح. يرجى التأكد من أنه بالتنسيق الصحيح.', + max_member_limit: 'لقد وصلت إلى الحد الأقصى لعدد الأعضاء ({{limit}}) لهذا المستأجر.', + }, +}; + +export default Object.freeze(tenant_members); diff --git a/packages/phrases/src/locales/ar-ar/translation/admin-console/tenants.ts b/packages/phrases/src/locales/ar-ar/translation/admin-console/tenants.ts new file mode 100644 index 000000000..e3b69e5bb --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/translation/admin-console/tenants.ts @@ -0,0 +1,113 @@ +const tenants = { + title: 'الإعدادات', + description: 'إدارة إعدادات المستأجر بكفاءة وتخصيص نطاقك.', + tabs: { + settings: 'الإعدادات', + members: 'الأعضاء', + domains: 'النطاقات', + subscription: 'الخطة والفوترة', + billing_history: 'سجل الفوترة', + }, + settings: { + title: 'الإعدادات', + description: 'تعيين اسم المستأجر وعرض منطقة البيانات المستضيفة ونوع المستأجر.', + tenant_id: 'معرف المستأجر', + tenant_name: 'اسم المستأجر', + tenant_region: 'منطقة البيانات', + tenant_region_description: + 'الموقع الفعلي الذي يتم استضافة موارد المستأجر الخاصة بك (المستخدمين ، التطبيقات ، إلخ). لا يمكن تغييره بعد الإنشاء.', + tenant_region_tip: 'موارد المستأجر الخاصة بك مستضافة في {{region}}. تعرف على المزيد', + environment_tag_development: 'تطوير', + environment_tag_production: 'إنتاج', + tenant_type: 'نوع المستأجر', + development_description: + 'للاختبار فقط ويجب ألا يستخدم في الإنتاج. لا يلزم اشتراك. لديه جميع الميزات المهنية ولكن لديه قيود مثل لافتة تسجيل الدخول. تعرف على المزيد', + production_description: + 'مخصص للتطبيقات التي يستخدمها المستخدمون النهائيون وقد تتطلب اشتراكًا مدفوعًا. تعرف على المزيد', + tenant_info_saved: 'تم حفظ معلومات المستأجر بنجاح.', + }, + full_env_tag: { + development: 'تطوير', + production: 'إنتاج', + }, + deletion_card: { + title: 'حذف', + tenant_deletion: 'حذف المستأجر', + tenant_deletion_description: + 'سيؤدي حذف المستأجر إلى إزالة جميع البيانات والتكوين المرتبطة بشكل دائم. يرجى الاستمرار بحذر.', + tenant_deletion_button: 'حذف المستأجر', + }, + leave_tenant_card: { + title: 'مغادرة', + leave_tenant: 'مغادرة المستأجر', + leave_tenant_description: + 'سيظل أي موارد في المستأجر ولكن لن يكون لديك الوصول إلى هذا المستأجر بعد الآن.', + last_admin_note: 'لمغادرة هذا المستأجر ، تأكد من وجود عضو آخر لديه دور المشرف.', + }, + create_modal: { + title: 'إنشاء مستأجر', + subtitle: 'إنشاء مستأجر جديد يحتوي على موارد ومستخدمين معزولين.', + tenant_usage_purpose: 'ماذا تريد استخدام هذا المستأجر ل؟', + development_description: 'للاختبار فقط ويجب ألا يستخدم في الإنتاج. لا يلزم اشتراك.', + development_hint: 'لديه جميع الميزات المهنية ولكن لديه قيود مثل لافتة تسجيل الدخول.', + production_description: 'للاستخدام من قبل المستخدمين النهائيين وقد يتطلب اشتراكًا مدفوعًا.', + available_plan: 'الخطة المتاحة:', + create_button: 'إنشاء مستأجر', + tenant_name_placeholder: 'مستأجري', + tenant_created: 'تم إنشاء المستأجر بنجاح.', + invitation_failed: + 'فشل إرسال بعض الدعوات. يرجى المحاولة مرة أخرى في الإعدادات -> الأعضاء لاحقًا.', + tenant_type_description: 'لا يمكن تغييره بعد الإنشاء.', + }, + dev_tenant_migration: { + title: 'يمكنك الآن تجربة ميزاتنا المهنية مجانًا عن طريق إنشاء "مستأجر تطوير جديد"!', + affect_title: 'كيف يؤثر هذا عليك؟', + hint_1: + 'نحن نستبدل علامات البيئة القديمة بنوعين جديدين من المستأجر: "تطوير" و "إنتاج".', + hint_2: + 'لضمان انتقال سلس ووظائف غير منقطعة ، سيتم رفع جميع المستأجرين الذين تم إنشاؤهم في وقت مبكر إلى نوع المستأجر الإنتاج مع اشتراكك السابق.', + hint_3: 'لا تقلق ، ستظل جميع الإعدادات الأخرى كما هي.', + about_tenant_type: 'حول نوع المستأجر', + }, + delete_modal: { + title: 'حذف المستأجر', + description_line1: + 'هل أنت متأكد أنك تريد حذف المستأجر "{{name}}" مع علامة اللاحقة البيئية "{{tag}}"؟ لا يمكن التراجع عن هذا الإجراء ، وسيؤدي إلى حذف جميع بياناتك ومعلومات المستأجر بشكل دائم.', + description_line2: + 'قبل حذف المستأجر ، ربما يمكننا مساعدتك. اتصل بنا عبر البريد الإلكتروني', + description_line3: + 'إذا كنت ترغب في المتابعة ، يرجى إدخال اسم المستأجر "{{name}}" للتأكيد.', + delete_button: 'حذف بشكل دائم', + cannot_delete_title: 'لا يمكن حذف هذا المستأجر', + cannot_delete_description: + 'عذرًا ، لا يمكنك حذف هذا المستأجر الآن. يرجى التأكد من أنك على خطة مجانية وقد دفعت جميع الفواتير المستحقة.', + }, + leave_tenant_modal: { + description: 'هل أنت متأكد أنك تريد مغادرة هذا المستأجر؟', + leave_button: 'مغادرة', + }, + tenant_landing_page: { + title: 'لم تقم بإنشاء مستأجر بعد', + description: + 'لبدء تكوين مشروعك باستخدام Logto ، يرجى إنشاء مستأجر جديد. إذا كنت بحاجة إلى تسجيل الخروج أو حذف حسابك ، فقط انقر فوق زر الصورة الرمزية في الزاوية اليمنى العلوية.', + create_tenant_button: 'إنشاء مستأجر', + }, + status: { + mau_exceeded: 'تجاوز MAU', + suspended: 'معلق', + overdue: 'متأخر عن الدفع', + }, + tenant_suspended_page: { + title: 'تم تعليق المستأجر. اتصل بنا لاستعادة الوصول.', + description_1: + 'نأسف بشدة لإبلاغك بأن حساب المستأجر الخاص بك تم تعليقه مؤقتًا بسبب الاستخدام غير السليم ، بما في ذلك تجاوز حدود MAU ، وتأخر الدفع ، أو إجراءات غير مصرح بها أخرى.', + description_2: + 'إذا كنت تحتاج إلى توضيحات إضافية أو لديك أي مخاوف أو ترغب في استعادة الوظائف الكاملة وإلغاء حظر المستأجرين الخاص بك ، فيرجى عدم التردد في الاتصال بنا فورًا.', + }, + production_tenant_notification: { + text: 'أنت في مستأجر تطوير للاختبار المجاني. قم بإنشاء مستأجر إنتاج للبدء.', + action: 'إنشاء مستأجر', + }, +}; + +export default Object.freeze(tenants); diff --git a/packages/phrases/src/locales/ar-ar/translation/admin-console/topbar.ts b/packages/phrases/src/locales/ar-ar/translation/admin-console/topbar.ts new file mode 100644 index 000000000..01395d97d --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/translation/admin-console/topbar.ts @@ -0,0 +1,6 @@ +const topbar = { + docs: 'الوثائق', + help: 'المساعدة', +}; + +export default Object.freeze(topbar); diff --git a/packages/phrases/src/locales/ar-ar/translation/admin-console/upsell/add-on.ts b/packages/phrases/src/locales/ar-ar/translation/admin-console/upsell/add-on.ts new file mode 100644 index 000000000..0956bf55c --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/translation/admin-console/upsell/add-on.ts @@ -0,0 +1,18 @@ +const add_on = { + mfa_inline_notification: + 'MFA هو إضافة بتكلفة ${{price, number}} شهريًا لخطة {{planName}}. الشهر الأول محسوب استنادًا إلى دورة الفوترة الخاصة بك. تعرف أكثر', + footer: { + api_resource: + 'تكلف الموارد الإضافية ${{price, number}} شهريًا / لكل واحدة. الشهر الأول محسوب استنادًا إلى دورة الفوترة الخاصة بك. تعرف أكثر', + machine_to_machine_app: + 'تكلف التطبيقات الإضافية للتواصل بين الآلات ${{price, number}} شهريًا / لكل واحدة. الشهر الأول محسوب استنادًا إلى دورة الفوترة الخاصة بك. تعرف أكثر', + enterprise_sso: + 'تكلفة تسجيل الدخول الموحد للمؤسسات ${{price, number}} شهريًا / لكل واحدة إضافة لخطة {{planName}}. الشهر الأول محسوب استنادًا إلى دورة الفوترة الخاصة بك. تعرف أكثر', + tenant_members: + 'تكلف الأعضاء الإضافيين ${{price, number}} شهريًا / لكل واحدة. الشهر الأول محسوب استنادًا إلى دورة الفوترة الخاصة بك. تعرف أكثر', + organization: + 'المنظمة هي إضافة بتكلفة ${{price, number}} شهريًا / لكل واحدة لخطة {{planName}}. الشهر الأول محسوب استنادًا إلى دورة الفوترة الخاصة بك. تعرف أكثر', + }, +}; + +export default Object.freeze(add_on); diff --git a/packages/phrases/src/locales/ar-ar/translation/admin-console/upsell/featured-plan-content.ts b/packages/phrases/src/locales/ar-ar/translation/admin-console/upsell/featured-plan-content.ts new file mode 100644 index 000000000..84632f98c --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/translation/admin-console/upsell/featured-plan-content.ts @@ -0,0 +1,21 @@ +const featured_plan_content = { + mau: { + free_plan: 'حتى {{count, number}} MAU', + pro_plan: 'MAU غير محدود', + }, + m2m: { + free_plan: '{{count, number}} جهاز إلى جهاز', + pro_plan: 'جهاز إلى جهاز إضافي', + }, + third_party_apps: 'IdP لتطبيقات الطرف الثالث', + mfa: 'المصادقة متعددة العوامل', + sso: 'SSO المؤسسي', + role_and_permissions: { + free_plan: '{{roleCount, number}} دور و {{permissionCount, number}} إذن لكل دور', + pro_plan: 'أدوار وأذونات غير محدودة لكل دور', + }, + organizations: 'المؤسسات', + audit_logs: 'احتفاظ بسجلات التدقيق: {{count, number}} أيام', +}; + +export default Object.freeze(featured_plan_content); diff --git a/packages/phrases/src/locales/ar-ar/translation/admin-console/upsell/index.ts b/packages/phrases/src/locales/ar-ar/translation/admin-console/upsell/index.ts new file mode 100644 index 000000000..ff863a14a --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/translation/admin-console/upsell/index.ts @@ -0,0 +1,48 @@ +import add_on from './add-on.js'; +import featured_plan_content from './featured-plan-content.js'; +import paywall from './paywall.js'; + +const upsell = { + upgrade_plan: 'ترقية الخطة', + compare_plans: 'مقارنة الخطط', + view_plans: 'عرض الخطط', + create_tenant: { + title: 'اختر خطة المستأجر الخاصة بك', + description: + 'توفر Logto خيارات خطة تنافسية بأسعار مبتكرة ومعقولة مصممة للشركات الناشئة. تعرف أكثر', + base_price: 'السعر الأساسي', + monthly_price: '{{value, number}}/شهر', + view_all_features: 'عرض جميع الميزات', + select_plan: 'اختر ', + free_tenants_limit: 'حتى {{count, number}} مستأجر مجاني', + free_tenants_limit_other: 'حتى {{count, number}} مستأجر مجاني', + most_popular: 'الأكثر شعبية', + upgrade_success: 'تم الترقية بنجاح إلى ', + }, + mau_exceeded_modal: { + title: 'تجاوزت الحد الأقصى لـ MAU. قم بترقية خطتك.', + notification: + 'لقد تجاوزت MAU الحالي الحد الأقصى لـ . يرجى ترقية خطتك إلى النسخة المميزة بسرعة لتجنب تعليق خدمة Logto.', + update_plan: 'تحديث الخطة', + }, + payment_overdue_modal: { + title: 'تأخر في دفع الفاتورة', + notification: + 'عفوًا! فشلت عملية الدفع لفاتورة المستأجر {{name}}. يرجى دفع الفاتورة بسرعة لتجنب تعليق خدمة Logto.', + unpaid_bills: 'الفواتير الغير المدفوعة', + update_payment: 'تحديث الدفع', + }, + add_on_quota_item: { + api_resource: 'مورد API', + machine_to_machine: 'تطبيق من الجهاز إلى الجهاز', + tokens: '{{limit}}M رموز', + tenant_member: 'عضو المستأجر', + }, + charge_notification_for_quota_limit: + 'لقد تجاوزت الحد الأقصى لحصة {{item}} الخاصة بك. ستقوم Logto بإضافة رسوم على الاستخدام الزائد لحصتك. ستبدأ عملية الفوترة في اليوم الذي يتم فيه إصدار تصميم التسعير الجديد للإضافة. تعرف أكثر', + paywall, + featured_plan_content, + add_on, +}; + +export default Object.freeze(upsell); diff --git a/packages/phrases/src/locales/ar-ar/translation/admin-console/upsell/paywall.ts b/packages/phrases/src/locales/ar-ar/translation/admin-console/upsell/paywall.ts new file mode 100644 index 000000000..5df3022ce --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/translation/admin-console/upsell/paywall.ts @@ -0,0 +1,72 @@ +const paywall = { + applications: + 'تم الوصول إلى الحد الأقصى لعدد التطبيقات ({{count, number}}) في الخطة . قم بترقية الخطة لتلبية احتياجات فريقك. لأي مساعدة، لا تتردد في الاتصال بنا.', + applications_other: + 'تم الوصول إلى الحد الأقصى لعدد التطبيقات ({{count, number}}) في الخطة . قم بترقية الخطة لتلبية احتياجات فريقك. لأي مساعدة، لا تتردد في الاتصال بنا.', + machine_to_machine_feature: + 'قم بالترقية إلى الخطة Pro للحصول على تطبيقات إضافية للتواصل بين الأجهزة والاستمتاع بجميع الميزات المتميزة. اتصل بنا إذا كان لديك أي أسئلة.', + machine_to_machine: + 'تم الوصول إلى الحد الأقصى لعدد تطبيقات التواصل بين الأجهزة ({{count, number}}) في الخطة . قم بترقية الخطة لتلبية احتياجات فريقك. لأي مساعدة، لا تتردد في الاتصال بنا.', + machine_to_machine_other: + 'تم الوصول إلى الحد الأقصى لعدد تطبيقات التواصل بين الأجهزة ({{count, number}}) في الخطة . قم بترقية الخطة لتلبية احتياجات فريقك. لأي مساعدة، لا تتردد في الاتصال بنا.', + resources: + 'تم الوصول إلى الحد الأقصى لعدد مصادر واجهة برمجة التطبيقات ({{count, number}}) في الخطة . قم بترقية الخطة لتلبية احتياجات فريقك. اتصل بنا لأي مساعدة.', + resources_other: + 'تم الوصول إلى الحد الأقصى لعدد مصادر واجهة برمجة التطبيقات ({{count, number}}) في الخطة . قم بترقية الخطة لتلبية احتياجات فريقك. اتصل بنا لأي مساعدة.', + scopes_per_resource: + 'تم الوصول إلى الحد الأقصى لعدد الأذونات ({{count, number}}) لكل مصدر واجهة برمجة التطبيقات في الخطة . قم بترقية الخطة للتوسع. اتصل بنا لأي مساعدة.', + scopes_per_resource_other: + 'تم الوصول إلى الحد الأقصى لعدد الأذونات ({{count, number}}) لكل مصدر واجهة برمجة التطبيقات في الخطة . قم بترقية الخطة للتوسع. اتصل بنا لأي مساعدة.', + custom_domain: + 'قم بفتح وظيفة النطاق المخصص عن طريق الترقية إلى الخطة Hobby أو Pro. لا تتردد في الاتصال بنا إذا كنت بحاجة إلى أي مساعدة.', + social_connectors: + 'تم الوصول إلى الحد الأقصى لعدد موصلات التواصل الاجتماعي ({{count, number}}) في الخطة . قم بترقية الخطة لتلبية احتياجات فريقك وللقدرة على إنشاء موصلات خاصة باستخدام بروتوكولات OIDC و OAuth 2.0 و SAML. لأي مساعدة، لا تتردد في الاتصال بنا.', + social_connectors_other: + 'تم الوصول إلى الحد الأقصى لعدد موصلات التواصل الاجتماعي ({{count, number}}) في الخطة . قم بترقية الخطة لتلبية احتياجات فريقك وللقدرة على إنشاء موصلات خاصة باستخدام بروتوكولات OIDC و OAuth 2.0 و SAML. لأي مساعدة، لا تتردد في الاتصال بنا.', + standard_connectors_feature: + 'قم بالترقية إلى الخطة Hobby أو Pro لإنشاء موصلات خاصة باستخدام بروتوكولات OIDC و OAuth 2.0 و SAML، بالإضافة إلى موصلات اجتماعية غير محدودة وجميع الميزات المتميزة. لأي مساعدة، لا تتردد في الاتصال بنا.', + standard_connectors: + 'تم الوصول إلى الحد الأقصى لعدد موصلات التواصل الاجتماعي ({{count, number}}) في الخطة . قم بترقية الخطة لتلبية احتياجات فريقك وللقدرة على إنشاء موصلات خاصة باستخدام بروتوكولات OIDC و OAuth 2.0 و SAML. لأي مساعدة، لا تتردد في الاتصال بنا.', + standard_connectors_other: + 'تم الوصول إلى الحد الأقصى لعدد موصلات التواصل الاجتماعي ({{count, number}}) في الخطة . قم بترقية الخطة لتلبية احتياجات فريقك وللقدرة على إنشاء موصلات خاصة باستخدام بروتوكولات OIDC و OAuth 2.0 و SAML. لأي مساعدة، لا تتردد في الاتصال بنا.', + standard_connectors_pro: + 'تم الوصول إلى الحد الأقصى لعدد موصلات قياسية ({{count, number}}) في الخطة . قم بالترقية إلى الخطة المؤسسية للحصول على موصلات اجتماعية إضافية والقدرة على إنشاء موصلات خاصة باستخدام بروتوكولات OIDC و OAuth 2.0 و SAML. لأي مساعدة، لا تتردد في الاتصال بنا.', + standard_connectors_pro_other: + 'تم الوصول إلى الحد الأقصى لعدد موصلات قياسية ({{count, number}}) في الخطة . قم بالترقية إلى الخطة المؤسسية للحصول على موصلات اجتماعية إضافية والقدرة على إنشاء موصلات خاصة باستخدام بروتوكولات OIDC و OAuth 2.0 و SAML. لأي مساعدة، لا تتردد في الاتصال بنا.', + roles: + 'تم الوصول إلى الحد الأقصى لعدد الأدوار ({{count, number}}) في الخطة . قم بترقية الخطة لإضافة أدوار وأذونات إضافية. لأي مساعدة، لا تتردد في الاتصال بنا.', + roles_other: + 'تم الوصول إلى الحد الأقصى لعدد الأدوار ({{count, number}}) في الخطة . قم بترقية الخطة لإضافة أدوار وأذونات إضافية. لأي مساعدة، لا تتردد في الاتصال بنا.', + machine_to_machine_roles: + 'تم الوصول إلى الحد الأقصى لعدد أدوار التواصل بين الأجهزة ({{count, number}}) في الخطة . قم بترقية الخطة لإضافة أدوار وأذونات إضافية. لأي مساعدة، لا تتردد في الاتصال بنا.', + machine_to_machine_roles_other: + 'تم الوصول إلى الحد الأقصى لعدد أدوار التواصل بين الأجهزة ({{count, number}}) في الخطة . قم بترقية الخطة لإضافة أدوار وأذونات إضافية. لأي مساعدة، لا تتردد في الاتصال بنا.', + scopes_per_role: + 'تم الوصول إلى الحد الأقصى لعدد الأذونات ({{count, number}}) لكل دور في الخطة . قم بترقية الخطة لإضافة أدوار وأذونات إضافية. لأي مساعدة، لا تتردد في الاتصال بنا.', + scopes_per_role_other: + 'تم الوصول إلى الحد الأقصى لعدد الأذونات ({{count, number}}) لكل دور في الخطة . قم بترقية الخطة لإضافة أدوار وأذونات إضافية. لأي مساعدة، لا تتردد في الاتصال بنا.', + hooks: + 'تم الوصول إلى الحد الأقصى لعدد الويب هوك ({{count, number}}) في الخطة . قم بترقية الخطة لإنشاء المزيد من الويب هوك. لأي مساعدة، لا تتردد في الاتصال بنا.', + hooks_other: + 'تم الوصول إلى الحد الأقصى لعدد الويب هوك ({{count, number}}) في الخطة . قم بترقية الخطة لإنشاء المزيد من الويب هوك. لأي مساعدة، لا تتردد في الاتصال بنا.', + mfa: 'قم بفتح وظيفة التحقق الثنائي للتحقق من الأمان عن طريق الترقية إلى خطة مدفوعة. لا تتردد في الاتصال بنا إذا كنت بحاجة إلى أي مساعدة.', + organizations: + 'قم بفتح وظيفة المؤسسات عن طريق الترقية إلى خطة مدفوعة. لا تتردد في الاتصال بنا إذا كنت بحاجة إلى أي مساعدة.', + third_party_apps: + 'قم بفتح Logto كموفر هوية لتطبيقات الطرف الثالث عن طريق الترقية إلى خطة مدفوعة. لأي مساعدة، لا تتردد في الاتصال بنا.', + sso_connectors: + 'قم بفتح ميزة تسجيل الدخول الموحد للمؤسسات عن طريق الترقية إلى خطة مدفوعة. لأي مساعدة، لا تتردد في الاتصال بنا.', + tenant_members: + 'قم بفتح ميزة التعاون عن طريق الترقية إلى خطة مدفوعة. لأي مساعدة، لا تتردد في الاتصال بنا.', + tenant_members_dev_plan: + 'لقد وصلت إلى الحد الأقصى لعدد الأعضاء ({{limit}}) في الخطة الحالية. قم بإزالة عضو أو إلغاء دعوة معلقة لإضافة شخص جديد. هل تحتاج إلى مزيد من المقاعد؟ لا تتردد في الاتصال بنا.', + custom_jwt: { + title: 'إضافة مطالبات مخصصة', + description: + 'قم بالترقية إلى خطة مدفوعة للحصول على وظيفة JWT المخصصة والفوائد المتميزة. لا تتردد في الاتصال بنا إذا كان لديك أي أسئلة.', + }, + bring_your_ui: + 'قم بالترقية إلى خطة مدفوعة للحصول على وظيفة إحضار واجهة المستخدم المخصصة والفوائد المتميزة.', +}; + +export default Object.freeze(paywall); diff --git a/packages/phrases/src/locales/ar-ar/translation/admin-console/user-details.ts b/packages/phrases/src/locales/ar-ar/translation/admin-console/user-details.ts new file mode 100644 index 000000000..6130ce18c --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/translation/admin-console/user-details.ts @@ -0,0 +1,155 @@ +const user_details = { + page_title: 'تفاصيل المستخدم', + back_to_users: 'العودة إلى إدارة المستخدمين', + created_title: 'تم إنشاء هذا المستخدم بنجاح', + created_guide: 'إليك المعلومات لمساعدة المستخدم في عملية تسجيل الدخول الخاصة بهم.', + created_email: 'عنوان البريد الإلكتروني:', + created_phone: 'رقم الهاتف:', + created_username: 'اسم المستخدم:', + created_password: 'كلمة المرور:', + menu_delete: 'حذف', + delete_description: 'لا يمكن التراجع عن هذا الإجراء. سيتم حذف المستخدم نهائيًا.', + deleted: 'تم حذف المستخدم بنجاح', + reset_password: { + reset_password: 'إعادة تعيين كلمة المرور', + title: 'هل أنت متأكد أنك تريد إعادة تعيين كلمة المرور؟', + content: + 'لا يمكن التراجع عن هذا الإجراء. سيتم إعادة تعيين معلومات تسجيل الدخول الخاصة بالمستخدم.', + congratulations: 'تم إعادة تعيين هذا المستخدم', + new_password: 'كلمة المرور الجديدة:', + }, + tab_settings: 'الإعدادات', + tab_roles: 'الأدوار', + tab_logs: 'سجلات المستخدم', + tab_organizations: 'المؤسسات', + authentication: 'المصادقة', + authentication_description: + 'يحتوي كل مستخدم على ملف تعريف يحتوي على جميع معلومات المستخدم. يتكون من البيانات الأساسية والهويات الاجتماعية والبيانات المخصصة.', + user_profile: 'بيانات المستخدم', + field_email: 'عنوان البريد الإلكتروني', + field_phone: 'رقم الهاتف', + field_username: 'اسم المستخدم', + field_name: 'الاسم', + field_avatar: 'عنوان صورة الصورة الرمزية', + field_avatar_placeholder: 'https://your.cdn.domain/avatar.png', + field_custom_data: 'البيانات المخصصة', + field_custom_data_tip: + 'معلومات إضافية عن المستخدم غير مدرجة في خصائص المستخدم المحددة مسبقًا ، مثل لون المستخدم المفضل واللغة.', + field_profile: 'الملف الشخصي', + field_profile_tip: + 'مطالبات إضافية معيارية لـ OpenID Connect التي لم تُدرج في خصائص المستخدم. يرجى ملاحظة أن جميع الخصائص غير المعروفة ستتم إزالتها. يرجى الرجوع إلى مرجع خاصية الملف الشخصي لمزيد من المعلومات.', + field_connectors: 'الروابط الاجتماعية', + field_sso_connectors: 'روابط المؤسسات', + custom_data_invalid: 'يجب أن تكون البيانات المخصصة كائن JSON صالح', + profile_invalid: 'يجب أن يكون الملف الشخصي كائن JSON صالح', + connectors: { + connectors: 'الروابط', + user_id: 'معرف المستخدم', + remove: 'إزالة', + connected: 'هذا المستخدم متصل بعدة روابط اجتماعية.', + not_connected: 'المستخدم غير متصل بأي رابط اجتماعي', + deletion_confirmation: 'أنت تقوم بإزالة هوية الحالية. هل أنت متأكد أنك تريد المتابعة؟', + }, + sso_connectors: { + connectors: 'الروابط', + enterprise_id: 'معرف المؤسسة', + connected: 'هذا المستخدم متصل بعدة موفري هوية المؤسسة لتسجيل الدخول الموحد.', + not_connected: 'المستخدم غير متصل بأي موفري هوية المؤسسة لتسجيل الدخول الموحد.', + }, + mfa: { + field_name: 'المصادقة المتعددة العوامل', + field_description: 'لقد قام هذا المستخدم بتمكين عوامل التحقق المتعددة للتحقق من الهوية.', + name_column: 'عوامل التحقق المتعددة', + field_description_empty: 'لم يقم هذا المستخدم بتمكين عوامل التحقق المتعددة للتحقق من الهوية.', + deletion_confirmation: + 'أنت تقوم بإزالة الحالية للتحقق المتعدد من عوامل التحقق. هل أنت متأكد أنك تريد المتابعة؟', + }, + suspended: 'موقوف', + suspend_user: 'تعليق المستخدم', + suspend_user_reminder: + 'هل أنت متأكد أنك تريد تعليق هذا المستخدم؟ لن يتمكن المستخدم من تسجيل الدخول إلى تطبيقك ولن يتمكن من الحصول على رمز وصول جديد بعد انتهاء الحالي. بالإضافة إلى ذلك ، ستفشل أي طلبات API التي يقوم بها هذا المستخدم.', + suspend_action: 'تعليق', + user_suspended: 'تم تعليق المستخدم.', + reactivate_user: 'إعادة تفعيل المستخدم', + reactivate_user_reminder: + 'هل أنت متأكد أنك تريد إعادة تفعيل هذا المستخدم؟ سيتمكن المستخدم من محاولات تسجيل الدخول لهذا المستخدم.', + reactivate_action: 'إعادة تفعيل', + user_reactivated: 'تم إعادة تفعيل المستخدم.', + roles: { + name_column: 'دور المستخدم', + description_column: 'الوصف', + assign_button: 'تعيين الأدوار', + delete_description: + 'سيؤدي هذا الإجراء إلى إزالة هذا الدور من هذا المستخدم. سيظل الدور نفسه قائمًا ، ولكنه لن يكون مرتبطًا بعد الآن بالمستخدم.', + deleted: 'تمت إزالة {{name}} بنجاح من هذا المستخدم.', + assign_title: 'تعيين الأدوار لـ {{name}}', + assign_subtitle: + 'ابحث عن الأدوار المناسبة للمستخدم عن طريق البحث بالاسم أو الوصف أو معرف الدور.', + assign_role_field: 'تعيين الأدوار', + role_search_placeholder: 'البحث بواسطة اسم الدور', + added_text: '{{value, number}} تمت الإضافة', + assigned_user_count: '{{value, number}} مستخدمين', + confirm_assign: 'تعيين الأدوار', + role_assigned: 'تم تعيين الدور (الأدوار) بنجاح', + search: 'البحث بواسطة اسم الدور أو الوصف أو المعرف', + empty: 'لا توجد أدوار متاحة', + }, + warning_no_sign_in_identifier: + 'يحتاج المستخدم إلى وجود واحد على الأقل من معرفات تسجيل الدخول (اسم المستخدم أو البريد الإلكتروني أو رقم الهاتف أو الوسائط الاجتماعية) لتسجيل الدخول. هل أنت متأكد أنك تريد المتابعة؟', + personal_access_tokens: { + /** UNTRANSLATED */ + title: 'Personal access token', + /** UNTRANSLATED */ + title_other: 'Personal access tokens', + /** UNTRANSLATED */ + title_short: 'token', + /** UNTRANSLATED */ + empty: 'The user does not have any personal access tokens.', + /** UNTRANSLATED */ + create: 'Create new token', + /** UNTRANSLATED */ + tip: 'Personal access tokens (PATs) provide a secure way for users to grant access tokens without using their credentials and interactive sign-in. This is useful for CI/CD, scripts, or applications that need to access resources programmatically. Learn more', + /** UNTRANSLATED */ + value: 'Value', + /** UNTRANSLATED */ + created_at: 'Created at', + /** UNTRANSLATED */ + expires_at: 'Expires at', + /** UNTRANSLATED */ + never: 'Never', + /** UNTRANSLATED */ + create_new_token: 'Create new token', + /** UNTRANSLATED */ + delete_confirmation: + 'This action cannot be undone. Are you sure you want to delete this token?', + /** UNTRANSLATED */ + expired: 'Expired', + /** UNTRANSLATED */ + expired_tooltip: 'This token was expired on {{date}}.', + create_modal: { + /** UNTRANSLATED */ + title: 'Create personal access token', + /** UNTRANSLATED */ + expiration: 'Expiration', + /** UNTRANSLATED */ + expiration_description: 'The token will expire at {{date}}.', + /** UNTRANSLATED */ + expiration_description_never: + 'The token will never expire. We recommend setting an expiration date for enhanced security.', + /** UNTRANSLATED */ + days: '{{count}} day', + /** UNTRANSLATED */ + days_other: '{{count}} days', + /** UNTRANSLATED */ + created: 'The token {{name}} has been successfully created.', + }, + edit_modal: { + /** UNTRANSLATED */ + title: 'Edit personal access token', + /** UNTRANSLATED */ + edited: 'The token {{name}} has been successfully edited.', + }, + }, +}; + +export default Object.freeze(user_details); diff --git a/packages/phrases/src/locales/ar-ar/translation/admin-console/users.ts b/packages/phrases/src/locales/ar-ar/translation/admin-console/users.ts new file mode 100644 index 000000000..8dbb08bc6 --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/translation/admin-console/users.ts @@ -0,0 +1,27 @@ +const users = { + page_title: 'إدارة المستخدمين', + title: 'إدارة المستخدمين', + subtitle: + 'إدارة هويات المستخدمين بما في ذلك إنشاء المستخدمين، تعديل معلومات المستخدم، عرض سجلات المستخدم، إعادة تعيين كلمة المرور وحذف المستخدمين', + create: 'إضافة مستخدم', + create_subtitle: 'يرجى تقديم واحدة على الأقل من الحقول التالية للمتابعة.', + error_missing_identifier: 'يجب تقديم معرف واحد على الأقل لإنشاء مستخدم.', + user_name: 'المستخدم', + application_name: 'من التطبيق', + latest_sign_in: 'آخر تسجيل دخول', + create_form_username: 'اسم المستخدم', + create_form_password: 'كلمة المرور', + create_form_name: 'الاسم الكامل', + placeholder_name: 'جون/جين دو', + placeholder_email: 'jdoe@example.com', + placeholder_username: 'user123', + placeholder_phone: '+1 (555) 555-5555', + unnamed: 'بدون اسم', + search: 'البحث بالاسم أو البريد الإلكتروني أو الهاتف أو اسم المستخدم', + check_user_detail: 'تحقق من تفاصيل المستخدم', + placeholder_title: 'إدارة المستخدمين', + placeholder_description: + 'يحتوي كل مستخدم على ملف تعريف يحتوي على جميع معلومات المستخدم. يتكون من البيانات الأساسية وهويات التواصل الاجتماعي والبيانات المخصصة.', +}; + +export default Object.freeze(users); diff --git a/packages/phrases/src/locales/ar-ar/translation/admin-console/webhook-details.ts b/packages/phrases/src/locales/ar-ar/translation/admin-console/webhook-details.ts new file mode 100644 index 000000000..1b373a4ae --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/translation/admin-console/webhook-details.ts @@ -0,0 +1,59 @@ +const webhook_details = { + page_title: 'تفاصيل الويب هوك', + back_to_webhooks: 'العودة إلى الويب هوك', + not_in_use: 'غير مستخدم', + success_rate: 'معدل النجاح', + requests: '{{value, number}} طلبات في 24 ساعة', + disable_webhook: 'تعطيل الويب هوك', + disable_reminder: + 'هل أنت متأكد أنك تريد إعادة تفعيل هذا الويب هوك؟ سيؤدي ذلك إلى عدم إرسال طلب HTTP إلى عنوان URL النهائي.', + webhook_disabled: 'تم تعطيل الويب هوك.', + webhook_reactivated: 'تم إعادة تفعيل الويب هوك.', + reactivate_webhook: 'إعادة تفعيل الويب هوك', + delete_webhook: 'حذف الويب هوك', + deletion_reminder: + 'أنت تقوم بإزالة هذا الويب هوك. بعد الحذف، لن يتم إرسال طلب HTTP إلى عنوان URL النهائي.', + deleted: 'تم حذف الويب هوك بنجاح.', + settings_tab: 'الإعدادات', + recent_requests_tab: 'الطلبات الأخيرة (24 ساعة)', + settings: { + settings: 'الإعدادات', + settings_description: + 'تسمح لك الويب هوك بتلقي تحديثات فورية حول الأحداث المحددة عند حدوثها، من خلال إرسال طلب POST إلى عنوان URL النهائي الخاص بك. يتيح لك ذلك اتخاذ إجراءات فورية استنادًا إلى المعلومات الجديدة المستلمة.', + events: 'الأحداث', + events_description: 'حدد الأحداث المشغلة التي سترسل Logto طلب POST لها.', + name: 'الاسم', + endpoint_url: 'عنوان URL النهائي', + signing_key: 'مفتاح التوقيع', + signing_key_tip: + 'أضف المفتاح السري الذي يوفره Logto إلى عنوان URL الخاص بك كرأس طلب لضمان صحة حمولة الويب هوك.', + regenerate: 'إعادة توليد', + regenerate_key_title: 'إعادة توليد مفتاح التوقيع', + regenerate_key_reminder: + 'هل أنت متأكد أنك تريد تعديل مفتاح التوقيع؟ ستكون إعادة توليدها سارية المفعول فورًا. يرجى تذكر تعديل مفتاح التوقيع بشكل متزامن في عنوان URL الخاص بك.', + regenerated: 'تم إعادة توليد مفتاح التوقيع.', + custom_headers: 'رؤوس مخصصة', + custom_headers_tip: + 'اختياريًا، يمكنك إضافة رؤوس مخصصة إلى حمولة الويب هوك لتوفير سياق أو بيانات توضيحية إضافية حول الحدث.', + key_duplicated_error: 'لا يمكن تكرار المفتاح.', + key_missing_error: 'المفتاح مطلوب.', + value_missing_error: 'القيمة مطلوبة.', + invalid_key_error: 'المفتاح غير صالح', + invalid_value_error: 'القيمة غير صالحة', + test: 'اختبار', + test_webhook: 'اختبار الويب هوك الخاص بك', + test_webhook_description: + 'قم بتكوين الويب هوك واختبره باستخدام أمثلة لحمولة لكل حدث محدد للتحقق من استلام ومعالجة صحيحة.', + send_test_payload: 'إرسال حمولة الاختبار', + test_result: { + endpoint_url: 'عنوان URL النهائي: {{url}}', + message: 'الرسالة: {{message}}', + response_status: 'حالة الاستجابة: {{status, number}}', + response_body: 'جسم الاستجابة: {{body}}', + request_time: 'وقت الطلب: {{time}}', + test_success: 'تم اختبار الويب هوك بنجاح على العنوان النهائي.', + }, + }, +}; + +export default Object.freeze(webhook_details); diff --git a/packages/phrases/src/locales/ar-ar/translation/admin-console/webhooks.ts b/packages/phrases/src/locales/ar-ar/translation/admin-console/webhooks.ts new file mode 100644 index 000000000..26835cb62 --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/translation/admin-console/webhooks.ts @@ -0,0 +1,43 @@ +const webhooks = { + page_title: 'الويب هوك', + title: 'الويب هوك', + subtitle: 'إنشاء ويب هوك لتلقي تحديثات فورية في الوقت الحقيقي بخصوص الأحداث المحددة.', + create: 'إنشاء ويب هوك', + schemas: { + interaction: 'تفاعل المستخدم', + user: 'المستخدم', + organization: 'المؤسسة', + role: 'الدور', + scope: 'الصلاحية', + organization_role: 'دور المؤسسة', + organization_scope: 'صلاحية المؤسسة', + }, + table: { + name: 'الاسم', + events: 'الأحداث', + success_rate: 'معدل النجاح (24 ساعة)', + requests: 'الطلبات (24 ساعة)', + }, + placeholder: { + title: 'ويب هوك', + description: + 'إنشاء ويب هوك لتلقي تحديثات فورية من خلال طلبات POST إلى عنوان URL الخاص بك. ابقَ على اطلاع وتخذ الإجراءات الفورية في الأحداث مثل "إنشاء حساب" و "تسجيل الدخول" و "إعادة تعيين كلمة المرور".', + create_webhook: 'إنشاء ويب هوك', + }, + create_form: { + title: 'إنشاء ويب هوك', + subtitle: 'أضف الويب هوك لإرسال طلب POST إلى عنوان URL الخاص بك مع تفاصيل أحداث المستخدمين.', + events: 'الأحداث', + events_description: 'حدد أحداث التشغيل التي سترسلها Logto كطلب POST.', + name: 'الاسم', + name_placeholder: 'أدخل اسم الويب هوك', + endpoint_url: 'عنوان URL النهاية', + endpoint_url_placeholder: 'https://your.webhook.endpoint.url', + endpoint_url_tip: 'أدخل عنوان URL الخاص بك حيث يتم إرسال بيانات الويب هوك عند حدوث الحدث.', + create_webhook: 'إنشاء ويب هوك', + missing_event_error: 'يجب عليك تحديد حدث واحد على الأقل.', + }, + webhook_created: 'تم إنشاء الويب هوك {{name}} بنجاح.', +}; + +export default Object.freeze(webhooks); diff --git a/packages/phrases/src/locales/ar-ar/translation/admin-console/welcome.ts b/packages/phrases/src/locales/ar-ar/translation/admin-console/welcome.ts new file mode 100644 index 000000000..d2e240203 --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/translation/admin-console/welcome.ts @@ -0,0 +1,8 @@ +const welcome = { + title: 'مرحبًا بك في لوحة التحكم الإدارية', + description: + 'لوحة التحكم الإدارية هي تطبيق ويب لإدارة Logto بدون متطلبات برمجية. دعنا نقوم أولاً بإنشاء حساب. باستخدام هذا الحساب ، يمكنك إدارة Logto بنفسك أو نيابة عن شركتك.', + create_account: 'إنشاء حساب', +}; + +export default Object.freeze(welcome); diff --git a/packages/phrases/src/locales/ar-ar/translation/demo-app.ts b/packages/phrases/src/locales/ar-ar/translation/demo-app.ts new file mode 100644 index 000000000..eee6bfd8c --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/translation/demo-app.ts @@ -0,0 +1,13 @@ +const demo_app = { + title: 'لقد قمت بتسجيل الدخول بنجاح في المعاينة المباشرة!', + subtitle: 'إليك معلومات المستخدم الخاصة بك:', + username: 'اسم المستخدم: ', + user_id: 'معرف المستخدم: ', + sign_out: 'تسجيل الخروج من المعاينة المباشرة', + continue_explore: 'أو استمر في استكشاف', + customize_sign_in_experience: 'تخصيص تجربة تسجيل الدخول', + enable_passwordless: 'تمكين تسجيل الدخول بدون كلمة مرور', + add_social_connector: 'إضافة موصل اجتماعي', +}; + +export default Object.freeze(demo_app); diff --git a/packages/phrases/src/locales/ar-ar/translation/index.ts b/packages/phrases/src/locales/ar-ar/translation/index.ts new file mode 100644 index 000000000..5c1a9a6fe --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/translation/index.ts @@ -0,0 +1,11 @@ +import admin_console from './admin-console/index.js'; +import demo_app from './demo-app.js'; +import oidc from './oidc.js'; + +const translation = { + admin_console, + demo_app, + oidc, +}; + +export default Object.freeze(translation); diff --git a/packages/phrases/src/locales/ar-ar/translation/oidc.ts b/packages/phrases/src/locales/ar-ar/translation/oidc.ts new file mode 100644 index 000000000..bee1ab8bc --- /dev/null +++ b/packages/phrases/src/locales/ar-ar/translation/oidc.ts @@ -0,0 +1,5 @@ +const oidc = { + logout_success: 'لقد قمت بتسجيل الخروج بنجاح.', +}; + +export default Object.freeze(oidc);