Compare commits
14 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
943e5340d0 | ||
|
|
88aa56f53b | ||
|
|
a12a612970 | ||
|
|
a2d80c62c1 | ||
|
|
1faa21844f | ||
|
|
7a93b2a062 | ||
|
|
032d6c7520 | ||
|
|
9595f3939c | ||
|
|
60b1ee8bb9 | ||
|
|
79d1aa9229 | ||
|
|
20bfd131c6 | ||
|
|
f89975603e | ||
|
|
2d3b64ecf6 | ||
|
|
579756dbb5 |
18
CHANGELOG.md
18
CHANGELOG.md
@@ -2,6 +2,24 @@
|
||||
|
||||
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.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)
|
||||
|
||||
|
||||
|
||||
@@ -99,7 +99,7 @@ func getProxyAuth(flags *pflag.FlagSet, defaultAuther map[string]interface{}) (a
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if header == "" {
|
||||
if header == "" && defaultAuther != nil {
|
||||
header = defaultAuther["header"].(string)
|
||||
}
|
||||
|
||||
@@ -308,6 +308,9 @@ func getSettings(flags *pflag.FlagSet, set *settings.Settings, ser *settings.Ser
|
||||
case "disableTypeDetectionByHeader":
|
||||
ser.TypeDetectionByHeader, err = flags.GetBool(flag.Name)
|
||||
ser.TypeDetectionByHeader = !ser.TypeDetectionByHeader
|
||||
case "disableImageResolutionCalc":
|
||||
ser.ImageResolutionCal, err = flags.GetBool(flag.Name)
|
||||
ser.ImageResolutionCal = !ser.ImageResolutionCal
|
||||
|
||||
// Settings flags from [addConfigFlags]
|
||||
case "signup":
|
||||
|
||||
@@ -53,6 +53,10 @@ The path must be for a json or yaml file.`,
|
||||
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
|
||||
err = st.Settings.Save(file.Settings)
|
||||
if err != nil {
|
||||
|
||||
11
cmd/root.go
11
cmd/root.go
@@ -108,6 +108,7 @@ func addServerFlags(flags *pflag.FlagSet) {
|
||||
flags.Bool("disablePreviewResize", false, "disable resize of image previews")
|
||||
flags.Bool("disableExec", true, "disables Command Runner feature")
|
||||
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{
|
||||
@@ -135,6 +136,11 @@ file named .filebrowser.{json, toml, yaml, yml} in the following directories:
|
||||
- $HOME/
|
||||
- /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:
|
||||
|
||||
- Flags
|
||||
@@ -331,6 +337,10 @@ func getServerSettings(v *viper.Viper, st *storage.Storage) (*settings.Server, e
|
||||
server.TypeDetectionByHeader = !v.GetBool("disableTypeDetectionByHeader")
|
||||
}
|
||||
|
||||
if v.IsSet("disableImageResolutionCalc") {
|
||||
server.ImageResolutionCal = !v.GetBool("disableImageResolutionCalc")
|
||||
}
|
||||
|
||||
if v.IsSet("disableExec") {
|
||||
server.EnableExec = !v.GetBool("disableExec")
|
||||
}
|
||||
@@ -439,6 +449,7 @@ func quickSetup(v *viper.Viper, s *storage.Storage) error {
|
||||
ResizePreview: !v.GetBool("disablePreviewResize"),
|
||||
EnableExec: !v.GetBool("disableExec"),
|
||||
TypeDetectionByHeader: !v.GetBool("disableTypeDetectionByHeader"),
|
||||
ImageResolutionCal: !v.GetBool("disableImageResolutionCalc"),
|
||||
}
|
||||
|
||||
err = s.Settings.SaveServer(ser)
|
||||
|
||||
@@ -60,6 +60,7 @@ type FileOptions struct {
|
||||
Modify bool
|
||||
Expand bool
|
||||
ReadHeader bool
|
||||
CalcImgRes bool
|
||||
Token string
|
||||
Checker rules.Checker
|
||||
Content bool
|
||||
@@ -90,13 +91,13 @@ func NewFileInfo(opts *FileOptions) (*FileInfo, error) {
|
||||
|
||||
if opts.Expand {
|
||||
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 file, nil
|
||||
}
|
||||
|
||||
err = file.detectType(opts.Modify, opts.Content, true)
|
||||
err = file.detectType(opts.Modify, opts.Content, true, opts.CalcImgRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -218,7 +219,7 @@ func (i *FileInfo) RealPath() string {
|
||||
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) {
|
||||
i.Type = "blob"
|
||||
return nil
|
||||
@@ -249,11 +250,13 @@ func (i *FileInfo) detectType(modify, saveContent, readHeader bool) error {
|
||||
return nil
|
||||
case strings.HasPrefix(mimetype, "image"):
|
||||
i.Type = "image"
|
||||
resolution, err := calculateImageResolution(i.Fs, i.Path)
|
||||
if err != nil {
|
||||
log.Printf("Error calculating image resolution: %v", err)
|
||||
} else {
|
||||
i.Resolution = resolution
|
||||
if calcImgRes {
|
||||
resolution, err := calculateImageResolution(i.Fs, i.Path)
|
||||
if err != nil {
|
||||
log.Printf("Error calculating image resolution: %v", err)
|
||||
} else {
|
||||
i.Resolution = resolution
|
||||
}
|
||||
}
|
||||
return nil
|
||||
case strings.HasSuffix(mimetype, "pdf"):
|
||||
@@ -387,7 +390,7 @@ func (i *FileInfo) addSubtitle(fPath string) {
|
||||
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}
|
||||
dir, err := afs.ReadDir(i.Path)
|
||||
if err != nil {
|
||||
@@ -434,7 +437,7 @@ func (i *FileInfo) readListing(checker rules.Checker, readHeader bool) error {
|
||||
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)
|
||||
if err != nil {
|
||||
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 {
|
||||
file.Type = "invalid_link"
|
||||
} else {
|
||||
err := file.detectType(true, false, readHeader)
|
||||
err := file.detectType(true, false, readHeader, calcImgRes)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -71,5 +71,5 @@
|
||||
"vite-plugin-compression2": "^2.3.1",
|
||||
"vue-tsc": "^3.1.3"
|
||||
},
|
||||
"packageManager": "pnpm@10.25.0+sha512.5e82639027af37cf832061bcc6d639c219634488e0f2baebe785028a793de7b525ffcd3f7ff574f5e9860654e098fe852ba8ac5dd5cefe1767d23a020a92f501"
|
||||
"packageManager": "pnpm@10.26.2+sha512.0e308ff2005fc7410366f154f625f6631ab2b16b1d2e70238444dd6ae9d630a8482d92a451144debc492416896ed16f7b114a86ec68b8404b2443869e68ffda6"
|
||||
}
|
||||
|
||||
1157
frontend/pnpm-lock.yaml
generated
1157
frontend/pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
@@ -1,7 +1,12 @@
|
||||
import { fetchURL, removePrefix } from "./utils";
|
||||
import { fetchURL, removePrefix, StatusError } from "./utils";
|
||||
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);
|
||||
query = encodeURIComponent(query);
|
||||
|
||||
@@ -9,19 +14,60 @@ export default async function search(base: string, query: string) {
|
||||
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();
|
||||
|
||||
data = data.map((item: ResourceItem & { dir: boolean }) => {
|
||||
item.url = `/files${base}` + url.encodePath(item.path);
|
||||
|
||||
if (item.dir) {
|
||||
item.url += "/";
|
||||
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);
|
||||
}
|
||||
}
|
||||
if (done) break;
|
||||
}
|
||||
} 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return item;
|
||||
});
|
||||
|
||||
return data;
|
||||
} 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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,10 +5,11 @@
|
||||
v-if="active"
|
||||
class="action"
|
||||
@click="close"
|
||||
:aria-label="$t('buttons.close')"
|
||||
:title="$t('buttons.close')"
|
||||
:aria-label="closeButtonTitle"
|
||||
: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>
|
||||
<i v-else class="material-icons">search</i>
|
||||
<input
|
||||
@@ -21,6 +22,15 @@
|
||||
:aria-label="$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 id="result" ref="result">
|
||||
@@ -57,9 +67,6 @@
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<p id="renew">
|
||||
<i class="material-icons spin">autorenew</i>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
@@ -70,10 +77,11 @@ import { useLayoutStore } from "@/stores/layout";
|
||||
|
||||
import url from "@/utils/url";
|
||||
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 { useRoute } from "vue-router";
|
||||
import { storeToRefs } from "pinia";
|
||||
import { StatusError } from "@/api/utils";
|
||||
|
||||
const boxes = {
|
||||
image: { label: "images", icon: "insert_photo" },
|
||||
@@ -84,6 +92,7 @@ const boxes = {
|
||||
|
||||
const layoutStore = useLayoutStore();
|
||||
const fileStore = useFileStore();
|
||||
let searchAbortController = new AbortController();
|
||||
|
||||
const { currentPromptName } = storeToRefs(layoutStore);
|
||||
|
||||
@@ -124,9 +133,7 @@ watch(currentPromptName, (newVal, oldVal) => {
|
||||
});
|
||||
|
||||
watch(prompt, () => {
|
||||
if (results.value.length) {
|
||||
reset();
|
||||
}
|
||||
reset();
|
||||
});
|
||||
|
||||
// ...mapState(useFileStore, ["isListing"]),
|
||||
@@ -149,6 +156,10 @@ const filteredResults = computed(() => {
|
||||
return results.value.slice(0, resultsCount.value);
|
||||
});
|
||||
|
||||
const closeButtonTitle = computed(() => {
|
||||
return ongoing.value ? t("buttons.stopSearch") : t("buttons.close");
|
||||
});
|
||||
|
||||
onMounted(() => {
|
||||
if (result.value === null) {
|
||||
return;
|
||||
@@ -164,14 +175,23 @@ onMounted(() => {
|
||||
});
|
||||
});
|
||||
|
||||
onUnmounted(() => {
|
||||
abortLastSearch();
|
||||
});
|
||||
|
||||
const open = () => {
|
||||
!active.value && layoutStore.showHover("search");
|
||||
};
|
||||
|
||||
const close = (event: Event) => {
|
||||
event.stopPropagation();
|
||||
event.preventDefault();
|
||||
layoutStore.closeHovers();
|
||||
if (ongoing.value) {
|
||||
abortLastSearch();
|
||||
ongoing.value = false;
|
||||
} else {
|
||||
event.stopPropagation();
|
||||
event.preventDefault();
|
||||
layoutStore.closeHovers();
|
||||
}
|
||||
};
|
||||
|
||||
const keyup = (event: KeyboardEvent) => {
|
||||
@@ -188,11 +208,16 @@ const init = (string: string) => {
|
||||
};
|
||||
|
||||
const reset = () => {
|
||||
abortLastSearch();
|
||||
ongoing.value = false;
|
||||
resultsCount.value = 50;
|
||||
results.value = [];
|
||||
};
|
||||
|
||||
const abortLastSearch = () => {
|
||||
searchAbortController.abort();
|
||||
};
|
||||
|
||||
const submit = async (event: Event) => {
|
||||
event.preventDefault();
|
||||
|
||||
@@ -208,8 +233,16 @@ const submit = async (event: Event) => {
|
||||
ongoing.value = true;
|
||||
|
||||
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) {
|
||||
if (error instanceof StatusError && error.is_canceled) {
|
||||
return;
|
||||
}
|
||||
$showError(error);
|
||||
}
|
||||
|
||||
|
||||
@@ -43,6 +43,7 @@
|
||||
"upload": "رفع",
|
||||
"openFile": "فتح الملف",
|
||||
"discardChanges": "إلغاء التغييرات",
|
||||
"stopSearch": "Stop searching",
|
||||
"saveChanges": "Save changes",
|
||||
"editAsText": "Edit as Text",
|
||||
"increaseFontSize": "Increase font size",
|
||||
|
||||
@@ -43,6 +43,7 @@
|
||||
"upload": "Качи",
|
||||
"openFile": "Отвори файл",
|
||||
"discardChanges": "Изчисти",
|
||||
"stopSearch": "Stop searching",
|
||||
"saveChanges": "Запиши промените",
|
||||
"editAsText": "Edit as Text",
|
||||
"increaseFontSize": "Increase font size",
|
||||
|
||||
@@ -43,6 +43,7 @@
|
||||
"upload": "Pujar",
|
||||
"openFile": "Obrir fitxer",
|
||||
"discardChanges": "Descartar",
|
||||
"stopSearch": "Stop searching",
|
||||
"saveChanges": "Save changes",
|
||||
"editAsText": "Edit as Text",
|
||||
"increaseFontSize": "Increase font size",
|
||||
|
||||
@@ -43,6 +43,7 @@
|
||||
"upload": "Nahrát",
|
||||
"openFile": "Otevřít soubor",
|
||||
"discardChanges": "Zrušit změny",
|
||||
"stopSearch": "Stop searching",
|
||||
"saveChanges": "Save changes",
|
||||
"editAsText": "Edit as Text",
|
||||
"increaseFontSize": "Increase font size",
|
||||
|
||||
@@ -43,6 +43,7 @@
|
||||
"upload": "Upload",
|
||||
"openFile": "Datei öffnen",
|
||||
"discardChanges": "Verwerfen",
|
||||
"stopSearch": "Stop searching",
|
||||
"saveChanges": "Änderungen speichern",
|
||||
"editAsText": "Als Text bearbeiten",
|
||||
"increaseFontSize": "Increase font size",
|
||||
|
||||
@@ -43,6 +43,7 @@
|
||||
"upload": "Μεταφόρτωση",
|
||||
"openFile": "Άνοιγμα αρχείου",
|
||||
"discardChanges": "Discard",
|
||||
"stopSearch": "Stop searching",
|
||||
"saveChanges": "Save changes",
|
||||
"editAsText": "Edit as Text",
|
||||
"increaseFontSize": "Increase font size",
|
||||
|
||||
@@ -43,6 +43,7 @@
|
||||
"upload": "Upload",
|
||||
"openFile": "Open file",
|
||||
"discardChanges": "Discard",
|
||||
"stopSearch": "Stop searching",
|
||||
"saveChanges": "Save changes",
|
||||
"editAsText": "Edit as Text",
|
||||
"increaseFontSize": "Increase font size",
|
||||
|
||||
@@ -43,6 +43,7 @@
|
||||
"upload": "Subir",
|
||||
"openFile": "Abrir archivo",
|
||||
"discardChanges": "Discard",
|
||||
"stopSearch": "Stop searching",
|
||||
"saveChanges": "Guardar cambios",
|
||||
"editAsText": "Edit as Text",
|
||||
"increaseFontSize": "Increase font size",
|
||||
|
||||
@@ -43,6 +43,7 @@
|
||||
"upload": "آپلود",
|
||||
"openFile": "باز کردن فایل",
|
||||
"discardChanges": "لغو کردن",
|
||||
"stopSearch": "Stop searching",
|
||||
"saveChanges": "Save changes",
|
||||
"editAsText": "Edit as Text",
|
||||
"increaseFontSize": "Increase font size",
|
||||
|
||||
@@ -43,6 +43,7 @@
|
||||
"upload": "Importer",
|
||||
"openFile": "Ouvrir le fichier",
|
||||
"discardChanges": "Annuler",
|
||||
"stopSearch": "Stop searching",
|
||||
"saveChanges": "Save changes",
|
||||
"editAsText": "Edit as Text",
|
||||
"increaseFontSize": "Increase font size",
|
||||
|
||||
@@ -43,6 +43,7 @@
|
||||
"upload": "העלאה",
|
||||
"openFile": "פתח קובץ",
|
||||
"discardChanges": "זריקת השינויים",
|
||||
"stopSearch": "Stop searching",
|
||||
"saveChanges": "Save changes",
|
||||
"editAsText": "Edit as Text",
|
||||
"increaseFontSize": "Increase font size",
|
||||
|
||||
@@ -43,10 +43,11 @@
|
||||
"upload": "Prenesi",
|
||||
"openFile": "Otvori datoteku",
|
||||
"discardChanges": "Odbaci",
|
||||
"stopSearch": "Stop searching",
|
||||
"saveChanges": "Spremi promjene",
|
||||
"editAsText": "Edit as Text",
|
||||
"increaseFontSize": "Increase font size",
|
||||
"decreaseFontSize": "Decrease font size"
|
||||
"editAsText": "Uredi kao tekst",
|
||||
"increaseFontSize": "Povećaj veličinu fonta",
|
||||
"decreaseFontSize": "Smanji veličinu fonta"
|
||||
},
|
||||
"download": {
|
||||
"downloadFile": "Preuzmi Datoteku",
|
||||
@@ -79,14 +80,14 @@
|
||||
"sortByName": "Sortiraj po nazivu",
|
||||
"sortBySize": "Sortiraj po veličini",
|
||||
"noPreview": "Pregled nije dostupan za ovu datoteku.",
|
||||
"csvTooLarge": "CSV file is too large for preview (>5MB). Please download to view.",
|
||||
"csvLoadFailed": "Failed to load CSV file.",
|
||||
"showingRows": "Showing {count} row(s)",
|
||||
"columnSeparator": "Column Separator",
|
||||
"csvTooLarge": "CSV datoteka je prevelika za pregled (>5MB). Molimo preuzmite da bi ste ju pregledali.",
|
||||
"csvLoadFailed": "Neuspješno učitavanje CSV datoteke.",
|
||||
"showingRows": "Prikazuje se {count} red(ova)",
|
||||
"columnSeparator": "Separator stupaca",
|
||||
"csvSeparators": {
|
||||
"comma": "Comma (,)",
|
||||
"semicolon": "Semicolon (;)",
|
||||
"both": "Both (,) and (;)"
|
||||
"comma": "Zarez (,)",
|
||||
"semicolon": "Točka zarez (;)",
|
||||
"both": "I (,) i (;)"
|
||||
}
|
||||
},
|
||||
"help": {
|
||||
|
||||
@@ -43,6 +43,7 @@
|
||||
"upload": "Feltöltés",
|
||||
"openFile": "Fájl megnyitása",
|
||||
"discardChanges": "Discard",
|
||||
"stopSearch": "Stop searching",
|
||||
"saveChanges": "Save changes",
|
||||
"editAsText": "Edit as Text",
|
||||
"increaseFontSize": "Increase font size",
|
||||
|
||||
@@ -43,6 +43,7 @@
|
||||
"upload": "Hlaða upp",
|
||||
"openFile": "Open file",
|
||||
"discardChanges": "Discard",
|
||||
"stopSearch": "Stop searching",
|
||||
"saveChanges": "Save changes",
|
||||
"editAsText": "Edit as Text",
|
||||
"increaseFontSize": "Increase font size",
|
||||
|
||||
@@ -43,6 +43,7 @@
|
||||
"upload": "Carica",
|
||||
"openFile": "Apri file",
|
||||
"discardChanges": "Ignora",
|
||||
"stopSearch": "Stop searching",
|
||||
"saveChanges": "Save changes",
|
||||
"editAsText": "Edit as Text",
|
||||
"increaseFontSize": "Increase font size",
|
||||
|
||||
@@ -42,7 +42,9 @@
|
||||
"update": "更新",
|
||||
"upload": "アップロード",
|
||||
"openFile": "ファイルを開く",
|
||||
"stopSearch": "検索を停止",
|
||||
"discardChanges": "Discard",
|
||||
"stopSearch": "Stop searching",
|
||||
"saveChanges": "Save changes",
|
||||
"editAsText": "Edit as Text",
|
||||
"increaseFontSize": "Increase font size",
|
||||
|
||||
@@ -41,8 +41,10 @@
|
||||
"toggleSidebar": "사이드바 전환",
|
||||
"update": "업데이트",
|
||||
"upload": "업로드",
|
||||
"stopSearch": "검색 중지",
|
||||
"openFile": "파일 열기",
|
||||
"discardChanges": "변경 사항 취소",
|
||||
"stopSearch": "Stop searching",
|
||||
"saveChanges": "변경사항 저장",
|
||||
"editAsText": "Edit as Text",
|
||||
"increaseFontSize": "Increase font size",
|
||||
|
||||
286
frontend/src/i18n/lv.json
Normal file
286
frontend/src/i18n/lv.json
Normal file
@@ -0,0 +1,286 @@
|
||||
{
|
||||
"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"
|
||||
},
|
||||
"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"
|
||||
}
|
||||
}
|
||||
286
frontend/src/i18n/lv_LV.json
Normal file
286
frontend/src/i18n/lv_LV.json
Normal file
@@ -0,0 +1,286 @@
|
||||
{
|
||||
"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"
|
||||
},
|
||||
"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",
|
||||
"openFile": "Open file",
|
||||
"discardChanges": "Discard",
|
||||
"stopSearch": "Stop searching",
|
||||
"saveChanges": "Save changes",
|
||||
"editAsText": "Edit as Text",
|
||||
"increaseFontSize": "Increase font size",
|
||||
|
||||
@@ -43,6 +43,7 @@
|
||||
"upload": "Last opp",
|
||||
"openFile": "Open file",
|
||||
"discardChanges": "Slett",
|
||||
"stopSearch": "Stop searching",
|
||||
"saveChanges": "Lagre Endringane ",
|
||||
"editAsText": "Edit as Text",
|
||||
"increaseFontSize": "Increase font size",
|
||||
|
||||
@@ -43,6 +43,7 @@
|
||||
"upload": "Wyślij",
|
||||
"openFile": "Otwórz plik",
|
||||
"discardChanges": "Odrzuć",
|
||||
"stopSearch": "Zatrzymaj wyszukiwanie",
|
||||
"saveChanges": "Zapisz zmiany",
|
||||
"editAsText": "Edytuj jako tekst",
|
||||
"increaseFontSize": "Zwiększ rozmiar czcionki",
|
||||
|
||||
@@ -43,6 +43,7 @@
|
||||
"upload": "Enviar",
|
||||
"openFile": "Abrir",
|
||||
"discardChanges": "Discard",
|
||||
"stopSearch": "Stop searching",
|
||||
"saveChanges": "Save changes",
|
||||
"editAsText": "Edit as Text",
|
||||
"increaseFontSize": "Increase font size",
|
||||
|
||||
@@ -43,6 +43,7 @@
|
||||
"upload": "Enviar",
|
||||
"openFile": "Open file",
|
||||
"discardChanges": "Discard",
|
||||
"stopSearch": "Stop searching",
|
||||
"saveChanges": "Save changes",
|
||||
"editAsText": "Edit as Text",
|
||||
"increaseFontSize": "Increase font size",
|
||||
|
||||
@@ -43,6 +43,7 @@
|
||||
"upload": "Încarcă",
|
||||
"openFile": "Open file",
|
||||
"discardChanges": "Discard",
|
||||
"stopSearch": "Stop searching",
|
||||
"saveChanges": "Save changes",
|
||||
"editAsText": "Edit as Text",
|
||||
"increaseFontSize": "Increase font size",
|
||||
|
||||
@@ -42,11 +42,13 @@
|
||||
"update": "Обновить",
|
||||
"upload": "Загрузить",
|
||||
"openFile": "Открыть файл",
|
||||
"stopSearch": "Прекратить поиск",
|
||||
"discardChanges": "Отказаться",
|
||||
"saveChanges": "Save changes",
|
||||
"editAsText": "Edit as Text",
|
||||
"increaseFontSize": "Increase font size",
|
||||
"decreaseFontSize": "Decrease font size"
|
||||
"stopSearch": "Stop searching",
|
||||
"saveChanges": "Сохранить",
|
||||
"editAsText": "Редактировать как текст",
|
||||
"increaseFontSize": "Увеличить размер шрифта",
|
||||
"decreaseFontSize": "Уменьшить размер шрифта"
|
||||
},
|
||||
"download": {
|
||||
"downloadFile": "Скачать файл",
|
||||
@@ -79,14 +81,14 @@
|
||||
"sortByName": "Сортировка по имени",
|
||||
"sortBySize": "Сортировка по размеру",
|
||||
"noPreview": "Предварительный просмотр для этого файла недоступен.",
|
||||
"csvTooLarge": "CSV file is too large for preview (>5MB). Please download to view.",
|
||||
"csvLoadFailed": "Failed to load CSV file.",
|
||||
"showingRows": "Showing {count} row(s)",
|
||||
"columnSeparator": "Column Separator",
|
||||
"csvTooLarge": "Этот CSV файл слишком большой для предпросмотра (>5 МБ). Скачайте и откройте его локально.",
|
||||
"csvLoadFailed": "Не удалось загрузить этот CSV.",
|
||||
"showingRows": "Отображается {count} строк(а)",
|
||||
"columnSeparator": "Разделитель столбцов",
|
||||
"csvSeparators": {
|
||||
"comma": "Comma (,)",
|
||||
"semicolon": "Semicolon (;)",
|
||||
"both": "Both (,) and (;)"
|
||||
"comma": "Запятая (,)",
|
||||
"semicolon": "Точка с запятой (;)",
|
||||
"both": "Оба варианта — (,) и (;)"
|
||||
}
|
||||
},
|
||||
"help": {
|
||||
@@ -114,9 +116,9 @@
|
||||
"username": "Имя пользователя",
|
||||
"usernameTaken": "Данное имя пользователя уже занято",
|
||||
"wrongCredentials": "Неверные данные",
|
||||
"passwordTooShort": "Password must be at least {min} characters",
|
||||
"passwordTooShort": "Пароль должен состоять как минимум из {min} символов",
|
||||
"logout_reasons": {
|
||||
"inactivity": "You have been logged out due to inactivity."
|
||||
"inactivity": "Сессия завершена после долгого отсутствия."
|
||||
}
|
||||
},
|
||||
"permanent": "Постоянный",
|
||||
@@ -171,7 +173,7 @@
|
||||
"video": "Видео"
|
||||
},
|
||||
"settings": {
|
||||
"aceEditorTheme": "Ace editor theme",
|
||||
"aceEditorTheme": "Тема редактора Ace",
|
||||
"admin": "Админ",
|
||||
"administrator": "Администратор",
|
||||
"allowCommands": "Запуск команд",
|
||||
@@ -179,7 +181,7 @@
|
||||
"allowNew": "Создание новых файлов или каталогов",
|
||||
"allowPublish": "Публикация новых записей и страниц",
|
||||
"allowSignup": "Разрешить пользователям регистрироваться",
|
||||
"hideLoginButton": "Hide the login button from public pages",
|
||||
"hideLoginButton": "Спрятать кнопку входа с публичных страниц",
|
||||
"avoidChanges": "(оставьте поле пустым, чтобы избежать изменений)",
|
||||
"branding": "Брендинг",
|
||||
"brandingDirectoryPath": "Путь к каталогу брендов",
|
||||
@@ -189,7 +191,7 @@
|
||||
"commandRunnerHelp": "Здесь вы можете установить команды, которые будут выполняться в указанных событиях. Вы должны указать по одной команде в каждой строке. Переменные среды {0} и {1} будут доступны, будучи {0} относительно {1}. Дополнительные сведения об этой функции и доступных переменных среды см. В {2}.",
|
||||
"commandsUpdated": "Команды обновлены!",
|
||||
"createUserDir": "Автоматическое создание домашнего каталога пользователя при добавлении нового пользователя",
|
||||
"minimumPasswordLength": "Minimum password length",
|
||||
"minimumPasswordLength": "Минимальная длина пароля",
|
||||
"tusUploads": "Загруженные файлы",
|
||||
"tusUploadsHelp": " File Browser поддерживает загрузку файлов по частям, что позволяет работать в сетях низкого качества.",
|
||||
"tusUploadsChunkSize": "Указывает максимальный размер запроса (мелкие загрузки пойдут напрямую). Вы можете ввести простое целое число, обозначающее размер ввода в байтах, или строку, например 10MB, 1GB и т. д.",
|
||||
|
||||
@@ -43,6 +43,7 @@
|
||||
"upload": "Nahrať",
|
||||
"openFile": "Otvoriť súbor",
|
||||
"discardChanges": "Zahodiť",
|
||||
"stopSearch": "Stop searching",
|
||||
"saveChanges": "Uložiť zmeny",
|
||||
"editAsText": "Edit as Text",
|
||||
"increaseFontSize": "Increase font size",
|
||||
|
||||
@@ -43,6 +43,7 @@
|
||||
"upload": "Ladda upp",
|
||||
"openFile": "Öppna fil",
|
||||
"discardChanges": "Förkasta",
|
||||
"stopSearch": "Stop searching",
|
||||
"saveChanges": "Spara ändringar",
|
||||
"editAsText": "Edit as Text",
|
||||
"increaseFontSize": "Increase font size",
|
||||
|
||||
@@ -43,6 +43,7 @@
|
||||
"upload": "Yükle",
|
||||
"openFile": "Dosyayı aç",
|
||||
"discardChanges": "Discard",
|
||||
"stopSearch": "Stop searching",
|
||||
"saveChanges": "Save changes",
|
||||
"editAsText": "Edit as Text",
|
||||
"increaseFontSize": "Increase font size",
|
||||
|
||||
@@ -43,6 +43,7 @@
|
||||
"upload": "Вивантажити",
|
||||
"openFile": "Відкрити файл",
|
||||
"discardChanges": "Скасувати",
|
||||
"stopSearch": "Stop searching",
|
||||
"saveChanges": "Save changes",
|
||||
"editAsText": "Edit as Text",
|
||||
"increaseFontSize": "Increase font size",
|
||||
|
||||
@@ -43,6 +43,7 @@
|
||||
"upload": "Tải lên",
|
||||
"openFile": "Mở tệp",
|
||||
"discardChanges": "Hủy bỏ thay đổi",
|
||||
"stopSearch": "Stop searching",
|
||||
"saveChanges": "Save changes",
|
||||
"editAsText": "Edit as Text",
|
||||
"increaseFontSize": "Increase font size",
|
||||
|
||||
@@ -42,7 +42,9 @@
|
||||
"update": "更新",
|
||||
"upload": "上传",
|
||||
"openFile": "打开文件",
|
||||
"stopSearch": "停止搜索",
|
||||
"discardChanges": "放弃更改",
|
||||
"stopSearch": "Stop searching",
|
||||
"saveChanges": "保存更改",
|
||||
"editAsText": "以文本形式编辑",
|
||||
"increaseFontSize": "增大字体大小",
|
||||
@@ -82,11 +84,11 @@
|
||||
"csvTooLarge": "CSV文件大到无法预览(>5MB)。请下载查看。",
|
||||
"csvLoadFailed": "加载 CSV 文件失败。",
|
||||
"showingRows": "正在显示 {count} 行",
|
||||
"columnSeparator": "Column Separator",
|
||||
"columnSeparator": "列分隔符",
|
||||
"csvSeparators": {
|
||||
"comma": "Comma (,)",
|
||||
"semicolon": "Semicolon (;)",
|
||||
"both": "Both (,) and (;)"
|
||||
"comma": "逗号 (,)",
|
||||
"semicolon": "分号 (;)",
|
||||
"both": "逗号 (,) 和分号 (;)"
|
||||
}
|
||||
},
|
||||
"help": {
|
||||
@@ -116,7 +118,7 @@
|
||||
"wrongCredentials": "用户名或密码错误",
|
||||
"passwordTooShort": "密码必须至少包含 {min} 个字符",
|
||||
"logout_reasons": {
|
||||
"inactivity": "由于未活动,您已登出。"
|
||||
"inactivity": "由于未活动,您已登出。"
|
||||
}
|
||||
},
|
||||
"permanent": "永久",
|
||||
@@ -171,7 +173,7 @@
|
||||
"video": "视频"
|
||||
},
|
||||
"settings": {
|
||||
"aceEditorTheme": "Ace editor 主题",
|
||||
"aceEditorTheme": "Ace编辑器主题",
|
||||
"admin": "管理员",
|
||||
"administrator": "管理员",
|
||||
"allowCommands": "执行命令(Shell 命令)",
|
||||
|
||||
@@ -42,7 +42,9 @@
|
||||
"update": "更新",
|
||||
"upload": "上傳",
|
||||
"openFile": "開啟檔案",
|
||||
"stopSearch": "停止搜尋",
|
||||
"discardChanges": "放棄變更",
|
||||
"stopSearch": "Stop searching",
|
||||
"saveChanges": "Save changes",
|
||||
"editAsText": "Edit as Text",
|
||||
"increaseFontSize": "Increase font size",
|
||||
|
||||
2
go.mod
2
go.mod
@@ -12,7 +12,7 @@ require (
|
||||
github.com/gorilla/mux v1.8.1
|
||||
github.com/gorilla/websocket v1.5.3
|
||||
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/mholt/archives v0.1.5
|
||||
github.com/mitchellh/go-homedir v1.1.0
|
||||
|
||||
4
go.sum
4
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.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
||||
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.2.1/go.mod h1:v+Rfd79xlw1AgVBjbO0BEQmptqb5HvL/k9GRHB7ZKEg=
|
||||
github.com/maruel/natural v1.3.0 h1:VsmCsBmEyrR46RomtgHs5hbKADGRVtliHTyCOLFBpsg=
|
||||
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/go.mod h1:z9nMiNUekt/LTpTUQdpp+4sJeYqUGpwMHfW0Z8V8fnQ=
|
||||
github.com/mholt/archives v0.1.5 h1:Fh2hl1j7VEhc6DZs2DLMgiBNChUux154a1G+2esNvzQ=
|
||||
|
||||
@@ -41,6 +41,7 @@ var withHashFile = func(fn handleFunc) handleFunc {
|
||||
Modify: d.user.Perm.Modify,
|
||||
Expand: false,
|
||||
ReadHeader: d.server.TypeDetectionByHeader,
|
||||
CalcImgRes: d.server.TypeDetectionByHeader,
|
||||
Checker: d,
|
||||
Token: link.Token,
|
||||
})
|
||||
|
||||
@@ -123,6 +123,7 @@ func getFiles(d *data, path, commonPath string) ([]archives.FileInfo, error) {
|
||||
if path != commonPath {
|
||||
nameInArchive := strings.TrimPrefix(path, commonPath)
|
||||
nameInArchive = strings.TrimPrefix(nameInArchive, string(filepath.Separator))
|
||||
nameInArchive = filepath.ToSlash(nameInArchive)
|
||||
|
||||
archiveFiles = append(archiveFiles, archives.FileInfo{
|
||||
FileInfo: info,
|
||||
|
||||
@@ -1,28 +1,82 @@
|
||||
package fbhttp
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"net/http"
|
||||
"os"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/filebrowser/filebrowser/v2/search"
|
||||
)
|
||||
|
||||
const searchPingInterval = 5
|
||||
|
||||
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")
|
||||
|
||||
err := search.Search(d.user.Fs, r.URL.Path, query, d, func(path string, f os.FileInfo) error {
|
||||
response = append(response, map[string]interface{}{
|
||||
err := search.Search(ctx, d.user.Fs, r.URL.Path, query, d, func(path string, f os.FileInfo) error {
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
case response <- map[string]interface{}{
|
||||
"dir": f.IsDir(),
|
||||
"path": path,
|
||||
})
|
||||
|
||||
return nil
|
||||
}:
|
||||
}
|
||||
return context.Cause(ctx)
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
close(response)
|
||||
wg.Wait()
|
||||
if err == nil {
|
||||
err = context.Cause(ctx)
|
||||
}
|
||||
// ignore cancellation errors from user aborts
|
||||
if err != nil && !errors.Is(err, context.Canceled) {
|
||||
return http.StatusInternalServerError, err
|
||||
}
|
||||
|
||||
return renderJSON(w, r, response)
|
||||
return 0, nil
|
||||
})
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package search
|
||||
|
||||
import (
|
||||
"context"
|
||||
"os"
|
||||
"path"
|
||||
"path/filepath"
|
||||
@@ -18,13 +19,17 @@ type searchOptions struct {
|
||||
}
|
||||
|
||||
// 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)
|
||||
|
||||
scope = filepath.ToSlash(filepath.Clean(scope))
|
||||
scope = path.Join("/", scope)
|
||||
|
||||
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 = path.Join("/", fPath)
|
||||
relativePath := strings.TrimPrefix(fPath, scope)
|
||||
|
||||
@@ -59,6 +59,7 @@ type Server struct {
|
||||
ResizePreview bool `json:"resizePreview"`
|
||||
EnableExec bool `json:"enableExec"`
|
||||
TypeDetectionByHeader bool `json:"typeDetectionByHeader"`
|
||||
ImageResolutionCal bool `json:"imageResolutionCalculation"`
|
||||
AuthHook string `json:"authHook"`
|
||||
TokenExpirationTime string `json:"tokenExpirationTime"`
|
||||
}
|
||||
|
||||
@@ -36,6 +36,7 @@ filebrowser config init [flags]
|
||||
--dateFormat use date format (true for absolute time, false for relative)
|
||||
--dirMode string mode bits that new directories are created with (default "0o750")
|
||||
--disableExec disables Command Runner feature (default true)
|
||||
--disableImageResolutionCalc disables image resolution calculation by reading image files
|
||||
--disablePreviewResize disable resize of image previews
|
||||
--disableThumbnails disable image thumbnails
|
||||
--disableTypeDetectionByHeader disables type detection by reading file headers
|
||||
|
||||
@@ -33,6 +33,7 @@ filebrowser config set [flags]
|
||||
--dateFormat use date format (true for absolute time, false for relative)
|
||||
--dirMode string mode bits that new directories are created with (default "0o750")
|
||||
--disableExec disables Command Runner feature (default true)
|
||||
--disableImageResolutionCalc disables image resolution calculation by reading image files
|
||||
--disablePreviewResize disable resize of image previews
|
||||
--disableThumbnails disable image thumbnails
|
||||
--disableTypeDetectionByHeader disables type detection by reading file headers
|
||||
|
||||
@@ -26,6 +26,11 @@ file named .filebrowser.{json, toml, yaml, yml} in the following directories:
|
||||
- $HOME/
|
||||
- /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:
|
||||
|
||||
- Flags
|
||||
@@ -52,6 +57,7 @@ filebrowser [flags]
|
||||
-c, --config string config file path
|
||||
-d, --database string database path (default "./filebrowser.db")
|
||||
--disableExec disables Command Runner feature (default true)
|
||||
--disableImageResolutionCalc disables image resolution calculation by reading image files
|
||||
--disablePreviewResize disable resize of image previews
|
||||
--disableThumbnails disable image thumbnails
|
||||
--disableTypeDetectionByHeader disables type detection by reading file headers
|
||||
|
||||
Reference in New Issue
Block a user