diff --git a/desktop/src/ui/platform.ts b/desktop/src/ui/platform.ts index fdf240389ee..ac042064155 100644 --- a/desktop/src/ui/platform.ts +++ b/desktop/src/ui/platform.ts @@ -412,7 +412,7 @@ export async function configurePlatform (onWorkbenchConnect?: () => Promise l.trim()) - : ['en', 'ru', 'es', 'pt', 'pt-br', 'zh', 'fr', 'cs', 'it', 'de', 'ja', 'ko', 'tr'] + : ['en', 'ru', 'es', 'pt', 'pt-br', 'zh', 'fr', 'cs', 'it', 'de', 'ja', 'ko', 'tr', 'ar'] setMetadata(uiPlugin.metadata.Languages, languages) diff --git a/dev/prod/public/branding.json b/dev/prod/public/branding.json index e5739e9f364..5603a3f9ed6 100644 --- a/dev/prod/public/branding.json +++ b/dev/prod/public/branding.json @@ -1,7 +1,7 @@ { "huly.local:8080": { "title": "Huly", - "languages": "en,ru,pt,pt-br,es,zh,fr,de,ja,ko,tr", + "languages": "en,ru,pt,pt-br,es,zh,fr,de,ja,ko,tr,ar", "defaultLanguage": "en", "defaultApplication": "tracker", "defaultSpace": "tracker:project:DefaultProject", @@ -30,7 +30,7 @@ }, "huly.local:8087": { "title": "Huly", - "languages": "en,ru,pt,pt-br,es,zh,fr,de,ja,ko,tr", + "languages": "en,ru,pt,pt-br,es,zh,fr,de,ja,ko,tr,ar", "defaultLanguage": "en", "defaultApplication": "tracker", "defaultSpace": "tracker:project:DefaultProject", diff --git a/dev/prod/src/platform.ts b/dev/prod/src/platform.ts index 6f3ac3f628f..f1291aac2de 100644 --- a/dev/prod/src/platform.ts +++ b/dev/prod/src/platform.ts @@ -545,7 +545,7 @@ export async function configurePlatform() { const languages = myBranding.languages ? myBranding.languages.split(',').map((l) => l.trim()) - : ['en', 'ru', 'es', 'pt', 'pt-br', 'zh', 'fr', 'cs', 'it', 'de', 'ja', 'ko', 'tr'] + : ['en', 'ru', 'es', 'pt', 'pt-br', 'zh', 'fr', 'cs', 'it', 'de', 'ja', 'ko', 'tr', 'ar'] setMetadata(uiPlugin.metadata.Languages, languages) diff --git a/foundations/core/packages/core/lang/ar.json b/foundations/core/packages/core/lang/ar.json new file mode 100644 index 00000000000..68e62a4c276 --- /dev/null +++ b/foundations/core/packages/core/lang/ar.json @@ -0,0 +1,77 @@ +{ + "string": { + "Id": "المعرّف", + "Space": "المساحة", + "Spaces": "المساحات", + "SpacesDescription": "إدارة نوع جميع المساحات", + "TypedSpace": "مساحة من نوع محدد", + "SpaceType": "نوع المساحة", + "Modified": "مُعدَّل", + "ModifiedDate": "تاريخ التعديل", + "ModifiedBy": "عُدِّل بواسطة", + "Class": "الفئة", + "AttachedTo": "مُرفق بـ", + "AttachedToClass": "مُرفق بالفئة", + "Name": "الاسم", + "Description": "الوصف", + "ShortDescription": "وصف موجز", + "Descriptor": "الواصف", + "TargetClass": "الفئة المستهدفة", + "Role": "الدور", + "Roles": "الأدوار", + "Private": "خاص", + "Archived": "مؤرشف", + "ClassLabel": "النوع", + "ClassPropertyLabel": "التسمية", + "String": "نص", + "Markup": "ترميز", + "Number": "رقم", + "Boolean": "مربع اختيار", + "Timestamp": "طابع زمني", + "Date": "تاريخ", + "IntlString": "IntlString", + "Ref": "مرجع", + "Collection": "مجموعة", + "Array": "اختيار متعدد", + "Enum": "اختيار", + "Members": "الأعضاء", + "Hyperlink": "URL", + "MarkupBlobRef": "تعاوني", + "Object": "كائن", + "System": "النظام", + "CreatedBy": "أنشئ بواسطة", + "CreatedDate": "تاريخ الإنشاء", + "Status": "الحالة", + "StatusCategory": "فئة الحالة", + "Account": "الحساب", + "Rank": "الترتيب", + "Owners": "المالكون", + "Permission": "الإذن", + "CreateObject": "إنشاء كائن", + "UpdateObject": "تحديث كائن", + "DeleteObject": "حذف كائن", + "ForbidDeleteObject": "منع حذف الكائن", + "UpdateSpace": "تحديث المساحة", + "ArchiveSpace": "أرشفة المساحة", + "CreateObjectDescription": "يمنح المستخدمين القدرة على إنشاء كائنات في المساحة", + "UpdateObjectDescription": "يمنح المستخدمين القدرة على تحديث الكائنات في المساحة", + "DeleteObjectDescription": "يمنح المستخدمين القدرة على حذف الكائنات في المساحة", + "ForbidDeleteObjectDescription": "منع المستخدمين من حذف الكائنات في المساحة", + "UpdateSpaceDescription": "يمنح المستخدمين القدرة على تحديث المساحة", + "ArchiveSpaceDescription": "يمنح المستخدمين القدرة على أرشفة المساحة", + "AutoJoin": "انضمام تلقائي", + "AutoJoinDescr": "إضافة الموظفين الجدد تلقائيًا إلى هذه المساحة", + "AutoJoinGuests": "انضمام الضيوف تلقائيًا", + "AutoJoinGuestsDescr": "عند التفعيل، يُضاف ضيوف مساحة العمل إلى هذه المساحة عند التنشيط", + "RBAC": "التحكم في الوصول المستند إلى الأدوار", + "RBACDescr": "اشتراط الوصول المستند إلى الأدوار لتنفيذ الإجراءات في هذه المساحة", + "BlobSize": "الحجم", + "BlobContentType": "نوع المحتوى", + "Relation": "علاقة", + "Relations": "العلاقات", + "AddRelation": "إضافة علاقة", + "PersonId": "الشخص", + "AccountId": "الحساب", + "Version": "الإصدار" + } +} diff --git a/foundations/core/packages/platform/lang/ar.json b/foundations/core/packages/platform/lang/ar.json new file mode 100644 index 00000000000..e41c9138be9 --- /dev/null +++ b/foundations/core/packages/platform/lang/ar.json @@ -0,0 +1,30 @@ +{ + "status": { + "LoadingPlugin": "جارٍ تحميل الإضافة {plugin}...", + "UnknownError": "خطأ غير معروف: {message}", + "InvalidId": "معرّف غير صالح: {id}", + "BadRequest": "طلب غير صالح", + "Forbidden": "محظور", + "Conflict": "تعارض", + "ExpiredLink": "انتهت صلاحية رابط الدعوة هذا", + "Unauthorized": "غير مصرَّح به", + "UnknownMethod": "طريقة غير معروفة: {method}", + "InternalServerError": "خطأ داخلي في الخادم", + "MaintenanceWarning": "الصيانة مجدولة خلال", + "MaintenanceWarningTime": "{time, plural, =1 {أقل من دقيقة} other {# دقيقة}}", + "AccountNotFound": "لم يُعثر على الحساب أو أن بيانات الاعتماد المقدَّمة غير صحيحة", + "AccountNotConfirmed": "لم يتم تأكيد الحساب", + "WorkspaceNotFound": "لم يُعثر على مساحة العمل", + "AccountAlreadyExists": "الحساب موجود بالفعل", + "WorkspaceRateLimit": "الخادم مشغول، يُرجى الانتظار قليلاً والمحاولة مرة أخرى", + "AccountAlreadyConfirmed": "تم تأكيد الحساب بالفعل", + "WorkspaceAlreadyExists": "مساحة العمل موجودة بالفعل", + "InvalidOtp": "رمز غير صالح", + "PasswordLoginLocked": "تم قفل تسجيل الدخول بكلمة المرور بسبب كثرة المحاولات الفاشلة. يُرجى استخدام طريقة تسجيل الدخول برمز OTP لإلغاء قفل حسابك.", + "InviteNotFound": "لم يُعثر على دعوة بالبريد الإلكتروني:{email}.", + "WorkspaceLimitReached": "لقد وصلت إلى الحد الأقصى لمساحات العمل. يُرجى التواصل معنا...", + "ReadOnlyAccount": "حساب ضيف تجريبي مجهول", + "SystemAccount": "حساب النظام", + "SocialIdAlreadyExists": "Social ID موجود بالفعل" + } +} diff --git a/foundations/core/packages/platform/src/testUtils.ts b/foundations/core/packages/platform/src/testUtils.ts index ac431aa993f..12f05689840 100644 --- a/foundations/core/packages/platform/src/testUtils.ts +++ b/foundations/core/packages/platform/src/testUtils.ts @@ -10,7 +10,7 @@ function makeLocaleMatcher (target: object): object { ) } -const langs = ['en', 'ru'] +const langs = ['en', 'ru', 'ar'] /** * @public diff --git a/packages/presentation/lang/ar.json b/packages/presentation/lang/ar.json new file mode 100644 index 00000000000..dcc67fee2ac --- /dev/null +++ b/packages/presentation/lang/ar.json @@ -0,0 +1,65 @@ +{ + "string": { + "Create": "إنشاء", + "Cancel": "إلغاء", + "Ok": "موافق", + "Save": "حفظ", + "Saved": "تم الحفظ...", + "Download": "تنزيل", + "DownloadOriginal": "تنزيل النسخة الأصلية", + "Delete": "حذف", + "Close": "إغلاق", + "NotSelected": "غير محدد", + "Deselect": "إلغاء التحديد", + "Archived": "(مؤرشف)", + "AddSocialLinks": "إضافة روابط التواصل الاجتماعي", + "EditSocialLinks": "تحرير روابط التواصل الاجتماعي", + "Change": "تغيير", + "Remove": "إزالة", + "Search": "بحث...", + "Spaces": "المساحات", + "NumberSpaces": "{count, plural, =0 {في} =1 {في مكان واحد} other {في # أماكن}}", + "InThis": "في هذه {space}", + "NoMatchesInThis": "لا توجد مطابقات في هذه {space}", + "NoMatchesFound": "لم يتم العثور على مطابقات", + "NotInThis": "ليس في هذه {space}", + "Match": "مطابقة", + "Add": "إضافة", + "Edit": "تحرير", + "DocumentPreview": "معاينة", + "MakePrivate": "جعله خاصاً", + "MakePrivateDescription": "يمكن للأعضاء فقط رؤيته", + "Created": "تم الإنشاء", + "Selected": "محدد", + "NoResults": "لا توجد نتائج لعرضها", + "Next": "التالي", + "FailedToPreview": "فشلت المعاينة", + "ContentType": "نوع المحتوى", + "ContentTypeNotSupported": "المعاينة غير متاحة لنوع المحتوى هذا", + "StartDrawing": "خربشة فوقه", + "DrawingHistory": "سجل الخربشة", + "ColorAdd": "إضافة لون مُعد مسبقاً", + "ColorRemove": "إزالة لون مُعد مسبقاً", + "ColorReset": "إعادة تعيين الألوان المُعدة مسبقاً", + "Copy": "نسخ", + "DocumentUrlCopied": "تم النسخ!", + "CopyLink": "نسخ الرابط", + "AccessDenied": "العنصر غير موجود أو ليس لديك إذن بالوصول إليه.", + "UnableToFollowMention": "تعذّر فتح العنصر المُشار إليه", + "Undo": "تراجع", + "Redo": "إعادة", + "ClearCanvas": "مسح لوحة الرسم", + "PenTool": "قلم", + "EraserTool": "ممحاة", + "PanTool": "تحريك", + "TextTool": "نص", + "LineTool": "خط", + "RectangleTool": "مستطيل", + "EllipseTool": "بيضاوي", + "PaletteManagementMenu": "إدارة الألوان المُعدة مسبقاً", + "BetaVersion": "نسخة تجريبية" + }, + "status": { + "FileTooLarge": "الملف كبير جداً" + } +} diff --git a/packages/presentation/src/components/DrawingBoardToolbar.svelte b/packages/presentation/src/components/DrawingBoardToolbar.svelte index e5a89d73cfa..60f56a5f051 100644 --- a/packages/presentation/src/components/DrawingBoardToolbar.svelte +++ b/packages/presentation/src/components/DrawingBoardToolbar.svelte @@ -351,9 +351,9 @@ bottom: 100%; &.inside { - left: 0.5rem; + inset-inline-start: 0.5rem; top: 0.5rem; - right: auto; + inset-inline-end: auto; bottom: unset; display: inline-flex; flex-wrap: wrap; @@ -393,7 +393,7 @@ .tool-indicator { position: absolute; bottom: -0.125rem; - right: -0.125rem; + inset-inline-end: -0.125rem; width: 0; height: 0; border-style: solid; diff --git a/packages/presentation/src/components/Image.svelte b/packages/presentation/src/components/Image.svelte index 558fbac9b42..dcbf9e5dce8 100644 --- a/packages/presentation/src/components/Image.svelte +++ b/packages/presentation/src/components/Image.svelte @@ -84,7 +84,7 @@ border-radius: inherit; position: absolute; top: 0; - left: 0; + inset-inline-start: 0; width: 100%; height: 100%; display: flex; diff --git a/packages/presentation/src/components/PluginConfigurationCard.svelte b/packages/presentation/src/components/PluginConfigurationCard.svelte index 90064da9a0b..b5844c86fd9 100644 --- a/packages/presentation/src/components/PluginConfigurationCard.svelte +++ b/packages/presentation/src/components/PluginConfigurationCard.svelte @@ -142,6 +142,6 @@ opacity: 0.75; font-size: 0.8125rem; line-height: 1.4; - padding-left: calc(1.25rem + 0.625rem); + padding-inline-start: calc(1.25rem + 0.625rem); } diff --git a/packages/presentation/src/components/SearchResult.svelte b/packages/presentation/src/components/SearchResult.svelte index 7536c2a1ccc..f8a39f3d1eb 100644 --- a/packages/presentation/src/components/SearchResult.svelte +++ b/packages/presentation/src/components/SearchResult.svelte @@ -95,7 +95,7 @@ .shortTitle { display: flex; - padding-right: 0.5rem; + padding-inline-end: 0.5rem; color: var(--theme-darker-color); } .name { @@ -104,7 +104,7 @@ } .description { - padding-left: 0.5rem; + padding-inline-start: 0.5rem; color: var(--global-secondary-TextColor); } } diff --git a/packages/theme/fonts/arabic/woff2/IBMPlexSansArabic-Bold.woff2 b/packages/theme/fonts/arabic/woff2/IBMPlexSansArabic-Bold.woff2 new file mode 100644 index 00000000000..08e2028e297 Binary files /dev/null and b/packages/theme/fonts/arabic/woff2/IBMPlexSansArabic-Bold.woff2 differ diff --git a/packages/theme/fonts/arabic/woff2/IBMPlexSansArabic-Medium.woff2 b/packages/theme/fonts/arabic/woff2/IBMPlexSansArabic-Medium.woff2 new file mode 100644 index 00000000000..ced3646c77c Binary files /dev/null and b/packages/theme/fonts/arabic/woff2/IBMPlexSansArabic-Medium.woff2 differ diff --git a/packages/theme/fonts/arabic/woff2/IBMPlexSansArabic-Regular.woff2 b/packages/theme/fonts/arabic/woff2/IBMPlexSansArabic-Regular.woff2 new file mode 100644 index 00000000000..695d303cc25 Binary files /dev/null and b/packages/theme/fonts/arabic/woff2/IBMPlexSansArabic-Regular.woff2 differ diff --git a/packages/theme/fonts/arabic/woff2/IBMPlexSansArabic-SemiBold.woff2 b/packages/theme/fonts/arabic/woff2/IBMPlexSansArabic-SemiBold.woff2 new file mode 100644 index 00000000000..eda08d3bb80 Binary files /dev/null and b/packages/theme/fonts/arabic/woff2/IBMPlexSansArabic-SemiBold.woff2 differ diff --git a/packages/theme/src/Theme.svelte b/packages/theme/src/Theme.svelte index 1e2837ffda8..6d18a22d28e 100644 --- a/packages/theme/src/Theme.svelte +++ b/packages/theme/src/Theme.svelte @@ -34,6 +34,10 @@ const currentLanguage = writable(getCurrentLanguage()) const currentEmoji = writable(getCurrentEmoji()) + // Languages whose UI should render right-to-left. + const rtlLanguages = new Set(['ar', 'he', 'fa', 'ur']) + const isRtlLanguage = (language: string): boolean => rtlLanguages.has((language ?? '').split(/[-_]/)[0]) + const setOptions = (currentFont: string, theme: string, language: string, emoji: string) => { themeOptions.set(new ThemeOptions(currentFont === 'normal-font' ? 16 : 14, isThemeDark(theme), language, emoji)) } @@ -70,6 +74,7 @@ setMetadata(platform.metadata.locale, $currentLanguage) await loadPluginStrings($currentLanguage, set) setOptions(getCurrentFontSize(), getCurrentTheme(), language, getCurrentEmoji()) + setDocumentLanguage() } const setEmoji = (emoji: string, set = true) => { currentEmoji.set(emoji) @@ -124,6 +129,7 @@ const setDocumentLanguage = (): void => { document.documentElement.lang = $currentLanguage + document.documentElement.dir = isRtlLanguage($currentLanguage) ? 'rtl' : 'ltr' } onMount(() => { diff --git a/packages/theme/styles/_layouts.scss b/packages/theme/styles/_layouts.scss index 90f3929ae41..07fdb45dcca 100644 --- a/packages/theme/styles/_layouts.scss +++ b/packages/theme/styles/_layouts.scss @@ -181,11 +181,11 @@ a.noBold { .float-left-box { box-sizing: border-box; width: 100%; - float: left; + float: inline-start; } .float-left { - float: left; + float: inline-start; } input.search { @@ -333,15 +333,15 @@ input.search { background-color: var(--avatar-bg-color); border-radius: 50%; } - &:not(.small-gap, .large-gap) { margin-right: .375rem; } - &.no-gap { margin-right: 0; } - &.small-gap { margin-right: .25rem; } - &.large-gap { margin-right: .5rem; } - &.flow:last-child { margin-right: 0; } + &:not(.small-gap, .large-gap) { margin-inline-end: .375rem; } + &.no-gap { margin-inline-end: 0; } + &.small-gap { margin-inline-end: .25rem; } + &.large-gap { margin-inline-end: .5rem; } + &.flow:last-child { margin-inline-end: 0; } } .label { min-width: 0; - text-align: left; + text-align: start; color: var(--theme-content-color); overflow: hidden; @@ -362,7 +362,7 @@ input.search { } .action { visibility: hidden; - margin-left: .75rem; + margin-inline-start: .75rem; } &:hover { .icon { @@ -439,8 +439,8 @@ input.search { flex-wrap: wrap; min-width: 0; - & > * { margin-right: 0.25rem; } - & > *:last-child { margin-right: 0; } + & > * { margin-inline-end: 0.25rem; } + & > *:last-child { margin-inline-end: 0; } .bold { font-weight: 500; @@ -450,30 +450,30 @@ input.search { } .gap-1, .gap-1-5 { - & > *:not(:last-child) { margin-right: .25rem; } + & > *:not(:last-child) { margin-inline-end: .25rem; } &.reverse { flex-direction: row-reverse; - & > :last-child { margin-right: .25rem; } - & > :first-child { margin-right: 0; } + & > :last-child { margin-inline-end: .25rem; } + & > :first-child { margin-inline-end: 0; } } } .gapV-1 > *:not(:last-child) { margin-bottom: .25rem; } .gap-1-5 { - &:not(.reverse) > *:not(:last-child) { margin-right: .375rem; } - &.reverse > *:not(:first-child) { margin-left: .375rem; } + &:not(.reverse) > *:not(:last-child) { margin-inline-end: .375rem; } + &.reverse > *:not(:first-child) { margin-inline-start: .375rem; } } .gap-2 { - &:not(.reverse) > *:not(:first-child) { margin-left: .5rem; } - &.reverse > *:not(:last-child) { margin-right: .5rem; } + &:not(.reverse) > *:not(:first-child) { margin-inline-start: .5rem; } + &.reverse > *:not(:last-child) { margin-inline-end: .5rem; } } .gapV-2 > *:not(:last-child) { margin-bottom: .5rem; } .gap-3 { - &:not(.reverse) > *:not(:first-child) { margin-left: .75rem; } - &.reverse > *:not(:last-child) { margin-right: .75rem; } + &:not(.reverse) > *:not(:first-child) { margin-inline-start: .75rem; } + &.reverse > *:not(:last-child) { margin-inline-end: .75rem; } } .gap-4 { - &:not(.reverse) > *:not(:first-child) { margin-left: 1rem; } - &.reverse > *:not(:last-child) { margin-right: 1rem; } + &:not(.reverse) > *:not(:first-child) { margin-inline-start: 1rem; } + &.reverse > *:not(:last-child) { margin-inline-end: 1rem; } } .gapV-4 > *:not(:last-child) { margin-bottom: 1rem; } .gapV-6 > *:not(:last-child) { margin-bottom: 1.5rem; } @@ -494,7 +494,7 @@ input.search { cursor: pointer; .icon { - margin-right: .375rem; + margin-inline-end: .375rem; color: var(--theme-content-color); &.small-size { width: 1.5rem; @@ -506,33 +506,33 @@ input.search { } /* Margins & Paddings */ -.ml-0 { margin-left: 0 !important; } -.ml-0-5 { margin-left: .125rem; } -.ml-1 { margin-left: .25rem; } -.ml-1-5 { margin-left: .375rem; } -.ml-2 { margin-left: .5rem; } -.ml-3 { margin-left: .75rem; } -.ml-4 { margin-left: 1rem; } -.ml-5-5 { margin-left: 1.375rem; } -.ml-6 { margin-left: 1.5rem; } -.ml-8 { margin-left: 2rem; } -.ml-10 { margin-left: 2.5rem; } -.ml-12 { margin-left: 3rem; } -.ml-14 { margin-left: 3.5rem; } -.ml-22 { margin-left: 5.5rem; } -.ml-auto { margin-left: auto; } -.mr-0-5 { margin-right: .125rem; } -.mr-1 { margin-right: .25rem; } -.mr-1-5 { margin-right: .375rem; } -.mr-2 { margin-right: .5rem; } -.mr-2-5 { margin-right: .625rem; } -.mr-3 { margin-right: .75rem; } -.mr-4 { margin-right: 1rem; } -.mr-5-5 { margin-right: 1.375rem; } -.mr-6 { margin-right: 1.5rem; } -.mr-8 { margin-right: 2rem; } -.mr-10 { margin-right: 2.5rem; } -.mr-32 { margin-right: 8rem } +.ml-0 { margin-inline-start: 0 !important; } +.ml-0-5 { margin-inline-start: .125rem; } +.ml-1 { margin-inline-start: .25rem; } +.ml-1-5 { margin-inline-start: .375rem; } +.ml-2 { margin-inline-start: .5rem; } +.ml-3 { margin-inline-start: .75rem; } +.ml-4 { margin-inline-start: 1rem; } +.ml-5-5 { margin-inline-start: 1.375rem; } +.ml-6 { margin-inline-start: 1.5rem; } +.ml-8 { margin-inline-start: 2rem; } +.ml-10 { margin-inline-start: 2.5rem; } +.ml-12 { margin-inline-start: 3rem; } +.ml-14 { margin-inline-start: 3.5rem; } +.ml-22 { margin-inline-start: 5.5rem; } +.ml-auto { margin-inline-start: auto; } +.mr-0-5 { margin-inline-end: .125rem; } +.mr-1 { margin-inline-end: .25rem; } +.mr-1-5 { margin-inline-end: .375rem; } +.mr-2 { margin-inline-end: .5rem; } +.mr-2-5 { margin-inline-end: .625rem; } +.mr-3 { margin-inline-end: .75rem; } +.mr-4 { margin-inline-end: 1rem; } +.mr-5-5 { margin-inline-end: 1.375rem; } +.mr-6 { margin-inline-end: 1.5rem; } +.mr-8 { margin-inline-end: 2rem; } +.mr-10 { margin-inline-end: 2.5rem; } +.mr-32 { margin-inline-end: 8rem } .mt--1 { margin-top: -.25rem; } .mt-0-5 { margin-top: .125rem; } .mt-1 { margin-top: .25rem; } @@ -576,25 +576,25 @@ input.search { .m-3 { margin: .75rem; } .m-4 { margin: 1rem; } -.pl-0-5 { padding-left: .125rem; } -.pl-1 { padding-left: .25rem; } -.pl-2 { padding-left: .5rem; } -.pl-3 { padding-left: .75rem; } -.pl-4 { padding-left: 1rem; } -.pl-5-5 { padding-left: 1.375rem; } -.pl-6 { padding-left: 1.5rem; } -.pl-7 { padding-left: 1.75rem; } -.pl-8 { padding-left: 2rem; } -.pl-9 { padding-left: 2.25rem; } -.pl-10 { padding-left: 2.5rem; } -.pl-12 { padding-left: 3rem; } -.pr-1 { padding-right: .25rem; } -.pr-2 { padding-right: .5rem; } -.pr-3 { padding-right: .75rem; } -.pr-4 { padding-right: 1rem; } -.pr-6 { padding-right: 1.5rem; } -.pr-8 { padding-right: 2rem; } -.pr-24 { padding-right: 6rem; } +.pl-0-5 { padding-inline-start: .125rem; } +.pl-1 { padding-inline-start: .25rem; } +.pl-2 { padding-inline-start: .5rem; } +.pl-3 { padding-inline-start: .75rem; } +.pl-4 { padding-inline-start: 1rem; } +.pl-5-5 { padding-inline-start: 1.375rem; } +.pl-6 { padding-inline-start: 1.5rem; } +.pl-7 { padding-inline-start: 1.75rem; } +.pl-8 { padding-inline-start: 2rem; } +.pl-9 { padding-inline-start: 2.25rem; } +.pl-10 { padding-inline-start: 2.5rem; } +.pl-12 { padding-inline-start: 3rem; } +.pr-1 { padding-inline-end: .25rem; } +.pr-2 { padding-inline-end: .5rem; } +.pr-3 { padding-inline-end: .75rem; } +.pr-4 { padding-inline-end: 1rem; } +.pr-6 { padding-inline-end: 1.5rem; } +.pr-8 { padding-inline-end: 2rem; } +.pr-24 { padding-inline-end: 6rem; } .pt-1 { padding-top: .25rem; } .pt-2 { padding-top: .5rem; } .pt-3 { padding-top: .75rem; } @@ -633,8 +633,8 @@ input.search { .p-text { padding: .125rem .25rem; } .p-text-2 { padding: .25rem .5rem; } -.step-lr25 + .step-lr25 { margin-left: .25rem; } -.step-lr75 + .step-lr75 { margin-left: .75rem; } +.step-lr25 + .step-lr25 { margin-inline-start: .25rem; } +.step-lr75 + .step-lr75 { margin-inline-start: .75rem; } .step-tb125 + .step-tb125 { margin-top: .125rem; } .step-tb25 + .step-tb25 { margin-top: .25rem; } .step-tb375 + .step-tb375 { margin-top: .375rem; } @@ -650,7 +650,7 @@ input.search { content: ''; position: absolute; top: -.25rem; - left: 0; + inset-inline-start: 0; width: 100%; height: 1px; background-color: var(--popup-bg-hover); @@ -664,29 +664,29 @@ input.search { .abs-lt-content { position: absolute; top: var(--modal-padding); - left: var(--modal-padding); + inset-inline-start: var(--modal-padding); } .abs-rt-content { position: absolute; top: var(--modal-padding); - right: var(--modal-padding); + inset-inline-end: var(--modal-padding); } .abs-lb-content { position: absolute; bottom: var(--modal-padding); - left: var(--modal-padding); + inset-inline-start: var(--modal-padding); } .abs-rb-content { position: absolute; bottom: var(--modal-padding); - right: var(--modal-padding); + inset-inline-end: var(--modal-padding); } .abs-full-content { position: absolute; top: 0; bottom: 0; - left: 0; - right: 0; + inset-inline-start: 0; + inset-inline-end: 0; } .vScroll { @@ -914,8 +914,8 @@ a.no-line { .fs-bold { font-weight: 500; } .uppercase { text-transform: uppercase; } .lower { text-transform: lowercase; } -.text-left { text-align: left; } -.text-right { text-align: right !important; } +.text-left { text-align: start; } +.text-right { text-align: end !important; } .text-center { text-align: center; } .leading-16px { line-height: 16px; } .leading-3 { line-height: .75rem; } @@ -1067,9 +1067,9 @@ a.no-line { .border-radius-3 { border-radius: 0.75rem; } .border-radius-2 { border-radius: 0.5rem; } .border-radius-1 { border-radius: 0.25rem; } -.border-radius-left-1 { border-top-left-radius: 0.25rem; border-bottom-left-radius: 0.25rem; } -.border-radius-right-1 { border-top-right-radius: 0.25rem; border-bottom-right-radius: 0.25rem; } -.border-radius-top-1 { border-top-right-radius: 0.25rem; border-top-left-radius: 0.25rem; } +.border-radius-left-1 { border-start-start-radius: 0.25rem; border-end-start-radius: 0.25rem; } +.border-radius-right-1 { border-start-end-radius: 0.25rem; border-end-end-radius: 0.25rem; } +.border-radius-top-1 { border-start-end-radius: 0.25rem; border-start-start-radius: 0.25rem; } .border-divider-color {border: 1px solid var(--theme-divider-color);} .border-primary-button { border-color: var(--primary-button-border); } @@ -1078,9 +1078,9 @@ a.no-line { .top-divider { border-top: 1px solid var(--theme-divider-color); } .bottom-divider { border-bottom: 1px solid var(--theme-divider-color); } -.left-divider { border-left: 1px solid var(--theme-divider-color); } -.right-divider { border-right: 1px solid var(--theme-divider-color); } -.right-navpanel-border { border-right: 1px solid var(--theme-navpanel-border); } +.left-divider { border-inline-start: 1px solid var(--theme-divider-color); } +.right-divider { border-inline-end: 1px solid var(--theme-divider-color); } +.right-navpanel-border { border-inline-end: 1px solid var(--theme-navpanel-border); } .bottom-highlight-select { border-bottom: 1px solid var(--highlight-select); } diff --git a/packages/theme/styles/_rtl.scss b/packages/theme/styles/_rtl.scss new file mode 100644 index 00000000000..b90c32945dc --- /dev/null +++ b/packages/theme/styles/_rtl.scss @@ -0,0 +1,33 @@ +// +// Right-to-left (RTL) adjustments. +// +// The bulk of mirroring is achieved by (a) `document.documentElement.dir = 'rtl'` +// (set in Theme.svelte for RTL languages) which flips all flex/grid/inline flow, +// and (b) the logical-property codemod (scripts/rtl-codemod.mjs) which rewrites +// margins, paddings, borders, offsets, text-align and float to inline-logical +// equivalents. This file covers only the things those two cannot express: +// directional glyphs and a few hard physical cases. +// + +// Generic helper — add `class="flip-rtl"` to any horizontally-directional glyph +// (custom arrows, carets) that must point the other way under RTL. +[dir='rtl'] { + .flip-rtl { + transform: scaleX(-1); + } + + // Box shadows that intentionally fall to one side don't auto-mirror; most of + // Huly's shadows are symmetric, so nothing to do here by default. Add specific + // overrides if a one-sided shadow looks wrong under RTL. + + // Keep code / pre / mono content left-to-right even inside an RTL document + // (source code and identifiers read LTR regardless of UI direction). + pre, + code, + .mono-font, + .embedded-monospace { + direction: ltr; + text-align: start; + unicode-bidi: embed; + } +} diff --git a/packages/theme/styles/_text-editor.scss b/packages/theme/styles/_text-editor.scss index b88609646a7..92c7f8bcf05 100644 --- a/packages/theme/styles/_text-editor.scss +++ b/packages/theme/styles/_text-editor.scss @@ -20,7 +20,7 @@ } .suggestion { - padding-left: 0.25rem; + padding-inline-start: 0.25rem; color: var(--theme-link-color); background-color: var(--theme-mention-bg-color); border-radius: .25rem; @@ -100,14 +100,14 @@ ol { margin-top: 0.5rem; margin-bottom: 0.5rem; - margin-right: .25rem; - margin-left: .75rem; + margin-inline-end: .25rem; + margin-inline-start: .75rem; padding: 0; } li { - margin-left: 0.75rem; - padding-left: 0.375rem; + margin-inline-start: 0.75rem; + padding-inline-start: 0.375rem; } ul>li:not(.todo-item)::before { @@ -115,7 +115,7 @@ font-size: 1.5rem; display: inline-block; position: absolute; - left: -1rem; + inset-inline-start: -1rem; font-family: Arial, Helvetica, sans-serif; } @@ -136,19 +136,19 @@ ul>li.todo-item, ol>li.todo-item { list-style: none; - margin-left: -2.25rem; - padding-left: 0; + margin-inline-start: -2.25rem; + padding-inline-start: 0; } ul.todo-list { list-style: none; - margin-left: 0; + margin-inline-start: 0; } ul.todo-list>li.todo-item { margin: 0; padding: 0; - margin-left: -1.5rem; + margin-inline-start: -1.5rem; } ol ol { @@ -178,7 +178,7 @@ /* Placeholder (at the top) */ p.is-editor-empty:first-child::before { content: attr(data-placeholder); - float: left; + float: inline-start; color: var(--theme-text-placeholder-color); pointer-events: none; height: 0; @@ -217,10 +217,10 @@ /* Give a remote user a caret */ .collaboration-cursor { - border-left: 1px solid transparent; - border-right: 1px solid transparent; - margin-left: -1px; - margin-right: -1px; + border-inline-start: 1px solid transparent; + border-inline-end: 1px solid transparent; + margin-inline-start: -1px; + margin-inline-end: -1px; position: relative; word-break: normal; cursor: text; @@ -233,7 +233,7 @@ height: 110%; width: 8px; top: -2px; - left: -4px; + inset-inline-start: -4px; position: absolute; &::after { @@ -243,8 +243,8 @@ border-style: solid; width: 0; height: 0; - border-left: 4px solid transparent; - border-right: 4px solid transparent; + border-inline-start: 4px solid transparent; + border-inline-end: 4px solid transparent; border-top-width: 4px; border-bottom: 0; } @@ -425,7 +425,7 @@ } .text-editor-note-marker { - padding-left: 0.25rem; + padding-inline-start: 0.25rem; color: transparent; background-image: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20256%20256%22%20id%3D%22note%22%3E%3Crect%20width%3D%22256%22%20height%3D%22256%22%20fill%3D%22none%22%3E%3C%2Frect%3E%3Cline%20x1%3D%2296%22%20x2%3D%22160%22%20y1%3D%2296%22%20y2%3D%2296%22%20fill%3D%22none%22%20stroke%3D%22%23313131%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20stroke-width%3D%228%22%3E%3C%2Fline%3E%3Cline%20x1%3D%2296%22%20x2%3D%22160%22%20y1%3D%22128%22%20y2%3D%22128%22%20fill%3D%22none%22%20stroke%3D%22%23313131%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20stroke-width%3D%228%22%3E%3C%2Fline%3E%3Cline%20x1%3D%2296%22%20x2%3D%22128%22%20y1%3D%22160%22%20y2%3D%22160%22%20fill%3D%22none%22%20stroke%3D%22%23313131%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20stroke-width%3D%228%22%3E%3C%2Fline%3E%3Cpath%20fill%3D%22none%22%20stroke%3D%22%23313131%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20stroke-width%3D%228%22%20d%3D%22M156.68629%2C216H48a8%2C8%2C0%2C0%2C1-8-8V48a8%2C8%2C0%2C0%2C1%2C8-8H208a8%2C8%2C0%2C0%2C1%2C8%2C8V156.68629a8%2C8%2C0%2C0%2C1-2.34315%2C5.65686l-51.3137%2C51.3137A8%2C8%2C0%2C0%2C1%2C156.68629%2C216Z%22%3E%3C%2Fpath%3E%3Cpolyline%20fill%3D%22none%22%20stroke%3D%22%23313131%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20stroke-width%3D%228%22%20points%3D%22215.277%20159.992%20160%20159.992%20160%20215.272%22%3E%3C%2Fpolyline%3E%3C%2Fsvg%3E'); background-repeat: no-repeat; @@ -501,7 +501,7 @@ .text-editor-lint-icon { display: inline-block; position: absolute; - right: 2px; + inset-inline-end: 2px; cursor: pointer; border-radius: 100px; // background: #f22; @@ -512,7 +512,7 @@ width: 0.7em; height: 0.7em; text-align: center; - padding-left: 0.5px; + padding-inline-start: 0.5px; line-height: 1.1em; &.add { @@ -534,7 +534,7 @@ display: block; position: absolute; top: 0; - left: 0; + inset-inline-start: 0; width: 100%; height: 100%; cursor: pointer; @@ -579,7 +579,7 @@ vertical-align: sub; margin-bottom: 1px; width: .875rem; - margin-right: 0.25rem; + margin-inline-end: 0.25rem; } } } diff --git a/packages/theme/styles/button.scss b/packages/theme/styles/button.scss index 1a39f047cc3..53e13d3fc27 100644 --- a/packages/theme/styles/button.scss +++ b/packages/theme/styles/button.scss @@ -184,7 +184,7 @@ content: ''; position: absolute; top: 0; - left: -100%; + inset-inline-start: -100%; width: 100%; height: 100%; background: var(--theme-button-attention-shine); @@ -197,7 +197,7 @@ transform: translateY(-2px); box-shadow: var(--theme-button-attention-hover-shadow); - &::before { left: 100%; } + &::before { inset-inline-start: 100%; } } &:not(.disabled, :disabled):active, @@ -364,15 +364,15 @@ pointer-events: none; } .btn-right-icon { - margin-left: .5rem; + margin-inline-start: .5rem; color: var(--theme-halfcontent-color); transition: color .15s; pointer-events: none; } - &.gap-large:not(.only-icon, .gap-medium) .btn-icon:not(.spinner) { margin-right: .5rem; } - &.gap-large:not(.only-icon, .gap-medium) .btn-right-icon { margin-left: .5rem; } - &.gap-medium:not(.only-icon, .gap-large) .btn-icon:not(.spinner) { margin-right: .375rem; } - &.gap-medium:not(.only-icon, .gap-large) .btn-right-icon { margin-left: .375rem; } + &.gap-large:not(.only-icon, .gap-medium) .btn-icon:not(.spinner) { margin-inline-end: .5rem; } + &.gap-large:not(.only-icon, .gap-medium) .btn-right-icon { margin-inline-start: .5rem; } + &.gap-medium:not(.only-icon, .gap-large) .btn-icon:not(.spinner) { margin-inline-end: .375rem; } + &.gap-medium:not(.only-icon, .gap-large) .btn-right-icon { margin-inline-start: .375rem; } &.short { max-width: 8.5rem; } &.accent { font-weight: 500; } @@ -382,12 +382,12 @@ &.sh-round2 { border-radius: .75rem; } &.sh-circle { border-radius: 1rem; } &.sh-rectangle-right { - border-top-left-radius: .25rem; - border-bottom-left-radius: .25rem; + border-start-start-radius: .25rem; + border-end-start-radius: .25rem; } &.sh-rectangle-left { - border-top-right-radius: .25rem; - border-bottom-right-radius: .25rem; + border-start-end-radius: .25rem; + border-end-end-radius: .25rem; } &.sh-filter { border-radius: 0 0 .5rem .5rem; } @@ -607,7 +607,7 @@ content: ''; position: absolute; top: 0; - left: -100%; + inset-inline-start: -100%; width: 100%; height: 100%; background: var(--theme-button-attention-shine); @@ -620,7 +620,7 @@ transform: translateY(-2px); box-shadow: var(--theme-button-attention-hover-shadow); - &::before { left: 100%; } + &::before { inset-inline-start: 100%; } } &:active, @@ -814,12 +814,12 @@ border-radius: var(--medium-BorderRadius); button:first-child { - border-top-left-radius: var(--medium-BorderRadius); - border-bottom-left-radius: var(--medium-BorderRadius); + border-start-start-radius: var(--medium-BorderRadius); + border-end-start-radius: var(--medium-BorderRadius); } button:last-child { - border-top-right-radius: var(--medium-BorderRadius); - border-bottom-right-radius: var(--medium-BorderRadius); + border-start-end-radius: var(--medium-BorderRadius); + border-end-end-radius: var(--medium-BorderRadius); } } &.small { @@ -830,12 +830,12 @@ font-size: .8125rem; } button:first-child { - border-top-left-radius: var(--small-BorderRadius); - border-bottom-left-radius: var(--small-BorderRadius); + border-start-start-radius: var(--small-BorderRadius); + border-end-start-radius: var(--small-BorderRadius); } button:last-child { - border-top-right-radius: var(--small-BorderRadius); - border-bottom-right-radius: var(--small-BorderRadius); + border-start-end-radius: var(--small-BorderRadius); + border-end-end-radius: var(--small-BorderRadius); } button .btn-icon { width: var(--spacing-2); @@ -856,12 +856,12 @@ border-radius: var(--extra-small-BorderRadius); button:first-child { - border-top-left-radius: var(--extra-small-BorderRadius); - border-bottom-left-radius: var(--extra-small-BorderRadius); + border-start-start-radius: var(--extra-small-BorderRadius); + border-end-start-radius: var(--extra-small-BorderRadius); } button:last-child { - border-top-right-radius: var(--extra-small-BorderRadius); - border-bottom-right-radius: var(--extra-small-BorderRadius); + border-start-end-radius: var(--extra-small-BorderRadius); + border-end-end-radius: var(--extra-small-BorderRadius); } button .btn-icon { width: var(--spacing-1_5); @@ -879,12 +879,12 @@ border-radius: var(--min-BorderRadius); button:first-child { - border-top-left-radius: var(--min-BorderRadius); - border-bottom-left-radius: var(--min-BorderRadius); + border-start-start-radius: var(--min-BorderRadius); + border-end-start-radius: var(--min-BorderRadius); } button:last-child { - border-top-right-radius: var(--min-BorderRadius); - border-bottom-right-radius: var(--min-BorderRadius); + border-start-end-radius: var(--min-BorderRadius); + border-end-end-radius: var(--min-BorderRadius); } button { font-size: .75rem; @@ -1002,7 +1002,7 @@ position: absolute; content: ''; top: 20%; - left: -0.5px; + inset-inline-start: -0.5px; width: 1px; height: 60%; opacity: 0.2; diff --git a/packages/theme/styles/common.scss b/packages/theme/styles/common.scss index b74aacad056..5aae8229a46 100644 --- a/packages/theme/styles/common.scss +++ b/packages/theme/styles/common.scss @@ -114,7 +114,7 @@ min-width: var(--app-panel-width); width: var(--app-panel-width); height: 100%; - border-right: 1px solid var(--theme-navpanel-divider); + border-inline-end: 1px solid var(--theme-navpanel-divider); } &.horizonatl { min-height: var(--app-panel-width); @@ -136,8 +136,8 @@ &.header { background-color: var(--theme-comp-header-color); } &.filled { background-color: var(--theme-bg-color); } &.filledNav { background-color: var(--theme-navpanel-color) !important; } - &.border-left { border-left: 1px solid var(--theme-divider-color); } - &.border-right { border-right: 1px solid var(--theme-divider-color); } + &.border-left { border-inline-start: 1px solid var(--theme-divider-color); } + &.border-right { border-inline-end: 1px solid var(--theme-divider-color); } } .antiPanel-navigator { position: relative; @@ -155,16 +155,16 @@ position: fixed; top: calc(var(--status-bar-height) + 3.5rem + 1px); height: calc(100% - var(--status-bar-height) - 3.5rem - 2px); - border-left: 1px solid var(--theme-divider-color); + border-inline-start: 1px solid var(--theme-divider-color); - &.portrait { left: 0; } - &.landscape { left: var(--app-panel-width); } + &.portrait { inset-inline-start: 0; } + &.landscape { inset-inline-start: var(--app-panel-width); } } &.inner { position: absolute; top: 3.5rem; - left: 0; + inset-inline-start: 0; height: calc(100% - 3.5rem); } } @@ -177,8 +177,8 @@ z-index: 450; filter: drop-shadow(2px 0 5px rgba(0, 0, 0, .2)); - &.portrait { left: 0; } - &.landscape { left: var(--app-panel-width); } + &.portrait { inset-inline-start: 0; } + &.landscape { inset-inline-start: var(--app-panel-width); } } } @@ -264,7 +264,7 @@ .an-element__icon { flex-shrink: 0; - margin-right: .5rem; + margin-inline-end: .5rem; color: var(--theme-dark-color); &.folder { @@ -314,10 +314,10 @@ } &:not(.arrow) { display: none; - margin-left: .5rem; + margin-inline-start: .5rem; color: var(--theme-dark-color); - & + & { margin-left: .125rem; } + & + & { margin-inline-start: .125rem; } } &:hover, &.pressed { color: var(--theme-caption-color); } @@ -329,16 +329,16 @@ min-width: 0; } - &.indent:not(.tree, .parent) { padding-left: 2.5rem; } + &.indent:not(.tree, .parent) { padding-inline-start: 2.5rem; } &:not(.tree) { .an-element__tool.arrow { - margin-left: .25rem; + margin-inline-start: .25rem; // background-color: transparent !important; } } &.tree { - .an-element__icon { margin-right: .375rem; } - .an-element__tool.arrow { margin-right: .125rem; } + .an-element__icon { margin-inline-end: .375rem; } + .an-element__tool.arrow { margin-inline-end: .125rem; } .an-element__tool.arrow.empty { background-color: transparent !important; } } @@ -356,7 +356,7 @@ &.collapsed .an-element__tool.arrow > * { transform: rotate(-90deg); } .an-element__counter { - margin-left: .75rem; + margin-inline-start: .75rem; font-weight: 600; font-size: .75rem; color: var(--theme-content-color); @@ -412,7 +412,7 @@ min-width: 0; min-height: 0; - &:not(:last-child) { margin-right: 12px; } + &:not(:last-child) { margin-inline-end: 12px; } .label { margin-top: .5rem; @@ -444,7 +444,7 @@ &__header { width: 15rem; - padding-right: 1rem; + padding-inline-end: 1rem; color: var(--theme-caption-color); &.withDesciption { @@ -487,7 +487,7 @@ .icon-wrapper, &.icon-wrapper { align-items: center; } .wrapped-icon, &.wrapped-icon { - margin-right: .75rem; + margin-inline-end: .75rem; color: var(--theme-content-color); } .wrapped-title, &.wrapped-title { @@ -612,7 +612,7 @@ border-bottom: 1px solid var(--theme-divider-color); &.high { - padding-right: 1rem; + padding-inline-end: 1rem; height: 3.5rem; min-height: 3.5rem; } @@ -623,7 +623,7 @@ display: flex; justify-content: center; align-items: center; - margin-right: .5rem; + margin-inline-end: .5rem; height: 2rem; color: var(--theme-caption-color); } @@ -663,7 +663,7 @@ border-radius: .25rem; .tag-icon { - margin-left: .5rem; + margin-inline-start: .5rem; width: 1rem; height: 1rem; color: var(--theme-content-color); @@ -673,7 +673,7 @@ &.highlight { color: var(--theme-content-color); } } - &__tag + &__tag { margin-left: .375rem; } + &__tag + &__tag { margin-inline-start: .375rem; } } .invisible { display: none; } &-empty { @@ -839,20 +839,20 @@ } &:first-child { - border-top-left-radius: .75rem; - border-top-right-radius: .75rem; + border-start-start-radius: .75rem; + border-start-end-radius: .75rem; } &:first-child .caption { - border-top-left-radius: .65rem; - border-top-right-radius: .65rem; + border-start-start-radius: .65rem; + border-start-end-radius: .65rem; } &:last-child { - border-bottom-left-radius: .75rem; - border-bottom-right-radius: .75rem; + border-end-start-radius: .75rem; + border-end-end-radius: .75rem; } &:last-child.closed .caption { - border-bottom-left-radius: .65rem; - border-bottom-right-radius: .65rem; + border-end-start-radius: .65rem; + border-end-end-radius: .65rem; } &:last-child:not(:first-child), &:not(:first-child):not(:last-child) { border-top: none; } diff --git a/packages/theme/styles/components.scss b/packages/theme/styles/components.scss index 31f2e487b38..f013c719788 100644 --- a/packages/theme/styles/components.scss +++ b/packages/theme/styles/components.scss @@ -33,11 +33,11 @@ background-color: var(--theme-comp-header-color); // var(--global-surface-02-BackgroundColor); } &.beforeAside { - border-right: none; + border-inline-end: none; border-radius: var(--small-focus-BorderRadius) 0 0 var(--small-focus-BorderRadius); } &.aside { - border-left: none; + border-inline-start: none; border-radius: 0 var(--small-focus-BorderRadius) var(--small-focus-BorderRadius) 0; } } @@ -183,7 +183,7 @@ .ava-text::after { position: absolute; top: 50%; - left: 50%; + inset-inline-start: 50%; } .icon { width: 100%; @@ -285,7 +285,7 @@ /* Avatar status marker */ .hulyAvatar-statusMarker { position: absolute; - right: -4%; + inset-inline-end: -4%; bottom: -4%; width: 39%; aspect-ratio: 1; @@ -302,7 +302,7 @@ &.smaller, &.small, &.medium { - right: 0; + inset-inline-end: 0; bottom: 0; } .small-font &.xx-small { width: 3px; } @@ -328,17 +328,17 @@ width: 11px; &.modern { width: 12px; - right: 0px; + inset-inline-end: 0px; bottom: 0px; } } &.large { - right: -.125rem; + inset-inline-end: -.125rem; bottom: -.125rem; width: 36.5%; .small-font & { - right: -2px; + inset-inline-end: -2px; bottom: -2px; width: 37%; } @@ -359,15 +359,15 @@ align-items: center; .hulyCombineAvatar { - &.inline:not(:first-child) { margin-left: calc(1px - (0.875rem / 2)); } - &.tiny:not(:first-child) { margin-left: calc(1px - (1.13rem / 2)); } - &.card:not(:first-child) { margin-left: calc(1px - (1.25rem / 2)); } - &.x-small:not(:first-child) { margin-left: calc(1px - (1.5rem / 2)); } - &.smaller:not(:first-child) { margin-left: calc(1px - (1.75rem / 2)); } - &.small:not(:first-child) { margin-left: calc(1px - 1rem); } - &.medium:not(:first-child) { margin-left: calc(1px - (2.25rem / 2)); } - &.large:not(:first-child) { margin-left: calc(1px - (4.5rem / 2)); } - &.x-large:not(:first-child) { margin-left: calc(1px - (7.5rem / 2)); } + &.inline:not(:first-child) { margin-inline-start: calc(1px - (0.875rem / 2)); } + &.tiny:not(:first-child) { margin-inline-start: calc(1px - (1.13rem / 2)); } + &.card:not(:first-child) { margin-inline-start: calc(1px - (1.25rem / 2)); } + &.x-small:not(:first-child) { margin-inline-start: calc(1px - (1.5rem / 2)); } + &.smaller:not(:first-child) { margin-inline-start: calc(1px - (1.75rem / 2)); } + &.small:not(:first-child) { margin-inline-start: calc(1px - 1rem); } + &.medium:not(:first-child) { margin-inline-start: calc(1px - (2.25rem / 2)); } + &.large:not(:first-child) { margin-inline-start: calc(1px - (4.5rem / 2)); } + &.x-large:not(:first-child) { margin-inline-start: calc(1px - (7.5rem / 2)); } &.inline, &.tiny, @@ -392,7 +392,7 @@ content: attr(data-over); position: absolute; top: 50%; - left: 50%; + inset-inline-start: 50%; color: var(--theme-caption-color); transform: translate(-53%, -52%); z-index: 2; @@ -401,7 +401,7 @@ content: ''; position: absolute; top: 0; - left: 0; + inset-inline-start: 0; width: 100%; height: 100%; background-color: var(--theme-bg-color); @@ -510,7 +510,7 @@ &.extra { flex-shrink: 1; - margin-left: var(--spacing-2); + margin-inline-start: var(--spacing-2); &.overflow { overflow-x: auto; @@ -533,7 +533,7 @@ } } .hulyHeader-spaceFiller { flex: 1 1; } - .hulyHotKey-item { margin-right: .625rem; } + .hulyHotKey-item { margin-inline-end: .625rem; } &.doubleRow { flex-direction: column; @@ -543,11 +543,11 @@ .hulyHeader-row { min-height: var(--spacing-6_5); } .hulyHeader-buttonsGroup.search { flex-direction: row-reverse; } - .hulyHeader-buttonsGroup.actions { margin-left: 1rem; } + .hulyHeader-buttonsGroup.actions { margin-inline-start: 1rem; } } &:not(.doubleRow) { - .hulyHeader-buttonsGroup:not(.before) { margin-left: 1rem; } - .hulyHeader-buttonsGroup.search + .hulyHeader-divider + .hulyHeader-buttonsGroup.actions { margin-left: 0; } + .hulyHeader-buttonsGroup:not(.before) { margin-inline-start: 1rem; } + .hulyHeader-buttonsGroup.search + .hulyHeader-divider + .hulyHeader-buttonsGroup.actions { margin-inline-start: 0; } } } @@ -815,7 +815,7 @@ border: 1px solid transparent; } &.medium .hulyAccordionItem-header__chevron { - margin-right: var(--spacing-0_75); + margin-inline-end: var(--spacing-0_75); background-color: var(--global-ui-BackgroundColor); border: 1px solid var(--global-subtle-ui-BorderColor); } @@ -884,15 +884,15 @@ } } &.nested { - padding-left: var(--spacing-2); + padding-inline-start: var(--spacing-2); & + .hulyAccordionItem-content { - margin-left: var(--spacing-2); - margin-right: var(--spacing-2); + margin-inline-start: var(--spacing-2); + margin-inline-end: var(--spacing-2); } } .hulyAccordionItem-header__icon { - margin-right: var(--spacing-0_5); + margin-inline-end: var(--spacing-0_5); width: var(--global-extra-small-Size); height: var(--global-extra-small-Size); border-radius: var(--extra-small-BorderRadius); @@ -912,7 +912,7 @@ border-radius: var(--small-BorderRadius); } .hulyAccordionItem-header__label { - margin-left: var(--spacing-0_5); + margin-inline-start: var(--spacing-0_5); color: var(--global-secondary-TextColor); } .hulyAccordionItem-header__counter { @@ -1038,14 +1038,14 @@ } .hulyToDoLine-statusPriority { position: relative; - margin-right: var(--spacing-0_25); + margin-inline-end: var(--spacing-0_25); min-width: var(--global-min-Size); &.isNew::after { position: absolute; content: ''; top: var(--spacing-1_25); - right: calc(-1 * var(--spacing-0_75)); + inset-inline-end: calc(-1 * var(--spacing-0_75)); width: var(--spacing-0_5); height: var(--spacing-0_5); background-color: var(--global-primary-LinkColor); @@ -1144,7 +1144,7 @@ &:not(.withoutBackground) { background-color: var(--theme-comp-header-color); } &.caption-height { min-height: 3.5rem; } - &.search-start { padding-left: var(--spacing-3); } + &.search-start { padding-inline-start: var(--spacing-3); } &.tabs-start { padding: 0 2.25rem; } &.short { display: flex; @@ -1158,11 +1158,11 @@ align-items: center; min-width: 0; - &:not(.small-gap, .medium-gap) > *:not(:last-child) { margin-right: 1.25rem; } - &.small-gap > *:not(:last-child) { margin-right: .75rem; } - &.medium-gap > *:not(:last-child) { margin-right: 1rem; } + &:not(.small-gap, .medium-gap) > *:not(:last-child) { margin-inline-end: 1.25rem; } + &.small-gap > *:not(:last-child) { margin-inline-end: .75rem; } + &.medium-gap > *:not(:last-child) { margin-inline-end: 1rem; } } - // &.withSettings { padding-right: .75rem; } + // &.withSettings { padding-inline-end: .75rem; } &.mini { display: flex; flex-direction: column; @@ -1188,7 +1188,7 @@ padding-bottom: 0; } &.header-without-label { - padding-left: 0; + padding-inline-start: 0; } } @@ -1207,7 +1207,7 @@ } .ac-header__icon { - margin-right: 0.5rem; + margin-inline-end: 0.5rem; color: var(--theme-content-color); } .ac-header__title { @@ -1223,7 +1223,7 @@ } .ac-header__counter { flex-shrink: 0; - margin-left: .25rem; + margin-inline-start: .25rem; min-width: 0; font-size: 1rem; color: var(--theme-darker-color); @@ -1327,7 +1327,7 @@ cursor: default; } } - .ac-tabs__tab + .ac-tabs__tab { margin-left: 2.5rem; } + .ac-tabs__tab + .ac-tabs__tab { margin-inline-start: 2.5rem; } &__empty { min-width: 2.5rem; @@ -1366,13 +1366,13 @@ min-width: 17rem; max-width: 30rem; height: 100%; - border-right: 1px solid var(--theme-divider-color); + border-inline-end: 1px solid var(--theme-divider-color); &.max { flex-grow: 1; min-width: 25rem; max-width: 100%; - border-right: none; + border-inline-end: none; } &__list-item { @@ -1453,11 +1453,11 @@ } &.gap-medium { - padding-left: 0.375rem; + padding-inline-start: 0.375rem; } &.gap-large { - padding-left: 0.5rem; + padding-inline-start: 0.5rem; } } @@ -1474,7 +1474,7 @@ position: absolute; border-radius: 50%; top: calc(-0.1875rem - 1px); - left: calc(-0.1875rem - 1px); + inset-inline-start: calc(-0.1875rem - 1px); width: 1.375rem; height: 1.375rem; border: 1px solid var(--primary-button-default); @@ -1483,7 +1483,7 @@ &::after { position: absolute; top: calc(0.25rem - 1px); - left: calc(0.25rem - 1px); + inset-inline-start: calc(0.25rem - 1px); width: 0.5rem; height: 0.5rem; background-color: var(--primary-button-color); @@ -1649,8 +1649,8 @@ justify-content: center; align-items: center; top: 0; - left: .5rem; - right: .5rem; + inset-inline-start: .5rem; + inset-inline-end: .5rem; min-width: 0; width: calc(100% - 1rem); height: 100%; @@ -1747,12 +1747,12 @@ th, td { padding: .5rem 1.5rem; - text-align: left; + text-align: start; &:first-child { .metaColumn { - padding-left: 0; } + padding-inline-start: 0; } } &:last-child { .metaColumn { - padding-right: 0; } + padding-inline-end: 0; } } } th { @@ -1771,7 +1771,7 @@ color: var(--theme-caption-color); .icon { - margin-left: .25rem; + margin-inline-start: .25rem; opacity: .6; } } @@ -1784,9 +1784,9 @@ } td { - &.align-left { text-align: left; } + &.align-left { text-align: start; } &.align-center { text-align: center; } - &.align-right { text-align: right; } + &.align-right { text-align: end; } &:has(.cropped-text-presenters, .cropped-text-presenter) { max-width: 50cqw; } } &:has(td:nth-child(4)) td:has(.cropped-text-presenters, .cropped-text-presenter) { max-width: 40cqw; } @@ -1807,8 +1807,8 @@ width: 2.5rem; z-index: 1; } - &:nth-child(2) { padding-left: 0; } - &:last-child { padding-right: 1.5rem; } + &:nth-child(2) { padding-inline-start: 0; } + &:last-child { padding-inline-end: 1.5rem; } } } @@ -1829,7 +1829,7 @@ &-menuRow { visibility: hidden; - margin-left: .5rem; + margin-inline-start: .5rem; opacity: .6; cursor: pointer; @@ -1904,9 +1904,9 @@ &:first-child { position: sticky; padding: 0; - left: 0; + inset-inline-start: 0; background-color: var(--theme-bg-color); - border-right: 1px solid transparent !important; + border-inline-end: 1px solid transparent !important; z-index: 1; } .fullfill { @@ -1916,7 +1916,7 @@ width: 100%; height: 100%; background-color: var(--theme-bg-color); - border-right: 1px solid var(--theme-divider-color); + border-inline-end: 1px solid var(--theme-divider-color); &.center { justify-content: center; } } @@ -2026,7 +2026,7 @@ display: flex; flex-direction: column; flex-wrap: nowrap; - margin-left: .75rem; + margin-inline-start: .75rem; min-height: 0; } } @@ -2047,13 +2047,13 @@ .tools { opacity: 0; } - &.leftPadding { padding-left: 0.625rem; } + &.leftPadding { padding-inline-start: 0.625rem; } &::before { position: absolute; top: 0; bottom: 0; - left: 0; - right: 0; + inset-inline-start: 0; + inset-inline-end: 0; border: 1px solid var(--primary-button-default); border-radius: .5rem; z-index: -1; @@ -2083,12 +2083,12 @@ } &::before { top: -2px; - left: -4px; + inset-inline-start: -4px; clip-path: path('M0,6v-6h6v1h-5v5z'); } &::after { bottom: -2px; - right: -4px; + inset-inline-end: -4px; clip-path: path('M0,6h6v-6h-1v5h-5z'); } } @@ -2165,7 +2165,7 @@ .notify { position: absolute; top: 1rem; - left: -1.125rem; + inset-inline-start: -1.125rem; height: 0.5rem; width: 0.5rem; background-color: var(--theme-inbox-notify); @@ -2189,7 +2189,7 @@ &.float { position: absolute; top: .5625rem; - right: 0; + inset-inline-end: 0; } &.people { color: var(--theme-inbox-people-notify); @@ -2199,7 +2199,7 @@ .arrow { position: absolute; top: 1.125rem; - right: 0; + inset-inline-end: 0; } &:last-child:not(.selected) { border-bottom: 1px solid var(--theme-inbox-activitymsg-divider); } @@ -2211,7 +2211,7 @@ border: 1px solid var(--theme-inbox-activitymsg-border); border-radius: 0.25rem; - .notify { left: .125rem; } + .notify { inset-inline-start: .125rem; } .inbox-activity__content { padding: 1rem 1.25rem; @@ -2220,9 +2220,9 @@ .counter { visibility: hidden; - &.float { right: 1.25rem; } + &.float { inset-inline-end: 1.25rem; } } - .arrow { right: 1.25rem; } + .arrow { inset-inline-end: 1.25rem; } } } } @@ -2243,7 +2243,7 @@ } .ap-label { min-width: 0; - text-align: left; + text-align: start; color: var(--theme-caption-color); &.colorInherit { color: inherit; } @@ -2267,10 +2267,10 @@ background-color: var(--theme-list-row-color); &.row { - border-left: 1px solid transparent; - border-right: 1px solid transparent; - // border-left: 1px solid var(--theme-list-border-color); - // border-right: 1px solid var(--theme-list-border-color); + border-inline-start: 1px solid transparent; + border-inline-end: 1px solid transparent; + // border-inline-start: 1px solid var(--theme-list-border-color); + // border-inline-end: 1px solid var(--theme-list-border-color); } &.row:not(.lastCat, .last) { border-bottom: 1px solid var(--theme-divider-color); @@ -2280,8 +2280,8 @@ // border-bottom: 1px solid var(--theme-list-subheader-divider); } &.row.lastCat { - border-bottom-left-radius: 0.25rem; - border-bottom-right-radius: 0.25rem; + border-end-start-radius: 0.25rem; + border-end-end-radius: 0.25rem; border-bottom: 1px solid transparent; // border-bottom: 1px solid var(--theme-list-border-color); } @@ -2311,7 +2311,7 @@ .draggable-container { position: absolute; - left: 0; + inset-inline-start: 0; display: flex; align-items: center; height: 100%; @@ -2323,7 +2323,7 @@ flex-direction: column; justify-content: center; align-items: center; - margin-left: 0.125rem; + margin-inline-start: 0.125rem; width: 0.375rem; height: 100%; opacity: 0; @@ -2346,7 +2346,7 @@ } .hidden-panel { overflow: hidden; - right: 0; + inset-inline-end: 0; width: 80%; background-color: var(--theme-comp-header-color); opacity: 0; @@ -2384,7 +2384,7 @@ flex-direction: column; justify-content: center; padding: 0 0.125rem; - right: 0.125rem; + inset-inline-end: 0.125rem; width: 0.75rem; border: 1px solid transparent; border-radius: 0.25rem; @@ -2452,8 +2452,8 @@ /* ListView - global style */ .category-container.disableHeader .listGrid.row:first-child { - border-top-left-radius: 0.25rem; - border-top-right-radius: 0.25rem; + border-start-start-radius: 0.25rem; + border-start-end-radius: 0.25rem; border-top: 1px solid var(--theme-list-border-color); } .list-container .category-container.collapsed:not(.category-last, .category-one) .categoryHeader.subLevel, @@ -2462,13 +2462,13 @@ border-radius: 0; } .list-container .category-container .categoryHeader.subLevel.closed { - border-bottom-left-radius: 0.25rem; - border-bottom-right-radius: 0.25rem; + border-end-start-radius: 0.25rem; + border-end-end-radius: 0.25rem; border-bottom: 1px solid var(--theme-list-border-color); } .list-container .category-container .categoryHeader.closed:not(.subLevel) { - border-bottom-left-radius: 0.25rem; - border-bottom-right-radius: 0.25rem; + border-end-start-radius: 0.25rem; + border-end-end-radius: 0.25rem; &::before, &::after { @@ -2479,8 +2479,8 @@ } } .list-container .category-container .listGrid { - .fix-margin { margin-left: .875rem; } - .name { margin-left: .375rem; } + .fix-margin { margin-inline-start: .875rem; } + .name { margin-inline-start: .375rem; } .compression-bar { overflow: hidden; @@ -2499,7 +2499,7 @@ flex-shrink: 0; width: max-content; } - & > *:not(:first-child) { margin-left: .25rem; } + & > *:not(:first-child) { margin-inline-start: .25rem; } & > * > *:not(.only-icon) { min-width: fit-content; } } .panel-trigger > * { pointer-events: none; } @@ -2513,13 +2513,13 @@ .list-container .antiButton.list:hover, .list-container .datetime-button, .list-container .datetime-button:hover { - padding-left: .5rem !important; - padding-right: .5rem !important; + padding-inline-start: .5rem !important; + padding-inline-end: .5rem !important; font-size: 0.8125rem !important; background-color: var(--theme-list-button-color) !important; &:not(.only-icon) .btn-icon, - &:not(.only-icon) .icon { margin-right: .375rem !important; } + &:not(.only-icon) .icon { margin-inline-end: .375rem !important; } .label { font-size: 0.8125rem !important; color: var(--theme-halfcontent-color) !important; @@ -2544,7 +2544,7 @@ &:last-child { flex-shrink: 0; - margin-right: 0; + margin-inline-end: 0; } } .kanban-container .card-container .card-labels .datetime-button { diff --git a/packages/theme/styles/dialogs.scss b/packages/theme/styles/dialogs.scss index 44fdd235425..59db4c7dfc4 100644 --- a/packages/theme/styles/dialogs.scss +++ b/packages/theme/styles/dialogs.scss @@ -17,7 +17,7 @@ .antiOverlay { position: fixed; top: 0; - left: 0; + inset-inline-start: 0; width: 100%; height: 100vh; background-color: var(--theme-overlay-color); @@ -55,7 +55,7 @@ align-items: center; min-width: 0; - & > *:not(:last-child) { margin-right: .5rem; } + & > *:not(:last-child) { margin-inline-end: .5rem; } } &__title { overflow: hidden; @@ -76,8 +76,8 @@ position: absolute; display: flex; top: 2.5rem; - left: 1rem; - right: 1rem; + inset-inline-start: 1rem; + inset-inline-end: 1rem; font-weight: 500; font-size: .75rem; color: var(--system-error-color); @@ -155,8 +155,8 @@ align-items: center; margin: 1rem 1.5rem; - & > * { margin-right: 1rem; } - & > *:last-child { margin-right: 1.5rem; } + & > * { margin-inline-end: 1rem; } + & > *:last-child { margin-inline-end: 1.5rem; } } } .antiCard-block { padding: 1.5rem; } @@ -178,7 +178,7 @@ &__error { flex-grow: 1; display: flex; - margin-left: .375rem; + margin-inline-start: .375rem; min-width: 0; font-weight: 500; font-size: .75rem; @@ -204,7 +204,7 @@ &:hover { background-color: var(--theme-popup-hover); } } span { - margin-right: .5rem; + margin-inline-end: .5rem; color: var(--theme-caption-color); } } @@ -231,7 +231,7 @@ .label { display: flex; align-items: center; - text-align: left; + text-align: start; font-weight: 500; font-size: .75rem; line-height: .75rem; diff --git a/packages/theme/styles/editors.scss b/packages/theme/styles/editors.scss index 52ca43cabdf..7dc2dde839f 100644 --- a/packages/theme/styles/editors.scss +++ b/packages/theme/styles/editors.scss @@ -34,7 +34,7 @@ &::after { position: absolute; top: 0; - left: -0.75rem; + inset-inline-start: -0.75rem; width: calc(100% + 1.5rem); height: 100%; border: 1px solid var(--theme-editbox-focus-border); diff --git a/packages/theme/styles/global.scss b/packages/theme/styles/global.scss index ba5c188e33c..2cc9b6efb79 100644 --- a/packages/theme/styles/global.scss +++ b/packages/theme/styles/global.scss @@ -34,6 +34,7 @@ @use "./mono.scss" as *; @use "./noto-color.scss" as *; +@use "./_rtl.scss" as *; @font-face { font-family: 'IBM Plex Sans'; @@ -72,6 +73,38 @@ url('../fonts/complete/woff/IBMPlexSans-Bold.woff') format('woff'); } +/* Arabic — IBM Plex Sans Arabic, matched to the IBM Plex Sans UI family. + Placed after IBM Plex Sans in --font-family so browsers resolve Latin glyphs + to Plex Sans and Arabic glyphs to Plex Sans Arabic, per glyph, app-wide. */ +@font-face { + font-family: 'IBM Plex Sans Arabic'; + font-style: normal; + font-weight: 400; + src: local('IBM Plex Sans Arabic'), + url('../fonts/arabic/woff2/IBMPlexSansArabic-Regular.woff2') format('woff2'); +} +@font-face { + font-family: 'IBM Plex Sans Arabic'; + font-style: normal; + font-weight: 500; + src: local('IBM Plex Sans Arabic Medium'), + url('../fonts/arabic/woff2/IBMPlexSansArabic-Medium.woff2') format('woff2'); +} +@font-face { + font-family: 'IBM Plex Sans Arabic'; + font-style: normal; + font-weight: 600; + src: local('IBM Plex Sans Arabic SemiBold'), + url('../fonts/arabic/woff2/IBMPlexSansArabic-SemiBold.woff2') format('woff2'); +} +@font-face { + font-family: 'IBM Plex Sans Arabic'; + font-style: normal; + font-weight: 700; + src: local('IBM Plex Sans Arabic Bold'), + url('../fonts/arabic/woff2/IBMPlexSansArabic-Bold.woff2') format('woff2'); +} + * { box-sizing: border-box; touch-action: manipulation; @@ -79,7 +112,7 @@ scrollbar-width: none; --body-font-size: .875rem; --panel-aside-width: 25rem; // 20rem; - --font-family: 'IBM Plex Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto; + --font-family: 'IBM Plex Sans', 'IBM Plex Sans Arabic', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto; --mono-font: 'IBM Plex Mono', monospace; --timing-shadow: cubic-bezier(0,.65,.35,1); --timing-main: cubic-bezier(0.25, 0.46, 0.45, 0.94); @@ -99,7 +132,7 @@ display: none; height: 2rem; position: absolute; - right: -3rem; + inset-inline-end: -3rem; top: -1rem; transform-origin: left; transform: rotate(-90deg); diff --git a/packages/theme/styles/love.scss b/packages/theme/styles/love.scss index 5ff230b7710..7abf1a6a8eb 100644 --- a/packages/theme/styles/love.scss +++ b/packages/theme/styles/love.scss @@ -10,8 +10,8 @@ justify-content: space-between; gap: .25rem; bottom: calc(100% + .125rem); - left: 0; - right: 0; + inset-inline-start: 0; + inset-inline-end: 0; } &__field { position: relative; @@ -21,8 +21,8 @@ &::before { position: absolute; content: ''; - left: calc(100% / var(--huly-floor-roomWidth) / 5 * -1); - right: calc(100% / var(--huly-floor-roomWidth) / 5 * -1); + inset-inline-start: calc(100% / var(--huly-floor-roomWidth) / 5 * -1); + inset-inline-end: calc(100% / var(--huly-floor-roomWidth) / 5 * -1); background-color: var(--theme-popup-color); border: 1px solid var(--theme-popup-divider); border-radius: 1rem; @@ -76,8 +76,8 @@ .preview &::before { top: calc(100% / var(--huly-floor-roomHeight) / 3 * -1); bottom: calc(100% / var(--huly-floor-roomHeight) / 3 * -1); - left: calc(100% / var(--huly-floor-roomWidth) / 3 * -1); - right: calc(100% / var(--huly-floor-roomWidth) / 3 * -1); + inset-inline-start: calc(100% / var(--huly-floor-roomWidth) / 3 * -1); + inset-inline-end: calc(100% / var(--huly-floor-roomWidth) / 3 * -1); border-radius: .375rem; .floorGrid-room__field { border-radius: .25rem; } diff --git a/packages/theme/styles/mixins.scss b/packages/theme/styles/mixins.scss index b63f2902d7c..55e0fd4e299 100644 --- a/packages/theme/styles/mixins.scss +++ b/packages/theme/styles/mixins.scss @@ -2,8 +2,8 @@ position: absolute; top: 0; bottom: 0; - left: 0; - right: 0; + inset-inline-start: 0; + inset-inline-end: 0; } @mixin bg-layer($color, $opacity) { diff --git a/packages/theme/styles/panel.scss b/packages/theme/styles/panel.scss index cb870e0770e..c908e5827dd 100644 --- a/packages/theme/styles/panel.scss +++ b/packages/theme/styles/panel.scss @@ -139,12 +139,12 @@ align-items: center; flex-shrink: 0; gap: var(--spacing-0_5); - margin-left: var(--spacing-1); + margin-inline-start: var(--spacing-1); min-width: 0; max-width: 50%; } &__arrow { - margin-left: var(--spacing-0_5); + margin-inline-start: var(--spacing-0_5); width: var(--global-min-Size); height: var(--global-min-Size); color: var(--global-accent-IconColor); @@ -200,7 +200,7 @@ min-height: var(--global-small-Size); border-radius: var(--small-BorderRadius); - &.selected { padding-right: var(--spacing-0_75); } + &.selected { padding-inline-end: var(--spacing-0_75); } &.isOpen { margin-bottom: 0; } } @@ -235,7 +235,7 @@ height: 100%; min-width: 0; min-height: 0; - border-right: 1px solid var(--theme-divider-color); + border-inline-end: 1px solid var(--theme-divider-color); border-radius: 0 var(--small-focus-BorderRadius) var(--small-focus-BorderRadius) 0; } @@ -256,7 +256,7 @@ display: flex; flex-direction: column; top: 5rem; - right: .5rem; + inset-inline-end: .5rem; width: 42rem; height: auto; min-height: 0; @@ -283,13 +283,13 @@ min-height: 0; width: 50%; - &.divide { border-right: 1px solid var(--divider-color); } + &.divide { border-inline-end: 1px solid var(--divider-color); } } .ad-tools { position: absolute; display: flex; top: 1.25rem; - right: 1.25rem; + inset-inline-end: 1.25rem; &.grow-reverse { display: flex; @@ -335,7 +335,7 @@ display: flex; align-items: center; flex-grow: 1; - margin-right: .75rem; + margin-inline-end: .75rem; min-width: 0; min-height: 0; @@ -347,7 +347,7 @@ background-color: var(--theme-breadcrumb-default); border-radius: .25rem; - &:not(:last-child) { margin-right: .125rem; } + &:not(:last-child) { margin-inline-end: .125rem; } &:not(.disabled, .not-active) { cursor: pointer; @@ -375,7 +375,7 @@ background-color: var(--theme-panel-color); // border: 1px solid var(--theme-divider-color); border-top: none; - border-left: none; + border-inline-start: none; &.main { justify-content: stretch; @@ -411,15 +411,15 @@ display: flex; flex-direction: column; // flex-shrink: 0; - margin-left: auto; - margin-right: auto; + margin-inline-start: auto; + margin-inline-end: auto; width: calc(100% - 7.5rem); max-width: 54rem; &.side-content-space { --side-content-space: 21rem; max-width: calc(54rem + var(--side-content-space)); - padding-right: var(--side-content-space); + padding-inline-end: var(--side-content-space); } &.max { @@ -488,14 +488,14 @@ flex-direction: row; flex-shrink: 0; top: 0; - left: 100%; + inset-inline-start: 100%; width: var(--panel-aside-width); height: 100%; min-width: 0; min-height: 0; background-color: var(--theme-panel-color); - // border-left: 1px solid var(--theme-divider-color); - border-bottom-right-radius: .45rem; + // border-inline-start: 1px solid var(--theme-divider-color); + border-end-end-radius: .45rem; box-shadow: 0 0 0 0 rgba(0, 0, 0, 0); transition: box-shadow 150ms ease 0s, transform 150ms cubic-bezier(0.175, 0.885, 0.32, 1.275); transform: translateX(0); @@ -548,7 +548,7 @@ align-self: start; margin-top: .4rem; } - .textPadding { margin-left: .875rem; } + .textPadding { margin-inline-start: .875rem; } } &-content { display: flex; diff --git a/packages/theme/styles/popups.scss b/packages/theme/styles/popups.scss index 95277987304..ae97278925d 100644 --- a/packages/theme/styles/popups.scss +++ b/packages/theme/styles/popups.scss @@ -42,7 +42,7 @@ padding: var(--spacing-1_5); min-width: 0; min-height: 0; - text-align: left; + text-align: start; border-radius: var(--extra-small-BorderRadius); border: none; @@ -88,7 +88,7 @@ } &__keys { gap: var(--spacing-0_25); - margin-left: var(--spacing-1); + margin-inline-start: var(--spacing-1); .key { padding: var(--spacing-0_5); @@ -237,7 +237,7 @@ // width: 100%; min-width: 0; min-height: 2.25rem; - text-align: left; + text-align: start; color: var(--theme-caption-color); border-radius: .25rem; @@ -246,7 +246,7 @@ .icon, .color, .tag { flex-shrink: 0; - margin-right: .5rem; + margin-inline-end: .5rem; } .icon, div.check { @@ -257,7 +257,7 @@ div.check { flex-shrink: 0; - &:not(.ml-0) { margin-left: .5rem; } + &:not(.ml-0) { margin-inline-start: .5rem; } } .color { width: .875rem; @@ -317,7 +317,7 @@ font-weight: 500; font-size: .625rem; text-transform: uppercase; - text-align: left; + text-align: start; color: var(--theme-caption-color); background-color: var(--theme-popup-color); @@ -410,7 +410,7 @@ .ap-menuItem { flex-shrink: 0; justify-content: flex-start; - text-align: left; + text-align: start; min-width: 0; color: var(--theme-caption-color); cursor: pointer; @@ -420,8 +420,8 @@ border-radius: .25rem; } &:not(.separator, .noMargin) { - margin-left: .5rem; - margin-right: .5rem; + margin-inline-start: .5rem; + margin-inline-end: .5rem; } &.withComp { display: flex; @@ -456,17 +456,17 @@ .drag { flex-shrink: 0; - margin-right: .375rem; + margin-inline-end: .375rem; color: var(--theme-trans-color); } .icon { flex-shrink: 0; - margin-right: .5rem; + margin-inline-end: .5rem; } .logo { overflow: hidden; flex-shrink: 0; - margin-right: .5rem; + margin-inline-end: .5rem; width: 2rem; height: 2rem; border-radius: .25rem; @@ -514,13 +514,13 @@ border-radius: .375rem; } .ap-menuItem:not(.separator, .noMargin) { - margin-left: .375rem; - margin-right: .375rem; + margin-inline-start: .375rem; + margin-inline-end: .375rem; } } .ap-check { flex-shrink: 0; - margin-left: 1rem; + margin-inline-start: 1rem; width: 1rem; height: 1rem; color: var(--theme-popup-checkicon); @@ -563,7 +563,7 @@ color: var(--theme-dark-color); outline: none; - &:not(:last-child) { margin-right: .375rem; } + &:not(:last-child) { margin-inline-end: .375rem; } &:not(.selected, .disabled) { cursor: pointer; } &.disabled { color: var(--theme-darker-color); } &.selected { color: var(--theme-caption-color); } @@ -572,7 +572,7 @@ &:not(.bordered) .tab.selected::after { position: absolute; content: ''; - left: 0; + inset-inline-start: 0; bottom: -1px; width: 100%; height: 2px; @@ -594,7 +594,7 @@ display: flex; flex-direction: column; margin: 0 .5rem; - text-align: left; + text-align: start; .ap-caption { margin: .5rem 0 0 .75rem; @@ -617,14 +617,14 @@ padding: .25rem .5rem; min-width: 0; min-height: 2.25rem; - text-align: left; + text-align: start; color: var(--theme-caption-color); border-radius: .25rem; outline: none; cursor: pointer; .icon { - margin-right: .5rem; + margin-inline-end: .5rem; color: var(--theme-dark-color); } &.withHover:hover { background-color: var(--theme-popup-hover); } @@ -635,13 +635,13 @@ .antiPopup-submenu { position: relative; span { - padding-right: 1rem; + padding-inline-end: 1rem; } &::after { content: '▶'; position: absolute; top: 50%; - right: 0.5rem; + inset-inline-end: 0.5rem; font-size: 0.375rem; color: var(--theme-dark-color); transform: translateY(-50%); diff --git a/packages/theme/styles/prose.scss b/packages/theme/styles/prose.scss index 235628047c0..09132688be9 100644 --- a/packages/theme/styles/prose.scss +++ b/packages/theme/styles/prose.scss @@ -34,7 +34,7 @@ table.proseTable td:not(:last-child), table.proseTable th:not(:last-child) { - border-right: none !important; + border-inline-end: none !important; } table.proseTable tr:not(:last-child) td, @@ -84,7 +84,7 @@ table.proseTable { } th { - text-align: left; + text-align: start; background-color: var(--text-editor-table-header-color); } @@ -105,8 +105,8 @@ table.proseTable { z-index: var(--table-selection-z-index); top: var(--table-selection-border-indent); bottom: var(--table-selection-border-indent); - left: var(--table-selection-border-indent); - right: var(--table-selection-border-indent); + inset-inline-start: var(--table-selection-border-indent); + inset-inline-end: var(--table-selection-border-indent); } &__border-top::before { @@ -117,12 +117,12 @@ table.proseTable { border-bottom-width: var(--table-selection-border-width); } - &__border-left::before { - border-left-width: var(--table-selection-border-width); + &__border-inline-start::before { + border-inline-start-width: var(--table-selection-border-width); } - &__border-right::before { - border-right-width: var(--table-selection-border-width); + &__border-inline-end::before { + border-inline-end-width: var(--table-selection-border-width); } } @@ -157,8 +157,8 @@ table.proseTable { z-index: var(--table-handlers-z-index); top: var(--table-selection-border-indent); bottom: var(--table-selection-border-indent); - left: var(--table-selection-border-indent); - right: var(--table-selection-border-indent); + inset-inline-start: var(--table-selection-border-indent); + inset-inline-end: var(--table-selection-border-indent); } &:hover button { @@ -186,8 +186,8 @@ table.proseTable { position: absolute; height: var(--table-handle-size); top: var(--table-handle-col-indent); - left: -1px; - right: -1px; + inset-inline-start: -1px; + inset-inline-end: -1px; button { height: 100%; @@ -196,8 +196,8 @@ table.proseTable { &:hover { border-radius: var(--table-selection-border-radius); - border-bottom-left-radius: 0; - border-bottom-right-radius: 0; + border-end-start-radius: 0; + border-end-end-radius: 0; button { opacity: 1; @@ -205,15 +205,15 @@ table.proseTable { } &__selected { - left: 0; + inset-inline-start: 0; &::before { - right: 0; + inset-inline-end: 0; top: 0; bottom: 0; border-bottom-width: 0; - border-bottom-left-radius: 0; - border-bottom-right-radius: 0; + border-end-start-radius: 0; + border-end-end-radius: 0; } } } @@ -223,10 +223,10 @@ table.proseTable { width: var(--table-handle-size); top: -1px; bottom: -1px; - left: var(--table-handle-row-indent); + inset-inline-start: var(--table-handle-row-indent); border-radius: var(--table-selection-border-radius); - border-top-right-radius: 0; - border-bottom-right-radius: 0; + border-start-end-radius: 0; + border-end-end-radius: 0; button { width: 100%; @@ -250,11 +250,11 @@ table.proseTable { &::before { bottom: 0; - left: 0; - right: 0; - border-right-width: 0; - border-top-right-radius: 0; - border-bottom-right-radius: 0; + inset-inline-start: 0; + inset-inline-end: 0; + border-inline-end-width: 0; + border-start-end-radius: 0; + border-end-end-radius: 0; } } } @@ -273,7 +273,7 @@ table.proseTable { justify-content: flex-start; align-items: center; top: var(--table-insert-marker-indent); - right: -0.625rem; + inset-inline-end: -0.625rem; width: 1.25rem; .table-insert-marker { @@ -283,7 +283,7 @@ table.proseTable { .column-resize-handle { position: absolute; - right: -1px; + inset-inline-end: -1px; top: -1px; bottom: -1px; width: 1px; @@ -294,8 +294,8 @@ table.proseTable { content: ''; position: absolute; top: 0; - left: -5px; - right: -5px; + inset-inline-start: -5px; + inset-inline-end: -5px; bottom: 0; cursor: col-resize; z-index: 100; @@ -307,7 +307,7 @@ table.proseTable { flex-direction: row; justify-content: flex-start; align-items: center; - left: var(--table-insert-marker-indent); + inset-inline-start: var(--table-insert-marker-indent); bottom: -0.625rem; height: 1.25rem; @@ -338,7 +338,7 @@ table.proseTable { content: ''; border: 2px solid var(--text-editor-table-marker-color); border-radius: 50%; - margin-left: calc(0.5rem - 1px); + margin-inline-start: calc(0.5rem - 1px); } svg { @@ -410,7 +410,7 @@ table.proseTable { .table-row-drag-marker { width: var(--table-handle-size); - left: var(--table-handle-row-indent); + inset-inline-start: var(--table-handle-row-indent); button { width: 100%; @@ -432,10 +432,10 @@ table.proseTable { .proseBlockQuote { margin-inline: 1px 0; - padding-left: 1.5em; - padding-right: 1.5em; + padding-inline-start: 1.5em; + padding-inline-end: 1.5em; position: relative; - border-left: 2px solid var(--text-editor-block-quote-color); + border-inline-start: 2px solid var(--text-editor-block-quote-color); } .proseCode { @@ -544,7 +544,7 @@ pre.proseCodeBlock>pre.proseCode { header { user-select: none; position: absolute; - right: 0.5rem; + inset-inline-end: 0.5rem; top: 0.5rem; display: flex; diff --git a/packages/theme/styles/tables.scss b/packages/theme/styles/tables.scss index 8d2d11e5494..f2bdf35d3ca 100644 --- a/packages/theme/styles/tables.scss +++ b/packages/theme/styles/tables.scss @@ -30,7 +30,7 @@ padding: var(--spacing-2) var(--spacing-2) var(--spacing-2) var(--spacing-2_5); span { - margin-left: var(--spacing-1_5); + margin-inline-start: var(--spacing-1_5); } } span { @@ -153,7 +153,7 @@ white-space: nowrap; word-break: break-all; text-overflow: ellipsis; - text-align: left; + text-align: start; flex-shrink: 1; min-width: 0; color: var(--global-primary-TextColor); @@ -251,7 +251,7 @@ border-radius: 0 0 var(--large-BorderRadius) var(--large-BorderRadius); } .hulyTableAttr-content__row-icon-wrapper { - margin-right: var(--spacing-0_5); + margin-inline-end: var(--spacing-0_5); } } .hulyTableAttr-content__row + .hulyTableAttr-content__row { diff --git a/packages/ui/lang/ar.json b/packages/ui/lang/ar.json new file mode 100644 index 00000000000..17a1c22f29e --- /dev/null +++ b/packages/ui/lang/ar.json @@ -0,0 +1,116 @@ +{ + "string": { + "EditBoxPlaceholder": "اكتب نصًا...", + "Ok": "موافق", + "Cancel": "إلغاء", + "Save": "حفظ", + "Publish": "نشر", + "SaveDraft": "حفظ كمسودة", + "MinutesAgo": "{minutes, plural, =0 {منذ أقل من دقيقة} =1 {منذ دقيقة} other {منذ # دقيقة}}", + "HoursAgo": "{hours, plural, =0 {منذ أقل من ساعة} =1 {منذ ساعة} other {منذ # ساعة}}", + "DaysAgo": "{days, plural, =0 {اليوم} =1 {الأمس} other {منذ # يوم}}", + "MonthsAgo": "{months, plural, =0 {هذا الشهر} =1 {منذ شهر} other {منذ # شهر}}", + "YearsAgo": "{years, plural, =0 {هذا العام} =1 {منذ عام} other {منذ # عام}}", + "Minutes": "{minutes, plural, =0 {أقل من دقيقة} =1 {دقيقة} other {# دقيقة}}", + "Hours": "{hours, plural, =0 {أقل من ساعة} =1 {ساعة} other {# ساعة}}", + "Days": "{days, plural, =0 {اليوم} =1 {يوم واحد} other {# يوم}}", + "Weeks": "{weeks, plural, =0 {هذا الأسبوع} =1 {أسبوع واحد} other {# أسبوع}}", + "Months": "{months, plural, =0 {هذا الشهر} =1 {شهر واحد} other {# شهر}}", + "Years": "{years, plural, =0 {هذا العام} =1 {عام} other {# عام}}", + "Before": "قبل", + "After": "بعد", + "MinutesShort": "{value}د", + "HoursShort": "{value}س", + "DaysShort": "{value}ي", + "ShowMore": "عرض المزيد", + "ShowLess": "عرض أقل", + "Search": "بحث", + "SearchDots": "بحث...", + "SearchResults": "نتائج البحث", + "Suggested": "مقترح", + "TimeTooltip": "{value}", + "SelectDate": "اختر تاريخًا", + "None": "لا شيء", + "NotSelected": "غير محدد", + "Today": "اليوم", + "NoDate": "بدون تاريخ", + "StartDate": "تاريخ البدء", + "TargetDate": "التاريخ المستهدف", + "Overdue": "متأخر", + "DueDate": "تاريخ الاستحقاق", + "AddDueDate": "إضافة تاريخ استحقاق", + "SetDueDate": "تحديد تاريخ الاستحقاق", + "EditDueDate": "تعديل تاريخ الاستحقاق", + "SaveDueDate": "حفظ تاريخ الاستحقاق", + "NeedsToBeCompletedByThisDate": "يجب إنجازه بحلول هذا التاريخ", + "DueDatePopupTitle": "يُستحق في {value}", + "DueDatePopupOverdueTitle": "كان مستحقًا في {value}", + "DueDatePopupDescription": "{value, plural, =0 {اليوم} =1 {غدًا} other {# يوم متبقٍ}}", + "DueDatePopupOverdueDescription": "{value, plural, =1 {متأخر بيوم واحد} other {متأخر بـ # يوم}}", + "English": "English", + "Russian": "Русский", + "Portuguese": "Português", + "PortugueseBrazil": "Português (Brasil)", + "Spanish": "Español", + "Chinese": "中文", + "French": "Français", + "Italian": "Italiano", + "Czech": "Čeština", + "German": "Deutsch", + "Japanese": "日本語", + "Korean": "Korean", + "Turkish": "Türkçe", + "Arabic": "العربية", + "MinutesBefore": "{minutes, plural, =1 {قبل دقيقة} other {قبل # دقيقة}}", + "HoursBefore": "{hours, plural, =1 {قبل ساعة} other {قبل # ساعة}}", + "DaysBefore": "{days, plural, =1 {قبل يوم} other {قبل # يوم}}", + "WeeksBefore": "{weeks, plural, =1 {قبل أسبوع} other {قبل # أسبوع}}", + "MonthsBefore": "{months, plural, =1 {قبل شهر} other {قبل # شهر}}", + "MinutesAfter": "{minutes, plural, =1 {خلال دقيقة} other {خلال # دقيقة}}", + "HoursAfter": "{hours, plural, =1 {خلال ساعة} other {خلال # ساعة}}", + "DaysAfter": "{days, plural, =1 {خلال يوم} other {خلال # يوم}}", + "WeeksAfter": "{weeks, plural, =1 {خلال أسبوع} other {خلال # أسبوع}}", + "MonthsAfter": "{months, plural, =1 {خلال شهر} other {خلال # شهر}}", + "NoActionsDefined": "لا توجد إجراءات متاحة", + "Incoming": "وارد", + "HoursLabel": "ساعات", + "Back": "رجوع", + "Next": "التالي", + "DropdownDefaultLabel": "اختر عنصرًا", + "DD": "يي", + "MM": "شش", + "YYYY": "سسسس", + "HH": "سس", + "Remove": "إزالة", + "NoResults": "لا توجد نتائج", + "MoreCount": "{count} إضافي", + "Spacious": "واسع", + "Compact": "مضغوط", + "ThemeLight": "فاتح", + "ThemeDark": "داكن", + "ThemeSystem": "النظام", + "NoTimeZonesFound": "لم يُعثر على مناطق زمنية", + "Selected": "المحدد:", + "Submit": "إرسال", + "NextStep": "الخطوة التالية", + "TypeHere": "اكتب هنا...", + "NormalSize": "حجم عادي", + "FullSize": "حجم كامل", + "UseMaxWidth": "أقصى عرض", + "Sidebar": "الشريط الجانبي", + "FontSize": "حجم الخط", + "Language": "اللغة", + "DaysWOValue": "{days, plural, =1 {يوم} other {أيام}}", + "WeeksWOValue": "{weeks, plural, =1 {أسبوع} other {أسابيع}}", + "MonthsWOValue": "{months, plural, =1 {شهر} other {أشهر}}", + "Filter": "تصفية", + "Clear": "مسح", + "Yesterday": "الأمس", + "ThisWeek": "هذا الأسبوع", + "ThisMonth": "هذا الشهر", + "ThisYear": "هذا العام", + "EmojiStyle": "نمط الرموز التعبيرية", + "EmojiSystem": "افتراضي النظام", + "EmojiNoto": "Noto الملونة" + } +} diff --git a/packages/ui/lang/cs.json b/packages/ui/lang/cs.json index cb07ff13955..14fb91deced 100644 --- a/packages/ui/lang/cs.json +++ b/packages/ui/lang/cs.json @@ -60,6 +60,7 @@ "Japanese": "日本語", "Korean": "Korejština", "Turkish": "Türkçe", + "Arabic": "العربية", "MinutesBefore": "{minutes, plural, =1 {1 minuta před} other {# minut před}}", "HoursBefore": "{hours, plural, =1 {1 hodina před} other {# hodin před}}", "DaysBefore": "{days, plural, =1 {1 den před} other {# dní před}}", diff --git a/packages/ui/lang/de.json b/packages/ui/lang/de.json index 6bb24862a02..f5aa9803cea 100644 --- a/packages/ui/lang/de.json +++ b/packages/ui/lang/de.json @@ -60,6 +60,7 @@ "Japanese": "Japanisch", "Korean": "Koreanisch", "Turkish": "Türkçe", + "Arabic": "العربية", "MinutesBefore": "{minutes, plural, =1 {eine Minute vorher} other {# Minuten vorher}}", "HoursBefore": "{hours, plural, =1 {eine Stunde vorher} other {# Stunden vorher}}", "DaysBefore": "{days, plural, =1 {einen Tag vorher} other {# Tage vorher}}", diff --git a/packages/ui/lang/en.json b/packages/ui/lang/en.json index e80195398e4..1bc825b0294 100644 --- a/packages/ui/lang/en.json +++ b/packages/ui/lang/en.json @@ -60,6 +60,7 @@ "Japanese": "日本語", "Korean": "Korean", "Turkish": "Türkçe", + "Arabic": "العربية", "MinutesBefore": "{minutes, plural, =1 {a minute before} other {# minutes before}}", "HoursBefore": "{hours, plural, =1 {an hour before} other {# hours before}}", "DaysBefore": "{days, plural, =1 {a day before} other {# days before}}", diff --git a/packages/ui/lang/es.json b/packages/ui/lang/es.json index fbc22256d1e..8920653235e 100644 --- a/packages/ui/lang/es.json +++ b/packages/ui/lang/es.json @@ -60,6 +60,7 @@ "Japanese": "日本語", "Korean": "Coreano", "Turkish": "Türkçe", + "Arabic": "العربية", "MinutesBefore": "{minutes, plural, =1 {un minuto antes} other {# minutos antes}}", "HoursBefore": "{hours, plural, =1 {una hora antes} other {# horas antes}}", "DaysBefore": "{days, plural, =1 {un día antes} other {# días antes}}", diff --git a/packages/ui/lang/fr.json b/packages/ui/lang/fr.json index 16a0e6c1115..43c942805ac 100644 --- a/packages/ui/lang/fr.json +++ b/packages/ui/lang/fr.json @@ -60,6 +60,7 @@ "Japanese": "日本語", "Korean": "Coréen", "Turkish": "Türkçe", + "Arabic": "العربية", "MinutesBefore": "{minutes, plural, =1 {une minute avant} other {# minutes avant}}", "HoursBefore": "{hours, plural, =1 {une heure avant} other {# heures avant}}", "DaysBefore": "{days, plural, =1 {un jour avant} other {# jours avant}}", diff --git a/packages/ui/lang/it.json b/packages/ui/lang/it.json index 616c419cd44..23ed1a629ad 100644 --- a/packages/ui/lang/it.json +++ b/packages/ui/lang/it.json @@ -60,6 +60,7 @@ "Japanese": "日本語", "Korean": "Coreano", "Turkish": "Türkçe", + "Arabic": "العربية", "MinutesBefore": "{minutes, plural, =1 {un minuto prima} other {# minuti prima}}", "HoursBefore": "{hours, plural, =1 {un'ora prima} other {# ore prima}}", "DaysBefore": "{days, plural, =1 {un giorno prima} other {# giorni prima}}", diff --git a/packages/ui/lang/ja.json b/packages/ui/lang/ja.json index dd73156644f..c840b1f09c6 100644 --- a/packages/ui/lang/ja.json +++ b/packages/ui/lang/ja.json @@ -60,6 +60,7 @@ "Japanese": "日本語", "Korean": "韓国語", "Turkish": "Türkçe", + "Arabic": "العربية", "MinutesBefore": "{minutes, plural, =1 {1分前} other {#分前}}", "HoursBefore": "{hours, plural, =1 {1時間前} other {#時間前}}", "DaysBefore": "{days, plural, =1 {1日前} other {#日前}}", diff --git a/packages/ui/lang/ko.json b/packages/ui/lang/ko.json index e032ac807bd..5dbcb439c5f 100644 --- a/packages/ui/lang/ko.json +++ b/packages/ui/lang/ko.json @@ -60,6 +60,7 @@ "Japanese": "日本語", "Korean": "한국어", "Turkish": "Türkçe", + "Arabic": "العربية", "MinutesBefore": "{minutes, plural, =1 {1분 전} other {#분 전}}", "HoursBefore": "{hours, plural, =1 {1시간 전} other {#시간 전}}", "DaysBefore": "{days, plural, =1 {1일 전} other {#일 전}}", diff --git a/packages/ui/lang/pt-br.json b/packages/ui/lang/pt-br.json index bc00f863648..351c97aa276 100644 --- a/packages/ui/lang/pt-br.json +++ b/packages/ui/lang/pt-br.json @@ -60,6 +60,7 @@ "Japanese": "日本語", "Korean": "Coreano", "Turkish": "Türkçe", + "Arabic": "العربية", "MinutesBefore": "{minutes, plural, =1 {um minuto antes} other {# minutos antes}}", "HoursBefore": "{hours, plural, =1 {uma hora antes} other {# horas antes}}", "DaysBefore": "{days, plural, =1 {um dia antes} other {# dias antes}}", diff --git a/packages/ui/lang/pt.json b/packages/ui/lang/pt.json index 9a5a3bafd83..49e7bfb67e5 100644 --- a/packages/ui/lang/pt.json +++ b/packages/ui/lang/pt.json @@ -60,6 +60,7 @@ "Japanese": "日本語", "Korean": "Coreano", "Turkish": "Türkçe", + "Arabic": "العربية", "MinutesBefore": "{minutes, plural, =1 {um minuto antes} other {# minutos antes}}", "HoursBefore": "{hours, plural, =1 {uma hora antes} other {# horas antes}}", "DaysBefore": "{days, plural, =1 {um dia antes} other {# dias antes}}", diff --git a/packages/ui/lang/ru.json b/packages/ui/lang/ru.json index 1282a1e359b..8ff5dcef95b 100644 --- a/packages/ui/lang/ru.json +++ b/packages/ui/lang/ru.json @@ -60,6 +60,7 @@ "Japanese": "日本語", "Korean": "Корейский", "Turkish": "Türkçe", + "Arabic": "العربية", "MinutesBefore": "{minutes, plural, =1 {за минуту} one {за # минуту} few {за # минуты} other {за # минут}}", "HoursBefore": "{hours, plural, =1 {за час} one {за # час} few {за # часа} other {за # часов}}", "DaysBefore": "{days, plural, =1 {за день} one {за # день} few {за # дня} other {за # дней}}", diff --git a/packages/ui/lang/tr.json b/packages/ui/lang/tr.json index f5bc58063fb..821e5432ab0 100644 --- a/packages/ui/lang/tr.json +++ b/packages/ui/lang/tr.json @@ -60,6 +60,7 @@ "Japanese": "日本語", "Korean": "Korece", "Turkish": "Türkçe", + "Arabic": "العربية", "MinutesBefore": "{minutes, plural, =1 {bir dakika önce} other {# dakika önce}}", "HoursBefore": "{hours, plural, =1 {bir saat önce} other {# saat önce}}", "DaysBefore": "{days, plural, =1 {bir gün önce} other {# gün önce}}", diff --git a/packages/ui/lang/zh.json b/packages/ui/lang/zh.json index bbb476d00d4..e9b17327056 100644 --- a/packages/ui/lang/zh.json +++ b/packages/ui/lang/zh.json @@ -60,6 +60,7 @@ "Japanese": "日本語", "Korean": "韩语", "Turkish": "Türkçe", + "Arabic": "العربية", "MinutesBefore": "{minutes, plural, =1 {一分钟前} other {# 分钟前}}", "HoursBefore": "{hours, plural, =1 {一小时前} other {# 小时前}}", "DaysBefore": "{days, plural, =1 {一天前} other {# 天前}}", diff --git a/packages/ui/src/components/ButtonWithDropdown.svelte b/packages/ui/src/components/ButtonWithDropdown.svelte index 29542b0a640..1ece17127be 100644 --- a/packages/ui/src/components/ButtonWithDropdown.svelte +++ b/packages/ui/src/components/ButtonWithDropdown.svelte @@ -109,7 +109,7 @@ background-color: var(--theme-content-color); min-width: 1px; opacity: 0.25; - right: -0.75rem; + inset-inline-end: -0.75rem; &.primary, &.secondary, diff --git a/packages/ui/src/components/Chevron.svelte b/packages/ui/src/components/Chevron.svelte index 06dd53004f4..e371cf18891 100644 --- a/packages/ui/src/components/Chevron.svelte +++ b/packages/ui/src/components/Chevron.svelte @@ -81,5 +81,24 @@ transform: rotate(90deg); } } + + // RTL: mirror horizontal chevrons (next/prev, breadcrumb, tree carets). + // Vertical states (expanded / down) are intentionally left unchanged. + :global([dir='rtl']) &.outline { + &.right { + transform: rotate(90deg); + } + &.left { + transform: rotate(-90deg); + } + } + :global([dir='rtl']) &:not(.outline):not(.expanded) { + &.right { + transform: rotate(180deg); + } + &.left { + transform: rotate(0deg); + } + } } diff --git a/packages/ui/src/components/Chip.svelte b/packages/ui/src/components/Chip.svelte index 58d7ac0a879..5bc710123ec 100644 --- a/packages/ui/src/components/Chip.svelte +++ b/packages/ui/src/components/Chip.svelte @@ -103,7 +103,7 @@ } & :global(button.type-button-icon) { - margin-right: var(--spacing-0_25); + margin-inline-end: var(--spacing-0_25); } } diff --git a/packages/ui/src/components/CircleButton.svelte b/packages/ui/src/components/CircleButton.svelte index 767e3107064..9b1e3eb9cd5 100644 --- a/packages/ui/src/components/CircleButton.svelte +++ b/packages/ui/src/components/CircleButton.svelte @@ -75,8 +75,8 @@ position: absolute; top: -0.25rem; bottom: -0.25rem; - left: -0.25rem; - right: -0.25rem; + inset-inline-start: -0.25rem; + inset-inline-end: -0.25rem; border: 1px solid var(--primary-button-default); border-radius: 50%; } diff --git a/packages/ui/src/components/DropdownLabels.svelte b/packages/ui/src/components/DropdownLabels.svelte index 8b3badd3067..9d4d28cad6a 100644 --- a/packages/ui/src/components/DropdownLabels.svelte +++ b/packages/ui/src/components/DropdownLabels.svelte @@ -141,13 +141,13 @@ diff --git a/packages/ui/src/components/Toggle.svelte b/packages/ui/src/components/Toggle.svelte index bb8f8e129dd..85d97499343 100644 --- a/packages/ui/src/components/Toggle.svelte +++ b/packages/ui/src/components/Toggle.svelte @@ -70,7 +70,7 @@ background-color: var(--theme-toggle-on-bg-hover); } &:before { - left: 1.125rem; + inset-inline-start: 1.125rem; background: var(--theme-toggle-on-sw-color); } } @@ -97,7 +97,7 @@ content: ''; position: absolute; top: 0.125rem; - left: 0.125rem; + inset-inline-start: 0.125rem; display: inline-block; width: 1rem; height: 1rem; diff --git a/packages/ui/src/components/ToggleWithLabel.svelte b/packages/ui/src/components/ToggleWithLabel.svelte index d7784ff2dc7..89bffa8a887 100644 --- a/packages/ui/src/components/ToggleWithLabel.svelte +++ b/packages/ui/src/components/ToggleWithLabel.svelte @@ -46,7 +46,7 @@ diff --git a/packages/ui/src/components/calendar/MonthSquare.svelte b/packages/ui/src/components/calendar/MonthSquare.svelte index 98a9d172192..4f00df7927a 100644 --- a/packages/ui/src/components/calendar/MonthSquare.svelte +++ b/packages/ui/src/components/calendar/MonthSquare.svelte @@ -257,16 +257,16 @@ color: var(--theme-caption-color); } &.startRow:not(.wrongMonth) { - border-top-left-radius: 0.25rem; - border-bottom-left-radius: 0.25rem; - padding-left: 0; - margin-left: 0.125rem; + border-start-start-radius: 0.25rem; + border-end-start-radius: 0.25rem; + padding-inline-start: 0; + margin-inline-start: 0.125rem; } &.endRow:not(.wrongMonth) { - border-top-right-radius: 0.25rem; - border-bottom-right-radius: 0.25rem; - padding-right: 0; - margin-right: 0.125rem; + border-start-end-radius: 0.25rem; + border-end-end-radius: 0.25rem; + padding-inline-end: 0; + margin-inline-end: 0.125rem; } } @@ -306,7 +306,7 @@ position: absolute; content: ''; top: 2.25rem; - left: 0; + inset-inline-start: 0; width: 100%; height: 1px; background-color: var(--theme-divider-color); diff --git a/packages/ui/src/components/calendar/Shifts.svelte b/packages/ui/src/components/calendar/Shifts.svelte index d79cfbafeef..936334c7978 100644 --- a/packages/ui/src/components/calendar/Shifts.svelte +++ b/packages/ui/src/components/calendar/Shifts.svelte @@ -79,7 +79,7 @@ flex-direction: column; padding: 0.5rem; top: 1rem; - right: calc(100% - 0.5rem); + inset-inline-end: calc(100% - 0.5rem); bottom: 1rem; width: fit-content; width: 12rem; @@ -92,7 +92,7 @@ .btn { flex-shrink: 0; - margin-right: 0.75rem; + margin-inline-end: 0.75rem; padding: 0.25rem 0.5rem; background-color: transparent; border-radius: 0.25rem; diff --git a/packages/ui/src/components/calendar/TimeInputBox.svelte b/packages/ui/src/components/calendar/TimeInputBox.svelte index f642db6bc7d..7f0aa97f845 100644 --- a/packages/ui/src/components/calendar/TimeInputBox.svelte +++ b/packages/ui/src/components/calendar/TimeInputBox.svelte @@ -264,7 +264,7 @@ &::after { position: absolute; top: 0; - left: 0; + inset-inline-start: 0; width: 100%; height: 100%; z-index: 11000; diff --git a/packages/ui/src/components/internal/ClockFace.svelte b/packages/ui/src/components/internal/ClockFace.svelte index c9e007335b9..b38a5b44eda 100644 --- a/packages/ui/src/components/internal/ClockFace.svelte +++ b/packages/ui/src/components/internal/ClockFace.svelte @@ -61,7 +61,7 @@ .hour { position: absolute; top: 1px; - left: 50%; + inset-inline-start: 50%; width: 1px; height: calc(var(--clockface-size, 64px) / 32); background: var(--theme-clockface-hours); @@ -97,7 +97,7 @@ .minute-arrow, .hour-arrow { position: absolute; - left: calc(50% - 0.5px); + inset-inline-start: calc(50% - 0.5px); box-shadow: va(--theme-clockface-arrows-shadow); transform: rotate(0deg); } @@ -112,7 +112,7 @@ &::after { content: ''; position: absolute; - left: 50%; + inset-inline-start: 50%; border-radius: 50%; transform: translateX(-50%); } @@ -138,7 +138,7 @@ } .hour-arrow { top: calc(var(--clockface-radius) * 0.5); - left: calc(50% - 1px); + inset-inline-start: calc(50% - 1px); width: 3px; height: var(--clockface-hour-arrow); background: var(--theme-clockface-min-arrow); diff --git a/packages/ui/src/components/internal/Root.svelte b/packages/ui/src/components/internal/Root.svelte index 3ef85713c2f..bd7ea9cc691 100644 --- a/packages/ui/src/components/internal/Root.svelte +++ b/packages/ui/src/components/internal/Root.svelte @@ -332,7 +332,7 @@ .history-box { -webkit-app-region: no-drag; - margin-left: var(--huly-history-box-left-indent, 4.625rem); + margin-inline-start: var(--huly-history-box-left-indent, 4.625rem); } .maintenanceScheduled { padding: 0 0.5rem; diff --git a/packages/ui/src/components/internal/SettingsPopup.svelte b/packages/ui/src/components/internal/SettingsPopup.svelte index 18926bfefc5..464c1839562 100644 --- a/packages/ui/src/components/internal/SettingsPopup.svelte +++ b/packages/ui/src/components/internal/SettingsPopup.svelte @@ -82,7 +82,8 @@ { id: 'de', label: ui.string.German, logo: '🇩🇪' }, { id: 'ja', label: ui.string.Japanese, logo: '🇯🇵' }, { id: 'ko', label: ui.string.Korean, logo: '🇰🇷' }, - { id: 'tr', label: ui.string.Turkish, logo: '🇹🇷' } + { id: 'tr', label: ui.string.Turkish, logo: '🇹🇷' }, + { id: 'ar', label: ui.string.Arabic, logo: '🇸🇦' } ].filter((lang) => uiLangs.has(lang.id)) if (langs.findIndex((l) => l.id === $currentLanguage) < 0 && langs.length !== 0) { diff --git a/packages/ui/src/components/internal/ThemeButton.svelte b/packages/ui/src/components/internal/ThemeButton.svelte index 45e365825b5..73db0e88d3c 100644 --- a/packages/ui/src/components/internal/ThemeButton.svelte +++ b/packages/ui/src/components/internal/ThemeButton.svelte @@ -52,7 +52,7 @@ :global(.statusPopupThemeButton svg.check) { position: absolute; bottom: 3px; - right: 3px; + inset-inline-end: 3px; width: 16px; height: 16px; } @@ -71,7 +71,7 @@ color: #000000cc; background-color: #fff; border-top: 1px solid rgba(0, 0, 0, 0.2); - border-left: 1px solid rgba(0, 0, 0, 0.2); + border-inline-start: 1px solid rgba(0, 0, 0, 0.2); } } .dark-container { @@ -81,7 +81,7 @@ color: #ffffffcc; background-color: #161516; border-top: 1px solid rgba(255, 255, 255, 0.2); - border-left: 1px solid rgba(255, 255, 255, 0.2); + border-inline-start: 1px solid rgba(255, 255, 255, 0.2); } } .light-container, @@ -98,7 +98,7 @@ } &.both { .light-container { - border-right: none; + border-inline-end: none; border-radius: 5.75px 0 0 5.75px; } .dark-container { diff --git a/packages/ui/src/components/notifications/Notifications.svelte b/packages/ui/src/components/notifications/Notifications.svelte index 2252d7dcbdb..220036090b9 100644 --- a/packages/ui/src/components/notifications/Notifications.svelte +++ b/packages/ui/src/components/notifications/Notifications.svelte @@ -30,24 +30,24 @@ .top-left { position: fixed; top: 0; - left: 0; + inset-inline-start: 0; } .top-right { position: fixed; top: 0; - right: 0; + inset-inline-end: 0; } .bottom-left { position: fixed; bottom: 0; - left: 0; + inset-inline-start: 0; } .bottom-right { position: fixed; bottom: 0; - right: 0; + inset-inline-end: 0; } diff --git a/packages/ui/src/components/wizard/WizardStep.svelte b/packages/ui/src/components/wizard/WizardStep.svelte index 752bf54c974..8882e8d96c0 100644 --- a/packages/ui/src/components/wizard/WizardStep.svelte +++ b/packages/ui/src/components/wizard/WizardStep.svelte @@ -129,8 +129,8 @@ justify-content: center; align-items: center; top: 0; - left: 0.5rem; - right: 0.5rem; + inset-inline-start: 0.5rem; + inset-inline-end: 0.5rem; min-width: 0; width: calc(100% - 1rem); height: 100%; diff --git a/packages/ui/src/plugin.ts b/packages/ui/src/plugin.ts index cf078edf597..f66a47496af 100644 --- a/packages/ui/src/plugin.ts +++ b/packages/ui/src/plugin.ts @@ -84,6 +84,7 @@ export const uis = plugin(uiId, { Japanese: '' as IntlString, Korean: '' as IntlString, Turkish: '' as IntlString, + Arabic: '' as IntlString, PortugueseBrazil: '' as IntlString, MinutesBefore: '' as IntlString, HoursBefore: '' as IntlString, diff --git a/plugins/achievement-assets/lang/ar.json b/plugins/achievement-assets/lang/ar.json new file mode 100644 index 00000000000..5113690e254 --- /dev/null +++ b/plugins/achievement-assets/lang/ar.json @@ -0,0 +1,8 @@ +{ + "string": { + "Achievements": "الإنجازات", + "EarliestAdopter": "أول المنضمين", + "Epic": "ملحمي", + "Legendary": "أسطوري" + } +} diff --git a/plugins/activity-assets/lang/ar.json b/plugins/activity-assets/lang/ar.json new file mode 100644 index 00000000000..0df8e30364a --- /dev/null +++ b/plugins/activity-assets/lang/ar.json @@ -0,0 +1,61 @@ +{ + "string": { + "Activity": "النشاط", + "Added": "أضاف", + "All": "الكل", + "AllActivity": "كل النشاط", + "Attributes": "السمات", + "Changed": "غيّر", + "CollectionUpdated": "تحديث {collection}", + "Created": "أنشأ", + "DocAdded": "أضاف {_class}", + "DocCreated": "أنشأ {_class}", + "DocDeleted": "حذف {_class}", + "Edit": "تعديل", + "Edited": "مُعدّل", + "Emoji": "إيموجي", + "For": "لـ", + "From": "من", + "In": "في", + "At": "في", + "LastReply": "آخر رد", + "New": "جديد", + "NewestFirst": "الأحدث أولاً", + "Pinned": "مثبّت", + "Reacted": "تفاعل", + "Reactions": "التفاعلات", + "Reaction": "تفاعل", + "Removed": "أزال", + "Replies": "الردود", + "RepliesCount": "{replies, plural, =1 {# رد} other {# ردود}}", + "Set": "عيّن", + "To": "إلى", + "Unset": "إلغاء التعيين", + "Update": "تحديث", + "Updated": "مُحدّث", + "UpdatedCollection": "مُحدّث", + "Message": "رسالة", + "Mentioned": "أشار", + "You": "أنت", + "Mentions": "الإشارات", + "MentionedYouIn": "أشار إليك في {title}", + "Messages": "الرسائل", + "Thread": "المحادثة", + "AddReaction": "إضافة تفاعل", + "SaveForLater": "حفظ لوقت لاحق", + "RemoveFromLater": "إزالة من المحفوظات", + "ReactionNotificationTitle": "تفاعل على {title}", + "ReactionNotificationBody": "{senderName}: {reaction}", + "NewObject": "{object} جديد", + "RemovedObject": "تمت إزالة {object}", + "ChangedObject": "تم تغيير {object}", + "UnsetObject": "تم إلغاء تعيين {object}", + "UpdatedObject": "تم تحديث {object}", + "NewObjectType": "{type} جديد: {title}", + "RemovedObjectType": "تمت إزالة {type} : {title}", + "AddedTag": "تمت إضافة وسم: {title}", + "RemovedTag": "تمت إزالة وسم: {title}", + "AttributeSetTo": "تم تعيين {name} إلى {value}", + "ValueTooLarge": "القيمة كبيرة جداً بحيث لا يمكن عرضها" + } +} diff --git a/plugins/activity-resources/src/components/ActivityDocLink.svelte b/plugins/activity-resources/src/components/ActivityDocLink.svelte index 08b0ad553f4..f8134340cdb 100644 --- a/plugins/activity-resources/src/components/ActivityDocLink.svelte +++ b/plugins/activity-resources/src/components/ActivityDocLink.svelte @@ -35,7 +35,7 @@ diff --git a/plugins/activity-resources/src/components/Replies.svelte b/plugins/activity-resources/src/components/Replies.svelte index 60415a948b7..478420424c7 100644 --- a/plugins/activity-resources/src/components/Replies.svelte +++ b/plugins/activity-resources/src/components/Replies.svelte @@ -134,11 +134,11 @@ border-radius: 0.5rem; padding: 0.25rem 0.5rem; height: 2.125rem; - margin-left: -0.5rem; + margin-inline-start: -0.5rem; min-width: 14.5rem; .plus { - margin-left: 0.25rem; + margin-inline-start: 0.25rem; } .repliesCount { @@ -151,11 +151,11 @@ .lastReply { flex: 1; font-size: 0.75rem; - margin-right: 0.25rem; + margin-inline-end: 0.25rem; } .notifyMarker { - margin-right: 0.25rem; + margin-inline-end: 0.25rem; width: 0.425rem; height: 0.425rem; border-radius: 50%; diff --git a/plugins/activity-resources/src/components/activity-message/ActivityMessageHeader.svelte b/plugins/activity-resources/src/components/activity-message/ActivityMessageHeader.svelte index 6b6c3d313e3..485045575a5 100644 --- a/plugins/activity-resources/src/components/activity-message/ActivityMessageHeader.svelte +++ b/plugins/activity-resources/src/components/activity-message/ActivityMessageHeader.svelte @@ -60,7 +60,7 @@ diff --git a/plugins/activity-resources/src/components/doc-update-message/DocUpdateMessageHeader.svelte b/plugins/activity-resources/src/components/doc-update-message/DocUpdateMessageHeader.svelte index 20a2275b1c2..bb0e5e0d665 100644 --- a/plugins/activity-resources/src/components/doc-update-message/DocUpdateMessageHeader.svelte +++ b/plugins/activity-resources/src/components/doc-update-message/DocUpdateMessageHeader.svelte @@ -84,7 +84,7 @@ diff --git a/plugins/activity-resources/src/components/doc-update-message/DocUpdateMessagePreview.svelte b/plugins/activity-resources/src/components/doc-update-message/DocUpdateMessagePreview.svelte index 1e3764af17a..7da242c7a18 100644 --- a/plugins/activity-resources/src/components/doc-update-message/DocUpdateMessagePreview.svelte +++ b/plugins/activity-resources/src/components/doc-update-message/DocUpdateMessagePreview.svelte @@ -144,10 +144,10 @@ overflow: hidden; max-height: 1.25rem; color: var(--global-primary-TextColor); - margin-left: var(--spacing-0_5); + margin-inline-start: var(--spacing-0_5); &.contentOnly { - margin-left: 0; + margin-inline-start: 0; } } diff --git a/plugins/activity-resources/src/components/doc-update-message/attributes/SetAttributesPresenter.svelte b/plugins/activity-resources/src/components/doc-update-message/attributes/SetAttributesPresenter.svelte index 5dc87f8c750..1d5a6cfc5e2 100644 --- a/plugins/activity-resources/src/components/doc-update-message/attributes/SetAttributesPresenter.svelte +++ b/plugins/activity-resources/src/components/doc-update-message/attributes/SetAttributesPresenter.svelte @@ -113,13 +113,13 @@ &.left { border-top: 0.25rem solid transparent; border-bottom: 0.25rem solid transparent; - border-left: 0.25rem solid var(--global-primary-LinkColor); - border-right: none; + border-inline-start: 0.25rem solid var(--global-primary-LinkColor); + border-inline-end: none; } &.down { - border-left: 0.25rem solid transparent; - border-right: 0.25rem solid transparent; + border-inline-start: 0.25rem solid transparent; + border-inline-end: 0.25rem solid transparent; border-top: 0.25rem solid var(--global-primary-LinkColor); border-bottom: none; } @@ -130,7 +130,7 @@ .triangle { &.left { - border-left-color: var(--global-focus-BorderColor); + border-inline-start-color: var(--global-focus-BorderColor); } &.down { diff --git a/plugins/activity-resources/src/components/reactions/Reactions.svelte b/plugins/activity-resources/src/components/reactions/Reactions.svelte index 186c7dca1ab..fc10d0b29d5 100644 --- a/plugins/activity-resources/src/components/reactions/Reactions.svelte +++ b/plugins/activity-resources/src/components/reactions/Reactions.svelte @@ -111,7 +111,7 @@ .counter { font-size: 0.75rem; color: var(--global-secondary-TextColor); - margin-left: 0.25rem; + margin-inline-start: 0.25rem; } .hulyReactions-button { diff --git a/plugins/activity-resources/src/components/reactions/ReactionsPreview.svelte b/plugins/activity-resources/src/components/reactions/ReactionsPreview.svelte index 4baa5a5acfa..cc02035f214 100644 --- a/plugins/activity-resources/src/components/reactions/ReactionsPreview.svelte +++ b/plugins/activity-resources/src/components/reactions/ReactionsPreview.svelte @@ -84,6 +84,6 @@ .preview { cursor: pointer; white-space: nowrap; - margin-left: 0.5rem; + margin-inline-start: 0.5rem; } diff --git a/plugins/ai-assistant-assets/lang/ar.json b/plugins/ai-assistant-assets/lang/ar.json new file mode 100644 index 00000000000..d46a95adcf8 --- /dev/null +++ b/plugins/ai-assistant-assets/lang/ar.json @@ -0,0 +1,13 @@ +{ + "string": { + "IntegrationLabel": "المساعد الذكي", + "IntegrationDescription": "مساعدك الشخصي المدعوم بالذكاء الاصطناعي الذي يساعدك على تنظيم سير عملك اليومي وأتمتته وتبسيطه عبر المنصة", + "ConfigLabel": "المساعد الذكي", + "ConfigDescription": "مساعد شخصي مدعوم بالذكاء الاصطناعي", + "Connect": "اتصال", + "Cancel": "إلغاء", + "Status": "الحالة", + "FailedToConnect": "خدمة المساعد الذكي غير متاحة", + "Configure": "تهيئة المساعد الذكي" + } +} diff --git a/plugins/analytics-collector-assets/lang/ar.json b/plugins/analytics-collector-assets/lang/ar.json new file mode 100644 index 00000000000..444520a3731 --- /dev/null +++ b/plugins/analytics-collector-assets/lang/ar.json @@ -0,0 +1,22 @@ +{ + "string": { + "OnboardingChannelDescription": "المستخدم: {user}؛ مساحة العمل: {workspace}", + "Error": "خطأ: ", + "InProject": " في المشروع ", + "NavigateToSpecial": "{app}: فتح {special}", + "OpenSpecial": "فتح {special} ", + "Set": "تعيين ", + "To": " إلى ", + "Open": "فتح ", + "Workbench": "منضدة العمل: ", + "OnboardingChannel": "قناة الإعداد", + "OnboardingChannels": "قنوات الإعداد", + "WorkspaceId": "معرّف مساحة العمل", + "WorkspaceName": "اسم مساحة العمل", + "WorkspaceUrl": "عنوان URL لمساحة العمل", + "Account": "الحساب", + "UserName": "اسم المستخدم", + "DisableAIReplies": "تعطيل ردود الذكاء الاصطناعي", + "ShowAIReplies": "إظهار ردود الذكاء الاصطناعي" + } +} diff --git a/plugins/attachment-assets/lang/ar.json b/plugins/attachment-assets/lang/ar.json new file mode 100644 index 00000000000..aa422d28927 --- /dev/null +++ b/plugins/attachment-assets/lang/ar.json @@ -0,0 +1,59 @@ +{ + "string": { + "UploadDropFilesHere": "ارفع الملفات أو أفلتها هنا", + "NoAttachments": "لا توجد مرفقات لهذا العنصر", + "NoParticipants": "لم تتم إضافة مشاركين", + "AddAttachment": "رفع مرفقًا", + "Attachments": "المرفقات", + "Photos": "الصور", + "File": "ملف", + "Files": "الملفات", + "NoFiles": "لا توجد ملفات", + "ShowMoreAttachments": "عرض المزيد", + "Type": "النوع", + "Size": "الحجم", + "Photo": "صورة", + "Date": "التاريخ", + "LastModified": "آخر تعديل", + "Name": "الاسم", + "FileBrowser": "متصفح الملفات", + "FileBrowserFileCounter": "{results, plural, =1 {# نتيجة} other {# نتائج}}", + "FileBrowserListView": "قائمة", + "FileBrowserGridView": "شبكة", + "FileBrowserFilterFrom": "من", + "FileBrowserFilterIn": "في", + "FileBrowserFilterDate": "التاريخ", + "FileBrowserFilterFileType": "نوع الملف", + "FileBrowserSort": "ترتيب", + "FileBrowserSortNewest": "الأحدث", + "FileBrowserSortOldest": "الأقدم", + "FileBrowserSortAZ": "من أ إلى ي", + "FileBrowserSortZA": "من ي إلى أ", + "FileBrowserSortSmallest": "الأصغر حجمًا", + "FileBrowserSortBiggest": "الأكبر حجمًا", + "FileBrowserDateFilterAny": "أي وقت", + "FileBrowserDateFilterToday": "اليوم", + "FileBrowserDateFilterYesterday": "أمس", + "FileBrowserDateFilter7Days": "آخر 7 أيام", + "FileBrowserDateFilter30Days": "آخر 30 يومًا", + "FileBrowserDateFilter3Months": "آخر 3 أشهر", + "FileBrowserDateFilter12Months": "آخر 12 شهرًا", + "FileBrowserTypeFilterAny": "أي نوع ملف", + "FileBrowserTypeFilterImages": "الصور", + "FileBrowserTypeFilterAudio": "الصوت", + "FileBrowserTypeFilterVideos": "الفيديو", + "FileBrowserTypeFilterPDFs": "ملفات PDF", + "AddAttachmentToSaved": "إضافة المرفق إلى المحفوظات", + "RemoveAttachmentFromSaved": "إزالة المرفق من المحفوظات", + "DeleteFile": "حذف الملف", + "Description": "الوصف", + "Pinned": "مهم", + "PinAttachment": "وضع علامة كمهم", + "UnPinAttachment": "وضع علامة كأقل أهمية", + "FilterAttachments": "المرفقات", + "RemovedAttachment": "تمت إزالة المرفق", + "ContentType": "نوع المحتوى", + "OpenInWindow": "فتح في نافذة", + "Embeddings": "التضمينات" + } +} diff --git a/plugins/attachment-resources/src/components/AttachmentGalleryPresenter.svelte b/plugins/attachment-resources/src/components/AttachmentGalleryPresenter.svelte index 666e4d3767c..2a9f2d74eac 100644 --- a/plugins/attachment-resources/src/components/AttachmentGalleryPresenter.svelte +++ b/plugins/attachment-resources/src/components/AttachmentGalleryPresenter.svelte @@ -152,14 +152,14 @@ .eCellInfoData { display: flex; flex-direction: column; - margin-left: 1rem; + margin-inline-start: 1rem; } .eCellInfoMenu { - margin-left: auto; + margin-inline-start: auto; position: absolute; bottom: 1rem; - right: 0.5rem; + inset-inline-end: 0.5rem; } .eCellInfoFilename { diff --git a/plugins/attachment-resources/src/components/AttachmentImagePreview.svelte b/plugins/attachment-resources/src/components/AttachmentImagePreview.svelte index 9fb081d82d7..5c310a68d85 100644 --- a/plugins/attachment-resources/src/components/AttachmentImagePreview.svelte +++ b/plugins/attachment-resources/src/components/AttachmentImagePreview.svelte @@ -106,7 +106,7 @@ .image-overlay { position: absolute; top: 0; - left: 0; + inset-inline-start: 0; width: 100%; height: 100%; display: flex; diff --git a/plugins/attachment-resources/src/components/AttachmentPopup.svelte b/plugins/attachment-resources/src/components/AttachmentPopup.svelte index 799ccce04fd..cf0bea76e48 100644 --- a/plugins/attachment-resources/src/components/AttachmentPopup.svelte +++ b/plugins/attachment-resources/src/components/AttachmentPopup.svelte @@ -137,8 +137,8 @@ .header { border-bottom: 1px solid var(--theme-divider-color); padding: 1rem 1.5rem; - margin-right: -0.5rem; - margin-left: -0.5rem; + margin-inline-end: -0.5rem; + margin-inline-start: -0.5rem; margin-bottom: 1rem; } diff --git a/plugins/attachment-resources/src/components/AttachmentPresenter.svelte b/plugins/attachment-resources/src/components/AttachmentPresenter.svelte index 43ede45b2c7..7c492c52486 100644 --- a/plugins/attachment-resources/src/components/AttachmentPresenter.svelte +++ b/plugins/attachment-resources/src/components/AttachmentPresenter.svelte @@ -283,7 +283,7 @@ height: 100%; background-color: var(--theme-button-default); border: 1px solid var(--theme-button-border); - border-left: none; + border-inline-start: none; border-radius: 0 0.25rem 0.25rem 0; } .no-line:hover ~ .info-container, diff --git a/plugins/attachment-resources/src/components/AttachmentPreview.svelte b/plugins/attachment-resources/src/components/AttachmentPreview.svelte index f6cd7777fb9..200174c252f 100644 --- a/plugins/attachment-resources/src/components/AttachmentPreview.svelte +++ b/plugins/attachment-resources/src/components/AttachmentPreview.svelte @@ -87,14 +87,14 @@ height: fit-content; &.extraWidth { - padding-right: 2.5rem; + padding-inline-end: 2.5rem; } .actions { visibility: hidden; position: absolute; top: 0.25rem; - right: 0.25rem; + inset-inline-end: 0.25rem; padding: 0.125rem; background-color: var(--theme-comp-header-color); border: 1px solid var(--theme-divider-color); diff --git a/plugins/attachment-resources/src/components/AttachmentRefInput.svelte b/plugins/attachment-resources/src/components/AttachmentRefInput.svelte index d97660caa00..3ef85450eb7 100644 --- a/plugins/attachment-resources/src/components/AttachmentRefInput.svelte +++ b/plugins/attachment-resources/src/components/AttachmentRefInput.svelte @@ -557,8 +557,8 @@ overflow-y: hidden; .item + .item { - padding-left: 1rem; - border-left: 1px solid var(--theme-divider-color); + padding-inline-start: 1rem; + border-inline-start: 1px solid var(--theme-divider-color); } } diff --git a/plugins/attachment-resources/src/components/AttachmentsGalleryView.svelte b/plugins/attachment-resources/src/components/AttachmentsGalleryView.svelte index d74e264b6de..daec9a990e9 100644 --- a/plugins/attachment-resources/src/components/AttachmentsGalleryView.svelte +++ b/plugins/attachment-resources/src/components/AttachmentsGalleryView.svelte @@ -89,7 +89,7 @@ .eAttachmentCellMenu { visibility: hidden; - margin-left: 0.2rem; + margin-inline-start: 0.2rem; opacity: 0.6; cursor: pointer; diff --git a/plugins/attachment-resources/src/components/AttachmentsListView.svelte b/plugins/attachment-resources/src/components/AttachmentsListView.svelte index ea870418fc2..d91b02511a8 100644 --- a/plugins/attachment-resources/src/components/AttachmentsListView.svelte +++ b/plugins/attachment-resources/src/components/AttachmentsListView.svelte @@ -86,7 +86,7 @@ .eAttachmentRowMenu { visibility: hidden; - margin-left: 0.2rem; + margin-inline-start: 0.2rem; opacity: 0.6; cursor: pointer; diff --git a/plugins/attachment-resources/src/components/LinkPreview.svelte b/plugins/attachment-resources/src/components/LinkPreview.svelte index 5137d577884..4ddd5b3c8ab 100644 --- a/plugins/attachment-resources/src/components/LinkPreview.svelte +++ b/plugins/attachment-resources/src/components/LinkPreview.svelte @@ -115,7 +115,7 @@ } .link-preview__delete-button { - margin-left: auto; + margin-inline-start: auto; cursor: pointer; visibility: hidden; diff --git a/plugins/attachment-resources/src/components/LinkPreviewCard.svelte b/plugins/attachment-resources/src/components/LinkPreviewCard.svelte index d21bfbf2e3d..78ed7055d79 100644 --- a/plugins/attachment-resources/src/components/LinkPreviewCard.svelte +++ b/plugins/attachment-resources/src/components/LinkPreviewCard.svelte @@ -118,7 +118,7 @@ height: 100%; background-color: var(--theme-button-default); border: 1px solid var(--theme-button-border); - border-left: none; + border-inline-start: none; border-radius: 0 0.25rem 0.25rem 0; } .no-line:hover ~ .info-container, diff --git a/plugins/attachment-resources/src/components/LinkPreviewPresenter.svelte b/plugins/attachment-resources/src/components/LinkPreviewPresenter.svelte index a3347653f5c..8250eaa55b2 100644 --- a/plugins/attachment-resources/src/components/LinkPreviewPresenter.svelte +++ b/plugins/attachment-resources/src/components/LinkPreviewPresenter.svelte @@ -150,7 +150,7 @@ } .link-preview__delete-button { - margin-left: auto; + margin-inline-start: auto; cursor: pointer; visibility: hidden; diff --git a/plugins/attachment-resources/src/components/Photos.svelte b/plugins/attachment-resources/src/components/Photos.svelte index eea1aafb26c..73239d4e03c 100644 --- a/plugins/attachment-resources/src/components/Photos.svelte +++ b/plugins/attachment-resources/src/components/Photos.svelte @@ -176,7 +176,7 @@ min-height: 5rem; } &:not(:last-child) { - margin-right: 0.625rem; + margin-inline-end: 0.625rem; } } diff --git a/plugins/billing-assets/lang/ar.json b/plugins/billing-assets/lang/ar.json new file mode 100644 index 00000000000..c238034642d --- /dev/null +++ b/plugins/billing-assets/lang/ar.json @@ -0,0 +1,63 @@ +{ + "string": { + "Billing": "الفوترة", + "Subscriptions": "الاشتراكات", + "AllPlans": "جميع الخطط", + "ActivePlan": "الخطة النشطة", + "ResourceUsage": "استخدام الموارد", + "DriveSize": "حجم الملفات", + "DriveCount": "عدد الملفات", + "OfficeSessionsDuration": "مدة الاجتماعات", + "OfficeSessionsBandwidth": "عرض نطاق الاجتماعات", + "OfficeEgressDuration": "مدة التسجيل", + "AI": "الذكاء الاصطناعي", + "TranscriptionTime": "وقت التفريغ النصي", + "TotalTokens": "إجمالي الرموز", + "Tier": "المستوى", + "StorageLimit": "{limit} {unit} تخزين", + "TrafficLimit": "{limit} {unit} حركة بيانات فيديو/صوت", + "Common": "Common", + "CommonDescription": "للأفراد والفرق الذين يبدأون رحلتهم مع Huly.", + "Rare": "Rare", + "RareDescription": "للمبدعين الأفراد والمستقلين والوكالات المصغّرة.", + "Epic": "Epic", + "EpicDescription": "للشركات الإبداعية الاحترافية والأعمال الصغيرة.", + "Legendary": "Legendary", + "LegendaryDescription": "الأفضل للفرق الكبيرة المتعددة التي تحتاج إلى أقصى الإمكانات.", + "UnlimitedUsers": "مستخدمون بلا حدود", + "UnlimitedObjects": "كائنات Huly بلا حدود", + "ChangePlan": "تغيير الخطة", + "Subscribe": "اشتراك", + "Monthly": "شهري", + "Active": "نشط", + "NoActivePlan": "لا توجد خطة نشطة", + "SelectPlanToBegin": "اختر خطة من الأسفل للبدء", + "SubscriptionEnds": "حتى {date}", + "SubscriptionRenews": "التجديد التالي: {date}", + "SubscriptionValidUntil": "صالح حتى {date}", + "ProcessingPayment": "جارٍ معالجة الدفع...", + "Downgrade": "تخفيض الخطة", + "CancelSubscription": "إلغاء الاشتراك", + "ConfirmUpgrade": "ترقية الاشتراك؟", + "ConfirmDowngrade": "تخفيض الاشتراك؟", + "ConfirmCancel": "إلغاء الاشتراك؟", + "UpgradeDescription": "سيتم محاسبتك بمبلغ يصل إلى ${amount} فورًا. يعتمد المبلغ الدقيق على فترة الفوترة الحالية لديك.", + "DowngradeDescription": "ستحصل على رصيد يصل إلى ${amount} مقابل المدة المتبقية من الاشتراك. يسري التخفيض فورًا.", + "CancelDescription": "سيبقى اشتراكك نشطًا حتى نهاية فترة الفوترة.", + "UncancelSubscription": "إعادة تفعيل الاشتراك", + "ConfirmUncancel": "إعادة تفعيل الاشتراك؟", + "UncancelDescription": "ستتم إعادة تفعيل اشتراكك ومتابعته من نهاية فترة الفوترة الحالية.", + "PriceDifference": "فرق السعر: {amount}", + "DialogCancel": "إلغاء", + "DialogConfirm": "تأكيد", + "StorageUsage": "التخزين", + "TrafficUsage": "حركة بيانات الفيديو/الصوت", + "Usage": "الاستخدام", + "Of": "من", + "UpgradePlan": "ترقية الخطة", + "LimitReached": "تم الوصول إلى حد مساحة العمل، وقد تتعطل بعض الوظائف. قم بالترقية لاستعادة الوصول الكامل.", + "RestrictedPlans": "يمكن فقط لمالك مساحة العمل أو مدير الفوترة تغيير خطة الاشتراك", + "SubscriptionOperationFailed": "فشلت عملية الاشتراك", + "SubscriptionErrorMessage": "حدث خطأ ما. يُرجى المحاولة مرة أخرى أو التواصل مع الدعم." + } +} diff --git a/plugins/bitrix-assets/lang/ar.json b/plugins/bitrix-assets/lang/ar.json new file mode 100644 index 00000000000..264486d7f7a --- /dev/null +++ b/plugins/bitrix-assets/lang/ar.json @@ -0,0 +1,18 @@ +{ + "string": { + "BitrixTokenUrl": "رابط رمز Bitrix24", + "Bitrix": "", + "BitrixDesc": "تكامل Bitrix 24", + "Settings": "تكوين", + "NotAllowed": "غير مسموح بدون صلاحيات إدارية", + "BitrixEntityType": "تعيين الكيانات", + "FieldMapping": "تعيين الحقول", + "AddField": "إضافة تعيين", + "Attribute": "السمة", + "MapField": "تعيين...", + "BitrixImport": "المزامنة مع Bitrix", + "AddMapping": "إضافة تعيين كيان", + "ConfigLabel": "Bitrix24", + "ConfigDescription": "ملحق لتكامل Bitrix 24" + } +} diff --git a/plugins/board-assets/lang/ar.json b/plugins/board-assets/lang/ar.json new file mode 100644 index 00000000000..3a38e98bd86 --- /dev/null +++ b/plugins/board-assets/lang/ar.json @@ -0,0 +1,107 @@ +{ + "string": { + "Completed": "مكتمل", + "Name": "الاسم", + "CreateBoard": "إنشاء لوحة", + "OpenCard": "فتح البطاقة", + "CreateCard": "إنشاء بطاقة", + "CardName": "اسم البطاقة", + "Cards": "البطاقات", + "SelectBoard": "اختيار لوحة", + "More": "المزيد...", + "Title": "العنوان", + "ManageBoardStatuses": "إدارة حالات اللوحة", + "BoardName": "اللوحة", + "CardCreateLabel": "بطاقة", + "CardPlaceholder": "عنصر نائب للبطاقة", + "Board": "اللوحة", + "Boards": "اللوحات", + "MyBoards": "لوحاتي", + "BoardApplication": "اللوحات", + "Card": "البطاقة", + "Assignee": "المُسنَد إليه", + "Description": "الوصف", + "DescriptionPlaceholder": "أضف وصفًا أكثر تفصيلًا...", + "Location": "الموقع", + "Members": "الأعضاء", + "IsArchived": "مؤرشف", + "BoardCreateLabel": "لوحة", + "Settings": "الإعدادات", + "Suggested": "مقترح", + "Labels": "التسميات", + "CreateLabel": "إنشاء تسمية جديدة", + "SearchLabels": "البحث في التسميات...", + "SelectColor": "اختيار لون", + "NoColor": "بلا لون.", + "NoColorInfo": "لن يظهر هذا على واجهة البطاقات.", + "Checklists": "قوائم المهام", + "ChecklistDropdownNone": "(بلا)", + "ShowDoneChecklistItems": "عرض العناصر المحددة ({done})", + "HideDoneChecklistItems": "إخفاء العناصر المحددة", + "CopyChecklistFrom": "نسخ العناصر من...", + "Dates": "التواريخ", + "Attachments": "المرفقات", + "AddAttachment": "إضافة مرفق", + "DropFileToUpload": "أفلت الملفات للرفع.", + "AttachFrom": "إرفاق من...", + "AttachmentTip": "تلميح: يمكنك سحب الملفات وإفلاتها على البطاقات لرفعها.", + "Computer": "الحاسوب", + "CustomFields": "حقول مخصصة", + "AddButton": "إضافة زر", + "Actions": "الإجراءات", + "Cover": "الغلاف", + "Join": "انضمام", + "Move": "نقل", + "Copy": "نسخ", + "MakeTemplate": "إنشاء قالب", + "Archive": "أرشفة", + "SendToBoard": "إرسال إلى اللوحة", + "Delete": "حذف", + "HideDetails": "إخفاء التفاصيل", + "ShowDetails": "عرض التفاصيل", + "NewList": "إضافة قائمة أخرى", + "AddList": "إضافة قائمة", + "NewListPlaceholder": "أدخل عنوان القائمة...", + "AddACard": "إضافة بطاقة", + "AddCard": "إضافة بطاقة", + "CardTitlePlaceholder": "أدخل عنوانًا لهذه البطاقة...", + "MoveCard": "نقل البطاقة", + "SelectDestination": "اختيار الوجهة", + "Create": "إنشاء", + "CreateDescription": "إذا أردت، يمكننا إنشاء بطاقة لكل سطر جديد ({number}). كما يمكنك إنشاء بطاقة واحدة بعنوان طويل.", + "CreateSingle": "بطاقة واحدة فقط", + "CreateMultiple": "إنشاء {number} بطاقة", + "Cancel": "إلغاء", + "List": "القائمة", + "Position": "الموضع", + "Current": "{label} (الحالي)", + "Save": "حفظ", + "Remove": "إزالة", + "NullDate": "M/D/YYYY", + "ViewProfile": "عرض الملف الشخصي", + "RemoveFromCard": "إزالة من البطاقة", + "LinkName": "اسم الرابط", + "Edit": "تعديل", + "Update": "تحديث", + "DeleteAttachment": "حذف المرفق نهائي. لا يمكن التراجع عنه.", + "DeleteCard": "ستتم إزالة جميع الإجراءات من سجل النشاط ولن تتمكن من إعادة فتح البطاقة. لا يمكن التراجع عن ذلك.", + "SearchMembers": "البحث في الأعضاء", + "Menu": "القائمة", + "ShowMenu": "عرض القائمة", + "ToArchive": "أرشفة", + "CopyCard": "نسخ البطاقة", + "AlsoCopy": "الإبقاء على...", + "CopyTo": "نسخ إلى...", + "NoResults": "لا توجد نتائج", + "SwitchToLists": "التبديل إلى القوائم", + "SwitchToCards": "التبديل إلى البطاقات", + "SearchArchive": "البحث في الأرشيف...", + "Size": "الحجم", + "RemoveCover": "إزالة الغلاف", + "DeleteChecklist": "حذف قائمة المهام", + "DeleteChecklistConfirm": "حذف قائمة المهام نهائي ولا توجد طريقة لاستعادتها.", + "ConvertToCard": "تحويل إلى بطاقة", + "ConfigLabel": "اللوحة", + "ConfigDescription": "امتداد لإدارة لوحات Kanban." + } +} diff --git a/plugins/board-resources/src/components/add-card/AddMultipleCardsPopup.svelte b/plugins/board-resources/src/components/add-card/AddMultipleCardsPopup.svelte index 25139baa09f..a03b8cb13a8 100644 --- a/plugins/board-resources/src/components/add-card/AddMultipleCardsPopup.svelte +++ b/plugins/board-resources/src/components/add-card/AddMultipleCardsPopup.svelte @@ -42,7 +42,7 @@ .close-icon { position: absolute; top: 0.75rem; - right: 0.75rem; + inset-inline-end: 0.75rem; } .header { diff --git a/plugins/calendar-assets/lang/ar.json b/plugins/calendar-assets/lang/ar.json new file mode 100644 index 00000000000..6ffe9a122e1 --- /dev/null +++ b/plugins/calendar-assets/lang/ar.json @@ -0,0 +1,129 @@ +{ + "string": { + "ApplicationLabelCalendar": "التقويم", + "Calendars": "التقويمات", + "Participants": "المشاركون", + "NoParticipants": "لم تتم إضافة مشاركين", + "PersonsLabel": "{name}", + "AddDescription": "إضافة وصف", + "Date": "التاريخ", + "DueTo": "تاريخ الاستحقاق", + "Description": "الوصف", + "Title": "العنوان", + "Location": "الموقع", + "Company": "الشركة", + "CreateCalendar": "إنشاء تقويم", + "Calendar": "التقويم", + "Events": "الأحداث", + "Event": "حدث", + "ModeDay": "يوم", + "ModeWeek": "أسبوع", + "ModeMonth": "شهر", + "ModeYear": "سنة", + "Today": "اليوم", + "TableView": "جدول", + "DueMinutes": "{minutes, plural, =0 {أقل من دقيقة} =1 {دقيقة واحدة} other {# دقيقة}}", + "DueHours": "{hours, plural, =0 {أقل من ساعة} =1 {ساعة واحدة} other {# ساعة}}", + "DueDays": "{days, plural, =0 {اليوم} =1 {يوم واحد} other {# يوم}}", + "Reminder": "تذكير", + "ReminderTime": "وقت التذكير", + "RemindMeAt": "ذكّرني في", + "CreateReminder": "إنشاء تذكير", + "CreatedReminder": "تم إنشاء تذكير", + "Reminders": "التذكيرات", + "Shift": "الإزاحة", + "State": "الحالة", + "NoReminders": "لا توجد تذكيرات", + "AllDay": "طوال اليوم", + "AndMore": "و{count} أخرى", + "CreateEvent": "إنشاء حدث", + "EventFor": "حدث لـ: ", + "ConfigLabel": "التقويم", + "ConfigDescription": "امتداد لعرض التقويم مع الأحداث", + "HideDetails": "إخفاء التفاصيل", + "ReccuringEvent": "حدث متكرر", + "ExternalParticipants": "مشاركون خارجيون", + "IntegrationDescr": "مزامنة الأحداث والمهام مع Google Calendar الخاص بك", + "Connect": "اتصال", + "RedirectGoogle": "ستتم إعادة توجيهك إلى صفحة مصادقة Google. يُرجى التأكد من تحديد جميع الأذونات.", + "ConnectCalendar": "ربط حساب Google Calendar", + "EditRecEvent": "تحرير الحدث المتكرر", + "RemoveRecEvent": "إزالة الحدث المتكرر", + "ThisEvent": "هذا الحدث", + "ThisAndNext": "هذا الحدث والأحداث التالية", + "AllEvents": "جميع الأحداث", + "EventTitlePlaceholder": "عنوان الحدث", + "TimeZone": "المنطقة الزمنية", + "Repeat": "تكرار", + "On": "في", + "Every": "كل", + "After": "بعد", + "Ends": "ينتهي", + "Never": "أبدًا", + "Day": "يوم", + "Week": "أسبوع", + "Month": "شهر", + "Year": "سنة", + "MondayShort": "إث", + "TuesdayShort": "ثل", + "WednesdayShort": "أر", + "ThursdayShort": "خم", + "FridayShort": "جم", + "SaturdayShort": "سب", + "SundayShort": "أح", + "OnUntil": "في", + "Times": "{count, plural, one {مرة} other {مرات}}", + "AddParticipants": "إضافة مشاركين", + "Sync": "المزامنة", + "Busy": "مشغول", + "AddReminder": "إضافة تذكير", + "SeeAllNumberParticipants": "{value, plural, other {عرض جميع المشاركين #}}", + "SeeAllNumberReminders": "{value, plural, other {عرض جميع التذكيرات #}}", + "Visibility": "الظهور", + "Private": "مرئي لك فقط", + "Public": "مرئي للجميع", + "FreeBusy": "متاح/مشغول", + "DefaultVisibility": "الظهور الافتراضي", + "NotAllPermissions": "لم يتم منح جميع الأذونات", + "GooglePrivacy": "سيلتزم استخدام Huly ونقلها للمعلومات الواردة من Google APIs إلى أي تطبيق آخر بـ سياسة بيانات مستخدمي خدمات Google API، بما في ذلك متطلبات الاستخدام المحدود.", + "Value": "{value}", + "Schedule": "جدول عام", + "ScheduleNew": "إضافة جدول", + "ScheduleDeleteConfirm": "سيتم حذف الجدول. هل تؤكد؟", + "ScheduleShareLink": "مشاركة الرابط", + "ScheduleSharedLinkMessage": "

شارك هذا الرابط للسماح للآخرين بحجز اجتماع معك:

{link}

", + "ScheduleAvailability": "التوفر", + "ScheduleUnavailable": "غير متاح", + "ScheduleTitlePlaceholder": "عنوان الجدول", + "ScheduleAddPeriod": "إضافة فترة", + "ScheduleRemovePeriod": "إزالة الفترة", + "MeetingDuration": "مدة الاجتماع", + "MeetingInterval": "الفاصل بين الاجتماعات", + "CalDavAccess": "وصول CalDAV", + "CalDavAccessPrompt": "يتيح بروتوكول CalDAV مزامنة تقويم Huly الشخصي الخاص بك مع تطبيقات التقويم الخارجية. استخدم هذا الحساب وكلمة المرور المقترحة لتسجيل خادم Huly CalDAV في تطبيق عميل التقويم.", + "CalDavAccessEnable": "تمكين وصول CalDAV إلى التقويم الشخصي في مساحة العمل {ws}", + "CalDavAccessServer": "خادم CalDAV", + "CalDavAccessAccount": "حساب Huly", + "CalDavAccessPassword": "كلمة المرور", + "CalDavAccessPasswordWarning": "لن تتمكن من رؤية كلمة المرور هذه مرة أخرى. يُرجى حفظها في مكان آمن.", + "MeetingScheduledNotification": "تمت جدولة الاجتماع", + "MeetingRescheduledNotification": "تم تغيير وقت الاجتماع", + "MeetingCanceledNotification": "تم إلغاء الاجتماع: {title}", + "PrimaryCalendar": "التقويم الأساسي", + "Hidden": "مخفي", + "Each": "كل", + "OnThe": "في", + "First": "الأول", + "Second": "الثاني", + "Third": "الثالث", + "Fourth": "الرابع", + "Fifth": "الخامس", + "NextToLast": "قبل الأخير", + "Last": "الأخير", + "Weekday": "يوم عمل", + "WeekendDay": "يوم عطلة نهاية الأسبوع", + "SynchronizedCalendars": "التقويمات المتزامنة", + "Account": "الحساب", + "NoCalendars": "لم يتم تحديد تقويمات للمزامنة" + } +} diff --git a/plugins/calendar-resources/src/components/ByDateSelector.svelte b/plugins/calendar-resources/src/components/ByDateSelector.svelte index 3f09e5d82f6..cb71a2b7a76 100644 --- a/plugins/calendar-resources/src/components/ByDateSelector.svelte +++ b/plugins/calendar-resources/src/components/ByDateSelector.svelte @@ -72,13 +72,13 @@ .cell { border-bottom: 1px solid var(--theme-divider-color); - border-right: 1px solid var(--theme-divider-color); + border-inline-end: 1px solid var(--theme-divider-color); display: flex; justify-content: center; align-items: center; &.left-border { - border-left: 1px solid var(--theme-divider-color); + border-inline-start: 1px solid var(--theme-divider-color); } &.top-border { diff --git a/plugins/calendar-resources/src/components/CreateEvent.svelte b/plugins/calendar-resources/src/components/CreateEvent.svelte index c2a8295f18e..6603d9e035d 100644 --- a/plugins/calendar-resources/src/components/CreateEvent.svelte +++ b/plugins/calendar-resources/src/components/CreateEvent.svelte @@ -321,7 +321,7 @@ .top-icon { flex-shrink: 0; margin-top: 1.375rem; - margin-right: 0.125rem; + margin-inline-end: 0.125rem; } } diff --git a/plugins/calendar-resources/src/components/DateEditor.svelte b/plugins/calendar-resources/src/components/DateEditor.svelte index 7ab9bf9da4e..ac0bddde5bc 100644 --- a/plugins/calendar-resources/src/components/DateEditor.svelte +++ b/plugins/calendar-resources/src/components/DateEditor.svelte @@ -203,6 +203,6 @@ .divider { width: 0; height: 1.25rem; - border-left: 1px solid var(--global-ui-BorderColor); + border-inline-start: 1px solid var(--global-ui-BorderColor); } diff --git a/plugins/calendar-resources/src/components/DayCalendar.svelte b/plugins/calendar-resources/src/components/DayCalendar.svelte index 5f821af4aea..3038fe2e17e 100644 --- a/plugins/calendar-resources/src/components/DayCalendar.svelte +++ b/plugins/calendar-resources/src/components/DayCalendar.svelte @@ -1161,8 +1161,8 @@ background-color: var(--highlight-red); } .now-line { - left: 3rem; - right: 0; + inset-inline-start: 3rem; + inset-inline-end: 0; width: 100%; height: 1px; min-height: 1px; @@ -1173,8 +1173,8 @@ &::before { content: ''; top: -0.5rem; - left: -2.75rem; - right: calc(100% - 0.25rem); + inset-inline-start: -2.75rem; + inset-inline-end: calc(100% - 0.25rem); height: 1rem; border-radius: 0.125rem; } @@ -1182,7 +1182,7 @@ position: absolute; content: attr(data-now); top: -0.46rem; - left: -1.25rem; + inset-inline-start: -1.25rem; font-weight: 500; font-size: 0.66rem; color: var(--primary-button-color); @@ -1203,7 +1203,7 @@ } } .empty-cell { - border-left: 1px solid var(--theme-divider-color); + border-inline-start: 1px solid var(--theme-divider-color); border-bottom: 1px solid var(--theme-divider-color); &:not(.weekend) { @@ -1234,8 +1234,8 @@ &-start, &-end { position: absolute; - left: 0; - right: 0; + inset-inline-start: 0; + inset-inline-end: 0; height: 0.25rem; border-radius: 0.5rem; cursor: row-resize; @@ -1243,8 +1243,8 @@ &::after { position: absolute; content: ''; - left: -0.25rem; - right: -0.25rem; + inset-inline-start: -0.25rem; + inset-inline-end: -0.25rem; height: 0.5rem; border: 1px solid transparent; transition-property: opacity, border-width, transform; @@ -1323,7 +1323,7 @@ justify-content: center; } &:not(.center) { - padding-left: var(--spacing-3); + padding-inline-start: var(--spacing-3); } .today { @@ -1388,7 +1388,7 @@ .header-time { position: absolute; top: var(--spacing-0_25); - right: var(--spacing-0_25); + inset-inline-end: var(--spacing-0_25); padding: var(--spacing-0_25) var(--spacing-1); font-size: 0.75rem; color: var(--theme-dark-color); diff --git a/plugins/calendar-resources/src/components/EditEvent.svelte b/plugins/calendar-resources/src/components/EditEvent.svelte index d5da0704399..da99a46566e 100644 --- a/plugins/calendar-resources/src/components/EditEvent.svelte +++ b/plugins/calendar-resources/src/components/EditEvent.svelte @@ -285,7 +285,7 @@ .top-icon { flex-shrink: 0; margin-top: 1.375rem; - margin-right: 0.125rem; + margin-inline-end: 0.125rem; &.disabled { margin-top: 0.875rem; diff --git a/plugins/calendar-resources/src/components/EventElement.svelte b/plugins/calendar-resources/src/components/EventElement.svelte index 413e76126e2..c2a09249157 100644 --- a/plugins/calendar-resources/src/components/EventElement.svelte +++ b/plugins/calendar-resources/src/components/EventElement.svelte @@ -87,7 +87,7 @@ font-size: 0.8125rem; background-color: var(--calendar-event-back-color); border: 1px solid var(--calendar-event-border-color); - border-left: 0.25rem solid var(--calendar-event-handle-color); + border-inline-start: 0.25rem solid var(--calendar-event-handle-color); border-radius: 0.25rem; cursor: pointer; padding: 0.25rem 0.5rem 0.25rem 1rem; diff --git a/plugins/calendar-resources/src/components/MonthSelector.svelte b/plugins/calendar-resources/src/components/MonthSelector.svelte index 597b1ee7167..a084b003e6f 100644 --- a/plugins/calendar-resources/src/components/MonthSelector.svelte +++ b/plugins/calendar-resources/src/components/MonthSelector.svelte @@ -63,13 +63,13 @@ .cell { border-bottom: 1px solid var(--theme-divider-color); - border-right: 1px solid var(--theme-divider-color); + border-inline-end: 1px solid var(--theme-divider-color); display: flex; justify-content: center; align-items: center; &.left-border { - border-left: 1px solid var(--theme-divider-color); + border-inline-start: 1px solid var(--theme-divider-color); } &.top-border { diff --git a/plugins/calendar-resources/src/components/ScheduleEditor.svelte b/plugins/calendar-resources/src/components/ScheduleEditor.svelte index d2894cddc78..69b780cb1b7 100644 --- a/plugins/calendar-resources/src/components/ScheduleEditor.svelte +++ b/plugins/calendar-resources/src/components/ScheduleEditor.svelte @@ -481,7 +481,7 @@ .top-icon { flex-shrink: 0; margin-top: 1.375rem; - margin-right: 0.125rem; + margin-inline-end: 0.125rem; } .weekDay { diff --git a/plugins/card-assets/lang/ar.json b/plugins/card-assets/lang/ar.json new file mode 100644 index 00000000000..92c88d21590 --- /dev/null +++ b/plugins/card-assets/lang/ar.json @@ -0,0 +1,90 @@ +{ + "string": { + "Card": "بطاقة", + "CardApplication": "البطاقات", + "Cards": "البطاقات", + "Content": "المحتوى", + "CreateCard": "إنشاء بطاقة", + "AllowCreatingCards": "السماح بإنشاء البطاقات", + "CreateMasterTag": "إنشاء نوع", + "CreateTag": "إنشاء وسم", + "MasterTag": "النوع", + "MasterTags": "الأنواع", + "Parent": "الأصل", + "Tags": "الوسوم", + "Tag": "وسم", + "AddTag": "إضافة وسم", + "CardLibrary": "مكتبة البطاقات", + "MinimizeAll": "تصغير الكل", + "ExpandAll": "توسيع الكل", + "DeleteTag": "حذف الوسم", + "TagRelations": "علاقات الوسم", + "DeleteTagConfirm": "هل أنت متأكد من رغبتك في حذف هذا الوسم؟ سيتم حذف جميع الخصائص المرتبطة به", + "DeleteMasterTag": "حذف النوع", + "DeleteMasterTagConfirm": "هل أنت متأكد من رغبتك في حذف هذا النوع؟ سيتم حذف جميع الكائنات المرتبطة بهذا النوع", + "UnsetParent": "إلغاء تعيين الأصل", + "SetParent": "تعيين الأصل", + "CreateChild": "إنشاء عنصر فرعي", + "Children": "العناصر الفرعية", + "Views": "العروض", + "CreateView": "إنشاء عرض", + "EditView": "تحرير العرض", + "SelectViewType": "اختيار نوع العرض", + "Document": "مستند", + "Documents": "المستندات", + "ChangeType": "تغيير النوع", + "ChangeTypeWarning": "تحذير: تغيير نوع البطاقة سيؤدي إلى إزالة جميع بيانات أي سمات غير موجودة في النوع الهدف. يمكن استعادة بيانات السمات السابقة بإعادة البطاقة إلى نوعها السابق. لن يتأثر محتوى البطاقة.", + "MasterDetailViews": "عروض الرئيسي والتفصيلي", + "SelectType": "اختيار النوع", + "CreateSpace": "إنشاء مساحة", + "NumberTypes": "{count, plural, one {# نوع} other {# أنواع}}", + "Labels": "التسميات", + "Properties": "الخصائص", + "NoChildren": "لا توجد عناصر فرعية", + "ConfigDescription": "امتداد لإدارة المعرفة بأسلوب قواعد البيانات.", + "AddCollaborators": "إضافة متعاونين", + "CardTitle": "العنوان", + "Post": "نشر", + "GetIndividualPublicLink": "الحصول على رابط عام مخصص", + "ShowLess": "عرض أقل", + "CardContent": "ماذا تريد أن تشارك؟", + "Feed": "الموجز", + "AllCards": "جميع البطاقات", + "Favorites": "المفضلة", + "RemoveCard": "إزالة البطاقة", + "UpdateCard": "تحديث البطاقة", + "CreateCardPermission": "إنشاء بطاقة", + "AddTagPermission": "إضافة وسم", + "RemoveTag": "إزالة الوسم", + "ForbidRemoveCard": "منع إزالة البطاقة", + "ForbidUpdateCard": "منع تحديث البطاقة", + "ForbidCreateCardPermission": "منع إنشاء البطاقة", + "ForbidAddTagPermission": "منع إضافة الوسم", + "ForbidRemoveTag": "منع إزالة الوسم", + "Duplicate": "تكرار", + "Version": "الإصدار", + "Versions": "الإصدارات", + "NewVersion": "إصدار جديد", + "Versioning": "إدارة الإصدارات", + "EnableVersioning": "تفعيل إدارة الإصدارات", + "EnableVersioningConfirm": "هل تريد تفعيل إدارة الإصدارات؟", + "NewVersionConfirmation": "هل تريد إنشاء إصدار جديد؟", + "RelationCopyDescr": "ما العلاقات التي تريد نسخها؟", + "Import": "استيراد", + "Export": "تصدير", + "CardUpdated": "تم تحديث البطاقة", + "CardCreated": "تم إنشاء البطاقة", + "MyCards": "بطاقاتي", + "GotoMyCards": "الانتقال إلى بطاقاتي", + "LockSection": "قفل القسم", + "UnLockSection": "إلغاء قفل القسم", + "SectionLocked": "تم قفل القسم {section}", + "SectionUnlocked": "تم إلغاء قفل القسم {section}", + "LayoutAuto": "تلقائي", + "SingleColumn": "عمود واحد", + "TwoColumns": "عمودان", + "Grid": "شبكة", + "RichtextProperties": "خصائص النص المنسق", + "ShowAllVersions": "إظهار جميع الإصدارات" + } +} diff --git a/plugins/card-resources/src/components/CardAttributeEditor.svelte b/plugins/card-resources/src/components/CardAttributeEditor.svelte index 47158c15a79..5324a97b9b1 100644 --- a/plugins/card-resources/src/components/CardAttributeEditor.svelte +++ b/plugins/card-resources/src/components/CardAttributeEditor.svelte @@ -95,7 +95,7 @@ border-bottom: 1px solid var(--theme-divider-color); height: 100%; padding: 1rem; - padding-left: 0; + padding-inline-start: 0; overflow: hidden; &.withoutBorder { diff --git a/plugins/card-resources/src/components/CardPresenter.svelte b/plugins/card-resources/src/components/CardPresenter.svelte index 9a9e81554e1..b119e6a9716 100644 --- a/plugins/card-resources/src/components/CardPresenter.svelte +++ b/plugins/card-resources/src/components/CardPresenter.svelte @@ -135,7 +135,7 @@ diff --git a/plugins/card-resources/src/components/CardTagColored.svelte b/plugins/card-resources/src/components/CardTagColored.svelte index ec90690d320..f447858ed40 100644 --- a/plugins/card-resources/src/components/CardTagColored.svelte +++ b/plugins/card-resources/src/components/CardTagColored.svelte @@ -81,7 +81,7 @@ &.removable { min-width: 3.25rem; - padding-right: 0.25rem; + padding-inline-end: 0.25rem; } } diff --git a/plugins/card-resources/src/components/ColoredCardIcon.svelte b/plugins/card-resources/src/components/ColoredCardIcon.svelte index 88def1302f0..26142f77c19 100644 --- a/plugins/card-resources/src/components/ColoredCardIcon.svelte +++ b/plugins/card-resources/src/components/ColoredCardIcon.svelte @@ -71,7 +71,7 @@ &__marker { position: absolute; top: -0.375rem; - right: 0; + inset-inline-end: 0; transform: translateX(calc(100% - 0.875rem)); display: flex; align-items: center; diff --git a/plugins/card-resources/src/components/Description.svelte b/plugins/card-resources/src/components/Description.svelte index 13b859076b8..a4eed779a90 100644 --- a/plugins/card-resources/src/components/Description.svelte +++ b/plugins/card-resources/src/components/Description.svelte @@ -118,7 +118,7 @@ .toc { width: 1rem; pointer-events: all; - margin-left: -3rem; + margin-inline-start: -3rem; position: sticky; top: 0; } diff --git a/plugins/card-resources/src/components/EditCardTableOfContents.svelte b/plugins/card-resources/src/components/EditCardTableOfContents.svelte index f35c6c3eb10..d9ff197ff8a 100644 --- a/plugins/card-resources/src/components/EditCardTableOfContents.svelte +++ b/plugins/card-resources/src/components/EditCardTableOfContents.svelte @@ -320,7 +320,7 @@ //inset: 0; z-index: 1; top: 0; - right: 0.25rem; + inset-inline-end: 0.25rem; width: 2rem; height: fit-content; @@ -351,8 +351,8 @@ animation: 0.5s fadeIn; animation-fill-mode: forwards; visibility: hidden; - left: 0; - right: 0; + inset-inline-start: 0; + inset-inline-end: 0; } @keyframes fadeIn { diff --git a/plugins/card-resources/src/components/NewCardForm.svelte b/plugins/card-resources/src/components/NewCardForm.svelte index 3dfa8b2e84f..6503e3bff3f 100644 --- a/plugins/card-resources/src/components/NewCardForm.svelte +++ b/plugins/card-resources/src/components/NewCardForm.svelte @@ -285,7 +285,7 @@ .corner-container { position: absolute; top: 0.75rem; - right: 1rem; + inset-inline-end: 1rem; z-index: 100; display: flex; align-items: center; @@ -314,7 +314,7 @@ z-index: 1; } &.description { - padding-left: 0.375rem; + padding-inline-start: 0.375rem; margin-top: -2rem; padding-top: 1rem; width: 100%; diff --git a/plugins/card-resources/src/components/ParentNamesPresenter.svelte b/plugins/card-resources/src/components/ParentNamesPresenter.svelte index 0ec37dcbcde..f6d604d13b8 100644 --- a/plugins/card-resources/src/components/ParentNamesPresenter.svelte +++ b/plugins/card-resources/src/components/ParentNamesPresenter.svelte @@ -79,7 +79,7 @@ .cards-container { display: inline-flex; flex-shrink: 1; - margin-left: 0; + margin-inline-start: 0; min-width: calc( (var(--cards-container-card-min-width, 2rem) + 1.26rem) * var(--cards-container-parents, 1) + var(--cards-container-card-min-width, 2rem) diff --git a/plugins/card-resources/src/components/TagsEditor.svelte b/plugins/card-resources/src/components/TagsEditor.svelte index e5c88a66b49..17d44836940 100644 --- a/plugins/card-resources/src/components/TagsEditor.svelte +++ b/plugins/card-resources/src/components/TagsEditor.svelte @@ -162,6 +162,6 @@ border: 1px solid var(--theme-content-color); width: 1px; height: 100%; - margin-left: 0.25rem; + margin-inline-start: 0.25rem; } diff --git a/plugins/card-resources/src/components/settings/EditRole.svelte b/plugins/card-resources/src/components/settings/EditRole.svelte index b30dcba6428..b8f261fc892 100644 --- a/plugins/card-resources/src/components/settings/EditRole.svelte +++ b/plugins/card-resources/src/components/settings/EditRole.svelte @@ -285,13 +285,13 @@ .name { width: 100%; font-weight: 500; - margin-left: 1rem; + margin-inline-start: 1rem; display: flex; align-items: center; font-size: 1.5rem; &.editable { - margin-left: 0; + margin-inline-start: 0; } } diff --git a/plugins/card-resources/src/components/settings/GeneralSection.svelte b/plugins/card-resources/src/components/settings/GeneralSection.svelte index 7de3ad16e8c..9c5c8ffe75e 100644 --- a/plugins/card-resources/src/components/settings/GeneralSection.svelte +++ b/plugins/card-resources/src/components/settings/GeneralSection.svelte @@ -235,8 +235,8 @@ diff --git a/plugins/chunter-resources/src/components/ChannelInput.svelte b/plugins/chunter-resources/src/components/ChannelInput.svelte index f434d8b3b9e..9263f74a501 100644 --- a/plugins/chunter-resources/src/components/ChannelInput.svelte +++ b/plugins/chunter-resources/src/components/ChannelInput.svelte @@ -135,7 +135,7 @@ display: flex; align-items: center; justify-content: center; - margin-left: 0.25rem; + margin-inline-start: 0.25rem; gap: 0.125rem; font-weight: 600; } diff --git a/plugins/chunter-resources/src/components/ChannelSidebarView.svelte b/plugins/chunter-resources/src/components/ChannelSidebarView.svelte index cb22412f115..a4a1b90669c 100644 --- a/plugins/chunter-resources/src/components/ChannelSidebarView.svelte +++ b/plugins/chunter-resources/src/components/ChannelSidebarView.svelte @@ -118,7 +118,7 @@ min-height: 0; position: absolute; top: 0; - left: 0; + inset-inline-start: 0; &.invisible { visibility: hidden; @@ -133,7 +133,7 @@ min-width: 0; min-height: 0; top: 0; - left: 0; + inset-inline-start: 0; background-color: var(--theme-panel-color); } diff --git a/plugins/chunter-resources/src/components/EditChannelDescriptionAttachments.svelte b/plugins/chunter-resources/src/components/EditChannelDescriptionAttachments.svelte index 0c0c5ee06f6..412692e5a96 100644 --- a/plugins/chunter-resources/src/components/EditChannelDescriptionAttachments.svelte +++ b/plugins/chunter-resources/src/components/EditChannelDescriptionAttachments.svelte @@ -133,7 +133,7 @@ } .showMoreAttachmentsButton { - margin-left: 1.5rem; + margin-inline-start: 1.5rem; margin-top: 0.5rem; color: var(--caption-color); cursor: pointer; @@ -145,7 +145,7 @@ .attachmentRow { display: flex; align-items: center; - padding-right: 1rem; + padding-inline-end: 1rem; margin: 0 1.5rem; padding: 0.375rem 0; @@ -158,7 +158,7 @@ } .eAttachmentRowMenu { - margin-left: 0.2rem; + margin-inline-start: 0.2rem; visibility: hidden; opacity: 0.6; cursor: pointer; diff --git a/plugins/chunter-resources/src/components/JumpToDateSelector.svelte b/plugins/chunter-resources/src/components/JumpToDateSelector.svelte index e1b4779bed1..7f76499cae4 100644 --- a/plugins/chunter-resources/src/components/JumpToDateSelector.svelte +++ b/plugins/chunter-resources/src/components/JumpToDateSelector.svelte @@ -70,7 +70,7 @@ position: absolute; content: ''; top: 50%; - left: 0; + inset-inline-start: 0; width: 100%; height: 1px; background-color: var(--highlight-select-border); diff --git a/plugins/chunter-resources/src/components/PinnedMessagesPopup.svelte b/plugins/chunter-resources/src/components/PinnedMessagesPopup.svelte index f76d1b90096..ea93ff8f87d 100644 --- a/plugins/chunter-resources/src/components/PinnedMessagesPopup.svelte +++ b/plugins/chunter-resources/src/components/PinnedMessagesPopup.svelte @@ -126,7 +126,7 @@ visibility: hidden; position: absolute; top: -0.5rem; - right: 0.85rem; + inset-inline-end: 0.85rem; box-shadow: 0.25rem 0.75rem 1rem 0.125rem var(--global-popover-ShadowColor); border: 1px solid var(--global-subtle-ui-BorderColor); background: diff --git a/plugins/chunter-resources/src/components/ReverseChannelScrollView.svelte b/plugins/chunter-resources/src/components/ReverseChannelScrollView.svelte index fd878caeceb..ee7719617e5 100644 --- a/plugins/chunter-resources/src/components/ReverseChannelScrollView.svelte +++ b/plugins/chunter-resources/src/components/ReverseChannelScrollView.svelte @@ -730,8 +730,8 @@ .selectedDate { position: absolute; top: 0; - left: 0; - right: 0; + inset-inline-start: 0; + inset-inline-end: 0; background: transparent; } diff --git a/plugins/chunter-resources/src/components/activity/MembersChangedMessage.svelte b/plugins/chunter-resources/src/components/activity/MembersChangedMessage.svelte index 92f9903abde..6f6804d56c4 100644 --- a/plugins/chunter-resources/src/components/activity/MembersChangedMessage.svelte +++ b/plugins/chunter-resources/src/components/activity/MembersChangedMessage.svelte @@ -117,6 +117,6 @@ } .separator { - margin-left: -0.25rem; + margin-inline-start: -0.25rem; } diff --git a/plugins/chunter-resources/src/components/chat-message/ChatMessageHeader.svelte b/plugins/chunter-resources/src/components/chat-message/ChatMessageHeader.svelte index e6dbacd49f4..c9f801ec237 100644 --- a/plugins/chunter-resources/src/components/chat-message/ChatMessageHeader.svelte +++ b/plugins/chunter-resources/src/components/chat-message/ChatMessageHeader.svelte @@ -24,7 +24,7 @@ diff --git a/plugins/communication-assets/lang/ar.json b/plugins/communication-assets/lang/ar.json new file mode 100644 index 00000000000..4671a15048d --- /dev/null +++ b/plugins/communication-assets/lang/ar.json @@ -0,0 +1,98 @@ +{ + "string": { + "Messages": "الرسائل", + "FirstMessages": "الرسائل الأولى", + "LatestMessages": "أحدث الرسائل", + "Subscribe": "اشتراك", + "Unsubscribe": "إلغاء الاشتراك", + "File": "ملف", + "Files": "الملفات", + "Added": "تمت الإضافة", + "All": "الكل ({count})", + "Attach": "إرفاق", + "Cancel": "إلغاء", + "Edit": "تعديل", + "Edited": "تم التعديل", + "Emoji": "رمز تعبيري", + "HoursAgo": "{hours, plural, =0 {منذ أقل من ساعة} =1 {منذ ساعة} other {منذ # ساعة}}", + "JustNow": "الآن", + "LastReply": "آخر رد", + "Mention": "إشارة", + "MinutesAgo": "{minutes, plural, =0 {منذ أقل من دقيقة} =1 {منذ دقيقة} other {منذ # دقيقة}}", + "MonthAt": "{month} في {time}", + "New": "جديد", + "Removed": "تمت الإزالة", + "RepliesCount": "{count, plural, =0 {لا ردود} =1 {رد واحد} other {# رد}}", + "Reply": "رد", + "Send": "إرسال", + "Set": "تعيين", + "ShowFormatting": "إظهار التنسيق", + "To": "إلى", + "Today": "اليوم", + "Unset": "إلغاء التعيين", + "WeekdayAt": "{weekday} في {time}", + "YearAt": "{year} في {time}", + "Yesterday": "أمس", + "YesterdayAt": "أمس في {time}", + "AndMore": "و{count} أخرى", + "IsTyping": "{count, plural, =1 {يكتب} other {يكتبون}}...", + "IsThinking": "{count, plural, =1 {يفكر} other {يفكرون}}...", + "Loading": "جارٍ التحميل...", + "MessageIn": "رسالة #{title}", + "ThreadWasRemoved": "تمت إزالة هذا الموضوع.", + "MessageWasRemoved": "تمت إزالة هذه الرسالة.", + "JoinedThe": "انضم إلى", + "LeftThe": "غادر", + "Translating": "جارٍ الترجمة...", + "ShowOriginal": "عرض النص الأصلي", + "AddReaction": "إضافة تفاعل", + "ReplyInThread": "الرد في الموضوع", + "TranslateMessage": "ترجمة الرسالة", + "ShowOriginalMessage": "عرض الرسالة الأصلية", + "EditMessage": "تعديل الرسالة", + "RemoveMessage": "إزالة الرسالة", + "CreateCard": "إنشاء بطاقة", + "MessageAlreadyHasCardAttached": "عذرًا! هذه الرسالة مرفق بها بطاقة بالفعل.", + "CreatePoll": "إنشاء استطلاع", + "Poll": "استطلاع", + "QuestionIsRequired": "السؤال مطلوب.", + "AnswerIsRequired": "الإجابة مطلوبة.", + "OptionIsRequired": "الخيار مطلوب.", + "StartDateMustBeInTheFuture": "يجب أن يكون تاريخ البدء في المستقبل.", + "EndDateMustBeInTheFuture": "يجب أن يكون تاريخ الانتهاء في المستقبل.", + "Question": "السؤال", + "AskQuestion": "اطرح سؤالاً", + "PollOptions": "خيارات الاستطلاع", + "Option": "الخيار", + "AnonymousVoting": "تصويت مجهول", + "MultipleChoice": "اختيار متعدد", + "QuizMode": "وضع الاختبار", + "StartTime": "وقت البدء", + "EndTime": "وقت الانتهاء", + "OpenPoll": "فتح الاستطلاع", + "RetractVote": "سحب التصويت", + "Quiz": "اختبار", + "VotesCount": "{count, plural, =0 {لا أصوات} =1 {صوت واحد} other {# صوت}}", + "Vote": "تصويت", + "ShowResults": "عرض النتائج", + "Ended": "انتهى", + "StartsAt": "يبدأ في {date}", + "EndsAt": "ينتهي في {date}", + "StartsTomorrow": "يبدأ غدًا في {date}", + "EndsTomorrow": "ينتهي غدًا في {date}", + "PollResults": "نتائج الاستطلاع", + "Polls": "الاستطلاعات", + "TotalVotes": "إجمالي الأصوات", + "Voted": "تم التصويت", + "VotedFor": "صوّت لصالح", + "RevokedVote": "تم إلغاء التصويت", + "AnonymousQuiz": "اختبار مجهول", + "Direct": "مباشر", + "Directs": "الرسائل المباشرة", + "Members": "الأعضاء", + "Translate": "ترجمة", + "WriteMessageEllipsis": "اكتب رسالة...", + "EditMessageEllipsis": "تعديل الرسالة...", + "ArrowDownMessages": "↓ أحدث الرسائل" + } +} diff --git a/plugins/communication-resources/src/components/AttachmentsPreview.svelte b/plugins/communication-resources/src/components/AttachmentsPreview.svelte index 66c5ca58761..009dbfa4da5 100644 --- a/plugins/communication-resources/src/components/AttachmentsPreview.svelte +++ b/plugins/communication-resources/src/components/AttachmentsPreview.svelte @@ -49,7 +49,7 @@ diff --git a/plugins/communication-resources/src/components/DateSeparator.svelte b/plugins/communication-resources/src/components/DateSeparator.svelte index 61635e0eb39..a6a9292a0b7 100644 --- a/plugins/communication-resources/src/components/DateSeparator.svelte +++ b/plugins/communication-resources/src/components/DateSeparator.svelte @@ -74,7 +74,7 @@ border: 1px solid var(--highlight-select-border); font-weight: 500; position: absolute; - left: 50%; + inset-inline-start: 50%; transform: translateX(-50%); top: 0.25rem; min-height: 1.625rem; diff --git a/plugins/communication-resources/src/components/DirectIcon.svelte b/plugins/communication-resources/src/components/DirectIcon.svelte index cc699644fd1..5e2ab973360 100644 --- a/plugins/communication-resources/src/components/DirectIcon.svelte +++ b/plugins/communication-resources/src/components/DirectIcon.svelte @@ -159,7 +159,7 @@ .persons-count { position: absolute; - right: -0.188rem; + inset-inline-end: -0.188rem; bottom: -0.188rem; width: 0.938rem; height: 0.938rem; @@ -174,7 +174,7 @@ font-weight: 500; &.medium { - right: -0.313rem; + inset-inline-end: -0.313rem; bottom: -0.313rem; width: 1.5rem; height: 1.5rem; diff --git a/plugins/communication-resources/src/components/input/AttachmentsHeader.svelte b/plugins/communication-resources/src/components/input/AttachmentsHeader.svelte index e45c9ccaca8..06f0fcd7cb8 100644 --- a/plugins/communication-resources/src/components/input/AttachmentsHeader.svelte +++ b/plugins/communication-resources/src/components/input/AttachmentsHeader.svelte @@ -86,7 +86,7 @@ diff --git a/plugins/communication-resources/src/components/message/MessageFooter.svelte b/plugins/communication-resources/src/components/message/MessageFooter.svelte index 56c1739c149..188c2c73260 100644 --- a/plugins/communication-resources/src/components/message/MessageFooter.svelte +++ b/plugins/communication-resources/src/components/message/MessageFooter.svelte @@ -169,7 +169,7 @@ .message__replies { padding-top: 0.5rem; - margin-left: -0.5rem; + margin-inline-start: -0.5rem; padding-bottom: 0; display: flex; flex-direction: column; diff --git a/plugins/communication-resources/src/components/message/MessagePresenter.svelte b/plugins/communication-resources/src/components/message/MessagePresenter.svelte index 73539a65554..78bbbde7dbc 100644 --- a/plugins/communication-resources/src/components/message/MessagePresenter.svelte +++ b/plugins/communication-resources/src/components/message/MessagePresenter.svelte @@ -222,7 +222,7 @@ .message__actions { position: absolute; top: -0.75rem; - right: 2.25rem; + inset-inline-end: 2.25rem; visibility: hidden; z-index: 2; diff --git a/plugins/communication-resources/src/components/message/OneRowMessageBody.svelte b/plugins/communication-resources/src/components/message/OneRowMessageBody.svelte index 1c0b0825ee2..a62e5912e6a 100644 --- a/plugins/communication-resources/src/components/message/OneRowMessageBody.svelte +++ b/plugins/communication-resources/src/components/message/OneRowMessageBody.svelte @@ -119,6 +119,6 @@ .message__footer { display: flex; flex-direction: column; - margin-left: 3.5rem; + margin-inline-start: 3.5rem; } diff --git a/plugins/communication-resources/src/components/message/activity/ActivityCollaborativeContentViewer.svelte b/plugins/communication-resources/src/components/message/activity/ActivityCollaborativeContentViewer.svelte index 884bf7f97c5..946b63e7131 100644 --- a/plugins/communication-resources/src/components/message/activity/ActivityCollaborativeContentViewer.svelte +++ b/plugins/communication-resources/src/components/message/activity/ActivityCollaborativeContentViewer.svelte @@ -62,7 +62,7 @@ .triangle { &.left { - border-left-color: var(--global-focus-BorderColor); + border-inline-start-color: var(--global-focus-BorderColor); } &.down { diff --git a/plugins/communication-resources/src/components/message/activity/ActivityUpdateCollaboratorsViewer.svelte b/plugins/communication-resources/src/components/message/activity/ActivityUpdateCollaboratorsViewer.svelte index 6201645a324..28c6e49519e 100644 --- a/plugins/communication-resources/src/components/message/activity/ActivityUpdateCollaboratorsViewer.svelte +++ b/plugins/communication-resources/src/components/message/activity/ActivityUpdateCollaboratorsViewer.svelte @@ -79,7 +79,7 @@ :global(a:not(:last-of-type)) { :global(.ap-label)::after { content: ','; - margin-right: 0.25rem; + margin-inline-end: 0.25rem; } } } diff --git a/plugins/communication-resources/src/components/poll/CreatePoll.svelte b/plugins/communication-resources/src/components/poll/CreatePoll.svelte index 4c72e9fa175..ef0b27dfc58 100644 --- a/plugins/communication-resources/src/components/poll/CreatePoll.svelte +++ b/plugins/communication-resources/src/components/poll/CreatePoll.svelte @@ -334,6 +334,6 @@ display: flex; align-items: center; gap: 0.125rem; - margin-right: -0.5rem; + margin-inline-end: -0.5rem; } diff --git a/plugins/communication-resources/src/components/poll/PollPreview.svelte b/plugins/communication-resources/src/components/poll/PollPreview.svelte index 1b43aadc93a..dd6c7cc4a47 100644 --- a/plugins/communication-resources/src/components/poll/PollPreview.svelte +++ b/plugins/communication-resources/src/components/poll/PollPreview.svelte @@ -96,7 +96,7 @@ height: 100%; background-color: var(--theme-button-default); border: 1px solid var(--theme-button-border); - border-left: none; + border-inline-start: none; border-radius: 0 0.25rem 0.25rem 0; } diff --git a/plugins/communication-resources/src/components/poll/PollResults.svelte b/plugins/communication-resources/src/components/poll/PollResults.svelte index 9c55c27bec6..472d8d47147 100644 --- a/plugins/communication-resources/src/components/poll/PollResults.svelte +++ b/plugins/communication-resources/src/components/poll/PollResults.svelte @@ -120,14 +120,14 @@ &__percentage { font-size: 0.875rem; color: var(--global-secondary-TextColor); - margin-left: -0.375rem; - margin-right: 1rem; + margin-inline-start: -0.375rem; + margin-inline-end: 1rem; } &__result { font-size: 0.875rem; color: var(--global-secondary-TextColor); - margin-left: auto; + margin-inline-start: auto; } } diff --git a/plugins/communication-resources/src/components/preview/PreviewTemplate.svelte b/plugins/communication-resources/src/components/preview/PreviewTemplate.svelte index 28065265114..41e3f0ad99b 100644 --- a/plugins/communication-resources/src/components/preview/PreviewTemplate.svelte +++ b/plugins/communication-resources/src/components/preview/PreviewTemplate.svelte @@ -170,7 +170,7 @@ display: flex; align-items: center; justify-content: center; - margin-right: 0.25rem; + margin-inline-end: 0.25rem; } &__content { @@ -210,7 +210,7 @@ font-size: 0.75rem; color: var(--global-tertiary-TextColor); white-space: nowrap; - margin-left: auto; + margin-inline-start: auto; max-width: 100%; min-width: 0; width: fit-content; diff --git a/plugins/contact-assets/lang/ar.json b/plugins/contact-assets/lang/ar.json new file mode 100644 index 00000000000..de7f401b171 --- /dev/null +++ b/plugins/contact-assets/lang/ar.json @@ -0,0 +1,155 @@ +{ + "string": { + "Apply": "تطبيق", + "Contacts": "جهات الاتصال", + "Persons": "الأشخاص", + "Organizations": "الشركات", + "CreatePerson": "شخص", + "CreateOrganization": "شركة", + "OrganizationNamePlaceholder": "اسم الشركة", + "OrganizationsNamePlaceholder": "الشركات", + "PersonFirstNamePlaceholder": "الاسم الأول", + "PersonLastNamePlaceholder": "اسم العائلة", + "PersonLocationPlaceholder": "الموقع", + "PersonsNamePlaceholder": "مجلد", + "Name": "الاسم", + "SelectFolder": "تحديد مجلد", + "OrganizationsFolder": "مجلد الشركات", + "PersonsFolder": "مجلد الأشخاص", + "ContactCreateLabel": "إنشاء جهة اتصال", + "SearchEmployee": "البحث عن موظف...", + "SearchPerson": "البحث عن شخص...", + "SearchOrganization": "البحث عن شركة...", + "ContactInfo": "معلومات الاتصال", + "Contact": "جهة اتصال", + "Location": "الموقع", + "Channel": "سجل الاتصال", + "ChannelProvider": "مزوّد القناة", + "Person": "شخص", + "Organization": "شركة", + "Employee": "موظف", + "DeleteEmployee": "حذف الموظف", + "DeleteEmployeeDescr": "هل أنت متأكد أنك تريد حذف الموظف من مساحة العمل؟", + "Value": "القيمة", + "FullDescription": "الوصف الكامل", + "Phone": "الهاتف", + "LinkedIn": "LinkedIn", + "GitHub": "GitHub", + "Twitter": "X", + "Google": "Google", + "Telegram": "Telegram", + "PhonePlaceholder": "+1 555 333 7777", + "LinkedInPlaceholder": "https://linkedin.com/in/jappleseed", + "AtPlaceHolder": "@appleseed", + "FacebookPlaceholder": "https://fb.com/jappleseed", + "Facebook": "Facebook", + "HomepagePlaceholder": "https://jappleseed.com", + "Homepage": "الصفحة الرئيسية", + "SocialLinks": "روابط التواصل الاجتماعي", + "ViewActivity": "عرض النشاط", + "PersonAlreadyExists": "جهة الاتصال موجودة بالفعل...", + "Status": "الحالة", + "SetStatus": "تعيين الحالة", + "ClearStatus": "مسح الحالة", + "SaveStatus": "حفظ", + "Cancel": "إلغاء", + "StatusDueDate": "تاريخ الاستحقاق", + "NoExpire": "بدون انتهاء صلاحية", + "TypeLabel": "النوع", + "StatusDueDateTooltip": "حتى {date}", + "CopyToClipboard": "نسخ", + "ViewFullProfile": "عرض الملف الشخصي الكامل", + "Member": "عضو", + "Members": "الأعضاء", + "NoMembers": "لم تتم إضافة أعضاء", + "AddMember": "إضافة عضو", + "KickEmployee": "طرد الموظف", + "KickEmployeeDescr": "هل أنت متأكد أنك تريد طرد الموظف من مساحة العمل؟ لا يمكن التراجع عن هذا الإجراء", + "ResendInvite": "إعادة إرسال الدعوة", + "ResendInviteDescr": "هل أنت متأكد أنك تريد إعادة إرسال دعوة إلى هذا المستخدم لمساحة العمل؟", + "Email": "البريد الإلكتروني", + "CreateEmployee": "موظف", + "Inactive": "غير نشط", + "Active": "نشط", + "Role": "الدور", + "Birthday": "تاريخ الميلاد", + "UseImage": "صورة مرفقة", + "UseGravatar": "Gravatar", + "UseColor": "لون", + "NotSpecified": "غير محدد", + "Whatsapp": "Whatsapp", + "WhatsappPlaceholder": "Whatsapp", + "Skype": "Skype", + "SkypePlaceholder": "Skype", + "Profile": "الملف الشخصي", + "ProfilePlaceholder": "الملف الشخصي...", + "CurrentEmployee": "الموظف الحالي", + "MergePersons": "دمج جهات الاتصال", + "MergePersonsFrom": "جهة الاتصال المصدر", + "MergePersonsTo": "جهة الاتصال النهائية", + "SelectAvatar": "تحديد صورة رمزية", + "Avatar": "صورة رمزية", + "AvatarProvider": "مزوّد الصورة الرمزية", + "GravatarsManaged": "تُدار صور Gravatar", + "Through": "عبر", + "AddMembersHeader": "إضافة أعضاء إلى {value}:", + "Assigned": "مُكلَّف", + "Unassigned": "غير مُكلَّف", + "CategoryCurrentUser": "المستخدم الحالي", + "CategoryOther": "أخرى", + "NumberMembers": "{count, plural, =0 {لا يوجد أعضاء} =1 {عضو واحد} other {# أعضاء}}", + "Position": "المنصب", + "ConfigLabel": "جهات الاتصال", + "ConfigDescription": "إضافة للاحتفاظ بمعلومات عن جميع الموظفين وجهات الاتصال الأخرى من الأشخاص/الشركات.", + "HasMessagesIn": "لديه رسائل في", + "HasNewMessagesIn": "لديه رسائل جديدة في", + "Employees": "الموظفون", + "People": "الأشخاص", + "For": "لـ", + "SelectUsers": "تحديد المستخدمين", + "AddGuest": "إضافة ضيف", + "ViewProfile": "عرض الملف الشخصي", + "Viber": "Viber", + "ViberPlaceholder": "Viber", + "SocialId": "معرّف التواصل الاجتماعي", + "SocialIds": "معرّفات التواصل الاجتماعي", + "Type": "النوع", + "Confirmed": "مؤكَّد", + "UserProfile": "الملف الشخصي للمستخدم", + "DeactivatedAccount": "حساب معطَّل", + "LocalTime": "التوقيت المحلي", + "Everyone": "الجميع", + "Here": "هنا", + "EveryoneDescription": "إشعار الجميع في هذا {title}", + "HereDescription": "إشعار كل عضو متصل في هذا {title}", + "Guest": "ضيف", + "Deleted": "محذوف", + "CannotMerge": "خطأ: لا يمكن دمج الأشخاص العامين", + "AutoTranslation": "الترجمة التلقائية", + "TranslateTo": "الترجمة إلى", + "DontTranslate": "عدم الترجمة", + "SelectLanguage": "تحديد اللغة", + "SelectLanguages": "تحديد اللغات", + "WorkspaceStatusNote": "حالة المستخدم", + "WorkspaceStatusUntil": "الإظهار حتى", + "WorkspaceStatusMenu": "حالتك", + "WorkspaceStatusSetYour": "تعيين حالتك", + "WorkspaceStatusUpdateYour": "تحديث حالتك", + "WorkspaceStatusMessage": "ما هي حالتك؟", + "WorkspaceStatusAway": "بعيد", + "WorkspaceStatusVacation": "في إجازة", + "WorkspaceStatusOutSick": "في إجازة مرضية", + "WorkspaceStatusClear": "مسح الحالة", + "WorkspaceStatusSave": "حفظ", + "WorkspaceStatusQuickPick": "حالات سريعة", + "WorkspaceStatusComposeHint": "أضف ملاحظة قصيرة (اختياري)", + "WorkspaceStatusClearUntil": "مسح التاريخ", + "WorkspaceStatusDoNotClear": "عدم مسح الحالة", + "WorkspaceStatusIn30Min": "خلال 30 دقيقة", + "WorkspaceStatusIn1Hour": "خلال ساعة واحدة", + "WorkspaceStatusIn4Hours": "خلال 4 ساعات", + "WorkspaceStatusEndOfDay": "نهاية اليوم", + "WorkspaceStatusPickDate": "اختيار التاريخ", + "HideInactive": "إخفاء غير النشط" + } +} diff --git a/plugins/contact-resources/src/components/ChannelEditor.svelte b/plugins/contact-resources/src/components/ChannelEditor.svelte index 526714c9c35..c46c2e51153 100644 --- a/plugins/contact-resources/src/components/ChannelEditor.svelte +++ b/plugins/contact-resources/src/components/ChannelEditor.svelte @@ -235,7 +235,7 @@ content: ''; position: absolute; top: 0; - left: 0; + inset-inline-start: 0; width: 100%; height: 100%; background-color: var(--theme-popup-hover); @@ -254,7 +254,7 @@ overflow: hidden; min-width: 0; top: 50%; - left: 50%; + inset-inline-start: 50%; width: calc(100% - 0.5rem); text-align: center; font-size: 0.75rem; @@ -286,9 +286,9 @@ &.bottom::before { content: ''; position: absolute; - margin-left: -9px; + margin-inline-start: -9px; top: -6px; - left: 50%; + inset-inline-start: 50%; width: 18px; height: 7px; } diff --git a/plugins/contact-resources/src/components/ChannelsPopup.svelte b/plugins/contact-resources/src/components/ChannelsPopup.svelte index 7dd306a84ef..ef18f89ca64 100644 --- a/plugins/contact-resources/src/components/ChannelsPopup.svelte +++ b/plugins/contact-resources/src/components/ChannelsPopup.svelte @@ -49,7 +49,7 @@ diff --git a/plugins/controlled-documents-resources/src/components/create-doc/steps/TemplateStep.svelte b/plugins/controlled-documents-resources/src/components/create-doc/steps/TemplateStep.svelte index 7469efc2a36..5fbb2338548 100644 --- a/plugins/controlled-documents-resources/src/components/create-doc/steps/TemplateStep.svelte +++ b/plugins/controlled-documents-resources/src/components/create-doc/steps/TemplateStep.svelte @@ -209,7 +209,7 @@ } .template { - margin-left: 0.625rem; + margin-inline-start: 0.625rem; padding: 1.5rem 0; border-bottom: 1px solid var(--theme-divider-color); display: flex; diff --git a/plugins/controlled-documents-resources/src/components/document/DocumentHistory.svelte b/plugins/controlled-documents-resources/src/components/document/DocumentHistory.svelte index df566182612..1a4f994fda2 100644 --- a/plugins/controlled-documents-resources/src/components/document/DocumentHistory.svelte +++ b/plugins/controlled-documents-resources/src/components/document/DocumentHistory.svelte @@ -121,7 +121,7 @@ .row { gap: 3rem; @media print { - border-left: 2px solid var(--theme-divider-color); + border-inline-start: 2px solid var(--theme-divider-color); } } diff --git a/plugins/controlled-documents-resources/src/components/document/DocumentSignatories.svelte b/plugins/controlled-documents-resources/src/components/document/DocumentSignatories.svelte index 9b17244a542..690e67ce229 100644 --- a/plugins/controlled-documents-resources/src/components/document/DocumentSignatories.svelte +++ b/plugins/controlled-documents-resources/src/components/document/DocumentSignatories.svelte @@ -129,7 +129,7 @@ .row { gap: 3rem; @media print { - border-left: 2px solid var(--theme-divider-color); + border-inline-start: 2px solid var(--theme-divider-color); } } diff --git a/plugins/controlled-documents-resources/src/components/document/EditDocContent.svelte b/plugins/controlled-documents-resources/src/components/document/EditDocContent.svelte index 3d57f207301..f6a6411d701 100644 --- a/plugins/controlled-documents-resources/src/components/document/EditDocContent.svelte +++ b/plugins/controlled-documents-resources/src/components/document/EditDocContent.svelte @@ -304,7 +304,7 @@ overflow: hidden; @media print { - margin-left: -1rem; + margin-inline-start: -1rem; overflow: visible; } @@ -340,13 +340,13 @@ position: absolute; width: 1rem; pointer-events: all; - left: 1px; + inset-inline-start: 1px; top: 1rem; z-index: 1; } .tocContent { - padding-left: 2.25rem; + padding-inline-start: 2.25rem; } .content { @@ -365,7 +365,7 @@ position: absolute; z-index: 100; top: 0; - left: 0; + inset-inline-start: 0; width: 100%; height: 100%; display: flex; diff --git a/plugins/controlled-documents-resources/src/components/document/right-panel/DocumentApprovalItem.svelte b/plugins/controlled-documents-resources/src/components/document/right-panel/DocumentApprovalItem.svelte index 077b704d475..e4eb98f4f33 100644 --- a/plugins/controlled-documents-resources/src/components/document/right-panel/DocumentApprovalItem.svelte +++ b/plugins/controlled-documents-resources/src/components/document/right-panel/DocumentApprovalItem.svelte @@ -121,7 +121,7 @@ } .chevron { - margin-left: 0.25rem; + margin-inline-start: 0.25rem; visibility: hidden; &.visible { diff --git a/plugins/controlled-documents-resources/src/components/document/right-panel/DocumentCommentsTab.svelte b/plugins/controlled-documents-resources/src/components/document/right-panel/DocumentCommentsTab.svelte index 99b813c8dc5..e3cfdec8997 100644 --- a/plugins/controlled-documents-resources/src/components/document/right-panel/DocumentCommentsTab.svelte +++ b/plugins/controlled-documents-resources/src/components/document/right-panel/DocumentCommentsTab.svelte @@ -102,7 +102,7 @@ .dirty-mark { position: absolute; top: 0.375rem; - right: 0.375rem; + inset-inline-end: 0.375rem; width: 0.5rem; height: 0.5rem; border-radius: 50%; diff --git a/plugins/controlled-documents-resources/src/components/document/right-panel/info/DocumentFlatHierarchy.svelte b/plugins/controlled-documents-resources/src/components/document/right-panel/info/DocumentFlatHierarchy.svelte index 5f0388c0fd0..f8a96816da9 100644 --- a/plugins/controlled-documents-resources/src/components/document/right-panel/info/DocumentFlatHierarchy.svelte +++ b/plugins/controlled-documents-resources/src/components/document/right-panel/info/DocumentFlatHierarchy.svelte @@ -99,10 +99,10 @@ display: flex; flex-direction: column; padding: 0 1rem; - border-left: 2px solid var(--theme-navpanel-border); + border-inline-start: 2px solid var(--theme-navpanel-border); gap: 0.25rem; - padding-left: 0.25rem; - margin-left: 0.75rem; + padding-inline-start: 0.25rem; + margin-inline-start: 0.75rem; } diff --git a/plugins/controlled-documents-resources/src/components/document/right-panel/info/DocumentFlatTreeElement.svelte b/plugins/controlled-documents-resources/src/components/document/right-panel/info/DocumentFlatTreeElement.svelte index 85bf78e8ad0..5835f142c48 100644 --- a/plugins/controlled-documents-resources/src/components/document/right-panel/info/DocumentFlatTreeElement.svelte +++ b/plugins/controlled-documents-resources/src/components/document/right-panel/info/DocumentFlatTreeElement.svelte @@ -63,6 +63,6 @@ diff --git a/plugins/controlled-documents-resources/src/components/hierarchy/DocumentSpacePresenter.svelte b/plugins/controlled-documents-resources/src/components/hierarchy/DocumentSpacePresenter.svelte index 6fea79ff2ce..6e2a6339095 100644 --- a/plugins/controlled-documents-resources/src/components/hierarchy/DocumentSpacePresenter.svelte +++ b/plugins/controlled-documents-resources/src/components/hierarchy/DocumentSpacePresenter.svelte @@ -403,7 +403,7 @@ .pseudo-element { height: 2rem; margin: 0 0.75rem; - padding-left: 2.5rem; - padding-right: 0.75rem; + padding-inline-start: 2.5rem; + padding-inline-end: 0.75rem; } diff --git a/plugins/controlled-documents-resources/src/components/hierarchy/DropArea.svelte b/plugins/controlled-documents-resources/src/components/hierarchy/DropArea.svelte index 0d623e0634b..a6e2ef9cb62 100644 --- a/plugins/controlled-documents-resources/src/components/hierarchy/DropArea.svelte +++ b/plugins/controlled-documents-resources/src/components/hierarchy/DropArea.svelte @@ -19,8 +19,8 @@ .drop-area { pointer-events: none; position: absolute; - left: 0.75rem; - right: 0.75rem; + inset-inline-start: 0.75rem; + inset-inline-end: 0.75rem; top: 0; bottom: 0; background-color: var(--global-ui-highlight-BackgroundColor); diff --git a/plugins/controlled-documents-resources/src/components/hierarchy/DropMarker.svelte b/plugins/controlled-documents-resources/src/components/hierarchy/DropMarker.svelte index ff849a72e51..2dfe82e329a 100644 --- a/plugins/controlled-documents-resources/src/components/hierarchy/DropMarker.svelte +++ b/plugins/controlled-documents-resources/src/components/hierarchy/DropMarker.svelte @@ -26,8 +26,8 @@ height: 0.125rem; background-color: var(--primary-button-focused); - left: 0.75rem; - right: 0.75rem; + inset-inline-start: 0.75rem; + inset-inline-end: 0.75rem; top: 10rem; } diff --git a/plugins/controlled-documents-resources/src/components/print/DocumentPrintTitlePage.svelte b/plugins/controlled-documents-resources/src/components/print/DocumentPrintTitlePage.svelte index f9f7654b12c..d5418904749 100644 --- a/plugins/controlled-documents-resources/src/components/print/DocumentPrintTitlePage.svelte +++ b/plugins/controlled-documents-resources/src/components/print/DocumentPrintTitlePage.svelte @@ -139,9 +139,9 @@ z-index: 9999; page-break-after: always; top: 0; - right: 0; + inset-inline-end: 0; bottom: 0; - left: 0; + inset-inline-start: 0; margin: auto; height: 4rem; width: 100%; diff --git a/plugins/desktop-downloads-assets/lang/ar.json b/plugins/desktop-downloads-assets/lang/ar.json new file mode 100644 index 00000000000..529d3ec8fd7 --- /dev/null +++ b/plugins/desktop-downloads-assets/lang/ar.json @@ -0,0 +1,10 @@ +{ + "string": { + "Downloads": "التنزيلات", + "Completed": "مكتمل", + "Cancelled": "ملغى", + "Interrupted": "متوقف", + "Paused": "موقَّف مؤقتًا", + "Progressing": "قيد التقدم" + } +} diff --git a/plugins/desktop-downloads-resources/src/components/FileDownloadStatusPopup.svelte b/plugins/desktop-downloads-resources/src/components/FileDownloadStatusPopup.svelte index 6f0aaf620a5..d2123f22c45 100644 --- a/plugins/desktop-downloads-resources/src/components/FileDownloadStatusPopup.svelte +++ b/plugins/desktop-downloads-resources/src/components/FileDownloadStatusPopup.svelte @@ -80,13 +80,13 @@ .upload-popup__header { padding-bottom: 1rem; - margin-left: 0.5rem; - margin-right: 0.625rem; + margin-inline-start: 0.5rem; + margin-inline-end: 0.625rem; } .upload-popup__content { margin: 0.5rem; - margin-right: 0.625rem; + margin-inline-end: 0.625rem; } } diff --git a/plugins/desktop-preferences-assets/lang/ar.json b/plugins/desktop-preferences-assets/lang/ar.json new file mode 100644 index 00000000000..1282af1d118 --- /dev/null +++ b/plugins/desktop-preferences-assets/lang/ar.json @@ -0,0 +1,11 @@ +{ + "string": { + "ShowNotifications": "إظهار الإشعارات", + "PlaySound": "تشغيل صوت", + "BounceAppIcon": "تحريك أيقونة التطبيق (لنظام mac فقط)", + "ShowBadge": "إظهار شارة على أيقونة التطبيق", + "SoundAndAppearance": "الصوت والمظهر", + "HaveGotANotification": "لديك إشعار", + "TotalNotificationsCount": "لديك {count, plural, =1 {# إشعار} other {# إشعارات}} في المجموع" + } +} diff --git a/plugins/devmodel-resources/src/components/ModelView.svelte b/plugins/devmodel-resources/src/components/ModelView.svelte index 2e9e755a716..919478c55fa 100644 --- a/plugins/devmodel-resources/src/components/ModelView.svelte +++ b/plugins/devmodel-resources/src/components/ModelView.svelte @@ -69,7 +69,7 @@ th, td { padding: 0.5rem 1.5rem; - text-align: left; + text-align: start; } th { diff --git a/plugins/diffview-assets/lang/ar.json b/plugins/diffview-assets/lang/ar.json new file mode 100644 index 00000000000..eb0e04909a2 --- /dev/null +++ b/plugins/diffview-assets/lang/ar.json @@ -0,0 +1,14 @@ +{ + "string": { + "ViewMode": "وضع العرض", + "Unified": "موحّد", + "Split": "مقسّم", + "Viewed": "تمت مشاهدته", + "ShowDiff": "إظهار الفروقات", + "NoChanges": "لا توجد تغييرات في فروقات الملف", + "LargeDiffsAreHidden": "لا تُعرض الفروقات الكبيرة افتراضياً.", + "FileIsTooLarge": "الملف كبير جداً بحيث لا يمكن عرضه.", + "FileWasRenamed": "تمت إعادة تسمية الملف دون تغييرات.", + "FileWasDeleted": "تم حذف الملف." + } +} diff --git a/plugins/diffview-resources/src/components/FileDiffContent.svelte b/plugins/diffview-resources/src/components/FileDiffContent.svelte index 5a5d2350a2e..72fca89de76 100644 --- a/plugins/diffview-resources/src/components/FileDiffContent.svelte +++ b/plugins/diffview-resources/src/components/FileDiffContent.svelte @@ -171,12 +171,12 @@ } .diff-table-split .code-line + .num-line { - border-left: 1px solid var(--theme-divider-color); + border-inline-start: 1px solid var(--theme-divider-color); } td { &.code-line { - border-left: 1px solid var(--theme-divider-color); + border-inline-start: 1px solid var(--theme-divider-color); } &.line-header { @@ -206,7 +206,7 @@ .num-line { padding: 0 0.5rem; - text-align: right; + text-align: end; vertical-align: top; text-overflow: ellipsis; white-space: nowrap; @@ -225,6 +225,6 @@ .code-line::before { content: attr(data-code-marker); position: absolute; - left: 0.5rem; + inset-inline-start: 0.5rem; } diff --git a/plugins/diffview-resources/src/components/FileDiffHeader.svelte b/plugins/diffview-resources/src/components/FileDiffHeader.svelte index d74c450ff99..6600311a779 100644 --- a/plugins/diffview-resources/src/components/FileDiffHeader.svelte +++ b/plugins/diffview-resources/src/components/FileDiffHeader.svelte @@ -101,7 +101,7 @@ .file-info { font-weight: 600; direction: rtl; - text-align: left; + text-align: start; } .file-stats { diff --git a/plugins/diffview-resources/src/components/FileDiffView.svelte b/plugins/diffview-resources/src/components/FileDiffView.svelte index e90d262a316..c8f52fb4f94 100644 --- a/plugins/diffview-resources/src/components/FileDiffView.svelte +++ b/plugins/diffview-resources/src/components/FileDiffView.svelte @@ -130,8 +130,8 @@ overflow-y: hidden; &.expanded { - border-bottom-left-radius: 0; - border-bottom-right-radius: 0; + border-end-start-radius: 0; + border-end-end-radius: 0; } } @@ -144,8 +144,8 @@ .file-content { border: 1px solid var(--theme-divider-color); border-top: 0; - border-bottom-left-radius: 0.25rem; - border-bottom-right-radius: 0.25rem; + border-end-start-radius: 0.25rem; + border-end-end-radius: 0.25rem; overflow-y: hidden; } diff --git a/plugins/document-assets/lang/ar.json b/plugins/document-assets/lang/ar.json new file mode 100644 index 00000000000..15cb4aa91ff --- /dev/null +++ b/plugins/document-assets/lang/ar.json @@ -0,0 +1,64 @@ +{ + "string": { + "Document": "مستند", + "ParentDocument": "المستند الأصل", + "ChildDocument": "المستند الفرعي", + "CreateDocument": "إنشاء مستند", + "Documents": "المستندات", + "CreateAnVersion": "إنشاء إصدار جديد", + "DocumentNamePlaceholder": "بلا عنوان", + "Name": "الاسم", + "Cancel": "إلغاء", + "Version": "الإصدار", + "SearchDocument": "البحث في المستندات...", + "Snapshot": "لقطة", + "NoVersions": "لم يتم تعريف أي إصدار", + "DocumentApplication": "المستندات", + "MyDocuments": "مستنداتي", + "Teamspace": "مساحة الفريق", + "Teamspaces": "مساحات الفرق", + "Labels": "التسميات", + "AddLabel": "إضافة تسمية", + "Authors": "المؤلفون", + "Backlinks": "الروابط الخلفية", + "History": "السجل", + "DescriptionPlaceholder": "اكتب للتفاصيل...", + "CreateTeamspace": "إنشاء مساحة فريق", + "EditTeamspace": "تعديل مساحة الفريق", + "NewTeamspace": "مساحة فريق جديدة", + "TeamspaceTitle": "عنوان مساحة الفريق", + "TeamspaceTitlePlaceholder": "مساحة فريق جديدة", + "TeamspaceDescriptionPlaceholder": "إضافة وصف ...", + "ChooseIcon": "اختيار أيقونة", + "TeamspaceMembers": "الأعضاء", + "NoParentDocument": "لا يوجد مستند أصل", + "NoBacklinks": "لا توجد روابط خلفية", + "NoHistory": "لا يوجد سجل سابق", + "Untitled": "بلا عنوان", + + "Description": "الوصف", + + "CopyDocumentUrl": "نسخ URL المستند إلى الحافظة", + "DocumentUrlCopied": "تم النسخ!", + + "ViewMode": "عرض", + "EditMode": "تعديل", + "SuggestMode": "اقتراح", + + "CompareTo": "مقارنة بـ...", + "Star": "إضافة إلى المميَّزة", + "Unstar": "إزالة من المميَّزة", + + "Lock": "قفل", + "Unlock": "إلغاء القفل", + "Locked": "مقفل", + + "ConfigLabel": "المستندات", + "ConfigDescription": "امتداد لتحرير المستندات التعاوني", + + "Icon": "الأيقونة", + "Color": "اللون", + "ForbidCreateTeamspacePermission": "منع إنشاء مساحة فريق", + "ForbidCreateTeamspacePermissionDescription": "منع المستخدمين من إنشاء مساحات فرق جديدة" + } +} diff --git a/plugins/document-resources/src/components/EditDoc.svelte b/plugins/document-resources/src/components/EditDoc.svelte index 76991fc33cf..1df2419e26f 100644 --- a/plugins/document-resources/src/components/EditDoc.svelte +++ b/plugins/document-resources/src/components/EditDoc.svelte @@ -465,7 +465,7 @@ .toc { width: 1rem; pointer-events: all; - margin-left: -3rem; + margin-inline-start: -3rem; position: sticky; top: 0; } @@ -481,7 +481,7 @@ margin-bottom: 1rem; .icon { - margin-left: -3rem; + margin-inline-start: -3rem; width: 3rem; } } diff --git a/plugins/document-resources/src/components/navigator/DropArea.svelte b/plugins/document-resources/src/components/navigator/DropArea.svelte index 0d623e0634b..a6e2ef9cb62 100644 --- a/plugins/document-resources/src/components/navigator/DropArea.svelte +++ b/plugins/document-resources/src/components/navigator/DropArea.svelte @@ -19,8 +19,8 @@ .drop-area { pointer-events: none; position: absolute; - left: 0.75rem; - right: 0.75rem; + inset-inline-start: 0.75rem; + inset-inline-end: 0.75rem; top: 0; bottom: 0; background-color: var(--global-ui-highlight-BackgroundColor); diff --git a/plugins/document-resources/src/components/navigator/DropMarker.svelte b/plugins/document-resources/src/components/navigator/DropMarker.svelte index ff849a72e51..2dfe82e329a 100644 --- a/plugins/document-resources/src/components/navigator/DropMarker.svelte +++ b/plugins/document-resources/src/components/navigator/DropMarker.svelte @@ -26,8 +26,8 @@ height: 0.125rem; background-color: var(--primary-button-focused); - left: 0.75rem; - right: 0.75rem; + inset-inline-start: 0.75rem; + inset-inline-end: 0.75rem; top: 10rem; } diff --git a/plugins/drive-assets/lang/ar.json b/plugins/drive-assets/lang/ar.json new file mode 100644 index 00000000000..2e52991dd5f --- /dev/null +++ b/plugins/drive-assets/lang/ar.json @@ -0,0 +1,45 @@ +{ + "string": { + "Drive": "محرك الأقراص", + "Drives": "محركات الأقراص", + "Grid": "شبكة", + "File": "ملف", + "Files": "الملفات", + "FileVersion": "إصدار الملف", + "FileVersions": "إصدارات الملف", + "Folder": "مجلد", + "Folders": "المجلدات", + "Resource": "مورد", + "Name": "الاسم", + "Description": "الوصف", + "Parent": "الأصل", + "Path": "المسار", + "Version": "الإصدار", + "Size": "الحجم", + "ContentType": "نوع المحتوى", + "LastModified": "آخر تعديل", + "Download": "تنزيل", + "Upload": "رفع", + "CreateDrive": "إنشاء محرك أقراص", + "CreateFolder": "إنشاء مجلد", + "UploadFile": "رفع الملفات", + "EditDrive": "تحرير محرك الأقراص", + "Rename": "إعادة تسمية", + "Restore": "استعادة", + "Root": "/", + "ForbidCreateDrivePermission": "منع إنشاء محرك أقراص", + "ForbidCreateDrivePermissionDescription": "منع المستخدمين من إنشاء محركات أقراص جديدة", + "CreateFilePermission": "إنشاء ملف", + "CreateFilePermissionDescription": "يمنح المستخدمين القدرة على إنشاء الملفات", + "UpdateFilePermission": "تحديث ملف", + "UpdateFilePermissionDescription": "يمنح المستخدمين القدرة على تحديث الملفات", + "RemoveFilePermission": "إزالة ملف", + "RemoveFilePermissionDescription": "يمنح المستخدمين القدرة على إزالة الملفات", + "CreateFolderPermission": "إنشاء مجلد", + "CreateFolderPermissionDescription": "يمنح المستخدمين القدرة على إنشاء المجلدات", + "UpdateFolderPermission": "تحديث مجلد", + "UpdateFolderPermissionDescription": "يمنح المستخدمين القدرة على تحديث المجلدات", + "RemoveFolderPermission": "إزالة مجلد", + "RemoveFolderPermissionDescription": "يمنح المستخدمين القدرة على إزالة المجلدات" + } +} diff --git a/plugins/emoji-assets/lang/ar.json b/plugins/emoji-assets/lang/ar.json new file mode 100644 index 00000000000..90eede1d31d --- /dev/null +++ b/plugins/emoji-assets/lang/ar.json @@ -0,0 +1,41 @@ +{ + "string": { + "SmileysAndPeople": "الوجوه والأشخاص", + "Components": "المكوّنات", + "AnimalsAndNature": "الحيوانات والطبيعة", + "FoodAndDrink": "الطعام والشراب", + "TravelAndPlaces": "السفر والأماكن", + "Activities": "الأنشطة", + "Objects": "الأشياء", + "Symbols": "الرموز", + "Flags": "الأعلام", + "FrequentlyUsed": "الأكثر استخداماً", + "GettingWorkDone": "إنجاز العمل", + "DefaultSkinTone": "لون البشرة الافتراضي", + "NoTone": "بدون لون", + "Light": "فاتح", + "MediumLight": "فاتح متوسط", + "Medium": "متوسط", + "MediumDark": "داكن متوسط", + "Dark": "داكن", + "Remove": "إزالة", + "SearchDots": "بحث...", + "SearchResults": "نتائج البحث", + "CustomEmojis": "إيموجي مخصصة", + "Shortcode": "الاسم", + "ShortcodeDescription": "يمكن أن يحتوي على أحرف وأرقام والرموز '-' و'+' و'_'.", + "Image": "صورة", + "ImageDescription": "حدد ملف ‎.gif‎ أو ‎.png‎ أو ‎.jpg‎ للإيموجي الخاص بك.", + "UploadImage": "رفع", + "Preview": "معاينة", + "PreviewTextBegin": "هذه جملة تحتوي على ", + "PreviewTextEnd": " بداخلها.", + "CreateTitle": "إنشاء إيموجي مخصص", + "Create": "إنشاء", + "ImageAspectError": "يجب أن تكون نسبة أبعاد الصورة 1:1.", + "ShortcodeMatchError": "يمكن أن يحتوي على أحرف وأرقام والرموز '-' و'+' و'_'.", + "ShortcodeExistsError": "هذا الاسم مستخدم بالفعل. يرجى اختيار اسم آخر.", + "NewCustomEmojiDialogClose": "هل تريد إغلاق هذه النافذة؟", + "NewCustomEmojiDialogCloseNote": "ستُفقد جميع التغييرات" + } +} diff --git a/plugins/emoji-resources/src/components/EmojiButton.svelte b/plugins/emoji-resources/src/components/EmojiButton.svelte index 60ebec273a5..66d39845bd7 100644 --- a/plugins/emoji-resources/src/components/EmojiButton.svelte +++ b/plugins/emoji-resources/src/components/EmojiButton.svelte @@ -119,7 +119,7 @@ content: ''; position: absolute; top: -0.375rem; - right: -0.375rem; + inset-inline-end: -0.375rem; width: 1rem; height: 1rem; border-radius: 50%; diff --git a/plugins/emoji-resources/src/components/EmojiGroup.svelte b/plugins/emoji-resources/src/components/EmojiGroup.svelte index a47c81e988d..e033add291a 100644 --- a/plugins/emoji-resources/src/components/EmojiGroup.svelte +++ b/plugins/emoji-resources/src/components/EmojiGroup.svelte @@ -85,7 +85,7 @@ content: ''; position: absolute; top: -1px; - left: 0; + inset-inline-start: 0; width: 100%; height: 150%; background: var(--theme-popup-trans-gradient); diff --git a/plugins/emoji-resources/src/components/EmojiPopup.svelte b/plugins/emoji-resources/src/components/EmojiPopup.svelte index 4f9799080e0..1e31e5bdc0b 100644 --- a/plugins/emoji-resources/src/components/EmojiPopup.svelte +++ b/plugins/emoji-resources/src/components/EmojiPopup.svelte @@ -429,7 +429,7 @@ .hulyPopupEmoji-footer { position: absolute; - left: 50%; + inset-inline-start: 50%; bottom: 0.75rem; width: calc(100% - 1.5rem); height: 1rem; diff --git a/plugins/export-assets/lang/ar.json b/plugins/export-assets/lang/ar.json new file mode 100644 index 00000000000..0cd0c6393de --- /dev/null +++ b/plugins/export-assets/lang/ar.json @@ -0,0 +1,58 @@ +{ + "string": { + "WorkspaceNamePattern": "يجب أن يكون الاسم 40 حرفًا أو أقل، وغير فارغ، ولا يمكن أن يحتوي على أحرف خاصة (<، >، /)", + "Export": "تصدير", + "DataToExport": "البيانات المراد تصديرها", + "ExportDocuments": "المستندات", + "ExportMilestones": "معلم", + "ExportIssues": "القضايا", + "ExportTestCases": "حالات الاختبار", + "ExportTestRuns": "عمليات تشغيل الاختبار", + "ExportTestPlans": "خطط الاختبار", + "ExportFormat": "صيغة التصدير", + "ExportJSON": "JSON", + "ExportCSV": "CSV", + "ExportUnifiedFormat": "صيغة Huly الموحدة", + "ExportIncludeContent": "تضمين المحتوى", + "ExportEverything": "كل شيء", + "ExportAttributesOnly": "السمات فقط", + "ExportRequestSuccess": "بدأ التصدير.", + "ExportRequestSuccessMessage": "بدأ التصدير. ستتلقى إشعارًا في صندوق الوارد عند اكتماله.", + "ExportRequestFailed": "تعذّر إرسال التصدير.", + "ExportRequestFailedMessage": "حدث خطأ أثناء إرسال التصدير. يُرجى المحاولة لاحقًا.", + "ExportCompleted": "اكتمل التصدير. ملفاتك جاهزة. يمكنك تنزيلها من المساحة التخزينية.", + "ExportFailed": "تعذّر تصدير البيانات. يُرجى المحاولة لاحقًا.", + "ExportToWorkspace": "التصدير إلى مساحة عمل أخرى", + "TargetWorkspace": "مساحة العمل المستهدفة", + "ExportSource": "مصدر التصدير", + "ExportSelected": "العناصر المحددة", + "ExportAll": "جميع العناصر", + "ExportStarted": "بدأ التصدير", + "ExportStartedMessage": "بدأ التصدير. ستتلقى إشعارًا عند اكتماله.", + "ExportToWorkspaceCompleted": "اكتمل التصدير", + "ExportToWorkspaceCompletedMessage": "اكتمل التصدير بنجاح.", + "ImportToWorkspaceNotificationMessage": "تم استيراد {count} مستند إلى مساحة عملك", + "ImportCompleted": "تم استيراد المستندات إلى مساحة العمل", + "SourceWorkspace": "مساحة العمل المصدر", + "ExportedCount": "عدد العناصر المصدَّرة", + "ExportedDocumentIds": "معرّفات المستندات المصدَّرة", + "DocumentsImportedFromWorkspace": "{count, plural, one {تم استيراد مستند واحد من مساحة العمل {workspace}} other {تم استيراد # مستندات من مساحة العمل {workspace}}}:", + "ExportedDocumentClass": "فئة المستند المصدَّر", + "Import": "استيراد", + "ImportedDocuments": "مستندات جديدة", + "ExportToWorkspaceFailed": "فشل التصدير", + "SelectWorkspace": "اختر مساحة عمل", + "SelectWorkspaceToExport": "اختر مساحة عمل لتصدير {count, plural, =1 {مستند واحد} other {# مستندات}}", + "SelectWorkspaceToExportSpace": "اختر مساحة عمل لتصدير المستندات", + "SelectSpace": "اختر مساحة", + "NoSelectedDocuments": "لم يتم تحديد أي مستندات", + "NoDocumentsMatchedFilters": "لم يتم العثور على مستندات للتصدير بعوامل التصفية الحالية. حاول تعديل عوامل التصفية أو التحديد ثم أعد المحاولة.", + "RequestPermissionToImport": "يُرجى طلب الإذن من مالك مساحة العمل المستهدفة لاستيراد المستندات.", + "ExportOnlyEffective": "تصدير المستندات ذات الحالة السارية فقط", + "ExportFilterMode": "المستندات المراد تصديرها", + "ExportFilterEffectiveOnly": "تصدير المستندات السارية فقط", + "ExportFilterSkipArchivedObsolete": "جميع المستندات باستثناء المؤرشفة والمتقادمة", + "ExportFilterAll": "جميع المستندات", + "ExportResultRecordTitle": "تصدير المستندات من مساحة العمل {workspace} ({date})" + } +} diff --git a/plugins/global-profile-assets/lang/ar.json b/plugins/global-profile-assets/lang/ar.json new file mode 100644 index 00000000000..19e61f8fe12 --- /dev/null +++ b/plugins/global-profile-assets/lang/ar.json @@ -0,0 +1,29 @@ +{ + "string": { + "GlobalProfile": "الملف الشخصي العام", + "EditProfile": "تعديل الملف الشخصي", + "GeneralInformation": "المعلومات العامة", + "FirstName": "الاسم الأول", + "LastName": "اسم العائلة", + "City": "المدينة", + "Country": "الدولة", + "Bio": "نبذة تعريفية", + "FirstNamePlaceholder": "أدخل الاسم الأول", + "LastNamePlaceholder": "أدخل اسم العائلة", + "CityPlaceholder": "أدخل المدينة", + "CountryPlaceholder": "أدخل الدولة", + "BioPlaceholder": "أخبرنا عن نفسك...", + "Save": "حفظ", + "Cancel": "إلغاء", + "MaximumLength": "بحد أقصى {count} حرفًا", + "Required": "هذا الحقل مطلوب", + "ProfileVisibility": "ظهور الملف الشخصي", + "PublicProfile": "عام", + "PrivateProfile": "خاص", + "PublicProfileDescription": "ملفك الشخصي مرئي للجميع", + "PrivateProfileDescription": "ملفك الشخصي مرئي لك فقط", + "AddBioPlaceholder": "أضف نبذة تعريفية لتخبر الآخرين عن نفسك...", + "AddLocationPlaceholder": "أضف موقعك...", + "ProfileNotAvailable": "الملف الشخصي غير متوفر" + } +} diff --git a/plugins/global-profile-resources/src/components/GlobalProfileApp.svelte b/plugins/global-profile-resources/src/components/GlobalProfileApp.svelte index 8ff82cfd6b5..e9ce53a31c1 100644 --- a/plugins/global-profile-resources/src/components/GlobalProfileApp.svelte +++ b/plugins/global-profile-resources/src/components/GlobalProfileApp.svelte @@ -251,8 +251,8 @@ .header { width: 100%; height: 12.5rem; - border-top-left-radius: 0.8rem; - border-top-right-radius: 0.8rem; + border-start-start-radius: 0.8rem; + border-start-end-radius: 0.8rem; overflow: hidden; } @@ -260,20 +260,20 @@ position: relative; width: 100%; flex: 1 1 0; - border-bottom-left-radius: 0.8rem; - border-bottom-right-radius: 0.8rem; + border-end-start-radius: 0.8rem; + border-end-end-radius: 0.8rem; } .edit { position: absolute; top: 1.5rem; - right: 1.5rem; + inset-inline-end: 1.5rem; } .actions { position: absolute; top: 1.5rem; - right: 1.5rem; + inset-inline-end: 1.5rem; display: flex; align-items: center; gap: 0.5rem; @@ -288,7 +288,7 @@ height: 10rem; background-color: var(--theme-popup-color); position: absolute; - left: 1.5rem; + inset-inline-start: 1.5rem; top: 6rem; border-radius: 100%; } @@ -301,9 +301,9 @@ margin: auto; border-radius: 100%; top: 0; - right: 0; + inset-inline-end: 0; bottom: 0; - left: 0; + inset-inline-start: 0; } .avatarText { @@ -316,7 +316,7 @@ transform: translate(-50%, -50%); position: absolute; top: 50%; - left: 50%; + inset-inline-start: 50%; } } diff --git a/plugins/global-profile-resources/src/components/ProfileField.svelte b/plugins/global-profile-resources/src/components/ProfileField.svelte index 3cc5a272159..39b0a436b8a 100644 --- a/plugins/global-profile-resources/src/components/ProfileField.svelte +++ b/plugins/global-profile-resources/src/components/ProfileField.svelte @@ -70,7 +70,7 @@ .counter { color: var(--theme-dark-color); - margin-left: auto; + margin-inline-start: auto; &.error { color: var(--theme-error-color); diff --git a/plugins/gmail-assets/lang/ar.json b/plugins/gmail-assets/lang/ar.json new file mode 100644 index 00000000000..1e2b44ef1f5 --- /dev/null +++ b/plugins/gmail-assets/lang/ar.json @@ -0,0 +1,50 @@ +{ + "string": { + "MessageID": "معرّف الرسالة", + "IntegrationLabel": "Gmail", + "IntegrationDescription": "اربط حساب Gmail الخاص بك لإرسال رسائل البريد الإلكتروني واستقبالها وإدارتها", + "SharedMessages": "رسائل البريد الإلكتروني المشتركة", + "To": "إلى:", + "From": "من:", + "Copy": "نسخ", + "MessagesSelected": "الرسائل المحددة", + "PublishSelected": "نشر المحدد", + "CreateMessage": "إنشاء رسالة", + "ShareMessages": "مشاركة الرسائل", + "Connect": "اتصال", + "RedirectGoogle": "سيتم إعادة توجيهك إلى صفحة مصادقة Google. يُرجى التأكد من تحديد جميع الأذونات.", + "ConnectGmail": "ربط حساب Gmail", + "Reply": "رد", + "Subject": "الموضوع", + "Send": "إرسال", + "Resend": "إعادة الإرسال", + "NewMessage": "رسالة جديدة", + "NewMessageTo": "رسالة جديدة إلى", + "Cancel": "إلغاء", + "SubjectPlaceholder": "موضوع الرسالة", + "CopyPlaceholder": "نسخة إلى", + "ReplyTo": "الرد إلى", + "Message": "رسالة", + "Messages": "الرسائل", + "Incoming": "واردة", + "Email": "البريد الإلكتروني", + "Status": "الحالة", + "EmailPlaceholder": "john.appleseed@apple.com", + "WriteEmail": "كتابة بريد إلكتروني", + "Shared": "مشترك", + "AvailableTo": "متاح لـ", + "HaveWrittenEmail": "كتبوا بريدًا إلكترونيًا", + "NewIncomingMessage": "أرسل لك بريدًا إلكترونيًا جديدًا", + "ConfigLabel": "البريد الإلكتروني", + "ConfigDescription": "إضافة لتكامل بريد Gmail الإلكتروني", + "GooglePrivacy": "إن استخدام Huly ونقلها للمعلومات المستلمة من واجهات برمجة تطبيقات Google إلى أي تطبيق آخر سيلتزم بـ سياسة بيانات مستخدم خدمات Google API، بما في ذلك متطلبات الاستخدام المحدود.", + "EmailNotificationsDescription": "تلقّي الإشعارات الشخصية على البريد الإلكتروني.", + "FailedToConnect": "خدمة Gmail غير متوفرة", + "TotalMessages": "إجمالي الرسائل:", + "Configure": "تهيئة تكامل Gmail", + "GmailSpace": "مساحة لقناة الرسائل", + "PersonSpaceInfo": "سيكون البريد متاحًا لك", + "SharedSpaceInfo": "سيكون البريد متاحًا لجميع المشاركين في المساحة", + "ConfigurationRequired": "يُرجى تهيئة تكامل Gmail لبدء استخدامه" + } +} diff --git a/plugins/gmail-resources/src/components/NewMessages.svelte b/plugins/gmail-resources/src/components/NewMessages.svelte index b46d438c30f..b5941bf8b62 100644 --- a/plugins/gmail-resources/src/components/NewMessages.svelte +++ b/plugins/gmail-resources/src/components/NewMessages.svelte @@ -363,8 +363,8 @@ border-radius: 0.25rem; .item + .item { - padding-left: 1rem; - border-left: 1px solid var(--divider-color); + padding-inline-start: 1rem; + border-inline-start: 1px solid var(--divider-color); } } diff --git a/plugins/guest-assets/lang/ar.json b/plugins/guest-assets/lang/ar.json new file mode 100644 index 00000000000..5d34c034d44 --- /dev/null +++ b/plugins/guest-assets/lang/ar.json @@ -0,0 +1,10 @@ +{ + "string": { + "CreatePublicLink": "إنشاء رابط عام", + "PublicLink": "رابط عام", + "Revoke": "إبطال", + "RevokeConfirmation": "سيؤدي هذا إلى توقف الرابط الذي تمت مشاركته سابقًا عن العمل. هل أنت متأكد من رغبتك في إبطال هذا الرابط العام؟", + "LinkWasRevoked": "تم إبطال الرابط العام", + "Copy": "نسخ" + } +} diff --git a/plugins/hr-assets/lang/ar.json b/plugins/hr-assets/lang/ar.json new file mode 100644 index 00000000000..8b8f94c744b --- /dev/null +++ b/plugins/hr-assets/lang/ar.json @@ -0,0 +1,69 @@ +{ + "string": { + "Department": "القسم", + "ParentDepartmentLabel": "القسم الأصل", + "Structure":"الهيكل", + "CreateDepartment": "إنشاء قسم", + "CreateDepartmentLabel": "القسم", + "DepartmentPlaceholder": "القسم", + "TeamLead": "قائد الفريق", + "UnAssignLead": "إلغاء إسناد قائد الفريق", + "MemberCount": "{count, plural, =0 {لا يوجد موظفون} =1 {موظف واحد} other {# موظفين}}", + "AssignLead": "إسناد قائد الفريق", + "TeamLeadTooltip": "{value}", + "HRApplication": "الموارد البشرية (تجريبي)", + "MoveStaff": "نقل الموظف", + "MoveStaffDescr": "هل تريد نقل الموظف من {current} إلى {department}", + "Departments": "الأقسام", + "Positions": "المناصب", + "ShowEmployees": "عرض الموظفين", + "AddEmployee": "إضافة موظف", + "SelectEmployee": "اختيار موظف", + "Schedule": "الجدول الزمني", + "RequestType": "النوع", + "CreateRequest": "إنشاء {type}", + "Today": "اليوم", + "Summary": "الإجمالي", + "NoEmployeesInDepartment": "لا يوجد موظفون في القسم المحدد", + "Vacation": "إجازة", + "Sick": "إجازة مرضية", + "PTO": "إجازة مدفوعة", + "PTOs": "إجازات مدفوعة", + "Remote": "عمل عن بُعد", + "Overtime": "عمل إضافي", + "PTO2": "إجازة مدفوعة/2", + "Overtime2": "عمل إضافي/2", + "EditRequest": "تعديل {type}", + "EditRequestType": "تعديل النوع", + "ChooseNewType": "اختر نوعًا جديدًا:", + "UnchangeableType": "لا يمكن تغيير هذا النوع", + "Request": "الطلب", + "ExistingRequests": "توجد بالفعل طلبات للتواريخ المحددة", + "Staff": "العامل", + "Member": "العضو", + "Members": "الأعضاء", + "NoMembers": "لم تتم إضافة أعضاء", + "AddMember": "إضافة عضو", + "Subscribers": "المشتركون", + "PublicHoliday": "عطلة رسمية", + "Title": "العنوان", + "Description": "الوصف", + "PublicHolidays": "العطل الرسمية", + "MarkAsPublicHoliday": "تعليم كعطلة رسمية", + "EditPublicHoliday": "تعديل العطلة الرسمية", + "Managers": "المديرون", + "Export": "تصدير", + "Separator": "الفاصل", + "ChooseSeparator": "اختيار الفاصل", + "RequestCreated": "تم إنشاء الطلب", + "RequestUpdated": "تم تحديث الطلب", + "RequestRemoved": "تمت إزالة الطلب", + "ConfigLabel": "الموارد البشرية", + "ConfigDescription": "امتداد لإدارة هيكل المؤسسة وتقويم عمل الموظفين", + "WorkingDays": "أيام العمل", + "ReportedDays": "الأيام المبلّغ عنها", + "Tasks": "المهام", + "TPD": "TPD", + "EXTRa": "EXTRa" + } +} diff --git a/plugins/hr-resources/src/components/schedule/MonthView.svelte b/plugins/hr-resources/src/components/schedule/MonthView.svelte index 315d79c048f..e5a1263c897 100644 --- a/plugins/hr-resources/src/components/schedule/MonthView.svelte +++ b/plugins/hr-resources/src/components/schedule/MonthView.svelte @@ -437,7 +437,7 @@ z-index: 1; &.timeline-resource-header { - left: 0; + inset-inline-start: 0; z-index: 2; } } @@ -460,7 +460,7 @@ background-color: $timeline-bg-color; position: sticky; - left: 0; + inset-inline-start: 0; z-index: 1; } @@ -523,7 +523,7 @@ } .timeline-cell { - border-right: $timeline-border; + border-inline-end: $timeline-border; width: $timeline-column-width; height: 100%; @@ -554,7 +554,7 @@ } .timeline-resource-cell { - border-right: $timeline-border; + border-inline-end: $timeline-border; width: 100%; height: 100%; @@ -564,8 +564,8 @@ .timeline-event-wrapper { position: absolute; height: 1.5rem; - padding-left: 0.125rem; - padding-right: 0.125rem; + padding-inline-start: 0.125rem; + padding-inline-end: 0.125rem; pointer-events: all; } diff --git a/plugins/hr-resources/src/components/schedule/StaffPresenter.svelte b/plugins/hr-resources/src/components/schedule/StaffPresenter.svelte index c5870bdad90..d5dff009d59 100644 --- a/plugins/hr-resources/src/components/schedule/StaffPresenter.svelte +++ b/plugins/hr-resources/src/components/schedule/StaffPresenter.svelte @@ -68,7 +68,7 @@ color: var(--theme-warning-color); opacity: 0.8; font-size: 0.75rem; - margin-left: 0.25rem; + margin-inline-start: 0.25rem; } .member-department { color: var(--theme-caption-color); diff --git a/plugins/hr-resources/src/components/schedule/YearView.svelte b/plugins/hr-resources/src/components/schedule/YearView.svelte index cf9eff2e39a..e0a38b0fee6 100644 --- a/plugins/hr-resources/src/components/schedule/YearView.svelte +++ b/plugins/hr-resources/src/components/schedule/YearView.svelte @@ -213,7 +213,7 @@ &.td-body { border-bottom: 1px solid var(--divider-color); &:not(:last-child) { - border-right: 1px solid var(--divider-color); + border-inline-end: 1px solid var(--divider-color); } } } diff --git a/plugins/huly-mail-assets/lang/ar.json b/plugins/huly-mail-assets/lang/ar.json new file mode 100644 index 00000000000..d107dd49b97 --- /dev/null +++ b/plugins/huly-mail-assets/lang/ar.json @@ -0,0 +1,20 @@ +{ + "string": { + "IntegrationLabel": "Huly Mail", + "IntegrationDescription": "اربط صندوق بريد Huly الخاص بك لإرسال الرسائل واستقبالها وإدارتها", + "Connect": "اتصال", + "ConnectHulyMail": "ربط صندوق بريد Huly", + "Cancel": "إلغاء", + "Email": "البريد الإلكتروني", + "Status": "الحالة", + "FailedToConnect": "خدمة بريد Huly غير متاحة", + "TotalMessages": "إجمالي الرسائل:", + "Configure": "تكوين بريد Huly", + "ChannelSpace": "مساحة قناة الرسائل", + "PersonSpaceInfo": "سيكون البريد متاحًا لك", + "SharedSpaceInfo": "سيكون البريد متاحًا لجميع المشاركين في المساحة", + "Mailbox": "صندوق البريد", + "MailboxesNotConfigured": "لم يتم العثور على صناديق بريد", + "ConfigureMailBoxes": "يرجى إضافة صندوق بريد في قسم `Mailboxes` للبدء" + } +} diff --git a/plugins/inbox-assets/lang/ar.json b/plugins/inbox-assets/lang/ar.json new file mode 100644 index 00000000000..70d3ba65079 --- /dev/null +++ b/plugins/inbox-assets/lang/ar.json @@ -0,0 +1,13 @@ +{ + "string": { + "Inbox": "صندوق الوارد", + "ReactedToYourMessage": "تفاعل مع رسالتك", + "ClearAll": "مسح الكل", + "InboxIsClear": "صندوق الوارد فارغ", + "YouDontHaveAnyNewMessages": "ليس لديك أي رسائل جديدة", + "ReadAll": "تعليم الكل كمقروء", + "Clearing": "جارٍ المسح...", + "Reading": "جارٍ القراءة...", + "HideUserNames": "إخفاء أسماء المستخدمين" + } +} diff --git a/plugins/inbox-resources/src/components/InboxCard.svelte b/plugins/inbox-resources/src/components/InboxCard.svelte index a00199e889a..d98a11aba8f 100644 --- a/plugins/inbox-resources/src/components/InboxCard.svelte +++ b/plugins/inbox-resources/src/components/InboxCard.svelte @@ -214,7 +214,7 @@ display: flex; align-items: center; gap: 0.5rem; - margin-left: var(--spacing-0_5); + margin-inline-start: var(--spacing-0_5); height: 2.5rem; min-height: 2.5rem; max-height: 2.5rem; @@ -223,14 +223,14 @@ &__remove { display: flex; align-items: center; - margin-left: auto; + margin-inline-start: auto; min-width: 1.5rem; } &__content { display: flex; width: 100%; - padding-left: 0.5rem; + padding-inline-start: 0.5rem; } &__notifications { diff --git a/plugins/inbox-resources/src/components/InboxCardIcon.svelte b/plugins/inbox-resources/src/components/InboxCardIcon.svelte index f444e07e789..b8663326566 100644 --- a/plugins/inbox-resources/src/components/InboxCardIcon.svelte +++ b/plugins/inbox-resources/src/components/InboxCardIcon.svelte @@ -65,7 +65,7 @@ &__marker { position: absolute; top: -0.375rem; - right: 0; + inset-inline-end: 0; transform: translateX(calc(100% - 0.875rem)); display: flex; align-items: center; diff --git a/plugins/inbox-resources/src/components/InboxHeader.svelte b/plugins/inbox-resources/src/components/InboxHeader.svelte index 86d3d9070b2..6c7d3be2ea5 100644 --- a/plugins/inbox-resources/src/components/InboxHeader.svelte +++ b/plugins/inbox-resources/src/components/InboxHeader.svelte @@ -134,6 +134,6 @@ color: var(--global-secondary-TextColor); font-weight: 500; font-size: 0.625rem; - margin-left: 0.25rem; + margin-inline-start: 0.25rem; } diff --git a/plugins/inbox-resources/src/components/NotificationTemplate.svelte b/plugins/inbox-resources/src/components/NotificationTemplate.svelte index 2c3b8de6a20..dff216437ee 100644 --- a/plugins/inbox-resources/src/components/NotificationTemplate.svelte +++ b/plugins/inbox-resources/src/components/NotificationTemplate.svelte @@ -28,13 +28,13 @@ user-select: none; &:first-child .marker { - border-top-left-radius: 0.5rem; - border-top-right-radius: 0.5rem; + border-start-start-radius: 0.5rem; + border-start-end-radius: 0.5rem; } &:last-child .marker { - border-bottom-left-radius: 0.5rem; - border-bottom-right-radius: 0.5rem; + border-end-start-radius: 0.5rem; + border-end-end-radius: 0.5rem; } &:hover .marker { diff --git a/plugins/inbox-resources/src/components/ReactionNotification.svelte b/plugins/inbox-resources/src/components/ReactionNotification.svelte index 1dcbe8ae8ea..20f688e7c2d 100644 --- a/plugins/inbox-resources/src/components/ReactionNotification.svelte +++ b/plugins/inbox-resources/src/components/ReactionNotification.svelte @@ -80,8 +80,8 @@ display: flex; align-items: center; gap: 0.25rem; - padding-right: var(--spacing-0_75); - padding-left: var(--spacing-1_25); + padding-inline-end: var(--spacing-0_75); + padding-inline-start: var(--spacing-1_25); } &__emoji { @@ -93,7 +93,7 @@ min-height: 1.325rem; height: 1.325rem; overflow: hidden; - margin-right: 0.25rem; + margin-inline-end: 0.25rem; } } diff --git a/plugins/inbox-resources/src/components/legacy/ReactionInboxNotificationPresenter.svelte b/plugins/inbox-resources/src/components/legacy/ReactionInboxNotificationPresenter.svelte index aca1dc51191..194f4071bda 100644 --- a/plugins/inbox-resources/src/components/legacy/ReactionInboxNotificationPresenter.svelte +++ b/plugins/inbox-resources/src/components/legacy/ReactionInboxNotificationPresenter.svelte @@ -82,8 +82,8 @@ display: flex; align-items: center; gap: 0.25rem; - padding-right: var(--spacing-0_75); - padding-left: var(--spacing-1_25); + padding-inline-end: var(--spacing-0_75); + padding-inline-start: var(--spacing-1_25); } &__emoji { @@ -95,7 +95,7 @@ min-height: 1.325rem; height: 1.325rem; overflow: hidden; - margin-right: 0.25rem; + margin-inline-end: 0.25rem; } } diff --git a/plugins/inventory-assets/lang/ar.json b/plugins/inventory-assets/lang/ar.json new file mode 100644 index 00000000000..afda015087f --- /dev/null +++ b/plugins/inventory-assets/lang/ar.json @@ -0,0 +1,25 @@ +{ + "status": { + "CategoryRequired": "الفئة مطلوبة", + "NameRequired": "الاسم مطلوب" + }, + "string": { + "Categories": "الفئات", + "Category": "الفئة", + "CategoryCreateLabel": "فئة", + "CreateCategory": "إنشاء فئة", + "CreateSubcategory": "إنشاء فئة فرعية", + "Inventory": "المخزون", + "ProductCreateLabel": "منتج", + "CreateProduct": "إنشاء منتج", + "Products": "المنتجات", + "Product": "المنتج", + "Variant": "المتغير", + "SKU": "SKU", + "Variants": "المتغيرات", + "NoVariantsForProduct": "لا توجد متغيرات لهذا المنتج.", + "CreateVariant": "إنشاء متغير", + "ConfigLabel": "المخزون", + "ConfigDescription": "امتداد لإدارة الامتدادات" + } +} diff --git a/plugins/inventory-resources/src/components/HierarchyElement.svelte b/plugins/inventory-resources/src/components/HierarchyElement.svelte index 6d792557af2..b486cb27e9d 100644 --- a/plugins/inventory-resources/src/components/HierarchyElement.svelte +++ b/plugins/inventory-resources/src/components/HierarchyElement.svelte @@ -103,11 +103,11 @@ align-items: center; .menuRow { visibility: hidden; - margin-left: 0.5rem; + margin-inline-start: 0.5rem; } .expand { - margin-left: -1.5rem; - margin-right: 0.5rem; + margin-inline-start: -1.5rem; + margin-inline-end: 0.5rem; } .expand, .menuRow { @@ -120,12 +120,12 @@ } td { padding: 0.5rem 1.5rem; - text-align: left; + text-align: start; &:first-child { - padding-left: 2.5rem; + padding-inline-start: 2.5rem; } &:last-child { - padding-right: 1.5rem; + padding-inline-end: 1.5rem; } } diff --git a/plugins/inventory-resources/src/components/HierarchyView.svelte b/plugins/inventory-resources/src/components/HierarchyView.svelte index 446d7fc53a9..34a945663f4 100644 --- a/plugins/inventory-resources/src/components/HierarchyView.svelte +++ b/plugins/inventory-resources/src/components/HierarchyView.svelte @@ -101,12 +101,12 @@ user-select: none; z-index: 5; padding: 0.5rem 1.5rem; - text-align: left; + text-align: start; &:first-child { - padding-left: 2.5rem; + padding-inline-start: 2.5rem; } &:last-child { - padding-right: 1.5rem; + padding-inline-end: 1.5rem; } } diff --git a/plugins/lead-assets/lang/ar.json b/plugins/lead-assets/lang/ar.json new file mode 100644 index 00000000000..1f578cde0d6 --- /dev/null +++ b/plugins/lead-assets/lang/ar.json @@ -0,0 +1,40 @@ +{ + "string": { + "CreateFunnel": "قمع جديد", + "CreateLead": "عميل محتمل جديد", + "Funnel": "القمع", + "FunnelName": "اسم القمع", + "Funnels": "القمعات", + "LeadApplication": "العملاء المحتملون (تجريبي)", + "LeadCreateLabel": "عميل محتمل", + "SelectFunnel": "اختيار القمع", + "LeadName": "اسم العميل المحتمل", + "More": "المزيد...", + "Customer": "العميل", + "Customers": "العملاء", + "Leads": "العملاء المحتملون", + "MyLeads": "عملائي المحتملون", + "SelectCustomer": "اختيار العميل", + "Lead": "عميل محتمل", + "Assignee": "المُسند إليه", + "Title": "العنوان", + "LeadPlaceholder": "العميل المحتمل البسيط", + "ManageFunnelStatuses": "إدارة أنواع القمع", + "GotoLeadApplication": "التبديل إلى تطبيق العملاء المحتملين", + "IssueDescriptionPlaceholder": "أضف وصفًا...", + "CreateCustomer": "إنشاء عميل", + "CreateCustomerLabel": "عميل جديد", + "NoLeadsForDocument": "لا يوجد عملاء محتملون لهذا المستند", + "Description": "وصف العميل", + "FullDescription": "الوصف الكامل", + "FunnelPlaceholder": "القمع البسيط", + "Members": "الأعضاء", + "UnAssign": "إلغاء الإسناد", + "ConfigLabel": "إدارة علاقات العملاء", + "ConfigDescription": "امتداد لإدارة علاقات العملاء", + "EditFunnel": "تحرير القمع", + "FunnelMembers": "الأعضاء", + "ForbidCreateFunnelPermission": "منع إنشاء القمع", + "ForbidCreateFunnelPermissionDescription": "منع المستخدمين من إنشاء قمعات جديدة" + } +} diff --git a/plugins/lead-resources/src/components/TitlePresenter.svelte b/plugins/lead-resources/src/components/TitlePresenter.svelte index 4a4d6627f28..fffda33f87c 100644 --- a/plugins/lead-resources/src/components/TitlePresenter.svelte +++ b/plugins/lead-resources/src/components/TitlePresenter.svelte @@ -50,6 +50,6 @@ } .with-margin { - margin-left: 0.5rem; + margin-inline-start: 0.5rem; } diff --git a/plugins/login-assets/lang/ar.json b/plugins/login-assets/lang/ar.json new file mode 100644 index 00000000000..2f4425fe340 --- /dev/null +++ b/plugins/login-assets/lang/ar.json @@ -0,0 +1,106 @@ +{ + "status": { + "RequiredField": "حقل مطلوب {field}", + "FieldsDoNotMatch": "{field} لا يطابق {field2}", + "ConnectingToServer": "جارٍ الاتصال بالخادم....", + "IncorrectValue": "قيمة غير صحيحة {field}" + }, + "string": { + "ChangePassword": "تغيير كلمة المرور", + "SetPassword": "تعيين كلمة مرور", + "SSOPasswordDescription": "يستخدم حسابك تسجيل دخول خارجيًا. قم بإعداد كلمة مرور عبر تأكيد البريد الإلكتروني.", + "SendSetupLink": "إرسال رابط الإعداد", + "SSOPasswordEmailSent": "تحقق من بريدك الإلكتروني للحصول على رابط لتعيين كلمة المرور.", + "SSONoEmailLinked": "لا يوجد عنوان بريد إلكتروني مرتبط بحسابك. أضف عنوانًا في إعدادات الحساب ← إدارة الهويات أولاً.", + "CurrentPassword": "كلمة المرور الحالية", + "NewPassword": "كلمة المرور الجديدة", + "EnterCurrentPassword": "أدخل كلمة المرور الحالية", + "EnterNewPassword": "أدخل كلمة المرور الجديدة", + "RepeatNewPassword": "أعد إدخال كلمة المرور الجديدة", + "PasswordExpiredDesc": "انتهت صلاحية كلمة المرور الخاصة بك. يُرجى تعيين كلمة مرور جديدة للمتابعة.", + "LogIn": "تسجيل الدخول", + "SignUp": "إنشاء حساب", + "CreateWorkspace": "إنشاء مساحة عمل", + "HaveWorkspace": "هل لديك مساحة عمل بالفعل؟", + "LastName": "اسم العائلة", + "FirstName": "الاسم الأول", + "Join": "انضمام", + "JoinWorkspace": "انضمام إلى {workspaceName}", + "Email": "البريد الإلكتروني", + "Password": "كلمة المرور", + "Workspace": "اسم مساحة العمل", + "DoNotHaveAnAccount": "ليس لديك حساب؟", + "PasswordRepeat": "أعد إدخال كلمة المرور", + "HaveAccount": "هل لديك حساب بالفعل؟", + "LoadingAccount": "جارٍ التحميل...", + "SelectWorkspace": "تحديد مساحة العمل", + "Copy": "نسخ", + "Copied": "تم النسخ", + "Close": "إغلاق", + "InviteDescription": "شارك هذا الرابط لدعوة مستخدمين آخرين", + "WantAnotherWorkspace": "هل تريد إنشاء مساحة عمل أخرى؟", + "ChangeAccount": "تغيير الحساب", + "NotSeeingWorkspace": "لا ترى مساحة عملك؟", + "ForgotPassword": "هل نسيت كلمة المرور؟", + "KnowPassword": "هل تعرف كلمة المرور؟", + "Recover": "استرداد", + "PasswordRecovery": "استرداد كلمة المرور", + "RecoveryLinkSent": "تم إرسال رابط استرداد كلمة المرور إلى البريد الإلكتروني", + "UseWorkspaceInviteSettings": "استخدام إعدادات دعوة مساحة العمل", + "LinkValidHours": "انتهاء صلاحية رابط الدعوة (بالساعات):", + "EmailMask": "قناع البريد الإلكتروني:", + "InviteLimit": "الحد الأقصى للاستخدامات لكل رابط دعوة:", + "GetLink": "الحصول على رابط الدعوة", + "NoLimit": "استخدامات غير محدودة:", + "AlreadyJoined": "هل انضممت بالفعل؟", + "ConfirmationSent": "تم إرسال رسالة إلى بريدك الإلكتروني تحتوي على رابط لتأكيد عنوانك.", + "ConfirmationSent2": "يُرجى اتباع الرابط لإكمال إنشاء حسابك.", + "ContinueWith": "المتابعة باستخدام {provider}", + "HaventReceivedCode": "لم تستلم الرمز؟", + "ResendCode": "إعادة إرسال الرمز", + "WrongEmail": "بريد إلكتروني خاطئ؟", + "ChangeEmail": "تغيير البريد الإلكتروني", + "SentTo": "لقد أرسلنا رمزًا إلى ", + "CanFindCode": "لا يمكنك العثور على رمزك؟ تحقق من مجلد الرسائل غير المرغوب فيها.", + "LoginWithPassword": "تسجيل الدخول بكلمة المرور", + "LoginWithCode": "تسجيل الدخول بالرمز", + "SignUpWithPassword": "إنشاء حساب بكلمة المرور", + "SignUpWithCode": "إنشاء حساب بالرمز", + "FillInProfile": "املأ ملفك الشخصي", + "SetUpPassword": "إعداد كلمة المرور الخاصة بك", + "Next": "التالي", + "Skip": "تخطّي", + "SignUpCompleted": "اكتمل إنشاء الحساب", + "StartUsingHuly": "ابدأ باستخدام Huly", + "PasswordMinLength": "{count, plural, =1 {يجب ألا يقل طول كلمة المرور عن # حرف} other {يجب ألا يقل طول كلمة المرور عن # أحرف}}", + "PasswordMinSpecialChars": "{count, plural, =1 {يجب أن تحتوي كلمة المرور على # حرف خاص على الأقل} other {يجب أن تحتوي كلمة المرور على # أحرف خاصة على الأقل}}", + "PasswordMinDigits": "{count, plural, =1 {يجب أن تحتوي كلمة المرور على # رقم على الأقل} other {يجب أن تحتوي كلمة المرور على # أرقام على الأقل}}", + "PasswordMinUpperChars": "{count, plural, =1 {يجب أن تحتوي كلمة المرور على # حرف كبير على الأقل} other {يجب أن تحتوي كلمة المرور على # أحرف كبيرة على الأقل}}", + "PasswordMinLowerChars": "{count, plural, =1 {يجب أن تحتوي كلمة المرور على # حرف صغير على الأقل} other {يجب أن تحتوي كلمة المرور على # أحرف صغيرة على الأقل}}", + "WorkspaceArchivedDesc": "تمت أرشفة مساحة العمل بسبب عدم استخدامها.", + "RestoreArchivedWorkspace": "إلغاء الأرشفة", + "Hello": "مرحبًا {name}،", + "ProcessingInvite": "جارٍ معالجة الدعوة، يُرجى الانتظار...", + "SignToProceed": "يُرجى تسجيل الدخول للمتابعة", + "Proceed": "متابعة", + "SetPasswordLater": "سأقوم بتعيين كلمة مرور لاحقًا", + "SetPasswordNow": "سأقوم بتعيين كلمة مرور الآن", + "LoginAsGuest": "المتابعة كضيف", + "SignUpToCreateWorkspace": "لا توجد مساحات عمل بوصول الضيوف. يُرجى إنشاء حساب لإنشاء مساحة العمل الخاصة بك.", + "WhatIsYourName": "ما اسمك؟", + "AccessExpired": "انتهت مدة الوصول. يُرجى طلب رابط وصول جديد.", + "AccessNotActive": "لم تبدأ مدة الوصول بعد. ستبدأ خلال: ", + "JoinWithThisAccount": "الانضمام بهذا الحساب", + "UseDifferentAccount": "استخدام حساب مختلف", + "UseCurrentAccountToJoin": "هل سجّلت الدخول بالفعل؟", + "LogInAndJoin": "تسجيل الدخول والانضمام", + "SignUpAndJoin": "إنشاء حساب والانضمام", + "CreateNewAccount": "إنشاء حساب جديد", + "SignedInAs": "تم تسجيل الدخول باسم {name}", + "TwoFactorAuth": "المصادقة الثنائية", + "EnterTwoFactorCode": "أدخل رمز المصادقة الثنائية", + "TwoFactorCode": "رمز المصادقة الثنائية", + "Verify": "تحقّق", + "CreateSampleProjects": "إنشاء مشاريع نموذجية ومحتوى تجريبي" + } +} diff --git a/plugins/login-resources/src/components/LoginApp.svelte b/plugins/login-resources/src/components/LoginApp.svelte index 2af6f572bd3..96a708bbf10 100644 --- a/plugins/login-resources/src/components/LoginApp.svelte +++ b/plugins/login-resources/src/components/LoginApp.svelte @@ -200,7 +200,7 @@ .back-image { position: fixed; top: 32px; - left: 0; + inset-inline-start: 0; width: 100%; height: 100%; object-fit: cover; diff --git a/plugins/login-resources/src/components/Tabs.svelte b/plugins/login-resources/src/components/Tabs.svelte index d6fd5059453..eaf2e2e34d2 100644 --- a/plugins/login-resources/src/components/Tabs.svelte +++ b/plugins/login-resources/src/components/Tabs.svelte @@ -76,7 +76,7 @@ cursor: default; } &:first-child { - margin-right: 1.75rem; + margin-inline-end: 1.75rem; } &:hover { text-decoration: none; diff --git a/plugins/love-assets/lang/ar.json b/plugins/love-assets/lang/ar.json new file mode 100644 index 00000000000..af5fbaa87a5 --- /dev/null +++ b/plugins/love-assets/lang/ar.json @@ -0,0 +1,98 @@ +{ + "string": { + "Office": "المكتب", + "Room": "الغرفة", + "RoomType": "نوع الغرفة", + "Share": "مشاركة", + "StopShare": "إيقاف المشاركة", + "StartVideo": "بدء الفيديو", + "StopVideo": "إيقاف الفيديو", + "Mute": "كتم الصوت", + "UnMute": "إلغاء كتم الصوت", + "LeaveRoom": "مغادرة الغرفة", + "Floors": "الطوابق", + "MyOffice": "مكتبي", + "EditOffice": "تحرير المكتب", + "FinalizeEditing": "تم", + "Floor": "الطابق", + "ChangeFloor": "تغيير الطابق", + "IsKnocking": "{name} يطرق الباب...", + "Accept": "قبول", + "Decline": "رفض", + "EnterRoom": "دخول الغرفة", + "TeamRoom": "غرفة الفريق", + "MeetingRoom": "غرفة الاجتماعات", + "KnockingTo": "جارٍ طرق الباب...", + "Cancel": "إلغاء", + "AnotherWindowError": "تم إنشاء الاتصال بالفعل في نافذة أخرى. يُرجى استخدام تلك النافذة أو إعادة الاتصال", + "Speaker": "السماعة", + "Microphone": "الميكروفون", + "Camera": "الكاميرا", + "Settings": "الإعدادات", + "LoveDescription": "بيئة مكتب افتراضية مباشرة", + "DefaultDevice": "الجهاز الافتراضي", + "Knock": "الطرق مطلوب", + "Open": "مفتوح", + "DND": "عدم الإزعاج", + "ChangeAccess": "تغيير الوصول", + "AddAFloor": "إضافة طابق", + "RenameAFloor": "إعادة تسمية طابق", + "StartWithoutVideo": "ابدأ دائمًا مع إيقاف الكاميرا", + "StartWithMutedMic": "ابدأ دائمًا مع كتم الميكروفون", + "InvitingYou": "{name} يطلب منك الانضمام", + "YouInivite": "أنت تدعو للانضمام", + "NoiseCancellation": "إلغاء الضوضاء", + "KnockingLabel": "الطرق", + "InivitingLabel": "دعوة", + "Invite": "دعوة", + "KnockAction": "طرق", + "NoiseCancellationNotSupported": "إلغاء الضوضاء غير مدعوم في هذا المتصفح", + "Blur": "تمويه الخلفية", + "BlurRadius": "نصف القطر", + "BlurTooltip": "تزيد ميزة التمويه بشكل كبير من استهلاك وحدة المعالجة المركزية، مما قد يؤثر على الأداء العام للنظام.", + "GuestLink": "رابط الضيف", + "CopyGuestLink": "نسخ رابط الضيف", + "Record": "تسجيل", + "StopRecord": "إيقاف التسجيل", + "LeaveRoomConfirmation": "هل أنت متأكد من رغبتك في مغادرة الغرفة؟", + "ServiceNotConfigured": "لم تتم تهيئة الخدمة", + "FullscreenMode": "وضع ملء الشاشة", + "ExitingFullscreenMode": "الخروج من وضع ملء الشاشة", + "Select": "تحديد", + "ChooseShare": "اختر ما تريد مشاركته", + "CreateMeeting": "إنشاء اجتماع", + "MoreOptions": "خيارات أخرى", + "StartTranscription": "بدء التفريغ النصي", + "StopTranscription": "إيقاف التفريغ النصي", + "Meeting": "اجتماع", + "Transcription": "التفريغ النصي", + "StartWithTranscription": "البدء مع التفريغ النصي", + "MeetingMinutes": "محضر الاجتماع", + "MeetingsMinutes": "محاضر الاجتماعات", + "StartMeeting": "بدء الاجتماع", + "Video": "فيديو", + "NoMeetingMinutes": "لا توجد محاضر اجتماعات", + "JoinMeeting": "الانضمام إلى الاجتماع", + "MeetingStart": "بدء الاجتماع", + "MeetingEnd": "انتهاء الاجتماع", + "EndMeeting": "إنهاء الاجتماع", + "Status": "الحالة", + "Active": "نشط", + "Finished": "منتهٍ", + "StartWithRecording": "البدء مع التسجيل", + "Language": "اللغة", + "Kick": "طرد", + "WithAudio": "تضمين صوت النظام", + "ShareWithAudioTooltip": "شارك شاشتك مع صوت النظام. أعد تشغيل مشاركة الشاشة لتطبيق التغييرات.", + "MicPermission": "لم يتم العثور على الميكروفون، تحقق من أذونات المتصفح", + "CamPermission": "لم يتم العثور على الكاميرا، تحقق من أذونات المتصفح", + "SearchMeetingMinutes": "البحث في محاضر الاجتماعات...", + "Sharing": "جارٍ المشاركة...", + "Browser": "المتصفح", + "Monitor": "الشاشة", + "Window": "النافذة", + "MeetingEmptyTitle": "هل انتهى الاجتماع؟", + "MeetingEmptyMessage": "غادر جميع المشاركين. سيتم قطع اتصالك خلال دقيقة واحدة. هل ترغب في البقاء؟", + "StayInRoom": "البقاء في الغرفة" + } +} diff --git a/plugins/love-resources/src/components/RoomSettingsPopup.svelte b/plugins/love-resources/src/components/RoomSettingsPopup.svelte index 155b6cb0f9c..fa71830beb6 100644 --- a/plugins/love-resources/src/components/RoomSettingsPopup.svelte +++ b/plugins/love-resources/src/components/RoomSettingsPopup.svelte @@ -79,11 +79,11 @@ } .groups { - padding-right: 0.5rem; + padding-inline-end: 0.5rem; width: 12rem; display: flex; flex-direction: column; - border-right: 1px solid var(--global-ui-BorderColor); + border-inline-end: 1px solid var(--global-ui-BorderColor); } .component { diff --git a/plugins/love-resources/src/components/meeting/ControlBarContainer.svelte b/plugins/love-resources/src/components/meeting/ControlBarContainer.svelte index 2fb9db5f2a3..213a1573184 100644 --- a/plugins/love-resources/src/components/meeting/ControlBarContainer.svelte +++ b/plugins/love-resources/src/components/meeting/ControlBarContainer.svelte @@ -111,7 +111,7 @@ } .center { position: absolute; - left: 50%; + inset-inline-start: 50%; transform: translateX(-50%); } diff --git a/plugins/love-resources/src/components/meeting/ParticipantView.svelte b/plugins/love-resources/src/components/meeting/ParticipantView.svelte index 98dbf18f69f..4897b804de2 100644 --- a/plugins/love-resources/src/components/meeting/ParticipantView.svelte +++ b/plugins/love-resources/src/components/meeting/ParticipantView.svelte @@ -269,7 +269,7 @@ overflow: hidden; position: absolute; top: 50%; - left: 50%; + inset-inline-start: 50%; height: 50%; aspect-ratio: 1; border-radius: 50%; @@ -294,7 +294,7 @@ gap: 0.25rem; padding: 0.25rem 0.5rem; top: 0.25rem; - left: 0.25rem; + inset-inline-start: 0.25rem; max-width: 12rem; font-weight: 500; font-size: 0.75rem; @@ -305,7 +305,7 @@ backdrop-filter: blur(3px); &.withIcon { - padding-left: 0.25rem; + padding-inline-start: 0.25rem; } } &.speach::before, diff --git a/plugins/mail-assets/lang/ar.json b/plugins/mail-assets/lang/ar.json new file mode 100644 index 00000000000..f743423de36 --- /dev/null +++ b/plugins/mail-assets/lang/ar.json @@ -0,0 +1,5 @@ +{ + "string": { + "MailTag": "البريد" + } +} diff --git a/plugins/media-assets/lang/ar.json b/plugins/media-assets/lang/ar.json new file mode 100644 index 00000000000..00b14caf253 --- /dev/null +++ b/plugins/media-assets/lang/ar.json @@ -0,0 +1,19 @@ +{ + "string": { + "Camera": "الكاميرا", + "Microphone": "الميكروفون", + "Speaker": "السماعة", + "DefaultCam": "الكاميرا الافتراضية", + "DefaultMic": "الميكروفون الافتراضي", + "DefaultSpeaker": "السماعة الافتراضية", + "TurnOnCam": "تشغيل الكاميرا", + "TurnOffCam": "إيقاف الكاميرا", + "TurnOnMic": "تشغيل الميكروفون", + "TurnOffMic": "إيقاف الميكروفون", + "NoCam": "لا توجد كاميرا", + "NoMic": "لا يوجد ميكروفون", + "NoSpeaker": "لا توجد سماعة", + "On": "تشغيل", + "Off": "إيقاف" + } +} diff --git a/plugins/notification-assets/lang/ar.json b/plugins/notification-assets/lang/ar.json new file mode 100644 index 00000000000..bdd946cce3e --- /dev/null +++ b/plugins/notification-assets/lang/ar.json @@ -0,0 +1,62 @@ +{ + "string": { + "Notification": "إشعار", + "Notifications": "الإشعارات", + "NoNotifications": "لا توجد إشعارات", + "EmailNotification": "البريد الإلكتروني", + "PlatformNotification": "في المنصة", + "Track": "تتبع", + "DontTrack": "عدم التتبع", + "BrowserNotification": "في المتصفح", + "Remove": "حذف الإشعار", + "RemoveAll": "حذف جميع الإشعارات", + "MarkAllAsRead": "تحديد جميع الإشعارات كمقروءة", + "MarkAsRead": "تحديد كمقروء", + "MarkAsUnread": "تحديد كغير مقروء", + "Archive": "أرشفة", + "Inbox": "صندوق الوارد", + "Collaborators": "المتعاونون", + "Change": "تغيير", + "AddedRemoved": "تمت الإضافة/الإزالة", + "YouAddedCollaborators": "تمت إضافتك إلى المتعاونين", + "YouRemovedCollaborators": "تمت إزالتك من المتعاونين", + "YouHaveJoinedTheConversation": "لقد انضممت إلى المحادثة", + "ChangeCollaborators": "غيّر المتعاونين", + "Activity": "النشاط", + "People": "الأشخاص", + "All": "الكل", + "Read": "مقروء", + "Unread": "غير مقروء", + "CommonNotificationTitle": "{title}", + "CommonNotificationBody": "تم التحديث بواسطة {senderName}", + "CommonNotificationChanged": "{senderName} غيّر {property}", + "CommonNotificationChangedProperty": "{senderName} غيّر {property} إلى \"{newValue}\"", + "ChangedCollaborators": "تم تغيير المتعاونين", + "NewCollaborators": "متعاونون جدد", + "RemovedCollaborators": "المتعاونون المُزالون", + "Edited": "تم التحرير", + "Pinned": "مثبّت", + "Message": "رسالة", + "ArchiveAll": "أرشفة الكل", + "MarkReadAll": "تحديد الكل كمقروء", + "MarkUnreadAll": "تحديد الكل كغير مقروء", + "ArchiveAllConfirmationTitle": "أرشفة جميع الإشعارات؟", + "ArchiveAllConfirmationMessage": "هل أنت متأكد من رغبتك في أرشفة جميع الإشعارات؟ لا يمكن التراجع عن هذه العملية.", + "StarDocument": "إضافة المستند إلى المفضلة", + "UnstarDocument": "إزالة المستند من المفضلة", + "Unsubscribe": "إلغاء الاشتراك", + "Push": "الدفع", + "Unreads": "غير المقروءة", + "EnablePush": "تمكين الإشعارات الفورية", + "NotificationBlockedInBrowser": "الإشعارات محظورة في متصفحك. يُرجى تمكين الإشعارات في إعدادات متصفحك", + "General": "عام", + "InboxNotificationsDescription": "استقبل الإشعارات الشخصية في صندوق وارد Huly الخاص بك.", + "PushNotificationsDescription": "استقبل الإشعارات الشخصية على سطح المكتب.", + "CommonNotificationCollectionAdded": "{senderName} أضاف {collection}", + "CommonNotificationCollectionRemoved": "{senderName} أزال {collection}", + "Sound": "الصوت", + "SoundNotificationsDescription": "استقبل إشعارات صوتية للأحداث.", + "NoAccessToObject": "لم يعد لديك وصول إلى هذا العنصر", + "ViewIn": "العرض في {app}" + } +} diff --git a/plugins/notification-resources/src/components/DocNotifyContextCard.svelte b/plugins/notification-resources/src/components/DocNotifyContextCard.svelte index a03e02cb903..046f23497f9 100644 --- a/plugins/notification-resources/src/components/DocNotifyContextCard.svelte +++ b/plugins/notification-resources/src/components/DocNotifyContextCard.svelte @@ -315,7 +315,7 @@ display: flex; align-items: center; gap: 0.75rem; - margin-left: var(--spacing-0_5); + margin-inline-start: var(--spacing-0_5); .actions { position: absolute; @@ -323,7 +323,7 @@ align-items: center; justify-content: center; top: -0.5rem; - right: 0.25rem; + inset-inline-end: 0.25rem; gap: 0.25rem; color: var(--global-secondary-TextColor); } @@ -333,7 +333,7 @@ font-weight: 400; color: var(--global-primary-TextColor); min-width: 0; - margin-right: 1rem; + margin-inline-end: 1rem; } } @@ -343,7 +343,7 @@ min-width: 0; flex-direction: column; margin-top: var(--spacing-1); - margin-left: var(--spacing-2_5); + margin-inline-start: var(--spacing-2_5); } .notification { @@ -361,8 +361,8 @@ &:first-child { .embeddedMarker { - border-top-left-radius: 0.5rem; - border-top-right-radius: 0.5rem; + border-start-start-radius: 0.5rem; + border-start-end-radius: 0.5rem; } } @@ -375,8 +375,8 @@ &:last-child { .embeddedMarker { - border-bottom-left-radius: 0.5rem; - border-bottom-right-radius: 0.5rem; + border-end-start-radius: 0.5rem; + border-end-end-radius: 0.5rem; } } } @@ -391,7 +391,7 @@ gap: 0.25rem; min-width: 0; overflow: hidden; - margin-right: 4rem; + margin-inline-end: 4rem; } .content { diff --git a/plugins/notification-resources/src/components/NotificationPresenter.svelte b/plugins/notification-resources/src/components/NotificationPresenter.svelte index d5004b8cfb3..0b411c3ef2b 100644 --- a/plugins/notification-resources/src/components/NotificationPresenter.svelte +++ b/plugins/notification-resources/src/components/NotificationPresenter.svelte @@ -44,7 +44,7 @@ .notify-table-kind { position: absolute; top: 50%; - left: 50%; + inset-inline-start: 50%; width: 0.5rem; height: 0.5rem; background-color: currentColor; diff --git a/plugins/notification-resources/src/components/NotifyContextIcon.svelte b/plugins/notification-resources/src/components/NotifyContextIcon.svelte index 60035550d00..756097c9f25 100644 --- a/plugins/notification-resources/src/components/NotifyContextIcon.svelte +++ b/plugins/notification-resources/src/components/NotifyContextIcon.svelte @@ -63,7 +63,7 @@ .notifyMarker { position: absolute; top: -0.375rem; - right: -0.375rem; + inset-inline-end: -0.375rem; } } diff --git a/plugins/notification-resources/src/components/inbox/ReactionInboxNotificationPresenter.svelte b/plugins/notification-resources/src/components/inbox/ReactionInboxNotificationPresenter.svelte index bf1c562ab26..fb10ca04c7c 100644 --- a/plugins/notification-resources/src/components/inbox/ReactionInboxNotificationPresenter.svelte +++ b/plugins/notification-resources/src/components/inbox/ReactionInboxNotificationPresenter.svelte @@ -65,8 +65,8 @@ display: flex; align-items: center; gap: 0.25rem; - padding-right: var(--spacing-0_75); - padding-left: var(--spacing-1_25); + padding-inline-end: var(--spacing-0_75); + padding-inline-start: var(--spacing-1_25); } &__emoji { @@ -78,7 +78,7 @@ min-height: 1.325rem; height: 1.325rem; overflow: hidden; - margin-right: 0.25rem; + margin-inline-end: 0.25rem; } } diff --git a/plugins/onboard-assets/lang/ar.json b/plugins/onboard-assets/lang/ar.json new file mode 100644 index 00000000000..07d9a667668 --- /dev/null +++ b/plugins/onboard-assets/lang/ar.json @@ -0,0 +1,19 @@ +{ + "status": { + "RequiredField": "حقل مطلوب {field}", + "FieldsDoNotMatch": "{field} لا يتطابق مع {field2}", + "ConnectingToServer": "جارٍ الاتصال بالخادم...." + }, + "string": { + "CreateWorkspace": "إنشاء مساحة عمل", + "LastName": "اسم العائلة", + "FirstName": "الاسم الأول", + "Workspace": "اسم مساحة العمل", + "FillInProfile": "املأ ملفك الشخصي", + "SetUpPassword": "إعداد كلمة المرور", + "Next": "التالي", + "Skip": "تخطّي", + "SignUpCompleted": "اكتمل التسجيل", + "StartUsingHuly": "ابدأ استخدام Huly" + } +} diff --git a/plugins/onboard-resources/src/components/OnboardApp.svelte b/plugins/onboard-resources/src/components/OnboardApp.svelte index cf569804a84..804ccbdb332 100644 --- a/plugins/onboard-resources/src/components/OnboardApp.svelte +++ b/plugins/onboard-resources/src/components/OnboardApp.svelte @@ -130,7 +130,7 @@ .back-image { position: fixed; top: 32px; - left: 0; + inset-inline-start: 0; width: 100%; height: 100%; object-fit: cover; diff --git a/plugins/preference-assets/lang/ar.json b/plugins/preference-assets/lang/ar.json new file mode 100644 index 00000000000..3e36f70f822 --- /dev/null +++ b/plugins/preference-assets/lang/ar.json @@ -0,0 +1,7 @@ +{ + "string": { + "Starred": "المميَّزة بنجمة", + "Star": "إضافة إلى المميَّزة", + "Unstar": "إزالة من المميَّزة" + } +} diff --git a/plugins/print-assets/lang/ar.json b/plugins/print-assets/lang/ar.json new file mode 100644 index 00000000000..c25ff422453 --- /dev/null +++ b/plugins/print-assets/lang/ar.json @@ -0,0 +1,8 @@ +{ + "string": { + "PrintToPDF": "طباعة إلى PDF", + "PrintingDocumentOf": "جارٍ طباعة المستند {current} من {total}", + "DownloadAll": "تنزيل الكل", + "PrintFailed": "فشلت الطباعة" + } +} diff --git a/plugins/process-assets/lang/ar.json b/plugins/process-assets/lang/ar.json new file mode 100644 index 00000000000..c57eb663a99 --- /dev/null +++ b/plugins/process-assets/lang/ar.json @@ -0,0 +1,203 @@ +{ + "string": { + "Method": "طريقة", + "Execution": "تنفيذ", + "Process": "عملية", + "Step": "خطوة", + "DeleteProcess": "حذف العملية", + "DeleteProcessConfirm": "هل تريد حذف العملية؟", + "DeleteState": "حذف الحالة", + "DeleteStateConfirm": "هل تريد حذف الحالة؟", + "RunProcess": "تشغيل العملية", + "Processes": "العمليات", + "Untitled": "بدون عنوان", + "States": "الحالات", + "AddState": "إضافة حالة", + "Rollback": "تراجع", + "NewProcess": "عملية جديدة", + "NewState": "حالة جديدة", + "AddAction": "إضافة إجراء", + "CreateProcess": "إنشاء عملية", + "UpdateCard": "تحديث البطاقة", + "CreateToDo": "إنشاء عنصر إجراء", + "NoProcesses": "لا توجد عمليات", + "Done": "منجز", + "ProcessName": "اسم العملية", + "NoAttributesForUpdate": "لا توجد سمات للتحديث", + "MissingRequiredFields": "{length, plural, =1 {حقل مطلوب مفقود} other {حقول مطلوبة مفقودة}}: {value}", + "CustomValue": "قيمة مخصصة", + "FallbackValue": "قيمة احتياطية", + "Functions": "الدوال", + "UpperCase": "أحرف كبيرة", + "LowerCase": "أحرف صغيرة", + "Trim": "اقتطاع المسافات", + "FirstValue": "القيمة الأولى", + "LastValue": "القيمة الأخيرة", + "Random": "عشوائي", + "AllProcesses": "جميع العمليات", + "MyProcesses": "عملياتي", + "ShowDone": "عرض المنجز", + "Add": "جمع", + "Subtract": "طرح", + "Offset": "إزاحة", + "FirstWorkingDayAfter": "أول يوم عمل بعد", + "FallbackValueError": "عرض خطأ إذا كان فارغًا", + "Required": "مطلوب", + "ParallelExecutionForbidden": "التنفيذ المتوازي محظور", + "StartAutomatically": "البدء تلقائيًا", + "AutomationOnly": "التشغيل الآلي فقط", + "Error": "خطأ", + "Continue": "متابعة", + "RequestFromUser": "طلب من المستخدم", + "EnterValue": "أدخل القيمة", + "OnToDoDone": "عند إنجاز عنصر الإجراء", + "OnSubProcessesDone": "عند إنجاز العمليات الفرعية", + "WhenSubProcessMatches": "عند تطابق العملية الفرعية", + "Result": "النتيجة", + "RequestResult": "طلب النتيجة", + "NoResultRequired": "لا تُطلب نتيجة", + "From": "من", + "To": "إلى", + "Trigger": "مُشغِّل", + "Actions": "الإجراءات", + "Transition": "انتقال", + "OnToDoCancelled": "عند إلغاء عنصر الإجراء", + "DeleteTransition": "حذف الانتقال", + "DeleteTransitionConfirm": "هل تريد حذف الانتقال؟", + "AddTransition": "إضافة انتقال", + "ToDo": "عنصر إجراء", + "CurrentCard": "البطاقة الحالية", + "Data": "البيانات", + "Transitions": "الانتقالات", + "OnExecutionStart": "عند بدء التنفيذ", + "Prepend": "إضافة في البداية", + "Append": "إلحاق", + "Replace": "استبدال", + "ReplaceAll": "استبدال الكل", + "Split": "تقسيم", + "Cut": "قص", + "Replacement": "البديل", + "Search": "بحث", + "Separator": "فاصل", + "Start": "البداية", + "End": "النهاية", + "Multiply": "ضرب", + "Divide": "قسمة", + "Modulo": "باقي القسمة", + "Power": "أُس", + "Sqrt": "الجذر التربيعي", + "Round": "تقريب", + "Absolute": "القيمة المطلقة", + "Ceil": "تقريب لأعلى", + "Floor": "تقريب لأسفل", + "Min": "الحد الأدنى", + "Max": "الحد الأقصى", + "LogAction": "حدث", + "Started": "بدأ", + "Each": "لكل", + "CreateCard": "إنشاء بطاقة", + "WhenCardMatches": "عند تطابق البطاقة", + "WhenFieldChanges": "عند تغيّر الحقل", + "ArraySizeEquals": "الحجم يساوي", + "ArraySizeGt": "الحجم أكبر من", + "ArraySizeGte": "الحجم أكبر من أو يساوي", + "ArraySizeLt": "الحجم أصغر من", + "ArraySizeLte": "الحجم أصغر من أو يساوي", + "Insert": "إدراج", + "Remove": "إزالة", + "RemoveFirst": "إزالة الأول", + "RemoveLast": "إزالة الأخير", + "Cancelled": "ملغى", + "WaitUntil": "انتظر حتى", + "CurrentUser": "المستخدم الحالي", + "CurrentDate": "التاريخ الحالي", + "AddResult": "إضافة نتيجة", + "For": "لـ", + "Context": "السياق", + "Attribute": "السمة", + "ProcessRunned": "بدأت العملية \"{process}\"", + "ProcessStateChanged": "غيّرت العملية \"{process}\" حالتها إلى \"{state}\"", + "ProcessFinished": "انتهت العملية \"{process}\" في الحالة \"{state}\"", + "NewProcessToDo": "عنصر إجراء عملية جديد", + "EmptyArray": "مصفوفة فارغة", + "ExecutionInitiator": "بادئ التنفيذ", + "ExecutionStarted": "بدأ التنفيذ", + "Filter": "تصفية", + "FirstMatchValue": "قيمة أول تطابق", + "ConfigLabel": "إعداد العملية", + "ConfigDescription": "حدّد العمليات لأتمتة سير العمل والعمليات التجارية.", + "RunProcessPermission": "تشغيل العملية", + "CancelProcessPermission": "إلغاء العملية", + "ForbidRunProcessPermission": "منع تشغيل العملية", + "ForbidCancelProcessPermission": "منع إلغاء العملية", + "RequestApproval": "طلب الموافقة", + "IsApproved": "تمت الموافقة", + "Approve": "موافقة", + "Reject": "رفض", + "Reason": "السبب", + "ApproveRequest": "الموافقة على الطلب", + "OnApproveRequestApproved": "عند الموافقة", + "OnApproveRequestRejected": "عند الرفض", + "ConfirmApproval": "تأكيد الموافقة", + "ConfirmRejection": "تأكيد الرفض", + "RejectionReason": "سبب الرفض", + "ProvideRejectionReason": "قدّم سبب الرفض", + "FieldIsEmpty": "الحقل فارغ", + "Reviewers": "المراجعون", + "LockCard": "قفل البطاقة", + "LockSection": "قفل القسم", + "Approvers": "الموافقون", + "UnlockCard": "إلغاء قفل البطاقة", + "UnlockSection": "إلغاء قفل القسم", + "CancelToDo": "إلغاء عنصر الإجراء", + "Export": "تصدير", + "ExportWithSlots": "التصدير مع الفتحات", + "ExportWithoutSlots": "التصدير بدون فتحات", + "RequiredSlots": "الفتحات المطلوبة", + "Bindings": "الارتباطات", + "Import": "استيراد", + "CancelProcess": "إلغاء العملية", + "SyncWithField": "المزامنة مع الحقل", + "ActionType": "النوع", + "ApproveAction": "موافقة", + "ReviewAction": "مراجعة", + "Review": "مراجعة", + "LockField": "قفل الحقل", + "UnlockField": "إلغاء قفل الحقل", + "TextFromNumber": "نص من رقم", + "TextFromDate": "نص من تاريخ", + "TextFromCheckbox": "نص من مربع اختيار", + "NumberFromDate": "رقم من تاريخ", + "DateFromNumber": "تاريخ من رقم", + "NumberFromText": "رقم من نص", + "DateFromText": "تاريخ من نص", + "YearFromDate": "السنة من التاريخ", + "MonthFromDate": "الشهر من التاريخ", + "DayFromDate": "اليوم من التاريخ", + "DateDifference": "فرق التاريخ", + "EmptyValue": "قيمة فارغة", + "TextFromMarkup": "نص من ترميز", + "MarkupFromText": "ترميز من نص", + "TextFromSelect": "نص من اختيار", + "SelectFromText": "اختيار من نص", + "AskSubclass": "طلب فئة فرعية", + "TextFromIdentifier": "نص من معرّف" + }, + "error": { + "MethodNotFound": "الطريقة غير موجودة: {methodId}", + "AttributeNotExists": "السمة غير موجودة: {key}", + "RelatedObjectNotFound": "الكائن المرتبط غير موجود: {attr}", + "RelationNotExists": "العلاقة غير موجودة: {association}", + "EmptyAttributeContextValue": "قيمة السمة فارغة: {attr}", + "UserRequestedValueNotProvided": "لم يتم تقديم القيمة المطلوبة من المستخدم: {attr}", + "ObjectNotFound": "الكائن غير موجود: {_id}", + "EmptyRelatedObjectValue": "قيمة الكائن المرتبط {parent} فارغة: {attr}", + "InternalServerError": "خطأ داخلي في الخادم، تواصل مع الدعم، معرّف الخطأ: {errorId}", + "ResultNotProvided": "لم يتم تقديم نتيجة", + "EmptyFunctionResult": "نتيجة دالة فارغة {func}", + "ContextValueNotProvided": "لم يتم تقديم قيمة السياق: {name}", + "RequiredParamsNotProvided": "لم يتم تقديم المعاملات المطلوبة: {params}", + "TooDeepTransitionRecursion": "تكرار الانتقال عميق جدًا", + "ToDoAlreadyCompleted": "عنصر الإجراء مكتمل بالفعل" + } +} diff --git a/plugins/process-resources/src/components/attributeEditors/ConfigurePopup.svelte b/plugins/process-resources/src/components/attributeEditors/ConfigurePopup.svelte index 563a4236bfd..5e0521fa878 100644 --- a/plugins/process-resources/src/components/attributeEditors/ConfigurePopup.svelte +++ b/plugins/process-resources/src/components/attributeEditors/ConfigurePopup.svelte @@ -443,6 +443,6 @@ } .fallback { - padding-right: 1.25rem; + padding-inline-end: 1.25rem; } diff --git a/plugins/process-resources/src/components/settings/AsideStepEditor.svelte b/plugins/process-resources/src/components/settings/AsideStepEditor.svelte index ef8770cf119..fc1bff9137f 100644 --- a/plugins/process-resources/src/components/settings/AsideStepEditor.svelte +++ b/plugins/process-resources/src/components/settings/AsideStepEditor.svelte @@ -89,6 +89,6 @@ diff --git a/plugins/process-resources/src/components/settings/AsideTransitionEditor.svelte b/plugins/process-resources/src/components/settings/AsideTransitionEditor.svelte index f276f414767..d212d07fb34 100644 --- a/plugins/process-resources/src/components/settings/AsideTransitionEditor.svelte +++ b/plugins/process-resources/src/components/settings/AsideTransitionEditor.svelte @@ -151,7 +151,7 @@ diff --git a/plugins/setting-assets/lang/ar.json b/plugins/setting-assets/lang/ar.json new file mode 100644 index 00000000000..5cb83b714bf --- /dev/null +++ b/plugins/setting-assets/lang/ar.json @@ -0,0 +1,245 @@ +{ + "string": { + "Setting": "الإعداد", + "Spaces": "المساحات", + "Integrations": "التكاملات", + "Support": "الدعم", + "Privacy": "الخصوصية", + "Terms": "الشروط", + "AccountSettings": "إعدادات الحساب", + "Categories": "الفئات", + "Delete": "حذف", + "ChangePassword": "تغيير كلمة المرور", + "Disconnect": "قطع الاتصال", + "DisconnectAll": "قطع جميع الاتصالات", + "Saving": "جارٍ الحفظ...", + "Saved": "تم الحفظ", + "Add": "إضافة", + "AddNew": "إضافة {type}", + "Proceed": "متابعة", + "NewEmail": "بريد إلكتروني جديد", + "SendConfirmation": "إرسال رمز التأكيد", + "CodeSent": "تم إرسال الرمز. يُرجى إدخاله في الحقل أدناه.", + "SendAgain": "إرسال مرة أخرى", + "SendAgainIn": "يمكن الإرسال مرة أخرى خلال", + "Value": "القيمة", + "Signout": "تسجيل الخروج", + "Settings": "الإعدادات", + "SelectWorkspace": "اختيار مساحة العمل", + "InviteWorkspace": "الدعوة إلى مساحة العمل", + "DeleteStatus": "حذف الحالة", + "DeleteStatusConfirm": "هل تريد حذف هذه الحالة؟", + "Reconnect": "إعادة الاتصال", + "IntegrationDisabled": " تم تعطيله", + "IntegrationDisabledSetting": "تم تعطيل التكامل", + "IntegrationDisabledDescr": "التكامل معطَّل", + "IntegrationWith": "التكامل مع ", + "ClassSetting": "إعداد الفئة", + "ClassSettingHint": "مجموعة أو فئة من الأشياء تشترك في خاصية أو سمة معينة تميزها عن غيرها حسب النوع أو الصنف أو الجودة.", + "ClassProperties": "خصائص الفئة", + "Classes": "الفئات", + "Attributes": "السمات", + "DeleteAttribute": "حذف السمة", + "DeleteAttributeConfirm": "هل تريد حذف هذه السمة؟", + "DeleteAttributeExistConfirm": "هل تريد حذف هذه السمة؟ ستُفقد البيانات", + "DeleteMixin": "حذف Mixin", + "DeleteMixinConfirm": "هل تريد حذف هذا الـ Mixin؟", + "DeleteMixinExistConfirm": "هل تريد حذف هذا الـ Mixin؟ لن تكون البيانات متاحة", + "Attribute": "السمة", + "Custom": "مخصص", + "Type": "النوع", + "WithTime": "مع الوقت", + "DateMode": "وضع التاريخ", + "CreatingAttribute": "إنشاء سمة", + "EditAttribute": "تعديل السمة", + "CreateEnum": "إنشاء قائمة تعداد", + "EditEnum": "تعديل قائمة التعداد", + "Enums": "قوائم التعداد", + "EnumsSettingHint": "مجموعة أو فئة من الأشياء تشترك في خاصية أو سمة معينة تميزها عن غيرها حسب النوع أو الصنف أو الجودة.", + "EnumTitle": "عنوان قائمة التعداد", + "EnumsCount": "{count, plural, =1 {# خيار} other {# خيارات}}", + "ProjectTypesCount": "{count, plural, =0 {لا توجد أنواع مشاريع} =1 {# نوع مشروع} other {# أنواع مشاريع}}", + "Options": "الخيارات", + "EnterOptionTitle": "أدخل عنوان الخيار", + "NewEnumDialogClose": "هل تريد إغلاق هذا المربع الحواري؟", + "NewEnumDialogCloseNote": "ستُفقد جميع التغييرات", + "NewValue": "قيمة جديدة", + "Leave": "مغادرة مساحة العمل", + "LeaveDescr": "هل أنت متأكد من رغبتك في مغادرة مساحة العمل؟ لا يمكن التراجع عن هذا الإجراء.", + "Members": "الأعضاء", + "WorkspaceSettings": "إعدادات مساحة العمل", + "Select": "اختيار", + "AddOwner": "إضافة مالك", + "ReadonlyGuest": "للقراءة فقط", + "Guest": "ضيف", + "User": "مستخدم", + "Maintainer": "مشرف", + "Owner": "مالك", + "OwnerFirstName": "الاسم الأول للمالك", + "OwnerLastName": "اسم العائلة للمالك", + "Role": "الدور", + "FailedToSave": "فشل تحديث كلمة المرور", + "ImportEnum": "استيراد قيم قائمة التعداد", + "ImportEnumCopy": "نسخ قيم قائمة التعداد من الحافظة", + "CreateMixin": "إنشاء Mixin", + "OldNames": "القيم القديمة", + "NewClassName": "اكتب اسم فئة جديدًا أو اختر من القيم السابقة...", + "ShowAttribute": "إظهار السمة", + "HideAttribute": "إخفاء السمة", + "Visibility": "الظهور", + "Hidden": "مخفي", + "Configure": "تهيئة", + "InviteSettings": "إعدادات الدعوة", + "RoleCapabilitySettings": "أذونات الأدوار", + "DefaultInviteRoleForJoin": "الدور الافتراضي المعيَّن بعد الانضمام عبر رابط الدعوة:", + "InviteLinkGeneratorRoles": "اختر أدوار المستخدمين الذين يمكنهم إنشاء روابط الدعوة:", + "DefaultValue": "القيمة الافتراضية", + "SelectAValue": "اختر قيمة", + "DateOnly": "التاريخ فقط", + "OnlyTime": "الوقت فقط", + "DateAndTime": "التاريخ والوقت", + "Configuration": "التهيئة", + "ConfigurationEnabled": "مُفعَّل", + "ConfigurationDisabled": "معطَّل", + "ConfigDisable": "تعطيل", + "ConfigEnable": "تفعيل", + "ConfigBeta": "إصدار تجريبي (بيتا)", + "Properties": "الخصائص", + "TaskTypes": "أنواع المهام", + "Automations": "الأتمتة", + "Collections": "المجموعات", + "ClassColon": "الفئة:", + "SpaceTypes": "أنواع المساحات", + "NewSpaceType": "نوع مساحة جديد", + "SpaceTypeTitle": "عنوان نوع المساحة", + "General": "عام", + "Description": "الوصف", + "CountSpaces": "{count, plural, =0 {لا توجد مساحات} =1 {# مساحة} other {# مساحات}}", + "Roles": "الأدوار", + "RoleName": "اسم الدور", + "Permissions": "الأذونات", + "Assignees": "المكلَّفون", + "DeleteRole": "حذف الدور", + "DeleteRoleConfirmation": "هل أنت متأكد من رغبتك في حذف هذا الدور؟ سيفقد جميع المستخدمين الذين يحملون هذا الدور أذوناتهم.", + "DeleteWorkspace": "حذف مساحة العمل", + "DeleteWorkspaceConfirm": "هل أنت متأكد من رغبتك في حذف مساحة العمل هذه؟ ستفقد أنت وجميع الأعضاء الآخرين الوصول إلى مساحة العمل هذه. ستُفقد جميع المعلومات الموجودة في مساحة العمل. لا يمكن التراجع عن هذا الإجراء. هل تريد المتابعة؟", + "DeleteSpaceType": "حذف نوع المساحة", + "DeleteSpaceTypeConfirm": "هل أنت متأكد من رغبتك في حذف نوع المساحة هذا؟", + "WorkspaceName": "اسم مساحة العمل", + "Workspace": "مساحة العمل", + "OwnerOrMaintainerRequired": "يجب أن تكون مالكًا أو مشرفًا لمساحة العمل", + "LastOwnerLeaveTitle": "تعذّرت مغادرة مساحة العمل", + "LastOwnerLeaveMessage": "أنت المالك الوحيد لمساحة العمل هذه. للمغادرة، امنح أولاً أذونات المالك لعضو آخر. إذا لم يعد أحد بحاجة إلى مساحة العمل هذه، ففكّر في حذفها بدلاً من ذلك.", + "Backup": "النسخ الاحتياطي", + "BackupLast": "آخر نسخة احتياطية", + "BackupTotalSnapshots": "إجمالي اللقطات", + "BackupTotalFiles": "الملفات", + "BackupSize": "حجم النسخة الاحتياطية", + "BackupLinkInfo": "عنوان URL لدليل النسخ الاحتياطي الذي يمكن تنزيله بشكل متكرر باستخدام أدوات مثل wget أو curl.", + "BackupBearerTokenInfo": "يلزم وجود bearer token للوصول إلى النسخة الاحتياطية.", + "BackupSnapshots": "لقطات النسخ الاحتياطي", + "BackupFileDownload": "تنزيل الملف", + "BackupFiles": "ملفات النسخ الاحتياطي", + "BackupNoBackup": "لا تتوفر حاليًا أي نسخ احتياطية.", + "NonBackupedBlobs": "كائنات Blob غير منسوخة احتياطيًا", + "Calendar": "التقويم", + "StartOfTheWeek": "بداية الأسبوع", + "SystemSetupString": "إعداد النظام ({day})", + "DefaultString": "افتراضي ({day})", + "AddAttribute": "إضافة سمة", + "WorkspaceNamePattern": "يجب أن يكون الاسم 40 حرفًا أو أقل، وغير فارغ، ولا يحتوي على رموز خاصة (<، >، /)", + "Mailboxes": "صناديق البريد", + "CreateMailbox": "إنشاء صندوق بريد", + "CreateMailboxPlaceholder": "my-cool-name", + "MailboxNoDomains": "لم تتم تهيئة نطاقات البريد الإلكتروني", + "MailboxLimitReached": "تم الوصول إلى الحد الأقصى لصناديق البريد", + "MailboxErrorInvalidName": "اسم صندوق البريد غير صالح", + "MailboxErrorDomainNotFound": "لم يُعثر على النطاق", + "MailboxErrorNameRulesViolated": "يجب أن يتراوح طول اسم صندوق البريد بين {minLen} و{maxLen} حرفًا", + "MailboxErrorMailboxExists": "اسم صندوق البريد هذا مستخدم بالفعل", + "MailboxErrorMailboxCountLimit": "تم الوصول إلى الحد الأقصى لعدد صناديق البريد لحسابك", + "DeleteMailbox": "حذف صندوق البريد", + "MailboxDeleteConfirmation": "هل أنت متأكد من رغبتك في حذف صندوق البريد هذا؟", + "DisablePermissions": "تعطيل التحكم في الوصول المستند إلى الأدوار", + "EnablePermissions": "تفعيل التحكم في الوصول المستند إلى الأدوار", + "DisablePermissionsConfirmation": "هل أنت متأكد من رغبتك في تعطيل التحكم في الوصول المستند إلى الأدوار؟ سيتم تعطيل جميع الأدوار والأذونات.", + "EnablePermissionsConfirmation": "هل أنت متأكد من رغبتك في تفعيل التحكم في الوصول المستند إلى الأدوار؟ سيتم تفعيل جميع الأدوار والأذونات.", + "BetaWarning": "الوحدات المُصنَّفة كإصدار تجريبي (بيتا) متاحة لأغراض تجريبية وقد لا تعمل بشكل كامل. لا نوصي بالاعتماد على ميزات البيتا للأعمال الحرجة في الوقت الحالي.", + "IntegrationFailed": "فشل إنشاء التكامل", + "IntegrationError": "يُرجى المحاولة مرة أخرى أو التواصل مع الدعم إذا استمرت المشكلة", + "EmailIsUsed": "عنوان البريد الإلكتروني مستخدم بالفعل من قبل حساب آخر", + "Customize": "تخصيص", + "GuestAccess": "الضيوف المجهولون", + "GuestAccessDescription": "يسمح للمستخدمين المجهولين بزيارة مساحة عملك في وضع القراءة فقط", + "GuestSignUpDescription": "يسمح للمستخدمين المجهولين بالانضمام إلى مساحة عملك كضيوف بحقوق تحرير محدودة", + "GuestChannelsDescription": "القنوات التي يمكن للضيوف الكتابة فيها بعد الانضمام", + "GuestChannelsArrayLabel": "اختر القنوات", + "GuestSelectSpaces": "اختر المساحات", + "GuestAutoJoinAvailableSpaces": "الانضمام التلقائي إلى المساحات", + "GuestAutoJoinAvailableSpacesHint": "تحتوي كل بطاقة تطبيق على صف خاص بها بعنوان “الانضمام التلقائي إلى المساحات”: اختر أين يُضاف ضيوف مساحة العمل عند تفعيلهم. تسري التغييرات فورًا.", + "GuestAnonymousVisibleSpaces": "المساحات المرئية للمجهولين", + "GuestAnonymousVisibleSpacesHint": "تحتوي كل بطاقة تطبيق على صف خاص بها: اختر المساحات التي يُضاف فيها الحساب المجهول للقراءة فقط كعضو حتى يتمكن الزوار الذين ليس لديهم حساب من فتحها. تسري التغييرات فورًا.", + "ManageIdentities": "إدارة الهويات", + "Release": "تحرير", + "ReleaseSocialId": "تحرير Social ID", + "ReleaseSocialIdConfirm": "هل أنت متأكد من رغبتك في تحرير هذا الـ Social ID: {socialId}؟ سيؤدي ذلك إلى إزالته من حسابك ولن تتمكن بعد ذلك من استخدامه لتسجيل الدخول. كما ستُزال جميع التكاملات المرتبطة به.", + "ReleasePrimarySocialId": "تحرير الـ Social ID الأساسي", + "ReleasePrimarySocialIdConfirm": "سيتطلب تحرير الـ social id الأساسي الحالي إعادة تحميل الصفحة. هل أنت متأكد من رغبتك في المتابعة؟", + "Login": "تسجيل الدخول", + "Primary": "أساسي", + "MyIntegrations": "تكاملاتي", + "AllIntegrations": "الكل", + "ConnectedIntegrations": "متكامل", + "AvailableIntegrations": "متاح", + "Connect": "اتصال", + "Integrate": "تكامل", + "FailedToLoadIntegrations": "فشل تحميل التكاملات", + "FailedToDisconnect": "فشل قطع اتصال التكامل", + "ServiceIsUnavailable": "الخدمة غير متاحة", + "Integrated": "متكامل", + "Connected": "متصل", + "Disconnected": "غير متصل", + "Available": "متاح", + "NotConnectedIntegration": "الحساب {account} غير متكامل مع مساحة العمل", + "IntegrationIsUnstable": "تواجه خدمة التكامل مشكلات. قد لا تعمل بعض الميزات بشكل صحيح.", + "MinValue": "القيمة الدنيا", + "MaxValue": "القيمة القصوى", + "IntegerOnly": "أرقام صحيحة فقط", + "AccessControl": "التحكم في الوصول", + "DangerZone": "منطقة الخطر", + "ApiAccess": "الوصول إلى API", + "ApiToken": "رمز API", + "GenerateApiToken": "إنشاء رمز API", + "IdentifierExists": "المعرّف موجود بالفعل", + "Reset": "إعادة تعيين", + "Restricted": "مقيَّد", + "RestrictedAttributeWarning": "هل أنت متأكد من رغبتك في تقييد تغيير هذه السمة؟ سيؤدي هذا الإجراء إلى إنشاء أذونات لهذه السمة ولا يمكن التراجع عنه.", + "PasswordAgingRule": "قاعدة انتهاء صلاحية كلمة المرور", + "PasswordAgingRuleDescription": "عدد الأيام التي سيُطلب بعدها من المستخدمين تغيير كلمة المرور الخاصة بهم.", + "OfficeSettings": "إعدادات المكتب", + "OfficeDefaultSettings": "الإعدادات الافتراضية لغرف الاجتماعات", + "DefaultStartWithTranscription": "تفعيل التفريغ النصي في غرف المكتب الجديدة", + "DefaultStartWithRecording": "تفعيل التسجيل في غرف المكتب الجديدة", + "GuestPermissionsSettings": "الضيوف", + "GuestPermissionsApplicationPermissions": "أذونات التطبيقات", + "GuestPermissionsApplicationPermissionsHint": "اختر التطبيقات التي يمكن للضيوف استخدامها، ثم اضبط أذونات كل تطبيق أدناه.", + "GuestPermissionsTabGuest": "ضيف", + "GuestPermissionsTabAnonymousGuest": "ضيف مجهول", + "GuestPermissionsAnonymousApplicationHint": "وصول التطبيقات للضيوف المجهولين (للقراءة فقط). قد تعتمد التطبيقات التي يرونها أيضًا على تهيئة النشر.", + "ImportDocumentPermission": "استيراد المستندات", + "ImportDocumentDescription": "يمنح المستخدمين القدرة على استيراد المستندات إلى مساحة العمل", + "SelectUsers": "اختيار المستخدمين", + "ShowInTitle": "إظهار في العنوان", + "SpaceMembersOnly": "أعضاء المساحة فقط", + "Security": "الأمان", + "TwoFactorAuth": "المصادقة الثنائية", + "TwoFactorAuthDescription": "تضيف المصادقة الثنائية طبقة إضافية من الأمان إلى حسابك", + "EnableTwoFactorAuth": "تفعيل المصادقة الثنائية", + "DisableTwoFactorAuth": "تعطيل المصادقة الثنائية", + "TwoFactorAuthEnabled": "المصادقة الثنائية مُفعَّلة", + "TwoFactorAuthDisabled": "المصادقة الثنائية معطَّلة", + "ShowQRCode": "عرض رمز QR", + "EnterVerificationCode": "أدخل رمز التحقق", + "OverrideAttribute": "تجاوز السمة" + } +} diff --git a/plugins/setting-resources/src/components/EnumSetting.svelte b/plugins/setting-resources/src/components/EnumSetting.svelte index 000e7e514bd..5f5574c55f4 100644 --- a/plugins/setting-resources/src/components/EnumSetting.svelte +++ b/plugins/setting-resources/src/components/EnumSetting.svelte @@ -129,7 +129,7 @@ align-items: center; margin: 0 var(--spacing-1_5); padding: var(--spacing-1) var(--spacing-1_25); - text-align: left; + text-align: start; border: none; border-radius: var(--small-BorderRadius); outline: none; diff --git a/plugins/setting-resources/src/components/GuestPermissionsSettings.svelte b/plugins/setting-resources/src/components/GuestPermissionsSettings.svelte index 2c828b786ea..d924796ea9e 100644 --- a/plugins/setting-resources/src/components/GuestPermissionsSettings.svelte +++ b/plugins/setting-resources/src/components/GuestPermissionsSettings.svelte @@ -506,7 +506,7 @@ display: flex; flex-direction: column; gap: 0; - padding-right: 1rem; + padding-inline-end: 1rem; overflow: visible; } diff --git a/plugins/setting-resources/src/components/MailboxItem.svelte b/plugins/setting-resources/src/components/MailboxItem.svelte index 087f5982a7b..8b4f8d78851 100644 --- a/plugins/setting-resources/src/components/MailboxItem.svelte +++ b/plugins/setting-resources/src/components/MailboxItem.svelte @@ -218,7 +218,7 @@ padding-bottom: 0.75rem; &:first-child { - border-right: 1px solid var(--theme-divider-color); + border-inline-end: 1px solid var(--theme-divider-color); } } diff --git a/plugins/setting-resources/src/components/RelationSetting.svelte b/plugins/setting-resources/src/components/RelationSetting.svelte index a6a56bfb5ed..5db51206a68 100644 --- a/plugins/setting-resources/src/components/RelationSetting.svelte +++ b/plugins/setting-resources/src/components/RelationSetting.svelte @@ -169,7 +169,7 @@ align-items: center; margin: 0 var(--spacing-1_5); padding: var(--spacing-1) var(--spacing-1_25); - text-align: left; + text-align: start; border: none; border-radius: var(--small-BorderRadius); outline: none; diff --git a/plugins/setting-resources/src/components/integrations/IntegrationTag.svelte b/plugins/setting-resources/src/components/integrations/IntegrationTag.svelte index f6162712440..31bca15505b 100644 --- a/plugins/setting-resources/src/components/integrations/IntegrationTag.svelte +++ b/plugins/setting-resources/src/components/integrations/IntegrationTag.svelte @@ -85,7 +85,7 @@ &.removable { min-width: 3.25rem; - padding-right: 0.25rem; + padding-inline-end: 0.25rem; } } diff --git a/plugins/setting-resources/src/components/socialIds/SocialIdRow.svelte b/plugins/setting-resources/src/components/socialIds/SocialIdRow.svelte index 3ca2f005a64..3d22a35da46 100644 --- a/plugins/setting-resources/src/components/socialIds/SocialIdRow.svelte +++ b/plugins/setting-resources/src/components/socialIds/SocialIdRow.svelte @@ -158,7 +158,7 @@ } .tag { - margin-left: 0.5rem; + margin-inline-start: 0.5rem; padding: 0 0.875rem; height: 1.75rem; color: var(--theme-halfcontent-color); diff --git a/plugins/setting-resources/src/components/spaceTypes/RoleEditor.svelte b/plugins/setting-resources/src/components/spaceTypes/RoleEditor.svelte index ce922336cfe..a19552b676c 100644 --- a/plugins/setting-resources/src/components/spaceTypes/RoleEditor.svelte +++ b/plugins/setting-resources/src/components/spaceTypes/RoleEditor.svelte @@ -210,13 +210,13 @@ .name { width: 100%; font-weight: 500; - margin-left: 1rem; + margin-inline-start: 1rem; display: flex; align-items: center; font-size: 1.5rem; &.editable { - margin-left: 0; + margin-inline-start: 0; } } diff --git a/plugins/setting-resources/src/components/spaceTypes/SpaceTypes.svelte b/plugins/setting-resources/src/components/spaceTypes/SpaceTypes.svelte index 641185bbcdf..72c5a8f052d 100644 --- a/plugins/setting-resources/src/components/spaceTypes/SpaceTypes.svelte +++ b/plugins/setting-resources/src/components/spaceTypes/SpaceTypes.svelte @@ -114,7 +114,7 @@ word-break: break-all; text-overflow: ellipsis; overflow: hidden; - text-align: left; + text-align: start; min-width: 0; } &__title { diff --git a/plugins/support-assets/lang/ar.json b/plugins/support-assets/lang/ar.json new file mode 100644 index 00000000000..2b87a25f8da --- /dev/null +++ b/plugins/support-assets/lang/ar.json @@ -0,0 +1,7 @@ +{ + "string": { + "ContactUs": "تواصل معنا", + "ReportBug": "الإبلاغ عن خطأ؟", + "PrivacyPolicy": "سياسة الخصوصية" + } +} diff --git a/plugins/survey-assets/lang/ar.json b/plugins/survey-assets/lang/ar.json new file mode 100644 index 00000000000..5decee4d2d8 --- /dev/null +++ b/plugins/survey-assets/lang/ar.json @@ -0,0 +1,51 @@ +{ + "string": { + "Answer": "الإجابة", + "AnswerPlaceholder": "اكتب إجابتك", + "AnswerCustomOption": "خيار مخصص", + "Application": "الاستبيان (تجريبي)", + "Close": "إغلاق", + "Control": "التحكم", + "Completed": "مكتمل", + "CreatePoll": "إنشاء استبيان", + "CreateSurvey": "الاستبيان", + "DeleteOption": "حذف الخيار", + "DeletePoll": "حذف الاستبيان", + "DeletePollConfirm": "هل أنت متأكد من رغبتك في حذف الاستبيان؟", + "DeleteQuestion": "حذف السؤال", + "DeleteQuestionConfirm": "هل أنت متأكد من رغبتك في حذف السؤال؟", + "Name": "العنوان", + "NoAnswer": "لا توجد إجابة", + "NoName": "بلا عنوان", + "NoPollsForDocument": "لا توجد استبيانات لهذا العنصر", + "Poll": "الاستبيان", + "Polls": "الاستبيانات", + "Prompt": "الوصف", + "PromptPlaceholder": "شجّع المستخدم على الإجابة عن بعض الأسئلة", + "Settings": "الإعدادات", + "Question": "السؤال", + "Questions": "الأسئلة", + "QuestionKindString": "إجابة بسيطة", + "QuestionKindOption": "اختيار خيار واحد", + "QuestionKindOptions": "اختيار عدة خيارات", + "QuestionIsMandatory": "إلزامي", + "QuestionHasCustomOption": "يحتوي على خيار مخصص", + "QuestionPlaceholder": "أضف سؤالًا", + "QuestionPlaceholderEmpty": "أدخل نص السؤال", + "QuestionPlaceholderOption": "أضف خيارًا", + "QuestionTooltipMandatory": "الإجابة مطلوبة", + "QuestionTooltipCustomOption": "يمكن للمستخدم تقديم خياره الخاص", + "Survey": "نموذج الاستبيان", + "Surveys": "نماذج الاستبيان", + "SurveyEdit": "تعديل النموذج", + "SurveyPreview": "معاينة النموذج", + "SurveySubmit": "إرسال", + "SurveySubmitConfirm": "لن تتمكن من تغيير الإجابات بعد ذلك. هل أنت متأكد من رغبتك في الإرسال الآن؟", + "ValidateFail": "بعض الأسئلة المطلوبة لم تتم الإجابة عنها", + "ValidateInfo": "هكذا سيظهر النموذج للمستخدم. حاول كتابة الإجابات وتحديد الخيارات لاختبار استبيانك. تشير الأيقونة الخضراء في الترويسة أعلاه إلى أن النموذج مملوء بشكل صحيح", + "ValidateOk": "النموذج مملوء بشكل صحيح", + "EditAnswers": "تعديل الإجابات", + "ConfigLabel": "الاستبيانات", + "ConfigDescription": "امتداد لإدارة الاستبيانات" + } +} diff --git a/plugins/tags-assets/lang/ar.json b/plugins/tags-assets/lang/ar.json new file mode 100644 index 00000000000..8dd04dcd2fe --- /dev/null +++ b/plugins/tags-assets/lang/ar.json @@ -0,0 +1,45 @@ +{ + "string": { + "TagElementLabel": "وسم", + "TitleLabel": "وسم", + "DescriptionLabel": "الوصف", + "ColorLabel": "اللون", + "CategoryLabel": "الفئة", + "TagReferenceLabel": "وسم", + "TagLabel": "وسم", + "TagName": "يرجى كتابة عنوان {word}", + "AddTagTooltip": "إضافة/إنشاء {word}", + "AddNowTooltip": "إنشاء {word}", + "AddTag": "إنشاء {word}", + "AddLabel": "إضافة تسمية", + "EditTag": "تحرير {word}", + "TagCreateLabel": "وسم", + "CancelLabel": "إلغاء", + "SearchCreate": "بحث/اسم ...", + "QuickAddItems": "إضافة سريعة لـ {word} \"{title}\"", + "NoItems": "لا يوجد {word} مضاف ...", + "TagDescriptionLabel": "الوصف", + "TagDescriptionPlaceholder": "يرجى كتابة الوصف هنا", + "TagTooltip": "{text}", + "Tags": "الوسوم", + "SaveLabel": "حفظ", + "WeightLabel": "الوزن", + "WeightPlaceholder": "يرجى كتابة الوزن هنا", + "CategoryPlaceholder": "يرجى كتابة الفئة هنا", + + "AssetLabel": "أصل", + "CategoryTargetClass": "الفئة", + "CategoryTagsLabel": "عناصر الفئة", + "OtherCategoryLabel": "أخرى", + "AllCategories": "كل الفئات", + "DefaultLabel": "الفئة الافتراضية", + "SelectAll": "تحديد الكل", + "SelectNone": "إلغاء تحديد الكل", + "ApplyTags": "تطبيق", + "Weight": "الوزن", + "Expert": "خبير", + "Meaningfull": "ذو معنى", + "Initial": "أولي", + "NumberLabels": "{count, plural, =0 {لا تسميات} =1 {تسمية واحدة} other {# تسميات}}" + } +} diff --git a/plugins/tags-resources/src/components/CategoryBar.svelte b/plugins/tags-resources/src/components/CategoryBar.svelte index 2a50efd081b..f1ba8067af6 100644 --- a/plugins/tags-resources/src/components/CategoryBar.svelte +++ b/plugins/tags-resources/src/components/CategoryBar.svelte @@ -182,6 +182,6 @@ cursor: pointer; } .categoryElement + .categoryElement { - margin-left: 0.125rem; + margin-inline-start: 0.125rem; } diff --git a/plugins/tags-resources/src/components/CollapsedTags.svelte b/plugins/tags-resources/src/components/CollapsedTags.svelte index c2e8b4e42f0..99589d5b6db 100644 --- a/plugins/tags-resources/src/components/CollapsedTags.svelte +++ b/plugins/tags-resources/src/components/CollapsedTags.svelte @@ -64,9 +64,9 @@ } &:not(.first) { border: 1px solid var(--theme-button-border); - border-right: 1px solid transparent; - border-top-right-radius: 0; - border-bottom-right-radius: 0; + border-inline-end: 1px solid transparent; + border-start-end-radius: 0; + border-end-end-radius: 0; } } diff --git a/plugins/tags-resources/src/components/CreateTagElement.svelte b/plugins/tags-resources/src/components/CreateTagElement.svelte index 9da78502aeb..0a71dee6f73 100644 --- a/plugins/tags-resources/src/components/CreateTagElement.svelte +++ b/plugins/tags-resources/src/components/CreateTagElement.svelte @@ -140,7 +140,7 @@ diff --git a/plugins/task-assets/lang/ar.json b/plugins/task-assets/lang/ar.json new file mode 100644 index 00000000000..5fa5bb16955 --- /dev/null +++ b/plugins/task-assets/lang/ar.json @@ -0,0 +1,101 @@ +{ + "string": { + "Description": "الوصف", + "DescriptionPlaceholder": "الوصف", + "ShortDescription": "وصف موجز", + "StartDate": "تاريخ البدء", + "DueDate": "تاريخ الاستحقاق", + "TaskState": "الحالة", + "TaskStateTitle": "العنوان", + "TaskStateDone": "منجز", + "TaskNumber": "رقم", + "Todos": "المهام", + "Todo": "مهمة", + "TaskDone": "مكتمل", + "TaskDueTo": "تاريخ الاستحقاق", + "ProjectName": "المشروع", + "Task": "مهمة", + "SubTask": "مهمة فرعية", + "TaskAndSubTask": "مهمة ومهمة فرعية", + "TaskAndSubTaskDescription": "يمكن استخدام هذا النوع من المهام لإنشاء المهام والمهام الفرعية في مشروع", + "TaskParent": "الأصل", + "IssueName": "الاسم", + "TaskComments": "التعليقات", + "TaskLabels": "التسميات", + "TaskAssignee": "المسؤول", + "Rank": "الترتيب", + "TaskCreateLabel": "مهمة", + "EditStates": "تحرير الحالات", + "MarkAsDone": "وضع علامة كمنجز", + "MarkAsUndone": "وضع علامة كغير منجز", + "Kanban": "كانبان", + "ApplicationLabelTask": "المهام", + "ProjectNamePlaceholder": "اسم المشروع", + "TaskNamePlaceholder": "المهمة المملة", + "TodoDescriptionPlaceholder": "مهمة...", + "TaskProject": "المشروع المحدد", + "SelectProject": "اختر مشروعًا", + "TaskName": "اسم المهمة *", + "AssignThisTask": "إسناد هذه المهمة", + "AssigneeRequired": "المسؤول مطلوب", + "More": "خيارات", + "TaskUnAssign": "إلغاء الإسناد", + "NoTaskForObject": "لا توجد مهام محددة", + "Delete": "حذف", + "TodoName": "الاسم", + "TodoState": "الحالة", + "DoneState": "حالة المنجز", + "UndoneState": "مهمة", + "TodoDueDate": "مستحق في", + "TodoDescription": "وصف المهمة *", + "TodoEdit": "تحرير المهمة", + "TodoSave": "حفظ", + "TodoCreate": "إنشاء مهمة", + "ActiveStates": "الحالات النشطة", + "DoneStatesWon": "حالة المنجز / محقق", + "DoneStatesLost": "حالة المنجز / غير محقق", + "StateBacklog": "قائمة الانتظار", + "StateUnstarted": "لم يبدأ", + "StateActive": "نشط", + "AllStates": "جميع الحالات", + "DoneStates": "حالات المنجز", + "States": "الحالات", + "NoDoneState": "غير منجز", + "ManageStatusesWithin": "إدارة حالات التطبيق ضمن", + "StatusDelete": "حذف الحالة", + "StatusDeleteConfirm": "هل تريد حذف هذه الحالة؟", + "CantStatusDelete": "تعذّر حذف الحالة", + "CantStatusDeleteError": "توجد كائنات في الحالة المحددة. انقلها أو احذفها أولًا.", + "Tasks": "المهام", + "AssignedToMe": "المُسندة إليّ", + "Dashboard": "لوحة المعلومات", + "AllTime": "كل الأوقات", + "RelatedIssues": "العمليات ذات الصلة", + "StatusName": "اسم الحالة", + "StatusPopupTitle": "تحرير الحالة", + "NameAlreadyExists": "هذا الاسم موجود بالفعل لنوع الحالة هذا", + "ProjectType": "نوع المشروع", + "ProjectTypes": "أنواع المشاريع", + "StatusChange": "تغيّرت الحالة", + "TaskCreated": "تم إنشاء المهمة", + "TaskType": "نوع المهمة", + "ManageProjects": "أنواع المشاريع", + "Export": "تصدير", + "CreateProjectType": "إنشاء نوع مشروع", + "ClassicProject": "مشروع كلاسيكي", + "LastSave": "آخر حفظ", + "Published": "منشور", + "CountTasks": "{count, plural, =0 {لا توجد مهام} =1 {# مهمة} other {# مهام}}", + "CountProjects": "{count, plural, =0 {لا توجد مشاريع} =1 {# مشروع} other {# مشاريع}}", + "ProjectTypeTitle": "عنوان نوع المشروع", + "ProcessStates": "حالات العملية", + "Type": "النوع", + "Group": "المجموعة", + "Color": "اللون", + "Identifier": "المعرّف", + "RenameStatus": "إعادة تسمية حالة إلى اسم جديد", + "UpdateTasksStatusRequest": "الحالة مستخدمة مع {total} مهمة، وستتطلب تحديثها جميعًا. يُرجى الموافقة.", + "TaskTypes": "أنواع المهام", + "Collections": "المجموعات" + } +} diff --git a/plugins/task-resources/src/components/CreateFilter.svelte b/plugins/task-resources/src/components/CreateFilter.svelte index 665a803d7ab..49efbc89497 100644 --- a/plugins/task-resources/src/components/CreateFilter.svelte +++ b/plugins/task-resources/src/components/CreateFilter.svelte @@ -42,7 +42,7 @@ display: flex; align-items: center; width: fit-content; - margin-right: 1px; + margin-inline-end: 1px; padding: 0 0.375rem; font-size: 0.75rem; height: 1.5rem; diff --git a/plugins/task-resources/src/components/TaskHeader.svelte b/plugins/task-resources/src/components/TaskHeader.svelte index 30d1c8aaaae..06d2accdf9b 100644 --- a/plugins/task-resources/src/components/TaskHeader.svelte +++ b/plugins/task-resources/src/components/TaskHeader.svelte @@ -95,13 +95,13 @@ .column { position: relative; - margin-left: 3rem; + margin-inline-start: 3rem; &::before { content: ''; position: absolute; top: 0; bottom: 0; - left: -1.5rem; + inset-inline-start: -1.5rem; width: 1px; background-color: var(--accent-bg-color); } diff --git a/plugins/task-resources/src/components/kanban/KanbanDragDone.svelte b/plugins/task-resources/src/components/kanban/KanbanDragDone.svelte index 9d25f105186..630840d1dcb 100644 --- a/plugins/task-resources/src/components/kanban/KanbanDragDone.svelte +++ b/plugins/task-resources/src/components/kanban/KanbanDragDone.svelte @@ -93,7 +93,7 @@ .done-panel { position: absolute; bottom: 0; - left: 0; + inset-inline-start: 0; width: 100%; display: flex; diff --git a/plugins/task-resources/src/components/state/StatesPopup.svelte b/plugins/task-resources/src/components/state/StatesPopup.svelte index f34fc56ac6d..3d607c4abcb 100644 --- a/plugins/task-resources/src/components/state/StatesPopup.svelte +++ b/plugins/task-resources/src/components/state/StatesPopup.svelte @@ -76,7 +76,7 @@ diff --git a/plugins/telegram-assets/lang/ar.json b/plugins/telegram-assets/lang/ar.json new file mode 100644 index 00000000000..1ddfcb497c3 --- /dev/null +++ b/plugins/telegram-assets/lang/ar.json @@ -0,0 +1,99 @@ +{ + "string": { + "Loading": "جارٍ التحميل...", + "IntegrationConnected": "متصل بصفة {phone}", + "Disconnect": "قطع الاتصال", + "SharedMessages": "شارَك رسائل Telegram", + "Next": "التالي", + "Back": "رجوع", + "Connect": "اتصال", + "Connecting": "جارٍ الاتصال...", + "ConnectFull": "ربط حساب Telegram", + "Password": "كلمة المرور", + "Phone": "الهاتف", + "PhonePlaceholder": "+1 555 333 7777", + "PhoneDescr": "أدخل رقم هاتف Telegram الخاص بك لربط حسابك.", + "PasswordDescr": "أدخل كلمة مرور المصادقة الثنائية", + "CodeDescr": "أدخل الرمز المكوّن من 5 أرقام الذي تلقيته على حساب Telegram الخاص بك.", + "Cancel": "إلغاء", + "Share": "مشاركة الرسائل", + "PublishSelected": "نشر المحدد", + "SharedMessage": "رسالة مشتركة", + "Content": "المحتوى", + "Incoming": "وارد", + "Messages": "الرسائل", + "NewMessage": "رسالة جديدة", + "NewIncomingMessage": "أرسل إليك رسالة جديدة", + "Telegram": "Telegram", + "TelegramIntegrationDesc": "مزامنة قنوات ورسائل Telegram", + "TelegramIntegrationDesc2": "هذه الميزة مستقلة عن إشعارات Telegram العادية", + "ToSetupNotification": "لإعداد إشعارات Telegram العادية:", + "TelegramNotificationPath": "الإشعارات > عام > Telegram > تكوين", + "Status": "الحالة", + "MessagesSelected": "رسالة محددة", + "ConfigLabel": "Telegram", + "ConfigDescription": "امتداد لقراءة رسائل Telegram وكتابتها", + "ConnectBotInfoStart": "لبدء التفاعل مع روبوتنا، ما عليك سوى فتح", + "ConnectBotInfoEnd": "والنقر على \"بدء\".", + "ConnectBotError": "يبدو أنه تعذّر إنشاء الاتصال تلقائيًا. يرجى محاولة إعادة الاتصال بالروبوت بالنقر على “بدء”.", + "TestConnection": "اختبار الاتصال", + "Connected": "متصل", + "TelegramNotificationDescription": "تلقّي الإشعارات الشخصية في Telegram.", + "BotDescription": "بفضل هذا الروبوت يمكنك الحصول على جميع الإشعارات والرد عليها دون مغادرة Telegram.", + "BotShortDescription": "بفضل هذا الروبوت يمكنك الحصول على جميع الإشعارات والرد عليها دون مغادرة Telegram", + "WelcomeMessage": "مرحبًا! أنا روبوت سأساعدك في الحصول على جميع إشعارات {app} والرد عليها دون مغادرة Telegram.", + "TestMessage": "تم ربط حساب {app} الخاص بك. ستتلقى إشعاراتك.", + "ConnectMessage": "⚠️يرجى ربطي بحساب {app} الخاص بك.\nأرسل /connect لإنشاء رمز ولصقه في إعدادات {app}.\nالرمز صالح لمدة {minutes} دقيقة.", + "StopMessage": "لن تتلقى بعد الآن إشعارات حول أحداث {app}. إذا أردت إعادة تشغيلها، ما عليك سوى إرسال /start.", + "StartBot": "بدء تشغيل الروبوت", + "ConnectAccount": "ربط الحساب عبر OTP", + "ShowCommandsDetails": "عرض تفاصيل الأوامر", + "TurnNotificationsOff": "إيقاف الإشعارات", + "ConnectedDescriptionHtml": "✅أنت متصل بصفة {name}", + "AccountAlreadyConnectedHtml": "أنت متصل بالفعل بصفة {name}", + "AccountConnectedHtml": "تم ربطك بنجاح بصفة {name}", + "AccountAlreadyConnected": "الحساب مرتبط بالفعل", + "InvalidCode": "رمز غير صالح", + "SomethingWentWrong": "حدث خطأ ما. يرجى المحاولة مرة أخرى.", + "Configure": "تكوين", + "ConnectTelegramBot": "ربط روبوت Telegram", + "DisconnectMessage": "⚠️تم قطع اتصالك بالخدمة. يرجى إعادة ربط حسابك على {app} باستخدام /{command}.", + "SyncAllChannels": "مزامنة جميع القنوات", + "SyncStarredChannels": "مزامنة القنوات المميزة بنجمة", + "Public": "عامة", + "Private": "خاصة", + "TotalChannels": "إجمالي القنوات:", + "SyncEnabled": "المزامنة مفعّلة", + "SyncDisabled": "المزامنة معطّلة", + "SelectAll": "تحديد الكل", + "Selected": "محدد", + "EnableSync": "تفعيل المزامنة", + "DisableSync": "تعطيل المزامنة", + "SelectAccess": "تحديد الوصول", + "ConfigureIntegration": "تكوين التكامل", + "Apply": "تطبيق", + "SyncedChannels": "القنوات المتزامنة:", + "Type": "النوع", + "SyncMode": "وضع المزامنة", + "Access": "الوصول", + "User": "مستخدم", + "Group": "مجموعة", + "Channel": "قناة", + "Actions": "الإجراءات", + "SelectAllAction": "تحديد الكل", + "UnselectAllAction": "إلغاء تحديد الكل", + "EnableSynchronization": "تفعيل المزامنة", + "DisableSynchronization": "تعطيل المزامنة", + "SetPublicAccess": "تعيين وصول عام", + "SetPrivateAccess": "تعيين وصول خاص", + "NoChannelsFound": "لم يتم العثور على قنوات", + "TryAdjustingSearch": "حاول تعديل استعلام البحث أو", + "ClearSearch": "مسح البحث", + "NoChannelsAvailable": "لا توجد قنوات متاحة", + "EnableSyncToConfigure": "فعّل المزامنة لتكوين وصول القنوات", + "AccessCannotBeChanged": "لا يمكن تغيير الوصول لقناة موجودة", + "ServiceIsUnavailable": "خدمة Telegram غير متاحة", + "IncorrectPhoneOrCode": "فشل ربط حساب Telegram، يرجى التحقق من إدخال رقم الهاتف والرمز بشكل صحيح", + "UnknownError": "حدث خطأ غير معروف في خدمة Telegram" + } +} diff --git a/plugins/telegram-resources/src/components/Configure.svelte b/plugins/telegram-resources/src/components/Configure.svelte index 07a192c0bab..65dd7e9ba27 100644 --- a/plugins/telegram-resources/src/components/Configure.svelte +++ b/plugins/telegram-resources/src/components/Configure.svelte @@ -586,7 +586,7 @@ display: flex; align-items: center; gap: 0.5rem; - padding-right: 1rem; + padding-inline-end: 1rem; } .channel-space { diff --git a/plugins/telegram-resources/src/components/Message.svelte b/plugins/telegram-resources/src/components/Message.svelte index 146cfd207eb..6f691450e21 100644 --- a/plugins/telegram-resources/src/components/Message.svelte +++ b/plugins/telegram-resources/src/components/Message.svelte @@ -125,7 +125,7 @@ justify-content: stretch; align-items: center; flex-grow: 1; - margin-right: 2.5rem; + margin-inline-end: 2.5rem; padding: 0.25rem 0; &.out { @@ -148,7 +148,7 @@ } .time { align-self: flex-end; - margin-left: auto; + margin-inline-start: auto; color: var(--dark-color); font-size: 0.75rem; font-style: italic; diff --git a/plugins/telegram-resources/src/components/PinPad.svelte b/plugins/telegram-resources/src/components/PinPad.svelte index 54775b70139..fed4f8d3005 100644 --- a/plugins/telegram-resources/src/components/PinPad.svelte +++ b/plugins/telegram-resources/src/components/PinPad.svelte @@ -125,11 +125,11 @@ .error-message { margin-top: 0.5rem; - margin-left: 0.2rem; + margin-inline-start: 0.2rem; color: var(--system-error-color); div { - margin-left: 0.3rem; + margin-inline-start: 0.3rem; } } diff --git a/plugins/templates-assets/lang/ar.json b/plugins/templates-assets/lang/ar.json new file mode 100644 index 00000000000..e12e1617246 --- /dev/null +++ b/plugins/templates-assets/lang/ar.json @@ -0,0 +1,21 @@ +{ + "string": { + "Cancel": "إلغاء", + "Templates": "قوالب النصوص", + "TemplatesHeader": "قوالب النصوص", + "CreateTemplate": "إنشاء قالب", + "SaveTemplate": "حفظ القالب", + "EditTemplate": "تعديل القالب", + "ViewTemplate": "عرض القالب", + "Suggested": "مقترح", + "SearchTemplate": "البحث عن قالب", + "TemplatePlaceholder": "قالب جديد", + "Title": "العنوان", + "Message": "الرسالة", + "Field": "الحقل", + "TemplateCategory": "مجموعة القوالب", + "CreateTemplateCategory": "إنشاء مجموعة", + "Copy": "نسخ", + "Template": "القالب" + } +} diff --git a/plugins/test-management-assets/lang/ar.json b/plugins/test-management-assets/lang/ar.json new file mode 100644 index 00000000000..bdcfe5b68db --- /dev/null +++ b/plugins/test-management-assets/lang/ar.json @@ -0,0 +1,95 @@ +{ + "string": { + "ConfigLabel": "إدارة الاختبارات", + "ConfigDescription": "إضافة لإدارة حالات الاختبار", + "TestCaseType": "النوع", + "TestCasePriority": "الأولوية", + "TestCaseStatus": "الحالة", + "TestSuite": "مجموعة الاختبار", + "SuiteName": "الاسم", + "SuiteDescription": "الوصف", + "Suite": "المجموعة", + "TestName": "الاسم", + "TestDescription": "الوصف", + "TestType": "النوع", + "TestPriority": "الأولوية", + "TestStatus": "الحالة", + "TestEstimatedTime": "الوقت المقدَّر", + "TestPreconditions": "الشروط المسبقة", + "TestSteps": "الخطوات", + "TestAssignee": "المُكلَّف", + "TestCase": "حالة اختبار", + "TestProject": "المشروع", + "TestManagementApplication": "إدارة الاختبارات (تجريبي)", + "AllTestSuites": "جميع مجموعات الاختبار", + "AllProjects": "جميع المشاريع", + "Projects": "المشاريع", + "CreateProject": "إنشاء مشروع", + "EditProject": "تعديل المشروع", + "TestCases": "حالات الاختبار", + "TestManagementDescription": "إضافة لإدارة حالات الاختبار", + "CreateTestCase": "حالة اختبار جديدة", + "FullDescription": "الوصف", + "ProjectName": "الاسم", + "ProjectType": "النوع", + "Members": "الأعضاء", + "ProjectMembers": "أعضاء المشروع", + "TestSuites": "مجموعات الاختبار", + "CreateTestSuite": "إنشاء مجموعة اختبار", + "NamePlaceholder": "اسم المجموعة", + "DescriptionPlaceholder": "الوصف (اختياري)", + "TestRuns": "عمليات تشغيل الاختبار", + "TestRun": "تشغيل الاختبار", + "TestNamePlaceholder": "عنوان حالة الاختبار", + "ChooseIcon": "اختيار أيقونة", + "NoTestSuite": "لا توجد مجموعة اختبار", + "StatusDraft": "مسودة", + "StatusReview": "جاهز للمراجعة", + "StatusReviewComments": "بحاجة إلى معالجة ملاحظات المراجعة", + "StatusApproved": "معتمد", + "StatusRejected": "مرفوض", + "SetStatus": "تعيين الحالة", + "Assignee": "المُكلَّف", + "Unassigned": "غير مُكلَّف", + "AssignTo": "تكليف إلى", + "AssignedTo": "مُكلَّف إلى", + "PreviousAssigned": "مُكلَّف سابقًا", + "NoTestCases": "لا توجد حالات اختبار في مجموعة الاختبار هذه", + "CreateTestRun": "تشغيل اختبار جديد", + "TestRunNamePlaceholder": "اسم تشغيل الاختبار", + "SelectTestSuites": "تحديد مجموعات الاختبار", + "SelectTestCases": "تحديد حالات الاختبار", + "TestLibrary": "مكتبة الاختبار", + "TestResult": "النتيجة", + "TestRunResult": "النتيجة", + "TestRunStatus": "الحالة", + "StatusNonTested": "لم يُختبر", + "StatusBlocked": "محظور", + "StatusPassed": "ناجح", + "StatusFailed": "فاشل", + "SelectTestCase": "تحديد حالة الاختبار", + "Save": "حفظ", + "SaveAndNext": "حفظ والتالي", + "DonePercent": "% مكتمل", + "TestResults": "النتائج", + "TestRunName": "الاسم", + "DueDate": "تاريخ الاستحقاق", + "RunTestCases": "تشغيل", + "TestCaseDescription": "وصف حالة الاختبار", + "TestResultAttributes": "النتيجة", + "GoToNextTest": "التالي", + "GoToNextTestTooltip": "الانتقال إلى الاختبار التالي", + "AllTests": "جميع الاختبارات", + "MyTests": "اختباراتي", + "Comments": "التعليقات", + "Cancel": "إلغاء", + "Name": "الاسم", + "TestPlans": "خطط الاختبار", + "TestPlan": "خطة اختبار", + "CreateTestPlan": "خطة اختبار جديدة", + "SelectedTestCases": "{count, plural, =0 {لم يتم تحديد حالات اختبار} one {تم تحديد # حالة اختبار} few {تم تحديد # حالات اختبار} other {تم تحديد # حالة اختبار}}", + "DefaultAssignee": "المُكلَّف الافتراضي", + "TestPlanTitle": "عنوان خطة الاختبار", + "RunAssistant": "مساعد التشغيل" + } +} diff --git a/plugins/text-editor-assets/lang/ar.json b/plugins/text-editor-assets/lang/ar.json new file mode 100644 index 00000000000..32877b73b2c --- /dev/null +++ b/plugins/text-editor-assets/lang/ar.json @@ -0,0 +1,92 @@ +{ + "string": { + "TableOfContents": "جدول المحتويات", + "Suggested": "مقترح", + "NoItems": "لا توجد عناصر", + "EditorPlaceholder": "ابدأ الكتابة...", + "Edit": "تعديل", + "Bold": "عريض", + "Italic": "مائل", + "Strikethrough": "يتوسطه خط", + "Link": "رابط", + "Save": "حفظ", + "OrderedList": "قائمة مرتبة", + "BulletedList": "قائمة نقطية", + "Blockquote": "اقتباس", + "Code": "كود", + "CodeBlock": "كتلة كود", + "Note": "ملاحظة", + "ConfigureNote": "تكوين الملاحظة", + "Set": "تعيين", + "Update": "تحديث", + "Remove": "إزالة", + "NotePlaceholder": "إضافة ملاحظة...", + "SampleText": "نص نموذجي", + "Send": "إرسال", + "Attach": "إرفاق", + "TextStyle": "نمط النص", + "Emoji": "إيموجي", + "GIF": "GIF", + "Mention": "إشارة", + "Underlined": "تحته خط", + "Highlight": "تمييز", + "Subscript": "منخفض", + "Superscript": "مرتفع", + "Mathematics": "رياضيات", + "MathematicsBlock": "كتلة رياضيات", + "AlignCenter": "محاذاة للوسط", + "AlignLeft": "محاذاة لليسار", + "AlignRight": "محاذاة لليمين", + "Download": "تنزيل", + "ViewImage": "عرض الصورة", + "ViewOriginal": "عرض الأصل", + "MoreActions": "المزيد من الإجراءات", + "FullDescription": "الوصف الكامل", + "NoFullDescription": "لا يوجد وصف تفصيلي", + "EnableDiffMode": "وضع المقارنة", + "AddColumnBefore": "إضافة قبل", + "AddColumnAfter": "إضافة بعد", + "DeleteColumn": "حذف", + "AddRowBefore": "إضافة قبل", + "AddRowAfter": "إضافة بعد", + "DeleteRow": "حذف", + "DeleteTable": "حذف", + "MergeCells": "دمج الخلايا", + "SplitCells": "تقسيم الخلايا", + "Duplicate": "تكرار", + "CategoryRow": "الصفوف", + "CategoryColumn": "الأعمدة", + "CategoryCell": "الخلايا", + "Table": "جدول", + "InsertTable": "إدراج جدول", + "TableOptions": "تخصيص الجدول", + "SelectTable": "تحديد الجدول", + "Width": "العرض", + "Height": "الارتفاع", + "Unset": "إلغاء التعيين", + "Image": "صورة", + "SeparatorLine": "خط فاصل", + "TodoList": "عناصر الإجراءات", + "TodoItem": "قائمة عناصر الإجراءات", + "DrawingBoard": "لوحة الرسم", + "MermaidDiargram": "مخطط", + "Comment": "تعليق", + "AddComment": "إضافة تعليق", + "AddCommentPlaceholder": "إضافة تعليق...", + "SetCellHighlightColor": "تعيين لون الخلية", + "SetTextColor": "تعيين لون النص", + "RefreshTable": "تحديث الجدول", + "ShowDiff": "إظهار الفروق", + "SeeOriginalData": "عرض البيانات الأصلية", + "CategoryVersioning": "إدارة الإصدارات", + "TableDiffLabel": "تغييرات الجدول", + "TableRefreshConfirmationLabel": "تأكيد تحديث الجدول", + + "ConvertToLinkPreview": "عرض كرابط", + "ConvertToEmbedPreview": "عرض كمعاينة محتوى", + "UnableToLoadEmbeddedContent": "تعذّر تحميل معاينة الرابط بسبب إعدادات الأذونات أو محتوى غير مدعوم", + "CannotConnectToCollaborationService": "تعذّر الاتصال بخدمة التعاون", + "SourceURL": "URL المصدر", + "SelectedDocuments": "المستندات المحددة ({count, plural, =1 {عنصر واحد} other {# عناصر}})" + } +} diff --git a/plugins/text-editor-resources/src/components/DrawingBoardEditor.svelte b/plugins/text-editor-resources/src/components/DrawingBoardEditor.svelte index 331d324fc24..85b184e7416 100644 --- a/plugins/text-editor-resources/src/components/DrawingBoardEditor.svelte +++ b/plugins/text-editor-resources/src/components/DrawingBoardEditor.svelte @@ -376,7 +376,7 @@ .personAvatar { position: absolute; - left: 7px; + inset-inline-start: 7px; top: 17px; border-radius: 20%; box-shadow: 0.05rem 0.05rem 0.3rem rgba(0, 0, 0, 0.5); diff --git a/plugins/text-editor-resources/src/components/DrawingBoardNodeView.svelte b/plugins/text-editor-resources/src/components/DrawingBoardNodeView.svelte index c4adcb6a36f..fd54aba8ea8 100644 --- a/plugins/text-editor-resources/src/components/DrawingBoardNodeView.svelte +++ b/plugins/text-editor-resources/src/components/DrawingBoardNodeView.svelte @@ -187,7 +187,7 @@ z-index: 1; position: absolute; top: 0.3rem; - right: 0.3rem; + inset-inline-end: 0.3rem; } .handle { @@ -209,23 +209,23 @@ .resizer { bottom: 0; - left: calc(50% - 4rem); + inset-inline-start: calc(50% - 4rem); width: 8rem; height: 0.6rem; cursor: row-resize; - border-top-left-radius: var(--small-BorderRadius); - border-top-right-radius: var(--small-BorderRadius); + border-start-start-radius: var(--small-BorderRadius); + border-start-end-radius: var(--small-BorderRadius); border-bottom: none; } .drag { - left: -0.6rem; + inset-inline-start: -0.6rem; top: calc(50% - 2rem); width: 0.6rem; height: 4rem; cursor: move; - border-top-left-radius: var(--small-BorderRadius); - border-bottom-left-radius: var(--small-BorderRadius); - border-right: none; + border-start-start-radius: var(--small-BorderRadius); + border-end-start-radius: var(--small-BorderRadius); + border-inline-end: none; } diff --git a/plugins/text-editor-resources/src/components/InlineCommandsList.svelte b/plugins/text-editor-resources/src/components/InlineCommandsList.svelte index 5b6a76f6a18..e0a4c4b8f85 100644 --- a/plugins/text-editor-resources/src/components/InlineCommandsList.svelte +++ b/plugins/text-editor-resources/src/components/InlineCommandsList.svelte @@ -121,9 +121,9 @@ .overlay { position: fixed; top: 0; - left: 0; + inset-inline-start: 0; bottom: 0; - right: 0; + inset-inline-end: 0; z-index: 1999; } diff --git a/plugins/text-editor-resources/src/components/MentionList.svelte b/plugins/text-editor-resources/src/components/MentionList.svelte index 3f94507176f..ed59a49578d 100644 --- a/plugins/text-editor-resources/src/components/MentionList.svelte +++ b/plugins/text-editor-resources/src/components/MentionList.svelte @@ -131,9 +131,9 @@ .overlay { position: fixed; top: 0; - left: 0; + inset-inline-start: 0; bottom: 0; - right: 0; + inset-inline-end: 0; z-index: 1999; } @@ -147,7 +147,7 @@ @media screen and (max-width: 480px) { position: fixed; - left: var(--spacing-1); + inset-inline-start: var(--spacing-1); width: calc(100vw - var(--spacing-1) * 2); max-height: calc(100svh - 2rem); } diff --git a/plugins/text-editor-resources/src/components/StyledTextBox.svelte b/plugins/text-editor-resources/src/components/StyledTextBox.svelte index 7bb74ef1ca3..76ff388b481 100644 --- a/plugins/text-editor-resources/src/components/StyledTextBox.svelte +++ b/plugins/text-editor-resources/src/components/StyledTextBox.svelte @@ -420,7 +420,7 @@ } :global(.select-text) { - padding-left: 40px; /* Увеличил отступ */ + padding-inline-start: 40px; /* Увеличил отступ */ position: relative; } } diff --git a/plugins/text-editor-resources/src/components/extension/embed/EmbedToolbarHead.svelte b/plugins/text-editor-resources/src/components/extension/embed/EmbedToolbarHead.svelte index a724d936e72..02a4eb06482 100644 --- a/plugins/text-editor-resources/src/components/extension/embed/EmbedToolbarHead.svelte +++ b/plugins/text-editor-resources/src/components/extension/embed/EmbedToolbarHead.svelte @@ -39,7 +39,7 @@ diff --git a/plugins/time-resources/src/components/ToDosNavigator.svelte b/plugins/time-resources/src/components/ToDosNavigator.svelte index 782ba3d2241..4100e18ceb3 100644 --- a/plugins/time-resources/src/components/ToDosNavigator.svelte +++ b/plugins/time-resources/src/components/ToDosNavigator.svelte @@ -264,7 +264,7 @@ min-width: 0; .dot { - margin-right: var(--spacing-0_75); + margin-inline-end: var(--spacing-0_75); } span { font-weight: 400; @@ -293,7 +293,7 @@ align-items: center; gap: 1px; top: 0.1875rem; - right: 0.1875rem; + inset-inline-end: 0.1875rem; } .noBorder { border-bottom-color: transparent; diff --git a/plugins/time-resources/src/components/Workslots.svelte b/plugins/time-resources/src/components/Workslots.svelte index 01e67ff92a6..b8b5bee10ac 100644 --- a/plugins/time-resources/src/components/Workslots.svelte +++ b/plugins/time-resources/src/components/Workslots.svelte @@ -111,7 +111,7 @@ .slot { padding: var(--spacing-1) var(--spacing-1) var(--spacing-1) var(--spacing-2); background-color: var(--tag-nuance-SunshineBackground); - border-left: var(--extra-small-BorderRadius) solid var(--tag-accent-SunshineBackground); + border-inline-start: var(--extra-small-BorderRadius) solid var(--tag-accent-SunshineBackground); border-radius: var(--extra-small-BorderRadius) var(--small-BorderRadius) var(--small-BorderRadius) var(--extra-small-BorderRadius); } diff --git a/plugins/time-resources/src/components/team/calendar/EventElement.svelte b/plugins/time-resources/src/components/team/calendar/EventElement.svelte index 5a16e32900c..7199c467692 100644 --- a/plugins/time-resources/src/components/team/calendar/EventElement.svelte +++ b/plugins/time-resources/src/components/team/calendar/EventElement.svelte @@ -84,7 +84,7 @@ font-size: 0.8125rem; background-color: #f3f6fb; border: 1px solid rgba(43, 81, 144, 0.2); - border-left: 0.25rem solid #2b5190; + border-inline-start: 0.25rem solid #2b5190; border-radius: 0.25rem; cursor: pointer; padding: 0.25rem 0.5rem 0.25rem 1rem; diff --git a/plugins/time-resources/src/components/team/calendar/PersonCalendar.svelte b/plugins/time-resources/src/components/team/calendar/PersonCalendar.svelte index e251214cbc4..a676f70f25b 100644 --- a/plugins/time-resources/src/components/team/calendar/PersonCalendar.svelte +++ b/plugins/time-resources/src/components/team/calendar/PersonCalendar.svelte @@ -193,7 +193,7 @@ z-index: 1; &.timeline-resource-header { - left: 0; + inset-inline-start: 0; z-index: 2; } } @@ -216,7 +216,7 @@ background-color: $timeline-bg-color; position: sticky; - left: 0; + inset-inline-start: 0; z-index: 1; } @@ -272,7 +272,7 @@ } .timeline-cell { - border-right: $timeline-border; + border-inline-end: $timeline-border; width: $timeline-column-width; height: 100%; @@ -301,7 +301,7 @@ } .timeline-resource-cell { - border-right: $timeline-border; + border-inline-end: $timeline-border; width: 100%; height: 100%; @@ -311,8 +311,8 @@ .timeline-event-wrapper { position: absolute; height: 1.5rem; - padding-left: 0.125rem; - padding-right: 0.125rem; + padding-inline-start: 0.125rem; + padding-inline-end: 0.125rem; pointer-events: all; } diff --git a/plugins/tracker-assets/lang/ar.json b/plugins/tracker-assets/lang/ar.json new file mode 100644 index 00000000000..11c2157c524 --- /dev/null +++ b/plugins/tracker-assets/lang/ar.json @@ -0,0 +1,296 @@ +{ + "string": { + "TrackerApplication": "أداة التتبع", + "Projects": "مشاريعك", + "More": "المزيد", + "Default": "افتراضي", + "MakeDefault": "تعيين كافتراضي", + "Delete": "حذف", + "Open": "فتح", + "Members": "الأعضاء", + "Inbox": "صندوق الوارد", + "MyIssues": "مهامي", + "ViewIssue": "عرض المهمة", + "IssueCreated": "تم إنشاء المهمة", + "Issues": "المهام", + "Views": "العروض", + "Active": "نشط", + "AllIssues": "جميع المهام", + "ActiveIssues": "المهام النشطة", + "BacklogIssues": "قائمة الانتظار", + "Backlog": "قائمة الانتظار", + "Board": "اللوحة", + "Components": "المكوّنات", + "AllComponents": "الكل", + "BacklogComponents": "قائمة الانتظار", + "ActiveComponents": "نشط", + "ClosedComponents": "مغلق", + "NewComponent": "مكوّن جديد", + "CreateComponent": "إنشاء مكوّن", + "ComponentNamePlaceholder": "اسم المكوّن", + "ComponentDescriptionPlaceholder": "الوصف (اختياري)", + "ComponentLead": "المسؤول", + "ComponentMembers": "الأعضاء", + "StartDate": "تاريخ البدء", + "TargetDate": "التاريخ المستهدف", + "Planned": "مخطط له", + "InProgress": "قيد التنفيذ", + "Paused": "متوقف مؤقتاً", + "Completed": "مكتمل", + "Canceled": "ملغى", + "CreateProject": "إنشاء مشروع", + "NewProject": "مشروع جديد", + "ProjectTitle": "عنوان المشروع", + "ProjectTitlePlaceholder": "مشروع جديد", + "UsedInIssueIDs": "يُستخدم في معرّفات المهام", + "Identifier": "المعرّف", + "Import": "استيراد", + "ProjectIdentifier": "معرّف المشروع", + "IdentifierExists": "معرّف المشروع موجود بالفعل", + "ProjectIdentifierPlaceholder": "PRJCT", + "ChooseIcon": "اختيار أيقونة", + "AddIssue": "إضافة مهمة", + "NewIssue": "مهمة جديدة", + "NewIssuePlaceholder": "جديد", + "ResumeDraft": "استئناف المسودة", + "SaveIssue": "إنشاء مهمة", + "SetPriority": "تعيين الأولوية…", + "SetStatus": "تعيين الحالة…", + "SelectIssue": "تحديد مهمة", + "Priority": "الأولوية", + "NoPriority": "بدون أولوية", + "Urgent": "عاجل", + "High": "مرتفعة", + "Medium": "متوسطة", + "Low": "منخفضة", + "Unassigned": "غير مُسند", + "Back": "رجوع", + "List": "قائمة", + "NumberLabels": "{count, plural, =0 {لا توجد تسميات} =1 {تسمية واحدة} other {# تسميات}}", + + "CategoryBacklog": "قائمة الانتظار", + "CategoryUnstarted": "لم يبدأ", + "CategoryStarted": "بدأ", + "CategoryCompleted": "مكتمل", + "CategoryCanceled": "ملغى", + + "Title": "العنوان", + "Name": "الاسم", + "Description": "الوصف", + "Status": "الحالة", + "Number": "الرقم", + "Assignee": "المُسند إليه", + "AssignTo": "إسناد إلى...", + "AssignedTo": "مُسند إلى {value}", + "Parent": "المهمة الأصلية", + "SetParent": "تعيين المهمة الأصلية…", + "ChangeParent": "تغيير المهمة الأصلية…", + "RemoveParent": "إزالة المهمة الأصلية", + "OpenParent": "فتح المهمة الأصلية", + "SubIssues": "المهام الفرعية", + "SubIssuesList": "المهام الفرعية ({subIssues})", + "OpenSubIssues": "فتح المهام الفرعية", + "AddSubIssues": "إضافة مهمة فرعية", + "BlockedBy": "محظور بواسطة", + "RelatedTo": "مرتبط بـ", + "Comments": "التعليقات", + "Attachments": "المرفقات", + "Labels": "التسميات", + "Component": "المكوّن", + "Space": "", + "SetDueDate": "تعيين تاريخ الاستحقاق…", + "ChangeDueDate": "تغيير تاريخ الاستحقاق…", + "ModificationDate": "تم التحديث {value}", + "Project": "المشروع", + "Issue": "المهمة", + "SubIssue": "مهمة فرعية", + "Document": "", + "DocumentIcon": "", + "DocumentColor": "", + "Rank": "الترتيب", + "TypeIssuePriority": "أولوية المهمة", + "IssueTitlePlaceholder": "عنوان المهمة", + "SubIssueTitlePlaceholder": "عنوان المهمة الفرعية", + "IssueDescriptionPlaceholder": "إضافة وصف…", + "SubIssueDescriptionPlaceholder": "إضافة وصف للمهمة الفرعية", + "AddIssueTooltip": "إضافة مهمة...", + "NewIssueDialogClose": "هل تريد إغلاق هذه النافذة؟", + "NewIssueDialogCloseNote": "ستُفقد جميع التغييرات", + "RemoveComponentDialogClose": "حذف المكوّن؟", + "RemoveComponentDialogCloseNote": "هل أنت متأكد أنك تريد حذف هذا المكوّن؟ لا يمكن التراجع عن هذه العملية", + "Grouping": "التجميع", + "Ordering": "الترتيب", + "CompletedIssues": "المهام المكتملة", + "NoGrouping": "بدون تجميع", + "NoAssignee": "بدون مُسند إليه", + "LastUpdated": "آخر تحديث", + "DueDate": "تاريخ الاستحقاق", + "Manual": "يدوي", + "All": "الكل", + "PastWeek": "الأسبوع الماضي", + "PastMonth": "الشهر الماضي", + "CopyIssueUrl": "نسخ رابط المهمة إلى الحافظة", + "CopyIssueId": "نسخ معرّف المهمة إلى الحافظة", + "CopyIssueBranch": "نسخ اسم فرع Git إلى الحافظة", + "CopyIssueTitle": "نسخ عنوان المهمة إلى الحافظة", + "AssetLabel": "الأصل", + "AddToComponent": "إضافة إلى المكوّن…", + "MoveToComponent": "نقل إلى المكوّن…", + "NoComponent": "بدون مكوّن", + "ComponentLeadTitle": "مسؤول المكوّن", + "ComponentMembersTitle": "أعضاء المكوّن", + "ComponentLeadSearchPlaceholder": "تعيين مسؤول المكوّن…", + "ComponentMembersSearchPlaceholder": "تغيير أعضاء المكوّن…", + "MoveToProject": "نقل إلى المشروع", + "Duplicate": "تكرار", + + "GotoIssues": "الانتقال إلى المهام", + "GotoActive": "الانتقال إلى المهام النشطة", + "GotoBacklog": "الانتقال إلى قائمة الانتظار", + "GotoComponents": "الانتقال إلى المكوّنات", + "GotoMyIssues": "الانتقال إلى مهامي", + "GotoTrackerApplication": "التبديل إلى تطبيق أداة التتبع", + + "CreatedOne": "تم الإنشاء", + "MoveIssues": "نقل المهام", + "MoveIssuesDescription": "حدد المشروع الذي تريد نقل المهام إليه", + "ManageAttributes": "إدارة السمات", + "KeepOriginalAttributes": "الاحتفاظ بالسمات الأصلية", + "KeepOriginalAttributesTooltip": "سيتم الاحتفاظ بحالات ومكوّنات المهام الأصلية في المشروع الجديد", + "SelectReplacement": "العناصر التالية غير متوفرة في المشروع الجديد. حدد بديلاً.", + "MissingItem": "عنصر مفقود", + "Replacement": "البديل", + "Original": "الأصل", + "OriginalDescription": "سيتم إنشاء العناصر من هذا القسم في المشروع الجديد", + + "Relations": "العلاقات", + "RemoveRelation": "إزالة العلاقة...", + "AddBlockedBy": "وضع علامة محظور بواسطة...", + "AddIsBlocking": "وضع علامة يحظر...", + "AddRelatedIssue": "الإشارة إلى مهمة أخرى...", + "RelatedIssue": "مهمة مرتبطة {id} - {title}", + "BlockedIssue": "مهمة محظورة {id} - {title}", + "BlockingIssue": "مهمة حاظرة {id} - {title}", + "BlockedBySearchPlaceholder": "البحث عن مهمة لوضع علامة محظور بواسطة...", + "IsBlockingSearchPlaceholder": "البحث عن مهمة لوضع علامة يحظر...", + "RelatedIssueSearchPlaceholder": "البحث عن مهمة للإشارة إليها...", + "Blocks": "يحظر", + "Related": "مرتبط", + "RelatedIssues": "المهام المرتبطة", + + "EditIssue": "تعديل {title}", + "EditWorkflowStatuses": "تعديل حالات المهام", + "EditProject": "تعديل المشروع", + "DeleteProject": "حذف المشروع", + "ArchiveProjectName": "أرشفة المشروع {name}؟", + "ArchiveProjectConfirm": "هل تريد أرشفة هذا المشروع؟", + "DeleteProjectConfirm": "هل تريد حذف هذا المشروع وجميع المهام؟", + "ProjectHasIssues": "توجد مهام في هذا المشروع، هل أنت متأكد أنك تريد الأرشفة؟", + "ManageWorkflowStatuses": "إدارة أنواع المشاريع", + "AddWorkflowStatus": "إضافة حالة مهمة", + "EditWorkflowStatus": "تعديل حالة المهمة", + "DeleteWorkflowStatus": "حذف حالة المهمة", + "DeleteWorkflowStatusConfirm": "هل تريد حذف الحالة \"{status}\"؟", + "DeleteWorkflowStatusErrorDescription": "الحالة \"{status}\" مُسندة إلى {count, plural, =1 {مهمة واحدة} other {# مهام}}. يرجى تحديد حالة للنقل", + + "Save": "حفظ", + "IncludeItemsThatMatch": "تضمين العناصر المطابقة لـ", + "AnyFilter": "أي عامل تصفية", + "AllFilters": "جميع عوامل التصفية", + "NoDescription": "بدون وصف", + "SearchIssue": "البحث عن مهمة...", + + "StatusHistory": "سجل الحالات", + "NewSubIssue": "إضافة مهمة فرعية...", + "AddLabel": "إضافة تسمية", + + "DeleteIssue": "حذف {issueCount, plural, =1 {مهمة} other {# مهام}}", + "DeleteIssueConfirm": "هل تريد حذف {issueCount, plural, =1 {المهمة} other {المهام}}{subIssueCount, plural, =0 {؟} =1 { والمهمة الفرعية؟} other { والمهام الفرعية؟}}", + + "Milestone": "معلم رئيسي", + "NoMilestone": "بدون معلم رئيسي", + "MoveToMilestone": "تحديد معلم رئيسي", + "Milestones": "المعالم الرئيسية", + "AllMilestones": "الكل", + "PlannedMilestones": "مخطط له", + "ActiveMilestones": "نشط", + "ClosedMilestones": "منجز", + "AddToMilestone": "إضافة إلى المعلم الرئيسي", + "MilestoneNamePlaceholder": "اسم المعلم الرئيسي", + + "NewMilestone": "معلم رئيسي جديد", + "CreateMilestone": "إنشاء", + + "MoveAndDeleteMilestone": "نقل المهام إلى {newMilestone} وحذف {deleteMilestone}", + "MoveAndDeleteMilestoneConfirm": "هل تريد حذف المعلم الرئيسي ونقل المهام إلى معلم رئيسي آخر؟", + + "Estimation": "التقدير", + "ReportedTime": "الوقت المستغرق", + "RemainingTime": "الوقت المتبقي", + "TimeSpendReports": "تقارير الوقت المستغرق", + "TimeSpendReport": "الوقت", + "TimeSpendReportAdd": "إضافة تقرير وقت", + "TimeSpendReportDate": "التاريخ", + "TimeSpendReportValue": "الوقت المستغرق", + "TimeSpendReportValueTooltip": "الوقت المستغرق بالساعات", + "TimeSpendReportDescription": "الوصف", + "TimeSpendDays": "{value}ي", + "TimeSpendHours": "{value}س", + "TimeSpendMinutes": "{value}د", + "ChildEstimation": "تقدير المهام الفرعية", + "ChildReportedTime": "وقت المهام الفرعية", + "CapacityValue": "من {value}ي", + "NewRelatedIssue": "مهمة مرتبطة جديدة", + "RelatedIssuesNotFound": "لم يتم العثور على مهام مرتبطة", + + "AddedReference": "تمت إضافة مرجع", + "AddedAsBlocked": "تم وضع علامة محظور", + "AddedAsBlocking": "تم وضع علامة يحظر", + + "IssueTemplate": "قالب", + "IssueTemplates": "القوالب", + "NewProcess": "قالب جديد", + "SaveProcess": "حفظ القالب", + "NoIssueTemplate": "بدون قالب", + "TemplateReplace": "هل تريد تطبيق القالب الجديد؟", + "TemplateReplaceConfirm": "سيتم استبدال جميع الحقول بقيم القالب الجديد", + "Apply": "تطبيق", + + "CurrentWorkDay": "يوم العمل الحالي", + "PreviousWorkDay": "يوم العمل السابق", + "TimeReportDayTypeLabel": "تحديد نوع يوم تقرير الوقت", + "DefaultAssignee": "المُسند إليه الافتراضي للمهام", + + "SevenHoursLength": "سبع ساعات", + "EightHoursLength": "ثماني ساعات", + "HourLabel": "س", + "MinuteLabel": "د", + "Saved": "تم الحفظ...", + "CreatedIssue": "تم إنشاء المهمة", + "CreatedSubIssue": "تم إنشاء المهمة الفرعية", + "ChangeStatus": "تغيير الحالة", + "ConfigLabel": "أداة التتبع", + "ConfigDescription": "ملحق لإدارة عناصر العمل وإنجاز جميع المهام.", + "NoStatusFound": "لم يتم العثور على حالة مطابقة", + "CreateMissingStatus": "إنشاء الحالة المفقودة", + "UnsetParent": "سيتم إلغاء تعيين المهمة الأصلية", + "AllProjects": "جميع المشاريع", + "IssueNotificationTitle": "{issueTitle}", + "IssueNotificationBody": "تم التحديث بواسطة {senderName}", + "IssueNotificationChanged": "غيّر {senderName} {property}", + "IssueNotificationChangedProperty": "غيّر {senderName} {property} إلى \"{newValue}\"", + "IssueNotificationMessage": "{senderName}: {message}", + "PreviousAssigned": "المُسند إليه سابقاً", + "IssueAssignedToYou": "مُسند إليك", + "RelatedIssueTargetDescription": "مشروع الهدف للمهمة المرتبطة بالفئة أو المساحة", + "MapRelatedIssues": "تكوين المشاريع الافتراضية للمهام المرتبطة", + "DefaultIssueStatus": "حالة المهمة الافتراضية", + "IssueStatus": "الحالة", + "Extensions": "الملحقات", + "UnsetParentIssue": "إلغاء تعيين المهمة الأصلية", + "ForbidCreateProjectPermission": "منع إنشاء المشاريع", + "ForbidCreateProjectPermissionDescription": "منع المستخدمين من إنشاء مشاريع جديدة", + "AllowCreatingIssues": "السماح بإنشاء المهام" + }, + "status": {} +} diff --git a/plugins/tracker-resources/src/components/components/ComponentEditor.svelte b/plugins/tracker-resources/src/components/components/ComponentEditor.svelte index 847197ecee3..ce0b2181217 100644 --- a/plugins/tracker-resources/src/components/components/ComponentEditor.svelte +++ b/plugins/tracker-resources/src/components/components/ComponentEditor.svelte @@ -168,7 +168,7 @@ diff --git a/plugins/tracker-resources/src/components/issues/IssuePresenter.svelte b/plugins/tracker-resources/src/components/issues/IssuePresenter.svelte index 205a531e45f..090569aa813 100644 --- a/plugins/tracker-resources/src/components/issues/IssuePresenter.svelte +++ b/plugins/tracker-resources/src/components/issues/IssuePresenter.svelte @@ -93,7 +93,7 @@ } .icon { - margin-right: 0.5rem; + margin-inline-end: 0.5rem; color: var(--theme-dark-color); } } diff --git a/plugins/tracker-resources/src/components/issues/ParentIssue.svelte b/plugins/tracker-resources/src/components/issues/ParentIssue.svelte index 0a7561b20b7..8b913ee36d4 100644 --- a/plugins/tracker-resources/src/components/issues/ParentIssue.svelte +++ b/plugins/tracker-resources/src/components/issues/ParentIssue.svelte @@ -54,9 +54,9 @@ .issue-title { margin: 0 0.25rem 0 0.375rem; - padding-right: 0.75rem; + padding-inline-end: 0.75rem; min-width: 0; color: var(--theme-caption-color); - border-right: 1px solid var(--theme-button-border); + border-inline-end: 1px solid var(--theme-button-border); } diff --git a/plugins/tracker-resources/src/components/issues/ParentNamesPresenter.svelte b/plugins/tracker-resources/src/components/issues/ParentNamesPresenter.svelte index b8943816438..2ef82bf2400 100644 --- a/plugins/tracker-resources/src/components/issues/ParentNamesPresenter.svelte +++ b/plugins/tracker-resources/src/components/issues/ParentNamesPresenter.svelte @@ -52,7 +52,7 @@ diff --git a/plugins/tracker-resources/src/components/issues/edit/SubIssueSelector.svelte b/plugins/tracker-resources/src/components/issues/edit/SubIssueSelector.svelte index 53a3c22b0bc..0322118b379 100644 --- a/plugins/tracker-resources/src/components/issues/edit/SubIssueSelector.svelte +++ b/plugins/tracker-resources/src/components/issues/edit/SubIssueSelector.svelte @@ -220,7 +220,7 @@ &:not(:first-child)::before { position: absolute; content: ''; - border-left: $border; + border-inline-start: $border; inset: 0.375rem auto; } } diff --git a/plugins/tracker-resources/src/components/issues/timereport/EstimationStatsPresenter.svelte b/plugins/tracker-resources/src/components/issues/timereport/EstimationStatsPresenter.svelte index 07a0e87902d..45017c6e665 100644 --- a/plugins/tracker-resources/src/components/issues/timereport/EstimationStatsPresenter.svelte +++ b/plugins/tracker-resources/src/components/issues/timereport/EstimationStatsPresenter.svelte @@ -114,7 +114,7 @@ } .label { font-size: 0.8125rem; - margin-left: 0.5rem; + margin-inline-start: 0.5rem; &.normal { color: var(--theme-content-color); diff --git a/plugins/tracker-resources/src/components/milestones/MilestoneEditor.svelte b/plugins/tracker-resources/src/components/milestones/MilestoneEditor.svelte index 56ef524359a..2bfbec71a3e 100644 --- a/plugins/tracker-resources/src/components/milestones/MilestoneEditor.svelte +++ b/plugins/tracker-resources/src/components/milestones/MilestoneEditor.svelte @@ -165,7 +165,7 @@ diff --git a/plugins/view-resources/src/components/masterDetail/MasterDetailBrowser.svelte b/plugins/view-resources/src/components/masterDetail/MasterDetailBrowser.svelte index 8644c303e1a..bab6ba245d0 100644 --- a/plugins/view-resources/src/components/masterDetail/MasterDetailBrowser.svelte +++ b/plugins/view-resources/src/components/masterDetail/MasterDetailBrowser.svelte @@ -189,7 +189,7 @@ position: fixed; display: block; top: 0; - left: 0; + inset-inline-start: 0; width: 100vw; height: 100vh; z-index: 10; diff --git a/plugins/workbench-assets/lang/ar.json b/plugins/workbench-assets/lang/ar.json new file mode 100644 index 00000000000..d42427fd53f --- /dev/null +++ b/plugins/workbench-assets/lang/ar.json @@ -0,0 +1,40 @@ +{ + "string": { + "More": "المزيد...", + "Delete": "حذف", + "ShowMenu": "إظهار القائمة", + "HideMenu": "إخفاء القائمة", + "Archive": "أرشفة", + "Archived": "الأرشيف", + "Open": "فتح", + "General": "عام", + "Members": "الأعضاء", + "Application": "التطبيق", + "BrowseSpaces": "تصفح المساحات", + "AccountDisabled": "الحساب معطّل", + "AccountDisabledDescr": "يُرجى التواصل مع مسؤول مساحة العمل", + "HelpAndSupport": "المساعدة والدعم", + "HelpCenter": "مركز المساعدة", + "KeyboardShortcuts": "اختصارات لوحة المفاتيح", + "Documentation": "التوثيق", + "OpenPlatformGuide": "فتح وثائق Huly", + "AccessWorkspaceSettings": "الوصول إلى إعدادات مساحة العمل", + "HowToWorkFaster": "تعلّم كيفية العمل بشكل أسرع", + "HiddenApplication": "تطبيق مخفي", + "OpenInNewTab": "فتح في علامة تبويب جديدة", + "NewVersionAvailable": "يتوفر إصدار جديد", + "PleaseUpdate": "يُرجى التحديث", + "ServerUnderMaintenance": "جارٍ تجهيز مساحة العمل للإصدار الجديد...", + "WorkspaceCreating": "جارٍ الإنشاء...", + "AccessDenied": "الكائن غير موجود أو لا تملك إذن الوصول إليه.", + "UpgradeDownloadProgress": "جارٍ تنزيل الترقية: {percent}%", + "Widget": "أداة", + "WidgetPreferences": "تفضيلات الأداة", + "OpenInSidebar": "فتح في الشريط الجانبي", + "OpenInSidebarNewTab": "فتح في علامة تبويب جديدة في الشريط الجانبي", + "ConfigureWidgets": "تكوين الأدوات", + "Tab": "علامة تبويب", + "WorkspaceIsArchived": "تمت أرشفة مساحة العمل بسبب عدم استخدامها، يُرجى التواصل معنا لاستعادتها...", + "WorkspaceIsMigrating": "جارٍ تحديث مساحة العمل. يُرجى الانتظار..." + } +} diff --git a/plugins/workbench-resources/src/components/AppItem.svelte b/plugins/workbench-resources/src/components/AppItem.svelte index dfa0a3efb22..4e29a549459 100644 --- a/plugins/workbench-resources/src/components/AppItem.svelte +++ b/plugins/workbench-resources/src/components/AppItem.svelte @@ -134,7 +134,7 @@ .marker { position: absolute; top: 1.1rem; - right: 0.375rem; + inset-inline-end: 0.375rem; width: 0.425rem; height: 0.425rem; border-radius: 50%; diff --git a/plugins/workbench-resources/src/components/Applications.svelte b/plugins/workbench-resources/src/components/Applications.svelte index e000f92c20e..aecab09144f 100644 --- a/plugins/workbench-resources/src/components/Applications.svelte +++ b/plugins/workbench-resources/src/components/Applications.svelte @@ -237,7 +237,7 @@ min-height: 4rem; .divider { - margin-left: 0.5rem; + margin-inline-start: 0.5rem; width: 1px; height: 2.25rem; } diff --git a/plugins/workbench-resources/src/components/ComponentNavigator.svelte b/plugins/workbench-resources/src/components/ComponentNavigator.svelte index 6027458eb8f..764e3eb28a9 100644 --- a/plugins/workbench-resources/src/components/ComponentNavigator.svelte +++ b/plugins/workbench-resources/src/components/ComponentNavigator.svelte @@ -208,7 +208,7 @@ position: fixed; display: block; top: 0; - left: 0; + inset-inline-start: 0; width: 100vw; height: 100vh; z-index: 10; diff --git a/plugins/workbench-resources/src/components/HelpAndSupport.svelte b/plugins/workbench-resources/src/components/HelpAndSupport.svelte index f47032566d0..87bb1ac8bd6 100644 --- a/plugins/workbench-resources/src/components/HelpAndSupport.svelte +++ b/plugins/workbench-resources/src/components/HelpAndSupport.svelte @@ -257,7 +257,7 @@ border-radius: 0.25rem; } .key-box + .key-box { - margin-left: 0.5rem; + margin-inline-start: 0.5rem; } .category-box { position: sticky; diff --git a/plugins/workbench-resources/src/components/NavFooter.svelte b/plugins/workbench-resources/src/components/NavFooter.svelte index cd9f35bb6cb..694b77a5050 100644 --- a/plugins/workbench-resources/src/components/NavFooter.svelte +++ b/plugins/workbench-resources/src/components/NavFooter.svelte @@ -58,7 +58,7 @@ diff --git a/plugins/workbench-resources/src/components/sidebar/SidebarExpanded.svelte b/plugins/workbench-resources/src/components/sidebar/SidebarExpanded.svelte index ccdbf31dedb..ad7e88a0c21 100644 --- a/plugins/workbench-resources/src/components/sidebar/SidebarExpanded.svelte +++ b/plugins/workbench-resources/src/components/sidebar/SidebarExpanded.svelte @@ -167,13 +167,13 @@ width: calc(100% - 3.5rem); background-color: var(--theme-panel-color); border-top: 1px solid transparent; // var(--theme-divider-color); - border-right: 1px solid var(--theme-divider-color); - border-left: none; + border-inline-end: 1px solid var(--theme-divider-color); + border-inline-start: none; &.float { position: absolute; top: 0; - right: 3.5rem; + inset-inline-end: 3.5rem; border-top-color: var(--theme-divider-color); border-bottom: 1px solid var(--theme-divider-color); z-index: 440; diff --git a/plugins/workbench-resources/src/components/sidebar/SidebarTabs.svelte b/plugins/workbench-resources/src/components/sidebar/SidebarTabs.svelte index 4a5f8faadd7..d238ed83f51 100644 --- a/plugins/workbench-resources/src/components/sidebar/SidebarTabs.svelte +++ b/plugins/workbench-resources/src/components/sidebar/SidebarTabs.svelte @@ -90,7 +90,7 @@ min-width: 2rem; max-width: 2rem; height: 100%; - border-left: 1px solid var(--theme-divider-color); + border-inline-start: 1px solid var(--theme-divider-color); gap: 0.25rem; align-items: center; padding: 0.25rem 0; diff --git a/scripts/rtl-codemod.mjs b/scripts/rtl-codemod.mjs new file mode 100644 index 00000000000..63d74834d7b --- /dev/null +++ b/scripts/rtl-codemod.mjs @@ -0,0 +1,101 @@ +#!/usr/bin/env node +// RTL codemod: rewrite physical CSS properties to direction-aware *logical* +// properties across all `.scss` files and ` blocks in svelte files. + let count = 0 + const out = text.replace(/(]*>)([\s\S]*?)(<\/style>)/g, (full, open, body, close) => { + const r = runCss(body); count += r.count; return open + r.out + close + }) + return { out, count } +} + +function walk (dir, files = []) { + for (const name of readdirSync(dir)) { + if (SKIP.has(name)) continue + const p = join(dir, name) + let st; try { st = statSync(p) } catch { continue } + if (st.isDirectory()) walk(p, files) + else if (name.endsWith('.scss') || name.endsWith('.svelte')) files.push(p) + } + return files +} + +const files = walk(ROOT) +let changedFiles = 0 +let totalRules = 0 +for (const f of files) { + const text = readFileSync(f, 'utf8') + const { out, count } = transform(text, f.endsWith('.svelte')) + if (count > 0 && out !== text) { + totalRules += count + changedFiles++ + if (!DRY) writeFileSync(f, out, 'utf8') + } +} +console.log(`${DRY ? '[dry] ' : ''}Scanned ${files.length} files; ${changedFiles} files / ${totalRules} declarations ${DRY ? 'would be ' : ''}rewritten to logical properties.`) diff --git a/scripts/translate-arabic.mjs b/scripts/translate-arabic.mjs new file mode 100644 index 00000000000..0605331a422 Binary files /dev/null and b/scripts/translate-arabic.mjs differ diff --git a/server/account/lang/ar.json b/server/account/lang/ar.json new file mode 100644 index 00000000000..4037b0bda9f --- /dev/null +++ b/server/account/lang/ar.json @@ -0,0 +1,22 @@ +{ + "string": { + "ConfirmationText": "أكّد عنوان بريدك الإلكتروني\n\nشكرًا لتسجيلك في {name}. لإكمال عملية التسجيل، يُرجى لصق الرابط التالي في متصفحك:\n\n{link}\n\nإذا لم تقم بالتسجيل في {name}، يمكنك تجاهل هذه الرسالة بأمان.", + "ConfirmationHTML": "
Huly

أكّد عنوان بريدك الإلكتروني

شكرًا لتسجيلك في {name}. لإكمال عملية التسجيل، يُرجى تأكيد عنوان بريدك الإلكتروني.

تأكيد البريد الإلكتروني →

الزر لا يعمل؟ انسخ هذا الرابط والصقه في متصفحك:
{link}

إذا لم تقم بالتسجيل في {name}، يمكنك تجاهل هذه الرسالة بأمان.

© Huly — جميع الحقوق محفوظة

", + "ConfirmationSubject": "أكّد عنوان بريدك الإلكتروني للتسجيل في {name}", + "RecoveryText": "استرداد كلمة المرور\n\nتلقّينا طلبًا لإعادة تعيين كلمة المرور الخاصة بحسابك.\n\nأعد تعيين كلمة المرور هنا:\n{link}\n\nإذا لم تطلب إعادة تعيين كلمة المرور، يمكنك تجاهل هذه الرسالة بأمان.", + "RecoveryHTML": "
Huly

أعد تعيين كلمة المرور الخاصة بك

تلقّينا طلبًا لإعادة تعيين كلمة المرور الخاصة بحسابك. انقر على الزر أدناه لتعيين كلمة مرور جديدة.

إعادة تعيين كلمة المرور →

الزر لا يعمل؟ انسخ هذا الرابط والصقه في متصفحك:
{link}

إذا لم تطلب إعادة تعيين كلمة المرور، يمكنك تجاهل هذه الرسالة بأمان. لن تتغيّر كلمة المرور الخاصة بك.

© Huly — جميع الحقوق محفوظة

", + "RecoverySubject": "استرداد كلمة المرور", + "InviteText": "لقد تمت دعوتك إلى {ws}\n\nلقد تمت دعوتك للانضمام إلى مساحة عمل {ws} على Huly.\n\nاقبل دعوتك هنا:\n{link}\n\nتنتهي صلاحية رابط الدعوة هذا خلال {expHours} ساعة.\n\nإذا لم تكن تتوقع دعوة، يمكنك تجاهل هذه الرسالة بأمان.", + "InviteHTML": "
Huly

لقد تمت دعوتك إلى {ws}

لقد تمت دعوتك للانضمام إلى مساحة عمل {ws} على Huly. انقر على الزر أدناه للقبول والبدء.

الانضمام إلى {ws} →

الزر لا يعمل؟ انسخ هذا الرابط والصقه في متصفحك:
{link}

تنتهي صلاحية رابط الدعوة هذا خلال {expHours} ساعة. إذا لم تكن تتوقع دعوة، يمكنك تجاهل هذه الرسالة بأمان.

© Huly — جميع الحقوق محفوظة

", + "InviteSubject": "دعوة إلى {ws}", + "OtpText": "رمز تسجيل الدخول الخاص بك في {app}\n\nرمز التحقق الخاص بك:\n\n{code}\n\nأدخل هذا الرمز في نافذة تسجيل الدخول للمتابعة.\n\nإذا لم تطلب هذا الرمز، يمكنك تجاهل هذه الرسالة بأمان.", + "OtpHTML": "
Huly

رمز تسجيل الدخول الخاص بك

رمز التحقق الخاص بك لـ {app}. أدخله في نافذة تسجيل الدخول للمتابعة.

{code}

تنتهي صلاحية هذا الرمز قريبًا. إذا لم تطلب هذا الرمز، يمكنك تجاهل هذه الرسالة بأمان.

© Huly — جميع الحقوق محفوظة

", + "OtpSubject": "رمز تأكيد {app}: {code}", + "ResendInviteText": "لقد تمت إعادة دعوتك إلى {ws}\n\nتم تجديد دعوتك إلى مساحة عمل {ws} على Huly.\n\nاقبل دعوتك هنا:\n{link}\n\nتنتهي صلاحية رابط الدعوة هذا خلال {expHours} ساعة.", + "ResendInviteHTML": "
Huly

لقد تمت إعادة دعوتك إلى {ws}

تم تجديد دعوتك إلى مساحة عمل {ws} على Huly. انقر على الزر أدناه للقبول.

الانضمام إلى {ws} →

الزر لا يعمل؟ انسخ هذا الرابط والصقه في متصفحك:
{link}

تنتهي صلاحية رابط الدعوة هذا خلال {expHours} ساعة. إذا لم تكن تتوقع هذا، يمكنك تجاهل هذه الرسالة بأمان.

© Huly — جميع الحقوق محفوظة

", + "ResendInviteSubject": "إعادة دعوة إلى {ws}", + "PasswordSetupText": "تعيين كلمة مرور لحسابك\n\nلقد طلبت إضافة تسجيل الدخول بكلمة المرور إلى حسابك.\n\nعيّن كلمة المرور الخاصة بك هنا:\n{link}\n\nبمجرد التعيين، يمكنك تسجيل الدخول باستخدام البريد الإلكتروني + كلمة المرور بالإضافة إلى طريقة تسجيل الدخول الحالية.\n\nإذا لم تطلب هذا، يمكنك تجاهل هذه الرسالة بأمان.", + "PasswordSetupHTML": "
Huly

تعيين كلمة مرور لحسابك

لقد طلبت إضافة تسجيل الدخول بكلمة المرور إلى حسابك. انقر على الزر أدناه لاختيار كلمة المرور الخاصة بك.

بمجرد التعيين، يمكنك تسجيل الدخول باستخدام البريد الإلكتروني + كلمة المرور بالإضافة إلى طريقة تسجيل الدخول الحالية.

تعيين كلمة المرور →

الزر لا يعمل؟ انسخ هذا الرابط والصقه في متصفحك:
{link}

إذا لم تطلب هذا، يمكنك تجاهل هذه الرسالة بأمان.

© Huly — جميع الحقوق محفوظة

", + "PasswordSetupSubject": "تعيين كلمة مرور لحساب Huly الخاص بك" + } +} diff --git a/services/github/github-assets/lang/ar.json b/services/github/github-assets/lang/ar.json new file mode 100644 index 00000000000..6f64c9b6763 --- /dev/null +++ b/services/github/github-assets/lang/ar.json @@ -0,0 +1,94 @@ +{ + "string": { + "Github": "Github", + "GithubDesc": "اربط مستودعات GitHub الخاصة بك لمزامنة المشكلات وطلبات السحب وتحديثات المشاريع", + "Settings": "تهيئة", + "Connect": "ربط المستودع بالمشروع", + "Configure": "تهيئة تطبيق {title} على GitHub", + "NoIntegrationsConfigured": "

لا يوجد تطبيق {title} على GitHub مرتبط بمساحة العمل هذه. يجب أولاً تثبيت تطبيق {title} على GitHub ومنحه حق الوصول إلى مستودعاتك.

إذا كنت تثبّته لمؤسسة على GitHub، فيجب أن تمتلك الصلاحيات المناسبة، أو ينبغي أن تطلب من زملائك تثبيته.

إذا كنت تخطط لتحويل استخدام التكامل إلى مساحة عمل {title} أخرى، يرجى إلغاء تثبيته أولاً.

", + "InstallApp": "تثبيت تطبيق Github", + "ConnectionPending": "في انتظار خدمة التكامل", + "Repository": "المستودع", + "NoRepository": "لم يتم تحديد مستودع", + "RepositoryInfo": "في", + "RepositoryIn": " في ", + "AssignRepository": "إسناد مستودع", + "WithoutRepository": "إنشاء مشكلة بدون GitHub", + "CreateGithubIssue": "إنشاء مشكلة على ", + "PullRequest": "طلب سحب", + "PullRequests": "طلبات السحب", + "ChangedFiles": "الملفات المُغيَّرة ({files})", + "ReviewedFiles": "الملفات المُراجَعة ({files})", + "All": "الكل", + "Active": "نشط", + "Closed": "مغلق", + "PRFile": "ملف", + "PRCommit": "إيداع", + "PRReview": "مراجعة", + "PRDraft": "مسودة طلب سحب", + "PRMergedAt": "تاريخ الدمج", + "PRClosedAt": "تاريخ الإغلاق", + "MergeCommitSHA": "مُعرِّف SHA لإيداع الدمج", + "ConfigLabel": "Github", + "ConfigDescription": "مزامنة ثنائية الاتجاه مع Github", + "Authorize": "تفويض تطبيق {title} على GitHub", + "ReAuthorize": "إعادة تفويض تطبيق {title} على GitHub", + "PleaseAuthorizeAs": "تحتاج إلى تفويض تطبيق {title} على GitHub للوصول إلى حساب GitHub الخاص بك.", + "PleaseConnectToProject": "يرجى ربط المستودع بالمشروع لبدء استخدام التكامل", + "ConnectProject": "ربط المستودع (المتاح {available})", + "Enable": "تمكين", + "Disable": "تعطيل", + "Disabled": "معطّل", + "ProjectsInSync": "- المستودعات ({of}/{sync})", + "ProjectsConfig": "مشاريع Github (جديد)", + "AuthorizeAs": "كـ {login}", + "Integrations": "تكاملات تطبيق GitHub", + "Options": "الخيارات", + "Projects": "المشاريع ({count})", + "GithubIssue": "مشكلة GitHub", + "GithubMilestone": "معلَم GitHub (مشروع)", + "OnlyOrganizationError": "حسابات المؤسسات فقط مدعومة", + "Mergeable": "جاهز للدمج", + "IssueRepositoryTarget": "إلى", + "ComponentForRepository": "استخدام المكوّن لمستودع Github", + "GithubUser": "Github", + "SyncEnabled": "تم تمكين المزامنة", + "IssueConnectedActivityInfo": "مرتبط بالمشكلة #{number} داخل {repoName}", + "PullRequestConnectedActivityInfo": "مرتبط بطلب السحب #{number} داخل {repoName}", + "PullRequestMergedActivityInfo": "تم دمج طلب السحب", + "ReviewPending": "قيد الانتظار", + "ReviewCommented": "تم التعليق", + "ReviewApproved": "تمت الموافقة", + "ReviewChangesRequested": "تم طلب تغييرات", + "ReviewDismissed": "تم الرفض", + "PullRequestMergeState": "حالة الدمج", + "PullRequestReviewDecision": "حالة المراجعة", + "Conflict": "تم اكتشاف تعارض", + "ReadyForMerge": "نعم", + "PROpen": "مفتوح", + "PRMerged": "مدموج", + "PRClosed": "مغلق", + "AuthenticatedWithGithub": "تم التفويض عبر Github {login}", + "AuthenticatedWithGithubEmployee": "يرجى دمج أو إزالة شخص Github", + "AuthenticatedWithGithubRequired": "يرجى تفويض تطبيق Github للعمل نيابةً عنك لتنفيذ الإجراءات", + "Processing": "جارٍ معالجة المصادقة/التثبيت", + "AutoClose": "اكتملت المعالجة، سيتم إغلاق علامة التبويب تلقائياً خلال {time} ثانية.", + "RequestFailed": "فشل الطلب. يرجى إغلاق علامة التبويب والمحاولة مرة أخرى.", + "CloseTab": "إغلاق علامة التبويب", + "PleaseRetry": "يرجى إعادة محاولة المصادقة", + "Updated": "محدّث", + "LinkToProject": "الاتصال بـ {title}", + "UnlinkFromProject": "قطع الاتصال", + "UnlinkRepository": "قطع اتصال المستودع عن المشروع؟", + "UnlinkMessage": "

قطع اتصال المستودع {repositoryName} عن {prjName}؟

لن يتم المساس بجميع المشكلات/طلبات السحب المتزامنة {total}.

هل ترغب في المتابعة؟

", + "LinkedWith": "متصل بـ", + "SelectWorkspaceToInstallApp": "ينبغي إجراء التثبيت من إعدادات تكامل مساحة العمل.", + "SelectWorkspaceToInstallAppMsg": "يرجى إلغاء تثبيت التطبيق والمحاولة مرة أخرى.", + "Uninstall": "تطبيقات Github المثبّتة", + "AuthenticationRevokedGithub": "إعادة التفويض لـ {login} مطلوبة لعمل تطبيق GitHub بشكل صحيح", + "UnlinkInstallationTitle": "إلغاء تثبيت تطبيق Github", + "UnlinkInstallation": "هل أنت متأكد أنك تريد إلغاء تثبيت تطبيق GitHub؟ سيتم تعطيل المزامنة.", + "RemoveInstallation": "إلغاء التثبيت", + "Suspended": "موقوف" + } +} diff --git a/services/github/github-resources/src/components/MarkdownDescriptionDiff.svelte b/services/github/github-resources/src/components/MarkdownDescriptionDiff.svelte index 509a58abbb2..95abc97bbf1 100644 --- a/services/github/github-resources/src/components/MarkdownDescriptionDiff.svelte +++ b/services/github/github-resources/src/components/MarkdownDescriptionDiff.svelte @@ -53,9 +53,9 @@ diff --git a/services/github/github-resources/src/components/presenters/GithubReviewThreadPresenter.svelte b/services/github/github-resources/src/components/presenters/GithubReviewThreadPresenter.svelte index 8e57c10ec1e..7411997a128 100644 --- a/services/github/github-resources/src/components/presenters/GithubReviewThreadPresenter.svelte +++ b/services/github/github-resources/src/components/presenters/GithubReviewThreadPresenter.svelte @@ -191,14 +191,14 @@ .file-content { border: 1px solid var(--theme-divider-color); border-top: 0; - border-bottom-left-radius: 0.25rem; - border-bottom-right-radius: 0.25rem; + border-end-start-radius: 0.25rem; + border-end-end-radius: 0.25rem; overflow-y: hidden; } .file-info { border-top: 1px solid var(--theme-divider-color); font-weight: 600; direction: rtl; - text-align: left; + text-align: start; }