Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion desktop/src/ui/platform.ts
Original file line number Diff line number Diff line change
Expand Up @@ -412,7 +412,7 @@ export async function configurePlatform (onWorkbenchConnect?: () => Promise<void
const languages =
myBranding.languages !== undefined && 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)

Expand Down
4 changes: 2 additions & 2 deletions dev/prod/public/branding.json
Original file line number Diff line number Diff line change
@@ -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",
Expand Down Expand Up @@ -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",
Expand Down
2 changes: 1 addition & 1 deletion dev/prod/src/platform.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand Down
77 changes: 77 additions & 0 deletions foundations/core/packages/core/lang/ar.json
Original file line number Diff line number Diff line change
@@ -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": "الإصدار"
}
}
30 changes: 30 additions & 0 deletions foundations/core/packages/platform/lang/ar.json
Original file line number Diff line number Diff line change
@@ -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 موجود بالفعل"
}
}
2 changes: 1 addition & 1 deletion foundations/core/packages/platform/src/testUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ function makeLocaleMatcher (target: object): object {
)
}

const langs = ['en', 'ru']
const langs = ['en', 'ru', 'ar']

/**
* @public
Expand Down
65 changes: 65 additions & 0 deletions packages/presentation/lang/ar.json
Original file line number Diff line number Diff line change
@@ -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": "الملف كبير جداً"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down
2 changes: 1 addition & 1 deletion packages/presentation/src/components/Image.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@
border-radius: inherit;
position: absolute;
top: 0;
left: 0;
inset-inline-start: 0;
width: 100%;
height: 100%;
display: flex;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
</style>
4 changes: 2 additions & 2 deletions packages/presentation/src/components/SearchResult.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@

.shortTitle {
display: flex;
padding-right: 0.5rem;
padding-inline-end: 0.5rem;
color: var(--theme-darker-color);
}
.name {
Expand All @@ -104,7 +104,7 @@
}

.description {
padding-left: 0.5rem;
padding-inline-start: 0.5rem;
color: var(--global-secondary-TextColor);
}
}
Expand Down
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
6 changes: 6 additions & 0 deletions packages/theme/src/Theme.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,10 @@
const currentLanguage = writable<string>(getCurrentLanguage())
const currentEmoji = writable<string>(getCurrentEmoji())

// Languages whose UI should render right-to-left.
const rtlLanguages = new Set<string>(['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))
}
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -124,6 +129,7 @@

const setDocumentLanguage = (): void => {
document.documentElement.lang = $currentLanguage
document.documentElement.dir = isRtlLanguage($currentLanguage) ? 'rtl' : 'ltr'
}

onMount(() => {
Expand Down
Loading