From a49105db1d5f0d8f3d6641940ea86da959ffe006 Mon Sep 17 00:00:00 2001 From: thewh1teagle <61390950+thewh1teagle@users.noreply.github.com> Date: Thu, 20 Oct 2022 13:27:59 +0300 Subject: [PATCH 1/5] feat: hebrew translation (#2168) --- .../src/components/settings/Languages.vue | 1 + frontend/src/i18n/ar.json | 1 + frontend/src/i18n/de.json | 1 + frontend/src/i18n/en.json | 1 + frontend/src/i18n/es.json | 1 + frontend/src/i18n/fr.json | 1 + frontend/src/i18n/he.json | 272 ++++++++++++++++++ frontend/src/i18n/index.js | 5 + frontend/src/i18n/is.json | 1 + frontend/src/i18n/it.json | 1 + frontend/src/i18n/ja.json | 1 + frontend/src/i18n/ko.json | 1 + frontend/src/i18n/nl-be.json | 1 + frontend/src/i18n/pl.json | 1 + frontend/src/i18n/pt-br.json | 1 + frontend/src/i18n/pt.json | 1 + frontend/src/i18n/ro.json | 1 + frontend/src/i18n/ru.json | 1 + frontend/src/i18n/sk.json | 1 + frontend/src/i18n/sv-se.json | 1 + frontend/src/i18n/tr.json | 1 + frontend/src/i18n/ua.json | 1 + frontend/src/i18n/zh-cn.json | 1 + frontend/src/i18n/zh-tw.json | 1 + 24 files changed, 299 insertions(+) create mode 100644 frontend/src/i18n/he.json diff --git a/frontend/src/components/settings/Languages.vue b/frontend/src/components/settings/Languages.vue index db3049f5..1c02ffda 100644 --- a/frontend/src/components/settings/Languages.vue +++ b/frontend/src/components/settings/Languages.vue @@ -13,6 +13,7 @@ export default { data() { let dataObj = { locales: { + he: "he", ar: "ar", de: "de", en: "en", diff --git a/frontend/src/i18n/ar.json b/frontend/src/i18n/ar.json index 9794321d..107cb3b5 100644 --- a/frontend/src/i18n/ar.json +++ b/frontend/src/i18n/ar.json @@ -77,6 +77,7 @@ "help": "مساعدة" }, "languages": { + "he": "עברית", "ar": "العربية", "de": "Deutsch", "en": "English", diff --git a/frontend/src/i18n/de.json b/frontend/src/i18n/de.json index 00e1665c..54c4b969 100644 --- a/frontend/src/i18n/de.json +++ b/frontend/src/i18n/de.json @@ -83,6 +83,7 @@ "help": "Hilfe" }, "languages": { + "he": "עברית", "ar": "العربية", "de": "Deutsch", "en": "English", diff --git a/frontend/src/i18n/en.json b/frontend/src/i18n/en.json index 6aaa6145..a1fccdb5 100644 --- a/frontend/src/i18n/en.json +++ b/frontend/src/i18n/en.json @@ -83,6 +83,7 @@ "help": "Help" }, "languages": { + "he": "עברית", "ar": "العربية", "de": "Deutsch", "en": "English", diff --git a/frontend/src/i18n/es.json b/frontend/src/i18n/es.json index c3c19265..14530714 100644 --- a/frontend/src/i18n/es.json +++ b/frontend/src/i18n/es.json @@ -83,6 +83,7 @@ "help": "Ayuda" }, "languages": { + "he": "עברית", "ar": "العربية", "de": "Deutsch", "en": "English", diff --git a/frontend/src/i18n/fr.json b/frontend/src/i18n/fr.json index 6875a0b4..3628ee93 100644 --- a/frontend/src/i18n/fr.json +++ b/frontend/src/i18n/fr.json @@ -83,6 +83,7 @@ "help": "Aide" }, "languages": { + "he": "עברית", "ar": "العربية", "de": "Deutsch", "en": "English", diff --git a/frontend/src/i18n/he.json b/frontend/src/i18n/he.json new file mode 100644 index 00000000..ec9ecf4c --- /dev/null +++ b/frontend/src/i18n/he.json @@ -0,0 +1,272 @@ +{ + "buttons": { + "cancel": "ביטול", + "close": "סגירה", + "copy": "העתק", + "copyFile": "העתק קובץ", + "copyToClipboard": "העתק ללוח", + "create": "צור", + "delete": "מחק", + "download": "הורד", + "file": "קובץ", + "folder": "תקייה", + "hideDotfiles": "הסתר קבצים נסתרים", + "info": "מידע", + "more": "עוד", + "move": "העבר", + "moveFile": "העבר קובץ", + "new": "חדש", + "next": "הבא", + "ok": "אישור", + "permalink": "צור קישור קבוע", + "previous": "הקודם", + "publish": "יצירה", + "rename": "שנה שם", + "replace": "החלף", + "reportIssue": "דווח על תקלה", + "save": "שמור", + "schedule": "תזמון", + "search": "חיפוש", + "select": "בחר", + "selectMultiple": "בחירה מרובה", + "share": "שתף", + "shell": "פתיחת מסוף", + "submit": "אישור", + "switchView": "שנה תצוגה", + "toggleSidebar": "פתיחת / סגירת סרגל צד", + "update": "עדכון", + "upload": "העלאה", + "openFile": "פתח קובץ" + }, + "download": { + "downloadFile": "הורד קובץ", + "downloadFolder": "הורד תקייה", + "downloadSelected": "הורד קבצים שנבחרו" + }, + "errors": { + "forbidden": "אין לך הרשאות גישה", + "internal": "משהו השתבש", + "notFound": "לא ניתן להגיע למיקום זה", + "connection": "לא ניתן להגיע לשרת" + }, + "files": { + "body": "גוף", + "clear": "נקה", + "closePreview": "סגירת תצוגה מקדימה", + "files": "קבצים", + "folders": "תקיות", + "home": "ראשי", + "lastModified": "שונה לאחרונה", + "loading": "טוען...", + "lonely": "בודד כאן", + "metadata": "נתונים", + "multipleSelectionEnabled": "בחירה מרובה מופעלת", + "name": "שם", + "size": "גודל", + "sortByLastModified": "מיין לפי השינוי האחרון", + "sortByName": "מיין לפי שם", + "sortBySize": "מיין לפי גודל", + "noPreview": "תצוגה מקדימה לא זמינה לקובץ זה" + }, + "help": { + "click": "בחר קובץ או תקייה", + "ctrl": { + "click": "בחר מספר קבצים או תקיות", + "f": "פותח את החיפוש", + "s": "לשמור קובץ או להוריד את התקייה שבה אתה נמצא" + }, + "del": "מחק את מה שנבחר", + "doubleClick": "פתח קובץ או תקייה", + "esc": "נקה את הבחירה ו/או סגור את השדה", + "f1": "המידע הזה", + "f2": "שנה שם קובץ", + "help": "עזרה" + }, + "languages": { + "he": "עברית", + "ar": "العربية", + "de": "Deutsch", + "en": "English", + "es": "Español", + "fr": "Français", + "is": "Icelandic", + "it": "Italiano", + "ja": "日本語", + "ko": "한국어", + "nlBE": "Dutch (Belgium)", + "pl": "Polski", + "pt": "Português", + "ptBR": "Português (Brasil)", + "ro": "Romanian", + "ru": "Русский", + "sk": "Slovenčina", + "svSE": "Swedish (Sweden)", + "tr": "Türkçe", + "ua": "Українська", + "zhCN": "中文 (简体)", + "zhTW": "中文 (繁體)" + }, + "login": { + "createAnAccount": "צור חשבון", + "loginInstead": "חשבון קיים", + "password": "סיסמא", + "passwordConfirm": "אימות סיסמא", + "passwordsDontMatch": "סיסמאות אינן תואמות", + "signup": "הרשמה", + "submit": "התחברות", + "username": "שם משתמש", + "usernameTaken": "שם משתמש כבר קיים", + "wrongCredentials": "פרטי התחברות שגויים" + }, + "permanent": "קבוע", + "prompts": { + "copy": "העתק", + "copyMessage": "בחר לאן להעתיק את הקבצים:", + "currentlyNavigating": "כרגע מנווט ב:", + "deleteMessageMultiple": "האם אתה בטוח שברצונך למחוק {count} קבצים?", + "deleteMessageSingle": "האם אתה בטוח שברצונך למחוק את הקובץ או התקייה?", + "deleteMessageShare": "האם אתה בטוח שברצונך למחוק את השיתוף הזה?({path})?", + "deleteTitle": "מחק קבצים", + "displayName": "שם:", + "download": "הורד קבצים", + "downloadMessage": "בחר את הפורמט שברצונך להוריד", + "error": "משהו השתבש", + "fileInfo": "מידע על הקובץ", + "filesSelected": "{count} קבצים נבחרו.", + "lastModified": "שונה לאחרונה", + "move": "העבר", + "moveMessage": "בחר מיקום חדש לקובץ / תקייה:", + "newArchetype": "צור פוסט חדש. הקובץ יווצר בתקיית התוכן", + "newDir": "תקייה חדשה", + "newDirMessage": "כתוב את שם התקייה החדשה", + "newFile": "קובץ חדש", + "newFileMessage": "כתוב את שם הקובץ החדש", + "numberDirs": "מספר התקיות", + "numberFiles": "מספר הקבצים", + "rename": "שנה שם", + "renameMessage": "הכנס שם חדש עבור", + "replace": "החלף", + "replaceMessage": "אחד הקבצים בעל שם זהה לקובץ קיים, האם ברצונך להחליף את הקובץ הקיים בחדש? זהירות - הקובץ הישן ימחק\n", + "schedule": "תזמון", + "scheduleMessage": "בחר תאריך ושעה לתזמון הפרסום של פוסט זה.", + "show": "הצג", + "size": "גודל", + "upload": "העלאה", + "uploadFiles": "מעלה {files} קבצים...", + "uploadMessage": "בחר אפשרות העלאה.", + "optionalPassword": "סיסמא אופציונלית" + }, + "search": { + "images": "תמונות", + "music": "מוזיקה", + "pdf": "PDF", + "pressToSearch": "הקש אנטר לחיפוש...", + "search": "חפש...", + "typeToSearch": "הקלד לחיפוש...", + "types": "סוג", + "video": "וידאו" + }, + "settings": { + "admin": "מנהל", + "administrator": "מנהל ראשי", + "allowCommands": "הפעל פקודות", + "allowEdit": "ערוך, שנה שם ומחק קבצים או תקיות", + "allowNew": "צור קבצים ותקיות חדשות", + "allowPublish": "פרסם פוסטים ודפים חדשים", + "allowSignup": "אפשר למשתמשים להירשם", + "avoidChanges": "(השאר ריק כדי למנוע שינויים)", + "branding": "מיתוג", + "brandingDirectoryPath": "נתיב תקיית מיתוג", + "brandingHelp": "אתה יכול להגדיר את האופן שבו האפליקציה תראה על ידי שינוי שם האפליקציה, החלפת הלוגו, הוספת עיצוב מותאם אישית ואפילו השבתת קישורים חיצוניים לGithub.\nלמידע נוסף עיין ב-{0}.", + "changePassword": "שנה סיסמא", + "commandRunner": "הרצת פקודות", + "commandRunnerHelp": "אתה יכול להגדיר פקודות שיבוצעו באירועים שונים. עליך לכתוב אחד בכל שורה. משתני הסביבה {0} ו-{1} יהיו זמינים, בהיותם {0} ביחס ל-{1}. למידע נוסף על תכונה זו ועל משתני הסביבה הזמינים, עיין ב {2}.", + "commandsUpdated": "הפקודות עודכנו.", + "createUserDir": "צור תקיית בית במהלך הוספת משתמש חדש", + "userHomeBasePath": "נתיב ראשי לתקיות הבית של משתמשים", + "userScopeGenerationPlaceholder": "התחום יווצר אוטומטית", + "createUserHomeDirectory": "צור תקיית בית למשתמש", + "customStylesheet": "עיצוב מותאם אישית (Stylesheet)", + "defaultUserDescription": "אלה הגדרות ברירת המחדל למשתמשים חדשים", + "disableExternalLinks": "השבת קישורים חיצוניים (למעט תיעוד)", + "documentation": "תיעוד", + "examples": "דוגמאות", + "executeOnShell": "בצע במסוף", + "executeOnShellDescription": "כברירת מחדל, האפליקציה מבצעת את הפקודות על ידי הפעלה ישירה לקבצים (הבינארים). אם אתה רוצה להפעיל אותם מתוך מעטפת כלשהי, (לדוגמא מתוך Bash או PowerShell) אתה יכול להגדיר אותם כאן עם הפרמטרים הנדרשים. שים לב שזה יבוצע גם על פקודות משתמש וגם על הוקים (Hooks) לאירועים.", + "globalRules": "זוהי קבוצה גלובלית של חוקים והרשאות (מה מותר ומה אסור), הם חלים על כל משתמש. אתה יכול להגדיר כללים ספציפיים בהגדרות של כל משתמש, כדי לעקוף את החוקים הגלובלים.", + "globalSettings": "הגדרות גלובליות", + "hideDotfiles": "הסתר קבצים נסתרים", + "insertPath": "הכנס את הנתיב", + "insertRegex": "הוסף ביטוי רגולרי", + "instanceName": "שם", + "language": "שפה", + "lockPassword": "מנע ממשתמש להחליף סיסמא", + "newPassword": "הסיסמא החדשה שלך", + "newPasswordConfirm": "אשר את הסיסמה החדשה שלך", + "newUser": "משתמש חדש", + "password": "סיסמא", + "passwordUpdated": "הסיסמא עודכנה!", + "path": "נתיב", + "perm": { + "create": "יצירת קבצים ותקיות", + "delete": "מחיקת קבצים ותקיות", + "download": "הורדת קבצים ותקיות", + "execute": "ביצוע פקודות", + "modify": "עריכת קבצים קבצים", + "rename": "שינוי שם או העברת קבצים ותקיות", + "share": "שיתוף קבצים" + }, + "permissions": "הרשאות", + "permissionsHelp": "אתה יכול להגדיר את המשתמש להיות מנהל מערכת או לבחור את ההרשאות בנפרד. אם תבחר \"מנהל מערכת\", כל ההרשאות ייבחרו אוטומטית. ניהול המשתמשים נשאר הרשאה של מנהל מערכת.\n", + "profileSettings": "הגדרות פרופיל", + "ruleExample1": "מנע גישה לקבצים נסתרים (כל קובץ שמתחיל בנקודה, לדוגמא .git)", + "ruleExample2": "חסימת גישה לקובץ בשם Caddyfile בתחום הראשי.", + "rules": "חוקים", + "rulesHelp": "כאן אתה יכול להגדיר רשימה של כללים למשתמש ספציפי, רשימה שחורה ולבנה. הקבצים החסומים לא יופיעו ברשימת הקבצים ולא יהיו נגישים למשתמש. יש תמיכה בנתיבים (ביחס לתקייה הראשית של המשתמש), וגם בביטוי רגולרי.\n", + "scope": "תחום", + "setDateFormat": "הגדר פורמט תאריך", + "settingsUpdated": "ההגדרות עודכנו!", + "shareDuration": "משך השיתוף", + "shareManagement": "ניהול שיתוף", + "shareDeleted": "שיתוף נמחק!", + "singleClick": "השתמש בלחיצות בודדות כדי לפתוח קבצים ותקיות", + "themes": { + "dark": "כהה", + "light": "בהיר", + "title": "ערכת נושא" + }, + "user": "משתמש", + "userCommands": "פקודות", + "userCommandsHelp": "רשימה מופרדת עם רווחים עם הפקודות הזמינות עבור משתמש זה. דוגמא:\n", + "userCreated": "משתמש נוצר!", + "userDefaults": "הגדרות ברירת מחדל למשתמש", + "userDeleted": "משתמש נמחק!", + "userManagement": "ניהול משתמש", + "userUpdated": "המשתמש עודכן!", + "username": "שם משתמש", + "users": "משתמשים" + }, + "sidebar": { + "help": "עזרה", + "hugoNew": "הוגו חדש", + "login": "התחבר", + "logout": "התנתק", + "myFiles": "הקבצים שלי", + "newFile": "קובץ חדש", + "newFolder": "תקייה חדשה", + "preview": "תצוגה מקדימה", + "settings": "הגדרות", + "signup": "הרשמה", + "siteSettings": "הגדרות" + }, + "success": { + "linkCopied": "הקישור הועתק!" + }, + "time": { + "days": "ימים", + "hours": "שעות", + "minutes": "דקות", + "seconds": "שניות", + "unit": "יחידת זמן" + } +} diff --git a/frontend/src/i18n/index.js b/frontend/src/i18n/index.js index 2486790e..b0def2c3 100644 --- a/frontend/src/i18n/index.js +++ b/frontend/src/i18n/index.js @@ -1,6 +1,7 @@ import Vue from "vue"; import VueI18n from "vue-i18n"; +import he from "./he.json"; import ar from "./ar.json"; import de from "./de.json"; import en from "./en.json"; @@ -27,6 +28,9 @@ Vue.use(VueI18n); export function detectLocale() { let locale = (navigator.language || navigator.browserLangugae).toLowerCase(); switch (true) { + case /^he.*/i.test(locale): + locale = "he"; + break; case /^ar.*/i.test(locale): locale = "ar"; break; @@ -100,6 +104,7 @@ const i18n = new VueI18n({ locale: detectLocale(), fallbackLocale: "en", messages: { + he: removeEmpty(he), ar: removeEmpty(ar), de: removeEmpty(de), en: en, diff --git a/frontend/src/i18n/is.json b/frontend/src/i18n/is.json index 4be9848c..d6e202d0 100644 --- a/frontend/src/i18n/is.json +++ b/frontend/src/i18n/is.json @@ -77,6 +77,7 @@ "help": "Hjálp" }, "languages": { + "he": "עברית", "ar": "العربية", "de": "Deutsch", "en": "English", diff --git a/frontend/src/i18n/it.json b/frontend/src/i18n/it.json index 2ebfedca..295e4952 100644 --- a/frontend/src/i18n/it.json +++ b/frontend/src/i18n/it.json @@ -77,6 +77,7 @@ "help": "Aiuto" }, "languages": { + "he": "עברית", "ar": "العربية", "de": "Deutsch", "en": "English", diff --git a/frontend/src/i18n/ja.json b/frontend/src/i18n/ja.json index e88a9679..9eec4173 100644 --- a/frontend/src/i18n/ja.json +++ b/frontend/src/i18n/ja.json @@ -77,6 +77,7 @@ "help": "ヘルプ" }, "languages": { + "he": "עברית", "ar": "العربية", "de": "Deutsch", "en": "English", diff --git a/frontend/src/i18n/ko.json b/frontend/src/i18n/ko.json index e08e671a..fa48cc6d 100644 --- a/frontend/src/i18n/ko.json +++ b/frontend/src/i18n/ko.json @@ -77,6 +77,7 @@ "help": "도움말" }, "languages": { + "he": "עברית", "ar": "العربية", "de": "Deutsch", "en": "English", diff --git a/frontend/src/i18n/nl-be.json b/frontend/src/i18n/nl-be.json index 1f4b217d..464230f0 100644 --- a/frontend/src/i18n/nl-be.json +++ b/frontend/src/i18n/nl-be.json @@ -77,6 +77,7 @@ "help": "Help" }, "languages": { + "he": "עברית", "ar": "Arabisch", "de": "Duits", "en": "Engels", diff --git a/frontend/src/i18n/pl.json b/frontend/src/i18n/pl.json index 2ae760c3..8989a288 100644 --- a/frontend/src/i18n/pl.json +++ b/frontend/src/i18n/pl.json @@ -77,6 +77,7 @@ "help": "Pomoc" }, "languages": { + "he": "עברית", "ar": "العربية", "de": "Deutsch", "en": "English", diff --git a/frontend/src/i18n/pt-br.json b/frontend/src/i18n/pt-br.json index b41933e2..53a4eec3 100644 --- a/frontend/src/i18n/pt-br.json +++ b/frontend/src/i18n/pt-br.json @@ -77,6 +77,7 @@ "help": "Ajuda" }, "languages": { + "he": "עברית", "ar": "العربية", "de": "Deutsch", "en": "English", diff --git a/frontend/src/i18n/pt.json b/frontend/src/i18n/pt.json index ab8128f6..09735ba8 100644 --- a/frontend/src/i18n/pt.json +++ b/frontend/src/i18n/pt.json @@ -77,6 +77,7 @@ "help": "Ajuda" }, "languages": { + "he": "עברית", "ar": "Árabe", "de": "Alemão", "en": "Inglês", diff --git a/frontend/src/i18n/ro.json b/frontend/src/i18n/ro.json index 403b61f3..3564e3d4 100644 --- a/frontend/src/i18n/ro.json +++ b/frontend/src/i18n/ro.json @@ -77,6 +77,7 @@ "help": "Ajutor" }, "languages": { + "he": "עברית", "ar": "العربية", "de": "Deutsch", "en": "English", diff --git a/frontend/src/i18n/ru.json b/frontend/src/i18n/ru.json index 28277c29..feb377e0 100644 --- a/frontend/src/i18n/ru.json +++ b/frontend/src/i18n/ru.json @@ -83,6 +83,7 @@ "help": "Помощь" }, "languages": { + "he": "עברית", "ar": "العربية", "de": "Deutsch", "en": "English", diff --git a/frontend/src/i18n/sk.json b/frontend/src/i18n/sk.json index 65619b32..6fe2068d 100644 --- a/frontend/src/i18n/sk.json +++ b/frontend/src/i18n/sk.json @@ -83,6 +83,7 @@ "help": "Pomoc" }, "languages": { + "he": "עברית", "ar": "العربية", "de": "Deutsch", "en": "English", diff --git a/frontend/src/i18n/sv-se.json b/frontend/src/i18n/sv-se.json index 2a404d8c..9a7400d1 100644 --- a/frontend/src/i18n/sv-se.json +++ b/frontend/src/i18n/sv-se.json @@ -77,6 +77,7 @@ "help": "Hjälp" }, "languages": { + "he": "עברית", "ar": "العربية", "de": "Deutsch", "en": "English", diff --git a/frontend/src/i18n/tr.json b/frontend/src/i18n/tr.json index 538695d6..8c30d865 100644 --- a/frontend/src/i18n/tr.json +++ b/frontend/src/i18n/tr.json @@ -81,6 +81,7 @@ "help": "Yardım" }, "languages": { + "he": "עברית", "ar": "العربية", "de": "Deutsch", "en": "English", diff --git a/frontend/src/i18n/ua.json b/frontend/src/i18n/ua.json index 373f4349..474e6816 100644 --- a/frontend/src/i18n/ua.json +++ b/frontend/src/i18n/ua.json @@ -83,6 +83,7 @@ "help": "Допомога" }, "languages": { + "he": "עברית", "ar": "العربية", "de": "Deutsch", "en": "English", diff --git a/frontend/src/i18n/zh-cn.json b/frontend/src/i18n/zh-cn.json index 9da0849f..89054142 100644 --- a/frontend/src/i18n/zh-cn.json +++ b/frontend/src/i18n/zh-cn.json @@ -83,6 +83,7 @@ "help": "帮助" }, "languages": { + "he": "עברית", "ar": "العربية", "de": "Deutsch", "en": "English", diff --git a/frontend/src/i18n/zh-tw.json b/frontend/src/i18n/zh-tw.json index 8d0185c3..1b51eb49 100644 --- a/frontend/src/i18n/zh-tw.json +++ b/frontend/src/i18n/zh-tw.json @@ -77,6 +77,7 @@ "help": "幫助" }, "languages": { + "he": "עברית", "ar": "العربية", "de": "Deutsch", "en": "English", From 2c14146a314bb271be66a36c63b64852a2848e26 Mon Sep 17 00:00:00 2001 From: thewh1teagle <61390950+thewh1teagle@users.noreply.github.com> Date: Fri, 21 Oct 2022 19:07:11 +0300 Subject: [PATCH 2/5] feat: add rtl support (#2178) --- frontend/src/css/_shell.css | 4 +++ frontend/src/css/base.css | 18 +++++++++++++ frontend/src/css/dashboard.css | 26 ++++++++++++++++++ frontend/src/css/header.css | 19 ++++++++++++++ frontend/src/css/listing.css | 4 +++ frontend/src/css/mobile.css | 35 +++++++++++++++++++++++++ frontend/src/css/styles.css | 24 +++++++++++++++++ frontend/src/i18n/index.js | 2 ++ frontend/src/router/index.js | 14 +++++++++- frontend/src/views/settings/Profile.vue | 7 +++++ 10 files changed, 152 insertions(+), 1 deletion(-) diff --git a/frontend/src/css/_shell.css b/frontend/src/css/_shell.css index 388a3363..8f38e807 100644 --- a/frontend/src/css/_shell.css +++ b/frontend/src/css/_shell.css @@ -16,6 +16,10 @@ transition: .2s ease transform; } +body.rtl .shell { + direction: ltr; +} + .shell__result { display: flex; padding: 0.5em; diff --git a/frontend/src/css/base.css b/frontend/src/css/base.css index 05d799c9..58ce9aec 100644 --- a/frontend/src/css/base.css +++ b/frontend/src/css/base.css @@ -5,6 +5,10 @@ body { color: #333333; } +body.rtl { + direction: rtl; +} + * { box-sizing: border-box; } @@ -58,6 +62,11 @@ nav { left: 0; } +body.rtl nav { + left: unset; + right: 0; +} + nav .action { width: 100%; display: block; @@ -69,6 +78,11 @@ nav .action { text-overflow: ellipsis; } +body.rtl .action { + direction: rtl; + text-align: right; +} + nav > div { border-top: 1px solid rgba(0, 0, 0, 0.05); } @@ -101,6 +115,10 @@ main { border-radius: 0.125em; } +body.rtl .breadcrumbs a { + transform: translateX(-16em); +} + .breadcrumbs a:hover { background-color: rgba(0, 0, 0, 0.05); } diff --git a/frontend/src/css/dashboard.css b/frontend/src/css/dashboard.css index 558d8de7..d30fb543 100644 --- a/frontend/src/css/dashboard.css +++ b/frontend/src/css/dashboard.css @@ -8,6 +8,10 @@ flex-wrap: wrap; } +body.rtl .dashboard .row { + margin-right: 16em; +} + .dashboard .row .column { display: flex; padding: 0 .5em; @@ -60,6 +64,10 @@ p code { border-bottom: 2px solid rgba(0, 0, 0, 0.05); } +body.rtl #nav .wrapper { + margin-right: 16em; +} + .dashboard #nav ul { list-style: none; display: flex; @@ -138,6 +146,13 @@ table tr>*:first-child { padding-left: 1em; } +body.rtl table tr>* { + padding-left: unset; + padding-right: 1em; + text-align: right; + direction: ltr; +} + table tr>*:last-child { padding-right: 1em; } @@ -181,6 +196,11 @@ table tr>*:last-child { margin-right: auto; } +body.rtl .card .card-title>*:first-child { + margin-right: 0; + text-align: right; +} + .card>div { padding: 1em 1em; } @@ -461,4 +481,10 @@ table tr>*:last-child { .card .card-action.full .action .title { font-size: 1.5em; font-weight: 500; +} + +/*** RTL - Fix disk usage information (in english) ***/ +body.rtl .credits { + text-align: right; + direction: ltr; } \ No newline at end of file diff --git a/frontend/src/css/header.css b/frontend/src/css/header.css index 396f926b..3dc8bd51 100644 --- a/frontend/src/css/header.css +++ b/frontend/src/css/header.css @@ -135,10 +135,25 @@ header .menu-button { z-index: 1; } +body.rtl #search #result { + direction: ltr; +} + #search #result>div>*:first-child { margin-top: 0; } +body.rtl #search #result { + direction: rtl; + text-align: right; +} + +/*** RTL - Keep search result LTR because it has paths (in english) ***/ +body.rtl #search #result ul>* { + direction: ltr; + text-align: left; +} + #search.active #result { padding: .5em; height: calc(100% - 4em); @@ -224,6 +239,10 @@ header .menu-button { padding: .5em; } +body.rtl #search .boxes h3 { + text-align: right; +} + #search .boxes>div { display: flex; flex-wrap: wrap; diff --git a/frontend/src/css/listing.css b/frontend/src/css/listing.css index 17583bc4..528311fe 100644 --- a/frontend/src/css/listing.css +++ b/frontend/src/css/listing.css @@ -2,6 +2,10 @@ --item-selected: white; } +body.rtl #listing { + margin-right: 16em; +} + #listing h2 { margin: 0 0 0 0.5em; font-size: .9em; diff --git a/frontend/src/css/mobile.css b/frontend/src/css/mobile.css index 6417080f..ef4b173c 100644 --- a/frontend/src/css/mobile.css +++ b/frontend/src/css/mobile.css @@ -40,6 +40,13 @@ transform-origin: top right; z-index: 99999; } + + body.rtl #dropdown { + right: unset; + left: 1em; + transform-origin: top left; + } + #dropdown > div { display: block; } @@ -95,9 +102,20 @@ transition: .1s ease left; left: -17em; } + + body.rtl nav { + left: unset; + right: -17em; + } nav.active { left: 0; } + + body.rtl nav.active { + left: unset; + right: 0; + } + header .search-button, header .menu-button { display: inherit; @@ -108,6 +126,23 @@ #listing { margin-bottom: 5em; } + + body.rtl #listing { + margin-right: unset; + } + + body.rtl .breadcrumbs { + transform: translateX(16em); + } + + body.rtl #nav .wrapper { + margin-right: unset; + } + + body.rtl .dashboard .row { + margin-right: unset; + } + main { margin: 0 1em; width: calc(100% - 2em); diff --git a/frontend/src/css/styles.css b/frontend/src/css/styles.css index 8b3b608c..2ba99532 100644 --- a/frontend/src/css/styles.css +++ b/frontend/src/css/styles.css @@ -315,6 +315,11 @@ main .spinner .bounce2 { padding: 0 1em; } +/*** RTL - flip and position arrow of path ***/ +body.rtl .breadcrumbs .chevron { + transform: scaleX(-1) translateX(16em); +} + #editor-container .breadcrumbs span { font-size: .75rem; } @@ -404,3 +409,22 @@ main .spinner .bounce2 { } @import './mobile.css'; + +/* * * * * * * * * * * * * * * * + * RTL overrides * + * * * * * * * * * * * * * * * */ + +body.rtl .card-content textarea { + direction: ltr; + text-align: left; +} + +body.rtl .card-content .small + input { + direction: ltr; + text-align: left; +} + +body.rtl .card.floating .card-content .file-list { + direction: ltr; + text-align: left; +} diff --git a/frontend/src/i18n/index.js b/frontend/src/i18n/index.js index b0def2c3..84d08a7d 100644 --- a/frontend/src/i18n/index.js +++ b/frontend/src/i18n/index.js @@ -100,6 +100,8 @@ const removeEmpty = (obj) => {} ); +export const rtlLanguages = ["he", "ar"]; + const i18n = new VueI18n({ locale: detectLocale(), fallbackLocale: "en", diff --git a/frontend/src/router/index.js b/frontend/src/router/index.js index 6af06f33..c2a8b957 100644 --- a/frontend/src/router/index.js +++ b/frontend/src/router/index.js @@ -13,7 +13,7 @@ import Shares from "@/views/settings/Shares"; import Errors from "@/views/Errors"; import store from "@/store"; import { baseURL, name } from "@/utils/constants"; -import i18n from "@/i18n"; +import i18n, { rtlLanguages } from "@/i18n"; Vue.use(Router); @@ -158,6 +158,18 @@ router.beforeEach((to, from, next) => { const title = i18n.t(titles[to.name]); document.title = title + " - " + name; + /*** RTL related settings per route ****/ + const rtlSet = document.querySelector("body").classList.contains("rtl"); + const shouldSetRtl = rtlLanguages.includes(i18n.locale); + switch (true) { + case shouldSetRtl && !rtlSet: + document.querySelector("body").classList.add("rtl"); + break; + case !shouldSetRtl && rtlSet: + document.querySelector("body").classList.remove("rtl"); + break; + } + if (to.matched.some((record) => record.meta.requiresAuth)) { if (!store.getters.isLogged) { next({ diff --git a/frontend/src/views/settings/Profile.vue b/frontend/src/views/settings/Profile.vue index 0b8af637..4002e08c 100644 --- a/frontend/src/views/settings/Profile.vue +++ b/frontend/src/views/settings/Profile.vue @@ -75,6 +75,7 @@ import { mapState, mapMutations } from "vuex"; import { users as api } from "@/api"; import Languages from "@/components/settings/Languages"; +import i18n, { rtlLanguages } from "@/i18n"; export default { name: "settings", @@ -143,6 +144,9 @@ export default { singleClick: this.singleClick, dateFormat: this.dateFormat, }; + const shouldReload = + rtlLanguages.includes(data.locale) !== + rtlLanguages.includes(i18n.locale); await api.update(data, [ "locale", "hideDotfiles", @@ -150,6 +154,9 @@ export default { "dateFormat", ]); this.updateUser(data); + if (shouldReload) { + location.reload(); + } this.$showSuccess(this.$t("settings.settingsUpdated")); } catch (e) { this.$showError(e); From 1ebfc64ea1227c3801fc675b91278796469ba74d Mon Sep 17 00:00:00 2001 From: leplan73 Date: Sat, 22 Oct 2022 11:11:02 +0200 Subject: [PATCH 3/5] chore: updated golang.org/x/text to v0.4.0 (#2176) --- go.mod | 4 ++-- go.sum | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index 14675698..3a8b2fab 100644 --- a/go.mod +++ b/go.mod @@ -25,7 +25,7 @@ require ( go.etcd.io/bbolt v1.3.6 golang.org/x/crypto v0.0.0-20220427172511-eb4f295cb31f golang.org/x/image v0.0.0-20220413100746-70e8d0d3baa9 - golang.org/x/text v0.3.7 + golang.org/x/text v0.4.0 gopkg.in/natefinch/lumberjack.v2 v2.0.0 gopkg.in/yaml.v2 v2.4.0 ) @@ -59,7 +59,7 @@ require ( github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 // indirect github.com/yusufpapurcu/wmi v1.2.2 // indirect golang.org/x/net v0.0.0-20220412020605-290c469a71a5 // indirect - golang.org/x/sys v0.0.0-20220412211240-33da011f77ad // indirect + golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f // indirect gopkg.in/ini.v1 v1.66.4 // indirect gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect ) diff --git a/go.sum b/go.sum index 350daa45..30cd6a99 100644 --- a/go.sum +++ b/go.sum @@ -404,8 +404,8 @@ golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220412211240-33da011f77ad h1:ntjMns5wyP/fN65tdBD4g8J5w8n015+iIIs9rtjXkY0= -golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f h1:v4INt8xihDGvnrfjMDVXGxw9wrfxYyCjk0KbXjhR55s= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -414,8 +414,8 @@ golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg= +golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= From a5757b94e8ed492d454b9e427b7f45824cc56c5c Mon Sep 17 00:00:00 2001 From: thewh1teagle <61390950+thewh1teagle@users.noreply.github.com> Date: Sat, 22 Oct 2022 12:16:59 +0300 Subject: [PATCH 4/5] fix: missing video controls on mobile (#2180) --- frontend/src/css/mobile.css | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/frontend/src/css/mobile.css b/frontend/src/css/mobile.css index ef4b173c..77d9e55c 100644 --- a/frontend/src/css/mobile.css +++ b/frontend/src/css/mobile.css @@ -2,6 +2,10 @@ nav { width: 10em } + /* Mobile Only fix div hidden by bottom navigation bar of mobile browser when using height: 100vh */ + #previewer .preview { + height: calc(100% - 4em) !important; + } } @media (max-width: 1024px) { From 3a0dace9a93f9d57855801de548891010cf0830e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 22 Oct 2022 15:50:34 +0200 Subject: [PATCH 5/5] build(deps): bump ansi-html and webpack-dev-server in /frontend (#2184) Removes [ansi-html](https://github.com/Tjatse/ansi-html). It's no longer used after updating ancestor dependency [webpack-dev-server](https://github.com/webpack/webpack-dev-server). These dependencies need to be updated together. Removes `ansi-html` Updates `webpack-dev-server` from 3.11.2 to 3.11.3 - [Release notes](https://github.com/webpack/webpack-dev-server/releases) - [Changelog](https://github.com/webpack/webpack-dev-server/blob/v3.11.3/CHANGELOG.md) - [Commits](https://github.com/webpack/webpack-dev-server/compare/v3.11.2...v3.11.3) --- updated-dependencies: - dependency-name: ansi-html dependency-type: indirect - dependency-name: webpack-dev-server dependency-type: indirect ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- frontend/package-lock.json | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 500376fa..cbf1136b 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -2517,10 +2517,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ansi-html": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", "dev": true, "engines": [ "node >= 0.8.0" @@ -14356,12 +14356,12 @@ } }, "node_modules/webpack-dev-server": { - "version": "3.11.2", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.2.tgz", - "integrity": "sha512-A80BkuHRQfCiNtGBS1EMf2ChTUs0x+B3wGDFmOeT4rmJOHhHTCH2naNxIHhmkr0/UillP4U3yeIyv1pNp+QDLQ==", + "version": "3.11.3", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.3.tgz", + "integrity": "sha512-3x31rjbEQWKMNzacUZRE6wXvUFuGpH7vr0lIEbYpMAG9BOxi0928QU1BBswOAP3kg3H1O4hiS+sq4YyAn6ANnA==", "dev": true, "dependencies": { - "ansi-html": "0.0.7", + "ansi-html-community": "0.0.8", "bonjour": "^3.5.0", "chokidar": "^2.1.8", "compression": "^1.7.4", @@ -17494,10 +17494,10 @@ "type-fest": "^0.11.0" } }, - "ansi-html": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", "dev": true }, "ansi-regex": { @@ -27228,12 +27228,12 @@ } }, "webpack-dev-server": { - "version": "3.11.2", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.2.tgz", - "integrity": "sha512-A80BkuHRQfCiNtGBS1EMf2ChTUs0x+B3wGDFmOeT4rmJOHhHTCH2naNxIHhmkr0/UillP4U3yeIyv1pNp+QDLQ==", + "version": "3.11.3", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.3.tgz", + "integrity": "sha512-3x31rjbEQWKMNzacUZRE6wXvUFuGpH7vr0lIEbYpMAG9BOxi0928QU1BBswOAP3kg3H1O4hiS+sq4YyAn6ANnA==", "dev": true, "requires": { - "ansi-html": "0.0.7", + "ansi-html-community": "0.0.8", "bonjour": "^3.5.0", "chokidar": "^2.1.8", "compression": "^1.7.4",