Compare commits
25 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
037e29a708 | ||
|
|
fda8a99292 | ||
|
|
208535a8cc | ||
|
|
464b581953 | ||
|
|
20312ff18e | ||
|
|
219582c0b0 | ||
|
|
4fd18a382c | ||
|
|
94ec786d34 | ||
|
|
25e9b85259 | ||
|
|
ffa893e9ac | ||
|
|
b8151a038a | ||
|
|
943e5340d0 | ||
|
|
88aa56f53b | ||
|
|
a12a612970 | ||
|
|
a2d80c62c1 | ||
|
|
1faa21844f | ||
|
|
7a93b2a062 | ||
|
|
032d6c7520 | ||
|
|
9595f3939c | ||
|
|
60b1ee8bb9 | ||
|
|
79d1aa9229 | ||
|
|
20bfd131c6 | ||
|
|
f89975603e | ||
|
|
2d3b64ecf6 | ||
|
|
579756dbb5 |
41
CHANGELOG.md
41
CHANGELOG.md
@ -2,6 +2,47 @@
|
|||||||
|
|
||||||
All notable changes to this project will be documented in this file. See [commit-and-tag-version](https://github.com/absolute-version/commit-and-tag-version) for commit guidelines.
|
All notable changes to this project will be documented in this file. See [commit-and-tag-version](https://github.com/absolute-version/commit-and-tag-version) for commit guidelines.
|
||||||
|
|
||||||
|
## [2.54.0](https://github.com/filebrowser/filebrowser/compare/v2.53.1...v2.54.0) (2026-01-10)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* add "redirect after copy/move" user setting ([#5662](https://github.com/filebrowser/filebrowser/issues/5662)) ([fda8a99](https://github.com/filebrowser/filebrowser/commit/fda8a992929b1466e75fb2813f2c4e293c12d244))
|
||||||
|
* force file sync while uploading file ([#5668](https://github.com/filebrowser/filebrowser/issues/5668)) ([4fd18a3](https://github.com/filebrowser/filebrowser/commit/4fd18a382c31bbe7059d6733ffa371e70051865b))
|
||||||
|
* update translations ([#5659](https://github.com/filebrowser/filebrowser/issues/5659)) ([464b581](https://github.com/filebrowser/filebrowser/commit/464b581953139c17e3276b774e381e4052827125))
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* clear selection by clicking on empty area ([#5663](https://github.com/filebrowser/filebrowser/issues/5663)) ([208535a](https://github.com/filebrowser/filebrowser/commit/208535a8cc23254de0013dfab9008486707ee6c2))
|
||||||
|
* hide "change password form" in noauth setting ([#5652](https://github.com/filebrowser/filebrowser/issues/5652)) ([219582c](https://github.com/filebrowser/filebrowser/commit/219582c0b03fd90979b1d1398dba7919d086a23f))
|
||||||
|
|
||||||
|
## [2.53.1](https://github.com/filebrowser/filebrowser/compare/v2.53.0...v2.53.1) (2026-01-03)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* download path encoding file paths ([#5655](https://github.com/filebrowser/filebrowser/issues/5655)) ([ffa893e](https://github.com/filebrowser/filebrowser/commit/ffa893e9ac387a49dba5917a41df7c3b7ce120fc))
|
||||||
|
* request a password to change sensitive user data ([#5629](https://github.com/filebrowser/filebrowser/issues/5629)) ([b8151a0](https://github.com/filebrowser/filebrowser/commit/b8151a038a1ea55afae8073b439b74e364cac12f))
|
||||||
|
|
||||||
|
## [2.53.0](https://github.com/filebrowser/filebrowser/compare/v2.52.0...v2.53.0) (2025-12-29)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* add "disable image resolution calculation" flag ([#5638](https://github.com/filebrowser/filebrowser/issues/5638)) ([a2d80c6](https://github.com/filebrowser/filebrowser/commit/a2d80c62c1c17962e566f68fb7cac6960ed3e4cb))
|
||||||
|
* support streaming response for search results ([#5630](https://github.com/filebrowser/filebrowser/issues/5630)) ([20bfd13](https://github.com/filebrowser/filebrowser/commit/20bfd131c6a4fca48a645b52171c2d1cc3ce92b7))
|
||||||
|
* update translations ([a12a612](https://github.com/filebrowser/filebrowser/commit/a12a612970d6cc3dfbca1b35ef3a60a887a4effb))
|
||||||
|
* update translations ([#5626](https://github.com/filebrowser/filebrowser/issues/5626)) ([f899756](https://github.com/filebrowser/filebrowser/commit/f89975603e29b9f1fc05aec58afb42bbd56ed696))
|
||||||
|
* update translations ([#5631](https://github.com/filebrowser/filebrowser/issues/5631)) ([032d6c7](https://github.com/filebrowser/filebrowser/commit/032d6c7520a64686c9d9b1218562256f629b4703))
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* conversion of backslashes in file paths for archive creation ([#5637](https://github.com/filebrowser/filebrowser/issues/5637)) ([9595f39](https://github.com/filebrowser/filebrowser/commit/9595f3939c1c129ed875a47adcc4fbcfad9a0e65))
|
||||||
|
* Don't crash on invalid config import ([#5640](https://github.com/filebrowser/filebrowser/issues/5640)) ([79d1aa9](https://github.com/filebrowser/filebrowser/commit/79d1aa9229b076ee8e3b71d6cf061fc90738f4da))
|
||||||
|
* fix nil deref in config set command ([#5641](https://github.com/filebrowser/filebrowser/issues/5641)) ([60b1ee8](https://github.com/filebrowser/filebrowser/commit/60b1ee8bb9e18b21d7f2c04cb1cc90046cecd3e1))
|
||||||
|
|
||||||
## [2.52.0](https://github.com/filebrowser/filebrowser/compare/v2.51.2...v2.52.0) (2025-12-13)
|
## [2.52.0](https://github.com/filebrowser/filebrowser/compare/v2.51.2...v2.52.0) (2025-12-13)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -164,6 +164,7 @@ func (a *HookAuth) SaveUser() (*users.User, error) {
|
|||||||
Locale: a.Settings.Defaults.Locale,
|
Locale: a.Settings.Defaults.Locale,
|
||||||
ViewMode: a.Settings.Defaults.ViewMode,
|
ViewMode: a.Settings.Defaults.ViewMode,
|
||||||
SingleClick: a.Settings.Defaults.SingleClick,
|
SingleClick: a.Settings.Defaults.SingleClick,
|
||||||
|
RedirectAfterCopyMove: a.Settings.Defaults.RedirectAfterCopyMove,
|
||||||
Sorting: a.Settings.Defaults.Sorting,
|
Sorting: a.Settings.Defaults.Sorting,
|
||||||
Perm: a.Settings.Defaults.Perm,
|
Perm: a.Settings.Defaults.Perm,
|
||||||
Commands: a.Settings.Defaults.Commands,
|
Commands: a.Settings.Defaults.Commands,
|
||||||
@ -226,6 +227,7 @@ func (a *HookAuth) GetUser(d *users.User) *users.User {
|
|||||||
Locale: a.Fields.GetString("user.locale", d.Locale),
|
Locale: a.Fields.GetString("user.locale", d.Locale),
|
||||||
ViewMode: users.ViewMode(a.Fields.GetString("user.viewMode", string(d.ViewMode))),
|
ViewMode: users.ViewMode(a.Fields.GetString("user.viewMode", string(d.ViewMode))),
|
||||||
SingleClick: a.Fields.GetBoolean("user.singleClick", d.SingleClick),
|
SingleClick: a.Fields.GetBoolean("user.singleClick", d.SingleClick),
|
||||||
|
RedirectAfterCopyMove: a.Fields.GetBoolean("user.redirectAfterCopyMove", d.RedirectAfterCopyMove),
|
||||||
Sorting: files.Sorting{
|
Sorting: files.Sorting{
|
||||||
Asc: a.Fields.GetBoolean("user.sorting.asc", d.Sorting.Asc),
|
Asc: a.Fields.GetBoolean("user.sorting.asc", d.Sorting.Asc),
|
||||||
By: a.Fields.GetString("user.sorting.by", d.Sorting.By),
|
By: a.Fields.GetString("user.sorting.by", d.Sorting.By),
|
||||||
@ -251,6 +253,7 @@ var validHookFields = []string{
|
|||||||
"user.locale",
|
"user.locale",
|
||||||
"user.viewMode",
|
"user.viewMode",
|
||||||
"user.singleClick",
|
"user.singleClick",
|
||||||
|
"user.redirectAfterCopyMove",
|
||||||
"user.sorting.by",
|
"user.sorting.by",
|
||||||
"user.sorting.asc",
|
"user.sorting.asc",
|
||||||
"user.commands",
|
"user.commands",
|
||||||
|
|||||||
@ -99,7 +99,7 @@ func getProxyAuth(flags *pflag.FlagSet, defaultAuther map[string]interface{}) (a
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if header == "" {
|
if header == "" && defaultAuther != nil {
|
||||||
header = defaultAuther["header"].(string)
|
header = defaultAuther["header"].(string)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -240,6 +240,7 @@ func printSettings(ser *settings.Server, set *settings.Settings, auther auth.Aut
|
|||||||
fmt.Fprintf(w, "\tLocale:\t%s\n", set.Defaults.Locale)
|
fmt.Fprintf(w, "\tLocale:\t%s\n", set.Defaults.Locale)
|
||||||
fmt.Fprintf(w, "\tView mode:\t%s\n", set.Defaults.ViewMode)
|
fmt.Fprintf(w, "\tView mode:\t%s\n", set.Defaults.ViewMode)
|
||||||
fmt.Fprintf(w, "\tSingle Click:\t%t\n", set.Defaults.SingleClick)
|
fmt.Fprintf(w, "\tSingle Click:\t%t\n", set.Defaults.SingleClick)
|
||||||
|
fmt.Fprintf(w, "\tRedirect after Copy/Move:\t%t\n", set.Defaults.RedirectAfterCopyMove)
|
||||||
fmt.Fprintf(w, "\tFile Creation Mode:\t%O\n", set.FileMode)
|
fmt.Fprintf(w, "\tFile Creation Mode:\t%O\n", set.FileMode)
|
||||||
fmt.Fprintf(w, "\tDirectory Creation Mode:\t%O\n", set.DirMode)
|
fmt.Fprintf(w, "\tDirectory Creation Mode:\t%O\n", set.DirMode)
|
||||||
fmt.Fprintf(w, "\tCommands:\t%s\n", strings.Join(set.Defaults.Commands, " "))
|
fmt.Fprintf(w, "\tCommands:\t%s\n", strings.Join(set.Defaults.Commands, " "))
|
||||||
@ -308,6 +309,9 @@ func getSettings(flags *pflag.FlagSet, set *settings.Settings, ser *settings.Ser
|
|||||||
case "disableTypeDetectionByHeader":
|
case "disableTypeDetectionByHeader":
|
||||||
ser.TypeDetectionByHeader, err = flags.GetBool(flag.Name)
|
ser.TypeDetectionByHeader, err = flags.GetBool(flag.Name)
|
||||||
ser.TypeDetectionByHeader = !ser.TypeDetectionByHeader
|
ser.TypeDetectionByHeader = !ser.TypeDetectionByHeader
|
||||||
|
case "disableImageResolutionCalc":
|
||||||
|
ser.ImageResolutionCal, err = flags.GetBool(flag.Name)
|
||||||
|
ser.ImageResolutionCal = !ser.ImageResolutionCal
|
||||||
|
|
||||||
// Settings flags from [addConfigFlags]
|
// Settings flags from [addConfigFlags]
|
||||||
case "signup":
|
case "signup":
|
||||||
|
|||||||
@ -53,6 +53,10 @@ The path must be for a json or yaml file.`,
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if file.Settings == nil || file.Server == nil {
|
||||||
|
return errors.New("invalid configuration file: 'settings' or 'server' fields are missing. Please ensure you are importing a file generated by the 'config export' command")
|
||||||
|
}
|
||||||
|
|
||||||
file.Settings.Key = key
|
file.Settings.Key = key
|
||||||
err = st.Settings.Save(file.Settings)
|
err = st.Settings.Save(file.Settings)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
12
cmd/root.go
12
cmd/root.go
@ -108,6 +108,7 @@ func addServerFlags(flags *pflag.FlagSet) {
|
|||||||
flags.Bool("disablePreviewResize", false, "disable resize of image previews")
|
flags.Bool("disablePreviewResize", false, "disable resize of image previews")
|
||||||
flags.Bool("disableExec", true, "disables Command Runner feature")
|
flags.Bool("disableExec", true, "disables Command Runner feature")
|
||||||
flags.Bool("disableTypeDetectionByHeader", false, "disables type detection by reading file headers")
|
flags.Bool("disableTypeDetectionByHeader", false, "disables type detection by reading file headers")
|
||||||
|
flags.Bool("disableImageResolutionCalc", false, "disables image resolution calculation by reading image files")
|
||||||
}
|
}
|
||||||
|
|
||||||
var rootCmd = &cobra.Command{
|
var rootCmd = &cobra.Command{
|
||||||
@ -135,6 +136,11 @@ file named .filebrowser.{json, toml, yaml, yml} in the following directories:
|
|||||||
- $HOME/
|
- $HOME/
|
||||||
- /etc/filebrowser/
|
- /etc/filebrowser/
|
||||||
|
|
||||||
|
**Note:** Only the options listed below can be set via the config file or
|
||||||
|
environment variables. Other configuration options live exclusively in the
|
||||||
|
database and so they must be set by the "config set" or "config
|
||||||
|
import" commands.
|
||||||
|
|
||||||
The precedence of the configuration values are as follows:
|
The precedence of the configuration values are as follows:
|
||||||
|
|
||||||
- Flags
|
- Flags
|
||||||
@ -331,6 +337,10 @@ func getServerSettings(v *viper.Viper, st *storage.Storage) (*settings.Server, e
|
|||||||
server.TypeDetectionByHeader = !v.GetBool("disableTypeDetectionByHeader")
|
server.TypeDetectionByHeader = !v.GetBool("disableTypeDetectionByHeader")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if v.IsSet("disableImageResolutionCalc") {
|
||||||
|
server.ImageResolutionCal = !v.GetBool("disableImageResolutionCalc")
|
||||||
|
}
|
||||||
|
|
||||||
if v.IsSet("disableExec") {
|
if v.IsSet("disableExec") {
|
||||||
server.EnableExec = !v.GetBool("disableExec")
|
server.EnableExec = !v.GetBool("disableExec")
|
||||||
}
|
}
|
||||||
@ -386,6 +396,7 @@ func quickSetup(v *viper.Viper, s *storage.Storage) error {
|
|||||||
Scope: ".",
|
Scope: ".",
|
||||||
Locale: "en",
|
Locale: "en",
|
||||||
SingleClick: false,
|
SingleClick: false,
|
||||||
|
RedirectAfterCopyMove: true,
|
||||||
AceEditorTheme: v.GetString("defaults.aceEditorTheme"),
|
AceEditorTheme: v.GetString("defaults.aceEditorTheme"),
|
||||||
Perm: users.Permissions{
|
Perm: users.Permissions{
|
||||||
Admin: false,
|
Admin: false,
|
||||||
@ -439,6 +450,7 @@ func quickSetup(v *viper.Viper, s *storage.Storage) error {
|
|||||||
ResizePreview: !v.GetBool("disablePreviewResize"),
|
ResizePreview: !v.GetBool("disablePreviewResize"),
|
||||||
EnableExec: !v.GetBool("disableExec"),
|
EnableExec: !v.GetBool("disableExec"),
|
||||||
TypeDetectionByHeader: !v.GetBool("disableTypeDetectionByHeader"),
|
TypeDetectionByHeader: !v.GetBool("disableTypeDetectionByHeader"),
|
||||||
|
ImageResolutionCal: !v.GetBool("disableImageResolutionCalc"),
|
||||||
}
|
}
|
||||||
|
|
||||||
err = s.Settings.SaveServer(ser)
|
err = s.Settings.SaveServer(ser)
|
||||||
|
|||||||
@ -30,13 +30,14 @@ func printUsers(usrs []*users.User) {
|
|||||||
fmt.Fprintln(w, "ID\tUsername\tScope\tLocale\tV. Mode\tS.Click\tAdmin\tExecute\tCreate\tRename\tModify\tDelete\tShare\tDownload\tPwd Lock")
|
fmt.Fprintln(w, "ID\tUsername\tScope\tLocale\tV. Mode\tS.Click\tAdmin\tExecute\tCreate\tRename\tModify\tDelete\tShare\tDownload\tPwd Lock")
|
||||||
|
|
||||||
for _, u := range usrs {
|
for _, u := range usrs {
|
||||||
fmt.Fprintf(w, "%d\t%s\t%s\t%s\t%s\t%t\t%t\t%t\t%t\t%t\t%t\t%t\t%t\t%t\t%t\t\n",
|
fmt.Fprintf(w, "%d\t%s\t%s\t%s\t%s\t%t\t%t\t%t\t%t\t%t\t%t\t%t\t%t\t%t\t%t\t%t\t\n",
|
||||||
u.ID,
|
u.ID,
|
||||||
u.Username,
|
u.Username,
|
||||||
u.Scope,
|
u.Scope,
|
||||||
u.Locale,
|
u.Locale,
|
||||||
u.ViewMode,
|
u.ViewMode,
|
||||||
u.SingleClick,
|
u.SingleClick,
|
||||||
|
u.RedirectAfterCopyMove,
|
||||||
u.Perm.Admin,
|
u.Perm.Admin,
|
||||||
u.Perm.Execute,
|
u.Perm.Execute,
|
||||||
u.Perm.Create,
|
u.Perm.Create,
|
||||||
@ -77,6 +78,7 @@ func addUserFlags(flags *pflag.FlagSet) {
|
|||||||
flags.String("locale", "en", "locale for users")
|
flags.String("locale", "en", "locale for users")
|
||||||
flags.String("viewMode", string(users.ListViewMode), "view mode for users")
|
flags.String("viewMode", string(users.ListViewMode), "view mode for users")
|
||||||
flags.Bool("singleClick", false, "use single clicks only")
|
flags.Bool("singleClick", false, "use single clicks only")
|
||||||
|
flags.Bool("redirectAfterCopyMove", false, "redirect to destination after copy/move")
|
||||||
flags.Bool("dateFormat", false, "use date format (true for absolute time, false for relative)")
|
flags.Bool("dateFormat", false, "use date format (true for absolute time, false for relative)")
|
||||||
flags.Bool("hideDotfiles", false, "hide dotfiles")
|
flags.Bool("hideDotfiles", false, "hide dotfiles")
|
||||||
flags.String("aceEditorTheme", "", "ace editor's syntax highlighting theme for users")
|
flags.String("aceEditorTheme", "", "ace editor's syntax highlighting theme for users")
|
||||||
@ -110,6 +112,8 @@ func getUserDefaults(flags *pflag.FlagSet, defaults *settings.UserDefaults, all
|
|||||||
defaults.ViewMode, err = getAndParseViewMode(flags)
|
defaults.ViewMode, err = getAndParseViewMode(flags)
|
||||||
case "singleClick":
|
case "singleClick":
|
||||||
defaults.SingleClick, err = flags.GetBool(flag.Name)
|
defaults.SingleClick, err = flags.GetBool(flag.Name)
|
||||||
|
case "redirectAfterCopyMove":
|
||||||
|
defaults.RedirectAfterCopyMove, err = flags.GetBool(flag.Name)
|
||||||
case "aceEditorTheme":
|
case "aceEditorTheme":
|
||||||
defaults.AceEditorTheme, err = flags.GetString(flag.Name)
|
defaults.AceEditorTheme, err = flags.GetString(flag.Name)
|
||||||
case "perm.admin":
|
case "perm.admin":
|
||||||
|
|||||||
@ -56,6 +56,7 @@ options you want to change.`,
|
|||||||
Locale: user.Locale,
|
Locale: user.Locale,
|
||||||
ViewMode: user.ViewMode,
|
ViewMode: user.ViewMode,
|
||||||
SingleClick: user.SingleClick,
|
SingleClick: user.SingleClick,
|
||||||
|
RedirectAfterCopyMove: user.RedirectAfterCopyMove,
|
||||||
Perm: user.Perm,
|
Perm: user.Perm,
|
||||||
Sorting: user.Sorting,
|
Sorting: user.Sorting,
|
||||||
Commands: user.Commands,
|
Commands: user.Commands,
|
||||||
@ -70,6 +71,7 @@ options you want to change.`,
|
|||||||
user.Locale = defaults.Locale
|
user.Locale = defaults.Locale
|
||||||
user.ViewMode = defaults.ViewMode
|
user.ViewMode = defaults.ViewMode
|
||||||
user.SingleClick = defaults.SingleClick
|
user.SingleClick = defaults.SingleClick
|
||||||
|
user.RedirectAfterCopyMove = defaults.RedirectAfterCopyMove
|
||||||
user.Perm = defaults.Perm
|
user.Perm = defaults.Perm
|
||||||
user.Commands = defaults.Commands
|
user.Commands = defaults.Commands
|
||||||
user.Sorting = defaults.Sorting
|
user.Sorting = defaults.Sorting
|
||||||
|
|||||||
@ -22,6 +22,7 @@ var (
|
|||||||
ErrInvalidRequestParams = errors.New("invalid request params")
|
ErrInvalidRequestParams = errors.New("invalid request params")
|
||||||
ErrSourceIsParent = errors.New("source is parent")
|
ErrSourceIsParent = errors.New("source is parent")
|
||||||
ErrRootUserDeletion = errors.New("user with id 1 can't be deleted")
|
ErrRootUserDeletion = errors.New("user with id 1 can't be deleted")
|
||||||
|
ErrCurrentPasswordIncorrect = errors.New("the current password is incorrect")
|
||||||
)
|
)
|
||||||
|
|
||||||
type ErrShortPassword struct {
|
type ErrShortPassword struct {
|
||||||
|
|||||||
@ -60,6 +60,7 @@ type FileOptions struct {
|
|||||||
Modify bool
|
Modify bool
|
||||||
Expand bool
|
Expand bool
|
||||||
ReadHeader bool
|
ReadHeader bool
|
||||||
|
CalcImgRes bool
|
||||||
Token string
|
Token string
|
||||||
Checker rules.Checker
|
Checker rules.Checker
|
||||||
Content bool
|
Content bool
|
||||||
@ -90,13 +91,13 @@ func NewFileInfo(opts *FileOptions) (*FileInfo, error) {
|
|||||||
|
|
||||||
if opts.Expand {
|
if opts.Expand {
|
||||||
if file.IsDir {
|
if file.IsDir {
|
||||||
if err := file.readListing(opts.Checker, opts.ReadHeader); err != nil {
|
if err := file.readListing(opts.Checker, opts.ReadHeader, opts.CalcImgRes); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return file, nil
|
return file, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
err = file.detectType(opts.Modify, opts.Content, true)
|
err = file.detectType(opts.Modify, opts.Content, true, opts.CalcImgRes)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -218,7 +219,7 @@ func (i *FileInfo) RealPath() string {
|
|||||||
return i.Path
|
return i.Path
|
||||||
}
|
}
|
||||||
|
|
||||||
func (i *FileInfo) detectType(modify, saveContent, readHeader bool) error {
|
func (i *FileInfo) detectType(modify, saveContent, readHeader bool, calcImgRes bool) error {
|
||||||
if IsNamedPipe(i.Mode) {
|
if IsNamedPipe(i.Mode) {
|
||||||
i.Type = "blob"
|
i.Type = "blob"
|
||||||
return nil
|
return nil
|
||||||
@ -249,12 +250,14 @@ func (i *FileInfo) detectType(modify, saveContent, readHeader bool) error {
|
|||||||
return nil
|
return nil
|
||||||
case strings.HasPrefix(mimetype, "image"):
|
case strings.HasPrefix(mimetype, "image"):
|
||||||
i.Type = "image"
|
i.Type = "image"
|
||||||
|
if calcImgRes {
|
||||||
resolution, err := calculateImageResolution(i.Fs, i.Path)
|
resolution, err := calculateImageResolution(i.Fs, i.Path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("Error calculating image resolution: %v", err)
|
log.Printf("Error calculating image resolution: %v", err)
|
||||||
} else {
|
} else {
|
||||||
i.Resolution = resolution
|
i.Resolution = resolution
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
case strings.HasSuffix(mimetype, "pdf"):
|
case strings.HasSuffix(mimetype, "pdf"):
|
||||||
i.Type = "pdf"
|
i.Type = "pdf"
|
||||||
@ -387,7 +390,7 @@ func (i *FileInfo) addSubtitle(fPath string) {
|
|||||||
i.Subtitles = append(i.Subtitles, fPath)
|
i.Subtitles = append(i.Subtitles, fPath)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (i *FileInfo) readListing(checker rules.Checker, readHeader bool) error {
|
func (i *FileInfo) readListing(checker rules.Checker, readHeader bool, calcImgRes bool) error {
|
||||||
afs := &afero.Afero{Fs: i.Fs}
|
afs := &afero.Afero{Fs: i.Fs}
|
||||||
dir, err := afs.ReadDir(i.Path)
|
dir, err := afs.ReadDir(i.Path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -434,7 +437,7 @@ func (i *FileInfo) readListing(checker rules.Checker, readHeader bool) error {
|
|||||||
currentDir: dir,
|
currentDir: dir,
|
||||||
}
|
}
|
||||||
|
|
||||||
if !file.IsDir && strings.HasPrefix(mime.TypeByExtension(file.Extension), "image/") {
|
if !file.IsDir && strings.HasPrefix(mime.TypeByExtension(file.Extension), "image/") && calcImgRes {
|
||||||
resolution, err := calculateImageResolution(file.Fs, file.Path)
|
resolution, err := calculateImageResolution(file.Fs, file.Path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("Error calculating resolution for image %s: %v", file.Path, err)
|
log.Printf("Error calculating resolution for image %s: %v", file.Path, err)
|
||||||
@ -451,7 +454,7 @@ func (i *FileInfo) readListing(checker rules.Checker, readHeader bool) error {
|
|||||||
if isInvalidLink {
|
if isInvalidLink {
|
||||||
file.Type = "invalid_link"
|
file.Type = "invalid_link"
|
||||||
} else {
|
} else {
|
||||||
err := file.detectType(true, false, readHeader)
|
err := file.detectType(true, false, readHeader, calcImgRes)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@ -71,5 +71,5 @@
|
|||||||
"vite-plugin-compression2": "^2.3.1",
|
"vite-plugin-compression2": "^2.3.1",
|
||||||
"vue-tsc": "^3.1.3"
|
"vue-tsc": "^3.1.3"
|
||||||
},
|
},
|
||||||
"packageManager": "pnpm@10.25.0+sha512.5e82639027af37cf832061bcc6d639c219634488e0f2baebe785028a793de7b525ffcd3f7ff574f5e9860654e098fe852ba8ac5dd5cefe1767d23a020a92f501"
|
"packageManager": "pnpm@10.28.0+sha512.05df71d1421f21399e053fde567cea34d446fa02c76571441bfc1c7956e98e363088982d940465fd34480d4d90a0668bc12362f8aa88000a64e83d0b0e47be48"
|
||||||
}
|
}
|
||||||
|
|||||||
1205
frontend/pnpm-lock.yaml
generated
1205
frontend/pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
@ -41,12 +41,12 @@ export function download(
|
|||||||
let url = `${baseURL}/api/public/dl/${hash}`;
|
let url = `${baseURL}/api/public/dl/${hash}`;
|
||||||
|
|
||||||
if (files.length === 1) {
|
if (files.length === 1) {
|
||||||
url += encodeURIComponent(files[0]) + "?";
|
url += files[0] + "?";
|
||||||
} else {
|
} else {
|
||||||
let arg = "";
|
let arg = "";
|
||||||
|
|
||||||
for (const file of files) {
|
for (const file of files) {
|
||||||
arg += encodeURIComponent(file) + ",";
|
arg += file + ",";
|
||||||
}
|
}
|
||||||
|
|
||||||
arg = arg.substring(0, arg.length - 1);
|
arg = arg.substring(0, arg.length - 1);
|
||||||
|
|||||||
@ -1,7 +1,12 @@
|
|||||||
import { fetchURL, removePrefix } from "./utils";
|
import { fetchURL, removePrefix, StatusError } from "./utils";
|
||||||
import url from "../utils/url";
|
import url from "../utils/url";
|
||||||
|
|
||||||
export default async function search(base: string, query: string) {
|
export default async function search(
|
||||||
|
base: string,
|
||||||
|
query: string,
|
||||||
|
signal: AbortSignal,
|
||||||
|
callback: (item: ResourceItem) => void
|
||||||
|
) {
|
||||||
base = removePrefix(base);
|
base = removePrefix(base);
|
||||||
query = encodeURIComponent(query);
|
query = encodeURIComponent(query);
|
||||||
|
|
||||||
@ -9,19 +14,60 @@ export default async function search(base: string, query: string) {
|
|||||||
base += "/";
|
base += "/";
|
||||||
}
|
}
|
||||||
|
|
||||||
const res = await fetchURL(`/api/search${base}?query=${query}`, {});
|
const res = await fetchURL(`/api/search${base}?query=${query}`, { signal });
|
||||||
|
if (!res.body) {
|
||||||
|
throw new StatusError("000 No connection", 0);
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
// Try streaming approach first (modern browsers)
|
||||||
|
if (res.body && typeof res.body.pipeThrough === "function") {
|
||||||
|
const reader = res.body.pipeThrough(new TextDecoderStream()).getReader();
|
||||||
|
let buffer = "";
|
||||||
|
while (true) {
|
||||||
|
const { done, value } = await reader.read();
|
||||||
|
if (value) {
|
||||||
|
buffer += value;
|
||||||
|
}
|
||||||
|
const lines = buffer.split(/\n/);
|
||||||
|
let lastLine = lines.pop();
|
||||||
|
// Save incomplete last line
|
||||||
|
if (!lastLine) {
|
||||||
|
lastLine = "";
|
||||||
|
}
|
||||||
|
buffer = lastLine;
|
||||||
|
|
||||||
let data = await res.json();
|
for (const line of lines) {
|
||||||
|
if (line) {
|
||||||
data = data.map((item: ResourceItem & { dir: boolean }) => {
|
const item = JSON.parse(line) as ResourceItem;
|
||||||
item.url = `/files${base}` + url.encodePath(item.path);
|
item.url = `/files${base}` + url.encodePath(item.path);
|
||||||
|
if (item.isDir) {
|
||||||
if (item.dir) {
|
|
||||||
item.url += "/";
|
item.url += "/";
|
||||||
}
|
}
|
||||||
|
callback(item);
|
||||||
return item;
|
}
|
||||||
});
|
}
|
||||||
|
if (done) break;
|
||||||
return data;
|
}
|
||||||
|
} else {
|
||||||
|
// Fallback for browsers without streaming support (e.g., Safari)
|
||||||
|
const text = await res.text();
|
||||||
|
const lines = text.split(/\n/);
|
||||||
|
for (const line of lines) {
|
||||||
|
if (line) {
|
||||||
|
const item = JSON.parse(line) as ResourceItem;
|
||||||
|
item.url = `/files${base}` + url.encodePath(item.path);
|
||||||
|
if (item.isDir) {
|
||||||
|
item.url += "/";
|
||||||
|
}
|
||||||
|
callback(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
// Check if the error is an intentional cancellation
|
||||||
|
if (e instanceof Error && e.name === "AbortError") {
|
||||||
|
throw new StatusError("000 No connection", 0, true);
|
||||||
|
}
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -8,12 +8,13 @@ export async function get(id: number) {
|
|||||||
return fetchJSON<IUser>(`/api/users/${id}`, {});
|
return fetchJSON<IUser>(`/api/users/${id}`, {});
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function create(user: IUser) {
|
export async function create(user: IUser, currentPassword: string) {
|
||||||
const res = await fetchURL(`/api/users`, {
|
const res = await fetchURL(`/api/users`, {
|
||||||
method: "POST",
|
method: "POST",
|
||||||
body: JSON.stringify({
|
body: JSON.stringify({
|
||||||
what: "user",
|
what: "user",
|
||||||
which: [],
|
which: [],
|
||||||
|
current_password: currentPassword,
|
||||||
data: user,
|
data: user,
|
||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
@ -25,12 +26,17 @@ export async function create(user: IUser) {
|
|||||||
throw new StatusError(await res.text(), res.status);
|
throw new StatusError(await res.text(), res.status);
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function update(user: Partial<IUser>, which = ["all"]) {
|
export async function update(
|
||||||
|
user: Partial<IUser>,
|
||||||
|
which = ["all"],
|
||||||
|
currentPassword: string | null = null
|
||||||
|
) {
|
||||||
await fetchURL(`/api/users/${user.id}`, {
|
await fetchURL(`/api/users/${user.id}`, {
|
||||||
method: "PUT",
|
method: "PUT",
|
||||||
body: JSON.stringify({
|
body: JSON.stringify({
|
||||||
what: "user",
|
what: "user",
|
||||||
which: which,
|
which: which,
|
||||||
|
...(currentPassword != null ? { current_password: currentPassword } : {}),
|
||||||
data: user,
|
data: user,
|
||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
|
|||||||
@ -5,10 +5,11 @@
|
|||||||
v-if="active"
|
v-if="active"
|
||||||
class="action"
|
class="action"
|
||||||
@click="close"
|
@click="close"
|
||||||
:aria-label="$t('buttons.close')"
|
:aria-label="closeButtonTitle"
|
||||||
:title="$t('buttons.close')"
|
:title="closeButtonTitle"
|
||||||
>
|
>
|
||||||
<i class="material-icons">arrow_back</i>
|
<i v-if="ongoing" class="material-icons">stop_circle</i>
|
||||||
|
<i v-else class="material-icons">arrow_back</i>
|
||||||
</button>
|
</button>
|
||||||
<i v-else class="material-icons">search</i>
|
<i v-else class="material-icons">search</i>
|
||||||
<input
|
<input
|
||||||
@ -21,6 +22,15 @@
|
|||||||
:aria-label="$t('search.search')"
|
:aria-label="$t('search.search')"
|
||||||
:placeholder="$t('search.search')"
|
:placeholder="$t('search.search')"
|
||||||
/>
|
/>
|
||||||
|
<i
|
||||||
|
v-show="ongoing"
|
||||||
|
class="material-icons spin"
|
||||||
|
style="display: inline-block"
|
||||||
|
>autorenew
|
||||||
|
</i>
|
||||||
|
<span style="margin-top: 5px" v-show="results.length > 0">
|
||||||
|
{{ results.length }}
|
||||||
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="result" ref="result">
|
<div id="result" ref="result">
|
||||||
@ -57,9 +67,6 @@
|
|||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<p id="renew">
|
|
||||||
<i class="material-icons spin">autorenew</i>
|
|
||||||
</p>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@ -70,10 +77,11 @@ import { useLayoutStore } from "@/stores/layout";
|
|||||||
|
|
||||||
import url from "@/utils/url";
|
import url from "@/utils/url";
|
||||||
import { search } from "@/api";
|
import { search } from "@/api";
|
||||||
import { computed, inject, onMounted, ref, watch } from "vue";
|
import { computed, inject, onMounted, ref, watch, onUnmounted } from "vue";
|
||||||
import { useI18n } from "vue-i18n";
|
import { useI18n } from "vue-i18n";
|
||||||
import { useRoute } from "vue-router";
|
import { useRoute } from "vue-router";
|
||||||
import { storeToRefs } from "pinia";
|
import { storeToRefs } from "pinia";
|
||||||
|
import { StatusError } from "@/api/utils";
|
||||||
|
|
||||||
const boxes = {
|
const boxes = {
|
||||||
image: { label: "images", icon: "insert_photo" },
|
image: { label: "images", icon: "insert_photo" },
|
||||||
@ -84,6 +92,7 @@ const boxes = {
|
|||||||
|
|
||||||
const layoutStore = useLayoutStore();
|
const layoutStore = useLayoutStore();
|
||||||
const fileStore = useFileStore();
|
const fileStore = useFileStore();
|
||||||
|
let searchAbortController = new AbortController();
|
||||||
|
|
||||||
const { currentPromptName } = storeToRefs(layoutStore);
|
const { currentPromptName } = storeToRefs(layoutStore);
|
||||||
|
|
||||||
@ -124,9 +133,7 @@ watch(currentPromptName, (newVal, oldVal) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
watch(prompt, () => {
|
watch(prompt, () => {
|
||||||
if (results.value.length) {
|
|
||||||
reset();
|
reset();
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// ...mapState(useFileStore, ["isListing"]),
|
// ...mapState(useFileStore, ["isListing"]),
|
||||||
@ -149,6 +156,10 @@ const filteredResults = computed(() => {
|
|||||||
return results.value.slice(0, resultsCount.value);
|
return results.value.slice(0, resultsCount.value);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const closeButtonTitle = computed(() => {
|
||||||
|
return ongoing.value ? t("buttons.stopSearch") : t("buttons.close");
|
||||||
|
});
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
if (result.value === null) {
|
if (result.value === null) {
|
||||||
return;
|
return;
|
||||||
@ -164,14 +175,23 @@ onMounted(() => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
onUnmounted(() => {
|
||||||
|
abortLastSearch();
|
||||||
|
});
|
||||||
|
|
||||||
const open = () => {
|
const open = () => {
|
||||||
!active.value && layoutStore.showHover("search");
|
!active.value && layoutStore.showHover("search");
|
||||||
};
|
};
|
||||||
|
|
||||||
const close = (event: Event) => {
|
const close = (event: Event) => {
|
||||||
|
if (ongoing.value) {
|
||||||
|
abortLastSearch();
|
||||||
|
ongoing.value = false;
|
||||||
|
} else {
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
layoutStore.closeHovers();
|
layoutStore.closeHovers();
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const keyup = (event: KeyboardEvent) => {
|
const keyup = (event: KeyboardEvent) => {
|
||||||
@ -188,11 +208,16 @@ const init = (string: string) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const reset = () => {
|
const reset = () => {
|
||||||
|
abortLastSearch();
|
||||||
ongoing.value = false;
|
ongoing.value = false;
|
||||||
resultsCount.value = 50;
|
resultsCount.value = 50;
|
||||||
results.value = [];
|
results.value = [];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const abortLastSearch = () => {
|
||||||
|
searchAbortController.abort();
|
||||||
|
};
|
||||||
|
|
||||||
const submit = async (event: Event) => {
|
const submit = async (event: Event) => {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
|
|
||||||
@ -208,8 +233,16 @@ const submit = async (event: Event) => {
|
|||||||
ongoing.value = true;
|
ongoing.value = true;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
results.value = await search(path, prompt.value);
|
abortLastSearch();
|
||||||
|
searchAbortController = new AbortController();
|
||||||
|
results.value = [];
|
||||||
|
await search(path, prompt.value, searchAbortController.signal, (item) =>
|
||||||
|
results.value.push(item)
|
||||||
|
);
|
||||||
} catch (error: any) {
|
} catch (error: any) {
|
||||||
|
if (error instanceof StatusError && error.is_canceled) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
$showError(error);
|
$showError(error);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -109,6 +109,7 @@ export default {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this.user.redirectAfterCopyMove)
|
||||||
this.$router.push({ path: this.dest });
|
this.$router.push({ path: this.dest });
|
||||||
})
|
})
|
||||||
.catch((e) => {
|
.catch((e) => {
|
||||||
|
|||||||
@ -79,7 +79,7 @@ export default {
|
|||||||
computed: {
|
computed: {
|
||||||
...mapState(useFileStore, ["req", "selected"]),
|
...mapState(useFileStore, ["req", "selected"]),
|
||||||
...mapState(useAuthStore, ["user"]),
|
...mapState(useAuthStore, ["user"]),
|
||||||
...mapWritableState(useFileStore, ["preselect"]),
|
...mapWritableState(useFileStore, ["reload", "preselect"]),
|
||||||
excludedFolders() {
|
excludedFolders() {
|
||||||
return this.selected
|
return this.selected
|
||||||
.filter((idx) => this.req.items[idx].isDir)
|
.filter((idx) => this.req.items[idx].isDir)
|
||||||
@ -108,7 +108,9 @@ export default {
|
|||||||
.then(() => {
|
.then(() => {
|
||||||
buttons.success("move");
|
buttons.success("move");
|
||||||
this.preselect = removePrefix(items[0].to);
|
this.preselect = removePrefix(items[0].to);
|
||||||
|
if (this.user.redirectAfterCopyMove)
|
||||||
this.$router.push({ path: this.dest });
|
this.$router.push({ path: this.dest });
|
||||||
|
else this.reload = true;
|
||||||
})
|
})
|
||||||
.catch((e) => {
|
.catch((e) => {
|
||||||
buttons.done("move");
|
buttons.done("move");
|
||||||
|
|||||||
@ -24,7 +24,7 @@
|
|||||||
"ok": "موافق",
|
"ok": "موافق",
|
||||||
"permalink": "الحصول على رابط دائم",
|
"permalink": "الحصول على رابط دائم",
|
||||||
"previous": "السابق",
|
"previous": "السابق",
|
||||||
"preview": "Preview",
|
"preview": "معاينة",
|
||||||
"publish": "نشر",
|
"publish": "نشر",
|
||||||
"rename": "إعادة تسمية",
|
"rename": "إعادة تسمية",
|
||||||
"replace": "استبدال",
|
"replace": "استبدال",
|
||||||
@ -43,10 +43,11 @@
|
|||||||
"upload": "رفع",
|
"upload": "رفع",
|
||||||
"openFile": "فتح الملف",
|
"openFile": "فتح الملف",
|
||||||
"discardChanges": "إلغاء التغييرات",
|
"discardChanges": "إلغاء التغييرات",
|
||||||
"saveChanges": "Save changes",
|
"stopSearch": "توقف عن البحث",
|
||||||
"editAsText": "Edit as Text",
|
"saveChanges": "حفظ التغييرات",
|
||||||
"increaseFontSize": "Increase font size",
|
"editAsText": "تعديل على شكل نص",
|
||||||
"decreaseFontSize": "Decrease font size"
|
"increaseFontSize": "زيادة حجم الخط",
|
||||||
|
"decreaseFontSize": "تصغير حجم الخط"
|
||||||
},
|
},
|
||||||
"download": {
|
"download": {
|
||||||
"downloadFile": "تحميل الملف",
|
"downloadFile": "تحميل الملف",
|
||||||
@ -79,7 +80,7 @@
|
|||||||
"sortByName": "الترتيب باﻹسم",
|
"sortByName": "الترتيب باﻹسم",
|
||||||
"sortBySize": "الترتيب بالحجم",
|
"sortBySize": "الترتيب بالحجم",
|
||||||
"noPreview": "لا يوجد عرض مسبق لهذا الملف.",
|
"noPreview": "لا يوجد عرض مسبق لهذا الملف.",
|
||||||
"csvTooLarge": "CSV file is too large for preview (>5MB). Please download to view.",
|
"csvTooLarge": "حجم الملف اكبر من (<5MB), يرجى تحميل الملف للمعاينة",
|
||||||
"csvLoadFailed": "Failed to load CSV file.",
|
"csvLoadFailed": "Failed to load CSV file.",
|
||||||
"showingRows": "Showing {count} row(s)",
|
"showingRows": "Showing {count} row(s)",
|
||||||
"columnSeparator": "Column Separator",
|
"columnSeparator": "Column Separator",
|
||||||
@ -137,7 +138,7 @@
|
|||||||
"filesSelected": "تم تحديد {count} ملفات.",
|
"filesSelected": "تم تحديد {count} ملفات.",
|
||||||
"lastModified": "آخر تعديل",
|
"lastModified": "آخر تعديل",
|
||||||
"move": "نقل",
|
"move": "نقل",
|
||||||
"moveMessage": "إختر مكان جديد للملفات أو المجلدات المراد نقلها:",
|
"moveMessage": "اختر منزلاً جديداً لملفك (ملفاتك)/مجلدك (مجلداتك):",
|
||||||
"newArchetype": "إنشاء منشور من المنشور اﻷصلي. الملف سيتم انشاءه في مجلد المحتويات.",
|
"newArchetype": "إنشاء منشور من المنشور اﻷصلي. الملف سيتم انشاءه في مجلد المحتويات.",
|
||||||
"newDir": "مجلد جديد",
|
"newDir": "مجلد جديد",
|
||||||
"newDirMessage": "أدخل اسم المجلد الجديد.",
|
"newDirMessage": "أدخل اسم المجلد الجديد.",
|
||||||
@ -188,15 +189,15 @@
|
|||||||
"commandRunner": "منفذ اﻷوامر",
|
"commandRunner": "منفذ اﻷوامر",
|
||||||
"commandRunnerHelp": "هنا بإمكانك تعيين اﻷوامر التي سيتم تنفيذها في اﻷحداث المسماة. يجب كتابة أمر واحد في كل سطر. ستكون المتغيرات البيئية (env) {0} و {1} متاحة، حيث {0} نسبي لـ {1}. لمزيد من المعلومات حول هذه الميزة و المتغيرات البيئية المتاحة، يرجى قراءة {2}.",
|
"commandRunnerHelp": "هنا بإمكانك تعيين اﻷوامر التي سيتم تنفيذها في اﻷحداث المسماة. يجب كتابة أمر واحد في كل سطر. ستكون المتغيرات البيئية (env) {0} و {1} متاحة، حيث {0} نسبي لـ {1}. لمزيد من المعلومات حول هذه الميزة و المتغيرات البيئية المتاحة، يرجى قراءة {2}.",
|
||||||
"commandsUpdated": "تم تحديث اﻷوامر",
|
"commandsUpdated": "تم تحديث اﻷوامر",
|
||||||
"createUserDir": "إنشاء مجلد المستخدم (home) تلقائياً عند إنشاء مستخدم جديد",
|
"createUserDir": "إنشاء مجلد المستخدم الرئيسي تلقائياً عند إنشاء مستخدم جديد",
|
||||||
"minimumPasswordLength": "Minimum password length",
|
"minimumPasswordLength": "Minimum password length",
|
||||||
"tusUploads": "التحميلات المتقطعة",
|
"tusUploads": "التحميلات المتقطعة",
|
||||||
"tusUploadsHelp": "يدعم متصفح الملفات تحميل الملفات المتقطعة، مما يسمح بتحميلات الملفات بشكل فعال و موثوق و قابلة للمتابغة و متقطعة حتى على الشبكات غير الموثوقة.",
|
"tusUploadsHelp": "يدعم متصفح الملفات تحميل الملفات المتقطعة، مما يسمح بتحميلات الملفات بشكل فعال و موثوق و قابلة للمتابغة و متقطعة حتى على الشبكات غير الموثوقة.",
|
||||||
"tusUploadsChunkSize": "يشير إلى الحد اﻷقصى لحجم الطلب (سيتم استخدام التحميل المباشر للتحميلات صغيرة الخحم). يمكنك إدخال عدد صحيح عادي يدل على الحجم بوحدة البايت أو نمظ مثل10MB, 1GB, إلخ.",
|
"tusUploadsChunkSize": "يشير إلى الحد اﻷقصى لحجم الطلب (سيتم استخدام التحميل المباشر للتحميلات صغيرة الخحم). يمكنك إدخال عدد صحيح عادي يدل على الحجم بوحدة البايت أو نمظ مثل10MB, 1GB, إلخ.",
|
||||||
"tusUploadsRetryCount": "عدد مرات إعادة المحاولة إذا فشلت عملية تحميل القطعة.",
|
"tusUploadsRetryCount": "عدد مرات إعادة المحاولة إذا فشلت عملية تحميل القطعة.",
|
||||||
"userHomeBasePath": "المسار الرئيسي لمجلد المستخدم (home)",
|
"userHomeBasePath": "المسار الرئيسي لمجلد المستخدم الرئيسي",
|
||||||
"userScopeGenerationPlaceholder": "سيتم تعيين نطاق المستخدم تلقائياً",
|
"userScopeGenerationPlaceholder": "سيتم تعيين نطاق المستخدم تلقائياً",
|
||||||
"createUserHomeDirectory": "إنشاء مجلد المستخدم (home)",
|
"createUserHomeDirectory": "إنشاء مجلد المستخدم الرئيسي",
|
||||||
"customStylesheet": "ستايل مخصص",
|
"customStylesheet": "ستايل مخصص",
|
||||||
"defaultUserDescription": "هذه اﻹعدادات اﻹفتراضية للمستخدمين الجدد.",
|
"defaultUserDescription": "هذه اﻹعدادات اﻹفتراضية للمستخدمين الجدد.",
|
||||||
"disableExternalLinks": "تعطيل الروابط الخارجية (بإسثناء الوثائق)",
|
"disableExternalLinks": "تعطيل الروابط الخارجية (بإسثناء الوثائق)",
|
||||||
@ -257,7 +258,8 @@
|
|||||||
"userManagement": "إدارة المستخدمين",
|
"userManagement": "إدارة المستخدمين",
|
||||||
"userUpdated": "تم تعديل المستخدم",
|
"userUpdated": "تم تعديل المستخدم",
|
||||||
"username": "إسم المستخدم",
|
"username": "إسم المستخدم",
|
||||||
"users": "المستخدمين"
|
"users": "المستخدمين",
|
||||||
|
"currentPassword": "Your Current Password"
|
||||||
},
|
},
|
||||||
"sidebar": {
|
"sidebar": {
|
||||||
"help": "مساعدة",
|
"help": "مساعدة",
|
||||||
|
|||||||
@ -43,6 +43,7 @@
|
|||||||
"upload": "Качи",
|
"upload": "Качи",
|
||||||
"openFile": "Отвори файл",
|
"openFile": "Отвори файл",
|
||||||
"discardChanges": "Изчисти",
|
"discardChanges": "Изчисти",
|
||||||
|
"stopSearch": "Stop searching",
|
||||||
"saveChanges": "Запиши промените",
|
"saveChanges": "Запиши промените",
|
||||||
"editAsText": "Edit as Text",
|
"editAsText": "Edit as Text",
|
||||||
"increaseFontSize": "Increase font size",
|
"increaseFontSize": "Increase font size",
|
||||||
@ -257,7 +258,8 @@
|
|||||||
"userManagement": "Управление на потребители",
|
"userManagement": "Управление на потребители",
|
||||||
"userUpdated": "Потребителя е обновен!",
|
"userUpdated": "Потребителя е обновен!",
|
||||||
"username": "Потребителско име",
|
"username": "Потребителско име",
|
||||||
"users": "Потребители"
|
"users": "Потребители",
|
||||||
|
"currentPassword": "Your Current Password"
|
||||||
},
|
},
|
||||||
"sidebar": {
|
"sidebar": {
|
||||||
"help": "Помощ",
|
"help": "Помощ",
|
||||||
|
|||||||
@ -43,6 +43,7 @@
|
|||||||
"upload": "Pujar",
|
"upload": "Pujar",
|
||||||
"openFile": "Obrir fitxer",
|
"openFile": "Obrir fitxer",
|
||||||
"discardChanges": "Descartar",
|
"discardChanges": "Descartar",
|
||||||
|
"stopSearch": "Stop searching",
|
||||||
"saveChanges": "Save changes",
|
"saveChanges": "Save changes",
|
||||||
"editAsText": "Edit as Text",
|
"editAsText": "Edit as Text",
|
||||||
"increaseFontSize": "Increase font size",
|
"increaseFontSize": "Increase font size",
|
||||||
@ -257,7 +258,8 @@
|
|||||||
"userManagement": "Administració d'usuaris",
|
"userManagement": "Administració d'usuaris",
|
||||||
"userUpdated": "Usuari actualitzat!",
|
"userUpdated": "Usuari actualitzat!",
|
||||||
"username": "Usuari",
|
"username": "Usuari",
|
||||||
"users": "Usuaris"
|
"users": "Usuaris",
|
||||||
|
"currentPassword": "Your Current Password"
|
||||||
},
|
},
|
||||||
"sidebar": {
|
"sidebar": {
|
||||||
"help": "Ajuda",
|
"help": "Ajuda",
|
||||||
|
|||||||
@ -43,6 +43,7 @@
|
|||||||
"upload": "Nahrát",
|
"upload": "Nahrát",
|
||||||
"openFile": "Otevřít soubor",
|
"openFile": "Otevřít soubor",
|
||||||
"discardChanges": "Zrušit změny",
|
"discardChanges": "Zrušit změny",
|
||||||
|
"stopSearch": "Stop searching",
|
||||||
"saveChanges": "Save changes",
|
"saveChanges": "Save changes",
|
||||||
"editAsText": "Edit as Text",
|
"editAsText": "Edit as Text",
|
||||||
"increaseFontSize": "Increase font size",
|
"increaseFontSize": "Increase font size",
|
||||||
@ -257,7 +258,8 @@
|
|||||||
"userManagement": "Správa uživatelů",
|
"userManagement": "Správa uživatelů",
|
||||||
"userUpdated": "Uživatel aktualizován!",
|
"userUpdated": "Uživatel aktualizován!",
|
||||||
"username": "Uživatelské jméno",
|
"username": "Uživatelské jméno",
|
||||||
"users": "Uživatelé"
|
"users": "Uživatelé",
|
||||||
|
"currentPassword": "Your Current Password"
|
||||||
},
|
},
|
||||||
"sidebar": {
|
"sidebar": {
|
||||||
"help": "Nápověda",
|
"help": "Nápověda",
|
||||||
|
|||||||
@ -43,10 +43,11 @@
|
|||||||
"upload": "Upload",
|
"upload": "Upload",
|
||||||
"openFile": "Datei öffnen",
|
"openFile": "Datei öffnen",
|
||||||
"discardChanges": "Verwerfen",
|
"discardChanges": "Verwerfen",
|
||||||
|
"stopSearch": "Suche abbrechen",
|
||||||
"saveChanges": "Änderungen speichern",
|
"saveChanges": "Änderungen speichern",
|
||||||
"editAsText": "Als Text bearbeiten",
|
"editAsText": "Als Text bearbeiten",
|
||||||
"increaseFontSize": "Increase font size",
|
"increaseFontSize": "Schriftgröße vergrößern",
|
||||||
"decreaseFontSize": "Decrease font size"
|
"decreaseFontSize": "Schriftgröße verkleinern"
|
||||||
},
|
},
|
||||||
"download": {
|
"download": {
|
||||||
"downloadFile": "Download Datei",
|
"downloadFile": "Download Datei",
|
||||||
@ -81,12 +82,12 @@
|
|||||||
"noPreview": "Für diese Datei ist keine Vorschau verfügbar.",
|
"noPreview": "Für diese Datei ist keine Vorschau verfügbar.",
|
||||||
"csvTooLarge": "Die CSV-Datei ist zu groß für die Vorschau (>5 MB). Bitte herunterladen, um sie anzuzeigen.",
|
"csvTooLarge": "Die CSV-Datei ist zu groß für die Vorschau (>5 MB). Bitte herunterladen, um sie anzuzeigen.",
|
||||||
"csvLoadFailed": "Fehler beim Laden der CSV-Datei.",
|
"csvLoadFailed": "Fehler beim Laden der CSV-Datei.",
|
||||||
"showingRows": "Showing {count} row(s)",
|
"showingRows": "{count} Zeile(n) werden angezeigt",
|
||||||
"columnSeparator": "Column Separator",
|
"columnSeparator": "Spaltentrennzeichen",
|
||||||
"csvSeparators": {
|
"csvSeparators": {
|
||||||
"comma": "Comma (,)",
|
"comma": "Komma (,)",
|
||||||
"semicolon": "Semicolon (;)",
|
"semicolon": "Semikolon (;)",
|
||||||
"both": "Both (,) and (;)"
|
"both": "Sowohl (,) als auch (;)"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"help": {
|
"help": {
|
||||||
@ -213,7 +214,7 @@
|
|||||||
"instanceName": "Instanzname",
|
"instanceName": "Instanzname",
|
||||||
"language": "Sprache",
|
"language": "Sprache",
|
||||||
"lockPassword": "Verhindere, dass der Benutzer sein Passwort ändert",
|
"lockPassword": "Verhindere, dass der Benutzer sein Passwort ändert",
|
||||||
"newPassword": "Ihr neues Passwort.",
|
"newPassword": "Ihr neues Passwort",
|
||||||
"newPasswordConfirm": "Bestätigen Sie Ihr neues Passwort",
|
"newPasswordConfirm": "Bestätigen Sie Ihr neues Passwort",
|
||||||
"newUser": "Neuer Benutzer",
|
"newUser": "Neuer Benutzer",
|
||||||
"password": "Passwort",
|
"password": "Passwort",
|
||||||
@ -257,7 +258,8 @@
|
|||||||
"userManagement": "Benutzerverwaltung",
|
"userManagement": "Benutzerverwaltung",
|
||||||
"userUpdated": "Benutzer aktualisiert!",
|
"userUpdated": "Benutzer aktualisiert!",
|
||||||
"username": "Nutzername",
|
"username": "Nutzername",
|
||||||
"users": "Nutzer"
|
"users": "Nutzer",
|
||||||
|
"currentPassword": "Ihr aktuelles Passwort"
|
||||||
},
|
},
|
||||||
"sidebar": {
|
"sidebar": {
|
||||||
"help": "Hilfe",
|
"help": "Hilfe",
|
||||||
|
|||||||
@ -43,6 +43,7 @@
|
|||||||
"upload": "Μεταφόρτωση",
|
"upload": "Μεταφόρτωση",
|
||||||
"openFile": "Άνοιγμα αρχείου",
|
"openFile": "Άνοιγμα αρχείου",
|
||||||
"discardChanges": "Discard",
|
"discardChanges": "Discard",
|
||||||
|
"stopSearch": "Stop searching",
|
||||||
"saveChanges": "Save changes",
|
"saveChanges": "Save changes",
|
||||||
"editAsText": "Edit as Text",
|
"editAsText": "Edit as Text",
|
||||||
"increaseFontSize": "Increase font size",
|
"increaseFontSize": "Increase font size",
|
||||||
@ -257,7 +258,8 @@
|
|||||||
"userManagement": "Διαχείριση χρηστών",
|
"userManagement": "Διαχείριση χρηστών",
|
||||||
"userUpdated": "Ο χρήστης ενημερώθηκε!",
|
"userUpdated": "Ο χρήστης ενημερώθηκε!",
|
||||||
"username": "Όνομα χρήστη",
|
"username": "Όνομα χρήστη",
|
||||||
"users": "Χρήστες"
|
"users": "Χρήστες",
|
||||||
|
"currentPassword": "Your Current Password"
|
||||||
},
|
},
|
||||||
"sidebar": {
|
"sidebar": {
|
||||||
"help": "Βοήθεια",
|
"help": "Βοήθεια",
|
||||||
|
|||||||
@ -43,6 +43,7 @@
|
|||||||
"upload": "Upload",
|
"upload": "Upload",
|
||||||
"openFile": "Open file",
|
"openFile": "Open file",
|
||||||
"discardChanges": "Discard",
|
"discardChanges": "Discard",
|
||||||
|
"stopSearch": "Stop searching",
|
||||||
"saveChanges": "Save changes",
|
"saveChanges": "Save changes",
|
||||||
"editAsText": "Edit as Text",
|
"editAsText": "Edit as Text",
|
||||||
"increaseFontSize": "Increase font size",
|
"increaseFontSize": "Increase font size",
|
||||||
@ -231,6 +232,7 @@
|
|||||||
"permissions": "Permissions",
|
"permissions": "Permissions",
|
||||||
"permissionsHelp": "You can set the user to be an administrator or choose the permissions individually. If you select \"Administrator\", all of the other options will be automatically checked. The management of users remains a privilege of an administrator.\n",
|
"permissionsHelp": "You can set the user to be an administrator or choose the permissions individually. If you select \"Administrator\", all of the other options will be automatically checked. The management of users remains a privilege of an administrator.\n",
|
||||||
"profileSettings": "Profile Settings",
|
"profileSettings": "Profile Settings",
|
||||||
|
"redirectAfterCopyMove": "Redirect to destination after copy/move",
|
||||||
"ruleExample1": "prevents the access to any dotfile (such as .git, .gitignore) in every folder.\n",
|
"ruleExample1": "prevents the access to any dotfile (such as .git, .gitignore) in every folder.\n",
|
||||||
"ruleExample2": "blocks the access to the file named Caddyfile on the root of the scope.",
|
"ruleExample2": "blocks the access to the file named Caddyfile on the root of the scope.",
|
||||||
"rules": "Rules",
|
"rules": "Rules",
|
||||||
@ -257,7 +259,8 @@
|
|||||||
"userManagement": "User Management",
|
"userManagement": "User Management",
|
||||||
"userUpdated": "User updated!",
|
"userUpdated": "User updated!",
|
||||||
"username": "Username",
|
"username": "Username",
|
||||||
"users": "Users"
|
"users": "Users",
|
||||||
|
"currentPassword": "Your Current Password"
|
||||||
},
|
},
|
||||||
"sidebar": {
|
"sidebar": {
|
||||||
"help": "Help",
|
"help": "Help",
|
||||||
|
|||||||
@ -43,6 +43,7 @@
|
|||||||
"upload": "Subir",
|
"upload": "Subir",
|
||||||
"openFile": "Abrir archivo",
|
"openFile": "Abrir archivo",
|
||||||
"discardChanges": "Discard",
|
"discardChanges": "Discard",
|
||||||
|
"stopSearch": "Stop searching",
|
||||||
"saveChanges": "Guardar cambios",
|
"saveChanges": "Guardar cambios",
|
||||||
"editAsText": "Edit as Text",
|
"editAsText": "Edit as Text",
|
||||||
"increaseFontSize": "Increase font size",
|
"increaseFontSize": "Increase font size",
|
||||||
@ -257,7 +258,8 @@
|
|||||||
"userManagement": "Administración de usuarios",
|
"userManagement": "Administración de usuarios",
|
||||||
"userUpdated": "¡Usuario actualizado!",
|
"userUpdated": "¡Usuario actualizado!",
|
||||||
"username": "Usuario",
|
"username": "Usuario",
|
||||||
"users": "Usuarios"
|
"users": "Usuarios",
|
||||||
|
"currentPassword": "Your Current Password"
|
||||||
},
|
},
|
||||||
"sidebar": {
|
"sidebar": {
|
||||||
"help": "Ayuda",
|
"help": "Ayuda",
|
||||||
|
|||||||
@ -43,6 +43,7 @@
|
|||||||
"upload": "آپلود",
|
"upload": "آپلود",
|
||||||
"openFile": "باز کردن فایل",
|
"openFile": "باز کردن فایل",
|
||||||
"discardChanges": "لغو کردن",
|
"discardChanges": "لغو کردن",
|
||||||
|
"stopSearch": "Stop searching",
|
||||||
"saveChanges": "Save changes",
|
"saveChanges": "Save changes",
|
||||||
"editAsText": "Edit as Text",
|
"editAsText": "Edit as Text",
|
||||||
"increaseFontSize": "Increase font size",
|
"increaseFontSize": "Increase font size",
|
||||||
@ -257,7 +258,8 @@
|
|||||||
"userManagement": "مدیریت کاربران",
|
"userManagement": "مدیریت کاربران",
|
||||||
"userUpdated": "کاربر به روز شد!",
|
"userUpdated": "کاربر به روز شد!",
|
||||||
"username": "نام کاربری",
|
"username": "نام کاربری",
|
||||||
"users": "کاربران"
|
"users": "کاربران",
|
||||||
|
"currentPassword": "Your Current Password"
|
||||||
},
|
},
|
||||||
"sidebar": {
|
"sidebar": {
|
||||||
"help": "راهنما",
|
"help": "راهنما",
|
||||||
|
|||||||
@ -43,10 +43,11 @@
|
|||||||
"upload": "Importer",
|
"upload": "Importer",
|
||||||
"openFile": "Ouvrir le fichier",
|
"openFile": "Ouvrir le fichier",
|
||||||
"discardChanges": "Annuler",
|
"discardChanges": "Annuler",
|
||||||
"saveChanges": "Save changes",
|
"stopSearch": "Arrêter recherche",
|
||||||
"editAsText": "Edit as Text",
|
"saveChanges": "Enregistrer changements",
|
||||||
"increaseFontSize": "Increase font size",
|
"editAsText": "Editer comme Texte",
|
||||||
"decreaseFontSize": "Decrease font size"
|
"increaseFontSize": "Augmenter taille police",
|
||||||
|
"decreaseFontSize": "Réduire taille police"
|
||||||
},
|
},
|
||||||
"download": {
|
"download": {
|
||||||
"downloadFile": "Télécharger le fichier",
|
"downloadFile": "Télécharger le fichier",
|
||||||
@ -79,14 +80,14 @@
|
|||||||
"sortByName": "Trier par nom",
|
"sortByName": "Trier par nom",
|
||||||
"sortBySize": "Trier par taille",
|
"sortBySize": "Trier par taille",
|
||||||
"noPreview": "L'aperçu n'est pas disponible pour ce fichier.",
|
"noPreview": "L'aperçu n'est pas disponible pour ce fichier.",
|
||||||
"csvTooLarge": "CSV file is too large for preview (>5MB). Please download to view.",
|
"csvTooLarge": "Le fichier CSV est trop volumineux pour être prévisualisé (>5MB). Veuillez le télécharger pour le voir.",
|
||||||
"csvLoadFailed": "Failed to load CSV file.",
|
"csvLoadFailed": "Impossible de charger le fichier CSV.",
|
||||||
"showingRows": "Showing {count} row(s)",
|
"showingRows": "Affichage de {count} ligne(s)",
|
||||||
"columnSeparator": "Column Separator",
|
"columnSeparator": "Séparateur de Colonnes",
|
||||||
"csvSeparators": {
|
"csvSeparators": {
|
||||||
"comma": "Comma (,)",
|
"comma": "Virgule (,)",
|
||||||
"semicolon": "Semicolon (;)",
|
"semicolon": "Point-virgule (;)",
|
||||||
"both": "Both (,) and (;)"
|
"both": "Les (,) et (;)"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"help": {
|
"help": {
|
||||||
@ -114,9 +115,9 @@
|
|||||||
"username": "Utilisateur·ice",
|
"username": "Utilisateur·ice",
|
||||||
"usernameTaken": "Le nom d'utilisateur·ice est déjà pris",
|
"usernameTaken": "Le nom d'utilisateur·ice est déjà pris",
|
||||||
"wrongCredentials": "Identifiants incorrects !",
|
"wrongCredentials": "Identifiants incorrects !",
|
||||||
"passwordTooShort": "Password must be at least {min} characters",
|
"passwordTooShort": "Le mot de passe doit contenir au moins {min} caractères",
|
||||||
"logout_reasons": {
|
"logout_reasons": {
|
||||||
"inactivity": "You have been logged out due to inactivity."
|
"inactivity": "Vous avez été déconnecté(e) en raison d'une inactivité prolongée."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"permanent": "Permanent",
|
"permanent": "Permanent",
|
||||||
@ -171,7 +172,7 @@
|
|||||||
"video": "Vidéo"
|
"video": "Vidéo"
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"aceEditorTheme": "Ace editor theme",
|
"aceEditorTheme": "Éditeur de Thème Ace",
|
||||||
"admin": "Admin",
|
"admin": "Admin",
|
||||||
"administrator": "Administrateur·ice",
|
"administrator": "Administrateur·ice",
|
||||||
"allowCommands": "Exécuter des commandes",
|
"allowCommands": "Exécuter des commandes",
|
||||||
@ -179,7 +180,7 @@
|
|||||||
"allowNew": "Créer de nouveaux fichiers et dossiers",
|
"allowNew": "Créer de nouveaux fichiers et dossiers",
|
||||||
"allowPublish": "Publier de nouveaux posts et pages",
|
"allowPublish": "Publier de nouveaux posts et pages",
|
||||||
"allowSignup": "Autoriser les utilisateur·ices à s'inscrire",
|
"allowSignup": "Autoriser les utilisateur·ices à s'inscrire",
|
||||||
"hideLoginButton": "Hide the login button from public pages",
|
"hideLoginButton": "Cacher le bouton d’identification sur les pages publiques",
|
||||||
"avoidChanges": "(Laisser vide pour conserver l'actuel)",
|
"avoidChanges": "(Laisser vide pour conserver l'actuel)",
|
||||||
"branding": "Image de marque",
|
"branding": "Image de marque",
|
||||||
"brandingDirectoryPath": "Chemin du dossier d'image de marque",
|
"brandingDirectoryPath": "Chemin du dossier d'image de marque",
|
||||||
@ -257,7 +258,8 @@
|
|||||||
"userManagement": "Gestion des utilisateur·ices",
|
"userManagement": "Gestion des utilisateur·ices",
|
||||||
"userUpdated": "Utilisateur·ice mis à jour !",
|
"userUpdated": "Utilisateur·ice mis à jour !",
|
||||||
"username": "Nom d'utilisateur·ice",
|
"username": "Nom d'utilisateur·ice",
|
||||||
"users": "Utilisateur·ices"
|
"users": "Utilisateur·ices",
|
||||||
|
"currentPassword": "Mot de Passe Actuel"
|
||||||
},
|
},
|
||||||
"sidebar": {
|
"sidebar": {
|
||||||
"help": "Aide",
|
"help": "Aide",
|
||||||
|
|||||||
@ -43,6 +43,7 @@
|
|||||||
"upload": "העלאה",
|
"upload": "העלאה",
|
||||||
"openFile": "פתח קובץ",
|
"openFile": "פתח קובץ",
|
||||||
"discardChanges": "זריקת השינויים",
|
"discardChanges": "זריקת השינויים",
|
||||||
|
"stopSearch": "Stop searching",
|
||||||
"saveChanges": "Save changes",
|
"saveChanges": "Save changes",
|
||||||
"editAsText": "Edit as Text",
|
"editAsText": "Edit as Text",
|
||||||
"increaseFontSize": "Increase font size",
|
"increaseFontSize": "Increase font size",
|
||||||
@ -257,7 +258,8 @@
|
|||||||
"userManagement": "ניהול משתמש",
|
"userManagement": "ניהול משתמש",
|
||||||
"userUpdated": "המשתמש עודכן!",
|
"userUpdated": "המשתמש עודכן!",
|
||||||
"username": "שם משתמש",
|
"username": "שם משתמש",
|
||||||
"users": "משתמשים"
|
"users": "משתמשים",
|
||||||
|
"currentPassword": "Your Current Password"
|
||||||
},
|
},
|
||||||
"sidebar": {
|
"sidebar": {
|
||||||
"help": "עזרה",
|
"help": "עזרה",
|
||||||
|
|||||||
@ -43,10 +43,11 @@
|
|||||||
"upload": "Prenesi",
|
"upload": "Prenesi",
|
||||||
"openFile": "Otvori datoteku",
|
"openFile": "Otvori datoteku",
|
||||||
"discardChanges": "Odbaci",
|
"discardChanges": "Odbaci",
|
||||||
|
"stopSearch": "Stop searching",
|
||||||
"saveChanges": "Spremi promjene",
|
"saveChanges": "Spremi promjene",
|
||||||
"editAsText": "Edit as Text",
|
"editAsText": "Uredi kao tekst",
|
||||||
"increaseFontSize": "Increase font size",
|
"increaseFontSize": "Povećaj veličinu fonta",
|
||||||
"decreaseFontSize": "Decrease font size"
|
"decreaseFontSize": "Smanji veličinu fonta"
|
||||||
},
|
},
|
||||||
"download": {
|
"download": {
|
||||||
"downloadFile": "Preuzmi Datoteku",
|
"downloadFile": "Preuzmi Datoteku",
|
||||||
@ -79,14 +80,14 @@
|
|||||||
"sortByName": "Sortiraj po nazivu",
|
"sortByName": "Sortiraj po nazivu",
|
||||||
"sortBySize": "Sortiraj po veličini",
|
"sortBySize": "Sortiraj po veličini",
|
||||||
"noPreview": "Pregled nije dostupan za ovu datoteku.",
|
"noPreview": "Pregled nije dostupan za ovu datoteku.",
|
||||||
"csvTooLarge": "CSV file is too large for preview (>5MB). Please download to view.",
|
"csvTooLarge": "CSV datoteka je prevelika za pregled (>5MB). Molimo preuzmite da bi ste ju pregledali.",
|
||||||
"csvLoadFailed": "Failed to load CSV file.",
|
"csvLoadFailed": "Neuspješno učitavanje CSV datoteke.",
|
||||||
"showingRows": "Showing {count} row(s)",
|
"showingRows": "Prikazuje se {count} red(ova)",
|
||||||
"columnSeparator": "Column Separator",
|
"columnSeparator": "Separator stupaca",
|
||||||
"csvSeparators": {
|
"csvSeparators": {
|
||||||
"comma": "Comma (,)",
|
"comma": "Zarez (,)",
|
||||||
"semicolon": "Semicolon (;)",
|
"semicolon": "Točka zarez (;)",
|
||||||
"both": "Both (,) and (;)"
|
"both": "I (,) i (;)"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"help": {
|
"help": {
|
||||||
@ -257,7 +258,8 @@
|
|||||||
"userManagement": "Upravljanje Korisnicima",
|
"userManagement": "Upravljanje Korisnicima",
|
||||||
"userUpdated": "Korisnik ažuriran!",
|
"userUpdated": "Korisnik ažuriran!",
|
||||||
"username": "Korisničko ime",
|
"username": "Korisničko ime",
|
||||||
"users": "Korisnici"
|
"users": "Korisnici",
|
||||||
|
"currentPassword": "Your Current Password"
|
||||||
},
|
},
|
||||||
"sidebar": {
|
"sidebar": {
|
||||||
"help": "Pomoć",
|
"help": "Pomoć",
|
||||||
|
|||||||
@ -43,6 +43,7 @@
|
|||||||
"upload": "Feltöltés",
|
"upload": "Feltöltés",
|
||||||
"openFile": "Fájl megnyitása",
|
"openFile": "Fájl megnyitása",
|
||||||
"discardChanges": "Discard",
|
"discardChanges": "Discard",
|
||||||
|
"stopSearch": "Stop searching",
|
||||||
"saveChanges": "Save changes",
|
"saveChanges": "Save changes",
|
||||||
"editAsText": "Edit as Text",
|
"editAsText": "Edit as Text",
|
||||||
"increaseFontSize": "Increase font size",
|
"increaseFontSize": "Increase font size",
|
||||||
@ -257,7 +258,8 @@
|
|||||||
"userManagement": "Felhasználókezelés",
|
"userManagement": "Felhasználókezelés",
|
||||||
"userUpdated": "Felhasználó frissítve!",
|
"userUpdated": "Felhasználó frissítve!",
|
||||||
"username": "Felhasználói név",
|
"username": "Felhasználói név",
|
||||||
"users": "Felhasználók"
|
"users": "Felhasználók",
|
||||||
|
"currentPassword": "Your Current Password"
|
||||||
},
|
},
|
||||||
"sidebar": {
|
"sidebar": {
|
||||||
"help": "Súgó",
|
"help": "Súgó",
|
||||||
|
|||||||
@ -43,6 +43,7 @@
|
|||||||
"upload": "Hlaða upp",
|
"upload": "Hlaða upp",
|
||||||
"openFile": "Open file",
|
"openFile": "Open file",
|
||||||
"discardChanges": "Discard",
|
"discardChanges": "Discard",
|
||||||
|
"stopSearch": "Stop searching",
|
||||||
"saveChanges": "Save changes",
|
"saveChanges": "Save changes",
|
||||||
"editAsText": "Edit as Text",
|
"editAsText": "Edit as Text",
|
||||||
"increaseFontSize": "Increase font size",
|
"increaseFontSize": "Increase font size",
|
||||||
@ -257,7 +258,8 @@
|
|||||||
"userManagement": "Notendastýring",
|
"userManagement": "Notendastýring",
|
||||||
"userUpdated": "Notandastillingar vistaðar!",
|
"userUpdated": "Notandastillingar vistaðar!",
|
||||||
"username": "Notendanafn",
|
"username": "Notendanafn",
|
||||||
"users": "Notendur"
|
"users": "Notendur",
|
||||||
|
"currentPassword": "Your Current Password"
|
||||||
},
|
},
|
||||||
"sidebar": {
|
"sidebar": {
|
||||||
"help": "Hjálp",
|
"help": "Hjálp",
|
||||||
|
|||||||
@ -43,6 +43,7 @@
|
|||||||
"upload": "Carica",
|
"upload": "Carica",
|
||||||
"openFile": "Apri file",
|
"openFile": "Apri file",
|
||||||
"discardChanges": "Ignora",
|
"discardChanges": "Ignora",
|
||||||
|
"stopSearch": "Stop searching",
|
||||||
"saveChanges": "Save changes",
|
"saveChanges": "Save changes",
|
||||||
"editAsText": "Edit as Text",
|
"editAsText": "Edit as Text",
|
||||||
"increaseFontSize": "Increase font size",
|
"increaseFontSize": "Increase font size",
|
||||||
@ -257,7 +258,8 @@
|
|||||||
"userManagement": "Gestione degli utenti",
|
"userManagement": "Gestione degli utenti",
|
||||||
"userUpdated": "Utente aggiornato!",
|
"userUpdated": "Utente aggiornato!",
|
||||||
"username": "Nome utente",
|
"username": "Nome utente",
|
||||||
"users": "Utenti"
|
"users": "Utenti",
|
||||||
|
"currentPassword": "Your Current Password"
|
||||||
},
|
},
|
||||||
"sidebar": {
|
"sidebar": {
|
||||||
"help": "Aiuto",
|
"help": "Aiuto",
|
||||||
|
|||||||
@ -43,6 +43,7 @@
|
|||||||
"upload": "アップロード",
|
"upload": "アップロード",
|
||||||
"openFile": "ファイルを開く",
|
"openFile": "ファイルを開く",
|
||||||
"discardChanges": "Discard",
|
"discardChanges": "Discard",
|
||||||
|
"stopSearch": "Stop searching",
|
||||||
"saveChanges": "Save changes",
|
"saveChanges": "Save changes",
|
||||||
"editAsText": "Edit as Text",
|
"editAsText": "Edit as Text",
|
||||||
"increaseFontSize": "Increase font size",
|
"increaseFontSize": "Increase font size",
|
||||||
@ -257,7 +258,8 @@
|
|||||||
"userManagement": "ユーザー管理",
|
"userManagement": "ユーザー管理",
|
||||||
"userUpdated": "ユーザーを更新しました!",
|
"userUpdated": "ユーザーを更新しました!",
|
||||||
"username": "ユーザー名",
|
"username": "ユーザー名",
|
||||||
"users": "ユーザー"
|
"users": "ユーザー",
|
||||||
|
"currentPassword": "Your Current Password"
|
||||||
},
|
},
|
||||||
"sidebar": {
|
"sidebar": {
|
||||||
"help": "ヘルプ",
|
"help": "ヘルプ",
|
||||||
|
|||||||
@ -43,6 +43,7 @@
|
|||||||
"upload": "업로드",
|
"upload": "업로드",
|
||||||
"openFile": "파일 열기",
|
"openFile": "파일 열기",
|
||||||
"discardChanges": "변경 사항 취소",
|
"discardChanges": "변경 사항 취소",
|
||||||
|
"stopSearch": "Stop searching",
|
||||||
"saveChanges": "변경사항 저장",
|
"saveChanges": "변경사항 저장",
|
||||||
"editAsText": "Edit as Text",
|
"editAsText": "Edit as Text",
|
||||||
"increaseFontSize": "Increase font size",
|
"increaseFontSize": "Increase font size",
|
||||||
@ -257,7 +258,8 @@
|
|||||||
"userManagement": "사용자 관리",
|
"userManagement": "사용자 관리",
|
||||||
"userUpdated": "사용자 수정됨!",
|
"userUpdated": "사용자 수정됨!",
|
||||||
"username": "사용자 이름",
|
"username": "사용자 이름",
|
||||||
"users": "사용자"
|
"users": "사용자",
|
||||||
|
"currentPassword": "Your Current Password"
|
||||||
},
|
},
|
||||||
"sidebar": {
|
"sidebar": {
|
||||||
"help": "도움말",
|
"help": "도움말",
|
||||||
|
|||||||
287
frontend/src/i18n/lv.json
Normal file
287
frontend/src/i18n/lv.json
Normal file
@ -0,0 +1,287 @@
|
|||||||
|
{
|
||||||
|
"buttons": {
|
||||||
|
"cancel": "Atcelt",
|
||||||
|
"clear": "Tīrs",
|
||||||
|
"close": "Aizvērt",
|
||||||
|
"continue": "Turpināt",
|
||||||
|
"copy": "Kopēt",
|
||||||
|
"copyFile": "Kopēt failu",
|
||||||
|
"copyToClipboard": "Kopēt starpliktuvē",
|
||||||
|
"copyDownloadLinkToClipboard": "Kopēt lejupielādes saiti starpliktuvē",
|
||||||
|
"create": "Izveidot",
|
||||||
|
"delete": "Dzēst",
|
||||||
|
"download": "Lejupielādēt",
|
||||||
|
"file": "Fails",
|
||||||
|
"folder": "Mape",
|
||||||
|
"fullScreen": "Pārslēgt pilnekrāna režīmu",
|
||||||
|
"hideDotfiles": "Slēpt punktfailus",
|
||||||
|
"info": "Informācija",
|
||||||
|
"more": "Vairāk",
|
||||||
|
"move": "Pārvietot",
|
||||||
|
"moveFile": "Pārvietot failu",
|
||||||
|
"new": "Jauns",
|
||||||
|
"next": "Nākamais",
|
||||||
|
"ok": "Labi",
|
||||||
|
"permalink": "Iegūt pastāvīgo saiti",
|
||||||
|
"previous": "Iepriekšējais",
|
||||||
|
"preview": "Priekšskatījums",
|
||||||
|
"publish": "Publicēt",
|
||||||
|
"rename": "Pārdēvēt",
|
||||||
|
"replace": "Aizstāt",
|
||||||
|
"reportIssue": "Ziņot par problēmu",
|
||||||
|
"save": "Saglabāt",
|
||||||
|
"schedule": "Grafiks",
|
||||||
|
"search": "Meklēt",
|
||||||
|
"select": "Izvēlieties",
|
||||||
|
"selectMultiple": "Izvēlieties vairākus",
|
||||||
|
"share": "Dalīties",
|
||||||
|
"shell": "Pārslēgt apvalku",
|
||||||
|
"submit": "Iesniegt",
|
||||||
|
"switchView": "Pārslēgt skatu",
|
||||||
|
"toggleSidebar": "Pārslēgt sānjoslu",
|
||||||
|
"update": "Atjaunināt",
|
||||||
|
"upload": "Augšupielādēt",
|
||||||
|
"openFile": "Atvērt failu",
|
||||||
|
"discardChanges": "Izmest",
|
||||||
|
"stopSearch": "Stop searching",
|
||||||
|
"saveChanges": "Saglabāt izmaiņas",
|
||||||
|
"editAsText": "Rediģēt kā tekstu",
|
||||||
|
"increaseFontSize": "Palieliniet fonta lielumu",
|
||||||
|
"decreaseFontSize": "Samaziniet fonta lielumu"
|
||||||
|
},
|
||||||
|
"download": {
|
||||||
|
"downloadFile": "Lejupielādēt failu",
|
||||||
|
"downloadFolder": "Lejupielādēt mapi",
|
||||||
|
"downloadSelected": "Lejupielādēt atlasīto"
|
||||||
|
},
|
||||||
|
"upload": {
|
||||||
|
"abortUpload": "Vai tiešām vēlaties pārtraukt?"
|
||||||
|
},
|
||||||
|
"errors": {
|
||||||
|
"forbidden": "Jums nav atļaujas piekļūt šim.",
|
||||||
|
"internal": "Kaut kas tiešām nogāja greizi.",
|
||||||
|
"notFound": "Šo atrašanās vietu nevar sasniegt.",
|
||||||
|
"connection": "Ar serveri nevar sazināties."
|
||||||
|
},
|
||||||
|
"files": {
|
||||||
|
"body": "Ķermenis",
|
||||||
|
"closePreview": "Aizvērt priekšskatījumu",
|
||||||
|
"files": "Faili",
|
||||||
|
"folders": "Mapes",
|
||||||
|
"home": "Sākums",
|
||||||
|
"lastModified": "Pēdējoreiz modificēts",
|
||||||
|
"loading": "Notiek ielāde...",
|
||||||
|
"lonely": "Šeit ir tukša vieta...",
|
||||||
|
"metadata": "Metadati",
|
||||||
|
"multipleSelectionEnabled": "Vairākas atlases ir iespējotas",
|
||||||
|
"name": "Vārds",
|
||||||
|
"size": "Izmērs",
|
||||||
|
"sortByLastModified": "Kārtot pēc pēdējās modifikācijas",
|
||||||
|
"sortByName": "Kārtot pēc nosaukuma",
|
||||||
|
"sortBySize": "Kārtot pēc izmēra",
|
||||||
|
"noPreview": "Šim failam nav pieejams priekšskatījums.",
|
||||||
|
"csvTooLarge": "CSV fails ir pārāk liels priekšskatīšanai (>5 MB). Lūdzu, lejupielādējiet to, lai skatītu",
|
||||||
|
"csvLoadFailed": "Neizdevās ielādēt CSV failu.",
|
||||||
|
"showingRows": "Rāda {count} rindu(as)",
|
||||||
|
"columnSeparator": "Kolonnu atdalītājs",
|
||||||
|
"csvSeparators": {
|
||||||
|
"comma": "Komats (,)",
|
||||||
|
"semicolon": "Semikols (;)",
|
||||||
|
"both": "Gan (,) gan (;)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"help": {
|
||||||
|
"click": "atlasiet failu vai direktoriju",
|
||||||
|
"ctrl": {
|
||||||
|
"click": "atlasīt vairākus failus vai direktorijus",
|
||||||
|
"f": "atver meklēšanu",
|
||||||
|
"s": "saglabājiet failu vai lejupielādējiet direktoriju, kurā atrodaties"
|
||||||
|
},
|
||||||
|
"del": "dzēst atlasītos vienumus",
|
||||||
|
"doubleClick": "atvērt failu vai direktoriju",
|
||||||
|
"esc": "notīrīt atlasi un/vai aizvērt uzvedni",
|
||||||
|
"f1": "šo informāciju",
|
||||||
|
"f2": "pārdēvēt failu",
|
||||||
|
"help": "Palīdzība"
|
||||||
|
},
|
||||||
|
"login": {
|
||||||
|
"createAnAccount": "Izveidot kontu",
|
||||||
|
"loginInstead": "Jau ir konts",
|
||||||
|
"password": "Parole",
|
||||||
|
"passwordConfirm": "Paroles apstiprināšana",
|
||||||
|
"passwordsDontMatch": "Paroles nesakrīt",
|
||||||
|
"signup": "Reģistrēšanās",
|
||||||
|
"submit": "Pieteikties",
|
||||||
|
"username": "Lietotājvārds",
|
||||||
|
"usernameTaken": "Lietotājvārds jau aizņemts",
|
||||||
|
"wrongCredentials": "Nepareizi akreditācijas dati",
|
||||||
|
"passwordTooShort": "Parolei jābūt vismaz {min} rakstzīmju garai",
|
||||||
|
"logout_reasons": {
|
||||||
|
"inactivity": "Jūs esat atteicies no sistēmas neaktivitātes dēļ."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"permanent": "Pastāvīgs",
|
||||||
|
"prompts": {
|
||||||
|
"copy": "Kopēt",
|
||||||
|
"copyMessage": "Izvēlieties atrašanās vietu, uz kuru kopēt failus:",
|
||||||
|
"currentlyNavigating": "Pašlaik navigācija:",
|
||||||
|
"deleteMessageMultiple": "Vai tiešām vēlaties dzēst {count} failu(s)?",
|
||||||
|
"deleteMessageSingle": "Vai tiešām vēlaties dzēst šo failu/mapi?",
|
||||||
|
"deleteMessageShare": "Vai tiešām vēlaties dzēst šo koplietojumu({path})?",
|
||||||
|
"deleteUser": "Vai tiešām vēlaties dzēst šo lietotāju?",
|
||||||
|
"deleteTitle": "Dzēst failus",
|
||||||
|
"displayName": "Displeja nosaukums:",
|
||||||
|
"download": "Lejupielādēt failus",
|
||||||
|
"downloadMessage": "Izvēlieties formātu, kuru vēlaties lejupielādēt.",
|
||||||
|
"error": "Kaut kas nogāja greizi",
|
||||||
|
"fileInfo": "Informācija par failu",
|
||||||
|
"filesSelected": "{count} atlasīti faili",
|
||||||
|
"lastModified": "Pēdējās izmaiņas",
|
||||||
|
"move": "Pārvietot",
|
||||||
|
"moveMessage": "Izvēlieties jaunu mājvietu failam(iem)/mapei(ēm):",
|
||||||
|
"newArchetype": "Izveidojiet jaunu ierakstu, pamatojoties uz arhtipu. Jūsu fails tiks izveidots satura mapē.",
|
||||||
|
"newDir": "Jauna direktorija",
|
||||||
|
"newDirMessage": "Nosaukums savai jaunajai direktorijai.",
|
||||||
|
"newFile": "Jauns fails",
|
||||||
|
"newFileMessage": "Nosauciet savu jauno failu.",
|
||||||
|
"numberDirs": "Katalogu skaits",
|
||||||
|
"numberFiles": "Failu skaits",
|
||||||
|
"rename": "Pārdēvēt",
|
||||||
|
"renameMessage": "Ievietojiet jaunu nosaukumu",
|
||||||
|
"replace": "Aizstāt",
|
||||||
|
"replaceMessage": "Vienam no failiem, kurus mēģināt augšupielādēt, ir konfliktējošs nosaukums. Vai vēlaties izlaist šo failu un turpināt augšupielādi vai aizstāt esošo?\n",
|
||||||
|
"schedule": "Grafiks",
|
||||||
|
"scheduleMessage": "Izvēlieties datumu un laiku, lai ieplānotu šī ieraksta publicēšanu.",
|
||||||
|
"show": "Rādīt",
|
||||||
|
"size": "Izmērs",
|
||||||
|
"upload": "Augšupielādēt",
|
||||||
|
"uploadFiles": "Notiek {files} failu augšupielāde...",
|
||||||
|
"uploadMessage": "Atlasiet augšupielādes opciju.",
|
||||||
|
"optionalPassword": "Izvēles parole",
|
||||||
|
"resolution": "Izšķirtspēja",
|
||||||
|
"discardEditorChanges": "Vai tiešām vēlaties atmest veiktās izmaiņas?"
|
||||||
|
},
|
||||||
|
"search": {
|
||||||
|
"images": "Attēli",
|
||||||
|
"music": "Mūzika",
|
||||||
|
"pdf": "PDF",
|
||||||
|
"pressToSearch": "Nospiediet taustiņu Enter, lai meklētu...",
|
||||||
|
"search": "Meklē...",
|
||||||
|
"typeToSearch": "Ierakstiet, lai meklētu...",
|
||||||
|
"types": "Veidi",
|
||||||
|
"video": "Video"
|
||||||
|
},
|
||||||
|
"settings": {
|
||||||
|
"aceEditorTheme": "Ace redaktora tēma",
|
||||||
|
"admin": "Admin",
|
||||||
|
"administrator": "Administrator",
|
||||||
|
"allowCommands": "Izpildīt komandas",
|
||||||
|
"allowEdit": "Rediģēt, pārdēvēt un dzēst failus vai direktorijus",
|
||||||
|
"allowNew": "Izveidojiet jaunus failus un direktorijus",
|
||||||
|
"allowPublish": "Publicēt jaunus ierakstus un lapas",
|
||||||
|
"allowSignup": "Atļaut lietotājiem reģistrēties",
|
||||||
|
"hideLoginButton": "Paslēpt pieteikšanās pogu publiskajās lapās",
|
||||||
|
"avoidChanges": "(atstājiet tukšu, lai izvairītos no izmaiņām)",
|
||||||
|
"branding": "Zīmols",
|
||||||
|
"brandingDirectoryPath": "Zīmola direktorijas ceļš",
|
||||||
|
"brandingHelp": "Jūs varat pielāgot sava failu pārlūka instances izskatu un darbību, mainot tās nosaukumu, aizstājot logotipu, pievienojot pielāgotus stilus un pat atspējojot ārējās saites uz GitHub.\nLai iegūtu plašāku informāciju par pielāgotu zīmola veidošanu, lūdzu, skatiet {0}.",
|
||||||
|
"changePassword": "Mainīt paroli",
|
||||||
|
"commandRunner": "Komandu skrējējs",
|
||||||
|
"commandRunnerHelp": "Šeit varat iestatīt komandas, kas tiek izpildītas nosauktajos notikumos. Katrā rindā jāraksta pa vienai. Būs pieejami vides mainīgie {0} un {1}, kas ir {0} relatīvi pret {1}. Lai iegūtu plašāku informāciju par šo funkciju un pieejamajiem vides mainīgajiem, lūdzu, izlasiet {2}.",
|
||||||
|
"commandsUpdated": "Komandas atjauninātas!",
|
||||||
|
"createUserDir": "Automātiski izveidot lietotāja mājas direktoriju, pievienojot jaunu lietotāju",
|
||||||
|
"minimumPasswordLength": "Minimālais paroles garums",
|
||||||
|
"tusUploads": "Sadalītas augšupielādes",
|
||||||
|
"tusUploadsHelp": "Failu pārlūks atbalsta failu augšupielādi fragmentos, ļaujot izveidot efektīvu, uzticamu, atsākamu un fragmentos sadalītu failu augšupielādi pat neuzticamos tīklos.",
|
||||||
|
"tusUploadsChunkSize": "Norāda pieprasījuma maksimālo izmēru (mazākiem augšupielādes apjomiem tiks izmantota tieša augšupielāde). Varat ievadīt vienkāršu veselu skaitli, kas apzīmē baitu izmēru, vai virkni, piemēram, 10 MB, 1 GB utt.",
|
||||||
|
"tusUploadsRetryCount": "Atkārtotu mēģinājumu skaits, kas jāveic, ja fragmenta augšupielāde neizdodas.",
|
||||||
|
"userHomeBasePath": "Lietotāja mājas direktoriju bāzes ceļš",
|
||||||
|
"userScopeGenerationPlaceholder": "Darbības joma tiks ģenerēta automātiski",
|
||||||
|
"createUserHomeDirectory": "Izveidojiet lietotāja mājas direktoriju",
|
||||||
|
"customStylesheet": "Pielāgota stila lapa",
|
||||||
|
"defaultUserDescription": "Šie ir noklusējuma iestatījumi jaunajiem lietotājiem.",
|
||||||
|
"disableExternalLinks": "Atspējot ārējās saites (izņemot dokumentāciju)",
|
||||||
|
"disableUsedDiskPercentage": "Atspējot izmantotā diska procentuālās daļas grafiku",
|
||||||
|
"documentation": "dokumentācija",
|
||||||
|
"examples": "Piemēri",
|
||||||
|
"executeOnShell": "Izpildīt uz čaulas",
|
||||||
|
"executeOnShellDescription": "Pēc noklusējuma failu pārlūks izpilda komandas, tieši izsaucot to bināros failus. Ja vēlaties tās palaist čaulā (piemēram, Bash vai PowerShell), varat to definēt šeit ar nepieciešamajiem argumentiem un karodziņiem. Ja tas ir iestatīts, izpildītā komanda tiks pievienota kā arguments. Tas attiecas gan uz lietotāja komandām, gan notikumu piesaistes rīkiem.",
|
||||||
|
"globalRules": "Šis ir globāls atļaušanas un aizliegšanas noteikumu kopums. Tie attiecas uz katru lietotāju. Katra lietotāja iestatījumos varat definēt konkrētus noteikumus, lai tos ignorētu.",
|
||||||
|
"globalSettings": "Globālie iestatījumi",
|
||||||
|
"hideDotfiles": "Slēpt punktfailus",
|
||||||
|
"insertPath": "Ievietojiet ceļu",
|
||||||
|
"insertRegex": "Ievietojiet regex izteiksmi",
|
||||||
|
"instanceName": "Gadījuma nosaukums",
|
||||||
|
"language": "Valoda",
|
||||||
|
"lockPassword": "Neļaut lietotājam mainīt paroli",
|
||||||
|
"newPassword": "Jūsu jaunā parole",
|
||||||
|
"newPasswordConfirm": "Apstipriniet savu jauno paroli",
|
||||||
|
"newUser": "Jauns lietotājs",
|
||||||
|
"password": "Parole",
|
||||||
|
"passwordUpdated": "Parole atjaunināta!",
|
||||||
|
"path": "Ceļš",
|
||||||
|
"perm": {
|
||||||
|
"create": "Izveidojiet failus un direktorijus",
|
||||||
|
"delete": "Dzēst failus un direktorijus",
|
||||||
|
"download": "Lejupielādēt",
|
||||||
|
"execute": "Izpildīt komandas",
|
||||||
|
"modify": "Rediģēt failus",
|
||||||
|
"rename": "Pārdēvēt vai pārvietot failus un direktorijus",
|
||||||
|
"share": "Kopīgojiet failus"
|
||||||
|
},
|
||||||
|
"permissions": "Atļaujas",
|
||||||
|
"permissionsHelp": "Varat iestatīt lietotāju kā administratoru vai izvēlēties atļaujas individuāli. Ja atlasīsiet “Administrators”, visas pārējās opcijas tiks automātiski atzīmētas. Lietotāju pārvaldība joprojām ir administratora privilēģija.\n",
|
||||||
|
"profileSettings": "Profila iestatījumi",
|
||||||
|
"ruleExample1": "neļauj piekļūt jebkuram dotfile failam (piemēram, .git, .gitignore) katrā mapē.\n",
|
||||||
|
"ruleExample2": "bloķē piekļuvi failam ar nosaukumu Caddyfile darbības jomas saknē.",
|
||||||
|
"rules": "Noteikumi",
|
||||||
|
"rulesHelp": "Šeit varat definēt atļaušanas un aizliegšanas noteikumu kopu šim konkrētajam lietotājam. Bloķētie faili netiks rādīti sarakstos, un lietotājs tiem nevarēs piekļūt. Mēs atbalstām regulārās izteiksmes un ceļus attiecībā pret lietotāja darbības jomu.\n",
|
||||||
|
"scope": "Darbības joma",
|
||||||
|
"setDateFormat": "Iestatiet precīzu datuma formātu",
|
||||||
|
"settingsUpdated": "Iestatījumi atjaunināti!",
|
||||||
|
"shareDuration": "Kopīgošanas ilgums",
|
||||||
|
"shareManagement": "Kopīgošanas pārvaldība",
|
||||||
|
"shareDeleted": "Kopīgošana ir izdzēsta!",
|
||||||
|
"singleClick": "Failu un direktoriju atvēršanai izmantojiet vienus klikšķi",
|
||||||
|
"themes": {
|
||||||
|
"default": "Sistēmas noklusējums",
|
||||||
|
"dark": "Tumša",
|
||||||
|
"light": "Gaiša",
|
||||||
|
"title": "Tēma"
|
||||||
|
},
|
||||||
|
"user": "Lietotājs",
|
||||||
|
"userCommands": "Komandas",
|
||||||
|
"userCommandsHelp": "Ar atstarpi atdalīts saraksts ar šim lietotājam pieejamajām komandām. Piemērs:\n",
|
||||||
|
"userCreated": "Lietotājs izveidots!",
|
||||||
|
"userDefaults": "Lietotāja noklusējuma iestatījumi",
|
||||||
|
"userDeleted": "Lietotājs izdzēsts!",
|
||||||
|
"userManagement": "Lietotāju pārvaldība",
|
||||||
|
"userUpdated": "Lietotājs atjaunināts!",
|
||||||
|
"username": "Lietotājvārds",
|
||||||
|
"users": "Lietotāji",
|
||||||
|
"currentPassword": "Your Current Password"
|
||||||
|
},
|
||||||
|
"sidebar": {
|
||||||
|
"help": "Palīdzība",
|
||||||
|
"hugoNew": "Hugo Jauns",
|
||||||
|
"login": "Pieteikties",
|
||||||
|
"logout": "Atteikties",
|
||||||
|
"myFiles": "Mani faili",
|
||||||
|
"newFile": "Jauns fails",
|
||||||
|
"newFolder": "Jauna mape",
|
||||||
|
"preview": "Priekšskatījums",
|
||||||
|
"settings": "Iestatījumi",
|
||||||
|
"signup": "Reģistrēties",
|
||||||
|
"siteSettings": "Vietnes iestatījumi"
|
||||||
|
},
|
||||||
|
"success": {
|
||||||
|
"linkCopied": "Saite nokopēta!"
|
||||||
|
},
|
||||||
|
"time": {
|
||||||
|
"days": "Dienas",
|
||||||
|
"hours": "Stundas",
|
||||||
|
"minutes": "Minūtes",
|
||||||
|
"seconds": "Sekundes",
|
||||||
|
"unit": "Laika vienība"
|
||||||
|
}
|
||||||
|
}
|
||||||
287
frontend/src/i18n/lv_LV.json
Normal file
287
frontend/src/i18n/lv_LV.json
Normal file
@ -0,0 +1,287 @@
|
|||||||
|
{
|
||||||
|
"buttons": {
|
||||||
|
"cancel": "Atcelt",
|
||||||
|
"clear": "Tīrs",
|
||||||
|
"close": "Aizvērt",
|
||||||
|
"continue": "Turpināt",
|
||||||
|
"copy": "Kopēt",
|
||||||
|
"copyFile": "Kopēt failu",
|
||||||
|
"copyToClipboard": "Kopēt starpliktuvē",
|
||||||
|
"copyDownloadLinkToClipboard": "Kopēt lejupielādes saiti starpliktuvē",
|
||||||
|
"create": "Izveidot",
|
||||||
|
"delete": "Dzēst",
|
||||||
|
"download": "Lejupielādēt",
|
||||||
|
"file": "Fails",
|
||||||
|
"folder": "Mape",
|
||||||
|
"fullScreen": "Pārslēgt pilnekrāna režīmu",
|
||||||
|
"hideDotfiles": "Slēpt punktfailus",
|
||||||
|
"info": "Informācija",
|
||||||
|
"more": "Vairāk",
|
||||||
|
"move": "Pārvietot",
|
||||||
|
"moveFile": "Pārvietot failu",
|
||||||
|
"new": "Jauns",
|
||||||
|
"next": "Nākamais",
|
||||||
|
"ok": "Labi",
|
||||||
|
"permalink": "Iegūt pastāvīgo saiti",
|
||||||
|
"previous": "Iepriekšējais",
|
||||||
|
"preview": "Priekšskatījums",
|
||||||
|
"publish": "Publicēt",
|
||||||
|
"rename": "Pārdēvēt",
|
||||||
|
"replace": "Aizstāt",
|
||||||
|
"reportIssue": "Ziņot par problēmu",
|
||||||
|
"save": "Saglabāt",
|
||||||
|
"schedule": "Grafiks",
|
||||||
|
"search": "Meklēt",
|
||||||
|
"select": "Izvēlieties",
|
||||||
|
"selectMultiple": "Izvēlieties vairākus",
|
||||||
|
"share": "Dalīties",
|
||||||
|
"shell": "Pārslēgt apvalku",
|
||||||
|
"submit": "Iesniegt",
|
||||||
|
"switchView": "Pārslēgt skatu",
|
||||||
|
"toggleSidebar": "Pārslēgt sānjoslu",
|
||||||
|
"update": "Atjaunināt",
|
||||||
|
"upload": "Augšupielādēt",
|
||||||
|
"openFile": "Atvērt failu",
|
||||||
|
"discardChanges": "Izmest",
|
||||||
|
"stopSearch": "Stop searching",
|
||||||
|
"saveChanges": "Saglabāt izmaiņas",
|
||||||
|
"editAsText": "Rediģēt kā tekstu",
|
||||||
|
"increaseFontSize": "Palieliniet fonta lielumu",
|
||||||
|
"decreaseFontSize": "Samaziniet fonta lielumu"
|
||||||
|
},
|
||||||
|
"download": {
|
||||||
|
"downloadFile": "Lejupielādēt failu",
|
||||||
|
"downloadFolder": "Lejupielādēt mapi",
|
||||||
|
"downloadSelected": "Lejupielādēt atlasīto"
|
||||||
|
},
|
||||||
|
"upload": {
|
||||||
|
"abortUpload": "Vai tiešām vēlaties pārtraukt?"
|
||||||
|
},
|
||||||
|
"errors": {
|
||||||
|
"forbidden": "Jums nav atļaujas piekļūt šim.",
|
||||||
|
"internal": "Kaut kas tiešām nogāja greizi.",
|
||||||
|
"notFound": "Šo atrašanās vietu nevar sasniegt.",
|
||||||
|
"connection": "Ar serveri nevar sazināties."
|
||||||
|
},
|
||||||
|
"files": {
|
||||||
|
"body": "Ķermenis",
|
||||||
|
"closePreview": "Aizvērt priekšskatījumu",
|
||||||
|
"files": "Faili",
|
||||||
|
"folders": "Mapes",
|
||||||
|
"home": "Sākums",
|
||||||
|
"lastModified": "Pēdējoreiz modificēts",
|
||||||
|
"loading": "Notiek ielāde...",
|
||||||
|
"lonely": "Šeit ir tukša vieta...",
|
||||||
|
"metadata": "Metadati",
|
||||||
|
"multipleSelectionEnabled": "Vairākas atlases ir iespējotas",
|
||||||
|
"name": "Vārds",
|
||||||
|
"size": "Izmērs",
|
||||||
|
"sortByLastModified": "Kārtot pēc pēdējās modifikācijas",
|
||||||
|
"sortByName": "Kārtot pēc nosaukuma",
|
||||||
|
"sortBySize": "Kārtot pēc izmēra",
|
||||||
|
"noPreview": "Šim failam nav pieejams priekšskatījums.",
|
||||||
|
"csvTooLarge": "CSV fails ir pārāk liels priekšskatīšanai (>5 MB). Lūdzu, lejupielādējiet to, lai skatītu",
|
||||||
|
"csvLoadFailed": "Neizdevās ielādēt CSV failu.",
|
||||||
|
"showingRows": "Rāda {count} rindu(as)",
|
||||||
|
"columnSeparator": "Kolonnu atdalītājs",
|
||||||
|
"csvSeparators": {
|
||||||
|
"comma": "Komats (,)",
|
||||||
|
"semicolon": "Semikols (;)",
|
||||||
|
"both": "Gan (,) gan (;)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"help": {
|
||||||
|
"click": "atlasiet failu vai direktoriju",
|
||||||
|
"ctrl": {
|
||||||
|
"click": "atlasīt vairākus failus vai direktorijus",
|
||||||
|
"f": "atver meklēšanu",
|
||||||
|
"s": "saglabājiet failu vai lejupielādējiet direktoriju, kurā atrodaties"
|
||||||
|
},
|
||||||
|
"del": "dzēst atlasītos vienumus",
|
||||||
|
"doubleClick": "atvērt failu vai direktoriju",
|
||||||
|
"esc": "notīrīt atlasi un/vai aizvērt uzvedni",
|
||||||
|
"f1": "šo informāciju",
|
||||||
|
"f2": "pārdēvēt failu",
|
||||||
|
"help": "Palīdzība"
|
||||||
|
},
|
||||||
|
"login": {
|
||||||
|
"createAnAccount": "Izveidot kontu",
|
||||||
|
"loginInstead": "Jau ir konts",
|
||||||
|
"password": "Parole",
|
||||||
|
"passwordConfirm": "Paroles apstiprināšana",
|
||||||
|
"passwordsDontMatch": "Paroles nesakrīt",
|
||||||
|
"signup": "Reģistrēšanās",
|
||||||
|
"submit": "Pieteikties",
|
||||||
|
"username": "Lietotājvārds",
|
||||||
|
"usernameTaken": "Lietotājvārds jau aizņemts",
|
||||||
|
"wrongCredentials": "Nepareizi akreditācijas dati",
|
||||||
|
"passwordTooShort": "Parolei jābūt vismaz {min} rakstzīmju garai",
|
||||||
|
"logout_reasons": {
|
||||||
|
"inactivity": "Jūs esat atteicies no sistēmas neaktivitātes dēļ."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"permanent": "Pastāvīgs",
|
||||||
|
"prompts": {
|
||||||
|
"copy": "Kopēt",
|
||||||
|
"copyMessage": "Izvēlieties atrašanās vietu, uz kuru kopēt failus:",
|
||||||
|
"currentlyNavigating": "Pašlaik navigācija:",
|
||||||
|
"deleteMessageMultiple": "Vai tiešām vēlaties dzēst {count} failu(s)?",
|
||||||
|
"deleteMessageSingle": "Vai tiešām vēlaties dzēst šo failu/mapi?",
|
||||||
|
"deleteMessageShare": "Vai tiešām vēlaties dzēst šo koplietojumu({path})?",
|
||||||
|
"deleteUser": "Vai tiešām vēlaties dzēst šo lietotāju?",
|
||||||
|
"deleteTitle": "Dzēst failus",
|
||||||
|
"displayName": "Displeja nosaukums:",
|
||||||
|
"download": "Lejupielādēt failus",
|
||||||
|
"downloadMessage": "Izvēlieties formātu, kuru vēlaties lejupielādēt.",
|
||||||
|
"error": "Kaut kas nogāja greizi",
|
||||||
|
"fileInfo": "Informācija par failu",
|
||||||
|
"filesSelected": "{count} atlasīti faili",
|
||||||
|
"lastModified": "Pēdējās izmaiņas",
|
||||||
|
"move": "Pārvietot",
|
||||||
|
"moveMessage": "Izvēlieties jaunu mājvietu failam(iem)/mapei(ēm):",
|
||||||
|
"newArchetype": "Izveidojiet jaunu ierakstu, pamatojoties uz arhtipu. Jūsu fails tiks izveidots satura mapē.",
|
||||||
|
"newDir": "Jauna direktorija",
|
||||||
|
"newDirMessage": "Nosaukums savai jaunajai direktorijai.",
|
||||||
|
"newFile": "Jauns fails",
|
||||||
|
"newFileMessage": "Nosauciet savu jauno failu.",
|
||||||
|
"numberDirs": "Katalogu skaits",
|
||||||
|
"numberFiles": "Failu skaits",
|
||||||
|
"rename": "Pārdēvēt",
|
||||||
|
"renameMessage": "Ievietojiet jaunu nosaukumu",
|
||||||
|
"replace": "Aizstāt",
|
||||||
|
"replaceMessage": "Vienam no failiem, kurus mēģināt augšupielādēt, ir konfliktējošs nosaukums. Vai vēlaties izlaist šo failu un turpināt augšupielādi vai aizstāt esošo?\n",
|
||||||
|
"schedule": "Grafiks",
|
||||||
|
"scheduleMessage": "Izvēlieties datumu un laiku, lai ieplānotu šī ieraksta publicēšanu.",
|
||||||
|
"show": "Rādīt",
|
||||||
|
"size": "Izmērs",
|
||||||
|
"upload": "Augšupielādēt",
|
||||||
|
"uploadFiles": "Notiek {files} failu augšupielāde...",
|
||||||
|
"uploadMessage": "Atlasiet augšupielādes opciju.",
|
||||||
|
"optionalPassword": "Izvēles parole",
|
||||||
|
"resolution": "Izšķirtspēja",
|
||||||
|
"discardEditorChanges": "Vai tiešām vēlaties atmest veiktās izmaiņas?"
|
||||||
|
},
|
||||||
|
"search": {
|
||||||
|
"images": "Attēli",
|
||||||
|
"music": "Mūzika",
|
||||||
|
"pdf": "PDF",
|
||||||
|
"pressToSearch": "Nospiediet taustiņu Enter, lai meklētu...",
|
||||||
|
"search": "Meklē...",
|
||||||
|
"typeToSearch": "Ierakstiet, lai meklētu...",
|
||||||
|
"types": "Veidi",
|
||||||
|
"video": "Video"
|
||||||
|
},
|
||||||
|
"settings": {
|
||||||
|
"aceEditorTheme": "Ace redaktora tēma",
|
||||||
|
"admin": "Admin",
|
||||||
|
"administrator": "Administrator",
|
||||||
|
"allowCommands": "Izpildīt komandas",
|
||||||
|
"allowEdit": "Rediģēt, pārdēvēt un dzēst failus vai direktorijus",
|
||||||
|
"allowNew": "Izveidojiet jaunus failus un direktorijus",
|
||||||
|
"allowPublish": "Publicēt jaunus ierakstus un lapas",
|
||||||
|
"allowSignup": "Atļaut lietotājiem reģistrēties",
|
||||||
|
"hideLoginButton": "Paslēpt pieteikšanās pogu publiskajās lapās",
|
||||||
|
"avoidChanges": "(atstājiet tukšu, lai izvairītos no izmaiņām)",
|
||||||
|
"branding": "Zīmols",
|
||||||
|
"brandingDirectoryPath": "Zīmola direktorijas ceļš",
|
||||||
|
"brandingHelp": "Jūs varat pielāgot sava failu pārlūka instances izskatu un darbību, mainot tās nosaukumu, aizstājot logotipu, pievienojot pielāgotus stilus un pat atspējojot ārējās saites uz GitHub.\nLai iegūtu plašāku informāciju par pielāgotu zīmola veidošanu, lūdzu, skatiet {0}.",
|
||||||
|
"changePassword": "Mainīt paroli",
|
||||||
|
"commandRunner": "Komandu skrējējs",
|
||||||
|
"commandRunnerHelp": "Šeit varat iestatīt komandas, kas tiek izpildītas nosauktajos notikumos. Katrā rindā jāraksta pa vienai. Būs pieejami vides mainīgie {0} un {1}, kas ir {0} relatīvi pret {1}. Lai iegūtu plašāku informāciju par šo funkciju un pieejamajiem vides mainīgajiem, lūdzu, izlasiet {2}.",
|
||||||
|
"commandsUpdated": "Komandas atjauninātas!",
|
||||||
|
"createUserDir": "Automātiski izveidot lietotāja mājas direktoriju, pievienojot jaunu lietotāju",
|
||||||
|
"minimumPasswordLength": "Minimālais paroles garums",
|
||||||
|
"tusUploads": "Sadalītas augšupielādes",
|
||||||
|
"tusUploadsHelp": "Failu pārlūks atbalsta failu augšupielādi fragmentos, ļaujot izveidot efektīvu, uzticamu, atsākamu un fragmentos sadalītu failu augšupielādi pat neuzticamos tīklos.",
|
||||||
|
"tusUploadsChunkSize": "Norāda pieprasījuma maksimālo izmēru (mazākiem augšupielādes apjomiem tiks izmantota tieša augšupielāde). Varat ievadīt vienkāršu veselu skaitli, kas apzīmē baitu izmēru, vai virkni, piemēram, 10 MB, 1 GB utt.",
|
||||||
|
"tusUploadsRetryCount": "Atkārtotu mēģinājumu skaits, kas jāveic, ja fragmenta augšupielāde neizdodas.",
|
||||||
|
"userHomeBasePath": "Lietotāja mājas direktoriju bāzes ceļš",
|
||||||
|
"userScopeGenerationPlaceholder": "Darbības joma tiks ģenerēta automātiski",
|
||||||
|
"createUserHomeDirectory": "Izveidojiet lietotāja mājas direktoriju",
|
||||||
|
"customStylesheet": "Pielāgota stila lapa",
|
||||||
|
"defaultUserDescription": "Šie ir noklusējuma iestatījumi jaunajiem lietotājiem.",
|
||||||
|
"disableExternalLinks": "Atspējot ārējās saites (izņemot dokumentāciju)",
|
||||||
|
"disableUsedDiskPercentage": "Atspējot izmantotā diska procentuālās daļas grafiku",
|
||||||
|
"documentation": "dokumentācija",
|
||||||
|
"examples": "Piemēri",
|
||||||
|
"executeOnShell": "Izpildīt uz čaulas",
|
||||||
|
"executeOnShellDescription": "Pēc noklusējuma failu pārlūks izpilda komandas, tieši izsaucot to bināros failus. Ja vēlaties tās palaist čaulā (piemēram, Bash vai PowerShell), varat to definēt šeit ar nepieciešamajiem argumentiem un karodziņiem. Ja tas ir iestatīts, izpildītā komanda tiks pievienota kā arguments. Tas attiecas gan uz lietotāja komandām, gan notikumu piesaistes rīkiem.",
|
||||||
|
"globalRules": "Šis ir globāls atļaušanas un aizliegšanas noteikumu kopums. Tie attiecas uz katru lietotāju. Katra lietotāja iestatījumos varat definēt konkrētus noteikumus, lai tos ignorētu.",
|
||||||
|
"globalSettings": "Globālie iestatījumi",
|
||||||
|
"hideDotfiles": "Slēpt punktfailus",
|
||||||
|
"insertPath": "Ievietojiet ceļu",
|
||||||
|
"insertRegex": "Ievietojiet regex izteiksmi",
|
||||||
|
"instanceName": "Gadījuma nosaukums",
|
||||||
|
"language": "Valoda",
|
||||||
|
"lockPassword": "Neļaut lietotājam mainīt paroli",
|
||||||
|
"newPassword": "Jūsu jaunā parole",
|
||||||
|
"newPasswordConfirm": "Apstipriniet savu jauno paroli",
|
||||||
|
"newUser": "Jauns lietotājs",
|
||||||
|
"password": "Parole",
|
||||||
|
"passwordUpdated": "Parole atjaunināta!",
|
||||||
|
"path": "Ceļš",
|
||||||
|
"perm": {
|
||||||
|
"create": "Izveidojiet failus un direktorijus",
|
||||||
|
"delete": "Dzēst failus un direktorijus",
|
||||||
|
"download": "Lejupielādēt",
|
||||||
|
"execute": "Izpildīt komandas",
|
||||||
|
"modify": "Rediģēt failus",
|
||||||
|
"rename": "Pārdēvēt vai pārvietot failus un direktorijus",
|
||||||
|
"share": "Kopīgojiet failus"
|
||||||
|
},
|
||||||
|
"permissions": "Atļaujas",
|
||||||
|
"permissionsHelp": "Varat iestatīt lietotāju kā administratoru vai izvēlēties atļaujas individuāli. Ja atlasīsiet “Administrators”, visas pārējās opcijas tiks automātiski atzīmētas. Lietotāju pārvaldība joprojām ir administratora privilēģija.\n",
|
||||||
|
"profileSettings": "Profila iestatījumi",
|
||||||
|
"ruleExample1": "neļauj piekļūt jebkuram dotfile failam (piemēram, .git, .gitignore) katrā mapē.\n",
|
||||||
|
"ruleExample2": "bloķē piekļuvi failam ar nosaukumu Caddyfile darbības jomas saknē.",
|
||||||
|
"rules": "Noteikumi",
|
||||||
|
"rulesHelp": "Šeit varat definēt atļaušanas un aizliegšanas noteikumu kopu šim konkrētajam lietotājam. Bloķētie faili netiks rādīti sarakstos, un lietotājs tiem nevarēs piekļūt. Mēs atbalstām regulārās izteiksmes un ceļus attiecībā pret lietotāja darbības jomu.\n",
|
||||||
|
"scope": "Darbības joma",
|
||||||
|
"setDateFormat": "Iestatiet precīzu datuma formātu",
|
||||||
|
"settingsUpdated": "Iestatījumi atjaunināti!",
|
||||||
|
"shareDuration": "Kopīgošanas ilgums",
|
||||||
|
"shareManagement": "Kopīgošanas pārvaldība",
|
||||||
|
"shareDeleted": "Kopīgošana ir izdzēsta!",
|
||||||
|
"singleClick": "Failu un direktoriju atvēršanai izmantojiet vienus klikšķi",
|
||||||
|
"themes": {
|
||||||
|
"default": "Sistēmas noklusējums",
|
||||||
|
"dark": "Tumša",
|
||||||
|
"light": "Gaiša",
|
||||||
|
"title": "Tēma"
|
||||||
|
},
|
||||||
|
"user": "Lietotājs",
|
||||||
|
"userCommands": "Komandas",
|
||||||
|
"userCommandsHelp": "Ar atstarpi atdalīts saraksts ar šim lietotājam pieejamajām komandām. Piemērs:\n",
|
||||||
|
"userCreated": "Lietotājs izveidots!",
|
||||||
|
"userDefaults": "Lietotāja noklusējuma iestatījumi",
|
||||||
|
"userDeleted": "Lietotājs izdzēsts!",
|
||||||
|
"userManagement": "Lietotāju pārvaldība",
|
||||||
|
"userUpdated": "Lietotājs atjaunināts!",
|
||||||
|
"username": "Lietotājvārds",
|
||||||
|
"users": "Lietotāji",
|
||||||
|
"currentPassword": "Your Current Password"
|
||||||
|
},
|
||||||
|
"sidebar": {
|
||||||
|
"help": "Palīdzība",
|
||||||
|
"hugoNew": "Hugo Jauns",
|
||||||
|
"login": "Pieteikties",
|
||||||
|
"logout": "Atteikties",
|
||||||
|
"myFiles": "Mani faili",
|
||||||
|
"newFile": "Jauns fails",
|
||||||
|
"newFolder": "Jauna mape",
|
||||||
|
"preview": "Priekšskatījums",
|
||||||
|
"settings": "Iestatījumi",
|
||||||
|
"signup": "Reģistrēties",
|
||||||
|
"siteSettings": "Vietnes iestatījumi"
|
||||||
|
},
|
||||||
|
"success": {
|
||||||
|
"linkCopied": "Saite nokopēta!"
|
||||||
|
},
|
||||||
|
"time": {
|
||||||
|
"days": "Dienas",
|
||||||
|
"hours": "Stundas",
|
||||||
|
"minutes": "Minūtes",
|
||||||
|
"seconds": "Sekundes",
|
||||||
|
"unit": "Laika vienība"
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -43,6 +43,7 @@
|
|||||||
"upload": "Uploaden",
|
"upload": "Uploaden",
|
||||||
"openFile": "Open file",
|
"openFile": "Open file",
|
||||||
"discardChanges": "Discard",
|
"discardChanges": "Discard",
|
||||||
|
"stopSearch": "Stop searching",
|
||||||
"saveChanges": "Save changes",
|
"saveChanges": "Save changes",
|
||||||
"editAsText": "Edit as Text",
|
"editAsText": "Edit as Text",
|
||||||
"increaseFontSize": "Increase font size",
|
"increaseFontSize": "Increase font size",
|
||||||
@ -257,7 +258,8 @@
|
|||||||
"userManagement": "Gebruikersbeheer",
|
"userManagement": "Gebruikersbeheer",
|
||||||
"userUpdated": "Gebruiker bijgewerkt!",
|
"userUpdated": "Gebruiker bijgewerkt!",
|
||||||
"username": "Gebruikersnaam",
|
"username": "Gebruikersnaam",
|
||||||
"users": "Gebruikers"
|
"users": "Gebruikers",
|
||||||
|
"currentPassword": "Your Current Password"
|
||||||
},
|
},
|
||||||
"sidebar": {
|
"sidebar": {
|
||||||
"help": "Help",
|
"help": "Help",
|
||||||
|
|||||||
@ -43,6 +43,7 @@
|
|||||||
"upload": "Last opp",
|
"upload": "Last opp",
|
||||||
"openFile": "Open file",
|
"openFile": "Open file",
|
||||||
"discardChanges": "Slett",
|
"discardChanges": "Slett",
|
||||||
|
"stopSearch": "Stop searching",
|
||||||
"saveChanges": "Lagre Endringane ",
|
"saveChanges": "Lagre Endringane ",
|
||||||
"editAsText": "Edit as Text",
|
"editAsText": "Edit as Text",
|
||||||
"increaseFontSize": "Increase font size",
|
"increaseFontSize": "Increase font size",
|
||||||
@ -257,7 +258,8 @@
|
|||||||
"userManagement": "Brukeradministrasjon",
|
"userManagement": "Brukeradministrasjon",
|
||||||
"userUpdated": "Bruker opprettet!",
|
"userUpdated": "Bruker opprettet!",
|
||||||
"username": "Brukernavn",
|
"username": "Brukernavn",
|
||||||
"users": "Bruker"
|
"users": "Bruker",
|
||||||
|
"currentPassword": "Your Current Password"
|
||||||
},
|
},
|
||||||
"sidebar": {
|
"sidebar": {
|
||||||
"help": "Hjelp",
|
"help": "Hjelp",
|
||||||
|
|||||||
@ -43,6 +43,7 @@
|
|||||||
"upload": "Wyślij",
|
"upload": "Wyślij",
|
||||||
"openFile": "Otwórz plik",
|
"openFile": "Otwórz plik",
|
||||||
"discardChanges": "Odrzuć",
|
"discardChanges": "Odrzuć",
|
||||||
|
"stopSearch": "Zatrzymaj wyszukiwanie",
|
||||||
"saveChanges": "Zapisz zmiany",
|
"saveChanges": "Zapisz zmiany",
|
||||||
"editAsText": "Edytuj jako tekst",
|
"editAsText": "Edytuj jako tekst",
|
||||||
"increaseFontSize": "Zwiększ rozmiar czcionki",
|
"increaseFontSize": "Zwiększ rozmiar czcionki",
|
||||||
@ -257,7 +258,8 @@
|
|||||||
"userManagement": "Zarządzanie użytkownikami",
|
"userManagement": "Zarządzanie użytkownikami",
|
||||||
"userUpdated": "Użytkownik zapisany!",
|
"userUpdated": "Użytkownik zapisany!",
|
||||||
"username": "Nazwa użytkownika",
|
"username": "Nazwa użytkownika",
|
||||||
"users": "Użytkownicy"
|
"users": "Użytkownicy",
|
||||||
|
"currentPassword": "Twoje aktualne hasło"
|
||||||
},
|
},
|
||||||
"sidebar": {
|
"sidebar": {
|
||||||
"help": "Pomoc",
|
"help": "Pomoc",
|
||||||
|
|||||||
@ -43,6 +43,7 @@
|
|||||||
"upload": "Enviar",
|
"upload": "Enviar",
|
||||||
"openFile": "Abrir",
|
"openFile": "Abrir",
|
||||||
"discardChanges": "Discard",
|
"discardChanges": "Discard",
|
||||||
|
"stopSearch": "Stop searching",
|
||||||
"saveChanges": "Save changes",
|
"saveChanges": "Save changes",
|
||||||
"editAsText": "Edit as Text",
|
"editAsText": "Edit as Text",
|
||||||
"increaseFontSize": "Increase font size",
|
"increaseFontSize": "Increase font size",
|
||||||
@ -257,7 +258,8 @@
|
|||||||
"userManagement": "Gerenciamento de usuários",
|
"userManagement": "Gerenciamento de usuários",
|
||||||
"userUpdated": "Usuário atualizado!",
|
"userUpdated": "Usuário atualizado!",
|
||||||
"username": "Nome do usuário",
|
"username": "Nome do usuário",
|
||||||
"users": "Usuários"
|
"users": "Usuários",
|
||||||
|
"currentPassword": "Your Current Password"
|
||||||
},
|
},
|
||||||
"sidebar": {
|
"sidebar": {
|
||||||
"help": "Ajuda",
|
"help": "Ajuda",
|
||||||
|
|||||||
@ -43,6 +43,7 @@
|
|||||||
"upload": "Enviar",
|
"upload": "Enviar",
|
||||||
"openFile": "Open file",
|
"openFile": "Open file",
|
||||||
"discardChanges": "Discard",
|
"discardChanges": "Discard",
|
||||||
|
"stopSearch": "Stop searching",
|
||||||
"saveChanges": "Save changes",
|
"saveChanges": "Save changes",
|
||||||
"editAsText": "Edit as Text",
|
"editAsText": "Edit as Text",
|
||||||
"increaseFontSize": "Increase font size",
|
"increaseFontSize": "Increase font size",
|
||||||
@ -257,7 +258,8 @@
|
|||||||
"userManagement": "Gestão de utilizadores",
|
"userManagement": "Gestão de utilizadores",
|
||||||
"userUpdated": "Utilizador atualizado!",
|
"userUpdated": "Utilizador atualizado!",
|
||||||
"username": "Nome de utilizador",
|
"username": "Nome de utilizador",
|
||||||
"users": "Utilizadores"
|
"users": "Utilizadores",
|
||||||
|
"currentPassword": "Your Current Password"
|
||||||
},
|
},
|
||||||
"sidebar": {
|
"sidebar": {
|
||||||
"help": "Ajuda",
|
"help": "Ajuda",
|
||||||
|
|||||||
@ -43,6 +43,7 @@
|
|||||||
"upload": "Încarcă",
|
"upload": "Încarcă",
|
||||||
"openFile": "Open file",
|
"openFile": "Open file",
|
||||||
"discardChanges": "Discard",
|
"discardChanges": "Discard",
|
||||||
|
"stopSearch": "Stop searching",
|
||||||
"saveChanges": "Save changes",
|
"saveChanges": "Save changes",
|
||||||
"editAsText": "Edit as Text",
|
"editAsText": "Edit as Text",
|
||||||
"increaseFontSize": "Increase font size",
|
"increaseFontSize": "Increase font size",
|
||||||
@ -257,7 +258,8 @@
|
|||||||
"userManagement": "Gestionare utilizatori",
|
"userManagement": "Gestionare utilizatori",
|
||||||
"userUpdated": "Utilizator actualizat!",
|
"userUpdated": "Utilizator actualizat!",
|
||||||
"username": "Utilizator",
|
"username": "Utilizator",
|
||||||
"users": "Utilizatori"
|
"users": "Utilizatori",
|
||||||
|
"currentPassword": "Your Current Password"
|
||||||
},
|
},
|
||||||
"sidebar": {
|
"sidebar": {
|
||||||
"help": "Ajutor",
|
"help": "Ajutor",
|
||||||
|
|||||||
@ -43,10 +43,11 @@
|
|||||||
"upload": "Загрузить",
|
"upload": "Загрузить",
|
||||||
"openFile": "Открыть файл",
|
"openFile": "Открыть файл",
|
||||||
"discardChanges": "Отказаться",
|
"discardChanges": "Отказаться",
|
||||||
"saveChanges": "Save changes",
|
"stopSearch": "Stop searching",
|
||||||
"editAsText": "Edit as Text",
|
"saveChanges": "Сохранить",
|
||||||
"increaseFontSize": "Increase font size",
|
"editAsText": "Редактировать как текст",
|
||||||
"decreaseFontSize": "Decrease font size"
|
"increaseFontSize": "Увеличить размер шрифта",
|
||||||
|
"decreaseFontSize": "Уменьшить размер шрифта"
|
||||||
},
|
},
|
||||||
"download": {
|
"download": {
|
||||||
"downloadFile": "Скачать файл",
|
"downloadFile": "Скачать файл",
|
||||||
@ -79,14 +80,14 @@
|
|||||||
"sortByName": "Сортировка по имени",
|
"sortByName": "Сортировка по имени",
|
||||||
"sortBySize": "Сортировка по размеру",
|
"sortBySize": "Сортировка по размеру",
|
||||||
"noPreview": "Предварительный просмотр для этого файла недоступен.",
|
"noPreview": "Предварительный просмотр для этого файла недоступен.",
|
||||||
"csvTooLarge": "CSV file is too large for preview (>5MB). Please download to view.",
|
"csvTooLarge": "Этот CSV файл слишком большой для предпросмотра (>5 МБ). Скачайте и откройте его локально.",
|
||||||
"csvLoadFailed": "Failed to load CSV file.",
|
"csvLoadFailed": "Не удалось загрузить этот CSV.",
|
||||||
"showingRows": "Showing {count} row(s)",
|
"showingRows": "Отображается {count} строк(а)",
|
||||||
"columnSeparator": "Column Separator",
|
"columnSeparator": "Разделитель столбцов",
|
||||||
"csvSeparators": {
|
"csvSeparators": {
|
||||||
"comma": "Comma (,)",
|
"comma": "Запятая (,)",
|
||||||
"semicolon": "Semicolon (;)",
|
"semicolon": "Точка с запятой (;)",
|
||||||
"both": "Both (,) and (;)"
|
"both": "Оба варианта — (,) и (;)"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"help": {
|
"help": {
|
||||||
@ -114,9 +115,9 @@
|
|||||||
"username": "Имя пользователя",
|
"username": "Имя пользователя",
|
||||||
"usernameTaken": "Данное имя пользователя уже занято",
|
"usernameTaken": "Данное имя пользователя уже занято",
|
||||||
"wrongCredentials": "Неверные данные",
|
"wrongCredentials": "Неверные данные",
|
||||||
"passwordTooShort": "Password must be at least {min} characters",
|
"passwordTooShort": "Пароль должен состоять как минимум из {min} символов",
|
||||||
"logout_reasons": {
|
"logout_reasons": {
|
||||||
"inactivity": "You have been logged out due to inactivity."
|
"inactivity": "Сессия завершена после долгого отсутствия."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"permanent": "Постоянный",
|
"permanent": "Постоянный",
|
||||||
@ -171,7 +172,7 @@
|
|||||||
"video": "Видео"
|
"video": "Видео"
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"aceEditorTheme": "Ace editor theme",
|
"aceEditorTheme": "Тема редактора Ace",
|
||||||
"admin": "Админ",
|
"admin": "Админ",
|
||||||
"administrator": "Администратор",
|
"administrator": "Администратор",
|
||||||
"allowCommands": "Запуск команд",
|
"allowCommands": "Запуск команд",
|
||||||
@ -179,7 +180,7 @@
|
|||||||
"allowNew": "Создание новых файлов или каталогов",
|
"allowNew": "Создание новых файлов или каталогов",
|
||||||
"allowPublish": "Публикация новых записей и страниц",
|
"allowPublish": "Публикация новых записей и страниц",
|
||||||
"allowSignup": "Разрешить пользователям регистрироваться",
|
"allowSignup": "Разрешить пользователям регистрироваться",
|
||||||
"hideLoginButton": "Hide the login button from public pages",
|
"hideLoginButton": "Спрятать кнопку входа с публичных страниц",
|
||||||
"avoidChanges": "(оставьте поле пустым, чтобы избежать изменений)",
|
"avoidChanges": "(оставьте поле пустым, чтобы избежать изменений)",
|
||||||
"branding": "Брендинг",
|
"branding": "Брендинг",
|
||||||
"brandingDirectoryPath": "Путь к каталогу брендов",
|
"brandingDirectoryPath": "Путь к каталогу брендов",
|
||||||
@ -189,7 +190,7 @@
|
|||||||
"commandRunnerHelp": "Здесь вы можете установить команды, которые будут выполняться в указанных событиях. Вы должны указать по одной команде в каждой строке. Переменные среды {0} и {1} будут доступны, будучи {0} относительно {1}. Дополнительные сведения об этой функции и доступных переменных среды см. В {2}.",
|
"commandRunnerHelp": "Здесь вы можете установить команды, которые будут выполняться в указанных событиях. Вы должны указать по одной команде в каждой строке. Переменные среды {0} и {1} будут доступны, будучи {0} относительно {1}. Дополнительные сведения об этой функции и доступных переменных среды см. В {2}.",
|
||||||
"commandsUpdated": "Команды обновлены!",
|
"commandsUpdated": "Команды обновлены!",
|
||||||
"createUserDir": "Автоматическое создание домашнего каталога пользователя при добавлении нового пользователя",
|
"createUserDir": "Автоматическое создание домашнего каталога пользователя при добавлении нового пользователя",
|
||||||
"minimumPasswordLength": "Minimum password length",
|
"minimumPasswordLength": "Минимальная длина пароля",
|
||||||
"tusUploads": "Загруженные файлы",
|
"tusUploads": "Загруженные файлы",
|
||||||
"tusUploadsHelp": " File Browser поддерживает загрузку файлов по частям, что позволяет работать в сетях низкого качества.",
|
"tusUploadsHelp": " File Browser поддерживает загрузку файлов по частям, что позволяет работать в сетях низкого качества.",
|
||||||
"tusUploadsChunkSize": "Указывает максимальный размер запроса (мелкие загрузки пойдут напрямую). Вы можете ввести простое целое число, обозначающее размер ввода в байтах, или строку, например 10MB, 1GB и т. д.",
|
"tusUploadsChunkSize": "Указывает максимальный размер запроса (мелкие загрузки пойдут напрямую). Вы можете ввести простое целое число, обозначающее размер ввода в байтах, или строку, например 10MB, 1GB и т. д.",
|
||||||
@ -257,7 +258,8 @@
|
|||||||
"userManagement": "Управление пользователями",
|
"userManagement": "Управление пользователями",
|
||||||
"userUpdated": "Пользователь изменен!",
|
"userUpdated": "Пользователь изменен!",
|
||||||
"username": "Имя пользователя",
|
"username": "Имя пользователя",
|
||||||
"users": "Пользователи"
|
"users": "Пользователи",
|
||||||
|
"currentPassword": "Your Current Password"
|
||||||
},
|
},
|
||||||
"sidebar": {
|
"sidebar": {
|
||||||
"help": "Помощь",
|
"help": "Помощь",
|
||||||
|
|||||||
@ -43,6 +43,7 @@
|
|||||||
"upload": "Nahrať",
|
"upload": "Nahrať",
|
||||||
"openFile": "Otvoriť súbor",
|
"openFile": "Otvoriť súbor",
|
||||||
"discardChanges": "Zahodiť",
|
"discardChanges": "Zahodiť",
|
||||||
|
"stopSearch": "Stop searching",
|
||||||
"saveChanges": "Uložiť zmeny",
|
"saveChanges": "Uložiť zmeny",
|
||||||
"editAsText": "Edit as Text",
|
"editAsText": "Edit as Text",
|
||||||
"increaseFontSize": "Increase font size",
|
"increaseFontSize": "Increase font size",
|
||||||
@ -257,7 +258,8 @@
|
|||||||
"userManagement": "Správa používateľov",
|
"userManagement": "Správa používateľov",
|
||||||
"userUpdated": "Používateľ upravený!",
|
"userUpdated": "Používateľ upravený!",
|
||||||
"username": "Meno používateľa",
|
"username": "Meno používateľa",
|
||||||
"users": "Používatelia"
|
"users": "Používatelia",
|
||||||
|
"currentPassword": "Your Current Password"
|
||||||
},
|
},
|
||||||
"sidebar": {
|
"sidebar": {
|
||||||
"help": "Pomoc",
|
"help": "Pomoc",
|
||||||
|
|||||||
@ -43,6 +43,7 @@
|
|||||||
"upload": "Ladda upp",
|
"upload": "Ladda upp",
|
||||||
"openFile": "Öppna fil",
|
"openFile": "Öppna fil",
|
||||||
"discardChanges": "Förkasta",
|
"discardChanges": "Förkasta",
|
||||||
|
"stopSearch": "Stop searching",
|
||||||
"saveChanges": "Spara ändringar",
|
"saveChanges": "Spara ändringar",
|
||||||
"editAsText": "Edit as Text",
|
"editAsText": "Edit as Text",
|
||||||
"increaseFontSize": "Increase font size",
|
"increaseFontSize": "Increase font size",
|
||||||
@ -257,7 +258,8 @@
|
|||||||
"userManagement": "Användarehantering",
|
"userManagement": "Användarehantering",
|
||||||
"userUpdated": "Användare uppdaterad!",
|
"userUpdated": "Användare uppdaterad!",
|
||||||
"username": "Användarnamn",
|
"username": "Användarnamn",
|
||||||
"users": "Användare"
|
"users": "Användare",
|
||||||
|
"currentPassword": "Your Current Password"
|
||||||
},
|
},
|
||||||
"sidebar": {
|
"sidebar": {
|
||||||
"help": "Hjälp",
|
"help": "Hjälp",
|
||||||
|
|||||||
@ -43,6 +43,7 @@
|
|||||||
"upload": "Yükle",
|
"upload": "Yükle",
|
||||||
"openFile": "Dosyayı aç",
|
"openFile": "Dosyayı aç",
|
||||||
"discardChanges": "Discard",
|
"discardChanges": "Discard",
|
||||||
|
"stopSearch": "Stop searching",
|
||||||
"saveChanges": "Save changes",
|
"saveChanges": "Save changes",
|
||||||
"editAsText": "Edit as Text",
|
"editAsText": "Edit as Text",
|
||||||
"increaseFontSize": "Increase font size",
|
"increaseFontSize": "Increase font size",
|
||||||
@ -257,7 +258,8 @@
|
|||||||
"userManagement": "Kullanıcı yönetimi",
|
"userManagement": "Kullanıcı yönetimi",
|
||||||
"userUpdated": "Kullanıcı güncellendi!",
|
"userUpdated": "Kullanıcı güncellendi!",
|
||||||
"username": "Kullanıcı adı",
|
"username": "Kullanıcı adı",
|
||||||
"users": "Kullanıcılar"
|
"users": "Kullanıcılar",
|
||||||
|
"currentPassword": "Your Current Password"
|
||||||
},
|
},
|
||||||
"sidebar": {
|
"sidebar": {
|
||||||
"help": "Yardım",
|
"help": "Yardım",
|
||||||
|
|||||||
@ -43,6 +43,7 @@
|
|||||||
"upload": "Вивантажити",
|
"upload": "Вивантажити",
|
||||||
"openFile": "Відкрити файл",
|
"openFile": "Відкрити файл",
|
||||||
"discardChanges": "Скасувати",
|
"discardChanges": "Скасувати",
|
||||||
|
"stopSearch": "Stop searching",
|
||||||
"saveChanges": "Save changes",
|
"saveChanges": "Save changes",
|
||||||
"editAsText": "Edit as Text",
|
"editAsText": "Edit as Text",
|
||||||
"increaseFontSize": "Increase font size",
|
"increaseFontSize": "Increase font size",
|
||||||
@ -257,7 +258,8 @@
|
|||||||
"userManagement": "Керування користувачами",
|
"userManagement": "Керування користувачами",
|
||||||
"userUpdated": "Користувача змінено!",
|
"userUpdated": "Користувача змінено!",
|
||||||
"username": "Ім'я користувача",
|
"username": "Ім'я користувача",
|
||||||
"users": "Користувачі"
|
"users": "Користувачі",
|
||||||
|
"currentPassword": "Your Current Password"
|
||||||
},
|
},
|
||||||
"sidebar": {
|
"sidebar": {
|
||||||
"help": "Допомога",
|
"help": "Допомога",
|
||||||
|
|||||||
@ -43,6 +43,7 @@
|
|||||||
"upload": "Tải lên",
|
"upload": "Tải lên",
|
||||||
"openFile": "Mở tệp",
|
"openFile": "Mở tệp",
|
||||||
"discardChanges": "Hủy bỏ thay đổi",
|
"discardChanges": "Hủy bỏ thay đổi",
|
||||||
|
"stopSearch": "Stop searching",
|
||||||
"saveChanges": "Save changes",
|
"saveChanges": "Save changes",
|
||||||
"editAsText": "Edit as Text",
|
"editAsText": "Edit as Text",
|
||||||
"increaseFontSize": "Increase font size",
|
"increaseFontSize": "Increase font size",
|
||||||
@ -257,7 +258,8 @@
|
|||||||
"userManagement": "Quản lý người dùng",
|
"userManagement": "Quản lý người dùng",
|
||||||
"userUpdated": "Người dùng đã được cập nhật!",
|
"userUpdated": "Người dùng đã được cập nhật!",
|
||||||
"username": "Tên người dùng",
|
"username": "Tên người dùng",
|
||||||
"users": "Người dùng"
|
"users": "Người dùng",
|
||||||
|
"currentPassword": "Your Current Password"
|
||||||
},
|
},
|
||||||
"sidebar": {
|
"sidebar": {
|
||||||
"help": "Trợ giúp",
|
"help": "Trợ giúp",
|
||||||
|
|||||||
@ -43,6 +43,7 @@
|
|||||||
"upload": "上传",
|
"upload": "上传",
|
||||||
"openFile": "打开文件",
|
"openFile": "打开文件",
|
||||||
"discardChanges": "放弃更改",
|
"discardChanges": "放弃更改",
|
||||||
|
"stopSearch": "Stop searching",
|
||||||
"saveChanges": "保存更改",
|
"saveChanges": "保存更改",
|
||||||
"editAsText": "以文本形式编辑",
|
"editAsText": "以文本形式编辑",
|
||||||
"increaseFontSize": "增大字体大小",
|
"increaseFontSize": "增大字体大小",
|
||||||
@ -82,11 +83,11 @@
|
|||||||
"csvTooLarge": "CSV文件大到无法预览(>5MB)。请下载查看。",
|
"csvTooLarge": "CSV文件大到无法预览(>5MB)。请下载查看。",
|
||||||
"csvLoadFailed": "加载 CSV 文件失败。",
|
"csvLoadFailed": "加载 CSV 文件失败。",
|
||||||
"showingRows": "正在显示 {count} 行",
|
"showingRows": "正在显示 {count} 行",
|
||||||
"columnSeparator": "Column Separator",
|
"columnSeparator": "列分隔符",
|
||||||
"csvSeparators": {
|
"csvSeparators": {
|
||||||
"comma": "Comma (,)",
|
"comma": "逗号 (,)",
|
||||||
"semicolon": "Semicolon (;)",
|
"semicolon": "分号 (;)",
|
||||||
"both": "Both (,) and (;)"
|
"both": "逗号 (,) 和分号 (;)"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"help": {
|
"help": {
|
||||||
@ -116,7 +117,7 @@
|
|||||||
"wrongCredentials": "用户名或密码错误",
|
"wrongCredentials": "用户名或密码错误",
|
||||||
"passwordTooShort": "密码必须至少包含 {min} 个字符",
|
"passwordTooShort": "密码必须至少包含 {min} 个字符",
|
||||||
"logout_reasons": {
|
"logout_reasons": {
|
||||||
"inactivity": "由于未活动,您已登出。"
|
"inactivity": "由于未活动,您已登出。"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"permanent": "永久",
|
"permanent": "永久",
|
||||||
@ -171,7 +172,7 @@
|
|||||||
"video": "视频"
|
"video": "视频"
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"aceEditorTheme": "Ace editor 主题",
|
"aceEditorTheme": "Ace编辑器主题",
|
||||||
"admin": "管理员",
|
"admin": "管理员",
|
||||||
"administrator": "管理员",
|
"administrator": "管理员",
|
||||||
"allowCommands": "执行命令(Shell 命令)",
|
"allowCommands": "执行命令(Shell 命令)",
|
||||||
@ -257,7 +258,8 @@
|
|||||||
"userManagement": "用户管理",
|
"userManagement": "用户管理",
|
||||||
"userUpdated": "用户已更新!",
|
"userUpdated": "用户已更新!",
|
||||||
"username": "用户名",
|
"username": "用户名",
|
||||||
"users": "用户"
|
"users": "用户",
|
||||||
|
"currentPassword": "Your Current Password"
|
||||||
},
|
},
|
||||||
"sidebar": {
|
"sidebar": {
|
||||||
"help": "帮助",
|
"help": "帮助",
|
||||||
|
|||||||
@ -43,6 +43,7 @@
|
|||||||
"upload": "上傳",
|
"upload": "上傳",
|
||||||
"openFile": "開啟檔案",
|
"openFile": "開啟檔案",
|
||||||
"discardChanges": "放棄變更",
|
"discardChanges": "放棄變更",
|
||||||
|
"stopSearch": "Stop searching",
|
||||||
"saveChanges": "Save changes",
|
"saveChanges": "Save changes",
|
||||||
"editAsText": "Edit as Text",
|
"editAsText": "Edit as Text",
|
||||||
"increaseFontSize": "Increase font size",
|
"increaseFontSize": "Increase font size",
|
||||||
@ -257,7 +258,8 @@
|
|||||||
"userManagement": "使用者管理",
|
"userManagement": "使用者管理",
|
||||||
"userUpdated": "使用者已更新!",
|
"userUpdated": "使用者已更新!",
|
||||||
"username": "使用者名稱",
|
"username": "使用者名稱",
|
||||||
"users": "使用者"
|
"users": "使用者",
|
||||||
|
"currentPassword": "Your Current Password"
|
||||||
},
|
},
|
||||||
"sidebar": {
|
"sidebar": {
|
||||||
"help": "幫助",
|
"help": "幫助",
|
||||||
|
|||||||
2
frontend/src/types/settings.d.ts
vendored
2
frontend/src/types/settings.d.ts
vendored
@ -5,6 +5,7 @@ interface ISettings {
|
|||||||
minimumPasswordLength: number;
|
minimumPasswordLength: number;
|
||||||
userHomeBasePath: string;
|
userHomeBasePath: string;
|
||||||
defaults: SettingsDefaults;
|
defaults: SettingsDefaults;
|
||||||
|
authMethod: string;
|
||||||
rules: any[];
|
rules: any[];
|
||||||
branding: SettingsBranding;
|
branding: SettingsBranding;
|
||||||
tus: SettingsTus;
|
tus: SettingsTus;
|
||||||
@ -17,6 +18,7 @@ interface SettingsDefaults {
|
|||||||
locale: string;
|
locale: string;
|
||||||
viewMode: ViewModeType;
|
viewMode: ViewModeType;
|
||||||
singleClick: boolean;
|
singleClick: boolean;
|
||||||
|
redirectAfterCopyMove: boolean;
|
||||||
sorting: Sorting;
|
sorting: Sorting;
|
||||||
perm: Permissions;
|
perm: Permissions;
|
||||||
commands: any[];
|
commands: any[];
|
||||||
|
|||||||
2
frontend/src/types/user.d.ts
vendored
2
frontend/src/types/user.d.ts
vendored
@ -10,6 +10,7 @@ interface IUser {
|
|||||||
lockPassword: boolean;
|
lockPassword: boolean;
|
||||||
hideDotfiles: boolean;
|
hideDotfiles: boolean;
|
||||||
singleClick: boolean;
|
singleClick: boolean;
|
||||||
|
redirectAfterCopyMove: boolean;
|
||||||
dateFormat: boolean;
|
dateFormat: boolean;
|
||||||
viewMode: ViewModeType;
|
viewMode: ViewModeType;
|
||||||
sorting?: Sorting;
|
sorting?: Sorting;
|
||||||
@ -30,6 +31,7 @@ interface IUserForm {
|
|||||||
lockPassword?: boolean;
|
lockPassword?: boolean;
|
||||||
hideDotfiles?: boolean;
|
hideDotfiles?: boolean;
|
||||||
singleClick?: boolean;
|
singleClick?: boolean;
|
||||||
|
redirectAfterCopyMove?: boolean;
|
||||||
dateFormat?: boolean;
|
dateFormat?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -159,6 +159,7 @@
|
|||||||
ref="listing"
|
ref="listing"
|
||||||
class="file-icons"
|
class="file-icons"
|
||||||
:class="authStore.user?.viewMode ?? ''"
|
:class="authStore.user?.viewMode ?? ''"
|
||||||
|
@click="handleEmptyAreaClick"
|
||||||
>
|
>
|
||||||
<div>
|
<div>
|
||||||
<div class="item header">
|
<div class="item header">
|
||||||
@ -1051,4 +1052,18 @@ const showContextMenu = (event: MouseEvent) => {
|
|||||||
const hideContextMenu = () => {
|
const hideContextMenu = () => {
|
||||||
isContextMenuVisible.value = false;
|
isContextMenuVisible.value = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const handleEmptyAreaClick = (e: MouseEvent) => {
|
||||||
|
const target = e.target;
|
||||||
|
if (!(target instanceof HTMLElement)) return;
|
||||||
|
|
||||||
|
if (target.closest("item") || target.closest(".item")) return;
|
||||||
|
|
||||||
|
fileStore.selected = [];
|
||||||
|
};
|
||||||
</script>
|
</script>
|
||||||
|
<style scoped>
|
||||||
|
#listing {
|
||||||
|
min-height: calc(100vh - 8rem);
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|||||||
@ -15,6 +15,14 @@
|
|||||||
<input type="checkbox" name="singleClick" v-model="singleClick" />
|
<input type="checkbox" name="singleClick" v-model="singleClick" />
|
||||||
{{ t("settings.singleClick") }}
|
{{ t("settings.singleClick") }}
|
||||||
</p>
|
</p>
|
||||||
|
<p>
|
||||||
|
<input
|
||||||
|
type="checkbox"
|
||||||
|
name="redirectAfterCopyMove"
|
||||||
|
v-model="redirectAfterCopyMove"
|
||||||
|
/>
|
||||||
|
{{ t("settings.redirectAfterCopyMove") }}
|
||||||
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<input type="checkbox" name="dateFormat" v-model="dateFormat" />
|
<input type="checkbox" name="dateFormat" v-model="dateFormat" />
|
||||||
{{ t("settings.setDateFormat") }}
|
{{ t("settings.setDateFormat") }}
|
||||||
@ -44,7 +52,7 @@
|
|||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="column">
|
<div v-if="!noAuth" class="column">
|
||||||
<form
|
<form
|
||||||
class="card"
|
class="card"
|
||||||
v-if="!authStore.user?.lockPassword"
|
v-if="!authStore.user?.lockPassword"
|
||||||
@ -69,6 +77,15 @@
|
|||||||
v-model="passwordConf"
|
v-model="passwordConf"
|
||||||
name="passwordConf"
|
name="passwordConf"
|
||||||
/>
|
/>
|
||||||
|
<input
|
||||||
|
v-if="isCurrentPasswordRequired"
|
||||||
|
:class="passwordClass"
|
||||||
|
type="password"
|
||||||
|
:placeholder="t('settings.currentPassword')"
|
||||||
|
v-model="currentPassword"
|
||||||
|
name="current_password"
|
||||||
|
autocomplete="current-password"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="card-action">
|
<div class="card-action">
|
||||||
@ -92,6 +109,7 @@ import AceEditorTheme from "@/components/settings/AceEditorTheme.vue";
|
|||||||
import Languages from "@/components/settings/Languages.vue";
|
import Languages from "@/components/settings/Languages.vue";
|
||||||
import { computed, inject, onMounted, ref } from "vue";
|
import { computed, inject, onMounted, ref } from "vue";
|
||||||
import { useI18n } from "vue-i18n";
|
import { useI18n } from "vue-i18n";
|
||||||
|
import { authMethod, noAuth } from "@/utils/constants";
|
||||||
|
|
||||||
const layoutStore = useLayoutStore();
|
const layoutStore = useLayoutStore();
|
||||||
const authStore = useAuthStore();
|
const authStore = useAuthStore();
|
||||||
@ -102,8 +120,11 @@ const $showError = inject<IToastError>("$showError")!;
|
|||||||
|
|
||||||
const password = ref<string>("");
|
const password = ref<string>("");
|
||||||
const passwordConf = ref<string>("");
|
const passwordConf = ref<string>("");
|
||||||
|
const currentPassword = ref<string>("");
|
||||||
|
const isCurrentPasswordRequired = ref<boolean>(false);
|
||||||
const hideDotfiles = ref<boolean>(false);
|
const hideDotfiles = ref<boolean>(false);
|
||||||
const singleClick = ref<boolean>(false);
|
const singleClick = ref<boolean>(false);
|
||||||
|
const redirectAfterCopyMove = ref<boolean>(false);
|
||||||
const dateFormat = ref<boolean>(false);
|
const dateFormat = ref<boolean>(false);
|
||||||
const locale = ref<string>("");
|
const locale = ref<string>("");
|
||||||
const aceEditorTheme = ref<string>("");
|
const aceEditorTheme = ref<string>("");
|
||||||
@ -128,9 +149,12 @@ onMounted(async () => {
|
|||||||
locale.value = authStore.user.locale;
|
locale.value = authStore.user.locale;
|
||||||
hideDotfiles.value = authStore.user.hideDotfiles;
|
hideDotfiles.value = authStore.user.hideDotfiles;
|
||||||
singleClick.value = authStore.user.singleClick;
|
singleClick.value = authStore.user.singleClick;
|
||||||
|
redirectAfterCopyMove.value = authStore.user.redirectAfterCopyMove;
|
||||||
dateFormat.value = authStore.user.dateFormat;
|
dateFormat.value = authStore.user.dateFormat;
|
||||||
aceEditorTheme.value = authStore.user.aceEditorTheme;
|
aceEditorTheme.value = authStore.user.aceEditorTheme;
|
||||||
layoutStore.loading = false;
|
layoutStore.loading = false;
|
||||||
|
isCurrentPasswordRequired.value = authMethod == "json";
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -140,6 +164,7 @@ const updatePassword = async (event: Event) => {
|
|||||||
if (
|
if (
|
||||||
password.value !== passwordConf.value ||
|
password.value !== passwordConf.value ||
|
||||||
password.value === "" ||
|
password.value === "" ||
|
||||||
|
currentPassword.value === "" ||
|
||||||
authStore.user === null
|
authStore.user === null
|
||||||
) {
|
) {
|
||||||
return;
|
return;
|
||||||
@ -151,7 +176,7 @@ const updatePassword = async (event: Event) => {
|
|||||||
id: authStore.user.id,
|
id: authStore.user.id,
|
||||||
password: password.value,
|
password: password.value,
|
||||||
};
|
};
|
||||||
await api.update(data, ["password"]);
|
await api.update(data, ["password"], currentPassword.value);
|
||||||
authStore.updateUser(data);
|
authStore.updateUser(data);
|
||||||
$showSuccess(t("settings.passwordUpdated"));
|
$showSuccess(t("settings.passwordUpdated"));
|
||||||
} catch (e: any) {
|
} catch (e: any) {
|
||||||
@ -172,6 +197,7 @@ const updateSettings = async (event: Event) => {
|
|||||||
locale: locale.value,
|
locale: locale.value,
|
||||||
hideDotfiles: hideDotfiles.value,
|
hideDotfiles: hideDotfiles.value,
|
||||||
singleClick: singleClick.value,
|
singleClick: singleClick.value,
|
||||||
|
redirectAfterCopyMove: redirectAfterCopyMove.value,
|
||||||
dateFormat: dateFormat.value,
|
dateFormat: dateFormat.value,
|
||||||
aceEditorTheme: aceEditorTheme.value,
|
aceEditorTheme: aceEditorTheme.value,
|
||||||
};
|
};
|
||||||
@ -180,6 +206,7 @@ const updateSettings = async (event: Event) => {
|
|||||||
"locale",
|
"locale",
|
||||||
"hideDotfiles",
|
"hideDotfiles",
|
||||||
"singleClick",
|
"singleClick",
|
||||||
|
"redirectAfterCopyMove",
|
||||||
"dateFormat",
|
"dateFormat",
|
||||||
"aceEditorTheme",
|
"aceEditorTheme",
|
||||||
]);
|
]);
|
||||||
|
|||||||
@ -15,6 +15,19 @@
|
|||||||
:isDefault="false"
|
:isDefault="false"
|
||||||
:isNew="isNew"
|
:isNew="isNew"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
<p v-if="isCurrentPasswordRequired">
|
||||||
|
<label for="currentPassword">{{
|
||||||
|
t("settings.currentPassword")
|
||||||
|
}}</label>
|
||||||
|
<input
|
||||||
|
class="input input--block"
|
||||||
|
type="password"
|
||||||
|
v-model="currentPassword"
|
||||||
|
id="currentPassword"
|
||||||
|
autocomplete="current-password"
|
||||||
|
/>
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="card-action">
|
<div class="card-action">
|
||||||
@ -63,6 +76,8 @@ const error = ref<StatusError>();
|
|||||||
const originalUser = ref<IUser>();
|
const originalUser = ref<IUser>();
|
||||||
const user = ref<IUser>();
|
const user = ref<IUser>();
|
||||||
const createUserDir = ref<boolean>(false);
|
const createUserDir = ref<boolean>(false);
|
||||||
|
const currentPassword = ref<string>("");
|
||||||
|
const isCurrentPasswordRequired = ref<boolean>(false);
|
||||||
|
|
||||||
const $showError = inject<IToastError>("$showError")!;
|
const $showError = inject<IToastError>("$showError")!;
|
||||||
const $showSuccess = inject<IToastSuccess>("$showSuccess")!;
|
const $showSuccess = inject<IToastSuccess>("$showSuccess")!;
|
||||||
@ -90,7 +105,12 @@ const fetchData = async () => {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
if (isNew.value) {
|
if (isNew.value) {
|
||||||
const { defaults, createUserDir: _createUserDir } = await settings.get();
|
const {
|
||||||
|
authMethod,
|
||||||
|
defaults,
|
||||||
|
createUserDir: _createUserDir,
|
||||||
|
} = await settings.get();
|
||||||
|
isCurrentPasswordRequired.value = authMethod == "json";
|
||||||
createUserDir.value = _createUserDir;
|
createUserDir.value = _createUserDir;
|
||||||
user.value = {
|
user.value = {
|
||||||
...defaults,
|
...defaults,
|
||||||
@ -101,6 +121,8 @@ const fetchData = async () => {
|
|||||||
id: 0,
|
id: 0,
|
||||||
};
|
};
|
||||||
} else {
|
} else {
|
||||||
|
const { authMethod } = await settings.get();
|
||||||
|
isCurrentPasswordRequired.value = authMethod == "json";
|
||||||
const id = Array.isArray(route.params.id)
|
const id = Array.isArray(route.params.id)
|
||||||
? route.params.id.join("")
|
? route.params.id.join("")
|
||||||
: route.params.id;
|
: route.params.id;
|
||||||
@ -151,11 +173,11 @@ const save = async (event: Event) => {
|
|||||||
...user.value,
|
...user.value,
|
||||||
};
|
};
|
||||||
|
|
||||||
const loc = await api.create(newUser);
|
const loc = await api.create(newUser, currentPassword.value);
|
||||||
router.push({ path: loc || "/settings/users" });
|
router.push({ path: loc || "/settings/users" });
|
||||||
$showSuccess(t("settings.userCreated"));
|
$showSuccess(t("settings.userCreated"));
|
||||||
} else {
|
} else {
|
||||||
await api.update(user.value);
|
await api.update(user.value, ["all"], currentPassword.value);
|
||||||
|
|
||||||
if (user.value.id === authStore.user?.id) {
|
if (user.value.id === authStore.user?.id) {
|
||||||
authStore.updateUser(user.value);
|
authStore.updateUser(user.value);
|
||||||
|
|||||||
6
go.mod
6
go.mod
@ -12,12 +12,12 @@ require (
|
|||||||
github.com/gorilla/mux v1.8.1
|
github.com/gorilla/mux v1.8.1
|
||||||
github.com/gorilla/websocket v1.5.3
|
github.com/gorilla/websocket v1.5.3
|
||||||
github.com/jellydator/ttlcache/v3 v3.4.0
|
github.com/jellydator/ttlcache/v3 v3.4.0
|
||||||
github.com/maruel/natural v1.2.1
|
github.com/maruel/natural v1.3.0
|
||||||
github.com/marusama/semaphore/v2 v2.5.0
|
github.com/marusama/semaphore/v2 v2.5.0
|
||||||
github.com/mholt/archives v0.1.5
|
github.com/mholt/archives v0.1.5
|
||||||
github.com/mitchellh/go-homedir v1.1.0
|
github.com/mitchellh/go-homedir v1.1.0
|
||||||
github.com/samber/lo v1.52.0
|
github.com/samber/lo v1.52.0
|
||||||
github.com/shirou/gopsutil/v4 v4.25.11
|
github.com/shirou/gopsutil/v4 v4.25.12
|
||||||
github.com/spf13/afero v1.15.0
|
github.com/spf13/afero v1.15.0
|
||||||
github.com/spf13/cobra v1.10.2
|
github.com/spf13/cobra v1.10.2
|
||||||
github.com/spf13/pflag v1.0.10
|
github.com/spf13/pflag v1.0.10
|
||||||
@ -26,7 +26,7 @@ require (
|
|||||||
github.com/tomasen/realip v0.0.0-20180522021738-f0c99a92ddce
|
github.com/tomasen/realip v0.0.0-20180522021738-f0c99a92ddce
|
||||||
golang.org/x/crypto v0.46.0
|
golang.org/x/crypto v0.46.0
|
||||||
golang.org/x/image v0.34.0
|
golang.org/x/image v0.34.0
|
||||||
golang.org/x/text v0.32.0
|
golang.org/x/text v0.33.0
|
||||||
gopkg.in/natefinch/lumberjack.v2 v2.2.1
|
gopkg.in/natefinch/lumberjack.v2 v2.2.1
|
||||||
gopkg.in/yaml.v3 v3.0.1
|
gopkg.in/yaml.v3 v3.0.1
|
||||||
)
|
)
|
||||||
|
|||||||
12
go.sum
12
go.sum
@ -169,8 +169,8 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
|||||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||||
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
||||||
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
|
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
|
||||||
github.com/maruel/natural v1.2.1 h1:G/y4pwtTA07lbQsMefvsmEO0VN0NfqpxprxXDM4R/4o=
|
github.com/maruel/natural v1.3.0 h1:VsmCsBmEyrR46RomtgHs5hbKADGRVtliHTyCOLFBpsg=
|
||||||
github.com/maruel/natural v1.2.1/go.mod h1:v+Rfd79xlw1AgVBjbO0BEQmptqb5HvL/k9GRHB7ZKEg=
|
github.com/maruel/natural v1.3.0/go.mod h1:v+Rfd79xlw1AgVBjbO0BEQmptqb5HvL/k9GRHB7ZKEg=
|
||||||
github.com/marusama/semaphore/v2 v2.5.0 h1:o/1QJD9DBYOWRnDhPwDVAXQn6mQYD0gZaS1Tpx6DJGM=
|
github.com/marusama/semaphore/v2 v2.5.0 h1:o/1QJD9DBYOWRnDhPwDVAXQn6mQYD0gZaS1Tpx6DJGM=
|
||||||
github.com/marusama/semaphore/v2 v2.5.0/go.mod h1:z9nMiNUekt/LTpTUQdpp+4sJeYqUGpwMHfW0Z8V8fnQ=
|
github.com/marusama/semaphore/v2 v2.5.0/go.mod h1:z9nMiNUekt/LTpTUQdpp+4sJeYqUGpwMHfW0Z8V8fnQ=
|
||||||
github.com/mholt/archives v0.1.5 h1:Fh2hl1j7VEhc6DZs2DLMgiBNChUux154a1G+2esNvzQ=
|
github.com/mholt/archives v0.1.5 h1:Fh2hl1j7VEhc6DZs2DLMgiBNChUux154a1G+2esNvzQ=
|
||||||
@ -204,8 +204,8 @@ github.com/sagikazarmark/locafero v0.11.0 h1:1iurJgmM9G3PA/I+wWYIOw/5SyBtxapeHDc
|
|||||||
github.com/sagikazarmark/locafero v0.11.0/go.mod h1:nVIGvgyzw595SUSUE6tvCp3YYTeHs15MvlmU87WwIik=
|
github.com/sagikazarmark/locafero v0.11.0/go.mod h1:nVIGvgyzw595SUSUE6tvCp3YYTeHs15MvlmU87WwIik=
|
||||||
github.com/samber/lo v1.52.0 h1:Rvi+3BFHES3A8meP33VPAxiBZX/Aws5RxrschYGjomw=
|
github.com/samber/lo v1.52.0 h1:Rvi+3BFHES3A8meP33VPAxiBZX/Aws5RxrschYGjomw=
|
||||||
github.com/samber/lo v1.52.0/go.mod h1:4+MXEGsJzbKGaUEQFKBq2xtfuznW9oz/WrgyzMzRoM0=
|
github.com/samber/lo v1.52.0/go.mod h1:4+MXEGsJzbKGaUEQFKBq2xtfuznW9oz/WrgyzMzRoM0=
|
||||||
github.com/shirou/gopsutil/v4 v4.25.11 h1:X53gB7muL9Gnwwo2evPSE+SfOrltMoR6V3xJAXZILTY=
|
github.com/shirou/gopsutil/v4 v4.25.12 h1:e7PvW/0RmJ8p8vPGJH4jvNkOyLmbkXgXW4m6ZPic6CY=
|
||||||
github.com/shirou/gopsutil/v4 v4.25.11/go.mod h1:EivAfP5x2EhLp2ovdpKSozecVXn1TmuG7SMzs/Wh4PU=
|
github.com/shirou/gopsutil/v4 v4.25.12/go.mod h1:EivAfP5x2EhLp2ovdpKSozecVXn1TmuG7SMzs/Wh4PU=
|
||||||
github.com/sorairolake/lzip-go v0.3.8 h1:j5Q2313INdTA80ureWYRhX+1K78mUXfMoPZCw/ivWik=
|
github.com/sorairolake/lzip-go v0.3.8 h1:j5Q2313INdTA80ureWYRhX+1K78mUXfMoPZCw/ivWik=
|
||||||
github.com/sorairolake/lzip-go v0.3.8/go.mod h1:JcBqGMV0frlxwrsE9sMWXDjqn3EeVf0/54YPsw66qkU=
|
github.com/sorairolake/lzip-go v0.3.8/go.mod h1:JcBqGMV0frlxwrsE9sMWXDjqn3EeVf0/54YPsw66qkU=
|
||||||
github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 h1:+jumHNA0Wrelhe64i8F6HNlS8pkoyMv5sreGx2Ry5Rw=
|
github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 h1:+jumHNA0Wrelhe64i8F6HNlS8pkoyMv5sreGx2Ry5Rw=
|
||||||
@ -372,8 +372,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.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
||||||
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
||||||
golang.org/x/text v0.32.0 h1:ZD01bjUt1FQ9WJ0ClOL5vxgxOI/sVCNgX1YtKwcY0mU=
|
golang.org/x/text v0.33.0 h1:B3njUFyqtHDUI5jMn1YIr5B0IE2U0qck04r6d4KPAxE=
|
||||||
golang.org/x/text v0.32.0/go.mod h1:o/rUWzghvpD5TXrTIBuJU77MTaN0ljMWE47kxGJQ7jY=
|
golang.org/x/text v0.33.0/go.mod h1:LuMebE6+rBincTi9+xWTY8TztLzKHc/9C1uBCG27+q8=
|
||||||
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/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
|
|||||||
@ -27,6 +27,7 @@ type userInfo struct {
|
|||||||
Locale string `json:"locale"`
|
Locale string `json:"locale"`
|
||||||
ViewMode users.ViewMode `json:"viewMode"`
|
ViewMode users.ViewMode `json:"viewMode"`
|
||||||
SingleClick bool `json:"singleClick"`
|
SingleClick bool `json:"singleClick"`
|
||||||
|
RedirectAfterCopyMove bool `json:"redirectAfterCopyMove"`
|
||||||
Perm users.Permissions `json:"perm"`
|
Perm users.Permissions `json:"perm"`
|
||||||
Commands []string `json:"commands"`
|
Commands []string `json:"commands"`
|
||||||
LockPassword bool `json:"lockPassword"`
|
LockPassword bool `json:"lockPassword"`
|
||||||
@ -208,6 +209,7 @@ func printToken(w http.ResponseWriter, _ *http.Request, d *data, user *users.Use
|
|||||||
Locale: user.Locale,
|
Locale: user.Locale,
|
||||||
ViewMode: user.ViewMode,
|
ViewMode: user.ViewMode,
|
||||||
SingleClick: user.SingleClick,
|
SingleClick: user.SingleClick,
|
||||||
|
RedirectAfterCopyMove: user.RedirectAfterCopyMove,
|
||||||
Perm: user.Perm,
|
Perm: user.Perm,
|
||||||
LockPassword: user.LockPassword,
|
LockPassword: user.LockPassword,
|
||||||
Commands: user.Commands,
|
Commands: user.Commands,
|
||||||
|
|||||||
@ -13,6 +13,7 @@ import (
|
|||||||
type modifyRequest struct {
|
type modifyRequest struct {
|
||||||
What string `json:"what"` // Answer to: what data type?
|
What string `json:"what"` // Answer to: what data type?
|
||||||
Which []string `json:"which"` // Answer to: which fields?
|
Which []string `json:"which"` // Answer to: which fields?
|
||||||
|
CurrentPassword string `json:"current_password"` // Answer to: user logged password
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewHandler(
|
func NewHandler(
|
||||||
|
|||||||
@ -41,6 +41,7 @@ var withHashFile = func(fn handleFunc) handleFunc {
|
|||||||
Modify: d.user.Perm.Modify,
|
Modify: d.user.Perm.Modify,
|
||||||
Expand: false,
|
Expand: false,
|
||||||
ReadHeader: d.server.TypeDetectionByHeader,
|
ReadHeader: d.server.TypeDetectionByHeader,
|
||||||
|
CalcImgRes: d.server.TypeDetectionByHeader,
|
||||||
Checker: d,
|
Checker: d,
|
||||||
Token: link.Token,
|
Token: link.Token,
|
||||||
})
|
})
|
||||||
|
|||||||
@ -123,6 +123,7 @@ func getFiles(d *data, path, commonPath string) ([]archives.FileInfo, error) {
|
|||||||
if path != commonPath {
|
if path != commonPath {
|
||||||
nameInArchive := strings.TrimPrefix(path, commonPath)
|
nameInArchive := strings.TrimPrefix(path, commonPath)
|
||||||
nameInArchive = strings.TrimPrefix(nameInArchive, string(filepath.Separator))
|
nameInArchive = strings.TrimPrefix(nameInArchive, string(filepath.Separator))
|
||||||
|
nameInArchive = filepath.ToSlash(nameInArchive)
|
||||||
|
|
||||||
archiveFiles = append(archiveFiles, archives.FileInfo{
|
archiveFiles = append(archiveFiles, archives.FileInfo{
|
||||||
FileInfo: info,
|
FileInfo: info,
|
||||||
|
|||||||
@ -280,6 +280,12 @@ func writeFile(afs afero.Fs, dst string, in io.Reader, fileMode, dirMode fs.File
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Sync the file to ensure all data is written to storage.
|
||||||
|
// to prevent file corruption.
|
||||||
|
if err := file.Sync(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
// Gets the info about the file.
|
// Gets the info about the file.
|
||||||
info, err := file.Stat()
|
info, err := file.Stat()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@ -1,28 +1,82 @@
|
|||||||
package fbhttp
|
package fbhttp
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
|
"encoding/json"
|
||||||
|
"errors"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
|
"sync"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/filebrowser/filebrowser/v2/search"
|
"github.com/filebrowser/filebrowser/v2/search"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const searchPingInterval = 5
|
||||||
|
|
||||||
var searchHandler = withUser(func(w http.ResponseWriter, r *http.Request, d *data) (int, error) {
|
var searchHandler = withUser(func(w http.ResponseWriter, r *http.Request, d *data) (int, error) {
|
||||||
response := []map[string]interface{}{}
|
response := make(chan map[string]interface{})
|
||||||
|
ctx, cancel := context.WithCancelCause(r.Context())
|
||||||
|
var wg sync.WaitGroup
|
||||||
|
wg.Add(1)
|
||||||
|
go func() {
|
||||||
|
defer wg.Done()
|
||||||
|
// Avoid connection timeout
|
||||||
|
timeout := time.NewTimer(searchPingInterval * time.Second)
|
||||||
|
defer timeout.Stop()
|
||||||
|
for {
|
||||||
|
var err error
|
||||||
|
var infoBytes []byte
|
||||||
|
select {
|
||||||
|
case info := <-response:
|
||||||
|
if info == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
infoBytes, err = json.Marshal(info)
|
||||||
|
case <-timeout.C:
|
||||||
|
// Send a heartbeat packet
|
||||||
|
infoBytes = nil
|
||||||
|
case <-ctx.Done():
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err != nil {
|
||||||
|
cancel(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
_, err = w.Write(infoBytes)
|
||||||
|
if err == nil {
|
||||||
|
_, err = w.Write([]byte("\n"))
|
||||||
|
}
|
||||||
|
if err != nil {
|
||||||
|
cancel(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if flusher, ok := w.(http.Flusher); ok {
|
||||||
|
flusher.Flush()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}()
|
||||||
query := r.URL.Query().Get("query")
|
query := r.URL.Query().Get("query")
|
||||||
|
|
||||||
err := search.Search(d.user.Fs, r.URL.Path, query, d, func(path string, f os.FileInfo) error {
|
err := search.Search(ctx, d.user.Fs, r.URL.Path, query, d, func(path string, f os.FileInfo) error {
|
||||||
response = append(response, map[string]interface{}{
|
select {
|
||||||
|
case <-ctx.Done():
|
||||||
|
case response <- map[string]interface{}{
|
||||||
"dir": f.IsDir(),
|
"dir": f.IsDir(),
|
||||||
"path": path,
|
"path": path,
|
||||||
|
}:
|
||||||
|
}
|
||||||
|
return context.Cause(ctx)
|
||||||
})
|
})
|
||||||
|
close(response)
|
||||||
return nil
|
wg.Wait()
|
||||||
})
|
if err == nil {
|
||||||
|
err = context.Cause(ctx)
|
||||||
if err != nil {
|
}
|
||||||
|
// ignore cancellation errors from user aborts
|
||||||
|
if err != nil && !errors.Is(err, context.Canceled) {
|
||||||
return http.StatusInternalServerError, err
|
return http.StatusInternalServerError, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return renderJSON(w, r, response)
|
return 0, nil
|
||||||
})
|
})
|
||||||
|
|||||||
@ -15,6 +15,7 @@ type settingsData struct {
|
|||||||
MinimumPasswordLength uint `json:"minimumPasswordLength"`
|
MinimumPasswordLength uint `json:"minimumPasswordLength"`
|
||||||
UserHomeBasePath string `json:"userHomeBasePath"`
|
UserHomeBasePath string `json:"userHomeBasePath"`
|
||||||
Defaults settings.UserDefaults `json:"defaults"`
|
Defaults settings.UserDefaults `json:"defaults"`
|
||||||
|
AuthMethod settings.AuthMethod `json:"authMethod"`
|
||||||
Rules []rules.Rule `json:"rules"`
|
Rules []rules.Rule `json:"rules"`
|
||||||
Branding settings.Branding `json:"branding"`
|
Branding settings.Branding `json:"branding"`
|
||||||
Tus settings.Tus `json:"tus"`
|
Tus settings.Tus `json:"tus"`
|
||||||
@ -30,6 +31,7 @@ var settingsGetHandler = withAdmin(func(w http.ResponseWriter, r *http.Request,
|
|||||||
MinimumPasswordLength: d.settings.MinimumPasswordLength,
|
MinimumPasswordLength: d.settings.MinimumPasswordLength,
|
||||||
UserHomeBasePath: d.settings.UserHomeBasePath,
|
UserHomeBasePath: d.settings.UserHomeBasePath,
|
||||||
Defaults: d.settings.Defaults,
|
Defaults: d.settings.Defaults,
|
||||||
|
AuthMethod: d.settings.AuthMethod,
|
||||||
Rules: d.settings.Rules,
|
Rules: d.settings.Rules,
|
||||||
Branding: d.settings.Branding,
|
Branding: d.settings.Branding,
|
||||||
Tus: d.settings.Tus,
|
Tus: d.settings.Tus,
|
||||||
|
|||||||
@ -256,6 +256,12 @@ func tusPatchHandler() handleFunc {
|
|||||||
return http.StatusInternalServerError, fmt.Errorf("could not write to file: %w", err)
|
return http.StatusInternalServerError, fmt.Errorf("could not write to file: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Sync the file to ensure all data is written to storage
|
||||||
|
// to prevent file corruption.
|
||||||
|
if err := openFile.Sync(); err != nil {
|
||||||
|
return http.StatusInternalServerError, fmt.Errorf("could not sync file: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
newOffset := uploadOffset + bytesWritten
|
newOffset := uploadOffset + bytesWritten
|
||||||
w.Header().Set("Upload-Offset", strconv.FormatInt(newOffset, 10))
|
w.Header().Set("Upload-Offset", strconv.FormatInt(newOffset, 10))
|
||||||
|
|
||||||
|
|||||||
@ -12,6 +12,7 @@ import (
|
|||||||
"golang.org/x/text/cases"
|
"golang.org/x/text/cases"
|
||||||
"golang.org/x/text/language"
|
"golang.org/x/text/language"
|
||||||
|
|
||||||
|
"github.com/filebrowser/filebrowser/v2/auth"
|
||||||
fberrors "github.com/filebrowser/filebrowser/v2/errors"
|
fberrors "github.com/filebrowser/filebrowser/v2/errors"
|
||||||
"github.com/filebrowser/filebrowser/v2/users"
|
"github.com/filebrowser/filebrowser/v2/users"
|
||||||
)
|
)
|
||||||
@ -117,6 +118,12 @@ var userPostHandler = withAdmin(func(w http.ResponseWriter, r *http.Request, d *
|
|||||||
return http.StatusBadRequest, err
|
return http.StatusBadRequest, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if d.settings.AuthMethod == auth.MethodJSONAuth {
|
||||||
|
if !users.CheckPwd(req.CurrentPassword, d.user.Password) {
|
||||||
|
return http.StatusBadRequest, fberrors.ErrCurrentPasswordIncorrect
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if len(req.Which) != 0 {
|
if len(req.Which) != 0 {
|
||||||
return http.StatusBadRequest, nil
|
return http.StatusBadRequest, nil
|
||||||
}
|
}
|
||||||
@ -153,6 +160,27 @@ var userPutHandler = withSelfOrAdmin(func(w http.ResponseWriter, r *http.Request
|
|||||||
return http.StatusBadRequest, err
|
return http.StatusBadRequest, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if d.settings.AuthMethod == auth.MethodJSONAuth {
|
||||||
|
var sensibleFields = map[string]struct{}{
|
||||||
|
"all": {},
|
||||||
|
"username": {},
|
||||||
|
"password": {},
|
||||||
|
"scope": {},
|
||||||
|
"lockPassword": {},
|
||||||
|
"commands": {},
|
||||||
|
"perm": {},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, field := range req.Which {
|
||||||
|
if _, ok := sensibleFields[field]; ok {
|
||||||
|
if !users.CheckPwd(req.CurrentPassword, d.user.Password) {
|
||||||
|
return http.StatusBadRequest, fberrors.ErrCurrentPasswordIncorrect
|
||||||
|
}
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if req.Data.ID != d.raw.(uint) {
|
if req.Data.ID != d.raw.(uint) {
|
||||||
return http.StatusBadRequest, nil
|
return http.StatusBadRequest, nil
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
package search
|
package search
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
"os"
|
"os"
|
||||||
"path"
|
"path"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
@ -18,13 +19,17 @@ type searchOptions struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Search searches for a query in a fs.
|
// Search searches for a query in a fs.
|
||||||
func Search(fs afero.Fs, scope, query string, checker rules.Checker, found func(path string, f os.FileInfo) error) error {
|
func Search(ctx context.Context,
|
||||||
|
fs afero.Fs, scope, query string, checker rules.Checker, found func(path string, f os.FileInfo) error) error {
|
||||||
search := parseSearch(query)
|
search := parseSearch(query)
|
||||||
|
|
||||||
scope = filepath.ToSlash(filepath.Clean(scope))
|
scope = filepath.ToSlash(filepath.Clean(scope))
|
||||||
scope = path.Join("/", scope)
|
scope = path.Join("/", scope)
|
||||||
|
|
||||||
return afero.Walk(fs, scope, func(fPath string, f os.FileInfo, _ error) error {
|
return afero.Walk(fs, scope, func(fPath string, f os.FileInfo, _ error) error {
|
||||||
|
if ctx.Err() != nil {
|
||||||
|
return context.Cause(ctx)
|
||||||
|
}
|
||||||
fPath = filepath.ToSlash(filepath.Clean(fPath))
|
fPath = filepath.ToSlash(filepath.Clean(fPath))
|
||||||
fPath = path.Join("/", fPath)
|
fPath = path.Join("/", fPath)
|
||||||
relativePath := strings.TrimPrefix(fPath, scope)
|
relativePath := strings.TrimPrefix(fPath, scope)
|
||||||
|
|||||||
@ -12,6 +12,7 @@ type UserDefaults struct {
|
|||||||
Locale string `json:"locale"`
|
Locale string `json:"locale"`
|
||||||
ViewMode users.ViewMode `json:"viewMode"`
|
ViewMode users.ViewMode `json:"viewMode"`
|
||||||
SingleClick bool `json:"singleClick"`
|
SingleClick bool `json:"singleClick"`
|
||||||
|
RedirectAfterCopyMove bool `json:"redirectAfterCopyMove"`
|
||||||
Sorting files.Sorting `json:"sorting"`
|
Sorting files.Sorting `json:"sorting"`
|
||||||
Perm users.Permissions `json:"perm"`
|
Perm users.Permissions `json:"perm"`
|
||||||
Commands []string `json:"commands"`
|
Commands []string `json:"commands"`
|
||||||
@ -26,6 +27,7 @@ func (d *UserDefaults) Apply(u *users.User) {
|
|||||||
u.Locale = d.Locale
|
u.Locale = d.Locale
|
||||||
u.ViewMode = d.ViewMode
|
u.ViewMode = d.ViewMode
|
||||||
u.SingleClick = d.SingleClick
|
u.SingleClick = d.SingleClick
|
||||||
|
u.RedirectAfterCopyMove = d.RedirectAfterCopyMove
|
||||||
u.Perm = d.Perm
|
u.Perm = d.Perm
|
||||||
u.Sorting = d.Sorting
|
u.Sorting = d.Sorting
|
||||||
u.Commands = d.Commands
|
u.Commands = d.Commands
|
||||||
|
|||||||
@ -59,6 +59,7 @@ type Server struct {
|
|||||||
ResizePreview bool `json:"resizePreview"`
|
ResizePreview bool `json:"resizePreview"`
|
||||||
EnableExec bool `json:"enableExec"`
|
EnableExec bool `json:"enableExec"`
|
||||||
TypeDetectionByHeader bool `json:"typeDetectionByHeader"`
|
TypeDetectionByHeader bool `json:"typeDetectionByHeader"`
|
||||||
|
ImageResolutionCal bool `json:"imageResolutionCalculation"`
|
||||||
AuthHook string `json:"authHook"`
|
AuthHook string `json:"authHook"`
|
||||||
TokenExpirationTime string `json:"tokenExpirationTime"`
|
TokenExpirationTime string `json:"tokenExpirationTime"`
|
||||||
}
|
}
|
||||||
|
|||||||
@ -28,6 +28,7 @@ type User struct {
|
|||||||
LockPassword bool `json:"lockPassword"`
|
LockPassword bool `json:"lockPassword"`
|
||||||
ViewMode ViewMode `json:"viewMode"`
|
ViewMode ViewMode `json:"viewMode"`
|
||||||
SingleClick bool `json:"singleClick"`
|
SingleClick bool `json:"singleClick"`
|
||||||
|
RedirectAfterCopyMove bool `json:"redirectAfterCopyMove"`
|
||||||
Perm Permissions `json:"perm"`
|
Perm Permissions `json:"perm"`
|
||||||
Commands []string `json:"commands"`
|
Commands []string `json:"commands"`
|
||||||
Sorting files.Sorting `json:"sorting"`
|
Sorting files.Sorting `json:"sorting"`
|
||||||
|
|||||||
@ -36,6 +36,7 @@ filebrowser config init [flags]
|
|||||||
--dateFormat use date format (true for absolute time, false for relative)
|
--dateFormat use date format (true for absolute time, false for relative)
|
||||||
--dirMode string mode bits that new directories are created with (default "0o750")
|
--dirMode string mode bits that new directories are created with (default "0o750")
|
||||||
--disableExec disables Command Runner feature (default true)
|
--disableExec disables Command Runner feature (default true)
|
||||||
|
--disableImageResolutionCalc disables image resolution calculation by reading image files
|
||||||
--disablePreviewResize disable resize of image previews
|
--disablePreviewResize disable resize of image previews
|
||||||
--disableThumbnails disable image thumbnails
|
--disableThumbnails disable image thumbnails
|
||||||
--disableTypeDetectionByHeader disables type detection by reading file headers
|
--disableTypeDetectionByHeader disables type detection by reading file headers
|
||||||
@ -60,6 +61,7 @@ filebrowser config init [flags]
|
|||||||
--recaptcha.host string use another host for ReCAPTCHA. recaptcha.net might be useful in China (default "https://www.google.com")
|
--recaptcha.host string use another host for ReCAPTCHA. recaptcha.net might be useful in China (default "https://www.google.com")
|
||||||
--recaptcha.key string ReCaptcha site key
|
--recaptcha.key string ReCaptcha site key
|
||||||
--recaptcha.secret string ReCaptcha secret
|
--recaptcha.secret string ReCaptcha secret
|
||||||
|
--redirectAfterCopyMove redirect to destination after copy/move
|
||||||
-r, --root string root to prepend to relative paths (default ".")
|
-r, --root string root to prepend to relative paths (default ".")
|
||||||
--scope string scope for users (default ".")
|
--scope string scope for users (default ".")
|
||||||
--shell string shell command to which other commands should be appended
|
--shell string shell command to which other commands should be appended
|
||||||
|
|||||||
@ -33,6 +33,7 @@ filebrowser config set [flags]
|
|||||||
--dateFormat use date format (true for absolute time, false for relative)
|
--dateFormat use date format (true for absolute time, false for relative)
|
||||||
--dirMode string mode bits that new directories are created with (default "0o750")
|
--dirMode string mode bits that new directories are created with (default "0o750")
|
||||||
--disableExec disables Command Runner feature (default true)
|
--disableExec disables Command Runner feature (default true)
|
||||||
|
--disableImageResolutionCalc disables image resolution calculation by reading image files
|
||||||
--disablePreviewResize disable resize of image previews
|
--disablePreviewResize disable resize of image previews
|
||||||
--disableThumbnails disable image thumbnails
|
--disableThumbnails disable image thumbnails
|
||||||
--disableTypeDetectionByHeader disables type detection by reading file headers
|
--disableTypeDetectionByHeader disables type detection by reading file headers
|
||||||
@ -57,6 +58,7 @@ filebrowser config set [flags]
|
|||||||
--recaptcha.host string use another host for ReCAPTCHA. recaptcha.net might be useful in China (default "https://www.google.com")
|
--recaptcha.host string use another host for ReCAPTCHA. recaptcha.net might be useful in China (default "https://www.google.com")
|
||||||
--recaptcha.key string ReCaptcha site key
|
--recaptcha.key string ReCaptcha site key
|
||||||
--recaptcha.secret string ReCaptcha secret
|
--recaptcha.secret string ReCaptcha secret
|
||||||
|
--redirectAfterCopyMove redirect to destination after copy/move
|
||||||
-r, --root string root to prepend to relative paths (default ".")
|
-r, --root string root to prepend to relative paths (default ".")
|
||||||
--scope string scope for users (default ".")
|
--scope string scope for users (default ".")
|
||||||
--shell string shell command to which other commands should be appended
|
--shell string shell command to which other commands should be appended
|
||||||
|
|||||||
@ -28,6 +28,7 @@ filebrowser users add <username> <password> [flags]
|
|||||||
--perm.modify modify perm for users (default true)
|
--perm.modify modify perm for users (default true)
|
||||||
--perm.rename rename perm for users (default true)
|
--perm.rename rename perm for users (default true)
|
||||||
--perm.share share perm for users (default true)
|
--perm.share share perm for users (default true)
|
||||||
|
--redirectAfterCopyMove redirect to destination after copy/move
|
||||||
--scope string scope for users (default ".")
|
--scope string scope for users (default ".")
|
||||||
--singleClick use single clicks only
|
--singleClick use single clicks only
|
||||||
--sorting.asc sorting by ascending order
|
--sorting.asc sorting by ascending order
|
||||||
|
|||||||
@ -30,6 +30,7 @@ filebrowser users update <id|username> [flags]
|
|||||||
--perm.modify modify perm for users (default true)
|
--perm.modify modify perm for users (default true)
|
||||||
--perm.rename rename perm for users (default true)
|
--perm.rename rename perm for users (default true)
|
||||||
--perm.share share perm for users (default true)
|
--perm.share share perm for users (default true)
|
||||||
|
--redirectAfterCopyMove redirect to destination after copy/move
|
||||||
--scope string scope for users (default ".")
|
--scope string scope for users (default ".")
|
||||||
--singleClick use single clicks only
|
--singleClick use single clicks only
|
||||||
--sorting.asc sorting by ascending order
|
--sorting.asc sorting by ascending order
|
||||||
|
|||||||
@ -26,6 +26,11 @@ file named .filebrowser.{json, toml, yaml, yml} in the following directories:
|
|||||||
- $HOME/
|
- $HOME/
|
||||||
- /etc/filebrowser/
|
- /etc/filebrowser/
|
||||||
|
|
||||||
|
**Note:** Only the options listed below can be set via the config file or
|
||||||
|
environment variables. Other configuration options live exclusively in the
|
||||||
|
database and so they must be set by the "config set" or "config
|
||||||
|
import" commands.
|
||||||
|
|
||||||
The precedence of the configuration values are as follows:
|
The precedence of the configuration values are as follows:
|
||||||
|
|
||||||
- Flags
|
- Flags
|
||||||
@ -52,6 +57,7 @@ filebrowser [flags]
|
|||||||
-c, --config string config file path
|
-c, --config string config file path
|
||||||
-d, --database string database path (default "./filebrowser.db")
|
-d, --database string database path (default "./filebrowser.db")
|
||||||
--disableExec disables Command Runner feature (default true)
|
--disableExec disables Command Runner feature (default true)
|
||||||
|
--disableImageResolutionCalc disables image resolution calculation by reading image files
|
||||||
--disablePreviewResize disable resize of image previews
|
--disablePreviewResize disable resize of image previews
|
||||||
--disableThumbnails disable image thumbnails
|
--disableThumbnails disable image thumbnails
|
||||||
--disableTypeDetectionByHeader disables type detection by reading file headers
|
--disableTypeDetectionByHeader disables type detection by reading file headers
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user