feat: code cleanup, new features and v2.0
We're merging this to continue https://github.com/filebrowser/filebrowser/pull/575 and setup translations auto-updating.
This commit is contained in:
71
src/App.vue
71
src/App.vue
@@ -1,74 +1,19 @@
|
||||
<template>
|
||||
<router-view :dependencies="loaded" @update:css="updateCSS" @clean:css="cleanCSS"></router-view>
|
||||
<div>
|
||||
<router-view></router-view>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { mapState } from 'vuex'
|
||||
|
||||
export default {
|
||||
name: 'app',
|
||||
computed: mapState(['recaptcha']),
|
||||
data () {
|
||||
return {
|
||||
loaded: false
|
||||
}
|
||||
},
|
||||
mounted () {
|
||||
if (this.recaptcha.length === 0) {
|
||||
this.unload()
|
||||
return
|
||||
}
|
||||
const loading = document.getElementById('loading')
|
||||
loading.classList.add('done')
|
||||
|
||||
let check = () => {
|
||||
if (typeof window.grecaptcha === 'undefined') {
|
||||
setTimeout(check, 100)
|
||||
return
|
||||
}
|
||||
|
||||
this.unload()
|
||||
}
|
||||
|
||||
check()
|
||||
},
|
||||
methods: {
|
||||
unload () {
|
||||
this.loaded = true
|
||||
// Remove loading animation.
|
||||
let loading = document.getElementById('loading')
|
||||
loading.classList.add('done')
|
||||
|
||||
setTimeout(function () {
|
||||
loading.parentNode.removeChild(loading)
|
||||
}, 200)
|
||||
|
||||
this.updateCSS()
|
||||
},
|
||||
updateCSS (global = false) {
|
||||
let css = this.$store.state.css
|
||||
|
||||
if (typeof this.$store.state.user.css === 'string' && !global) {
|
||||
css += '\n' + this.$store.state.user.css
|
||||
}
|
||||
|
||||
this.removeCSS()
|
||||
|
||||
let style = document.createElement('style')
|
||||
style.title = 'custom-css'
|
||||
style.type = 'text/css'
|
||||
style.appendChild(document.createTextNode(css))
|
||||
document.head.appendChild(style)
|
||||
},
|
||||
removeCSS () {
|
||||
let style = document.querySelector('style[title="custom-css"]')
|
||||
if (style === undefined || style === null) {
|
||||
return
|
||||
}
|
||||
|
||||
style.parentElement.removeChild(style)
|
||||
},
|
||||
cleanCSS () {
|
||||
this.updateCSS(true)
|
||||
}
|
||||
setTimeout(function () {
|
||||
loading.parentNode.removeChild(loading)
|
||||
}, 200)
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
16
src/api/commands.js
Normal file
16
src/api/commands.js
Normal file
@@ -0,0 +1,16 @@
|
||||
import { removePrefix } from './utils'
|
||||
import { baseURL } from '@/utils/constants'
|
||||
import store from '@/store'
|
||||
|
||||
const ssl = (window.location.protocol === 'https:')
|
||||
const protocol = (ssl ? 'wss:' : 'ws:')
|
||||
|
||||
export default function command(url, command, onmessage, onclose) {
|
||||
url = removePrefix(url)
|
||||
url = `${protocol}//${window.location.host}${baseURL}/api/command${url}?auth=${store.state.jwt}`
|
||||
|
||||
let conn = new window.WebSocket(url)
|
||||
conn.onopen = () => conn.send(command)
|
||||
conn.onmessage = onmessage
|
||||
conn.onclose = onclose
|
||||
}
|
||||
139
src/api/files.js
Normal file
139
src/api/files.js
Normal file
@@ -0,0 +1,139 @@
|
||||
import { fetchURL, removePrefix } from './utils'
|
||||
import { baseURL } from '@/utils/constants'
|
||||
import store from '@/store'
|
||||
|
||||
export async function fetch (url) {
|
||||
url = removePrefix(url)
|
||||
|
||||
const res = await fetchURL(`/api/resources${url}`, {})
|
||||
|
||||
if (res.status === 200) {
|
||||
let data = await res.json()
|
||||
data.url = `/files${data.path}`
|
||||
|
||||
if (data.isDir) {
|
||||
if (!data.url.endsWith('/')) data.url += '/'
|
||||
data.items = data.items.map((item, index) => {
|
||||
item.index = index
|
||||
item.url = `${data.url}${encodeURIComponent(item.name)}`
|
||||
|
||||
if (item.isDir) {
|
||||
item.url += '/'
|
||||
}
|
||||
|
||||
return item
|
||||
})
|
||||
}
|
||||
|
||||
return data
|
||||
} else {
|
||||
throw new Error(res.status)
|
||||
}
|
||||
}
|
||||
|
||||
async function resourceAction (url, method, content) {
|
||||
url = removePrefix(url)
|
||||
|
||||
let opts = { method }
|
||||
|
||||
if (content) {
|
||||
opts.body = content
|
||||
}
|
||||
|
||||
const res = await fetchURL(`/api/resources${url}`, opts)
|
||||
|
||||
if (res.status !== 200) {
|
||||
throw new Error(res.responseText)
|
||||
} else {
|
||||
return res
|
||||
}
|
||||
}
|
||||
|
||||
export async function remove (url) {
|
||||
return resourceAction(url, 'DELETE')
|
||||
}
|
||||
|
||||
export async function put (url, content = '') {
|
||||
return resourceAction(url, 'PUT', content)
|
||||
}
|
||||
|
||||
export function download (format, ...files) {
|
||||
let url = `${baseURL}/api/raw`
|
||||
|
||||
if (files.length === 1) {
|
||||
url += removePrefix(files[0]) + '?'
|
||||
} else {
|
||||
let arg = ''
|
||||
|
||||
for (let file of files) {
|
||||
arg += removePrefix(file) + ','
|
||||
}
|
||||
|
||||
arg = arg.substring(0, arg.length - 1)
|
||||
arg = encodeURIComponent(arg)
|
||||
url += `/?files=${arg}&`
|
||||
}
|
||||
|
||||
if (format !== null) {
|
||||
url += `algo=${format}&`
|
||||
}
|
||||
|
||||
url += `auth=${store.state.jwt}`
|
||||
window.open(url)
|
||||
}
|
||||
|
||||
export async function post (url, content = '', overwrite = false, onupload) {
|
||||
url = removePrefix(url)
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
let request = new XMLHttpRequest()
|
||||
request.open('POST', `${baseURL}/api/resources${url}?override=${overwrite}`, true)
|
||||
request.setRequestHeader('Authorization', `Bearer ${store.state.jwt}`)
|
||||
|
||||
if (typeof onupload === 'function') {
|
||||
request.upload.onprogress = onupload
|
||||
}
|
||||
|
||||
request.onload = () => {
|
||||
if (request.status === 200) {
|
||||
resolve(request.responseText)
|
||||
} else if (request.status === 409) {
|
||||
reject(request.status)
|
||||
} else {
|
||||
reject(request.responseText)
|
||||
}
|
||||
}
|
||||
|
||||
request.onerror = (error) => {
|
||||
reject(error)
|
||||
}
|
||||
|
||||
request.send(content)
|
||||
})
|
||||
}
|
||||
|
||||
function moveCopy (items, copy = false) {
|
||||
let promises = []
|
||||
|
||||
for (let item of items) {
|
||||
let from = removePrefix(item.from)
|
||||
let to = encodeURIComponent(removePrefix(item.to))
|
||||
let url = `${from}?action=${copy ? 'copy' : 'rename'}&destination=${to}`
|
||||
promises.push(resourceAction(url, 'PATCH'))
|
||||
}
|
||||
|
||||
return Promise.all(promises)
|
||||
}
|
||||
|
||||
export function move (items) {
|
||||
return moveCopy(items)
|
||||
}
|
||||
|
||||
export function copy (items) {
|
||||
return moveCopy(items, true)
|
||||
}
|
||||
|
||||
export async function checksum (url, algo) {
|
||||
const data = await resourceAction(`${url}?checksum=${algo}`, 'GET')
|
||||
return (await data.json()).checksums[algo]
|
||||
}
|
||||
15
src/api/index.js
Normal file
15
src/api/index.js
Normal file
@@ -0,0 +1,15 @@
|
||||
import * as files from './files'
|
||||
import * as share from './share'
|
||||
import * as users from './users'
|
||||
import * as settings from './settings'
|
||||
import search from './search'
|
||||
import commands from './commands'
|
||||
|
||||
export {
|
||||
files,
|
||||
share,
|
||||
users,
|
||||
settings,
|
||||
commands,
|
||||
search
|
||||
}
|
||||
8
src/api/search.js
Normal file
8
src/api/search.js
Normal file
@@ -0,0 +1,8 @@
|
||||
import { fetchJSON, removePrefix } from './utils'
|
||||
|
||||
export default async function search (url, query) {
|
||||
url = removePrefix(url)
|
||||
query = encodeURIComponent(query)
|
||||
|
||||
return fetchJSON(`/api/search${url}?query=${query}`, {})
|
||||
}
|
||||
16
src/api/settings.js
Normal file
16
src/api/settings.js
Normal file
@@ -0,0 +1,16 @@
|
||||
import { fetchURL, fetchJSON } from './utils'
|
||||
|
||||
export function get () {
|
||||
return fetchJSON(`/api/settings`, {})
|
||||
}
|
||||
|
||||
export async function update (settings) {
|
||||
const res = await fetchURL(`/api/settings`, {
|
||||
method: 'PUT',
|
||||
body: JSON.stringify(settings)
|
||||
})
|
||||
|
||||
if (res.status !== 200) {
|
||||
throw new Error(res.status)
|
||||
}
|
||||
}
|
||||
32
src/api/share.js
Normal file
32
src/api/share.js
Normal file
@@ -0,0 +1,32 @@
|
||||
import { fetchURL, fetchJSON, removePrefix } from './utils'
|
||||
|
||||
export async function getHash(hash) {
|
||||
return fetchJSON(`/api/public/share/${hash}`)
|
||||
}
|
||||
|
||||
export async function get(url) {
|
||||
url = removePrefix(url)
|
||||
return fetchJSON(`/api/share${url}`)
|
||||
}
|
||||
|
||||
export async function remove(hash) {
|
||||
const res = await fetchURL(`/api/share/${hash}`, {
|
||||
method: 'DELETE'
|
||||
})
|
||||
|
||||
if (res.status !== 200) {
|
||||
throw new Error(res.status)
|
||||
}
|
||||
}
|
||||
|
||||
export async function create(url, expires = '', unit = 'hours') {
|
||||
url = removePrefix(url)
|
||||
url = `/api/share${url}`
|
||||
if (expires !== '') {
|
||||
url += `?expires=${expires}&unit=${unit}`
|
||||
}
|
||||
|
||||
return fetchJSON(url, {
|
||||
method: 'POST'
|
||||
})
|
||||
}
|
||||
52
src/api/users.js
Normal file
52
src/api/users.js
Normal file
@@ -0,0 +1,52 @@
|
||||
import { fetchURL, fetchJSON } from './utils'
|
||||
|
||||
export async function getAll () {
|
||||
return fetchJSON(`/api/users`, {})
|
||||
}
|
||||
|
||||
export async function get (id) {
|
||||
return fetchJSON(`/api/users/${id}`, {})
|
||||
}
|
||||
|
||||
export async function create (user) {
|
||||
const res = await fetchURL(`/api/users`, {
|
||||
method: 'POST',
|
||||
body: JSON.stringify({
|
||||
what: 'user',
|
||||
which: [],
|
||||
data: user
|
||||
})
|
||||
})
|
||||
|
||||
if (res.status === 201) {
|
||||
return res.headers.get('Location')
|
||||
} else {
|
||||
throw new Error(res.status)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export async function update (user, which = ['all']) {
|
||||
const res = await fetchURL(`/api/users/${user.id}`, {
|
||||
method: 'PUT',
|
||||
body: JSON.stringify({
|
||||
what: 'user',
|
||||
which: which,
|
||||
data: user
|
||||
})
|
||||
})
|
||||
|
||||
if (res.status !== 200) {
|
||||
throw new Error(res.status)
|
||||
}
|
||||
}
|
||||
|
||||
export async function remove (id) {
|
||||
const res = await fetchURL(`/api/users/${id}`, {
|
||||
method: 'DELETE'
|
||||
})
|
||||
|
||||
if (res.status !== 200) {
|
||||
throw new Error(res.status)
|
||||
}
|
||||
}
|
||||
45
src/api/utils.js
Normal file
45
src/api/utils.js
Normal file
@@ -0,0 +1,45 @@
|
||||
import store from '@/store'
|
||||
import { renew } from '@/utils/auth'
|
||||
import { baseURL } from '@/utils/constants'
|
||||
|
||||
export async function fetchURL (url, opts) {
|
||||
opts = opts || {}
|
||||
opts.headers = opts.headers || {}
|
||||
|
||||
let { headers, ...rest } = opts
|
||||
|
||||
const res = await fetch(`${baseURL}${url}`, {
|
||||
headers: {
|
||||
'Authorization': `Bearer ${store.state.jwt}`,
|
||||
...headers
|
||||
},
|
||||
...rest
|
||||
})
|
||||
|
||||
if (res.headers.get('X-Renew-Token') === 'true') {
|
||||
await renew(store.state.jwt)
|
||||
}
|
||||
|
||||
return res
|
||||
}
|
||||
|
||||
export async function fetchJSON (url, opts) {
|
||||
const res = await fetchURL(url, opts)
|
||||
|
||||
if (res.status === 200) {
|
||||
return res.json()
|
||||
} else {
|
||||
throw new Error(res.status)
|
||||
}
|
||||
}
|
||||
|
||||
export function removePrefix (url) {
|
||||
if (url.startsWith('/files')) {
|
||||
url = url.slice(6)
|
||||
}
|
||||
|
||||
if (url === '') url = '/'
|
||||
if (url[0] !== '/') url = '/' + url
|
||||
return url
|
||||
}
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,147 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xml:space="preserve"
|
||||
width="560"
|
||||
height="560"
|
||||
version="1.1"
|
||||
style="clip-rule:evenodd;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision"
|
||||
viewBox="0 0 560 560"
|
||||
id="svg44"
|
||||
sodipodi:docname="icon_raw.svg"
|
||||
inkscape:version="0.92.3 (2405546, 2018-03-11)"
|
||||
inkscape:export-filename="/home/umarcor/filebrowser/logo/icon_raw.svg.png"
|
||||
inkscape:export-xdpi="96"
|
||||
inkscape:export-ydpi="96"><metadata
|
||||
id="metadata48"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1366"
|
||||
inkscape:window-height="711"
|
||||
id="namedview46"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.33714286"
|
||||
inkscape:cx="-172.33051"
|
||||
inkscape:cy="280"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="20"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg44" />
|
||||
<defs
|
||||
id="defs4">
|
||||
<style
|
||||
type="text/css"
|
||||
id="style2">
|
||||
<![CDATA[
|
||||
.fil1 {fill:#FEFEFE}
|
||||
.fil6 {fill:#006498}
|
||||
.fil7 {fill:#0EA5EB}
|
||||
.fil8 {fill:#2979FF}
|
||||
.fil3 {fill:#2BBCFF}
|
||||
.fil0 {fill:#455A64}
|
||||
.fil4 {fill:#53C6FC}
|
||||
.fil5 {fill:#BDEAFF}
|
||||
.fil2 {fill:#332C2B;fill-opacity:0.149020}
|
||||
]]>
|
||||
</style>
|
||||
</defs>
|
||||
<g
|
||||
id="g85"
|
||||
transform="translate(-70,-70)"><path
|
||||
class="fil1"
|
||||
d="M 350,71 C 504,71 629,196 629,350 629,504 504,629 350,629 196,629 71,504 71,350 71,196 196,71 350,71 Z"
|
||||
id="path9"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#fefefe" /><path
|
||||
class="fil2"
|
||||
d="M 475,236 593,387 C 596,503 444,639 301,585 L 225,486 339,330 c 0,0 138,-95 136,-94 z"
|
||||
id="path11"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#332c2b;fill-opacity:0.14902003" /><path
|
||||
class="fil3"
|
||||
d="m 231,211 h 208 l 38,24 v 246 c 0,5 -3,8 -8,8 H 231 c -5,0 -8,-3 -8,-8 V 219 c 0,-5 3,-8 8,-8 z"
|
||||
id="path13"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#2bbcff" /><path
|
||||
class="fil4"
|
||||
d="m 231,211 h 208 l 38,24 v 2 L 440,214 H 231 c -4,0 -7,3 -7,7 v 263 c -1,-1 -1,-2 -1,-3 V 219 c 0,-5 3,-8 8,-8 z"
|
||||
id="path15"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#53c6fc" /><polygon
|
||||
class="fil5"
|
||||
points="305,212 418,212 418,310 305,310 "
|
||||
id="polygon17"
|
||||
style="fill:#bdeaff" /><path
|
||||
class="fil5"
|
||||
d="m 255,363 h 189 c 3,0 5,2 5,4 V 483 H 250 V 367 c 0,-2 2,-4 5,-4 z"
|
||||
id="path19"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#bdeaff" /><polygon
|
||||
class="fil6"
|
||||
points="250,470 449,470 449,483 250,483 "
|
||||
id="polygon21"
|
||||
style="fill:#006498" /><path
|
||||
class="fil6"
|
||||
d="m 380,226 h 10 c 3,0 6,2 6,5 v 40 c 0,3 -3,6 -6,6 h -10 c -3,0 -6,-3 -6,-6 v -40 c 0,-3 3,-5 6,-5 z"
|
||||
id="path23"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#006498" /><path
|
||||
class="fil1"
|
||||
d="m 254,226 c 10,0 17,7 17,17 0,9 -7,16 -17,16 -9,0 -17,-7 -17,-16 0,-10 8,-17 17,-17 z"
|
||||
id="path25"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#fefefe" /><path
|
||||
class="fil6"
|
||||
d="m 267,448 h 165 c 2,0 3,1 3,3 v 0 c 0,1 -1,3 -3,3 H 267 c -2,0 -3,-2 -3,-3 v 0 c 0,-2 1,-3 3,-3 z"
|
||||
id="path27"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#006498" /><path
|
||||
class="fil6"
|
||||
d="m 267,415 h 165 c 2,0 3,1 3,3 v 0 c 0,1 -1,2 -3,2 H 267 c -2,0 -3,-1 -3,-2 v 0 c 0,-2 1,-3 3,-3 z"
|
||||
id="path29"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#006498" /><path
|
||||
class="fil6"
|
||||
d="m 267,381 h 165 c 2,0 3,2 3,3 v 0 c 0,2 -1,3 -3,3 H 267 c -2,0 -3,-1 -3,-3 v 0 c 0,-1 1,-3 3,-3 z"
|
||||
id="path31"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#006498" /><path
|
||||
class="fil1"
|
||||
d="m 236,472 c 3,0 5,2 5,5 0,2 -2,4 -5,4 -3,0 -5,-2 -5,-4 0,-3 2,-5 5,-5 z"
|
||||
id="path33"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#fefefe" /><path
|
||||
class="fil1"
|
||||
d="m 463,472 c 3,0 5,2 5,5 0,2 -2,4 -5,4 -3,0 -5,-2 -5,-4 0,-3 2,-5 5,-5 z"
|
||||
id="path35"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#fefefe" /><polygon
|
||||
class="fil6"
|
||||
points="305,212 284,212 284,310 305,310 "
|
||||
id="polygon37"
|
||||
style="fill:#006498" /><path
|
||||
class="fil7"
|
||||
d="m 477,479 v 2 c 0,5 -3,8 -8,8 H 231 c -5,0 -8,-3 -8,-8 v -2 c 0,4 3,8 8,8 h 238 c 5,0 8,-4 8,-8 z"
|
||||
id="path39"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#0ea5eb" /><path
|
||||
class="fil8"
|
||||
d="M 350,70 C 505,70 630,195 630,350 630,505 505,630 350,630 195,630 70,505 70,350 70,195 195,70 350,70 Z m 0,46 C 479,116 584,221 584,350 584,479 479,584 350,584 221,584 116,479 116,350 116,221 221,116 350,116 Z"
|
||||
id="path41"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#2979ff" /></g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 5.4 KiB |
@@ -4,62 +4,56 @@
|
||||
<button @click="openSidebar" :aria-label="$t('buttons.toggleSidebar')" :title="$t('buttons.toggleSidebar')" class="action">
|
||||
<i class="material-icons">menu</i>
|
||||
</button>
|
||||
<img src="../assets/logo.svg" alt="File Browser">
|
||||
<search></search>
|
||||
<img :src="logoURL" alt="File Browser">
|
||||
<search v-if="isLogged"></search>
|
||||
</div>
|
||||
<div>
|
||||
<button @click="openSearch" :aria-label="$t('buttons.search')" :title="$t('buttons.search')" class="search-button action">
|
||||
<i class="material-icons">search</i>
|
||||
</button>
|
||||
|
||||
<button v-show="showSaveButton" :aria-label="$t('buttons.save')" :title="$t('buttons.save')" class="action" id="save-button">
|
||||
<i class="material-icons">save</i>
|
||||
</button>
|
||||
|
||||
<template v-if="staticGen.length > 0">
|
||||
<button v-show="showPublishButton" :aria-label="$t('buttons.publish')" :title="$t('buttons.publish')" class="action" id="publish-button">
|
||||
<i class="material-icons">send</i>
|
||||
<template v-if="isLogged">
|
||||
<button @click="openSearch" :aria-label="$t('buttons.search')" :title="$t('buttons.search')" class="search-button action">
|
||||
<i class="material-icons">search</i>
|
||||
</button>
|
||||
</template>
|
||||
|
||||
<button @click="openMore" id="more" :aria-label="$t('buttons.more')" :title="$t('buttons.more')" class="action">
|
||||
<i class="material-icons">more_vert</i>
|
||||
</button>
|
||||
<button v-show="showSaveButton" :aria-label="$t('buttons.save')" :title="$t('buttons.save')" class="action" id="save-button">
|
||||
<i class="material-icons">save</i>
|
||||
</button>
|
||||
|
||||
<!-- Menu that shows on listing AND mobile when there are files selected -->
|
||||
<div id="file-selection" v-if="isMobile && req.kind === 'listing'">
|
||||
<span v-if="selectedCount > 0">{{ selectedCount }} selected</span>
|
||||
<share-button v-show="showRenameButton"></share-button>
|
||||
<rename-button v-show="showRenameButton"></rename-button>
|
||||
<copy-button v-show="showMoveButton"></copy-button>
|
||||
<move-button v-show="showMoveButton"></move-button>
|
||||
<delete-button v-show="showDeleteButton"></delete-button>
|
||||
</div>
|
||||
<button @click="openMore" id="more" :aria-label="$t('buttons.more')" :title="$t('buttons.more')" class="action">
|
||||
<i class="material-icons">more_vert</i>
|
||||
</button>
|
||||
|
||||
<!-- This buttons are shown on a dropdown on mobile phones -->
|
||||
<div id="dropdown" :class="{ active: showMore }">
|
||||
<div v-if="!isListing || !isMobile">
|
||||
<share-button v-show="showRenameButton"></share-button>
|
||||
<!-- Menu that shows on listing AND mobile when there are files selected -->
|
||||
<div id="file-selection" v-if="isMobile && isListing">
|
||||
<span v-if="selectedCount > 0">{{ selectedCount }} selected</span>
|
||||
<share-button v-show="showShareButton"></share-button>
|
||||
<rename-button v-show="showRenameButton"></rename-button>
|
||||
<copy-button v-show="showMoveButton"></copy-button>
|
||||
<copy-button v-show="showCopyButton"></copy-button>
|
||||
<move-button v-show="showMoveButton"></move-button>
|
||||
<delete-button v-show="showDeleteButton"></delete-button>
|
||||
</div>
|
||||
|
||||
<template v-if="staticGen.length > 0">
|
||||
<schedule-button v-show="showPublishButton"></schedule-button>
|
||||
</template>
|
||||
<!-- This buttons are shown on a dropdown on mobile phones -->
|
||||
<div id="dropdown" :class="{ active: showMore }">
|
||||
<div v-if="!isListing || !isMobile">
|
||||
<share-button v-show="showShareButton"></share-button>
|
||||
<rename-button v-show="showRenameButton"></rename-button>
|
||||
<copy-button v-show="showCopyButton"></copy-button>
|
||||
<move-button v-show="showMoveButton"></move-button>
|
||||
<delete-button v-show="showDeleteButton"></delete-button>
|
||||
</div>
|
||||
|
||||
<switch-button v-show="showSwitchButton"></switch-button>
|
||||
<download-button v-show="showCommonButton"></download-button>
|
||||
<upload-button v-show="showUpload"></upload-button>
|
||||
<info-button v-show="showCommonButton"></info-button>
|
||||
<shell-button v-show="user.perm.execute" />
|
||||
<switch-button v-show="isListing"></switch-button>
|
||||
<download-button v-show="showDownloadButton"></download-button>
|
||||
<upload-button v-show="showUpload"></upload-button>
|
||||
<info-button v-show="isFiles"></info-button>
|
||||
|
||||
<button v-show="isListing" @click="openSelect" :aria-label="$t('buttons.selectMultiple')" :title="$t('buttons.selectMultiple')" class="action">
|
||||
<i class="material-icons">check_circle</i>
|
||||
<span>{{ $t('buttons.select') }}</span>
|
||||
</button>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<button v-show="showSelectButton" @click="openSelect" :aria-label="$t('buttons.selectMultiple')" :title="$t('buttons.selectMultiple')" class="action">
|
||||
<i class="material-icons">check_circle</i>
|
||||
<span>{{ $t('buttons.select') }}</span>
|
||||
</button>
|
||||
</div>
|
||||
<div v-show="showOverlay" @click="resetPrompts" class="overlay"></div>
|
||||
</div>
|
||||
</header>
|
||||
@@ -75,14 +69,15 @@ import DownloadButton from './buttons/Download'
|
||||
import SwitchButton from './buttons/SwitchView'
|
||||
import MoveButton from './buttons/Move'
|
||||
import CopyButton from './buttons/Copy'
|
||||
import ScheduleButton from './buttons/Schedule'
|
||||
import ShareButton from './buttons/Share'
|
||||
import ShellButton from './buttons/Shell'
|
||||
import {mapGetters, mapState} from 'vuex'
|
||||
import * as api from '@/utils/api'
|
||||
import { logoURL } from '@/utils/constants'
|
||||
import * as api from '@/api'
|
||||
import buttons from '@/utils/buttons'
|
||||
|
||||
export default {
|
||||
name: 'main',
|
||||
name: 'header-layout',
|
||||
components: {
|
||||
Search,
|
||||
InfoButton,
|
||||
@@ -94,7 +89,7 @@ export default {
|
||||
UploadButton,
|
||||
SwitchButton,
|
||||
MoveButton,
|
||||
ScheduleButton
|
||||
ShellButton
|
||||
},
|
||||
data: function () {
|
||||
return {
|
||||
@@ -114,88 +109,62 @@ export default {
|
||||
},
|
||||
computed: {
|
||||
...mapGetters([
|
||||
'selectedCount'
|
||||
'selectedCount',
|
||||
'isFiles',
|
||||
'isEditor',
|
||||
'isListing',
|
||||
'isLogged'
|
||||
]),
|
||||
...mapState([
|
||||
'req',
|
||||
'user',
|
||||
'loading',
|
||||
'reload',
|
||||
'multiple',
|
||||
'staticGen'
|
||||
'multiple'
|
||||
]),
|
||||
logoURL: () => logoURL,
|
||||
isMobile () {
|
||||
return this.width <= 736
|
||||
},
|
||||
isListing () {
|
||||
return this.req.kind === 'listing'
|
||||
},
|
||||
showSelectButton () {
|
||||
return this.req.kind === 'listing' && !this.loading && this.$route.name === 'Files'
|
||||
showUpload () {
|
||||
return this.isListing && this.user.perm.create
|
||||
},
|
||||
showSaveButton () {
|
||||
return (this.req.kind === 'editor' && !this.loading)
|
||||
return this.isEditor && this.user.perm.modify
|
||||
},
|
||||
showPublishButton () {
|
||||
return (this.req.kind === 'editor' && !this.loading && this.user.allowPublish)
|
||||
},
|
||||
showSwitchButton () {
|
||||
return this.req.kind === 'listing' && this.$route.name === 'Files' && !this.loading
|
||||
},
|
||||
showCommonButton () {
|
||||
return !(this.$route.name !== 'Files' || this.loading)
|
||||
},
|
||||
showUpload () {
|
||||
if (this.$route.name !== 'Files' || this.loading) return false
|
||||
|
||||
if (this.req.kind === 'editor') return false
|
||||
return this.user.allowNew
|
||||
showDownloadButton () {
|
||||
return this.isFiles && this.user.perm.download
|
||||
},
|
||||
showDeleteButton () {
|
||||
if (this.$route.name !== 'Files' || this.loading) return false
|
||||
|
||||
if (this.req.kind === 'listing') {
|
||||
if (this.selectedCount === 0) {
|
||||
return false
|
||||
}
|
||||
|
||||
return this.user.allowEdit
|
||||
}
|
||||
|
||||
return this.user.allowEdit
|
||||
return this.isFiles && (this.isListing
|
||||
? (this.selectedCount !== 0 && this.user.perm.delete)
|
||||
: this.user.perm.delete)
|
||||
},
|
||||
showRenameButton () {
|
||||
if (this.$route.name !== 'Files' || this.loading) return false
|
||||
|
||||
if (this.req.kind === 'listing') {
|
||||
if (this.selectedCount === 1) {
|
||||
return this.user.allowEdit
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
return this.user.allowEdit
|
||||
return this.isFiles && (this.isListing
|
||||
? (this.selectedCount === 1 && this.user.perm.rename)
|
||||
: this.user.perm.rename)
|
||||
},
|
||||
showShareButton () {
|
||||
return this.isFiles && (this.isListing
|
||||
? (this.selectedCount === 1 && this.user.perm.share)
|
||||
: this.user.perm.share)
|
||||
},
|
||||
showMoveButton () {
|
||||
if (this.$route.name !== 'Files' || this.loading) return false
|
||||
|
||||
if (this.req.kind !== 'listing') {
|
||||
return false
|
||||
}
|
||||
|
||||
if (this.selectedCount > 0) {
|
||||
return this.user.allowEdit
|
||||
}
|
||||
|
||||
return false
|
||||
return this.isFiles && (this.isListing
|
||||
? (this.selectedCount > 0 && this.user.perm.rename)
|
||||
: this.user.perm.rename)
|
||||
},
|
||||
showCopyButton () {
|
||||
return this.isFiles && (this.isListing
|
||||
? (this.selectedCount > 0 && this.user.perm.create)
|
||||
: this.user.perm.create)
|
||||
},
|
||||
showMore () {
|
||||
if (this.$route.name !== 'Files' || this.loading) return false
|
||||
return (this.$store.state.show === 'more')
|
||||
return this.isFiles && this.$store.state.show === 'more'
|
||||
},
|
||||
showOverlay () {
|
||||
return (this.$store.state.show === 'more')
|
||||
return this.showMore
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
|
||||
@@ -1,44 +1,53 @@
|
||||
<template>
|
||||
<div id="search" @click="open" v-bind:class="{ active , ongoing }">
|
||||
<div id="input">
|
||||
<button v-if="active" class="action" @click="close" :aria-label="$t('buttons.close')" :title="$t('buttons.close')">
|
||||
<button
|
||||
v-if="active"
|
||||
class="action"
|
||||
@click="close"
|
||||
:aria-label="$t('buttons.close')"
|
||||
:title="$t('buttons.close')"
|
||||
>
|
||||
<i class="material-icons">arrow_back</i>
|
||||
</button>
|
||||
<i v-else class="material-icons">search</i>
|
||||
<input type="text"
|
||||
@keyup="keyup"
|
||||
<input
|
||||
type="text"
|
||||
@keyup.exact="keyup"
|
||||
@keyup.enter="submit"
|
||||
ref="input"
|
||||
:autofocus="active"
|
||||
v-model.trim="value"
|
||||
:aria-label="$t('search.writeToSearch')"
|
||||
:placeholder="placeholder">
|
||||
:aria-label="$t('search.search')"
|
||||
:placeholder="$t('search.search')"
|
||||
>
|
||||
</div>
|
||||
|
||||
<div id="result">
|
||||
<div>
|
||||
<template v-if="search.length === 0 && commands.length === 0">
|
||||
<template v-if="isEmpty">
|
||||
<p>{{ text }}</p>
|
||||
|
||||
<template v-if="value.length === 0">
|
||||
<div class="boxes">
|
||||
<h3>{{ $t('search.types') }}</h3>
|
||||
<div>
|
||||
<div tabindex="0"
|
||||
<div
|
||||
tabindex="0"
|
||||
v-for="(v,k) in boxes"
|
||||
:key="k"
|
||||
role="button"
|
||||
@click="init('type:'+k)"
|
||||
:aria-label="$t('search.'+v.label)">
|
||||
:aria-label="$t('search.'+v.label)"
|
||||
>
|
||||
<i class="material-icons">{{v.icon}}</i>
|
||||
<p>{{ $t('search.'+v.label) }}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
</template>
|
||||
<ul v-else-if="search.length > 0">
|
||||
<ul v-else-if="results.length > 0">
|
||||
<li v-for="(s,k) in results" :key="k">
|
||||
<router-link @click.native="close" :to="'./' + s.path">
|
||||
<i v-if="s.dir" class="material-icons">folder</i>
|
||||
@@ -47,228 +56,129 @@
|
||||
</router-link>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<pre v-else-if="commands.length > 0"><template v-for="c in commands">{{ c }}</template></pre>
|
||||
</div>
|
||||
<p id="renew"><i class="material-icons spin">autorenew</i></p>
|
||||
<p id="renew">
|
||||
<i class="material-icons spin">autorenew</i>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { mapState } from 'vuex'
|
||||
import url from '@/utils/url'
|
||||
import * as api from '@/utils/api'
|
||||
import { mapState, mapGetters, mapMutations } from "vuex"
|
||||
import url from "@/utils/url"
|
||||
import { search } from "@/api"
|
||||
|
||||
// TODO: show fifty at the tie
|
||||
|
||||
var boxes = {
|
||||
image: { label: 'images', icon: 'insert_photo' },
|
||||
audio: { label: 'music', icon: 'volume_up' },
|
||||
video: { label: 'video', icon: 'movie' },
|
||||
pdf: { label: 'pdf', icon: 'picture_as_pdf' }
|
||||
image: { label: "images", icon: "insert_photo" },
|
||||
audio: { label: "music", icon: "volume_up" },
|
||||
video: { label: "video", icon: "movie" },
|
||||
pdf: { label: "pdf", icon: "picture_as_pdf" }
|
||||
}
|
||||
|
||||
export default {
|
||||
name: 'search',
|
||||
data: function () {
|
||||
name: "search",
|
||||
data: function() {
|
||||
return {
|
||||
value: '',
|
||||
value: "",
|
||||
active: false,
|
||||
ongoing: false,
|
||||
scrollable: null,
|
||||
search: [],
|
||||
commands: [],
|
||||
results: [],
|
||||
reload: false,
|
||||
resultsCount: 50,
|
||||
boxes: boxes
|
||||
scrollable: null
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
show (val, old) {
|
||||
this.active = (val === 'search')
|
||||
show(val, old) {
|
||||
this.active = val === "search"
|
||||
|
||||
// If the hover was search and now it's something else
|
||||
// we should blur the input.
|
||||
if (old === 'search' && val !== 'search') {
|
||||
if (old === "search" && !this.active) {
|
||||
if (this.reload) {
|
||||
this.$store.commit('setReload', true)
|
||||
this.setReload(true)
|
||||
}
|
||||
|
||||
document.body.style.overflow = 'auto'
|
||||
document.body.style.overflow = "auto"
|
||||
this.reset()
|
||||
this.$refs.input.blur()
|
||||
}
|
||||
|
||||
// If we are starting to show the search box, we should
|
||||
// focus the input.
|
||||
if (val === 'search') {
|
||||
} else if (this.active) {
|
||||
this.reload = false
|
||||
this.$refs.input.focus()
|
||||
document.body.style.overflow = 'hidden'
|
||||
document.body.style.overflow = "hidden"
|
||||
}
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
...mapState(['user', 'show']),
|
||||
// Placeholder value.
|
||||
placeholder () {
|
||||
if (this.user.allowCommands && this.user.commands.length > 0) {
|
||||
return this.$t('search.searchOrCommand')
|
||||
}
|
||||
|
||||
return this.$t('search.search')
|
||||
...mapState(["user", "show"]),
|
||||
...mapGetters(["isListing"]),
|
||||
boxes() {
|
||||
return boxes
|
||||
},
|
||||
// The text that is shown on the results' box while
|
||||
// there is no search result or command output to show.
|
||||
text () {
|
||||
isEmpty() {
|
||||
return this.results.length === 0
|
||||
},
|
||||
text() {
|
||||
if (this.ongoing) {
|
||||
return ''
|
||||
return ""
|
||||
}
|
||||
|
||||
if (this.value.length === 0) {
|
||||
if (this.user.allowCommands && this.user.commands.length > 0) {
|
||||
return `${this.$t('search.searchOrSupportedCommand')} ${this.user.commands.join(', ')}.`
|
||||
}
|
||||
|
||||
this.$t('search.typeSearch')
|
||||
}
|
||||
|
||||
if (!(this.value[0] === '$') || !this.user.allowCommands) {
|
||||
return this.$t('search.pressToSearch')
|
||||
} else {
|
||||
if (this.command.length === 0) {
|
||||
return this.$t('search.typeCommand')
|
||||
}
|
||||
if (!this.supported()) {
|
||||
return this.$t('search.notSupportedCommand')
|
||||
}
|
||||
return this.$t('search.pressToExecute')
|
||||
}
|
||||
},
|
||||
// The command, without the leading symbol ('$') with or without a following space (' ')
|
||||
command () {
|
||||
return this.value[1] === ' ' ? this.value.slice(2) : this.value.slice(1)
|
||||
},
|
||||
results () {
|
||||
return this.search.slice(0, this.resultsCount)
|
||||
return this.value === '' ? this.$t("search.typeToSearch") : this.$t("search.pressToSearch")
|
||||
}
|
||||
},
|
||||
mounted () {
|
||||
// Gets the result div which will be scrollable.
|
||||
this.scrollable = document.querySelector('#search #result')
|
||||
|
||||
// Adds the keydown event on window for the ESC key, so
|
||||
// when it's pressed, it closes the search window.
|
||||
window.addEventListener('keydown', (event) => {
|
||||
mounted() {
|
||||
window.addEventListener("keydown", event => {
|
||||
if (event.keyCode === 27) {
|
||||
this.$store.commit('closeHovers')
|
||||
}
|
||||
})
|
||||
|
||||
this.scrollable.addEventListener('scroll', (event) => {
|
||||
if (this.scrollable.scrollTop === (this.scrollable.scrollHeight - this.scrollable.offsetHeight)) {
|
||||
this.resultsCount += 50
|
||||
this.closeHovers()
|
||||
}
|
||||
})
|
||||
},
|
||||
methods: {
|
||||
// Sets the search to active.
|
||||
open (event) {
|
||||
this.$store.commit('showHover', 'search')
|
||||
...mapMutations(["showHover", "closeHovers", "setReload"]),
|
||||
open() {
|
||||
this.showHover("search")
|
||||
},
|
||||
// Closes the search and prevents the event
|
||||
// of propagating so it doesn't trigger the
|
||||
// click event on #search.
|
||||
close (event) {
|
||||
close(event) {
|
||||
event.stopPropagation()
|
||||
event.preventDefault()
|
||||
this.$store.commit('closeHovers')
|
||||
this.closeHovers()
|
||||
},
|
||||
// Checks if the current input is a supported command.
|
||||
supported () {
|
||||
let cmd = this.command.split(' ')[0]
|
||||
let cl = this.user.commands.length
|
||||
if (cl !== 0) {
|
||||
for (let i = 0; i < cl; i++) {
|
||||
if (cmd.match(this.user.commands[i])) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
return false
|
||||
},
|
||||
// Initializes the search with a default value.
|
||||
init (string) {
|
||||
this.value = string + ' '
|
||||
this.$refs.input.focus()
|
||||
},
|
||||
// Resets the search box value.
|
||||
reset () {
|
||||
this.value = ''
|
||||
this.active = false
|
||||
this.ongoing = false
|
||||
this.resultsCount = 50
|
||||
this.search = []
|
||||
this.commands = []
|
||||
},
|
||||
// When the user presses a key, if it is ESC
|
||||
// then it will close the search box. Otherwise,
|
||||
// it will set the search box to active and clean
|
||||
// the search results, as well as commands'.
|
||||
keyup (event) {
|
||||
keyup(event) {
|
||||
if (event.keyCode === 27) {
|
||||
this.close(event)
|
||||
return
|
||||
}
|
||||
|
||||
this.search.length = 0
|
||||
this.commands.length = 0
|
||||
this.results.length = 0
|
||||
},
|
||||
// Submits the input to the server and sets ongoing to true.
|
||||
submit (event) {
|
||||
this.ongoing = true
|
||||
init (string) {
|
||||
this.value = `${string} `
|
||||
this.$refs.input.focus()
|
||||
},
|
||||
reset () {
|
||||
this.value = ''
|
||||
this.active = false
|
||||
this.ongoing = false
|
||||
this.resultsCount = 50
|
||||
this.results = []
|
||||
},
|
||||
async submit(event) {
|
||||
event.preventDefault()
|
||||
|
||||
let path = this.$route.path
|
||||
if (this.$store.state.req.kind !== 'listing') {
|
||||
path = url.removeLastDir(path) + '/'
|
||||
}
|
||||
|
||||
// In case of being a command.
|
||||
if (this.value[0] === '$') {
|
||||
if (this.supported() && this.user.allowCommands) {
|
||||
api.command(path, this.command,
|
||||
(event) => {
|
||||
this.commands.push(event.data)
|
||||
this.scrollable.scrollTop = this.scrollable.scrollHeight
|
||||
},
|
||||
(event) => {
|
||||
this.reload = true
|
||||
this.ongoing = false
|
||||
this.scrollable.scrollTop = this.scrollable.scrollHeight
|
||||
}
|
||||
)
|
||||
return
|
||||
}
|
||||
this.ongoing = false
|
||||
if (this.value === '') {
|
||||
return
|
||||
}
|
||||
|
||||
let results = []
|
||||
let path = this.$route.path
|
||||
if (!this.isListing) {
|
||||
path = url.removeLastDir(path) + "/"
|
||||
}
|
||||
|
||||
// In case of being a search.
|
||||
api.search(path, this.value,
|
||||
(event) => {
|
||||
let response = JSON.parse(event.data)
|
||||
if (response.path[0] === '/') {
|
||||
response.path = response.path.substring(1)
|
||||
}
|
||||
this.ongoing = true
|
||||
|
||||
results.push(response)
|
||||
},
|
||||
(event) => {
|
||||
this.ongoing = false
|
||||
this.search = results
|
||||
}
|
||||
)
|
||||
this.results = await search(path, this.value)
|
||||
this.ongoing = false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
115
src/components/Shell.vue
Normal file
115
src/components/Shell.vue
Normal file
@@ -0,0 +1,115 @@
|
||||
<template>
|
||||
<div @click="focus" class="shell" ref="scrollable" :class="{ ['shell--hidden']: !showShell}">
|
||||
<div v-for="(c, index) in content" :key="index" class="shell__result" >
|
||||
<div class="shell__prompt"><i class="material-icons">chevron_right</i></div>
|
||||
<pre class="shell__text">{{ c.text }}</pre>
|
||||
</div>
|
||||
|
||||
<div class="shell__result" :class="{ 'shell__result--hidden': !canInput }" >
|
||||
<div class="shell__prompt"><i class="material-icons">chevron_right</i></div>
|
||||
<pre
|
||||
tabindex="0"
|
||||
ref="input"
|
||||
class="shell__text"
|
||||
contenteditable="true"
|
||||
@keydown.prevent.38="historyUp"
|
||||
@keydown.prevent.40="historyDown"
|
||||
@keypress.prevent.enter="submit" />
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { mapMutations, mapState, mapGetters } from 'vuex'
|
||||
import { commands } from '@/api'
|
||||
|
||||
export default {
|
||||
name: 'shell',
|
||||
computed: {
|
||||
...mapState([ 'user', 'showShell' ]),
|
||||
...mapGetters([ 'isFiles', 'isLogged' ]),
|
||||
path: function () {
|
||||
if (this.isFiles) {
|
||||
return this.$route.path
|
||||
}
|
||||
|
||||
return ''
|
||||
}
|
||||
},
|
||||
data: () => ({
|
||||
content: [],
|
||||
history: [],
|
||||
historyPos: 0,
|
||||
canInput: true
|
||||
}),
|
||||
methods: {
|
||||
...mapMutations([ 'toggleShell' ]),
|
||||
scroll: function () {
|
||||
this.$refs.scrollable.scrollTop = this.$refs.scrollable.scrollHeight
|
||||
},
|
||||
focus: function () {
|
||||
this.$refs.input.focus()
|
||||
},
|
||||
historyUp () {
|
||||
if (this.historyPos > 0) {
|
||||
this.$refs.input.innerText = this.history[--this.historyPos]
|
||||
this.focus()
|
||||
}
|
||||
},
|
||||
historyDown () {
|
||||
if (this.historyPos >= 0 && this.historyPos < this.history.length - 1) {
|
||||
this.$refs.input.innerText = this.history[++this.historyPos]
|
||||
this.focus()
|
||||
} else {
|
||||
this.historyPos = this.history.length
|
||||
this.$refs.input.innerText = ''
|
||||
}
|
||||
},
|
||||
submit: function (event) {
|
||||
const cmd = event.target.innerText.trim()
|
||||
|
||||
if (cmd === '') {
|
||||
return
|
||||
}
|
||||
|
||||
if (cmd === 'clear') {
|
||||
this.content = []
|
||||
event.target.innerHTML = ''
|
||||
return
|
||||
}
|
||||
|
||||
if (cmd === 'exit') {
|
||||
event.target.innerHTML = ''
|
||||
this.toggleShell()
|
||||
return
|
||||
}
|
||||
|
||||
this.canInput = false
|
||||
event.target.innerHTML = ''
|
||||
|
||||
let results = {
|
||||
text: `${cmd}\n\n`
|
||||
}
|
||||
|
||||
this.history.push(cmd)
|
||||
this.historyPos = this.history.length
|
||||
this.content.push(results)
|
||||
|
||||
commands(
|
||||
this.path,
|
||||
cmd,
|
||||
event => {
|
||||
results.text += `${event.data}\n`
|
||||
this.scroll()
|
||||
},
|
||||
() => {
|
||||
results.text = results.text.trimEnd()
|
||||
this.canInput = true
|
||||
this.$refs.input.focus()
|
||||
this.scroll()
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -1,89 +1,80 @@
|
||||
<template>
|
||||
<nav :class="{active}">
|
||||
<router-link class="action" to="/files/" :aria-label="$t('sidebar.myFiles')" :title="$t('sidebar.myFiles')">
|
||||
<i class="material-icons">folder</i>
|
||||
<span>{{ $t('sidebar.myFiles') }}</span>
|
||||
</router-link>
|
||||
|
||||
<div v-if="user.allowNew">
|
||||
<button @click="$store.commit('showHover', 'newDir')" class="action" :aria-label="$t('sidebar.newFolder')" :title="$t('sidebar.newFolder')">
|
||||
<i class="material-icons">create_new_folder</i>
|
||||
<span>{{ $t('sidebar.newFolder') }}</span>
|
||||
</button>
|
||||
|
||||
<button @click="$store.commit('showHover', 'newFile')" class="action" :aria-label="$t('sidebar.newFile')" :title="$t('sidebar.newFile')">
|
||||
<i class="material-icons">note_add</i>
|
||||
<span>{{ $t('sidebar.newFile') }}</span>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div v-if="staticGen.length > 0">
|
||||
<router-link to="/files/settings"
|
||||
:aria-label="$t('sidebar.siteSettings')"
|
||||
:title="$t('sidebar.siteSettings')"
|
||||
class="action">
|
||||
<i class="material-icons">settings</i>
|
||||
<span>{{ $t('sidebar.siteSettings') }}</span>
|
||||
<template v-if="isLogged">
|
||||
<router-link class="action" to="/files/" :aria-label="$t('sidebar.myFiles')" :title="$t('sidebar.myFiles')">
|
||||
<i class="material-icons">folder</i>
|
||||
<span>{{ $t('sidebar.myFiles') }}</span>
|
||||
</router-link>
|
||||
|
||||
<template v-if="staticGen === 'hugo'">
|
||||
<button class="action"
|
||||
:aria-label="$t('sidebar.hugoNew')"
|
||||
:title="$t('sidebar.hugoNew')"
|
||||
v-if="user.allowNew"
|
||||
@click="$store.commit('showHover', 'new-archetype')">
|
||||
<i class="material-icons">merge_type</i>
|
||||
<span>{{ $t('sidebar.hugoNew') }}</span>
|
||||
<div v-if="user.perm.create">
|
||||
<button @click="$store.commit('showHover', 'newDir')" class="action" :aria-label="$t('sidebar.newFolder')" :title="$t('sidebar.newFolder')">
|
||||
<i class="material-icons">create_new_folder</i>
|
||||
<span>{{ $t('sidebar.newFolder') }}</span>
|
||||
</button>
|
||||
</template>
|
||||
|
||||
<button class="action"
|
||||
:aria-label="$t('sidebar.preview')"
|
||||
:title="$t('sidebar.preview')"
|
||||
@click="preview">
|
||||
<i class="material-icons">remove_red_eye</i>
|
||||
<span>{{ $t('sidebar.preview') }}</span>
|
||||
</button>
|
||||
</div>
|
||||
<button @click="$store.commit('showHover', 'newFile')" class="action" :aria-label="$t('sidebar.newFile')" :title="$t('sidebar.newFile')">
|
||||
<i class="material-icons">note_add</i>
|
||||
<span>{{ $t('sidebar.newFile') }}</span>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div v-if="!$store.state.noAuth">
|
||||
<router-link class="action" to="/settings" :aria-label="$t('sidebar.settings')" :title="$t('sidebar.settings')">
|
||||
<i class="material-icons">settings_applications</i>
|
||||
<span>{{ $t('sidebar.settings') }}</span>
|
||||
<div>
|
||||
<router-link class="action" to="/settings" :aria-label="$t('sidebar.settings')" :title="$t('sidebar.settings')">
|
||||
<i class="material-icons">settings_applications</i>
|
||||
<span>{{ $t('sidebar.settings') }}</span>
|
||||
</router-link>
|
||||
|
||||
<button v-if="!noAuth" @click="logout" class="action" id="logout" :aria-label="$t('sidebar.logout')" :title="$t('sidebar.logout')">
|
||||
<i class="material-icons">exit_to_app</i>
|
||||
<span>{{ $t('sidebar.logout') }}</span>
|
||||
</button>
|
||||
</div>
|
||||
</template>
|
||||
<template v-else>
|
||||
<router-link class="action" to="/login" :aria-label="$t('sidebar.login')" :title="$t('sidebar.login')">
|
||||
<i class="material-icons">exit_to_app</i>
|
||||
<span>{{ $t('sidebar.login') }}</span>
|
||||
</router-link>
|
||||
|
||||
<button @click="logout" class="action" id="logout" :aria-label="$t('sidebar.logout')" :title="$t('sidebar.logout')">
|
||||
<i class="material-icons">exit_to_app</i>
|
||||
<span>{{ $t('sidebar.logout') }}</span>
|
||||
</button>
|
||||
</div>
|
||||
<router-link v-if="signup" class="action" to="/login" :aria-label="$t('sidebar.signup')" :title="$t('sidebar.signup')">
|
||||
<i class="material-icons">person_add</i>
|
||||
<span>{{ $t('sidebar.signup') }}</span>
|
||||
</router-link>
|
||||
</template>
|
||||
|
||||
<p class="credits">
|
||||
<span><a rel="noopener noreferrer" href="https://github.com/filebrowser/filebrowser">File Browser</a> v{{ version }}</span>
|
||||
<span>
|
||||
<span v-if="disableExternal">File Browser</span>
|
||||
<a v-else rel="noopener noreferrer" target="_blank" href="https://github.com/filebrowser/filebrowser">File Browser</a>
|
||||
<span> v{{ version }}</span>
|
||||
</span>
|
||||
<span><a @click="help">{{ $t('sidebar.help') }}</a></span>
|
||||
</p>
|
||||
</nav>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {mapState} from 'vuex'
|
||||
import auth from '@/utils/auth'
|
||||
import { mapState, mapGetters } from 'vuex'
|
||||
import * as auth from '@/utils/auth'
|
||||
import { version, signup, disableExternal, noAuth } from '@/utils/constants'
|
||||
|
||||
export default {
|
||||
name: 'sidebar',
|
||||
computed: {
|
||||
...mapState(['user', 'staticGen', 'version']),
|
||||
...mapState([ 'user' ]),
|
||||
...mapGetters([ 'isLogged' ]),
|
||||
active () {
|
||||
return this.$store.state.show === 'sidebar'
|
||||
}
|
||||
},
|
||||
signup: () => signup,
|
||||
version: () => version,
|
||||
disableExternal: () => disableExternal,
|
||||
noAuth: () => noAuth
|
||||
},
|
||||
methods: {
|
||||
help () {
|
||||
this.$store.commit('showHover', 'help')
|
||||
},
|
||||
preview () {
|
||||
window.open(this.$store.state.baseURL + '/preview/')
|
||||
},
|
||||
logout: auth.logout
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
export default {
|
||||
name: 'copy-button',
|
||||
methods: {
|
||||
show: function (event) {
|
||||
show: function () {
|
||||
this.$store.commit('showHover', 'copy')
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
export default {
|
||||
name: 'delete-button',
|
||||
methods: {
|
||||
show: function (event) {
|
||||
show: function () {
|
||||
this.$store.commit('showHover', 'delete')
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,30 +8,26 @@
|
||||
|
||||
<script>
|
||||
import {mapGetters, mapState} from 'vuex'
|
||||
import * as api from '@/utils/api'
|
||||
import { files as api } from '@/api'
|
||||
|
||||
export default {
|
||||
name: 'download-button',
|
||||
computed: {
|
||||
...mapState(['req', 'selected']),
|
||||
...mapGetters(['selectedCount'])
|
||||
...mapGetters(['isListing', 'selectedCount'])
|
||||
},
|
||||
methods: {
|
||||
download: function (event) {
|
||||
// If we are not on a listing, download the current file.
|
||||
if (this.req.kind !== 'listing') {
|
||||
download: function () {
|
||||
if (!this.isListing) {
|
||||
api.download(null, this.$route.path)
|
||||
return
|
||||
}
|
||||
|
||||
// If we are on a listing and there is one element selected,
|
||||
// download it.
|
||||
if (this.selectedCount === 1 && !this.req.items[this.selected[0]].isDir) {
|
||||
api.download(null, this.req.items[this.selected[0]].url)
|
||||
return
|
||||
}
|
||||
|
||||
// Otherwise show the prompt to choose the formt of the download.
|
||||
this.$store.commit('showHover', 'download')
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
export default {
|
||||
name: 'info-button',
|
||||
methods: {
|
||||
show: function (event) {
|
||||
show: function () {
|
||||
this.$store.commit('showHover', 'info')
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
export default {
|
||||
name: 'move-button',
|
||||
methods: {
|
||||
show: function (event) {
|
||||
show: function () {
|
||||
this.$store.commit('showHover', 'move')
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
export default {
|
||||
name: 'rename-button',
|
||||
methods: {
|
||||
show: function (event) {
|
||||
show: function () {
|
||||
this.$store.commit('showHover', 'rename')
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,21 +0,0 @@
|
||||
<template>
|
||||
<button @click="show"
|
||||
:aria-label="$t('buttons.schedule')"
|
||||
:title="$t('buttons.schedule')"
|
||||
id="schedule-button"
|
||||
class="action">
|
||||
<i class="material-icons">alarm</i>
|
||||
<span>{{ $t('buttons.schedule') }}</span>
|
||||
</button>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'schedule-button',
|
||||
methods: {
|
||||
show: function (event) {
|
||||
this.$store.commit('showHover', 'schedule')
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -9,7 +9,7 @@
|
||||
export default {
|
||||
name: 'share-button',
|
||||
methods: {
|
||||
show (event) {
|
||||
show () {
|
||||
this.$store.commit('showHover', 'share')
|
||||
}
|
||||
}
|
||||
|
||||
17
src/components/buttons/Shell.vue
Normal file
17
src/components/buttons/Shell.vue
Normal file
@@ -0,0 +1,17 @@
|
||||
<template>
|
||||
<button @click="show" :aria-label="$t('buttons.shell')" :title="$t('buttons.shell')" class="action">
|
||||
<i class="material-icons">code</i>
|
||||
<span>{{ $t('buttons.shell') }}</span>
|
||||
</button>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'shell-button',
|
||||
methods: {
|
||||
show: function () {
|
||||
this.$store.commit('toggleShell')
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
<script>
|
||||
import { mapState, mapMutations } from 'vuex'
|
||||
import { updateUser } from '@/utils/api'
|
||||
import { users as api } from '@/api'
|
||||
|
||||
export default {
|
||||
name: 'switch-button',
|
||||
@@ -19,17 +19,21 @@ export default {
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
...mapMutations(['updateUser']),
|
||||
change: function (event) {
|
||||
// If we are on mobile we should close the dropdown.
|
||||
this.$store.commit('closeHovers')
|
||||
...mapMutations([ 'updateUser', 'closeHovers' ]),
|
||||
change: async function () {
|
||||
this.closeHovers()
|
||||
|
||||
let user = {...this.user}
|
||||
user.viewMode = (this.icon === 'view_list') ? 'list' : 'mosaic'
|
||||
const data = {
|
||||
id: this.user.id,
|
||||
viewMode: (this.icon === 'view_list') ? 'list' : 'mosaic'
|
||||
}
|
||||
|
||||
updateUser(user, 'partial').then(() => {
|
||||
this.updateUser({ viewMode: user.viewMode })
|
||||
}).catch(this.$showError)
|
||||
try {
|
||||
await api.update(data, ['viewMode'])
|
||||
this.updateUser(data)
|
||||
} catch (e) {
|
||||
this.$showError(e)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
export default {
|
||||
name: 'upload-button',
|
||||
methods: {
|
||||
upload: function (event) {
|
||||
upload: function () {
|
||||
document.getElementById('upload-input').click()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,90 +1,51 @@
|
||||
<template>
|
||||
<form id="editor" :class="req.language">
|
||||
<div v-if="hasMetadata" id="metadata">
|
||||
<h2>{{ $t('files.metadata') }}</h2>
|
||||
</div>
|
||||
|
||||
<h2 v-if="hasMetadata">{{ $t('files.body') }}</h2>
|
||||
</form>
|
||||
<form id="editor"></form>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { mapState } from 'vuex'
|
||||
import CodeMirror from '@/utils/codemirror'
|
||||
import * as api from '@/utils/api'
|
||||
import { files as api } from '@/api'
|
||||
import buttons from '@/utils/buttons'
|
||||
|
||||
import ace from 'ace-builds/src-min-noconflict/ace.js'
|
||||
import modelist from 'ace-builds/src-min-noconflict/ext-modelist.js'
|
||||
import 'ace-builds/webpack-resolver'
|
||||
|
||||
export default {
|
||||
name: 'editor',
|
||||
computed: {
|
||||
...mapState(['req', 'schedule']),
|
||||
hasMetadata: function () {
|
||||
return (this.req.metadata !== undefined && this.req.metadata !== null)
|
||||
}
|
||||
...mapState(['req'])
|
||||
},
|
||||
data: function () {
|
||||
return {
|
||||
metadata: null,
|
||||
metalang: null,
|
||||
content: null
|
||||
content: null,
|
||||
editor: null
|
||||
}
|
||||
},
|
||||
created () {
|
||||
window.addEventListener('keydown', this.keyEvent)
|
||||
document.getElementById('save-button').addEventListener('click', this.save)
|
||||
|
||||
let publish = document.getElementById('publish-button')
|
||||
if (publish !== null) {
|
||||
publish.addEventListener('click', this.publish)
|
||||
}
|
||||
},
|
||||
beforeDestroy () {
|
||||
window.removeEventListener('keydown', this.keyEvent)
|
||||
document.getElementById('save-button').removeEventListener('click', this.save)
|
||||
|
||||
let publish = document.getElementById('publish-button')
|
||||
if (publish !== null) {
|
||||
publish.removeEventListener('click', this.publish)
|
||||
}
|
||||
},
|
||||
mounted: function () {
|
||||
if (this.req.content === undefined || this.req.content === null) {
|
||||
this.req.content = ''
|
||||
}
|
||||
|
||||
// Set up the main content editor.
|
||||
this.content = CodeMirror(document.getElementById('editor'), {
|
||||
this.editor = ace.edit('editor', {
|
||||
maxLines: Infinity,
|
||||
minLines: 20,
|
||||
value: this.req.content,
|
||||
lineNumbers: (this.req.language !== 'markdown'),
|
||||
viewportMargin: 500,
|
||||
autofocus: true,
|
||||
mode: this.req.language,
|
||||
theme: (this.req.language === 'markdown') ? 'markdown' : 'ttcn',
|
||||
lineWrapping: (this.req.language === 'markdown')
|
||||
showPrintMargin: false,
|
||||
readOnly: this.req.type === 'textImmutable',
|
||||
theme: 'ace/theme/chrome',
|
||||
mode: modelist.getModeForPath(this.req.name).mode
|
||||
})
|
||||
|
||||
CodeMirror.autoLoadMode(this.content, this.req.language)
|
||||
|
||||
// Prevent of going on if there is no metadata.
|
||||
if (!this.hasMetadata) {
|
||||
return
|
||||
}
|
||||
|
||||
this.parseMetadata()
|
||||
|
||||
// Set up metadata editor.
|
||||
this.metadata = CodeMirror(document.getElementById('metadata'), {
|
||||
value: this.req.metadata,
|
||||
viewportMargin: Infinity,
|
||||
lineWrapping: true,
|
||||
theme: 'markdown',
|
||||
mode: this.metalang
|
||||
})
|
||||
|
||||
CodeMirror.autoLoadMode(this.metadata, this.metalang)
|
||||
},
|
||||
methods: {
|
||||
// Saves the content when the user presses CTRL-S.
|
||||
keyEvent (event) {
|
||||
if (!event.ctrlKey && !event.metaKey) {
|
||||
return
|
||||
@@ -97,46 +58,17 @@ export default {
|
||||
event.preventDefault()
|
||||
this.save()
|
||||
},
|
||||
// Parses the metadata and gets the language in which
|
||||
// it is written.
|
||||
parseMetadata () {
|
||||
if (this.req.metadata.startsWith('{')) {
|
||||
this.metalang = 'json'
|
||||
}
|
||||
async save () {
|
||||
const button = 'save'
|
||||
buttons.loading('save')
|
||||
|
||||
if (this.req.metadata.startsWith('---')) {
|
||||
this.metalang = 'yaml'
|
||||
try {
|
||||
await api.put(this.$route.path, this.editor.getValue())
|
||||
buttons.success(button)
|
||||
} catch (e) {
|
||||
buttons.done(button)
|
||||
this.$showError(e)
|
||||
}
|
||||
|
||||
if (this.req.metadata.startsWith('+++')) {
|
||||
this.metalang = 'toml'
|
||||
}
|
||||
},
|
||||
// Publishes the file.
|
||||
publish (event) {
|
||||
this.save(event, true)
|
||||
},
|
||||
// Saves the file.
|
||||
save (event, regenerate = false) {
|
||||
let button = regenerate ? 'publish' : 'save'
|
||||
if (this.schedule !== '') button = 'schedule'
|
||||
let content = this.content.getValue()
|
||||
buttons.loading(button)
|
||||
|
||||
if (this.hasMetadata) {
|
||||
content = this.metadata.getValue() + '\n\n' + content
|
||||
}
|
||||
|
||||
api.put(this.$route.path, content, regenerate, this.schedule)
|
||||
.then(() => {
|
||||
buttons.success(button)
|
||||
this.$store.commit('setSchedule', '')
|
||||
})
|
||||
.catch(error => {
|
||||
buttons.done(button)
|
||||
this.$showError(error)
|
||||
this.$store.commit('setSchedule', '')
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -49,7 +49,6 @@
|
||||
<h2 v-if="req.numDirs > 0">{{ $t('files.folders') }}</h2>
|
||||
<div v-if="req.numDirs > 0">
|
||||
<item v-for="(item) in dirs"
|
||||
v-if="item.isDir"
|
||||
:key="base64(item.name)"
|
||||
v-bind:index="item.index"
|
||||
v-bind:name="item.name"
|
||||
@@ -64,7 +63,6 @@
|
||||
<h2 v-if="req.numFiles > 0">{{ $t('files.files') }}</h2>
|
||||
<div v-if="req.numFiles > 0">
|
||||
<item v-for="(item) in files"
|
||||
v-if="!item.isDir"
|
||||
:key="base64(item.name)"
|
||||
v-bind:index="item.index"
|
||||
v-bind:name="item.name"
|
||||
@@ -88,10 +86,10 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {mapState} from 'vuex'
|
||||
import { mapState, mapMutations } from 'vuex'
|
||||
import Item from './ListingItem'
|
||||
import css from '@/utils/css'
|
||||
import * as api from '@/utils/api'
|
||||
import { users, files as api } from '@/api'
|
||||
import buttons from '@/utils/buttons'
|
||||
|
||||
export default {
|
||||
@@ -105,24 +103,22 @@ export default {
|
||||
computed: {
|
||||
...mapState(['req', 'selected', 'user']),
|
||||
nameSorted () {
|
||||
return (this.req.sort === 'name')
|
||||
return (this.req.sorting.by === 'name')
|
||||
},
|
||||
sizeSorted () {
|
||||
return (this.req.sort === 'size')
|
||||
return (this.req.sorting.by === 'size')
|
||||
},
|
||||
modifiedSorted () {
|
||||
return (this.req.sort === 'modified')
|
||||
return (this.req.sorting.by === 'modified')
|
||||
},
|
||||
ascOrdered () {
|
||||
return (this.req.order === 'asc')
|
||||
return this.req.sorting.asc
|
||||
},
|
||||
items () {
|
||||
const dirs = []
|
||||
const files = []
|
||||
|
||||
this.req.items.forEach((item, index) => {
|
||||
item.index = index
|
||||
|
||||
this.req.items.forEach((item) => {
|
||||
if (item.isDir) {
|
||||
dirs.push(item)
|
||||
} else {
|
||||
@@ -184,6 +180,7 @@ export default {
|
||||
document.removeEventListener('drop', this.drop)
|
||||
},
|
||||
methods: {
|
||||
...mapMutations([ 'updateUser' ]),
|
||||
base64: function (name) {
|
||||
return window.btoa(unescape(encodeURIComponent(name)))
|
||||
},
|
||||
@@ -213,7 +210,10 @@ export default {
|
||||
event.preventDefault()
|
||||
},
|
||||
copyCut (event, key) {
|
||||
event.preventDefault()
|
||||
if (event.target.tagName.toLowerCase() === 'input') {
|
||||
return
|
||||
}
|
||||
|
||||
let items = []
|
||||
|
||||
for (let i of this.selected) {
|
||||
@@ -223,6 +223,10 @@ export default {
|
||||
})
|
||||
}
|
||||
|
||||
if (items.length == 0) {
|
||||
return
|
||||
}
|
||||
|
||||
this.$store.commit('updateClipboard', {
|
||||
key: key,
|
||||
items: items
|
||||
@@ -233,15 +237,21 @@ export default {
|
||||
return
|
||||
}
|
||||
|
||||
event.preventDefault()
|
||||
|
||||
let items = []
|
||||
|
||||
for (let item of this.$store.state.clipboard.items) {
|
||||
items.push({
|
||||
from: item.from,
|
||||
to: this.$route.path + item.name
|
||||
})
|
||||
const from = item.from.endsWith('/') ? item.from.slice(0, -1) : item.from
|
||||
const to = this.$route.path + item.name
|
||||
|
||||
if (from === to) {
|
||||
return
|
||||
}
|
||||
|
||||
items.push({ from, to })
|
||||
}
|
||||
|
||||
if (items.length === 0) {
|
||||
return
|
||||
}
|
||||
|
||||
if (this.$store.state.clipboard.key === 'x') {
|
||||
@@ -267,7 +277,7 @@ export default {
|
||||
this.show += 50
|
||||
}
|
||||
},
|
||||
dragEnter (event) {
|
||||
dragEnter () {
|
||||
// When the user starts dragging an item, put every
|
||||
// file on the listing with 50% opacity.
|
||||
let items = document.getElementsByClassName('item')
|
||||
@@ -276,7 +286,7 @@ export default {
|
||||
file.style.opacity = 0.5
|
||||
})
|
||||
},
|
||||
dragEnd (event) {
|
||||
dragEnd () {
|
||||
this.resetOpacity()
|
||||
},
|
||||
drop: function (event) {
|
||||
@@ -391,27 +401,29 @@ export default {
|
||||
|
||||
return false
|
||||
},
|
||||
sort (sort) {
|
||||
let order = 'desc'
|
||||
async sort (by) {
|
||||
let asc = false
|
||||
|
||||
if (sort === 'name') {
|
||||
if (by === 'name') {
|
||||
if (this.nameIcon === 'arrow_upward') {
|
||||
order = 'asc'
|
||||
asc = true
|
||||
}
|
||||
} else if (sort === 'size') {
|
||||
} else if (by === 'size') {
|
||||
if (this.sizeIcon === 'arrow_upward') {
|
||||
order = 'asc'
|
||||
asc = true
|
||||
}
|
||||
} else if (sort === 'modified') {
|
||||
} else if (by === 'modified') {
|
||||
if (this.modifiedIcon === 'arrow_upward') {
|
||||
order = 'asc'
|
||||
asc = true
|
||||
}
|
||||
}
|
||||
|
||||
let path = this.$store.state.baseURL
|
||||
if (path === '') path = '/'
|
||||
document.cookie = `sort=${sort}; max-age=31536000; path=${path}`
|
||||
document.cookie = `order=${order}; max-age=31536000; path=${path}`
|
||||
try {
|
||||
await users.update({ id: this.user.id, sorting: { by, asc } }, ['sorting'])
|
||||
} catch (e) {
|
||||
this.$showError(e)
|
||||
}
|
||||
|
||||
this.$store.commit('setReload', true)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
import { mapMutations, mapGetters, mapState } from 'vuex'
|
||||
import filesize from 'filesize'
|
||||
import moment from 'moment'
|
||||
import * as api from '@/utils/api'
|
||||
import { files as api } from '@/api'
|
||||
|
||||
export default {
|
||||
name: 'item',
|
||||
@@ -65,7 +65,7 @@ export default {
|
||||
humanTime: function () {
|
||||
return moment(this.modified).fromNow()
|
||||
},
|
||||
dragStart: function (event) {
|
||||
dragStart: function () {
|
||||
if (this.selectedCount === 0) {
|
||||
this.addSelected(this.index)
|
||||
return
|
||||
@@ -140,7 +140,7 @@ export default {
|
||||
if (!event.ctrlKey && !this.$store.state.multiple) this.resetSelected()
|
||||
this.addSelected(this.index)
|
||||
},
|
||||
touchstart (event) {
|
||||
touchstart () {
|
||||
setTimeout(() => {
|
||||
this.touches = 0
|
||||
}, 300)
|
||||
@@ -150,7 +150,7 @@ export default {
|
||||
this.open()
|
||||
}
|
||||
},
|
||||
open: function (event) {
|
||||
open: function () {
|
||||
this.$router.push({path: this.url})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,9 +5,9 @@
|
||||
<i class="material-icons">close</i>
|
||||
</button>
|
||||
|
||||
<rename-button v-if="allowEdit()"></rename-button>
|
||||
<delete-button v-if="allowEdit()"></delete-button>
|
||||
<download-button></download-button>
|
||||
<rename-button v-if="user.perm.rename"></rename-button>
|
||||
<delete-button v-if="user.perm.delete"></delete-button>
|
||||
<download-button v-if="user.perm.download"></download-button>
|
||||
<info-button></info-button>
|
||||
</div>
|
||||
|
||||
@@ -19,19 +19,23 @@
|
||||
</button>
|
||||
|
||||
<div class="preview">
|
||||
<img v-if="req.type == 'image'" :src="raw()">
|
||||
<audio v-else-if="req.type == 'audio'" :src="raw()" autoplay controls></audio>
|
||||
<video v-else-if="req.type == 'video'" :src="raw()" autoplay controls>
|
||||
<track v-for="(sub, index) in subtitles" :kind="sub.kind" :src="'/api/subtitle/' + sub.src" :label="sub.label" :default="index === 0">
|
||||
<img v-if="req.type == 'image'" :src="raw">
|
||||
<audio v-else-if="req.type == 'audio'" :src="raw" autoplay controls></audio>
|
||||
<video v-else-if="req.type == 'video'" :src="raw" autoplay controls>
|
||||
<track
|
||||
kind="captions"
|
||||
v-for="(sub, index) in subtitles"
|
||||
:key="index"
|
||||
:src="sub"
|
||||
:label="'Subtitle ' + index" :default="index === 0">
|
||||
Sorry, your browser doesn't support embedded videos,
|
||||
but don't worry, you can <a :href="download()">download it</a>
|
||||
but don't worry, you can <a :href="download">download it</a>
|
||||
and watch it with your favorite video player!
|
||||
</video>
|
||||
<object v-else-if="req.extension == '.pdf'" class="pdf" :data="raw()"></object>
|
||||
<a v-else-if="req.type == 'blob'" :href="download()">
|
||||
<object v-else-if="req.extension == '.pdf'" class="pdf" :data="raw"></object>
|
||||
<a v-else-if="req.type == 'blob'" :href="download">
|
||||
<h2 class="message">{{ $t('buttons.download') }} <i class="material-icons">file_download</i></h2>
|
||||
</a>
|
||||
<pre v-else >{{ req.content }}</pre>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
@@ -39,12 +43,20 @@
|
||||
<script>
|
||||
import { mapState } from 'vuex'
|
||||
import url from '@/utils/url'
|
||||
import * as api from '@/utils/api'
|
||||
import { baseURL } from '@/utils/constants'
|
||||
import { files as api } from '@/api'
|
||||
import InfoButton from '@/components/buttons/Info'
|
||||
import DeleteButton from '@/components/buttons/Delete'
|
||||
import RenameButton from '@/components/buttons/Rename'
|
||||
import DownloadButton from '@/components/buttons/Download'
|
||||
|
||||
const mediaTypes = [
|
||||
"image",
|
||||
"video",
|
||||
"audio",
|
||||
"blob"
|
||||
]
|
||||
|
||||
export default {
|
||||
name: 'preview',
|
||||
components: {
|
||||
@@ -62,44 +74,44 @@ export default {
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
...mapState(['req', 'oldReq']),
|
||||
...mapState(['req', 'user', 'oldReq', 'jwt']),
|
||||
hasPrevious () {
|
||||
return (this.previousLink !== '')
|
||||
},
|
||||
hasNext () {
|
||||
return (this.nextLink !== '')
|
||||
},
|
||||
download () {
|
||||
return `${baseURL}/api/raw${this.req.path}?auth=${this.jwt}`
|
||||
},
|
||||
raw () {
|
||||
return `${this.download}&inline=true`
|
||||
}
|
||||
},
|
||||
mounted () {
|
||||
async mounted () {
|
||||
window.addEventListener('keyup', this.key)
|
||||
api.fetch(url.removeLastDir(this.$route.path))
|
||||
.then(req => {
|
||||
this.listing = req
|
||||
this.updateLinks()
|
||||
})
|
||||
.catch(this.$showError)
|
||||
if (this.req.type === 'audio' || this.req.type === 'video') {
|
||||
api.subtitles(this.req.url.slice(6))
|
||||
.then(req => {
|
||||
this.subtitles = req
|
||||
})
|
||||
.catch(this.$showError)
|
||||
|
||||
if (this.req.subtitles) {
|
||||
this.subtitles = this.req.subtitles.map(sub => `${baseURL}/api/raw${sub}?auth=${this.jwt}&inline=true`)
|
||||
}
|
||||
|
||||
try {
|
||||
if (this.oldReq.items) {
|
||||
this.updateLinks(this.oldReq.items)
|
||||
} else {
|
||||
const path = url.removeLastDir(this.$route.path)
|
||||
const res = await api.fetch(path)
|
||||
this.updateLinks(res.items)
|
||||
}
|
||||
} catch (e) {
|
||||
this.$showError(e)
|
||||
}
|
||||
},
|
||||
beforeDestroy () {
|
||||
window.removeEventListener('keyup', this.key)
|
||||
},
|
||||
methods: {
|
||||
download () {
|
||||
let url = `${this.$store.state.baseURL}/api/download`
|
||||
url += this.req.url.slice(6)
|
||||
|
||||
return url
|
||||
},
|
||||
raw () {
|
||||
return `${this.download()}?&inline=true`
|
||||
},
|
||||
back (event) {
|
||||
back () {
|
||||
let uri = url.removeLastDir(this.$route.path) + '/'
|
||||
this.$router.push({ path: uri })
|
||||
},
|
||||
@@ -118,30 +130,28 @@ export default {
|
||||
if (this.hasPrevious) this.prev()
|
||||
}
|
||||
},
|
||||
updateLinks () {
|
||||
let pos = null
|
||||
|
||||
for (let i = 0; i < this.listing.items.length; i++) {
|
||||
if (this.listing.items[i].name === this.req.name) {
|
||||
pos = i
|
||||
break
|
||||
updateLinks (items) {
|
||||
for (let i = 0; i < items.length; i++) {
|
||||
if (items[i].name !== this.req.name) {
|
||||
continue
|
||||
}
|
||||
|
||||
for (let j = i - 1; j >= 0; j--) {
|
||||
if (mediaTypes.includes(items[j].type)) {
|
||||
this.previousLink = items[j].url
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
for (let j = i + 1; j < items.length; j++) {
|
||||
if (mediaTypes.includes(items[j].type)) {
|
||||
this.nextLink = items[j].url
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (pos === null) {
|
||||
return
|
||||
}
|
||||
|
||||
if (pos !== 0) {
|
||||
this.previousLink = this.listing.items[pos - 1].url
|
||||
}
|
||||
|
||||
if (pos !== this.listing.items.length - 1) {
|
||||
this.nextLink = this.listing.items[pos + 1].url
|
||||
}
|
||||
},
|
||||
allowEdit (event) {
|
||||
return this.$store.state.user.allowEdit
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,11 +10,11 @@
|
||||
</div>
|
||||
|
||||
<div class="card-action">
|
||||
<button class="cancel flat"
|
||||
<button class="button button--flat button--grey"
|
||||
@click="$store.commit('closeHovers')"
|
||||
:aria-label="$t('buttons.cancel')"
|
||||
:title="$t('buttons.cancel')">{{ $t('buttons.cancel') }}</button>
|
||||
<button class="flat"
|
||||
<button class="button button--flat"
|
||||
@click="copy"
|
||||
:disabled="$route.path === dest"
|
||||
:aria-label="$t('buttons.copy')"
|
||||
@@ -26,7 +26,7 @@
|
||||
<script>
|
||||
import { mapState } from 'vuex'
|
||||
import FileList from './FileList'
|
||||
import * as api from '@/utils/api'
|
||||
import { files as api } from '@/api'
|
||||
import buttons from '@/utils/buttons'
|
||||
|
||||
export default {
|
||||
@@ -40,7 +40,7 @@ export default {
|
||||
},
|
||||
computed: mapState(['req', 'selected']),
|
||||
methods: {
|
||||
copy: function (event) {
|
||||
copy: async function (event) {
|
||||
event.preventDefault()
|
||||
buttons.loading('copy')
|
||||
let items = []
|
||||
@@ -53,16 +53,14 @@ export default {
|
||||
})
|
||||
}
|
||||
|
||||
// Execute the promises.
|
||||
api.copy(items)
|
||||
.then(() => {
|
||||
buttons.success('copy')
|
||||
this.$router.push({ path: this.dest })
|
||||
})
|
||||
.catch(error => {
|
||||
buttons.done('copy')
|
||||
this.$showError(error)
|
||||
})
|
||||
try {
|
||||
await api.copy(items)
|
||||
buttons.success('copy')
|
||||
this.$router.push({ path: this.dest })
|
||||
} catch (e) {
|
||||
buttons.done('copy')
|
||||
this.$showError(e)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,11 +6,11 @@
|
||||
</div>
|
||||
<div class="card-action">
|
||||
<button @click="$store.commit('closeHovers')"
|
||||
class="flat cancel"
|
||||
class="button button--flat button--grey"
|
||||
:aria-label="$t('buttons.cancel')"
|
||||
:title="$t('buttons.cancel')">{{ $t('buttons.cancel') }}</button>
|
||||
<button @click="submit"
|
||||
class="flat"
|
||||
class="button button--flat button--red"
|
||||
:aria-label="$t('buttons.delete')"
|
||||
:title="$t('buttons.delete')">{{ $t('buttons.delete') }}</button>
|
||||
</div>
|
||||
@@ -19,61 +19,47 @@
|
||||
|
||||
<script>
|
||||
import {mapGetters, mapMutations, mapState} from 'vuex'
|
||||
import { remove } from '@/utils/api'
|
||||
import { files as api } from '@/api'
|
||||
import url from '@/utils/url'
|
||||
import buttons from '@/utils/buttons'
|
||||
|
||||
export default {
|
||||
name: 'delete',
|
||||
computed: {
|
||||
...mapGetters(['selectedCount']),
|
||||
...mapGetters(['isListing', 'selectedCount']),
|
||||
...mapState(['req', 'selected'])
|
||||
},
|
||||
methods: {
|
||||
...mapMutations(['closeHovers']),
|
||||
submit: function (event) {
|
||||
submit: async function () {
|
||||
this.closeHovers()
|
||||
buttons.loading('delete')
|
||||
|
||||
// If we are not on a listing, delete the current
|
||||
// opened file.
|
||||
if (this.req.kind !== 'listing') {
|
||||
remove(this.$route.path)
|
||||
.then(() => {
|
||||
buttons.success('delete')
|
||||
this.$router.push({ path: url.removeLastDir(this.$route.path) + '/' })
|
||||
})
|
||||
.catch(error => {
|
||||
buttons.done('delete')
|
||||
this.$showError(error)
|
||||
})
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
if (this.selectedCount === 0) {
|
||||
// This shouldn't happen...
|
||||
return
|
||||
}
|
||||
|
||||
// Create the promises array and fill it with
|
||||
// the delete request for every selected file.
|
||||
let promises = []
|
||||
|
||||
for (let index of this.selected) {
|
||||
promises.push(remove(this.req.items[index].url))
|
||||
}
|
||||
|
||||
Promise.all(promises)
|
||||
.then(() => {
|
||||
try {
|
||||
if (!this.isListing) {
|
||||
await api.remove(this.$route.path)
|
||||
buttons.success('delete')
|
||||
this.$store.commit('setReload', true)
|
||||
})
|
||||
.catch(error => {
|
||||
buttons.done('delete')
|
||||
this.$store.commit('setReload', true)
|
||||
this.$showError(error)
|
||||
})
|
||||
this.$router.push({ path: url.removeLastDir(this.$route.path) + '/' })
|
||||
return
|
||||
}
|
||||
|
||||
if (this.selectedCount === 0) {
|
||||
return
|
||||
}
|
||||
|
||||
let promises = []
|
||||
for (let index of this.selected) {
|
||||
promises.push(api.remove(this.req.items[index].url))
|
||||
}
|
||||
|
||||
await Promise.all(promises)
|
||||
buttons.success('delete')
|
||||
this.$store.commit('setReload', true)
|
||||
} catch (e) {
|
||||
buttons.done('delete')
|
||||
this.$showError(e)
|
||||
if (this.isListing) this.$store.commit('setReload', true)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,18 +7,20 @@
|
||||
<div class="card-content">
|
||||
<p>{{ $t('prompts.downloadMessage') }}</p>
|
||||
|
||||
<button class="block cancel" @click="download('zip')" v-focus>zip</button>
|
||||
<button class="block cancel" @click="download('tar')" v-focus>tar</button>
|
||||
<button class="block cancel" @click="download('targz')" v-focus>tar.gz</button>
|
||||
<button class="block cancel" @click="download('tarbz2')" v-focus>tar.bz2</button>
|
||||
<button class="block cancel" @click="download('tarxz')" v-focus>tar.xz</button>
|
||||
<button class="button button--block" @click="download('zip')" v-focus>zip</button>
|
||||
<button class="button button--block" @click="download('tar')" v-focus>tar</button>
|
||||
<button class="button button--block" @click="download('targz')" v-focus>tar.gz</button>
|
||||
<button class="button button--block" @click="download('tarbz2')" v-focus>tar.bz2</button>
|
||||
<button class="button button--block" @click="download('tarxz')" v-focus>tar.xz</button>
|
||||
<button class="button button--block" @click="download('tarlz4')" v-focus>tar.lz4</button>
|
||||
<button class="button button--block" @click="download('tarsz')" v-focus>tar.sz</button>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {mapGetters, mapState} from 'vuex'
|
||||
import * as api from '@/utils/api'
|
||||
import { files as api } from '@/api'
|
||||
|
||||
export default {
|
||||
name: 'download',
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
<script>
|
||||
import { mapState } from 'vuex'
|
||||
import url from '@/utils/url'
|
||||
import * as api from '@/utils/api'
|
||||
import { files } from '@/api'
|
||||
|
||||
export default {
|
||||
name: 'file-list',
|
||||
@@ -35,7 +35,7 @@ export default {
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
...mapState(['req']),
|
||||
...mapState([ 'req' ]),
|
||||
nav () {
|
||||
return decodeURIComponent(this.current)
|
||||
}
|
||||
@@ -51,7 +51,7 @@ export default {
|
||||
|
||||
// Otherwise, we must be on a preview or editor
|
||||
// so we fetch the data from the previous directory.
|
||||
api.fetch(url.removeLastDir(this.$route.path))
|
||||
files.fetch(url.removeLastDir(this.$route.path))
|
||||
.then(this.fillOptions)
|
||||
.catch(this.$showError)
|
||||
},
|
||||
@@ -94,7 +94,7 @@ export default {
|
||||
// content.
|
||||
let uri = event.currentTarget.dataset.url
|
||||
|
||||
api.fetch(uri)
|
||||
files.fetch(uri)
|
||||
.then(this.fillOptions)
|
||||
.catch(this.$showError)
|
||||
},
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
<div class="card-action">
|
||||
<button type="submit"
|
||||
@click="$store.commit('closeHovers')"
|
||||
class="flat"
|
||||
class="button button--flat"
|
||||
:aria-label="$t('buttons.ok')"
|
||||
:title="$t('buttons.ok')">{{ $t('buttons.ok') }}</button>
|
||||
</div>
|
||||
@@ -29,6 +29,6 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {name: 'help'}
|
||||
export default { name: 'help' }
|
||||
</script>
|
||||
|
||||
|
||||
@@ -7,27 +7,27 @@
|
||||
<div class="card-content">
|
||||
<p v-if="selected.length > 1">{{ $t('prompts.filesSelected', { count: selected.length }) }}</p>
|
||||
|
||||
<p v-if="selected.length < 2"><strong>{{ $t('prompts.displayName') }}</strong> {{ name() }}</p>
|
||||
<p><strong>{{ $t('prompts.size') }}:</strong> <span id="content_length"></span>{{ humanSize() }}</p>
|
||||
<p v-if="selected.length < 2"><strong>{{ $t('prompts.lastModified') }}:</strong> {{ humanTime() }}</p>
|
||||
<p v-if="selected.length < 2"><strong>{{ $t('prompts.displayName') }}</strong> {{ name }}</p>
|
||||
<p><strong>{{ $t('prompts.size') }}:</strong> <span id="content_length"></span> {{ humanSize }}</p>
|
||||
<p v-if="selected.length < 2"><strong>{{ $t('prompts.lastModified') }}:</strong> {{ humanTime }}</p>
|
||||
|
||||
<template v-if="dir() && selected.length === 0">
|
||||
<template v-if="dir && selected.length === 0">
|
||||
<p><strong>{{ $t('prompts.numberFiles') }}:</strong> {{ req.numFiles }}</p>
|
||||
<p><strong>{{ $t('prompts.numberDirs') }}:</strong> {{ req.numDirs }}</p>
|
||||
</template>
|
||||
|
||||
<template v-if="!dir()">
|
||||
<p><strong>MD5:</strong> <code><a @click="checksum($event, 'md5')">{{ $t('prompts.show') }}</a></code></p>
|
||||
<p><strong>SHA1:</strong> <code><a @click="checksum($event, 'sha1')">{{ $t('prompts.show') }}</a></code></p>
|
||||
<p><strong>SHA256:</strong> <code><a @click="checksum($event, 'sha256')">{{ $t('prompts.show') }}</a></code></p>
|
||||
<p><strong>SHA512:</strong> <code><a @click="checksum($event, 'sha512')">{{ $t('prompts.show') }}</a></code></p>
|
||||
<template v-if="!dir">
|
||||
<p><strong>MD5: </strong><code><a @click="checksum($event, 'md5')">{{ $t('prompts.show') }}</a></code></p>
|
||||
<p><strong>SHA1: </strong><code><a @click="checksum($event, 'sha1')">{{ $t('prompts.show') }}</a></code></p>
|
||||
<p><strong>SHA256: </strong><code><a @click="checksum($event, 'sha256')">{{ $t('prompts.show') }}</a></code></p>
|
||||
<p><strong>SHA512: </strong><code><a @click="checksum($event, 'sha512')">{{ $t('prompts.show') }}</a></code></p>
|
||||
</template>
|
||||
</div>
|
||||
|
||||
<div class="card-action">
|
||||
<button type="submit"
|
||||
@click="$store.commit('closeHovers')"
|
||||
class="flat"
|
||||
class="button button--flat"
|
||||
:aria-label="$t('buttons.ok')"
|
||||
:title="$t('buttons.ok')">{{ $t('buttons.ok') }}</button>
|
||||
</div>
|
||||
@@ -38,71 +38,44 @@
|
||||
import {mapState, mapGetters} from 'vuex'
|
||||
import filesize from 'filesize'
|
||||
import moment from 'moment'
|
||||
import * as api from '@/utils/api'
|
||||
import { files as api } from '@/api'
|
||||
|
||||
export default {
|
||||
name: 'info',
|
||||
computed: {
|
||||
...mapState(['req', 'selected']),
|
||||
...mapGetters(['selectedCount'])
|
||||
},
|
||||
methods: {
|
||||
...mapGetters(['selectedCount', 'isListing']),
|
||||
humanSize: function () {
|
||||
// If there are no files selected or this is not a listing
|
||||
// show the human file size of the current request.
|
||||
if (this.selectedCount === 0 || this.req.kind !== 'listing') {
|
||||
if (this.selectedCount === 0 || !this.isListing) {
|
||||
return filesize(this.req.size)
|
||||
}
|
||||
|
||||
// Otherwise, sum the sizes of each selected file and returns
|
||||
// its human form.
|
||||
var sum = 0
|
||||
let sum = 0
|
||||
|
||||
for (let i = 0; i < this.selectedCount; i++) {
|
||||
sum += this.req.items[this.selected[i]].size
|
||||
for (let selected of this.selected) {
|
||||
sum += this.req.items[selected].size
|
||||
}
|
||||
|
||||
return filesize(sum)
|
||||
},
|
||||
humanTime: function () {
|
||||
// If there are no selected files, return the current request
|
||||
// modified time.
|
||||
if (this.selectedCount === 0) {
|
||||
return moment(this.req.modified).fromNow()
|
||||
}
|
||||
|
||||
// Otherwise return the modified time of the first item
|
||||
// that is selected since this should not appear when
|
||||
// there is more than one file selected.
|
||||
return moment(this.req.items[this.selected[0]]).fromNow()
|
||||
},
|
||||
name: function () {
|
||||
// Return the name of the current opened file if there
|
||||
// are no selected files.
|
||||
if (this.selectedCount === 0) {
|
||||
return this.req.name
|
||||
}
|
||||
|
||||
// Otherwise, just return the name of the selected file.
|
||||
// This field won't show when there is more than one
|
||||
// file selected.
|
||||
return this.req.items[this.selected[0]].name
|
||||
return this.selectedCount === 0 ? this.req.name : this.req.items[this.selected[0]].name
|
||||
},
|
||||
dir: function () {
|
||||
if (this.selectedCount > 1) {
|
||||
// Don't show when multiple selected.
|
||||
return true
|
||||
}
|
||||
|
||||
if (this.selectedCount === 0) {
|
||||
return this.req.isDir
|
||||
}
|
||||
|
||||
return this.req.items[this.selected[0]].isDir
|
||||
},
|
||||
checksum: function (event, hash) {
|
||||
// Gets the checksum of the current selected or
|
||||
// opened file. Doesn't work for directories.
|
||||
return this.selectedCount > 1 || (this.selectedCount === 0
|
||||
? this.req.isDir
|
||||
: this.req.items[this.selected[0]].isDir)
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
checksum: async function (event, algo) {
|
||||
event.preventDefault()
|
||||
|
||||
let link
|
||||
@@ -113,9 +86,12 @@ export default {
|
||||
link = this.$route.path
|
||||
}
|
||||
|
||||
api.checksum(link, hash)
|
||||
.then((hash) => { event.target.innerHTML = hash })
|
||||
.catch(this.$showError)
|
||||
try {
|
||||
const hash = await api.checksum(link, algo)
|
||||
event.target.innerHTML = hash
|
||||
} catch (e) {
|
||||
this.$showError(e)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,11 +9,11 @@
|
||||
</div>
|
||||
|
||||
<div class="card-action">
|
||||
<button class="flat cancel"
|
||||
<button class="button button--flat button--grey"
|
||||
@click="$store.commit('closeHovers')"
|
||||
:aria-label="$t('buttons.cancel')"
|
||||
:title="$t('buttons.cancel')">{{ $t('buttons.cancel') }}</button>
|
||||
<button class="flat"
|
||||
<button class="button button--flat"
|
||||
@click="move"
|
||||
:disabled="$route.path === dest"
|
||||
:aria-label="$t('buttons.move')"
|
||||
@@ -25,7 +25,7 @@
|
||||
<script>
|
||||
import { mapState } from 'vuex'
|
||||
import FileList from './FileList'
|
||||
import * as api from '@/utils/api'
|
||||
import { files as api } from '@/api'
|
||||
import buttons from '@/utils/buttons'
|
||||
|
||||
export default {
|
||||
@@ -39,12 +39,11 @@ export default {
|
||||
},
|
||||
computed: mapState(['req', 'selected']),
|
||||
methods: {
|
||||
move: function (event) {
|
||||
move: async function (event) {
|
||||
event.preventDefault()
|
||||
buttons.loading('move')
|
||||
let items = []
|
||||
|
||||
// Create a new promise for each file.
|
||||
for (let item of this.selected) {
|
||||
items.push({
|
||||
from: this.req.items[item].url,
|
||||
@@ -52,16 +51,14 @@ export default {
|
||||
})
|
||||
}
|
||||
|
||||
// Execute the promises.
|
||||
api.move(items)
|
||||
.then(() => {
|
||||
buttons.success('move')
|
||||
this.$router.push({ path: this.dest })
|
||||
})
|
||||
.catch(error => {
|
||||
buttons.done('move')
|
||||
this.$showError(error)
|
||||
})
|
||||
try {
|
||||
api.move(items)
|
||||
buttons.success('move')
|
||||
this.$router.push({ path: this.dest })
|
||||
} catch (e) {
|
||||
buttons.done('move')
|
||||
this.$showError(e)
|
||||
}
|
||||
|
||||
event.preventDefault()
|
||||
}
|
||||
|
||||
@@ -1,76 +0,0 @@
|
||||
<template>
|
||||
<div class="card floating">
|
||||
<div class="card-title">
|
||||
<h2>{{ $t('prompts.newFile') }}</h2>
|
||||
</div>
|
||||
|
||||
<div class="card-content">
|
||||
<p>{{ $t('prompts.newArchetype') }}</p>
|
||||
<input v-focus type="text" @keyup.enter="submit" v-model.trim="name">
|
||||
<input type="text" @keyup.enter="submit" v-model.trim="archetype">
|
||||
</div>
|
||||
|
||||
<div class="card-action">
|
||||
<button class="flat cancel"
|
||||
@click="$store.commit('closeHovers')"
|
||||
:aria-label="$t('buttons.cancel')"
|
||||
:title="$t('buttons.cancel')">{{ $t('buttons.cancel') }}</button>
|
||||
<button class="flat"
|
||||
@click="submit"
|
||||
:aria-label="$t('buttons.create')"
|
||||
:title="$t('buttons.create')">{{ $t('buttons.create') }}</button>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { removePrefix } from '@/utils/api'
|
||||
|
||||
export default {
|
||||
name: 'new-archetype',
|
||||
data: function () {
|
||||
return {
|
||||
name: '',
|
||||
archetype: 'default'
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
submit: function (event) {
|
||||
event.preventDefault()
|
||||
this.$store.commit('closeHovers')
|
||||
|
||||
this.new('/' + this.name, this.archetype)
|
||||
.then((url) => {
|
||||
this.$router.push({ path: url })
|
||||
})
|
||||
.catch(this.$showError)
|
||||
},
|
||||
new (url, type) {
|
||||
url = removePrefix(url)
|
||||
|
||||
if (!url.endsWith('.md') && !url.endsWith('.markdown')) {
|
||||
url += '.markdown'
|
||||
}
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
let request = new window.XMLHttpRequest()
|
||||
request.open('POST', `${this.$store.state.baseURL}/api/resource${url}`, true)
|
||||
if (!this.$store.state.noAuth) request.setRequestHeader('Authorization', `Bearer ${this.$store.state.jwt}`)
|
||||
request.setRequestHeader('Archetype', encodeURIComponent(type))
|
||||
|
||||
request.onload = () => {
|
||||
if (request.status === 200) {
|
||||
resolve(request.getResponseHeader('Location'))
|
||||
} else {
|
||||
reject(request.responseText)
|
||||
}
|
||||
}
|
||||
|
||||
request.onerror = (error) => reject(error)
|
||||
request.send()
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
@@ -6,55 +6,66 @@
|
||||
|
||||
<div class="card-content">
|
||||
<p>{{ $t('prompts.newDirMessage') }}</p>
|
||||
<input type="text" @keyup.enter="submit" v-model.trim="name" v-focus >
|
||||
<input class="input input--block" type="text" @keyup.enter="submit" v-model.trim="name" v-focus>
|
||||
</div>
|
||||
|
||||
<div class="card-action">
|
||||
<button class="cancel flat"
|
||||
<button
|
||||
class="button button--flat button--grey"
|
||||
@click="$store.commit('closeHovers')"
|
||||
:aria-label="$t('buttons.cancel')"
|
||||
:title="$t('buttons.cancel')">{{ $t('buttons.cancel') }}</button>
|
||||
<button class="flat"
|
||||
: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>
|
||||
@click="submit"
|
||||
>{{ $t('buttons.create') }}</button>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { mapGetters } from 'vuex'
|
||||
import { files as api } from '@/api'
|
||||
import url from '@/utils/url'
|
||||
import * as api from '@/utils/api'
|
||||
|
||||
export default {
|
||||
name: 'new-dir',
|
||||
data: function () {
|
||||
data: function() {
|
||||
return {
|
||||
name: ''
|
||||
}
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
...mapGetters([ 'isFiles', 'isListing' ])
|
||||
},
|
||||
methods: {
|
||||
submit: function (event) {
|
||||
submit: async function(event) {
|
||||
event.preventDefault()
|
||||
if (this.new === '') return
|
||||
|
||||
// Build the path of the new directory.
|
||||
let uri = this.$route.path
|
||||
if (this.$store.state.req.kind !== 'listing') {
|
||||
let uri = this.isFiles ? this.$route.path + '/' : '/'
|
||||
|
||||
if (!this.isListing) {
|
||||
uri = url.removeLastDir(uri) + '/'
|
||||
}
|
||||
|
||||
uri += this.name + '/'
|
||||
uri = uri.replace('//', '/')
|
||||
|
||||
api.post(uri)
|
||||
.then(() => { this.$router.push({ path: uri }) })
|
||||
.catch(this.$showError)
|
||||
try {
|
||||
await api.post(uri)
|
||||
this.$router.push({ path: uri })
|
||||
} catch (e) {
|
||||
this.$showError(e)
|
||||
}
|
||||
|
||||
// Close the prompt
|
||||
this.$store.commit('closeHovers')
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
|
||||
@@ -6,56 +6,66 @@
|
||||
|
||||
<div class="card-content">
|
||||
<p>{{ $t('prompts.newFileMessage') }}</p>
|
||||
<input v-focus type="text" @keyup.enter="submit" v-model.trim="name">
|
||||
<input class="input input--block" v-focus type="text" @keyup.enter="submit" v-model.trim="name">
|
||||
</div>
|
||||
|
||||
<div class="card-action">
|
||||
<button class="cancel flat"
|
||||
<button
|
||||
class="button button--flat button--grey"
|
||||
@click="$store.commit('closeHovers')"
|
||||
:aria-label="$t('buttons.cancel')"
|
||||
:title="$t('buttons.cancel')">{{ $t('buttons.cancel') }}</button>
|
||||
<button class="flat"
|
||||
: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>
|
||||
:title="$t('buttons.create')"
|
||||
>{{ $t('buttons.create') }}</button>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { mapGetters } from 'vuex'
|
||||
import { files as api } from '@/api'
|
||||
import url from '@/utils/url'
|
||||
import * as api from '@/utils/api'
|
||||
|
||||
export default {
|
||||
name: 'new-file',
|
||||
data: function () {
|
||||
data: function() {
|
||||
return {
|
||||
name: ''
|
||||
}
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
...mapGetters([ 'isFiles', 'isListing' ])
|
||||
},
|
||||
methods: {
|
||||
submit: function (event) {
|
||||
submit: async function(event) {
|
||||
event.preventDefault()
|
||||
if (this.new === '') return
|
||||
|
||||
// Build the path of the new file.
|
||||
let uri = this.$route.path
|
||||
if (this.$store.state.req.kind !== 'listing') {
|
||||
// Build the path of the new directory.
|
||||
let uri = this.isFiles ? this.$route.path + '/' : '/'
|
||||
|
||||
if (!this.isListing) {
|
||||
uri = url.removeLastDir(uri) + '/'
|
||||
}
|
||||
|
||||
uri += this.name
|
||||
uri = uri.replace('//', '/')
|
||||
|
||||
// Create the new file.
|
||||
api.post(uri)
|
||||
.then(() => { this.$router.push({ path: uri }) })
|
||||
.catch(this.$showError)
|
||||
try {
|
||||
await api.post(uri)
|
||||
this.$router.push({ path: uri })
|
||||
} catch (e) {
|
||||
this.$showError(e)
|
||||
}
|
||||
|
||||
// Close the prompt.
|
||||
this.$store.commit('closeHovers')
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
|
||||
@@ -10,8 +10,6 @@
|
||||
<move v-else-if="showMove"></move>
|
||||
<copy v-else-if="showCopy"></copy>
|
||||
<replace v-else-if="showReplace"></replace>
|
||||
<schedule v-else-if="show === 'schedule'"></schedule>
|
||||
<new-archetype v-else-if="show === 'new-archetype'"></new-archetype>
|
||||
<share v-else-if="show === 'share'"></share>
|
||||
<div v-show="showOverlay" @click="resetPrompts" class="overlay"></div>
|
||||
</div>
|
||||
@@ -27,21 +25,16 @@ import Move from './Move'
|
||||
import Copy from './Copy'
|
||||
import NewFile from './NewFile'
|
||||
import NewDir from './NewDir'
|
||||
import NewArchetype from './NewArchetype'
|
||||
import Replace from './Replace'
|
||||
import Schedule from './Schedule'
|
||||
import Share from './Share'
|
||||
import { mapState } from 'vuex'
|
||||
import buttons from '@/utils/buttons'
|
||||
import * as api from '@/utils/api'
|
||||
|
||||
export default {
|
||||
name: 'prompts',
|
||||
components: {
|
||||
Info,
|
||||
Delete,
|
||||
NewArchetype,
|
||||
Schedule,
|
||||
Rename,
|
||||
Download,
|
||||
Move,
|
||||
@@ -55,7 +48,6 @@ export default {
|
||||
data: function () {
|
||||
return {
|
||||
pluginData: {
|
||||
api,
|
||||
buttons,
|
||||
'store': this.$store,
|
||||
'router': this.$router
|
||||
|
||||
@@ -6,16 +6,16 @@
|
||||
|
||||
<div class="card-content">
|
||||
<p>{{ $t('prompts.renameMessage') }} <code>{{ oldName() }}</code>:</p>
|
||||
<input v-focus type="text" @keyup.enter="submit" v-model.trim="name">
|
||||
<input class="input input--block" v-focus type="text" @keyup.enter="submit" v-model.trim="name">
|
||||
</div>
|
||||
|
||||
<div class="card-action">
|
||||
<button class="cancel flat"
|
||||
<button class="button button--flat button--grey"
|
||||
@click="$store.commit('closeHovers')"
|
||||
:aria-label="$t('buttons.cancel')"
|
||||
:title="$t('buttons.cancel')">{{ $t('buttons.cancel') }}</button>
|
||||
<button @click="submit"
|
||||
class="flat"
|
||||
class="button button--flat"
|
||||
type="submit"
|
||||
:aria-label="$t('buttons.rename')"
|
||||
:title="$t('buttons.rename')">{{ $t('buttons.rename') }}</button>
|
||||
@@ -24,9 +24,9 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { mapState } from 'vuex'
|
||||
import { mapState, mapGetters } from 'vuex'
|
||||
import url from '@/utils/url'
|
||||
import * as api from '@/utils/api'
|
||||
import { files as api } from '@/api'
|
||||
|
||||
export default {
|
||||
name: 'rename',
|
||||
@@ -38,14 +38,16 @@ export default {
|
||||
created () {
|
||||
this.name = this.oldName()
|
||||
},
|
||||
computed: mapState(['req', 'selected', 'selectedCount']),
|
||||
computed: {
|
||||
...mapState(['req', 'selected', 'selectedCount']),
|
||||
...mapGetters(['isListing'])
|
||||
},
|
||||
methods: {
|
||||
cancel: function (event) {
|
||||
cancel: function () {
|
||||
this.$store.commit('closeHovers')
|
||||
},
|
||||
oldName: function () {
|
||||
// Get the current name of the file we are editing.
|
||||
if (this.req.kind !== 'listing') {
|
||||
if (!this.isListing) {
|
||||
return this.req.name
|
||||
}
|
||||
|
||||
@@ -56,11 +58,11 @@ export default {
|
||||
|
||||
return this.req.items[this.selected[0]].name
|
||||
},
|
||||
submit: function (event) {
|
||||
submit: async function () {
|
||||
let oldLink = ''
|
||||
let newLink = ''
|
||||
|
||||
if (this.req.kind !== 'listing') {
|
||||
if (!this.isListing) {
|
||||
oldLink = this.req.url
|
||||
} else {
|
||||
oldLink = this.req.items[this.selected[0]].url
|
||||
@@ -69,16 +71,17 @@ export default {
|
||||
this.name = encodeURIComponent(this.name)
|
||||
newLink = url.removeLastDir(oldLink) + '/' + this.name
|
||||
|
||||
api.move([{ from: oldLink, to: newLink }])
|
||||
.then(() => {
|
||||
if (this.req.kind !== 'listing') {
|
||||
this.$router.push({ path: newLink })
|
||||
return
|
||||
}
|
||||
this.$store.commit('setReload', true)
|
||||
}).catch(error => {
|
||||
this.$showError(error)
|
||||
})
|
||||
try {
|
||||
await api.move([{ from: oldLink, to: newLink }])
|
||||
if (!this.isListing) {
|
||||
this.$router.push({ path: newLink })
|
||||
return
|
||||
}
|
||||
|
||||
this.$store.commit('setReload', true)
|
||||
} catch (e) {
|
||||
this.$showError(e)
|
||||
}
|
||||
|
||||
this.$store.commit('closeHovers')
|
||||
}
|
||||
|
||||
@@ -9,11 +9,11 @@
|
||||
</div>
|
||||
|
||||
<div class="card-action">
|
||||
<button class="flat cancel"
|
||||
<button class="button button--flat button--grey"
|
||||
@click="$store.commit('closeHovers')"
|
||||
:aria-label="$t('buttons.cancel')"
|
||||
:title="$t('buttons.cancel')">{{ $t('buttons.cancel') }}</button>
|
||||
<button class="flat"
|
||||
<button class="button button--flat button--red"
|
||||
@click="showConfirm"
|
||||
:aria-label="$t('buttons.replace')"
|
||||
:title="$t('buttons.replace')">{{ $t('buttons.replace') }}</button>
|
||||
|
||||
@@ -1,47 +0,0 @@
|
||||
<template>
|
||||
<div class="card floating">
|
||||
<div class="card-title">
|
||||
<h2>{{ $t('prompts.schedule') }}</h2>
|
||||
</div>
|
||||
|
||||
<div class="card-content">
|
||||
<p>{{ $t('prompts.scheduleMessage') }}</p>
|
||||
<input v-focus type="datetime-local" v-model="date">
|
||||
</div>
|
||||
|
||||
<div class="card-action">
|
||||
<button class="cancel flat"
|
||||
@click="close"
|
||||
:aria-label="$t('buttons.cancel')"
|
||||
:title="$t('buttons.cancel')">{{ $t('buttons.cancel') }}</button>
|
||||
<button class="falt"
|
||||
@click="submit"
|
||||
:aria-label="$t('buttons.schedule')"
|
||||
:title="$t('buttons.schedule')">{{ $t('buttons.schedule') }}</button>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'schedule',
|
||||
data: function () {
|
||||
return {
|
||||
date: ''
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
close () {
|
||||
this.$store.commit('closeHovers')
|
||||
},
|
||||
submit: function (event) {
|
||||
event.preventDefault()
|
||||
if (this.date === '') return
|
||||
this.close()
|
||||
this.$store.commit('setSchedule', this.date)
|
||||
document.getElementById('save-button').click()
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
<li v-for="link in links" :key="link.hash">
|
||||
<a :href="buildLink(link.hash)" target="_blank">
|
||||
<template v-if="link.expires">{{ humanTime(link.expireDate) }}</template>
|
||||
<template v-if="link.expire !== 0">{{ humanTime(link.expire) }}</template>
|
||||
<template v-else>{{ $t('permanent') }}</template>
|
||||
</a>
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
</div>
|
||||
|
||||
<div class="card-action">
|
||||
<button class="flat"
|
||||
<button class="button button--flat"
|
||||
@click="$store.commit('closeHovers')"
|
||||
:aria-label="$t('buttons.close')"
|
||||
:title="$t('buttons.close')">{{ $t('buttons.close') }}</button>
|
||||
@@ -58,8 +58,9 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { mapState } from 'vuex'
|
||||
import { getShare, deleteShare, share } from '@/utils/api'
|
||||
import { mapState, mapGetters } from 'vuex'
|
||||
import { share as api } from '@/api'
|
||||
import { baseURL } from '@/utils/constants'
|
||||
import moment from 'moment'
|
||||
import Clipboard from 'clipboard'
|
||||
|
||||
@@ -75,10 +76,10 @@ export default {
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
...mapState([ 'baseURL', 'req', 'selected', 'selectedCount' ]),
|
||||
...mapState([ 'req', 'selected', 'selectedCount' ]),
|
||||
...mapGetters([ 'isListing' ]),
|
||||
url () {
|
||||
// Get the current name of the file we are editing.
|
||||
if (this.req.kind !== 'listing') {
|
||||
if (!this.isListing) {
|
||||
return this.$route.path
|
||||
}
|
||||
|
||||
@@ -90,27 +91,25 @@ export default {
|
||||
return this.req.items[this.selected[0]].url
|
||||
}
|
||||
},
|
||||
beforeMount () {
|
||||
getShare(this.url)
|
||||
.then(links => {
|
||||
this.links = links
|
||||
this.sort()
|
||||
async beforeMount () {
|
||||
try {
|
||||
const links = await api.get(this.url)
|
||||
this.links = links
|
||||
this.sort()
|
||||
|
||||
for (let link of this.links) {
|
||||
if (!link.expires) {
|
||||
this.hasPermanent = true
|
||||
break
|
||||
}
|
||||
for (let link of this.links) {
|
||||
if (link.expire === 0) {
|
||||
this.hasPermanent = true
|
||||
break
|
||||
}
|
||||
})
|
||||
.catch(error => {
|
||||
if (error === 404) return
|
||||
this.$showError(error)
|
||||
})
|
||||
}
|
||||
} catch (e) {
|
||||
this.$showError(e)
|
||||
}
|
||||
},
|
||||
mounted () {
|
||||
this.clip = new Clipboard('.copy-clipboard')
|
||||
this.clip.on('success', (e) => {
|
||||
this.clip.on('success', () => {
|
||||
this.$showSuccess(this.$t('success.linkCopied'))
|
||||
})
|
||||
},
|
||||
@@ -118,42 +117,48 @@ export default {
|
||||
this.clip.destroy()
|
||||
},
|
||||
methods: {
|
||||
submit: function (event) {
|
||||
submit: async function () {
|
||||
if (!this.time) return
|
||||
|
||||
share(this.url, this.time, this.unit)
|
||||
.then(result => { this.links.push(result); this.sort() })
|
||||
.catch(this.$showError)
|
||||
try {
|
||||
const res = await api.create(this.url, this.time, this.unit)
|
||||
this.links.push(res)
|
||||
this.sort()
|
||||
} catch (e) {
|
||||
this.$showError(e)
|
||||
}
|
||||
},
|
||||
getPermalink (event) {
|
||||
share(this.url)
|
||||
.then(result => {
|
||||
this.links.push(result)
|
||||
this.sort()
|
||||
this.hasPermanent = true
|
||||
})
|
||||
.catch(this.$showError)
|
||||
getPermalink: async function () {
|
||||
try {
|
||||
const res = await api.create(this.url)
|
||||
this.links.push(res)
|
||||
this.sort()
|
||||
this.hasPermanent = true
|
||||
} catch (e) {
|
||||
this.$showError(e)
|
||||
}
|
||||
},
|
||||
deleteLink (event, link) {
|
||||
deleteLink: async function (event, link) {
|
||||
event.preventDefault()
|
||||
deleteShare(link.hash)
|
||||
.then(() => {
|
||||
if (!link.expires) this.hasPermanent = false
|
||||
this.links = this.links.filter(item => item.hash !== link.hash)
|
||||
})
|
||||
.catch(this.$showError)
|
||||
try {
|
||||
await api.remove(link.hash)
|
||||
if (link.expire === 0) this.hasPermanent = false
|
||||
this.links = this.links.filter(item => item.hash !== link.hash)
|
||||
} catch (e) {
|
||||
this.$showError(e)
|
||||
}
|
||||
},
|
||||
humanTime (time) {
|
||||
return moment(time).fromNow()
|
||||
return moment(time * 1000).fromNow()
|
||||
},
|
||||
buildLink (hash) {
|
||||
return `${window.location.origin}${this.baseURL}/share/${hash}`
|
||||
return `${window.location.origin}${baseURL}/share/${hash}`
|
||||
},
|
||||
sort () {
|
||||
this.links = this.links.sort((a, b) => {
|
||||
if (!a.expires) return -1
|
||||
if (!b.expires) return 1
|
||||
return new Date(a.expireDate) - new Date(b.expireDate)
|
||||
if (a.expire === 0) return -1
|
||||
if (b.expire === 0) return 1
|
||||
return new Date(a.expire) - new Date(b.expire)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
24
src/components/settings/Commands.vue
Normal file
24
src/components/settings/Commands.vue
Normal file
@@ -0,0 +1,24 @@
|
||||
<template>
|
||||
<div>
|
||||
<h3>{{ $t('settings.userCommands') }}</h3>
|
||||
<p class="small">{{ $t('settings.userCommandsHelp') }} <i>git svn hg</i>.</p>
|
||||
<input class="input input--block" type="text" v-model.trim="raw">
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'permissions',
|
||||
props: ['commands'],
|
||||
computed: {
|
||||
raw: {
|
||||
get () {
|
||||
return this.commands.join(' ')
|
||||
},
|
||||
set (value) {
|
||||
this.$emit('update:commands', value.split(' '))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -1,28 +1,29 @@
|
||||
<template>
|
||||
<select v-on:change="change" :value="selected">
|
||||
<select v-on:change="change" :value="locale">
|
||||
<option value="ar">{{ $t('languages.ar') }}</option>
|
||||
<option value="de">{{ $t('languages.de') }}</option>
|
||||
<option value="en">{{ $t('languages.en') }}</option>
|
||||
<option value="it">{{ $t('languages.it') }}</option>
|
||||
<option value="es">{{ $t('languages.es') }}</option>
|
||||
<option value="fr">{{ $t('languages.fr') }}</option>
|
||||
<option value="pt">{{ $t('languages.pt') }}</option>
|
||||
<option value="pt-br">{{ $t('languages.ptBR') }}</option>
|
||||
<option value="it">{{ $t('languages.it') }}</option>
|
||||
<option value="ja">{{ $t('languages.ja') }}</option>
|
||||
<option value="ko">{{ $t('languages.ko') }}</option>
|
||||
<option value="pl">{{ $t('languages.pl') }}</option>
|
||||
<option value="pt-br">{{ $t('languages.ptBR') }}</option>
|
||||
<option value="pt">{{ $t('languages.pt') }}</option>
|
||||
<option value="ru">{{ $t('languages.ru') }}</option>
|
||||
<option value="zh-cn">{{ $t('languages.zhCN') }}</option>
|
||||
<option value="zh-tw">{{ $t('languages.zhTW') }}</option>
|
||||
<option value="es">{{ $t('languages.es') }}</option>
|
||||
<option value="de">{{ $t('languages.de') }}</option>
|
||||
<option value="ru">{{ $t('languages.ru') }}</option>
|
||||
<option value="pl">{{ $t('languages.pl') }}</option>
|
||||
<option value="ko">{{ $t('languages.ko') }}</option>
|
||||
</select>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'languages',
|
||||
props: [ 'selected' ],
|
||||
props: [ 'locale' ],
|
||||
methods: {
|
||||
change (event) {
|
||||
this.$emit('update:selected', event.target.value)
|
||||
this.$emit('update:locale', event.target.value)
|
||||
}
|
||||
}
|
||||
}
|
||||
39
src/components/settings/Permissions.vue
Normal file
39
src/components/settings/Permissions.vue
Normal file
@@ -0,0 +1,39 @@
|
||||
<template>
|
||||
<div>
|
||||
<h3>{{ $t('settings.permissions') }}</h3>
|
||||
<p class="small">{{ $t('settings.permissionsHelp') }}</p>
|
||||
|
||||
<p><input type="checkbox" v-model="admin"> {{ $t('settings.administrator') }}</p>
|
||||
|
||||
<p><input type="checkbox" :disabled="admin" v-model="perm.create"> {{ $t('settings.perm.create') }}</p>
|
||||
<p><input type="checkbox" :disabled="admin" v-model="perm.delete"> {{ $t('settings.perm.delete') }}</p>
|
||||
<p><input type="checkbox" :disabled="admin" v-model="perm.download"> {{ $t('settings.perm.download') }}</p>
|
||||
<p><input type="checkbox" :disabled="admin" v-model="perm.modify"> {{ $t('settings.perm.modify') }}</p>
|
||||
<p><input type="checkbox" :disabled="admin" v-model="perm.execute"> {{ $t('settings.perm.execute') }}</p>
|
||||
<p><input type="checkbox" :disabled="admin" v-model="perm.rename"> {{ $t('settings.perm.rename') }}</p>
|
||||
<p><input type="checkbox" :disabled="admin" v-model="perm.share"> {{ $t('settings.perm.share') }}</p>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'permissions',
|
||||
props: ['perm'],
|
||||
computed: {
|
||||
admin: {
|
||||
get () {
|
||||
return this.perm.admin
|
||||
},
|
||||
set (value) {
|
||||
if (value) {
|
||||
for (const key in this.perm) {
|
||||
this.perm[key] = true
|
||||
}
|
||||
}
|
||||
|
||||
this.perm.admin = value
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
57
src/components/settings/Rules.vue
Normal file
57
src/components/settings/Rules.vue
Normal file
@@ -0,0 +1,57 @@
|
||||
<template>
|
||||
<form class="rules small">
|
||||
<div v-for="(rule, index) in rules" :key="index">
|
||||
<input type="checkbox" v-model="rule.regex"><label>Regex</label>
|
||||
<input type="checkbox" v-model="rule.allow"><label>Allow</label>
|
||||
|
||||
<input
|
||||
@keypress.enter.prevent
|
||||
type="text"
|
||||
v-if="rule.regex"
|
||||
v-model="rule.regexp.raw"
|
||||
:placeholder="$t('settings.insertRegex')" />
|
||||
<input
|
||||
@keypress.enter.prevent
|
||||
type="text"
|
||||
v-else
|
||||
v-model="rule.path"
|
||||
:placeholder="$t('settings.insertPath')" />
|
||||
|
||||
<button class="button button--red" @click="remove($event, index)">-</button>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<button class="button" @click="create" default="false">{{ $t('buttons.new') }}</button>
|
||||
</div>
|
||||
</form>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'rules-textarea',
|
||||
props: ['rules'],
|
||||
methods: {
|
||||
remove (event, index) {
|
||||
event.preventDefault()
|
||||
let rules = [ ...this.rules ]
|
||||
rules.splice(index, 1)
|
||||
this.$emit('update:rules', [ ...rules ])
|
||||
},
|
||||
create (event) {
|
||||
event.preventDefault()
|
||||
|
||||
this.$emit('update:rules', [
|
||||
...this.rules,
|
||||
{
|
||||
allow: true,
|
||||
path: '',
|
||||
regex: false,
|
||||
regexp: {
|
||||
raw: ''
|
||||
}
|
||||
}
|
||||
])
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
65
src/components/settings/UserForm.vue
Normal file
65
src/components/settings/UserForm.vue
Normal file
@@ -0,0 +1,65 @@
|
||||
<template>
|
||||
<div>
|
||||
<p v-if="!isDefault">
|
||||
<label for="username">{{ $t('settings.username') }}</label>
|
||||
<input class="input input--block" type="text" v-model="user.username" id="username">
|
||||
</p>
|
||||
|
||||
<p v-if="!isDefault">
|
||||
<label for="password">{{ $t('settings.password') }}</label>
|
||||
<input class="input input--block" type="password" :placeholder="passwordPlaceholder" v-model="user.password" id="password">
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<label for="scope">{{ $t('settings.scope') }}</label>
|
||||
<input class="input input--block" type="text" v-model="user.scope" id="scope">
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<label for="locale">{{ $t('settings.language') }}</label>
|
||||
<languages class="input input--block" id="locale" :locale.sync="user.locale"></languages>
|
||||
</p>
|
||||
|
||||
<p v-if="!isDefault">
|
||||
<input type="checkbox" :disabled="user.perm.admin" v-model="user.lockPassword"> {{ $t('settings.lockPassword') }}
|
||||
</p>
|
||||
|
||||
<permissions :perm.sync="user.perm" />
|
||||
<commands :commands.sync="user.commands" />
|
||||
|
||||
<div v-if="!isDefault">
|
||||
<h3>{{ $t('settings.rules') }}</h3>
|
||||
<p class="small">{{ $t('settings.rulesHelp') }}</p>
|
||||
<rules :rules.sync="user.rules" />
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import Languages from './Languages'
|
||||
import Rules from './Rules'
|
||||
import Permissions from './Permissions'
|
||||
import Commands from './Commands'
|
||||
|
||||
export default {
|
||||
name: 'user',
|
||||
components: {
|
||||
Permissions,
|
||||
Languages,
|
||||
Rules,
|
||||
Commands
|
||||
},
|
||||
props: [ 'user', 'isNew', 'isDefault' ],
|
||||
computed: {
|
||||
passwordPlaceholder () {
|
||||
return this.isNew ? '' : this.$t('settings.avoidChanges')
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
'user.perm.admin': function () {
|
||||
if (!this.user.perm.admin) return
|
||||
this.user.lockPassword = false
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
55
src/css/_buttons.css
Normal file
55
src/css/_buttons.css
Normal file
@@ -0,0 +1,55 @@
|
||||
.button {
|
||||
outline: 0;
|
||||
border: 0;
|
||||
padding: .5em 1em;
|
||||
border-radius: .1em;
|
||||
cursor: pointer;
|
||||
background: var(--blue);
|
||||
color: white;
|
||||
border: 1px solid rgba(0, 0, 0, 0.05);
|
||||
box-shadow: 0 0 5px rgba(0, 0, 0, 0.05);
|
||||
transition: .1s ease all;
|
||||
}
|
||||
|
||||
.button:hover {
|
||||
background-color: var(--dark-blue);
|
||||
}
|
||||
|
||||
.button--block {
|
||||
margin: 0 0 0.5em;
|
||||
display: block;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.button--red {
|
||||
background: var(--red);
|
||||
}
|
||||
|
||||
.button--red:hover {
|
||||
background: var(--dark-red);
|
||||
}
|
||||
|
||||
.button--flat {
|
||||
color: var(--dark-blue);
|
||||
background: transparent;
|
||||
box-shadow: 0 0 0;
|
||||
border: 0;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.button--flat:hover {
|
||||
background: var(--moon-grey);
|
||||
}
|
||||
|
||||
.button--flat.button--red {
|
||||
color: var(--dark-red);
|
||||
}
|
||||
|
||||
.button--flat.button--grey {
|
||||
color: #6f6f6f;
|
||||
}
|
||||
|
||||
.button[disabled] {
|
||||
opacity: .5;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
35
src/css/_inputs.css
Normal file
35
src/css/_inputs.css
Normal file
@@ -0,0 +1,35 @@
|
||||
.input {
|
||||
border-radius: .1em;
|
||||
padding: .5em 1em;
|
||||
background: white;
|
||||
border: 1px solid rgba(0, 0, 0, 0.1);
|
||||
transition: .2s ease all;
|
||||
color: #333;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.input:hover,
|
||||
.input:focus {
|
||||
border-color: rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
|
||||
.input--block {
|
||||
margin-bottom: .5em;
|
||||
display: block;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.input--textarea {
|
||||
line-height: 1.15;
|
||||
font-family: monospace;
|
||||
min-height: 10em;
|
||||
resize: vertical;
|
||||
}
|
||||
|
||||
.input--red {
|
||||
background: #fcd0cd;
|
||||
}
|
||||
|
||||
.input--green {
|
||||
background: #c9f2da;
|
||||
}
|
||||
29
src/css/_share.css
Normal file
29
src/css/_share.css
Normal file
@@ -0,0 +1,29 @@
|
||||
.share__box {
|
||||
text-align: center;
|
||||
box-shadow: rgba(0, 0, 0, 0.06) 0px 1px 3px, rgba(0, 0, 0, 0.12) 0px 1px 2px;
|
||||
background: #fff;
|
||||
display: block;
|
||||
border-radius: 0.2em;
|
||||
width: 90%;
|
||||
max-width: 25em;
|
||||
margin: 6em auto;
|
||||
}
|
||||
|
||||
.share__box__download {
|
||||
width: 100%;
|
||||
padding: 1em;
|
||||
cursor: pointer;
|
||||
background: #ffffff;
|
||||
color: rgba(0, 0, 0, 0.5);
|
||||
border-bottom: 1px solid rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
|
||||
.share__box__info {
|
||||
padding: 2em 3em;
|
||||
}
|
||||
|
||||
.share__box__title {
|
||||
margin-top: .2em;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
53
src/css/_shell.css
Normal file
53
src/css/_shell.css
Normal file
@@ -0,0 +1,53 @@
|
||||
.shell {
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
height: 25em;
|
||||
max-height: calc(100% - 4em);
|
||||
background: white;
|
||||
color: #212121;
|
||||
z-index: 9999;
|
||||
width: 100%;
|
||||
font-family: monospace;
|
||||
overflow: auto;
|
||||
font-size: 1rem;
|
||||
cursor: text;
|
||||
box-shadow: 0 0 5px rgba(0, 0, 0, 0.1);
|
||||
transition: .2s ease transform;
|
||||
}
|
||||
|
||||
.shell__result {
|
||||
display: flex;
|
||||
padding: 0.5em;
|
||||
align-items: flex-start;
|
||||
border-top: 1px solid rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
|
||||
.shell--hidden {
|
||||
transform: translateY(105%);
|
||||
}
|
||||
|
||||
.shell__result--hidden {
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
.shell__text,
|
||||
.shell__prompt,
|
||||
.shell__prompt i {
|
||||
font-size: inherit;
|
||||
}
|
||||
|
||||
.shell__prompt {
|
||||
width: 1.2rem;
|
||||
}
|
||||
|
||||
.shell__prompt i {
|
||||
color: var(--blue);
|
||||
}
|
||||
|
||||
.shell__text {
|
||||
margin: 0;
|
||||
font-family: inherit;
|
||||
white-space: pre-wrap;
|
||||
width: 100%;
|
||||
}
|
||||
7
src/css/_variables.css
Normal file
7
src/css/_variables.css
Normal file
@@ -0,0 +1,7 @@
|
||||
:root {
|
||||
--blue: #2196f3;
|
||||
--dark-blue: #1E88E5;
|
||||
--red: #F44336;
|
||||
--dark-red: #D32F2F;
|
||||
--moon-grey: #f2f2f2;
|
||||
}
|
||||
@@ -29,94 +29,6 @@ video {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
pre {
|
||||
padding: 1em;
|
||||
border: 1px solid #e6e6e6;
|
||||
border-radius: 0.5em;
|
||||
background-color: #f5f5f5;
|
||||
white-space: pre-wrap;
|
||||
white-space: -moz-pre-wrap;
|
||||
white-space: -pre-wrap;
|
||||
white-space: -o-pre-wrap;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
|
||||
input,
|
||||
button {
|
||||
outline: 0 !important;
|
||||
}
|
||||
|
||||
input[type="submit"],
|
||||
button {
|
||||
border: 0;
|
||||
padding: .5em 1em;
|
||||
margin-left: .5em;
|
||||
border-radius: .1em;
|
||||
cursor: pointer;
|
||||
background: #2196f3;
|
||||
color: #fff;
|
||||
border: 1px solid rgba(0, 0, 0, 0.05);
|
||||
box-shadow: 0 0 5px rgba(0, 0, 0, 0.05);
|
||||
transition: .1s ease all;
|
||||
}
|
||||
|
||||
input[type="submit"]:hover,
|
||||
button:hover {
|
||||
background-color: #1E88E5;
|
||||
}
|
||||
|
||||
input[type="submit"].block,
|
||||
button.block {
|
||||
display: block;
|
||||
width: 100%;
|
||||
margin: 0 0 1em;
|
||||
}
|
||||
|
||||
button.delete {
|
||||
background: #F44336;
|
||||
}
|
||||
|
||||
button.delete:hover {
|
||||
background: #D32F2F;
|
||||
}
|
||||
|
||||
button.cancel {
|
||||
background-color: #ECEFF1;
|
||||
color: #37474F;
|
||||
}
|
||||
|
||||
button.cancel:hover {
|
||||
background-color: #e9eaeb;
|
||||
}
|
||||
|
||||
button.flat,
|
||||
input[type="submit"].flat {
|
||||
color: #1E88E5;
|
||||
background: transparent;
|
||||
box-shadow: 0 0 0;
|
||||
border: 0;
|
||||
margin-left: 0;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
button.flat:hover,
|
||||
input[type="submit"].flat:hover {
|
||||
background: rgba(0,0,0,0.05)
|
||||
}
|
||||
|
||||
button.flat.delete {
|
||||
color: #F44336;
|
||||
}
|
||||
|
||||
button.flat.cancel {
|
||||
color: #ccc;
|
||||
}
|
||||
|
||||
button.flat[disabled] {
|
||||
color: #ccc;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
.mobile-only {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
@@ -7,58 +7,6 @@ a {
|
||||
color: inherit
|
||||
}
|
||||
|
||||
select,
|
||||
textarea,
|
||||
input[type="text"],
|
||||
input[type="password"] {
|
||||
padding: 0.5em 0;
|
||||
line-height: 1;
|
||||
display: block;
|
||||
border: 0;
|
||||
border-bottom: 1px solid #dddddd;
|
||||
transition: .2s ease border;
|
||||
width: 100%;
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
textarea {
|
||||
line-height: 1.15;
|
||||
padding: .5em;
|
||||
border: 1px solid #ddd;
|
||||
font-family: monospace;
|
||||
min-height: 10em;
|
||||
resize: none;
|
||||
border-radius: 2px;
|
||||
}
|
||||
|
||||
.dashboard #locale,
|
||||
.dashboard #username,
|
||||
.dashboard #password,
|
||||
.dashboard #scope {
|
||||
max-width: 18em;
|
||||
}
|
||||
|
||||
.dashboard #locale {
|
||||
margin-top: .5em;
|
||||
}
|
||||
|
||||
textarea:focus,
|
||||
textarea:hover,
|
||||
input[type="text"]:focus,
|
||||
input[type="password"]:focus,
|
||||
input[type="text"]:hover,
|
||||
input[type="password"]:hover {
|
||||
border-color: #2979ff;
|
||||
}
|
||||
|
||||
input.red {
|
||||
border-color: red;
|
||||
}
|
||||
|
||||
input.green {
|
||||
border-color: green;
|
||||
}
|
||||
|
||||
.dashboard p label {
|
||||
margin-bottom: .2em;
|
||||
display: block;
|
||||
@@ -98,7 +46,7 @@ p code {
|
||||
}
|
||||
|
||||
.dashboard #nav li.active {
|
||||
border-color: #2196f3
|
||||
border-color: var(--blue)
|
||||
}
|
||||
|
||||
.dashboard #nav i {
|
||||
@@ -241,7 +189,7 @@ table tr>*:last-child {
|
||||
}
|
||||
|
||||
.card#share ul li a {
|
||||
color: #2196F3;
|
||||
color: var(--blue);
|
||||
cursor: pointer;
|
||||
margin-right: auto;
|
||||
}
|
||||
@@ -310,7 +258,7 @@ table tr>*:last-child {
|
||||
}
|
||||
|
||||
.file-list li[aria-selected=true] {
|
||||
background: #2196f3 !important;
|
||||
background: var(--blue) !important;
|
||||
color: #fff !important;
|
||||
transition: .1s ease all;
|
||||
}
|
||||
|
||||
@@ -1,184 +0,0 @@
|
||||
@import "~codemirror/lib/codemirror.css";
|
||||
@import "~codemirror/theme/ttcn.css";
|
||||
#editor {
|
||||
max-width: 800px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
#editor .CodeMirror {
|
||||
box-shadow: rgba(0, 0, 0, 0.06) 0px 1px 3px, rgba(0, 0, 0, 0.12) 0px 1px 2px;
|
||||
margin: 2em 0;
|
||||
border-radius: .5em;
|
||||
}
|
||||
|
||||
#editor h2 {
|
||||
color: rgba(0, 0, 0, 0.3);
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.CodeMirror {
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.markdown .CodeMirror {
|
||||
padding: .75em;
|
||||
}
|
||||
|
||||
.cm-s-markdown .CodeMirror-gutter {
|
||||
border-right: 1px solid #eff3f5;
|
||||
padding-right: 5px;
|
||||
margin-right: 15px;
|
||||
min-width: 2.5em;
|
||||
padding-bottom: 30px;
|
||||
}
|
||||
|
||||
.cm-s-markdown .CodeMirror-cursor {
|
||||
border-right: 2px solid #667880;
|
||||
}
|
||||
|
||||
.cm-s-markdown .CodeMirror-lines {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.cm-s-markdown {
|
||||
color: #3D494E;
|
||||
}
|
||||
|
||||
.cm-s-markdown span.cm-header {
|
||||
color: #3D494E;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.cm-s-markdown span.cm-variable-2 {
|
||||
color: #3D494E;
|
||||
}
|
||||
|
||||
.cm-s-markdown span.cm-meta {
|
||||
color: #516066;
|
||||
}
|
||||
|
||||
.cm-s-markdown span.cm-hr {
|
||||
color: #516066;
|
||||
}
|
||||
|
||||
.cm-s-markdown span.cm-comment {
|
||||
color: #868f93;
|
||||
}
|
||||
|
||||
.cm-s-markdown span.cm-qualifier {
|
||||
color: #868f93;
|
||||
}
|
||||
|
||||
.cm-s-markdown span.cm-number {
|
||||
color: #197987;
|
||||
}
|
||||
|
||||
.cm-s-markdown span.cm-variable {
|
||||
color: #197987;
|
||||
}
|
||||
|
||||
.cm-s-markdown span.cm-builtin {
|
||||
color: #197987;
|
||||
}
|
||||
|
||||
.cm-s-markdown span.cm-link {
|
||||
color: #197987;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.cm-s-markdown span.cm-tag {
|
||||
color: #197987;
|
||||
}
|
||||
|
||||
.cm-s-markdown span.cm-string {
|
||||
color: #48abb9;
|
||||
}
|
||||
|
||||
.cm-s-markdown span.cm-string-2 {
|
||||
color: #48abb9;
|
||||
}
|
||||
|
||||
.cm-s-markdown span.cm-quote {
|
||||
color: #48abb9;
|
||||
}
|
||||
|
||||
.cm-s-markdown span.cm-atom {
|
||||
color: #48abb9;
|
||||
}
|
||||
|
||||
.cm-s-markdown span.cm-property {
|
||||
color: #82a367;
|
||||
}
|
||||
|
||||
.cm-s-markdown span.cm-operator {
|
||||
color: #82a367;
|
||||
}
|
||||
|
||||
.cm-s-markdown span.cm-variable-3 {
|
||||
color: #82a367;
|
||||
}
|
||||
|
||||
.cm-s-markdown span.cm-attribute {
|
||||
color: #90bb74;
|
||||
}
|
||||
|
||||
.cm-s-markdown span.cm-def {
|
||||
color: #90bb74;
|
||||
}
|
||||
|
||||
.cm-s-markdown span.cm-keyword {
|
||||
color: #ec6c45;
|
||||
}
|
||||
|
||||
.cm-s-markdown span.cm-bracket {
|
||||
color: #ec6c45;
|
||||
}
|
||||
|
||||
.cm-s-markdown span.cm-error {
|
||||
color: #e45346;
|
||||
}
|
||||
|
||||
.cm-s-markdown span.cm-em {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.cm-s-markdown span.cm-strong {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.cm-s-markdown .cm-header-1 {
|
||||
font-size: 200%;
|
||||
line-height: 200%;
|
||||
}
|
||||
|
||||
.cm-s-markdown .cm-header-2 {
|
||||
font-size: 160%;
|
||||
line-height: 160%;
|
||||
}
|
||||
|
||||
.cm-s-markdown .cm-header-3 {
|
||||
font-size: 125%;
|
||||
line-height: 125%;
|
||||
}
|
||||
|
||||
.cm-s-markdown .cm-header-4 {
|
||||
font-size: 110%;
|
||||
line-height: 110%;
|
||||
}
|
||||
|
||||
.cm-s-markdown .cm-comment {
|
||||
background: rgba(0, 0, 0, .05);
|
||||
border-radius: 2px;
|
||||
}
|
||||
|
||||
.cm-s-markdown .cm-link {
|
||||
color: #7f8c8d;
|
||||
}
|
||||
|
||||
.cm-s-markdown .cm-url {
|
||||
color: #aab2b3;
|
||||
}
|
||||
|
||||
.cm-s-markdown .cm-strikethrough {
|
||||
text-decoration: line-through;
|
||||
}
|
||||
@@ -110,32 +110,4 @@
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Material Icons';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: url(../assets/fonts/material/icons.eot);
|
||||
src: local('Material Icons'),
|
||||
local('MaterialIcons-Regular'),
|
||||
url(../assets/fonts/material/icons.woff2) format('woff2'),
|
||||
url(../assets/fonts/material/icons.ttf) format('truetype');
|
||||
}
|
||||
|
||||
.prompt .file-list ul li:before,
|
||||
.material-icons {
|
||||
font-family: 'Material Icons';
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
font-size: 24px;
|
||||
line-height: 1;
|
||||
letter-spacing: normal;
|
||||
text-transform: none;
|
||||
display: inline-block;
|
||||
white-space: nowrap;
|
||||
word-wrap: normal;
|
||||
direction: ltr;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
text-rendering: optimizeLegibility;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
font-feature-settings: 'liga';
|
||||
}
|
||||
@import "~material-design-icons/iconfont/material-icons.css";
|
||||
|
||||
@@ -238,7 +238,7 @@ header .search-button {
|
||||
}
|
||||
|
||||
#search .boxes>div>div {
|
||||
background: #2196F3;
|
||||
background: var(--blue);
|
||||
color: #fff;
|
||||
text-align: center;
|
||||
width: 10em;
|
||||
|
||||
@@ -120,7 +120,7 @@
|
||||
}
|
||||
|
||||
#listing .item[aria-selected=true] {
|
||||
background: #2196f3 !important;
|
||||
background: var(--blue) !important;
|
||||
color: #fff !important;
|
||||
}
|
||||
|
||||
@@ -228,7 +228,7 @@
|
||||
left: 0;
|
||||
z-index: 99999;
|
||||
width: 100%;
|
||||
background-color: #2196f3;
|
||||
background-color: var(--blue);
|
||||
height: 4em;
|
||||
display: none;
|
||||
padding: 0.5em 0.5em 0.5em 1em;
|
||||
|
||||
@@ -37,14 +37,8 @@
|
||||
margin: .5em 0 0;
|
||||
}
|
||||
|
||||
#login input {
|
||||
width: 100%;
|
||||
width: 100%;
|
||||
margin: .5em 0 0;
|
||||
}
|
||||
|
||||
#login .wrong {
|
||||
background: #F44336;
|
||||
background: var(--red);
|
||||
color: #fff;
|
||||
padding: .5em;
|
||||
text-align: center;
|
||||
@@ -60,17 +54,12 @@
|
||||
}
|
||||
}
|
||||
|
||||
#login input[type="text"],
|
||||
#login input[type="password"] {
|
||||
padding: .5em 1em;
|
||||
border: 1px solid #e9e9e9;
|
||||
transition: .2s ease border;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
#login input[type="text"]:focus,
|
||||
#login input[type="password"]:focus,
|
||||
#login input[type="text"]:hover,
|
||||
#login input[type="password"]:hover {
|
||||
border-color: #9f9f9f;
|
||||
#login p {
|
||||
cursor: pointer;
|
||||
text-align: right;
|
||||
color: var(--blue);
|
||||
text-transform: lowercase;
|
||||
font-weight: 500;
|
||||
font-size: 0.9rem;
|
||||
margin: .5rem 0;
|
||||
}
|
||||
|
||||
@@ -15,6 +15,12 @@
|
||||
body {
|
||||
padding-bottom: 5em;
|
||||
}
|
||||
#listing.list .item .size {
|
||||
display: none;
|
||||
}
|
||||
#listing.list .item .name {
|
||||
width: 60%;
|
||||
}
|
||||
#more {
|
||||
display: inherit
|
||||
}
|
||||
@@ -114,3 +120,12 @@
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 450px) {
|
||||
#listing.list .item .modified {
|
||||
display: none;
|
||||
}
|
||||
#listing.list .item .name {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
@@ -1,14 +1,22 @@
|
||||
@import "~normalize.css/normalize.css";
|
||||
@import "~noty/lib/noty.css";
|
||||
@import "~noty/lib/themes/mint.css";
|
||||
@import "./_variables.css";
|
||||
@import "./_buttons.css";
|
||||
@import "./_inputs.css";
|
||||
@import "./_shell.css";
|
||||
@import "./_share.css";
|
||||
@import "./fonts.css";
|
||||
@import "./base.css";
|
||||
@import "./header.css";
|
||||
@import "./listing.css";
|
||||
@import "./editor.css";
|
||||
@import "./dashboard.css";
|
||||
@import "./login.css";
|
||||
|
||||
.link {
|
||||
color: var(--blue);
|
||||
}
|
||||
|
||||
/* * * * * * * * * * * * * * * *
|
||||
* ACTION *
|
||||
* * * * * * * * * * * * * * * */
|
||||
@@ -84,7 +92,7 @@
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
background: #2196f3;
|
||||
background: var(--blue);
|
||||
color: #fff;
|
||||
border-radius: 50%;
|
||||
font-size: .75em;
|
||||
@@ -203,7 +211,7 @@
|
||||
color: #a5a5a5;
|
||||
}
|
||||
|
||||
.credits span {
|
||||
.credits > span {
|
||||
display: block;
|
||||
margin: .3em 0;
|
||||
}
|
||||
@@ -226,4 +234,36 @@
|
||||
}
|
||||
}
|
||||
|
||||
/* * * * * * * * * * * * * * * *
|
||||
* SETTINGS RULES *
|
||||
* * * * * * * * * * * * * * * */
|
||||
|
||||
.rules > div {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin: .5rem 0;
|
||||
}
|
||||
|
||||
.rules input[type="checkbox"] {
|
||||
margin-right: .2rem;
|
||||
}
|
||||
|
||||
.rules input[type="text"] {
|
||||
border: 1px solid#ddd;
|
||||
padding: .2rem;
|
||||
}
|
||||
|
||||
.rules label {
|
||||
margin-right: .5rem;
|
||||
}
|
||||
|
||||
.rules button {
|
||||
margin-left: auto;
|
||||
}
|
||||
|
||||
.rules button.delete {
|
||||
padding: .2rem .5rem;
|
||||
margin-left: .5rem;
|
||||
}
|
||||
|
||||
@import './mobile.css';
|
||||
|
||||
233
src/i18n/ar.json
Normal file
233
src/i18n/ar.json
Normal file
@@ -0,0 +1,233 @@
|
||||
{
|
||||
"permanent": "دائم",
|
||||
"buttons": {
|
||||
"cancel": "إلغاء",
|
||||
"close": "إغلاق",
|
||||
"copy": "نسخ",
|
||||
"copyFile": "نسخ الملف",
|
||||
"copyToClipboard": "نسخ الى الحافظة",
|
||||
"create": "إنشاء",
|
||||
"delete": "حذف",
|
||||
"download": "تحميل",
|
||||
"info": "معلومات",
|
||||
"more": "المزيد",
|
||||
"move": "نقل",
|
||||
"moveFile": "نقل الملف",
|
||||
"new": "جديد",
|
||||
"next": "التالي",
|
||||
"ok": "موافق",
|
||||
"replace": "استبدال",
|
||||
"previous": "السابق",
|
||||
"rename": "إعادة تسمية",
|
||||
"reportIssue": "إبلاغ عن مشكلة",
|
||||
"save": "حفظ",
|
||||
"search": "بحث",
|
||||
"select": "تحديد",
|
||||
"share": "مشاركة",
|
||||
"publish": "نشر",
|
||||
"selectMultiple": "تحديد متعدد",
|
||||
"schedule": "جدولة",
|
||||
"switchView": "تغيير العرض",
|
||||
"toggleSidebar": "تبديل الشريط الجانبي",
|
||||
"update": "تحديث",
|
||||
"upload": "رفع",
|
||||
"permalink": "الحصول على لنك دائم"
|
||||
},
|
||||
"success": {
|
||||
"linkCopied": "تم نسخ الملف"
|
||||
},
|
||||
"errors": {
|
||||
"forbidden": "أنت غير مرحب بك هنا!.",
|
||||
"internal": "لقد حدث خطأ ما.",
|
||||
"notFound": "لا يمكن الوصول لهذا المحتوى."
|
||||
},
|
||||
"files": {
|
||||
"folders": "المجلدات",
|
||||
"files": "الملفات",
|
||||
"body": "الصفحة",
|
||||
"clear": "مسح",
|
||||
"closePreview": "إغلاق العرض",
|
||||
"home": "الصفحة الاولى",
|
||||
"lastModified": "آخر تعديل",
|
||||
"loading": "جاري التحميل...",
|
||||
"lonely": "تبدو وحيدا هنا...",
|
||||
"metadata": "بيانات تعريفية",
|
||||
"multipleSelectionEnabled": "التحديد المتعدد مفعل",
|
||||
"name": "الإسم",
|
||||
"size": "الحجم",
|
||||
"sortByName": "الترتيب بالإسم",
|
||||
"sortBySize": "الترتيب بالحجم",
|
||||
"sortByLastModified": "الترتيب بآخر تعديل"
|
||||
},
|
||||
"help": {
|
||||
"click": "حدد الملف أو المجلد",
|
||||
"ctrl": {
|
||||
"click": "حدد أكثر من ملف او مجلد",
|
||||
"f": "إبدأ البحث",
|
||||
"s": "حمل الملف او المجلد في هذا المكان"
|
||||
},
|
||||
"del": "حذف البيانات المحددة",
|
||||
"doubleClick": "فتح المجلد او الملف",
|
||||
"esc": "مسح التحديد وإغلاق النافذة المنبثقة",
|
||||
"f1": "هذه المعلومات",
|
||||
"f2": "إعادة تسمية الملف",
|
||||
"help": "مساعدة"
|
||||
},
|
||||
"login": {
|
||||
"password": "كلمة المرور",
|
||||
"passwordConfirm": "Password Confirmation",
|
||||
"submit": "تسجيل دخول",
|
||||
"createAnAccount": "Create an account",
|
||||
"loginInstead": "Already have an account",
|
||||
"passwordsDontMatch": "Passwords don't match",
|
||||
"usernameTaken": "Username already taken",
|
||||
"signup": "Signup",
|
||||
"username": "إسم المستخدم",
|
||||
"wrongCredentials": "بيانات دخول خاطئة"
|
||||
},
|
||||
"prompts": {
|
||||
"copy": "نسخ",
|
||||
"copyMessage": "رجاء حدد المكان لنسخ ملفاتك فيه:",
|
||||
"currentlyNavigating": "يتم الإنتقال حاليا إلى:",
|
||||
"deleteMessageMultiple": "هل تريد بالتأكيد حذف {count} ملف؟",
|
||||
"deleteMessageSingle": "هل تريد بالتأكيد حذف هذا الملف/المجلد؟",
|
||||
"deleteTitle": "حذف الملفات",
|
||||
"displayName": "الإسم:",
|
||||
"download": "تحميل الملفات",
|
||||
"downloadMessage": "حدد إمتداد الملف المراد تحميله.",
|
||||
"error": "لقد حدث خطأ ما",
|
||||
"fileInfo": "معلومات الملف",
|
||||
"filesSelected": "تم تحديد {count} ملفات.",
|
||||
"lastModified": "آخر تعديل",
|
||||
"move": "نقل",
|
||||
"moveMessage": "إختر مكان جديد للملفات أو المجلدات المراد نقلها:",
|
||||
"newDir": "مجلد جديد",
|
||||
"newDirMessage": "رجاء أدخل اسم المجلد الجديد.",
|
||||
"newFile": "ملف جديد",
|
||||
"newFileMessage": "رجاء ادخل اسم الملف الجديد.",
|
||||
"numberDirs": "عدد المجلدات",
|
||||
"numberFiles": "عدد الملفات",
|
||||
"replace": "إستبدال",
|
||||
"replaceMessage": "أحد الملفات التي تحاول رفعها يتعارض مع ملف موجود بنفس الإسم. هل تريد إستبدال الملف الموجود؟\n",
|
||||
"rename": "إعادة تسمية",
|
||||
"renameMessage": "إدراج اسم جديد لـ",
|
||||
"show": "عرض",
|
||||
"size": "الحجم",
|
||||
"schedule": "جدولة",
|
||||
"scheduleMessage": "أختر الوقت والتاريخ لجدولة نشر هذا المقال.",
|
||||
"newArchetype": "إنشاء منشور من المنشور الأصلي. الملف سيتم انشاءه في مجلد المحتويات."
|
||||
},
|
||||
"settings": {
|
||||
"instanceName": "Instance name",
|
||||
"brandingDirectoryPath": "Branding directory path",
|
||||
"documentation": "documentation",
|
||||
"branding": "Branding",
|
||||
"disableExternalLinks": "Disable external links (except documentation)",
|
||||
"brandingHelp": "You can costumize how your File Browser instance looks and feels by changing its name, replacing the logo, adding custom styles and even disable external links to GitHub.\nFor more information about custom branding, please check out the {0}.",
|
||||
"admin": "Admin",
|
||||
"administrator": "Administrator",
|
||||
"allowCommands": "تنفيذ الأوامر",
|
||||
"allowEdit": "تعديل، إعادة تسمية وحذف الملفات والمجلدات",
|
||||
"allowNew": "إنشاء ملفات ومجلدات جديدة",
|
||||
"allowPublish": "نشر مقالات وصفحات جديدة",
|
||||
"avoidChanges": "(أتركه فارغاً إن لم ترد تغييره)",
|
||||
"changePassword": "تغيير كلمة المرور",
|
||||
"commandRunner": "Command runner",
|
||||
"commandRunnerHelp": "Here you can set commands that are executed in the named events. You must write one per line. The environment variables {0} and {1} will be available, being {0} relative to {1}. For more information about this feature and the available environment variables, please read the {2}.",
|
||||
"commandsUpdated": "تم تحديث الأوامر",
|
||||
"customStylesheet": "ستايل مخصص",
|
||||
"examples": "أمثلة",
|
||||
"globalSettings": "إعدادات عامة",
|
||||
"language": "اللغة",
|
||||
"lockPassword": "منع المستخدم من تغيير كلمة المرور",
|
||||
"newPassword": "كلمة المرور الجديدة",
|
||||
"newPasswordConfirm": "تأكيد كلمة المرور",
|
||||
"newUser": "مستخدم جديد",
|
||||
"password": "كلمة المرور",
|
||||
"passwordUpdated": "تم تغيير كلمة المرور",
|
||||
"permissions": "الصلاحيات",
|
||||
"permissionsHelp": "يمكنك تعيين المستخدم كـ \"مدير\" أو تحديد الصلاحيات بشكل منفرد.\n إذا قمت بتحديد المستخدم كـ \"مدير\"، باقي الخيارات سيتم تحديدها تلقائياً.\n إدارة المستخدمين تبقى صلاحية فريدة للـ \"مدير\" فقط.\n",
|
||||
"profileSettings": "إعدادات الحساب",
|
||||
"ruleExample1": "منع الوصول إلى الملفات التي تبدأ بنقطة مثل (.git، و .gitignore) في كل مجلد.\n",
|
||||
"ruleExample2": "منع الوصول إلى الملف المسمى Caddyfile في نطاق الجذر.",
|
||||
"rules": "المجموعات",
|
||||
"rulesHelp": "يمكنك هنا تحديد مجموعة من شروط السماح والمنع لهذا المستخدم. الملفات الممنوعة لن تظهر ضمن القائمة لهذا المستخدم ولن يستطيع الوصول لها. هنا ندعم الـ regex والـ relative path لنطاق المستخدمين.\n",
|
||||
"scope": "نطاق",
|
||||
"settingsUpdated": "تم تعديل الإعدادات",
|
||||
"user": "المستخدم",
|
||||
"userCommands": "الأوامر",
|
||||
"userCommandsHelp": "الأوامر المتاحة لهذا المستخدم مفصولة فيما بينها بمسافة. مثال:\n",
|
||||
"userCreated": "تم إنشاء المستخدم",
|
||||
"userDeleted": "تم حذف المستخدم",
|
||||
"userManagement": "إدارة المستخدمين",
|
||||
"username": "إسم المستخدم",
|
||||
"users": "المستخدمين",
|
||||
"globalRules": "This is a global set of allow and disallow rules. They apply to every user. You can define specific rules on each user's settings to override this ones.",
|
||||
"allowSignup": "Allow users to signup",
|
||||
"insertRegex": "Insert regex expression",
|
||||
"insertPath": "Insert the path",
|
||||
"userUpdated": "تم تعديل المستخدم",
|
||||
"generalSettings": "General settings",
|
||||
"userDefaults": "User default settings",
|
||||
"defaultUserDescription": "This are the default settings for new users.",
|
||||
"perm": {
|
||||
"create": "Create files and directories",
|
||||
"delete": "Delete files and directories",
|
||||
"download": "Download",
|
||||
"edit": "Edit files",
|
||||
"execute": "Execute commands",
|
||||
"rename": "Rename or move files and directories",
|
||||
"share": "Share files"
|
||||
}
|
||||
},
|
||||
"sidebar": {
|
||||
"help": "مساعدة",
|
||||
"logout": "تسجيل خروج",
|
||||
"myFiles": "ملفاتي",
|
||||
"newFile": "ملف جديد",
|
||||
"newFolder": "مجلد جديد",
|
||||
"settings": "الإعدادات",
|
||||
"siteSettings": "إعدادات الموقع",
|
||||
"hugoNew": "هيوجو جديد",
|
||||
"preview": "معاينة"
|
||||
},
|
||||
"search": {
|
||||
"images": "الصور",
|
||||
"music": "الموسيقى",
|
||||
"notSupportedCommand": "هذا الأمر غير متاح.",
|
||||
"pdf": "PDF",
|
||||
"pressToExecute": "إغضط زر Enter للتنفيذ.",
|
||||
"pressToSearch": "إضغط زر Enter للبحث.",
|
||||
"search": "البحث...",
|
||||
"searchOrCommand": "إبحث او قم بتنفيذ أمر...",
|
||||
"searchOrSupportedCommand": "إبحث او قم باضافة بادئة '$' واستخدم واحد من الاوامر الخاصة بك:",
|
||||
"typeCommand": "أكتب واضغط Enter للتنفيذ.",
|
||||
"typeSearch": "أكتب واضغط Enter للبحث.",
|
||||
"types": "الأنواع",
|
||||
"video": "فيديوهات",
|
||||
"writeToSearch": "أكتب هنا للبحث"
|
||||
},
|
||||
"languages": {
|
||||
"ar": "العربية",
|
||||
"en": "English",
|
||||
"it": "Italiano",
|
||||
"fr": "Français",
|
||||
"pt": "Português",
|
||||
"ptBR": "Português (Brasil)",
|
||||
"ja": "日本語",
|
||||
"zhCN": "中文 (简体)",
|
||||
"zhTW": "中文 (繁體)",
|
||||
"es": "Español",
|
||||
"de": "Deutsch",
|
||||
"ru": "Русский",
|
||||
"pl": "Polski",
|
||||
"ko": "한국어"
|
||||
},
|
||||
"time": {
|
||||
"unit": "وحدة الوقت",
|
||||
"seconds": "ثواني",
|
||||
"minutes": "دقائق",
|
||||
"hours": "ساعات",
|
||||
"days": "أيام"
|
||||
}
|
||||
}
|
||||
208
src/i18n/ar.yaml
208
src/i18n/ar.yaml
@@ -1,208 +0,0 @@
|
||||
permanent: دائم
|
||||
buttons:
|
||||
cancel: إلغاء
|
||||
close: إغلاق
|
||||
copy: نسخ
|
||||
copyFile: نسخ الملف
|
||||
copyToClipboard: نسخ الى الحافظة
|
||||
create: إنشاء
|
||||
delete: حذف
|
||||
download: تحميل
|
||||
info: معلومات
|
||||
more: المزيد
|
||||
move: نقل
|
||||
moveFile: نقل الملف
|
||||
new: جديد
|
||||
next: التالي
|
||||
ok: موافق
|
||||
replace: استبدال
|
||||
previous: السابق
|
||||
rename: إعادة تسمية
|
||||
reportIssue: إبلاغ عن مشكلة
|
||||
save: حفظ
|
||||
search: بحث
|
||||
select: تحديد
|
||||
share: مشاركة
|
||||
publish: نشر
|
||||
selectMultiple: تحديد متعدد
|
||||
schedule: جدولة
|
||||
switchView: تغيير العرض
|
||||
toggleSidebar: تبديل الشريط الجانبي
|
||||
update: تحديث
|
||||
upload: رفع
|
||||
permalink: الحصول على لنك دائم
|
||||
success:
|
||||
linkCopied: تم نسخ الملف
|
||||
errors:
|
||||
forbidden: أنت غير مرحب بك هنا!.
|
||||
internal: لقد حدث خطأ ما.
|
||||
notFound: لا يمكن الوصول لهذا المحتوى.
|
||||
files:
|
||||
folders: المجلدات
|
||||
files: الملفات
|
||||
body: الصفحة
|
||||
clear: مسح
|
||||
closePreview: إغلاق العرض
|
||||
home: الصفحة الاولى
|
||||
lastModified: آخر تعديل
|
||||
loading: جاري التحميل...
|
||||
lonely: تبدو وحيدا هنا...
|
||||
metadata: بيانات تعريفية
|
||||
multipleSelectionEnabled: التحديد المتعدد مفعل
|
||||
name: الإسم
|
||||
size: الحجم
|
||||
sortByName: الترتيب بالإسم
|
||||
sortBySize: الترتيب بالحجم
|
||||
sortByLastModified: الترتيب بآخر تعديل
|
||||
help:
|
||||
click: حدد الملف أو المجلد
|
||||
ctrl:
|
||||
click: حدد أكثر من ملف او مجلد
|
||||
f: إبدأ البحث
|
||||
s: حمل الملف او المجلد في هذا المكان
|
||||
del: حذف البيانات المحددة
|
||||
doubleClick: فتح المجلد او الملف
|
||||
esc: مسح التحديد وإغلاق النافذة المنبثقة
|
||||
f1: هذه المعلومات
|
||||
f2: إعادة تسمية الملف
|
||||
help: مساعدة
|
||||
login:
|
||||
password: كلمة المرور
|
||||
submit: تسجيل دخول
|
||||
username: إسم المستخدم
|
||||
wrongCredentials: بيانات دخول خاطئة
|
||||
prompts:
|
||||
copy: نسخ
|
||||
copyMessage: 'رجاء حدد المكان لنسخ ملفاتك فيه:'
|
||||
currentlyNavigating: 'يتم الإنتقال حاليا إلى:'
|
||||
deleteMessageMultiple: هل تريد بالتأكيد حذف {count} ملف؟
|
||||
deleteMessageSingle: هل تريد بالتأكيد حذف هذا الملف/المجلد؟
|
||||
deleteTitle: حذف الملفات
|
||||
displayName: 'الإسم:'
|
||||
download: تحميل الملفات
|
||||
downloadMessage: حدد إمتداد الملف المراد تحميله.
|
||||
error: لقد حدث خطأ ما
|
||||
fileInfo: معلومات الملف
|
||||
filesSelected: "تم تحديد {count} ملفات."
|
||||
lastModified: آخر تعديل
|
||||
move: نقل
|
||||
moveMessage: 'إختر مكان جديد للملفات أو المجلدات المراد نقلها:'
|
||||
newDir: مجلد جديد
|
||||
newDirMessage: رجاء أدخل اسم المجلد الجديد.
|
||||
newFile: ملف جديد
|
||||
newFileMessage: رجاء ادخل اسم الملف الجديد.
|
||||
numberDirs: عدد المجلدات
|
||||
numberFiles: عدد الملفات
|
||||
replace: إستبدال
|
||||
replaceMessage: >
|
||||
أحد الملفات التي تحاول رفعها يتعارض مع ملف موجود بنفس الإسم.
|
||||
هل تريد إستبدال الملف الموجود؟
|
||||
rename: إعادة تسمية
|
||||
renameMessage: إدراج اسم جديد لـ
|
||||
show: عرض
|
||||
size: الحجم
|
||||
schedule: جدولة
|
||||
scheduleMessage: أختر الوقت والتاريخ لجدولة نشر هذا المقال.
|
||||
newArchetype: إنشاء منشور من المنشور الأصلي. الملف سيتم انشاءه في مجلد المحتويات.
|
||||
settings:
|
||||
admin: Admin
|
||||
administrator: Administrator
|
||||
allowCommands: تنفيذ الأوامر
|
||||
allowEdit: تعديل، إعادة تسمية وحذف الملفات والمجلدات
|
||||
allowNew: إنشاء ملفات ومجلدات جديدة
|
||||
allowPublish: نشر مقالات وصفحات جديدة
|
||||
avoidChanges: "(أتركه فارغاً إن لم ترد تغييره)"
|
||||
changePassword: تغيير كلمة المرور
|
||||
commands: الأوامر
|
||||
commandsHelp: >
|
||||
هنا يمكنك تحديد أوامر يمكن تنفيذها عند أحداث معينة.
|
||||
قم بكتابة أمر واحد في كل سطر. أذا كان الحدث متعلق بمجلد، مثل ما قبل أو بعد الحفظ،
|
||||
المتغير "FILE" سيكون متاح مع مسار الملف
|
||||
|
||||
commandsUpdated: تم تحديث الأوامر
|
||||
customStylesheet: ستايل مخصص
|
||||
examples: أمثلة
|
||||
globalSettings: إعدادات عامة
|
||||
language: اللغة
|
||||
lockPassword: منع المستخدم من تغيير كلمة المرور
|
||||
newPassword: كلمة المرور الجديدة
|
||||
newPasswordConfirm: تأكيد كلمة المرور
|
||||
newUser: مستخدم جديد
|
||||
password: كلمة المرور
|
||||
passwordUpdated: تم تغيير كلمة المرور
|
||||
permissions: الصلاحيات
|
||||
permissionsHelp: >
|
||||
يمكنك تعيين المستخدم كـ "مدير" أو تحديد الصلاحيات بشكل منفرد.
|
||||
إذا قمت بتحديد المستخدم كـ "مدير"، باقي الخيارات سيتم تحديدها تلقائياً.
|
||||
إدارة المستخدمين تبقى صلاحية فريدة للـ "مدير" فقط.
|
||||
profileSettings: إعدادات الحساب
|
||||
ruleExample1: >
|
||||
منع الوصول إلى الملفات التي تبدأ بنقطة مثل (.git، و .gitignore) في كل مجلد.
|
||||
ruleExample2: منع الوصول إلى الملف المسمى Caddyfile في نطاق الجذر.
|
||||
rules: المجموعات
|
||||
rulesHelp1: >
|
||||
يمكنك هنا تحديد مجموعة من شروط السماح والمنع لهذا المستخدم.
|
||||
الملفات الممنوعة لن تظهر ضمن القائمة لهذا المستخدم ولن يستطيع الوصول لها.
|
||||
هنا ندعم الـ regex والـ relative path لنطاق المستخدمين.
|
||||
rulesHelp2: >
|
||||
كل مجموعة يجب ان تكون في سطر منفرد وتبدأ بالكلمة المفتاحية {0} أو {1}.
|
||||
ثم تقوم بكتابة {2} إذا كنت تستخدم regex وبعدها التعبير او المسار.
|
||||
scope: نطاق
|
||||
settingsUpdated: تم تعديل الإعدادات
|
||||
user: المستخدم
|
||||
userCommands: الأوامر
|
||||
userCommandsHelp: >
|
||||
الأوامر المتاحة لهذا المستخدم مفصولة فيما بينها بمسافة.
|
||||
مثال:
|
||||
userCreated: تم إنشاء المستخدم
|
||||
userDeleted: تم حذف المستخدم
|
||||
userManagement: إدارة المستخدمين
|
||||
username: إسم المستخدم
|
||||
users: المستخدمين
|
||||
userUpdated: تم تعديل المستخدم
|
||||
sidebar:
|
||||
help: مساعدة
|
||||
logout: تسجيل خروج
|
||||
myFiles: ملفاتي
|
||||
newFile: ملف جديد
|
||||
newFolder: مجلد جديد
|
||||
settings: الإعدادات
|
||||
siteSettings: إعدادات الموقع
|
||||
hugoNew: هيوجو جديد
|
||||
preview: معاينة
|
||||
search:
|
||||
images: الصور
|
||||
music: الموسيقى
|
||||
notSupportedCommand: هذا الأمر غير متاح.
|
||||
pdf: PDF
|
||||
pressToExecute: إغضط زر Enter للتنفيذ.
|
||||
pressToSearch: إضغط زر Enter للبحث.
|
||||
search: البحث...
|
||||
searchOrCommand: إبحث او قم بتنفيذ أمر...
|
||||
searchOrSupportedCommand: 'إبحث او قم باضافة بادئة ''$'' واستخدم واحد من الاوامر الخاصة بك:'
|
||||
typeCommand: أكتب واضغط Enter للتنفيذ.
|
||||
typeSearch: أكتب واضغط Enter للبحث.
|
||||
types: الأنواع
|
||||
video: فيديوهات
|
||||
writeToSearch: أكتب هنا للبحث
|
||||
languages:
|
||||
ar: العربية
|
||||
en: English
|
||||
it: Italiano
|
||||
fr: Français
|
||||
pt: Português
|
||||
ptBR: Português (Brasil)
|
||||
ja: 日本語
|
||||
zhCN: 中文 (简体)
|
||||
zhTW: 中文 (繁體)
|
||||
es: Español
|
||||
de: Deutsch
|
||||
ru: Русский
|
||||
pl: Polski
|
||||
ko: 한국어
|
||||
time:
|
||||
unit: وحدة الوقت
|
||||
seconds: ثواني
|
||||
minutes: دقائق
|
||||
hours: ساعات
|
||||
days: أيام
|
||||
233
src/i18n/de.json
Normal file
233
src/i18n/de.json
Normal file
@@ -0,0 +1,233 @@
|
||||
{
|
||||
"permanent": "Permanent",
|
||||
"buttons": {
|
||||
"cancel": "Abbrechen",
|
||||
"close": "Schließen",
|
||||
"copy": "Kopieren",
|
||||
"copyFile": "Kopiere Datei",
|
||||
"copyToClipboard": "In Zwischenablage kopieren",
|
||||
"create": "Neu",
|
||||
"delete": "Löschen",
|
||||
"download": "Downloaden",
|
||||
"info": "Info",
|
||||
"more": "mehr",
|
||||
"move": "Verschieben",
|
||||
"moveFile": "Verschiebe Datei",
|
||||
"new": "Neu",
|
||||
"next": "nächste",
|
||||
"ok": "OK",
|
||||
"replace": "Ersetzen",
|
||||
"previous": "vorherige",
|
||||
"rename": "umbenennen",
|
||||
"reportIssue": "Fehler melden",
|
||||
"save": "Speichern",
|
||||
"search": "Suchen",
|
||||
"select": "Auswählen",
|
||||
"share": "Teilen",
|
||||
"publish": "Veröffentlichen",
|
||||
"selectMultiple": "Mehrfachauswahl",
|
||||
"schedule": "Planung",
|
||||
"switchView": "Ansicht wechseln",
|
||||
"toggleSidebar": "Seitenleiste anzeigen",
|
||||
"update": "Update",
|
||||
"upload": "Upload",
|
||||
"permalink": "permanenten Verweis anzeigen"
|
||||
},
|
||||
"success": {
|
||||
"linkCopied": "Verweis wurde kopiert !"
|
||||
},
|
||||
"errors": {
|
||||
"forbidden": "Sie verfügen nicht über die nötigen Rechte!",
|
||||
"internal": "Etwas ist schief gelaufen.",
|
||||
"notFound": "Dieser Ort kann nicht angezeigt werden."
|
||||
},
|
||||
"files": {
|
||||
"folders": "Ordner",
|
||||
"files": "Dateien",
|
||||
"body": "Body",
|
||||
"clear": "Clear",
|
||||
"closePreview": "Vorschau schließen",
|
||||
"home": "Home",
|
||||
"lastModified": "zuletzt verändert",
|
||||
"loading": "Lade...",
|
||||
"lonely": "Hier scheint nichts zu sein...",
|
||||
"metadata": "Metadaten",
|
||||
"multipleSelectionEnabled": "Mehrfachauswahl ausgewählt",
|
||||
"name": "Name",
|
||||
"size": "Größe",
|
||||
"sortByName": "Nach Namen sortieren",
|
||||
"sortBySize": "Nach Größe sortieren",
|
||||
"sortByLastModified": "Nach Änderungsdatum sortieren"
|
||||
},
|
||||
"help": {
|
||||
"click": "wähle Datei oder Ordner",
|
||||
"ctrl": {
|
||||
"click": "markiere mehrere Dateien oder Ordner",
|
||||
"f": "öffnet eine neue Suche",
|
||||
"s": "speichert eine Datei oder einen Ordner am akutellen Ort"
|
||||
},
|
||||
"del": "löscht die ausgewählten Elemente",
|
||||
"doubleClick": "öffnet eine Datei oder einen Ordner",
|
||||
"esc": "Auswahl zurücksetzen und/oder Dialog schließen",
|
||||
"f1": "diese Informationsseite",
|
||||
"f2": "Datei umbenennen",
|
||||
"help": "Hilfe"
|
||||
},
|
||||
"login": {
|
||||
"password": "Passwort",
|
||||
"passwordConfirm": "Password Confirmation",
|
||||
"submit": "Login",
|
||||
"createAnAccount": "Create an account",
|
||||
"loginInstead": "Already have an account",
|
||||
"passwordsDontMatch": "Passwords don't match",
|
||||
"usernameTaken": "Username already taken",
|
||||
"signup": "Signup",
|
||||
"username": "Benutzername",
|
||||
"wrongCredentials": "Falsche Zugangsdaten"
|
||||
},
|
||||
"prompts": {
|
||||
"copy": "Kopieren",
|
||||
"copyMessage": "Wählen Sie einen Zielort zum Kopieren:",
|
||||
"currentlyNavigating": "Aktueller Ort:",
|
||||
"deleteMessageMultiple": "Sind Sie sicher, dass Sie {count} Datei(en) löschen möchten?",
|
||||
"deleteMessageSingle": "Sind Sie sicher, dass Sie diesen Ordner/diese Datei löschen möchten?",
|
||||
"deleteTitle": "Lösche Dateien",
|
||||
"displayName": "Display Name:",
|
||||
"download": "Lade Dateien",
|
||||
"downloadMessage": "Wählen Sie ein Format zum downloaden aus.",
|
||||
"error": "Etwas ist schief gelaufen",
|
||||
"fileInfo": "Dateiinformation",
|
||||
"filesSelected": "{count} Dateien ausgewählt.",
|
||||
"lastModified": "Zuletzt geändert",
|
||||
"move": "Verschieben",
|
||||
"moveMessage": "Choose new house for your file(s)/folder(s):",
|
||||
"newDir": "Neuer Ordner",
|
||||
"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",
|
||||
"replace": "Ersetzen",
|
||||
"replaceMessage": "Eine der Datei mit dem gleichen Namen, wie die Sie hochladen wollen, existiert bereits. Soll die vorhandene Datei ersetzt werden ?\n",
|
||||
"rename": "Umbenennen",
|
||||
"renameMessage": "Fügen Sie einen Namen ein für",
|
||||
"show": "Anzeigen",
|
||||
"size": "Größe",
|
||||
"schedule": "Plan",
|
||||
"scheduleMessage": "Wählen Sie ein Datum und eine Zeit für die Veröffentlichung dieses Beitrags.",
|
||||
"newArchetype": "Erstelle neuen Beitrag auf dem Archetyp. Ihre Datei wird im Inhalteordner erstellt."
|
||||
},
|
||||
"settings": {
|
||||
"instanceName": "Instance name",
|
||||
"brandingDirectoryPath": "Branding directory path",
|
||||
"documentation": "documentation",
|
||||
"branding": "Branding",
|
||||
"disableExternalLinks": "Disable external links (except documentation)",
|
||||
"brandingHelp": "You can costumize how your File Browser instance looks and feels by changing its name, replacing the logo, adding custom styles and even disable external links to GitHub.\nFor more information about custom branding, please check out the {0}.",
|
||||
"admin": "Admin",
|
||||
"administrator": "Administrator",
|
||||
"allowCommands": "Befehle ausführen",
|
||||
"allowEdit": "Bearbeiten, Umbenennen und Löschen von Dateien oder Ordnern",
|
||||
"allowNew": "Erstellen neuer Dateien und Ordner",
|
||||
"allowPublish": "Veröffentlichen von neuen Beiträgen und Seiten",
|
||||
"avoidChanges": "(leer lassen um Änderungen zu vermeiden)",
|
||||
"changePassword": "Ändere das Passwort",
|
||||
"commandRunner": "Command runner",
|
||||
"commandRunnerHelp": "Here you can set commands that are executed in the named events. You must write one per line. The environment variables {0} and {1} will be available, being {0} relative to {1}. For more information about this feature and the available environment variables, please read the {2}.",
|
||||
"commandsUpdated": "Befehle aktualisiert!",
|
||||
"customStylesheet": "Individuelles Stylesheet",
|
||||
"examples": "Beispiele",
|
||||
"globalSettings": "Globale Einstellungen",
|
||||
"language": "Sprache",
|
||||
"lockPassword": "Verhindere, dass der Benutzer sein Passwort ändert",
|
||||
"newPassword": "Ihr neues Passwort.",
|
||||
"newPasswordConfirm": "Bestätigen Sie Ihr neues Passwort",
|
||||
"newUser": "Neuer Benutzer",
|
||||
"password": "Passwort",
|
||||
"passwordUpdated": "Passwort aktualisiert!",
|
||||
"permissions": "Berechtigungen",
|
||||
"permissionsHelp": "Sie können einem Benutzer Administratorrechte einräumen oder die Berechtigunen individuell festlegen. Wenn Sie \"Administrator\" auswählen, werden alle anderen Rechte automatisch vergeben. Die Nutzerverwaltung kann nur durch einen Administrator erfolgen.\n",
|
||||
"profileSettings": "Profileinstellungen",
|
||||
"ruleExample1": "Verhindert den Zugang zu dot Dateien (dot Files, wie .git, .gitignore) in allen Ordnern\n",
|
||||
"ruleExample2": "blockiert den Zugang auf Dateien mit dem Namen Caddyfile in der Wurzel/Basis des scopes.",
|
||||
"rules": "Regeln",
|
||||
"rulesHelp": "Hier können Sie erlaubte und verbotene Aktionen für einen einzelnen Benutzer festlegen. Bockierte Dateien werden nicht im Listing angezeigt und sind nicht erreichbar für den Nutzer. Wir unterstützen reguläre Ausdrücke (Regex) und Pfade die relativ zum Benutzerordner sind. \n",
|
||||
"scope": "Scope",
|
||||
"settingsUpdated": "Einstellungen aktualisiert!",
|
||||
"user": "Benutzer",
|
||||
"userCommands": "Befehle",
|
||||
"userCommandsHelp": "Eine Liste, mit einem Leerzeichen als Trennung, mit den für diesen Nutzer verfügbaren Befehlen. Example:\n",
|
||||
"userCreated": "Benutzer angelegt!",
|
||||
"userDeleted": "Benutzer gelöscht!",
|
||||
"userManagement": "Benutzerverwaltung",
|
||||
"username": "Nutzername",
|
||||
"users": "Nutzer",
|
||||
"globalRules": "This is a global set of allow and disallow rules. They apply to every user. You can define specific rules on each user's settings to override this ones.",
|
||||
"allowSignup": "Allow users to signup",
|
||||
"insertRegex": "Insert regex expression",
|
||||
"insertPath": "Insert the path",
|
||||
"userUpdated": "Benutzer aktualisiert!",
|
||||
"generalSettings": "General settings",
|
||||
"userDefaults": "User default settings",
|
||||
"defaultUserDescription": "This are the default settings for new users.",
|
||||
"perm": {
|
||||
"create": "Create files and directories",
|
||||
"delete": "Delete files and directories",
|
||||
"download": "Download",
|
||||
"edit": "Edit files",
|
||||
"execute": "Execute commands",
|
||||
"rename": "Rename or move files and directories",
|
||||
"share": "Share files"
|
||||
}
|
||||
},
|
||||
"sidebar": {
|
||||
"help": "Hilfe",
|
||||
"logout": "Logout",
|
||||
"myFiles": "Meine Dateien",
|
||||
"newFile": "Neue Datei",
|
||||
"newFolder": "Neuer Ordner",
|
||||
"settings": "Einstellungen",
|
||||
"siteSettings": "Seiteneinstellungen",
|
||||
"hugoNew": "Hugo Neu",
|
||||
"preview": "Vorschau"
|
||||
},
|
||||
"search": {
|
||||
"images": "Bilder",
|
||||
"music": "Musik",
|
||||
"notSupportedCommand": "This is a not supported command.",
|
||||
"pdf": "PDF",
|
||||
"pressToExecute": "Drücken Sie Enter zum Ausführen.",
|
||||
"pressToSearch": "Drücken Sie Enter zum Suchen.",
|
||||
"search": "Suche...",
|
||||
"searchOrCommand": "Suche oder führe Befehl aus...",
|
||||
"searchOrSupportedCommand": "Suche oder nutze eines Ihrer verfügbaren Befehle:",
|
||||
"typeCommand": "Type and press enter to execute.",
|
||||
"typeSearch": "Type and press enter to search.",
|
||||
"types": "Typen",
|
||||
"video": "Video",
|
||||
"writeToSearch": "Hier schreiben zum Suchen"
|
||||
},
|
||||
"languages": {
|
||||
"ar": "العربية",
|
||||
"en": "English",
|
||||
"it": "Italiano",
|
||||
"fr": "Français",
|
||||
"pt": "Português",
|
||||
"ptBR": "Português (Brasil)",
|
||||
"ja": "日本語",
|
||||
"zhCN": "中文 (简体)",
|
||||
"zhTW": "中文 (繁體)",
|
||||
"es": "Español",
|
||||
"de": "Deutsch",
|
||||
"ru": "Русский",
|
||||
"pl": "Polski",
|
||||
"ko": "한국어"
|
||||
},
|
||||
"time": {
|
||||
"unit": "Zeiteinheit",
|
||||
"seconds": "Sekunden",
|
||||
"minutes": "Minuten",
|
||||
"hours": "Stunden",
|
||||
"days": "Tage"
|
||||
}
|
||||
}
|
||||
205
src/i18n/de.yaml
205
src/i18n/de.yaml
@@ -1,205 +0,0 @@
|
||||
permanent: Permanent
|
||||
buttons:
|
||||
cancel: Abbrechen
|
||||
close: Schließen
|
||||
copy: Kopieren
|
||||
copyFile: Kopiere Datei
|
||||
copyToClipboard: In Zwischenablage kopieren
|
||||
create: Neu
|
||||
delete: Löschen
|
||||
download: Downloaden
|
||||
info: Info
|
||||
more: mehr
|
||||
move: Verschieben
|
||||
moveFile: Verschiebe Datei
|
||||
new: Neu
|
||||
next: nächste
|
||||
ok: OK
|
||||
replace: Ersetzen
|
||||
previous: vorherige
|
||||
rename: umbenennen
|
||||
reportIssue: Fehler melden
|
||||
save: Speichern
|
||||
search: Suchen
|
||||
select: Auswählen
|
||||
share: Teilen
|
||||
publish: Veröffentlichen
|
||||
selectMultiple: Mehrfachauswahl
|
||||
schedule: Planung
|
||||
switchView: Ansicht wechseln
|
||||
toggleSidebar: Seitenleiste anzeigen
|
||||
update: Update
|
||||
upload: Upload
|
||||
permalink: permanenten Verweis anzeigen
|
||||
success:
|
||||
linkCopied: Verweis wurde kopiert !
|
||||
errors:
|
||||
forbidden: Sie verfügen nicht über die nötigen Rechte!
|
||||
internal: Etwas ist schief gelaufen.
|
||||
notFound: Dieser Ort kann nicht angezeigt werden.
|
||||
files:
|
||||
folders: Ordner
|
||||
files: Dateien
|
||||
body: Body
|
||||
clear: Clear
|
||||
closePreview: Vorschau schließen
|
||||
home: Home
|
||||
lastModified: zuletzt verändert
|
||||
loading: Lade...
|
||||
lonely: Hier scheint nichts zu sein...
|
||||
metadata: Metadaten
|
||||
multipleSelectionEnabled: Mehrfachauswahl ausgewählt
|
||||
name: Name
|
||||
size: Größe
|
||||
sortByName: Nach Namen sortieren
|
||||
sortBySize: Nach Größe sortieren
|
||||
sortByLastModified: Nach Änderungsdatum sortieren
|
||||
help:
|
||||
click: wähle Datei oder Ordner
|
||||
ctrl:
|
||||
click: markiere mehrere Dateien oder Ordner
|
||||
f: öffnet eine neue Suche
|
||||
s: speichert eine Datei oder einen Ordner am akutellen Ort
|
||||
del: löscht die ausgewählten Elemente
|
||||
doubleClick: öffnet eine Datei oder einen Ordner
|
||||
esc: Auswahl zurücksetzen und/oder Dialog schließen
|
||||
f1: diese Informationsseite
|
||||
f2: Datei umbenennen
|
||||
help: Hilfe
|
||||
login:
|
||||
password: Passwort
|
||||
submit: Login
|
||||
username: Benutzername
|
||||
wrongCredentials: Falsche Zugangsdaten
|
||||
prompts:
|
||||
copy: Kopieren
|
||||
copyMessage: 'Wählen Sie einen Zielort zum Kopieren:'
|
||||
currentlyNavigating: 'Aktueller Ort:'
|
||||
deleteMessageMultiple: Sind Sie sicher, dass Sie {count} Datei(en) löschen möchten?
|
||||
deleteMessageSingle: Sind Sie sicher, dass Sie diesen Ordner/diese Datei löschen möchten?
|
||||
deleteTitle: Lösche Dateien
|
||||
displayName: 'Display Name:'
|
||||
download: Lade Dateien
|
||||
downloadMessage: Wählen Sie ein Format zum downloaden aus.
|
||||
error: Etwas ist schief gelaufen
|
||||
fileInfo: Dateiinformation
|
||||
filesSelected: "{count} Dateien ausgewählt."
|
||||
lastModified: Zuletzt geändert
|
||||
move: Verschieben
|
||||
moveMessage: 'Choose new house for your file(s)/folder(s):'
|
||||
newDir: Neuer Ordner
|
||||
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
|
||||
replace: Ersetzen
|
||||
replaceMessage: >
|
||||
Eine der Datei mit dem gleichen Namen, wie die Sie hochladen wollen,
|
||||
existiert bereits. Soll die vorhandene Datei ersetzt werden ?
|
||||
rename: Umbenennen
|
||||
renameMessage: Fügen Sie einen Namen ein für
|
||||
show: Anzeigen
|
||||
size: Größe
|
||||
schedule: Plan
|
||||
scheduleMessage: Wählen Sie ein Datum und eine Zeit für die Veröffentlichung dieses Beitrags.
|
||||
newArchetype: Erstelle neuen Beitrag auf dem Archetyp. Ihre Datei wird im Inhalteordner erstellt.
|
||||
settings:
|
||||
admin: Admin
|
||||
administrator: Administrator
|
||||
allowCommands: Befehle ausführen
|
||||
allowEdit: Bearbeiten, Umbenennen und Löschen von Dateien oder Ordnern
|
||||
allowNew: Erstellen neuer Dateien und Ordner
|
||||
allowPublish: Veröffentlichen von neuen Beiträgen und Seiten
|
||||
avoidChanges: "(leer lassen um Änderungen zu vermeiden)"
|
||||
changePassword: Ändere das Passwort
|
||||
commands: Befehle
|
||||
commandsHelp: >
|
||||
Hier können Befehle benannt werden, die bei Ereignissen ausgeführt werden.
|
||||
Man schreibt einen Befehl pro Zeile. Wenn ein Befehl einen Dateinamen benötigt, wie vor oder
|
||||
nach dem Speichern, ist die Umgebungsvariable "FILE" mit dem Pfad der Datei verfügbar.
|
||||
commandsUpdated: Befehle aktualisiert!
|
||||
customStylesheet: Individuelles Stylesheet
|
||||
examples: Beispiele
|
||||
globalSettings: Globale Einstellungen
|
||||
language: Sprache
|
||||
lockPassword: Verhindere, dass der Benutzer sein Passwort ändert
|
||||
newPassword: Ihr neues Passwort.
|
||||
newPasswordConfirm: Bestätigen Sie Ihr neues Passwort
|
||||
newUser: Neuer Benutzer
|
||||
password: Passwort
|
||||
passwordUpdated: Passwort aktualisiert!
|
||||
permissions: Berechtigungen
|
||||
permissionsHelp: >
|
||||
Sie können einem Benutzer Administratorrechte einräumen oder die Berechtigunen individuell festlegen.
|
||||
Wenn Sie "Administrator" auswählen, werden alle anderen Rechte automatisch vergeben.
|
||||
Die Nutzerverwaltung kann nur durch einen Administrator erfolgen.
|
||||
profileSettings: Profileinstellungen
|
||||
ruleExample1: >
|
||||
Verhindert den Zugang zu dot Dateien (dot Files, wie .git, .gitignore) in allen Ordnern
|
||||
ruleExample2: blockiert den Zugang auf Dateien mit dem Namen Caddyfile in der Wurzel/Basis des scopes.
|
||||
rules: Regeln
|
||||
rulesHelp1: >
|
||||
Hier können Sie erlaubte und verbotene Aktionen für einen einzelnen Benutzer festlegen.
|
||||
Bockierte Dateien werden nicht im Listing angezeigt und sind nicht erreichbar für den Nutzer.
|
||||
Wir unterstützen reguläre Ausdrücke (Regex) und Pfade die relativ zum Benutzerordner sind.
|
||||
rulesHelp2: >
|
||||
Jede Regel hat seine eigene Zeile und beginnt mit dem Schlüsselwort {0} oder {1}.
|
||||
Wenn ein regulärer Ausdruck verwendet wird folgt {2} mit dem Ausdruck oder dem Pfad.
|
||||
scope: Scope
|
||||
settingsUpdated: Einstellungen aktualisiert!
|
||||
user: Benutzer
|
||||
userCommands: Befehle
|
||||
userCommandsHelp: >
|
||||
Eine Liste, mit einem Leerzeichen als Trennung, mit den für diesen Nutzer verfügbaren Befehlen.
|
||||
Example:
|
||||
userCreated: Benutzer angelegt!
|
||||
userDeleted: Benutzer gelöscht!
|
||||
userManagement: Benutzerverwaltung
|
||||
username: Nutzername
|
||||
users: Nutzer
|
||||
userUpdated: Benutzer aktualisiert!
|
||||
sidebar:
|
||||
help: Hilfe
|
||||
logout: Logout
|
||||
myFiles: Meine Dateien
|
||||
newFile: Neue Datei
|
||||
newFolder: Neuer Ordner
|
||||
settings: Einstellungen
|
||||
siteSettings: Seiteneinstellungen
|
||||
hugoNew: Hugo Neu
|
||||
preview: Vorschau
|
||||
search:
|
||||
images: Bilder
|
||||
music: Musik
|
||||
pdf: PDF
|
||||
pressToExecute: Drücken Sie Enter zum Ausführen.
|
||||
pressToSearch: Drücken Sie Enter zum Suchen.
|
||||
search: Suche...
|
||||
searchOrCommand: Suche oder führe Befehl aus...
|
||||
searchOrSupportedCommand: 'Suche oder nutze eines Ihrer verfügbaren Befehle:'
|
||||
type: Tippen und mit Enter bestätigen zum Suchen.
|
||||
types: Typen
|
||||
video: Video
|
||||
writeToSearch: Hier schreiben zum Suchen
|
||||
languages:
|
||||
ar: العربية
|
||||
en: English
|
||||
it: Italiano
|
||||
fr: Français
|
||||
pt: Português
|
||||
ptBR: Português (Brasil)
|
||||
ja: 日本語
|
||||
zhCN: 中文 (简体)
|
||||
zhTW: 中文 (繁體)
|
||||
es: Español
|
||||
de: Deutsch
|
||||
ru: Русский
|
||||
pl: Polski
|
||||
ko: 한국어
|
||||
time:
|
||||
unit: Zeiteinheit
|
||||
seconds: Sekunden
|
||||
minutes: Minuten
|
||||
hours: Stunden
|
||||
days: Tage
|
||||
235
src/i18n/en.json
Normal file
235
src/i18n/en.json
Normal file
@@ -0,0 +1,235 @@
|
||||
{
|
||||
"permanent": "Permanent",
|
||||
"buttons": {
|
||||
"shell": "Toggle shell",
|
||||
"cancel": "Cancel",
|
||||
"close": "Close",
|
||||
"copy": "Copy",
|
||||
"copyFile": "Copy file",
|
||||
"copyToClipboard": "Copy to clipboard",
|
||||
"create": "Create",
|
||||
"delete": "Delete",
|
||||
"download": "Download",
|
||||
"info": "Info",
|
||||
"more": "More",
|
||||
"move": "Move",
|
||||
"moveFile": "Move file",
|
||||
"new": "New",
|
||||
"next": "Next",
|
||||
"ok": "OK",
|
||||
"replace": "Replace",
|
||||
"previous": "Previous",
|
||||
"rename": "Rename",
|
||||
"reportIssue": "Report Issue",
|
||||
"save": "Save",
|
||||
"search": "Search",
|
||||
"select": "Select",
|
||||
"share": "Share",
|
||||
"publish": "Publish",
|
||||
"selectMultiple": "Select multiple",
|
||||
"schedule": "Schedule",
|
||||
"switchView": "Switch view",
|
||||
"toggleSidebar": "Toggle sidebar",
|
||||
"update": "Update",
|
||||
"upload": "Upload",
|
||||
"permalink": "Get Permanent Link"
|
||||
},
|
||||
"success": {
|
||||
"linkCopied": "Link copied!"
|
||||
},
|
||||
"errors": {
|
||||
"forbidden": "You don't have permissions to access this.",
|
||||
"internal": "Something really went wrong.",
|
||||
"notFound": "This location can't be reached."
|
||||
},
|
||||
"files": {
|
||||
"folders": "Folders",
|
||||
"files": "Files",
|
||||
"body": "Body",
|
||||
"clear": "Clear",
|
||||
"closePreview": "Close preview",
|
||||
"home": "Home",
|
||||
"lastModified": "Last modified",
|
||||
"loading": "Loading...",
|
||||
"lonely": "It feels lonely here...",
|
||||
"metadata": "Metadata",
|
||||
"multipleSelectionEnabled": "Multiple selection enabled",
|
||||
"name": "Name",
|
||||
"size": "Size",
|
||||
"sortByName": "Sort by name",
|
||||
"sortBySize": "Sort by size",
|
||||
"sortByLastModified": "Sort by last modified"
|
||||
},
|
||||
"help": {
|
||||
"click": "select file or directory",
|
||||
"ctrl": {
|
||||
"click": "select multiple files or directories",
|
||||
"f": "opens search",
|
||||
"s": "save a file or download the directory where you are"
|
||||
},
|
||||
"del": "delete selected items",
|
||||
"doubleClick": "open a file or directory",
|
||||
"esc": "clear selection and/or close the prompt",
|
||||
"f1": "this information",
|
||||
"f2": "rename file",
|
||||
"help": "Help"
|
||||
},
|
||||
"login": {
|
||||
"password": "Password",
|
||||
"passwordConfirm": "Password Confirmation",
|
||||
"submit": "Login",
|
||||
"createAnAccount": "Create an account",
|
||||
"loginInstead": "Already have an account",
|
||||
"passwordsDontMatch": "Passwords don't match",
|
||||
"usernameTaken": "Username already taken",
|
||||
"signup": "Signup",
|
||||
"username": "Username",
|
||||
"wrongCredentials": "Wrong credentials"
|
||||
},
|
||||
"prompts": {
|
||||
"copy": "Copy",
|
||||
"copyMessage": "Choose the place to copy your files:",
|
||||
"currentlyNavigating": "Currently navigating on:",
|
||||
"deleteMessageMultiple": "Are you sure you want to delete {count} file(s)?",
|
||||
"deleteMessageSingle": "Are you sure you want to delete this file/folder?",
|
||||
"deleteTitle": "Delete files",
|
||||
"displayName": "Display Name:",
|
||||
"download": "Download files",
|
||||
"downloadMessage": "Choose the format you want to download.",
|
||||
"error": "Something went wrong",
|
||||
"fileInfo": "File information",
|
||||
"filesSelected": "{count} files selected.",
|
||||
"lastModified": "Last Modified",
|
||||
"move": "Move",
|
||||
"moveMessage": "Choose new house for your file(s)/folder(s):",
|
||||
"newDir": "New directory",
|
||||
"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",
|
||||
"replace": "Replace",
|
||||
"replaceMessage": "One of the files you're trying to upload is conflicting because of its name. Do you wish to replace the existing one?\n",
|
||||
"rename": "Rename",
|
||||
"renameMessage": "Insert a new name for",
|
||||
"show": "Show",
|
||||
"size": "Size",
|
||||
"schedule": "Schedule",
|
||||
"scheduleMessage": "Pick a date and time to schedule the publication of this post.",
|
||||
"newArchetype": "Create a new post based on an archetype. Your file will be created on content folder."
|
||||
},
|
||||
"settings": {
|
||||
"instanceName": "Instance name",
|
||||
"brandingDirectoryPath": "Branding directory path",
|
||||
"documentation": "documentation",
|
||||
"branding": "Branding",
|
||||
"disableExternalLinks": "Disable external links (except documentation)",
|
||||
"brandingHelp": "You can costumize how your File Browser instance looks and feels by changing its name, replacing the logo, adding custom styles and even disable external links to GitHub.\nFor more information about custom branding, please check out the {0}.",
|
||||
"admin": "Admin",
|
||||
"administrator": "Administrator",
|
||||
"allowCommands": "Execute commands",
|
||||
"allowEdit": "Edit, rename and delete files or directories",
|
||||
"allowNew": "Create new files and directories",
|
||||
"allowPublish": "Publish new posts and pages",
|
||||
"avoidChanges": "(leave blank to avoid changes)",
|
||||
"changePassword": "Change Password",
|
||||
"commandRunner": "Command runner",
|
||||
"commandRunnerHelp": "Here you can set commands that are executed in the named events. You must write one per line. The environment variables {0} and {1} will be available, being {0} relative to {1}. For more information about this feature and the available environment variables, please read the {2}.",
|
||||
"commandsUpdated": "Commands updated!",
|
||||
"customStylesheet": "Custom Stylesheet",
|
||||
"examples": "Examples",
|
||||
"globalSettings": "Global Settings",
|
||||
"language": "Language",
|
||||
"lockPassword": "Prevent the user from changing the password",
|
||||
"newPassword": "Your new password",
|
||||
"newPasswordConfirm": "Confirm your new password",
|
||||
"newUser": "New User",
|
||||
"password": "Password",
|
||||
"passwordUpdated": "Password updated!",
|
||||
"permissions": "Permissions",
|
||||
"permissionsHelp": "You can set the user to be an administrator or choose the permissions individually. If you select \"Administrator\", all of the other options will be automatically checked. The management of users remains a privilege of an administrator.\n",
|
||||
"profileSettings": "Profile Settings",
|
||||
"ruleExample1": "prevents the access to any dot file (such as .git, .gitignore) in every folder.\n",
|
||||
"ruleExample2": "blocks the access to the file named Caddyfile on the root of the scope.",
|
||||
"rules": "Rules",
|
||||
"rulesHelp": "Here you can define a set of allow and disallow rules for this specific user. The blocked files won't show up in the listings and they wont be accessible to the user. We support regex and paths relative to the users scope.\n",
|
||||
"scope": "Scope",
|
||||
"settingsUpdated": "Settings updated!",
|
||||
"user": "User",
|
||||
"userCommands": "Commands",
|
||||
"userCommandsHelp": "A space separated list with the available commands for this user. Example:\n",
|
||||
"userCreated": "User created!",
|
||||
"userDeleted": "User deleted!",
|
||||
"userManagement": "User Management",
|
||||
"username": "Username",
|
||||
"users": "Users",
|
||||
"globalRules": "This is a global set of allow and disallow rules. They apply to every user. You can define specific rules on each user's settings to override this ones.",
|
||||
"allowSignup": "Allow users to signup",
|
||||
"insertRegex": "Insert regex expression",
|
||||
"insertPath": "Insert the path",
|
||||
"userUpdated": "User updated!",
|
||||
"userDefaults": "User default settings",
|
||||
"defaultUserDescription": "This are the default settings for new users.",
|
||||
"executeOnShell": "Execute on shell",
|
||||
"executeOnShellDescription": "By default, File Browser executes the commands by calling their binaries directly. If you want to run them on a shell instead (such as Bash or PowerShell), you can define it here with the required arguments and flags. If set, the command you execute will be appended as an argument. This apply to both user commands and event hooks.",
|
||||
"perm": {
|
||||
"create": "Create files and directories",
|
||||
"delete": "Delete files and directories",
|
||||
"download": "Download",
|
||||
"modify": "Edit files",
|
||||
"execute": "Execute commands",
|
||||
"rename": "Rename or move files and directories",
|
||||
"share": "Share files"
|
||||
}
|
||||
},
|
||||
"sidebar": {
|
||||
"help": "Help",
|
||||
"login": "Login",
|
||||
"signup": "Signup",
|
||||
"logout": "Logout",
|
||||
"myFiles": "My files",
|
||||
"newFile": "New file",
|
||||
"newFolder": "New folder",
|
||||
"settings": "Settings",
|
||||
"siteSettings": "Site Settings",
|
||||
"hugoNew": "Hugo New",
|
||||
"preview": "Preview"
|
||||
},
|
||||
"search": {
|
||||
"images": "Images",
|
||||
"music": "Music",
|
||||
"pdf": "PDF",
|
||||
"types": "Types",
|
||||
"video": "Video",
|
||||
"search": "Search...",
|
||||
"typeToSearch": "Type to search...",
|
||||
"pressToSearch": "Press enter to search..."
|
||||
},
|
||||
"languages": {
|
||||
"ar": "العربية",
|
||||
"en": "English",
|
||||
"it": "Italiano",
|
||||
"fr": "Français",
|
||||
"pt": "Português",
|
||||
"ptBR": "Português (Brasil)",
|
||||
"ja": "日本語",
|
||||
"zhCN": "中文 (简体)",
|
||||
"zhTW": "中文 (繁體)",
|
||||
"es": "Español",
|
||||
"de": "Deutsch",
|
||||
"ru": "Русский",
|
||||
"pl": "Polski",
|
||||
"ko": "한국어"
|
||||
},
|
||||
"time": {
|
||||
"unit": "Time Unit",
|
||||
"seconds": "Seconds",
|
||||
"minutes": "Minutes",
|
||||
"hours": "Hours",
|
||||
"days": "Days"
|
||||
},
|
||||
"download": {
|
||||
"downloadFile": "Download File",
|
||||
"downloadFolder": "Download Folder"
|
||||
}
|
||||
}
|
||||
210
src/i18n/en.yaml
210
src/i18n/en.yaml
@@ -1,210 +0,0 @@
|
||||
permanent: Permanent
|
||||
buttons:
|
||||
cancel: Cancel
|
||||
close: Close
|
||||
copy: Copy
|
||||
copyFile: Copy file
|
||||
copyToClipboard: Copy to clipboard
|
||||
create: Create
|
||||
delete: Delete
|
||||
download: Download
|
||||
info: Info
|
||||
more: More
|
||||
move: Move
|
||||
moveFile: Move file
|
||||
new: New
|
||||
next: Next
|
||||
ok: OK
|
||||
replace: Replace
|
||||
previous: Previous
|
||||
rename: Rename
|
||||
reportIssue: Report Issue
|
||||
save: Save
|
||||
search: Search
|
||||
select: Select
|
||||
share: Share
|
||||
publish: Publish
|
||||
selectMultiple: Select multiple
|
||||
schedule: Schedule
|
||||
switchView: Switch view
|
||||
toggleSidebar: Toggle sidebar
|
||||
update: Update
|
||||
upload: Upload
|
||||
permalink: Get Permanent Link
|
||||
success:
|
||||
linkCopied: Link copied!
|
||||
errors:
|
||||
forbidden: You're not welcome here.
|
||||
internal: Something really went wrong.
|
||||
notFound: This location can't be reached.
|
||||
files:
|
||||
folders: Folders
|
||||
files: Files
|
||||
body: Body
|
||||
clear: Clear
|
||||
closePreview: Close preview
|
||||
home: Home
|
||||
lastModified: Last modified
|
||||
loading: Loading...
|
||||
lonely: It feels lonely here...
|
||||
metadata: Metadata
|
||||
multipleSelectionEnabled: Multiple selection enabled
|
||||
name: Name
|
||||
size: Size
|
||||
sortByName: Sort by name
|
||||
sortBySize: Sort by size
|
||||
sortByLastModified: Sort by last modified
|
||||
help:
|
||||
click: select file or directory
|
||||
ctrl:
|
||||
click: select multiple files or directories
|
||||
f: opens search
|
||||
s: save a file or download the directory where you are
|
||||
del: delete selected items
|
||||
doubleClick: open a file or directory
|
||||
esc: clear selection and/or close the prompt
|
||||
f1: this information
|
||||
f2: rename file
|
||||
help: Help
|
||||
login:
|
||||
password: Password
|
||||
submit: Login
|
||||
username: Username
|
||||
wrongCredentials: Wrong credentials
|
||||
prompts:
|
||||
copy: Copy
|
||||
copyMessage: 'Choose the place to copy your files:'
|
||||
currentlyNavigating: 'Currently navigating on:'
|
||||
deleteMessageMultiple: Are you sure you want to delete {count} file(s)?
|
||||
deleteMessageSingle: Are you sure you want to delete this file/folder?
|
||||
deleteTitle: Delete files
|
||||
displayName: 'Display Name:'
|
||||
download: Download files
|
||||
downloadMessage: Choose the format you want to download.
|
||||
error: Something went wrong
|
||||
fileInfo: File information
|
||||
filesSelected: "{count} files selected."
|
||||
lastModified: Last Modified
|
||||
move: Move
|
||||
moveMessage: 'Choose new house for your file(s)/folder(s):'
|
||||
newDir: New directory
|
||||
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
|
||||
replace: Replace
|
||||
replaceMessage: >
|
||||
One of the files you're trying to upload is conflicting because of its name.
|
||||
Do you wish to replace the existing one?
|
||||
rename: Rename
|
||||
renameMessage: Insert a new name for
|
||||
show: Show
|
||||
size: Size
|
||||
schedule: Schedule
|
||||
scheduleMessage: Pick a date and time to schedule the publication of this post.
|
||||
newArchetype: Create a new post based on an archetype. Your file will be created on content folder.
|
||||
settings:
|
||||
admin: Admin
|
||||
administrator: Administrator
|
||||
allowCommands: Execute commands
|
||||
allowEdit: Edit, rename and delete files or directories
|
||||
allowNew: Create new files and directories
|
||||
allowPublish: Publish new posts and pages
|
||||
avoidChanges: "(leave blank to avoid changes)"
|
||||
changePassword: Change Password
|
||||
commands: Commands
|
||||
commandsHelp: >
|
||||
Here you can set commands that are executed in the named events. You
|
||||
write one command per line. If the event is related to files, such as before and
|
||||
after saving, the environment variable "FILE" will be available with the path
|
||||
of the file.
|
||||
commandsUpdated: Commands updated!
|
||||
customStylesheet: Custom Stylesheet
|
||||
examples: Examples
|
||||
globalSettings: Global Settings
|
||||
language: Language
|
||||
lockPassword: Prevent the user from changing the password
|
||||
newPassword: Your new password
|
||||
newPasswordConfirm: Confirm your new password
|
||||
newUser: New User
|
||||
password: Password
|
||||
passwordUpdated: Password updated!
|
||||
permissions: Permissions
|
||||
permissionsHelp: >
|
||||
You can set the user to be an administrator or choose the permissions
|
||||
individually. If you select "Administrator", all of the other options will be
|
||||
automatically checked. The management of users remains a privilege of an administrator.
|
||||
profileSettings: Profile Settings
|
||||
ruleExample1: >
|
||||
prevents the access to any dot file (such as .git, .gitignore) in
|
||||
every folder.
|
||||
ruleExample2: blocks the access to the file named Caddyfile on the root of the scope.
|
||||
rules: Rules
|
||||
rulesHelp1: >
|
||||
Here you can define a set of allow and disallow rules for this specific
|
||||
user. The blocked files won't show up in the listings and they wont be accessible
|
||||
to the user. We support regex and paths relative to the users scope.
|
||||
rulesHelp2: >
|
||||
Each rule goes in one different line and must start with the keyword
|
||||
{0} or {1}. Then you should write {2} if you are using a regular expression and
|
||||
then the expression or the path.
|
||||
scope: Scope
|
||||
settingsUpdated: Settings updated!
|
||||
user: User
|
||||
userCommands: Commands
|
||||
userCommandsHelp: >
|
||||
A space separated list with the available commands for this user.
|
||||
Example:
|
||||
userCreated: User created!
|
||||
userDeleted: User deleted!
|
||||
userManagement: User Management
|
||||
username: Username
|
||||
users: Users
|
||||
userUpdated: User updated!
|
||||
sidebar:
|
||||
help: Help
|
||||
logout: Logout
|
||||
myFiles: My files
|
||||
newFile: New file
|
||||
newFolder: New folder
|
||||
settings: Settings
|
||||
siteSettings: Site Settings
|
||||
hugoNew: Hugo New
|
||||
preview: Preview
|
||||
search:
|
||||
images: Images
|
||||
music: Music
|
||||
notSupportedCommand: This is a not supported command.
|
||||
pdf: PDF
|
||||
pressToExecute: Press enter to execute.
|
||||
pressToSearch: Press enter to search.
|
||||
search: Search...
|
||||
searchOrCommand: Search or execute a command...
|
||||
searchOrSupportedCommand: 'Search or prepend ''$'' and use one of your supported commands:'
|
||||
typeCommand: Type and press enter to execute.
|
||||
typeSearch: Type and press enter to search.
|
||||
types: Types
|
||||
video: Video
|
||||
writeToSearch: Write here to search
|
||||
languages:
|
||||
ar: العربية
|
||||
en: English
|
||||
it: Italiano
|
||||
fr: Français
|
||||
pt: Português
|
||||
ptBR: Português (Brasil)
|
||||
ja: 日本語
|
||||
zhCN: 中文 (简体)
|
||||
zhTW: 中文 (繁體)
|
||||
es: Español
|
||||
de: Deutsch
|
||||
ru: Русский
|
||||
pl: Polski
|
||||
ko: 한국어
|
||||
time:
|
||||
unit: Time Unit
|
||||
seconds: Seconds
|
||||
minutes: Minutes
|
||||
hours: Hours
|
||||
days: Days
|
||||
233
src/i18n/es.json
Normal file
233
src/i18n/es.json
Normal file
@@ -0,0 +1,233 @@
|
||||
{
|
||||
"permanent": "Permanente",
|
||||
"buttons": {
|
||||
"cancel": "Cancelar",
|
||||
"close": "Cerrar",
|
||||
"copy": "Copiar",
|
||||
"copyFile": "Copiar archivo",
|
||||
"copyToClipboard": "Copiar al portapapeles",
|
||||
"create": "Crear",
|
||||
"delete": "Borrar",
|
||||
"download": "Descargar",
|
||||
"info": "Info",
|
||||
"more": "Más",
|
||||
"move": "Mover",
|
||||
"moveFile": "Mover archivo",
|
||||
"new": "Nuevo",
|
||||
"next": "Siguiente",
|
||||
"ok": "OK",
|
||||
"replace": "Reemplazar",
|
||||
"previous": "Anterior",
|
||||
"rename": "Renombrar",
|
||||
"reportIssue": "Reportar problema",
|
||||
"save": "Guardar",
|
||||
"search": "Buscar",
|
||||
"select": "Seleccionar",
|
||||
"share": "Compartir",
|
||||
"publish": "Publicar",
|
||||
"selectMultiple": "Selección múltiple",
|
||||
"schedule": "Programar",
|
||||
"switchView": "Cambiar vista",
|
||||
"toggleSidebar": "Mostrar/Ocultar menú",
|
||||
"update": "Actualizar",
|
||||
"upload": "Subir",
|
||||
"permalink": "Link permanente"
|
||||
},
|
||||
"success": {
|
||||
"linkCopied": "¡Link copiado!"
|
||||
},
|
||||
"errors": {
|
||||
"forbidden": "No eres bienvenido aquí.",
|
||||
"internal": "La verdad es que algo ha ido mal.",
|
||||
"notFound": "No se puede acceder a este lugar."
|
||||
},
|
||||
"files": {
|
||||
"folders": "Carpetas",
|
||||
"files": "Archivos",
|
||||
"body": "Cuerpo",
|
||||
"clear": "Limpiar",
|
||||
"closePreview": "Cerrar vista previa",
|
||||
"home": "Inicio",
|
||||
"lastModified": "Última modificación",
|
||||
"loading": "Cargando...",
|
||||
"lonely": "Uno se siente muy sólo aquí...",
|
||||
"metadata": "Metadatos",
|
||||
"multipleSelectionEnabled": "Selección múltiple activada",
|
||||
"name": "Nombre",
|
||||
"size": "Tamaño",
|
||||
"sortByName": "Ordenar por nombre",
|
||||
"sortBySize": "Ordenar por tamaño",
|
||||
"sortByLastModified": "Ordenar por última modificación"
|
||||
},
|
||||
"help": {
|
||||
"click": "seleccionar archivo o carpeta",
|
||||
"ctrl": {
|
||||
"click": "seleccionar múltiples archivos o carpetas",
|
||||
"f": "abre la búsqueda",
|
||||
"s": "guarda un archivo o lo descarga a la carpeta en la que estás"
|
||||
},
|
||||
"del": "elimina los items seleccionados",
|
||||
"doubleClick": "abre un archivo o carpeta",
|
||||
"esc": "limpia la selección y/o cierra la ventana",
|
||||
"f1": "esta información",
|
||||
"f2": "renombrar archivo",
|
||||
"help": "Ayuda"
|
||||
},
|
||||
"login": {
|
||||
"password": "Contraseña",
|
||||
"passwordConfirm": "Password Confirmation",
|
||||
"submit": "Iniciar sesión",
|
||||
"createAnAccount": "Create an account",
|
||||
"loginInstead": "Already have an account",
|
||||
"passwordsDontMatch": "Passwords don't match",
|
||||
"usernameTaken": "Username already taken",
|
||||
"signup": "Signup",
|
||||
"username": "Usuario",
|
||||
"wrongCredentials": "Usuario y/o contraseña incorrectos"
|
||||
},
|
||||
"prompts": {
|
||||
"copy": "Copiar",
|
||||
"copyMessage": "Elige el lugar donde quieres copiar tus archivos:",
|
||||
"currentlyNavigating": "Actualmente estás en:",
|
||||
"deleteMessageMultiple": "¿Estás seguro que quieres eliminar {count} archivo(s)?",
|
||||
"deleteMessageSingle": "¿Estás seguro que quieres eliminar este archivo/carpeta?",
|
||||
"deleteTitle": "Borrar archivos",
|
||||
"displayName": "Nombre:",
|
||||
"download": "Descargar archivos",
|
||||
"downloadMessage": "Elige el formato de descarga.",
|
||||
"error": "Algo ha fallado",
|
||||
"fileInfo": "Información del archivo",
|
||||
"filesSelected": "{count} archivos seleccionados.",
|
||||
"lastModified": "Última modificación",
|
||||
"move": "Mover",
|
||||
"moveMessage": "Elige una nueva casa para tus archivo(s)/carpeta(s):",
|
||||
"newDir": "Nueva carpeta",
|
||||
"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",
|
||||
"replace": "Reemplazar",
|
||||
"replaceMessage": "Uno de los archivos ue intentas subir está creando conflicto por su nombre. ¿Quieres cambiar el nombre del ya existente?\n",
|
||||
"rename": "Renombrar",
|
||||
"renameMessage": "Escribe el nuevo nombre para",
|
||||
"show": "Mostrar",
|
||||
"size": "Tamaño",
|
||||
"schedule": "Programar",
|
||||
"scheduleMessage": "Elige una hora y fecha para programar la publicación de este post.",
|
||||
"newArchetype": "Crea un nuevo post basado en un arquetipo. Tu archivo será creado en la carpeta de contenido."
|
||||
},
|
||||
"settings": {
|
||||
"instanceName": "Instance name",
|
||||
"brandingDirectoryPath": "Branding directory path",
|
||||
"documentation": "documentation",
|
||||
"branding": "Branding",
|
||||
"disableExternalLinks": "Disable external links (except documentation)",
|
||||
"brandingHelp": "You can costumize how your File Browser instance looks and feels by changing its name, replacing the logo, adding custom styles and even disable external links to GitHub.\nFor more information about custom branding, please check out the {0}.",
|
||||
"admin": "Admin",
|
||||
"administrator": "Administrador",
|
||||
"allowCommands": "Ejecutar comandos",
|
||||
"allowEdit": "Editar, renombrar y borrar archivos o carpetas",
|
||||
"allowNew": "Crear nuevos archivos y carpetas",
|
||||
"allowPublish": "Publicar nuevos posts y páginas",
|
||||
"avoidChanges": "(dejar en blanco para evitar cambios)",
|
||||
"changePassword": "Cambiar contraseña",
|
||||
"commandRunner": "Command runner",
|
||||
"commandRunnerHelp": "Here you can set commands that are executed in the named events. You must write one per line. The environment variables {0} and {1} will be available, being {0} relative to {1}. For more information about this feature and the available environment variables, please read the {2}.",
|
||||
"commandsUpdated": "¡Comandos actualizados!",
|
||||
"customStylesheet": "Modificar hoja de estilos",
|
||||
"examples": "Ejemplos",
|
||||
"globalSettings": "Ajustes globales",
|
||||
"language": "Idioma",
|
||||
"lockPassword": "Evitar que el usuario cambie la contraseña",
|
||||
"newPassword": "Tu nueva contraseña",
|
||||
"newPasswordConfirm": "Confirma tu contraseña",
|
||||
"newUser": "Nuevo usuario",
|
||||
"password": "Contraseña",
|
||||
"passwordUpdated": "¡Contraseña actualizada!",
|
||||
"permissions": "Permisos",
|
||||
"permissionsHelp": "Puedes nombrar al usuario como administrador o elegir los permisos individualmente. Si seleccionas \"Administrador\", todas las otras opciones serán activadas automáticamente. La administración de usuarios es un privilegio de administrador.\n",
|
||||
"profileSettings": "Ajustes del perfil",
|
||||
"ruleExample1": "previene el acceso a una extensión de archivo (Como .git) en cada carpeta.\n",
|
||||
"ruleExample2": "bloquea el acceso al archivo llamado Caddyfile en la carpeta raíz.",
|
||||
"rules": "Reglas",
|
||||
"rulesHelp": "Aquí puedes definir un conjunto de reglas de permisos para este usuario específico. Los archivos bloqueados no se mostrarán en las listas y no serán accesibles por el usuario. Puedes utilizar regex y rutas relativas a la raíz del usuario.\n",
|
||||
"scope": "Raíz",
|
||||
"settingsUpdated": "¡Ajustes actualizados!",
|
||||
"user": "Usuario",
|
||||
"userCommands": "Comandos",
|
||||
"userCommandsHelp": "Una lista separada por espacios con los comandos permitidos para este usuario. Ejemplo:\n",
|
||||
"userCreated": "¡Usuario creado!",
|
||||
"userDeleted": "¡Usuario eliminado!",
|
||||
"userManagement": "Administración de usuarios",
|
||||
"username": "Usuario",
|
||||
"users": "Usuarios",
|
||||
"globalRules": "This is a global set of allow and disallow rules. They apply to every user. You can define specific rules on each user's settings to override this ones.",
|
||||
"allowSignup": "Allow users to signup",
|
||||
"insertRegex": "Insert regex expression",
|
||||
"insertPath": "Insert the path",
|
||||
"userUpdated": "¡Usuario actualizado!",
|
||||
"generalSettings": "General settings",
|
||||
"userDefaults": "User default settings",
|
||||
"defaultUserDescription": "This are the default settings for new users.",
|
||||
"perm": {
|
||||
"create": "Create files and directories",
|
||||
"delete": "Delete files and directories",
|
||||
"download": "Download",
|
||||
"edit": "Edit files",
|
||||
"execute": "Execute commands",
|
||||
"rename": "Rename or move files and directories",
|
||||
"share": "Share files"
|
||||
}
|
||||
},
|
||||
"sidebar": {
|
||||
"help": "Ayuda",
|
||||
"logout": "Cerrar sesión",
|
||||
"myFiles": "Mis archivos",
|
||||
"newFile": "Nuevo archivo",
|
||||
"newFolder": "Nueva carpeta",
|
||||
"settings": "Ajustes",
|
||||
"siteSettings": "Ajustes del sitio",
|
||||
"hugoNew": "Nuevo Hugo",
|
||||
"preview": "Vista previa"
|
||||
},
|
||||
"search": {
|
||||
"images": "Images",
|
||||
"music": "Música",
|
||||
"notSupportedCommand": "This is a not supported command.",
|
||||
"pdf": "PDF",
|
||||
"pressToExecute": "Presiona enter para ejecutar.",
|
||||
"pressToSearch": "Presiona enter para buscar.",
|
||||
"search": "Buscar...",
|
||||
"searchOrCommand": "Buscar o ejecutar un comando...",
|
||||
"searchOrSupportedCommand": "Buscar o ejecutar uno de los comandos soportados:",
|
||||
"typeCommand": "Type and press enter to execute.",
|
||||
"typeSearch": "Type and press enter to search.",
|
||||
"types": "Tipos",
|
||||
"video": "Vídeo",
|
||||
"writeToSearch": "Escribe aquí para buscar"
|
||||
},
|
||||
"languages": {
|
||||
"ar": "العربية",
|
||||
"en": "English",
|
||||
"it": "Italiano",
|
||||
"fr": "Français",
|
||||
"pt": "Português",
|
||||
"ptBR": "Português (Brasil)",
|
||||
"ja": "日本語",
|
||||
"zhCN": "中文 (简体)",
|
||||
"zhTW": "中文 (繁體)",
|
||||
"es": "Español",
|
||||
"de": "Deutsch",
|
||||
"ru": "Русский",
|
||||
"pl": "Polski",
|
||||
"ko": "한국어"
|
||||
},
|
||||
"time": {
|
||||
"unit": "Unidad",
|
||||
"seconds": "Segundos",
|
||||
"minutes": "Minutos",
|
||||
"hours": "Horas",
|
||||
"days": "Días"
|
||||
}
|
||||
}
|
||||
208
src/i18n/es.yaml
208
src/i18n/es.yaml
@@ -1,208 +0,0 @@
|
||||
permanent: Permanente
|
||||
buttons:
|
||||
cancel: Cancelar
|
||||
close: Cerrar
|
||||
copy: Copiar
|
||||
copyFile: Copiar archivo
|
||||
copyToClipboard: Copiar al portapapeles
|
||||
create: Crear
|
||||
delete: Borrar
|
||||
download: Descargar
|
||||
info: Info
|
||||
more: Más
|
||||
move: Mover
|
||||
moveFile: Mover archivo
|
||||
new: Nuevo
|
||||
next: Siguiente
|
||||
ok: OK
|
||||
replace: Reemplazar
|
||||
previous: Anterior
|
||||
rename: Renombrar
|
||||
reportIssue: Reportar problema
|
||||
save: Guardar
|
||||
search: Buscar
|
||||
select: Seleccionar
|
||||
share: Compartir
|
||||
publish: Publicar
|
||||
selectMultiple: Selección múltiple
|
||||
schedule: Programar
|
||||
switchView: Cambiar vista
|
||||
toggleSidebar: Mostrar/Ocultar menú
|
||||
update: Actualizar
|
||||
upload: Subir
|
||||
permalink: Link permanente
|
||||
success:
|
||||
linkCopied: ¡Link copiado!
|
||||
errors:
|
||||
forbidden: No eres bienvenido aquí.
|
||||
internal: La verdad es que algo ha ido mal.
|
||||
notFound: No se puede acceder a este lugar.
|
||||
files:
|
||||
folders: Carpetas
|
||||
files: Archivos
|
||||
body: Cuerpo
|
||||
clear: Limpiar
|
||||
closePreview: Cerrar vista previa
|
||||
home: Inicio
|
||||
lastModified: Última modificación
|
||||
loading: Cargando...
|
||||
lonely: Uno se siente muy sólo aquí...
|
||||
metadata: Metadatos
|
||||
multipleSelectionEnabled: Selección múltiple activada
|
||||
name: Nombre
|
||||
size: Tamaño
|
||||
sortByName: Ordenar por nombre
|
||||
sortBySize: Ordenar por tamaño
|
||||
sortByLastModified: Ordenar por última modificación
|
||||
help:
|
||||
click: seleccionar archivo o carpeta
|
||||
ctrl:
|
||||
click: seleccionar múltiples archivos o carpetas
|
||||
f: abre la búsqueda
|
||||
s: guarda un archivo o lo descarga a la carpeta en la que estás
|
||||
del: elimina los items seleccionados
|
||||
doubleClick: abre un archivo o carpeta
|
||||
esc: limpia la selección y/o cierra la ventana
|
||||
f1: esta información
|
||||
f2: renombrar archivo
|
||||
help: Ayuda
|
||||
login:
|
||||
password: Contraseña
|
||||
submit: Iniciar sesión
|
||||
username: Usuario
|
||||
wrongCredentials: Usuario y/o contraseña incorrectos
|
||||
prompts:
|
||||
copy: Copiar
|
||||
copyMessage: 'Elige el lugar donde quieres copiar tus archivos:'
|
||||
currentlyNavigating: 'Actualmente estás en:'
|
||||
deleteMessageMultiple: ¿Estás seguro que quieres eliminar {count} archivo(s)?
|
||||
deleteMessageSingle: ¿Estás seguro que quieres eliminar este archivo/carpeta?
|
||||
deleteTitle: Borrar archivos
|
||||
displayName: 'Nombre:'
|
||||
download: Descargar archivos
|
||||
downloadMessage: Elige el formato de descarga.
|
||||
error: Algo ha fallado
|
||||
fileInfo: Información del archivo
|
||||
filesSelected: "{count} archivos seleccionados."
|
||||
lastModified: Última modificación
|
||||
move: Mover
|
||||
moveMessage: 'Elige una nueva casa para tus archivo(s)/carpeta(s):'
|
||||
newDir: Nueva carpeta
|
||||
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
|
||||
replace: Reemplazar
|
||||
replaceMessage: >
|
||||
Uno de los archivos ue intentas subir está creando conflicto por su nombre.
|
||||
¿Quieres cambiar el nombre del ya existente?
|
||||
rename: Renombrar
|
||||
renameMessage: Escribe el nuevo nombre para
|
||||
show: Mostrar
|
||||
size: Tamaño
|
||||
schedule: Programar
|
||||
scheduleMessage: Elige una hora y fecha para programar la publicación de este post.
|
||||
newArchetype: Crea un nuevo post basado en un arquetipo. Tu archivo será creado en la carpeta de contenido.
|
||||
settings:
|
||||
admin: Admin
|
||||
administrator: Administrador
|
||||
allowCommands: Ejecutar comandos
|
||||
allowEdit: Editar, renombrar y borrar archivos o carpetas
|
||||
allowNew: Crear nuevos archivos y carpetas
|
||||
allowPublish: Publicar nuevos posts y páginas
|
||||
avoidChanges: "(dejar en blanco para evitar cambios)"
|
||||
changePassword: Cambiar contraseña
|
||||
commands: Comandos
|
||||
commandsHelp: >
|
||||
Aquí puedes crear comandos que serán ejecutados en los eventos. Debes
|
||||
escribir un comando por linea. Si el evento está relacionado con archivos, como
|
||||
por ejemplo, antes y después de guardar, la variable de entorno "FILE" estará
|
||||
disponible en la ruta del archivo.
|
||||
commandsUpdated: ¡Comandos actualizados!
|
||||
customStylesheet: Modificar hoja de estilos
|
||||
examples: Ejemplos
|
||||
globalSettings: Ajustes globales
|
||||
language: Idioma
|
||||
lockPassword: Evitar que el usuario cambie la contraseña
|
||||
newPassword: Tu nueva contraseña
|
||||
newPasswordConfirm: Confirma tu contraseña
|
||||
newUser: Nuevo usuario
|
||||
password: Contraseña
|
||||
passwordUpdated: ¡Contraseña actualizada!
|
||||
permissions: Permisos
|
||||
permissionsHelp: >
|
||||
Puedes nombrar al usuario como administrador o elegir los permisos
|
||||
individualmente. Si seleccionas "Administrador", todas las otras opciones
|
||||
serán activadas automáticamente. La administración de usuarios es un privilegio de administrador.
|
||||
profileSettings: Ajustes del perfil
|
||||
ruleExample1: >
|
||||
previene el acceso a una extensión de archivo (Como .git) en
|
||||
cada carpeta.
|
||||
ruleExample2: bloquea el acceso al archivo llamado Caddyfile en la carpeta raíz.
|
||||
rules: Reglas
|
||||
rulesHelp1: >
|
||||
Aquí puedes definir un conjunto de reglas de permisos para este usuario
|
||||
específico. Los archivos bloqueados no se mostrarán en las listas y no serán accesibles
|
||||
por el usuario. Puedes utilizar regex y rutas relativas a la raíz del usuario.
|
||||
rulesHelp2: >
|
||||
Cada regla va en una línea diferente, y debe comenzar con la palabra clave
|
||||
{0} or {1}. Entonces, debes escribir {2} si estás usando una expresión regular (REGEX) y
|
||||
luego la expresión o la ruta.
|
||||
scope: Raíz
|
||||
settingsUpdated: ¡Ajustes actualizados!
|
||||
user: Usuario
|
||||
userCommands: Comandos
|
||||
userCommandsHelp: >
|
||||
Una lista separada por espacios con los comandos permitidos para este usuario.
|
||||
Ejemplo:
|
||||
userCreated: ¡Usuario creado!
|
||||
userDeleted: ¡Usuario eliminado!
|
||||
userManagement: Administración de usuarios
|
||||
username: Usuario
|
||||
users: Usuarios
|
||||
userUpdated: ¡Usuario actualizado!
|
||||
sidebar:
|
||||
help: Ayuda
|
||||
logout: Cerrar sesión
|
||||
myFiles: Mis archivos
|
||||
newFile: Nuevo archivo
|
||||
newFolder: Nueva carpeta
|
||||
settings: Ajustes
|
||||
siteSettings: Ajustes del sitio
|
||||
hugoNew: Nuevo Hugo
|
||||
preview: Vista previa
|
||||
search:
|
||||
images: Images
|
||||
music: Música
|
||||
pdf: PDF
|
||||
pressToExecute: Presiona enter para ejecutar.
|
||||
pressToSearch: Presiona enter para buscar.
|
||||
search: Buscar...
|
||||
searchOrCommand: Buscar o ejecutar un comando...
|
||||
searchOrSupportedCommand: 'Buscar o ejecutar uno de los comandos soportados:'
|
||||
type: Escribe y presiona enter para buscar.
|
||||
types: Tipos
|
||||
video: Vídeo
|
||||
writeToSearch: Escribe aquí para buscar
|
||||
languages:
|
||||
ar: العربية
|
||||
en: English
|
||||
it: Italiano
|
||||
fr: Français
|
||||
pt: Português
|
||||
ptBR: Português (Brasil)
|
||||
es: Español
|
||||
ja: 日本語
|
||||
zhCN: 中文 (简体)
|
||||
zhTW: 中文 (繁體)
|
||||
de: Deutsch
|
||||
ru: Русский
|
||||
pl: Polski
|
||||
ko: 한국어
|
||||
time:
|
||||
unit: Unidad
|
||||
seconds: Segundos
|
||||
minutes: Minutos
|
||||
hours: Horas
|
||||
days: Días
|
||||
233
src/i18n/fr.json
Normal file
233
src/i18n/fr.json
Normal file
@@ -0,0 +1,233 @@
|
||||
{
|
||||
"permanent": "Permanent",
|
||||
"buttons": {
|
||||
"cancel": "Annuler",
|
||||
"close": "Fermer",
|
||||
"copy": "Copier",
|
||||
"copyFile": "Copier le fichier",
|
||||
"copyToClipboard": "Copier dans le presse-papier",
|
||||
"create": "Créer",
|
||||
"delete": "Supprimer",
|
||||
"download": "Télécharger",
|
||||
"info": "Info",
|
||||
"more": "Plus",
|
||||
"move": "Déplacer",
|
||||
"moveFile": "Déplacer le fichier",
|
||||
"new": "Nouveau",
|
||||
"next": "Suivant",
|
||||
"ok": "OK",
|
||||
"replace": "Remplacer",
|
||||
"previous": "Précédent",
|
||||
"rename": "Renommer",
|
||||
"reportIssue": "Rapport d'erreur",
|
||||
"save": "Enregistrer",
|
||||
"search": "Chercher",
|
||||
"select": "Sélectionner",
|
||||
"share": "Partager",
|
||||
"publish": "Publier",
|
||||
"selectMultiple": "Sélection multiple",
|
||||
"schedule": "Fixer la date",
|
||||
"switchView": "Changer le mode d'affichage",
|
||||
"toggleSidebar": "Afficher/Masquer la barre latérale",
|
||||
"update": "Mettre à jour",
|
||||
"upload": "Importer",
|
||||
"permalink": "Obtenir un lien permanent"
|
||||
},
|
||||
"success": {
|
||||
"linkCopied": "Link copied!"
|
||||
},
|
||||
"errors": {
|
||||
"forbidden": "Vous n'êtes pas autorisé à être ici.",
|
||||
"internal": "Aïe ! Quelque chose s'est mal passé.",
|
||||
"notFound": "Impossible d'accéder à cet emplacement."
|
||||
},
|
||||
"files": {
|
||||
"folders": "Dossiers",
|
||||
"files": "Fichiers",
|
||||
"body": "Corps",
|
||||
"clear": "Fermer",
|
||||
"closePreview": "Fermer la prévisualisation",
|
||||
"home": "Accueil",
|
||||
"lastModified": "Dernière modification",
|
||||
"loading": "Chargement...",
|
||||
"lonely": "Il semble qu'il n'y ai rien par ici...",
|
||||
"metadata": "Metadonnées",
|
||||
"multipleSelectionEnabled": "Sélection multiple activée",
|
||||
"name": "Nom",
|
||||
"size": "Taille",
|
||||
"sortByName": "Trier par nom",
|
||||
"sortBySize": "Trier par taille",
|
||||
"sortByLastModified": "Trier par date de dernière modification"
|
||||
},
|
||||
"help": {
|
||||
"click": "Sélectionner un élément",
|
||||
"ctrl": {
|
||||
"click": "Sélectionner plusieurs éléments",
|
||||
"f": "Ouvrir l'invité de recherche",
|
||||
"s": "Télécharger l'élément actuel"
|
||||
},
|
||||
"del": "Supprimer les éléments sélectionnés",
|
||||
"doubleClick": "Ouvrir un élément",
|
||||
"esc": "Désélectionner et/ou fermer la boîte de dialogue",
|
||||
"f1": "Ouvrir l'aide",
|
||||
"f2": "Renommer le fichier",
|
||||
"help": "Aide"
|
||||
},
|
||||
"login": {
|
||||
"password": "Mot de passe",
|
||||
"passwordConfirm": "Password Confirmation",
|
||||
"submit": "Se connecter",
|
||||
"createAnAccount": "Create an account",
|
||||
"loginInstead": "Already have an account",
|
||||
"passwordsDontMatch": "Passwords don't match",
|
||||
"usernameTaken": "Username already taken",
|
||||
"signup": "Signup",
|
||||
"username": "Utilisateur",
|
||||
"wrongCredentials": "Identifiants incorrects !"
|
||||
},
|
||||
"prompts": {
|
||||
"copy": "Copier",
|
||||
"copyMessage": "Choisissez l'emplacement où copier la sélection :",
|
||||
"currentlyNavigating": "Dossier courant :",
|
||||
"deleteMessageMultiple": "Etes-vous sûr de vouloir supprimer ces {count} élément(s) ?",
|
||||
"deleteMessageSingle": "Etes-vous sûr de vouloir supprimer cet élément ?",
|
||||
"deleteTitle": "Supprimer",
|
||||
"displayName": "Nom :",
|
||||
"download": "Télécharger",
|
||||
"downloadMessage": "Choisissez le format de téléchargement :",
|
||||
"error": "Quelque chose s'est mal passé",
|
||||
"fileInfo": "Informations",
|
||||
"filesSelected": "{count} éléments sélectionnés",
|
||||
"lastModified": "Dernière modification",
|
||||
"move": "Déplacer",
|
||||
"moveMessage": "Choisissez l'emplacement où déplacer la sélection :",
|
||||
"newDir": "Nouveau dossier",
|
||||
"newDirMessage": "Nom du nouveau dossier :",
|
||||
"newFile": "Nouveau fichier",
|
||||
"newFileMessage": "Nom du nouveau fichier :",
|
||||
"numberDirs": "Nombre de dossiers",
|
||||
"numberFiles": "Nombre de fichiers",
|
||||
"replace": "Remplacer",
|
||||
"replaceMessage": "Un des fichiers que vous êtes en train d'importer a le même nom qu'un autre déjà présent. Voulez-vous remplacer le fichier actuel par le nouveau ?\n",
|
||||
"rename": "Renommer",
|
||||
"renameMessage": "Nouveau nom pour",
|
||||
"show": "Montrer",
|
||||
"size": "Taille",
|
||||
"schedule": "Fixer la date",
|
||||
"scheduleMessage": "Choisissez une date pour planifier la publication de ce post",
|
||||
"newArchetype": "Créer un nouveau post basé sur un archétype. Votre fichier sera créé dans le dossier de contenu."
|
||||
},
|
||||
"settings": {
|
||||
"instanceName": "Instance name",
|
||||
"brandingDirectoryPath": "Branding directory path",
|
||||
"documentation": "documentation",
|
||||
"branding": "Branding",
|
||||
"disableExternalLinks": "Disable external links (except documentation)",
|
||||
"brandingHelp": "You can costumize how your File Browser instance looks and feels by changing its name, replacing the logo, adding custom styles and even disable external links to GitHub.\nFor more information about custom branding, please check out the {0}.",
|
||||
"admin": "Admin",
|
||||
"administrator": "Administrateur",
|
||||
"allowCommands": "Exécuter des commandes",
|
||||
"allowEdit": "Editer, renommer et supprimer des fichiers ou des dossiers",
|
||||
"allowNew": "Créer de nouveaux fichiers et dossiers",
|
||||
"allowPublish": "Publier de nouveaux posts et pages",
|
||||
"avoidChanges": "(Laisser vide pour conserver l'actuel)",
|
||||
"changePassword": "Modifier le mot de passe",
|
||||
"commandRunner": "Command runner",
|
||||
"commandRunnerHelp": "Here you can set commands that are executed in the named events. You must write one per line. The environment variables {0} and {1} will be available, being {0} relative to {1}. For more information about this feature and the available environment variables, please read the {2}.",
|
||||
"commandsUpdated": "Commandes mises à jour !",
|
||||
"customStylesheet": "Feuille de style personnalisée",
|
||||
"examples": "Exemples",
|
||||
"globalSettings": "Paramètres généraux",
|
||||
"language": "Langue",
|
||||
"lockPassword": "Prevent the user from changing the password",
|
||||
"newPassword": "Votre nouveau mot de passe",
|
||||
"newPasswordConfirm": "Confirmation du nouveau mot de passe",
|
||||
"newUser": "Nouvel Utilisateur",
|
||||
"password": "Mot de passe",
|
||||
"passwordUpdated": "Mot de passe mis à jour !",
|
||||
"permissions": "Permissions",
|
||||
"permissionsHelp": "Vous pouvez définir l'utilisateur comme étant un administrateur ou encore choisir les permissions individuellement. Si vous sélectionnez \"Administrateur\", toutes les autres options seront automatiquement activées. La gestion des utilisateurs est un privilège que seul l'administrateur possède.\n",
|
||||
"profileSettings": "Paramètres du profil",
|
||||
"ruleExample1": "Bloque l'accès à tous les fichiers commençant par un point (comme par exemple .git, .gitignore) dans tous les dossiers",
|
||||
"ruleExample2": "Bloque l'accès au fichier nommé \"Caddyfile\" à la racine du dossier utilisateur",
|
||||
"rules": "Règles",
|
||||
"rulesHelp": "Vous pouvez définir ici un ensemble de règles pour cet utilisateur. Les fichiers bloqués ne seront pas affichés et ne seront pas accessibles par l'utilisateur. Les expressions régulières sont supportées et les chemins d'accès sont relatifs par rapport au dossier de l'utilisateur.\n",
|
||||
"scope": "Portée du dossier utilisateur",
|
||||
"settingsUpdated": "Les paramètres ont été mis à jour !",
|
||||
"user": "Utilisateur",
|
||||
"userCommands": "Commandes",
|
||||
"userCommandsHelp": "Une liste séparée par des espaces des commandes permises pour l'utilisateur. Exemple :",
|
||||
"userCreated": "Utilisateur créé !",
|
||||
"userDeleted": "Utilisateur supprimé !",
|
||||
"userManagement": "Gestion des utilisateurs",
|
||||
"username": "Nom d'utilisateur",
|
||||
"users": "Utilisateurs",
|
||||
"globalRules": "This is a global set of allow and disallow rules. They apply to every user. You can define specific rules on each user's settings to override this ones.",
|
||||
"allowSignup": "Allow users to signup",
|
||||
"insertRegex": "Insert regex expression",
|
||||
"insertPath": "Insert the path",
|
||||
"userUpdated": "Utilisateur mis à jour !",
|
||||
"generalSettings": "General settings",
|
||||
"userDefaults": "User default settings",
|
||||
"defaultUserDescription": "This are the default settings for new users.",
|
||||
"perm": {
|
||||
"create": "Create files and directories",
|
||||
"delete": "Delete files and directories",
|
||||
"download": "Download",
|
||||
"edit": "Edit files",
|
||||
"execute": "Execute commands",
|
||||
"rename": "Rename or move files and directories",
|
||||
"share": "Share files"
|
||||
}
|
||||
},
|
||||
"sidebar": {
|
||||
"help": "Aide",
|
||||
"logout": "Se déconnecter",
|
||||
"myFiles": "Mes fichiers",
|
||||
"newFile": "Nouveau fichier",
|
||||
"newFolder": "Nouveau dossier",
|
||||
"settings": "Paramètres",
|
||||
"siteSettings": "Paramètres du site",
|
||||
"hugoNew": "Nouveau Hugo",
|
||||
"preview": "Prévisualiser"
|
||||
},
|
||||
"search": {
|
||||
"images": "Images",
|
||||
"music": "Musique",
|
||||
"notSupportedCommand": "This is a not supported command.",
|
||||
"pdf": "PDF",
|
||||
"pressToExecute": "Appuyez sur Entrée pour exécuter",
|
||||
"pressToSearch": "Appuyez sur Entrée pour lancer la recherche",
|
||||
"search": "Recherche en cours...",
|
||||
"searchOrCommand": "Rechercher ou exécuter une commande...",
|
||||
"searchOrSupportedCommand": "Lancez une recherche ou exécutez une commande parmis les suivantes :",
|
||||
"typeCommand": "Type and press enter to execute.",
|
||||
"typeSearch": "Type and press enter to search.",
|
||||
"types": "Types",
|
||||
"video": "Video",
|
||||
"writeToSearch": "Ecrivez ici pour lancer une recherche"
|
||||
},
|
||||
"languages": {
|
||||
"ar": "العربية",
|
||||
"en": "English",
|
||||
"it": "Italiano",
|
||||
"fr": "Français",
|
||||
"pt": "Português",
|
||||
"ptBR": "Português (Brasil)",
|
||||
"ja": "日本語",
|
||||
"zhCN": "中文 (简体)",
|
||||
"zhTW": "中文 (繁體)",
|
||||
"es": "Español",
|
||||
"de": "Deutsch",
|
||||
"ru": "Русский",
|
||||
"pl": "Polski",
|
||||
"ko": "한국어"
|
||||
},
|
||||
"time": {
|
||||
"unit": "Unité de temps",
|
||||
"seconds": "Secondes",
|
||||
"minutes": "Minutes",
|
||||
"hours": "Heures",
|
||||
"days": "Jours"
|
||||
}
|
||||
}
|
||||
201
src/i18n/fr.yaml
201
src/i18n/fr.yaml
@@ -1,201 +0,0 @@
|
||||
permanent: Permanent
|
||||
buttons:
|
||||
cancel: Annuler
|
||||
close: Fermer
|
||||
copy: Copier
|
||||
copyFile: Copier le fichier
|
||||
copyToClipboard: Copier dans le presse-papier
|
||||
create: Créer
|
||||
delete: Supprimer
|
||||
download: Télécharger
|
||||
info: Info
|
||||
more: Plus
|
||||
move: Déplacer
|
||||
moveFile: Déplacer le fichier
|
||||
new: Nouveau
|
||||
next: Suivant
|
||||
ok: OK
|
||||
replace: Remplacer
|
||||
previous: Précédent
|
||||
rename: Renommer
|
||||
reportIssue: Rapport d'erreur
|
||||
save: Enregistrer
|
||||
search: Chercher
|
||||
select: Sélectionner
|
||||
share: Partager
|
||||
publish: Publier
|
||||
selectMultiple: Sélection multiple
|
||||
schedule: Fixer la date
|
||||
switchView: Changer le mode d'affichage
|
||||
toggleSidebar: Afficher/Masquer la barre latérale
|
||||
update: Mettre à jour
|
||||
upload: Importer
|
||||
permalink: Obtenir un lien permanent
|
||||
errors:
|
||||
forbidden: Vous n'êtes pas autorisé à être ici.
|
||||
internal: Aïe ! Quelque chose s'est mal passé.
|
||||
notFound: Impossible d'accéder à cet emplacement.
|
||||
files:
|
||||
folders: Dossiers
|
||||
files: Fichiers
|
||||
body: Corps
|
||||
clear: Fermer
|
||||
closePreview: Fermer la prévisualisation
|
||||
home: Accueil
|
||||
lastModified: Dernière modification
|
||||
loading: Chargement...
|
||||
lonely: Il semble qu'il n'y ai rien par ici...
|
||||
metadata: Metadonnées
|
||||
multipleSelectionEnabled: Sélection multiple activée
|
||||
name: Nom
|
||||
size: Taille
|
||||
sortByName: Trier par nom
|
||||
sortBySize: Trier par taille
|
||||
sortByLastModified: Trier par date de dernière modification
|
||||
help:
|
||||
click: Sélectionner un élément
|
||||
ctrl:
|
||||
click: Sélectionner plusieurs éléments
|
||||
f: Ouvrir l'invité de recherche
|
||||
s: Télécharger l'élément actuel
|
||||
del: Supprimer les éléments sélectionnés
|
||||
doubleClick: Ouvrir un élément
|
||||
esc: Désélectionner et/ou fermer la boîte de dialogue
|
||||
f1: Ouvrir l'aide
|
||||
f2: Renommer le fichier
|
||||
help: Aide
|
||||
login:
|
||||
password: Mot de passe
|
||||
submit: Se connecter
|
||||
username: Utilisateur
|
||||
wrongCredentials: Identifiants incorrects !
|
||||
prompts:
|
||||
copy: Copier
|
||||
copyMessage: 'Choisissez l''emplacement où copier la sélection :'
|
||||
currentlyNavigating: 'Dossier courant :'
|
||||
deleteMessageMultiple: Etes-vous sûr de vouloir supprimer ces {count} élément(s) ?
|
||||
deleteMessageSingle: Etes-vous sûr de vouloir supprimer cet élément ?
|
||||
deleteTitle: Supprimer
|
||||
displayName: 'Nom :'
|
||||
download: Télécharger
|
||||
downloadMessage: 'Choisissez le format de téléchargement :'
|
||||
error: Quelque chose s'est mal passé
|
||||
fileInfo: Informations
|
||||
filesSelected: "{count} éléments sélectionnés"
|
||||
lastModified: Dernière modification
|
||||
move: Déplacer
|
||||
moveMessage: 'Choisissez l''emplacement où déplacer la sélection :'
|
||||
newDir: Nouveau dossier
|
||||
newDirMessage: 'Nom du nouveau dossier :'
|
||||
newFile: Nouveau fichier
|
||||
newFileMessage: 'Nom du nouveau fichier :'
|
||||
numberDirs: Nombre de dossiers
|
||||
numberFiles: Nombre de fichiers
|
||||
replace: Remplacer
|
||||
replaceMessage: >
|
||||
Un des fichiers que vous êtes en train d'importer a le même nom qu'un autre déjà présent.
|
||||
Voulez-vous remplacer le fichier actuel par le nouveau ?
|
||||
rename: Renommer
|
||||
renameMessage: Nouveau nom pour
|
||||
show: Montrer
|
||||
size: Taille
|
||||
schedule: Fixer la date
|
||||
scheduleMessage: Choisissez une date pour planifier la publication de ce post
|
||||
newArchetype: Créer un nouveau post basé sur un archétype. Votre fichier sera créé dans le dossier de contenu.
|
||||
settings:
|
||||
admin: Admin
|
||||
administrator: Administrateur
|
||||
allowCommands: Exécuter des commandes
|
||||
allowEdit: Editer, renommer et supprimer des fichiers ou des dossiers
|
||||
allowNew: Créer de nouveaux fichiers et dossiers
|
||||
allowPublish: Publier de nouveaux posts et pages
|
||||
avoidChanges: "(Laisser vide pour conserver l'actuel)"
|
||||
changePassword: Modifier le mot de passe
|
||||
commands: Commandes
|
||||
commandsHelp: >
|
||||
Ici vous pouvez définir des commandes qui seront exécutées lors de l'évènement correspondant.
|
||||
Vous devez indiquer une commande par ligne. Si l'évènement est en rapport avec des fichiers,
|
||||
par exemple avant et après enregistrement, la variable d'environement "FILE" sera disponible
|
||||
et contiendra le chemin d'accès vers le fichier.
|
||||
commandsUpdated: Commandes mises à jour !
|
||||
customStylesheet: Feuille de style personnalisée
|
||||
examples: Exemples
|
||||
globalSettings: Paramètres généraux
|
||||
language: Langue
|
||||
newPassword: Votre nouveau mot de passe
|
||||
newPasswordConfirm: Confirmation du nouveau mot de passe
|
||||
newUser: Nouvel Utilisateur
|
||||
password: Mot de passe
|
||||
passwordUpdated: Mot de passe mis à jour !
|
||||
permissions: Permissions
|
||||
permissionsHelp: >
|
||||
Vous pouvez définir l'utilisateur comme étant un administrateur ou encore choisir les
|
||||
permissions individuellement. Si vous sélectionnez "Administrateur", toutes les autres
|
||||
options seront automatiquement activées. La gestion des utilisateurs est un privilège que
|
||||
seul l'administrateur possède.
|
||||
profileSettings: Paramètres du profil
|
||||
ruleExample1: Bloque l'accès à tous les fichiers commençant par un point (comme par exemple .git, .gitignore) dans tous les dossiers
|
||||
ruleExample2: Bloque l'accès au fichier nommé "Caddyfile" à la racine du dossier utilisateur
|
||||
rules: Règles
|
||||
rulesHelp1: >
|
||||
Vous pouvez définir ici un ensemble de règles pour cet utilisateur.
|
||||
Les fichiers bloqués ne seront pas affichés et ne seront pas accessibles par l'utilisateur.
|
||||
Les expressions régulières sont supportées et les chemins d'accès sont relatifs par rapport au dossier de l'utilisateur.
|
||||
rulesHelp2: >
|
||||
Chaque règle est définie sur une ligne différente et doit commencer par le mot clé {0} ou {1}.
|
||||
Vous devez ensuite ajouter {2} si vous utilisez une expression régulière puis l'expression en question ou bien seulement le chemin d'accès.
|
||||
scope: Portée du dossier utilisateur
|
||||
settingsUpdated: Les paramètres ont été mis à jour !
|
||||
user: Utilisateur
|
||||
userCommands: Commandes
|
||||
userCommandsHelp: 'Une liste séparée par des espaces des commandes permises pour l''utilisateur. Exemple :'
|
||||
userCreated: Utilisateur créé !
|
||||
userDeleted: Utilisateur supprimé !
|
||||
userManagement: Gestion des utilisateurs
|
||||
username: Nom d'utilisateur
|
||||
users: Utilisateurs
|
||||
userUpdated: Utilisateur mis à jour !
|
||||
sidebar:
|
||||
help: Aide
|
||||
logout: Se déconnecter
|
||||
myFiles: Mes fichiers
|
||||
newFile: Nouveau fichier
|
||||
newFolder: Nouveau dossier
|
||||
settings: Paramètres
|
||||
siteSettings: Paramètres du site
|
||||
hugoNew: Nouveau Hugo
|
||||
preview: Prévisualiser
|
||||
search:
|
||||
images: Images
|
||||
music: Musique
|
||||
pdf: PDF
|
||||
pressToExecute: Appuyez sur Entrée pour exécuter
|
||||
pressToSearch: Appuyez sur Entrée pour lancer la recherche
|
||||
search: Recherche en cours...
|
||||
searchOrCommand: Rechercher ou exécuter une commande...
|
||||
searchOrSupportedCommand: 'Lancez une recherche ou exécutez une commande parmis les suivantes :'
|
||||
type: Tapez votre recherche et appuyez sur Entrée
|
||||
types: Types
|
||||
video: Video
|
||||
writeToSearch: Ecrivez ici pour lancer une recherche
|
||||
languages:
|
||||
ar: العربية
|
||||
en: English
|
||||
it: Italiano
|
||||
fr: Français
|
||||
pt: Português
|
||||
ptBR: Português (Brasil)
|
||||
ja: 日本語
|
||||
zhCN: 中文 (简体)
|
||||
zhTW: 中文 (繁體)
|
||||
es: Español
|
||||
de: Deutsch
|
||||
ru: Русский
|
||||
pl: Polski
|
||||
ko: 한국어
|
||||
time:
|
||||
unit: Unité de temps
|
||||
seconds: Secondes
|
||||
minutes: Minutes
|
||||
hours: Heures
|
||||
days: Jours
|
||||
@@ -1,18 +1,20 @@
|
||||
import Vue from 'vue'
|
||||
import VueI18n from 'vue-i18n'
|
||||
import en from './en.yaml'
|
||||
import it from './it.yaml'
|
||||
import fr from './fr.yaml'
|
||||
import pt from './pt.yaml'
|
||||
import ptBR from './pt-br.yaml'
|
||||
import ja from './ja.yaml'
|
||||
import zhCN from './zh-cn.yaml'
|
||||
import zhTW from './zh-tw.yaml'
|
||||
import es from './es.yaml'
|
||||
import de from './de.yaml'
|
||||
import ru from './ru.yaml'
|
||||
import pl from './pl.yaml'
|
||||
import ko from './ko.yaml'
|
||||
|
||||
import ar from './ar.json'
|
||||
import de from './de.json'
|
||||
import en from './en.json'
|
||||
import es from './es.json'
|
||||
import fr from './fr.json'
|
||||
import it from './it.json'
|
||||
import ja from './ja.json'
|
||||
import pl from './pl.json'
|
||||
import ko from './ko.json'
|
||||
import pt from './pt.json'
|
||||
import ptBR from './pt-br.json'
|
||||
import ru from './ru.json'
|
||||
import zhCN from './zh-cn.json'
|
||||
import zhTW from './zh-tw.json'
|
||||
|
||||
Vue.use(VueI18n)
|
||||
|
||||
@@ -72,19 +74,20 @@ const i18n = new VueI18n({
|
||||
locale: detectLocale(),
|
||||
fallbackLocale: 'en',
|
||||
messages: {
|
||||
'en': en,
|
||||
'it': it,
|
||||
'fr': fr,
|
||||
'pt': pt,
|
||||
'pt-br': ptBR,
|
||||
'ja': ja,
|
||||
'zh-cn': zhCN,
|
||||
'zh-tw': zhTW,
|
||||
'es': es,
|
||||
'ar': ar,
|
||||
'de': de,
|
||||
'ru': ru,
|
||||
'en': en,
|
||||
'es': es,
|
||||
'fr': fr,
|
||||
'it': it,
|
||||
'ja': ja,
|
||||
'ko': ko,
|
||||
'pl': pl,
|
||||
'ko': ko
|
||||
'pt-br': ptBR,
|
||||
'pt': pt,
|
||||
'ru': ru,
|
||||
'zh-cn': zhCN,
|
||||
'zh-tw': zhTW
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
233
src/i18n/it.json
Normal file
233
src/i18n/it.json
Normal file
@@ -0,0 +1,233 @@
|
||||
{
|
||||
"permanent": "Permanente",
|
||||
"buttons": {
|
||||
"cancel": "Annulla",
|
||||
"close": "Chiudi",
|
||||
"copy": "Copia",
|
||||
"copyFile": "Copia file",
|
||||
"copyToClipboard": "Copia negli appunti",
|
||||
"create": "Crea",
|
||||
"delete": "Elimina",
|
||||
"download": "Scarica",
|
||||
"info": "Informazioni",
|
||||
"more": "Altro",
|
||||
"move": "Sposta",
|
||||
"moveFile": "Sposta file",
|
||||
"new": "Nuovo",
|
||||
"next": "Successivo",
|
||||
"ok": "OK",
|
||||
"replace": "Sostituisci",
|
||||
"previous": "Precedente",
|
||||
"rename": "Rinomina",
|
||||
"reportIssue": "Segnala un problema",
|
||||
"save": "Salva",
|
||||
"search": "Cerca",
|
||||
"select": "Seleziona",
|
||||
"share": "Condividi",
|
||||
"publish": "Publica",
|
||||
"selectMultiple": "Seleziona molteplici",
|
||||
"schedule": "Programma",
|
||||
"switchView": "Cambia vista",
|
||||
"toggleSidebar": "Mostra/nascondi la barra laterale",
|
||||
"update": "Aggiorna",
|
||||
"upload": "Carica",
|
||||
"permalink": "Ottieni link permanente"
|
||||
},
|
||||
"success": {
|
||||
"linkCopied": "Link copiato!"
|
||||
},
|
||||
"errors": {
|
||||
"forbidden": "Spiecente, sembra che tu non abbia i permessi per accedere a questa pagina.",
|
||||
"internal": "Qualcosa è andato veramente male.",
|
||||
"notFound": "Questo percorso non può essere raggiunto."
|
||||
},
|
||||
"files": {
|
||||
"folders": "Cartelle",
|
||||
"files": "Files",
|
||||
"body": "Contenuto",
|
||||
"clear": "Cancella",
|
||||
"closePreview": "Chiudi anteprima",
|
||||
"home": "Home",
|
||||
"lastModified": "Ultima modifica",
|
||||
"loading": "Caricamento...",
|
||||
"lonely": "Ci si sente soli qui...",
|
||||
"metadata": "Metadata",
|
||||
"multipleSelectionEnabled": "Selezione multipla attivata",
|
||||
"name": "Nome",
|
||||
"size": "Grandezza",
|
||||
"sortByName": "Ordina per nome",
|
||||
"sortBySize": "Ordina per dimensione",
|
||||
"sortByLastModified": "Ordina per ultima modifica"
|
||||
},
|
||||
"help": {
|
||||
"click": "seleziona un file o una cartella",
|
||||
"ctrl": {
|
||||
"click": "seleziona più file o cartelle",
|
||||
"f": "apre la barra di ricerca",
|
||||
"s": "salva un file o scarica la cartella in cui ci si trova"
|
||||
},
|
||||
"del": "elimina gli elementi selezionati",
|
||||
"doubleClick": "apre un file o una cartella",
|
||||
"esc": "annulla la selezione e/o chiude la finestra aperta",
|
||||
"f1": "questo pannello",
|
||||
"f2": "rinomina un file",
|
||||
"help": "Aiuto"
|
||||
},
|
||||
"login": {
|
||||
"password": "Password",
|
||||
"passwordConfirm": "Password Confirmation",
|
||||
"submit": "Entra",
|
||||
"createAnAccount": "Create an account",
|
||||
"loginInstead": "Already have an account",
|
||||
"passwordsDontMatch": "Passwords don't match",
|
||||
"usernameTaken": "Username already taken",
|
||||
"signup": "Signup",
|
||||
"username": "Nome utente",
|
||||
"wrongCredentials": "Credenziali errate"
|
||||
},
|
||||
"prompts": {
|
||||
"copy": "Copia",
|
||||
"copyMessage": "Seleziona la cartella in cui copiare i file:",
|
||||
"currentlyNavigating": "Attualmente navigando su:",
|
||||
"deleteMessageMultiple": "Sei sicuro di voler eliminare {count} file(s)?",
|
||||
"deleteMessageSingle": "Sei sicuro di voler eliminare questo file/cartella?",
|
||||
"deleteTitle": "Elimina",
|
||||
"displayName": "Nome Mostrato:",
|
||||
"download": "Scarica files",
|
||||
"downloadMessage": "Seleziona il formato che vuoi scaricare.",
|
||||
"error": "Qualcosa è andato per il verso storto",
|
||||
"fileInfo": "Informazioni sul file",
|
||||
"filesSelected": "{count} file selezionati.",
|
||||
"lastModified": "Ultima modifica",
|
||||
"move": "Sposta",
|
||||
"moveMessage": "Seleziona la nuova posizione per i tuoi file e/o cartella/e:",
|
||||
"newDir": "Nuova cartella",
|
||||
"newDirMessage": "Scrivi il nome della nuova cartella.",
|
||||
"newFile": "Nuovo file",
|
||||
"newFileMessage": "Scrivi il nome del nuovo file.",
|
||||
"numberDirs": "Numero di cartelle",
|
||||
"numberFiles": "Numero di files",
|
||||
"replace": "Sostituisci",
|
||||
"replaceMessage": "Uno dei file che stai cercando di caricare sta generando un conflitto per via del suo nome. Desideri sostituire il file già esistente?\n",
|
||||
"rename": "Rinomina",
|
||||
"renameMessage": "Inserisci un nuovo nome per",
|
||||
"show": "Mostra",
|
||||
"size": "Grandezza",
|
||||
"schedule": "Pianifica",
|
||||
"scheduleMessage": "Seleziona data e ora per programmare la pubbilicazione di questo post",
|
||||
"newArchetype": "Crea un nuovo post basato su un modello. Il tuo file verrà creato nella cartella."
|
||||
},
|
||||
"settings": {
|
||||
"instanceName": "Instance name",
|
||||
"brandingDirectoryPath": "Branding directory path",
|
||||
"documentation": "documentation",
|
||||
"branding": "Branding",
|
||||
"disableExternalLinks": "Disable external links (except documentation)",
|
||||
"brandingHelp": "You can costumize how your File Browser instance looks and feels by changing its name, replacing the logo, adding custom styles and even disable external links to GitHub.\nFor more information about custom branding, please check out the {0}.",
|
||||
"admin": "Admin",
|
||||
"administrator": "Amministratore",
|
||||
"allowCommands": "Esegui comandi",
|
||||
"allowEdit": "Modifica, rinomina ed elimina file o cartelle",
|
||||
"allowNew": "Crea nuovi files o cartelle",
|
||||
"allowPublish": "Pubblica nuovi post e pagine",
|
||||
"avoidChanges": "(lascia vuoto per evitare cambiamenti)",
|
||||
"changePassword": "Modifica password",
|
||||
"commandRunner": "Command runner",
|
||||
"commandRunnerHelp": "Here you can set commands that are executed in the named events. You must write one per line. The environment variables {0} and {1} will be available, being {0} relative to {1}. For more information about this feature and the available environment variables, please read the {2}.",
|
||||
"commandsUpdated": "Comandi aggiornati!",
|
||||
"customStylesheet": "Folgio di stile personalizzato",
|
||||
"examples": "Esempi",
|
||||
"globalSettings": "Impostazioni Globali",
|
||||
"language": "Lingua",
|
||||
"lockPassword": "Impedisci all'utente di modificare la password",
|
||||
"newPassword": "La tua nuova password",
|
||||
"newPasswordConfirm": "Conferma la password",
|
||||
"newUser": "Nuovo utente",
|
||||
"password": "Password",
|
||||
"passwordUpdated": "Password aggiornata!",
|
||||
"permissions": "Permessi",
|
||||
"permissionsHelp": "È possibile impostare l'utente come amministratore o scegliere i permessi singolarmente. Se si seleziona \"Amministratore\", tutte le altre opzioni saranno automaticamente assegnate. La gestione degli utenti rimane un privilegio di un amministratore.\n",
|
||||
"profileSettings": "Impostazioni del profilo",
|
||||
"ruleExample1": "Impedisci l'accesso a qualsiasi file avente come prefisso un punto\n (ad esempio .git, .gitignore) presente in ogni cartella.\n",
|
||||
"ruleExample2": "blocca l'accesso al file denominato Caddyfile nella radice del campo di applicazione.",
|
||||
"rules": "Regole",
|
||||
"rulesHelp": "Qui è possibile definire una serie di regole e permessi per questo specifico utente. I file bloccati non appariranno negli elenchi e non saranno accessibili dagli utenti. all'utente. Sia regex che i percorsi relativi all'ambito di applicazione degli utenti sono supportati.\n",
|
||||
"scope": "Scopo",
|
||||
"settingsUpdated": "Impostazioni aggiornate!",
|
||||
"user": "Utente",
|
||||
"userCommands": "Comandi",
|
||||
"userCommandsHelp": "Una lista separata dal spazi con i comandi disponibili per questo utente. Example:\n",
|
||||
"userCreated": "Utente creato!",
|
||||
"userDeleted": "Utente eliminato!",
|
||||
"userManagement": "Gestione degli utenti",
|
||||
"username": "Nome utente",
|
||||
"users": "Utenti",
|
||||
"globalRules": "This is a global set of allow and disallow rules. They apply to every user. You can define specific rules on each user's settings to override this ones.",
|
||||
"allowSignup": "Allow users to signup",
|
||||
"insertRegex": "Insert regex expression",
|
||||
"insertPath": "Insert the path",
|
||||
"userUpdated": "Utente aggiornato!",
|
||||
"generalSettings": "General settings",
|
||||
"userDefaults": "User default settings",
|
||||
"defaultUserDescription": "This are the default settings for new users.",
|
||||
"perm": {
|
||||
"create": "Create files and directories",
|
||||
"delete": "Delete files and directories",
|
||||
"download": "Download",
|
||||
"edit": "Edit files",
|
||||
"execute": "Execute commands",
|
||||
"rename": "Rename or move files and directories",
|
||||
"share": "Share files"
|
||||
}
|
||||
},
|
||||
"sidebar": {
|
||||
"help": "Aiuto",
|
||||
"logout": "Esci",
|
||||
"myFiles": "I miei file",
|
||||
"newFile": "Nuovo file",
|
||||
"newFolder": "Nuova cartella",
|
||||
"settings": "Impostazioni",
|
||||
"siteSettings": "Impostaizoni del sito",
|
||||
"hugoNew": "Hugo New",
|
||||
"preview": "Anteprima"
|
||||
},
|
||||
"search": {
|
||||
"images": "Immagini",
|
||||
"music": "Musica",
|
||||
"notSupportedCommand": "Questo no nè un comando supportato.",
|
||||
"pdf": "PDF",
|
||||
"pressToExecute": "Premi invio per eseguire.",
|
||||
"pressToSearch": "Permi invio per cercare.",
|
||||
"search": "Cerca...",
|
||||
"searchOrCommand": "Cerca o esegui un comando...",
|
||||
"searchOrSupportedCommand": "Cerca o anteponi '$' e usa uno dei comandi supportati:",
|
||||
"typeCommand": "Scrivi e premi invio per eseguire.",
|
||||
"typeSearch": "Scrivi e premi invio per cercare.",
|
||||
"types": "Tipi",
|
||||
"video": "Video",
|
||||
"writeToSearch": "Scrivi qui per cercare"
|
||||
},
|
||||
"languages": {
|
||||
"ar": "العربية",
|
||||
"en": "English",
|
||||
"it": "Italiano",
|
||||
"fr": "Français",
|
||||
"pt": "Português",
|
||||
"ptBR": "Português (Brasil)",
|
||||
"ja": "日本語",
|
||||
"zhCN": "中文 (简体)",
|
||||
"zhTW": "中文 (繁體)",
|
||||
"es": "Español",
|
||||
"de": "Deutsch",
|
||||
"ru": "Русский",
|
||||
"pl": "Polski",
|
||||
"ko": "한국어"
|
||||
},
|
||||
"time": {
|
||||
"unit": "Unità di tempo",
|
||||
"seconds": "Secondi",
|
||||
"minutes": "Minuti",
|
||||
"hours": "Ore",
|
||||
"days": "Giorni"
|
||||
}
|
||||
}
|
||||
211
src/i18n/it.yaml
211
src/i18n/it.yaml
@@ -1,211 +0,0 @@
|
||||
permanent: Permanente
|
||||
buttons:
|
||||
cancel: Annulla
|
||||
close: Chiudi
|
||||
copy: Copia
|
||||
copyFile: Copia file
|
||||
copyToClipboard: Copia negli appunti
|
||||
create: Crea
|
||||
delete: Elimina
|
||||
download: Scarica
|
||||
info: Informazioni
|
||||
more: Altro
|
||||
move: Sposta
|
||||
moveFile: Sposta file
|
||||
new: Nuovo
|
||||
next: Successivo
|
||||
ok: OK
|
||||
replace: Sostituisci
|
||||
previous: Precedente
|
||||
rename: Rinomina
|
||||
reportIssue: Segnala un problema
|
||||
save: Salva
|
||||
search: Cerca
|
||||
select: Seleziona
|
||||
share: Condividi
|
||||
publish: Publica
|
||||
selectMultiple: Seleziona molteplici
|
||||
schedule: Programma
|
||||
switchView: Cambia vista
|
||||
toggleSidebar: Mostra/nascondi la barra laterale
|
||||
update: Aggiorna
|
||||
upload: Carica
|
||||
permalink: Ottieni link permanente
|
||||
success:
|
||||
linkCopied: Link copiato!
|
||||
errors:
|
||||
forbidden: Spiecente, sembra che tu non abbia i permessi per accedere a questa pagina.
|
||||
internal: Qualcosa è andato veramente male.
|
||||
notFound: Questo percorso non può essere raggiunto.
|
||||
files:
|
||||
folders: Cartelle
|
||||
files: Files
|
||||
body: Contenuto
|
||||
clear: Cancella
|
||||
closePreview: Chiudi anteprima
|
||||
home: Home
|
||||
lastModified: Ultima modifica
|
||||
loading: Caricamento...
|
||||
lonely: Ci si sente soli qui...
|
||||
metadata: Metadata
|
||||
multipleSelectionEnabled: Selezione multipla attivata
|
||||
name: Nome
|
||||
size: Grandezza
|
||||
sortByName: Ordina per nome
|
||||
sortBySize: Ordina per dimensione
|
||||
sortByLastModified: Ordina per ultima modifica
|
||||
help:
|
||||
click: seleziona un file o una cartella
|
||||
ctrl:
|
||||
click: seleziona più file o cartelle
|
||||
f: apre la barra di ricerca
|
||||
s: salva un file o scarica la cartella in cui ci si trova
|
||||
del: elimina gli elementi selezionati
|
||||
doubleClick: apre un file o una cartella
|
||||
esc: annulla la selezione e/o chiude la finestra aperta
|
||||
f1: questo pannello
|
||||
f2: rinomina un file
|
||||
help: Aiuto
|
||||
login:
|
||||
password: Password
|
||||
submit: Entra
|
||||
username: Nome utente
|
||||
wrongCredentials: Credenziali errate
|
||||
prompts:
|
||||
copy: Copia
|
||||
copyMessage: 'Seleziona la cartella in cui copiare i file:'
|
||||
currentlyNavigating: 'Attualmente navigando su:'
|
||||
deleteMessageMultiple: Sei sicuro di voler eliminare {count} file(s)?
|
||||
deleteMessageSingle: Sei sicuro di voler eliminare questo file/cartella?
|
||||
deleteTitle: Elimina
|
||||
displayName: 'Nome Mostrato:'
|
||||
download: Scarica files
|
||||
downloadMessage: Seleziona il formato che vuoi scaricare.
|
||||
error: Qualcosa è andato per il verso storto
|
||||
fileInfo: Informazioni sul file
|
||||
filesSelected: "{count} file selezionati."
|
||||
lastModified: Ultima modifica
|
||||
move: Sposta
|
||||
moveMessage: 'Seleziona la nuova posizione per i tuoi file e/o cartella/e:'
|
||||
newDir: Nuova cartella
|
||||
newDirMessage: Scrivi il nome della nuova cartella.
|
||||
newFile: Nuovo file
|
||||
newFileMessage: Scrivi il nome del nuovo file.
|
||||
numberDirs: Numero di cartelle
|
||||
numberFiles: Numero di files
|
||||
replace: Sostituisci
|
||||
replaceMessage: >
|
||||
Uno dei file che stai cercando di caricare sta generando un conflitto per via del suo nome.
|
||||
Desideri sostituire il file già esistente?
|
||||
rename: Rinomina
|
||||
renameMessage: Inserisci un nuovo nome per
|
||||
show: Mostra
|
||||
size: Grandezza
|
||||
schedule: Pianifica
|
||||
scheduleMessage: Seleziona data e ora per programmare la pubbilicazione di questo post
|
||||
newArchetype: Crea un nuovo post basato su un modello. Il tuo file verrà creato nella cartella.
|
||||
settings:
|
||||
admin: Admin
|
||||
administrator: Amministratore
|
||||
allowCommands: Esegui comandi
|
||||
allowEdit: Modifica, rinomina ed elimina file o cartelle
|
||||
allowNew: Crea nuovi files o cartelle
|
||||
allowPublish: Pubblica nuovi post e pagine
|
||||
avoidChanges: "(lascia vuoto per evitare cambiamenti)"
|
||||
changePassword: Modifica password
|
||||
commands: Comandi
|
||||
commandsHelp: >
|
||||
Qui è possibile impostare i comandi che vengono eseguiti negli eventi denominati. È possibile
|
||||
scrovere un comando per riga. Se l'evento è corretato ad un file, come ad esempio prima e dopo
|
||||
un salvataggio, la variabile d'ambiente "FILE" sarà disponibile per l'uso e conterrà il percorso
|
||||
al file.
|
||||
commandsUpdated: Comandi aggiornati!
|
||||
customStylesheet: Folgio di stile personalizzato
|
||||
examples: Esempi
|
||||
globalSettings: Impostazioni Globali
|
||||
language: Lingua
|
||||
lockPassword: Impedisci all'utente di modificare la password
|
||||
newPassword: La tua nuova password
|
||||
newPasswordConfirm: Conferma la password
|
||||
newUser: Nuovo utente
|
||||
password: Password
|
||||
passwordUpdated: Password aggiornata!
|
||||
permissions: Permessi
|
||||
permissionsHelp: >
|
||||
È possibile impostare l'utente come amministratore o scegliere i permessi
|
||||
singolarmente. Se si seleziona "Amministratore", tutte le altre opzioni saranno
|
||||
automaticamente assegnate. La gestione degli utenti rimane un privilegio di un amministratore.
|
||||
profileSettings: Impostazioni del profilo
|
||||
ruleExample1: >
|
||||
Impedisci l'accesso a qualsiasi file avente come prefisso un punto
|
||||
(ad esempio .git, .gitignore) presente in ogni cartella.
|
||||
ruleExample2: blocca l'accesso al file denominato Caddyfile nella radice del campo di applicazione.
|
||||
rules: Regole
|
||||
rulesHelp1: >
|
||||
Qui è possibile definire una serie di regole e permessi per questo specifico utente.
|
||||
I file bloccati non appariranno negli elenchi e non saranno accessibili dagli utenti.
|
||||
all'utente. Sia regex che i percorsi relativi all'ambito di applicazione degli utenti sono supportati.
|
||||
rulesHelp2: >
|
||||
Ogni regola deve essere inserita in una riga diversa e deve iniziare
|
||||
con la parola chiave {0} or {1}.
|
||||
Quindi si deve scrivere {2} se si utilizza un'espressione regolare e quindi
|
||||
l'espressione o il percorso.
|
||||
scope: Scopo
|
||||
settingsUpdated: Impostazioni aggiornate!
|
||||
user: Utente
|
||||
userCommands: Comandi
|
||||
userCommandsHelp: >
|
||||
Una lista separata dal spazi con i comandi disponibili per questo utente.
|
||||
Example:
|
||||
userCreated: Utente creato!
|
||||
userDeleted: Utente eliminato!
|
||||
userManagement: Gestione degli utenti
|
||||
username: Nome utente
|
||||
users: Utenti
|
||||
userUpdated: Utente aggiornato!
|
||||
sidebar:
|
||||
help: Aiuto
|
||||
logout: Esci
|
||||
myFiles: I miei file
|
||||
newFile: Nuovo file
|
||||
newFolder: Nuova cartella
|
||||
settings: Impostazioni
|
||||
siteSettings: Impostaizoni del sito
|
||||
hugoNew: Hugo New
|
||||
preview: Anteprima
|
||||
search:
|
||||
images: Immagini
|
||||
music: Musica
|
||||
notSupportedCommand: Questo no nè un comando supportato.
|
||||
pdf: PDF
|
||||
pressToExecute: Premi invio per eseguire.
|
||||
pressToSearch: Permi invio per cercare.
|
||||
search: Cerca...
|
||||
searchOrCommand: Cerca o esegui un comando...
|
||||
searchOrSupportedCommand: 'Cerca o anteponi ''$'' e usa uno dei comandi supportati:'
|
||||
typeCommand: Scrivi e premi invio per eseguire.
|
||||
typeSearch: Scrivi e premi invio per cercare.
|
||||
types: Tipi
|
||||
video: Video
|
||||
writeToSearch: Scrivi qui per cercare
|
||||
languages:
|
||||
ar: العربية
|
||||
en: English
|
||||
it: Italiano
|
||||
fr: Français
|
||||
pt: Português
|
||||
ptBR: Português (Brasil)
|
||||
ja: 日本語
|
||||
zhCN: 中文 (简体)
|
||||
zhTW: 中文 (繁體)
|
||||
es: Español
|
||||
de: Deutsch
|
||||
ru: Русский
|
||||
pl: Polski
|
||||
ko: 한국어
|
||||
time:
|
||||
unit: Unità di tempo
|
||||
seconds: Secondi
|
||||
minutes: Minuti
|
||||
hours: Ore
|
||||
days: Giorni
|
||||
233
src/i18n/ja.json
Normal file
233
src/i18n/ja.json
Normal file
@@ -0,0 +1,233 @@
|
||||
{
|
||||
"permanent": "永久",
|
||||
"buttons": {
|
||||
"cancel": "キャンセル",
|
||||
"close": "閉じる",
|
||||
"copy": "コピー",
|
||||
"copyFile": "ファイルをコピー",
|
||||
"copyToClipboard": "クリップボードにコピー",
|
||||
"create": "作成",
|
||||
"delete": "削除",
|
||||
"download": "ダウンロード",
|
||||
"info": "情報",
|
||||
"more": "More",
|
||||
"move": "移動",
|
||||
"moveFile": "ファイルを移動",
|
||||
"new": "新規",
|
||||
"next": "次",
|
||||
"ok": "OK",
|
||||
"replace": "置き換える",
|
||||
"previous": "前",
|
||||
"rename": "名前を変更",
|
||||
"reportIssue": "問題を報告",
|
||||
"save": "保存",
|
||||
"search": "検索",
|
||||
"select": "選択",
|
||||
"share": "シェア",
|
||||
"publish": "発表",
|
||||
"selectMultiple": "複数選択",
|
||||
"schedule": "スケジュール",
|
||||
"switchView": "表示を切り替わる",
|
||||
"toggleSidebar": "サイドバーを表示する",
|
||||
"update": "更新",
|
||||
"upload": "アップロード",
|
||||
"permalink": "固定リンク"
|
||||
},
|
||||
"success": {
|
||||
"linkCopied": "リンクがコピーされました!"
|
||||
},
|
||||
"errors": {
|
||||
"forbidden": "アクセスが拒否されました。",
|
||||
"internal": "内部エラーが発生しました。",
|
||||
"notFound": "リソースが見つからなりませんでした。"
|
||||
},
|
||||
"files": {
|
||||
"folders": "フォルダ",
|
||||
"files": "ファイル",
|
||||
"body": "本文",
|
||||
"clear": "クリアー",
|
||||
"closePreview": "プレビューを閉じる",
|
||||
"home": "ホーム",
|
||||
"lastModified": "最終変更",
|
||||
"loading": "ローディング...",
|
||||
"lonely": "ここには何もない...",
|
||||
"metadata": "メタデータ",
|
||||
"multipleSelectionEnabled": "複数選択有効",
|
||||
"name": "名前",
|
||||
"size": "サイズ",
|
||||
"sortByName": "名前によるソート",
|
||||
"sortBySize": "サイズによるソート",
|
||||
"sortByLastModified": "最終変更日付によるソート"
|
||||
},
|
||||
"help": {
|
||||
"click": "ファイルやディレクトリを選択",
|
||||
"ctrl": {
|
||||
"click": "複数のファイルやディレクトリを選択",
|
||||
"f": "検索を有効にする",
|
||||
"s": "ファイルを保存またはカレントディレクトリをダウンロード"
|
||||
},
|
||||
"del": "選択した項目を削除",
|
||||
"doubleClick": "ファイルやディレクトリをオープン",
|
||||
"esc": "選択をクリアーまたはプロンプトを閉じる",
|
||||
"f1": "このヘルプを表示",
|
||||
"f2": "ファイルの名前を変更",
|
||||
"help": "ヘルプ"
|
||||
},
|
||||
"login": {
|
||||
"password": "パスワード",
|
||||
"passwordConfirm": "Password Confirmation",
|
||||
"submit": "ログイン",
|
||||
"createAnAccount": "Create an account",
|
||||
"loginInstead": "Already have an account",
|
||||
"passwordsDontMatch": "Passwords don't match",
|
||||
"usernameTaken": "Username already taken",
|
||||
"signup": "Signup",
|
||||
"username": "ユーザ名",
|
||||
"wrongCredentials": "ユーザ名またはパスワードが間違っています。"
|
||||
},
|
||||
"prompts": {
|
||||
"copy": "コピー",
|
||||
"copyMessage": "コピーの目標ディレクトリを選択してください:",
|
||||
"currentlyNavigating": "現在閲覧しているディレクトリ:",
|
||||
"deleteMessageMultiple": "{count} つのファイルを本当に削除してよろしいですか。",
|
||||
"deleteMessageSingle": "このファイル/フォルダを本当に削除してよろしいですか。",
|
||||
"deleteTitle": "ファイルを削除",
|
||||
"displayName": "名前:",
|
||||
"download": "ファイルをダウンロード",
|
||||
"downloadMessage": "圧縮形式を選択してください。",
|
||||
"error": "あるエラーが発生しました。",
|
||||
"fileInfo": "ファイル情報",
|
||||
"filesSelected": "{count} つのファイルは選択されました。",
|
||||
"lastModified": "最終変更",
|
||||
"move": "移動",
|
||||
"moveMessage": "移動の目標ディレクトリを選択してください:",
|
||||
"newDir": "新しいディレクトリを作成",
|
||||
"newDirMessage": "新しいディレクトリの名前を入力してください。",
|
||||
"newFile": "新しいファイルを作成",
|
||||
"newFileMessage": "新しいファイルの名前を入力してください。",
|
||||
"numberDirs": "ディレクトリ個数",
|
||||
"numberFiles": "ファイル個数",
|
||||
"replace": "置き換える",
|
||||
"replaceMessage": "アップロードするファイルの中でかち合う名前が一つあります。 既存のファイルを置き換えりませんか。\n",
|
||||
"rename": "名前を変更",
|
||||
"renameMessage": "名前を変更しようファイルは:",
|
||||
"show": "表示",
|
||||
"size": "サイズ",
|
||||
"schedule": "スケジュール",
|
||||
"scheduleMessage": "このポストの発表日付をスケジュールしてください。",
|
||||
"newArchetype": "ある元型に基づいて新しいポストを作成します。ファイルは コンテンツフォルダに作成されます。"
|
||||
},
|
||||
"settings": {
|
||||
"instanceName": "Instance name",
|
||||
"brandingDirectoryPath": "Branding directory path",
|
||||
"documentation": "documentation",
|
||||
"branding": "Branding",
|
||||
"disableExternalLinks": "Disable external links (except documentation)",
|
||||
"brandingHelp": "You can costumize how your File Browser instance looks and feels by changing its name, replacing the logo, adding custom styles and even disable external links to GitHub.\nFor more information about custom branding, please check out the {0}.",
|
||||
"admin": "管理者",
|
||||
"administrator": "管理者",
|
||||
"allowCommands": "コマンドの実行",
|
||||
"allowEdit": "ファイルやディレクトリの編集、名前変更と削除",
|
||||
"allowNew": "ファイルとディレクトリの作成",
|
||||
"allowPublish": "ポストとぺーじの発表",
|
||||
"avoidChanges": "(変更を避けるために空白にしてください)",
|
||||
"changePassword": "パスワードを変更",
|
||||
"commandRunner": "Command runner",
|
||||
"commandRunnerHelp": "Here you can set commands that are executed in the named events. You must write one per line. The environment variables {0} and {1} will be available, being {0} relative to {1}. For more information about this feature and the available environment variables, please read the {2}.",
|
||||
"commandsUpdated": "コマンドは更新されました!",
|
||||
"customStylesheet": "カスタムスタイルシ ート",
|
||||
"examples": "例",
|
||||
"globalSettings": "グローバル設定",
|
||||
"language": "言語",
|
||||
"lockPassword": "新しいパスワードを変更に禁止",
|
||||
"newPassword": "新しいパスワード",
|
||||
"newPasswordConfirm": "新しいパスワードを確認します",
|
||||
"newUser": "新しいユーザー",
|
||||
"password": "パスワード",
|
||||
"passwordUpdated": "パスワードは更新されました!",
|
||||
"permissions": "権限",
|
||||
"permissionsHelp": "あなたはユーザーを管理者に設定し、または権限を個々に設定しできます。\"管理者\"を選択する場合、その他のすべての選択肢は自動的に設定されます。ユーザーの管理は管理者の権限として保留されました。",
|
||||
"profileSettings": "プロファイル設定",
|
||||
"ruleExample1": "各フォルダに名前はドットで始まるファイル(例えば、.git、.gitignore)へのアクセスを制限します。",
|
||||
"ruleExample2": "範囲のルートパスに名前は Caddyfile のファイルへのアクセスを制限します。",
|
||||
"rules": "規則",
|
||||
"rulesHelp": "ここに、あなたはこのユーザーの許可または拒否規則を設定できます。ブロックされたファイルはリストに表示されません、それではアクセスも制限されます。正規表現(regex)のサポートと範囲に相対のパスが提供されています。",
|
||||
"scope": "範囲",
|
||||
"settingsUpdated": "設定は更新されました!",
|
||||
"user": "ユーザー",
|
||||
"userCommands": "ユーザーのコマンド",
|
||||
"userCommandsHelp": "空白区切りの有効のコマンドのリストを指定してください。例:",
|
||||
"userCreated": "ユーザーは作成されました!",
|
||||
"userDeleted": "ユーザーは削除されました!",
|
||||
"userManagement": "ユーザー管理",
|
||||
"username": "ユーザー名",
|
||||
"users": "ユーザー",
|
||||
"globalRules": "This is a global set of allow and disallow rules. They apply to every user. You can define specific rules on each user's settings to override this ones.",
|
||||
"allowSignup": "Allow users to signup",
|
||||
"insertRegex": "Insert regex expression",
|
||||
"insertPath": "Insert the path",
|
||||
"userUpdated": "ユーザーは更新されました!",
|
||||
"generalSettings": "General settings",
|
||||
"userDefaults": "User default settings",
|
||||
"defaultUserDescription": "This are the default settings for new users.",
|
||||
"perm": {
|
||||
"create": "Create files and directories",
|
||||
"delete": "Delete files and directories",
|
||||
"download": "Download",
|
||||
"edit": "Edit files",
|
||||
"execute": "Execute commands",
|
||||
"rename": "Rename or move files and directories",
|
||||
"share": "Share files"
|
||||
}
|
||||
},
|
||||
"sidebar": {
|
||||
"help": "ヘルプ",
|
||||
"logout": "ログアウト",
|
||||
"myFiles": "私のファイル",
|
||||
"newFile": "新しいファイルを作成",
|
||||
"newFolder": "新しいフォルダを作成",
|
||||
"settings": "設定",
|
||||
"siteSettings": "サイト設定",
|
||||
"hugoNew": "Hugo New",
|
||||
"preview": "プレビュー"
|
||||
},
|
||||
"search": {
|
||||
"images": "画像",
|
||||
"music": "音楽",
|
||||
"notSupportedCommand": "This is a not supported command.",
|
||||
"pdf": "PDF",
|
||||
"pressToExecute": "Enter を押して実行します。",
|
||||
"pressToSearch": "Enter を押して検索します。",
|
||||
"search": "検索...",
|
||||
"searchOrCommand": "コマンドを検索または実行します。",
|
||||
"searchOrSupportedCommand": "サポートしているコマンドを検索または実行します:",
|
||||
"typeCommand": "Type and press enter to execute.",
|
||||
"typeSearch": "Type and press enter to search.",
|
||||
"types": "種類",
|
||||
"video": "ビデオ",
|
||||
"writeToSearch": "ここにキーワードを入力してください"
|
||||
},
|
||||
"languages": {
|
||||
"ar": "العربية",
|
||||
"en": "English",
|
||||
"it": "Italiano",
|
||||
"fr": "Français",
|
||||
"pt": "Português",
|
||||
"ptBR": "Português (Brasil)",
|
||||
"ja": "日本語",
|
||||
"zhCN": "中文 (简体)",
|
||||
"zhTW": "中文 (繁體)",
|
||||
"es": "Español",
|
||||
"de": "Deutsch",
|
||||
"ru": "Русский",
|
||||
"pl": "Polski",
|
||||
"ko": "한국어"
|
||||
},
|
||||
"time": {
|
||||
"unit": "時間単位",
|
||||
"seconds": "秒",
|
||||
"minutes": "分",
|
||||
"hours": "時間",
|
||||
"days": "日"
|
||||
}
|
||||
}
|
||||
208
src/i18n/ja.yaml
208
src/i18n/ja.yaml
@@ -1,208 +0,0 @@
|
||||
permanent: 永久
|
||||
buttons:
|
||||
cancel: キャンセル
|
||||
close: 閉じる
|
||||
copy: コピー
|
||||
copyFile: ファイルをコピー
|
||||
copyToClipboard: クリップボードにコピー
|
||||
create: 作成
|
||||
delete: 削除
|
||||
download: ダウンロード
|
||||
info: 情報
|
||||
more: More
|
||||
move: 移動
|
||||
moveFile: ファイルを移動
|
||||
new: 新規
|
||||
next: 次
|
||||
ok: OK
|
||||
replace: 置き換える
|
||||
previous: 前
|
||||
rename: 名前を変更
|
||||
reportIssue: 問題を報告
|
||||
save: 保存
|
||||
search: 検索
|
||||
select: 選択
|
||||
share: シェア
|
||||
publish: 発表
|
||||
selectMultiple: 複数選択
|
||||
schedule: スケジュール
|
||||
switchView: 表示を切り替わる
|
||||
toggleSidebar: サイドバーを表示する
|
||||
update: 更新
|
||||
upload: アップロード
|
||||
permalink: 固定リンク
|
||||
success:
|
||||
linkCopied: リンクがコピーされました!
|
||||
errors:
|
||||
forbidden: アクセスが拒否されました。
|
||||
internal: 内部エラーが発生しました。
|
||||
notFound: リソースが見つからなりませんでした。
|
||||
files:
|
||||
folders: フォルダ
|
||||
files: ファイル
|
||||
body: 本文
|
||||
clear: クリアー
|
||||
closePreview: プレビューを閉じる
|
||||
home: ホーム
|
||||
lastModified: 最終変更
|
||||
loading: ローディング...
|
||||
lonely: ここには何もない...
|
||||
metadata: メタデータ
|
||||
multipleSelectionEnabled: 複数選択有効
|
||||
name: 名前
|
||||
size: サイズ
|
||||
sortByName: 名前によるソート
|
||||
sortBySize: サイズによるソート
|
||||
sortByLastModified: 最終変更日付によるソート
|
||||
help:
|
||||
click: ファイルやディレクトリを選択
|
||||
ctrl:
|
||||
click: 複数のファイルやディレクトリを選択
|
||||
f: 検索を有効にする
|
||||
s: ファイルを保存またはカレントディレクトリをダウンロード
|
||||
del: 選択した項目を削除
|
||||
doubleClick: ファイルやディレクトリをオープン
|
||||
esc: 選択をクリアーまたはプロンプトを閉じる
|
||||
f1: このヘルプを表示
|
||||
f2: ファイルの名前を変更
|
||||
help: ヘルプ
|
||||
login:
|
||||
password: パスワード
|
||||
submit: ログイン
|
||||
username: ユーザ名
|
||||
wrongCredentials: ユーザ名またはパスワードが間違っています。
|
||||
prompts:
|
||||
copy: コピー
|
||||
copyMessage: コピーの目標ディレクトリを選択してください:
|
||||
currentlyNavigating: 現在閲覧しているディレクトリ:
|
||||
deleteMessageMultiple: '{count} つのファイルを本当に削除してよろしいですか。'
|
||||
deleteMessageSingle: このファイル/フォルダを本当に削除してよろしいですか。
|
||||
deleteTitle: ファイルを削除
|
||||
displayName: 名前:
|
||||
download: ファイルをダウンロード
|
||||
downloadMessage: 圧縮形式を選択してください。
|
||||
error: あるエラーが発生しました。
|
||||
fileInfo: ファイル情報
|
||||
filesSelected: '{count} つのファイルは選択されました。'
|
||||
lastModified: 最終変更
|
||||
move: 移動
|
||||
moveMessage: 移動の目標ディレクトリを選択してください:
|
||||
newDir: 新しいディレクトリを作成
|
||||
newDirMessage: 新しいディレクトリの名前を入力してください。
|
||||
newFile: 新しいファイルを作成
|
||||
newFileMessage: 新しいファイルの名前を入力してください。
|
||||
numberDirs: ディレクトリ個数
|
||||
numberFiles: ファイル個数
|
||||
replace: 置き換える
|
||||
replaceMessage: >
|
||||
アップロードするファイルの中でかち合う名前が一つあります。
|
||||
既存のファイルを置き換えりませんか。
|
||||
rename: 名前を変更
|
||||
renameMessage: 名前を変更しようファイルは:
|
||||
show: 表示
|
||||
size: サイズ
|
||||
schedule: スケジュール
|
||||
scheduleMessage: このポストの発表日付をスケジュールしてください。
|
||||
newArchetype: ある元型に基づいて新しいポストを作成します。ファイルは コンテンツフォルダに作成されます。
|
||||
settings:
|
||||
admin: 管理者
|
||||
administrator: 管理者
|
||||
allowCommands: コマンドの実行
|
||||
allowEdit: ファイルやディレクトリの編集、名前変更と削除
|
||||
allowNew: ファイルとディレクトリの作成
|
||||
allowPublish: ポストとぺーじの発表
|
||||
avoidChanges: "(変更を避けるために空白にしてください)"
|
||||
changePassword: パスワードを変更
|
||||
commands: コマンド
|
||||
commandsHelp: "\
|
||||
ここで、名前付きイベントに実行するコマンドを設定することができます。\
|
||||
一行にコマンド一つを入力してください。\
|
||||
イベントはファイルに関連する場合、例えばファイル保存の前にまたは後で、\
|
||||
環境変数 FILE はファイルのパスに割り当てられます。"
|
||||
commandsUpdated: コマンドは更新されました!
|
||||
customStylesheet: カスタムスタイルシ ート
|
||||
examples: 例
|
||||
globalSettings: グローバル設定
|
||||
language: 言語
|
||||
lockPassword: 新しいパスワードを変更に禁止
|
||||
newPassword: 新しいパスワード
|
||||
newPasswordConfirm: 新しいパスワードを確認します
|
||||
newUser: 新しいユーザー
|
||||
password: パスワード
|
||||
passwordUpdated: パスワードは更新されました!
|
||||
permissions: 権限
|
||||
permissionsHelp: "\
|
||||
あなたはユーザーを管理者に設定し、または権限を個々に設定しできます。\
|
||||
\"管理者\"を選択する場合、その他のすべての選択肢は自動的に設定されます。\
|
||||
ユーザーの管理は管理者の権限として保留されました。"
|
||||
profileSettings: プロファイル設定
|
||||
ruleExample1: "\
|
||||
各フォルダに名前はドットで始まるファイル(例えば、.git、.gitignore)\
|
||||
へのアクセスを制限します。"
|
||||
ruleExample2: 範囲のルートパスに名前は Caddyfile のファイルへのアクセスを制限します。
|
||||
rules: 規則
|
||||
rulesHelp1: "\
|
||||
ここに、あなたはこのユーザーの許可または拒否規則を設定できます。\
|
||||
ブロックされたファイルはリストに表示されません、それではアクセスも制限されます。\
|
||||
正規表現(regex)のサポートと範囲に相対のパスが提供されています。"
|
||||
rulesHelp2: "\
|
||||
一行に規則一つを入力してください、\
|
||||
その間に規則はキーワード {0} や {1} で始める必要があります。\
|
||||
そして正規表現を使う場合、{2} と入力し、表現やパスを入力してください。"
|
||||
scope: 範囲
|
||||
settingsUpdated: 設定は更新されました!
|
||||
user: ユーザー
|
||||
userCommands: ユーザーのコマンド
|
||||
userCommandsHelp: "\
|
||||
空白区切りの有効のコマンドのリストを指定してください。\
|
||||
例:"
|
||||
userCreated: ユーザーは作成されました!
|
||||
userDeleted: ユーザーは削除されました!
|
||||
userManagement: ユーザー管理
|
||||
username: ユーザー名
|
||||
users: ユーザー
|
||||
userUpdated: ユーザーは更新されました!
|
||||
sidebar:
|
||||
help: ヘルプ
|
||||
logout: ログアウト
|
||||
myFiles: 私のファイル
|
||||
newFile: 新しいファイルを作成
|
||||
newFolder: 新しいフォルダを作成
|
||||
settings: 設定
|
||||
siteSettings: サイト設定
|
||||
hugoNew: Hugo New
|
||||
preview: プレビュー
|
||||
search:
|
||||
images: 画像
|
||||
music: 音楽
|
||||
pdf: PDF
|
||||
pressToExecute: Enter を押して実行します。
|
||||
pressToSearch: Enter を押して検索します。
|
||||
search: 検索...
|
||||
searchOrCommand: コマンドを検索または実行します。
|
||||
searchOrSupportedCommand: サポートしているコマンドを検索または実行します:
|
||||
type: キーワードを入力し、Enter を押して検索します。
|
||||
types: 種類
|
||||
video: ビデオ
|
||||
writeToSearch: ここにキーワードを入力してください
|
||||
languages:
|
||||
ar: العربية
|
||||
en: English
|
||||
it: Italiano
|
||||
fr: Français
|
||||
pt: Português
|
||||
ptBR: Português (Brasil)
|
||||
ja: 日本語
|
||||
zhCN: 中文 (简体)
|
||||
zhTW: 中文 (繁體)
|
||||
es: Español
|
||||
de: Deutsch
|
||||
ru: Русский
|
||||
pl: Polski
|
||||
ko: 한국어
|
||||
time:
|
||||
unit: 時間単位
|
||||
seconds: 秒
|
||||
minutes: 分
|
||||
hours: 時間
|
||||
days: 日
|
||||
233
src/i18n/ko.json
Normal file
233
src/i18n/ko.json
Normal file
@@ -0,0 +1,233 @@
|
||||
{
|
||||
"permanent": "영구적인",
|
||||
"buttons": {
|
||||
"cancel": "취소",
|
||||
"close": "닫기",
|
||||
"copy": "복사",
|
||||
"copyFile": "파일 복사",
|
||||
"copyToClipboard": "클립보드로 복사",
|
||||
"create": "생성",
|
||||
"delete": "삭제",
|
||||
"download": "다운로드",
|
||||
"info": "정보",
|
||||
"more": "더보기",
|
||||
"move": "이동",
|
||||
"moveFile": "파일 이동",
|
||||
"new": "새로운 파일",
|
||||
"next": "다음",
|
||||
"ok": "확인",
|
||||
"replace": "대체",
|
||||
"previous": "이전",
|
||||
"rename": "이름 바꾸기",
|
||||
"reportIssue": "이슈 보내기",
|
||||
"save": "저장",
|
||||
"search": "검색",
|
||||
"select": "선택",
|
||||
"share": "공유",
|
||||
"publish": "퍼블리쉬",
|
||||
"selectMultiple": "다수 선택하기",
|
||||
"schedule": "스케쥴",
|
||||
"switchView": "뷰 전환",
|
||||
"toggleSidebar": "사이드바 토글",
|
||||
"update": "업데이트",
|
||||
"upload": "업로드",
|
||||
"permalink": "영구적인 링크 얻기"
|
||||
},
|
||||
"success": {
|
||||
"linkCopied": "링크가 복사되었습니다!"
|
||||
},
|
||||
"errors": {
|
||||
"forbidden": "허가되지 않은 접속입니다!",
|
||||
"internal": "먼가 오류가 있네요?!",
|
||||
"notFound": "해당 경로를 찾을 수 없습니다."
|
||||
},
|
||||
"files": {
|
||||
"folders": "폴더",
|
||||
"files": "파일",
|
||||
"body": "본문",
|
||||
"clear": "클리어",
|
||||
"closePreview": "프리뷰 닫기",
|
||||
"home": "홈",
|
||||
"lastModified": "최종 수정 시간",
|
||||
"loading": "로딩중..",
|
||||
"lonely": "이곳은 쓸쓸하네요..",
|
||||
"metadata": "메타데이터",
|
||||
"multipleSelectionEnabled": "다수 선택하기 켜짐",
|
||||
"name": "이름",
|
||||
"size": "크기",
|
||||
"sortByName": "이름으로 정렬하기",
|
||||
"sortBySize": "크기로 정렬하기",
|
||||
"sortByLastModified": "최종 수정 시간으로 정렬하기"
|
||||
},
|
||||
"help": {
|
||||
"click": "파일이나 디렉토리를 선택해주세요.",
|
||||
"ctrl": {
|
||||
"click": "다수의 파일이나 디렉토리를 선택해주세요.",
|
||||
"f": "검색창 열기",
|
||||
"s": "현재 있는 곳의 파일이나 디렉토리를 다운로드 하기"
|
||||
},
|
||||
"del": "선택한 파일들 삭제하기",
|
||||
"doubleClick": "파일이나 디렉토리 열기",
|
||||
"esc": "선택 취소/프롬프트 닫기",
|
||||
"f1": "정보",
|
||||
"f2": "파일 이름 변경",
|
||||
"help": "도움(Help)"
|
||||
},
|
||||
"login": {
|
||||
"password": "비밀번호",
|
||||
"passwordConfirm": "Password Confirmation",
|
||||
"submit": "로그인",
|
||||
"createAnAccount": "Create an account",
|
||||
"loginInstead": "Already have an account",
|
||||
"passwordsDontMatch": "Passwords don't match",
|
||||
"usernameTaken": "Username already taken",
|
||||
"signup": "Signup",
|
||||
"username": "유저네임",
|
||||
"wrongCredentials": "유저네임 혹은 비밀번호가 올바르지 않습니다."
|
||||
},
|
||||
"prompts": {
|
||||
"copy": "복사",
|
||||
"copyMessage": "파일을 복사할 곳 정하기:",
|
||||
"currentlyNavigating": "현재 위치:",
|
||||
"deleteMessageMultiple": "{count} 개의 파일을 삭제하시겠습니까?",
|
||||
"deleteMessageSingle": "이 파일 혹은 디렉토리를 삭제하시겠습니까?",
|
||||
"deleteTitle": "파일 삭제",
|
||||
"displayName": "디스플레이 네임:",
|
||||
"download": "파일 다운로드",
|
||||
"downloadMessage": "다운로드 받고 싶은 포맷 설정.",
|
||||
"error": "에러 발생!",
|
||||
"fileInfo": "파일 정보",
|
||||
"filesSelected": "{count} 개의 파일이 선택되었습니다.",
|
||||
"lastModified": "최종 수정 시간",
|
||||
"move": "이동",
|
||||
"moveMessage": "이동시킬 곳을 알려주세요:",
|
||||
"newDir": "새 디렉토리",
|
||||
"newDirMessage": "새 디렉토리의 이름을 입력해주세요.",
|
||||
"newFile": "새 파일",
|
||||
"newFileMessage": "새 파일의 이름을 입력해주세요.",
|
||||
"numberDirs": "디렉토리 수",
|
||||
"numberFiles": "파일 수",
|
||||
"replace": "덮어쓰기(replace)",
|
||||
"replaceMessage": "동일 한 파일을 업로드하려고 합니다. 존재하는 파일을 덮어 씌울까요?\n",
|
||||
"rename": "이름 변경",
|
||||
"renameMessage": "새로운 이름을 알려주세요.",
|
||||
"show": "보기",
|
||||
"size": "크기",
|
||||
"schedule": "스케쥴",
|
||||
"scheduleMessage": "이 포스트를 공개할 시간을 알려주세요.",
|
||||
"newArchetype": "archetype에 기반한 포스트를 생성합니다. 파일은 컨텐트 폴더(content folder)에 생성됩니다."
|
||||
},
|
||||
"settings": {
|
||||
"instanceName": "Instance name",
|
||||
"brandingDirectoryPath": "Branding directory path",
|
||||
"documentation": "documentation",
|
||||
"branding": "Branding",
|
||||
"disableExternalLinks": "Disable external links (except documentation)",
|
||||
"brandingHelp": "You can costumize how your File Browser instance looks and feels by changing its name, replacing the logo, adding custom styles and even disable external links to GitHub.\nFor more information about custom branding, please check out the {0}.",
|
||||
"admin": "관리자",
|
||||
"administrator": "관리자",
|
||||
"allowCommands": "명령어 실행",
|
||||
"allowEdit": "파일/디렉토리의 수정, 변경 또는 삭제를 허용합니다.",
|
||||
"allowNew": "파일/디렉토리의 생성을 허용합니다.",
|
||||
"allowPublish": "페이지(새글)를 생성하는 것을 허용합니다.",
|
||||
"avoidChanges": "(수정하기 싫으시면 그냥 놔두시면 됩니다)",
|
||||
"changePassword": "비밀번호 변경",
|
||||
"commandRunner": "Command runner",
|
||||
"commandRunnerHelp": "Here you can set commands that are executed in the named events. You must write one per line. The environment variables {0} and {1} will be available, being {0} relative to {1}. For more information about this feature and the available environment variables, please read the {2}.",
|
||||
"commandsUpdated": "커맨드 업데이트 완료!",
|
||||
"customStylesheet": "사용자 설정 스타일시트",
|
||||
"examples": "예시",
|
||||
"globalSettings": "글로벌 설정",
|
||||
"language": "언어",
|
||||
"lockPassword": "유저가 패스워드를 변경하는 것을 방지합니다",
|
||||
"newPassword": "새로운 비밀번호",
|
||||
"newPasswordConfirm": "새로운 비밀번호 확인",
|
||||
"newUser": "새로운 유저",
|
||||
"password": "비밀번호",
|
||||
"passwordUpdated": "비밀번호 업데이트 완료!",
|
||||
"permissions": "권한",
|
||||
"permissionsHelp": "유저를 관리자로 만들거나 각 퍼미션을 선택해 줄 수 있습니다. 관리자를 선택하시면 다른 모든 옵션들이 자동으로 선택됩니다. 사용자 관리는 여전히 현재 관리자만 할 수 있습니다.\n",
|
||||
"profileSettings": "프로필 설정",
|
||||
"ruleExample1": "모든 폴더의 .으로 시작하는 파일의 접근을 방지합니다.(예 .git, .gitignore) (숨김파일 보기 방지)\n",
|
||||
"ruleExample2": "Caddyfile파일의 접근을 방지합니다.",
|
||||
"rules": "룰",
|
||||
"rulesHelp": "각 유저별 룰을 허용/비허용 할지 정할 수 있습니다. 블락된 파일은 리스팅 되지 않고 유저들은 접근할 수 없습니다. 사용자의 접근 허용 범위와 관련해 정규표현식(regex)과 경로를 지원합니다.\n",
|
||||
"scope": "범위",
|
||||
"settingsUpdated": "설정 업데이트 완료!",
|
||||
"user": "유저",
|
||||
"userCommands": "명령어들",
|
||||
"userCommandsHelp": "이 유저에게 허용시킬 커맨드를 스페이스로 구분해 입력해주세요. 예시:\n",
|
||||
"userCreated": "유저 생성됨!",
|
||||
"userDeleted": "유저 삭제됨!",
|
||||
"userManagement": "유저 관리",
|
||||
"username": "유저네임",
|
||||
"users": "유저",
|
||||
"globalRules": "This is a global set of allow and disallow rules. They apply to every user. You can define specific rules on each user's settings to override this ones.",
|
||||
"allowSignup": "Allow users to signup",
|
||||
"insertRegex": "Insert regex expression",
|
||||
"insertPath": "Insert the path",
|
||||
"userUpdated": "유저 정보 업데이트 완료!",
|
||||
"generalSettings": "General settings",
|
||||
"userDefaults": "User default settings",
|
||||
"defaultUserDescription": "This are the default settings for new users.",
|
||||
"perm": {
|
||||
"create": "Create files and directories",
|
||||
"delete": "Delete files and directories",
|
||||
"download": "Download",
|
||||
"edit": "Edit files",
|
||||
"execute": "Execute commands",
|
||||
"rename": "Rename or move files and directories",
|
||||
"share": "Share files"
|
||||
}
|
||||
},
|
||||
"sidebar": {
|
||||
"help": "도움(Help)",
|
||||
"logout": "로그아웃",
|
||||
"myFiles": "내 파일들",
|
||||
"newFile": "새로운 파일",
|
||||
"newFolder": "새로운 폴더",
|
||||
"settings": "설정",
|
||||
"siteSettings": "사이트 설정",
|
||||
"hugoNew": "Hugo New",
|
||||
"preview": "미리보기"
|
||||
},
|
||||
"search": {
|
||||
"images": "이미지",
|
||||
"music": "음악",
|
||||
"notSupportedCommand": "지원 되지 않은 커맨드입니다.",
|
||||
"pdf": "PDF",
|
||||
"pressToExecute": "엔터를 누르시면 실행합니다.",
|
||||
"pressToSearch": "엔터를 누르시면 검색됩니다.",
|
||||
"search": "검색...",
|
||||
"searchOrCommand": "커맨드를 검색하거나 실행합니다...",
|
||||
"searchOrSupportedCommand": "검색하거나 '$'를 앞에 붙여 지원되는 커맨드들을 사용해보세요:",
|
||||
"typeCommand": "엔터를 누르시면 실행합니다.",
|
||||
"typeSearch": "엔터를 누르시면 검색됩니다.",
|
||||
"types": "Types",
|
||||
"video": "비디오",
|
||||
"writeToSearch": "검색하고 싶은것을 적어주세요"
|
||||
},
|
||||
"languages": {
|
||||
"ar": "العربية",
|
||||
"en": "English",
|
||||
"it": "Italiano",
|
||||
"fr": "Français",
|
||||
"pt": "Português",
|
||||
"ptBR": "Português (Brasil)",
|
||||
"ja": "日本語",
|
||||
"zhCN": "中文 (简体)",
|
||||
"zhTW": "中文 (繁體)",
|
||||
"es": "Español",
|
||||
"de": "Deutsch",
|
||||
"ru": "Русский",
|
||||
"pl": "Polski",
|
||||
"ko": "한국어"
|
||||
},
|
||||
"time": {
|
||||
"unit": "Time Unit",
|
||||
"seconds": "초",
|
||||
"minutes": "분",
|
||||
"hours": "시",
|
||||
"days": "일"
|
||||
}
|
||||
}
|
||||
207
src/i18n/ko.yaml
207
src/i18n/ko.yaml
@@ -1,207 +0,0 @@
|
||||
permanent: 영구적인
|
||||
buttons:
|
||||
cancel: 취소
|
||||
close: 닫기
|
||||
copy: 복사
|
||||
copyFile: 파일 복사
|
||||
copyToClipboard: 클립보드로 복사
|
||||
create: 생성
|
||||
delete: 삭제
|
||||
download: 다운로드
|
||||
info: 정보
|
||||
more: 더보기
|
||||
move: 이동
|
||||
moveFile: 파일 이동
|
||||
new: 새로운 파일
|
||||
next: 다음
|
||||
ok: 확인
|
||||
replace: 대체
|
||||
previous: 이전
|
||||
rename: 이름 바꾸기
|
||||
reportIssue: 이슈 보내기
|
||||
save: 저장
|
||||
search: 검색
|
||||
select: 선택
|
||||
share: 공유
|
||||
publish: 퍼블리쉬
|
||||
selectMultiple: 다수 선택하기
|
||||
schedule: 스케쥴
|
||||
switchView: 뷰 전환
|
||||
toggleSidebar: 사이드바 토글
|
||||
update: 업데이트
|
||||
upload: 업로드
|
||||
permalink: 영구적인 링크 얻기
|
||||
success:
|
||||
linkCopied: 링크가 복사되었습니다!
|
||||
errors:
|
||||
forbidden: 허가되지 않은 접속입니다!
|
||||
internal: 먼가 오류가 있네요?!
|
||||
notFound: 해당 경로를 찾을 수 없습니다.
|
||||
files:
|
||||
folders: 폴더
|
||||
files: 파일
|
||||
body: 본문
|
||||
clear: 클리어
|
||||
closePreview: 프리뷰 닫기
|
||||
home: 홈
|
||||
lastModified: 최종 수정 시간
|
||||
loading: 로딩중..
|
||||
lonely: 이곳은 쓸쓸하네요..
|
||||
metadata: 메타데이터
|
||||
multipleSelectionEnabled: 다수 선택하기 켜짐
|
||||
name: 이름
|
||||
size: 크기
|
||||
sortByName: 이름으로 정렬하기
|
||||
sortBySize: 크기로 정렬하기
|
||||
sortByLastModified: 최종 수정 시간으로 정렬하기
|
||||
help:
|
||||
click: 파일이나 디렉토리를 선택해주세요.
|
||||
ctrl:
|
||||
click: 다수의 파일이나 디렉토리를 선택해주세요.
|
||||
f: 검색창 열기
|
||||
s: 현재 있는 곳의 파일이나 디렉토리를 다운로드 하기
|
||||
del: 선택한 파일들 삭제하기
|
||||
doubleClick: 파일이나 디렉토리 열기
|
||||
esc: 선택 취소/프롬프트 닫기
|
||||
f1: 정보
|
||||
f2: 파일 이름 변경
|
||||
help: 도움(Help)
|
||||
login:
|
||||
password: 비밀번호
|
||||
submit: 로그인
|
||||
username: 유저네임
|
||||
wrongCredentials: 유저네임 혹은 비밀번호가 올바르지 않습니다.
|
||||
prompts:
|
||||
copy: 복사
|
||||
copyMessage: '파일을 복사할 곳 정하기:'
|
||||
currentlyNavigating: '현재 위치:'
|
||||
deleteMessageMultiple: "{count} 개의 파일을 삭제하시겠습니까?"
|
||||
deleteMessageSingle: 이 파일 혹은 디렉토리를 삭제하시겠습니까?
|
||||
deleteTitle: 파일 삭제
|
||||
displayName: '디스플레이 네임:'
|
||||
download: 파일 다운로드
|
||||
downloadMessage: 다운로드 받고 싶은 포맷 설정.
|
||||
error: 에러 발생!
|
||||
fileInfo: 파일 정보
|
||||
filesSelected: "{count} 개의 파일이 선택되었습니다."
|
||||
lastModified: 최종 수정 시간
|
||||
move: 이동
|
||||
moveMessage: '이동시킬 곳을 알려주세요:'
|
||||
newDir: 새 디렉토리
|
||||
newDirMessage: 새 디렉토리의 이름을 입력해주세요.
|
||||
newFile: 새 파일
|
||||
newFileMessage: 새 파일의 이름을 입력해주세요.
|
||||
numberDirs: 디렉토리 수
|
||||
numberFiles: 파일 수
|
||||
replace: 덮어쓰기(replace)
|
||||
replaceMessage: >
|
||||
동일 한 파일을 업로드하려고 합니다.
|
||||
존재하는 파일을 덮어 씌울까요?
|
||||
rename: 이름 변경
|
||||
renameMessage: 새로운 이름을 알려주세요.
|
||||
show: 보기
|
||||
size: 크기
|
||||
schedule: 스케쥴
|
||||
scheduleMessage: 이 포스트를 공개할 시간을 알려주세요.
|
||||
newArchetype: archetype에 기반한 포스트를 생성합니다. 파일은 컨텐트 폴더(content folder)에 생성됩니다.
|
||||
settings:
|
||||
admin: 관리자
|
||||
administrator: 관리자
|
||||
allowCommands: 명령어 실행
|
||||
allowEdit: 파일/디렉토리의 수정, 변경 또는 삭제를 허용합니다.
|
||||
allowNew: 파일/디렉토리의 생성을 허용합니다.
|
||||
allowPublish: 페이지(새글)를 생성하는 것을 허용합니다.
|
||||
avoidChanges: "(수정하기 싫으시면 그냥 놔두시면 됩니다)"
|
||||
changePassword: 비밀번호 변경
|
||||
commands: 명령들
|
||||
commandsHelp: >
|
||||
named events안에서 실행될 커맨드를 설정할 수 있습니다.
|
||||
한줄에 하나의 커맨드를 작성하실 수 있습니다. 이벤트가 저장 전 혹은 후를 핸들링 하는 것과 같이 파일과 관련있다면,
|
||||
"FILE" 환경 변수는 파일의 경로와 함께 사용하실 수 있습니다.
|
||||
commandsUpdated: 커맨드 업데이트 완료!
|
||||
customStylesheet: 사용자 설정 스타일시트
|
||||
examples: 예시
|
||||
globalSettings: 글로벌 설정
|
||||
language: 언어
|
||||
lockPassword: 유저가 패스워드를 변경하는 것을 방지합니다
|
||||
newPassword: 새로운 비밀번호
|
||||
newPasswordConfirm: 새로운 비밀번호 확인
|
||||
newUser: 새로운 유저
|
||||
password: 비밀번호
|
||||
passwordUpdated: 비밀번호 업데이트 완료!
|
||||
permissions: 권한
|
||||
permissionsHelp: >
|
||||
유저를 관리자로 만들거나 각 퍼미션을 선택해 줄 수 있습니다.
|
||||
관리자를 선택하시면 다른 모든 옵션들이 자동으로 선택됩니다.
|
||||
사용자 관리는 여전히 현재 관리자만 할 수 있습니다.
|
||||
profileSettings: 프로필 설정
|
||||
ruleExample1: >
|
||||
모든 폴더의 .으로 시작하는 파일의 접근을 방지합니다.(예 .git, .gitignore) (숨김파일 보기 방지)
|
||||
ruleExample2: Caddyfile파일의 접근을 방지합니다.
|
||||
rules: 룰
|
||||
rulesHelp1: >
|
||||
각 유저별 룰을 허용/비허용 할지 정할 수 있습니다.
|
||||
블락된 파일은 리스팅 되지 않고 유저들은 접근할 수 없습니다.
|
||||
사용자의 접근 허용 범위와 관련해 정규표현식(regex)과 경로를 지원합니다.
|
||||
rulesHelp2: >
|
||||
각 룰은 한줄에 하나씩 작성되어야 하며 {0} 또는 {1}로 시작되어야 합니다.
|
||||
만약 정규 표현식을 사용한 식이나 경로를 사용할 경우 {2}를 꼭 사용해야 합니다.
|
||||
scope: 범위
|
||||
settingsUpdated: 설정 업데이트 완료!
|
||||
user: 유저
|
||||
userCommands: 명령어들
|
||||
userCommandsHelp: >
|
||||
이 유저에게 허용시킬 커맨드를 스페이스로 구분해 입력해주세요.
|
||||
예시:
|
||||
userCreated: 유저 생성됨!
|
||||
userDeleted: 유저 삭제됨!
|
||||
userManagement: 유저 관리
|
||||
username: 유저네임
|
||||
users: 유저
|
||||
userUpdated: 유저 정보 업데이트 완료!
|
||||
sidebar:
|
||||
help: 도움(Help)
|
||||
logout: 로그아웃
|
||||
myFiles: 내 파일들
|
||||
newFile: 새로운 파일
|
||||
newFolder: 새로운 폴더
|
||||
settings: 설정
|
||||
siteSettings: 사이트 설정
|
||||
hugoNew: Hugo New
|
||||
preview: 미리보기
|
||||
search:
|
||||
images: 이미지
|
||||
music: 음악
|
||||
notSupportedCommand: 지원 되지 않은 커맨드입니다.
|
||||
pdf: PDF
|
||||
pressToExecute: 엔터를 누르시면 실행합니다.
|
||||
pressToSearch: 엔터를 누르시면 검색됩니다.
|
||||
search: 검색...
|
||||
searchOrCommand: 커맨드를 검색하거나 실행합니다...
|
||||
searchOrSupportedCommand: '검색하거나 ''$''를 앞에 붙여 지원되는 커맨드들을 사용해보세요:'
|
||||
typeCommand: 엔터를 누르시면 실행합니다.
|
||||
typeSearch: 엔터를 누르시면 검색됩니다.
|
||||
types: Types
|
||||
video: 비디오
|
||||
writeToSearch: 검색하고 싶은것을 적어주세요
|
||||
languages:
|
||||
ar: العربية
|
||||
en: English
|
||||
it: Italiano
|
||||
fr: Français
|
||||
pt: Português
|
||||
ptBR: Português (Brasil)
|
||||
ja: 日本語
|
||||
zhCN: 中文 (简体)
|
||||
zhTW: 中文 (繁體)
|
||||
es: Español
|
||||
de: Deutsch
|
||||
ru: Русский
|
||||
pl: Polski
|
||||
ko: 한국어
|
||||
time:
|
||||
unit: Time Unit
|
||||
seconds: 초
|
||||
minutes: 분
|
||||
hours: 시
|
||||
days: 일
|
||||
233
src/i18n/pl.json
Normal file
233
src/i18n/pl.json
Normal file
@@ -0,0 +1,233 @@
|
||||
{
|
||||
"permanent": "Permanent",
|
||||
"buttons": {
|
||||
"cancel": "Anuluj",
|
||||
"close": "Zamknij",
|
||||
"copy": "Kopiuj",
|
||||
"copyFile": "Kopiuj plik",
|
||||
"copyToClipboard": "kopiuj do schowka",
|
||||
"create": "Utwórz",
|
||||
"delete": "Usuń",
|
||||
"download": "Pobierz",
|
||||
"info": "Informacja",
|
||||
"more": "Więce",
|
||||
"move": "Przenieś",
|
||||
"moveFile": "Przenieś plik",
|
||||
"new": "Nowy",
|
||||
"next": "Następny",
|
||||
"ok": "OK",
|
||||
"replace": "Zamień",
|
||||
"previous": "Poprzedni",
|
||||
"rename": "Zmień Nazwę",
|
||||
"reportIssue": "Zgłoś Problem",
|
||||
"save": "Zapisz",
|
||||
"search": "Szukaj",
|
||||
"select": "Wybierz",
|
||||
"share": "Udostępnij",
|
||||
"publish": "Opublikuj",
|
||||
"selectMultiple": "Zaznacz wiele",
|
||||
"schedule": "Grafik",
|
||||
"switchView": "Zmień widok",
|
||||
"toggleSidebar": "Toggle sidebar",
|
||||
"update": "Aktualizuj",
|
||||
"upload": "Upload",
|
||||
"permalink": "Get Permanent Link"
|
||||
},
|
||||
"success": {
|
||||
"linkCopied": "Link Skopiowany!"
|
||||
},
|
||||
"errors": {
|
||||
"forbidden": "Nie jesteś tu mile widziany.",
|
||||
"internal": "Pojawił się poważny problem.",
|
||||
"notFound": "Ten adres nie jest poprawny."
|
||||
},
|
||||
"files": {
|
||||
"folders": "Foldery",
|
||||
"files": "Pliki",
|
||||
"body": "Body",
|
||||
"clear": "Wyczyść",
|
||||
"closePreview": "Zamknij poprzednie",
|
||||
"home": "Home",
|
||||
"lastModified": "Ostatnio modyfikowane",
|
||||
"loading": "Ładowanie...",
|
||||
"lonely": "Smutno gdy tak pusto...",
|
||||
"metadata": "Metadata",
|
||||
"multipleSelectionEnabled": "Multiple selection enabled",
|
||||
"name": "Nazwa",
|
||||
"size": "Rozmiar",
|
||||
"sortByName": "Sortuj po nazwie",
|
||||
"sortBySize": "Sortuj po rozmiarze",
|
||||
"sortByLastModified": "Sortuj po dacie modyfikacji"
|
||||
},
|
||||
"help": {
|
||||
"click": "wybierz plik lub foler",
|
||||
"ctrl": {
|
||||
"click": "wybierz wiele plików lub folderów",
|
||||
"f": "otwórz wyszukiwarkę",
|
||||
"s": "pobierz aktywny plik lub folder"
|
||||
},
|
||||
"del": "usuń zaznaczone",
|
||||
"doubleClick": "otwórz plik lub folder",
|
||||
"esc": "wyczyść zaznaczenie i/lub zamknij okno z powiadomieniem",
|
||||
"f1": "ta informacja",
|
||||
"f2": "zmień nazwę pliku",
|
||||
"help": "Pomoc"
|
||||
},
|
||||
"login": {
|
||||
"password": "Hasło",
|
||||
"passwordConfirm": "Password Confirmation",
|
||||
"submit": "Login",
|
||||
"createAnAccount": "Create an account",
|
||||
"loginInstead": "Already have an account",
|
||||
"passwordsDontMatch": "Passwords don't match",
|
||||
"usernameTaken": "Username already taken",
|
||||
"signup": "Signup",
|
||||
"username": "Nazwa użytkownika",
|
||||
"wrongCredentials": "Błędne dane logowania"
|
||||
},
|
||||
"prompts": {
|
||||
"copy": "Kopiuj",
|
||||
"copyMessage": "Wybierz lokalizację do której mają być skopiowane wybrane pliki",
|
||||
"currentlyNavigating": "Currently navigating on:",
|
||||
"deleteMessageMultiple": "Czy jesteś pewien że chcesz usunąć {count} plik(ów)?",
|
||||
"deleteMessageSingle": "Czy jesteś pewien, że chcesz usunąć ten plik/folder?",
|
||||
"deleteTitle": "Usuń pliki",
|
||||
"displayName": "Wyświetlana Nazwa:",
|
||||
"download": "Pobierz pliki",
|
||||
"downloadMessage": "Wybierz format, jaki chesz pobrać.",
|
||||
"error": "Pojawił się jakiś błąd",
|
||||
"fileInfo": "Informacje o pliku",
|
||||
"filesSelected": "{count} plików zostało zaznaczonych.",
|
||||
"lastModified": "Osatnio Zmodyfikowane",
|
||||
"move": "Przenieś",
|
||||
"moveMessage": "Wybierz nową lokalizację dla swoich plik(ów)/folder(ów):",
|
||||
"newDir": "Nowy folder",
|
||||
"newDirMessage": "Podaj nazwę tworzonego folderu.",
|
||||
"newFile": "Nowy plik",
|
||||
"newFileMessage": "Podaj nazwętworzonego pliku.",
|
||||
"numberDirs": "Ilość katalogów",
|
||||
"numberFiles": "Ilość plików",
|
||||
"replace": "Zamień",
|
||||
"replaceMessage": "Jednen z plików który próbujesz wrzucić próbje nadpisać plik o tej samej nazwie. Czy chcesz nadpisać poprzedni plik?\n",
|
||||
"rename": "Zmień nazwę",
|
||||
"renameMessage": "Podaj nową nazwę dla",
|
||||
"show": "Pokaż",
|
||||
"size": "Rozmiar",
|
||||
"schedule": "Grafi",
|
||||
"scheduleMessage": "Wybierz datę i czas dla publikacji tego wpisu.",
|
||||
"newArchetype": "Utwórz nowy wpis na bazie wybranego wzorca. Twój plik będzie utworzony w wybranym folderze."
|
||||
},
|
||||
"settings": {
|
||||
"instanceName": "Instance name",
|
||||
"brandingDirectoryPath": "Branding directory path",
|
||||
"documentation": "documentation",
|
||||
"branding": "Branding",
|
||||
"disableExternalLinks": "Disable external links (except documentation)",
|
||||
"brandingHelp": "You can costumize how your File Browser instance looks and feels by changing its name, replacing the logo, adding custom styles and even disable external links to GitHub.\nFor more information about custom branding, please check out the {0}.",
|
||||
"admin": "Admin",
|
||||
"administrator": "Administrator",
|
||||
"allowCommands": "Wykonaj polecenie",
|
||||
"allowEdit": "Edycja, zmiana nazwy i usuniecie plików lub folderów",
|
||||
"allowNew": "Tworzenie nowych plików lub folderów",
|
||||
"allowPublish": "Tworzenie nowych wpisów i stron",
|
||||
"avoidChanges": "(pozostaw puste aby nie zosatało zmienione)",
|
||||
"changePassword": "Zmień Hasło",
|
||||
"commandRunner": "Command runner",
|
||||
"commandRunnerHelp": "Here you can set commands that are executed in the named events. You must write one per line. The environment variables {0} and {1} will be available, being {0} relative to {1}. For more information about this feature and the available environment variables, please read the {2}.",
|
||||
"commandsUpdated": "Polecenie zaktualizowane!",
|
||||
"customStylesheet": "Własny Stylesheet",
|
||||
"examples": "Przykłady",
|
||||
"globalSettings": "Ustawienia Globalne",
|
||||
"language": "Język",
|
||||
"lockPassword": "Zablokuj użytkownikowi możliwość zmiany hasła",
|
||||
"newPassword": "Twoje nowe hasło",
|
||||
"newPasswordConfirm": "Potwierdź swoje hasło",
|
||||
"newUser": "Nowy Użytkownik",
|
||||
"password": "Hasło",
|
||||
"passwordUpdated": "Hasło zostało zapisane!",
|
||||
"permissions": "Uprawnienia",
|
||||
"permissionsHelp": "You can set the user to be an administrator or choose the permissions individually. If you select \"Administrator\", all of the other options will be automatically checked. The management of users remains a privilege of an administrator.\n",
|
||||
"profileSettings": "Twój profil",
|
||||
"ruleExample1": "prevents the access to any dot file (such as .git, .gitignore) in every folder.\n",
|
||||
"ruleExample2": "blocks the access to the file named Caddyfile on the root of the scope.",
|
||||
"rules": "Uprawnienia",
|
||||
"rulesHelp": "Here you can define a set of allow and disallow rules for this specific user. The blocked files won't show up in the listings and they wont be accessible to the user. We support regex and paths relative to the users scope.\n",
|
||||
"scope": "Scope",
|
||||
"settingsUpdated": "Uprawnienia Zapisane!",
|
||||
"user": "Użytkownik",
|
||||
"userCommands": "Polecenia",
|
||||
"userCommandsHelp": "A space separated list with the available commands for this user. Example:\n",
|
||||
"userCreated": "Użytkownik zapisany!",
|
||||
"userDeleted": "Użytkownik usunięty!",
|
||||
"userManagement": "Zarządzanie użytkownikami",
|
||||
"username": "Nazwa użytkownika",
|
||||
"users": "Użytkownicy",
|
||||
"globalRules": "This is a global set of allow and disallow rules. They apply to every user. You can define specific rules on each user's settings to override this ones.",
|
||||
"allowSignup": "Allow users to signup",
|
||||
"insertRegex": "Insert regex expression",
|
||||
"insertPath": "Insert the path",
|
||||
"userUpdated": "Użytkownik zapisany!",
|
||||
"generalSettings": "General settings",
|
||||
"userDefaults": "User default settings",
|
||||
"defaultUserDescription": "This are the default settings for new users.",
|
||||
"perm": {
|
||||
"create": "Create files and directories",
|
||||
"delete": "Delete files and directories",
|
||||
"download": "Download",
|
||||
"edit": "Edit files",
|
||||
"execute": "Execute commands",
|
||||
"rename": "Rename or move files and directories",
|
||||
"share": "Share files"
|
||||
}
|
||||
},
|
||||
"sidebar": {
|
||||
"help": "Pomoc",
|
||||
"logout": "Wyloguj",
|
||||
"myFiles": "Moje pliki",
|
||||
"newFile": "Nowy plik",
|
||||
"newFolder": "Nowy folder",
|
||||
"settings": "Ustawienia",
|
||||
"siteSettings": "Ustawienia Strony",
|
||||
"hugoNew": "Hugo New",
|
||||
"preview": "Podgląd"
|
||||
},
|
||||
"search": {
|
||||
"images": "Zdjęcia",
|
||||
"music": "Muzyka",
|
||||
"notSupportedCommand": "Polecenie niedozwolone.",
|
||||
"pdf": "PDF",
|
||||
"pressToExecute": "Naciśniej Enter aby wykonać.",
|
||||
"pressToSearch": "Naciśnij Enter aby wyszukać.",
|
||||
"search": "Szukaj...",
|
||||
"searchOrCommand": "Szukaj lub wykonaj polecenie...",
|
||||
"searchOrSupportedCommand": "Szukaj lub wpisz '$' i wybierz jedno z dostęnych poleceń:",
|
||||
"typeCommand": "Wpisz i naciśnij Enter aby wykonać.",
|
||||
"typeSearch": "Wpisz i naciśni Enter aby wyszukać.",
|
||||
"types": "Typy",
|
||||
"video": "Video",
|
||||
"writeToSearch": "Wpisz tu aby wyszukać"
|
||||
},
|
||||
"languages": {
|
||||
"ar": "العربية",
|
||||
"en": "English",
|
||||
"it": "Italiano",
|
||||
"fr": "Français",
|
||||
"pt": "Português",
|
||||
"ptBR": "Português (Brasil)",
|
||||
"ja": "日本語",
|
||||
"zhCN": "中文 (简体)",
|
||||
"zhTW": "中文 (繁體)",
|
||||
"es": "Español",
|
||||
"de": "Deutsch",
|
||||
"ru": "Русский",
|
||||
"pl": "Polski",
|
||||
"ko": "한국어"
|
||||
},
|
||||
"time": {
|
||||
"unit": "Jednostka czasu",
|
||||
"seconds": "Sekundy",
|
||||
"minutes": "Minuty",
|
||||
"hours": "Godziny",
|
||||
"days": "Dni"
|
||||
}
|
||||
}
|
||||
210
src/i18n/pl.yaml
210
src/i18n/pl.yaml
@@ -1,210 +0,0 @@
|
||||
permanent: Permanent
|
||||
buttons:
|
||||
cancel: Anuluj
|
||||
close: Zamknij
|
||||
copy: Kopiuj
|
||||
copyFile: Kopiuj plik
|
||||
copyToClipboard: kopiuj do schowka
|
||||
create: Utwórz
|
||||
delete: Usuń
|
||||
download: Pobierz
|
||||
info: Informacja
|
||||
more: Więce
|
||||
move: Przenieś
|
||||
moveFile: Przenieś plik
|
||||
new: Nowy
|
||||
next: Następny
|
||||
ok: OK
|
||||
replace: Zamień
|
||||
previous: Poprzedni
|
||||
rename: Zmień Nazwę
|
||||
reportIssue: Zgłoś Problem
|
||||
save: Zapisz
|
||||
search: Szukaj
|
||||
select: Wybierz
|
||||
share: Udostępnij
|
||||
publish: Opublikuj
|
||||
selectMultiple: Zaznacz wiele
|
||||
schedule: Grafik
|
||||
switchView: Zmień widok
|
||||
toggleSidebar: Toggle sidebar
|
||||
update: Aktualizuj
|
||||
upload: Upload
|
||||
permalink: Get Permanent Link
|
||||
success:
|
||||
linkCopied: Link Skopiowany!
|
||||
errors:
|
||||
forbidden: Nie jesteś tu mile widziany.
|
||||
internal: Pojawił się poważny problem.
|
||||
notFound: Ten adres nie jest poprawny.
|
||||
files:
|
||||
folders: Foldery
|
||||
files: Pliki
|
||||
body: Body
|
||||
clear: Wyczyść
|
||||
closePreview: Zamknij poprzednie
|
||||
home: Home
|
||||
lastModified: Ostatnio modyfikowane
|
||||
loading: Ładowanie...
|
||||
lonely: Smutno gdy tak pusto...
|
||||
metadata: Metadata
|
||||
multipleSelectionEnabled: Multiple selection enabled
|
||||
name: Nazwa
|
||||
size: Rozmiar
|
||||
sortByName: Sortuj po nazwie
|
||||
sortBySize: Sortuj po rozmiarze
|
||||
sortByLastModified: Sortuj po dacie modyfikacji
|
||||
help:
|
||||
click: wybierz plik lub foler
|
||||
ctrl:
|
||||
click: wybierz wiele plików lub folderów
|
||||
f: otwórz wyszukiwarkę
|
||||
s: pobierz aktywny plik lub folder
|
||||
del: usuń zaznaczone
|
||||
doubleClick: otwórz plik lub folder
|
||||
esc: wyczyść zaznaczenie i/lub zamknij okno z powiadomieniem
|
||||
f1: ta informacja
|
||||
f2: zmień nazwę pliku
|
||||
help: Pomoc
|
||||
login:
|
||||
password: Hasło
|
||||
submit: Login
|
||||
username: Nazwa użytkownika
|
||||
wrongCredentials: Błędne dane logowania
|
||||
prompts:
|
||||
copy: Kopiuj
|
||||
copyMessage: 'Wybierz lokalizację do której mają być skopiowane wybrane pliki'
|
||||
currentlyNavigating: 'Currently navigating on:'
|
||||
deleteMessageMultiple: Czy jesteś pewien że chcesz usunąć {count} plik(ów)?
|
||||
deleteMessageSingle: Czy jesteś pewien, że chcesz usunąć ten plik/folder?
|
||||
deleteTitle: Usuń pliki
|
||||
displayName: 'Wyświetlana Nazwa:'
|
||||
download: Pobierz pliki
|
||||
downloadMessage: Wybierz format, jaki chesz pobrać.
|
||||
error: Pojawił się jakiś błąd
|
||||
fileInfo: Informacje o pliku
|
||||
filesSelected: "{count} plików zostało zaznaczonych."
|
||||
lastModified: Osatnio Zmodyfikowane
|
||||
move: Przenieś
|
||||
moveMessage: 'Wybierz nową lokalizację dla swoich plik(ów)/folder(ów):'
|
||||
newDir: Nowy folder
|
||||
newDirMessage: Podaj nazwę tworzonego folderu.
|
||||
newFile: Nowy plik
|
||||
newFileMessage: Podaj nazwętworzonego pliku.
|
||||
numberDirs: Ilość katalogów
|
||||
numberFiles: Ilość plików
|
||||
replace: Zamień
|
||||
replaceMessage: >
|
||||
Jednen z plików który próbujesz wrzucić próbje nadpisać plik o tej samej nazwie.
|
||||
Czy chcesz nadpisać poprzedni plik?
|
||||
rename: Zmień nazwę
|
||||
renameMessage: Podaj nową nazwę dla
|
||||
show: Pokaż
|
||||
size: Rozmiar
|
||||
schedule: Grafi
|
||||
scheduleMessage: Wybierz datę i czas dla publikacji tego wpisu.
|
||||
newArchetype: Utwórz nowy wpis na bazie wybranego wzorca. Twój plik będzie utworzony w wybranym folderze.
|
||||
settings:
|
||||
admin: Admin
|
||||
administrator: Administrator
|
||||
allowCommands: Wykonaj polecenie
|
||||
allowEdit: Edycja, zmiana nazwy i usuniecie plików lub folderów
|
||||
allowNew: Tworzenie nowych plików lub folderów
|
||||
allowPublish: Tworzenie nowych wpisów i stron
|
||||
avoidChanges: "(pozostaw puste aby nie zosatało zmienione)"
|
||||
changePassword: Zmień Hasło
|
||||
commands: Polecenia
|
||||
commandsHelp: >
|
||||
Here you can set commands that are executed in the named events. You
|
||||
write one command per line. If the event is related to files, such as before and
|
||||
after saving, the environment variable "FILE" will be available with the path
|
||||
of the file.
|
||||
commandsUpdated: Polecenie zaktualizowane!
|
||||
customStylesheet: Własny Stylesheet
|
||||
examples: Przykłady
|
||||
globalSettings: Ustawienia Globalne
|
||||
language: Język
|
||||
lockPassword: Zablokuj użytkownikowi możliwość zmiany hasła
|
||||
newPassword: Twoje nowe hasło
|
||||
newPasswordConfirm: Potwierdź swoje hasło
|
||||
newUser: Nowy Użytkownik
|
||||
password: Hasło
|
||||
passwordUpdated: Hasło zostało zapisane!
|
||||
permissions: Uprawnienia
|
||||
permissionsHelp: >
|
||||
You can set the user to be an administrator or choose the permissions
|
||||
individually. If you select "Administrator", all of the other options will be
|
||||
automatically checked. The management of users remains a privilege of an administrator.
|
||||
profileSettings: Twój profil
|
||||
ruleExample1: >
|
||||
prevents the access to any dot file (such as .git, .gitignore) in
|
||||
every folder.
|
||||
ruleExample2: blocks the access to the file named Caddyfile on the root of the scope.
|
||||
rules: Uprawnienia
|
||||
rulesHelp1: >
|
||||
Here you can define a set of allow and disallow rules for this specific
|
||||
user. The blocked files won't show up in the listings and they wont be accessible
|
||||
to the user. We support regex and paths relative to the users scope.
|
||||
rulesHelp2: >
|
||||
Each rule goes in one different line and must start with the keyword
|
||||
{0} or {1}. Then you should write {2} if you are using a regular expression and
|
||||
then the expression or the path.
|
||||
scope: Scope
|
||||
settingsUpdated: Uprawnienia Zapisane!
|
||||
user: Użytkownik
|
||||
userCommands: Polecenia
|
||||
userCommandsHelp: >
|
||||
A space separated list with the available commands for this user.
|
||||
Example:
|
||||
userCreated: Użytkownik zapisany!
|
||||
userDeleted: Użytkownik usunięty!
|
||||
userManagement: Zarządzanie użytkownikami
|
||||
username: Nazwa użytkownika
|
||||
users: Użytkownicy
|
||||
userUpdated: Użytkownik zapisany!
|
||||
sidebar:
|
||||
help: Pomoc
|
||||
logout: Wyloguj
|
||||
myFiles: Moje pliki
|
||||
newFile: Nowy plik
|
||||
newFolder: Nowy folder
|
||||
settings: Ustawienia
|
||||
siteSettings: Ustawienia Strony
|
||||
hugoNew: Hugo New
|
||||
preview: Podgląd
|
||||
search:
|
||||
images: Zdjęcia
|
||||
music: Muzyka
|
||||
notSupportedCommand: Polecenie niedozwolone.
|
||||
pdf: PDF
|
||||
pressToExecute: Naciśniej Enter aby wykonać.
|
||||
pressToSearch: Naciśnij Enter aby wyszukać.
|
||||
search: Szukaj...
|
||||
searchOrCommand: Szukaj lub wykonaj polecenie...
|
||||
searchOrSupportedCommand: 'Szukaj lub wpisz ''$'' i wybierz jedno z dostęnych poleceń:'
|
||||
typeCommand: Wpisz i naciśnij Enter aby wykonać.
|
||||
typeSearch: Wpisz i naciśni Enter aby wyszukać.
|
||||
types: Typy
|
||||
video: Video
|
||||
writeToSearch: Wpisz tu aby wyszukać
|
||||
languages:
|
||||
ar: العربية
|
||||
en: English
|
||||
it: Italiano
|
||||
fr: Français
|
||||
pt: Português
|
||||
ptBR: Português (Brasil)
|
||||
ja: 日本語
|
||||
zhCN: 中文 (简体)
|
||||
zhTW: 中文 (繁體)
|
||||
es: Español
|
||||
de: Deutsch
|
||||
ru: Русский
|
||||
pl: Polski
|
||||
ko: 한국어
|
||||
time:
|
||||
unit: Jednostka czasu
|
||||
seconds: Sekundy
|
||||
minutes: Minuty
|
||||
hours: Godziny
|
||||
days: Dni
|
||||
233
src/i18n/pt-br.json
Normal file
233
src/i18n/pt-br.json
Normal file
@@ -0,0 +1,233 @@
|
||||
{
|
||||
"permanent": "Permanente",
|
||||
"buttons": {
|
||||
"cancel": "Cancelar",
|
||||
"close": "Fechar",
|
||||
"copy": "Copiar",
|
||||
"copyFile": "Copiar arquivo",
|
||||
"copyToClipboard": "Copiar",
|
||||
"create": "Criar",
|
||||
"delete": "Deletar",
|
||||
"download": "Baixar",
|
||||
"info": "Informações",
|
||||
"more": "Mais",
|
||||
"move": "Mover",
|
||||
"moveFile": "Mover arquivo",
|
||||
"new": "Novo",
|
||||
"next": "Próximo",
|
||||
"ok": "Ok",
|
||||
"replace": "Substituir",
|
||||
"previous": "Anterior",
|
||||
"rename": "Renomear",
|
||||
"reportIssue": "Reportar erro",
|
||||
"save": "Salvar",
|
||||
"search": "Pesquisar",
|
||||
"select": "Selecionar",
|
||||
"share": "Compartilhar",
|
||||
"publish": "Publicar",
|
||||
"selectMultiple": "Selecionar múltiplos",
|
||||
"schedule": "Agendar",
|
||||
"switchView": "Alterar modo de visão",
|
||||
"toggleSidebar": "Alternar barra lateral",
|
||||
"update": "Atualizar",
|
||||
"upload": "Enviar",
|
||||
"permalink": "Obter link permanente"
|
||||
},
|
||||
"success": {
|
||||
"linkCopied": "Link copiado!"
|
||||
},
|
||||
"errors": {
|
||||
"forbidden": "Ops! Você não pode acessar aqui.",
|
||||
"internal": "Ops! Algum erro ocorreu.",
|
||||
"notFound": "Ops! Nada foi encontrado."
|
||||
},
|
||||
"files": {
|
||||
"folders": "Pastas",
|
||||
"files": "Arquivos",
|
||||
"body": "Corpo",
|
||||
"clear": "Limpar",
|
||||
"closePreview": "Fechar pré-visualização",
|
||||
"home": "Início",
|
||||
"lastModified": "Última modificação",
|
||||
"loading": "Carregando. Aguarde, por favor.",
|
||||
"lonely": "Não existe nada aqui.",
|
||||
"metadata": "Metadados",
|
||||
"multipleSelectionEnabled": "Seleção múltipla ativada",
|
||||
"name": "Nome",
|
||||
"size": "Tamanho",
|
||||
"sortByName": "Ordenar pelo nome",
|
||||
"sortBySize": "Ordenar pelo tamanho",
|
||||
"sortByLastModified": "Ordenar pela última modificação"
|
||||
},
|
||||
"help": {
|
||||
"click": "selecionar pasta ou arquivo",
|
||||
"ctrl": {
|
||||
"click": "selecionar várias pastas e arquivos",
|
||||
"f": "pesquisar",
|
||||
"s": "salvar um arquivo ou baixar a pasta que você está"
|
||||
},
|
||||
"del": "deletar os arquivos selecionados",
|
||||
"doubleClick": "abrir pasta ou arquivo",
|
||||
"esc": "limpar seleção e/ou fechar menu",
|
||||
"f1": "está informação",
|
||||
"f2": "renomear arquivo",
|
||||
"help": "Ajuda"
|
||||
},
|
||||
"login": {
|
||||
"password": "Senha",
|
||||
"passwordConfirm": "Password Confirmation",
|
||||
"submit": "Login",
|
||||
"createAnAccount": "Create an account",
|
||||
"loginInstead": "Already have an account",
|
||||
"passwordsDontMatch": "Passwords don't match",
|
||||
"usernameTaken": "Username already taken",
|
||||
"signup": "Signup",
|
||||
"username": "Nome do usuário",
|
||||
"wrongCredentials": "Ops! Dados incorretos."
|
||||
},
|
||||
"prompts": {
|
||||
"copy": "Copiar",
|
||||
"copyMessage": "Escolha um lugar para copiar os arquivos:",
|
||||
"currentlyNavigating": "Navegando em:",
|
||||
"deleteMessageMultiple": "Deseja deletar {count} arquivo(s)?",
|
||||
"deleteMessageSingle": "Deseja deletar está pasta/arquivo?",
|
||||
"deleteTitle": "Deletar arquivos",
|
||||
"displayName": "Nome:",
|
||||
"download": "Baixar arquivos",
|
||||
"downloadMessage": "Escolha o formato do arquivo.",
|
||||
"error": "Algo de ruim ocorreu",
|
||||
"fileInfo": "Informação do arquivo",
|
||||
"filesSelected": "{count} arquivos selecionados.",
|
||||
"lastModified": "Última modificação",
|
||||
"move": "Mover",
|
||||
"moveMessage": "Escolha uma nova pasta para os seus arquivos:",
|
||||
"newDir": "Nova pasta",
|
||||
"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",
|
||||
"replace": "Substituir",
|
||||
"replaceMessage": "Já existe um arquivo com nome igual a um dos que está tentando enviar. Deseja substituir?\n",
|
||||
"rename": "Renomear",
|
||||
"renameMessage": "Insira um novo nome para",
|
||||
"show": "Mostrar",
|
||||
"size": "Tamanho",
|
||||
"schedule": "Agendar",
|
||||
"scheduleMessage": "Escolha uma data para publicar este post.",
|
||||
"newArchetype": "Criar um novo post baseado num \"archetype\". O seu arquivo será criado na pasta \"content\"."
|
||||
},
|
||||
"settings": {
|
||||
"instanceName": "Instance name",
|
||||
"brandingDirectoryPath": "Branding directory path",
|
||||
"documentation": "documentation",
|
||||
"branding": "Branding",
|
||||
"disableExternalLinks": "Disable external links (except documentation)",
|
||||
"brandingHelp": "You can costumize how your File Browser instance looks and feels by changing its name, replacing the logo, adding custom styles and even disable external links to GitHub.\nFor more information about custom branding, please check out the {0}.",
|
||||
"admin": "Admin",
|
||||
"administrator": "Administrador",
|
||||
"allowCommands": "Executar comandos",
|
||||
"allowEdit": "Editar, renomear e deletar arquivos ou pastas",
|
||||
"allowNew": "Criar novos arquivos e pastas",
|
||||
"allowPublish": "Publicar novas páginas e conteúdos",
|
||||
"avoidChanges": "(deixe em branco para manter)",
|
||||
"changePassword": "Alterar senha",
|
||||
"commandRunner": "Command runner",
|
||||
"commandRunnerHelp": "Here you can set commands that are executed in the named events. You must write one per line. The environment variables {0} and {1} will be available, being {0} relative to {1}. For more information about this feature and the available environment variables, please read the {2}.",
|
||||
"commandsUpdated": "Comandos atualizados!",
|
||||
"customStylesheet": "Estilos personalizados",
|
||||
"examples": "Exemplos",
|
||||
"globalSettings": "Configurações globais",
|
||||
"language": "Linguagem",
|
||||
"lockPassword": "Não permitir que o usuário altere a senha",
|
||||
"newPassword": "Nova senha",
|
||||
"newPasswordConfirm": "Confirme a nova senha",
|
||||
"newUser": "Novo usuário",
|
||||
"password": "Senha",
|
||||
"passwordUpdated": "Senha atualizada!",
|
||||
"permissions": "Permissões",
|
||||
"permissionsHelp": "Pode definir o usuário como administrador ou escolher as permissões manualmente. Se selecionar a opção \"Administrador\", todas as outras opções serão automaticamente selecionadas. A gestão dos usuários é um privilégio restringido aos administradores.\n",
|
||||
"profileSettings": "Configurações do usuário",
|
||||
"ruleExample1": "previne o acesso a qualquer \"dotfile\" (como .git, .gitignore) em qualquer pasta\n",
|
||||
"ruleExample2": "bloqueia o acesso ao arquivo chamado Caddyfile.",
|
||||
"rules": "Regras",
|
||||
"rulesHelp": "Aqui pode definir um conjunto de regras para permitir ou bloquear o acesso do utilizador a determinados arquivos ou pastas. Os arquivos bloqueados não irão aparecer durante a navegação. Suportamos expressões regulares e os caminhos dos arquivos devem ser relativos à base do usuário.\n",
|
||||
"scope": "Base",
|
||||
"settingsUpdated": "Configurações atualizadas!",
|
||||
"user": "Usuário",
|
||||
"userCommands": "Comandos",
|
||||
"userCommandsHelp": "Uma lista, separada com espaços, de comandos disponíveis para este usuário. Exemplo:",
|
||||
"userCreated": "Usuário criado!",
|
||||
"userDeleted": "Usuário eliminado!",
|
||||
"userManagement": "Gestão de usuários",
|
||||
"username": "Nome do usuário",
|
||||
"users": "Usuários",
|
||||
"globalRules": "This is a global set of allow and disallow rules. They apply to every user. You can define specific rules on each user's settings to override this ones.",
|
||||
"allowSignup": "Allow users to signup",
|
||||
"insertRegex": "Insert regex expression",
|
||||
"insertPath": "Insert the path",
|
||||
"userUpdated": "Usuário atualizado!",
|
||||
"generalSettings": "General settings",
|
||||
"userDefaults": "User default settings",
|
||||
"defaultUserDescription": "This are the default settings for new users.",
|
||||
"perm": {
|
||||
"create": "Create files and directories",
|
||||
"delete": "Delete files and directories",
|
||||
"download": "Download",
|
||||
"edit": "Edit files",
|
||||
"execute": "Execute commands",
|
||||
"rename": "Rename or move files and directories",
|
||||
"share": "Share files"
|
||||
}
|
||||
},
|
||||
"sidebar": {
|
||||
"help": "Ajuda",
|
||||
"logout": "Sair",
|
||||
"myFiles": "Arquivos",
|
||||
"newFile": "Novo arquivo",
|
||||
"newFolder": "Nova pasta",
|
||||
"settings": "Configurações",
|
||||
"siteSettings": "Configurações do site",
|
||||
"hugoNew": "Hugo New",
|
||||
"preview": "Pré-visualizar"
|
||||
},
|
||||
"search": {
|
||||
"images": "Imagens",
|
||||
"music": "Música",
|
||||
"notSupportedCommand": "This is a not supported command.",
|
||||
"pdf": "PDF",
|
||||
"pressToExecute": "Pressione enter para executar.",
|
||||
"pressToSearch": "Pressione enter para pesquisar.",
|
||||
"search": "Pesquise...",
|
||||
"searchOrCommand": "Pesquise ou execute um comando...",
|
||||
"searchOrSupportedCommand": "Pesquise ou utilize um dos seus comandos:",
|
||||
"typeCommand": "Type and press enter to execute.",
|
||||
"typeSearch": "Type and press enter to search.",
|
||||
"types": "Tipos",
|
||||
"video": "Vídeos",
|
||||
"writeToSearch": "Escreva aqui para pesquisar"
|
||||
},
|
||||
"languages": {
|
||||
"ar": "العربية",
|
||||
"en": "English",
|
||||
"it": "Italiano",
|
||||
"fr": "Français",
|
||||
"pt": "Português",
|
||||
"ptBR": "Português (Brasil)",
|
||||
"ja": "日本語",
|
||||
"zhCN": "中文 (简体)",
|
||||
"zhTW": "中文 (繁體)",
|
||||
"es": "Español",
|
||||
"de": "Deutsch",
|
||||
"ru": "Русский",
|
||||
"pl": "Polski",
|
||||
"ko": "한국어"
|
||||
},
|
||||
"time": {
|
||||
"unit": "Unidades de Tempo",
|
||||
"seconds": "Segundos",
|
||||
"minutes": "Minutos",
|
||||
"hours": "Horas",
|
||||
"days": "Dias"
|
||||
}
|
||||
}
|
||||
@@ -1,209 +0,0 @@
|
||||
permanent: Permanente
|
||||
buttons:
|
||||
cancel: Cancelar
|
||||
close: Fechar
|
||||
copy: Copiar
|
||||
copyFile: Copiar arquivo
|
||||
copyToClipboard: Copiar
|
||||
create: Criar
|
||||
delete: Deletar
|
||||
download: Baixar
|
||||
info: Informações
|
||||
more: Mais
|
||||
move: Mover
|
||||
moveFile: Mover arquivo
|
||||
new: Novo
|
||||
next: Próximo
|
||||
ok: Ok
|
||||
previous: Anterior
|
||||
publish: Publicar
|
||||
rename: Renomear
|
||||
replace: Substituir
|
||||
reportIssue: Reportar erro
|
||||
save: Salvar
|
||||
share: Compartilhar
|
||||
schedule: Agendar
|
||||
search: Pesquisar
|
||||
select: Selecionar
|
||||
selectMultiple: Selecionar múltiplos
|
||||
switchView: Alterar modo de visão
|
||||
toggleSidebar: Alternar barra lateral
|
||||
update: Atualizar
|
||||
upload: Enviar
|
||||
permalink: Obter link permanente
|
||||
success:
|
||||
linkCopied: Link copiado!
|
||||
errors:
|
||||
forbidden: Ops! Você não pode acessar aqui.
|
||||
internal: Ops! Algum erro ocorreu.
|
||||
notFound: Ops! Nada foi encontrado.
|
||||
files:
|
||||
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.
|
||||
lonely: Não existe nada aqui.
|
||||
metadata: Metadados
|
||||
multipleSelectionEnabled: Seleção múltipla ativada
|
||||
name: Nome
|
||||
size: Tamanho
|
||||
sortByLastModified: Ordenar pela última modificação
|
||||
sortByName: Ordenar pelo nome
|
||||
sortBySize: Ordenar pelo tamanho
|
||||
help:
|
||||
click: selecionar pasta ou arquivo
|
||||
ctrl:
|
||||
click: selecionar várias pastas e arquivos
|
||||
f: pesquisar
|
||||
s: salvar um arquivo ou baixar a pasta que você está
|
||||
del: deletar os arquivos selecionados
|
||||
doubleClick: abrir pasta ou arquivo
|
||||
esc: limpar seleção e/ou fechar menu
|
||||
f1: está informação
|
||||
f2: renomear arquivo
|
||||
help: Ajuda
|
||||
languages:
|
||||
ar: العربية
|
||||
en: English
|
||||
it: Italiano
|
||||
fr: Français
|
||||
pt: Português
|
||||
ptBR: Português (Brasil)
|
||||
ja: 日本語
|
||||
zhCN: 中文 (简体)
|
||||
zhTW: 中文 (繁體)
|
||||
es: Español
|
||||
ru: Русский
|
||||
pl: Polski
|
||||
login:
|
||||
password: Senha
|
||||
submit: Login
|
||||
username: Nome do usuário
|
||||
wrongCredentials: Ops! Dados incorretos.
|
||||
prompts:
|
||||
copy: Copiar
|
||||
copyMessage: 'Escolha um lugar para copiar os arquivos:'
|
||||
currentlyNavigating: 'Navegando em:'
|
||||
deleteMessageMultiple: Deseja deletar {count} arquivo(s)?
|
||||
deleteMessageSingle: Deseja deletar está pasta/arquivo?
|
||||
deleteTitle: Deletar arquivos
|
||||
displayName: 'Nome:'
|
||||
download: Baixar arquivos
|
||||
downloadMessage: Escolha o formato do arquivo.
|
||||
error: Algo de ruim ocorreu
|
||||
fileInfo: Informação do arquivo
|
||||
filesSelected: "{count} arquivos selecionados."
|
||||
lastModified: Última modificação
|
||||
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".
|
||||
newDir: Nova pasta
|
||||
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
|
||||
rename: Renomear
|
||||
renameMessage: Insira um novo nome para
|
||||
replace: Substituir
|
||||
replaceMessage: >
|
||||
Já existe um arquivo com nome igual a um dos que está tentando
|
||||
enviar. Deseja substituir?
|
||||
schedule: Agendar
|
||||
scheduleMessage: Escolha uma data para publicar este post.
|
||||
show: Mostrar
|
||||
size: Tamanho
|
||||
search:
|
||||
images: Imagens
|
||||
music: Música
|
||||
pdf: PDF
|
||||
pressToExecute: Pressione enter para executar.
|
||||
pressToSearch: Pressione enter para pesquisar.
|
||||
search: Pesquise...
|
||||
searchOrCommand: Pesquise ou execute um comando...
|
||||
searchOrSupportedCommand: 'Pesquise ou utilize um dos seus comandos:'
|
||||
type: Escreva e pressione enter para pesquisar.
|
||||
types: Tipos
|
||||
video: Vídeos
|
||||
writeToSearch: Escreva aqui para pesquisar
|
||||
settings:
|
||||
admin: Admin
|
||||
administrator: Administrador
|
||||
allowCommands: Executar comandos
|
||||
allowEdit: Editar, renomear e deletar arquivos ou pastas
|
||||
allowNew: Criar novos arquivos e pastas
|
||||
allowPublish: Publicar novas páginas e conteúdos
|
||||
avoidChanges: "(deixe em branco para manter)"
|
||||
changePassword: Alterar senha
|
||||
commands: Comandos
|
||||
commandsHelp: >
|
||||
Pode definir um conjunto de comandos a executar em determiandos eventos.
|
||||
Deve escrever um comando por linha. Se o evento estiver relacionado com arquivos,
|
||||
como antes e depois de salvar, irá existir uma variável de ambiente denominada
|
||||
"FILE" com o caminho do arquivo.
|
||||
commandsUpdated: Comandos atualizados!
|
||||
customStylesheet: Estilos personalizados
|
||||
examples: Exemplos
|
||||
globalSettings: Configurações globais
|
||||
language: Linguagem
|
||||
lockPassword: Não permitir que o usuário altere a senha
|
||||
newPassword: Nova senha
|
||||
newPasswordConfirm: Confirme a nova senha
|
||||
newUser: Novo usuário
|
||||
password: Senha
|
||||
passwordUpdated: Senha atualizada!
|
||||
permissions: Permissões
|
||||
permissionsHelp: >
|
||||
Pode definir o usuário como administrador ou escolher as permissões
|
||||
manualmente. Se selecionar a opção "Administrador", todas as outras opções serão
|
||||
automaticamente selecionadas. A gestão dos usuários é um privilégio restringido
|
||||
aos administradores.
|
||||
profileSettings: Configurações do usuário
|
||||
ruleExample1: >
|
||||
previne o acesso a qualquer "dotfile" (como .git, .gitignore) em
|
||||
qualquer pasta
|
||||
ruleExample2: bloqueia o acesso ao arquivo chamado Caddyfile.
|
||||
rules: Regras
|
||||
rulesHelp1: >
|
||||
Aqui pode definir um conjunto de regras para permitir ou bloquear o
|
||||
acesso do utilizador a determinados arquivos ou pastas. Os arquivos bloqueados
|
||||
não irão aparecer durante a navegação. Suportamos expressões regulares e os caminhos
|
||||
dos arquivos devem ser relativos à base do usuário.
|
||||
rulesHelp2: >
|
||||
Cada regra deve ser colocada numa linha diferente e deve começar com
|
||||
as palavras {0} (permite) ou {1} (bloqueia). Deve escrever, logo de seguida, {2},
|
||||
caso queira utilizar uma expressão regular. Depois, escreva o caminho do arquivo/pasta
|
||||
ou a expressão regular.
|
||||
scope: Base
|
||||
settingsUpdated: Configurações atualizadas!
|
||||
user: Usuário
|
||||
userCommands: Comandos
|
||||
userCommandsHelp: 'Uma lista, separada com espaços, de comandos disponíveis para
|
||||
este usuário. Exemplo:'
|
||||
userCreated: Usuário criado!
|
||||
userDeleted: Usuário eliminado!
|
||||
userManagement: Gestão de usuários
|
||||
username: Nome do usuário
|
||||
users: Usuários
|
||||
userUpdated: Usuário atualizado!
|
||||
sidebar:
|
||||
help: Ajuda
|
||||
hugoNew: Hugo New
|
||||
logout: Sair
|
||||
myFiles: Arquivos
|
||||
newFile: Novo arquivo
|
||||
newFolder: Nova pasta
|
||||
preview: Pré-visualizar
|
||||
settings: Configurações
|
||||
siteSettings: Configurações do site
|
||||
time:
|
||||
unit: Unidades de Tempo
|
||||
seconds: Segundos
|
||||
minutes: Minutos
|
||||
hours: Horas
|
||||
days: Dias
|
||||
233
src/i18n/pt.json
Normal file
233
src/i18n/pt.json
Normal file
@@ -0,0 +1,233 @@
|
||||
{
|
||||
"permanent": "Permanente",
|
||||
"buttons": {
|
||||
"cancel": "Cancelar",
|
||||
"close": "Fechar",
|
||||
"copy": "Copiar",
|
||||
"copyFile": "Copiar ficheiro",
|
||||
"copyToClipboard": "Copiar",
|
||||
"create": "Criar",
|
||||
"delete": "Eliminar",
|
||||
"download": "Descarregar",
|
||||
"info": "Info",
|
||||
"more": "Mais",
|
||||
"move": "Mover",
|
||||
"moveFile": "Mover ficheiro",
|
||||
"new": "Novo",
|
||||
"next": "Próximo",
|
||||
"ok": "OK",
|
||||
"replace": "Substituir",
|
||||
"previous": "Anterior",
|
||||
"rename": "Renomear",
|
||||
"reportIssue": "Reportar Erro",
|
||||
"save": "Guardar",
|
||||
"search": "Pesquisar",
|
||||
"select": "Selecionar",
|
||||
"share": "Partilhar",
|
||||
"publish": "Publicar",
|
||||
"selectMultiple": "Selecionar múltiplos",
|
||||
"schedule": "Agendar",
|
||||
"switchView": "Alterar modo de visão",
|
||||
"toggleSidebar": "Alternar barra lateral",
|
||||
"update": "Atualizar",
|
||||
"upload": "Enviar",
|
||||
"permalink": "Obter link permanente"
|
||||
},
|
||||
"success": {
|
||||
"linkCopied": "Link copiado!"
|
||||
},
|
||||
"errors": {
|
||||
"forbidden": "Tu não és bem-vindo aqui.",
|
||||
"internal": "Algo correu bastante mal.",
|
||||
"notFound": "Não conseguimos chegar a esta localização."
|
||||
},
|
||||
"files": {
|
||||
"folders": "Pastas",
|
||||
"files": "Ficheiros",
|
||||
"body": "Corpo",
|
||||
"clear": "Limpar",
|
||||
"closePreview": "Fechar pré-visualização",
|
||||
"home": "Início",
|
||||
"lastModified": "Última modificação",
|
||||
"loading": "A carregar...",
|
||||
"lonely": "Sinto-me sozinho...",
|
||||
"metadata": "Metadados",
|
||||
"multipleSelectionEnabled": "Seleção múltipla ativada",
|
||||
"name": "Nome",
|
||||
"size": "Tamanho",
|
||||
"sortByName": "Ordenar pelo nome",
|
||||
"sortBySize": "Ordenar pelo tamanho",
|
||||
"sortByLastModified": "Ordenar pela última modificação"
|
||||
},
|
||||
"help": {
|
||||
"click": "selecionar pasta ou ficheiro",
|
||||
"ctrl": {
|
||||
"click": "selecionar várias pastas e ficheiros",
|
||||
"f": "pesquisar",
|
||||
"s": "guardar um ficheiro ou descarregar a pasta em que estás a navegar"
|
||||
},
|
||||
"del": "eliminar os ficheiros selecionados",
|
||||
"doubleClick": "abrir pasta ou ficheiro",
|
||||
"esc": "limpar seleção e/ou fechar menu",
|
||||
"f1": "esta informação",
|
||||
"f2": "renomear ficheiro",
|
||||
"help": "Ajuda"
|
||||
},
|
||||
"login": {
|
||||
"password": "Palavra-passe",
|
||||
"passwordConfirm": "Password Confirmation",
|
||||
"submit": "Login",
|
||||
"createAnAccount": "Create an account",
|
||||
"loginInstead": "Already have an account",
|
||||
"passwordsDontMatch": "Passwords don't match",
|
||||
"usernameTaken": "Username already taken",
|
||||
"signup": "Signup",
|
||||
"username": "Nome de utilizador",
|
||||
"wrongCredentials": "Dados errados"
|
||||
},
|
||||
"prompts": {
|
||||
"copy": "Copiar",
|
||||
"copyMessage": "Escolhe um lugar para copiar os ficheiros:",
|
||||
"currentlyNavigating": "A navegar em:",
|
||||
"deleteMessageMultiple": "Deseja eliminar {count} ficheiro(s)?",
|
||||
"deleteMessageSingle": "Deseja eliminar esta pasta/ficheiro?",
|
||||
"deleteTitle": "Eliminar ficheiros",
|
||||
"displayName": "Nome:",
|
||||
"download": "Descarregar ficheiros",
|
||||
"downloadMessage": "Escolha o formato do ficheiro.",
|
||||
"error": "Algo correu mal",
|
||||
"fileInfo": "Informação do ficheiro",
|
||||
"filesSelected": "{count} ficheiros selecionados.",
|
||||
"lastModified": "Última Modificação",
|
||||
"move": "Mover",
|
||||
"moveMessage": "Escolha uma nova casa para os seus ficheiros:",
|
||||
"newDir": "Nova pasta",
|
||||
"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",
|
||||
"replace": "Substituir",
|
||||
"replaceMessage": "Já existe um ficheiro com nome igual a um dos que está a tentar enviar. Deseja substituir?\n",
|
||||
"rename": "Renomear",
|
||||
"renameMessage": "Insira um novo nome para",
|
||||
"show": "Mostrar",
|
||||
"size": "Tamanho",
|
||||
"schedule": "Agendar",
|
||||
"scheduleMessage": "Escolha uma data para publicar este post.",
|
||||
"newArchetype": "Criar um novo post baseado num \"archetype\". O seu ficheiro será criado na pasta \"content\"."
|
||||
},
|
||||
"settings": {
|
||||
"instanceName": "Instance name",
|
||||
"brandingDirectoryPath": "Branding directory path",
|
||||
"documentation": "documentation",
|
||||
"branding": "Branding",
|
||||
"disableExternalLinks": "Disable external links (except documentation)",
|
||||
"brandingHelp": "You can costumize how your File Browser instance looks and feels by changing its name, replacing the logo, adding custom styles and even disable external links to GitHub.\nFor more information about custom branding, please check out the {0}.",
|
||||
"admin": "Admin",
|
||||
"administrator": "Administrador",
|
||||
"allowCommands": "Executar comandos",
|
||||
"allowEdit": "Editar, renomear e eliminar ficheiros ou pastas",
|
||||
"allowNew": "Criar novos ficheiros e pastas",
|
||||
"allowPublish": "Publicar novas páginas e conteúdos",
|
||||
"avoidChanges": "(deixe em branco para manter)",
|
||||
"changePassword": "Alterar Password",
|
||||
"commandRunner": "Command runner",
|
||||
"commandRunnerHelp": "Here you can set commands that are executed in the named events. You must write one per line. The environment variables {0} and {1} will be available, being {0} relative to {1}. For more information about this feature and the available environment variables, please read the {2}.",
|
||||
"commandsUpdated": "Comandos atualizados!",
|
||||
"customStylesheet": "Estilos Personalizados",
|
||||
"examples": "Exemplos",
|
||||
"globalSettings": "Configurações Globais",
|
||||
"language": "Linguagem",
|
||||
"lockPassword": "Não permitir que o utilizador altere a palavra-passe",
|
||||
"newPassword": "Nova palavra-passe",
|
||||
"newPasswordConfirm": "Confirme a nova palavra-passe",
|
||||
"newUser": "Novo Utilizador",
|
||||
"password": "Palavra-passe",
|
||||
"passwordUpdated": "Palavra-passe atualizada!",
|
||||
"permissions": "Permissões",
|
||||
"permissionsHelp": "Pode definir o utilizador como administrador ou escolher as permissões manualmente. Se selecionar a opção \"Administrador\", todas as outras opções serão automaticamente selecionadas. A gestão dos utilizadores é um privilégio restringido aos administradores.\n",
|
||||
"profileSettings": "Configurações do Utilizador",
|
||||
"ruleExample1": "previne o acesso a qualquer \"dotfile\" (como .git, .gitignore) em qualquer pasta\n",
|
||||
"ruleExample2": "bloqueia o acesso ao ficheiro chamado Caddyfile.",
|
||||
"rules": "Regras",
|
||||
"rulesHelp": "Aqui pode definir um conjunto de regras para permitir ou bloquear o acesso do utilizador a determinados ficheiros ou pastas. Os ficheiros bloqueados não irão aparecer durante a navegação. Suportamos expressões regulares e os caminhos dos ficheiros devem ser relativos à base do utilizador.\n",
|
||||
"scope": "Base",
|
||||
"settingsUpdated": "Configurações atualizadas!",
|
||||
"user": "Utilizador",
|
||||
"userCommands": "Comandos",
|
||||
"userCommandsHelp": "Uma lista, separada com espaços, de comandos disponíveis para este utilizados. Exemplo:",
|
||||
"userCreated": "Utilizador criado!",
|
||||
"userDeleted": "Utilizador eliminado!",
|
||||
"userManagement": "Gestão de Utilizadores",
|
||||
"username": "Nome de utilizador",
|
||||
"users": "Utilizadores",
|
||||
"globalRules": "This is a global set of allow and disallow rules. They apply to every user. You can define specific rules on each user's settings to override this ones.",
|
||||
"allowSignup": "Allow users to signup",
|
||||
"insertRegex": "Insert regex expression",
|
||||
"insertPath": "Insert the path",
|
||||
"userUpdated": "Utilizador atualizado!",
|
||||
"generalSettings": "General settings",
|
||||
"userDefaults": "User default settings",
|
||||
"defaultUserDescription": "This are the default settings for new users.",
|
||||
"perm": {
|
||||
"create": "Create files and directories",
|
||||
"delete": "Delete files and directories",
|
||||
"download": "Download",
|
||||
"edit": "Edit files",
|
||||
"execute": "Execute commands",
|
||||
"rename": "Rename or move files and directories",
|
||||
"share": "Share files"
|
||||
}
|
||||
},
|
||||
"sidebar": {
|
||||
"help": "Ajuda",
|
||||
"logout": "Sair",
|
||||
"myFiles": "Ficheiros",
|
||||
"newFile": "Novo ficheiro",
|
||||
"newFolder": "Nova pasta",
|
||||
"settings": "Configurações",
|
||||
"siteSettings": "Configurações do Site",
|
||||
"hugoNew": "Hugo New",
|
||||
"preview": "Pré-visualizar"
|
||||
},
|
||||
"search": {
|
||||
"images": "Imagens",
|
||||
"music": "Música",
|
||||
"notSupportedCommand": "This is a not supported command.",
|
||||
"pdf": "PDF",
|
||||
"pressToExecute": "Prima enter para executar.",
|
||||
"pressToSearch": "Prima enter para pesquisar.",
|
||||
"search": "Pesquise...",
|
||||
"searchOrCommand": "Pesquise ou execute um comando...",
|
||||
"searchOrSupportedCommand": "Pesquise ou utilize um dos seus comandos:",
|
||||
"typeCommand": "Type and press enter to execute.",
|
||||
"typeSearch": "Type and press enter to search.",
|
||||
"types": "Tipos",
|
||||
"video": "Vídeos",
|
||||
"writeToSearch": "Escreva aqui para pesquisar"
|
||||
},
|
||||
"languages": {
|
||||
"ar": "العربية",
|
||||
"en": "English",
|
||||
"it": "Italiano",
|
||||
"fr": "Français",
|
||||
"pt": "Português",
|
||||
"ptBR": "Português (Brasil)",
|
||||
"ja": "日本語",
|
||||
"zhCN": "中文 (简体)",
|
||||
"zhTW": "中文 (繁體)",
|
||||
"es": "Español",
|
||||
"de": "Deutsch",
|
||||
"ru": "Русский",
|
||||
"pl": "Polski",
|
||||
"ko": "한국어"
|
||||
},
|
||||
"time": {
|
||||
"unit": "Unidades de Tempo",
|
||||
"seconds": "Segundos",
|
||||
"minutes": "Minutos",
|
||||
"hours": "Horas",
|
||||
"days": "Dias"
|
||||
}
|
||||
}
|
||||
209
src/i18n/pt.yaml
209
src/i18n/pt.yaml
@@ -1,209 +0,0 @@
|
||||
permanent: Permanente
|
||||
buttons:
|
||||
cancel: Cancelar
|
||||
close: Fechar
|
||||
copy: Copiar
|
||||
copyFile: Copiar ficheiro
|
||||
copyToClipboard: Copiar
|
||||
create: Criar
|
||||
delete: Eliminar
|
||||
download: Descarregar
|
||||
info: Info
|
||||
more: Mais
|
||||
move: Mover
|
||||
moveFile: Mover ficheiro
|
||||
new: Novo
|
||||
next: Próximo
|
||||
ok: OK
|
||||
previous: Anterior
|
||||
publish: Publicar
|
||||
rename: Renomear
|
||||
replace: Substituir
|
||||
reportIssue: Reportar Erro
|
||||
save: Guardar
|
||||
share: Partilhar
|
||||
schedule: Agendar
|
||||
search: Pesquisar
|
||||
select: Selecionar
|
||||
selectMultiple: Selecionar múltiplos
|
||||
switchView: Alterar modo de visão
|
||||
toggleSidebar: Alternar barra lateral
|
||||
update: Atualizar
|
||||
upload: Enviar
|
||||
permalink: Obter link permanente
|
||||
success:
|
||||
linkCopied: Link copiado!
|
||||
errors:
|
||||
forbidden: Tu não és bem-vindo aqui.
|
||||
internal: Algo correu bastante mal.
|
||||
notFound: Não conseguimos chegar a esta localização.
|
||||
files:
|
||||
body: Corpo
|
||||
clear: Limpar
|
||||
closePreview: Fechar pré-visualização
|
||||
files: Ficheiros
|
||||
folders: Pastas
|
||||
home: Início
|
||||
lastModified: Última modificação
|
||||
loading: A carregar...
|
||||
lonely: Sinto-me sozinho...
|
||||
metadata: Metadados
|
||||
multipleSelectionEnabled: Seleção múltipla ativada
|
||||
name: Nome
|
||||
size: Tamanho
|
||||
sortByLastModified: Ordenar pela última modificação
|
||||
sortByName: Ordenar pelo nome
|
||||
sortBySize: Ordenar pelo tamanho
|
||||
help:
|
||||
click: selecionar pasta ou ficheiro
|
||||
ctrl:
|
||||
click: selecionar várias pastas e ficheiros
|
||||
f: pesquisar
|
||||
s: guardar um ficheiro ou descarregar a pasta em que estás a navegar
|
||||
del: eliminar os ficheiros selecionados
|
||||
doubleClick: abrir pasta ou ficheiro
|
||||
esc: limpar seleção e/ou fechar menu
|
||||
f1: esta informação
|
||||
f2: renomear ficheiro
|
||||
help: Ajuda
|
||||
languages:
|
||||
ar: العربية
|
||||
en: English
|
||||
it: Italiano
|
||||
fr: Français
|
||||
pt: Português
|
||||
ptBR: Português (Brasil)
|
||||
ja: 日本語
|
||||
zhCN: 中文 (简体)
|
||||
zhTW: 中文 (繁體)
|
||||
es: Español
|
||||
ru: Русский
|
||||
pl: Polski
|
||||
login:
|
||||
password: Palavra-passe
|
||||
submit: Login
|
||||
username: Nome de utilizador
|
||||
wrongCredentials: Dados errados
|
||||
prompts:
|
||||
copy: Copiar
|
||||
copyMessage: 'Escolhe um lugar para copiar os ficheiros:'
|
||||
currentlyNavigating: 'A navegar em:'
|
||||
deleteMessageMultiple: Deseja eliminar {count} ficheiro(s)?
|
||||
deleteMessageSingle: Deseja eliminar esta pasta/ficheiro?
|
||||
deleteTitle: Eliminar ficheiros
|
||||
displayName: 'Nome:'
|
||||
download: Descarregar ficheiros
|
||||
downloadMessage: Escolha o formato do ficheiro.
|
||||
error: Algo correu mal
|
||||
fileInfo: Informação do ficheiro
|
||||
filesSelected: "{count} ficheiros selecionados."
|
||||
lastModified: Última Modificação
|
||||
move: Mover
|
||||
moveMessage: 'Escolha uma nova casa para os seus ficheiros:'
|
||||
newArchetype: Criar um novo post baseado num "archetype". O seu ficheiro será criado
|
||||
na pasta "content".
|
||||
newDir: Nova pasta
|
||||
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
|
||||
rename: Renomear
|
||||
renameMessage: Insira um novo nome para
|
||||
replace: Substituir
|
||||
replaceMessage: >
|
||||
Já existe um ficheiro com nome igual a um dos que está a tentar
|
||||
enviar. Deseja substituir?
|
||||
schedule: Agendar
|
||||
scheduleMessage: Escolha uma data para publicar este post.
|
||||
show: Mostrar
|
||||
size: Tamanho
|
||||
search:
|
||||
images: Imagens
|
||||
music: Música
|
||||
pdf: PDF
|
||||
pressToExecute: Prima enter para executar.
|
||||
pressToSearch: Prima enter para pesquisar.
|
||||
search: Pesquise...
|
||||
searchOrCommand: Pesquise ou execute um comando...
|
||||
searchOrSupportedCommand: 'Pesquise ou utilize um dos seus comandos:'
|
||||
type: Escreva e prima enter para pesquisar.
|
||||
types: Tipos
|
||||
video: Vídeos
|
||||
writeToSearch: Escreva aqui para pesquisar
|
||||
settings:
|
||||
admin: Admin
|
||||
administrator: Administrador
|
||||
allowCommands: Executar comandos
|
||||
allowEdit: Editar, renomear e eliminar ficheiros ou pastas
|
||||
allowNew: Criar novos ficheiros e pastas
|
||||
allowPublish: Publicar novas páginas e conteúdos
|
||||
avoidChanges: "(deixe em branco para manter)"
|
||||
changePassword: Alterar Password
|
||||
commands: Comandos
|
||||
commandsHelp: >
|
||||
Pode definir um conjunto de comandos a executar em determiandos eventos.
|
||||
Deve escrever um comando por linha. Se o evento estiver relacionado com ficheiros,
|
||||
como antes e depois de guardar, irá existir uma variável de ambiente denominada
|
||||
"FILE" com o caminho do ficheiro.
|
||||
commandsUpdated: Comandos atualizados!
|
||||
customStylesheet: Estilos Personalizados
|
||||
examples: Exemplos
|
||||
globalSettings: Configurações Globais
|
||||
language: Linguagem
|
||||
lockPassword: Não permitir que o utilizador altere a palavra-passe
|
||||
newPassword: Nova palavra-passe
|
||||
newPasswordConfirm: Confirme a nova palavra-passe
|
||||
newUser: Novo Utilizador
|
||||
password: Palavra-passe
|
||||
passwordUpdated: Palavra-passe atualizada!
|
||||
permissions: Permissões
|
||||
permissionsHelp: >
|
||||
Pode definir o utilizador como administrador ou escolher as permissões
|
||||
manualmente. Se selecionar a opção "Administrador", todas as outras opções serão
|
||||
automaticamente selecionadas. A gestão dos utilizadores é um privilégio restringido
|
||||
aos administradores.
|
||||
profileSettings: Configurações do Utilizador
|
||||
ruleExample1: >
|
||||
previne o acesso a qualquer "dotfile" (como .git, .gitignore) em
|
||||
qualquer pasta
|
||||
ruleExample2: bloqueia o acesso ao ficheiro chamado Caddyfile.
|
||||
rules: Regras
|
||||
rulesHelp1: >
|
||||
Aqui pode definir um conjunto de regras para permitir ou bloquear o
|
||||
acesso do utilizador a determinados ficheiros ou pastas. Os ficheiros bloqueados
|
||||
não irão aparecer durante a navegação. Suportamos expressões regulares e os caminhos
|
||||
dos ficheiros devem ser relativos à base do utilizador.
|
||||
rulesHelp2: >
|
||||
Cada regra deve ser colocada numa linha diferente e deve começar com
|
||||
as palavras {0} (permite) ou {1} (bloqueia). Deve escrever, logo de seguida, {2},
|
||||
caso queira utilizar uma expressão regular. Depois, escreva o caminho do ficheiro/pasta
|
||||
ou a expressão regular.
|
||||
scope: Base
|
||||
settingsUpdated: Configurações atualizadas!
|
||||
user: Utilizador
|
||||
userCommands: Comandos
|
||||
userCommandsHelp: 'Uma lista, separada com espaços, de comandos disponíveis para
|
||||
este utilizados. Exemplo:'
|
||||
userCreated: Utilizador criado!
|
||||
userDeleted: Utilizador eliminado!
|
||||
userManagement: Gestão de Utilizadores
|
||||
username: Nome de utilizador
|
||||
users: Utilizadores
|
||||
userUpdated: Utilizador atualizado!
|
||||
sidebar:
|
||||
help: Ajuda
|
||||
hugoNew: Hugo New
|
||||
logout: Sair
|
||||
myFiles: Ficheiros
|
||||
newFile: Novo ficheiro
|
||||
newFolder: Nova pasta
|
||||
preview: Pré-visualizar
|
||||
settings: Configurações
|
||||
siteSettings: Configurações do Site
|
||||
time:
|
||||
unit: Unidades de Tempo
|
||||
seconds: Segundos
|
||||
minutes: Minutos
|
||||
hours: Horas
|
||||
days: Dias
|
||||
233
src/i18n/ru.json
Normal file
233
src/i18n/ru.json
Normal file
@@ -0,0 +1,233 @@
|
||||
{
|
||||
"permanent": "Постоянный",
|
||||
"buttons": {
|
||||
"cancel": "Отмена",
|
||||
"close": "Закрыть",
|
||||
"copy": "Копировать",
|
||||
"copyFile": "Скопировать файл",
|
||||
"copyToClipboard": "Скопировать в буфер",
|
||||
"create": "Создать",
|
||||
"delete": "Удалить",
|
||||
"download": "Скачать",
|
||||
"info": "Инфо",
|
||||
"more": "Еще",
|
||||
"move": "Переместить",
|
||||
"moveFile": "Переместить файл",
|
||||
"new": "Новый",
|
||||
"next": "Вперед",
|
||||
"ok": "OK",
|
||||
"replace": "Перезаписать",
|
||||
"previous": "Назад",
|
||||
"rename": "Переименовать",
|
||||
"reportIssue": "Сообщить о проблеме",
|
||||
"save": "Сохранить",
|
||||
"search": "Поиск",
|
||||
"select": "Выбрать",
|
||||
"share": "Поделиться",
|
||||
"publish": "Опубликовать",
|
||||
"selectMultiple": "Мультивыбор",
|
||||
"schedule": "Планировка",
|
||||
"switchView": "Вид",
|
||||
"toggleSidebar": "Боковая панель",
|
||||
"update": "Обновить",
|
||||
"upload": "Загрузить",
|
||||
"permalink": "Получить постоянную ссылку"
|
||||
},
|
||||
"success": {
|
||||
"linkCopied": "Ссылка скопирована!"
|
||||
},
|
||||
"errors": {
|
||||
"forbidden": "Доступ запрещен.",
|
||||
"internal": "Что-то пошло не так.",
|
||||
"notFound": "Неправильная ссылка."
|
||||
},
|
||||
"files": {
|
||||
"folders": "Каталоги",
|
||||
"files": "Файлы",
|
||||
"body": "Тело",
|
||||
"clear": "Очистить",
|
||||
"closePreview": "Закрыть",
|
||||
"home": "Дом",
|
||||
"lastModified": "Последнее изменение",
|
||||
"loading": "Загрузка...",
|
||||
"lonely": "Здесь пусто...",
|
||||
"metadata": "Метаданные",
|
||||
"multipleSelectionEnabled": "Мультивыбор включен",
|
||||
"name": "Имя",
|
||||
"size": "Размер",
|
||||
"sortByName": "Сортировка по имени",
|
||||
"sortBySize": "Сортировка по размеру",
|
||||
"sortByLastModified": "Сортировка по изменению"
|
||||
},
|
||||
"help": {
|
||||
"click": "выбрать файл или каталог",
|
||||
"ctrl": {
|
||||
"click": "выбрать несколько файлов или каталогов",
|
||||
"f": "открыть поиск",
|
||||
"s": "скачать файл или текущий каталог"
|
||||
},
|
||||
"del": "удалить выбранные элементы",
|
||||
"doubleClick": "открыть файл или каталог",
|
||||
"esc": "очистить выделение и/или закрыть окно",
|
||||
"f1": "помощь",
|
||||
"f2": "переименовать файл",
|
||||
"help": "Помощь"
|
||||
},
|
||||
"login": {
|
||||
"password": "Пароль",
|
||||
"passwordConfirm": "Password Confirmation",
|
||||
"submit": "Войти",
|
||||
"createAnAccount": "Create an account",
|
||||
"loginInstead": "Already have an account",
|
||||
"passwordsDontMatch": "Passwords don't match",
|
||||
"usernameTaken": "Username already taken",
|
||||
"signup": "Signup",
|
||||
"username": "Имя пользователя",
|
||||
"wrongCredentials": "Неверные данные"
|
||||
},
|
||||
"prompts": {
|
||||
"copy": "Копировать",
|
||||
"copyMessage": "Копировать в:",
|
||||
"currentlyNavigating": "Текущий каталог:",
|
||||
"deleteMessageMultiple": "Удалить эти файлы ({count})?",
|
||||
"deleteMessageSingle": "Удалить этот файл/каталог?",
|
||||
"deleteTitle": "Удалить файлы",
|
||||
"displayName": "Отображаемое имя:",
|
||||
"download": "Скачать файлы",
|
||||
"downloadMessage": "Скачать каталог в следующем формате.",
|
||||
"error": "Ошибка",
|
||||
"fileInfo": "Информация о файле",
|
||||
"filesSelected": "Файлов выбрано: {count}.",
|
||||
"lastModified": "Последнее изменение",
|
||||
"move": "Переместить",
|
||||
"moveMessage": "Переместить в:",
|
||||
"newDir": "Новый каталог",
|
||||
"newDirMessage": "Имя нового каталога.",
|
||||
"newFile": "Новый файл",
|
||||
"newFileMessage": "Имя нового файла.",
|
||||
"numberDirs": "Количество каталогов",
|
||||
"numberFiles": "Количество файлов",
|
||||
"replace": "Заменить",
|
||||
"replaceMessage": "Имя одного из загружаемых файлов совпадает с уже существующим файлом. Вы хотите заменить существующий?\n",
|
||||
"rename": "Переименовать",
|
||||
"renameMessage": "Новое имя",
|
||||
"show": "Показать",
|
||||
"size": "Размер",
|
||||
"schedule": "Планировка",
|
||||
"scheduleMessage": "Запланировать дату и время публикации.",
|
||||
"newArchetype": "Создайте новую запись на основе архетипа. Файл будет создан в каталоге."
|
||||
},
|
||||
"settings": {
|
||||
"instanceName": "Instance name",
|
||||
"brandingDirectoryPath": "Branding directory path",
|
||||
"documentation": "documentation",
|
||||
"branding": "Branding",
|
||||
"disableExternalLinks": "Disable external links (except documentation)",
|
||||
"brandingHelp": "You can costumize how your File Browser instance looks and feels by changing its name, replacing the logo, adding custom styles and even disable external links to GitHub.\nFor more information about custom branding, please check out the {0}.",
|
||||
"admin": "Админ",
|
||||
"administrator": "Администратор",
|
||||
"allowCommands": "Запуск команд",
|
||||
"allowEdit": "Редактирование, переименование и удаление файлов или каталогов",
|
||||
"allowNew": "Создание новых файлов или каталогов",
|
||||
"allowPublish": "Публикация новых записей и страниц",
|
||||
"avoidChanges": "(пусто для пропуска)",
|
||||
"changePassword": "Изменение пароля",
|
||||
"commandRunner": "Command runner",
|
||||
"commandRunnerHelp": "Here you can set commands that are executed in the named events. You must write one per line. The environment variables {0} and {1} will be available, being {0} relative to {1}. For more information about this feature and the available environment variables, please read the {2}.",
|
||||
"commandsUpdated": "Команды обновлены!",
|
||||
"customStylesheet": "Свой стиль",
|
||||
"examples": "Примеры",
|
||||
"globalSettings": "Глобальные настройки",
|
||||
"language": "Язык",
|
||||
"lockPassword": "Запретить пользователю менять пароль",
|
||||
"newPassword": "Новый пароль",
|
||||
"newPasswordConfirm": "Повтор нового пароля",
|
||||
"newUser": "Новый пользователь",
|
||||
"password": "Пароль",
|
||||
"passwordUpdated": "Пароль обновлен!",
|
||||
"permissions": "Права доступа",
|
||||
"permissionsHelp": "Можно настроить пользователя как администратора или выбрать разрешения индивидуально. При выборе \"Администратор\", все остальные параметры будут автоматически выбраны. Управление пользователями - привилегия администратора.\n",
|
||||
"profileSettings": "Настройки профиля",
|
||||
"ruleExample1": "предотвратить доступ к любому скрытому файлу (например: .git, .gitignore) в каждой папке.\n",
|
||||
"ruleExample2": "блокирует доступ к файлу с именем Caddyfile в корневой области.",
|
||||
"rules": "Права",
|
||||
"rulesHelp": "Здесь вы можете определить набор разрешающих и запрещающих правил для этого конкретного пользователь. Блокированные файлы не будут отображаться в списках, и не будут доступны для пользователя. Есть поддержка регулярных выражений и относительных путей.\n",
|
||||
"scope": "Корень",
|
||||
"settingsUpdated": "Настройки применены!",
|
||||
"user": "Пользователь",
|
||||
"userCommands": "Команды",
|
||||
"userCommandsHelp": "Список команд доступных пользователю, разделенный пробелами. Пример:\n",
|
||||
"userCreated": "Пользователь создан!",
|
||||
"userDeleted": "Пользователь удален!",
|
||||
"userManagement": "Управление пользователями",
|
||||
"username": "Имя пользователя",
|
||||
"users": "Пользователи",
|
||||
"globalRules": "This is a global set of allow and disallow rules. They apply to every user. You can define specific rules on each user's settings to override this ones.",
|
||||
"allowSignup": "Allow users to signup",
|
||||
"insertRegex": "Insert regex expression",
|
||||
"insertPath": "Insert the path",
|
||||
"userUpdated": "Пользователь изменен!",
|
||||
"generalSettings": "General settings",
|
||||
"userDefaults": "User default settings",
|
||||
"defaultUserDescription": "This are the default settings for new users.",
|
||||
"perm": {
|
||||
"create": "Create files and directories",
|
||||
"delete": "Delete files and directories",
|
||||
"download": "Download",
|
||||
"edit": "Edit files",
|
||||
"execute": "Execute commands",
|
||||
"rename": "Rename or move files and directories",
|
||||
"share": "Share files"
|
||||
}
|
||||
},
|
||||
"sidebar": {
|
||||
"help": "Помощь",
|
||||
"logout": "Выход",
|
||||
"myFiles": "Файлы",
|
||||
"newFile": "Новый файл",
|
||||
"newFolder": "Новый каталог",
|
||||
"settings": "Настройки",
|
||||
"siteSettings": "Настройки сайта",
|
||||
"hugoNew": "Hugo New",
|
||||
"preview": "Предпросмотр"
|
||||
},
|
||||
"search": {
|
||||
"images": "Изображения",
|
||||
"music": "Музыка",
|
||||
"notSupportedCommand": "Команда не поддерживается.",
|
||||
"pdf": "PDF",
|
||||
"pressToExecute": "Enter для запуска.",
|
||||
"pressToSearch": "Enter для поиска.",
|
||||
"search": "Поиск...",
|
||||
"searchOrCommand": "Поиск или выполнение команды...",
|
||||
"searchOrSupportedCommand": "Поиск или выполнение команды, начинающейся с '$':",
|
||||
"typeCommand": "Введи текст и нажми Enter для запуска.",
|
||||
"typeSearch": "Введи текст и нажми Enter для поиска.",
|
||||
"types": "Типы",
|
||||
"video": "Видео",
|
||||
"writeToSearch": "Введи текст для поиска"
|
||||
},
|
||||
"languages": {
|
||||
"ar": "العربية",
|
||||
"en": "English",
|
||||
"it": "Italiano",
|
||||
"fr": "Français",
|
||||
"pt": "Português",
|
||||
"ptBR": "Português (Brasil)",
|
||||
"ja": "日本語",
|
||||
"zhCN": "中文 (简体)",
|
||||
"zhTW": "中文 (繁體)",
|
||||
"es": "Español",
|
||||
"de": "Deutsch",
|
||||
"ru": "Русский",
|
||||
"pl": "Polski",
|
||||
"ko": "한국어"
|
||||
},
|
||||
"time": {
|
||||
"unit": "Единица времени",
|
||||
"seconds": "Секунды",
|
||||
"minutes": "Минуты",
|
||||
"hours": "Часы",
|
||||
"days": "Дни"
|
||||
}
|
||||
}
|
||||
208
src/i18n/ru.yaml
208
src/i18n/ru.yaml
@@ -1,208 +0,0 @@
|
||||
permanent: Постоянный
|
||||
buttons:
|
||||
cancel: Отмена
|
||||
close: Закрыть
|
||||
copy: Копировать
|
||||
copyFile: Скопировать файл
|
||||
copyToClipboard: Скопировать в буфер
|
||||
create: Создать
|
||||
delete: Удалить
|
||||
download: Скачать
|
||||
info: Инфо
|
||||
more: Еще
|
||||
move: Переместить
|
||||
moveFile: Переместить файл
|
||||
new: Новый
|
||||
next: Вперед
|
||||
ok: OK
|
||||
replace: Перезаписать
|
||||
previous: Назад
|
||||
rename: Переименовать
|
||||
reportIssue: Сообщить о проблеме
|
||||
save: Сохранить
|
||||
search: Поиск
|
||||
select: Выбрать
|
||||
share: Поделиться
|
||||
publish: Опубликовать
|
||||
selectMultiple: Мультивыбор
|
||||
schedule: Планировка
|
||||
switchView: Вид
|
||||
toggleSidebar: Боковая панель
|
||||
update: Обновить
|
||||
upload: Загрузить
|
||||
permalink: Получить постоянную ссылку
|
||||
success:
|
||||
linkCopied: Ссылка скопирована!
|
||||
errors:
|
||||
forbidden: Доступ запрещен.
|
||||
internal: Что-то пошло не так.
|
||||
notFound: Неправильная ссылка.
|
||||
files:
|
||||
folders: Каталоги
|
||||
files: Файлы
|
||||
body: Тело
|
||||
clear: Очистить
|
||||
closePreview: Закрыть
|
||||
home: Дом
|
||||
lastModified: Последнее изменение
|
||||
loading: Загрузка...
|
||||
lonely: Здесь пусто...
|
||||
metadata: Метаданные
|
||||
multipleSelectionEnabled: Мультивыбор включен
|
||||
name: Имя
|
||||
size: Размер
|
||||
sortByName: Сортировка по имени
|
||||
sortBySize: Сортировка по размеру
|
||||
sortByLastModified: Сортировка по изменению
|
||||
help:
|
||||
click: выбрать файл или каталог
|
||||
ctrl:
|
||||
click: выбрать несколько файлов или каталогов
|
||||
f: открыть поиск
|
||||
s: скачать файл или текущий каталог
|
||||
del: удалить выбранные элементы
|
||||
doubleClick: открыть файл или каталог
|
||||
esc: очистить выделение и/или закрыть окно
|
||||
f1: помощь
|
||||
f2: переименовать файл
|
||||
help: Помощь
|
||||
login:
|
||||
password: Пароль
|
||||
submit: Войти
|
||||
username: Имя пользователя
|
||||
wrongCredentials: Неверные данные
|
||||
prompts:
|
||||
copy: Копировать
|
||||
copyMessage: 'Копировать в:'
|
||||
currentlyNavigating: 'Текущий каталог:'
|
||||
deleteMessageMultiple: Удалить эти файлы ({count})?
|
||||
deleteMessageSingle: Удалить этот файл/каталог?
|
||||
deleteTitle: Удалить файлы
|
||||
displayName: 'Отображаемое имя:'
|
||||
download: Скачать файлы
|
||||
downloadMessage: Скачать каталог в следующем формате.
|
||||
error: Ошибка
|
||||
fileInfo: Информация о файле
|
||||
filesSelected: "Файлов выбрано: {count}."
|
||||
lastModified: Последнее изменение
|
||||
move: Переместить
|
||||
moveMessage: 'Переместить в:'
|
||||
newDir: Новый каталог
|
||||
newDirMessage: Имя нового каталога.
|
||||
newFile: Новый файл
|
||||
newFileMessage: Имя нового файла.
|
||||
numberDirs: Количество каталогов
|
||||
numberFiles: Количество файлов
|
||||
replace: Заменить
|
||||
replaceMessage: >
|
||||
Имя одного из загружаемых файлов совпадает с уже существующим файлом.
|
||||
Вы хотите заменить существующий?
|
||||
rename: Переименовать
|
||||
renameMessage: Новое имя
|
||||
show: Показать
|
||||
size: Размер
|
||||
schedule: Планировка
|
||||
scheduleMessage: Запланировать дату и время публикации.
|
||||
newArchetype: Создайте новую запись на основе архетипа. Файл будет создан в каталоге.
|
||||
settings:
|
||||
admin: Админ
|
||||
administrator: Администратор
|
||||
allowCommands: Запуск команд
|
||||
allowEdit: Редактирование, переименование и удаление файлов или каталогов
|
||||
allowNew: Создание новых файлов или каталогов
|
||||
allowPublish: Публикация новых записей и страниц
|
||||
avoidChanges: "(пусто для пропуска)"
|
||||
changePassword: Изменение пароля
|
||||
commands: Команды
|
||||
commandsHelp: >
|
||||
Здесь устанавливаются команды, выполняемые в названных событиях.
|
||||
Одна команда на строку. Если событие связано с файлами, например, после сохранения,
|
||||
переменной среды "FILE" будет присвоен путь файла.
|
||||
commandsUpdated: Команды обновлены!
|
||||
customStylesheet: Свой стиль
|
||||
examples: Примеры
|
||||
globalSettings: Глобальные настройки
|
||||
language: Язык
|
||||
lockPassword: Запретить пользователю менять пароль
|
||||
newPassword: Новый пароль
|
||||
newPasswordConfirm: Повтор нового пароля
|
||||
newUser: Новый пользователь
|
||||
password: Пароль
|
||||
passwordUpdated: Пароль обновлен!
|
||||
permissions: Права доступа
|
||||
permissionsHelp: >
|
||||
Можно настроить пользователя как администратора или выбрать разрешения
|
||||
индивидуально. При выборе "Администратор", все остальные параметры будут
|
||||
автоматически выбраны. Управление пользователями - привилегия администратора.
|
||||
profileSettings: Настройки профиля
|
||||
ruleExample1: >
|
||||
предотвратить доступ к любому скрытому файлу (например: .git, .gitignore) в
|
||||
каждой папке.
|
||||
ruleExample2: блокирует доступ к файлу с именем Caddyfile в корневой области.
|
||||
rules: Права
|
||||
rulesHelp1: >
|
||||
Здесь вы можете определить набор разрешающих и запрещающих правил для этого конкретного
|
||||
пользователь. Блокированные файлы не будут отображаться в списках, и не будут доступны
|
||||
для пользователя. Есть поддержка регулярных выражений и относительных путей.
|
||||
rulesHelp2: >
|
||||
Каждое правило начинается с новой строки и должно начинаться с ключевого слова
|
||||
{0} или {1}. Затем {2}, если используются регулярное выражение,
|
||||
дальше выражение или путь.
|
||||
scope: Корень
|
||||
settingsUpdated: Настройки применены!
|
||||
user: Пользователь
|
||||
userCommands: Команды
|
||||
userCommandsHelp: >
|
||||
Список команд доступных пользователю, разделенный пробелами.
|
||||
Пример:
|
||||
userCreated: Пользователь создан!
|
||||
userDeleted: Пользователь удален!
|
||||
userManagement: Управление пользователями
|
||||
username: Имя пользователя
|
||||
users: Пользователи
|
||||
userUpdated: Пользователь изменен!
|
||||
sidebar:
|
||||
help: Помощь
|
||||
logout: Выход
|
||||
myFiles: Файлы
|
||||
newFile: Новый файл
|
||||
newFolder: Новый каталог
|
||||
settings: Настройки
|
||||
siteSettings: Настройки сайта
|
||||
hugoNew: Hugo New
|
||||
preview: Предпросмотр
|
||||
search:
|
||||
images: Изображения
|
||||
music: Музыка
|
||||
notSupportedCommand: Команда не поддерживается.
|
||||
pdf: PDF
|
||||
pressToExecute: Enter для запуска.
|
||||
pressToSearch: Enter для поиска.
|
||||
search: Поиск...
|
||||
searchOrCommand: Поиск или выполнение команды...
|
||||
searchOrSupportedCommand: 'Поиск или выполнение команды, начинающейся с ''$'':'
|
||||
typeCommand: Введи текст и нажми Enter для запуска.
|
||||
typeSearch: Введи текст и нажми Enter для поиска.
|
||||
types: Типы
|
||||
video: Видео
|
||||
writeToSearch: Введи текст для поиска
|
||||
languages:
|
||||
ar: العربية
|
||||
en: English
|
||||
it: Italiano
|
||||
fr: Français
|
||||
pt: Português
|
||||
ja: 日本語
|
||||
zhCN: 中文 (简体)
|
||||
zhTW: 中文 (繁體)
|
||||
es: Español
|
||||
de: Deutsch
|
||||
ru: Русский
|
||||
pl: Polski
|
||||
ko: 한국어
|
||||
time:
|
||||
unit: Единица времени
|
||||
seconds: Секунды
|
||||
minutes: Минуты
|
||||
hours: Часы
|
||||
days: Дни
|
||||
233
src/i18n/zh-cn.json
Normal file
233
src/i18n/zh-cn.json
Normal file
@@ -0,0 +1,233 @@
|
||||
{
|
||||
"permanent": "永久",
|
||||
"buttons": {
|
||||
"cancel": "取消",
|
||||
"close": "关闭",
|
||||
"copy": "复制",
|
||||
"copyFile": "复制文件",
|
||||
"copyToClipboard": "复制到剪贴板",
|
||||
"create": "创建",
|
||||
"delete": "删除",
|
||||
"download": "下载",
|
||||
"info": "信息",
|
||||
"more": "更多",
|
||||
"move": "移动",
|
||||
"moveFile": "移动文件",
|
||||
"new": "新",
|
||||
"next": "下一个",
|
||||
"ok": "确定",
|
||||
"replace": "替换",
|
||||
"previous": "上一个",
|
||||
"rename": "重命名",
|
||||
"reportIssue": "报告问题",
|
||||
"save": "保存",
|
||||
"search": "搜索",
|
||||
"select": "选择",
|
||||
"share": "分享",
|
||||
"publish": "发布",
|
||||
"selectMultiple": "选择多个",
|
||||
"schedule": "计划",
|
||||
"switchView": "切换显示方式",
|
||||
"toggleSidebar": "切换侧边栏",
|
||||
"update": "更新",
|
||||
"upload": "上传",
|
||||
"permalink": "获取永久链接"
|
||||
},
|
||||
"success": {
|
||||
"linkCopied": "链接已复制!"
|
||||
},
|
||||
"errors": {
|
||||
"forbidden": "你被禁止访问。",
|
||||
"internal": "服务器出了点问题。",
|
||||
"notFound": "找不到文件。"
|
||||
},
|
||||
"files": {
|
||||
"folders": "文件夹",
|
||||
"files": "文件",
|
||||
"body": "Body",
|
||||
"clear": "清空",
|
||||
"closePreview": "关闭预览",
|
||||
"home": "主页",
|
||||
"lastModified": "最后修改",
|
||||
"loading": "加载中...",
|
||||
"lonely": "这里没有任何文件...",
|
||||
"metadata": "元数据",
|
||||
"multipleSelectionEnabled": "多选模式已开启",
|
||||
"name": "名称",
|
||||
"size": "大小",
|
||||
"sortByName": "按名称排序",
|
||||
"sortBySize": "按大小排序",
|
||||
"sortByLastModified": "按最后修改时间排序"
|
||||
},
|
||||
"help": {
|
||||
"click": "选择文件或目录",
|
||||
"ctrl": {
|
||||
"click": "选择多个文件或目录",
|
||||
"f": "打开搜索框",
|
||||
"s": "保存文件或下载当前文件夹"
|
||||
},
|
||||
"del": "删除所选的文件/文件夹",
|
||||
"doubleClick": "打开文件/文件夹",
|
||||
"esc": "清除已选项或关闭提示信息",
|
||||
"f1": "显示该帮助信息",
|
||||
"f2": "重命名文件/文件夹",
|
||||
"help": "帮助"
|
||||
},
|
||||
"login": {
|
||||
"password": "密码",
|
||||
"passwordConfirm": "Password Confirmation",
|
||||
"submit": "登录",
|
||||
"createAnAccount": "Create an account",
|
||||
"loginInstead": "Already have an account",
|
||||
"passwordsDontMatch": "Passwords don't match",
|
||||
"usernameTaken": "Username already taken",
|
||||
"signup": "Signup",
|
||||
"username": "用户名",
|
||||
"wrongCredentials": "用户名或密码错误"
|
||||
},
|
||||
"prompts": {
|
||||
"copy": "复制",
|
||||
"copyMessage": "请选择欲复制至的目录:",
|
||||
"currentlyNavigating": "当前目录:",
|
||||
"deleteMessageMultiple": "你确定要删除这 {count} 个文件吗?",
|
||||
"deleteMessageSingle": "你确定要删除这个文件/文件夹吗?",
|
||||
"deleteTitle": "删除文件",
|
||||
"displayName": "名称:",
|
||||
"download": "下载文件",
|
||||
"downloadMessage": "请选择要下载的压缩格式。",
|
||||
"error": "出了一点问题...",
|
||||
"fileInfo": "文件信息",
|
||||
"filesSelected": "已选择 {count} 个文件。",
|
||||
"lastModified": "最后修改",
|
||||
"move": "移动",
|
||||
"moveMessage": "请选择欲移动至的目录:",
|
||||
"newDir": "新建目录",
|
||||
"newDirMessage": "请输入新目录的名称。",
|
||||
"newFile": "新建文件",
|
||||
"newFileMessage": "请输入新文件的名称。",
|
||||
"numberDirs": "目录数",
|
||||
"numberFiles": "文件数",
|
||||
"replace": "替换",
|
||||
"replaceMessage": "您尝试上传的文件中有一个与现有文件的名称存在冲突。是否替换现有的同名文件?",
|
||||
"rename": "重命名",
|
||||
"renameMessage": "请输入新名称,旧名称为:",
|
||||
"show": "揭示",
|
||||
"size": "大小",
|
||||
"schedule": "计划",
|
||||
"scheduleMessage": "请选择发布这篇帖子的日期。",
|
||||
"newArchetype": "创建一个基于原型的新帖子。您的文件将会创建在内容文件夹中。"
|
||||
},
|
||||
"settings": {
|
||||
"instanceName": "Instance name",
|
||||
"brandingDirectoryPath": "Branding directory path",
|
||||
"documentation": "documentation",
|
||||
"branding": "Branding",
|
||||
"disableExternalLinks": "Disable external links (except documentation)",
|
||||
"brandingHelp": "You can costumize how your File Browser instance looks and feels by changing its name, replacing the logo, adding custom styles and even disable external links to GitHub.\nFor more information about custom branding, please check out the {0}.",
|
||||
"admin": "管理员",
|
||||
"administrator": "管理员",
|
||||
"allowCommands": "执行命令(Linux 代码)",
|
||||
"allowEdit": "编辑、重命名或删除文件/目录",
|
||||
"allowNew": "创建新文件和目录",
|
||||
"allowPublish": "发布新的帖子与页面",
|
||||
"avoidChanges": "(留空以避免更改)",
|
||||
"changePassword": "更改密码",
|
||||
"commandRunner": "Command runner",
|
||||
"commandRunnerHelp": "Here you can set commands that are executed in the named events. You must write one per line. The environment variables {0} and {1} will be available, being {0} relative to {1}. For more information about this feature and the available environment variables, please read the {2}.",
|
||||
"commandsUpdated": "命令已更新!",
|
||||
"customStylesheet": "自定义样式表",
|
||||
"examples": "例子",
|
||||
"globalSettings": "全局设置",
|
||||
"language": "语言",
|
||||
"lockPassword": "禁止用户修改密码",
|
||||
"newPassword": "您的新密码",
|
||||
"newPasswordConfirm": "重输一遍新密码",
|
||||
"newUser": "新建用户",
|
||||
"password": "密码",
|
||||
"passwordUpdated": "密码已更新!",
|
||||
"permissions": "权限",
|
||||
"permissionsHelp": "您可以将该用户设置为管理员,也可以单独选择各项权限。如果选择了“管理员”,则其他的选项会被自动勾上,同时该用户可以管理其他用户。",
|
||||
"profileSettings": "个人设置",
|
||||
"ruleExample1": "阻止用户访问所有文件夹下任何以 . 开头的文件(隐藏文件, 例如: .git, .gitignore)。",
|
||||
"ruleExample2": "阻止用户访问其目录范围的根目录下名为 Caddyfile 的文件。",
|
||||
"rules": "规则",
|
||||
"rulesHelp": "您可以为该用户制定一组黑名单或白名单式的规则,被屏蔽的文件将不会显示在列表中,用户也无权限访问,支持相对于目录范围的路径。",
|
||||
"scope": "目录范围",
|
||||
"settingsUpdated": "设置已更新!",
|
||||
"user": "用户",
|
||||
"userCommands": "用户命令(Linux 代码)",
|
||||
"userCommandsHelp": "指定该用户可以执行的命令(Linux 代码),用空格分隔。例如:",
|
||||
"userCreated": "用户已创建!",
|
||||
"userDeleted": "用户已删除!",
|
||||
"userManagement": "用户管理",
|
||||
"username": "用户名",
|
||||
"users": "用户",
|
||||
"globalRules": "This is a global set of allow and disallow rules. They apply to every user. You can define specific rules on each user's settings to override this ones.",
|
||||
"allowSignup": "Allow users to signup",
|
||||
"insertRegex": "Insert regex expression",
|
||||
"insertPath": "Insert the path",
|
||||
"userUpdated": "用户已更新!",
|
||||
"generalSettings": "General settings",
|
||||
"userDefaults": "User default settings",
|
||||
"defaultUserDescription": "This are the default settings for new users.",
|
||||
"perm": {
|
||||
"create": "Create files and directories",
|
||||
"delete": "Delete files and directories",
|
||||
"download": "Download",
|
||||
"edit": "Edit files",
|
||||
"execute": "Execute commands",
|
||||
"rename": "Rename or move files and directories",
|
||||
"share": "Share files"
|
||||
}
|
||||
},
|
||||
"sidebar": {
|
||||
"help": "帮助",
|
||||
"logout": "登出",
|
||||
"myFiles": "我的文件",
|
||||
"newFile": "新建文件",
|
||||
"newFolder": "新建文件夹",
|
||||
"settings": "设置",
|
||||
"siteSettings": "网站设置",
|
||||
"hugoNew": "Hugo New",
|
||||
"preview": "预览"
|
||||
},
|
||||
"search": {
|
||||
"images": "图像",
|
||||
"music": "音乐",
|
||||
"notSupportedCommand": "This is a not supported command.",
|
||||
"pdf": "PDF",
|
||||
"pressToExecute": "按回车键执行。",
|
||||
"pressToSearch": "按回车键搜索。",
|
||||
"search": "搜索...",
|
||||
"searchOrCommand": "搜索或者执行命令(Linux 代码)...",
|
||||
"searchOrSupportedCommand": "搜索或加入\"$\"前缀以使用其中一个您可以使用的命令:",
|
||||
"typeCommand": "Type and press enter to execute.",
|
||||
"typeSearch": "Type and press enter to search.",
|
||||
"types": "类型",
|
||||
"video": "视频",
|
||||
"writeToSearch": "请输入要搜索的内容"
|
||||
},
|
||||
"languages": {
|
||||
"ar": "العربية",
|
||||
"en": "English",
|
||||
"it": "Italiano",
|
||||
"fr": "Français",
|
||||
"pt": "Português",
|
||||
"ptBR": "Português (Brasil)",
|
||||
"ja": "日本語",
|
||||
"zhCN": "中文 (简体)",
|
||||
"zhTW": "中文 (繁體)",
|
||||
"es": "Español",
|
||||
"de": "Deutsch",
|
||||
"ru": "Русский",
|
||||
"pl": "Polski",
|
||||
"ko": "한국어"
|
||||
},
|
||||
"time": {
|
||||
"unit": "时间单位",
|
||||
"seconds": "秒",
|
||||
"minutes": "分钟",
|
||||
"hours": "小时",
|
||||
"days": "天"
|
||||
}
|
||||
}
|
||||
@@ -1,206 +0,0 @@
|
||||
permanent: 永久
|
||||
buttons:
|
||||
cancel: 取消
|
||||
close: 关闭
|
||||
copy: 复制
|
||||
copyFile: 复制文件
|
||||
copyToClipboard: 复制到剪贴板
|
||||
create: 创建
|
||||
delete: 删除
|
||||
download: 下载
|
||||
info: 信息
|
||||
more: 更多
|
||||
move: 移动
|
||||
moveFile: 移动文件
|
||||
new: 新
|
||||
next: 下一个
|
||||
ok: 确定
|
||||
replace: 替换
|
||||
previous: 上一个
|
||||
rename: 重命名
|
||||
reportIssue: 报告问题
|
||||
save: 保存
|
||||
search: 搜索
|
||||
select: 选择
|
||||
share: 分享
|
||||
publish: 发布
|
||||
selectMultiple: 选择多个
|
||||
schedule: 计划
|
||||
switchView: 切换显示方式
|
||||
toggleSidebar: 切换侧边栏
|
||||
update: 更新
|
||||
upload: 上传
|
||||
permalink: 获取永久链接
|
||||
success:
|
||||
linkCopied: 链接已复制!
|
||||
errors:
|
||||
forbidden: 你被禁止访问。
|
||||
internal: 服务器出了点问题。
|
||||
notFound: 找不到文件。
|
||||
files:
|
||||
folders: 文件夹
|
||||
files: 文件
|
||||
body: Body
|
||||
clear: 清空
|
||||
closePreview: 关闭预览
|
||||
home: 主页
|
||||
lastModified: 最后修改
|
||||
loading: 加载中...
|
||||
lonely: 这里没有任何文件...
|
||||
metadata: 元数据
|
||||
multipleSelectionEnabled: 多选模式已开启
|
||||
name: 名称
|
||||
size: 大小
|
||||
sortByName: 按名称排序
|
||||
sortBySize: 按大小排序
|
||||
sortByLastModified: 按最后修改时间排序
|
||||
help:
|
||||
click: 选择文件或目录
|
||||
ctrl:
|
||||
click: 选择多个文件或目录
|
||||
f: 打开搜索框
|
||||
s: 保存文件或下载当前文件夹
|
||||
del: 删除所选的文件/文件夹
|
||||
doubleClick: 打开文件/文件夹
|
||||
esc: 清除已选项或关闭提示信息
|
||||
f1: 显示该帮助信息
|
||||
f2: 重命名文件/文件夹
|
||||
help: 帮助
|
||||
login:
|
||||
password: 密码
|
||||
submit: 登录
|
||||
username: 用户名
|
||||
wrongCredentials: 用户名或密码错误
|
||||
prompts:
|
||||
copy: 复制
|
||||
copyMessage: 请选择欲复制至的目录:
|
||||
currentlyNavigating: 当前目录:
|
||||
deleteMessageMultiple: 你确定要删除这 {count} 个文件吗?
|
||||
deleteMessageSingle: 你确定要删除这个文件/文件夹吗?
|
||||
deleteTitle: 删除文件
|
||||
displayName: 名称:
|
||||
download: 下载文件
|
||||
downloadMessage: 请选择要下载的压缩格式。
|
||||
error: 出了一点问题...
|
||||
fileInfo: 文件信息
|
||||
filesSelected: 已选择 {count} 个文件。
|
||||
lastModified: 最后修改
|
||||
move: 移动
|
||||
moveMessage: 请选择欲移动至的目录:
|
||||
newDir: 新建目录
|
||||
newDirMessage: 请输入新目录的名称。
|
||||
newFile: 新建文件
|
||||
newFileMessage: 请输入新文件的名称。
|
||||
numberDirs: 目录数
|
||||
numberFiles: 文件数
|
||||
replace: 替换
|
||||
replaceMessage: "\
|
||||
您尝试上传的文件中有一个与现有文件的名称存在冲突。\
|
||||
是否替换现有的同名文件?"
|
||||
rename: 重命名
|
||||
renameMessage: 请输入新名称,旧名称为:
|
||||
show: 揭示
|
||||
size: 大小
|
||||
schedule: 计划
|
||||
scheduleMessage: 请选择发布这篇帖子的日期。
|
||||
newArchetype: 创建一个基于原型的新帖子。您的文件将会创建在内容文件夹中。
|
||||
settings:
|
||||
admin: 管理员
|
||||
administrator: 管理员
|
||||
allowCommands: 执行命令(Linux 代码)
|
||||
allowEdit: 编辑、重命名或删除文件/目录
|
||||
allowNew: 创建新文件和目录
|
||||
allowPublish: 发布新的帖子与页面
|
||||
avoidChanges: '(留空以避免更改)'
|
||||
changePassword: 更改密码
|
||||
commands: 命令(linux 代码)
|
||||
commandsHelp: "\
|
||||
在这里,您可以设置在指定事件下执行的命令,一行一条。\
|
||||
若事件与文件相关,如“在保存文件前”,\
|
||||
则文件的路径会被赋值给环境变量 \"FILE\"。"
|
||||
commandsUpdated: 命令已更新!
|
||||
customStylesheet: 自定义样式表
|
||||
examples: 例子
|
||||
globalSettings: 全局设置
|
||||
language: 语言
|
||||
lockPassword: 禁止用户修改密码
|
||||
newPassword: 您的新密码
|
||||
newPasswordConfirm: 重输一遍新密码
|
||||
newUser: 新建用户
|
||||
password: 密码
|
||||
passwordUpdated: 密码已更新!
|
||||
permissions: 权限
|
||||
permissionsHelp: "\
|
||||
您可以将该用户设置为管理员,也可以单独选择各项权限。\
|
||||
如果选择了“管理员”,则其他的选项会被自动勾上,\
|
||||
同时该用户可以管理其他用户。"
|
||||
profileSettings: 个人设置
|
||||
ruleExample1: "\
|
||||
阻止用户访问所有文件夹下任何以 . 开头的文件\
|
||||
(隐藏文件, 例如: .git, .gitignore)。"
|
||||
ruleExample2: 阻止用户访问其目录范围的根目录下名为 Caddyfile 的文件。
|
||||
rules: 规则
|
||||
rulesHelp1: "\
|
||||
您可以为该用户制定一组黑名单或白名单式的规则,\
|
||||
被屏蔽的文件将不会显示在列表中,用户也无权限访问,\
|
||||
支持相对于目录范围的路径。"
|
||||
rulesHelp2: "\
|
||||
每行一条规则,且必须以关键词 {0} 或 {1} 开头。\
|
||||
如要使用正则表达式,请在加上 {2} 之后再附上表达式或路径。"
|
||||
scope: 目录范围
|
||||
settingsUpdated: 设置已更新!
|
||||
user: 用户
|
||||
userCommands: 用户命令(Linux 代码)
|
||||
userCommandsHelp: "\
|
||||
指定该用户可以执行的命令(Linux 代码),用空格分隔。\
|
||||
例如:"
|
||||
userCreated: 用户已创建!
|
||||
userDeleted: 用户已删除!
|
||||
userManagement: 用户管理
|
||||
username: 用户名
|
||||
users: 用户
|
||||
userUpdated: 用户已更新!
|
||||
sidebar:
|
||||
help: 帮助
|
||||
logout: 登出
|
||||
myFiles: 我的文件
|
||||
newFile: 新建文件
|
||||
newFolder: 新建文件夹
|
||||
settings: 设置
|
||||
siteSettings: 网站设置
|
||||
hugoNew: Hugo New
|
||||
preview: 预览
|
||||
search:
|
||||
images: 图像
|
||||
music: 音乐
|
||||
pdf: PDF
|
||||
pressToExecute: 按回车键执行。
|
||||
pressToSearch: 按回车键搜索。
|
||||
search: 搜索...
|
||||
searchOrCommand: 搜索或者执行命令(Linux 代码)...
|
||||
searchOrSupportedCommand: 搜索或加入"$"前缀以使用其中一个您可以使用的命令:
|
||||
type: 键入并按回车键进行搜索。
|
||||
types: 类型
|
||||
video: 视频
|
||||
writeToSearch: 请输入要搜索的内容
|
||||
languages:
|
||||
ar: العربية
|
||||
en: English
|
||||
it: Italiano
|
||||
fr: Français
|
||||
pt: Português
|
||||
ptBR: Português (Brasil)
|
||||
ja: 日本語
|
||||
zhCN: 中文 (简体)
|
||||
zhTW: 中文 (繁體)
|
||||
es: Español
|
||||
de: Deutsch
|
||||
ru: Русский
|
||||
pl: Polski
|
||||
ko: 한국어
|
||||
time:
|
||||
unit: 时间单位
|
||||
seconds: 秒
|
||||
minutes: 分钟
|
||||
hours: 小时
|
||||
days: 天
|
||||
233
src/i18n/zh-tw.json
Normal file
233
src/i18n/zh-tw.json
Normal file
@@ -0,0 +1,233 @@
|
||||
{
|
||||
"permanent": "永久",
|
||||
"buttons": {
|
||||
"cancel": "取消",
|
||||
"close": "關閉",
|
||||
"copy": "複製",
|
||||
"copyFile": "複製檔案",
|
||||
"copyToClipboard": "複製到剪貼簿",
|
||||
"create": "建立",
|
||||
"delete": "刪除",
|
||||
"download": "下載",
|
||||
"info": "資訊",
|
||||
"more": "更多",
|
||||
"move": "移動",
|
||||
"moveFile": "移動檔案",
|
||||
"new": "新",
|
||||
"next": "下一個",
|
||||
"ok": "確認",
|
||||
"replace": "更換",
|
||||
"previous": "上一個",
|
||||
"rename": "重新命名",
|
||||
"reportIssue": "報告問題",
|
||||
"save": "儲存",
|
||||
"search": "搜尋",
|
||||
"select": "選擇",
|
||||
"share": "分享",
|
||||
"publish": "發佈",
|
||||
"selectMultiple": "選擇多個",
|
||||
"schedule": "計畫",
|
||||
"switchView": "切換顯示方式",
|
||||
"toggleSidebar": "切換側邊欄",
|
||||
"update": "更新",
|
||||
"upload": "上傳",
|
||||
"permalink": "獲取永久連結"
|
||||
},
|
||||
"success": {
|
||||
"linkCopied": "連結已複製!"
|
||||
},
|
||||
"errors": {
|
||||
"forbidden": "你被禁止存取。",
|
||||
"internal": "伺服器出了點問題。",
|
||||
"notFound": "找不到檔案。"
|
||||
},
|
||||
"files": {
|
||||
"folders": "資料夾",
|
||||
"files": "檔案",
|
||||
"body": "Body",
|
||||
"clear": "清空",
|
||||
"closePreview": "關閉預覽",
|
||||
"home": "主頁",
|
||||
"lastModified": "最後修改",
|
||||
"loading": "讀取中...",
|
||||
"lonely": "這裡沒有任何檔案...",
|
||||
"metadata": "詮釋資料",
|
||||
"multipleSelectionEnabled": "多選模式已開啟",
|
||||
"name": "名稱",
|
||||
"size": "大小",
|
||||
"sortByName": "按名稱排序",
|
||||
"sortBySize": "按大小排序",
|
||||
"sortByLastModified": "按最後修改時間排序"
|
||||
},
|
||||
"help": {
|
||||
"click": "選擇檔案或目錄",
|
||||
"ctrl": {
|
||||
"click": "選擇多個檔案或目錄",
|
||||
"f": "打開搜尋列",
|
||||
"s": "儲存檔案或下載目前資料夾"
|
||||
},
|
||||
"del": "刪除所選的檔案/資料夾",
|
||||
"doubleClick": "打開檔案/資料夾",
|
||||
"esc": "清除已選項或關閉提示資訊",
|
||||
"f1": "顯示該幫助資訊",
|
||||
"f2": "重新命名檔案/資料夾",
|
||||
"help": "幫助"
|
||||
},
|
||||
"login": {
|
||||
"password": "密碼",
|
||||
"passwordConfirm": "Password Confirmation",
|
||||
"submit": "登入",
|
||||
"createAnAccount": "Create an account",
|
||||
"loginInstead": "Already have an account",
|
||||
"passwordsDontMatch": "Passwords don't match",
|
||||
"usernameTaken": "Username already taken",
|
||||
"signup": "Signup",
|
||||
"username": "帳號",
|
||||
"wrongCredentials": "帳號或密碼錯誤"
|
||||
},
|
||||
"prompts": {
|
||||
"copy": "複製",
|
||||
"copyMessage": "請選擇欲複製至的目錄:",
|
||||
"currentlyNavigating": "目前目錄:",
|
||||
"deleteMessageMultiple": "你確定要刪除這 {count} 個檔案嗎?",
|
||||
"deleteMessageSingle": "你確定要刪除這個檔案/資料夾嗎?",
|
||||
"deleteTitle": "刪除檔案",
|
||||
"displayName": "名稱:",
|
||||
"download": "下載檔案",
|
||||
"downloadMessage": "請選擇要下載的壓縮格式。",
|
||||
"error": "發出了一點錯誤...",
|
||||
"fileInfo": "檔案資訊",
|
||||
"filesSelected": "已選擇 {count} 個檔案。",
|
||||
"lastModified": "最後修改",
|
||||
"move": "移動",
|
||||
"moveMessage": "請選擇欲移動至的目錄:",
|
||||
"newDir": "建立目錄",
|
||||
"newDirMessage": "請輸入新目錄的名稱。",
|
||||
"newFile": "建立檔案",
|
||||
"newFileMessage": "請輸入新檔案的名稱。",
|
||||
"numberDirs": "目錄數",
|
||||
"numberFiles": "檔案數",
|
||||
"replace": "替換",
|
||||
"replaceMessage": "您嘗試上傳的檔案中有一個與現有檔案的名稱存在衝突。是否取代現有的同名檔案?",
|
||||
"rename": "重新命名",
|
||||
"renameMessage": "請輸入新名稱,舊名稱為:",
|
||||
"show": "顯示",
|
||||
"size": "大小",
|
||||
"schedule": "計畫",
|
||||
"scheduleMessage": "請選擇發佈這篇貼文的日期。",
|
||||
"newArchetype": "建立一個基於原型的新貼文。您的檔案將會建立在內容資料夾中。"
|
||||
},
|
||||
"settings": {
|
||||
"instanceName": "Instance name",
|
||||
"brandingDirectoryPath": "Branding directory path",
|
||||
"documentation": "documentation",
|
||||
"branding": "Branding",
|
||||
"disableExternalLinks": "Disable external links (except documentation)",
|
||||
"brandingHelp": "You can costumize how your File Browser instance looks and feels by changing its name, replacing the logo, adding custom styles and even disable external links to GitHub.\nFor more information about custom branding, please check out the {0}.",
|
||||
"admin": "管理員",
|
||||
"administrator": "管理員",
|
||||
"allowCommands": "執行命令",
|
||||
"allowEdit": "編輯、重命名或刪除檔案/目錄",
|
||||
"allowNew": "創建新檔案和目錄",
|
||||
"allowPublish": "發佈新的貼文與頁面",
|
||||
"avoidChanges": "(留空以避免更改)",
|
||||
"changePassword": "更改密碼",
|
||||
"commandRunner": "Command runner",
|
||||
"commandRunnerHelp": "Here you can set commands that are executed in the named events. You must write one per line. The environment variables {0} and {1} will be available, being {0} relative to {1}. For more information about this feature and the available environment variables, please read the {2}.",
|
||||
"commandsUpdated": "命令已更新!",
|
||||
"customStylesheet": "自定義樣式表",
|
||||
"examples": "範例",
|
||||
"globalSettings": "全域設定",
|
||||
"language": "語言",
|
||||
"lockPassword": "禁止使用者修改密碼",
|
||||
"newPassword": "您的新密碼",
|
||||
"newPasswordConfirm": "重輸一遍新密碼",
|
||||
"newUser": "建立使用者",
|
||||
"password": "密碼",
|
||||
"passwordUpdated": "密碼已更新!",
|
||||
"permissions": "權限",
|
||||
"permissionsHelp": "您可以將該使用者設置為管理員,也可以單獨選擇各項權限。如果選擇了“管理員”,則其他的選項會被自動勾上,同時該使用者可以管理其他使用者。",
|
||||
"profileSettings": "個人設定",
|
||||
"ruleExample1": "封鎖使用者存取所有資料夾下任何以 . 開頭的檔案(隱藏文件, 例如: .git, .gitignore)。",
|
||||
"ruleExample2": "封鎖使用者存取其目錄範圍的根目錄下名為 Caddyfile 的檔案。",
|
||||
"rules": "規則",
|
||||
"rulesHelp": "您可以為該使用者製定一組黑名單或白名單式的規則,被屏蔽的檔案將不會顯示在清單中,使用者也無權限存取,支持相對於目錄範圍的路徑。",
|
||||
"scope": "目錄範圍",
|
||||
"settingsUpdated": "設定已更新!",
|
||||
"user": "使用者",
|
||||
"userCommands": "使用者命令",
|
||||
"userCommandsHelp": "指定該使用者可以執行的命令,用空格分隔。例如:",
|
||||
"userCreated": "使用者已建立!",
|
||||
"userDeleted": "使用者已刪除!",
|
||||
"userManagement": "使用者管理",
|
||||
"username": "使用者名稱",
|
||||
"users": "使用者",
|
||||
"globalRules": "This is a global set of allow and disallow rules. They apply to every user. You can define specific rules on each user's settings to override this ones.",
|
||||
"allowSignup": "Allow users to signup",
|
||||
"insertRegex": "Insert regex expression",
|
||||
"insertPath": "Insert the path",
|
||||
"userUpdated": "使用者已更新!",
|
||||
"generalSettings": "General settings",
|
||||
"userDefaults": "User default settings",
|
||||
"defaultUserDescription": "This are the default settings for new users.",
|
||||
"perm": {
|
||||
"create": "Create files and directories",
|
||||
"delete": "Delete files and directories",
|
||||
"download": "Download",
|
||||
"edit": "Edit files",
|
||||
"execute": "Execute commands",
|
||||
"rename": "Rename or move files and directories",
|
||||
"share": "Share files"
|
||||
}
|
||||
},
|
||||
"sidebar": {
|
||||
"help": "幫助",
|
||||
"logout": "登出",
|
||||
"myFiles": "我的檔案",
|
||||
"newFile": "建立檔案",
|
||||
"newFolder": "建立資料夾",
|
||||
"settings": "設定",
|
||||
"siteSettings": "網站設定",
|
||||
"hugoNew": "Hugo New",
|
||||
"preview": "預覽"
|
||||
},
|
||||
"search": {
|
||||
"images": "影像",
|
||||
"music": "音樂",
|
||||
"notSupportedCommand": "This is a not supported command.",
|
||||
"pdf": "PDF",
|
||||
"pressToExecute": "按確定鍵執行。",
|
||||
"pressToSearch": "按確定鍵搜尋。",
|
||||
"search": "搜尋...",
|
||||
"searchOrCommand": "搜尋或者執行命令...",
|
||||
"searchOrSupportedCommand": "搜尋或使用您可以使用的命令(一次只能執行一個命令):",
|
||||
"typeCommand": "Type and press enter to execute.",
|
||||
"typeSearch": "Type and press enter to search.",
|
||||
"types": "類型",
|
||||
"video": "影片",
|
||||
"writeToSearch": "請輸入要搜尋的內容"
|
||||
},
|
||||
"languages": {
|
||||
"ar": "العربية",
|
||||
"en": "English",
|
||||
"it": "Italiano",
|
||||
"fr": "Français",
|
||||
"pt": "Português",
|
||||
"ptBR": "Português (Brasil)",
|
||||
"ja": "日本語",
|
||||
"zhCN": "中文 (简体)",
|
||||
"zhTW": "中文 (繁體)",
|
||||
"es": "Español",
|
||||
"de": "Deutsch",
|
||||
"ru": "Русский",
|
||||
"pl": "Polski",
|
||||
"ko": "한국어"
|
||||
},
|
||||
"time": {
|
||||
"unit": "時間單位",
|
||||
"seconds": "秒",
|
||||
"minutes": "分鐘",
|
||||
"hours": "小時",
|
||||
"days": "天"
|
||||
}
|
||||
}
|
||||
@@ -1,206 +0,0 @@
|
||||
permanent: 永久
|
||||
buttons:
|
||||
cancel: 取消
|
||||
close: 關閉
|
||||
copy: 複製
|
||||
copyFile: 複製檔案
|
||||
copyToClipboard: 複製到剪貼簿
|
||||
create: 建立
|
||||
delete: 刪除
|
||||
download: 下載
|
||||
info: 資訊
|
||||
more: 更多
|
||||
move: 移動
|
||||
moveFile: 移動檔案
|
||||
new: 新
|
||||
next: 下一個
|
||||
ok: 確認
|
||||
replace: 更換
|
||||
previous: 上一個
|
||||
rename: 重新命名
|
||||
reportIssue: 報告問題
|
||||
save: 儲存
|
||||
search: 搜尋
|
||||
select: 選擇
|
||||
share: 分享
|
||||
publish: 發佈
|
||||
selectMultiple: 選擇多個
|
||||
schedule: 計畫
|
||||
switchView: 切換顯示方式
|
||||
toggleSidebar: 切換側邊欄
|
||||
update: 更新
|
||||
upload: 上傳
|
||||
permalink: 獲取永久連結
|
||||
success:
|
||||
linkCopied: 連結已複製!
|
||||
errors:
|
||||
forbidden: 你被禁止存取。
|
||||
internal: 伺服器出了點問題。
|
||||
notFound: 找不到檔案。
|
||||
files:
|
||||
folders: 資料夾
|
||||
files: 檔案
|
||||
body: Body
|
||||
clear: 清空
|
||||
closePreview: 關閉預覽
|
||||
home: 主頁
|
||||
lastModified: 最後修改
|
||||
loading: 讀取中...
|
||||
lonely: 這裡沒有任何檔案...
|
||||
metadata: 詮釋資料
|
||||
multipleSelectionEnabled: 多選模式已開啟
|
||||
name: 名稱
|
||||
size: 大小
|
||||
sortByName: 按名稱排序
|
||||
sortBySize: 按大小排序
|
||||
sortByLastModified: 按最後修改時間排序
|
||||
help:
|
||||
click: 選擇檔案或目錄
|
||||
ctrl:
|
||||
click: 選擇多個檔案或目錄
|
||||
f: 打開搜尋列
|
||||
s: 儲存檔案或下載目前資料夾
|
||||
del: 刪除所選的檔案/資料夾
|
||||
doubleClick: 打開檔案/資料夾
|
||||
esc: 清除已選項或關閉提示資訊
|
||||
f1: 顯示該幫助資訊
|
||||
f2: 重新命名檔案/資料夾
|
||||
help: 幫助
|
||||
login:
|
||||
password: 密碼
|
||||
submit: 登入
|
||||
username: 帳號
|
||||
wrongCredentials: 帳號或密碼錯誤
|
||||
prompts:
|
||||
copy: 複製
|
||||
copyMessage: 請選擇欲複製至的目錄:
|
||||
currentlyNavigating: 目前目錄:
|
||||
deleteMessageMultiple: 你確定要刪除這 {count} 個檔案嗎?
|
||||
deleteMessageSingle: 你確定要刪除這個檔案/資料夾嗎?
|
||||
deleteTitle: 刪除檔案
|
||||
displayName: 名稱:
|
||||
download: 下載檔案
|
||||
downloadMessage: 請選擇要下載的壓縮格式。
|
||||
error: 發出了一點錯誤...
|
||||
fileInfo: 檔案資訊
|
||||
filesSelected: 已選擇 {count} 個檔案。
|
||||
lastModified: 最後修改
|
||||
move: 移動
|
||||
moveMessage: 請選擇欲移動至的目錄:
|
||||
newDir: 建立目錄
|
||||
newDirMessage: 請輸入新目錄的名稱。
|
||||
newFile: 建立檔案
|
||||
newFileMessage: 請輸入新檔案的名稱。
|
||||
numberDirs: 目錄數
|
||||
numberFiles: 檔案數
|
||||
replace: 替換
|
||||
replaceMessage: "\
|
||||
您嘗試上傳的檔案中有一個與現有檔案的名稱存在衝突。\
|
||||
是否取代現有的同名檔案?"
|
||||
rename: 重新命名
|
||||
renameMessage: 請輸入新名稱,舊名稱為:
|
||||
show: 顯示
|
||||
size: 大小
|
||||
schedule: 計畫
|
||||
scheduleMessage: 請選擇發佈這篇貼文的日期。
|
||||
newArchetype: 建立一個基於原型的新貼文。您的檔案將會建立在內容資料夾中。
|
||||
settings:
|
||||
admin: 管理員
|
||||
administrator: 管理員
|
||||
allowCommands: 執行命令
|
||||
allowEdit: 編輯、重命名或刪除檔案/目錄
|
||||
allowNew: 創建新檔案和目錄
|
||||
allowPublish: 發佈新的貼文與頁面
|
||||
avoidChanges: '(留空以避免更改)'
|
||||
changePassword: 更改密碼
|
||||
commands: 命令
|
||||
commandsHelp: "\
|
||||
在這裡,您可以設定在指定事件下執行的命令,一行一條。\
|
||||
若事件與檔案相關,如“在保存檔案前”,\
|
||||
則檔案的路徑會被賦值給環境變數 \"FILE\"。"
|
||||
commandsUpdated: 命令已更新!
|
||||
customStylesheet: 自定義樣式表
|
||||
examples: 範例
|
||||
globalSettings: 全域設定
|
||||
language: 語言
|
||||
lockPassword: 禁止使用者修改密碼
|
||||
newPassword: 您的新密碼
|
||||
newPasswordConfirm: 重輸一遍新密碼
|
||||
newUser: 建立使用者
|
||||
password: 密碼
|
||||
passwordUpdated: 密碼已更新!
|
||||
permissions: 權限
|
||||
permissionsHelp: "\
|
||||
您可以將該使用者設置為管理員,也可以單獨選擇各項權限。\
|
||||
如果選擇了“管理員”,則其他的選項會被自動勾上,\
|
||||
同時該使用者可以管理其他使用者。"
|
||||
profileSettings: 個人設定
|
||||
ruleExample1: "\
|
||||
封鎖使用者存取所有資料夾下任何以 . 開頭的檔案\
|
||||
(隱藏文件, 例如: .git, .gitignore)。"
|
||||
ruleExample2: 封鎖使用者存取其目錄範圍的根目錄下名為 Caddyfile 的檔案。
|
||||
rules: 規則
|
||||
rulesHelp1: "\
|
||||
您可以為該使用者製定一組黑名單或白名單式的規則,\
|
||||
被屏蔽的檔案將不會顯示在清單中,使用者也無權限存取,\
|
||||
支持相對於目錄範圍的路徑。"
|
||||
rulesHelp2: "\
|
||||
每行一條規則,且必須以關鍵字 {0} 或 {1} 開頭。\
|
||||
如要使用規則運算式,請在加上 {2} 之後再附上運算式或路徑。"
|
||||
scope: 目錄範圍
|
||||
settingsUpdated: 設定已更新!
|
||||
user: 使用者
|
||||
userCommands: 使用者命令
|
||||
userCommandsHelp: "\
|
||||
指定該使用者可以執行的命令,用空格分隔。\
|
||||
例如:"
|
||||
userCreated: 使用者已建立!
|
||||
userDeleted: 使用者已刪除!
|
||||
userManagement: 使用者管理
|
||||
username: 使用者名稱
|
||||
users: 使用者
|
||||
userUpdated: 使用者已更新!
|
||||
sidebar:
|
||||
help: 幫助
|
||||
logout: 登出
|
||||
myFiles: 我的檔案
|
||||
newFile: 建立檔案
|
||||
newFolder: 建立資料夾
|
||||
settings: 設定
|
||||
siteSettings: 網站設定
|
||||
hugoNew: Hugo New
|
||||
preview: 預覽
|
||||
search:
|
||||
images: 影像
|
||||
music: 音樂
|
||||
pdf: PDF
|
||||
pressToExecute: 按確定鍵執行。
|
||||
pressToSearch: 按確定鍵搜尋。
|
||||
search: 搜尋...
|
||||
searchOrCommand: 搜尋或者執行命令...
|
||||
searchOrSupportedCommand: 搜尋或使用您可以使用的命令(一次只能執行一個命令):
|
||||
type: 輸入並按確定鍵進行搜尋。
|
||||
types: 類型
|
||||
video: 影片
|
||||
writeToSearch: 請輸入要搜尋的內容
|
||||
languages:
|
||||
ar: العربية
|
||||
en: English
|
||||
it: Italiano
|
||||
fr: Français
|
||||
pt: Português
|
||||
ptBR: Português (Brasil)
|
||||
ja: 日本語
|
||||
zhCN: 中文 (简体)
|
||||
zhTW: 中文 (繁體)
|
||||
es: Español
|
||||
de: Deutsch
|
||||
ru: Русский
|
||||
pl: Polski
|
||||
ko: 한국어
|
||||
time:
|
||||
unit: 時間單位
|
||||
seconds: 秒
|
||||
minutes: 分鐘
|
||||
hours: 小時
|
||||
days: 天
|
||||
95
src/main.js
95
src/main.js
@@ -1,60 +1,43 @@
|
||||
import Vue from 'vue'
|
||||
import App from './App'
|
||||
import store from './store'
|
||||
import router from './router'
|
||||
import i18n from './i18n'
|
||||
import Noty from 'noty'
|
||||
import { sync } from 'vuex-router-sync'
|
||||
import store from '@/store'
|
||||
import router from '@/router'
|
||||
import i18n from '@/i18n'
|
||||
import Vue from '@/utils/vue'
|
||||
import { recaptcha, noAuth } from '@/utils/constants'
|
||||
import { login, validateLogin } from '@/utils/auth'
|
||||
import App from '@/App'
|
||||
|
||||
Vue.config.productionTip = true
|
||||
sync(store, router)
|
||||
|
||||
const notyDefault = {
|
||||
type: 'info',
|
||||
layout: 'bottomRight',
|
||||
timeout: 1000,
|
||||
progressBar: true
|
||||
}
|
||||
|
||||
Vue.prototype.$noty = function (opts) {
|
||||
new Noty(Object.assign({}, notyDefault, opts)).show()
|
||||
}
|
||||
|
||||
Vue.prototype.$showSuccess = function (message) {
|
||||
new Noty(Object.assign({}, notyDefault, {
|
||||
text: message,
|
||||
type: 'success'
|
||||
})).show()
|
||||
}
|
||||
|
||||
Vue.prototype.$showError = function (error) {
|
||||
let n = new Noty(Object.assign({}, notyDefault, {
|
||||
text: error,
|
||||
type: 'error',
|
||||
timeout: null,
|
||||
buttons: [
|
||||
Noty.button(i18n.t('buttons.reportIssue'), '', function () {
|
||||
window.open('https://github.com/filebrowser/filebrowser/issues/new/choose')
|
||||
}),
|
||||
Noty.button(i18n.t('buttons.close'), '', function () {
|
||||
n.close()
|
||||
})
|
||||
]
|
||||
}))
|
||||
|
||||
n.show()
|
||||
}
|
||||
|
||||
Vue.directive('focus', {
|
||||
inserted: function (el) {
|
||||
el.focus()
|
||||
async function start () {
|
||||
if (noAuth) {
|
||||
await login('', '', '')
|
||||
} else {
|
||||
await validateLogin()
|
||||
}
|
||||
})
|
||||
|
||||
/* eslint-disable no-new */
|
||||
new Vue({
|
||||
el: '#app',
|
||||
store,
|
||||
router,
|
||||
i18n,
|
||||
template: '<App/>',
|
||||
components: { App }
|
||||
})
|
||||
if (recaptcha) {
|
||||
await new Promise (resolve => {
|
||||
const check = () => {
|
||||
if (typeof window.grecaptcha === 'undefined') {
|
||||
setTimeout(check, 100)
|
||||
} else {
|
||||
resolve()
|
||||
}
|
||||
}
|
||||
|
||||
check()
|
||||
})
|
||||
}
|
||||
|
||||
new Vue({
|
||||
el: '#app',
|
||||
store,
|
||||
router,
|
||||
i18n,
|
||||
template: '<App/>',
|
||||
components: { App }
|
||||
})
|
||||
}
|
||||
|
||||
start()
|
||||
|
||||
@@ -3,6 +3,7 @@ import Router from 'vue-router'
|
||||
import Login from '@/views/Login'
|
||||
import Layout from '@/views/Layout'
|
||||
import Files from '@/views/Files'
|
||||
import Share from '@/views/Share'
|
||||
import Users from '@/views/settings/Users'
|
||||
import User from '@/views/settings/User'
|
||||
import Settings from '@/views/Settings'
|
||||
@@ -11,41 +12,44 @@ import ProfileSettings from '@/views/settings/Profile'
|
||||
import Error403 from '@/views/errors/403'
|
||||
import Error404 from '@/views/errors/404'
|
||||
import Error500 from '@/views/errors/500'
|
||||
import auth from '@/utils/auth'
|
||||
import store from '@/store'
|
||||
import { baseURL } from '@/utils/constants'
|
||||
|
||||
Vue.use(Router)
|
||||
|
||||
const router = new Router({
|
||||
base: document.querySelector('meta[name="base"]').getAttribute('content'),
|
||||
base: baseURL,
|
||||
mode: 'history',
|
||||
routes: [
|
||||
{
|
||||
path: '/login',
|
||||
name: 'Login',
|
||||
component: Login,
|
||||
beforeEnter: function (to, from, next) {
|
||||
auth.loggedIn()
|
||||
.then(() => {
|
||||
next({ path: '/files' })
|
||||
})
|
||||
.catch(() => {
|
||||
document.title = 'Login'
|
||||
next()
|
||||
})
|
||||
beforeEnter: (to, from, next) => {
|
||||
if (store.getters.isLogged) {
|
||||
return next({ path: '/files' })
|
||||
}
|
||||
|
||||
document.title = 'Login'
|
||||
next()
|
||||
}
|
||||
},
|
||||
{
|
||||
path: '/*',
|
||||
component: Layout,
|
||||
meta: {
|
||||
requiresAuth: true
|
||||
},
|
||||
children: [
|
||||
{
|
||||
path: '/share/*',
|
||||
name: 'Share',
|
||||
component: Share
|
||||
},
|
||||
{
|
||||
path: '/files/*',
|
||||
name: 'Files',
|
||||
component: Files
|
||||
component: Files,
|
||||
meta: {
|
||||
requiresAuth: true
|
||||
}
|
||||
},
|
||||
{
|
||||
path: '/settings',
|
||||
@@ -55,7 +59,7 @@ const router = new Router({
|
||||
path: '/settings/profile'
|
||||
},
|
||||
meta: {
|
||||
disableOnNoAuth: true
|
||||
requiresAuth: true
|
||||
},
|
||||
children: [
|
||||
{
|
||||
@@ -112,9 +116,7 @@ const router = new Router({
|
||||
},
|
||||
{
|
||||
path: '/*',
|
||||
redirect: {
|
||||
name: 'Files'
|
||||
}
|
||||
redirect: to => `/files${to.path}`
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -125,34 +127,21 @@ router.beforeEach((to, from, next) => {
|
||||
document.title = to.name
|
||||
|
||||
if (to.matched.some(record => record.meta.requiresAuth)) {
|
||||
// this route requires auth, check if logged in
|
||||
// if not, redirect to login page.
|
||||
auth.loggedIn()
|
||||
.then(() => {
|
||||
if (to.matched.some(record => record.meta.requiresAdmin)) {
|
||||
if (!store.state.user.admin) {
|
||||
next({ path: '/403' })
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
if (to.matched.some(record => record.meta.disableOnNoAuth)) {
|
||||
if (store.state.noAuth) {
|
||||
next({ path: '/403' })
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
next()
|
||||
})
|
||||
.catch(e => {
|
||||
next({
|
||||
path: '/login',
|
||||
query: { redirect: to.fullPath }
|
||||
})
|
||||
if (!store.getters.isLogged) {
|
||||
next({
|
||||
path: '/login',
|
||||
query: { redirect: to.fullPath }
|
||||
})
|
||||
|
||||
return
|
||||
return
|
||||
}
|
||||
|
||||
if (to.matched.some(record => record.meta.requiresAdmin)) {
|
||||
if (!store.state.user.perm.admin) {
|
||||
next({ path: '/403' })
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
next()
|
||||
|
||||
@@ -1,4 +1,8 @@
|
||||
const getters = {
|
||||
isLogged: state => state.user !== null,
|
||||
isFiles: state => !state.loading && state.route.name === 'Files',
|
||||
isListing: (state, getters) => getters.isFiles && state.req.isDir,
|
||||
isEditor: (state, getters) => getters.isFiles && (state.req.type === 'text' || state.req.type === 'textImmutable'),
|
||||
selectedCount: state => state.selected.length
|
||||
}
|
||||
|
||||
|
||||
@@ -6,36 +6,27 @@ import getters from './getters'
|
||||
Vue.use(Vuex)
|
||||
|
||||
const state = {
|
||||
user: {},
|
||||
user: null,
|
||||
req: {},
|
||||
oldReq: {},
|
||||
clipboard: {
|
||||
key: '',
|
||||
items: []
|
||||
},
|
||||
css: (() => {
|
||||
let css = window.CSS
|
||||
window.CSS = null
|
||||
return css
|
||||
})(),
|
||||
recaptcha: document.querySelector('meta[name="recaptcha"]').getAttribute('content'),
|
||||
staticGen: document.querySelector('meta[name="staticgen"]').getAttribute('content'),
|
||||
baseURL: document.querySelector('meta[name="base"]').getAttribute('content'),
|
||||
noAuth: (document.querySelector('meta[name="noauth"]').getAttribute('content') === 'true'),
|
||||
version: document.querySelector('meta[name="version"]').getAttribute('content'),
|
||||
jwt: '',
|
||||
progress: 0,
|
||||
schedule: '',
|
||||
loading: false,
|
||||
reload: false,
|
||||
selected: [],
|
||||
multiple: false,
|
||||
show: null,
|
||||
showShell: false,
|
||||
showMessage: null,
|
||||
showConfirm: null
|
||||
}
|
||||
|
||||
export default new Vuex.Store({
|
||||
strict: process.env.NODE_ENV !== 'production',
|
||||
strict: true,
|
||||
state,
|
||||
getters,
|
||||
mutations
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user