updated styles and translations (#1042)

This commit is contained in:
Graham Steffaniak authored and GitHub committed 2025-08-04 15:27:41 -05:00
1 parent a434f812e8
commit a44215a086
66 files changed
+1186 -1328

No files matched your search

+1 -1
View File
@@ -4,7 +4,7 @@ All notable changes to this project will be documented in this file. For commit
## v0.8.0-beta
This is a major release, including many new features and changes that could introduce breaking changes. Here are the known potentially breaking changes:
This is a major release, new features and changes could introduce breaking behavior. Here are the known potentially breaking changes:
- all public api and share url's get a `/public` prefix, making it easier to use with a reverse proxy. Any existing share link will still work but get redirected.
- a small change to styling you may need to update your custom styling, for example the id `#input` was renamed `#search-input`
+2 -2
View File
@@ -70,8 +70,8 @@ func setupFrontend() {
noThemes := len(Config.Frontend.Styling.CustomThemes) == 0
if noThemes {
addCustomTheme("default", "The default theme", "")
altTheme := readCustomCSS("reduce-rounded-corners.css")
if altTheme != "" {
// check if file exists
if _, err := os.Stat("reduce-rounded-corners.css"); err == nil {
addCustomTheme("alternative", "Reduce rounded corners", "reduce-rounded-corners.css")
}
}
+116 -87
View File
@@ -554,124 +554,153 @@ func (s *Storage) RemoveAllRulesForGroup(groupname string) error {
return s.SaveToDB()
}
type PrincipalRule struct {
SourcePath string `json:"sourcePath"`
Path string `json:"path"`
RuleType string `json:"ruleType"` // "allow" or "deny"
}
// GetRulesForUser returns all rules for a specific user for a given sourcePath. If sourcePath is empty, it checks all sources.
func (s *Storage) GetRulesForUser(sourcePath, username string) []PrincipalRule {
// GetRulesForUser returns all rules for a specific user for a given sourcePath.
func (s *Storage) GetRulesForUser(sourcePath, username string) map[string]FrontendAccessRule {
s.mux.RLock()
defer s.mux.RUnlock()
userRules := make([]PrincipalRule, 0)
processSource := func(sp string, rulesBySource map[string]*AccessRule) {
for indexPath, rule := range rulesBySource {
if _, ok := rule.Allow.Users[username]; ok {
userRules = append(userRules, PrincipalRule{SourcePath: sp, Path: indexPath, RuleType: "allow"})
}
if _, ok := rule.Deny.Users[username]; ok {
userRules = append(userRules, PrincipalRule{SourcePath: sp, Path: indexPath, RuleType: "deny"})
}
}
userRules := make(map[string]FrontendAccessRule)
rulesBySource, ok := s.AllRules[sourcePath]
if !ok {
return userRules
}
if sourcePath != "" {
if rulesBySource, ok := s.AllRules[sourcePath]; ok {
processSource(sourcePath, rulesBySource)
for indexPath, rule := range rulesBySource {
userHasRule := false
if _, ok := rule.Allow.Users[username]; ok {
userHasRule = true
}
} else {
for sp, rulesBySource := range s.AllRules {
processSource(sp, rulesBySource)
if !userHasRule {
if _, ok := rule.Deny.Users[username]; ok {
userHasRule = true
}
}
if userHasRule {
userRules[indexPath] = FrontendAccessRule{
Deny: FrontendRuleSet{
Users: utils.NonNilSlice(slices.Collect(maps.Keys(rule.Deny.Users))),
Groups: utils.NonNilSlice(slices.Collect(maps.Keys(rule.Deny.Groups))),
},
Allow: FrontendRuleSet{
Users: utils.NonNilSlice(slices.Collect(maps.Keys(rule.Allow.Users))),
Groups: utils.NonNilSlice(slices.Collect(maps.Keys(rule.Allow.Groups))),
},
}
}
}
return userRules
}
// GetRulesForGroup returns all rules for a specific group for a given sourcePath. If sourcePath is empty, it checks all sources.
func (s *Storage) GetRulesForGroup(sourcePath, groupname string) []PrincipalRule {
// GetRulesForGroup returns all rules for a specific group for a given sourcePath.
func (s *Storage) GetRulesForGroup(sourcePath, groupname string) map[string]FrontendAccessRule {
s.mux.RLock()
defer s.mux.RUnlock()
groupRules := make([]PrincipalRule, 0)
processSource := func(sp string, rulesBySource map[string]*AccessRule) {
for indexPath, rule := range rulesBySource {
if _, ok := rule.Allow.Groups[groupname]; ok {
groupRules = append(groupRules, PrincipalRule{SourcePath: sp, Path: indexPath, RuleType: "allow"})
}
if _, ok := rule.Deny.Groups[groupname]; ok {
groupRules = append(groupRules, PrincipalRule{SourcePath: sp, Path: indexPath, RuleType: "deny"})
}
}
groupRules := make(map[string]FrontendAccessRule)
rulesBySource, ok := s.AllRules[sourcePath]
if !ok {
return groupRules
}
if sourcePath != "" {
if rulesBySource, ok := s.AllRules[sourcePath]; ok {
processSource(sourcePath, rulesBySource)
for indexPath, rule := range rulesBySource {
groupHasRule := false
if _, ok := rule.Allow.Groups[groupname]; ok {
groupHasRule = true
}
} else {
for sp, rulesBySource := range s.AllRules {
processSource(sp, rulesBySource)
if !groupHasRule {
if _, ok := rule.Deny.Groups[groupname]; ok {
groupHasRule = true
}
}
if groupHasRule {
groupRules[indexPath] = FrontendAccessRule{
Deny: FrontendRuleSet{
Users: utils.NonNilSlice(slices.Collect(maps.Keys(rule.Deny.Users))),
Groups: utils.NonNilSlice(slices.Collect(maps.Keys(rule.Deny.Groups))),
},
Allow: FrontendRuleSet{
Users: utils.NonNilSlice(slices.Collect(maps.Keys(rule.Allow.Users))),
Groups: utils.NonNilSlice(slices.Collect(maps.Keys(rule.Allow.Groups))),
},
}
}
}
return groupRules
}
// GetAllRulesByUsers returns a map of usernames to their rules for a given sourcePath. If sourcePath is empty, it checks all sources.
func (s *Storage) GetAllRulesByUsers(sourcePath string) map[string][]PrincipalRule {
// GetAllRulesByUsers returns a map of usernames to their rules for a given sourcePath.
func (s *Storage) GetAllRulesByUsers(sourcePath string) map[string]map[string]FrontendAccessRule {
s.mux.RLock()
defer s.mux.RUnlock()
allUserRules := make(map[string][]PrincipalRule)
processSource := func(sp string, rulesBySource map[string]*AccessRule) {
for indexPath, rule := range rulesBySource {
for user := range rule.Allow.Users {
allUserRules[user] = append(allUserRules[user], PrincipalRule{SourcePath: sp, Path: indexPath, RuleType: "allow"})
}
for user := range rule.Deny.Users {
allUserRules[user] = append(allUserRules[user], PrincipalRule{SourcePath: sp, Path: indexPath, RuleType: "deny"})
}
}
allUserRules := make(map[string]map[string]FrontendAccessRule)
rulesBySource, ok := s.AllRules[sourcePath]
if !ok {
return allUserRules
}
if sourcePath != "" {
if rulesBySource, ok := s.AllRules[sourcePath]; ok {
processSource(sourcePath, rulesBySource)
for indexPath, rule := range rulesBySource {
hasAllowUsers := len(rule.Allow.Users) > 0
hasDenyUsers := len(rule.Deny.Users) > 0
if !hasAllowUsers && !hasDenyUsers {
continue
}
} else {
for sp, rulesBySource := range s.AllRules {
processSource(sp, rulesBySource)
frontendRule := FrontendAccessRule{
Deny: FrontendRuleSet{
Users: utils.NonNilSlice(slices.Collect(maps.Keys(rule.Deny.Users))),
Groups: utils.NonNilSlice(slices.Collect(maps.Keys(rule.Deny.Groups))),
},
Allow: FrontendRuleSet{
Users: utils.NonNilSlice(slices.Collect(maps.Keys(rule.Allow.Users))),
Groups: utils.NonNilSlice(slices.Collect(maps.Keys(rule.Allow.Groups))),
},
}
for user := range rule.Allow.Users {
if _, ok := allUserRules[user]; !ok {
allUserRules[user] = make(map[string]FrontendAccessRule)
}
allUserRules[user][indexPath] = frontendRule
}
for user := range rule.Deny.Users {
if _, ok := allUserRules[user]; !ok {
allUserRules[user] = make(map[string]FrontendAccessRule)
}
allUserRules[user][indexPath] = frontendRule
}
}
return allUserRules
}
// GetAllRulesByGroups returns a map of groupnames to their rules for a given sourcePath. If sourcePath is empty, it checks all sources.
func (s *Storage) GetAllRulesByGroups(sourcePath string) map[string][]PrincipalRule {
// GetAllRulesByGroups returns a map of groupnames to their rules for a given sourcePath.
func (s *Storage) GetAllRulesByGroups(sourcePath string) map[string]map[string]FrontendAccessRule {
s.mux.RLock()
defer s.mux.RUnlock()
allGroupRules := make(map[string][]PrincipalRule)
processSource := func(sp string, rulesBySource map[string]*AccessRule) {
for indexPath, rule := range rulesBySource {
for group := range rule.Allow.Groups {
allGroupRules[group] = append(allGroupRules[group], PrincipalRule{SourcePath: sp, Path: indexPath, RuleType: "allow"})
}
for group := range rule.Deny.Groups {
allGroupRules[group] = append(allGroupRules[group], PrincipalRule{SourcePath: sp, Path: indexPath, RuleType: "deny"})
}
}
allGroupRules := make(map[string]map[string]FrontendAccessRule)
rulesBySource, ok := s.AllRules[sourcePath]
if !ok {
return allGroupRules
}
if sourcePath != "" {
if rulesBySource, ok := s.AllRules[sourcePath]; ok {
processSource(sourcePath, rulesBySource)
for indexPath, rule := range rulesBySource {
hasAllowGroups := len(rule.Allow.Groups) > 0
hasDenyGroups := len(rule.Deny.Groups) > 0
if !hasAllowGroups && !hasDenyGroups {
continue
}
} else {
for sp, rulesBySource := range s.AllRules {
processSource(sp, rulesBySource)
frontendRule := FrontendAccessRule{
Deny: FrontendRuleSet{
Users: utils.NonNilSlice(slices.Collect(maps.Keys(rule.Deny.Users))),
Groups: utils.NonNilSlice(slices.Collect(maps.Keys(rule.Deny.Groups))),
},
Allow: FrontendRuleSet{
Users: utils.NonNilSlice(slices.Collect(maps.Keys(rule.Allow.Users))),
Groups: utils.NonNilSlice(slices.Collect(maps.Keys(rule.Allow.Groups))),
},
}
for group := range rule.Allow.Groups {
if _, ok := allGroupRules[group]; !ok {
allGroupRules[group] = make(map[string]FrontendAccessRule)
}
allGroupRules[group][indexPath] = frontendRule
}
for group := range rule.Deny.Groups {
if _, ok := allGroupRules[group]; !ok {
allGroupRules[group] = make(map[string]FrontendAccessRule)
}
allGroupRules[group][indexPath] = frontendRule
}
}
return allGroupRules
-4
View File
@@ -114,10 +114,6 @@ button {
border-right: none;
}
button:hover {
background: #e0e0e0;
}
button:disabled {
cursor: not-allowed !important;
}
+2 -3
View File
@@ -10,7 +10,7 @@
ref="contextMenu"
v-if="showContext"
:style="centered ? {} : { top: posY + 'px', left: posX + 'px' }"
class="button no-select"
class="button no-select fb-shadow"
:class="{ 'dark-mode': isDarkMode, 'centered': centered }"
:key="showCreate ? 'create-mode' : 'normal-mode'"
>
@@ -123,7 +123,7 @@
top: '3em',
right: '1em',
}"
class="button no-select"
class="button no-select fb-shadow"
:class="{ 'dark-mode': isDarkMode }"
>
<action v-if="showGoToRaw" icon="open_in_new" :label="$t('buttons.openFile')" @action="goToRaw()" />
@@ -425,7 +425,6 @@ export default {
display: flex;
flex-direction: column;
justify-content: center;
box-shadow: 0px 0px 15px 0px #404040;
}
#context-menu.centered {
+1 -6
View File
@@ -34,7 +34,7 @@
</div>
<!-- Search results for desktop -->
<div v-show="active" id="results" ref="result">
<div v-show="active" id="results" class="fb-shadow" ref="result">
<div class="inputWrapper" style="display: flex">
<select
v-if="multipleSources"
@@ -589,7 +589,6 @@ export default {
border-top-right-radius: 0px;
-webkit-transform: translateX(-50%);
transform: translateX(-50%);
-webkit-box-shadow: 0px 2em 50px 10px rgba(0, 0, 0, 0.3);
box-shadow: 0px 2em 50px 10px rgba(0, 0, 0, 0.3);
background-color: lightgray;
max-height: 80vh;
@@ -678,10 +677,6 @@ export default {
background-color: var(--surfacePrimary);
}
.search-entry:hover {
background-color: var(--surfacePrimary);
}
.text-container {
margin-left: 0.25em;
white-space: nowrap;
+77 -64
View File
@@ -1,68 +1,68 @@
<template>
<div class="card floating share__promt__card" id="access">
<div class="card-title">
<h2>{{ $t("access.accessManagement") }}</h2>
<div class="card-title">
<h2>{{ $t("access.accessManagement") }}</h2>
</div>
<div class="card-content">
<div v-if="isEditingPath">
<file-list @update:selected="updateTempPath" :browse-source="sourceName"></file-list>
<div style="margin-top: 1em; text-align: right;">
<button class="button button--flat" @click="cancelPathChange">
{{ $t("buttons.cancel") }}
</button>
<button class="button button--flat" @click="confirmPathChange">
{{ $t("buttons.ok") }}
</button>
</div>
</div>
<div class="card-content">
<div v-if="isEditingPath">
<file-list @update:selected="updateTempPath" :browse-source="sourceName"></file-list>
<div style="margin-top: 1em; text-align: right;">
<button class="button button--flat" @click="cancelPathChange">
{{ $t("buttons.cancel") }}
</button>
<button class="button button--flat" @click="confirmPathChange">
{{ $t("buttons.ok") }}
</button>
</div>
<div v-else>
<p>{{ $t("prompts.source", { suffix: ":" }) }} {{ currentSource }}</p>
<div aria-label="access-path" class="searchContext" @click="startPathEdit" style="cursor: pointer;">
{{ $t("search.path") }} {{ currentPath }}
</div>
<div v-else>
<div aria-label="access-path" class="searchContext" @click="startPathEdit" style="cursor: pointer;">
{{ $t("search.path") }} {{ currentPath }}
</div>
<!-- Add Form -->
<div class="add-form" style="margin-bottom: 1em; margin-top: 1em">
<select v-model="addType">
<option value="user">{{ $t("general.user") }}</option>
<option value="group">{{ $t("general.group") }}</option>
</select>
<select v-model="addListType">
<option value="deny">{{ $t("access.deny") }}</option>
<option value="allow">{{ $t("access.allow") }}</option>
</select>
<input class="group-user-add-input" v-model="addName" :placeholder="$t('access.enterName')" />
<button class="action add-rule-button" @click="submitAdd">
<i class="material-icons">add</i>
</button>
</div>
<table v-if="entries.length > 0">
<tbody>
<tr>
<th>{{ $t("access.allowDeny") }}</th>
<th>{{ $t("access.userGroup") }}</th>
<th>{{ $t("general.name") }}</th>
<th>{{ $t("buttons.edit") }}</th>
</tr>
<tr v-for="entry in entries" :key="entry.type + '-' + entry.name">
<td>{{ entry.allow ? $t("access.allow") : $t("access.deny") }}</td>
<td>{{ entry.type == "user" ? $t("general.user") : $t("general.group") }}</td>
<td>{{ entry.name }}</td>
<td>
<button @click="deleteAccess(entry)" class="action" :aria-label="$t('buttons.delete')" :title="$t('buttons.delete')">
<i class="material-icons">delete</i>
</button>
</td>
</tr>
</tbody>
</table>
<!-- Cancel Button -->
<div style="margin-top: 1em; text-align: right;">
<button class="action button button--flat" @click="closePrompt">
{{ $t("buttons.cancel") }}
</button>
</div>
<!-- Add Form -->
<div class="add-form" style="margin-bottom: 1em; margin-top: 1em">
<select v-model="addType">
<option value="user">{{ $t("general.user") }}</option>
<option value="group">{{ $t("general.group") }}</option>
</select>
<select v-model="addListType">
<option value="deny">{{ $t("access.deny") }}</option>
<option value="allow">{{ $t("access.allow") }}</option>
</select>
<input class="group-user-add-input" v-model="addName" :placeholder="$t('access.enterName')" />
<button class="action add-rule-button" @click="submitAdd">
<i class="material-icons">add</i>
</button>
</div>
<table v-if="entries.length > 0">
<tbody>
<tr>
<th>{{ $t("access.allowDeny") }}</th>
<th>{{ $t("access.userGroup") }}</th>
<th>{{ $t("general.name") }}</th>
<th>{{ $t("buttons.edit") }}</th>
</tr>
<tr v-for="entry in entries" :key="entry.type + '-' + entry.name">
<td>{{ entry.allow ? $t("access.allow") : $t("access.deny") }}</td>
<td>{{ entry.type == "user" ? $t("general.user") : $t("general.group") }}</td>
<td>{{ entry.name }}</td>
<td>
<button @click="deleteAccess(entry)" class="action" :aria-label="$t('buttons.delete')"
:title="$t('buttons.delete')">
<i class="material-icons">delete</i>
</button>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="card-action">
<button @click="closeHovers" class="button button--flat button--grey" :aria-label="$t('buttons.close')"
:title="$t('buttons.close')">
{{ $t("buttons.close") }}
</button>
</div>
</template>
<script>
@@ -83,6 +83,8 @@ export default {
isEditingPath: false,
tempPath: this.path,
currentPath: this.path,
currentSource: this.sourceName,
tempSource: this.sourceName,
rule: { deny: { users: [], groups: [] }, allow: { users: [], groups: [] } },
addType: "user",
addListType: "deny",
@@ -112,7 +114,11 @@ export default {
await this.fetchRule();
},
watch: {
sourceName: 'fetchRule',
sourceName(newSourceName) {
this.currentSource = newSourceName;
this.tempSource = newSourceName;
this.fetchRule();
},
path(newPath) {
this.currentPath = newPath;
this.tempPath = newPath;
@@ -121,20 +127,25 @@ export default {
}
},
methods: {
closeHovers() {
mutations.closeHovers();
},
startPathEdit() {
this.tempPath = this.currentPath;
this.isEditingPath = true;
},
/**
* @param {{path: string}} pathOrData
* @param {{path: string, source: string}} pathOrData
*/
updateTempPath(pathOrData) {
if (pathOrData && pathOrData.path) {
this.tempPath = pathOrData.path;
this.tempSource = pathOrData.source;
}
},
confirmPathChange() {
this.currentPath = this.tempPath;
this.currentSource = this.tempSource;
this.isEditingPath = false;
this.fetchRule();
},
@@ -143,7 +154,7 @@ export default {
},
async fetchRule() {
try {
this.rule = await accessApi.get(this.sourceName, this.currentPath);
this.rule = await accessApi.get(this.currentSource, this.currentPath);
} catch (e) {
notify.showError(e);
this.rule = { deny: { users: [], groups: [] }, allow: { users: [], groups: [] } };
@@ -159,7 +170,7 @@ export default {
ruleCategory: entry.type,
value: entry.name
};
await accessApi.del(this.sourceName, this.currentPath, body);
await accessApi.del(this.currentSource, this.currentPath, body);
notify.showSuccess(this.$t("access.deleted"));
await this.fetchRule();
this.$emit('updated');
@@ -179,7 +190,7 @@ export default {
value: this.addName.trim()
};
await accessApi.add(
this.sourceName,
this.currentSource,
this.currentPath,
body
);
@@ -206,9 +217,11 @@ export default {
.add-form {
display: flex;
}
.add-rule-button {
max-width: 3em;
}
.group-user-add-input {
flex-grow: 1;
}
@@ -1,5 +1,4 @@
<template>
<div class="card floating">
<div class="card-title">
<h2>{{ $t('api.title') }}:</h2> <!-- eslint-disable-line @intlify/vue-i18n/no-raw-text -->
</div>
@@ -47,7 +46,6 @@
{{ $t('buttons.delete') }}
</button>
</div>
</div>
</template>
<script>
@@ -97,7 +95,6 @@ export default {
/* Basic styling for the prompt */
.card.floating {
padding: 20px;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
}
.card-content {
margin-bottom: 16px;
+33 -58
View File
@@ -1,66 +1,41 @@
<template>
<div class="card floating create-api__prompt__card" id="create-api">
<div class="card-title">
<h2>{{ $t('api.createTitle') }}</h2>
<div class="card-title">
<h2>{{ $t('api.createTitle') }}</h2>
</div>
<div class="card-content">
<!-- API Key Name Input -->
<p>{{ $t('api.keyName') }}</p>
<input v-focus class="input input--block" type="text" v-model.trim="apiName"
:placeholder="$t('api.keyNamePlaceholder')" />
<!-- Duration Input -->
<p>{{ $t('api.tokenDuration') }}</p>
<div class="inputWrapper">
<input class="sizeInput roundedInputLeft input" v-model.number="duration" type="number" min="1"
:placeholder="$t('api.durationNumberPlaceholder')" />
<select v-model="unit" class="roundedInputRight input">
<option value="days">{{ $t('api.days') }}</option>
<option value="months">{{ $t('api.months') }}</option>
</select>
</div>
<div class="card-content">
<!-- API Key Name Input -->
<p>{{ $t('api.keyName') }}</p>
<input
v-focus
class="input input--block"
type="text"
v-model.trim="apiName"
:placeholder="$t('api.keyNamePlaceholder')"
/>
<!-- Duration Input -->
<p>{{ $t('api.tokenDuration') }}</p>
<div class="inputWrapper">
<input
class="sizeInput roundedInputLeft input"
v-model.number="duration"
type="number"
min="1"
:placeholder="$t('api.durationNumberPlaceholder')"
/>
<select v-model="unit" class="roundedInputRight input">
<option value="days">{{ $t('api.days') }}</option>
<option value="months">{{ $t('api.months') }}</option>
</select>
</div>
<!-- Permissions Input -->
<p>{{ $t('api.permissionNote') }}</p>
<div class="settings-items">
<ToggleSwitch
v-for="(isEnabled, permission) in permissions"
:key="permission"
class="item"
v-model="permissions[permission]"
:name="permission"
/>
</div>
<!-- Permissions Input -->
<p>{{ $t('api.permissionNote') }}</p>
<div class="settings-items">
<ToggleSwitch v-for="(isEnabled, permission) in permissions" :key="permission" class="item"
v-model="permissions[permission]" :name="permission" />
</div>
</div>
<div class="card-action">
<button
@click="closeHovers"
class="button button--flat button--grey"
:aria-label="$t('buttons.cancel')"
:title="$t('buttons.cancel')"
>
{{ $t("buttons.cancel") }}
</button>
<button
class="button button--flat button--blue"
@click="createAPIKey"
:title="$t('buttons.create')"
>
{{ $t("buttons.create") }}
</button>
</div>
<div class="card-action">
<button @click="closeHovers" class="button button--flat button--grey" :aria-label="$t('buttons.cancel')"
:title="$t('buttons.cancel')">
{{ $t("buttons.cancel") }}
</button>
<button class="button button--flat button--blue" @click="createAPIKey" :title="$t('buttons.create')">
{{ $t("buttons.create") }}
</button>
</div>
</template>
@@ -1,5 +1,4 @@
<template>
<div class="card floating">
<div class="card-content">
<p v-if="selectedCount === 1">
{{ $t("prompts.deleteMessageSingle") }}
@@ -21,7 +20,6 @@
{{ $t("buttons.delete") }}
</button>
</div>
</div>
</template>
<script>
+11 -18
View File
@@ -1,22 +1,15 @@
<template>
<div class="card floating">
<div class="card-content">
<p>{{$t('prompts.deleteUserMessage')}}</p>
</div>
<div class="card-action">
<button
class="button button--flat button--grey"
@click="closeHovers"
v-focus
aria-label="Cancel"
:title="$t('buttons.cancel')"
>
{{ $t("buttons.cancel") }}
</button>
<button class="button button--flat" aria-label="Confirm Delete" @click="deleteUser">
{{ $t("buttons.delete") }}
</button>
</div>
<div class="card-content">
<p>{{ $t('prompts.deleteUserMessage') }}</p>
</div>
<div class="card-action">
<button class="button button--flat button--grey" @click="closeHovers" v-focus aria-label="Cancel"
:title="$t('buttons.cancel')">
{{ $t("buttons.cancel") }}
</button>
<button class="button button--flat" aria-label="Confirm Delete" @click="deleteUser">
{{ $t("buttons.delete") }}
</button>
</div>
</template>
<script>
+1 -3
View File
@@ -1,5 +1,4 @@
<template>
<div class="card floating" id="download">
<div class="card-title">
<h2>{{ $t("prompts.download") }}</h2>
</div>
@@ -14,8 +13,7 @@
v-focus
>
{{ ext }}
</button>
</div>
</button>
</div>
</template>
+21 -28
View File
@@ -1,34 +1,27 @@
<template>
<div class="card floating help">
<div class="card-title">
<h2>{{ $t("help.help") }}</h2>
</div>
<div class="card-title">
<h2>{{ $t("help.help") }}</h2>
</div>
<div class="card-content">
<ul>
<li><strong>F1</strong> - {{ $t("help.f1") }}</li> <!-- eslint-disable-line @intlify/vue-i18n/no-raw-text -->
<li><strong>F2</strong> - {{ $t("help.f2") }}</li> <!-- eslint-disable-line @intlify/vue-i18n/no-raw-text -->
<li><strong>DEL</strong> - {{ $t("help.del") }}</li> <!-- eslint-disable-line @intlify/vue-i18n/no-raw-text -->
<li><strong>ESC</strong> - {{ $t("help.esc") }}</li> <!-- eslint-disable-line @intlify/vue-i18n/no-raw-text -->
<li><strong>CTRL + S</strong> - {{ $t("help.ctrl.s") }}</li> <!-- eslint-disable-line @intlify/vue-i18n/no-raw-text -->
<li><strong>CTRL + F</strong> - {{ $t("help.ctrl.f") }}</li> <!-- eslint-disable-line @intlify/vue-i18n/no-raw-text -->
<li><strong>CTRL + Click</strong> - {{ $t("help.ctrl.click") }}</li> <!-- eslint-disable-line @intlify/vue-i18n/no-raw-text -->
<li><strong>Click</strong> - {{ $t("help.click") }}</li> <!-- eslint-disable-line @intlify/vue-i18n/no-raw-text -->
<li><strong>Double click</strong> - {{ $t("help.doubleClick") }}</li> <!-- eslint-disable-line @intlify/vue-i18n/no-raw-text -->
</ul>
</div>
<div class="card-content">
<ul>
<li><strong>F1</strong> - {{ $t("help.f1") }}</li> <!-- eslint-disable-line @intlify/vue-i18n/no-raw-text -->
<li><strong>F2</strong> - {{ $t("help.f2") }}</li> <!-- eslint-disable-line @intlify/vue-i18n/no-raw-text -->
<li><strong>DEL</strong> - {{ $t("help.del") }}</li> <!-- eslint-disable-line @intlify/vue-i18n/no-raw-text -->
<li><strong>ESC</strong> - {{ $t("help.esc") }}</li> <!-- eslint-disable-line @intlify/vue-i18n/no-raw-text -->
<li><strong>CTRL + S</strong> - {{ $t("help.ctrl.s") }}</li> <!-- eslint-disable-line @intlify/vue-i18n/no-raw-text -->
<li><strong>CTRL + F</strong> - {{ $t("help.ctrl.f") }}</li> <!-- eslint-disable-line @intlify/vue-i18n/no-raw-text -->
<li><strong>CTRL + Click</strong> - {{ $t("help.ctrl.click") }}</li> <!-- eslint-disable-line @intlify/vue-i18n/no-raw-text -->
<li><strong>Click</strong> - {{ $t("help.click") }}</li> <!-- eslint-disable-line @intlify/vue-i18n/no-raw-text -->
<li><strong>Double click</strong> - {{ $t("help.doubleClick") }}</li> <!-- eslint-disable-line @intlify/vue-i18n/no-raw-text -->
</ul>
</div>
<div class="card-action">
<button
type="submit"
@click="closeHovers"
class="button button--flat"
:aria-label="$t('buttons.ok')"
:title="$t('buttons.ok')"
>
{{ $t("buttons.ok") }}
</button>
</div>
<div class="card-action">
<button type="submit" @click="closeHovers" class="button button--flat" :aria-label="$t('buttons.ok')"
:title="$t('buttons.ok')">
{{ $t("buttons.ok") }}
</button>
</div>
</template>
+56 -68
View File
@@ -1,77 +1,65 @@
<template>
<div class="card floating">
<div class="card-title">
<h2>{{ $t("prompts.fileInfo") }}</h2>
</div>
<div class="card-title">
<h2>{{ $t("prompts.fileInfo") }}</h2>
</div>
<div class="card-content">
<p v-if="selected.length > 1">
{{ $t("prompts.filesSelected", { count: selected.length }) }}
</p>
<div class="card-content">
<p v-if="selected.length > 1">
{{ $t("prompts.filesSelected", { count: selected.length }) }}
</p>
<p class="break-word" v-if="selected.length < 2">
<strong>{{ $t("prompts.displayName") }}</strong> {{ name }}
</p>
<p v-if="!dir || selected.length > 1">
<strong>{{ $t("prompts.size") }}:</strong> <!-- eslint-disable-line @intlify/vue-i18n/no-raw-text -->
<span id="content_length"></span> {{ humanSize }}
</p>
<p v-if="!dir || selected.length > 1">
<strong>{{$t('prompts.typeName')}}</strong>
<span id="content_length"></span> {{ type }}
</p>
<p v-if="selected.length < 2" :title="modTime">
<strong>{{ $t("prompts.lastModified") }}:</strong> {{ humanTime }} <!-- eslint-disable-line @intlify/vue-i18n/no-raw-text -->
</p>
<p class="break-word" v-if="selected.length < 2">
<strong>{{ $t("prompts.displayName") }}</strong> {{ name }}
</p>
<p v-if="!dir || selected.length > 1">
<strong>{{ $t("prompts.size") }}:</strong> <!-- eslint-disable-line @intlify/vue-i18n/no-raw-text -->
<span id="content_length"></span> {{ humanSize }}
</p>
<p v-if="!dir || selected.length > 1">
<strong>{{ $t('prompts.typeName') }}</strong>
<span id="content_length"></span> {{ type }}
</p>
<p v-if="selected.length < 2" :title="modTime">
<strong>{{ $t("prompts.lastModified", { suffix: ":" }) }}</strong>
<!-- eslint-disable-line @intlify/vue-i18n/no-raw-text -->
</p>
<template v-if="dir && selected.length === 0">
<p>
<strong>{{ $t("prompts.numberFiles") }}:</strong> {{ req.numFiles }} <!-- eslint-disable-line @intlify/vue-i18n/no-raw-text -->
</p>
<p>
<strong>{{ $t("prompts.numberDirs") }}:</strong> {{ req.numDirs }} <!-- eslint-disable-line @intlify/vue-i18n/no-raw-text -->
</p>
</template>
<template v-if="dir && selected.length === 0">
<p>
<strong>{{ $t("prompts.numberFiles", { suffix: ":" }) }}</strong> {{ req.numFiles }}
<!-- eslint-disable-line @intlify/vue-i18n/no-raw-text -->
</p>
<p>
<strong>{{ $t("prompts.numberDirs", { suffix: ":" }) }}</strong> {{ req.numDirs }}
<!-- eslint-disable-line @intlify/vue-i18n/no-raw-text -->
</p>
</template>
<template v-if="!dir">
<p>
<strong>MD5: </strong> <!-- eslint-disable-line @intlify/vue-i18n/no-raw-text -->
<code
><a @click="checksum($event, 'md5')">{{ $t("prompts.show") }}</a></code
>
</p>
<p>
<strong>SHA1: </strong> <!-- eslint-disable-line @intlify/vue-i18n/no-raw-text -->
<code
><a @click="checksum($event, 'sha1')">{{ $t("prompts.show") }}</a></code
>
</p>
<p>
<strong>SHA256: </strong> <!-- eslint-disable-line @intlify/vue-i18n/no-raw-text -->
<code
><a @click="checksum($event, 'sha256')">{{ $t("prompts.show") }}</a></code
>
</p>
<p>
<strong>SHA512: </strong> <!-- eslint-disable-line @intlify/vue-i18n/no-raw-text -->
<code
><a @click="checksum($event, 'sha512')">{{ $t("prompts.show") }}</a></code
>
</p>
</template>
</div>
<template v-if="!dir">
<p>
<strong>MD5: </strong> <!-- eslint-disable-line @intlify/vue-i18n/no-raw-text -->
<code><a @click="checksum($event, 'md5')">{{ $t("prompts.show") }}</a></code>
</p>
<p>
<strong>SHA1: </strong> <!-- eslint-disable-line @intlify/vue-i18n/no-raw-text -->
<code><a @click="checksum($event, 'sha1')">{{ $t("prompts.show") }}</a></code>
</p>
<p>
<strong>SHA256: </strong> <!-- eslint-disable-line @intlify/vue-i18n/no-raw-text -->
<code><a @click="checksum($event, 'sha256')">{{ $t("prompts.show") }}</a></code>
</p>
<p>
<strong>SHA512: </strong> <!-- eslint-disable-line @intlify/vue-i18n/no-raw-text -->
<code><a @click="checksum($event, 'sha512')">{{ $t("prompts.show") }}</a></code>
</p>
</template>
</div>
<div class="card-action">
<button
type="submit"
@click="closeHovers"
class="button button--flat"
:aria-label="$t('buttons.ok')"
:title="$t('buttons.ok')"
>
{{ $t("buttons.ok") }}
</button>
</div>
<div class="card-action">
<button type="submit" @click="closeHovers" class="button button--flat" :aria-label="$t('buttons.ok')"
:title="$t('buttons.ok')">
{{ $t("buttons.ok") }}
</button>
</div>
</template>
<script>
+25 -27
View File
@@ -1,35 +1,33 @@
<template>
<div class="card floating">
<div class="card-title">
<h2>{{ $t(`prompts.${operation}`) }}</h2>
</div>
<div class="card-title">
<h2>{{ $t(`prompts.${operation}`) }}</h2>
</div>
<div class="card-content">
<p v-if="operation === 'copy'">{{ $t("prompts.copyMessage") }}</p>
<div class="card-content">
<p v-if="operation === 'copy'">{{ $t("prompts.copyMessage") }}</p>
<file-list ref="fileList" @update:selected="updateDestination">
</file-list>
</div>
<file-list ref="fileList" @update:selected="updateDestination">
</file-list>
</div>
<div class="card-action" style="display: flex; align-items: center; justify-content: space-between">
<template v-if="user.permissions.modify">
<button class="button button--flat" @click="$refs.fileList.createDir()"
:aria-label="$t('sidebar.newFolder')" :title="$t('sidebar.newFolder')" style="justify-self: left">
<span>{{ $t("sidebar.newFolder") }}</span>
</button>
</template>
<div>
<button class="button button--flat button--grey" @click="closeHovers" :aria-label="$t('buttons.cancel')"
:title="$t('buttons.cancel')">
{{ $t("buttons.cancel") }}
</button>
<button :disabled="destContainsSrc" class="button button--flat" @click="performOperation"
:aria-label="$t(`buttons.${operation}`)" :title="$t(`buttons.${operation}`)">
{{ $t(`buttons.${operation}`) }}
</button>
</div>
</div>
<div class="card-action" style="display: flex; align-items: center; justify-content: space-between">
<template v-if="user.permissions.modify">
<button class="button button--flat" @click="$refs.fileList.createDir()" :aria-label="$t('sidebar.newFolder')"
:title="$t('sidebar.newFolder')" style="justify-self: left">
<span>{{ $t("sidebar.newFolder") }}</span>
</button>
</template>
<div>
<button class="button button--flat button--grey" @click="closeHovers" :aria-label="$t('buttons.cancel')"
:title="$t('buttons.cancel')">
{{ $t("buttons.cancel") }}
</button>
<button :disabled="destContainsSrc" class="button button--flat" @click="performOperation"
:aria-label="$t(`buttons.${operation}`)" :title="$t(`buttons.${operation}`)">
{{ $t(`buttons.${operation}`) }}
</button>
</div>
</div>
</template>
<script>
+17 -33
View File
@@ -1,39 +1,23 @@
<template>
<div class="card floating">
<div class="card-title">
<h2>{{ $t("prompts.newDir") }}</h2>
</div>
<div class="card-title">
<h2>{{ $t("prompts.newDir") }}</h2>
</div>
<div class="card-content">
<p>{{ $t("prompts.newDirMessage") }}</p>
<input
aria-label="New Folder Name"
class="input input--block"
type="text"
@keyup.enter="submit"
v-model.trim="name"
v-focus
/>
</div>
<div class="card-content">
<p>{{ $t("prompts.newDirMessage") }}</p>
<input aria-label="New Folder Name" class="input input--block" type="text" @keyup.enter="submit" v-model.trim="name"
v-focus />
</div>
<div class="card-action">
<button
class="button button--flat button--grey"
@click="closeHovers"
:aria-label="$t('buttons.cancel')"
:title="$t('buttons.cancel')"
>
{{ $t("buttons.cancel") }}
</button>
<button
class="button button--flat"
:aria-label="$t('buttons.create')"
:title="$t('buttons.create')"
@click="submit"
>
{{ $t("buttons.create") }}
</button>
</div>
<div class="card-action">
<button class="button button--flat button--grey" @click="closeHovers" :aria-label="$t('buttons.cancel')"
:title="$t('buttons.cancel')">
{{ $t("buttons.cancel") }}
</button>
<button class="button button--flat" :aria-label="$t('buttons.create')" :title="$t('buttons.create')"
@click="submit">
{{ $t("buttons.create") }}
</button>
</div>
</template>
<script>
+17 -33
View File
@@ -1,39 +1,23 @@
<template>
<div class="card floating">
<div class="card-title">
<h2>{{ $t("prompts.newFile") }}</h2>
</div>
<div class="card-title">
<h2>{{ $t("prompts.newFile") }}</h2>
</div>
<div class="card-content">
<p>{{ $t("prompts.newFileMessage") }}</p>
<input
class="input input--block"
aria-label="FileName Field"
v-focus
type="text"
@keyup.enter="submit"
v-model.trim="name"
/>
</div>
<div class="card-content">
<p>{{ $t("prompts.newFileMessage") }}</p>
<input class="input input--block" aria-label="FileName Field" v-focus type="text" @keyup.enter="submit"
v-model.trim="name" />
</div>
<div class="card-action">
<button
class="button button--flat button--grey"
@click="closeHovers"
:aria-label="$t('buttons.cancel')"
:title="$t('buttons.cancel')"
>
{{ $t("buttons.cancel") }}
</button>
<button
class="button button--flat"
@click="submit"
:aria-label="$t('buttons.create')"
:title="$t('buttons.create')"
>
{{ $t("buttons.create") }}
</button>
</div>
<div class="card-action">
<button class="button button--flat button--grey" @click="closeHovers" :aria-label="$t('buttons.cancel')"
:title="$t('buttons.cancel')">
{{ $t("buttons.cancel") }}
</button>
<button class="button button--flat" @click="submit" :aria-label="$t('buttons.create')"
:title="$t('buttons.create')">
{{ $t("buttons.create") }}
</button>
</div>
</template>
<script>
+5 -6
View File
@@ -1,7 +1,6 @@
<template>
<div>
<div class="card floating fb-shadow" v-if="showOverlay" :aria-label="promptLabel">
<component
v-if="showOverlay"
:ref="currentPromptName"
:is="currentPromptName"
v-bind="currentPromptProps"
@@ -99,10 +98,10 @@ export default {
});
},
computed: {
promptLabel() {
return getters.currentPromptName() + "-prompt";
},
currentPromptName() {
if (getters.currentPromptName() == null) {
return "";
}
return getters.currentPromptName();
},
currentPrompt() {
@@ -129,7 +128,7 @@ export default {
return state.plugins;
},
showOverlay() {
return getters.currentPromptName() !== "more";
return getters.currentPromptName() !== "" && getters.currentPromptName() !== "ContextMenu";
},
},
methods: {},
+20 -38
View File
@@ -1,44 +1,26 @@
<template>
<div class="card floating">
<div class="card-title">
<h2>{{ $t("prompts.rename") }}</h2>
</div>
<div class="card-title">
<h2>{{ $t("prompts.rename") }}</h2>
</div>
<div class="card-content">
<p>{{ $t("prompts.renameMessage", { filename: oldName() }) }}</p>
<input
class="input input--block"
:class="{ 'invalid-form': !validateFileName(name) }"
v-focus
type="text"
@keyup.enter="submit"
v-model.trim="name"
/>
<p v-if="!validateFileName(name) && name.length > 0" class="validation-error">
{{ $t("prompts.invalidName") }}
</p>
</div>
<div class="card-content">
<p>{{ $t("prompts.renameMessage", { filename: oldName() }) }}</p>
<input class="input input--block" :class="{ 'invalid-form': !validateFileName(name) }" v-focus type="text"
@keyup.enter="submit" v-model.trim="name" />
<p v-if="!validateFileName(name) && name.length > 0" class="validation-error">
{{ $t("prompts.invalidName") }}
</p>
</div>
<div class="card-action">
<button
class="button button--flat button--grey"
@click="closeHovers"
:aria-label="$t('buttons.cancel')"
:title="$t('buttons.cancel')"
>
{{ $t("buttons.cancel") }}
</button>
<button
@click="submit"
class="button button--flat"
:disabled="!validateFileName(name) || name.length === 0"
type="submit"
:aria-label="$t('buttons.rename')"
:title="$t('buttons.rename')"
>
{{ $t("buttons.rename") }}
</button>
</div>
<div class="card-action">
<button class="button button--flat button--grey" @click="closeHovers" :aria-label="$t('buttons.cancel')"
:title="$t('buttons.cancel')">
{{ $t("buttons.cancel") }}
</button>
<button @click="submit" class="button button--flat" :disabled="!validateFileName(name) || name.length === 0"
type="submit" :aria-label="$t('buttons.rename')" :title="$t('buttons.rename')">
{{ $t("buttons.rename") }}
</button>
</div>
</template>
<script>
+15 -25
View File
@@ -1,31 +1,21 @@
<template>
<div class="card floating">
<div class="card-title">
<h2>{{ $t("prompts.replace") }}</h2>
</div>
<div class="card-title">
<h2>{{ $t("prompts.replace") }}</h2>
</div>
<div class="card-content">
<p>{{ $t("prompts.replaceMessage") }}</p>
</div>
<div class="card-content">
<p>{{ $t("prompts.replaceMessage") }}</p>
</div>
<div class="card-action">
<button
class="button button--flat button--grey"
@click="closeTopHover"
:aria-label="$t('buttons.cancel')"
:title="$t('buttons.cancel')"
>
{{ $t("buttons.cancel") }}
</button>
<button
class="button button--flat button--red"
@click="currentPrompt.confirm"
:aria-label="$t('buttons.replace')"
:title="$t('buttons.replace')"
>
{{ $t("buttons.replace") }}
</button>
</div>
<div class="card-action">
<button class="button button--flat button--grey" @click="closeTopHover" :aria-label="$t('buttons.cancel')"
:title="$t('buttons.cancel')">
{{ $t("buttons.cancel") }}
</button>
<button class="button button--flat button--red" @click="currentPrompt.confirm" :aria-label="$t('buttons.replace')"
:title="$t('buttons.replace')">
{{ $t("buttons.replace") }}
</button>
</div>
</template>
<script>
@@ -1,42 +1,25 @@
<template>
<div class="card floating">
<div class="card-title">
<h2>{{ $t("prompts.replace") }}</h2>
</div>
<div class="card-title">
<h2>{{ $t("prompts.replace") }}</h2>
</div>
<div class="card-content">
<p>{{ $t("prompts.replaceMessage") }}</p>
</div>
<div class="card-action">
<button
class="button button--flat button--grey"
@click="closeHovers"
:aria-label="$t('buttons.cancel')"
:title="$t('buttons.cancel')"
tabindex="3"
>
{{ $t("buttons.cancel") }}
</button>
<button
class="button button--flat button--blue"
@click="(event) => currentPrompt.confirm(event, 'rename')"
:aria-label="$t('buttons.rename')"
:title="$t('buttons.rename')"
tabindex="2"
>
{{ $t("buttons.rename") }}
</button>
<button
id="focus-prompt"
class="button button--flat button--red"
@click="(event) => currentPrompt.confirm(event, 'overwrite')"
:aria-label="$t('buttons.replace')"
:title="$t('buttons.replace')"
tabindex="1"
>
{{ $t("buttons.replace") }}
</button>
</div>
<div class="card-content">
<p>{{ $t("prompts.replaceMessage") }}</p>
</div>
<div class="card-action">
<button class="button button--flat button--grey" @click="closeHovers" :aria-label="$t('buttons.cancel')"
:title="$t('buttons.cancel')" tabindex="3">
{{ $t("buttons.cancel") }}
</button>
<button class="button button--flat button--blue" @click="(event) => currentPrompt.confirm(event, 'rename')"
:aria-label="$t('buttons.rename')" :title="$t('buttons.rename')" tabindex="2">
{{ $t("buttons.rename") }}
</button>
<button id="focus-prompt" class="button button--flat button--red"
@click="(event) => currentPrompt.confirm(event, 'overwrite')" :aria-label="$t('buttons.replace')"
:title="$t('buttons.replace')" tabindex="1">
{{ $t("buttons.replace") }}
</button>
</div>
</template>
+84 -120
View File
@@ -1,125 +1,89 @@
<template>
<div class="card floating share__promt__card" id="share">
<div class="card-title">
<h2>{{ $t("buttons.share") }}</h2>
</div>
<div aria-label="share-path" class="searchContext"> {{$t('search.path')}} {{ subpath }}</div>
<p> {{ $t('share.notice') }} </p>
<template v-if="listing">
<div class="card-content">
<table>
<tbody>
<tr>
<th>#</th> <!-- eslint-disable-line @intlify/vue-i18n/no-raw-text -->
<th>{{ $t("settings.shareDuration") }}</th>
<th></th>
<th></th>
</tr>
<tr v-for="link in links" :key="link.hash">
<td>{{ link.hash }}</td>
<td>
<template v-if="link.expire !== 0">{{ humanTime(link.expire) }}</template>
<template v-else>{{ $t("permanent") }}</template>
</td>
<td class="small">
<button
class="action copy-clipboard"
:data-clipboard-text="buildLink(link)"
:aria-label="$t('buttons.copyToClipboard')"
:title="$t('buttons.copyToClipboard')"
>
<i class="material-icons">content_paste</i>
</button>
</td>
<td class="small" v-if="hasDownloadLink()">
<button
class="action copy-clipboard"
:data-clipboard-text="buildDownloadLink(link)"
:aria-label="$t('buttons.copyDownloadLinkToClipboard')"
:title="$t('buttons.copyDownloadLinkToClipboard')"
>
<i class="material-icons">content_paste_go</i>
</button>
</td>
<td class="small">
<button
class="action"
@click="deleteLink($event, link)"
:aria-label="$t('buttons.delete')"
:title="$t('buttons.delete')"
>
<i class="material-icons">delete</i>
</button>
</td>
</tr>
</tbody>
</table>
</div>
<div class="card-action">
<button
class="button button--flat button--grey"
@click="closeHovers"
:aria-label="$t('buttons.close')"
:title="$t('buttons.close')"
>
{{ $t("buttons.close") }}
</button>
<button
class="button button--flat button--blue"
@click="() => switchListing()"
:aria-label="$t('buttons.new')"
:title="$t('buttons.new')"
>
{{ $t("buttons.new") }}
</button>
</div>
</template>
<template v-else>
<div class="card-content">
<p>{{ $t("settings.shareDuration") }}</p>
<div class="input-group input">
<input
v-focus
type="number"
max="2147483647"
min="1"
@keyup.enter="submit"
v-model.trim="time"
/>
<select class="right" v-model="unit" :aria-label="$t('time.unit')">
<option value="seconds">{{ $t("time.seconds") }}</option>
<option value="minutes">{{ $t("time.minutes") }}</option>
<option value="hours">{{ $t("time.hours") }}</option>
<option value="days">{{ $t("time.days") }}</option>
</select>
</div>
<p>{{ $t("prompts.optionalPassword") }}</p>
<input class="input input--block" type="password" v-model.trim="password" />
</div>
<div class="card-action">
<button
class="button button--flat button--grey"
@click="() => switchListing()"
:aria-label="$t('buttons.cancel')"
:title="$t('buttons.cancel')"
>
{{ $t("buttons.cancel") }}
</button>
<button
class="button button--flat button--blue"
@click="submit"
aria-label="Share-Confirm"
:title="$t('buttons.share')"
>
{{ $t("buttons.share") }}
</button>
</div>
</template>
<div class="card-title">
<h2>{{ $t("buttons.share") }}</h2>
</div>
<div aria-label="share-path" class="searchContext"> {{ $t('search.path') }} {{ subpath }}</div>
<p> {{ $t('share.notice') }} </p>
<template v-if="listing">
<div class="card-content">
<table>
<tbody>
<tr>
<th>#</th> <!-- eslint-disable-line @intlify/vue-i18n/no-raw-text -->
<th>{{ $t("settings.shareDuration") }}</th>
<th></th>
<th></th>
</tr>
<tr v-for="link in links" :key="link.hash">
<td>{{ link.hash }}</td>
<td>
<template v-if="link.expire !== 0">{{ humanTime(link.expire) }}</template>
<template v-else>{{ $t("permanent") }}</template>
</td>
<td class="small">
<button class="action copy-clipboard" :data-clipboard-text="buildLink(link)"
:aria-label="$t('buttons.copyToClipboard')" :title="$t('buttons.copyToClipboard')">
<i class="material-icons">content_paste</i>
</button>
</td>
<td class="small" v-if="hasDownloadLink()">
<button class="action copy-clipboard" :data-clipboard-text="buildDownloadLink(link)"
:aria-label="$t('buttons.copyDownloadLinkToClipboard')"
:title="$t('buttons.copyDownloadLinkToClipboard')">
<i class="material-icons">content_paste_go</i>
</button>
</td>
<td class="small">
<button class="action" @click="deleteLink($event, link)" :aria-label="$t('buttons.delete')"
:title="$t('buttons.delete')">
<i class="material-icons">delete</i>
</button>
</td>
</tr>
</tbody>
</table>
</div>
<div class="card-action">
<button class="button button--flat button--grey" @click="closeHovers" :aria-label="$t('buttons.close')"
:title="$t('buttons.close')">
{{ $t("buttons.close") }}
</button>
<button class="button button--flat button--blue" @click="() => switchListing()" :aria-label="$t('buttons.new')"
:title="$t('buttons.new')">
{{ $t("buttons.new") }}
</button>
</div>
</template>
<template v-else>
<div class="card-content">
<p>{{ $t("settings.shareDuration") }}</p>
<div class="input-group input">
<input v-focus type="number" max="2147483647" min="1" @keyup.enter="submit" v-model.trim="time" />
<select class="right" v-model="unit" :aria-label="$t('time.unit')">
<option value="seconds">{{ $t("time.seconds") }}</option>
<option value="minutes">{{ $t("time.minutes") }}</option>
<option value="hours">{{ $t("time.hours") }}</option>
<option value="days">{{ $t("time.days") }}</option>
</select>
</div>
<p>{{ $t("prompts.optionalPassword") }}</p>
<input class="input input--block" type="password" v-model.trim="password" />
</div>
<div class="card-action">
<button class="button button--flat button--grey" @click="() => switchListing()" :aria-label="$t('buttons.cancel')"
:title="$t('buttons.cancel')">
{{ $t("buttons.cancel") }}
</button>
<button class="button button--flat button--blue" @click="submit" aria-label="Share-Confirm"
:title="$t('buttons.share')">
{{ $t("buttons.share") }}
</button>
</div>
</template>
</template>
<script>
import { notify } from "@/notify";
+12 -22
View File
@@ -1,26 +1,16 @@
<template>
<div class="card floating">
<div class="card-content">
<p>{{ $t("prompts.deleteMessageShare", { path }) }}</p>
</div>
<div class="card-action">
<button
@click="closeHovers"
class="button button--flat button--grey"
:aria-label="$t('buttons.cancel')"
:title="$t('buttons.cancel')"
>
{{ $t("buttons.cancel") }}
</button>
<button
@click="submit"
class="button button--flat button--red"
:aria-label="$t('buttons.delete')"
:title="$t('buttons.delete')"
>
{{ $t("buttons.delete") }}
</button>
</div>
<div class="card-content">
<p>{{ $t("prompts.deleteMessageShare", { path }) }}</p>
</div>
<div class="card-action">
<button @click="closeHovers" class="button button--flat button--grey" :aria-label="$t('buttons.cancel')"
:title="$t('buttons.cancel')">
{{ $t("buttons.cancel") }}
</button>
<button @click="submit" class="button button--flat button--red" :aria-label="$t('buttons.delete')"
:title="$t('buttons.delete')">
{{ $t("buttons.delete") }}
</button>
</div>
</template>
<script>
+24 -39
View File
@@ -1,45 +1,30 @@
<template>
<div class="card floating create-api__prompt__card" id="create-api">
<div class="card-title">
<h2>{{ $t("otp.name") }}</h2>
</div>
<div v-if="error !== ''" class="wrong-login card">{{ error }}</div>
<div v-if="succeeded" >{{ $t("otp.verificationSucceed") }}</div>
<div v-if="!succeeded" class="card-content">
<p v-if="generate">{{ $t("otp.generate") }}</p>
<div v-if="generate" class="share__box__element share__box__center">
<p aria-label="otp-url">{{ this.url }}</p>
<qrcode-vue class="qrcode" :value="this.url" size="200" level="M"></qrcode-vue>
</div>
<p>{{ $t("otp.verifyInstructions") }}</p>
<input
v-focus
class="input input--block"
type="text"
v-model="code"
@keyup.enter="verifyCode"
:placeholder="$t('otp.codeInputPlaceholder')"
/>
<div class="card-title">
<h2>{{ $t("otp.name") }}</h2>
</div>
<div v-if="error !== ''" class="wrong-login card">{{ error }}</div>
<div v-if="succeeded">{{ $t("otp.verificationSucceed") }}</div>
<div v-if="!succeeded" class="card-content">
<p v-if="generate">{{ $t("otp.generate") }}</p>
<div v-if="generate" class="share__box__element share__box__center">
<p aria-label="otp-url">{{ this.url }}</p>
<qrcode-vue class="qrcode" :value="this.url" size="200" level="M"></qrcode-vue>
</div>
<p>{{ $t("otp.verifyInstructions") }}</p>
<input v-focus class="input input--block" type="text" v-model="code" @keyup.enter="verifyCode"
:placeholder="$t('otp.codeInputPlaceholder')" />
</div>
<div class="card-action">
<button
@click="closeHovers"
class="button button--flat button--grey"
:aria-label="succeeded ? $t('buttons.close') : $t('buttons.cancel')"
:title="succeeded ? $t('buttons.close') : $t('buttons.cancel')"
>
{{ succeeded ? $t('buttons.close') : $t('buttons.cancel') }}
</button>
<button
v-if="!succeeded"
class="button button--flat button--blue"
@click="verifyCode"
:title="$t('buttons.verify')"
>
{{ $t("buttons.verify") }}
</button>
</div>
<div class="card-action">
<button @click="closeHovers" class="button button--flat button--grey"
:aria-label="succeeded ? $t('buttons.close') : $t('buttons.cancel')"
:title="succeeded ? $t('buttons.close') : $t('buttons.cancel')">
{{ succeeded ? $t('buttons.close') : $t('buttons.cancel') }}
</button>
<button v-if="!succeeded" class="button button--flat button--blue" @click="verifyCode"
:title="$t('buttons.verify')">
{{ $t("buttons.verify") }}
</button>
</div>
</template>
+92 -176
View File
@@ -1,193 +1,108 @@
<template>
<div class="card floating" >
<div class="card-title">
<h2>{{ $t("prompts.upload") }}</h2>
<p>{{ uploadSettingsDescription }}</p>
<div class="card-title">
<h2>{{ $t("prompts.upload") }}</h2>
<p>{{ uploadSettingsDescription }}</p>
</div>
<div class="upload-prompt" :class="{ dropping: isDragging }" @dragenter.prevent="onDragEnter"
@dragover.prevent="onDragOver" @dragleave.prevent="onDragLeave" @drop.prevent="onDrop">
<div class="upload-prompt-container">
<i v-if="files.length === 0" class="material-icons">cloud_upload</i>
<p v-if="files.length === 0">{{ $t("prompts.dragAndDrop") }}</p>
<div class="button-group">
<button @click="triggerFilePicker" class="button button--flat">
{{ $t("buttons.file") }}
</button>
<button style="margin-left: 1em" @click="triggerFolderPicker" class="button button--flat">
{{ $t("buttons.folder") }}
</button>
</div>
</div>
<div
class="upload-prompt"
:class="{ dropping: isDragging }"
@dragenter.prevent="onDragEnter"
@dragover.prevent="onDragOver"
@dragleave.prevent="onDragLeave"
@drop.prevent="onDrop"
>
<div class="upload-prompt-container">
<i v-if="files.length === 0" class="material-icons">cloud_upload</i>
<p v-if="files.length === 0">{{ $t("prompts.dragAndDrop") }}</p>
<div class="button-group">
<button @click="triggerFilePicker" class="button button--flat">
{{ $t("buttons.file") }}
</div>
<div class="card-content" @drop.prevent="onDrop">
<div v-if="showConflictPrompt" class="conflict-overlay">
<div class="card">
<div class="card-content">
<p>{{ $t("prompts.conflictsDetected") }}</p>
</div>
<div class="card-actions">
<button @click="resolveConflict(false)" class="button button--flat button--grey">
{{ $t("buttons.cancel") }}
</button>
<button
style="margin-left: 1em"
@click="triggerFolderPicker"
class="button button--flat"
>
{{ $t("buttons.folder") }}
<button @click="resolveConflict(true)" class="button button--flat button--red">
{{ $t("buttons.replace") }}
</button>
</div>
</div>
</div>
<div
class="card-content"
@drop.prevent="onDrop"
>
<div v-if="showConflictPrompt" class="conflict-overlay">
<div class="card">
<div class="card-content">
<p>{{ $t("prompts.conflictsDetected") }}</p>
</div>
<div class="card-actions">
<button
@click="resolveConflict(false)"
class="button button--flat button--grey"
>
{{ $t("buttons.cancel") }}
</button>
<button
@click="resolveConflict(true)"
class="button button--flat button--red"
>
{{ $t("buttons.replace") }}
</button>
</div>
</div>
</div>
<div v-if="files.length > 0" class="upload-list">
<div v-for="file in files" :key="file.id" class="upload-item">
<i class="material-icons file-icon">{{file.type === "directory" ? "folder" : "insert_drive_file" }}</i> <!-- eslint-disable-line @intlify/vue-i18n/no-raw-text -->
<div class="file-info">
<p class="file-name">{{ file.name }}</p>
<progress-bar
v-if="file.type !== 'directory'"
:val="
file.status === 'completed'
? $t('prompts.completed')
: file.status === 'error'
? $t('prompts.error')
: file.status === 'conflict'
<div v-if="files.length > 0" class="upload-list">
<div v-for="file in files" :key="file.id" class="upload-item">
<i class="material-icons file-icon">{{ file.type === "directory" ? "folder" : "insert_drive_file" }}</i> <!-- eslint-disable-line @intlify/vue-i18n/no-raw-text -->
<div class="file-info">
<p class="file-name">{{ file.name }}</p>
<progress-bar v-if="file.type !== 'directory'" :val="file.status === 'completed'
? $t('prompts.completed')
: file.status === 'error'
? $t('prompts.error')
: file.status === 'conflict'
? $t('prompts.conflictsDetected')
: (file.progress / 100) * file.size
"
:unit="file.status === 'completed' || file.status === 'error' ? '' : 'bytes'"
:max="file.size"
:status="file.status"
text-position="inside"
size="20"
>
</progress-bar>
<div v-else class="status-label">
<span>{{ $t(`prompts.${file.status}`) }}</span>
</div>
</div>
<div class="file-actions">
<button
v-if="file.status === 'uploading'"
@click="uploadManager.pause(file.id)"
class="action"
:aria-label="$t('buttons.pause')"
:title="$t('buttons.pause')"
>
<i class="material-icons">pause</i>
</button>
<button
v-if="file.status === 'paused'"
@click="uploadManager.resume(file.id)"
class="action"
:aria-label="$t('buttons.resume')"
:title="$t('buttons.resume')"
>
<i class="material-icons">play_arrow</i>
</button>
<button
v-if="file.status === 'error'"
@click="uploadManager.retry(file.id)"
class="action"
:aria-label="$t('buttons.retry')"
:title="$t('buttons.retry')"
>
<i class="material-icons">replay</i>
</button>
<button
v-if="file.status === 'conflict'"
@click="handleConflictAction(file)"
class="action"
:aria-label="$t('buttons.replace')"
:title="$t('buttons.replace')"
>
<i class="material-icons">sync_problem</i>
</button>
<button
@click="cancelUpload(file.id)"
class="action"
:aria-label="$t('buttons.cancel')"
:title="$t('buttons.cancel')"
>
<i class="material-icons">close</i>
</button>
" :unit="file.status === 'completed' || file.status === 'error' ? '' : 'bytes'" :max="file.size"
:status="file.status" text-position="inside" size="20">
</progress-bar>
<div v-else class="status-label">
<span>{{ $t(`prompts.${file.status}`) }}</span>
</div>
</div>
<div class="file-actions">
<button v-if="file.status === 'uploading'" @click="uploadManager.pause(file.id)" class="action"
:aria-label="$t('buttons.pause')" :title="$t('buttons.pause')">
<i class="material-icons">pause</i>
</button>
<button v-if="file.status === 'paused'" @click="uploadManager.resume(file.id)" class="action"
:aria-label="$t('buttons.resume')" :title="$t('buttons.resume')">
<i class="material-icons">play_arrow</i>
</button>
<button v-if="file.status === 'error'" @click="uploadManager.retry(file.id)" class="action"
:aria-label="$t('buttons.retry')" :title="$t('buttons.retry')">
<i class="material-icons">replay</i>
</button>
<button v-if="file.status === 'conflict'" @click="handleConflictAction(file)" class="action"
:aria-label="$t('buttons.replace')" :title="$t('buttons.replace')">
<i class="material-icons">sync_problem</i>
</button>
<button @click="cancelUpload(file.id)" class="action" :aria-label="$t('buttons.cancel')"
:title="$t('buttons.cancel')">
<i class="material-icons">close</i>
</button>
</div>
</div>
</div>
<div class="card-actions">
<button
@click="close"
class="button button--flat button--grey"
:aria-label="$t('buttons.cancel')"
:title="$t('buttons.cancel')"
>
{{ $t("buttons.close") }}
</button>
<div class="spacer"></div>
<button
v-if="canPauseAll"
@click="uploadManager.pauseAll"
class="button button--flat"
:aria-label="$t('buttons.pauseAll')"
:title="$t('buttons.pauseAll')"
>
{{ $t("buttons.pauseAll") }}
</button>
<button
v-if="canResumeAll"
@click="uploadManager.resumeAll"
class="button button--flat"
:aria-label="$t('buttons.resumeAll')"
:title="$t('buttons.resumeAll')"
>
{{ $t("buttons.resumeAll") }}
</button>
<button
@click="clearCompleted"
class="button button--flat"
:disabled="!hasCompleted"
:aria-label="$t('buttons.clearCompleted')"
:title="$t('buttons.clearCompleted')"
>
{{ $t("buttons.clearCompleted") }}
</button>
</div>
<input
ref="fileInput"
@change="onFilePicked"
type="file"
multiple
style="display: none"
/>
<input
ref="folderInput"
@change="onFolderPicked"
type="file"
webkitdirectory
directory
multiple
style="display: none"
/>
</div>
<div class="card-actions">
<button @click="close" class="button button--flat button--grey" :aria-label="$t('buttons.cancel')"
:title="$t('buttons.cancel')">
{{ $t("buttons.close") }}
</button>
<div class="spacer"></div>
<button v-if="canPauseAll" @click="uploadManager.pauseAll" class="button button--flat"
:aria-label="$t('buttons.pauseAll')" :title="$t('buttons.pauseAll')">
{{ $t("buttons.pauseAll") }}
</button>
<button v-if="canResumeAll" @click="uploadManager.resumeAll" class="button button--flat"
:aria-label="$t('buttons.resumeAll')" :title="$t('buttons.resumeAll')">
{{ $t("buttons.resumeAll") }}
</button>
<button @click="clearCompleted" class="button button--flat" :disabled="!hasCompleted"
:aria-label="$t('buttons.clearCompleted')" :title="$t('buttons.clearCompleted')">
{{ $t("buttons.clearCompleted") }}
</button>
</div>
<input ref="fileInput" @change="onFilePicked" type="file" multiple style="display: none" />
<input ref="folderInput" @change="onFolderPicked" type="file" webkitdirectory directory multiple
style="display: none" />
</template>
<script>
@@ -573,7 +488,8 @@ export default {
.upload-list {
overflow-y: auto;
padding-right: 0.5em; /* To avoid scrollbar overlapping content */
padding-right: 0.5em;
/* To avoid scrollbar overlapping content */
flex-grow: 1;
display: flex;
flex-direction: column-reverse;
+24 -30
View File
@@ -1,38 +1,31 @@
<template>
<div class="card floating">
<errors v-if="error" :errorCode="error.status" />
<form @submit="save" v-if="loaded">
<div class="card-title">
<h2 v-if="isNew">{{ $t("settings.newUser") }}</h2>
<h2 v-else-if="actor.id == user.id">
{{ $t("settings.modifyCurrentUser") }} {{ user.username }}
</h2>
<h2 v-else>{{ $t("settings.modifyOtherUser") }} {{ user.username }}</h2>
</div>
<errors v-if="error" :errorCode="error.status" />
<form @submit="save" v-if="loaded">
<div class="card-title">
<h2 v-if="isNew">{{ $t("settings.newUser") }}</h2>
<h2 v-else-if="actor.id == user.id">
{{ $t("settings.modifyCurrentUser") }} {{ user.username }}
</h2>
<h2 v-else>{{ $t("settings.modifyOtherUser") }} {{ user.username }}</h2>
</div>
<div class="card-content minimal-card">
<user-form v-model:user="user" :createUserDir="createUserDir" :isNew="isNew"
@update:createUserDir="(updatedDir) => (createUserDir = updatedDir)" />
</div>
<div class="card-content minimal-card">
<user-form v-model:user="user" :createUserDir="createUserDir" :isNew="isNew"
@update:createUserDir="(updatedDir) => (createUserDir = updatedDir)" />
</div>
<div v-if="actor.permissions.admin" class="card-action">
<button
class="button button--flat button--grey"
@click="closeHovers"
:aria-label="$t('buttons.cancel')"
:title="$t('buttons.cancel')"
>
<div v-if="actor.permissions.admin" class="card-action">
<button class="button button--flat button--grey" @click="closeHovers" :aria-label="$t('buttons.cancel')"
:title="$t('buttons.cancel')">
{{ $t("buttons.cancel") }}
</button>
<button v-if="!isNew" @click.prevent="deletePrompt" type="button" class="button button--flat button--red"
aria-label="Delete User" :title="$t('buttons.delete')">
{{ $t("buttons.delete") }}
</button>
<input aria-label="Save User" class="save-button button button--flat" type="submit" :value="$t('buttons.save')" />
</div>
</form>
</div>
<button v-if="!isNew" @click.prevent="deletePrompt" type="button" class="button button--flat button--red"
aria-label="Delete User" :title="$t('buttons.delete')">
{{ $t("buttons.delete") }}
</button>
<input aria-label="Save User" class="save-button button button--flat" type="submit" :value="$t('buttons.save')" />
</div>
</form>
</template>
<script>
@@ -145,6 +138,7 @@ export default {
padding-top: 0 !important;
padding-bottom: 0 !important;
}
.save-button {
width: 33%;
}
+2 -2
View File
@@ -304,11 +304,11 @@ export default {
<td style="padding: 0.2em 0.5em; border-bottom: 1px solid #ccc;">${info.assessment || 'unknown'}</td>
</tr>
<tr>
<td style="padding: 0.2em 0.5em; border-bottom: 1px solid #ccc;">${this.$t("index.files")}</td>
<td style="padding: 0.2em 0.5em; border-bottom: 1px solid #ccc;">${this.$t("general.files")}</td>
<td style="padding: 0.2em 0.5em; border-bottom: 1px solid #ccc;">${info.files || 0}</td>
</tr>
<tr>
<td style="padding: 0.2em 0.5em; border-bottom: 1px solid #ccc;">${this.$t("index.folders")}</td>
<td style="padding: 0.2em 0.5em; border-bottom: 1px solid #ccc;">${this.$t("general.folders")}</td>
<td style="padding: 0.2em 0.5em; border-bottom: 1px solid #ccc;">${info.folders || 0}</td>
</tr>
<tr>
@@ -190,5 +190,12 @@ body.rtl .action {
#sidebar.scrollable {
overflow: auto;
-ms-overflow-style: none; /* IE and Edge */
scrollbar-width: none; /* Firefox */
}
#sidebar.scrollable::-webkit-scrollbar {
display: none; /* Chrome, Safari, and Opera */
}
</style>
-8
View File
@@ -11,10 +11,6 @@
transition: .1s ease all;
}
.button:hover {
background-color: var(--dark-blue);
}
.button--block {
margin: 0 0 0.5em;
display: block;
@@ -37,10 +33,6 @@
text-transform: uppercase;
}
.button--flat:hover {
background: var(--moon-grey);
}
.button--flat.button--red {
color: var(--dark-red);
}
+1 -22
View File
@@ -120,14 +120,12 @@ over
transition: 0.2s ease width;
}
button {
flex: 1;
height: 3em;
padding: 8px 16px;
border: none;
background-color: #f5f5f5;
background-color: var(--surfaceSecondary);
transition: background-color 0.3s;
/* Add borders */
border-right: 1px solid #ccc;
@@ -223,22 +221,3 @@ input.sizeInput:disabled {
border-style: solid;
border-color: white;
}
#listingView.list .item:hover,
#listingView.compact .item:hover,
#listingView.normal .item:hover,
#listingView.gallery .item:hover,
#sidebar .item:hover,
.action:hover,
.quick-toggles div:hover,
.button-group button:hover,
#listingView.list .item.drag-hover,
#listingView.compact .item.drag-hover,
#listingView.normal .item.drag-hover,
#listingView.gallery .item.drag-hover {
box-shadow: inset 0 -3em 3em rgba(217, 217, 217, 0.211), 0 0 0 2px var(--alt-background) !important;
/* Adjust shadow values as needed */
transform: scale(1.02);
/* Slightly enlarges the element */
}
-12
View File
@@ -60,10 +60,6 @@
color: var(--textPrimary) !important;
}
.dark-mode .action:hover {
background-color: rgba(255, 255, 255, .1);
}
/* Action counter */
.dark-mode .action .counter {
border-color: var(--surfacePrimary);
@@ -107,19 +103,11 @@
color: var(--textPrimary);
}
/* Flat button hover */
.dark-mode .button--flat:hover {
background: var(--surfaceSecondary);
}
/* Dashboard navigation */
.dark-mode .dashboard #nav ul li {
color: var(--textSecondary);
}
.dark-mode .dashboard #nav ul li:hover {
background: var(--surfaceSecondary);
}
#search.active.dark-mode #result {
background-color: black;
}
+2 -5
View File
@@ -161,7 +161,7 @@ table tr>*:last-child {
.card {
position: relative;
margin: 0 0 1rem 0;
background-color: #fff;
background-color: var(--background);
border-radius: 2px;
box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12), 0 3px 1px -2px rgba(0, 0, 0, 0.2);
overflow: auto;
@@ -173,13 +173,10 @@ table tr>*:last-child {
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
-webkit-box-shadow: 0px 2em 50px 10px rgba(0, 0, 0, 0.3);
box-shadow: 0px 2em 50px 10px rgba(0, 0, 0, 0.3);
z-index: 99999;
z-index: 10;
max-width: 40em;
width: 90%;
max-height: 95%;
z-index: 99999;
animation: .1s show forwards;
}
-1
View File
@@ -10,7 +10,6 @@ header {
align-items: center;
justify-content: space-between;
padding: 0.5em;
background-color: #DDDDDD
}
@supports (backdrop-filter: none) {
+17
View File
@@ -340,3 +340,20 @@ body.rtl .card.floating .card-content .file-list {
direction: ltr;
text-align: left;
}
.fb-shadow {
box-shadow: 0px 0px 15px 0px rgb(100 100 100 / 75%);
-webkit-box-shadow: 0px 0px 15px 0px rgb(100 100 100 / 75%);
}
.item:hover,
.quick-toggles div:hover,
.button-group button:hover,
.search-entry:hover,
button:hover,
.item.drag-hover{
box-shadow: inset 0 -3em 3em rgba(217, 217, 217, 0.211), 0 0 0 2px var(--alt-background) !important;
/* Adjust shadow values as needed */
transform: scale(1.02);
/* Slightly enlarges the element */
}
+11 -14
View File
@@ -63,8 +63,6 @@
"body": "الصفحة",
"clear": "مسح",
"closePreview": "إغلاق العرض",
"files": "الملفات",
"folders": "المجلدات",
"home": "الصفحة الاولى",
"lastModified": "آخر تعديل",
"loading": "جاري التحميل...",
@@ -122,17 +120,13 @@
"login": {
"createAnAccount": "Create an account",
"loginInstead": "Already have an account",
"password": "كلمة المرور",
"passwordConfirm": "Password Confirmation",
"passwordsDontMatch": "Passwords don't match",
"signup": "Signup",
"submit": "تسجيل دخول",
"username": "إسم المستخدم",
"usernameTaken": "Username already taken",
"wrongCredentials": "بيانات دخول خاطئة",
"or": "أو"
},
"permanent": "دائم",
"prompts": {
"copy": "نسخ",
"copyMessage": "رجاء حدد المكان لنسخ ملفاتك فيه:",
@@ -144,7 +138,7 @@
"downloadMessage": "حدد إمتداد الملف المراد تحميله.",
"error": "لقد حدث خطأ ما",
"fileInfo": "معلومات الملف",
"lastModified": "آخر تعديل",
"lastModified": "آخر تعديل{suffix}",
"move": "نقل",
"moveMessage": "إختر مكان جديد للملفات أو المجلدات المراد نقلها:",
"newArchetype": "إنشاء منشور من المنشور الأصلي. الملف سيتم انشاءه في مجلد المحتويات.",
@@ -152,8 +146,8 @@
"newDirMessage": "رجاء أدخل اسم المجلد الجديد.",
"newFile": "ملف جديد",
"newFileMessage": "رجاء ادخل اسم الملف الجديد.",
"numberDirs": "عدد المجلدات",
"numberFiles": "عدد الملفات",
"numberDirs": "عدد المجلدات{suffix}",
"numberFiles": "عدد الملفات{suffix}",
"rename": "إعادة تسمية",
"renameMessage": "إدراج اسم جديد لـ",
"replace": "إستبدال",
@@ -176,7 +170,8 @@
"conflictsDetected": "التعارضات المكتشفة",
"uploadSettingsChunked": "Max concurrent uploads: {maxConcurrentUpload}, chunk size: {uploadChunkSizeMb} MB",
"uploadSettingsNoChunk": "Max concurrent uploads: {maxConcurrentUpload}, chunked upload disabled",
"invalidName": "الاسم المقدم غير صالح: لا يمكن أن يحتوي على \"/\" أو \"\\\""
"invalidName": "الاسم المقدم غير صالح: لا يمكن أن يحتوي على \"/\" أو \"\\\"",
"source": "Source{suffix}"
},
"search": {
"images": "الصور",
@@ -350,8 +345,6 @@
"index": {
"status": "الحالة",
"assessment": "التقييم",
"files": "الملفات",
"folders": "المجلدات",
"lastScanned": "آخر مسح ضوئي",
"quickScan": "ثواني المسح السريع",
"fullScan": "كامل ثواني المسح الضوئي",
@@ -402,7 +395,9 @@
"deleted": "تم حذف قاعدة الوصول",
"added": "تمت إضافة قاعدة الوصول!",
"name": "الاسم",
"accessManagement": "إدارة الوصول"
"accessManagement": "إدارة الوصول",
"totalDenied": "مرفوض",
"totalAllowed": "المسموح به"
},
"fileLoading": {
"title": "التحميلات والتنزيلات",
@@ -458,7 +453,9 @@
"disableOfficeEditorDescription": "قائمة مفصولة بمسافات لامتدادات الملفات لتعطيل محرر وعارض OnlyOffice لها. (على سبيل المثال، \".txt .html .pdf\").",
"disableOfficeEditor": "تعطيل عارض المكتب لامتدادات ملفات معينة",
"defaultThemeDescription": "افتراضي - السمة الافتراضية",
"customTheme": "اختر المظهر الخاص بك"
"customTheme": "اختر المظهر الخاص بك",
"showSelectMultiple": "إظهار تحديد متعدد في قائمة السياق على سطح المكتب",
"showSelectMultipleDescription": "بشكل افتراضي، لا تحتوي قائمة سياق سطح المكتب على خيار \"تحديد متعدد\" مثل الهاتف المحمول. يظهر هذا الخيار دائمًا في قائمة السياق."
},
"colors": {
"red": "أحمر",
+38 -12
View File
@@ -66,8 +66,6 @@
"body": "Tělo",
"clear": "Vymazat",
"closePreview": "Zavřít náhled",
"files": "Soubory",
"folders": "Složky",
"home": "Domů",
"lastModified": "Poslední změna",
"loading": "Načítání...",
@@ -125,17 +123,13 @@
"login": {
"createAnAccount": "Vytvořit účet",
"loginInstead": "Už máte účet",
"password": "Heslo",
"passwordConfirm": "Potvrzení hesla",
"passwordsDontMatch": "Hesla se neshodují",
"signup": "Registrovat se",
"submit": "Přihlásit se",
"username": "Uživatelské jméno",
"usernameTaken": "Uživatelské jméno je již obsazeno",
"wrongCredentials": "Nesprávné přihlašovací údaje",
"or": "NEBO"
},
"permanent": "Trvalé",
"share": {
"notice": "Poznámka: Každý, kdo má přístup k odkazu (a volitelnému heslu), může zobrazit sdílené soubory. Není nutné být přihlášen."
},
@@ -162,8 +156,8 @@
"newDirMessage": "Zadejte název nové složky.",
"newFile": "Nový soubor",
"newFileMessage": "Zadejte název nového souboru.",
"numberDirs": "Počet složek",
"numberFiles": "Počet souborů",
"numberDirs": "Počet složek{suffix}",
"numberFiles": "Počet souborů{suffix}",
"rename": "Přejmenovat",
"renameMessage": "Zadejte nový název pro",
"replace": "Nahradit",
@@ -182,7 +176,8 @@
"conflictsDetected": "Zjištěné konflikty",
"uploadSettingsChunked": "Max concurrent uploads: {maxConcurrentUpload}, chunk size: {uploadChunkSizeMb} MB",
"uploadSettingsNoChunk": "Max concurrent uploads: {maxConcurrentUpload}, chunked upload disabled",
"invalidName": "Nesprávný zadaný název: nelze použít kontejner \"/\" nebo \"\\\"."
"invalidName": "Nesprávný zadaný název: nelze použít kontejner \"/\" nebo \"\\\".",
"source": "Source{suffix}"
},
"search": {
"images": "Obrázky",
@@ -246,7 +241,9 @@
"disableOfficeEditorDescription": "Seznam přípon souborů oddělených mezerou, pro které se má vypnout editor a prohlížeč OnlyOffice. (např. '.txt .html .pdf').",
"disableOfficeEditor": "Zakázat editor a prohlížeč Office pro určité přípony souborů a vrátit se k výchozímu prohlížeči/editoru, velmi užitečné pro soubory pdf a txt.",
"defaultThemeDescription": "default - Výchozí téma",
"customTheme": "Vyberte si téma"
"customTheme": "Vyberte si téma",
"showSelectMultiple": "Zobrazení výběru více položek v kontextové nabídce na ploše",
"showSelectMultipleDescription": "Ve výchozím nastavení nemá kontextová nabídka na ploše možnost \"vybrat více\" jako v mobilním telefonu. Tato možnost se v kontextové nabídce zobrazuje vždy."
},
"settings": {
"enterPassword": "Zadejte heslo",
@@ -399,8 +396,6 @@
"index": {
"status": "Stav",
"assessment": "Vyhodnocení",
"files": "Soubory",
"folders": "Složky",
"lastScanned": "Poslední skenování",
"quickScan": "Rychlý sken (s)",
"fullScan": "Plný sken (s)",
@@ -438,5 +433,36 @@
"yellow": "žlutá",
"violet": "fialová",
"orange": "oranžová"
},
"general": {
"name": "Název",
"path": "Cesta",
"user": "Uživatel",
"group": "Skupina",
"signup": "Registrace",
"password": "Heslo",
"username": "Uživatelské jméno",
"files": "Soubory",
"folders": "Složky",
"exit": "Exit",
"permanent": "Permanentní"
},
"access": {
"rules": "Pravidla přístupu",
"deny": "Odmítnout",
"deniedUsers": "Odmítnutí uživatelé",
"deniedGroups": "Odmítnuté skupiny",
"allowedUsers": "Povolení uživatelé",
"allowedGroups": "Povolené skupiny",
"totalDenied": "Odmítnuto",
"totalAllowed": "Povolené",
"allow": "Povolit",
"allowDeny": "Povolit/odmítnout",
"userGroup": "Uživatel/skupina",
"enterName": "Zadejte jméno uživatele nebo skupiny",
"deleted": "Přístupové pravidlo odstraněno!",
"added": "Přidáno pravidlo přístupu!",
"name": "Název",
"accessManagement": "Správa přístupu"
}
}
+11 -14
View File
@@ -63,8 +63,6 @@
"body": "Body",
"clear": "Schließen",
"closePreview": "Vorschau schließen",
"files": "Dateien",
"folders": "Ordner",
"home": "Home",
"lastModified": "Zuletzt geändert",
"loading": "Laden...",
@@ -122,17 +120,13 @@
"login": {
"createAnAccount": "Konto erstellen",
"loginInstead": "Bei bestehendem Konto anmelden",
"password": "Kennwort",
"passwordConfirm": "Kennwort bestätigen",
"passwordsDontMatch": "Kennwörter stimmen nicht überein",
"signup": "Registrieren",
"submit": "Anmelden",
"username": "Benutzername",
"usernameTaken": "Benutzername ist bereits vergeben",
"wrongCredentials": "Falsche Zugangsdaten",
"or": "OR"
},
"permanent": "Permanent",
"prompts": {
"copy": "Kopieren",
"copyMessage": "Wählen Sie einen Zielort zum Kopieren:",
@@ -145,7 +139,7 @@
"downloadMessage": "Wählen Sie ein Format zum Herunterladen aus.",
"error": "Etwas ist schief gelaufen",
"fileInfo": "Dateiinformation",
"lastModified": "Zuletzt geändert",
"lastModified": "Zuletzt geändert{suffix}",
"move": "Verschieben",
"moveMessage": "Wählen Sie einen neuen Ort für ihre Datei(en)/Ordner:",
"newArchetype": "Erstelle neuen Beitrag auf Basis eines Archetyps. Ihre Datei wird im Inhalteordner erstellt.",
@@ -153,8 +147,8 @@
"newDirMessage": "Geben Sie den Namen des neuen Ordners an.",
"newFile": "Neue Datei",
"newFileMessage": "Geben Sie den Namen der neuen Datei an.",
"numberDirs": "Anzahl der Ordner",
"numberFiles": "Anzahl der Dateien",
"numberDirs": "Anzahl der Ordner{suffix}",
"numberFiles": "Anzahl der Dateien{suffix}",
"rename": "Umbenennen",
"renameMessage": "Geben Sie einen Namen ein für",
"replace": "Ersetzen",
@@ -176,7 +170,8 @@
"conflictsDetected": "Erkannte Widersprüche",
"uploadSettingsChunked": "Max concurrent uploads: {maxConcurrentUpload}, chunk size: {uploadChunkSizeMb} MB",
"uploadSettingsNoChunk": "Max concurrent uploads: {maxConcurrentUpload}, chunked upload disabled",
"invalidName": "Ungültiger Name angegeben: kann nicht Container \"/\" oder \"\\\""
"invalidName": "Ungültiger Name angegeben: kann nicht Container \"/\" oder \"\\\"",
"source": "Source{suffix}"
},
"search": {
"images": "Bilder",
@@ -350,8 +345,6 @@
"index": {
"status": "Status",
"assessment": "Bewertung",
"files": "Dateien",
"folders": "Ordner",
"lastScanned": "Zuletzt gescannt",
"quickScan": "Schnell-Scan (Sekunden)",
"fullScan": "Vollständiger Scan (Sekunden)",
@@ -402,7 +395,9 @@
"deleted": "Zugriffsregel gelöscht!",
"added": "Zugangsregel hinzugefügt!",
"name": "Name",
"accessManagement": "Zugangsverwaltung"
"accessManagement": "Zugangsverwaltung",
"totalDenied": "Verweigert",
"totalAllowed": "Erlaubt"
},
"fileLoading": {
"title": "Uploads & Downloads",
@@ -466,6 +461,8 @@
"disableOfficeEditorDescription": "Eine durch Leerzeichen getrennte Liste von Dateierweiterungen, für die der Editor und der Viewer von OnlyOffice deaktiviert werden sollen. (z. B. '.txt .html .pdf').",
"disableOfficeEditor": "Office Viewer für bestimmte Dateierweiterungen deaktivieren",
"defaultThemeDescription": "default - Das Standardthema",
"customTheme": "Wählen Sie Ihr Thema"
"customTheme": "Wählen Sie Ihr Thema",
"showSelectMultiple": "Mehrfachauswahl im Kontextmenü auf dem Desktop anzeigen",
"showSelectMultipleDescription": "Standardmäßig verfügt das Desktop-Kontextmenü nicht über die Option \"Mehrere auswählen\" wie bei mobilen Geräten. Diese Option wird immer im Kontextmenü angezeigt."
}
}
+11 -14
View File
@@ -66,8 +66,6 @@
"body": "Περιεχόμενο",
"clear": "Καθαρισμός",
"closePreview": "Κλείσιμο προεπισκόπησης",
"files": "Αρχεία",
"folders": "Φάκελοι",
"home": "Αρχική",
"lastModified": "Τελευταία τροποποίηση",
"loading": "Φορτώνει…",
@@ -125,17 +123,13 @@
"login": {
"createAnAccount": "Δημιουργία λογαριασμού",
"loginInstead": "Έχετε ήδη λογαριασμό",
"password": "Κωδικός πρόσβασης",
"passwordConfirm": "Επιβεβαίωση κωδικού πρόσβασης",
"passwordsDontMatch": "Οι κωδικοί πρόσβασης δεν ταιριάζουν",
"signup": "Εγγραφή",
"submit": "Είσοδος",
"username": "Όνομα χρήστη",
"usernameTaken": "Το όνομα χρήστη χρησιμοποιείται ήδη",
"wrongCredentials": "Λάθος όνομα ή/και κωδικός πρόσβασης",
"or": "Ή"
},
"permanent": "Μόνιμο",
"prompts": {
"copy": "Αντιγραφή",
"copyMessage": "Επιλέξτε τοποθεσία για αντιγραφή των αρχείων σας:",
@@ -148,7 +142,7 @@
"downloadMessage": "Επιλέξτε τη μορφή που θέλετε να λάβετε.",
"error": "Προέκυψε κάποιο σφάλμα",
"fileInfo": "Πληροφορίες αρχείου",
"lastModified": "Τελευταία τροποποίηση",
"lastModified": "Τελευταία τροποποίηση{suffix}",
"move": "Μετακίνηση",
"moveMessage": "Επιλέξτε νέα τοποθεσία για τα αρχεία / τους φακέλους σας:",
"newArchetype": "Δημιουργία νέας ανάρτησης με βάση έναν αρχέτυπο. Το αρχείο σας θα δημιουργηθεί στο φάκελο περιεχομένου.",
@@ -156,8 +150,8 @@
"newDirMessage": "Γράψτε το όνομα του νέου φακέλου.",
"newFile": "Νέο αρχείο",
"newFileMessage": "Γράψτε το όνομα του νέου αρχείου.",
"numberDirs": "Αριθμός φακέλων",
"numberFiles": "Αριθμός αρχείων",
"numberDirs": "Αριθμός φακέλων{suffix}",
"numberFiles": "Αριθμός αρχείων{suffix}",
"rename": "Μετονομασία",
"renameMessage": "Εισαγάγετε ένα νέο όνομα για το",
"replace": "Αντικατάσταση",
@@ -179,7 +173,8 @@
"conflictsDetected": "Ανιχνεύονται συγκρούσεις",
"uploadSettingsChunked": "Max concurrent uploads: {maxConcurrentUpload}, chunk size: {uploadChunkSizeMb} MB",
"uploadSettingsNoChunk": "Max concurrent uploads: {maxConcurrentUpload}, chunked upload disabled",
"invalidName": "Μη έγκυρο όνομα: δεν μπορεί να γίνει container \"/\" ή \"\\\""
"invalidName": "Μη έγκυρο όνομα: δεν μπορεί να γίνει container \"/\" ή \"\\\"",
"source": "Source{suffix}"
},
"search": {
"images": "Εικόνες",
@@ -350,8 +345,6 @@
"index": {
"status": "Κατάσταση",
"assessment": "Αξιολόγηση",
"files": "Αρχεία",
"folders": "Φάκελοι",
"lastScanned": "Τελευταία σάρωση",
"quickScan": "Δευτερόλεπτα γρήγορης σάρωσης",
"fullScan": "Δευτερόλεπτα πλήρους σάρωσης",
@@ -402,7 +395,9 @@
"deleted": "Ο κανόνας πρόσβασης διαγράφηκε!",
"added": "Προστέθηκε κανόνας πρόσβασης!",
"name": "Όνομα",
"accessManagement": "Διαχείριση πρόσβασης"
"accessManagement": "Διαχείριση πρόσβασης",
"totalDenied": "Απορρίπτεται",
"totalAllowed": "Επιτρεπόμενο"
},
"fileLoading": {
"title": "Ανεβάσματα & λήψεις",
@@ -466,6 +461,8 @@
"disableOfficeEditorDescription": "Μια λίστα επεκτάσεων αρχείων με διαχωρισμό διαστήματος για την απενεργοποίηση του επεξεργαστή και της προβολής του OnlyOffice. (π.χ. '.txt .html .pdf').",
"disableOfficeEditor": "Απενεργοποίηση της προβολής γραφείου για ορισμένες επεκτάσεις αρχείων",
"defaultThemeDescription": "default - Το προεπιλεγμένο θέμα",
"customTheme": "Επιλέξτε το θέμα σας"
"customTheme": "Επιλέξτε το θέμα σας",
"showSelectMultiple": "Εμφάνιση πολλαπλών επιλογών στο μενού περιβάλλοντος στην επιφάνεια εργασίας",
"showSelectMultipleDescription": "Από προεπιλογή, το μενού περιβάλλοντος της επιφάνειας εργασίας δεν διαθέτει την επιλογή \"επιλογή πολλαπλών\" όπως το κινητό. Αυτή η επιλογή εμφανίζεται πάντα στο μενού περιβάλλοντος."
}
}
+4 -3
View File
@@ -134,6 +134,7 @@
"notice": "Note: anyone who has access to the link (and optional password) can access the shared files. There is no requirement to be logged in."
},
"prompts": {
"source": "Source{suffix}",
"invalidName": "Invalid name provided: cannot container \"/\" or \"\\\"",
"destinationSource": "Destination Source:",
"copy": "Copy",
@@ -152,7 +153,7 @@
"fileInfo": "File information",
"selected": "selected",
"filesSelected": "files selected",
"lastModified": "Last Modified",
"lastModified": "Last Modified{suffix}",
"move": "Move",
"moveMessage": "Choose new house for your file(s)/folder(s):",
"newArchetype": "Create a new post based on an archetype. Your file will be created on content folder.",
@@ -160,8 +161,8 @@
"newDirMessage": "Write the name of the new directory.",
"newFile": "New file",
"newFileMessage": "Write the name of the new file.",
"numberDirs": "Number of directories",
"numberFiles": "Number of files",
"numberDirs": "Number of directories{suffix}",
"numberFiles": "Number of files{suffix}",
"rename": "Rename",
"renameMessage": "An item named \"{filename}\" already exists! Enter a new name:",
"replace": "Replace",
+11 -14
View File
@@ -63,8 +63,6 @@
"body": "Cuerpo",
"clear": "Limpiar",
"closePreview": "Cerrar vista previa",
"files": "Archivos",
"folders": "Carpetas",
"home": "Inicio",
"lastModified": "Última modificación",
"loading": "Cargando...",
@@ -122,17 +120,13 @@
"login": {
"createAnAccount": "Crear una cuenta",
"loginInstead": "Usuario ya existente",
"password": "Contraseña",
"passwordConfirm": "Confirmación de contraseña",
"passwordsDontMatch": "Las contraseñas no coinciden",
"signup": "Registrate",
"submit": "Iniciar sesión",
"username": "Usuario",
"usernameTaken": "Nombre usuario no disponible",
"wrongCredentials": "Usuario y/o contraseña incorrectos",
"or": "O"
},
"permanent": "Permanente",
"prompts": {
"copy": "Copiar",
"copyMessage": "Elige el lugar donde quieres copiar tus archivos:",
@@ -145,7 +139,7 @@
"downloadMessage": "Elige el formato de descarga.",
"error": "Algo ha fallado",
"fileInfo": "Información del archivo",
"lastModified": "Última modificación",
"lastModified": "Última modificación{suffix}",
"move": "Mover",
"moveMessage": "Elige una nueva casa para tus archivo(s)/carpeta(s):",
"newArchetype": "Crea un nuevo post basado en un arquetipo. Tu archivo será creado en la carpeta de contenido.",
@@ -153,8 +147,8 @@
"newDirMessage": "Escribe el nombre de la nueva carpeta.",
"newFile": "Nuevo archivo",
"newFileMessage": "Escribe el nombre del nuevo archivo.",
"numberDirs": "Número de carpetas",
"numberFiles": "Número de archivos",
"numberDirs": "Número de carpetas{suffix}",
"numberFiles": "Número de archivos{suffix}",
"rename": "Renombrar",
"renameMessage": "Escribe el nuevo nombre para",
"replace": "Reemplazar",
@@ -176,7 +170,8 @@
"conflictsDetected": "Conflictos detectados",
"uploadSettingsChunked": "Max concurrent uploads: {maxConcurrentUpload}, chunk size: {uploadChunkSizeMb} MB",
"uploadSettingsNoChunk": "Max concurrent uploads: {maxConcurrentUpload}, chunked upload disabled",
"invalidName": "Nombre no válido proporcionado: no puede contener \"/\" o \"\\\"."
"invalidName": "Nombre no válido proporcionado: no puede contener \"/\" o \"\\\".",
"source": "Source{suffix}"
},
"search": {
"images": "Imágenes",
@@ -350,8 +345,6 @@
"index": {
"status": "Estado",
"assessment": "Evaluación",
"files": "Archivos",
"folders": "Carpetas",
"lastScanned": "Último escaneado",
"quickScan": "Segundos de exploración rápida",
"fullScan": "Segundos de exploración completa",
@@ -402,7 +395,9 @@
"deleted": "Regla de acceso eliminada",
"added": "Regla de acceso añadida",
"name": "Nombre",
"accessManagement": "Gestión de accesos"
"accessManagement": "Gestión de accesos",
"totalDenied": "Denegado",
"totalAllowed": "Permitido"
},
"fileLoading": {
"title": "Cargas y descargas",
@@ -466,6 +461,8 @@
"disableOfficeEditorDescription": "Una lista separada por espacios de las extensiones de archivo para las que desea desactivar el editor y el visor de OnlyOffice. (por ejemplo, '.txt .html .pdf').",
"disableOfficeEditor": "Desactivar el visor de office para determinadas extensiones de archivo",
"defaultThemeDescription": "default - El tema por defecto",
"customTheme": "Elija su tema"
"customTheme": "Elija su tema",
"showSelectMultiple": "Mostrar selección múltiple en el menú contextual del escritorio",
"showSelectMultipleDescription": "Por defecto, el menú contextual del escritorio no tiene la opción \"seleccionar múltiples\" como el móvil. Esta opción siempre se muestra en el menú contextual."
}
}
+11 -14
View File
@@ -63,8 +63,6 @@
"body": "Corps",
"clear": "Fermer",
"closePreview": "Fermer la prévisualisation",
"files": "Fichiers",
"folders": "Dossiers",
"home": "Accueil",
"lastModified": "Dernière modification",
"loading": "Chargement...",
@@ -122,17 +120,13 @@
"login": {
"createAnAccount": "Créer un compte",
"loginInstead": "Vous avez déjà un compte",
"password": "Mot de passe",
"passwordConfirm": "Confirmation de mot de passe",
"passwordsDontMatch": "Les mots de passe ne concordent pas",
"signup": "S'inscrire",
"submit": "Se connecter",
"username": "Utilisateur",
"usernameTaken": "Le nom d'utilisateur est déjà pris",
"wrongCredentials": "Identifiants incorrects !",
"or": "OU"
},
"permanent": "Permanent",
"prompts": {
"copy": "Copier",
"copyMessage": "Choisissez l'emplacement où copier la sélection :",
@@ -145,7 +139,7 @@
"downloadMessage": "Choisissez le format de téléchargement :",
"error": "Quelque chose s'est mal passé",
"fileInfo": "Informations",
"lastModified": "Dernière modification",
"lastModified": "Dernière modification{suffix}",
"move": "Déplacer",
"moveMessage": "Choisissez l'emplacement où déplacer la sélection :",
"newArchetype": "Créer un nouveau post basé sur un archétype. Votre fichier sera créé dans le dossier de contenu.",
@@ -153,8 +147,8 @@
"newDirMessage": "Nom du nouveau dossier :",
"newFile": "Nouveau fichier",
"newFileMessage": "Nom du nouveau fichier :",
"numberDirs": "Nombre de dossiers",
"numberFiles": "Nombre de fichiers",
"numberDirs": "Nombre de dossiers{suffix}",
"numberFiles": "Nombre de fichiers{suffix}",
"rename": "Renommer",
"renameMessage": "Nouveau nom pour",
"replace": "Remplacer",
@@ -176,7 +170,8 @@
"conflictsDetected": "Conflits détectés",
"uploadSettingsChunked": "Max concurrent uploads: {maxConcurrentUpload}, chunk size: {uploadChunkSizeMb} MB",
"uploadSettingsNoChunk": "Max concurrent uploads: {maxConcurrentUpload}, chunked upload disabled",
"invalidName": "Nom invalide fourni : ne peut contenir \"/\" ou \"\\\"."
"invalidName": "Nom invalide fourni : ne peut contenir \"/\" ou \"\\\".",
"source": "Source{suffix}"
},
"search": {
"images": "Images",
@@ -350,8 +345,6 @@
"index": {
"status": "Statut",
"assessment": "Évaluation",
"files": "Fichiers",
"folders": "Dossiers",
"lastScanned": "Dernier balayage",
"quickScan": "secondes pour un balayage rapide",
"fullScan": "secondes pour un balayage complet",
@@ -402,7 +395,9 @@
"deleted": "Règle d'accès supprimée !",
"added": "Règle d'accès ajoutée !",
"name": "Nom",
"accessManagement": "Gestion de l'accès"
"accessManagement": "Gestion de l'accès",
"totalDenied": "Refusé",
"totalAllowed": "Autorisé"
},
"fileLoading": {
"title": "Chargements et téléchargements",
@@ -466,6 +461,8 @@
"disableOfficeEditorDescription": "Une liste d'extensions de fichiers séparées par des espaces pour lesquelles l'éditeur et la visionneuse OnlyOffice doivent être désactivés. (par exemple, '.txt .html .pdf').",
"disableOfficeEditor": "Désactiver la visionneuse d'office pour certaines extensions de fichiers",
"defaultThemeDescription": "default - Le thème par défaut",
"customTheme": "Choisissez votre thème"
"customTheme": "Choisissez votre thème",
"showSelectMultiple": "Afficher la sélection multiple dans le menu contextuel sur le bureau",
"showSelectMultipleDescription": "Par défaut, le menu contextuel de l'ordinateur de bureau n'a pas l'option \"sélectionner plusieurs\" comme celui de l'ordinateur mobile. Cette option apparaît toujours dans le menu contextuel."
}
}
+11 -14
View File
@@ -63,8 +63,6 @@
"body": "גוף",
"clear": "נקה",
"closePreview": "סגירת תצוגה מקדימה",
"files": "קבצים",
"folders": "תקיות",
"home": "ראשי",
"lastModified": "שונה לאחרונה",
"loading": "טוען...",
@@ -122,17 +120,13 @@
"login": {
"createAnAccount": "צור חשבון",
"loginInstead": "חשבון קיים",
"password": "סיסמא",
"passwordConfirm": "אימות סיסמא",
"passwordsDontMatch": "סיסמאות אינן תואמות",
"signup": "הרשמה",
"submit": "התחברות",
"username": "שם משתמש",
"usernameTaken": "שם משתמש כבר קיים",
"wrongCredentials": "פרטי התחברות שגויים",
"or": "או"
},
"permanent": "קבוע",
"prompts": {
"copy": "העתק",
"copyMessage": "בחר לאן להעתיק את הקבצים:",
@@ -145,7 +139,7 @@
"downloadMessage": "בחר את הפורמט שברצונך להוריד",
"error": "משהו השתבש",
"fileInfo": "מידע על הקובץ",
"lastModified": "שונה לאחרונה",
"lastModified": "שונה לאחרונה{suffix}",
"move": "העבר",
"moveMessage": "בחר מיקום חדש לקובץ / תקייה:",
"newArchetype": "צור פוסט חדש. הקובץ יווצר בתקיית התוכן",
@@ -153,8 +147,8 @@
"newDirMessage": "כתוב את שם התקייה החדשה",
"newFile": "קובץ חדש",
"newFileMessage": "כתוב את שם הקובץ החדש",
"numberDirs": "מספר התקיות",
"numberFiles": "מספר הקבצים",
"numberDirs": "מספר התקיות{suffix}",
"numberFiles": "מספר הקבצים{suffix}",
"rename": "שנה שם",
"renameMessage": "הכנס שם חדש עבור",
"replace": "החלף",
@@ -176,7 +170,8 @@
"conflictsDetected": "סכסוכים שזוהו",
"uploadSettingsChunked": "Max concurrent uploads: {maxConcurrentUpload}, chunk size: {uploadChunkSizeMb} MB",
"uploadSettingsNoChunk": "Max concurrent uploads: {maxConcurrentUpload}, chunked upload disabled",
"invalidName": "שם לא חוקי: לא ניתן להכיל \"/\" או \"\\\""
"invalidName": "שם לא חוקי: לא ניתן להכיל \"/\" או \"\\\"",
"source": "Source{suffix}"
},
"search": {
"images": "תמונות",
@@ -350,8 +345,6 @@
"index": {
"status": "סטטוס",
"assessment": "הערכה",
"files": "קבצים",
"folders": "תיקיות",
"lastScanned": "נסרק לאחרונה",
"quickScan": "סריקה מהירה בשניות",
"fullScan": "שניות סריקה מלאה",
@@ -402,7 +395,9 @@
"deleted": "כלל הגישה נמחק!",
"added": "כלל גישה נוסף!",
"name": "שם",
"accessManagement": "ניהול גישה"
"accessManagement": "ניהול גישה",
"totalDenied": "נדחה",
"totalAllowed": "מותר"
},
"fileLoading": {
"title": "העלאות והורדות",
@@ -466,6 +461,8 @@
"disableOfficeEditorDescription": "רשימה מופרדת ברווחים של סיומות קבצים עבורן יש להשבית את עורך ומציג OnlyOffice. (לדוגמה, '.txt .html .pdf').",
"disableOfficeEditor": "השבת תצוגת Office עבור סיומות קבצים מסוימות",
"defaultThemeDescription": "ברירת מחדל - ערכת הנושא המוגדרת כברירת מחדל",
"customTheme": "בחר את הנושא שלך"
"customTheme": "בחר את הנושא שלך",
"showSelectMultiple": "הצג בחירה מרובה בתפריט ההקשר בשולחן העבודה",
"showSelectMultipleDescription": "כברירת מחדל, בתפריט ההקשר של שולחן העבודה אין אפשרות \"בחר מספר פריטים\" כמו במכשירים ניידים. אפשרות זו תמיד מוצגת בתפריט ההקשר."
}
}
+11 -14
View File
@@ -63,8 +63,6 @@
"body": "Törzs",
"clear": "Törlése",
"closePreview": "Előnézet bezárása",
"files": "Fájlok",
"folders": "Mappák",
"home": "Kezdőlap",
"lastModified": "Utoljára módosítva",
"loading": "Betöltés…",
@@ -122,17 +120,13 @@
"login": {
"createAnAccount": "Fiók létrehozása",
"loginInstead": "Már van fiókom",
"password": "Jelszó",
"passwordConfirm": "Jelszó megerősítése",
"passwordsDontMatch": "A jelszavak nem egyeznek",
"signup": "Regisztráció",
"submit": "Belépés",
"username": "Felhasználói név",
"usernameTaken": "A felhasználói név már foglalt",
"wrongCredentials": "Hibás hitelesítő adatok",
"or": "VAGY"
},
"permanent": "Állandó",
"prompts": {
"copy": "Másolása",
"copyMessage": "Válassza ki a másolás célját:",
@@ -145,7 +139,7 @@
"downloadMessage": "Válassza ki a letöltés formátumát.",
"error": "Valami rosszul sült el",
"fileInfo": "Fájlinformáció",
"lastModified": "Utolsó módosítás",
"lastModified": "Utolsó módosítás{suffix}",
"move": "Mozgatás",
"moveMessage": "Válasszon új helyet a fájl(ok)nak/mappá(k)nak:",
"newArchetype": "Új bejegyzést hoz létre egy archetípus alapján. A fájl a tartalom mappában jön létre.",
@@ -153,8 +147,8 @@
"newDirMessage": "Adja meg az új mappa nevét.",
"newFile": "Új fájl",
"newFileMessage": "Adja meg az új fájl nevét.",
"numberDirs": "Mappák száma",
"numberFiles": "Fájlok száma",
"numberDirs": "Mappák száma{suffix}",
"numberFiles": "Fájlok száma{suffix}",
"rename": "Átnevezés",
"renameMessage": "Adja meg az új nevét:",
"replace": "Csere",
@@ -176,7 +170,8 @@
"conflictsDetected": "Feltárt konfliktusok",
"uploadSettingsChunked": "Max concurrent uploads: {maxConcurrentUpload}, chunk size: {uploadChunkSizeMb} MB",
"uploadSettingsNoChunk": "Max concurrent uploads: {maxConcurrentUpload}, chunked upload disabled",
"invalidName": "Érvénytelen név: nem lehet \"/\" vagy \"\\\" konténer"
"invalidName": "Érvénytelen név: nem lehet \"/\" vagy \"\\\" konténer",
"source": "Source{suffix}"
},
"search": {
"images": "Képek",
@@ -350,8 +345,6 @@
"index": {
"status": "Állapot",
"assessment": "Értékelés",
"files": "Fájlok",
"folders": "Mappák",
"lastScanned": "Utoljára beolvasott",
"quickScan": "Gyors beolvasás másodpercek",
"fullScan": "Teljes letapogatás másodpercek",
@@ -402,7 +395,9 @@
"deleted": "Hozzáférési szabály törölve!",
"added": "Hozzáférési szabály hozzáadva!",
"name": "Név",
"accessManagement": "Hozzáférés-kezelés"
"accessManagement": "Hozzáférés-kezelés",
"totalDenied": "Elutasítva",
"totalAllowed": "Engedélyezett"
},
"fileLoading": {
"title": "Feltöltések és letöltések",
@@ -466,6 +461,8 @@
"disableOfficeEditorDescription": "Az OnlyOffice szerkesztő és megjelenítő letiltandó fájlkiterjesztések szóközzel elválasztott listája. (pl. \".txt .html .pdf\").",
"disableOfficeEditor": "Bizonyos fájlkiterjesztéseknél letilthatja az Office Viewer-t",
"defaultThemeDescription": "default - Az alapértelmezett téma",
"customTheme": "Válasszon témát"
"customTheme": "Válasszon témát",
"showSelectMultiple": "Többszörös kijelölés megjelenítése az asztali kontextusmenüben",
"showSelectMultipleDescription": "Alapértelmezés szerint az asztali kontextusmenü nem rendelkezik a \"többszörös kiválasztás\" opcióval, mint a mobilon. Ez az opció mindig megjelenik a kontextusmenüben."
}
}
+3 -3
View File
@@ -125,7 +125,7 @@
"downloadMessage": "Veldu skrárgerð sem þú vilt sækja.",
"error": "Eitthvað fór úrskeiðis",
"fileInfo": "Upplýsingar um gögn",
"lastModified": "Seinast breytt",
"lastModified": "Seinast breytt{suffix}",
"move": "Færa",
"moveMessage": "Velja nýtt hús fyrir skjöl/möppur:",
"newArchetype": "Búðu til nýja færslu sem byggir á frumgerð. Skjalið verður búið til í content möppu. ",
@@ -133,8 +133,8 @@
"newDirMessage": "Hvað á mappan að heita?",
"newFile": "Nýtt skjal",
"newFileMessage": "Hvað á skjalið að heita?",
"numberDirs": "Fjöldi mappa",
"numberFiles": "Fjöldi skjala",
"numberDirs": "Fjöldi mappa{suffix}",
"numberFiles": "Fjöldi skjala{suffix}",
"rename": "Endurnefna",
"renameMessage": "Settu inn nýtt nafn fyrir",
"replace": "Skipta út",
+11 -14
View File
@@ -63,8 +63,6 @@
"body": "Contenuto",
"clear": "Cancella",
"closePreview": "Chiudi anteprima",
"files": "File",
"folders": "Cartelle",
"home": "Home",
"lastModified": "Ultima modifica",
"loading": "Caricamento...",
@@ -122,17 +120,13 @@
"login": {
"createAnAccount": "Crea un account",
"loginInstead": "Hai già un account",
"password": "Password",
"passwordConfirm": "Conferma password",
"passwordsDontMatch": "Le password non corrispondono",
"signup": "Registrati",
"submit": "Entra",
"username": "Nome utente",
"usernameTaken": "Username già usato",
"wrongCredentials": "Credenziali errate",
"or": "O"
},
"permanent": "Permanente",
"prompts": {
"copy": "Copia",
"copyMessage": "Seleziona la cartella in cui copiare i file:",
@@ -144,7 +138,7 @@
"downloadMessage": "Seleziona il formato che vuoi scaricare.",
"error": "Qualcosa è andato per il verso storto",
"fileInfo": "Informazioni sul file",
"lastModified": "Ultima modifica",
"lastModified": "Ultima modifica{suffix}",
"move": "Sposta",
"moveMessage": "Seleziona la nuova posizione per i tuoi file e/o cartella/e:",
"newArchetype": "Crea un nuovo post basato su un modello. Il tuo file verrà creato nella cartella.",
@@ -152,8 +146,8 @@
"newDirMessage": "Scrivi il nome della nuova cartella.",
"newFile": "Nuovo file",
"newFileMessage": "Scrivi il nome del nuovo file.",
"numberDirs": "Numero di cartelle",
"numberFiles": "Numero di file",
"numberDirs": "Numero di cartelle{suffix}",
"numberFiles": "Numero di file{suffix}",
"rename": "Rinomina",
"renameMessage": "Inserisci un nuovo nome per",
"replace": "Sostituisci",
@@ -176,7 +170,8 @@
"conflictsDetected": "Conflitti rilevati",
"uploadSettingsChunked": "Max concurrent uploads: {maxConcurrentUpload}, chunk size: {uploadChunkSizeMb} MB",
"uploadSettingsNoChunk": "Max concurrent uploads: {maxConcurrentUpload}, chunked upload disabled",
"invalidName": "Nome non valido: non può contenere \"/\" o \"\\\"."
"invalidName": "Nome non valido: non può contenere \"/\" o \"\\\".",
"source": "Source{suffix}"
},
"search": {
"images": "Immagini",
@@ -350,8 +345,6 @@
"index": {
"status": "Stato",
"assessment": "Valutazione",
"files": "File",
"folders": "Cartelle",
"lastScanned": "Ultima scansione",
"quickScan": "Scansione rapida Secondi",
"fullScan": "Secondi di scansione completa",
@@ -402,7 +395,9 @@
"deleted": "Regola di accesso cancellata!",
"added": "Regola di accesso aggiunta!",
"name": "Nome",
"accessManagement": "Gestione degli accessi"
"accessManagement": "Gestione degli accessi",
"totalDenied": "Negato",
"totalAllowed": "Consentito"
},
"fileLoading": {
"title": "Caricamenti e download",
@@ -466,6 +461,8 @@
"disableOfficeEditorDescription": "Un elenco separato da spazi di estensioni di file per cui disabilitare l'editor e il visualizzatore di OnlyOffice. (ad esempio, '.txt .html .pdf').",
"disableOfficeEditor": "Disattivare il visualizzatore di Office per alcune estensioni di file",
"defaultThemeDescription": "default - Il tema predefinito",
"customTheme": "Scegliete il vostro tema"
"customTheme": "Scegliete il vostro tema",
"showSelectMultiple": "Mostra selezione multipla nel menu contestuale sul desktop",
"showSelectMultipleDescription": "Per impostazione predefinita, il menu contestuale del desktop non dispone dell'opzione \"seleziona più\" come quello del cellulare. Questa opzione viene sempre visualizzata nel menu contestuale."
}
}
+11 -14
View File
@@ -63,8 +63,6 @@
"body": "本文",
"clear": "クリアー",
"closePreview": "プレビューを閉じる",
"files": "ファイル",
"folders": "フォルダ",
"home": "ホーム",
"lastModified": "最終変更",
"loading": "ローディング...",
@@ -122,17 +120,13 @@
"login": {
"createAnAccount": "Create an account",
"loginInstead": "Already have an account",
"password": "パスワード",
"passwordConfirm": "Password Confirmation",
"passwordsDontMatch": "Passwords don't match",
"signup": "Signup",
"submit": "ログイン",
"username": "ユーザ名",
"usernameTaken": "Username already taken",
"wrongCredentials": "ユーザ名またはパスワードが間違っています。",
"or": "または"
},
"permanent": "永久",
"prompts": {
"copy": "コピー",
"copyMessage": "コピーの目標ディレクトリを選択してください:",
@@ -144,7 +138,7 @@
"downloadMessage": "圧縮形式を選択してください。",
"error": "あるエラーが発生しました。",
"fileInfo": "ファイル情報",
"lastModified": "最終変更",
"lastModified": "最終変更{suffix}",
"move": "移動",
"moveMessage": "移動の目標ディレクトリを選択してください:",
"newArchetype": "ある元型に基づいて新しいポストを作成します。ファイルは コンテンツフォルダに作成されます。",
@@ -152,8 +146,8 @@
"newDirMessage": "新しいディレクトリの名前を入力してください。",
"newFile": "新しいファイルを作成",
"newFileMessage": "新しいファイルの名前を入力してください。",
"numberDirs": "ディレクトリ個数",
"numberFiles": "ファイル個数",
"numberDirs": "ディレクトリ個数{suffix}",
"numberFiles": "ファイル個数{suffix}",
"rename": "名前を変更",
"renameMessage": "名前を変更しようファイルは:",
"replace": "置き換える",
@@ -176,7 +170,8 @@
"conflictsDetected": "コンフリクト検出",
"uploadSettingsChunked": "Max concurrent uploads: {maxConcurrentUpload}, chunk size: {uploadChunkSizeMb} MB",
"uploadSettingsNoChunk": "Max concurrent uploads: {maxConcurrentUpload}, chunked upload disabled",
"invalidName": "無効な名前が指定されました:\"/\"または\"˶\"をコンテナに入れることはできません。"
"invalidName": "無効な名前が指定されました:\"/\"または\"˶\"をコンテナに入れることはできません。",
"source": "Source{suffix}"
},
"search": {
"images": "画像",
@@ -350,8 +345,6 @@
"index": {
"status": "ステータス",
"assessment": "評価",
"files": "ファイル",
"folders": "フォルダ",
"lastScanned": "最終スキャン",
"quickScan": "クイックスキャン秒数",
"fullScan": "フルスキャン秒数",
@@ -402,7 +395,9 @@
"deleted": "アクセスルールが削除された!",
"added": "アクセスルールが追加された!",
"name": "名称",
"accessManagement": "アクセス管理"
"accessManagement": "アクセス管理",
"totalDenied": "却下",
"totalAllowed": "可"
},
"fileLoading": {
"title": "アップロードとダウンロード",
@@ -466,6 +461,8 @@
"disableOfficeEditorDescription": "OnlyOfficeエディタおよびビューアを無効にするファイル拡張子のスペース区切りリスト。(例: '.txt .html .pdf')。",
"disableOfficeEditor": "特定のファイル拡張子のオフィスビューアを無効にする",
"defaultThemeDescription": "default - デフォルトのテーマ",
"customTheme": "テーマを選ぶ"
"customTheme": "テーマを選ぶ",
"showSelectMultiple": "デスクトップのコンテキストメニューに複数選択を表示する",
"showSelectMultipleDescription": "デフォルトでは、デスクトップのコンテキストメニューには、モバイルのような「複数選択」オプションはありません。このオプションは常にコンテキストメニューに表示されます。"
}
}
+11 -14
View File
@@ -63,8 +63,6 @@
"body": "본문",
"clear": "지우기",
"closePreview": "미리보기 닫기",
"files": "파일",
"folders": "폴더",
"home": "홈",
"lastModified": "최종 수정",
"loading": "로딩중...",
@@ -122,17 +120,13 @@
"login": {
"createAnAccount": "계정 생성",
"loginInstead": "이미 계정이 있습니다",
"password": "비밀번호",
"passwordConfirm": "비밀번호 확인",
"passwordsDontMatch": "비밀번호가 일치하지 않습니다",
"signup": "가입하기",
"submit": "로그인",
"username": "사용자 이름",
"usernameTaken": "사용자 이름이 존재합니다",
"wrongCredentials": "사용자 이름 또는 비밀번호를 확인하십시오",
"or": "또는"
},
"permanent": "영구",
"prompts": {
"copy": "복사",
"copyMessage": "복사할 디렉토리:",
@@ -144,7 +138,7 @@
"downloadMessage": "다운로드 포맷 설정.",
"error": "에러 발생!",
"fileInfo": "파일 정보",
"lastModified": "최종 수정",
"lastModified": "최종 수정{suffix}",
"move": "이동",
"moveMessage": "이동할 화일 또는 디렉토리를 선택하세요:",
"newArchetype": "원형을 유지하는 포스트를 생성합니다. 파일은 컨텐트 폴더에 생성됩니다.",
@@ -152,8 +146,8 @@
"newDirMessage": "새 디렉토리 이름을 입력해주세요.",
"newFile": "새 파일",
"newFileMessage": "새 파일 이름을 입력해주세요.",
"numberDirs": "디렉토리 수",
"numberFiles": "파일 수",
"numberDirs": "디렉토리 수{suffix}",
"numberFiles": "파일 수{suffix}",
"rename": "이름 변경",
"renameMessage": "새로운 이름을 입력하세요.",
"replace": "대체하기",
@@ -176,7 +170,8 @@
"conflictsDetected": "충돌 감지",
"uploadSettingsChunked": "Max concurrent uploads: {maxConcurrentUpload}, chunk size: {uploadChunkSizeMb} MB",
"uploadSettingsNoChunk": "Max concurrent uploads: {maxConcurrentUpload}, chunked upload disabled",
"invalidName": "제공된 이름이 잘못되었습니다: \"/\" 또는 \"\\\"를 포함할 수 없습니다."
"invalidName": "제공된 이름이 잘못되었습니다: \"/\" 또는 \"\\\"를 포함할 수 없습니다.",
"source": "Source{suffix}"
},
"search": {
"images": "이미지",
@@ -350,8 +345,6 @@
"index": {
"status": "상태",
"assessment": "평가",
"files": "파일",
"folders": "폴더",
"lastScanned": "마지막 스캔",
"quickScan": "빠른 스캔 초",
"fullScan": "전체 스캔 시간(초)",
@@ -402,7 +395,9 @@
"deleted": "액세스 규칙이 삭제되었습니다!",
"added": "액세스 규칙이 추가되었습니다!",
"name": "이름",
"accessManagement": "액세스 관리"
"accessManagement": "액세스 관리",
"totalDenied": "거부됨",
"totalAllowed": "허용됨"
},
"fileLoading": {
"title": "업로드 및 다운로드",
@@ -466,6 +461,8 @@
"disableOfficeEditorDescription": "OnlyOffice 편집기 및 뷰어를 비활성화할 파일 확장명을 공백으로 구분한 목록입니다. (예: '.txt .html .pdf').",
"disableOfficeEditor": "특정 파일 확장자에 대해 Office 뷰어 사용 안 함",
"defaultThemeDescription": "default - 기본 테마",
"customTheme": "테마 선택"
"customTheme": "테마 선택",
"showSelectMultiple": "데스크톱의 컨텍스트 메뉴에서 여러 개 선택 표시",
"showSelectMultipleDescription": "기본적으로 데스크톱 컨텍스트 메뉴에는 모바일처럼 '여러 개 선택' 옵션이 없습니다. 이 옵션은 항상 컨텍스트 메뉴에 표시됩니다."
}
}
+39 -13
View File
@@ -63,8 +63,6 @@
"body": "Body",
"clear": "Wissen",
"closePreview": "Voorvertoon sluiten",
"files": "Bestanden",
"folders": "Mappen",
"home": "Home",
"lastModified": "Laatst bewerkt",
"loading": "Laden...",
@@ -122,17 +120,13 @@
"login": {
"createAnAccount": "Account aanmaken",
"loginInstead": "Heeft al een account",
"password": "Wachtwoord",
"passwordConfirm": "Wachtwoordbevestiging ",
"passwordsDontMatch": "Wachtwoorden komen niet overeen",
"signup": "Registeren",
"submit": "Log in",
"username": "Gebruikersnaam",
"usernameTaken": "Gebruikersnaam reeds in gebruik",
"wrongCredentials": "Verkeerde inloggegevens",
"or": "OF"
},
"permanent": "Permanent",
"prompts": {
"copy": "Kopiëren",
"copyMessage": "Kies een locatie om uw bestanden te kopiëren: ",
@@ -144,7 +138,7 @@
"downloadMessage": "Kies het vermat dat u wilt downloaden. ",
"error": "Er ging iets fout",
"fileInfo": "Bestandinformatie",
"lastModified": "Laatst Bewerkt",
"lastModified": "Laatst Bewerkt{suffix}",
"move": "Verplaatsen",
"moveMessage": "Kies een nieuwe locatie voor je bestand(en)/map(pen)",
"newArchetype": "Maak een nieuw bericht op basis van een archetype. Uw bestand wordt aangemaakt in de inhoudsmap.",
@@ -152,8 +146,8 @@
"newDirMessage": "Schrijf de naam van de nieuwe map",
"newFile": "Nieuw bestand",
"newFileMessage": "Schrijf de naam van het nieuwe bestand",
"numberDirs": "Aantal mappen",
"numberFiles": "Aantal bestanden",
"numberDirs": "Aantal mappen{suffix}",
"numberFiles": "Aantal bestanden{suffix}",
"rename": "Hernoemen",
"renameMessage": "Voer een nieuwe naam in voor",
"replace": "Vervangen",
@@ -176,7 +170,8 @@
"conflictsDetected": "Gedetecteerde conflicten",
"uploadSettingsChunked": "Max concurrent uploads: {maxConcurrentUpload}, chunk size: {uploadChunkSizeMb} MB",
"uploadSettingsNoChunk": "Max concurrent uploads: {maxConcurrentUpload}, chunked upload disabled",
"invalidName": "Ongeldige naam opgegeven: kan geen \"/\" of \"˜\" bevatten."
"invalidName": "Ongeldige naam opgegeven: kan geen \"/\" of \"˜\" bevatten.",
"source": "Source{suffix}"
},
"search": {
"images": "Afbeeldingen",
@@ -350,8 +345,6 @@
"index": {
"status": "Status",
"assessment": "Beoordeling",
"files": "Bestanden",
"folders": "Mappen",
"lastScanned": "Laatst gescand",
"quickScan": "Snelle scan Seconden",
"fullScan": "Seconden voor volledig scannen",
@@ -437,6 +430,39 @@
"disableOfficeEditorDescription": "Een door spaties gescheiden lijst met bestandsextensies waarvoor de OnlyOffice editor en viewer uitgeschakeld moeten worden. (bijv. '.txt .html .pdf').",
"disableOfficeEditor": "Office Viewer uitschakelen voor bepaalde bestandsextensies",
"defaultThemeDescription": "standaard - Het standaardthema",
"customTheme": "Kies je thema"
"customTheme": "Kies je thema",
"showSelectMultiple": "Meerdere selecteren tonen in contextmenu op bureaublad",
"showSelectMultipleDescription": "Standaard heeft het contextmenu op de desktop geen optie \"meerdere selecteren\" zoals mobiel. Deze optie wordt altijd weergegeven in het contextmenu."
},
"general": {
"name": "Naam",
"path": "Pad",
"user": "Gebruiker",
"group": "Groep",
"signup": "Aanmelden",
"password": "Wachtwoord",
"username": "Gebruikersnaam",
"files": "Bestanden",
"folders": "Mappen",
"exit": "Ga naar",
"permanent": "Permanent"
},
"access": {
"rules": "Toegangsregels",
"deny": "Weigeren",
"deniedUsers": "Geweigerde gebruikers",
"deniedGroups": "Geweigerde groepen",
"allowedUsers": "Toegestane gebruikers",
"allowedGroups": "Toegestane groepen",
"totalDenied": "Geweigerd",
"totalAllowed": "Toegestaan",
"allow": "Sta toe.",
"allowDeny": "Toestaan/weigeren",
"userGroup": "Gebruiker/Groep",
"enterName": "Voer de naam van de gebruiker of groep in",
"deleted": "Toegangsregel verwijderd!",
"added": "Toegangsregel toegevoegd!",
"name": "Naam",
"accessManagement": "Toegangsbeheer"
}
}
+11 -14
View File
@@ -63,8 +63,6 @@
"body": "Body",
"clear": "Wyczyść",
"closePreview": "Zamknij poprzednie",
"files": "Pliki",
"folders": "Foldery",
"home": "Katalog domowy",
"lastModified": "Ostatnio modyfikowane",
"loading": "Ładowanie...",
@@ -122,17 +120,13 @@
"login": {
"createAnAccount": "Utwórz konto",
"loginInstead": "Takie konto już istnieje",
"password": "Hasło",
"passwordConfirm": "Potwierdzenie hasła",
"passwordsDontMatch": "Hasła różnią się",
"signup": "Rejestracja",
"submit": "Logowanie",
"username": "Nazwa użytkownika",
"usernameTaken": "Nazwa użytkownika już zajęta",
"wrongCredentials": "Błędne dane logowania",
"or": "LUB"
},
"permanent": "Permanentny",
"prompts": {
"copy": "Kopiuj",
"copyMessage": "Wybierz lokalizację do której mają być skopiowane wybrane pliki",
@@ -144,7 +138,7 @@
"downloadMessage": "Wybierz format, jaki chesz pobrać.",
"error": "Pojawił się nieznany błąd",
"fileInfo": "Informacje o pliku",
"lastModified": "Osatnio Zmodyfikowane",
"lastModified": "Ostatnio Zmodyfikowane{suffix}",
"move": "Przenieś",
"moveMessage": "Wybierz nową lokalizację dla swoich plik(ów)/folder(ów):",
"newArchetype": "Utwórz nowy wpis na bazie wybranego wzorca. Twój plik będzie utworzony w wybranym folderze.",
@@ -152,8 +146,8 @@
"newDirMessage": "Podaj nazwę tworzonego folderu.",
"newFile": "Nowy plik",
"newFileMessage": "Podaj nazwętworzonego pliku.",
"numberDirs": "Ilość katalogów",
"numberFiles": "Ilość plików",
"numberDirs": "Ilość katalogów{suffix}",
"numberFiles": "Ilość plików{suffix}",
"rename": "Zmień nazwę",
"renameMessage": "Podaj nową nazwę dla",
"replace": "Zamień",
@@ -176,7 +170,8 @@
"conflictsDetected": "Wykryte konflikty",
"uploadSettingsChunked": "Max concurrent uploads: {maxConcurrentUpload}, chunk size: {uploadChunkSizeMb} MB",
"uploadSettingsNoChunk": "Max concurrent uploads: {maxConcurrentUpload}, chunked upload disabled",
"invalidName": "Nieprawidłowa nazwa: nie można użyć kontenera \"/\" lub \"\\\""
"invalidName": "Nieprawidłowa nazwa: nie można użyć kontenera \"/\" lub \"\\\"",
"source": "Source{suffix}"
},
"search": {
"images": "Zdjęcia",
@@ -350,8 +345,6 @@
"index": {
"status": "Status",
"assessment": "Ocena",
"files": "Pliki",
"folders": "Foldery",
"lastScanned": "Ostatnio skanowane",
"quickScan": "Sekundy szybkiego skanowania",
"fullScan": "Sekundy pełnego skanowania",
@@ -402,7 +395,9 @@
"deleted": "Reguła dostępu usunięta!",
"added": "Dodano regułę dostępu!",
"name": "Nazwa",
"accessManagement": "Zarządzanie dostępem"
"accessManagement": "Zarządzanie dostępem",
"totalDenied": "Odmowa",
"totalAllowed": "Dozwolone"
},
"fileLoading": {
"title": "Przesyłanie i pobieranie",
@@ -466,6 +461,8 @@
"disableOfficeEditorDescription": "Rozdzielana spacjami lista rozszerzeń plików, dla których edytor i przeglądarka OnlyOffice mają zostać wyłączone. (np. \".txt .html .pdf\").",
"disableOfficeEditor": "Wyłącz przeglądarkę Office dla niektórych rozszerzeń plików",
"defaultThemeDescription": "default - domyślny motyw",
"customTheme": "Wybierz motyw"
"customTheme": "Wybierz motyw",
"showSelectMultiple": "Wyświetlanie wyboru wielokrotnego w menu kontekstowym na pulpicie",
"showSelectMultipleDescription": "Domyślnie menu kontekstowe pulpitu nie ma opcji \"wybierz wiele\", tak jak w przypadku urządzeń mobilnych. Opcja ta jest zawsze widoczna w menu kontekstowym."
}
}
+11 -14
View File
@@ -63,8 +63,6 @@
"body": "Corpo",
"clear": "Limpar",
"closePreview": "Fechar pré-visualização",
"files": "Arquivos",
"folders": "Pastas",
"home": "Início",
"lastModified": "Última modificação",
"loading": "Carregando. Aguarde, por favor.",
@@ -122,17 +120,13 @@
"login": {
"createAnAccount": "Criar uma conta",
"loginInstead": "Já possui uma conta",
"password": "Senha",
"passwordConfirm": "Confirmação de senha",
"passwordsDontMatch": "As senhas não coincidem",
"signup": "Cadastrar",
"submit": "Login",
"username": "Nome do usuário",
"usernameTaken": "Nome de usuário já existe",
"wrongCredentials": "Ops! Dados incorretos.",
"or": "OU"
},
"permanent": "Permanente",
"prompts": {
"copy": "Copiar",
"copyMessage": "Escolha um lugar para copiar os arquivos:",
@@ -145,7 +139,7 @@
"downloadMessage": "Escolha o formato do arquivo.",
"error": "Algo de errado ocorreu",
"fileInfo": "Informação do arquivo",
"lastModified": "Última modificação",
"lastModified": "Última modificação{suffix}",
"move": "Mover",
"moveMessage": "Escolha uma nova pasta para os seus arquivos:",
"newArchetype": "Criar um novo post baseado num \"archetype\". O seu arquivo será criado na pasta \"content\".",
@@ -153,8 +147,8 @@
"newDirMessage": "Escreva o nome da nova pasta.",
"newFile": "Novo arquivo",
"newFileMessage": "Escreva o nome do novo arquivo.",
"numberDirs": "Número de pastas",
"numberFiles": "Número de arquivos",
"numberDirs": "Número de pastas{suffix}",
"numberFiles": "Número de arquivos{suffix}",
"rename": "Renomear",
"renameMessage": "Insira um novo nome para",
"replace": "Substituir",
@@ -176,7 +170,8 @@
"conflictsDetected": "Conflitos detectados",
"uploadSettingsChunked": "Max concurrent uploads: {maxConcurrentUpload}, chunk size: {uploadChunkSizeMb} MB",
"uploadSettingsNoChunk": "Max concurrent uploads: {maxConcurrentUpload}, chunked upload disabled",
"invalidName": "Nome inválido fornecido: não pode conter \"/\" ou \"\\\""
"invalidName": "Nome inválido fornecido: não pode conter \"/\" ou \"\\\"",
"source": "Source{suffix}"
},
"search": {
"images": "Imagens",
@@ -350,8 +345,6 @@
"index": {
"status": "Status",
"assessment": "Avaliação",
"files": "Arquivos",
"folders": "Pastas",
"lastScanned": "Última varredura",
"quickScan": "Segundos de varredura rápida",
"fullScan": "Segundos de varredura completa",
@@ -402,7 +395,9 @@
"deleted": "Regra de acesso excluída!",
"added": "Regra de acesso adicionada!",
"name": "Nome",
"accessManagement": "Gerenciamento de acesso"
"accessManagement": "Gerenciamento de acesso",
"totalDenied": "Negado",
"totalAllowed": "Permitido"
},
"fileLoading": {
"title": "Uploads e downloads",
@@ -466,6 +461,8 @@
"disableOfficeEditorDescription": "Uma lista de extensões de arquivo separada por espaços para desativar o editor e o visualizador do OnlyOffice. (por exemplo, '.txt .html .pdf').",
"disableOfficeEditor": "Desativar o visualizador do Office para determinadas extensões de arquivo",
"defaultThemeDescription": "default - O tema padrão",
"customTheme": "Escolha seu tema"
"customTheme": "Escolha seu tema",
"showSelectMultiple": "Mostrar seleção múltipla no menu de contexto na área de trabalho",
"showSelectMultipleDescription": "Por padrão, o menu de contexto do desktop não tem a opção \"selecionar vários\" como no celular. Essa opção sempre a mostra no menu de contexto."
}
}
+39 -13
View File
@@ -63,8 +63,6 @@
"body": "Corpo",
"clear": "Limpar",
"closePreview": "Fechar pré-visualização",
"files": "Ficheiros",
"folders": "Pastas",
"home": "Início",
"lastModified": "Última alteração",
"loading": "A carregar...",
@@ -122,17 +120,13 @@
"login": {
"createAnAccount": "Criar uma conta",
"loginInstead": "Já tenho uma conta",
"password": "Palavra-passe",
"passwordConfirm": "Confirmação da palavra-passe",
"passwordsDontMatch": "As palavras-passe não coincidem",
"signup": "Registar",
"submit": "Entrar na conta",
"username": "Nome de utilizador",
"usernameTaken": "O nome de utilizador já está registado",
"wrongCredentials": "Dados errados",
"or": "OU"
},
"permanent": "Permanente",
"prompts": {
"copy": "Copiar",
"copyMessage": "Escolha um lugar para onde copiar os ficheiros:",
@@ -144,7 +138,7 @@
"downloadMessage": "Escolha o formato do ficheiro que quer descarregar.",
"error": "Algo correu mal",
"fileInfo": "Informação do ficheiro",
"lastModified": "Última alteração",
"lastModified": "Última alteração{suffix}",
"move": "Mover",
"moveMessage": "Escolha uma nova casa para os seus ficheiros/pastas:",
"newArchetype": "Criar um novo post baseado num \"archetype\". O seu ficheiro será criado na pasta \"content\".",
@@ -152,8 +146,8 @@
"newDirMessage": "Escreva o nome da nova pasta.",
"newFile": "Novo ficheiro",
"newFileMessage": "Escreva o nome do novo ficheiro.",
"numberDirs": "Número de pastas",
"numberFiles": "Número de ficheiros",
"numberDirs": "Número de pastas{suffix}",
"numberFiles": "Número de ficheiros{suffix}",
"rename": "Alterar nome",
"renameMessage": "Insira um novo nome para",
"replace": "Substituir",
@@ -176,7 +170,8 @@
"conflictsDetected": "Conflitos detectados",
"uploadSettingsChunked": "Max concurrent uploads: {maxConcurrentUpload}, chunk size: {uploadChunkSizeMb} MB",
"uploadSettingsNoChunk": "Max concurrent uploads: {maxConcurrentUpload}, chunked upload disabled",
"invalidName": "Nome inválido fornecido: não pode conter \"/\" ou \"\\\""
"invalidName": "Nome inválido fornecido: não pode conter \"/\" ou \"\\\"",
"source": "Source{suffix}"
},
"search": {
"images": "Imagens",
@@ -350,8 +345,6 @@
"index": {
"status": "Estado",
"assessment": "Avaliação",
"files": "Ficheiros",
"folders": "Pastas",
"lastScanned": "Última digitalização",
"quickScan": "Segundos de leitura rápida",
"fullScan": "Segundos de varrimento completo",
@@ -437,6 +430,39 @@
"disableOfficeEditorDescription": "Uma lista de extensões de ficheiros separada por espaços para desativar o editor e visualizador do OnlyOffice. (por exemplo, '.txt .html .pdf').",
"disableOfficeEditor": "Desativar o visualizador do Office para determinadas extensões de ficheiros",
"defaultThemeDescription": "default - O tema predefinido",
"customTheme": "Escolha o seu tema"
"customTheme": "Escolha o seu tema",
"showSelectMultiple": "Mostrar seleção múltipla no menu de contexto no ambiente de trabalho",
"showSelectMultipleDescription": "Por predefinição, o menu de contexto do ambiente de trabalho não tem a opção \"selecionar vários\" como no telemóvel. Esta opção mostra-a sempre no menu de contexto."
},
"general": {
"name": "Nome",
"path": "Caminho",
"user": "Utilizador",
"group": "Grupo",
"signup": "Registo",
"password": "Palavra-passe",
"username": "Nome de utilizador",
"files": "Ficheiros",
"folders": "Pastas",
"exit": "Sair",
"permanent": "Permanente"
},
"access": {
"rules": "Regras de acesso",
"deny": "Recusar",
"deniedUsers": "Utilizadores recusados",
"deniedGroups": "Grupos recusados",
"allowedUsers": "Utilizadores permitidos",
"allowedGroups": "Grupos permitidos",
"totalDenied": "Recusado",
"totalAllowed": "Permitido",
"allow": "Permitir",
"allowDeny": "Permitir/Negar",
"userGroup": "Utilizador/Grupo",
"enterName": "Introduzir o nome do utilizador ou do grupo",
"deleted": "Regra de acesso eliminada!",
"added": "Regra de acesso adicionada!",
"name": "Nome",
"accessManagement": "Gestão do acesso"
}
}
+11 -14
View File
@@ -63,8 +63,6 @@
"body": "Corp",
"clear": "Curăță",
"closePreview": "Închide previzualizarea",
"files": "Fișiere",
"folders": "Directoare",
"home": "Acasă",
"lastModified": "Ultima modificare",
"loading": "Se încarcă...",
@@ -122,17 +120,13 @@
"login": {
"createAnAccount": "Crează cont",
"loginInstead": "Am deja cont",
"password": "Parola",
"passwordConfirm": "Confirmă parola",
"passwordsDontMatch": "Parolele nu se potrivesc",
"signup": "Înregistrare",
"submit": "Autentificare",
"username": "Utilizator",
"usernameTaken": "Utilizatorul există",
"wrongCredentials": "Informații greșite",
"or": "SAU"
},
"permanent": "Permanent",
"prompts": {
"copy": "Copiază",
"copyMessage": "Alege unde vrei să copiezi fișierele:",
@@ -144,7 +138,7 @@
"downloadMessage": "Alege formatul în care vrei să descarci.",
"error": "Ceva n-a funcționat cum trebuie",
"fileInfo": "Informații fișier",
"lastModified": "Ultima modificare",
"lastModified": "Ultima modificare{suffix}",
"move": "Mută",
"moveMessage": "Alege destinația:",
"newArchetype": "Crează o nouă postare pe baza unui șablon. Fișierul va fi creat in directorul conținut.",
@@ -152,8 +146,8 @@
"newDirMessage": "Scrie numele noului director.",
"newFile": "Fișier nou",
"newFileMessage": "Scrie numele noului fișier.",
"numberDirs": "Numărul directoarelor",
"numberFiles": "Numărul fișierelor",
"numberDirs": "Numărul directoarelor{suffix}",
"numberFiles": "Numărul fișierelor{suffix}",
"rename": "Redenumește",
"renameMessage": "Redactează un nou nume pentru",
"replace": "Înlocuiește",
@@ -176,7 +170,8 @@
"conflictsDetected": "Conflicte detectate",
"uploadSettingsChunked": "Max concurrent uploads: {maxConcurrentUpload}, chunk size: {uploadChunkSizeMb} MB",
"uploadSettingsNoChunk": "Max concurrent uploads: {maxConcurrentUpload}, chunked upload disabled",
"invalidName": "Nume invalid furnizat: nu poate conține \"/\" sau \"\\\""
"invalidName": "Nume invalid furnizat: nu poate conține \"/\" sau \"\\\"",
"source": "Source{suffix}"
},
"search": {
"images": "Imagini",
@@ -350,8 +345,6 @@
"index": {
"status": "Statut",
"assessment": "Evaluare",
"files": "Fișiere",
"folders": "Dosare",
"lastScanned": "Ultima scanare",
"quickScan": "Scanare rapidă secunde",
"fullScan": "Scanare completă secunde",
@@ -402,7 +395,9 @@
"deleted": "Regula de acces ștearsă!",
"added": "Regula de acces adăugată!",
"name": "Nume și prenume",
"accessManagement": "Gestionarea accesului"
"accessManagement": "Gestionarea accesului",
"totalDenied": "Refuzat",
"totalAllowed": "Permise"
},
"fileLoading": {
"title": "Încărcări și descărcări",
@@ -466,6 +461,8 @@
"disableOfficeEditorDescription": "O listă de extensii de fișiere separate prin spațiu pentru care se dezactivează editorul și vizualizatorul OnlyOffice. (de exemplu, \".txt .html .pdf\").",
"disableOfficeEditor": "Dezactivați vizualizatorul office pentru anumite extensii de fișiere",
"defaultThemeDescription": "default - Tema implicită",
"customTheme": "Alege-ți tema"
"customTheme": "Alege-ți tema",
"showSelectMultiple": "Afișarea selecției multiple în meniul contextual de pe desktop",
"showSelectMultipleDescription": "În mod implicit, meniul contextual de pe desktop nu are opțiunea \"select multiple\", ca pe mobil. Această opțiune se afișează întotdeauna în meniul contextual."
}
}
+11 -14
View File
@@ -63,8 +63,6 @@
"body": "Тело",
"clear": "Очистить",
"closePreview": "Закрыть",
"files": "Файлы",
"folders": "Папки",
"home": "Главная",
"lastModified": "Последнее изменение",
"loading": "Загрузка...",
@@ -122,17 +120,13 @@
"login": {
"createAnAccount": "Создать аккаунт",
"loginInstead": "Уже есть аккаунт",
"password": "Пароль",
"passwordConfirm": "Подтверждение пароля",
"passwordsDontMatch": "Пароли не совпадают",
"signup": "Зарегистрироваться",
"submit": "Войти",
"username": "Имя пользователя",
"usernameTaken": "Данное имя пользователя уже занято",
"wrongCredentials": "Неверные данные",
"or": "ИЛИ"
},
"permanent": "Постоянный",
"prompts": {
"copy": "Копировать",
"copyMessage": "Копировать в:",
@@ -145,7 +139,7 @@
"downloadMessage": "Выберите формат в котором хотите скачать.",
"error": "Ошибка",
"fileInfo": "Информация о файле",
"lastModified": "Последнее изменение",
"lastModified": "Последнее изменение{suffix}",
"move": "Переместить",
"moveMessage": "Переместить в:",
"newArchetype": "Создайте новую запись на основе архетипа. Файл будет создан в каталоге.",
@@ -153,8 +147,8 @@
"newDirMessage": "Имя нового каталога.",
"newFile": "Новый файл",
"newFileMessage": "Имя нового файла.",
"numberDirs": "Количество каталогов",
"numberFiles": "Количество файлов",
"numberDirs": "Количество каталогов{suffix}",
"numberFiles": "Количество файлов{suffix}",
"rename": "Переименовать",
"renameMessage": "Новое имя",
"replace": "Заменить",
@@ -176,7 +170,8 @@
"conflictsDetected": "Обнаруженные конфликты",
"uploadSettingsChunked": "Max concurrent uploads: {maxConcurrentUpload}, chunk size: {uploadChunkSizeMb} MB",
"uploadSettingsNoChunk": "Max concurrent uploads: {maxConcurrentUpload}, chunked upload disabled",
"invalidName": "Неверное имя: не может содержать \"/\" или \"\\\"."
"invalidName": "Неверное имя: не может содержать \"/\" или \"\\\".",
"source": "Source{suffix}"
},
"search": {
"images": "Изображения",
@@ -350,8 +345,6 @@
"index": {
"status": "Статус",
"assessment": "Оценка",
"files": "Файлы",
"folders": "Папки",
"lastScanned": "Последнее сканирование",
"quickScan": "Секунды быстрого сканирования",
"fullScan": "Секунды полного сканирования",
@@ -402,7 +395,9 @@
"deleted": "Правило доступа удалено!",
"added": "Правило доступа добавлено!",
"name": "Имя",
"accessManagement": "Управление доступом"
"accessManagement": "Управление доступом",
"totalDenied": "Отказано",
"totalAllowed": "Разрешено"
},
"fileLoading": {
"title": "Загрузка и скачивание",
@@ -466,6 +461,8 @@
"disableOfficeEditorDescription": "Список расширений файлов, для которых необходимо отключить редактор и просмотрщик OnlyOffice, разделенный пробелами. (например, '.txt .html .pdf').",
"disableOfficeEditor": "Отключение просмотра офисных файлов для определенных расширений файлов",
"defaultThemeDescription": "default - Тема по умолчанию",
"customTheme": "Выберите тему"
"customTheme": "Выберите тему",
"showSelectMultiple": "Отображение выбора нескольких в контекстном меню на рабочем столе",
"showSelectMultipleDescription": "По умолчанию в контекстном меню рабочего стола нет опции \"выбрать несколько\", как в мобильном. Эта опция всегда отображается в контекстном меню."
}
}
+11 -14
View File
@@ -63,8 +63,6 @@
"body": "Telo",
"clear": "Zrušiť výber",
"closePreview": "Zavrieť náhľad",
"files": "Súbory",
"folders": "Priečinky",
"home": "Domov",
"lastModified": "Posledná zmena",
"loading": "Načítanie...",
@@ -122,17 +120,13 @@
"login": {
"createAnAccount": "Vytvoriť účet",
"loginInstead": "Už mám účet",
"password": "Heslo",
"passwordConfirm": "Potvrdenie hesla",
"passwordsDontMatch": "Heslá nesúhlasia",
"signup": "Registrovať",
"submit": "Prihlásiť",
"username": "Používateľské meno",
"usernameTaken": "Meno je už obsadené",
"wrongCredentials": "Nesprávne prihlasovacie údaje",
"or": "ALEBO"
},
"permanent": "Trvalé",
"prompts": {
"copy": "Kopírovať",
"copyMessage": "Zvoľte miesto, kde chcete kopírovať súbory:",
@@ -145,7 +139,7 @@
"downloadMessage": "Vyberte formát, ktorý chcete stiahnuť.",
"error": "Niečo sa pokazilo",
"fileInfo": "Informácie o súbore",
"lastModified": "Dátum zmeny",
"lastModified": "Dátum zmeny{suffix}",
"move": "Presunúť",
"moveMessage": "Zvoľte nový domov pre vaše súbory/priečinky:",
"newArchetype": "Vytvorí nový príspevok z archetypu. Nový súbor sa vytvorí v priečinku s obsahom.",
@@ -153,8 +147,8 @@
"newDirMessage": "Napíšte názov nového priečinka.",
"newFile": "Nový súbor",
"newFileMessage": "Napíšte názov nového súboru.",
"numberDirs": "Počet priečinkov",
"numberFiles": "Počet súborov",
"numberDirs": "Počet priečinkov{suffix}",
"numberFiles": "Počet súborov{suffix}",
"rename": "Premenovať",
"renameMessage": "Zadajte nový názov pre",
"replace": "Nahradiť",
@@ -176,7 +170,8 @@
"conflictsDetected": "Zistené konflikty",
"uploadSettingsChunked": "Max concurrent uploads: {maxConcurrentUpload}, chunk size: {uploadChunkSizeMb} MB",
"uploadSettingsNoChunk": "Max concurrent uploads: {maxConcurrentUpload}, chunked upload disabled",
"invalidName": "Zadaný neplatný názov: nemôže byť kontajner \"/\" alebo \"\\\""
"invalidName": "Zadaný neplatný názov: nemôže byť kontajner \"/\" alebo \"\\\"",
"source": "Source{suffix}"
},
"search": {
"images": "Obrázky",
@@ -350,8 +345,6 @@
"index": {
"status": "Stav",
"assessment": "Hodnotenie",
"files": "Súbory",
"folders": "Priečinky",
"lastScanned": "Posledné skenovanie",
"quickScan": "Sekundy rýchleho skenovania",
"fullScan": "Sekundy úplného skenovania",
@@ -402,7 +395,9 @@
"deleted": "Prístupové pravidlo odstránené!",
"added": "Pridané pravidlo prístupu!",
"name": "Názov",
"accessManagement": "Správa prístupu"
"accessManagement": "Správa prístupu",
"totalDenied": "Odmietnuté",
"totalAllowed": "Povolené"
},
"fileLoading": {
"title": "Nahrávanie a sťahovanie",
@@ -466,6 +461,8 @@
"disableOfficeEditorDescription": "Medzerou oddelený zoznam prípon súborov, pre ktoré sa má vypnúť editor a prehliadač OnlyOffice. (napr. \".txt .html .pdf\").",
"disableOfficeEditor": "Zakázanie prehliadača Office pre určité prípony súborov",
"defaultThemeDescription": "default - Predvolená téma",
"customTheme": "Vyberte si tému"
"customTheme": "Vyberte si tému",
"showSelectMultiple": "Zobrazenie výberu viacerých v kontextovom menu na ploche",
"showSelectMultipleDescription": "V predvolenom nastavení kontextová ponuka na ploche nemá možnosť \"vybrať viacero\" ako v mobilných zariadeniach. Táto možnosť sa v kontextovej ponuke zobrazuje vždy."
}
}
+39 -13
View File
@@ -63,8 +63,6 @@
"body": "Huvud",
"clear": "Rensa",
"closePreview": "Stäng förhands granskningen",
"files": "Filer",
"folders": "Mappar",
"home": "Hem",
"lastModified": "Senast ändrad",
"loading": "Laddar.....",
@@ -122,17 +120,13 @@
"login": {
"createAnAccount": "Skapa ett konto",
"loginInstead": "Du har redan ett konto",
"password": "Lösenord",
"passwordConfirm": "Bekräfta lösenord",
"passwordsDontMatch": "Lösenord matchar inte",
"signup": "Registrera",
"submit": "Logga in",
"username": "Användarnamn",
"usernameTaken": "Användarnamn upptaget",
"wrongCredentials": "Fel inloggning",
"or": "ELLER"
},
"permanent": "Permanent",
"prompts": {
"copy": "Kopiera",
"copyMessage": "Välj var dina filer skall sparas:",
@@ -144,7 +138,7 @@
"downloadMessage": "Välj format på det du vill lada ner.",
"error": "Något gick fel",
"fileInfo": "Fil information",
"lastModified": "Senast ändrad",
"lastModified": "Senast ändrad{suffix}",
"move": "Flytta",
"moveMessage": "Välj ny plats för din fil (er)/mapp (ar):",
"newArchetype": "Skapa ett nytt inlägg baserat på en arketyp. Din fil kommer att skapas på innehållsmapp.",
@@ -152,8 +146,8 @@
"newDirMessage": "Ange namn på din nya mapp.",
"newFile": "Ny fil",
"newFileMessage": "Ange namn på din nya fil.",
"numberDirs": "Antal kataloger",
"numberFiles": "Antal filer",
"numberDirs": "Antal kataloger{suffix}",
"numberFiles": "Antal filer{suffix}",
"rename": "Ändra namn",
"renameMessage": "Infoga ett nytt namn för",
"replace": "Ersätt",
@@ -176,7 +170,8 @@
"conflictsDetected": "Konflikter upptäckta",
"uploadSettingsChunked": "Max concurrent uploads: {maxConcurrentUpload}, chunk size: {uploadChunkSizeMb} MB",
"uploadSettingsNoChunk": "Max concurrent uploads: {maxConcurrentUpload}, chunked upload disabled",
"invalidName": "Ogiltigt namn anges: kan inte innehålla \"/\" eller \"\\\""
"invalidName": "Ogiltigt namn anges: kan inte innehålla \"/\" eller \"\\\"",
"source": "Source{suffix}"
},
"search": {
"images": "Bilder",
@@ -350,8 +345,6 @@
"index": {
"status": "Status",
"assessment": "Bedömning",
"files": "Filer",
"folders": "Mappar",
"lastScanned": "Senast skannad",
"quickScan": "Snabbsökning Sekunder",
"fullScan": "Fullständig skanning Sekunder",
@@ -437,6 +430,39 @@
"disableOfficeEditorDescription": "En mellanslagsseparerad lista över filtillägg som OnlyOffice redigerare och visare ska inaktiveras för. (t.ex. '.txt .html .pdf').",
"disableOfficeEditor": "Avaktivera Office Viewer för vissa filtillägg",
"defaultThemeDescription": "default - Standardtema",
"customTheme": "Välj ditt tema"
"customTheme": "Välj ditt tema",
"showSelectMultiple": "Visa markera flera i snabbmenyn på skrivbordet",
"showSelectMultipleDescription": "Som standard har snabbmenyn på skrivbordet inte alternativet \"välj flera\" som på mobilen. Det här alternativet visas alltid i snabbmenyn."
},
"general": {
"name": "Namn",
"path": "Väg",
"user": "Användare",
"group": "Grupp",
"signup": "Registrera dig",
"password": "Lösenord",
"username": "Användarnamn",
"files": "Filer",
"folders": "Mappar",
"exit": "Avsluta",
"permanent": "Permanent"
},
"access": {
"rules": "Regler för åtkomst",
"deny": "Förneka",
"deniedUsers": "Nekade användare",
"deniedGroups": "Nekade grupper",
"allowedUsers": "Tillåtna användare",
"allowedGroups": "Tillåtna grupper",
"totalDenied": "Avslås",
"totalAllowed": "Tillåtet",
"allow": "Tillåt",
"allowDeny": "Tillåt/avslå",
"userGroup": "Användare/Grupp",
"enterName": "Ange användar- eller gruppnamn",
"deleted": "Åtkomstregel raderad!",
"added": "Tillträdesregel tillagd!",
"name": "Namn",
"accessManagement": "Hantering av åtkomst"
}
}
+11 -14
View File
@@ -63,8 +63,6 @@
"body": "Sayfa",
"clear": "Temizle",
"closePreview": "Önizlemeyi kapat",
"files": "Dosyalar",
"folders": "Klasörler",
"home": "Ana dizin",
"lastModified": "Son güncellenme",
"loading": "Yükleniyor...",
@@ -122,17 +120,13 @@
"login": {
"createAnAccount": "Bir hesap oluşturun",
"loginInstead": "Zaten hesabınız var mı",
"password": "Şifre",
"passwordConfirm": "Şifre tekrarı",
"passwordsDontMatch": "Şifreler uyuşmuyor",
"signup": "Üye Ol",
"submit": "Giriş",
"username": "Kullanıcı adı",
"usernameTaken": "Kullanıcı adı mevcut",
"wrongCredentials": "Yanlış hesap bilgileri",
"or": "VEYA"
},
"permanent": "Kalıcı",
"prompts": {
"copy": "Kopyala",
"copyMessage": "Dosyalarınızı kopyalayacağınız yeri seçin:",
@@ -145,7 +139,7 @@
"downloadMessage": "İndirmek istediğiniz formatı seçin.",
"error": "Bir şeyler yanlış gitti",
"fileInfo": "Dosya bilgisi",
"lastModified": "Son güncellenme",
"lastModified": "Son güncellenme{suffix}",
"move": "Taşı",
"moveMessage": "Dosya(lar)ınız/klasör(ler)iniz için yeni ana dizin seçin:",
"newArchetype": "Bir prototip temelinde yeni bir gönderi oluşturun. Dosyanız içerik klasöründe oluşturulacaktır.",
@@ -153,8 +147,8 @@
"newDirMessage": "Yeni dizinin adını yazın.",
"newFile": "Yeni dosya",
"newFileMessage": "Yeni dosyanın adını yazın.",
"numberDirs": "Dizin sayısı",
"numberFiles": "Dosya sayısı",
"numberDirs": "Dizin sayısı{suffix}",
"numberFiles": "Dosya sayısı{suffix}",
"rename": "Yeniden adlandır",
"renameMessage": "için yeni bir ad girin",
"replace": "Değiştir",
@@ -176,7 +170,8 @@
"conflictsDetected": "Tespit edilen çatışmalar",
"uploadSettingsChunked": "Max concurrent uploads: {maxConcurrentUpload}, chunk size: {uploadChunkSizeMb} MB",
"uploadSettingsNoChunk": "Max concurrent uploads: {maxConcurrentUpload}, chunked upload disabled",
"invalidName": "Geçersiz ad sağlandı: \"/\" veya \"\\\" kapsayıcı olamaz"
"invalidName": "Geçersiz ad sağlandı: \"/\" veya \"\\\" kapsayıcı olamaz",
"source": "Source{suffix}"
},
"search": {
"images": "Görseller",
@@ -350,8 +345,6 @@
"index": {
"status": "Durum",
"assessment": "Değerlendirme",
"files": "Dosyalar",
"folders": "Klasörler",
"lastScanned": "Son Taranan",
"quickScan": "Hızlı Tarama Saniyeleri",
"fullScan": "Tam Tarama Saniyeleri",
@@ -402,7 +395,9 @@
"deleted": "Erişim kuralı silindi!",
"added": "Erişim kuralı eklendi!",
"name": "İsim",
"accessManagement": "Erişim Yönetimi"
"accessManagement": "Erişim Yönetimi",
"totalDenied": "Reddedildi",
"totalAllowed": "İzin verildi"
},
"fileLoading": {
"title": "Yüklemeler & İndirmeler",
@@ -466,6 +461,8 @@
"disableOfficeEditorDescription": "OnlyOffice düzenleyicisini ve görüntüleyicisini devre dışı bırakmak için dosya uzantılarının boşluk bırakılarak ayrılmış bir listesi. (örneğin, '.txt .html .pdf').",
"disableOfficeEditor": "Belirli dosya uzantıları için ofis görüntüleyiciyi devre dışı bırakma",
"defaultThemeDescription": "default - Varsayılan tema",
"customTheme": "Temanızı seçin"
"customTheme": "Temanızı seçin",
"showSelectMultiple": "Masaüstündeki bağlam menüsünde çoklu seçmeyi göster",
"showSelectMultipleDescription": "Varsayılan olarak, masaüstü içerik menüsünde mobil cihazlardaki gibi \"çoklu seç\" seçeneği yoktur. Bu seçenek her zaman içerik menüsünde gösterilir."
}
}
+39 -13
View File
@@ -63,8 +63,6 @@
"body": "Тіло",
"clear": "Очистити",
"closePreview": "Закрити",
"files": "Файли",
"folders": "Папки",
"home": "Домівка",
"lastModified": "Останній раз змінено",
"loading": "Завантаження...",
@@ -122,17 +120,13 @@
"login": {
"createAnAccount": "Створити обліковий запис",
"loginInstead": "Вже є обліковий запис",
"password": "Пароль",
"passwordConfirm": "Підтвердження паролю",
"passwordsDontMatch": "Паролі не співпадають",
"signup": "Зареєструватися",
"submit": "Увійти",
"username": "Ім'я користувача",
"usernameTaken": "Ім'я користувача вже використовується",
"wrongCredentials": "Невірне ім'я користувача або пароль",
"or": "АБО"
},
"permanent": "Постійний",
"prompts": {
"copy": "Копіювати",
"copyMessage": "Копіювати в:",
@@ -145,7 +139,7 @@
"downloadMessage": "Виберіть формат, в якому хочете завантажити.",
"error": "Помилка",
"fileInfo": "Інформація про файл",
"lastModified": "Останній раз змінено",
"lastModified": "Останній раз змінено{suffix}",
"move": "Перемістити",
"moveMessage": "Перемістити в:",
"newArchetype": "Створіть новий запис на основі архетипу. Файл буде створено у каталозі.",
@@ -153,8 +147,8 @@
"newDirMessage": "Ім'я нового каталогу.",
"newFile": "Новий файл",
"newFileMessage": "Ім'я нового файлу.",
"numberDirs": "Кількість каталогів",
"numberFiles": "Кількість файлів",
"numberDirs": "Кількість каталогів{suffix}",
"numberFiles": "Кількість файлів{suffix}",
"rename": "Перейменувати",
"renameMessage": "Нове ім'я",
"replace": "Замінити",
@@ -176,7 +170,8 @@
"conflictsDetected": "Виявлені конфлікти",
"uploadSettingsChunked": "Max concurrent uploads: {maxConcurrentUpload}, chunk size: {uploadChunkSizeMb} MB",
"uploadSettingsNoChunk": "Max concurrent uploads: {maxConcurrentUpload}, chunked upload disabled",
"invalidName": "Вказано невірне ім'я: не можна використовувати символи \"/\" або \"\\\""
"invalidName": "Вказано невірне ім'я: не можна використовувати символи \"/\" або \"\\\"",
"source": "Source{suffix}"
},
"search": {
"images": "Зображення",
@@ -350,8 +345,6 @@
"index": {
"status": "Статус",
"assessment": "Оцінка",
"files": "Файли",
"folders": "Папки",
"lastScanned": "Останнє сканування",
"quickScan": "Секунди швидкого сканування",
"fullScan": "Секунди повного сканування",
@@ -437,6 +430,39 @@
"disableOfficeEditorDescription": "Список розділених пробілами розширень файлів, для яких слід вимкнути редактор і переглядач OnlyOffice. (наприклад, '.txt .html .pdf').",
"disableOfficeEditor": "Вимкнути офісний переглядач для певних розширень файлів",
"defaultThemeDescription": "default - тема за замовчуванням",
"customTheme": "Виберіть свою тему"
"customTheme": "Виберіть свою тему",
"showSelectMultiple": "Показувати вибране кілька в контекстному меню на робочому столі",
"showSelectMultipleDescription": "За замовчуванням, контекстне меню десктопа не має опції \"вибрати декілька\", як у мобільному. Ця опція завжди відображається у контекстному меню."
},
"general": {
"name": "Ім'я",
"path": "Шлях",
"user": "Користувач",
"group": "Група",
"signup": "Реєстрація",
"password": "Пароль",
"username": "Ім'я користувача",
"files": "Файли",
"folders": "Папки",
"exit": "Виходьте.",
"permanent": "Постійний"
},
"access": {
"rules": "Правила доступу",
"deny": "Відхилити",
"deniedUsers": "Заборонені користувачі",
"deniedGroups": "Заборонені групи",
"allowedUsers": "Дозволені користувачі",
"allowedGroups": "Дозволені групи",
"totalDenied": "Відмовлено",
"totalAllowed": "Дозволено",
"allow": "Дозвольте",
"allowDeny": "Дозволити/Заборонити",
"userGroup": "Користувач/група",
"enterName": "Введіть ім'я користувача або групи",
"deleted": "Правило доступу видалено!",
"added": "Додано правило доступу!",
"name": "Ім'я",
"accessManagement": "Керування доступом"
}
}
+39 -13
View File
@@ -63,8 +63,6 @@
"body": "内容",
"clear": "清空",
"closePreview": "关闭预览",
"files": "文件",
"folders": "文件夹",
"home": "主页",
"lastModified": "最后修改",
"loading": "加载中...",
@@ -122,17 +120,13 @@
"login": {
"createAnAccount": "创建用户",
"loginInstead": "已有用户登录",
"password": "密码",
"passwordConfirm": "确认密码",
"passwordsDontMatch": "密码不一致",
"signup": "注册",
"submit": "登录",
"username": "用户名",
"usernameTaken": "用户名已经被使用",
"wrongCredentials": "用户名或密码错误",
"or": "或"
},
"permanent": "永久",
"prompts": {
"copy": "复制",
"copyMessage": "请选择欲复制至的目录:",
@@ -145,7 +139,7 @@
"downloadMessage": "请选择要下载的压缩格式。",
"error": "出了一点问题...",
"fileInfo": "文件信息",
"lastModified": "最后修改",
"lastModified": "最后修改{suffix}",
"move": "移动",
"moveMessage": "请选择欲移动至的目录:",
"newArchetype": "创建一个基于原型的新帖子。您的文件将会创建在内容文件夹中。",
@@ -153,8 +147,8 @@
"newDirMessage": "请输入新目录的名称。",
"newFile": "新建文件",
"newFileMessage": "请输入新文件的名称。",
"numberDirs": "目录数",
"numberFiles": "文件数",
"numberDirs": "目录数{suffix}",
"numberFiles": "文件数{suffix}",
"rename": "重命名",
"renameMessage": "请输入新名称,旧名称为:",
"replace": "替换",
@@ -176,7 +170,8 @@
"conflictsDetected": "检测到冲突",
"uploadSettingsChunked": "Max concurrent uploads: {maxConcurrentUpload}, chunk size: {uploadChunkSizeMb} MB",
"uploadSettingsNoChunk": "Max concurrent uploads: {maxConcurrentUpload}, chunked upload disabled",
"invalidName": "提供的名称无效:不能包含\"/\"或\"\\\"。"
"invalidName": "提供的名称无效:不能包含\"/\"或\"\\\"。",
"source": "Source{suffix}"
},
"search": {
"images": "图像",
@@ -350,8 +345,6 @@
"index": {
"status": "现状",
"assessment": "评估",
"files": "文件",
"folders": "文件夹",
"lastScanned": "上次扫描",
"quickScan": "快速扫描秒数",
"fullScan": "完整扫描秒数",
@@ -437,6 +430,39 @@
"disableOfficeEditorDescription": "用空格分隔的文件扩展名列表,用于禁用 OnlyOffice 编辑器和查看器。(例如,\".txt .html .pdf\")。",
"disableOfficeEditor": "禁用某些文件扩展名的 Office 查看器",
"defaultThemeDescription": "default - 默认主题",
"customTheme": "选择主题"
"customTheme": "选择主题",
"showSelectMultiple": "在桌面右键菜单中显示多个选择",
"showSelectMultipleDescription": "默认情况下,桌面右键菜单不像手机那样有 \"选择多个 \"选项。该选项始终显示在右键菜单中。"
},
"general": {
"name": "名称",
"path": "路径",
"user": "用户",
"group": "组别",
"signup": "注册",
"password": "密码",
"username": "用户名",
"files": "文件",
"folders": "文件夹",
"exit": "退出",
"permanent": "永久性"
},
"access": {
"rules": "访问规则",
"deny": "拒绝",
"deniedUsers": "被拒绝的用户",
"deniedGroups": "被拒群体",
"allowedUsers": "允许用户",
"allowedGroups": "允许组别",
"totalDenied": "拒绝",
"totalAllowed": "允许",
"allow": "允许",
"allowDeny": "允许/拒绝",
"userGroup": "用户/组",
"enterName": "输入用户或组名称",
"deleted": "访问规则已删除!",
"added": "已添加访问规则!",
"name": "名称",
"accessManagement": "访问管理"
}
}
+39 -13
View File
@@ -63,8 +63,6 @@
"body": "内容",
"clear": "清空",
"closePreview": "關閉預覽",
"files": "檔案",
"folders": "資料夾",
"home": "主頁",
"lastModified": "最後修改",
"loading": "讀取中...",
@@ -122,17 +120,13 @@
"login": {
"createAnAccount": "新建賬戶",
"loginInstead": "已有賬戶登錄",
"password": "密碼",
"passwordConfirm": "確認密碼",
"passwordsDontMatch": "密碼不匹配",
"signup": "註冊",
"submit": "登入",
"username": "帳號",
"usernameTaken": "用戶名已存在",
"wrongCredentials": "帳號或密碼錯誤",
"or": "或"
},
"permanent": "永久",
"prompts": {
"copy": "複製",
"copyMessage": "請選擇欲複製至的目錄:",
@@ -144,7 +138,7 @@
"downloadMessage": "請選擇要下載的壓縮格式。",
"error": "發出了一點錯誤...",
"fileInfo": "檔案資訊",
"lastModified": "最後修改",
"lastModified": "最後修改{suffix}",
"move": "移動",
"moveMessage": "請選擇欲移動至的目錄:",
"newArchetype": "建立一個基於原型的新貼文。您的檔案將會建立在內容資料夾中。",
@@ -152,8 +146,8 @@
"newDirMessage": "請輸入新目錄的名稱。",
"newFile": "建立檔案",
"newFileMessage": "請輸入新檔案的名稱。",
"numberDirs": "目錄數",
"numberFiles": "檔案數",
"numberDirs": "目錄數{suffix}",
"numberFiles": "檔案數{suffix}",
"rename": "重新命名",
"renameMessage": "請輸入新名稱,舊名稱為:",
"replace": "替換",
@@ -176,7 +170,8 @@
"conflictsDetected": "偵測到衝突",
"uploadSettingsChunked": "Max concurrent uploads: {maxConcurrentUpload}, chunk size: {uploadChunkSizeMb} MB",
"uploadSettingsNoChunk": "Max concurrent uploads: {maxConcurrentUpload}, chunked upload disabled",
"invalidName": "提供的名稱無效:不能包含 \"/「 或 」\\\" 的容器"
"invalidName": "提供的名稱無效:不能包含 \"/「 或 」\\\" 的容器",
"source": "Source{suffix}"
},
"search": {
"images": "影像",
@@ -350,8 +345,6 @@
"index": {
"status": "狀態",
"assessment": "評估",
"files": "檔案",
"folders": "資料夾",
"lastScanned": "最後一次掃描",
"quickScan": "快速掃描秒數",
"fullScan": "完整掃描秒數",
@@ -411,7 +404,9 @@
"disableOfficeEditorDescription": "以空格分隔的檔案副檔名清單,用來停用 OnlyOffice 編輯器和檢視器。(例如,'.txt .html .pdf')。",
"disableOfficeEditor": "停用特定檔案副檔名的 Office 檢視器",
"defaultThemeDescription": "default - 預設主題",
"customTheme": "選擇您的主題"
"customTheme": "選擇您的主題",
"showSelectMultiple": "在桌面的上下文功能表中顯示多重選擇",
"showSelectMultipleDescription": "預設情況下,桌上型電腦的上下文功能表不像行動裝置一樣有「選取多個」選項。此選項總是在上下文功能表中顯示。"
},
"otp": {
"name": "雙因素驗證",
@@ -438,5 +433,36 @@
"yellow": "黃色",
"violet": "紫色",
"orange": "橙色"
},
"general": {
"name": "名稱",
"path": "路徑",
"user": "使用者",
"group": "集團",
"signup": "註冊",
"password": "密碼",
"username": "帳號",
"files": "檔案",
"folders": "資料夾",
"exit": "離開",
"permanent": "長期"
},
"access": {
"rules": "存取規則",
"deny": "拒絕",
"deniedUsers": "被拒使用者",
"deniedGroups": "拒絕群組",
"allowedUsers": "允許使用者",
"allowedGroups": "允許的群組",
"totalDenied": "拒絕",
"totalAllowed": "允許",
"allow": "允許",
"allowDeny": "允許/拒絕",
"userGroup": "使用者/群組",
"enterName": "輸入使用者或群組名稱",
"deleted": "存取規則已刪除!",
"added": "已新增存取規則!",
"name": "名稱",
"accessManagement": "存取管理"
}
}
+2 -2
View File
@@ -291,12 +291,12 @@ export const getters = {
currentPromptName: () => {
// Ensure state.prompts is an array
if (!Array.isArray(state.prompts) || state.prompts.length === 0) {
return null
return ""
}
// Check if the name property is a string
const lastPrompt = state.prompts[state.prompts.length - 1]
if (typeof lastPrompt?.name !== 'string') {
return null
return ""
}
return lastPrompt.name
},
+8 -1
View File
@@ -104,7 +104,7 @@ export default {
return getters.isLoggedIn() && getters.currentView() === "listingView";
},
isDisabled() {
return state.isSearchActive || getters.currentPromptName() != null;
return state.isSearchActive || getters.currentPromptName() != "";
},
isDisabledMultiAction() {
return this.isDisabled || (getters.isStickySidebar() && state.multiButtonState === "menu");
@@ -170,3 +170,10 @@ export default {
},
};
</script>
<style scoped>
header button:hover {
box-shadow: unset !important;
-webkit-box-shadow: unset !important;
}
</style>
+1 -1
View File
@@ -133,7 +133,7 @@ export default {
},
keyEvent(event) {
const { key, ctrlKey, metaKey } = event;
if (getters.currentPromptName() != null) return;
if (getters.currentPromptName()) return;
if ((ctrlKey || metaKey) && key.toLowerCase() === "s") {
event.preventDefault();
this.handleEditorValueRequest();
+6 -6
View File
@@ -603,18 +603,18 @@ export default {
}
},
keyEvent(event) {
if (state.isSearchActive || getters.currentView() != "listingView" || getters.currentPromptName() != null) {
if (state.isSearchActive || getters.currentView() != "listingView" || getters.currentPromptName()) {
return;
}
const { key, ctrlKey, metaKey, which } = event;
// Check if the key is alphanumeric
const isAlphanumeric = /^[a-z0-9]$/i.test(key);
const modifierKeys = ctrlKey || metaKey;
if (isAlphanumeric && !modifierKeys && getters.currentPromptName() == null) {
if (isAlphanumeric && !modifierKeys && getters.currentPromptName()) {
this.alphanumericKeyPress(key); // Call the alphanumeric key press function
return;
}
if (!modifierKeys && getters.currentPromptName() != null) {
if (!modifierKeys && getters.currentPromptName()) {
return;
}
// Handle the space bar key
@@ -627,7 +627,7 @@ export default {
mutations.setSearch(true);
}
}
if (getters.currentPromptName() != null) {
if (getters.currentPromptName()) {
return;
}
let currentPath = state.route.path.replace(/\/+$/, ""); // Remove trailing slashes
@@ -649,7 +649,7 @@ export default {
break;
case "Backspace":
if (getters.CurrentPromptName !== null) {
if (getters.currentPromptName()) {
return;
}
// go back
@@ -933,7 +933,7 @@ export default {
// if control or shift is pressed, do not clear the selection
if (this.ctrKeyPressed || event.shiftKey) return;
const sameAsBefore = state.selected == this.lastSelected;
if (sameAsBefore && !state.multiple && getters.currentPromptName() == null) {
if (sameAsBefore && !state.multiple && getters.currentPromptName()) {
mutations.resetSelected();
}
this.lastSelected = state.selected;
+1 -7
View File
@@ -164,9 +164,6 @@ export default {
}
return filesApi.getDownloadURL(state.req.source, state.req.path);
},
showMore() {
return getters.currentPromptName() === "more";
},
getSubtitles() {
return this.subtitles();
},
@@ -273,7 +270,7 @@ export default {
this.$router.replace({ path: this.nextLink });
},
async keyEvent(event) {
if (getters.currentPromptName() != null) {
if (getters.currentPromptName()) {
return;
}
@@ -373,9 +370,6 @@ export default {
? filesApi.getDownloadURL(state.req.source, item.path, true)
: filesApi.getPreviewURL(state.req.source, item.path, item.modified);
},
openMore() {
this.currentPrompt = "more";
},
resetPrompts() {
this.currentPrompt = null;
},
+4 -4
View File
@@ -26,8 +26,8 @@ async function globalSetup() {
await page.locator('button[aria-label="Share"]').click();
await expect(page.locator('div[aria-label="share-path"]')).toHaveText('Path: /myfolder');
await page.locator('button[aria-label="Share-Confirm"]').click();
await expect(page.locator("#share .card-content table tbody tr:not(:has(th))")).toHaveCount(1);
const shareHash = await page.locator("#share .card-content table tbody tr:not(:has(th)) td").first().textContent();
await expect(page.locator("div[aria-label='share-prompt'] .card-content table tbody tr:not(:has(th))")).toHaveCount(1);
const shareHash = await page.locator("div[aria-label='share-prompt'] .card-content table tbody tr:not(:has(th)) td").first().textContent();
if (!shareHash) {
throw new Error("Failed to retrieve shareHash");
}
@@ -45,8 +45,8 @@ async function globalSetup() {
await page.locator('button[aria-label="Share"]').click();
await expect(page.locator('div[aria-label="share-path"]')).toHaveText('Path: /1file1.txt');
await page.locator('button[aria-label="Share-Confirm"]').click();
await expect(page.locator("#share .card-content table tbody tr:not(:has(th))")).toHaveCount(1);
const shareHashFile = await page.locator("#share .card-content table tbody tr:not(:has(th)) td").first().textContent();
await expect(page.locator("div[aria-label='share-prompt'] .card-content table tbody tr:not(:has(th))")).toHaveCount(1);
const shareHashFile = await page.locator("div[aria-label='share-prompt'] .card-content table tbody tr:not(:has(th)) td").first().textContent();
if (!shareHashFile) {
throw new Error("Failed to retrieve shareHash");
}
+4 -4
View File
@@ -17,8 +17,8 @@ async function globalSetup() {
await page.locator('button[aria-label="Share"]').click();
await expect(page.locator('div[aria-label="share-path"]')).toHaveText('Path: /myfolder');
await page.locator('button[aria-label="Share-Confirm"]').click();
await expect(page.locator("#share .card-content table tbody tr:not(:has(th))")).toHaveCount(1);
const shareHash = await page.locator("#share .card-content table tbody tr:not(:has(th)) td").first().textContent();
await expect(page.locator("div[aria-label='share-prompt'] .card-content table tbody tr:not(:has(th))")).toHaveCount(1);
const shareHash = await page.locator("div[aria-label='share-prompt'] .card-content table tbody tr:not(:has(th)) td").first().textContent();
if (!shareHash) {
throw new Error("Failed to retrieve shareHash");
}
@@ -36,8 +36,8 @@ async function globalSetup() {
await page.locator('button[aria-label="Share"]').click();
await expect(page.locator('div[aria-label="share-path"]')).toHaveText('Path: /1file1.txt');
await page.locator('button[aria-label="Share-Confirm"]').click();
await expect(page.locator("#share .card-content table tbody tr:not(:has(th))")).toHaveCount(1);
const shareHashFile = await page.locator("#share .card-content table tbody tr:not(:has(th)) td").first().textContent();
await expect(page.locator("div[aria-label='share-prompt'] .card-content table tbody tr:not(:has(th))")).toHaveCount(1);
const shareHashFile = await page.locator("div[aria-label='share-prompt'] .card-content table tbody tr:not(:has(th)) td").first().textContent();
if (!shareHashFile) {
throw new Error("Failed to retrieve shareHash");
}