Merge branch 'filebrowser:master' into master

This commit is contained in:
Dimas Ananda traper 2022-11-04 11:21:20 +07:00 committed by GitHub
commit 2ce0361e2a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
36 changed files with 477 additions and 23 deletions

View File

@ -2517,10 +2517,10 @@
"url": "https://github.com/sponsors/sindresorhus" "url": "https://github.com/sponsors/sindresorhus"
} }
}, },
"node_modules/ansi-html": { "node_modules/ansi-html-community": {
"version": "0.0.7", "version": "0.0.8",
"resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz",
"integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==",
"dev": true, "dev": true,
"engines": [ "engines": [
"node >= 0.8.0" "node >= 0.8.0"
@ -14356,12 +14356,12 @@
} }
}, },
"node_modules/webpack-dev-server": { "node_modules/webpack-dev-server": {
"version": "3.11.2", "version": "3.11.3",
"resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.2.tgz", "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.3.tgz",
"integrity": "sha512-A80BkuHRQfCiNtGBS1EMf2ChTUs0x+B3wGDFmOeT4rmJOHhHTCH2naNxIHhmkr0/UillP4U3yeIyv1pNp+QDLQ==", "integrity": "sha512-3x31rjbEQWKMNzacUZRE6wXvUFuGpH7vr0lIEbYpMAG9BOxi0928QU1BBswOAP3kg3H1O4hiS+sq4YyAn6ANnA==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"ansi-html": "0.0.7", "ansi-html-community": "0.0.8",
"bonjour": "^3.5.0", "bonjour": "^3.5.0",
"chokidar": "^2.1.8", "chokidar": "^2.1.8",
"compression": "^1.7.4", "compression": "^1.7.4",
@ -17494,10 +17494,10 @@
"type-fest": "^0.11.0" "type-fest": "^0.11.0"
} }
}, },
"ansi-html": { "ansi-html-community": {
"version": "0.0.7", "version": "0.0.8",
"resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz",
"integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==",
"dev": true "dev": true
}, },
"ansi-regex": { "ansi-regex": {
@ -27228,12 +27228,12 @@
} }
}, },
"webpack-dev-server": { "webpack-dev-server": {
"version": "3.11.2", "version": "3.11.3",
"resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.2.tgz", "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.3.tgz",
"integrity": "sha512-A80BkuHRQfCiNtGBS1EMf2ChTUs0x+B3wGDFmOeT4rmJOHhHTCH2naNxIHhmkr0/UillP4U3yeIyv1pNp+QDLQ==", "integrity": "sha512-3x31rjbEQWKMNzacUZRE6wXvUFuGpH7vr0lIEbYpMAG9BOxi0928QU1BBswOAP3kg3H1O4hiS+sq4YyAn6ANnA==",
"dev": true, "dev": true,
"requires": { "requires": {
"ansi-html": "0.0.7", "ansi-html-community": "0.0.8",
"bonjour": "^3.5.0", "bonjour": "^3.5.0",
"chokidar": "^2.1.8", "chokidar": "^2.1.8",
"compression": "^1.7.4", "compression": "^1.7.4",

View File

@ -13,6 +13,7 @@ export default {
data() { data() {
let dataObj = { let dataObj = {
locales: { locales: {
he: "he",
ar: "ar", ar: "ar",
de: "de", de: "de",
en: "en", en: "en",

View File

@ -16,6 +16,10 @@
transition: .2s ease transform; transition: .2s ease transform;
} }
body.rtl .shell {
direction: ltr;
}
.shell__result { .shell__result {
display: flex; display: flex;
padding: 0.5em; padding: 0.5em;

View File

@ -5,6 +5,10 @@ body {
color: #333333; color: #333333;
} }
body.rtl {
direction: rtl;
}
* { * {
box-sizing: border-box; box-sizing: border-box;
} }
@ -58,6 +62,11 @@ nav {
left: 0; left: 0;
} }
body.rtl nav {
left: unset;
right: 0;
}
nav .action { nav .action {
width: 100%; width: 100%;
display: block; display: block;
@ -69,6 +78,11 @@ nav .action {
text-overflow: ellipsis; text-overflow: ellipsis;
} }
body.rtl .action {
direction: rtl;
text-align: right;
}
nav > div { nav > div {
border-top: 1px solid rgba(0, 0, 0, 0.05); border-top: 1px solid rgba(0, 0, 0, 0.05);
} }
@ -101,6 +115,10 @@ main {
border-radius: 0.125em; border-radius: 0.125em;
} }
body.rtl .breadcrumbs a {
transform: translateX(-16em);
}
.breadcrumbs a:hover { .breadcrumbs a:hover {
background-color: rgba(0, 0, 0, 0.05); background-color: rgba(0, 0, 0, 0.05);
} }

View File

@ -8,6 +8,10 @@
flex-wrap: wrap; flex-wrap: wrap;
} }
body.rtl .dashboard .row {
margin-right: 16em;
}
.dashboard .row .column { .dashboard .row .column {
display: flex; display: flex;
padding: 0 .5em; padding: 0 .5em;
@ -60,6 +64,10 @@ p code {
border-bottom: 2px solid rgba(0, 0, 0, 0.05); border-bottom: 2px solid rgba(0, 0, 0, 0.05);
} }
body.rtl #nav .wrapper {
margin-right: 16em;
}
.dashboard #nav ul { .dashboard #nav ul {
list-style: none; list-style: none;
display: flex; display: flex;
@ -138,6 +146,13 @@ table tr>*:first-child {
padding-left: 1em; padding-left: 1em;
} }
body.rtl table tr>* {
padding-left: unset;
padding-right: 1em;
text-align: right;
direction: ltr;
}
table tr>*:last-child { table tr>*:last-child {
padding-right: 1em; padding-right: 1em;
} }
@ -181,6 +196,11 @@ table tr>*:last-child {
margin-right: auto; margin-right: auto;
} }
body.rtl .card .card-title>*:first-child {
margin-right: 0;
text-align: right;
}
.card>div { .card>div {
padding: 1em 1em; padding: 1em 1em;
} }
@ -461,4 +481,10 @@ table tr>*:last-child {
.card .card-action.full .action .title { .card .card-action.full .action .title {
font-size: 1.5em; font-size: 1.5em;
font-weight: 500; font-weight: 500;
}
/*** RTL - Fix disk usage information (in english) ***/
body.rtl .credits {
text-align: right;
direction: ltr;
} }

View File

@ -135,10 +135,25 @@ header .menu-button {
z-index: 1; z-index: 1;
} }
body.rtl #search #result {
direction: ltr;
}
#search #result>div>*:first-child { #search #result>div>*:first-child {
margin-top: 0; 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 { #search.active #result {
padding: .5em; padding: .5em;
height: calc(100% - 4em); height: calc(100% - 4em);
@ -224,6 +239,10 @@ header .menu-button {
padding: .5em; padding: .5em;
} }
body.rtl #search .boxes h3 {
text-align: right;
}
#search .boxes>div { #search .boxes>div {
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;

View File

@ -2,6 +2,10 @@
--item-selected: white; --item-selected: white;
} }
body.rtl #listing {
margin-right: 16em;
}
#listing h2 { #listing h2 {
margin: 0 0 0 0.5em; margin: 0 0 0 0.5em;
font-size: .9em; font-size: .9em;

View File

@ -2,6 +2,10 @@
nav { nav {
width: 10em 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) { @media (max-width: 1024px) {
@ -40,6 +44,13 @@
transform-origin: top right; transform-origin: top right;
z-index: 99999; z-index: 99999;
} }
body.rtl #dropdown {
right: unset;
left: 1em;
transform-origin: top left;
}
#dropdown > div { #dropdown > div {
display: block; display: block;
} }
@ -95,9 +106,20 @@
transition: .1s ease left; transition: .1s ease left;
left: -17em; left: -17em;
} }
body.rtl nav {
left: unset;
right: -17em;
}
nav.active { nav.active {
left: 0; left: 0;
} }
body.rtl nav.active {
left: unset;
right: 0;
}
header .search-button, header .search-button,
header .menu-button { header .menu-button {
display: inherit; display: inherit;
@ -108,6 +130,23 @@
#listing { #listing {
margin-bottom: 5em; 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 { main {
margin: 0 1em; margin: 0 1em;
width: calc(100% - 2em); width: calc(100% - 2em);

View File

@ -315,6 +315,11 @@ main .spinner .bounce2 {
padding: 0 1em; padding: 0 1em;
} }
/*** RTL - flip and position arrow of path ***/
body.rtl .breadcrumbs .chevron {
transform: scaleX(-1) translateX(16em);
}
#editor-container .breadcrumbs span { #editor-container .breadcrumbs span {
font-size: .75rem; font-size: .75rem;
} }
@ -404,3 +409,22 @@ main .spinner .bounce2 {
} }
@import './mobile.css'; @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;
}

View File

@ -77,6 +77,7 @@
"help": "مساعدة" "help": "مساعدة"
}, },
"languages": { "languages": {
"he": "עברית",
"ar": "العربية", "ar": "العربية",
"de": "Deutsch", "de": "Deutsch",
"en": "English", "en": "English",

View File

@ -83,6 +83,7 @@
"help": "Hilfe" "help": "Hilfe"
}, },
"languages": { "languages": {
"he": "עברית",
"ar": "العربية", "ar": "العربية",
"de": "Deutsch", "de": "Deutsch",
"en": "English", "en": "English",

View File

@ -83,6 +83,7 @@
"help": "Help" "help": "Help"
}, },
"languages": { "languages": {
"he": "עברית",
"ar": "العربية", "ar": "العربية",
"de": "Deutsch", "de": "Deutsch",
"en": "English", "en": "English",

View File

@ -83,6 +83,7 @@
"help": "Ayuda" "help": "Ayuda"
}, },
"languages": { "languages": {
"he": "עברית",
"ar": "العربية", "ar": "العربية",
"de": "Deutsch", "de": "Deutsch",
"en": "English", "en": "English",

View File

@ -83,6 +83,7 @@
"help": "Aide" "help": "Aide"
}, },
"languages": { "languages": {
"he": "עברית",
"ar": "العربية", "ar": "العربية",
"de": "Deutsch", "de": "Deutsch",
"en": "English", "en": "English",

272
frontend/src/i18n/he.json Normal file
View File

@ -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": "יחידת זמן"
}
}

View File

@ -1,6 +1,7 @@
import Vue from "vue"; import Vue from "vue";
import VueI18n from "vue-i18n"; import VueI18n from "vue-i18n";
import he from "./he.json";
import ar from "./ar.json"; import ar from "./ar.json";
import de from "./de.json"; import de from "./de.json";
import en from "./en.json"; import en from "./en.json";
@ -27,6 +28,9 @@ Vue.use(VueI18n);
export function detectLocale() { export function detectLocale() {
let locale = (navigator.language || navigator.browserLangugae).toLowerCase(); let locale = (navigator.language || navigator.browserLangugae).toLowerCase();
switch (true) { switch (true) {
case /^he.*/i.test(locale):
locale = "he";
break;
case /^ar.*/i.test(locale): case /^ar.*/i.test(locale):
locale = "ar"; locale = "ar";
break; break;
@ -96,10 +100,13 @@ const removeEmpty = (obj) =>
{} {}
); );
export const rtlLanguages = ["he", "ar"];
const i18n = new VueI18n({ const i18n = new VueI18n({
locale: detectLocale(), locale: detectLocale(),
fallbackLocale: "en", fallbackLocale: "en",
messages: { messages: {
he: removeEmpty(he),
ar: removeEmpty(ar), ar: removeEmpty(ar),
de: removeEmpty(de), de: removeEmpty(de),
en: en, en: en,

View File

@ -77,6 +77,7 @@
"help": "Hjálp" "help": "Hjálp"
}, },
"languages": { "languages": {
"he": "עברית",
"ar": "العربية", "ar": "العربية",
"de": "Deutsch", "de": "Deutsch",
"en": "English", "en": "English",

View File

@ -77,6 +77,7 @@
"help": "Aiuto" "help": "Aiuto"
}, },
"languages": { "languages": {
"he": "עברית",
"ar": "العربية", "ar": "العربية",
"de": "Deutsch", "de": "Deutsch",
"en": "English", "en": "English",

View File

@ -77,6 +77,7 @@
"help": "ヘルプ" "help": "ヘルプ"
}, },
"languages": { "languages": {
"he": "עברית",
"ar": "العربية", "ar": "العربية",
"de": "Deutsch", "de": "Deutsch",
"en": "English", "en": "English",

View File

@ -77,6 +77,7 @@
"help": "도움말" "help": "도움말"
}, },
"languages": { "languages": {
"he": "עברית",
"ar": "العربية", "ar": "العربية",
"de": "Deutsch", "de": "Deutsch",
"en": "English", "en": "English",

View File

@ -77,6 +77,7 @@
"help": "Help" "help": "Help"
}, },
"languages": { "languages": {
"he": "עברית",
"ar": "Arabisch", "ar": "Arabisch",
"de": "Duits", "de": "Duits",
"en": "Engels", "en": "Engels",

View File

@ -77,6 +77,7 @@
"help": "Pomoc" "help": "Pomoc"
}, },
"languages": { "languages": {
"he": "עברית",
"ar": "العربية", "ar": "العربية",
"de": "Deutsch", "de": "Deutsch",
"en": "English", "en": "English",

View File

@ -77,6 +77,7 @@
"help": "Ajuda" "help": "Ajuda"
}, },
"languages": { "languages": {
"he": "עברית",
"ar": "العربية", "ar": "العربية",
"de": "Deutsch", "de": "Deutsch",
"en": "English", "en": "English",

View File

@ -77,6 +77,7 @@
"help": "Ajuda" "help": "Ajuda"
}, },
"languages": { "languages": {
"he": "עברית",
"ar": "Árabe", "ar": "Árabe",
"de": "Alemão", "de": "Alemão",
"en": "Inglês", "en": "Inglês",

View File

@ -77,6 +77,7 @@
"help": "Ajutor" "help": "Ajutor"
}, },
"languages": { "languages": {
"he": "עברית",
"ar": "العربية", "ar": "العربية",
"de": "Deutsch", "de": "Deutsch",
"en": "English", "en": "English",

View File

@ -83,6 +83,7 @@
"help": "Помощь" "help": "Помощь"
}, },
"languages": { "languages": {
"he": "עברית",
"ar": "العربية", "ar": "العربية",
"de": "Deutsch", "de": "Deutsch",
"en": "English", "en": "English",

View File

@ -83,6 +83,7 @@
"help": "Pomoc" "help": "Pomoc"
}, },
"languages": { "languages": {
"he": "עברית",
"ar": "العربية", "ar": "العربية",
"de": "Deutsch", "de": "Deutsch",
"en": "English", "en": "English",

View File

@ -77,6 +77,7 @@
"help": "Hjälp" "help": "Hjälp"
}, },
"languages": { "languages": {
"he": "עברית",
"ar": "العربية", "ar": "العربية",
"de": "Deutsch", "de": "Deutsch",
"en": "English", "en": "English",

View File

@ -81,6 +81,7 @@
"help": "Yardım" "help": "Yardım"
}, },
"languages": { "languages": {
"he": "עברית",
"ar": "العربية", "ar": "العربية",
"de": "Deutsch", "de": "Deutsch",
"en": "English", "en": "English",

View File

@ -83,6 +83,7 @@
"help": "Допомога" "help": "Допомога"
}, },
"languages": { "languages": {
"he": "עברית",
"ar": "العربية", "ar": "العربية",
"de": "Deutsch", "de": "Deutsch",
"en": "English", "en": "English",

View File

@ -83,6 +83,7 @@
"help": "帮助" "help": "帮助"
}, },
"languages": { "languages": {
"he": "עברית",
"ar": "العربية", "ar": "العربية",
"de": "Deutsch", "de": "Deutsch",
"en": "English", "en": "English",

View File

@ -77,6 +77,7 @@
"help": "幫助" "help": "幫助"
}, },
"languages": { "languages": {
"he": "עברית",
"ar": "العربية", "ar": "العربية",
"de": "Deutsch", "de": "Deutsch",
"en": "English", "en": "English",

View File

@ -13,7 +13,7 @@ import Shares from "@/views/settings/Shares";
import Errors from "@/views/Errors"; import Errors from "@/views/Errors";
import store from "@/store"; import store from "@/store";
import { baseURL, name } from "@/utils/constants"; import { baseURL, name } from "@/utils/constants";
import i18n from "@/i18n"; import i18n, { rtlLanguages } from "@/i18n";
Vue.use(Router); Vue.use(Router);
@ -158,6 +158,18 @@ router.beforeEach((to, from, next) => {
const title = i18n.t(titles[to.name]); const title = i18n.t(titles[to.name]);
document.title = title + " - " + 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 (to.matched.some((record) => record.meta.requiresAuth)) {
if (!store.getters.isLogged) { if (!store.getters.isLogged) {
next({ next({

View File

@ -75,6 +75,7 @@
import { mapState, mapMutations } from "vuex"; import { mapState, mapMutations } from "vuex";
import { users as api } from "@/api"; import { users as api } from "@/api";
import Languages from "@/components/settings/Languages"; import Languages from "@/components/settings/Languages";
import i18n, { rtlLanguages } from "@/i18n";
export default { export default {
name: "settings", name: "settings",
@ -143,6 +144,9 @@ export default {
singleClick: this.singleClick, singleClick: this.singleClick,
dateFormat: this.dateFormat, dateFormat: this.dateFormat,
}; };
const shouldReload =
rtlLanguages.includes(data.locale) !==
rtlLanguages.includes(i18n.locale);
await api.update(data, [ await api.update(data, [
"locale", "locale",
"hideDotfiles", "hideDotfiles",
@ -150,6 +154,9 @@ export default {
"dateFormat", "dateFormat",
]); ]);
this.updateUser(data); this.updateUser(data);
if (shouldReload) {
location.reload();
}
this.$showSuccess(this.$t("settings.settingsUpdated")); this.$showSuccess(this.$t("settings.settingsUpdated"));
} catch (e) { } catch (e) {
this.$showError(e); this.$showError(e);

4
go.mod
View File

@ -25,7 +25,7 @@ require (
go.etcd.io/bbolt v1.3.6 go.etcd.io/bbolt v1.3.6
golang.org/x/crypto v0.0.0-20220427172511-eb4f295cb31f golang.org/x/crypto v0.0.0-20220427172511-eb4f295cb31f
golang.org/x/image v0.0.0-20220413100746-70e8d0d3baa9 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/natefinch/lumberjack.v2 v2.0.0
gopkg.in/yaml.v2 v2.4.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/xi2/xz v0.0.0-20171230120015-48954b6210f8 // indirect
github.com/yusufpapurcu/wmi v1.2.2 // indirect github.com/yusufpapurcu/wmi v1.2.2 // indirect
golang.org/x/net v0.0.0-20220412020605-290c469a71a5 // 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/ini.v1 v1.66.4 // indirect
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect
) )

8
go.sum
View File

@ -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-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-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-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-20220722155257-8c9f86f7a55f h1:v4INt8xihDGvnrfjMDVXGxw9wrfxYyCjk0KbXjhR55s=
golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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/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.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.0/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.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.4/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.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= 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-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-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=