diff options
Diffstat (limited to 'kvision-modules/kvision-bootstrap-upload')
53 files changed, 5632 insertions, 0 deletions
diff --git a/kvision-modules/kvision-bootstrap-upload/build.gradle b/kvision-modules/kvision-bootstrap-upload/build.gradle new file mode 100644 index 00000000..a47a110a --- /dev/null +++ b/kvision-modules/kvision-bootstrap-upload/build.gradle @@ -0,0 +1,14 @@ +apply from: "../shared.gradle" + +dependencies { + compile project(":kvision-modules:kvision-bootstrap") + compile "org.jetbrains.kotlinx:kotlinx-coroutines-core-js:$coroutinesVersion" +} + +kotlinFrontend { + + npm { + dependency("bootstrap-fileinput", "5.0.6") + } + +} diff --git a/kvision-modules/kvision-bootstrap-upload/package.json.d/project.info b/kvision-modules/kvision-bootstrap-upload/package.json.d/project.info new file mode 100644 index 00000000..d789d81b --- /dev/null +++ b/kvision-modules/kvision-bootstrap-upload/package.json.d/project.info @@ -0,0 +1,3 @@ +{ + "description": "KVision Upload module" +} diff --git a/kvision-modules/kvision-bootstrap-upload/src/main/kotlin/pl/treksoft/kvision/KVManagerUpload.kt b/kvision-modules/kvision-bootstrap-upload/src/main/kotlin/pl/treksoft/kvision/KVManagerUpload.kt new file mode 100644 index 00000000..1d8f05b0 --- /dev/null +++ b/kvision-modules/kvision-bootstrap-upload/src/main/kotlin/pl/treksoft/kvision/KVManagerUpload.kt @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2017-present Robert Jaros + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package pl.treksoft.kvision + +internal val kVManagerUploadInit = KVManagerUpload.init() + +/** + * Internal singleton object which initializes and configures KVision upload module. + */ +internal object KVManagerUpload { + + init { + require("bootstrap-fileinput/css/fileinput.min.css") + require("bootstrap-fileinput/themes/explorer-fas/theme.min.css") + require("bootstrap-fileinput") + require("./js/locales/bootstrap-fileinput/ar.js") + require("./js/locales/bootstrap-fileinput/az.js") + require("./js/locales/bootstrap-fileinput/bg.js") + require("./js/locales/bootstrap-fileinput/ca.js") + require("./js/locales/bootstrap-fileinput/cr.js") + require("./js/locales/bootstrap-fileinput/cs.js") + require("./js/locales/bootstrap-fileinput/da.js") + require("./js/locales/bootstrap-fileinput/de.js") + require("./js/locales/bootstrap-fileinput/el.js") + require("./js/locales/bootstrap-fileinput/es.js") + require("./js/locales/bootstrap-fileinput/et.js") + require("./js/locales/bootstrap-fileinput/fa.js") + require("./js/locales/bootstrap-fileinput/fi.js") + require("./js/locales/bootstrap-fileinput/fr.js") + require("./js/locales/bootstrap-fileinput/gl.js") + require("./js/locales/bootstrap-fileinput/id.js") + require("./js/locales/bootstrap-fileinput/it.js") + require("./js/locales/bootstrap-fileinput/ja.js") + require("./js/locales/bootstrap-fileinput/ka.js") + require("./js/locales/bootstrap-fileinput/kr.js") + require("./js/locales/bootstrap-fileinput/kz.js") + require("./js/locales/bootstrap-fileinput/lt.js") + require("./js/locales/bootstrap-fileinput/nl.js") + require("./js/locales/bootstrap-fileinput/no.js") + require("./js/locales/bootstrap-fileinput/pl.js") + require("./js/locales/bootstrap-fileinput/pt.js") + require("./js/locales/bootstrap-fileinput/ro.js") + require("./js/locales/bootstrap-fileinput/ru.js") + require("./js/locales/bootstrap-fileinput/sk.js") + require("./js/locales/bootstrap-fileinput/sl.js") + require("./js/locales/bootstrap-fileinput/sv.js") + require("./js/locales/bootstrap-fileinput/th.js") + require("./js/locales/bootstrap-fileinput/tr.js") + require("./js/locales/bootstrap-fileinput/uk.js") + require("./js/locales/bootstrap-fileinput/vi.js") + require("./js/locales/bootstrap-fileinput/zh.js") + require("bootstrap-fileinput/themes/explorer-fas/theme.min.js") + require("bootstrap-fileinput/themes/fas/theme.min.js") + } + + internal fun init() {} +} diff --git a/kvision-modules/kvision-bootstrap-upload/src/main/kotlin/pl/treksoft/kvision/form/upload/Upload.kt b/kvision-modules/kvision-bootstrap-upload/src/main/kotlin/pl/treksoft/kvision/form/upload/Upload.kt new file mode 100644 index 00000000..bd931127 --- /dev/null +++ b/kvision-modules/kvision-bootstrap-upload/src/main/kotlin/pl/treksoft/kvision/form/upload/Upload.kt @@ -0,0 +1,333 @@ +/* + * Copyright (c) 2017-present Robert Jaros + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package pl.treksoft.kvision.form.upload + +import org.w3c.files.File +import pl.treksoft.kvision.core.Container +import pl.treksoft.kvision.core.StringBoolPair +import pl.treksoft.kvision.core.Widget +import pl.treksoft.kvision.form.FieldLabel +import pl.treksoft.kvision.form.InvalidFeedback +import pl.treksoft.kvision.form.KFilesFormControl +import pl.treksoft.kvision.panel.SimplePanel +import pl.treksoft.kvision.types.KFile +import pl.treksoft.kvision.utils.SnOn + +/** + * The form field file upload component. + * + * @constructor + * @param uploadUrl the optional URL for the upload processing action + * @param multiple determines if multiple file upload is supported + * @param label label text bound to the input element + * @param rich determines if [label] can contain HTML code + */ +@Suppress("TooManyFunctions") +open class Upload( + uploadUrl: String? = null, multiple: Boolean = false, label: String? = null, + rich: Boolean = false +) : SimplePanel(setOf("form-group")), KFilesFormControl { + + /** + * File input value. + */ + override var value + get() = input.value + set(value) { + input.value = value + } + /** + * The optional URL for the upload processing action. + * If not set the upload button action will default to form submission. + */ + var uploadUrl + get() = input.uploadUrl + set(value) { + input.uploadUrl = value + } + /** + * Determines if multiple file upload is supported. + */ + var multiple + get() = input.multiple + set(value) { + input.multiple = value + } + /** + * The extra data that will be passed as data to the AJAX server call via POST. + */ + var uploadExtraData + get() = input.uploadExtraData + set(value) { + input.uploadExtraData = value + } + /** + * Determines if the explorer theme is used. + */ + var explorerTheme + get() = input.explorerTheme + set(value) { + input.explorerTheme = value + } + /** + * Determines if the input selection is required. + */ + var required + get() = input.required + set(value) { + input.required = value + } + /** + * Determines if the caption is shown. + */ + var showCaption + get() = input.showCaption + set(value) { + input.showCaption = value + } + /** + * Determines if the preview is shown. + */ + var showPreview + get() = input.showPreview + set(value) { + input.showPreview = value + } + /** + * Determines if the remove button is shown. + */ + var showRemove + get() = input.showRemove + set(value) { + input.showRemove = value + } + /** + * Determines if the upload button is shown. + */ + var showUpload + get() = input.showUpload + set(value) { + input.showUpload = value + } + /** + * Determines if the cancel button is shown. + */ + var showCancel + get() = input.showCancel + set(value) { + input.showCancel = value + } + /** + * Determines if the file browse button is shown. + */ + var showBrowse + get() = input.showBrowse + set(value) { + input.showBrowse = value + } + /** + * Determines if the click on the preview zone opens file browse window. + */ + var browseOnZoneClick + get() = input.browseOnZoneClick + set(value) { + input.browseOnZoneClick = value + } + /** + * Determines if the iconic preview is prefered. + */ + var preferIconicPreview + get() = input.preferIconicPreview + set(value) { + input.preferIconicPreview = value + } + /** + * Allowed file types. + */ + var allowedFileTypes + get() = input.allowedFileTypes + set(value) { + input.allowedFileTypes = value + } + /** + * Allowed file extensions. + */ + var allowedFileExtensions + get() = input.allowedFileExtensions + set(value) { + input.allowedFileExtensions = value + } + /** + * Determines if Drag&Drop zone is enabled. + */ + var dropZoneEnabled + get() = input.dropZoneEnabled + set(value) { + input.dropZoneEnabled = value + } + /** + * The label text bound to the spinner input element. + */ + var label + get() = flabel.content + set(value) { + flabel.content = value + } + /** + * Determines if [label] can contain HTML code. + */ + var rich + get() = flabel.rich + set(value) { + flabel.rich = value + } + + protected val idc = "kv_form_upload_$counter" + final override val input: UploadInput = UploadInput(uploadUrl, multiple) + .apply { + this.id = idc + this.name = name + } + final override val flabel: FieldLabel = FieldLabel(idc, label, rich) + final override val invalidFeedback: InvalidFeedback = InvalidFeedback().apply { visible = false } + + init { + @Suppress("LeakingThis") + input.eventTarget = this + this.addInternal(flabel) + this.addInternal(input) + this.addInternal(invalidFeedback) + counter++ + } + + override fun getSnClass(): List<StringBoolPair> { + val cl = super.getSnClass().toMutableList() + if (validatorError != null) { + cl.add("text-danger" to true) + } + return cl + } + + @Suppress("UNCHECKED_CAST") + override fun <T : Widget> setEventListener(block: SnOn<T>.() -> Unit): Widget { + input.setEventListener(block) + return this + } + + override fun setEventListener(block: SnOn<Widget>.() -> Unit): Widget { + input.setEventListener(block) + return this + } + + override fun removeEventListeners(): Widget { + input.removeEventListeners() + return this + } + + override fun getValueAsString(): String? { + return input.getValueAsString() + } + + /** + * Returns the native JavaScript File object. + * @param kFile KFile object + * @return File object + */ + override fun getNativeFile(kFile: KFile): File? { + return input.getNativeFile(kFile) + } + + /** + * Resets the file input control. + */ + open fun resetInput() { + input.resetInput() + } + + /** + * Clears the file input control (including the native input). + */ + open fun clearInput() { + input.clearInput() + } + + /** + * Trigger ajax upload (only for ajax mode). + */ + open fun upload() { + input.upload() + } + + /** + * Cancel an ongoing ajax upload (only for ajax mode). + */ + open fun cancel() { + input.cancel() + } + + /** + * Locks the file input (disabling all buttons except a cancel button). + */ + open fun lock() { + input.lock() + } + + /** + * Unlocks the file input. + */ + open fun unlock() { + input.unlock() + } + + override fun focus() { + input.focus() + } + + override fun blur() { + input.blur() + } + + companion object { + internal var counter = 0 + + /** + * DSL builder extension function. + * + * It takes the same parameters as the constructor of the built component. + */ + fun Container.upload( + uploadUrl: String? = null, + multiple: Boolean = false, + label: String? = null, + rich: Boolean = false, + init: (Upload.() -> Unit)? = null + ): Upload { + val upload = Upload(uploadUrl, multiple, label, rich).apply { + init?.invoke( + this + ) + } + this.add(upload) + return upload + } + } +} diff --git a/kvision-modules/kvision-bootstrap-upload/src/main/kotlin/pl/treksoft/kvision/form/upload/UploadInput.kt b/kvision-modules/kvision-bootstrap-upload/src/main/kotlin/pl/treksoft/kvision/form/upload/UploadInput.kt new file mode 100644 index 00000000..faae5274 --- /dev/null +++ b/kvision-modules/kvision-bootstrap-upload/src/main/kotlin/pl/treksoft/kvision/form/upload/UploadInput.kt @@ -0,0 +1,377 @@ +/* + * Copyright (c) 2017-present Robert Jaros + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package pl.treksoft.kvision.form.upload + +import com.github.snabbdom.VNode +import org.w3c.files.File +import pl.treksoft.kvision.core.Container +import pl.treksoft.kvision.core.StringBoolPair +import pl.treksoft.kvision.core.StringPair +import pl.treksoft.kvision.core.Widget +import pl.treksoft.kvision.form.Form +import pl.treksoft.kvision.form.FormInput +import pl.treksoft.kvision.form.FormPanel +import pl.treksoft.kvision.form.InputSize +import pl.treksoft.kvision.form.ValidationStatus +import pl.treksoft.kvision.i18n.I18n +import pl.treksoft.kvision.types.KFile +import pl.treksoft.kvision.utils.getContent +import pl.treksoft.kvision.utils.obj +import kotlin.reflect.KProperty1 + +/** + * The file upload component. + * + * @constructor + * @param uploadUrl the optional URL for the upload processing action + * @param multiple determines if multiple file upload is supported + * @param classes a set of CSS class names + */ +@Suppress("TooManyFunctions") +open class UploadInput(uploadUrl: String? = null, multiple: Boolean = false, classes: Set<String> = setOf()) : + Widget(classes + "form-control"), FormInput { + + /** + * File input value. + */ + var value: List<KFile>? + get() = getValue() + set(value) { + if (value == null) resetInput() + } + + /** + * The optional URL for the upload processing action. + * If not set the upload button action will default to form submission. + */ + var uploadUrl: String? by refreshOnUpdate(uploadUrl) { refreshUploadInput() } + /** + * Determines if multiple file upload is supported. + */ + var multiple: Boolean by refreshOnUpdate(multiple) { refresh(); refreshUploadInput() } + /** + * The extra data that will be passed as data to the AJAX server call via POST. + */ + var uploadExtraData: ((String, Int) -> dynamic)? by refreshOnUpdate { refreshUploadInput() } + /** + * Determines if the explorer theme is used. + */ + var explorerTheme: Boolean by refreshOnUpdate(false) { refreshUploadInput() } + /** + * Determines if the input selection is required. + */ + var required: Boolean by refreshOnUpdate(false) { refreshUploadInput() } + /** + * Determines if the caption is shown. + */ + var showCaption: Boolean by refreshOnUpdate(true) { refreshUploadInput() } + /** + * Determines if the preview is shown. + */ + var showPreview: Boolean by refreshOnUpdate(true) { refreshUploadInput() } + /** + * Determines if the remove button is shown. + */ + var showRemove: Boolean by refreshOnUpdate(true) { refreshUploadInput() } + /** + * Determines if the upload button is shown. + */ + var showUpload: Boolean by refreshOnUpdate(true) { refreshUploadInput() } + /** + * Determines if the cancel button is shown. + */ + var showCancel: Boolean by refreshOnUpdate(true) { refreshUploadInput() } + /** + * Determines if the file browse button is shown. + */ + var showBrowse: Boolean by refreshOnUpdate(true) { refreshUploadInput() } + /** + * Determines if the click on the preview zone opens file browse window. + */ + var browseOnZoneClick: Boolean by refreshOnUpdate(true) { refreshUploadInput() } + /** + * Determines if the iconic preview is prefered. + */ + var preferIconicPreview: Boolean by refreshOnUpdate(false) { refreshUploadInput() } + /** + * Allowed file types. + */ + var allowedFileTypes: Set<String>? by refreshOnUpdate { refreshUploadInput() } + /** + * Allowed file extensions. + */ + var allowedFileExtensions: Set<String>? by refreshOnUpdate { refreshUploadInput() } + /** + * Determines if Drag&Drop zone is enabled. + */ + var dropZoneEnabled: Boolean by refreshOnUpdate(true) { refreshUploadInput() } + /** + * The name attribute of the generated HTML input element. + */ + override var name: String? by refreshOnUpdate() + /** + * Determines if the field is disabled. + */ + override var disabled by refreshOnUpdate(false) { refresh(); refreshUploadInput() } + /** + * The size of the input (currently not working) + */ + override var size: InputSize? by refreshOnUpdate() + /** + * The validation status of the input. + */ + override var validationStatus: ValidationStatus? by refreshOnUpdate() + + private val nativeFiles: MutableMap<KFile, File> = mutableMapOf() + + override fun render(): VNode { + return render("input") + } + + override fun getSnClass(): List<StringBoolPair> { + val cl = super.getSnClass().toMutableList() + validationStatus?.let { + cl.add(it.className to true) + } + size?.let { + cl.add(it.className to true) + } + return cl + } + + override fun getSnAttrs(): List<StringPair> { + val sn = super.getSnAttrs().toMutableList() + sn.add("type" to "file") + name?.let { + sn.add("name" to it) + } + if (multiple) { + sn.add("multiple" to "true") + } + if (disabled) { + sn.add("disabled" to "disabled") + } + return sn + } + + private fun getValue(): List<KFile>? { + val v = getFiles() + return if (v.isNotEmpty()) v else null + } + + @Suppress("UnsafeCastFromDynamic") + override fun afterInsert(node: VNode) { + getElementJQueryD()?.fileinput(getSettingsObj()) + if (uploadUrl != null) { + this.getElementJQuery()?.on("fileselect") { e, _ -> + this.dispatchEvent("fileSelectUpload", obj { detail = e }) + } + this.getElementJQuery()?.on("fileclear") { e, _ -> + this.dispatchEvent("fileClearUpload", obj { detail = e }) + } + this.getElementJQuery()?.on("filereset") { e, _ -> + this.dispatchEvent("fileResetUpload", obj { detail = e }) + } + this.getElementJQuery()?.on("filebrowse") { e, _ -> + this.dispatchEvent("fileBrowseUpload", obj { detail = e }) + } + this.getElementJQueryD()?.on("filepreupload") lambda@{ _, data, previewId, index -> + data["previewId"] = previewId + data["index"] = index + this.dispatchEvent("filePreUpload", obj { detail = data }) + return@lambda null + } + } + } + + override fun afterDestroy() { + getElementJQueryD()?.fileinput("destroy") + } + + private fun refreshUploadInput() { + getElementJQueryD()?.fileinput("refresh", getSettingsObj()) + } + + /** + * Resets the file input control. + */ + open fun resetInput() { + getElementJQueryD()?.fileinput("reset") + } + + /** + * Clears the file input control (including the native input). + */ + open fun clearInput() { + getElementJQueryD()?.fileinput("clear") + } + + /** + * Trigger ajax upload (only for ajax mode). + */ + open fun upload() { + getElementJQueryD()?.fileinput("upload") + } + + /** + * Cancel an ongoing ajax upload (only for ajax mode). + */ + open fun cancel() { + getElementJQueryD()?.fileinput("cancel") + } + + /** + * Locks the file input (disabling all buttons except a cancel button). + */ + open fun lock() { + getElementJQueryD()?.fileinput("lock") + } + + /** + * Unlocks the file input. + */ + open fun unlock() { + getElementJQueryD()?.fileinput("unlock") + } + + /** + * Returns the native JavaScript File object. + * @param kFile KFile object + * @return File object + */ + fun getNativeFile(kFile: KFile): File? { + return nativeFiles[kFile] + } + + private fun getFiles(): List<KFile> { + nativeFiles.clear() + return (getElementJQueryD()?.fileinput("getFileStack") as? Array<File>)?.toList()?.map { + val kFile = KFile(it.name, it.size, null) + nativeFiles[kFile] = it + kFile + } ?: listOf() + } + + /** + * Returns the value of the file input control as a String. + * @return value as a String + */ + fun getValueAsString(): String? { + return value?.joinToString(",") { it.name } + } + + /** + * Makes the input element focused. + */ + override fun focus() { + getElementJQuery()?.focus() + } + + /** + * Makes the input element blur. + */ + override fun blur() { + getElementJQuery()?.blur() + } + + private fun getSettingsObj(): dynamic { + val language = I18n.language + return obj { + this.uploadUrl = uploadUrl + this.uploadExtraData = uploadExtraData ?: undefined + this.theme = if (explorerTheme) "explorer-fas" else "fas" + this.required = required + this.showCaption = showCaption + this.showPreview = showPreview + this.showRemove = showRemove + this.showUpload = showUpload + this.showCancel = showCancel + this.showBrowse = showBrowse + this.browseOnZoneClick = browseOnZoneClick + this.preferIconicPreview = preferIconicPreview + this.allowedFileTypes = allowedFileTypes?.toTypedArray() + this.allowedFileExtensions = allowedFileExtensions?.toTypedArray() + this.dropZoneEnabled = dropZoneEnabled + this.fileActionSettings = obj { + this.showUpload = showUpload + this.showRemove = showRemove + } + this.autoOrientImage = false + this.purifyHtml = false + this.language = language + } + } + + companion object { + + /** + * DSL builder extension function. + * + * It takes the same parameters as the constructor of the built component. + */ + fun Container.uploadInput( + uploadUrl: String? = null, + multiple: Boolean = false, + classes: Set<String> = setOf(), + init: (UploadInput.() -> Unit)? = null + ): UploadInput { + val uploadInput = UploadInput(uploadUrl, multiple, classes).apply { + init?.invoke( + this + ) + } + this.add(uploadInput) + return uploadInput + } + + /** + * Returns file with the content read. + * @param key key identifier of the control + * @param kFile object identifying the file + * @return KFile object + */ + suspend fun <K : Any> Form<K>.getContent( + key: KProperty1<K, List<KFile>?>, + kFile: KFile + ): KFile { + val control = getControl(key) as Upload + val content = control.getNativeFile(kFile)?.getContent() + return kFile.copy(content = content) + } + + + /** + * Returns file with the content read. + * @param key key identifier of the control + * @param kFile object identifying the file + * @return KFile object + */ + suspend fun <K : Any> FormPanel<K>.getContent( + key: KProperty1<K, List<KFile>?>, + kFile: KFile + ): KFile { + val control = getControl(key) as Upload + val content = control.getNativeFile(kFile)?.getContent() + return kFile.copy(content = content) + } + } +} diff --git a/kvision-modules/kvision-bootstrap-upload/src/main/kotlin/pl/treksoft/kvision/utils/Utils.kt b/kvision-modules/kvision-bootstrap-upload/src/main/kotlin/pl/treksoft/kvision/utils/Utils.kt new file mode 100644 index 00000000..bdae5091 --- /dev/null +++ b/kvision-modules/kvision-bootstrap-upload/src/main/kotlin/pl/treksoft/kvision/utils/Utils.kt @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2017-present Robert Jaros + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package pl.treksoft.kvision.utils + +import kotlinx.coroutines.suspendCancellableCoroutine +import org.w3c.files.File +import org.w3c.files.FileReader +import pl.treksoft.kvision.form.Form +import pl.treksoft.kvision.form.FormPanel +import pl.treksoft.kvision.form.KFilesFormControl +import kotlin.coroutines.resume +import kotlin.coroutines.resumeWithException + +/** + * Suspending extension function to get file content. + * @return file content + */ +suspend fun File.getContent(): String = suspendCancellableCoroutine { cont -> + val reader = FileReader() + reader.onload = { + @Suppress("UnsafeCastFromDynamic") + cont.resume(reader.result) + } + reader.onerror = { e -> + cont.resumeWithException(Exception(e.type)) + } + reader.readAsDataURL(this@getContent) +} + +/** + * Returns current data model with file content read for all KFiles controls. + * @return data model + */ +suspend fun <K : Any> Form<K>.getDataWithFileContent(): K { + val map = this.fields.entries.associateBy({ it.key }, { + val value = it.value + if (value is KFilesFormControl) { + value.getValue()?.map { + it.copy(content = value.getNativeFile(it)?.getContent()) + } + } else { + value.getValue() + } + }) + return this.modelFactory(map.withDefault { null }) +} + +/** + * Returns current data model with file content read for all KFiles controls. + * @return data model + */ +suspend fun <K : Any> FormPanel<K>.getDataWithFileContent(): K { + return this.form.getDataWithFileContent() +} diff --git a/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/ar.js b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/ar.js new file mode 100644 index 00000000..2245b633 --- /dev/null +++ b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/ar.js @@ -0,0 +1,112 @@ +/*! + * FileInput Arabic Translations + * + * This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or + * any HTML markup tags in the messages must not be converted or translated. + * + * @see http://github.com/kartik-v/bootstrap-fileinput + * @author Yasser Lotfy <y_l@live.com> + * + * NOTE: this file must be saved in UTF-8 encoding. + */ +(function ($) { + "use strict"; + + $.fn.fileinputLocales['ar'] = { + fileSingle: 'ملف', + filePlural: 'ملفات', + browseLabel: 'تصفح …', + removeLabel: 'إزالة', + removeTitle: 'إزالة الملفات المختارة', + cancelLabel: 'إلغاء', + cancelTitle: 'إنهاء الرفع الحالي', + pauseLabel: 'Pause', + pauseTitle: 'Pause ongoing upload', + uploadLabel: 'رفع', + uploadTitle: 'رفع الملفات المختارة', + msgNo: 'لا', + msgNoFilesSelected: '', + msgPaused: 'Paused', + msgCancelled: 'ألغيت', + msgPlaceholder: 'Select {files}...', + msgZoomModalHeading: 'معاينة تفصيلية', + msgFileRequired: 'You must select a file to upload.', + msgSizeTooSmall: 'File "{name}" (<b>{size} KB</b>) is too small and must be larger than <b>{minSize} KB</b>.', + msgSizeTooLarge: 'الملف "{name}" (<b>{size} ك.ب</b>) تعدى الحد الأقصى المسموح للرفع <b>{maxSize} ك.ب</b>.', + msgFilesTooLess: 'يجب عليك اختيار <b>{n}</b> {files} على الأقل للرفع.', + msgFilesTooMany: 'عدد الملفات المختارة للرفع <b>({n})</b> تعدت الحد الأقصى المسموح به لعدد <b>{m}</b>.', + msgFileNotFound: 'الملف "{name}" غير موجود!', + msgFileSecured: 'قيود أمنية تمنع قراءة الملف "{name}".', + msgFileNotReadable: 'الملف "{name}" غير قابل للقراءة.', + msgFilePreviewAborted: 'تم إلغاء معاينة الملف "{name}".', + msgFilePreviewError: 'حدث خطأ أثناء قراءة الملف "{name}".', + msgInvalidFileName: 'Invalid or unsupported characters in file name "{name}".', + msgInvalidFileType: 'نوعية غير صالحة للملف "{name}". فقط هذه النوعيات مدعومة "{types}".', + msgInvalidFileExtension: 'امتداد غير صالح للملف "{name}". فقط هذه الملفات مدعومة "{extensions}".', + msgFileTypes: { + 'image': 'image', + 'html': 'HTML', + 'text': 'text', + 'video': 'video', + 'audio': 'audio', + 'flash': 'flash', + 'pdf': 'PDF', + 'object': 'object' + }, + msgUploadAborted: 'تم إلغاء رفع الملف', + msgUploadThreshold: 'Processing...', + msgUploadBegin: 'Initializing...', + msgUploadEnd: 'Done', + msgUploadResume: 'Resuming upload...', + msgUploadEmpty: 'No valid data available for upload.', + msgUploadError: 'Upload Error', + msgDeleteError: 'Delete Error', + msgProgressError: 'Error', + msgValidationError: 'خطأ التحقق من صحة', + msgLoading: 'تحميل ملف {index} من {files} …', + msgProgress: 'تحميل ملف {index} من {files} - {name} - {percent}% منتهي.', + msgSelected: '{n} {files} مختار(ة)', + msgFoldersNotAllowed: 'اسحب وأفلت الملفات فقط! تم تخطي {n} مجلد(ات).', + msgImageWidthSmall: 'عرض ملف الصورة "{name}" يجب أن يكون على الأقل {size} px.', + msgImageHeightSmall: 'طول ملف الصورة "{name}" يجب أن يكون على الأقل {size} px.', + msgImageWidthLarge: 'عرض ملف الصورة "{name}" لا يمكن أن يتعدى {size} px.', + msgImageHeightLarge: 'طول ملف الصورة "{name}" لا يمكن أن يتعدى {size} px.', + msgImageResizeError: 'لم يتمكن من معرفة أبعاد الصورة لتغييرها.', + msgImageResizeException: 'حدث خطأ أثناء تغيير أبعاد الصورة.<pre>{errors}</pre>', + msgAjaxError: 'Something went wrong with the {operation} operation. Please try again later!', + msgAjaxProgressError: '{operation} failed', + msgDuplicateFile: 'File "{name}" of same size "{size} KB" has already been selected earlier. Skipping duplicate selection.', + msgResumableUploadRetriesExceeded: 'Upload aborted beyond <b>{max}</b> retries for file <b>{file}</b>! Error Details: <pre>{error}</pre>', + msgPendingTime: '{time} remaining', + msgCalculatingTime: 'calculating time remaining', + ajaxOperations: { + deleteThumb: 'file delete', + uploadThumb: 'file upload', + uploadBatch: 'batch file upload', + uploadExtra: 'form data upload' + }, + dropZoneTitle: 'اسحب وأفلت الملفات هنا …', + dropZoneClickTitle: '<br>(or click to select {files})', + fileActionSettings: { + removeTitle: 'إزالة الملف', + uploadTitle: 'رفع الملف', + uploadRetryTitle: 'Retry upload', + downloadTitle: 'Download file', + zoomTitle: 'مشاهدة التفاصيل', + dragTitle: 'Move / Rearrange', + indicatorNewTitle: 'لم يتم الرفع بعد', + indicatorSuccessTitle: 'تم الرفع', + indicatorErrorTitle: 'خطأ بالرفع', + indicatorPausedTitle: 'Upload Paused', + indicatorLoadingTitle: 'جارٍ الرفع ...' + }, + previewZoomButtonTitles: { + prev: 'View previous file', + next: 'View next file', + toggleheader: 'Toggle header', + fullscreen: 'Toggle full screen', + borderless: 'Toggle borderless mode', + close: 'Close detailed preview' + } + }; +})(window.jQuery); diff --git a/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/az.js b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/az.js new file mode 100644 index 00000000..c3efafaa --- /dev/null +++ b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/az.js @@ -0,0 +1,112 @@ +/*! + * FileInput Azerbaijan Translations + * + * This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or + * any HTML markup tags in the messages must not be converted or translated. + * + * @see http://github.com/kartik-v/bootstrap-fileinput + * @author Elbrus <elbrusnt@gmail.com> + * + * NOTE: this file must be saved in UTF-8 encoding. + */ +(function ($) { + "use strict"; + + $.fn.fileinputLocales['az'] = { + fileSingle: 'fayl', + filePlural: 'fayl', + browseLabel: 'Seç …', + removeLabel: 'Sil', + removeTitle: 'Seçilmiş faylları təmizlə', + cancelLabel: 'İmtina et', + cancelTitle: 'Cari yükləməni dayandır', + pauseLabel: 'Pause', + pauseTitle: 'Pause ongoing upload', + uploadLabel: 'Yüklə', + uploadTitle: 'Seçilmiş faylları yüklə', + msgNo: 'xeyir', + msgNoFilesSelected: 'Heç bir fayl seçilməmişdir', + msgPaused: 'Paused', + msgCancelled: 'İmtina edildi', + msgPlaceholder: 'Select {files}...', + msgZoomModalHeading: 'İlkin baxış', + msgFileRequired: 'Yükləmə üçün fayl seçməlisiniz.', + msgSizeTooSmall: 'Seçdiyiniz "{name}" faylının həcmi (<b>{size} KB</b>)-dır, minimum <b>{minSize} KB</b> olmalıdır.', + msgSizeTooLarge: 'Seçdiyiniz "{name}" faylının həcmi (<b>{size} KB</b>)-dır, maksimum <b>{maxSize} KB</b> olmalıdır.', + msgFilesTooLess: 'Yükləmə üçün minimum <b>{n}</b> {files} seçməlisiniz.', + msgFilesTooMany: 'Seçilmiş fayl sayı <b>({n})</b>. Maksimum <b>{m}</b> fayl seçmək mümkündür.', + msgFileNotFound: 'Fayl "{name}" tapılmadı!', + msgFileSecured: '"{name}" faylının istifadəsinə yetginiz yoxdur.', + msgFileNotReadable: '"{name}" faylının istifadəsi mümkün deyil.', + msgFilePreviewAborted: '"{name}" faylı üçün ilkin baxış ləğv olunub.', + msgFilePreviewError: '"{name}" faylının oxunması mümkün olmadı.', + msgInvalidFileName: '"{name}" faylının adında qadağan olunmuş simvollardan istifadə olunmuşdur.', + msgInvalidFileType: '"{name}" faylının tipi dəstəklənmir. Yalnız "{types}" tipli faylları yükləmək mümkündür.', + msgInvalidFileExtension: '"{name}" faylının genişlənməsi yanlışdır. Yalnız "{extensions}" fayl genişlənmə(si / ləri) qəbul olunur.', + msgFileTypes: { + 'image': 'image', + 'html': 'HTML', + 'text': 'text', + 'video': 'video', + 'audio': 'audio', + 'flash': 'flash', + 'pdf': 'PDF', + 'object': 'object' + }, + msgUploadAborted: 'Yükləmə dayandırılmışdır', + msgUploadThreshold: 'Yükləmə...', + msgUploadBegin: 'Yoxlama...', + msgUploadEnd: 'Fayl(lar) yükləndi', + msgUploadResume: 'Resuming upload...', + msgUploadEmpty: 'Yükləmə üçün verilmiş məlumatlar yanlışdır', + msgUploadError: 'Upload Error', + msgDeleteError: 'Delete Error', + msgProgressError: 'Error', + msgValidationError: 'Yoxlama nəticəsi səhvir', + msgLoading: '{files} fayldan {index} yüklənir …', + msgProgress: '{files} fayldan {index} - {name} - {percent}% yükləndi.', + msgSelected: 'Faylların sayı: {n}', + msgFoldersNotAllowed: 'Ancaq faylların daşınmasına icazə verilir! {n} qovluq yüklənmədi.', + msgImageWidthSmall: '{name} faylının eni {size} px -dən kiçik olmamalıdır.', + msgImageHeightSmall: '{name} faylının hündürlüyü {size} px -dən kiçik olmamalıdır.', + msgImageWidthLarge: '"{name}" faylının eni {size} px -dən böyük olmamalıdır.', + msgImageHeightLarge: '"{name}" faylının hündürlüyü {size} px -dən böyük olmamalıdır.', + msgImageResizeError: 'Faylın ölçülərini dəyişmək üçün ölçüləri hesablamaq mümkün olmadı.', + msgImageResizeException: 'Faylın ölçülərini dəyişmək mümkün olmadı.<pre>{errors}</pre>', + msgAjaxError: '{operation} əməliyyatı zamanı səhv baş verdi. Təkrar yoxlayın!', + msgAjaxProgressError: '{operation} əməliyyatı yerinə yetirmək mümkün olmadı.', + msgDuplicateFile: 'File "{name}" of same size "{size} KB" has already been selected earlier. Skipping duplicate selection.', + msgResumableUploadRetriesExceeded: 'Upload aborted beyond <b>{max}</b> retries for file <b>{file}</b>! Error Details: <pre>{error}</pre>', + msgPendingTime: '{time} remaining', + msgCalculatingTime: 'calculating time remaining', + ajaxOperations: { + deleteThumb: 'faylı sil', + uploadThumb: 'faylı yüklə', + uploadBatch: 'bir neçə faylı yüklə', + uploadExtra: 'məlumatların yüklənməsi' + }, + dropZoneTitle: 'Faylları bura daşıyın …', + dropZoneClickTitle: '<br>(Və ya seçin {files})', + fileActionSettings: { + removeTitle: 'Faylı sil', + uploadTitle: 'Faylı yüklə', + uploadRetryTitle: 'Retry upload', + downloadTitle: 'Download file', + zoomTitle: 'məlumatlara bax', + dragTitle: 'Yerini dəyiş və ya sırala', + indicatorNewTitle: 'Davam edir', + indicatorSuccessTitle: 'Tamamlandı', + indicatorErrorTitle: 'Yükləmə xətası', + indicatorPausedTitle: 'Upload Paused', + indicatorLoadingTitle: 'Yükləmə ...' + }, + previewZoomButtonTitles: { + prev: 'Əvvəlki fayla bax', + next: 'Növbəti fayla bax', + toggleheader: 'Başlığı dəyiş', + fullscreen: 'Tam ekranı dəyiş', + borderless: 'Bölmələrsiz rejimi dəyiş', + close: 'Ətraflı baxışı bağla' + } + }; +})(window.jQuery); diff --git a/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/bg.js b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/bg.js new file mode 100644 index 00000000..537932d0 --- /dev/null +++ b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/bg.js @@ -0,0 +1,111 @@ +/*! + * FileInput Bulgarian Translations + * + * This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or + * any HTML markup tags in the messages must not be converted or translated. + * + * @see http://github.com/kartik-v/bootstrap-fileinput + * + * NOTE: this file must be saved in UTF-8 encoding. + */ +(function ($) { + "use strict"; + + $.fn.fileinputLocales['bg'] = { + fileSingle: 'файл', + filePlural: 'файла', + browseLabel: 'Избери …', + removeLabel: 'Премахни', + removeTitle: 'Изчисти избраните', + cancelLabel: 'Откажи', + cancelTitle: 'Откажи качването', + pauseLabel: 'Pause', + pauseTitle: 'Pause ongoing upload', + uploadLabel: 'Качи', + uploadTitle: 'Качи избраните файлове', + msgNo: 'Не', + msgNoFilesSelected: '', + msgPaused: 'Paused', + msgCancelled: 'Отменен', + msgPlaceholder: 'Select {files}...', + msgZoomModalHeading: 'Детайлен преглед', + msgFileRequired: 'You must select a file to upload.', + msgSizeTooSmall: 'File "{name}" (<b>{size} KB</b>) is too small and must be larger than <b>{minSize} KB</b>.', + msgSizeTooLarge: 'Файла "{name}" (<b>{size} KB</b>) надвишава максималните разрешени <b>{maxSize} KB</b>.', + msgFilesTooLess: 'Трябва да изберете поне <b>{n}</b> {files} файла.', + msgFilesTooMany: 'Броя файлове избрани за качване <b>({n})</b> надвишава ограниченито от максимум <b>{m}</b>.', + msgFileNotFound: 'Файлът "{name}" не може да бъде намерен!', + msgFileSecured: 'От съображения за сигурност не може да прочетем файла "{name}".', + msgFileNotReadable: 'Файлът "{name}" не е четим.', + msgFilePreviewAborted: 'Прегледа на файла е прекратен за "{name}".', + msgFilePreviewError: 'Грешка при опит за четене на файла "{name}".', + msgInvalidFileName: 'Invalid or unsupported characters in file name "{name}".', + msgInvalidFileType: 'Невалиден тип на файла "{name}". Разрешени са само "{types}".', + msgInvalidFileExtension: 'Невалидно разрешение на "{name}". Разрешени са само "{extensions}".', + msgFileTypes: { + 'image': 'image', + 'html': 'HTML', + 'text': 'text', + 'video': 'video', + 'audio': 'audio', + 'flash': 'flash', + 'pdf': 'PDF', + 'object': 'object' + }, + msgUploadAborted: 'Качите файла, бе прекратена', + msgUploadThreshold: 'Processing...', + msgUploadBegin: 'Initializing...', + msgUploadEnd: 'Done', + msgUploadResume: 'Resuming upload...', + msgUploadEmpty: 'No valid data available for upload.', + msgUploadError: 'Upload Error', + msgDeleteError: 'Delete Error', + msgProgressError: 'Error', + msgValidationError: 'утвърждаване грешка', + msgLoading: 'Зареждане на файл {index} от общо {files} …', + msgProgress: 'Зареждане на файл {index} от общо {files} - {name} - {percent}% завършени.', + msgSelected: '{n} {files} избрани', + msgFoldersNotAllowed: 'Само пуснати файлове! Пропуснати {n} пуснати папки.', + msgImageWidthSmall: 'Широчината на изображението "{name}" трябва да е поне {size} px.', + msgImageHeightSmall: 'Височината на изображението "{name}" трябва да е поне {size} px.', + msgImageWidthLarge: 'Широчината на изображението "{name}" не може да е по-голяма от {size} px.', + msgImageHeightLarge: 'Височината на изображението "{name}" нее може да е по-голяма от {size} px.', + msgImageResizeError: 'Не може да размерите на изображението, за да промените размера.', + msgImageResizeException: 'Грешка при промяна на размера на изображението.<pre>{errors}</pre>', + msgAjaxError: 'Something went wrong with the {operation} operation. Please try again later!', + msgAjaxProgressError: '{operation} failed', + msgDuplicateFile: 'File "{name}" of same size "{size} KB" has already been selected earlier. Skipping duplicate selection.', + msgResumableUploadRetriesExceeded: 'Upload aborted beyond <b>{max}</b> retries for file <b>{file}</b>! Error Details: <pre>{error}</pre>', + msgPendingTime: '{time} remaining', + msgCalculatingTime: 'calculating time remaining', + ajaxOperations: { + deleteThumb: 'file delete', + uploadThumb: 'file upload', + uploadBatch: 'batch file upload', + uploadExtra: 'form data upload' + }, + dropZoneTitle: 'Пуснете файловете тук …', + dropZoneClickTitle: '<br>(or click to select {files})', + fileActionSettings: { + removeTitle: 'Махни файл', + uploadTitle: 'Качване на файл', + uploadRetryTitle: 'Retry upload', + downloadTitle: 'Download file', + zoomTitle: 'Вижте детайли', + dragTitle: 'Move / Rearrange', + indicatorNewTitle: 'Все още не е качил', + indicatorSuccessTitle: 'Качено', + indicatorErrorTitle: 'Качи Error', + indicatorPausedTitle: 'Upload Paused', + indicatorLoadingTitle: 'Качва се ...' + }, + previewZoomButtonTitles: { + prev: 'View previous file', + next: 'View next file', + toggleheader: 'Toggle header', + fullscreen: 'Toggle full screen', + borderless: 'Toggle borderless mode', + close: 'Close detailed preview' + } + }; +})(window.jQuery); diff --git a/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/ca.js b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/ca.js new file mode 100644 index 00000000..b8410975 --- /dev/null +++ b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/ca.js @@ -0,0 +1,111 @@ +/*! + * FileInput Català Translations + * + * This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or + * any HTML markup tags in the messages must not be converted or translated. + * + * @see http://github.com/kartik-v/bootstrap-fileinput + * + * NOTE: this file must be saved in UTF-8 encoding. + */ +(function ($) { + "use strict"; + + $.fn.fileinputLocales['ca'] = { + fileSingle: 'arxiu', + filePlural: 'arxius', + browseLabel: 'Examinar …', + removeLabel: 'Treure', + removeTitle: 'Treure arxius seleccionats', + cancelLabel: 'Cancel', + cancelTitle: 'Avortar la pujada en curs', + pauseLabel: 'Pause', + pauseTitle: 'Pause ongoing upload', + uploadLabel: 'Pujar arxiu', + uploadTitle: 'Pujar arxius seleccionats', + msgNo: 'No', + msgNoFilesSelected: '', + msgPaused: 'Paused', + msgCancelled: 'cancel·lat', + msgPlaceholder: 'Select {files}...', + msgZoomModalHeading: 'Vista prèvia detallada', + msgFileRequired: 'You must select a file to upload.', + msgSizeTooSmall: 'File "{name}" (<b>{size} KB</b>) is too small and must be larger than <b>{minSize} KB</b>.', + msgSizeTooLarge: 'Arxiu "{name}" (<b>{size} KB</b>) excedeix la mida màxima permès de <b>{maxSize} KB</b>.', + msgFilesTooLess: 'Heu de seleccionar almenys <b>{n}</b> {files} a carregar.', + msgFilesTooMany: 'El nombre d\'arxius seleccionats a carregar <b>({n})</b> excedeix el límit màxim permès de <b>{m}</b>.', + msgFileNotFound: 'Arxiu "{name}" no trobat.', + msgFileSecured: 'No es pot accedir a l\'arxiu "{name}" perquè estarà sent usat per una altra aplicació o no tinguem permisos de lectura.', + msgFileNotReadable: 'No es pot accedir a l\'arxiu "{name}".', + msgFilePreviewAborted: 'Previsualització de l\'arxiu "{name}" cancel·lada.', + msgFilePreviewError: 'S\'ha produït un error mentre es llegia el fitxer "{name}".', + msgInvalidFileName: 'Invalid or unsupported characters in file name "{name}".', + msgInvalidFileType: 'Tipus de fitxer no vàlid per a "{name}". Només arxius "{types}" són permesos.', + msgInvalidFileExtension: 'Extensió de fitxer no vàlid per a "{name}". Només arxius "{extensions}" són permesos.', + msgFileTypes: { + 'image': 'image', + 'html': 'HTML', + 'text': 'text', + 'video': 'video', + 'audio': 'audio', + 'flash': 'flash', + 'pdf': 'PDF', + 'object': 'object' + }, + msgUploadAborted: 'La càrrega d\'arxius s\'ha cancel·lat', + msgUploadThreshold: 'Processing...', + msgUploadBegin: 'Initializing...', + msgUploadEnd: 'Done', + msgUploadResume: 'Resuming upload...', + msgUploadEmpty: 'No valid data available for upload.', + msgUploadError: 'Upload Error', + msgDeleteError: 'Delete Error', + msgProgressError: 'Error', + msgValidationError: 'Error de validació', + msgLoading: 'Pujant fitxer {index} de {files} …', + msgProgress: 'Pujant fitxer {index} de {files} - {name} - {percent}% completat.', + msgSelected: '{n} {files} seleccionat(s)', + msgFoldersNotAllowed: 'Arrossegueu i deixeu anar únicament arxius. Omesa(es) {n} carpeta(es).', + msgImageWidthSmall: 'L\'ample de la imatge "{name}" ha de ser almenys {size} px.', + msgImageHeightSmall: 'L\'alçada de la imatge "{name}" ha de ser almenys {size} px.', + msgImageWidthLarge: 'L\'ample de la imatge "{name}" no pot excedir de {size} px.', + msgImageHeightLarge: 'L\'alçada de la imatge "{name}" no pot excedir de {size} px.', + msgImageResizeError: 'No s\'ha pogut obtenir les dimensions d\'imatge per canviar la mida.', + msgImageResizeException: 'Error en canviar la mida de la imatge.<pre>{errors}</pre>', + msgAjaxError: 'Something went wrong with the {operation} operation. Please try again later!', + msgAjaxProgressError: '{operation} failed', + msgDuplicateFile: 'File "{name}" of same size "{size} KB" has already been selected earlier. Skipping duplicate selection.', + msgResumableUploadRetriesExceeded: 'Upload aborted beyond <b>{max}</b> retries for file <b>{file}</b>! Error Details: <pre>{error}</pre>', + msgPendingTime: '{time} remaining', + msgCalculatingTime: 'calculating time remaining', + ajaxOperations: { + deleteThumb: 'file delete', + uploadThumb: 'file upload', + uploadBatch: 'batch file upload', + uploadExtra: 'form data upload' + }, + dropZoneTitle: 'Arrossegueu i deixeu anar aquí els arxius …', + dropZoneClickTitle: '<br>(or click to select {files})', + fileActionSettings: { + removeTitle: 'Eliminar arxiu', + uploadTitle: 'Pujar arxiu', + uploadRetryTitle: 'Retry upload', + downloadTitle: 'Download file', + zoomTitle: 'Veure detalls', + dragTitle: 'Move / Rearrange', + indicatorNewTitle: 'No pujat encara', + indicatorSuccessTitle: 'Subido', + indicatorErrorTitle: 'Pujar Error', + indicatorPausedTitle: 'Upload Paused', + indicatorLoadingTitle: 'Pujant ...' + }, + previewZoomButtonTitles: { + prev: 'View previous file', + next: 'View next file', + toggleheader: 'Toggle header', + fullscreen: 'Toggle full screen', + borderless: 'Toggle borderless mode', + close: 'Close detailed preview' + } + }; +})(window.jQuery); diff --git a/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/cr.js b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/cr.js new file mode 100644 index 00000000..d6c9f420 --- /dev/null +++ b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/cr.js @@ -0,0 +1,112 @@ +/*! + * FileInput Croatian Translations + * + * This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or + * any HTML markup tags in the messages must not be converted or translated. + * + * @see http://github.com/kartik-v/bootstrap-fileinput + * @author Milos Stojanovic <stojanovic.loshmi@gmail.com> + * + * NOTE: this file must be saved in UTF-8 encoding. + */ +(function ($) { + "use strict"; + + $.fn.fileinputLocales['cr'] = { + fileSingle: 'datoteka', + filePlural: 'datoteke', + browseLabel: 'Izaberi …', + removeLabel: 'Ukloni', + removeTitle: 'Ukloni označene datoteke', + cancelLabel: 'Odustani', + cancelTitle: 'Prekini trenutno otpremanje', + pauseLabel: 'Pause', + pauseTitle: 'Pause ongoing upload', + uploadLabel: 'Otpremi', + uploadTitle: 'Otpremi označene datoteke', + msgNo: 'Ne', + msgNoFilesSelected: '', + msgPaused: 'Paused', + msgCancelled: 'Otkazan', + msgPlaceholder: 'Select {files}...', + msgZoomModalHeading: 'Detaljni pregled', + msgFileRequired: 'You must select a file to upload.', + msgSizeTooSmall: 'File "{name}" (<b>{size} KB</b>) is too small and must be larger than <b>{minSize} KB</b>.', + msgSizeTooLarge: 'Datoteka "{name}" (<b>{size} KB</b>) prekoračuje maksimalnu dozvoljenu veličinu datoteke od <b>{maxSize} KB</b>.', + msgFilesTooLess: 'Morate odabrati najmanje <b>{n}</b> {files} za otpremanje.', + msgFilesTooMany: 'Broj datoteka označenih za otpremanje <b>({n})</b> prekoračuje maksimalni dozvoljeni limit od <b>{m}</b>.', + msgFileNotFound: 'Datoteka "{name}" nije pronađena!', + msgFileSecured: 'Datoteku "{name}" nije moguće pročitati zbog bezbednosnih ograničenja.', + msgFileNotReadable: 'Datoteku "{name}" nije moguće pročitati.', + msgFilePreviewAborted: 'Generisanje prikaza nije moguće za "{name}".', + msgFilePreviewError: 'Došlo je do greške prilikom čitanja datoteke "{name}".', + msgInvalidFileName: 'Invalid or unsupported characters in file name "{name}".', + msgInvalidFileType: 'Datoteka "{name}" je pogrešnog formata. Dozvoljeni formati su "{types}".', + msgInvalidFileExtension: 'Ekstenzija datoteke "{name}" nije dozvoljena. Dozvoljene ekstenzije su "{extensions}".', + msgFileTypes: { + 'image': 'image', + 'html': 'HTML', + 'text': 'text', + 'video': 'video', + 'audio': 'audio', + 'flash': 'flash', + 'pdf': 'PDF', + 'object': 'object' + }, + msgUploadAborted: 'Prijenos datoteka je prekinut', + msgUploadThreshold: 'Processing...', + msgUploadBegin: 'Initializing...', + msgUploadEnd: 'Done', + msgUploadResume: 'Resuming upload...', + msgUploadEmpty: 'No valid data available for upload.', + msgUploadError: 'Upload Error', + msgDeleteError: 'Delete Error', + msgProgressError: 'Error', + msgValidationError: 'Provjera pogrešaka', + msgLoading: 'Učitavanje datoteke {index} od {files} …', + msgProgress: 'Učitavanje datoteke {index} od {files} - {name} - {percent}% završeno.', + msgSelected: '{n} {files} je označeno', + msgFoldersNotAllowed: 'Moguće je prevlačiti samo datoteke! Preskočeno je {n} fascikla.', + msgImageWidthSmall: 'Širina slikovnu datoteku "{name}" moraju biti najmanje {size} px.', + msgImageHeightSmall: 'Visina slikovnu datoteku "{name}" moraju biti najmanje {size} px.', + msgImageWidthLarge: 'Širina slikovnu datoteku "{name}" ne može prelaziti {size} px.', + msgImageHeightLarge: 'Visina slikovnu datoteku "{name}" ne može prelaziti {size} px.', + msgImageResizeError: 'Nije mogao dobiti dimenzije slike na veličinu.', + msgImageResizeException: 'Greška prilikom promjene veličine slike.<pre>{errors}</pre>', + msgAjaxError: 'Something went wrong with the {operation} operation. Please try again later!', + msgAjaxProgressError: '{operation} failed', + msgDuplicateFile: 'File "{name}" of same size "{size} KB" has already been selected earlier. Skipping duplicate selection.', + msgResumableUploadRetriesExceeded: 'Upload aborted beyond <b>{max}</b> retries for file <b>{file}</b>! Error Details: <pre>{error}</pre>', + msgPendingTime: '{time} remaining', + msgCalculatingTime: 'calculating time remaining', + ajaxOperations: { + deleteThumb: 'file delete', + uploadThumb: 'file upload', + uploadBatch: 'batch file upload', + uploadExtra: 'form data upload' + }, + dropZoneTitle: 'Prevucite datoteke ovde …', + dropZoneClickTitle: '<br>(or click to select {files})', + fileActionSettings: { + removeTitle: 'Uklonite datoteku', + uploadTitle: 'Postavi datoteku', + uploadRetryTitle: 'Retry upload', + downloadTitle: 'Download file', + zoomTitle: 'Pregledavati pojedinosti', + dragTitle: 'Move / Rearrange', + indicatorNewTitle: 'Još nije učitao', + indicatorSuccessTitle: 'Preneseno', + indicatorErrorTitle: 'Postavi Greška', + indicatorPausedTitle: 'Upload Paused', + indicatorLoadingTitle: 'Prijenos ...' + }, + previewZoomButtonTitles: { + prev: 'View previous file', + next: 'View next file', + toggleheader: 'Toggle header', + fullscreen: 'Toggle full screen', + borderless: 'Toggle borderless mode', + close: 'Close detailed preview' + } + }; +})(window.jQuery); diff --git a/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/cs.js b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/cs.js new file mode 100644 index 00000000..e3989943 --- /dev/null +++ b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/cs.js @@ -0,0 +1,111 @@ +/*! + * FileInput Czech Translations + * + * This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or + * any HTML markup tags in the messages must not be converted or translated. + * + * @see http://github.com/kartik-v/bootstrap-fileinput + * + * NOTE: this file must be saved in UTF-8 encoding. + */ +(function ($) { + "use strict"; + + $.fn.fileinputLocales['cs'] = { + fileSingle: 'soubor', + filePlural: 'soubory', + browseLabel: 'Vybrat …', + removeLabel: 'Odstranit', + removeTitle: 'Vyčistit vybrané soubory', + cancelLabel: 'Storno', + cancelTitle: 'Přerušit nahrávání', + pauseLabel: 'Pause', + pauseTitle: 'Pause ongoing upload', + uploadLabel: 'Nahrát', + uploadTitle: 'Nahrát vybrané soubory', + msgNo: 'Ne', + msgNoFilesSelected: 'Nevybrány žádné soubory', + msgPaused: 'Paused', + msgCancelled: 'Zrušeno', + msgPlaceholder: 'Vybrat {files}...', + msgZoomModalHeading: 'Detailní náhled', + msgFileRequired: 'Musíte vybrat soubor, který chcete nahrát.', + msgSizeTooSmall: 'Soubor "{name}" (<b>{size} KB</b>) je příliš malý, musí mít velikost nejméně <b>{minSize} KB</b>.', + msgSizeTooLarge: 'Soubor "{name}" (<b>{size} KB</b>) je příliš velký, maximální povolená velikost <b>{maxSize} KB</b>.', + msgFilesTooLess: 'Musíte vybrat nejméně <b>{n}</b> {files} souborů.', + msgFilesTooMany: 'Počet vybraných souborů <b>({n})</b> překročil maximální povolený limit <b>{m}</b>.', + msgFileNotFound: 'Soubor "{name}" nebyl nalezen!', + msgFileSecured: 'Zabezpečení souboru znemožnilo číst soubor "{name}".', + msgFileNotReadable: 'Soubor "{name}" není čitelný.', + msgFilePreviewAborted: 'Náhled souboru byl přerušen pro "{name}".', + msgFilePreviewError: 'Nastala chyba při načtení souboru "{name}".', + msgInvalidFileName: 'Neplatné nebo nepovolené znaky ve jménu souboru "{name}".', + msgInvalidFileType: 'Neplatný typ souboru "{name}". Pouze "{types}" souborů jsou podporovány.', + msgInvalidFileExtension: 'Neplatná extenze souboru "{name}". Pouze "{extensions}" souborů jsou podporovány.', + msgFileTypes: { + 'image': 'obrázek', + 'html': 'HTML', + 'text': 'text', + 'video': 'video', + 'audio': 'audio', + 'flash': 'flash', + 'pdf': 'PDF', + 'object': 'object' + }, + msgUploadAborted: 'Nahrávání souboru bylo přerušeno', + msgUploadThreshold: 'Zpracovávám...', + msgUploadBegin: 'Inicializujem...', + msgUploadEnd: 'Hotovo', + msgUploadResume: 'Resuming upload...', + msgUploadEmpty: 'Pro nahrávání nejsou k dispozici žádné platné údaje.', + msgUploadError: 'Upload Error', + msgDeleteError: 'Delete Error', + msgProgressError: 'Chyba', + msgValidationError: 'Chyba ověření', + msgLoading: 'Nahrávání souboru {index} z {files} …', + msgProgress: 'Nahrávání souboru {index} z {files} - {name} - {percent}% dokončeno.', + msgSelected: '{n} {files} vybráno', + msgFoldersNotAllowed: 'Táhni a pusť pouze soubory! Vynechané {n} pustěné složk(y).', + msgImageWidthSmall: 'Šířka obrázku "{name}", musí být alespoň {size} px.', + msgImageHeightSmall: 'Výška obrázku "{name}", musí být alespoň {size} px.', + msgImageWidthLarge: 'Šířka obrázku "{name}" nesmí být větší než {size} px.', + msgImageHeightLarge: 'Výška obrázku "{name}" nesmí být větší než {size} px.', + msgImageResizeError: 'Nelze získat rozměry obrázku pro změnu velikosti.', + msgImageResizeException: 'Chyba při změně velikosti obrázku.<pre>{errors}</pre>', + msgAjaxError: 'Došlo k chybě v {operation}. Prosím zkuste to znovu později!', + msgAjaxProgressError: '{operation} - neúspěšné', + msgDuplicateFile: 'File "{name}" of same size "{size} KB" has already been selected earlier. Skipping duplicate selection.', + msgResumableUploadRetriesExceeded: 'Upload aborted beyond <b>{max}</b> retries for file <b>{file}</b>! Error Details: <pre>{error}</pre>', + msgPendingTime: '{time} remaining', + msgCalculatingTime: 'calculating time remaining', + ajaxOperations: { + deleteThumb: 'odstranit soubor', + uploadThumb: 'nahrát soubor', + uploadBatch: 'nahrát várku souborů', + uploadExtra: 'odesílání dat formuláře' + }, + dropZoneTitle: 'Přetáhni soubory sem …', + dropZoneClickTitle: '<br>(nebo klikni sem a vyber je)', + fileActionSettings: { + removeTitle: 'Odstranit soubor', + uploadTitle: 'Nahrát soubor', + uploadRetryTitle: 'Opakovat nahrávání', + downloadTitle: 'Stáhnout soubor', + zoomTitle: 'Zobrazit podrobnosti', + dragTitle: 'Posunout / Přeskládat', + indicatorNewTitle: 'Ještě nenahrál', + indicatorSuccessTitle: 'Nahraný', + indicatorErrorTitle: 'Chyba nahrávání', + indicatorPausedTitle: 'Upload Paused', + indicatorLoadingTitle: 'Nahrávání ...' + }, + previewZoomButtonTitles: { + prev: 'Zobrazit předchozí soubor', + next: 'Zobrazit následující soubor', + toggleheader: 'Přepnout záhlaví', + fullscreen: 'Přepnout celoobrazovkové zobrazení', + borderless: 'Přepnout bezrámečkové zobrazení', + close: 'Zavřít detailní náhled' + } + }; +})(window.jQuery); diff --git a/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/da.js b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/da.js new file mode 100644 index 00000000..27d57db5 --- /dev/null +++ b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/da.js @@ -0,0 +1,111 @@ +/*! + * FileInput Danish Translations + * + * This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or + * any HTML markup tags in the messages must not be converted or translated. + * + * @see http://github.com/kartik-v/bootstrap-fileinput + * + * NOTE: this file must be saved in UTF-8 encoding. + */ +(function ($) { + "use strict"; + + $.fn.fileinputLocales['da'] = { + fileSingle: 'fil', + filePlural: 'filer', + browseLabel: 'Browse …', + removeLabel: 'Fjern', + removeTitle: 'Fjern valgte filer', + cancelLabel: 'Fortryd', + cancelTitle: 'Afbryd nuværende upload', + pauseLabel: 'Pause', + pauseTitle: 'Pause ongoing upload', + uploadLabel: 'Upload', + uploadTitle: 'Upload valgte filer', + msgNo: 'Ingen', + msgNoFilesSelected: '', + msgPaused: 'Paused', + msgCancelled: 'aflyst', + msgPlaceholder: 'Vælg {files}...', + msgZoomModalHeading: 'Detaljeret visning', + msgFileRequired: 'Du skal vælge en fil at uploade.', + msgSizeTooSmall: 'Fil "{name}" (<b>{size} KB</b>) er for lille og skal være større end <b>{minSize} KB</b>.', + msgSizeTooLarge: 'Fil "{name}" (<b>{size} KB</b>) er større end de tilladte <b>{maxSize} KB</b>.', + msgFilesTooLess: 'Du skal mindst vælge <b>{n}</b> {files} til upload.', + msgFilesTooMany: '<b>({n})</b> filer valgt til upload, men maks. <b>{m}</b> er tilladt.', + msgFileNotFound: 'Filen "{name}" blev ikke fundet!', + msgFileSecured: 'Sikkerhedsrestriktioner forhindrer læsning af "{name}".', + msgFileNotReadable: 'Filen "{name}" kan ikke indlæses.', + msgFilePreviewAborted: 'Filgennemsyn annulleret for "{name}".', + msgFilePreviewError: 'Der skete en fejl under læsningen af filen "{name}".', + msgInvalidFileName: 'Ugyldige eller ikke-understøttede tegn i filnavn "{name}".', + msgInvalidFileType: 'Ukendt type for filen "{name}". Kun "{types}" kan bruges.', + msgInvalidFileExtension: 'Ukendt filtype for filen "{name}". Kun "{extensions}" filer kan bruges.', + msgFileTypes: { + 'image': 'image', + 'html': 'HTML', + 'text': 'text', + 'video': 'video', + 'audio': 'audio', + 'flash': 'flash', + 'pdf': 'PDF', + 'object': 'object' + }, + msgUploadAborted: 'Filupload annulleret', + msgUploadThreshold: 'Arbejder...', + msgUploadBegin: 'Initialiserer...', + msgUploadEnd: 'Udført', + msgUploadResume: 'Resuming upload...', + msgUploadEmpty: 'Ingen gyldig data tilgængelig til upload.', + msgUploadError: 'Upload Error', + msgDeleteError: 'Delete Error', + msgProgressError: 'Fejl', + msgValidationError: 'Valideringsfejl', + msgLoading: 'Henter fil {index} af {files} …', + msgProgress: 'Henter fil {index} af {files} - {name} - {percent}% færdiggjort.', + msgSelected: '{n} {files} valgt', + msgFoldersNotAllowed: 'Drag & drop kun filer! {n} mappe(r) sprunget over.', + msgImageWidthSmall: 'Bredden af billedet "{name}" skal være på mindst {size} px.', + msgImageHeightSmall: 'Højden af billedet "{name}" skal være på mindst {size} px.', + msgImageWidthLarge: 'Bredden af billedet "{name}" må ikke være over {size} px.', + msgImageHeightLarge: 'Højden af billedet "{name}" må ikke være over {size} px.', + msgImageResizeError: 'Kunne ikke få billedets dimensioner for at ændre størrelsen.', + msgImageResizeException: 'Fejl ved at ændre størrelsen på billedet.<pre>{errors}</pre>', + msgAjaxError: 'Noget gik galt med {operation} operationen. Forsøg venligst senere!', + msgAjaxProgressError: '{operation} fejlede', + msgDuplicateFile: 'File "{name}" of same size "{size} KB" has already been selected earlier. Skipping duplicate selection.', + msgResumableUploadRetriesExceeded: 'Upload aborted beyond <b>{max}</b> retries for file <b>{file}</b>! Error Details: <pre>{error}</pre>', + msgPendingTime: '{time} remaining', + msgCalculatingTime: 'calculating time remaining', + ajaxOperations: { + deleteThumb: 'fil slet', + uploadThumb: 'fil upload', + uploadBatch: 'batchfil upload', + uploadExtra: 'form data upload' + }, + dropZoneTitle: 'Drag & drop filer her …', + dropZoneClickTitle: '<br>(eller klik for at vælge {files})', + fileActionSettings: { + removeTitle: 'Fjern fil', + uploadTitle: 'Upload fil', + uploadRetryTitle: 'Forsåg upload igen', + downloadTitle: 'Download fil', + zoomTitle: 'Se detaljer', + dragTitle: 'Flyt / Omarranger', + indicatorNewTitle: 'Ikke uploadet endnu', + indicatorSuccessTitle: 'Uploadet', + indicatorErrorTitle: 'Upload fejl', + indicatorPausedTitle: 'Upload Paused', + indicatorLoadingTitle: 'Uploader ...' + }, + previewZoomButtonTitles: { + prev: 'Se forrige fil', + next: 'Se næste fil', + toggleheader: 'Skift header', + fullscreen: 'Skift fuld skærm', + borderless: 'Skift grænseløs mode', + close: 'Luk detaljeret visning' + } + }; +})(window.jQuery); diff --git a/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/de.js b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/de.js new file mode 100644 index 00000000..c1bb4797 --- /dev/null +++ b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/de.js @@ -0,0 +1,109 @@ +/*! + * FileInput German Translations + * + * This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or + * any HTML markup tags in the messages must not be converted or translated. + * + * @see http://github.com/kartik-v/bootstrap-fileinput + */ +(function ($) { + "use strict"; + + $.fn.fileinputLocales['de'] = { + fileSingle: 'Datei', + filePlural: 'Dateien', + browseLabel: 'Auswählen …', + removeLabel: 'Löschen', + removeTitle: 'Ausgewählte löschen', + cancelLabel: 'Abbrechen', + cancelTitle: 'Hochladen abbrechen', + pauseLabel: 'Pause', + pauseTitle: 'Pause ongoing upload', + uploadLabel: 'Hochladen', + uploadTitle: 'Hochladen der ausgewählten Dateien', + msgNo: 'Keine', + msgNoFilesSelected: 'Keine Dateien ausgewählt', + msgPaused: 'Paused', + msgCancelled: 'Abgebrochen', + msgPlaceholder: '{files} auswählen...', + msgZoomModalHeading: 'ausführliche Vorschau', + msgFileRequired: 'Sie müssen eine Datei zum Hochladen auswählen.', + msgSizeTooSmall: 'Datei "{name}" (<b>{size} KB</b>) unterschreitet mindestens notwendige Upload-Größe von <b>{minSize} KB</b>.', + msgSizeTooLarge: 'Datei "{name}" (<b>{size} KB</b>) überschreitet maximal zulässige Upload-Größe von <b>{maxSize} KB</b>.', + msgFilesTooLess: 'Sie müssen mindestens <b>{n}</b> {files} zum Hochladen auswählen.', + msgFilesTooMany: 'Anzahl der zum Hochladen ausgewählten Dateien <b>({n})</b>, überschreitet maximal zulässige Grenze von <b>{m}</b> Stück.', + msgFileNotFound: 'Datei "{name}" wurde nicht gefunden!', + msgFileSecured: 'Sicherheitseinstellungen verhindern das Lesen der Datei "{name}".', + msgFileNotReadable: 'Die Datei "{name}" ist nicht lesbar.', + msgFilePreviewAborted: 'Dateivorschau abgebrochen für "{name}".', + msgFilePreviewError: 'Beim Lesen der Datei "{name}" ein Fehler aufgetreten.', + msgInvalidFileName: 'Ungültige oder nicht unterstützte Zeichen im Dateinamen "{name}".', + msgInvalidFileType: 'Ungültiger Typ für Datei "{name}". Nur Dateien der Typen "{types}" werden unterstützt.', + msgInvalidFileExtension: 'Ungültige Erweiterung für Datei "{name}". Nur Dateien mit der Endung "{extensions}" werden unterstützt.', + msgFileTypes: { + 'image': 'image', + 'html': 'HTML', + 'text': 'text', + 'video': 'video', + 'audio': 'audio', + 'flash': 'flash', + 'pdf': 'PDF', + 'object': 'object' + }, + msgUploadAborted: 'Der Datei-Upload wurde abgebrochen', + msgUploadThreshold: 'Wird bearbeitet ...', + msgUploadBegin: 'Wird initialisiert ...', + msgUploadEnd: 'Erledigt', + msgUploadResume: 'Resuming upload...', + msgUploadEmpty: 'Keine gültigen Daten zum Hochladen verfügbar.', + msgUploadError: 'Upload Error', + msgDeleteError: 'Delete Error', + msgProgressError: 'Fehler', + msgValidationError: 'Validierungsfehler', + msgLoading: 'Lade Datei {index} von {files} hoch…', + msgProgress: 'Datei {index} von {files} - {name} - zu {percent}% fertiggestellt.', + msgSelected: '{n} {files} ausgewählt', + msgFoldersNotAllowed: 'Drag & Drop funktioniert nur bei Dateien! {n} Ordner übersprungen.', + msgImageWidthSmall: 'Breite der Bilddatei "{name}" muss mindestens {size} px betragen.', + msgImageHeightSmall: 'Höhe der Bilddatei "{name}" muss mindestens {size} px betragen.', + msgImageWidthLarge: 'Breite der Bilddatei "{name}" nicht überschreiten {size} px.', + msgImageHeightLarge: 'Höhe der Bilddatei "{name}" nicht überschreiten {size} px.', + msgImageResizeError: 'Konnte nicht die Bildabmessungen zu ändern.', + msgImageResizeException: 'Fehler beim Ändern der Größe des Bildes.<pre>{errors}</pre>', + msgAjaxError: 'Bei der Aktion {operation} ist ein Fehler aufgetreten. Bitte versuche es später noch einmal!', + msgAjaxProgressError: '{operation} fehlgeschlagen', + msgDuplicateFile: 'File "{name}" of same size "{size} KB" has already been selected earlier. Skipping duplicate selection.', + msgResumableUploadRetriesExceeded: 'Upload aborted beyond <b>{max}</b> retries for file <b>{file}</b>! Error Details: <pre>{error}</pre>', + msgPendingTime: '{time} remaining', + msgCalculatingTime: 'calculating time remaining', + ajaxOperations: { + deleteThumb: 'Datei löschen', + uploadThumb: 'Datei hochladen', + uploadBatch: 'Batch-Datei-Upload', + uploadExtra: 'Formular-Datei-Upload' + }, + dropZoneTitle: 'Dateien hierher ziehen …', + dropZoneClickTitle: '<br>(oder klicken um {files} auszuwählen)', + fileActionSettings: { + removeTitle: 'Datei entfernen', + uploadTitle: 'Datei hochladen', + uploadRetryTitle: 'Upload erneut versuchen', + downloadTitle: 'Datei herunterladen', + zoomTitle: 'Details anzeigen', + dragTitle: 'Verschieben / Neuordnen', + indicatorNewTitle: 'Noch nicht hochgeladen', + indicatorSuccessTitle: 'Hochgeladen', + indicatorErrorTitle: 'Upload Fehler', + indicatorPausedTitle: 'Upload Paused', + indicatorLoadingTitle: 'Hochladen ...' + }, + previewZoomButtonTitles: { + prev: 'Vorherige Datei anzeigen', + next: 'Nächste Datei anzeigen', + toggleheader: 'Header umschalten', + fullscreen: 'Vollbildmodus umschalten', + borderless: 'Randlosen Modus umschalten', + close: 'Detailansicht schließen' + } + }; +})(window.jQuery); diff --git a/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/el.js b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/el.js new file mode 100644 index 00000000..a0d888e4 --- /dev/null +++ b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/el.js @@ -0,0 +1,111 @@ +/*! + * FileInput Greek Translations + * + * This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or + * any HTML markup tags in the messages must not be converted or translated. + * + * @see http://github.com/kartik-v/bootstrap-fileinput + * + * NOTE: this file must be saved in UTF-8 encoding. + */ +(function ($) { + "use strict"; + + $.fn.fileinputLocales['el'] = { + fileSingle: 'αρχείο', + filePlural: 'αρχεία', + browseLabel: 'Αναζήτηση …', + removeLabel: 'Διαγραφή', + removeTitle: 'Εκκαθάριση αρχείων', + cancelLabel: 'Ακύρωση', + cancelTitle: 'Ακύρωση μεταφόρτωσης', + pauseLabel: 'Pause', + pauseTitle: 'Pause ongoing upload', + uploadLabel: 'Μεταφόρτωση', + uploadTitle: 'Μεταφόρτωση επιλεγμένων αρχείων', + msgNo: 'Όχι', + msgNoFilesSelected: 'Δεν επιλέχθηκαν αρχεία', + msgPaused: 'Paused', + msgCancelled: 'Ακυρώθηκε', + msgPlaceholder: 'Select {files}...', + msgZoomModalHeading: 'Λεπτομερής Προεπισκόπηση', + msgFileRequired: 'You must select a file to upload.', + msgSizeTooSmall: 'Το "{name}" (<b>{size} KB</b>) είναι πολύ μικρό, πρέπει να είναι μεγαλύτερο από <b>{minSize} KB</b>.', + msgSizeTooLarge: 'Το αρχείο "{name}" (<b>{size} KB</b>) υπερβαίνει το μέγιστο επιτρεπόμενο μέγεθος μεταφόρτωσης <b>{maxSize} KB</b>.', + msgFilesTooLess: 'Πρέπει να επιλέξετε τουλάχιστον <b>{n}</b> {files} για να ξεκινήσει η μεταφόρτωση.', + msgFilesTooMany: 'Ο αριθμός των αρχείων που έχουν επιλεγεί για μεταφόρτωση <b>({n})</b> υπερβαίνει το μέγιστο επιτρεπόμενο αριθμό <b>{m}</b>.', + msgFileNotFound: 'Το αρχείο "{name}" δεν βρέθηκε!', + msgFileSecured: 'Περιορισμοί ασφαλείας εμπόδισαν την ανάγνωση του αρχείου "{name}".', + msgFileNotReadable: 'Το αρχείο "{name}" δεν είναι αναγνώσιμο.', + msgFilePreviewAborted: 'Η προεπισκόπηση του αρχείου "{name}" ακυρώθηκε.', + msgFilePreviewError: 'Παρουσιάστηκε σφάλμα κατά την ανάγνωση του αρχείου "{name}".', + msgInvalidFileName: 'Μη έγκυροι χαρακτήρες στο όνομα του αρχείου "{name}".', + msgInvalidFileType: 'Μη έγκυρος ο τύπος του αρχείου "{name}". Οι τύποι αρχείων που υποστηρίζονται είναι : "{types}".', + msgInvalidFileExtension: 'Μη έγκυρη η επέκταση του αρχείου "{name}". Οι επεκτάσεις που υποστηρίζονται είναι : "{extensions}".', + msgFileTypes: { + 'image': 'image', + 'html': 'HTML', + 'text': 'text', + 'video': 'video', + 'audio': 'audio', + 'flash': 'flash', + 'pdf': 'PDF', + 'object': 'object' + }, + msgUploadAborted: 'Η μεταφόρτωση του αρχείου ματαιώθηκε', + msgUploadThreshold: 'Μεταφόρτωση ...', + msgUploadBegin: 'Initializing...', + msgUploadEnd: 'Done', + msgUploadResume: 'Resuming upload...', + msgUploadEmpty: 'No valid data available for upload.', + msgUploadError: 'Upload Error', + msgDeleteError: 'Delete Error', + msgProgressError: 'Error', + msgValidationError: 'Σφάλμα Επικύρωσης', + msgLoading: 'Φόρτωση αρχείου {index} από {files} …', + msgProgress: 'Φόρτωση αρχείου {index} απο {files} - {name} - {percent}% ολοκληρώθηκε.', + msgSelected: '{n} {files} επιλέχθηκαν', + msgFoldersNotAllowed: 'Μπορείτε να σύρετε μόνο αρχεία! Παραβλέφθηκαν {n} φάκελος(οι).', + msgImageWidthSmall: 'Το πλάτος του αρχείου εικόνας "{name}" πρέπει να είναι τουλάχιστον {size} px.', + msgImageHeightSmall: 'Το ύψος του αρχείου εικόνας "{name}" πρέπει να είναι τουλάχιστον {size} px.', + msgImageWidthLarge: 'Το πλάτος του αρχείου εικόνας "{name}" δεν μπορεί να υπερβαίνει το {size} px.', + msgImageHeightLarge: 'Το ύψος του αρχείου εικόνας "{name}" δεν μπορεί να υπερβαίνει το {size} px.', + msgImageResizeError: 'Δεν μπορούν να βρεθούν οι διαστάσεις της εικόνας για να αλλάγή μεγέθους.', + msgImageResizeException: 'Σφάλμα κατά την αλλαγή μεγέθους της εικόνας. <pre>{errors}</pre>', + msgAjaxError: 'Something went wrong with the {operation} operation. Please try again later!', + msgAjaxProgressError: '{operation} failed', + msgDuplicateFile: 'File "{name}" of same size "{size} KB" has already been selected earlier. Skipping duplicate selection.', + msgResumableUploadRetriesExceeded: 'Upload aborted beyond <b>{max}</b> retries for file <b>{file}</b>! Error Details: <pre>{error}</pre>', + msgPendingTime: '{time} remaining', + msgCalculatingTime: 'calculating time remaining', + ajaxOperations: { + deleteThumb: 'file delete', + uploadThumb: 'file upload', + uploadBatch: 'batch file upload', + uploadExtra: 'form data upload' + }, + dropZoneTitle: 'Σύρετε τα αρχεία εδώ …', + dropZoneClickTitle: '<br>(ή πατήστε για επιλογή {files})', + fileActionSettings: { + removeTitle: 'Αφαιρέστε το αρχείο', + uploadTitle: 'Μεταφορτώστε το αρχείο', + uploadRetryTitle: 'Retry upload', + downloadTitle: 'Download file', + zoomTitle: 'Δείτε λεπτομέρειες', + dragTitle: 'Μετακίνηση/Προσπαρμογή', + indicatorNewTitle: 'Δεν μεταφορτώθηκε ακόμα', + indicatorSuccessTitle: 'Μεταφορτώθηκε', + indicatorErrorTitle: 'Σφάλμα Μεταφόρτωσης', + indicatorPausedTitle: 'Upload Paused', + indicatorLoadingTitle: 'Μεταφόρτωση ...' + }, + previewZoomButtonTitles: { + prev: 'Προηγούμενο αρχείο', + next: 'Επόμενο αρχείο', + toggleheader: 'Εμφάνιση/Απόκρυψη τίτλου', + fullscreen: 'Εναλλαγή πλήρους οθόνης', + borderless: 'Με ή χωρίς πλαίσιο', + close: 'Κλείσιμο προβολής' + } + }; +})(window.jQuery); diff --git a/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/es.js b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/es.js new file mode 100644 index 00000000..b1c58e6f --- /dev/null +++ b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/es.js @@ -0,0 +1,111 @@ +/*! + * FileInput Spanish Translations + * + * This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or + * any HTML markup tags in the messages must not be converted or translated. + * + * @see http://github.com/kartik-v/bootstrap-fileinput + * + * NOTE: this file must be saved in UTF-8 encoding. + */ +(function ($) { + "use strict"; + + $.fn.fileinputLocales['es'] = { + fileSingle: 'archivo', + filePlural: 'archivos', + browseLabel: 'Examinar …', + removeLabel: 'Quitar', + removeTitle: 'Quitar archivos seleccionados', + cancelLabel: 'Cancelar', + cancelTitle: 'Abortar la subida en curso', + pauseLabel: 'Pause', + pauseTitle: 'Pause ongoing upload', + uploadLabel: 'Subir archivo', + uploadTitle: 'Subir archivos seleccionados', + msgNo: 'No', + msgNoFilesSelected: 'No hay archivos seleccionados', + msgPaused: 'Paused', + msgCancelled: 'Cancelado', + msgPlaceholder: 'Seleccionar {files}...', + msgZoomModalHeading: 'Vista previa detallada', + msgFileRequired: 'Debes seleccionar un archivo para subir.', + msgSizeTooSmall: 'El archivo "{name}" (<b>{size} KB</b>) es demasiado pequeño y debe ser mayor de <b>{minSize} KB</b>.', + msgSizeTooLarge: 'El archivo "{name}" (<b>{size} KB</b>) excede el tamaño máximo permitido de <b>{maxSize} KB</b>.', + msgFilesTooLess: 'Debe seleccionar al menos <b>{n}</b> {files} a cargar.', + msgFilesTooMany: 'El número de archivos seleccionados a cargar <b>({n})</b> excede el límite máximo permitido de <b>{m}</b>.', + msgFileNotFound: 'Archivo "{name}" no encontrado.', + msgFileSecured: 'No es posible acceder al archivo "{name}" porque está siendo usado por otra aplicación o no tiene permisos de lectura.', + msgFileNotReadable: 'No es posible acceder al archivo "{name}".', + msgFilePreviewAborted: 'Previsualización del archivo "{name}" cancelada.', + msgFilePreviewError: 'Ocurrió un error mientras se leía el archivo "{name}".', + msgInvalidFileName: 'Caracteres no válidos o no soportados en el nombre del archivo "{name}".', + msgInvalidFileType: 'Tipo de archivo no válido para "{name}". Sólo se permiten archivos de tipo "{types}".', + msgInvalidFileExtension: 'Extensión de archivo no válida para "{name}". Sólo se permiten archivos "{extensions}".', + msgFileTypes: { + 'image': 'image', + 'html': 'HTML', + 'text': 'text', + 'video': 'video', + 'audio': 'audio', + 'flash': 'flash', + 'pdf': 'PDF', + 'object': 'object' + }, + msgUploadAborted: 'La carga de archivos se ha cancelado', + msgUploadThreshold: 'Procesando...', + msgUploadBegin: 'Inicializando...', + msgUploadEnd: 'Hecho', + msgUploadResume: 'Resuming upload...', + msgUploadEmpty: 'No existen datos válidos para el envío.', + msgUploadError: 'Upload Error', + msgDeleteError: 'Delete Error', + msgProgressError: 'Error', + msgValidationError: 'Error de validación', + msgLoading: 'Subiendo archivo {index} de {files} …', + msgProgress: 'Subiendo archivo {index} de {files} - {name} - {percent}% completado.', + msgSelected: '{n} {files} seleccionado(s)', + msgFoldersNotAllowed: 'Arrastre y suelte únicamente archivos. Omitida(s) {n} carpeta(s).', + msgImageWidthSmall: 'El ancho de la imagen "{name}" debe ser de al menos {size} px.', + msgImageHeightSmall: 'La altura de la imagen "{name}" debe ser de al menos {size} px.', + msgImageWidthLarge: 'El ancho de la imagen "{name}" no puede exceder de {size} px.', + msgImageHeightLarge: 'La altura de la imagen "{name}" no puede exceder de {size} px.', + msgImageResizeError: 'No se pudieron obtener las dimensiones de la imagen para cambiar el tamaño.', + msgImageResizeException: 'Error al cambiar el tamaño de la imagen.<pre>{errors}</pre>', + msgAjaxError: 'Algo ha ido mal con la operación {operation}. Por favor, inténtelo de nuevo mas tarde.', + msgAjaxProgressError: 'La operación {operation} ha fallado', + msgDuplicateFile: 'File "{name}" of same size "{size} KB" has already been selected earlier. Skipping duplicate selection.', + msgResumableUploadRetriesExceeded: 'Upload aborted beyond <b>{max}</b> retries for file <b>{file}</b>! Error Details: <pre>{error}</pre>', + msgPendingTime: '{time} remaining', + msgCalculatingTime: 'calculating time remaining', + ajaxOperations: { + deleteThumb: 'Archivo borrado', + uploadThumb: 'Archivo subido', + uploadBatch: 'Datos subidos en lote', + uploadExtra: 'Datos del formulario subidos ' + }, + dropZoneTitle: 'Arrastre y suelte aquí los archivos …', + dropZoneClickTitle: '<br>(o haga clic para seleccionar {files})', + fileActionSettings: { + removeTitle: 'Eliminar archivo', + uploadTitle: 'Subir archivo', + uploadRetryTitle: 'Reintentar subir', + downloadTitle: 'Descargar archivo', + zoomTitle: 'Ver detalles', + dragTitle: 'Mover / Reordenar', + indicatorNewTitle: 'No subido todavía', + indicatorSuccessTitle: 'Subido', + indicatorErrorTitle: 'Error al subir', + indicatorPausedTitle: 'Upload Paused', + indicatorLoadingTitle: 'Subiendo...' + }, + previewZoomButtonTitles: { + prev: 'Anterior', + next: 'Siguiente', + toggleheader: 'Mostrar encabezado', + fullscreen: 'Pantalla completa', + borderless: 'Modo sin bordes', + close: 'Cerrar vista detallada' + } + }; +})(window.jQuery); diff --git a/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/et.js b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/et.js new file mode 100644 index 00000000..039980f1 --- /dev/null +++ b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/et.js @@ -0,0 +1,110 @@ +/*! + * FileInput Estonian Translations + * + * This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or + * any HTML markup tags in the messages must not be converted or translated. + * + * @see http://github.com/kartik-v/bootstrap-fileinput + * + * NOTE: this file must be saved in UTF-8 encoding. + */ +(function ($) { + "use strict"; + + $.fn.fileinputLocales['et'] = { + fileSingle: 'fail', + filePlural: 'failid', + browseLabel: 'Sirvi …', + removeLabel: 'Eemalda', + removeTitle: 'Clear selected files', + cancelLabel: 'Tühista', + cancelTitle: 'Abort ongoing upload', + pauseLabel: 'Pause', + pauseTitle: 'Pause ongoing upload', + uploadLabel: 'Salvesta', + uploadTitle: 'Salvesta valitud failid', + msgNo: 'No', + msgNoFilesSelected: 'No files selected', + msgPaused: 'Paused', + msgCancelled: 'Cancelled', + msgPlaceholder: 'Select {files}...', + msgZoomModalHeading: 'Detailed Preview', + msgFileRequired: 'You must select a file to upload.', + msgSizeTooSmall: 'File "{name}" (<b>{size} KB</b>) is too small and must be larger than <b>{minSize} KB</b>.', + msgSizeTooLarge: 'Fail "{name}" (<b>{size} KB</b>) ületab lubatu suuruse <b>{maxSize} KB</b>.', + msgFilesTooLess: 'You must select at least <b>{n}</b> {files} to upload.', + msgFilesTooMany: 'Number of files selected for upload <b>({n})</b> exceeds maximum allowed limit of <b>{m}</b>.', + msgFileNotFound: 'File "{name}" not found!', + msgFileSecured: 'Security restrictions prevent reading the file "{name}".', + msgFileNotReadable: 'File "{name}" is not readable.', + msgFilePreviewAborted: 'File preview aborted for "{name}".', + msgFilePreviewError: 'An error occurred while reading the file "{name}".', + msgInvalidFileName: 'Invalid or unsupported characters in file name "{name}".', + msgInvalidFileType: '"{name}" on vale tüüpi. Ainult "{types}" on lubatud.', + msgInvalidFileExtension: 'Invalid extension for file "{name}". Only "{extensions}" files are supported.', + msgFileTypes: { + 'image': 'image', + 'html': 'HTML', + 'text': 'text', + 'video': 'video', + 'audio': 'audio', + 'flash': 'flash', + 'pdf': 'PDF', + 'object': 'object' + }, + msgUploadAborted: 'The file upload was aborted', + msgUploadThreshold: 'Processing...', + msgUploadBegin: 'Initializing...', + msgUploadEnd: 'Done', + msgUploadResume: 'Resuming upload...', + msgUploadEmpty: 'No valid data available for upload.', + msgUploadError: 'Upload Error', + msgDeleteError: 'Delete Error', + msgProgressError: 'Error', + msgValidationError: 'Validation Error', + msgLoading: 'Loading file {index} of {files} …', + msgProgress: 'Loading file {index} of {files} - {name} - {percent}% completed.', + msgSelected: '{n} {files} selected', + msgFoldersNotAllowed: 'Drag & drop files only! Skipped {n} dropped folder(s).', + msgImageWidthSmall: 'Pildi laius peab olema vähemalt {size} px.', + msgImageHeightSmall: 'Pildi kõrgus peab olema vähemalt {size} px.', + msgImageWidthLarge: 'Width of image file "{name}" cannot exceed {size} px.', + msgImageHeightLarge: 'Height of image file "{name}" cannot exceed {size} px.', + msgImageResizeError: 'Could not get the image dimensions to resize.', + msgImageResizeException: 'Error while resizing the image.<pre>{errors}</pre>', + msgAjaxError: 'Something went wrong with the {operation} operation. Please try again later!', + msgAjaxProgressError: '{operation} failed', + msgDuplicateFile: 'File "{name}" of same size "{size} KB" has already been selected earlier. Skipping duplicate selection.', + msgResumableUploadRetriesExceeded: 'Upload aborted beyond <b>{max}</b> retries for file <b>{file}</b>! Error Details: <pre>{error}</pre>', + msgPendingTime: '{time} remaining', + msgCalculatingTime: 'calculating time remaining', + ajaxOperations: { + deleteThumb: 'file delete', + uploadThumb: 'file upload', + uploadBatch: 'batch file upload', + uploadExtra: 'form data upload' + }, + dropZoneTitle: 'Lohista failid siia …', + dropZoneClickTitle: '<br>(or click to select {files})', + fileActionSettings: { + removeTitle: 'Eemalda fail', + uploadTitle: 'Salvesta fail', + uploadRetryTitle: 'Retry upload', + zoomTitle: 'Vaata detaile', + dragTitle: 'Liiguta / Korralda', + indicatorNewTitle: 'Pole veel salvestatud', + indicatorSuccessTitle: 'Uploaded', + indicatorErrorTitle: 'Salvestamise viga', + indicatorPausedTitle: 'Upload Paused', + indicatorLoadingTitle: 'Salvestan ...' + }, + previewZoomButtonTitles: { + prev: 'View previous file', + next: 'View next file', + toggleheader: 'Toggle header', + fullscreen: 'Toggle full screen', + borderless: 'Toggle borderless mode', + close: 'Close detailed preview' + } + }; +})(window.jQuery);
\ No newline at end of file diff --git a/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/fa.js b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/fa.js new file mode 100644 index 00000000..11d1d291 --- /dev/null +++ b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/fa.js @@ -0,0 +1,112 @@ +/*! + * FileInput Persian Translations + * + * This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or + * any HTML markup tags in the messages must not be converted or translated. + * + * @see http://github.com/kartik-v/bootstrap-fileinput + * @author Milad Nekofar <milad@nekofar.com> + * + * NOTE: this file must be saved in UTF-8 encoding. + */ +(function ($) { + "use strict"; + + $.fn.fileinputLocales['fa'] = { + fileSingle: 'فایل', + filePlural: 'فایلها', + browseLabel: 'مرور …', + removeLabel: 'حذف', + removeTitle: 'پاکسازی فایلهای انتخاب شده', + cancelLabel: 'لغو', + cancelTitle: 'لغو بارگزاری جاری', + pauseLabel: 'Pause', + pauseTitle: 'Pause ongoing upload', + uploadLabel: 'بارگذاری', + uploadTitle: 'بارگذاری فایلهای انتخاب شده', + msgNo: 'نه', + msgNoFilesSelected: 'هیچ فایلی انتخاب نشده است', + msgPaused: 'Paused', + msgCancelled: 'لغو شد', + msgPlaceholder: 'انتخاب {files}...', + msgZoomModalHeading: 'نمایش با جزییات', + msgFileRequired: 'شما باید یک فایل برای بارگذاری انتخاب نمایید.', + msgSizeTooSmall: 'فایل "{name}" (<b>{size} کیلوبایت</b>) خیلی کوچک است و باید از <b>{minSize} کیلوبایت بزرگتر باشد</b>.', + msgSizeTooLarge: 'فایل "{name}" (<b>{size} کیلوبایت</b>) از حداکثر مجاز <b>{maxSize} کیلوبایت</b> بزرگتر است.', + msgFilesTooLess: 'شما باید حداقل <b>{n}</b> {files} فایل برای بارگذاری انتخاب کنید.', + msgFilesTooMany: 'تعداد فایلهای انتخاب شده برای بارگذاری <b>({n})</b> از حداکثر مجاز عبور کرده است <b>{m}</b>.', + msgFileNotFound: 'فایل "{name}" یافت نشد!', + msgFileSecured: 'محدودیت های امنیتی مانع خواندن فایل "{name}" است.', + msgFileNotReadable: 'فایل "{name}" قابل نوشتن نیست.', + msgFilePreviewAborted: 'پیش نمایش فایل "{name}". به مشکل خورد', + msgFilePreviewError: 'در هنگام خواندن فایل "{name}" خطایی رخ داد.', + msgInvalidFileName: 'کاراکترهای غیرمجاز و یا ناشناخته در نام فایل "{name}".', + msgInvalidFileType: 'نوع فایل "{name}" معتبر نیست. فقط "{types}" پشیبانی میشوند.', + msgInvalidFileExtension: 'پسوند فایل "{name}" معتبر نیست. فقط "{extensions}" پشتیبانی میشوند.', + msgFileTypes: { + 'image': 'عکس', + 'html': 'اچ تا ام ال', + 'text': 'متن', + 'video': 'ویدئو', + 'audio': 'صدا', + 'flash': 'فلش', + 'pdf': 'پی دی اف', + 'object': 'دیگر' + }, + msgUploadAborted: 'بارگذاری فایل به مشکل خورد.', + msgUploadThreshold: 'در حال پردازش...', + msgUploadBegin: 'در حال شروع...', + msgUploadEnd: 'انجام شد', + msgUploadResume: 'Resuming upload...', + msgUploadEmpty: 'هیچ داده معتبری برای بارگذاری موجود نیست.', + msgUploadError: 'Upload Error', + msgDeleteError: 'Delete Error', + msgProgressError: 'Error', + msgValidationError: 'خطای اعتبار سنجی', + msgLoading: 'بارگیری فایل {index} از {files} …', + msgProgress: 'بارگیری فایل {index} از {files} - {name} - {percent}% تمام شد.', + msgSelected: '{n} {files} انتخاب شده', + msgFoldersNotAllowed: 'فقط فایلها را بکشید و رها کنید! {n} پوشه نادیده گرفته شد.', + msgImageWidthSmall: 'عرض فایل تصویر "{name}" باید حداقل {size} پیکسل باشد.', + msgImageHeightSmall: 'ارتفاع فایل تصویر "{name}" باید حداقل {size} پیکسل باشد.', + msgImageWidthLarge: 'عرض فایل تصویر "{name}" نمیتواند از {size} پیکسل بیشتر باشد.', + msgImageHeightLarge: 'ارتفاع فایل تصویر "{name}" نمیتواند از {size} پیکسل بیشتر باشد.', + msgImageResizeError: 'یافت نشد ابعاد تصویر را برای تغییر اندازه.', + msgImageResizeException: 'خطا در هنگام تغییر اندازه تصویر.<pre>{errors}</pre>', + msgAjaxError: 'به نظر مشکلی در حین {operation} روی داده است. لطفا دوباره تلاش کنید!', + msgAjaxProgressError: '{operation} لغو شد', + msgDuplicateFile: 'File "{name}" of same size "{size} KB" has already been selected earlier. Skipping duplicate selection.', + msgResumableUploadRetriesExceeded: 'Upload aborted beyond <b>{max}</b> retries for file <b>{file}</b>! Error Details: <pre>{error}</pre>', + msgPendingTime: '{time} remaining', + msgCalculatingTime: 'calculating time remaining', + ajaxOperations: { + deleteThumb: 'حذف فایل', + uploadThumb: 'بارگذاری فایل', + uploadBatch: 'بارگذاری جمعی فایلها', + uploadExtra: 'بارگذاری با کمک فُرم' + }, + dropZoneTitle: 'فایلها را بکشید و در اینجا رها کنید …', + dropZoneClickTitle: '<br>(یا برای انتخاب {files} کلیک کنید)', + fileActionSettings: { + removeTitle: 'حذف فایل', + uploadTitle: 'آپلود فایل', + uploadRetryTitle: 'بارگیری مجدد', + downloadTitle: 'دریافت فایل', + zoomTitle: 'دیدن جزئیات', + dragTitle: 'جابجایی / چیدمان', + indicatorNewTitle: 'آپلود نشده است', + indicatorSuccessTitle: 'آپلود شده', + indicatorErrorTitle: 'بارگذاری خطا', + indicatorPausedTitle: 'Upload Paused', + indicatorLoadingTitle: 'آپلود ...' + }, + previewZoomButtonTitles: { + prev: 'مشاهده فایل قبلی', + next: 'مشاهده فایل بعدی', + toggleheader: 'نمایش عنوان', + fullscreen: 'نمایش تمام صفحه', + borderless: 'نمایش حاشیه', + close: 'بستن نمایش با جزییات' + } + }; +})(window.jQuery); diff --git a/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/fi.js b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/fi.js new file mode 100644 index 00000000..85154eec --- /dev/null +++ b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/fi.js @@ -0,0 +1,101 @@ +/*! + * FileInput Finnish Translations + * + * This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or + * any HTML markup tags in the messages must not be converted or translated. + * + * @see http://github.com/kartik-v/bootstrap-fileinput + * + * NOTE: this file must be saved in UTF-8 encoding. + */ +(function ($) { + "use strict"; + + $.fn.fileinputLocales.fi = { + fileSingle: 'tiedosto', + filePlural: 'tiedostot', + browseLabel: 'Selaa …', + removeLabel: 'Poista', + removeTitle: 'Tyhjännä valitut tiedostot', + cancelLabel: 'Peruuta', + cancelTitle: 'Peruuta lataus', + pauseLabel: 'Pause', + pauseTitle: 'Pause ongoing upload', + uploadLabel: 'Lataa', + uploadTitle: 'Lataa valitut tiedostot', + msgNoFilesSelected: '', + msgFileRequired: 'You must select a file to upload.', + msgSizeTooSmall: 'File "{name}" (<b>{size} KB</b>) is too small and must be larger than <b>{minSize} KB</b>.', + msgSizeTooLarge: 'Tiedosto "{name}" (<b>{size} Kt</b>) ylittää suurimman sallitun tiedoston koon, joka on <b>{maxSize} Kt</b>. Yritä uudelleen!', + msgFilesTooLess: 'Vähintään <b>{n}</b> {files} tiedostoa on valittava ladattavaksi. Ole hyvä ja yritä uudelleen!', + msgFilesTooMany: 'Valittujen tiedostojen lukumäärä <b>({n})</b> ylittää suurimman sallitun määrän <b>{m}</b>. Ole hyvä ja yritä uudelleen!', + msgFileNotFound: 'Tiedostoa "{name}" ei löydy!', + msgFileSecured: 'Tietoturvarajoitukset estävät tiedoston "{name}" lukemisen.', + msgFileNotReadable: 'Tiedosto "{name}" ei ole luettavissa.', + msgFilePreviewAborted: 'Tiedoston "{name}" esikatselu keskeytetty.', + msgFilePreviewError: 'Virhe on tapahtunut luettaessa tiedostoa "{name}".', + msgInvalidFileName: 'Invalid or unsupported characters in file name "{name}".', + msgInvalidFileType: 'Tiedosto "{name}" on väärän tyyppinen. Ainoastaan tiedostot tyyppiä "{types}" ovat tuettuja.', + msgInvalidFileExtension: 'Tiedoston "{name}" tarkenne on epäkelpo. Ainoastaan tarkenteet "{extensions}" ovat tuettuja.', + msgFileTypes: { + 'image': 'Kuva', + 'html': 'HTML', + 'text': 'Teksti', + 'video': 'Video', + 'audio': 'Ääni', + 'flash': 'Flash', + 'pdf': 'PDF', + 'object': 'Olio' + }, + msgUploadThreshold: 'Käsitellään...', + msgUploadBegin: 'Initializing...', + msgUploadEnd: 'Done', + msgUploadResume: 'Resuming upload...', + msgUploadEmpty: 'Ei ladattavaa dataa.', + msgUploadError: 'Upload Error', + msgDeleteError: 'Delete Error', + msgProgressError: 'Error', + msgValidationError: 'Tiedoston latausvirhe', + msgLoading: 'Ladataan tiedostoa {index} / {files} …', + msgProgress: 'Ladataan tiedostoa {index} / {files} - {name} - {percent}% valmistunut.', + msgSelected: '{n} tiedostoa valittu', + msgFoldersNotAllowed: 'Raahaa ja pudota ainoastaan tiedostoja! Ohitettu {n} raahattua kansiota.', + msgAjaxError: 'Something went wrong with the {operation} operation. Please try again later!', + msgAjaxProgressError: '{operation} failed', + msgDuplicateFile: 'File "{name}" of same size "{size} KB" has already been selected earlier. Skipping duplicate selection.', + msgResumableUploadRetriesExceeded: 'Upload aborted beyond <b>{max}</b> retries for file <b>{file}</b>! Error Details: <pre>{error}</pre>', + msgPendingTime: '{time} remaining', + msgCalculatingTime: 'calculating time remaining', + ajaxOperations: { + deleteThumb: 'file delete', + uploadThumb: 'file upload', + uploadBatch: 'batch file upload', + uploadExtra: 'form data upload' + }, + dropZoneTitle: 'Raahaa ja pudota tiedostot tähän …', + dropZoneClickTitle: '<br>(tai valitse hiirellä {files})', + fileActionSettings: { + removeTitle: 'Poista tiedosto', + uploadTitle: 'Upload file', + uploadRetryTitle: 'Retry upload', + downloadTitle: 'Download file', + zoomTitle: 'Yksityiskohdat', + dragTitle: 'Siirrä / Järjestele', + indicatorNewTitle: 'Ei ladattu', + indicatorSuccessTitle: 'Ladattu', + indicatorErrorTitle: 'Lataus epäonnistui', + indicatorPausedTitle: 'Upload Paused', + indicatorLoadingTitle: 'Ladataan ...' + }, + previewZoomButtonTitles: { + prev: 'Seuraava tiedosto', + next: 'Edellinen tiedosto', + toggleheader: 'Näytä otsikko', + fullscreen: 'Kokonäytön tila', + borderless: 'Rajaton tila', + close: 'Sulje esikatselu' + } + }; + + $.extend($.fn.fileinput.defaults, $.fn.fileinputLocales.fi); +})(window.jQuery); diff --git a/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/fr.js b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/fr.js new file mode 100644 index 00000000..0d9e1e97 --- /dev/null +++ b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/fr.js @@ -0,0 +1,110 @@ +/*! + * FileInput French Translations + * + * This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or + * any HTML markup tags in the messages must not be converted or translated. + * + * @see http://github.com/kartik-v/bootstrap-fileinput + * + * NOTE: this file must be saved in UTF-8 encoding. + */ +(function ($) { + "use strict"; + + $.fn.fileinputLocales['fr'] = { + fileSingle: 'fichier', + filePlural: 'fichiers', + browseLabel: 'Parcourir…', + removeLabel: 'Retirer', + removeTitle: 'Retirer les fichiers sélectionnés', + cancelLabel: 'Annuler', + cancelTitle: "Annuler l'envoi en cours", + pauseLabel: 'Pause', + pauseTitle: 'Pause ongoing upload', + uploadLabel: 'Transférer', + uploadTitle: 'Transférer les fichiers sélectionnés', + msgNo: 'Non', + msgNoFilesSelected: '', + msgPaused: 'Paused', + msgCancelled: 'Annulé', + msgPlaceholder: 'Sélectionner le(s) {files}...', + msgZoomModalHeading: 'Aperçu détaillé', + msgFileRequired: 'Vous devez sélectionner un fichier à uploader.', + msgSizeTooSmall: 'Le fichier "{name}" (<b>{size} KB</b>) est inférieur à la taille minimale de <b>{minSize} KB</b>.', + msgSizeTooLarge: 'Le fichier "{name}" (<b>{size} Ko</b>) dépasse la taille maximale autorisée qui est de <b>{maxSize} Ko</b>.', + msgFilesTooLess: 'Vous devez sélectionner au moins <b>{n}</b> {files} à transmettre.', + msgFilesTooMany: 'Le nombre de fichier sélectionné <b>({n})</b> dépasse la quantité maximale autorisée qui est de <b>{m}</b>.', + msgFileNotFound: 'Le fichier "{name}" est introuvable !', + msgFileSecured: "Des restrictions de sécurité vous empêchent d'accéder au fichier \"{name}\".", + msgFileNotReadable: 'Le fichier "{name}" est illisible.', + msgFilePreviewAborted: 'Prévisualisation du fichier "{name}" annulée.', + msgFilePreviewError: 'Une erreur est survenue lors de la lecture du fichier "{name}".', + msgInvalidFileName: 'Caractères invalides ou non supportés dans le nom de fichier "{name}".', + msgInvalidFileType: 'Type de document invalide pour "{name}". Seulement les documents de type "{types}" sont autorisés.', + msgInvalidFileExtension: 'Extension invalide pour le fichier "{name}". Seules les extensions "{extensions}" sont autorisées.', + msgFileTypes: { + 'image': 'image', + 'html': 'HTML', + 'text': 'text', + 'video': 'video', + 'audio': 'audio', + 'flash': 'flash', + 'pdf': 'PDF', + 'object': 'object' + }, + msgUploadAborted: 'Le transfert du fichier a été interrompu', + msgUploadThreshold: 'En cours...', + msgUploadBegin: 'Initialisation...', + msgUploadEnd: 'Terminé', + msgUploadResume: 'Resuming upload...', + msgUploadEmpty: 'Aucune donnée valide disponible pour transmission.', + msgUploadError: 'Upload Error', + msgDeleteError: 'Delete Error', + msgProgressError: 'Erreur', + msgValidationError: 'Erreur de validation', + msgLoading: 'Transmission du fichier {index} sur {files}…', + msgProgress: 'Transmission du fichier {index} sur {files} - {name} - {percent}%.', + msgSelected: '{n} {files} sélectionné(s)', + msgFoldersNotAllowed: 'Glissez et déposez uniquement des fichiers ! {n} répertoire(s) exclu(s).', + msgImageWidthSmall: 'La largeur de l\'image "{name}" doit être d\'au moins {size} px.', + msgImageHeightSmall: 'La hauteur de l\'image "{name}" doit être d\'au moins {size} px.', + msgImageWidthLarge: 'La largeur de l\'image "{name}" ne peut pas dépasser {size} px.', + msgImageHeightLarge: 'La hauteur de l\'image "{name}" ne peut pas dépasser {size} px.', + msgImageResizeError: "Impossible d'obtenir les dimensions de l'image à redimensionner.", + msgImageResizeException: "Erreur lors du redimensionnement de l'image.<pre>{errors}</pre>", + msgAjaxError: "Une erreur s'est produite pendant l'opération de {operation}. Veuillez réessayer plus tard.", + msgAjaxProgressError: 'L\'opération "{operation}" a échoué', + msgDuplicateFile: 'File "{name}" of same size "{size} KB" has already been selected earlier. Skipping duplicate selection.', + msgResumableUploadRetriesExceeded: 'Upload aborted beyond <b>{max}</b> retries for file <b>{file}</b>! Error Details: <pre>{error}</pre>', + msgPendingTime: '{time} remaining', + msgCalculatingTime: 'calculating time remaining', + ajaxOperations: { + deleteThumb: 'suppression du fichier', + uploadThumb: 'transfert du fichier', + uploadBatch: 'transfert des fichiers', + uploadExtra: 'soumission des données de formulaire' + }, + dropZoneTitle: 'Glissez et déposez les fichiers ici…', + dropZoneClickTitle: '<br>(ou cliquez pour sélectionner manuellement)', + fileActionSettings: { + removeTitle: 'Supprimer le fichier', + uploadTitle: 'Transférer le fichier', + uploadRetryTitle: 'Relancer le transfert', + zoomTitle: 'Voir les détails', + dragTitle: 'Déplacer / Réarranger', + indicatorNewTitle: 'Pas encore transféré', + indicatorSuccessTitle: 'Posté', + indicatorErrorTitle: 'Ajouter erreur', + indicatorPausedTitle: 'Upload Paused', + indicatorLoadingTitle: 'En cours...' + }, + previewZoomButtonTitles: { + prev: 'Voir le fichier précédent', + next: 'Voir le fichier suivant', + toggleheader: 'Masquer le titre', + fullscreen: 'Mode plein écran', + borderless: 'Mode cinéma', + close: "Fermer l'aperçu" + } + }; +})(window.jQuery); diff --git a/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/gl.js b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/gl.js new file mode 100644 index 00000000..0b4992de --- /dev/null +++ b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/gl.js @@ -0,0 +1,111 @@ +/*! + * FileInput Galician Translations + * + * This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or + * any HTML markup tags in the messages must not be converted or translated. + * + * @see http://github.com/kartik-v/bootstrap-fileinput + * + * NOTE: this file must be saved in UTF-8 encoding. + */ +(function ($) { + "use strict"; + + $.fn.fileinputLocales['gl'] = { + fileSingle: 'arquivo', + filePlural: 'arquivos', + browseLabel: 'Examinar …', + removeLabel: 'Quitar', + removeTitle: 'Quitar aquivos seleccionados', + cancelLabel: 'Cancelar', + cancelTitle: 'Abortar a subida en curso', + pauseLabel: 'Pause', + pauseTitle: 'Pause ongoing upload', + uploadLabel: 'Subir arquivo', + uploadTitle: 'Subir arquivos seleccionados', + msgNo: 'Non', + msgNoFilesSelected: 'Non hay arquivos seleccionados', + msgPaused: 'Paused', + msgCancelled: 'Cancelado', + msgPlaceholder: 'Seleccinar {files}...', + msgZoomModalHeading: 'Vista previa detallada', + msgFileRequired: 'Debes seleccionar un arquivo para subir.', + msgSizeTooSmall: 'O arquivo "{name}" (<b>{size} KB</b>) é demasiado pequeno e debe ser maior de <b>{minSize} KB</b>.', + msgSizeTooLarge: 'O arquivo "{name}" (<b>{size} KB</b>) excede o tamaño máximo permitido de <b>{maxSize} KB</b>.', + msgFilesTooLess: 'Debe seleccionar ao menos <b>{n}</b> {files} a cargar.', + msgFilesTooMany: 'O número de arquivos seleccionados a cargar <b>({n})</b> excede do límite máximo permitido de <b>{m}</b>.', + msgFileNotFound: 'Arquivo "{name}" non encontrado.', + msgFileSecured: 'Non é posible acceder ao arquivo "{name}" porque estará sendo usado por outra aplicación ou non teñamos permisos de lectura.', + msgFileNotReadable: 'Non é posible acceder ao arquivo "{name}".', + msgFilePreviewAborted: 'Previsualización do arquivo "{name}" cancelada.', + msgFilePreviewError: 'Ocurriu un erro mentras se lía o arquivo "{name}".', + msgInvalidFileName: 'Caracteres non válidos ou non soportados no nome do arquivo "{name}".', + msgInvalidFileType: 'Tipo de arquivo non válido para "{name}". Só se permiten arquivos do tipo "{types}".', + msgInvalidFileExtension: 'Extensión de arquivo non válida para "{name}". Só se permiten arquivos "{extensions}".', + msgFileTypes: { + 'image': 'imaxe', + 'html': 'HTML', + 'text': 'text', + 'video': 'video', + 'audio': 'audio', + 'flash': 'flash', + 'pdf': 'PDF', + 'object': 'object' + }, + msgUploadAborted: 'A carga de arquivos cancelouse', + msgUploadThreshold: 'Procesando...', + msgUploadBegin: 'Inicializando...', + msgUploadEnd: 'Feito', + msgUploadResume: 'Resuming upload...', + msgUploadEmpty: 'Non existen datos válidos para o envío.', + msgUploadError: 'Upload Error', + msgDeleteError: 'Delete Error', + msgProgressError: 'Erro', + msgValidationError: 'Erro de validación', + msgLoading: 'Subindo arquivo {index} de {files} …', + msgProgress: 'Subindo arquivo {index} de {files} - {name} - {percent}% completado.', + msgSelected: '{n} {files} seleccionado(s)', + msgFoldersNotAllowed: 'Arrastra e solta unicamente arquivos. Omitida(s) {n} carpeta(s).', + msgImageWidthSmall: 'O ancho da imaxe "{name}" debe ser de ao menos {size} px.', + msgImageHeightSmall: 'A altura da imaxe "{name}" debe ser de ao menos {size} px.', + msgImageWidthLarge: 'O ancho da imaxe "{name}" non pode exceder de {size} px.', + msgImageHeightLarge: 'A altura da imaxe "{name}" non pode exceder de {size} px.', + msgImageResizeError: 'Non se puideron obter as dimensións da imaxe para cambiar o tamaño.', + msgImageResizeException: 'Erro ao cambiar o tamaño da imaxe. <pre>{errors}</pre>', + msgAjaxError: 'Algo foi mal ca operación {operation}. Por favor, inténtao de novo máis tarde.', + msgAjaxProgressError: 'A operación {operation} fallou', + msgDuplicateFile: 'File "{name}" of same size "{size} KB" has already been selected earlier. Skipping duplicate selection.', + msgResumableUploadRetriesExceeded: 'Upload aborted beyond <b>{max}</b> retries for file <b>{file}</b>! Error Details: <pre>{error}</pre>', + msgPendingTime: '{time} remaining', + msgCalculatingTime: 'calculating time remaining', + ajaxOperations: { + deleteThumb: 'Arquivo borrado', + uploadThumb: 'Arquivo subido', + uploadBatch: 'Datos subidos en lote', + uploadExtra: 'Datos do formulario subidos' + }, + dropZoneTitle: 'Arrasta e solta aquí os arquivos …', + dropZoneClickTitle: '<br>(ou fai clic para seleccionar {files})', + fileActionSettings: { + removeTitle: 'Eliminar arquivo', + uploadTitle: 'Subir arquivo', + uploadRetryTitle: 'Reintentar a subida', + downloadTitle: 'Descargar arquivo', + zoomTitle: 'Ver detalles', + dragTitle: 'Mover / Reordenar', + indicatorNewTitle: 'Non subido aínda', + indicatorSuccessTitle: 'Subido', + indicatorErrorTitle: 'Erro ao subir', + indicatorPausedTitle: 'Upload Paused', + indicatorLoadingTitle: 'Subindo...' + }, + previewZoomButtonTitles: { + prev: 'Ver arquivo anterior', + next: 'Ver arquivo seguinte', + toggleheader: 'Mostrar encabezado', + fullscreen: 'Mostrar a pantalla completa', + borderless: 'Activar o modo sen bordes', + close: 'Cerrar vista detallada' + } + }; +})(window.jQuery); diff --git a/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/he.js b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/he.js new file mode 100644 index 00000000..49a73a13 --- /dev/null +++ b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/he.js @@ -0,0 +1,106 @@ +/*! + * FileInput Hebrew Translations + * + * This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or + * any HTML markup tags in the messages must not be converted or translated. + * + * @see http://github.com/kartik-v/bootstrap-fileinput + * @author Daniel Coryat <awq8002@gmail.com> + * + * NOTE: this file must be saved in UTF-8 encoding. + */ +(function ($) { + "use strict"; + + $.fn.fileinputLocales['he'] = { + fileSingle: 'קובץ', + filePlural: 'קבצים', + browseLabel: 'העלאה …', + removeLabel: 'הסרה', + removeTitle: 'נקה קבצים נבחרים', + cancelLabel: 'ביטול', + cancelTitle: 'ביטול העלאה מתמשכת', + pauseLabel: 'Pause', + pauseTitle: 'Pause ongoing upload', + uploadLabel: 'טעינה', + uploadTitle: 'טעינת קבצים נבחרים', + msgNo: 'לא', + msgNoFilesSelected: 'לא נבחרו קבצים', + msgPaused: 'Paused', + msgCancelled: 'מבוטל', + msgPlaceholder: 'בחר {files}...', + msgZoomModalHeading: 'תצוגה מקדימה מפורטת', + msgSizeTooSmall: 'קובץ "{name}" (<b>{size} KB</b>) קטן מדי וחייב להיות גדול מ <b>{minSize} KB</b>.', + msgSizeTooLarge: 'קובץ "{name}" (<b>{size} KB</b>) חורג מהגודל המרבי המותר להעלאה של <b>{maxSize} KB</b>.', + msgFilesTooLess: 'עליך לבחור לפחות <b>{n}</b> {files} להעלאה.', + msgFilesTooMany: 'מספר הקבצים שנבחרו להעלאה <b>({n})</b> חורג מהמגבלה המרבית המותרת של <b>{m}</b>.', + msgFileNotFound: 'קובץ "{name}" לא נמצא!', + msgFileSecured: 'הגבלות אבטחה מונעות קריאת הקובץ "{name}".', + msgFileNotReadable: 'קובץ "{name}" לא קריא.', + msgFilePreviewAborted: 'תצוגה מקדימה של הקובץ בוטלה עבור "{name}".', + msgFilePreviewError: 'אירעה שגיאה בעת קריאת הקובץ "{name}".', + msgInvalidFileName: 'תווים לא חוקיים או לא נתמכים בשם הקובץ "{name}".', + msgInvalidFileType: 'סוג קובץ לא חוקי "{name}". רק "{types}" קבצים נתמכים.', + msgInvalidFileExtension: 'תוסף לא חוקי עבור הקובץ "{name}". רק "{extensions}" קבצים נתמכים.', + msgFileTypes: { + 'image': 'תמונה', + 'html': 'HTML', + 'text': 'טקסט', + 'video': 'וידאו', + 'audio': 'שמע', + 'flash': 'פלאש', + 'pdf': 'PDF', + 'object': 'אובייקט' + }, + msgUploadAborted: 'העלאת הקובץ בוטלה', + msgUploadThreshold: 'מעבד...', + msgUploadBegin: 'מאתחל ...', + msgUploadEnd: 'בוצע', + msgUploadResume: 'Resuming upload...', + msgUploadEmpty: 'אין נתונים זמינים להעלאה.', + msgValidationError: 'שגיאת אימות', + msgLoading: 'טוען קובץ {index} של {files} …', + msgProgress: 'טוען קובץ {index} של {files} - {name} - {percent}% הושלמה.', + msgSelected: '{n} {files} נבחרו', + msgFoldersNotAllowed: 'גרירת קבצים ושחרורם בלבד! דילוג {n} גרירת תיקיה(s).', + msgImageWidthSmall: 'רוחב קובץ התמונה "{name}" חייב להיות לפחות {size} px.', + msgImageHeightSmall: 'גובה קובץ התמונה "{name}" חייב להיות לפחות {size} px.', + msgImageWidthLarge: 'רוחב קובץ התמונה "{name}" לא יעלה על {size} px.', + msgImageHeightLarge: 'גובה קובץ התמונה "{name}" לא יעלה על {size} px.', + msgImageResizeError: 'לא ניתן לשנות את גודל מידות התמונה.', + msgImageResizeException: 'שגיאה בעת שינוי גודל התמונה.<pre>{errors}</pre>', + msgAjaxError: 'משהו השתבש עם {operation} המערכת. יש לנסות מאוחר יותר!', + msgAjaxProgressError: '{operation} נכשל', + msgDuplicateFile: 'File "{name}" of same size "{size} KB" has already been selected earlier. Skipping duplicate selection.', + msgResumableUploadRetriesExceeded: 'Upload aborted beyond <b>{max}</b> retries for file <b>{file}</b>! Error Details: <pre>{error}</pre>', + msgPendingTime: '{time} remaining', + msgCalculatingTime: 'calculating time remaining', + ajaxOperations: { + deleteThumb: 'קובץ נמחק', + uploadThumb: 'קובץ הועלה', + uploadBatch: 'קובץ אצווה הועלה', + uploadExtra: 'העלאת נתונים בטופס' + }, + dropZoneTitle: 'גרירת קבצים ושחרורם כאן …', + dropZoneClickTitle: '<br>(או לחץ /י כדי לבחור {files})', + fileActionSettings: { + removeTitle: 'הסרת קובץ', + uploadTitle: 'טעינת קובץ', + zoomTitle: 'הצגת פרטים', + dragTitle: 'העברה / סידור מחדש', + indicatorNewTitle: 'עדיין לא הועלה', + indicatorSuccessTitle: 'הועלה', + indicatorErrorTitle: 'שגיאת העלאה', + indicatorPausedTitle: 'Upload Paused', + indicatorLoadingTitle: 'מעלה...' + }, + previewZoomButtonTitles: { + prev: 'הצגת את הקובץ הקודם', + next: 'הצגת את הקובץ הבא', + toggleheader: 'שינוי כותרת', + fullscreen: 'מעבר למסך מלא', + borderless: 'שינוי המודל ללא שוליים', + close: 'סגירת תצוגה מקדימה מפורטת' + } + }; +})(window.jQuery); diff --git a/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/hu.js b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/hu.js new file mode 100644 index 00000000..de210570 --- /dev/null +++ b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/hu.js @@ -0,0 +1,111 @@ +/*! + * FileInput Hungarian Translations + * + * This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or + * any HTML markup tags in the messages must not be converted or translated. + * + * @see http://github.com/kartik-v/bootstrap-fileinput + * + * NOTE: this file must be saved in UTF-8 encoding. + */ +(function ($) { + "use strict"; + + $.fn.fileinputLocales['hu'] = { + fileSingle: 'fájl', + filePlural: 'fájlok', + browseLabel: 'Tallóz …', + removeLabel: 'Eltávolít', + removeTitle: 'Kijelölt fájlok törlése', + cancelLabel: 'Mégse', + cancelTitle: 'Feltöltés megszakítása', + pauseLabel: 'Pause', + pauseTitle: 'Pause ongoing upload', + uploadLabel: 'Feltöltés', + uploadTitle: 'Kijelölt fájlok feltöltése', + msgNo: 'Nem', + msgNoFilesSelected: 'Nincs fájl kiválasztva', + msgPaused: 'Paused', + msgCancelled: 'Megszakítva', + msgPlaceholder: 'Válasz {files}...', + msgZoomModalHeading: 'Részletes Előnézet', + msgFileRequired: 'Kötelező fájlt kiválasztani a feltöltéshez.', + msgSizeTooSmall: 'A fájl: "{name}" (<b>{size} KB</b>) mérete túl kicsi, nagyobbnak kell lennie, mint <b>{minSize} KB</b>.', + msgSizeTooLarge: '"{name}" fájl (<b>{size} KB</b>) mérete nagyobb a megengedettnél <b>{maxSize} KB</b>.', + msgFilesTooLess: 'Legalább <b>{n}</b> {files} ki kell választania a feltöltéshez.', + msgFilesTooMany: 'A feltölteni kívánt fájlok száma <b>({n})</b> elérte a megengedett maximumot <b>{m}</b>.', + msgFileNotFound: '"{name}" fájl nem található!', + msgFileSecured: 'Biztonsági beállítások nem engedik olvasni a fájlt "{name}".', + msgFileNotReadable: '"{name}" fájl nem olvasható.', + msgFilePreviewAborted: '"{name}" fájl feltöltése megszakítva.', + msgFilePreviewError: 'Hiba lépett fel a "{name}" fájl olvasása közben.', + msgInvalidFileName: 'Hibás vagy nem támogatott karakterek a fájl nevében "{name}".', + msgInvalidFileType: 'Nem megengedett fájl "{name}". Csak a "{types}" fájl típusok támogatottak.', + msgInvalidFileExtension: 'Nem megengedett kiterjesztés / fájltípus "{name}". Csak a "{extensions}" kiterjesztés(ek) / fájltípus(ok) támogatottak.', + msgFileTypes: { + 'image': 'image', + 'html': 'HTML', + 'text': 'text', + 'video': 'video', + 'audio': 'audio', + 'flash': 'flash', + 'pdf': 'PDF', + 'object': 'object' + }, + msgUploadAborted: 'A fájl feltöltés megszakítva', + msgUploadThreshold: 'Folyamatban...', + msgUploadBegin: 'Inicializálás...', + msgUploadEnd: 'Kész', + msgUploadResume: 'Resuming upload...', + msgUploadEmpty: 'Nincs érvényes adat a feltöltéshez.', + msgUploadError: 'Upload Error', + msgDeleteError: 'Delete Error', + msgProgressError: 'Error', + msgValidationError: 'Érvényesítés hiba', + msgLoading: '{index} / {files} töltése …', + msgProgress: 'Feltöltés: {index} / {files} - {name} - {percent}% kész.', + msgSelected: '{n} {files} kiválasztva.', + msgFoldersNotAllowed: 'Csak fájlokat húzzon ide! Kihagyva {n} könyvtár.', + msgImageWidthSmall: 'A kép szélességének "{name}" legalább {size} pixelnek kell lennie.', + msgImageHeightSmall: 'A kép magasságának "{name}" legalább {size} pixelnek kell lennie.', + msgImageWidthLarge: 'A kép szélessége "{name}" nem haladhatja meg a {size} pixelt.', + msgImageHeightLarge: 'A kép magassága "{name}" nem haladhatja meg a {size} pixelt.', + msgImageResizeError: 'Nem lehet megállapítani a kép méreteit az átméretezéshez.', + msgImageResizeException: 'Hiba történt a méretezés közben.<pre>{errors}</pre>', + msgAjaxError: 'Hiba történt a művelet közben ({operation}). Kérjük, próbálja később!', + msgAjaxProgressError: 'Hiba! ({operation})', + msgDuplicateFile: 'File "{name}" of same size "{size} KB" has already been selected earlier. Skipping duplicate selection.', + msgResumableUploadRetriesExceeded: 'Upload aborted beyond <b>{max}</b> retries for file <b>{file}</b>! Error Details: <pre>{error}</pre>', + msgPendingTime: '{time} remaining', + msgCalculatingTime: 'calculating time remaining', + ajaxOperations: { + deleteThumb: 'fájl törlés', + uploadThumb: 'fájl feltöltés', + uploadBatch: 'csoportos fájl feltöltés', + uploadExtra: 'űrlap adat feltöltés' + }, + dropZoneTitle: 'Húzzon ide fájlokat …', + dropZoneClickTitle: '<br>(vagy kattintson ide a {files} tallózásához...)', + fileActionSettings: { + removeTitle: 'A fájl eltávolítása', + uploadTitle: 'fájl feltöltése', + uploadRetryTitle: 'Feltöltés újból', + downloadTitle: 'Fájl letöltése', + zoomTitle: 'Részletek megtekintése', + dragTitle: 'Mozgatás / Átrendezés', + indicatorNewTitle: 'Nem feltöltött', + indicatorSuccessTitle: 'Feltöltött', + indicatorErrorTitle: 'Feltöltés hiba', + indicatorPausedTitle: 'Upload Paused', + indicatorLoadingTitle: 'Feltöltés ...' + }, + previewZoomButtonTitles: { + prev: 'Elöző fájl megnézése', + next: 'Következő fájl megnézése', + toggleheader: 'Fejléc mutatása', + fullscreen: 'Teljes képernyős mód bekapcsolása', + borderless: 'Keret nélküli ablak mód bekapcsolása', + close: 'Részletes előnézet bezárása' + } + }; +})(window.jQuery); diff --git a/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/id.js b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/id.js new file mode 100644 index 00000000..936e46e8 --- /dev/null +++ b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/id.js @@ -0,0 +1,112 @@ +/*! + * FileInput Indonesian Translations + * + * This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or + * any HTML markup tags in the messages must not be converted or translated. + * + * @see http://github.com/kartik-v/bootstrap-fileinput + * @author Bambang Riswanto <bamz3r@gmail.com> + * + * NOTE: this file must be saved in UTF-8 encoding. + */ +(function ($) { + "use strict"; + + $.fn.fileinputLocales['id'] = { + fileSingle: 'berkas', + filePlural: 'berkas', + browseLabel: 'Pilih berkas …', + removeLabel: 'Hapus', + removeTitle: 'Hapus berkas terpilih', + cancelLabel: 'Batal', + cancelTitle: 'Batalkan proses pengunggahan', + pauseLabel: 'Pause', + pauseTitle: 'Pause ongoing upload', + uploadLabel: 'Unggah', + uploadTitle: 'Unggah berkas terpilih', + msgNo: 'Tidak', + msgNoFilesSelected: '', + msgPaused: 'Paused', + msgCancelled: 'Dibatalkan', + msgPlaceholder: 'Pilih {files}...', + msgZoomModalHeading: 'Pratinjau terperinci', + msgFileRequired: 'Anda harus memilih berkas untuk diunggah.', + msgSizeTooSmall: 'Berkas "{name}" (<b>{size} KB</b>) terlalu kecil dan harus lebih besar dari <b>{minSize} KB</b>.', + msgSizeTooLarge: 'Berkas "{name}" (<b>{size} KB</b>) melebihi ukuran unggah maksimal yaitu <b>{maxSize} KB</b>.', + msgFilesTooLess: 'Anda harus memilih setidaknya <b>{n}</b> {files} untuk diunggah.', + msgFilesTooMany: '<b>({n})</b> berkas yang dipilih untuk diunggah melebihi ukuran unggah maksimal yaitu <b>{m}</b>.', + msgFileNotFound: 'Berkas "{name}" tak ditemukan!', + msgFileSecured: 'Sistem keamanan mencegah untuk membaca berkas "{name}".', + msgFileNotReadable: 'Berkas "{name}" tak dapat dibaca.', + msgFilePreviewAborted: 'Pratinjau untuk berkas "{name}" dibatalkan.', + msgFilePreviewError: 'Kesalahan saat membaca berkas "{name}".', + msgInvalidFileName: 'Karakter tidak dikenali atau tidak didukung untuk nama berkas "{name}".', + msgInvalidFileType: 'Jenis berkas "{name}" tidak sah. Hanya berkas "{types}" yang didukung.', + msgInvalidFileExtension: 'Ekstensi berkas "{name}" tidak sah. Hanya ekstensi "{extensions}" yang didukung.', + msgFileTypes: { + 'image': 'image', + 'html': 'HTML', + 'text': 'text', + 'video': 'video', + 'audio': 'audio', + 'flash': 'flash', + 'pdf': 'PDF', + 'object': 'object' + }, + msgUploadAborted: 'Proses Unggah berkas dibatalkan', + msgUploadThreshold: 'Memproses...', + msgUploadBegin: 'Menyiapkan...', + msgUploadEnd: 'Selesai', + msgUploadResume: 'Resuming upload...', + msgUploadEmpty: 'Tidak ada data valid yang tersedia untuk diunggah.', + msgUploadError: 'Upload Error', + msgDeleteError: 'Delete Error', + msgProgressError: 'Kesalahan', + msgValidationError: 'Kesalahan saat memvalidasi', + msgLoading: 'Memuat {index} dari {files} berkas …', + msgProgress: 'Memuat {index} dari {files} berkas - {name} - {percent}% selesai.', + msgSelected: '{n} {files} dipilih', + msgFoldersNotAllowed: 'Hanya tahan dan lepas file saja! {n} folder diabaikan.', + msgImageWidthSmall: 'Lebar dari gambar "{name}" harus sekurangnya {size} px.', + msgImageHeightSmall: 'Tinggi dari gambar "{name}" harus sekurangnya {size} px.', + msgImageWidthLarge: 'Lebar dari gambar "{name}" tak boleh melebihi {size} px.', + msgImageHeightLarge: 'Tinggi dari gambar "{name}" tak boleh melebihi {size} px.', + msgImageResizeError: 'Tidak dapat menentukan dimensi gambar untuk mengubah ukuran.', + msgImageResizeException: 'Kesalahan saat mengubah ukuran gambar.<pre>{errors}</pre>', + msgAjaxError: 'Terjadi kesalahan ketika melakukan operasi {operation}. Silahkan coba lagi nanti!', + msgAjaxProgressError: '{operation} gagal', + msgDuplicateFile: 'File "{name}" of same size "{size} KB" has already been selected earlier. Skipping duplicate selection.', + msgResumableUploadRetriesExceeded: 'Upload aborted beyond <b>{max}</b> retries for file <b>{file}</b>! Error Details: <pre>{error}</pre>', + msgPendingTime: '{time} remaining', + msgCalculatingTime: 'calculating time remaining', + ajaxOperations: { + deleteThumb: 'Hapus berkas', + uploadThumb: 'Unggah berkas', + uploadBatch: 'Unggah banyak berkas', + uploadExtra: 'Unggah form ekstra' + }, + dropZoneTitle: 'Tarik dan lepaskan berkas disini …', + dropZoneClickTitle: '<br>(atau klik untuk memilih {files})', + fileActionSettings: { + removeTitle: 'Hapus Berkas', + uploadTitle: 'Unggah Berkas', + uploadRetryTitle: 'Unggah Ulang', + downloadTitle: 'Unduh Berkas', + zoomTitle: 'Tampilkan Rincian', + dragTitle: 'Pindah atau Atur Ulang', + indicatorNewTitle: 'Belum diunggah', + indicatorSuccessTitle: 'Sudah diunggah', + indicatorErrorTitle: 'Kesalahan dalam mengungah', + indicatorPausedTitle: 'Upload Paused', + indicatorLoadingTitle: 'Mengunggah ...' + }, + previewZoomButtonTitles: { + prev: 'Lihat berkas sebelumnya', + next: 'Lihat berkas selanjutnya', + toggleheader: 'Beralih ke tajuk', + fullscreen: 'Beralih ke mode penuh', + borderless: 'Beralih ke mode tanpa tepi', + close: 'Tutup pratinjau terperinci' + } + }; +})(window.jQuery); diff --git a/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/it.js b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/it.js new file mode 100644 index 00000000..fd8e5c33 --- /dev/null +++ b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/it.js @@ -0,0 +1,113 @@ +/*! + * FileInput Italian Translation + * + * Author: Lorenzo Milesi <maxxer@yetopen.it> + * + * This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or + * any HTML markup tags in the messages must not be converted or translated. + * + * @see http://github.com/kartik-v/bootstrap-fileinput + * + * NOTE: this file must be saved in UTF-8 encoding. + */ +(function ($) { + "use strict"; + + $.fn.fileinputLocales['it'] = { + fileSingle: 'file', + filePlural: 'file', + browseLabel: 'Sfoglia…', + removeLabel: 'Rimuovi', + removeTitle: 'Rimuovi i file selezionati', + cancelLabel: 'Annulla', + cancelTitle: 'Annulla i caricamenti in corso', + pauseLabel: 'Pause', + pauseTitle: 'Pause ongoing upload', + uploadLabel: 'Carica', + uploadTitle: 'Carica i file selezionati', + msgNo: 'No', + msgNoFilesSelected: 'Nessun file selezionato', + msgPaused: 'Paused', + msgCancelled: 'Annullato', + msgPlaceholder: 'Seleziona {files}...', + msgZoomModalHeading: 'Anteprima dettagliata', + msgFileRequired: 'Devi selezionare un file da caricare.', + msgSizeTooSmall: 'Il file "{name}" (<b>{size} KB</b>) è troppo piccolo, deve essere almeno di <b>{minSize} KB</b>.', + msgSizeTooLarge: 'Il file "{name}" (<b>{size} KB</b>) eccede la dimensione massima di caricamento di <b>{maxSize} KB</b>.', + msgFilesTooLess: 'Devi selezionare almeno <b>{n}</b> {files} da caricare.', + msgFilesTooMany: 'Il numero di file selezionati per il caricamento <b>({n})</b> eccede il numero massimo di file accettati <b>{m}</b>.', + msgFileNotFound: 'File "{name}" non trovato!', + msgFileSecured: 'Restrizioni di sicurezza impediscono la lettura del file "{name}".', + msgFileNotReadable: 'Il file "{name}" non è leggibile.', + msgFilePreviewAborted: 'Generazione anteprima per "{name}" annullata.', + msgFilePreviewError: 'Errore durante la lettura del file "{name}".', + msgInvalidFileName: 'Carattere non valido o non supportato nel file "{name}".', + msgInvalidFileType: 'Tipo non valido per il file "{name}". Sono ammessi solo file di tipo "{types}".', + msgInvalidFileExtension: 'Estensione non valida per il file "{name}". Sono ammessi solo file con estensione "{extensions}".', + msgFileTypes: { + 'image': 'image', + 'html': 'HTML', + 'text': 'text', + 'video': 'video', + 'audio': 'audio', + 'flash': 'flash', + 'pdf': 'PDF', + 'object': 'object' + }, + msgUploadAborted: 'Il caricamento del file è stato interrotto', + msgUploadThreshold: 'In lavorazione...', + msgUploadBegin: 'Inizializzazione...', + msgUploadEnd: 'Fatto', + msgUploadResume: 'Resuming upload...', + msgUploadEmpty: 'Dati non disponibili', + msgUploadError: 'Upload Error', + msgDeleteError: 'Delete Error', + msgProgressError: 'Errore', + msgValidationError: 'Errore di convalida', + msgLoading: 'Caricamento file {index} di {files}…', + msgProgress: 'Caricamento file {index} di {files} - {name} - {percent}% completato.', + msgSelected: '{n} {files} selezionati', + msgFoldersNotAllowed: 'Trascina solo file! Ignorata/e {n} cartella/e.', + msgImageWidthSmall: 'La larghezza dell\'immagine "{name}" deve essere di almeno {size} px.', + msgImageHeightSmall: 'L\'altezza dell\'immagine "{name}" deve essere di almeno {size} px.', + msgImageWidthLarge: 'La larghezza dell\'immagine "{name}" non può superare {size} px.', + msgImageHeightLarge: 'L\'altezza dell\'immagine "{name}" non può superare {size} px.', + msgImageResizeError: 'Impossibile ottenere le dimensioni dell\'immagine per ridimensionare.', + msgImageResizeException: 'Errore durante il ridimensionamento dell\'immagine.<pre>{errors}</pre>', + msgAjaxError: 'Qualcosa non ha funzionato con l\'operazione {operation}. Per favore riprova più tardi!', + msgAjaxProgressError: '{operation} failed', + msgDuplicateFile: 'File "{name}" of same size "{size} KB" has already been selected earlier. Skipping duplicate selection.', + msgResumableUploadRetriesExceeded: 'Upload aborted beyond <b>{max}</b> retries for file <b>{file}</b>! Error Details: <pre>{error}</pre>', + msgPendingTime: '{time} remaining', + msgCalculatingTime: 'calculating time remaining', + ajaxOperations: { + deleteThumb: 'eliminazione file', + uploadThumb: 'caricamento file', + uploadBatch: 'caricamento file in batch', + uploadExtra: 'upload dati del form' + }, + dropZoneTitle: 'Trascina i file qui…', + dropZoneClickTitle: '<br>(o clicca per selezionare {files})', + fileActionSettings: { + removeTitle: 'Rimuovere il file', + uploadTitle: 'Caricare un file', + uploadRetryTitle: 'Riprova il caricamento', + downloadTitle: 'Scarica file', + zoomTitle: 'Guarda i dettagli', + dragTitle: 'Muovi / Riordina', + indicatorNewTitle: 'Non ancora caricato', + indicatorSuccessTitle: 'Caricati', + indicatorErrorTitle: 'Carica Errore', + indicatorPausedTitle: 'Upload Paused', + indicatorLoadingTitle: 'Caricamento ...' + }, + previewZoomButtonTitles: { + prev: 'Vedi il file precedente', + next: 'Vedi il file seguente', + toggleheader: 'Attiva header', + fullscreen: 'Attiva full screen', + borderless: 'Abilita modalità senza bordi', + close: 'Chiudi' + } + }; +})(window.jQuery); diff --git a/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/ja.js b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/ja.js new file mode 100644 index 00000000..912237de --- /dev/null +++ b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/ja.js @@ -0,0 +1,120 @@ +/*! + * FileInput Japanese Translations + * + * This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or + * any HTML markup tags in the messages must not be converted or translated. + * + * @see http://github.com/kartik-v/bootstrap-fileinput + * @author Yuta Hoshina <hoshina@gmail.com> + * + * NOTE: this file must be saved in UTF-8 encoding. + * slugCallback + * \u4e00-\u9fa5 : Kanji (Chinese characters) + * \u3040-\u309f : Hiragana (Japanese syllabary) + * \u30a0-\u30ff\u31f0-\u31ff : Katakana (including phonetic extension) + * \u3200-\u32ff : Enclosed CJK Letters and Months + * \uff00-\uffef : Halfwidth and Fullwidth Forms + */ +(function ($) { + "use strict"; + + $.fn.fileinputLocales['ja'] = { + fileSingle: 'ファイル', + filePlural: 'ファイル', + browseLabel: 'ファイルを選択…', + removeLabel: '削除', + removeTitle: '選択したファイルを削除', + cancelLabel: 'キャンセル', + cancelTitle: 'アップロードをキャンセル', + pauseLabel: 'Pause', + pauseTitle: 'Pause ongoing upload', + uploadLabel: 'アップロード', + uploadTitle: '選択したファイルをアップロード', + msgNo: 'いいえ', + msgNoFilesSelected: 'ファイルが選択されていません', + msgPaused: 'Paused', + msgCancelled: 'キャンセル', + msgPlaceholder: 'Select {files}...', + msgZoomModalHeading: 'プレビュー', + msgFileRequired: 'ファイルを選択してください', + msgSizeTooSmall: 'ファイル"{name}" (<b>{size} KB</b>)はアップロード可能な下限容量<b>{minSize} KB</b>より小さいです', + msgSizeTooLarge: 'ファイル"{name}" (<b>{size} KB</b>)はアップロード可能な上限容量<b>{maxSize} KB</b>を超えています', + msgFilesTooLess: '最低<b>{n}</b>個の{files}を選択してください', + msgFilesTooMany: '選択したファイルの数<b>({n}個)</b>はアップロード可能な上限数<b>({m}個)</b>を超えています', + msgFileNotFound: 'ファイル"{name}"はありませんでした', + msgFileSecured: 'ファイル"{name}"は読み取り権限がないため取得できません', + msgFileNotReadable: 'ファイル"{name}"は読み込めません', + msgFilePreviewAborted: 'ファイル"{name}"のプレビューを中止しました', + msgFilePreviewError: 'ファイル"{name}"の読み込み中にエラーが発生しました', + msgInvalidFileName: 'ファイル名に無効な文字が含まれています "{name}".', + msgInvalidFileType: '"{name}"は無効なファイル形式です。"{types}"形式のファイルのみサポートしています', + msgInvalidFileExtension: '"{name}"は無効な拡張子です。拡張子が"{extensions}"のファイルのみサポートしています', + msgFileTypes: { + 'image': 'image', + 'html': 'HTML', + 'text': 'text', + 'video': 'video', + 'audio': 'audio', + 'flash': 'flash', + 'pdf': 'PDF', + 'object': 'object' + }, + msgUploadAborted: 'ファイルのアップロードが中止されました', + msgUploadThreshold: '処理中...', + msgUploadBegin: '初期化中...', + msgUploadEnd: '完了', + msgUploadResume: 'Resuming upload...', + msgUploadEmpty: 'アップロードに有効なデータがありません', + msgUploadError: 'Upload Error', + msgDeleteError: 'Delete Error', + msgProgressError: 'エラー', + msgValidationError: '検証エラー', + msgLoading: '{files}個中{index}個目のファイルを読み込み中…', + msgProgress: '{files}個中{index}個のファイルを読み込み中 - {name} - {percent}% 完了', + msgSelected: '{n}個の{files}を選択', + msgFoldersNotAllowed: 'ドラッグ&ドロップが可能なのはファイルのみです。{n}個のフォルダ-は無視されました', + msgImageWidthSmall: '画像ファイル"{name}"の幅が小さすぎます。画像サイズの幅は少なくとも{size}px必要です', + msgImageHeightSmall: '画像ファイル"{name}"の高さが小さすぎます。画像サイズの高さは少なくとも{size}px必要です', + msgImageWidthLarge: '画像ファイル"{name}"の幅がアップロード可能な画像サイズ({size}px)を超えています', + msgImageHeightLarge: '画像ファイル"{name}"の高さがアップロード可能な画像サイズ({size}px)を超えています', + msgImageResizeError: 'リサイズ時に画像サイズが取得できませんでした', + msgImageResizeException: '画像のリサイズ時にエラーが発生しました。<pre>{errors}</pre>', + msgAjaxError: '{operation}実行中にエラーが発生しました。時間をおいてもう一度お試しください。', + msgAjaxProgressError: '{operation} failed', + msgDuplicateFile: 'File "{name}" of same size "{size} KB" has already been selected earlier. Skipping duplicate selection.', + msgResumableUploadRetriesExceeded: 'Upload aborted beyond <b>{max}</b> retries for file <b>{file}</b>! Error Details: <pre>{error}</pre>', + msgPendingTime: '{time} remaining', + msgCalculatingTime: 'calculating time remaining', + ajaxOperations: { + deleteThumb: 'ファイル削除', + uploadThumb: 'ファイルアップロード', + uploadBatch: '一括ファイルアップロード', + uploadExtra: 'フォームデータアップロード' + }, + dropZoneTitle: 'ファイルをドラッグ&ドロップ…', + dropZoneClickTitle: '<br>(または クリックして{files}を選択 )', + slugCallback: function(text) { + return text ? text.split(/(\\|\/)/g).pop().replace(/[^\w\u4e00-\u9fa5\u3040-\u309f\u30a0-\u30ff\u31f0-\u31ff\u3200-\u32ff\uff00-\uffef\-.\\\/ ]+/g, '') : ''; + }, + fileActionSettings: { + removeTitle: 'ファイルを削除', + uploadTitle: 'ファイルをアップロード', + uploadRetryTitle: '再アップロード', + zoomTitle: 'プレビュー', + dragTitle: '移動 / 再配置', + indicatorNewTitle: 'まだアップロードされていません', + indicatorSuccessTitle: 'アップロード済み', + indicatorErrorTitle: 'アップロード失敗', + indicatorPausedTitle: 'Upload Paused', + indicatorLoadingTitle: 'アップロード中...' + }, + previewZoomButtonTitles: { + prev: '前のファイルを表示', + next: '次のファイルを表示', + toggleheader: 'ファイル情報の表示/非表示', + fullscreen: 'フルスクリーン表示の開始/終了', + borderless: 'フルウィンドウ表示の開始/終了', + close: 'プレビューを閉じる' + } + }; +})(window.jQuery); diff --git a/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/ka.js b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/ka.js new file mode 100644 index 00000000..f5c552c3 --- /dev/null +++ b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/ka.js @@ -0,0 +1,112 @@ +/*! + * FileInput Georgian Translations + * + * This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or + * any HTML markup tags in the messages must not be converted or translated. + * + * @see http://github.com/kartik-v/bootstrap-fileinput + * @author Avtandil Kikabidze aka LONGMAN <akalongman@gmail.com> + * + * NOTE: this file must be saved in UTF-8 encoding. + */ +(function ($) { + "use strict"; + + $.fn.fileinputLocales['ka'] = { + fileSingle: 'ფაილი', + filePlural: 'ფაილები', + browseLabel: 'არჩევა …', + removeLabel: 'წაშლა', + removeTitle: 'არჩეული ფაილების წაშლა', + cancelLabel: 'გაუქმება', + cancelTitle: 'მიმდინარე ატვირთვის გაუქმება', + pauseLabel: 'Pause', + pauseTitle: 'Pause ongoing upload', + uploadLabel: 'ატვირთვა', + uploadTitle: 'არჩეული ფაილების ატვირთვა', + msgNo: 'არა', + msgNoFilesSelected: 'ფაილები არ არის არჩეული', + msgPaused: 'Paused', + msgCancelled: 'გაუქმებულია', + msgPlaceholder: 'აირჩიეთ {files}...', + msgZoomModalHeading: 'დეტალურად ნახვა', + msgFileRequired: 'ატვირთვისთვის აუცილებელია ფაილის არჩევა.', + msgSizeTooSmall: 'ფაილი "{name}" (<b>{size} KB</b>) არის ძალიან პატარა. მისი ზომა უნდა იყოს არანაკლებ <b>{minSize} KB</b>.', + msgSizeTooLarge: 'ფაილი "{name}" (<b>{size} KB</b>) აჭარბებს მაქსიმალურ დასაშვებ ზომას <b>{maxSize} KB</b>.', + msgFilesTooLess: 'უნდა აირჩიოთ მინიმუმ <b>{n}</b> {file} ატვირთვისთვის.', + msgFilesTooMany: 'არჩეული ფაილების რაოდენობა <b>({n})</b> აჭარბებს დასაშვებ ლიმიტს <b>{m}</b>.', + msgFileNotFound: 'ფაილი "{name}" არ მოიძებნა!', + msgFileSecured: 'უსაფრთხოებით გამოწვეული შეზღუდვები კრძალავს ფაილის "{name}" წაკითხვას.', + msgFileNotReadable: 'ფაილის "{name}" წაკითხვა შეუძლებელია.', + msgFilePreviewAborted: 'პრევიუ გაუქმებულია ფაილისათვის "{name}".', + msgFilePreviewError: 'დაფიქსირდა შეცდომა ფაილის "{name}" კითხვისას.', + msgInvalidFileName: 'ნაპოვნია დაუშვებელი სიმბოლოები ფაილის "{name}" სახელში.', + msgInvalidFileType: 'ფაილს "{name}" გააჩნია დაუშვებელი ტიპი. მხოლოდ "{types}" ტიპის ფაილები არის დაშვებული.', + msgInvalidFileExtension: 'ფაილს "{name}" გააჩნია დაუშვებელი გაფართოება. მხოლოდ "{extensions}" გაფართოების ფაილები არის დაშვებული.', + msgFileTypes: { + 'image': 'image', + 'html': 'HTML', + 'text': 'text', + 'video': 'video', + 'audio': 'audio', + 'flash': 'flash', + 'pdf': 'PDF', + 'object': 'object' + }, + msgUploadAborted: 'ფაილის ატვირთვა შეწყდა', + msgUploadThreshold: 'მუშავდება...', + msgUploadBegin: 'ინიციალიზაცია...', + msgUploadEnd: 'დასრულებულია', + msgUploadResume: 'Resuming upload...', + msgUploadEmpty: 'ატვირთვისთვის დაუშვებელი მონაცემები.', + msgUploadError: 'Upload Error', + msgDeleteError: 'Delete Error', + msgProgressError: 'ატვირთვის შეცდომა', + msgValidationError: 'ვალიდაციის შეცდომა', + msgLoading: 'ატვირთვა {index} / {files} …', + msgProgress: 'ფაილის ატვირთვა დასრულებულია {index} / {files} - {name} - {percent}%.', + msgSelected: 'არჩეულია {n} {file}', + msgFoldersNotAllowed: 'დაშვებულია მხოლოდ ფაილების გადმოთრევა! გამოტოვებულია {n} გადმოთრეული ფოლდერი.', + msgImageWidthSmall: 'სურათის "{name}" სიგანე უნდა იყოს არანაკლებ {size} px.', + msgImageHeightSmall: 'სურათის "{name}" სიმაღლე უნდა იყოს არანაკლებ {size} px.', + msgImageWidthLarge: 'სურათის "{name}" სიგანე არ უნდა აღემატებოდეს {size} px-ს.', + msgImageHeightLarge: 'სურათის "{name}" სიმაღლე არ უნდა აღემატებოდეს {size} px-ს.', + msgImageResizeError: 'ვერ მოხერხდა სურათის ზომის შეცვლისთვის საჭირო მონაცემების გარკვევა.', + msgImageResizeException: 'შეცდომა სურათის ზომის შეცვლისას.<pre>{errors}</pre>', + msgAjaxError: 'დაფიქსირდა შეცდომა ოპერაციის {operation} შესრულებისას. ცადეთ მოგვიანებით!', + msgAjaxProgressError: 'ვერ მოხერხდა ოპერაციის {operation} შესრულება', + msgDuplicateFile: 'File "{name}" of same size "{size} KB" has already been selected earlier. Skipping duplicate selection.', + msgResumableUploadRetriesExceeded: 'Upload aborted beyond <b>{max}</b> retries for file <b>{file}</b>! Error Details: <pre>{error}</pre>', + msgPendingTime: '{time} remaining', + msgCalculatingTime: 'calculating time remaining', + ajaxOperations: { + deleteThumb: 'ფაილის წაშლა', + uploadThumb: 'ფაილის ატვირთვა', + uploadBatch: 'ფაილების ატვირთვა', + uploadExtra: 'მონაცემების გაგზავნა ფორმიდან' + }, + dropZoneTitle: 'გადმოათრიეთ ფაილები აქ …', + dropZoneClickTitle: '<br>(ან დააჭირეთ რათა აირჩიოთ {files})', + fileActionSettings: { + removeTitle: 'ფაილის წაშლა', + uploadTitle: 'ფაილის ატვირთვა', + uploadRetryTitle: 'ატვირთვის გამეორება', + downloadTitle: 'ფაილის ჩამოტვირთვა', + zoomTitle: 'დეტალურად ნახვა', + dragTitle: 'გადაადგილება / მიმდევრობის შეცვლა', + indicatorNewTitle: 'ჯერ არ ატვირთულა', + indicatorSuccessTitle: 'ატვირთულია', + indicatorErrorTitle: 'ატვირთვის შეცდომა', + indicatorPausedTitle: 'Upload Paused', + indicatorLoadingTitle: 'ატვირთვა ...' + }, + previewZoomButtonTitles: { + prev: 'წინა ფაილის ნახვა', + next: 'შემდეგი ფაილის ნახვა', + toggleheader: 'სათაურის დამალვა', + fullscreen: 'მთელ ეკრანზე გაშლა', + borderless: 'მთელ გვერდზე გაშლა', + close: 'დახურვა' + } + }; +})(window.jQuery); diff --git a/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/kr.js b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/kr.js new file mode 100644 index 00000000..0cee688e --- /dev/null +++ b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/kr.js @@ -0,0 +1,111 @@ +/*! + * FileInput Korean Translations + * + * This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or + * any HTML markup tags in the messages must not be converted or translated. + * + * @see http://github.com/kartik-v/bootstrap-fileinput + * + * NOTE: this file must be saved in UTF-8 encoding. + */ +(function ($) { + "use strict"; + + $.fn.fileinputLocales['kr'] = { + fileSingle: '파일', + filePlural: '파일들', + browseLabel: '찾아보기 …', + removeLabel: '지우기', + removeTitle: '선택한 파일들 지우기', + cancelLabel: '취소', + cancelTitle: '진행중인 업로드 중단', + pauseLabel: 'Pause', + pauseTitle: 'Pause ongoing upload', + uploadLabel: '업로드', + uploadTitle: '선택한 파일 업로드', + msgNo: '아니요', + msgNoFilesSelected: '선택한 파일이 없습니다', + msgPaused: 'Paused', + msgCancelled: '취소되었습니다', + msgPlaceholder: '{files} 선택...', + msgZoomModalHeading: '세부 정보', + msgFileRequired: '업로드를 위해 반드시 파일을 선택해야 합니다.', + msgSizeTooSmall: '파일 "{name}" (<b>{size} KB</b>)이 너무 작습니다. <b>{minSize} KB</b>보다 용량이 커야 합니다..', + msgSizeTooLarge: '파일 "{name}" (<b>{size} KB</b>)이 너무 큽니다. 허용 파일 사이즈는 <b>{maxSize} KB</b>.입니다.', + msgFilesTooLess: '업로드하기 위해 최소 <b>{n}</b> {files}개의 파일을 선택해야 합니다.', + msgFilesTooMany: '선택한 파일의 수 <b>({n})</b>가 업로드 허용 최고치인 <b>{m}</b>를 넘었습니다..', + msgFileNotFound: '파일 "{name}"을 찾을 수 없습니다.!', + msgFileSecured: '보안상의 이유로 "{name}"을/를 읽을 수 없습니다..', + msgFileNotReadable: '"{name}"은/는 읽을 수 없습니다.', + msgFilePreviewAborted: '"{name}"의 미리보기가 중단되었습니다.', + msgFilePreviewError: '"{name}"을/를 읽는 도중 에러가 발생했습니다.', + msgInvalidFileName: '파일 이름 "{name}" 중 지원 불가능한 문자가 포함되어 있습니다.', + msgInvalidFileType: '"{name}"의 타입은 지원하지 않습니다. "{types}" 타입의 파일을 선택해 주십시요.', + msgInvalidFileExtension: '"{name}"의 확장자는 지원하지 않습니다. "{extensions}" 확장자를 선택해 주십시요.', + msgFileTypes: { + 'image': 'image', + 'html': 'HTML', + 'text': 'text', + 'video': 'video', + 'audio': 'audio', + 'flash': 'flash', + 'pdf': 'PDF', + 'object': 'object' + }, + msgUploadAborted: '파일 업로드가 중단되었습니다', + msgUploadThreshold: '처리하는 중...', + msgUploadBegin: '초기화 중...', + msgUploadEnd: '완료', + msgUploadResume: 'Resuming upload...', + msgUploadEmpty: '업로드 가능한 데이터가 존재하지 않습니다.', + msgUploadError: 'Upload Error', + msgDeleteError: 'Delete Error', + msgProgressError: '오류', + msgValidationError: '유효성 오류', + msgLoading: '{index}/{files}번째 파일을 불러오는 중입니다. …', + msgProgress: '{index}/{files} - {name} - {percent}% 불러오기 완료.', + msgSelected: '{n} {files}이 선택 되었습니다.', + msgFoldersNotAllowed: '파일만 마우스로 끌어올 수 있습니다! 끌어온 폴더는 건너뜁니다.', + msgImageWidthSmall: '"{name}"의 가로는 {size} px 보다 넓어야 합니다.', + msgImageHeightSmall: '"{name}"의 세로는 {size} px 보다 높아야 합니다.', + msgImageWidthLarge: '"{name}"의 가로는 {size} px를 넘을 수 없습니다.', + msgImageHeightLarge: '"{name}"의 세로는 {size} px를 넘을 수 없습니다.', + msgImageResizeError: '이미지의 치수를 가져올 수 없습니다', + msgImageResizeException: '이미지 사이즈 재조정이 다음 이유로 실패했습니다.<pre>{errors}</pre>', + msgAjaxError: '{operation} 실행 도중 실패했습니다. 잠시 후 다시 시도해 주세요!', + msgAjaxProgressError: '{operation} failed', + msgDuplicateFile: 'File "{name}" of same size "{size} KB" has already been selected earlier. Skipping duplicate selection.', + msgResumableUploadRetriesExceeded: 'Upload aborted beyond <b>{max}</b> retries for file <b>{file}</b>! Error Details: <pre>{error}</pre>', + msgPendingTime: '{time} remaining', + msgCalculatingTime: 'calculating time remaining', + ajaxOperations: { + deleteThumb: 'file delete', + uploadThumb: 'file upload', + uploadBatch: 'batch file upload', + uploadExtra: 'form data upload' + }, + dropZoneTitle: '마우스로 파일을 끌어오세요 …', + dropZoneClickTitle: '<br>(또는 {files} 선택을 위해 클릭하십시요)', + fileActionSettings: { + removeTitle: '파일 지우기', + uploadTitle: '파일 업로드', + uploadRetryTitle: '업로드 재시도', + downloadTitle: '파일 다운로드', + zoomTitle: '세부 정보 보기', + dragTitle: '옮기기 / 재배열하기', + indicatorNewTitle: '아직 업로드 되지 않았습니다', + indicatorSuccessTitle: '업로드 성공', + indicatorErrorTitle: '업로드 중 에러 발생', + indicatorPausedTitle: 'Upload Paused', + indicatorLoadingTitle: '업로드 중 ...' + }, + previewZoomButtonTitles: { + prev: '이전 파일', + next: '다음 파일', + toggleheader: '머릿글 토글', + fullscreen: '전체화면 토글', + borderless: '창 테두리 토글', + close: '세부 정보 닫기' + } + }; +})(window.jQuery); diff --git a/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/kz.js b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/kz.js new file mode 100644 index 00000000..8ec28c62 --- /dev/null +++ b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/kz.js @@ -0,0 +1,99 @@ +/*! + * FileInput Kazakh Translations + * + * This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or + * any HTML markup tags in the messages must not be converted or translated. + * + * @see http://github.com/kartik-v/bootstrap-fileinput + * @author Kali Toleugazy <almatytol@gmail.com> + * + * NOTE: this file must be saved in UTF-8 encoding. + */ +(function ($) { + "use strict"; + + $.fn.fileinputLocales['kz'] = { + fileSingle: 'файл', + filePlural: 'файлдар', + browseLabel: 'Таңдау …', + removeLabel: 'Жою', + removeTitle: 'Таңдалған файлдарды жою', + cancelLabel: 'Күшін жою', + cancelTitle: 'Ағымдағы жүктеуді болдырмау', + pauseLabel: 'Pause', + pauseTitle: 'Pause ongoing upload', + uploadLabel: 'Жүктеу', + uploadTitle: 'Таңдалған файлдарды жүктеу', + msgNo: 'жоқ', + msgNoFilesSelected: 'Файл таңдалмады', + msgPaused: 'Paused', + msgCancelled: 'Күші жойылған', + msgPlaceholder: 'Select {files}...', + msgZoomModalHeading: 'Алдын ала толық көру', + msgSizeTooLarge: 'Файл "{name}" (<b>{size} KB</b>) ең үлкен <b>{maxSize} KB</b> өлшемінен асады.', + msgFilesTooLess: 'Жүктеу үшіy кемінде <b>{n}</b> {files} таңдау керек.', + msgFilesTooMany: 'Таңдалған <b>({n})</b> файлдардың саны берілген <b>{m}</b> саннан асып кетті.', + msgFileNotFound: 'Файл "{name}" табылмады!', + msgFileSecured: 'Шектеу қауіпсіздігі "{name}" файлын оқуға тыйым салады.', + msgFileNotReadable: '"{name}" файлды оқу мүмкін емес.', + msgFilePreviewAborted: '"{name}" файл үшін алдын ала қарап көру тыйым салынған.', + msgFilePreviewError: '"{name}" файлды оқығанда қате пайда болды.', + msgInvalidFileType: '"{name}" тыйым салынған файл түрі. Тек мынаналарға рұқсат етілген: "{types}"', + msgInvalidFileExtension: '"{name}" тыйым салынған файл кеңейтімі. Тек "{extensions}" рұқсат.', + msgUploadAborted: 'Файлды жүктеу доғарылды', + msgUploadThreshold: 'Өңдеу...', + msgUploadBegin: 'Initializing...', + msgUploadEnd: 'Done', + msgUploadResume: 'Resuming upload...', + msgUploadEmpty: 'No valid data available for upload.', + msgUploadError: 'Upload Error', + msgDeleteError: 'Delete Error', + msgProgressError: 'Error', + msgValidationError: 'Тексеру қатесі', + msgLoading: '{index} файлды {files} … жүктеу', + msgProgress: '{index} файлды {files} - {name} - {percent}% жүктеу аяқталды.', + msgSelected: 'Таңдалған файлдар саны: {n}', + msgFoldersNotAllowed: 'Тек файлдарды сүйреу рұқсат! {n} папка өткізілген.', + msgImageWidthSmall: '{name} суреттің ені {size} px. аз болмау керек', + msgImageHeightSmall: '{name} суреттің биіктігі {size} px. аз болмау керек', + msgImageWidthLarge: '"{name}" суреттің ені {size} px. аспау керек', + msgImageHeightLarge: '"{name}" суреттің биіктігі {size} px. аспау керек', + msgImageResizeError: 'Суреттің өлшемін өзгерту үшін, мөлшері алынбады', + msgImageResizeException: 'Суреттің мөлшерлерін өзгерткен кезде қателік пайда болды.<pre>{errors}</pre>', + msgAjaxError: 'Something went wrong with the {operation} operation. Please try again later!', + msgAjaxProgressError: '{operation} failed', + msgDuplicateFile: 'File "{name}" of same size "{size} KB" has already been selected earlier. Skipping duplicate selection.', + msgResumableUploadRetriesExceeded: 'Upload aborted beyond <b>{max}</b> retries for file <b>{file}</b>! Error Details: <pre>{error}</pre>', + msgPendingTime: '{time} remaining', + msgCalculatingTime: 'calculating time remaining', + ajaxOperations: { + deleteThumb: 'file delete', + uploadThumb: 'file upload', + uploadBatch: 'batch file upload', + uploadExtra: 'form data upload' + }, + dropZoneTitle: 'Файлдарды осында сүйреу …', + dropZoneClickTitle: '<br>(or click to select {files})', + fileActionSettings: { + removeTitle: 'Файлды өшіру', + uploadTitle: 'Файлды жүктеу', + uploadRetryTitle: 'Retry upload', + downloadTitle: 'Download file', + zoomTitle: 'мәліметтерді көру', + dragTitle: 'Орнын ауыстыру', + indicatorNewTitle: 'Жүктелген жоқ', + indicatorSuccessTitle: 'Жүктелген', + indicatorErrorTitle: 'Жүктелу қатесі ', + indicatorPausedTitle: 'Upload Paused', + indicatorLoadingTitle: 'Жүктелу ...' + }, + previewZoomButtonTitles: { + prev: 'Алдыңғы файлды қарау', + next: 'Келесі файлды қарау', + toggleheader: 'Тақырыпты ауыстыру', + fullscreen: 'Толық экран режимін қосу', + borderless: 'Жиексіз режиміне ауысу', + close: 'Толық көрінісін жабу' + } + }; +})(window.jQuery); diff --git a/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/lt.js b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/lt.js new file mode 100644 index 00000000..f5c007a3 --- /dev/null +++ b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/lt.js @@ -0,0 +1,111 @@ +/*! + * FileInput <_LANG_> Translations + * + * This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or + * any HTML markup tags in the messages must not be converted or translated. + * + * @see http://github.com/kartik-v/bootstrap-fileinput + * @author Mindaugas Varkalys <varkalys.mindaugas@gmail.com> + * + * NOTE: this file must be saved in UTF-8 encoding. + */ +(function ($) { + "use strict"; + + $.fn.fileinputLocales['lt'] = { + fileSingle: 'failas', + filePlural: 'failai', + browseLabel: 'Naršyti …', + removeLabel: 'Šalinti', + removeTitle: 'Pašalinti pasirinktus failus', + cancelLabel: 'Atšaukti', + cancelTitle: 'Atšaukti vykstantį įkėlimą', + pauseLabel: 'Pause', + pauseTitle: 'Pause ongoing upload', + uploadLabel: 'Įkelti', + uploadTitle: 'Įkelti pasirinktus failus', + msgNo: 'Ne', + msgNoFilesSelected: 'Nepasirinkta jokių failų', + msgPaused: 'Paused', + msgCancelled: 'Atšaukta', + msgPlaceholder: 'Select {files}...', + msgZoomModalHeading: 'Detali Peržiūra', + msgFileRequired: 'Pasirinkite failą įkėlimui.', + msgSizeTooSmall: 'Failas "{name}" (<b>{size} KB</b>) yra per mažas ir turi būti didesnis nei <b>{minSize} KB</b>.', + msgSizeTooLarge: 'Failas "{name}" (<b>{size} KB</b>) viršija maksimalų leidžiamą įkeliamo failo dydį <b>{maxSize} KB</b>.', + msgFilesTooLess: 'Turite pasirinkti bent <b>{n}</b> failus įkėlimui.', + msgFilesTooMany: 'Įkėlimui pasirinktų failų skaičius <b>({n})</b> viršija maksimalų leidžiamą limitą <b>{m}</b>.', + msgFileNotFound: 'Failas "{name}" nerastas!', + msgFileSecured: 'Saugumo apribojimai neleidžia perskaityti failo "{name}".', + msgFileNotReadable: 'Failas "{name}" neperskaitomas.', + msgFilePreviewAborted: 'Failo peržiūra nutraukta "{name}".', + msgFilePreviewError: 'Įvyko klaida skaitant failą "{name}".', + msgInvalidFileName: 'Klaidingi arba nepalaikomi simboliai failo pavadinime "{name}".', + msgInvalidFileType: 'Klaidingas failo "{name}" tipas. Tik "{types}" tipai yra palaikomi.', + msgInvalidFileExtension: 'Klaidingas failo "{name}" plėtinys. Tik "{extensions}" plėtiniai yra palaikomi.', + msgFileTypes: { + 'image': 'paveikslėlis', + 'html': 'HTML', + 'text': 'tekstas', + 'video': 'vaizdo įrašas', + 'audio': 'garso įrašas', + 'flash': 'flash', + 'pdf': 'PDF', + 'object': 'objektas' + }, + msgUploadAborted: 'Failo įkėlimas buvo nutrauktas', + msgUploadThreshold: 'Vykdoma...', + msgUploadBegin: 'Inicijuojama...', + msgUploadEnd: 'Baigta', + msgUploadResume: 'Resuming upload...', + msgUploadEmpty: 'Nėra teisingų duomenų įkėlimui.', + msgUploadError: 'Upload Error', + msgDeleteError: 'Delete Error', + msgProgressError: 'Klaida', + msgValidationError: 'Validacijos Klaida', + msgLoading: 'Keliamas failas {index} iš {files} …', + msgProgress: 'Keliamas failas {index} iš {files} - {name} - {percent}% baigta.', + msgSelected: 'Pasirinkti {n} {files}', + msgFoldersNotAllowed: 'Tempkite tik failus! Praleisti {n} nutempti aplankalas(-i).', + msgImageWidthSmall: 'Paveikslėlio "{name}" plotis turi būti bent {size} px.', + msgImageHeightSmall: 'Paveikslėlio "{name}" aukštis turi būti bent {size} px.', + msgImageWidthLarge: 'Paveikslėlio "{name}" plotis negali viršyti {size} px.', + msgImageHeightLarge: 'Paveikslėlio "{name}" aukštis negali viršyti {size} px.', + msgImageResizeError: 'Nepavyksta gauti paveikslėlio matmetų, kad pakeisti jo matmemis.', + msgImageResizeException: 'Klaida keičiant paveikslėlio matmenis.<pre>{errors}</pre>', + msgAjaxError: 'Kažkas nutiko vykdant {operation} operaciją. Prašome pabandyti vėliau!', + msgAjaxProgressError: '{operation} operacija nesėkminga', + msgDuplicateFile: 'File "{name}" of same size "{size} KB" has already been selected earlier. Skipping duplicate selection.', + msgResumableUploadRetriesExceeded: 'Upload aborted beyond <b>{max}</b> retries for file <b>{file}</b>! Error Details: <pre>{error}</pre>', + msgPendingTime: '{time} remaining', + msgCalculatingTime: 'calculating time remaining', + ajaxOperations: { + deleteThumb: 'failo trynimo', + uploadThumb: 'failo įkėlimo', + uploadBatch: 'failų rinkinio įkėlimo', + uploadExtra: 'formos duomenų įkėlimo' + }, + dropZoneTitle: 'Tempkite failus čia …', + dropZoneClickTitle: '<br>(arba paspauskite, kad pasirinktumėte failus)', + fileActionSettings: { + removeTitle: 'Šalinti failą', + uploadTitle: 'Įkelti failą', + uploadRetryTitle: 'Bandyti įkelti vėl', + zoomTitle: 'Peržiūrėti detales', + dragTitle: 'Perstumti', + indicatorNewTitle: 'Dar neįkelta', + indicatorSuccessTitle: 'Įkelta', + indicatorErrorTitle: 'Įkėlimo Klaida', + indicatorPausedTitle: 'Upload Paused', + indicatorLoadingTitle: 'Įkeliama ...' + }, + previewZoomButtonTitles: { + prev: 'Peržiūrėti ankstesnį failą', + next: 'Peržiūrėti kitą failą', + toggleheader: 'Perjungti viršutinę juostą', + fullscreen: 'Perjungti pilno ekrano rėžimą', + borderless: 'Perjungti berėmį režimą', + close: 'Uždaryti detalią peržiūrą' + } + }; +})(window.jQuery);
\ No newline at end of file diff --git a/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/nl.js b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/nl.js new file mode 100644 index 00000000..cc462627 --- /dev/null +++ b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/nl.js @@ -0,0 +1,111 @@ +/*! + * FileInput Dutch Translations + * + * This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or + * any HTML markup tags in the messages must not be converted or translated. + * + * @see http://github.com/kartik-v/bootstrap-fileinput + * + * NOTE: this file must be saved in UTF-8 encoding. + */ +(function ($) { + "use strict"; + + $.fn.fileinputLocales['nl'] = { + fileSingle: 'bestand', + filePlural: 'bestanden', + browseLabel: 'Zoek …', + removeLabel: 'Verwijder', + removeTitle: 'Verwijder geselecteerde bestanden', + cancelLabel: 'Annuleren', + cancelTitle: 'Annuleer upload', + pauseLabel: 'Pause', + pauseTitle: 'Pause ongoing upload', + uploadLabel: 'Upload', + uploadTitle: 'Upload geselecteerde bestanden', + msgNo: 'Nee', + msgNoFilesSelected: '', + msgPaused: 'Paused', + msgCancelled: 'Geannuleerd', + msgPlaceholder: 'Selecteer {files}...', + msgZoomModalHeading: 'Gedetailleerd voorbeeld', + msgFileRequired: 'U moet een bestand kiezen om te uploaden.', + msgSizeTooSmall: 'Bestand "{name}" (<b>{size} KB</b>) is te klein en moet groter zijn dan <b>{minSize} KB</b>.', + msgSizeTooLarge: 'Bestand "{name}" (<b>{size} KB</b>) is groter dan de toegestane <b>{maxSize} KB</b>.', + msgFilesTooLess: 'U moet minstens <b>{n}</b> {files} selecteren om te uploaden.', + msgFilesTooMany: 'Aantal geselecteerde bestanden <b>({n})</b> is meer dan de toegestane <b>{m}</b>.', + msgFileNotFound: 'Bestand "{name}" niet gevonden!', + msgFileSecured: 'Bestand kan niet gelezen worden in verband met beveiligings redenen "{name}".', + msgFileNotReadable: 'Bestand "{name}" is niet leesbaar.', + msgFilePreviewAborted: 'Bestand weergaven geannuleerd voor "{name}".', + msgFilePreviewError: 'Er is een fout opgetreden met het lezen van "{name}".', + msgInvalidFileName: 'Ongeldige of niet ondersteunde karakters in bestandsnaam "{name}".', + msgInvalidFileType: 'Geen geldig bestand "{name}". Alleen "{types}" zijn toegestaan.', + msgInvalidFileExtension: 'Geen geldige extensie "{name}". Alleen "{extensions}" zijn toegestaan.', + msgFileTypes: { + 'image': 'afbeelding', + 'html': 'HTML', + 'text': 'tekst', + 'video': 'video', + 'audio': 'geluid', + 'flash': 'flash', + 'pdf': 'PDF', + 'object': 'object' + }, + msgUploadAborted: 'Het uploaden van bestanden is afgebroken', + msgUploadThreshold: 'Verwerken...', + msgUploadBegin: 'Initialiseren...', + msgUploadEnd: 'Gedaan', + msgUploadResume: 'Resuming upload...', + msgUploadEmpty: 'Geen geldige data beschikbaar voor upload.', + msgUploadError: 'Upload Error', + msgDeleteError: 'Delete Error', + msgProgressError: 'Error', + msgValidationError: 'Bevestiging fout', + msgLoading: 'Bestanden laden {index} van de {files} …', + msgProgress: 'Bestanden laden {index} van de {files} - {name} - {percent}% compleet.', + msgSelected: '{n} {files} geselecteerd', + msgFoldersNotAllowed: 'Drag & drop alleen bestanden! {n} overgeslagen map(pen).', + msgImageWidthSmall: 'Breedte van het foto-bestand "{name}" moet minstens {size} px zijn.', + msgImageHeightSmall: 'Hoogte van het foto-bestand "{name}" moet minstens {size} px zijn.', + msgImageWidthLarge: 'Breedte van het foto-bestand "{name}" kan niet hoger zijn dan {size} px.', + msgImageHeightLarge: 'Hoogte van het foto bestand "{name}" kan niet hoger zijn dan {size} px.', + msgImageResizeError: 'Kon de foto afmetingen niet lezen om te verkleinen.', + msgImageResizeException: 'Fout bij het verkleinen van de foto.<pre>{errors}</pre>', + msgAjaxError: 'Er ging iets mis met de {operation} actie. Gelieve later opnieuw te proberen!', + msgAjaxProgressError: '{operation} mislukt', + msgDuplicateFile: 'File "{name}" of same size "{size} KB" has already been selected earlier. Skipping duplicate selection.', + msgResumableUploadRetriesExceeded: 'Upload aborted beyond <b>{max}</b> retries for file <b>{file}</b>! Error Details: <pre>{error}</pre>', + msgPendingTime: '{time} remaining', + msgCalculatingTime: 'calculating time remaining', + ajaxOperations: { + deleteThumb: 'bestand verwijderen', + uploadThumb: 'bestand uploaden', + uploadBatch: 'alle bestanden uploaden', + uploadExtra: 'form data upload' + }, + dropZoneTitle: 'Drag & drop bestanden hier …', + dropZoneClickTitle: '<br>(of klik hier om {files} te selecteren)', + fileActionSettings: { + removeTitle: 'Verwijder bestand', + uploadTitle: 'bestand uploaden', + uploadRetryTitle: 'Opnieuw uploaden', + downloadTitle: 'Download file', + zoomTitle: 'Bekijk details', + dragTitle: 'Verplaatsen / herindelen', + indicatorNewTitle: 'Nog niet geupload', + indicatorSuccessTitle: 'geupload', + indicatorErrorTitle: 'fout uploaden', + indicatorPausedTitle: 'Upload Paused', + indicatorLoadingTitle: 'uploaden ...' + }, + previewZoomButtonTitles: { + prev: 'Toon vorig bestand', + next: 'Toon volgend bestand', + toggleheader: 'Toggle header', + fullscreen: 'Toggle volledig scherm', + borderless: 'Toggle randloze modus', + close: 'Sluit gedetailleerde weergave' + } + }; +})(window.jQuery); diff --git a/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/no.js b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/no.js new file mode 100644 index 00000000..f6b8ab33 --- /dev/null +++ b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/no.js @@ -0,0 +1,110 @@ +/*! + * FileInput Norwegian Translations + * + * This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or + * any HTML markup tags in the messages must not be converted or translated. + * + * @see http://github.com/kartik-v/bootstrap-fileinput + * + * NOTE: this file must be saved in UTF-8 encoding. + */ +(function ($) { + "use strict"; + + $.fn.fileinputLocales['no'] = { + fileSingle: 'fil', + filePlural: 'filer', + browseLabel: 'Bla gjennom …', + removeLabel: 'Fjern', + removeTitle: 'Fjern valgte filer', + cancelLabel: 'Avbryt', + cancelTitle: 'Stopp pågående opplastninger', + pauseLabel: 'Pause', + pauseTitle: 'Pause ongoing upload', + uploadLabel: 'Last opp', + uploadTitle: 'Last opp valgte filer', + msgNo: 'Nei', + msgNoFilesSelected: 'Ingen filer er valgt', + msgPaused: 'Paused', + msgCancelled: 'Avbrutt', + msgPlaceholder: 'Select {files}...', + msgZoomModalHeading: 'Detaljert visning', + msgFileRequired: 'You must select a file to upload.', + msgSizeTooSmall: 'Filen "{name}" (<b>{size} KB</b>) er for liten og må være større enn <b>{minSize} KB</b>.', + msgSizeTooLarge: 'Filen "{name}" (<b>{size} KB</b>) er for stor, maksimal filstørrelse er <b>{maxSize} KB</b>.', + msgFilesTooLess: 'Du må velge minst <b>{n}</b> {files} for opplastning.', + msgFilesTooMany: 'For mange filer til opplastning, <b>({n})</b> overstiger maksantallet som er <b>{m}</b>.', + msgFileNotFound: 'Fant ikke filen "{name}"!', + msgFileSecured: 'Sikkerhetsrestriksjoner hindrer lesing av filen "{name}".', + msgFileNotReadable: 'Filen "{name}" er ikke lesbar.', + msgFilePreviewAborted: 'Filvisning avbrutt for "{name}".', + msgFilePreviewError: 'En feil oppstod under lesing av filen "{name}".', + msgInvalidFileName: 'Ugyldige tegn i filen "{name}".', + msgInvalidFileType: 'Ugyldig type for filen "{name}". Kun "{types}" filer er tillatt.', + msgInvalidFileExtension: 'Ugyldig endelse for filen "{name}". Kun "{extensions}" filer støttes.', + msgFileTypes: { + 'image': 'image', + 'html': 'HTML', + 'text': 'text', + 'video': 'video', + 'audio': 'audio', + 'flash': 'flash', + 'pdf': 'PDF', + 'object': 'object' + }, + msgUploadAborted: 'Filopplastningen ble avbrutt', + msgUploadThreshold: 'Prosesserer...', + msgUploadBegin: 'Initialiserer...', + msgUploadEnd: 'Ferdig', + msgUploadResume: 'Resuming upload...', + msgUploadEmpty: 'Ingen gyldige data tilgjengelig for opplastning.', + msgUploadError: 'Upload Error', + msgDeleteError: 'Delete Error', + msgProgressError: 'Error', + msgValidationError: 'Valideringsfeil', + msgLoading: 'Laster fil {index} av {files} …', + msgProgress: 'Laster fil {index} av {files} - {name} - {percent}% fullført.', + msgSelected: '{n} {files} valgt', + msgFoldersNotAllowed: 'Kun Dra & slipp filer! Hoppet over {n} mappe(r).', + msgImageWidthSmall: 'Bredde på bildefilen "{name}" må være minst {size} px.', + msgImageHeightSmall: 'Høyde på bildefilen "{name}" må være minst {size} px.', + msgImageWidthLarge: 'Bredde på bildefilen "{name}" kan ikke overstige {size} px.', + msgImageHeightLarge: 'Høyde på bildefilen "{name}" kan ikke overstige {size} px.', + msgImageResizeError: 'Fant ikke dimensjonene som skulle resizes.', + msgImageResizeException: 'En feil oppstod under endring av størrelse .<pre>{errors}</pre>', + msgAjaxError: 'Noe gikk galt med {operation} operasjonen. Vennligst prøv igjen senere!', + msgAjaxProgressError: '{operation} feilet', + msgDuplicateFile: 'File "{name}" of same size "{size} KB" has already been selected earlier. Skipping duplicate selection.', + msgResumableUploadRetriesExceeded: 'Upload aborted beyond <b>{max}</b> retries for file <b>{file}</b>! Error Details: <pre>{error}</pre>', + msgPendingTime: '{time} remaining', + msgCalculatingTime: 'calculating time remaining', + ajaxOperations: { + deleteThumb: 'file delete', + uploadThumb: 'file upload', + uploadBatch: 'batch file upload', + uploadExtra: 'form data upload' + }, + dropZoneTitle: 'Dra & slipp filer her …', + dropZoneClickTitle: '<br>(eller klikk for å velge {files})', + fileActionSettings: { + removeTitle: 'Fjern fil', + uploadTitle: 'Last opp fil', + uploadRetryTitle: 'Retry upload', + zoomTitle: 'Vis detaljer', + dragTitle: 'Flytt / endre rekkefølge', + indicatorNewTitle: 'Opplastning ikke fullført', + indicatorSuccessTitle: 'Opplastet', + indicatorErrorTitle: 'Opplastningsfeil', + indicatorPausedTitle: 'Upload Paused', + indicatorLoadingTitle: 'Laster opp ...' + }, + previewZoomButtonTitles: { + prev: 'Vis forrige fil', + next: 'Vis neste fil', + toggleheader: 'Vis header', + fullscreen: 'Åpne fullskjerm', + borderless: 'Åpne uten kanter', + close: 'Lukk detaljer' + } + }; +})(window.jQuery); diff --git a/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/pl.js b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/pl.js new file mode 100644 index 00000000..6de299fb --- /dev/null +++ b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/pl.js @@ -0,0 +1,101 @@ +/*! + * FileInput Polish Translations + * + * This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or + * any HTML markup tags in the messages must not be converted or translated. + * + * @see http://github.com/kartik-v/bootstrap-fileinput + * + * NOTE: this file must be saved in UTF-8 encoding. + */ +(function ($) { + "use strict"; + + $.fn.fileinputLocales['pl'] = { + fileSingle: 'plik', + filePlural: 'pliki', + browseLabel: 'Przeglądaj …', + removeLabel: 'Usuń', + removeTitle: 'Usuń zaznaczone pliki', + cancelLabel: 'Przerwij', + cancelTitle: 'Anuluj wysyłanie', + pauseLabel: 'Pause', + pauseTitle: 'Pause ongoing upload', + uploadLabel: 'Wgraj', + uploadTitle: 'Wgraj zaznaczone pliki', + msgNo: 'Nie', + msgNoFilesSelected: 'Brak zaznaczonych plików', + msgPaused: 'Paused', + msgCancelled: 'Odwołany', + msgPlaceholder: 'Wybierz {files}...', + msgZoomModalHeading: 'Szczegółowy podgląd', + msgFileRequired: 'Musisz wybrać plik do wgrania.', + msgSizeTooSmall: 'Plik "{name}" (<b>{size} KB</b>) jest zbyt mały i musi być większy niż <b>{minSize} KB</b>.', + msgSizeTooLarge: 'Plik o nazwie "{name}" (<b>{size} KB</b>) przekroczył maksymalną dopuszczalną wielkość pliku wynoszącą <b>{maxSize} KB</b>.', + msgFilesTooLess: 'Minimalna liczba plików do wgrania: <b>{n}</b>.', + msgFilesTooMany: 'Liczba plików wybranych do wgrania w liczbie <b>({n})</b>, przekracza maksymalny dozwolony limit wynoszący <b>{m}</b>.', + msgFileNotFound: 'Plik "{name}" nie istnieje!', + msgFileSecured: 'Ustawienia zabezpieczeń uniemożliwiają odczyt pliku "{name}".', + msgFileNotReadable: 'Plik "{name}" nie jest plikiem do odczytu.', + msgFilePreviewAborted: 'Podgląd pliku "{name}" został przerwany.', + msgFilePreviewError: 'Wystąpił błąd w czasie odczytu pliku "{name}".', + msgInvalidFileName: 'Nieprawidłowe lub nieobsługiwane znaki w nazwie pliku "{name}".', + msgInvalidFileType: 'Nieznany typ pliku "{name}". Tylko następujące rodzaje plików są dozwolone: "{types}".', + msgInvalidFileExtension: 'Złe rozszerzenie dla pliku "{name}". Tylko następujące rozszerzenia plików są dozwolone: "{extensions}".', + msgUploadAborted: 'Przesyłanie pliku zostało przerwane', + msgUploadThreshold: 'Przetwarzanie...', + msgUploadBegin: 'Rozpoczynanie...', + msgUploadEnd: 'Gotowe!', + msgUploadResume: 'Resuming upload...', + msgUploadEmpty: 'Brak poprawnych danych do przesłania.', + msgUploadError: 'Upload Error', + msgDeleteError: 'Delete Error', + msgProgressError: 'Błąd', + msgValidationError: 'Błąd walidacji', + msgLoading: 'Wczytywanie pliku {index} z {files} …', + msgProgress: 'Wczytywanie pliku {index} z {files} - {name} - {percent}% zakończone.', + msgSelected: '{n} Plików zaznaczonych', + msgFoldersNotAllowed: 'Metodą przeciągnij i upuść, można przenosić tylko pliki. Pominięto {n} katalogów.', + msgImageWidthSmall: 'Szerokość pliku obrazu "{name}" musi być co najmniej {size} px.', + msgImageHeightSmall: 'Wysokość pliku obrazu "{name}" musi być co najmniej {size} px.', + msgImageWidthLarge: 'Szerokość pliku obrazu "{name}" nie może przekraczać {size} px.', + msgImageHeightLarge: 'Wysokość pliku obrazu "{name}" nie może przekraczać {size} px.', + msgImageResizeError: 'Nie udało się uzyskać wymiaru obrazu, aby zmienić rozmiar.', + msgImageResizeException: 'Błąd podczas zmiany rozmiaru obrazu.<pre>{errors}</pre>', + msgAjaxError: 'Coś poczło nie tak podczas {operation}. Spróbuj ponownie!', + msgAjaxProgressError: '{operation} nie powiodło się', + msgDuplicateFile: 'File "{name}" of same size "{size} KB" has already been selected earlier. Skipping duplicate selection.', + msgResumableUploadRetriesExceeded: 'Upload aborted beyond <b>{max}</b> retries for file <b>{file}</b>! Error Details: <pre>{error}</pre>', + msgPendingTime: '{time} remaining', + msgCalculatingTime: 'calculating time remaining', + ajaxOperations: { + deleteThumb: 'usuwanie pliku', + uploadThumb: 'przesyłanie pliku', + uploadBatch: 'masowe przesyłanie plików', + uploadExtra: 'przesyłanie danych formularza' + }, + dropZoneTitle: 'Przeciągnij i upuść pliki tutaj …', + dropZoneClickTitle: '<br>(lub kliknij tutaj i wybierz {files} z komputera)', + fileActionSettings: { + removeTitle: 'Usuń plik', + uploadTitle: 'Przesyłanie pliku', + uploadRetryTitle: 'Ponów', + downloadTitle: 'Pobierz plik', + zoomTitle: 'Pokaż szczegóły', + dragTitle: 'Przenies / Ponownie zaaranżuj', + indicatorNewTitle: 'Jeszcze nie przesłany', + indicatorSuccessTitle: 'Dodane', + indicatorErrorTitle: 'Błąd', + indicatorPausedTitle: 'Upload Paused', + indicatorLoadingTitle: 'Przesyłanie ...' + }, + previewZoomButtonTitles: { + prev: 'Pokaż poprzedni plik', + next: 'Pokaż następny plik', + toggleheader: 'Włącz / wyłącz nagłówek', + fullscreen: 'Włącz / wyłącz pełny ekran', + borderless: 'Włącz / wyłącz tryb bez ramek', + close: 'Zamknij szczegółowy widok' + } + }; +})(window.jQuery); diff --git a/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/pt-BR.js b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/pt-BR.js new file mode 100644 index 00000000..40c32cec --- /dev/null +++ b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/pt-BR.js @@ -0,0 +1,111 @@ +/*! + * FileInput Brazillian Portuguese Translations + * + * This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or + * any HTML markup tags in the messages must not be converted or translated. + * + * @see http://github.com/kartik-v/bootstrap-fileinput + * + * NOTE: this file must be saved in UTF-8 encoding. + */ +(function ($) { + "use strict"; + + $.fn.fileinputLocales['pt-BR'] = { + fileSingle: 'arquivo', + filePlural: 'arquivos', + browseLabel: 'Procurar…', + removeLabel: 'Remover', + removeTitle: 'Remover arquivos selecionados', + cancelLabel: 'Cancelar', + cancelTitle: 'Interromper envio em andamento', + pauseLabel: 'Pause', + pauseTitle: 'Pause ongoing upload', + uploadLabel: 'Enviar', + uploadTitle: 'Enviar arquivos selecionados', + msgNo: 'Não', + msgNoFilesSelected: 'Nenhum arquivo selecionado', + msgPaused: 'Paused', + msgCancelled: 'Cancelado', + msgPlaceholder: 'Selecionar {files}...', + msgZoomModalHeading: 'Pré-visualização detalhada', + msgFileRequired: 'Você deve selecionar um arquivo para enviar.', + msgSizeTooSmall: 'O arquivo "{name}" (<b>{size} KB</b>) é muito pequeno e deve ser maior que <b>{minSize} KB</b>.', + msgSizeTooLarge: 'O arquivo "{name}" (<b>{size} KB</b>) excede o tamanho máximo permitido de <b>{maxSize} KB</b>.', + msgFilesTooLess: 'Você deve selecionar pelo menos <b>{n}</b> {files} para enviar.', + msgFilesTooMany: 'O número de arquivos selecionados para o envio <b>({n})</b> excede o limite máximo permitido de <b>{m}</b>.', + msgFileNotFound: 'O arquivo "{name}" não foi encontrado!', + msgFileSecured: 'Restrições de segurança impedem a leitura do arquivo "{name}".', + msgFileNotReadable: 'O arquivo "{name}" não pode ser lido.', + msgFilePreviewAborted: 'A pré-visualização do arquivo "{name}" foi interrompida.', + msgFilePreviewError: 'Ocorreu um erro ao ler o arquivo "{name}".', + msgInvalidFileName: 'Caracteres inválidos ou não suportados no arquivo "{name}".', + msgInvalidFileType: 'Tipo inválido para o arquivo "{name}". Apenas arquivos "{types}" são permitidos.', + msgInvalidFileExtension: 'Extensão inválida para o arquivo "{name}". Apenas arquivos "{extensions}" são permitidos.', + msgFileTypes: { + 'image': 'imagem', + 'html': 'HTML', + 'text': 'texto', + 'video': 'vídeo', + 'audio': 'audio', + 'flash': 'flash', + 'pdf': 'PDF', + 'object': 'objeto' + }, + msgUploadAborted: 'O envio do arquivo foi abortado', + msgUploadThreshold: 'Processando...', + msgUploadBegin: 'Inicializando...', + msgUploadEnd: 'Concluído', + msgUploadResume: 'Resuming upload...', + msgUploadEmpty: 'Nenhuma informação válida para upload.', + msgUploadError: 'Upload Error', + msgDeleteError: 'Delete Error', + msgProgressError: 'Erro de Upload', + msgValidationError: 'Erro de validação', + msgLoading: 'Enviando arquivo {index} de {files}…', + msgProgress: 'Enviando arquivo {index} de {files} - {name} - {percent}% completo.', + msgSelected: '{n} {files} selecionado(s)', + msgFoldersNotAllowed: 'Arraste e solte apenas arquivos! {n} pasta(s) ignoradas.', + msgImageWidthSmall: 'Largura do arquivo de imagem "{name}" deve ser pelo menos {size} px.', + msgImageHeightSmall: 'Altura do arquivo de imagem "{name}" deve ser pelo menos {size} px.', + msgImageWidthLarge: 'Largura do arquivo de imagem "{name}" não pode exceder {size} px.', + msgImageHeightLarge: 'Altura do arquivo de imagem "{name}" não pode exceder {size} px.', + msgImageResizeError: 'Não foi possível obter as dimensões da imagem para redimensionar.', + msgImageResizeException: 'Erro ao redimensionar a imagem.<pre>{errors}</pre>', + msgAjaxError: 'Algo deu errado com a operação {operation}. Por favor tente novamente mais tarde!', + msgAjaxProgressError: '{operation} falhou', + msgDuplicateFile: 'File "{name}" of same size "{size} KB" has already been selected earlier. Skipping duplicate selection.', + msgResumableUploadRetriesExceeded: 'Upload aborted beyond <b>{max}</b> retries for file <b>{file}</b>! Error Details: <pre>{error}</pre>', + msgPendingTime: '{time} remaining', + msgCalculatingTime: 'calculating time remaining', + ajaxOperations: { + deleteThumb: 'Exclusão de arquivo', + uploadThumb: 'Upload de arquivos', + uploadBatch: 'Carregamento de arquivos em lote', + uploadExtra: 'Carregamento de dados do formulário' + }, + dropZoneTitle: 'Arraste e solte os arquivos aqui…', + dropZoneClickTitle: '<br>(ou clique para selecionar o(s) arquivo(s))', + fileActionSettings: { + removeTitle: 'Remover arquivo', + uploadTitle: 'Enviar arquivo', + uploadRetryTitle: 'Retry upload', + downloadTitle: 'Download file', + zoomTitle: 'Ver detalhes', + dragTitle: 'Mover / Reordenar', + indicatorNewTitle: 'Ainda não enviado', + indicatorSuccessTitle: 'Enviado', + indicatorErrorTitle: 'Erro', + indicatorPausedTitle: 'Upload Paused', + indicatorLoadingTitle: 'Enviando...' + }, + previewZoomButtonTitles: { + prev: 'Visualizar arquivo anterior', + next: 'Visualizar próximo arquivo', + toggleheader: 'Mostrar cabeçalho', + fullscreen: 'Ativar tela cheia', + borderless: 'Ativar modo sem borda', + close: 'Fechar pré-visualização detalhada' + } + }; +})(window.jQuery); diff --git a/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/pt.js b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/pt.js new file mode 100644 index 00000000..181ab198 --- /dev/null +++ b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/pt.js @@ -0,0 +1,111 @@ +/*! + * FileInput Portuguese Translations + * + * This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or + * any HTML markup tags in the messages must not be converted or translated. + * + * @see http://github.com/kartik-v/bootstrap-fileinput + * + * NOTE: this file must be saved in UTF-8 encoding. + */ +(function ($) { + "use strict"; + + $.fn.fileinputLocales['pt'] = { + fileSingle: 'ficheiro', + filePlural: 'ficheiros', + browseLabel: 'Procurar …', + removeLabel: 'Remover', + removeTitle: 'Remover ficheiros selecionados', + cancelLabel: 'Cancelar', + cancelTitle: 'Abortar envio', + pauseLabel: 'Parar', + pauseTitle: 'Parar envio em curso', + uploadLabel: 'Enviar', + uploadTitle: 'Enviar ficheiros selecionados', + msgNo: 'Não', + msgNoFilesSelected: 'Nenhum ficheiro selecionado', + msgPaused: 'Parado', + msgCancelled: 'Cancelado', + msgPlaceholder: 'Selecionar {files}...', + msgZoomModalHeading: 'Pré-visualização detalhada', + msgFileRequired: 'É necessário selecionar um ficheiro a enviar.', + msgSizeTooSmall: 'Ficheiro "{name}" (<b>{size} KB</b>) é demasiado pequeno, tem ser ser maior que <b>{minSize} KB</b>.', + msgSizeTooLarge: 'Ficheiro "{name}" (<b>{size} KB</b>) excede o tamanho máximo permido de <b>{maxSize} KB</b>.', + msgFilesTooLess: 'Deve selecionar pelo menos <b>{n}</b> {files} para enviar.', + msgFilesTooMany: 'Número máximo de ficheiros selecionados <b>({n})</b> excede o limite máximo de <b>{m}</b>.', + msgFileNotFound: 'Ficheiro "{name}" não encontrado.', + msgFileSecured: 'Restrições de segurança impedem a leitura do ficheiro "{name}".', + msgFileNotReadable: 'Ficheiro "{name}" não pode ser lido.', + msgFilePreviewAborted: 'Pré-visualização abortado para o ficheiro "{name}".', + msgFilePreviewError: 'Ocorreu um erro ao ler o ficheiro "{name}".', + msgInvalidFileName: 'Caracteres inválidos ou não suportados no nome de ficheiro "{name}".', + msgInvalidFileType: 'Tipo inválido para o ficheiro "{name}". Apenas ficheiros "{types}" são suportados.', + msgInvalidFileExtension: 'Extensão inválida para o ficheiro "{name}". Apenas ficheiros "{extensions}" são suportados.', + msgFileTypes: { + 'image': 'imagem', + 'html': 'HTML', + 'text': 'texto', + 'video': 'vídeo', + 'audio': 'audio', + 'flash': 'flash', + 'pdf': 'PDF', + 'object': 'objeto' + }, + msgUploadAborted: 'O envio do ficheiro foi abortado', + msgUploadThreshold: 'A processar...', + msgUploadBegin: 'A inicializar...', + msgUploadEnd: 'Concluído', + msgUploadResume: 'A retomar o envio...', + msgUploadEmpty: 'Não existem dados válidos disponíveis para o envio.', + msgUploadError: 'Erro de Envio', + msgDeleteError: 'Erro de Eliminação', + msgProgressError: 'Erro', + msgValidationError: 'Erro de Validação', + msgLoading: 'A enviar ficheiro {index} de {files} …', + msgProgress: 'A enviar ficheiro {index} de {files} - {name} - {percent}% completo.', + msgSelected: '{n} {files} selecionados', + msgFoldersNotAllowed: 'Arrastar e largar ficheiros apenas. {n} pasta(s) ignoradas.', + msgImageWidthSmall: 'Largura da imagem "{name}" deve ser pelo menos {size} px.', + msgImageHeightSmall: 'Altura da imagem "{name}" deve ser pelo menos {size} px.', + msgImageWidthLarge: 'Largura da imagem "{name}" não pode exceder {size} px.', + msgImageHeightLarge: 'Altura da imagem "{name}" não pode exceder {size} px.', + msgImageResizeError: 'Nãofoi possível obter as dimensões da imagem para redimensionar.', + msgImageResizeException: 'Erro ao redimensionar a imagem.<pre>{errors}</pre>', + msgAjaxError: 'Ocorreu um erro durante a operação {operation}. Por favor tente de novo mais tarde.', + msgAjaxProgressError: '{operation} falhou', + msgDuplicateFile: 'O ficheiro "{name}" com o mesmo tamanho "{size} KB" já foi anteriormente selecionado. O ficheiro duplicado foi ignorado.', + msgResumableUploadRetriesExceeded: 'O envio foi abortado após <b>{max}</b> tentativas para o ficheiro <b>{file}</b>. Detalhes do erro: <pre>{error}</pre>', + msgPendingTime: '{time} restante', + msgCalculatingTime: 'a calcular o tempo restante', + ajaxOperations: { + deleteThumb: 'eliminar ficheiro', + uploadThumb: 'enviar ficheiro', + uploadBatch: 'envio de ficheiros em lote', + uploadExtra: 'envio de ficheiro em formulário' + }, + dropZoneTitle: 'Arrastar e largar ficheiros aqui …', + dropZoneClickTitle: '<br>(ou clique para selecionar {files})', + fileActionSettings: { + removeTitle: 'Remover ficheiro', + uploadTitle: 'Enviar ficheiro', + uploadRetryTitle: 'Voltar a tentar o envio', + downloadTitle: 'Transferir ficheiro', + zoomTitle: 'Ver detalhes', + dragTitle: 'Mover / Reorganizar', + indicatorNewTitle: 'Ainda Não Enviado', + indicatorSuccessTitle: 'Enviado', + indicatorErrorTitle: 'Erro de Envio', + indicatorPausedTitle: 'Envio Parado', + indicatorLoadingTitle: 'A enviar ...' + }, + previewZoomButtonTitles: { + prev: 'Ver ficheiro anterior', + next: 'Ver próximo ficheiro', + toggleheader: 'Mostrar/esconder cabeçalho', + fullscreen: 'Alternar entre ecrã completo', + borderless: 'Alternar entre modo sem bordas', + close: 'Fechar pré-visualização detalhada' + } + }; +})(window.jQuery); diff --git a/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/ro.js b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/ro.js new file mode 100644 index 00000000..b1930984 --- /dev/null +++ b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/ro.js @@ -0,0 +1,112 @@ +/*! + * FileInput Romanian Translations + * + * This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or + * any HTML markup tags in the messages must not be converted or translated. + * + * @see http://github.com/kartik-v/bootstrap-fileinput + * @author Ciprian Voicu <pictoru@autoportret.ro> + * + * NOTE: this file must be saved in UTF-8 encoding. + */ +(function ($) { + "use strict"; + + $.fn.fileinputLocales['ro'] = { + fileSingle: 'fișier', + filePlural: 'fișiere', + browseLabel: 'Răsfoiește …', + removeLabel: 'Șterge', + removeTitle: 'Curăță fișierele selectate', + cancelLabel: 'Renunță', + cancelTitle: 'Anulează încărcarea curentă', + pauseLabel: 'Pause', + pauseTitle: 'Pause ongoing upload', + uploadLabel: 'Încarcă', + uploadTitle: 'Încarcă fișierele selectate', + msgNo: 'Nu', + msgNoFilesSelected: '', + msgPaused: 'Paused', + msgCancelled: 'Anulat', + msgPlaceholder: 'Select {files}...', + msgZoomModalHeading: 'Previzualizare detaliată', + msgFileRequired: 'You must select a file to upload.', + msgSizeTooSmall: 'File "{name}" (<b>{size} KB</b>) is too small and must be larger than <b>{minSize} KB</b>.', + msgSizeTooLarge: 'Fișierul "{name}" (<b>{size} KB</b>) depășește limita maximă de încărcare de <b>{maxSize} KB</b>.', + msgFilesTooLess: 'Trebuie să selectezi cel puțin <b>{n}</b> {files} pentru a încărca.', + msgFilesTooMany: 'Numărul fișierelor pentru încărcare <b>({n})</b> depășește limita maximă de <b>{m}</b>.', + msgFileNotFound: 'Fișierul "{name}" nu a fost găsit!', + msgFileSecured: 'Restricții de securitate previn citirea fișierului "{name}".', + msgFileNotReadable: 'Fișierul "{name}" nu se poate citi.', + msgFilePreviewAborted: 'Fișierului "{name}" nu poate fi previzualizat.', + msgFilePreviewError: 'A intervenit o eroare în încercarea de citire a fișierului "{name}".', + msgInvalidFileName: 'Invalid or unsupported characters in file name "{name}".', + msgInvalidFileType: 'Tip de fișier incorect pentru "{name}". Sunt suportate doar fișiere de tipurile "{types}".', + msgInvalidFileExtension: 'Extensie incorectă pentru "{name}". Sunt suportate doar extensiile "{extensions}".', + msgFileTypes: { + 'image': 'image', + 'html': 'HTML', + 'text': 'text', + 'video': 'video', + 'audio': 'audio', + 'flash': 'flash', + 'pdf': 'PDF', + 'object': 'object' + }, + msgUploadAborted: 'Fișierul Încărcarea a fost întrerupt', + msgUploadThreshold: 'Processing...', + msgUploadBegin: 'Initializing...', + msgUploadEnd: 'Done', + msgUploadResume: 'Resuming upload...', + msgUploadEmpty: 'No valid data available for upload.', + msgUploadError: 'Upload Error', + msgDeleteError: 'Delete Error', + msgProgressError: 'Error', + msgValidationError: 'Eroare de validare', + msgLoading: 'Se încarcă fișierul {index} din {files} …', + msgProgress: 'Se încarcă fișierul {index} din {files} - {name} - {percent}% încărcat.', + msgSelected: '{n} {files} încărcate', + msgFoldersNotAllowed: 'Se poate doar trăgând fișierele! Se renunță la {n} dosar(e).', + msgImageWidthSmall: 'Lățimea de fișier de imagine "{name}" trebuie să fie de cel puțin {size} px.', + msgImageHeightSmall: 'Înălțimea fișier imagine "{name}" trebuie să fie de cel puțin {size} px.', + msgImageWidthLarge: 'Lățimea de fișier de imagine "{name}" nu poate depăși {size} px.', + msgImageHeightLarge: 'Înălțimea fișier imagine "{name}" nu poate depăși {size} px.', + msgImageResizeError: 'Nu a putut obține dimensiunile imaginii pentru a redimensiona.', + msgImageResizeException: 'Eroare la redimensionarea imaginii.<pre>{errors}</pre>', + msgAjaxError: 'Something went wrong with the {operation} operation. Please try again later!', + msgAjaxProgressError: '{operation} failed', + msgDuplicateFile: 'File "{name}" of same size "{size} KB" has already been selected earlier. Skipping duplicate selection.', + msgResumableUploadRetriesExceeded: 'Upload aborted beyond <b>{max}</b> retries for file <b>{file}</b>! Error Details: <pre>{error}</pre>', + msgPendingTime: '{time} remaining', + msgCalculatingTime: 'calculating time remaining', + ajaxOperations: { + deleteThumb: 'file delete', + uploadThumb: 'file upload', + uploadBatch: 'batch file upload', + uploadExtra: 'form data upload' + }, + dropZoneTitle: 'Trage fișierele aici …', + dropZoneClickTitle: '<br>(or click to select {files})', + fileActionSettings: { + removeTitle: 'Scoateți fișier', + uploadTitle: 'Incarca fisier', + uploadRetryTitle: 'Retry upload', + downloadTitle: 'Download file', + zoomTitle: 'Vezi detalii', + dragTitle: 'Move / Rearrange', + indicatorNewTitle: 'Nu a încărcat încă', + indicatorSuccessTitle: 'încărcat', + indicatorErrorTitle: 'Încărcați eroare', + indicatorPausedTitle: 'Upload Paused', + indicatorLoadingTitle: 'Se încarcă ...' + }, + previewZoomButtonTitles: { + prev: 'View previous file', + next: 'View next file', + toggleheader: 'Toggle header', + fullscreen: 'Toggle full screen', + borderless: 'Toggle borderless mode', + close: 'Close detailed preview' + } + }; +})(window.jQuery); diff --git a/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/ru.js b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/ru.js new file mode 100644 index 00000000..619744bc --- /dev/null +++ b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/ru.js @@ -0,0 +1,112 @@ +/*! + * FileInput Russian Translations + * + * This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or + * any HTML markup tags in the messages must not be converted or translated. + * + * @see http://github.com/kartik-v/bootstrap-fileinput + * @author CyanoFresh <cyanofresh@gmail.com> + * + * NOTE: this file must be saved in UTF-8 encoding. + */ +(function ($) { + "use strict"; + + $.fn.fileinputLocales['ru'] = { + fileSingle: 'файл', + filePlural: 'файлы', + browseLabel: 'Выбрать …', + removeLabel: 'Удалить', + removeTitle: 'Очистить выбранные файлы', + cancelLabel: 'Отмена', + cancelTitle: 'Отменить текущую загрузку', + pauseLabel: 'Пауза', + pauseTitle: 'Приостановить текущую загрузку', + uploadLabel: 'Загрузить', + uploadTitle: 'Загрузить выбранные файлы', + msgNo: 'нет', + msgNoFilesSelected: '', + msgPaused: 'Приостановлено', + msgCancelled: 'Отменено', + msgPlaceholder: 'Выбрать {files}...', + msgZoomModalHeading: 'Подробное превью', + msgFileRequired: 'Необходимо выбрать файл для загрузки.', + msgSizeTooSmall: 'Файл "{name}" (<b>{size} KB</b>) имеет слишком маленький размер и должен быть больше <b>{minSize} KB</b>.', + msgSizeTooLarge: 'Файл "{name}" (<b>{size} KB</b>) превышает максимальный размер <b>{maxSize} KB</b>.', + msgFilesTooLess: 'Вы должны выбрать как минимум <b>{n}</b> {files} для загрузки.', + msgFilesTooMany: 'Количество выбранных файлов <b>({n})</b> превышает максимально допустимое количество <b>{m}</b>.', + msgFileNotFound: 'Файл "{name}" не найден!', + msgFileSecured: 'Ограничения безопасности запрещают читать файл "{name}".', + msgFileNotReadable: 'Файл "{name}" невозможно прочитать.', + msgFilePreviewAborted: 'Предпросмотр отменен для файла "{name}".', + msgFilePreviewError: 'Произошла ошибка при чтении файла "{name}".', + msgInvalidFileName: 'Неверные или неподдерживаемые символы в названии файла "{name}".', + msgInvalidFileType: 'Запрещенный тип файла для "{name}". Только "{types}" разрешены.', + msgInvalidFileExtension: 'Запрещенное расширение для файла "{name}". Только "{extensions}" разрешены.', + msgFileTypes: { + 'image': 'image', + 'html': 'HTML', + 'text': 'text', + 'video': 'video', + 'audio': 'audio', + 'flash': 'flash', + 'pdf': 'PDF', + 'object': 'object' + }, + msgUploadAborted: 'Выгрузка файла прервана', + msgUploadThreshold: 'Обработка...', + msgUploadBegin: 'Инициализация...', + msgUploadEnd: 'Готово', + msgUploadResume: 'Возобновление загрузки...', + msgUploadEmpty: 'Недопустимые данные для загрузки', + msgUploadError: 'Ошибка загрузки', + msgDeleteError: 'Ошибка удаления', + msgProgressError: 'Ошибка загрузки', + msgValidationError: 'Ошибка проверки', + msgLoading: 'Загрузка файла {index} из {files} …', + msgProgress: 'Загрузка файла {index} из {files} - {name} - {percent}% завершено.', + msgSelected: 'Выбрано файлов: {n}', + msgFoldersNotAllowed: 'Разрешено перетаскивание только файлов! Пропущено {n} папок.', + msgImageWidthSmall: 'Ширина изображения {name} должна быть не меньше {size} px.', + msgImageHeightSmall: 'Высота изображения {name} должна быть не меньше {size} px.', + msgImageWidthLarge: 'Ширина изображения "{name}" не может превышать {size} px.', + msgImageHeightLarge: 'Высота изображения "{name}" не может превышать {size} px.', + msgImageResizeError: 'Не удалось получить размеры изображения, чтобы изменить размер.', + msgImageResizeException: 'Ошибка при изменении размера изображения.<pre>{errors}</pre>', + msgAjaxError: 'Произошла ошибка при выполнении операции {operation}. Повторите попытку позже!', + msgAjaxProgressError: 'Не удалось выполнить {operation}', + msgDuplicateFile: 'Файл "{name}" с размером "{size} KB" уже был выбран ранее. Пропуск повторяющегося выбора.', + msgResumableUploadRetriesExceeded: 'Загрузка прервана после <b>{max}</b> попыток для файла <b>{file}</b>! Информация об ошибке: <pre>{error}</pre>', + msgPendingTime: '{time} осталось', + msgCalculatingTime: 'расчет оставшегося времени', + ajaxOperations: { + deleteThumb: 'удалить файл', + uploadThumb: 'загрузить файл', + uploadBatch: 'загрузить пакет файлов', + uploadExtra: 'загрузка данных с формы' + }, + dropZoneTitle: 'Перетащите файлы сюда …', + dropZoneClickTitle: '<br>(Или щёлкните, чтобы выбрать {files})', + fileActionSettings: { + removeTitle: 'Удалить файл', + uploadTitle: 'Загрузить файл', + uploadRetryTitle: 'Повторить загрузку', + downloadTitle: 'Загрузить файл', + zoomTitle: 'Посмотреть детали', + dragTitle: 'Переместить / Изменить порядок', + indicatorNewTitle: 'Еще не загружен', + indicatorSuccessTitle: 'Загружен', + indicatorErrorTitle: 'Ошибка загрузки', + indicatorPausedTitle: 'Upload Paused', + indicatorLoadingTitle: 'Загрузка ...' + }, + previewZoomButtonTitles: { + prev: 'Посмотреть предыдущий файл', + next: 'Посмотреть следующий файл', + toggleheader: 'Переключить заголовок', + fullscreen: 'Переключить полноэкранный режим', + borderless: 'Переключить режим без полей', + close: 'Закрыть подробный предпросмотр' + } + }; +})(window.jQuery);
\ No newline at end of file diff --git a/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/sk.js b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/sk.js new file mode 100644 index 00000000..706cb0e0 --- /dev/null +++ b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/sk.js @@ -0,0 +1,111 @@ +/*! + * FileInput Slovakian Translations + * + * This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or + * any HTML markup tags in the messages must not be converted or translated. + * + * @see http://github.com/kartik-v/bootstrap-fileinput + * + * NOTE: this file must be saved in UTF-8 encoding. + */ +(function ($) { + "use strict"; + + $.fn.fileinputLocales['sk'] = { + fileSingle: 'súbor', + filePlural: 'súbory', + browseLabel: 'Vybrať …', + removeLabel: 'Odstrániť', + removeTitle: 'Vyčistiť vybraté súbory', + cancelLabel: 'Storno', + cancelTitle: 'Prerušiť nahrávanie', + pauseLabel: 'Pause', + pauseTitle: 'Pause ongoing upload', + uploadLabel: 'Nahrať', + uploadTitle: 'Nahrať vybraté súbory', + msgNo: 'Nie', + msgNoFilesSelected: '', + msgPaused: 'Paused', + msgCancelled: 'Zrušené', + msgPlaceholder: 'Vybrať {files}...', + msgZoomModalHeading: 'Detailný náhľad', + msgFileRequired: 'Musíte vybrať súbor, ktorý chcete nahrať.', + msgSizeTooSmall: 'Súbor "{name}" (<b>{size} KB</b>) je príliš malý, musí mať veľkosť najmenej <b>{minSize} KB</b>.', + msgSizeTooLarge: 'Súbor "{name}" (<b>{size} KB</b>) je príliš veľký, maximálna povolená veľkosť <b>{maxSize} KB</b>.', + msgFilesTooLess: 'Musíte vybrať najmenej <b>{n}</b> {files} pre nahranie.', + msgFilesTooMany: 'Počet vybratých súborov <b>({n})</b> prekročil maximálny povolený limit <b>{m}</b>.', + msgFileNotFound: 'Súbor "{name}" nebol nájdený!', + msgFileSecured: 'Zabezpečenie súboru znemožnilo čítať súbor "{name}".', + msgFileNotReadable: 'Súbor "{name}" nie je čitateľný.', + msgFilePreviewAborted: 'Náhľad súboru bol prerušený pre "{name}".', + msgFilePreviewError: 'Nastala chyba pri načítaní súboru "{name}".', + msgInvalidFileName: 'Invalid or unsupported characters in file name "{name}".', + msgInvalidFileType: 'Neplatný typ súboru "{name}". Iba "{types}" súborov sú podporované.', + msgInvalidFileExtension: 'Neplatná extenzia súboru "{name}". Iba "{extensions}" súborov sú podporované.', + msgFileTypes: { + 'image': 'obrázok', + 'html': 'HTML', + 'text': 'text', + 'video': 'video', + 'audio': 'audio', + 'flash': 'flash', + 'pdf': 'PDF', + 'object': 'object' + }, + msgUploadAborted: 'Nahrávanie súboru bolo prerušené', + msgUploadThreshold: 'Spracovávam...', + msgUploadBegin: 'Inicializujem...', + msgUploadEnd: 'Hotovo', + msgUploadResume: 'Resuming upload...', + msgUploadEmpty: 'Na nahrávanie nie sú k dispozícii žiadne platné údaje.', + msgUploadError: 'Upload Error', + msgDeleteError: 'Delete Error', + msgProgressError: 'Chyba', + msgValidationError: 'Chyba overenia', + msgLoading: 'Nahrávanie súboru {index} z {files} …', + msgProgress: 'Nahrávanie súboru {index} z {files} - {name} - {percent}% dokončené.', + msgSelected: '{n} {files} vybraté', + msgFoldersNotAllowed: 'Tiahni a pusť iba súbory! Vynechané {n} pustené prečinok(y).', + msgImageWidthSmall: 'Šírka obrázku "{name}", musí byť minimálne {size} px.', + msgImageHeightSmall: 'Výška obrázku "{name}", musí byť minimálne {size} px.', + msgImageWidthLarge: 'Šírka obrázku "{name}" nemôže presiahnuť {size} px.', + msgImageHeightLarge: 'Výška obrázku "{name}" nesmie presiahnuť {size} px.', + msgImageResizeError: 'Nepodarilo sa získať veľkosť obrázka pre zmenu veľkosti.', + msgImageResizeException: 'Chyba pri zmene veľkosti obrázka.<pre>{errors}</pre>', + msgAjaxError: 'Pri operácii {operation} sa vyskytla chyba. Skúste to prosím neskôr!', + msgAjaxProgressError: '{operation} - neúspešné', + msgDuplicateFile: 'File "{name}" of same size "{size} KB" has already been selected earlier. Skipping duplicate selection.', + msgResumableUploadRetriesExceeded: 'Upload aborted beyond <b>{max}</b> retries for file <b>{file}</b>! Error Details: <pre>{error}</pre>', + msgPendingTime: '{time} remaining', + msgCalculatingTime: 'calculating time remaining', + ajaxOperations: { + deleteThumb: 'odstrániť súbor', + uploadThumb: 'nahrať súbor', + uploadBatch: 'nahrať várku súborov', + uploadExtra: 'odosielanie údajov z formulára' + }, + dropZoneTitle: 'Tiahni a pusť súbory tu …', + dropZoneClickTitle: '<br>(alebo kliknite sem a vyberte {files})', + fileActionSettings: { + removeTitle: 'Odstrániť súbor', + uploadTitle: 'Nahrať súbor', + uploadRetryTitle: 'Znova nahrať', + downloadTitle: 'Stiahnuť súbor', + zoomTitle: 'Zobraziť podrobnosti', + dragTitle: 'Posunúť / Preskládať', + indicatorNewTitle: 'Ešte nenahral', + indicatorSuccessTitle: 'Nahraný', + indicatorErrorTitle: 'Chyba pri nahrávaní', + indicatorPausedTitle: 'Upload Paused', + indicatorLoadingTitle: 'Nahrávanie ...' + }, + previewZoomButtonTitles: { + prev: 'Zobraziť predchádzajúci súbor', + next: 'Zobraziť následujúci súbor', + toggleheader: 'Prepnúť záhlavie', + fullscreen: 'Prepnúť zobrazenie na celú obrazovku', + borderless: 'Prepnúť na bezrámikové zobrazenie', + close: 'Zatvoriť detailný náhľad' + } + }; +})(window.jQuery); diff --git a/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/sl.js b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/sl.js new file mode 100644 index 00000000..b57d996d --- /dev/null +++ b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/sl.js @@ -0,0 +1,109 @@ +/*! + * FileInput Slovenian Translations + * + * This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or + * any HTML markup tags in the messages must not be converted or translated. + * + * @see http://github.com/kartik-v/bootstrap-fileinput + * @author kv1dr <kv1dr.android@gmail.com> + * + * NOTE: this file must be saved in UTF-8 encoding. + */ +(function ($) { + "use strict"; + + $.fn.fileinputLocales['sl'] = { + fileSingle: 'datoteka', + filePlural: 'datotek', + browseLabel: 'Prebrskaj …', + removeLabel: 'Odstrani', + removeTitle: 'Počisti izbrane datoteke', + cancelLabel: 'Prekliči', + cancelTitle: 'Prekliči nalaganje', + pauseLabel: 'Pause', + pauseTitle: 'Pause ongoing upload', + uploadLabel: 'Naloži', + uploadTitle: 'Naloži izbrane datoteke', + msgNo: 'Ne', + msgNoFilesSelected: 'Nobena datoteka ni izbrana', + msgPaused: 'Paused', + msgCancelled: 'Preklicano', + msgPlaceholder: 'Select {files}...', + msgZoomModalHeading: 'Podroben predogled', + msgSizeTooLarge: 'Datoteka "{name}" (<b>{size} KB</b>) presega največjo dovoljeno velikost za nalaganje <b>{maxSize} KB</b>.', + msgFilesTooLess: 'Za nalaganje morate izbrati vsaj <b>{n}</b> {files}.', + msgFilesTooMany: 'Število datotek, izbranih za nalaganje <b>({n})</b> je prekoračilo največjo dovoljeno število <b>{m}</b>.', + msgFileNotFound: 'Datoteka "{name}" ni bila najdena!', + msgFileSecured: 'Zaradi varnostnih omejitev nisem mogel prebrati datoteko "{name}".', + msgFileNotReadable: 'Datoteka "{name}" ni berljiva.', + msgFilePreviewAborted: 'Predogled datoteke "{name}" preklican.', + msgFilePreviewError: 'Pri branju datoteke "{name}" je prišlo do napake.', + msgInvalidFileType: 'Napačen tip datoteke "{name}". Samo "{types}" datoteke so podprte.', + msgInvalidFileExtension: 'Napačna končnica datoteke "{name}". Samo "{extensions}" datoteke so podprte.', + msgFileTypes: { + 'image': 'image', + 'html': 'HTML', + 'text': 'text', + 'video': 'video', + 'audio': 'audio', + 'flash': 'flash', + 'pdf': 'PDF', + 'object': 'object' + }, + msgUploadAborted: 'Nalaganje datoteke je bilo preklicano', + msgUploadThreshold: 'Procesiram...', + msgUploadBegin: 'Initializing...', + msgUploadEnd: 'Done', + msgUploadResume: 'Resuming upload...', + msgUploadEmpty: 'No valid data available for upload.', + msgUploadError: 'Upload Error', + msgDeleteError: 'Delete Error', + msgProgressError: 'Error', + msgValidationError: 'Napaki pri validiranju', + msgLoading: 'Nalaganje datoteke {index} od {files} …', + msgProgress: 'Nalaganje datoteke {index} od {files} - {name} - {percent}% dokončano.', + msgSelected: '{n} {files} izbrano', + msgFoldersNotAllowed: 'Povlecite in spustite samo datoteke! Izpuščenih je bilo {n} map.', + msgImageWidthSmall: 'Širina slike "{name}" mora biti vsaj {size} px.', + msgImageHeightSmall: 'Višina slike "{name}" mora biti vsaj {size} px.', + msgImageWidthLarge: 'Širina slike "{name}" ne sme preseči {size} px.', + msgImageHeightLarge: 'Višina slike "{name}" ne sme preseči {size} px.', + msgImageResizeError: 'Nisem mogel pridobiti dimenzij slike za spreminjanje velikosti.', + msgImageResizeException: 'Napaka pri spreminjanju velikosti slike.<pre>{errors}</pre>', + msgAjaxError: 'Something went wrong with the {operation} operation. Please try again later!', + msgAjaxProgressError: '{operation} failed', + msgDuplicateFile: 'File "{name}" of same size "{size} KB" has already been selected earlier. Skipping duplicate selection.', + msgResumableUploadRetriesExceeded: 'Upload aborted beyond <b>{max}</b> retries for file <b>{file}</b>! Error Details: <pre>{error}</pre>', + msgPendingTime: '{time} remaining', + msgCalculatingTime: 'calculating time remaining', + ajaxOperations: { + deleteThumb: 'file delete', + uploadThumb: 'file upload', + uploadBatch: 'batch file upload', + uploadExtra: 'form data upload' + }, + dropZoneTitle: 'Povlecite in spustite datoteke sem …', + dropZoneClickTitle: '<br>(ali kliknite sem za izbiro {files})', + fileActionSettings: { + removeTitle: 'Odstrani datoteko', + uploadTitle: 'Naloži datoteko', + uploadRetryTitle: 'Retry upload', + downloadTitle: 'Download file', + zoomTitle: 'Poglej podrobnosti', + dragTitle: 'Premaki / Razporedi', + indicatorNewTitle: 'Še ni naloženo', + indicatorSuccessTitle: 'Naloženo', + indicatorErrorTitle: 'Napaka pri nalaganju', + indicatorPausedTitle: 'Upload Paused', + indicatorLoadingTitle: 'Nalagam ...' + }, + previewZoomButtonTitles: { + prev: 'Poglej prejšno datoteko', + next: 'Poglej naslednjo datoteko', + toggleheader: 'Preklopi glavo', + fullscreen: 'Preklopi celozaslonski način', + borderless: 'Preklopi način brez robov', + close: 'Zapri predogled podrobnosti' + } + }; +})(window.jQuery); diff --git a/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/sv.js b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/sv.js new file mode 100644 index 00000000..90abd31d --- /dev/null +++ b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/sv.js @@ -0,0 +1,110 @@ +/*! + * FileInput <_LANG_> Translations + * + * This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or + * any HTML markup tags in the messages must not be converted or translated. + * + * @see http://github.com/kartik-v/bootstrap-fileinput + * + * NOTE: this file must be saved in UTF-8 encoding. + */ +(function ($) { + "use strict"; + + $.fn.fileinputLocales['sv'] = { + fileSingle: 'fil', + filePlural: 'filer', + browseLabel: 'Bläddra …', + removeLabel: 'Ta bort', + removeTitle: 'Rensa valda filer', + cancelLabel: 'Avbryt', + cancelTitle: 'Avbryt pågående uppladdning', + pauseLabel: 'Pause', + pauseTitle: 'Pause ongoing upload', + uploadLabel: 'Ladda upp', + uploadTitle: 'Ladda upp valda filer', + msgNo: 'Nej', + msgNoFilesSelected: 'Inga filer valda', + msgPaused: 'Paused', + msgCancelled: 'Avbruten', + msgPlaceholder: 'Select {files}...', + msgZoomModalHeading: 'detaljerad förhandsgranskning', + msgFileRequired: 'You must select a file to upload.', + msgSizeTooSmall: 'Filen "{name}" (<b>{size} KB</b>) är för liten och måste vara större än <b>{minSize} KB</b>.', + msgSizeTooLarge: 'File "{name}" (<b>{size} KB</b>) överstiger högsta tillåtna uppladdningsstorlek <b>{maxSize} KB</b>.', + msgFilesTooLess: 'Du måste välja minst <b>{n}</b> {files} för att ladda upp.', + msgFilesTooMany: 'Antal filer valda för uppladdning <b>({n})</b> överstiger högsta tillåtna gränsen <b>{m}</b>.', + msgFileNotFound: 'Filen "{name}" kunde inte hittas!', + msgFileSecured: 'Säkerhetsbegränsningar förhindrar att läsa filen "{name}".', + msgFileNotReadable: 'Filen "{name}" är inte läsbar.', + msgFilePreviewAborted: 'Filförhandsvisning avbröts för "{name}".', + msgFilePreviewError: 'Ett fel uppstod vid inläsning av filen "{name}".', + msgInvalidFileName: 'Ogiltiga eller tecken som inte stöds i filnamnet "{name}".', + msgInvalidFileType: 'Ogiltig typ för filen "{name}". Endast "{types}" filtyper stöds.', + msgInvalidFileExtension: 'Ogiltigt filtillägg för filen "{name}". Endast "{extensions}" filer stöds.', + msgFileTypes: { + 'image': 'bild', + 'html': 'HTML', + 'text': 'text', + 'video': 'video', + 'audio': 'ljud', + 'flash': 'flash', + 'pdf': 'PDF', + 'object': 'objekt' + }, + msgUploadAborted: 'Filöverföringen avbröts', + msgUploadThreshold: 'Bearbetar...', + msgUploadBegin: 'Påbörjar...', + msgUploadEnd: 'Färdig', + msgUploadResume: 'Resuming upload...', + msgUploadEmpty: 'Ingen giltig data tillgänglig för uppladdning.', + msgUploadError: 'Upload Error', + msgDeleteError: 'Delete Error', + msgProgressError: 'Error', + msgValidationError: 'Valideringsfel', + msgLoading: 'Laddar fil {index} av {files} …', + msgProgress: 'Laddar fil {index} av {files} - {name} - {percent}% färdig.', + msgSelected: '{n} {files} valda', + msgFoldersNotAllowed: 'Endast drag & släppfiler! Skippade {n} släpta mappar.', + msgImageWidthSmall: 'Bredd på bildfilen "{name}" måste minst vara {size} pixlar.', + msgImageHeightSmall: 'Höjden på bildfilen "{name}" måste minst vara {size} pixlar.', + msgImageWidthLarge: 'Bredd på bildfil "{name}" kan inte överstiga {size} pixlar.', + msgImageHeightLarge: 'Höjden på bildfilen "{name}" kan inte överstiga {size} pixlar.', + msgImageResizeError: 'Det gick inte att hämta bildens dimensioner för att ändra storlek.', + msgImageResizeException: 'Fel vid storleksändring av bilden.<pre>{errors}</pre>', + msgAjaxError: 'Något gick fel med {operation} operationen. Försök igen senare!', + msgAjaxProgressError: '{operation} misslyckades', + msgDuplicateFile: 'File "{name}" of same size "{size} KB" has already been selected earlier. Skipping duplicate selection.', + msgResumableUploadRetriesExceeded: 'Upload aborted beyond <b>{max}</b> retries for file <b>{file}</b>! Error Details: <pre>{error}</pre>', + msgPendingTime: '{time} remaining', + msgCalculatingTime: 'calculating time remaining', + ajaxOperations: { + deleteThumb: 'file delete', + uploadThumb: 'file upload', + uploadBatch: 'batch file upload', + uploadExtra: 'form data upload' + }, + dropZoneTitle: 'Drag & släpp filer här …', + dropZoneClickTitle: '<br>(eller klicka för att markera {files})', + fileActionSettings: { + removeTitle: 'Ta bort fil', + uploadTitle: 'Ladda upp fil', + uploadRetryTitle: 'Retry upload', + zoomTitle: 'Visa detaljer', + dragTitle: 'Flytta / Ändra ordning', + indicatorNewTitle: 'Inte uppladdat ännu', + indicatorSuccessTitle: 'Uppladdad', + indicatorErrorTitle: 'Uppladdningsfel', + indicatorPausedTitle: 'Upload Paused', + indicatorLoadingTitle: 'Laddar upp...' + }, + previewZoomButtonTitles: { + prev: 'Visa föregående fil', + next: 'Visa nästa fil', + toggleheader: 'Rubrik', + fullscreen: 'Fullskärm', + borderless: 'Gränslös', + close: 'Stäng detaljerad förhandsgranskning' + } + }; +})(window.jQuery);
\ No newline at end of file diff --git a/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/th.js b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/th.js new file mode 100644 index 00000000..c00f82ea --- /dev/null +++ b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/th.js @@ -0,0 +1,111 @@ +/*! + * FileInput Thai Translations + * + * This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or + * any HTML markup tags in the messages must not be converted or translated. + * + * @see http://github.com/kartik-v/bootstrap-fileinput + * + * NOTE: this file must be saved in UTF-8 encoding. + */ +(function ($) { + "use strict"; + + $.fn.fileinputLocales['th'] = { + fileSingle: 'ไฟล์', + filePlural: 'ไฟล์', + browseLabel: 'เลือกดู …', + removeLabel: 'ลบทิ้ง', + removeTitle: 'ลบไฟล์ที่เลือกทิ้ง', + cancelLabel: 'ยกเลิก', + cancelTitle: 'ยกเลิกการอัพโหลด', + pauseLabel: 'Pause', + pauseTitle: 'Pause ongoing upload', + uploadLabel: 'อัพโหลด', + uploadTitle: 'อัพโหลดไฟล์ที่เลือก', + msgNo: 'ไม่', + msgNoFilesSelected: '', + msgPaused: 'Paused', + msgCancelled: 'ยกเลิก', + msgPlaceholder: 'Select {files}...', + msgZoomModalHeading: 'ตัวอย่างละเอียด', + msgFileRequired: 'You must select a file to upload.', + msgSizeTooSmall: 'File "{name}" (<b>{size} KB</b>) is too small and must be larger than <b>{minSize} KB</b>.', + msgSizeTooLarge: 'ไฟล์ "{name}" (<b>{size} KB</b>) มีขนาดเกินที่ระบบอนุญาตที่ <b>{maxSize} KB</b>, กรุณาลองใหม่อีกครั้ง!', + msgFilesTooLess: 'คุณต้องเลือกไฟล์จำนวนอย่างน้อย <b>{n}</b> {files} เพื่ออัพโหลด, กรุณาลองใหม่อีกครั้ง!', + msgFilesTooMany: 'ไฟล์ที่คุณเลือกมีจำนวน <b>({n})</b> ซึ่งเกินกว่าที่ระบบอนุญาตที่ <b>{m}</b>, กรุณาลองใหม่อีกครั้ง!', + msgFileNotFound: 'ไม่พบไฟล์ "{name}" !', + msgFileSecured: 'ระบบความปลอดภัยไม่อนุญาตให้อ่านไฟล์ "{name}".', + msgFileNotReadable: 'ไม่สามารถอ่านไฟล์ "{name}" ได้', + msgFilePreviewAborted: 'ไฟล์ "{name}" ไม่อนุญาตให้ดูตัวอย่าง', + msgFilePreviewError: 'พบปัญหาในการดูตัวอย่างไฟล์ "{name}".', + msgInvalidFileName: 'Invalid or unsupported characters in file name "{name}".', + msgInvalidFileType: 'ไฟล์ "{name}" เป็นประเภทไฟล์ที่ไม่ถูกต้อง, อนุญาตเฉพาะไฟล์ประเภท "{types}"', + msgInvalidFileExtension: 'ไฟล์ "{name}" เป็น extension ที่ไมถูกต้อง, อนุญาตเฉพาะไฟล์ extension "{extensions}"', + msgFileTypes: { + 'image': 'image', + 'html': 'HTML', + 'text': 'text', + 'video': 'video', + 'audio': 'audio', + 'flash': 'flash', + 'pdf': 'PDF', + 'object': 'object' + }, + msgUploadAborted: 'อัปโหลดไฟล์ถูกยกเลิก', + msgUploadThreshold: 'Processing...', + msgUploadBegin: 'Initializing...', + msgUploadEnd: 'Done', + msgUploadResume: 'Resuming upload...', + msgUploadEmpty: 'No valid data available for upload.', + msgUploadError: 'Upload Error', + msgDeleteError: 'Delete Error', + msgProgressError: 'Error', + msgValidationError: 'ข้อผิดพลาดในการตรวจสอบ', + msgLoading: 'กำลังโหลดไฟล์ {index} จาก {files} …', + msgProgress: 'กำลังโหลดไฟล์ {index} จาก {files} - {name} - {percent}%', + msgSelected: '{n} {files} ถูกเลือก', + msgFoldersNotAllowed: 'Drag & drop เฉพาะไฟล์เท่านั้น! ข้าม dropped folder จำนวน {n}', + msgImageWidthSmall: 'ความกว้างของภาพไฟล์ "{name}" ต้องมีอย่างน้อย {size} px.', + msgImageHeightSmall: 'ความสูงของภาพไฟล์ "{name}" ต้องมีอย่างน้อย {size} px.', + msgImageWidthLarge: 'ความกว้างของภาพไฟล์ "{name}" ไม่เกิน {size} พิกเซล.', + msgImageHeightLarge: 'ความสูงของไฟล์ภาพ "{name}" ไม่เกิน {size} พิกเซล.', + msgImageResizeError: 'ไม่สามารถรับขนาดภาพเพื่อปรับขนาด', + msgImageResizeException: 'ข้อผิดพลาดขณะปรับขนาดภาพ<pre>{errors}</pre>', + msgAjaxError: 'Something went wrong with the {operation} operation. Please try again later!', + msgAjaxProgressError: '{operation} failed', + msgDuplicateFile: 'File "{name}" of same size "{size} KB" has already been selected earlier. Skipping duplicate selection.', + msgResumableUploadRetriesExceeded: 'Upload aborted beyond <b>{max}</b> retries for file <b>{file}</b>! Error Details: <pre>{error}</pre>', + msgPendingTime: '{time} remaining', + msgCalculatingTime: 'calculating time remaining', + ajaxOperations: { + deleteThumb: 'file delete', + uploadThumb: 'file upload', + uploadBatch: 'batch file upload', + uploadExtra: 'form data upload' + }, + dropZoneTitle: 'Drag & drop ไฟล์ตรงนี้ …', + dropZoneClickTitle: '<br>(or click to select {files})', + fileActionSettings: { + removeTitle: 'ลบไฟล์', + uploadTitle: 'อัปโหลดไฟล์', + uploadRetryTitle: 'Retry upload', + downloadTitle: 'Download file', + zoomTitle: 'ดูรายละเอียด', + dragTitle: 'Move / Rearrange', + indicatorNewTitle: 'ยังไม่ได้อัปโหลด', + indicatorSuccessTitle: 'อัพโหลด', + indicatorErrorTitle: 'อัปโหลดข้อผิดพลาด', + indicatorPausedTitle: 'Upload Paused', + indicatorLoadingTitle: 'อัพโหลด ...' + }, + previewZoomButtonTitles: { + prev: 'View previous file', + next: 'View next file', + toggleheader: 'Toggle header', + fullscreen: 'Toggle full screen', + borderless: 'Toggle borderless mode', + close: 'Close detailed preview' + } + }; +})(window.jQuery);
\ No newline at end of file diff --git a/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/tr.js b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/tr.js new file mode 100644 index 00000000..a7efa29e --- /dev/null +++ b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/tr.js @@ -0,0 +1,110 @@ +/*! + * FileInput Turkish Translations + * + * This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or + * any HTML markup tags in the messages must not be converted or translated. + * + * @see http://github.com/kartik-v/bootstrap-fileinput + * + * NOTE: this file must be saved in UTF-8 encoding. + */ +(function ($) { + "use strict"; + + $.fn.fileinputLocales['tr'] = { + fileSingle: 'dosya', + filePlural: 'dosyalar', + browseLabel: 'Gözat …', + removeLabel: 'Sil', + removeTitle: 'Seçilen dosyaları sil', + cancelLabel: 'İptal', + cancelTitle: 'Devam eden yüklemeyi iptal et', + pauseLabel: 'Pause', + pauseTitle: 'Pause ongoing upload', + uploadLabel: 'Yükle', + uploadTitle: 'Seçilen dosyaları yükle', + msgNo: 'Hayır', + msgNoFilesSelected: '', + msgPaused: 'Paused', + msgCancelled: 'İptal edildi', + msgPlaceholder: 'Seçilen {files}...', + msgZoomModalHeading: 'Detaylı Önizleme', + msgFileRequired: 'Yüklemek için bir dosya seçmelisiniz.', + msgSizeTooSmall: '"{name}"(<b>{size} KB</b>) dosyası çok küçük ve <b>{minSize} KB</b> boyutundan büyük olmalıdır.', + msgSizeTooLarge: '"{name}" dosyasının boyutu (<b>{size} KB</b>) izin verilen azami dosya boyutu olan <b>{maxSize} KB</b>\'tan büyük.', + msgFilesTooLess: 'Yüklemek için en az <b>{n}</b> {files} dosya seçmelisiniz.', + msgFilesTooMany: 'Yüklemek için seçtiğiniz dosya sayısı <b>({n})</b> azami limitin <b>({m})</b> altında olmalıdır.', + msgFileNotFound: '"{name}" dosyası bulunamadı!', + msgFileSecured: 'Güvenlik kısıtlamaları "{name}" dosyasının okunmasını engelliyor.', + msgFileNotReadable: '"{name}" dosyası okunabilir değil.', + msgFilePreviewAborted: '"{name}" dosyası için önizleme iptal edildi.', + msgFilePreviewError: '"{name}" dosyası okunurken bir hata oluştu.', + msgInvalidFileName: '"{name}" dosya adında geçersiz veya desteklenmeyen karakterler var.', + msgInvalidFileType: '"{name}" dosyasının türü geçerli değil. Yalnızca "{types}" türünde dosyalara izin veriliyor.', + msgInvalidFileExtension: '"{name}" dosyasının uzantısı geçersiz. Yalnızca "{extensions}" uzantılı dosyalara izin veriliyor.', + msgFileTypes: { + 'image': 'image', + 'html': 'HTML', + 'text': 'text', + 'video': 'video', + 'audio': 'audio', + 'flash': 'flash', + 'pdf': 'PDF', + 'object': 'object' + }, + msgUploadAborted: 'Dosya yükleme iptal edildi', + msgUploadThreshold: 'İşlem yapılıyor...', + msgUploadBegin: 'Başlıyor...', + msgUploadEnd: 'Başarılı', + msgUploadResume: 'Resuming upload...', + msgUploadEmpty: 'Yüklemek için geçerli veri mevcut değil.', + msgUploadError: 'Upload Error', + msgDeleteError: 'Delete Error', + msgProgressError: 'Hata', + msgValidationError: 'Doğrulama Hatası', + msgLoading: 'Dosya yükleniyor {index} / {files} …', + msgProgress: 'Dosya yükleniyor {index} / {files} - {name} - %{percent} tamamlandı.', + msgSelected: '{n} {files} seçildi', + msgFoldersNotAllowed: 'Yalnızca dosyaları sürükleyip bırakabilirsiniz! {n} dizin(ler) göz ardı edildi.', + msgImageWidthSmall: '"{name}" adlı görüntü dosyasının genişliği en az {size} piksel olmalıdır.', + msgImageHeightSmall: '"{name}" adlı görüntü dosyasının yüksekliği en az {size} piksel olmalıdır.', + msgImageWidthLarge: '"{name}" adlı görüntü dosyasının genişliği {size} pikseli geçemez.', + msgImageHeightLarge: '"{name}" adlı görüntü dosyasının yüksekliği {size} pikseli geçemez.', + msgImageResizeError: 'Görüntü boyutlarını yeniden boyutlandıramadı.', + msgImageResizeException: 'Görüntü boyutlandırma sırasında hata.<pre>{errors}</pre>', + msgAjaxError: '{operation} işlemi ile ilgili bir şeyler ters gitti. Lütfen daha sonra tekrar deneyiniz!', + msgAjaxProgressError: '{operation} işlemi başarısız oldu.', + msgDuplicateFile: 'File "{name}" of same size "{size} KB" has already been selected earlier. Skipping duplicate selection.', + msgResumableUploadRetriesExceeded: 'Upload aborted beyond <b>{max}</b> retries for file <b>{file}</b>! Error Details: <pre>{error}</pre>', + msgPendingTime: '{time} remaining', + msgCalculatingTime: 'calculating time remaining', + ajaxOperations: { + deleteThumb: 'dosya silme', + uploadThumb: 'dosya yükleme', + uploadBatch: 'toplu dosya yükleme', + uploadExtra: 'form verisi yükleme' + }, + dropZoneTitle: 'Dosyaları buraya sürükleyip bırakın', + dropZoneClickTitle: '<br>(ya da {files} seçmek için tıklayınız)', + fileActionSettings: { + removeTitle: 'Dosyayı kaldır', + uploadTitle: 'Dosyayı yükle', + uploadRetryTitle: 'Retry upload', + zoomTitle: 'Ayrıntıları görüntüle', + dragTitle: 'Taşı / Yeniden düzenle', + indicatorNewTitle: 'Henüz yüklenmedi', + indicatorSuccessTitle: 'Yüklendi', + indicatorErrorTitle: 'Yükleme Hatası', + indicatorPausedTitle: 'Upload Paused', + indicatorLoadingTitle: 'Yükleniyor ...' + }, + previewZoomButtonTitles: { + prev: 'Önceki dosyayı göster', + next: 'Sonraki dosyayı göster', + toggleheader: 'Üst bilgi geçiş', + fullscreen: 'Tam ekran geçiş', + borderless: 'Çerçevesiz moda geçiş', + close: 'Detaylı önizlemeyi kapat' + } + }; +})(window.jQuery); diff --git a/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/uk.js b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/uk.js new file mode 100644 index 00000000..94928353 --- /dev/null +++ b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/uk.js @@ -0,0 +1,112 @@ +/*! + * FileInput Ukrainian Translations + * + * This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or + * any HTML markup tags in the messages must not be converted or translated. + * + * @see http://github.com/kartik-v/bootstrap-fileinput + * @author CyanoFresh <cyanofresh@gmail.com> + * + * NOTE: this file must be saved in UTF-8 encoding. + */ +(function ($) { + "use strict"; + + $.fn.fileinputLocales['uk'] = { + fileSingle: 'файл', + filePlural: 'файли', + browseLabel: 'Вибрати …', + removeLabel: 'Видалити', + removeTitle: 'Видалити вибрані файли', + cancelLabel: 'Скасувати', + cancelTitle: 'Скасувати поточне відвантаження', + pauseLabel: 'Pause', + pauseTitle: 'Pause ongoing upload', + uploadLabel: 'Відвантажити', + uploadTitle: 'Відвантажити обрані файли', + msgNo: 'Немає', + msgNoFilesSelected: '', + msgPaused: 'Paused', + msgCancelled: 'Cкасовано', + msgPlaceholder: 'Оберіть {files}...', + msgZoomModalHeading: 'Детальний превью', + msgFileRequired: 'Ви повинні обрати файл для завантаження.', + msgSizeTooSmall: 'Файл "{name}" (<b>{size} KB</b>) занадто малий і повинен бути більший, ніж <b>{minSize} KB</b>.', + msgSizeTooLarge: 'Файл "{name}" (<b>{size} KB</b>) перевищує максимальний розмір <b>{maxSize} KB</b>.', + msgFilesTooLess: 'Ви повинні обрати як мінімум <b>{n}</b> {files} для відвантаження.', + msgFilesTooMany: 'Кількість обраних файлів <b>({n})</b> перевищує максимально допустиму кількість <b>{m}</b>.', + msgFileNotFound: 'Файл "{name}" не знайдено!', + msgFileSecured: 'Обмеження безпеки перешкоджають читанню файла "{name}".', + msgFileNotReadable: 'Файл "{name}" неможливо прочитати.', + msgFilePreviewAborted: 'Перегляд скасований для файла "{name}".', + msgFilePreviewError: 'Сталася помилка під час читання файла "{name}".', + msgInvalidFileName: 'Недійсні чи непідтримувані символи в імені файлу "{name}".', + msgInvalidFileType: 'Заборонений тип файла для "{name}". Тільки "{types}" дозволені.', + msgInvalidFileExtension: 'Заборонене розширення для файла "{name}". Тільки "{extensions}" дозволені.', + msgFileTypes: { + 'image': 'image', + 'html': 'HTML', + 'text': 'text', + 'video': 'video', + 'audio': 'audio', + 'flash': 'flash', + 'pdf': 'PDF', + 'object': 'object' + }, + msgUploadAborted: 'Вивантаження файлу перервана', + msgUploadThreshold: 'Обробка...', + msgUploadBegin: 'Ініціалізація...', + msgUploadEnd: 'Готово', + msgUploadResume: 'Resuming upload...', + msgUploadEmpty: 'Немає доступних даних для відвантаження.', + msgUploadError: 'Upload Error', + msgDeleteError: 'Delete Error', + msgProgressError: 'Помилка', + msgValidationError: 'Помилка перевірки', + msgLoading: 'Відвантаження файла {index} із {files} …', + msgProgress: 'Відвантаження файла {index} із {files} - {name} - {percent}% завершено.', + msgSelected: '{n} {files} обрано', + msgFoldersNotAllowed: 'Дозволено перетягувати тільки файли! Пропущено {n} папок.', + msgImageWidthSmall: 'Ширина зображення "{name}" повинна бути не менше {size} px.', + msgImageHeightSmall: 'Висота зображення "{name}" повинна бути не менше {size} px.', + msgImageWidthLarge: 'Ширина зображення "{name}" не може перевищувати {size} px.', + msgImageHeightLarge: 'Висота зображення "{name}" не може перевищувати {size} px.', + msgImageResizeError: 'Не вдалося розміри зображення, щоб змінити розмір.', + msgImageResizeException: 'Помилка при зміні розміру зображення.<pre>{errors}</pre>', + msgAjaxError: 'Щось не так із операцією {operation}. Будь ласка, спробуйте пізніше!', + msgAjaxProgressError: 'помилка {operation}', + msgDuplicateFile: 'File "{name}" of same size "{size} KB" has already been selected earlier. Skipping duplicate selection.', + msgResumableUploadRetriesExceeded: 'Upload aborted beyond <b>{max}</b> retries for file <b>{file}</b>! Error Details: <pre>{error}</pre>', + msgPendingTime: '{time} remaining', + msgCalculatingTime: 'calculating time remaining', + ajaxOperations: { + deleteThumb: 'видалити файл', + uploadThumb: 'відвантажити файл', + uploadBatch: 'batch file upload', + uploadExtra: 'form data upload' + }, + dropZoneTitle: 'Перетягніть файли сюди …', + dropZoneClickTitle: '<br>(або клацність та оберіть {files})', + fileActionSettings: { + removeTitle: 'Видалити файл', + uploadTitle: 'Відвантажити файл', + uploadRetryTitle: 'Повторити відвантаження', + downloadTitle: 'Завантажити файл', + zoomTitle: 'Подивитися деталі', + dragTitle: 'Перенести / Переставити', + indicatorNewTitle: 'Ще не відвантажено', + indicatorSuccessTitle: 'Відвантажено', + indicatorErrorTitle: 'Помилка при відвантаженні', + indicatorPausedTitle: 'Upload Paused', + indicatorLoadingTitle: 'Завантаження ...' + }, + previewZoomButtonTitles: { + prev: 'Переглянути попередній файл', + next: 'Переглянути наступний файл', + toggleheader: 'Перемкнути заголовок', + fullscreen: 'Перемкнути повноекранний режим', + borderless: 'Перемкнути режим без полів', + close: 'Закрити детальний перегляд' + } + }; +})(window.jQuery); diff --git a/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/uz.js b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/uz.js new file mode 100644 index 00000000..7c43e166 --- /dev/null +++ b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/uz.js @@ -0,0 +1,112 @@ +/*! + * FileInput Uzbek Translations + * + * This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or + * any HTML markup tags in the messages must not be converted or translated. + * + * @see http://github.com/kartik-v/bootstrap-fileinput + * @author CyanoFresh <cyanofresh@gmail.com> + * + * NOTE: this file must be saved in UTF-8 encoding. + */ +(function ($) { + "use strict"; + + $.fn.fileinputLocales.uz = { + fileSingle: 'fayl', + filePlural: 'fayllar', + browseLabel: 'Tanlash …', + removeLabel: 'O\'chirish', + removeTitle: 'Tanlangan fayllarni tozalash', + cancelLabel: 'Bekor qilish', + cancelTitle: 'Joriy yuklab olishni bekor qilish', + pauseLabel: 'Pause', + pauseTitle: 'Pause ongoing upload', + uploadLabel: 'Yuklab olish', + uploadTitle: 'Tanlangan fayllarni yuklash', + msgNo: 'No', + msgNoFilesSelected: 'No files selected', + msgPaused: 'Paused', + msgCancelled: 'Cancelled', + msgPlaceholder: 'Select {files}...', + msgZoomModalHeading: 'Detailed Preview', + msgFileRequired: 'You must select a file to upload.', + msgSizeTooSmall: 'File "{name}" (<b>{size} KB</b>) is too small and must be larger than <b>{minSize} KB</b>.', + msgSizeTooLarge: '"{name}" fayl (<b>{size} KB</b>) ruxsat etilgan maksimal yuklash hajmidan <b>{maxSize} KB</b> ortiq. Yuklashni qayta urinib ko\'ring!', + msgFilesTooLess: 'Yuklash uchun kamida <b>{n}</b> {files} tanlashingiz kerak. Yuklashni qayta urinib ko\'ring!', + msgFilesTooMany: 'Tanlangan fayllar <b>({n})</b> ruxsat etilgan maksimal yuklash hajmidan <b>{m}</b> ortiq. Yuklashni qayta urinib ko\'ring!', + msgFileNotFound: '"{name}" fayl topilmaydi!', + msgFileSecured: 'Security restrictions prevent reading the file "{name}".', + msgFileNotReadable: '"{name}" fayl o\'qilmaydi.', + msgFilePreviewAborted: '"{name}" Ffylni oldindan ko\'rish jarayoni to\'xtatildi.', + msgFilePreviewError: '"{name}" faylni o\'qish paytida xatolik yuz berdi.', + msgInvalidFileName: 'Invalid or unsupported characters in file name "{name}".', + msgInvalidFileType: '"{name}" fayl uchun yaroqsiz tur. Faqat "{types}" fayllari qo\'llab-quvvatlanadi.', + msgInvalidFileExtension: '"{name}" fayl uchun noto\'g\'ri kengaytma. Faqat "{extensions}" fayllari qo\'llab-quvvatlanadi.', + msgFileTypes: { + 'image': 'image', + 'html': 'HTML', + 'text': 'text', + 'video': 'video', + 'audio': 'audio', + 'flash': 'flash', + 'pdf': 'PDF', + 'object': 'object' + }, + msgUploadAborted: 'The file upload was aborted', + msgUploadThreshold: 'Processing...', + msgUploadBegin: 'Initializing...', + msgUploadEnd: 'Done', + msgUploadResume: 'Resuming upload...', + msgUploadEmpty: 'No valid data available for upload.', + msgUploadError: 'Upload Error', + msgDeleteError: 'Delete Error', + msgProgressError: 'Error', + msgValidationError: 'Fayl yuklash xatosi', + msgLoading: '{Files} dan {index} faylini yuklash …', + msgProgress: '{Files} dan {index}{name} faylini yuklashi - {percent}% tugallandi.', + msgSelected: '{n} {files} tanlangan', + msgFoldersNotAllowed: 'Faqat tortib qo\'yiladon fayllar! {n} o\'tirilgan tashlangan papka(lar).', + msgImageWidthSmall: 'Width of image file "{name}" must be at least {size} px.', + msgImageHeightSmall: 'Height of image file "{name}" must be at least {size} px.', + msgImageWidthLarge: 'Width of image file "{name}" cannot exceed {size} px.', + msgImageHeightLarge: 'Height of image file "{name}" cannot exceed {size} px.', + msgImageResizeError: 'Could not get the image dimensions to resize.', + msgImageResizeException: 'Error while resizing the image.<pre>{errors}</pre>', + msgAjaxError: 'Something went wrong with the {operation} operation. Please try again later!', + msgAjaxProgressError: '{operation} failed', + msgDuplicateFile: 'File "{name}" of same size "{size} KB" has already been selected earlier. Skipping duplicate selection.', + msgResumableUploadRetriesExceeded: 'Upload aborted beyond <b>{max}</b> retries for file <b>{file}</b>! Error Details: <pre>{error}</pre>', + msgPendingTime: '{time} remaining', + msgCalculatingTime: 'calculating time remaining', + ajaxOperations: { + deleteThumb: 'file delete', + uploadThumb: 'file upload', + uploadBatch: 'batch file upload', + uploadExtra: 'form data upload' + }, + dropZoneTitle: 'Fayllarni bu yerga tortib qo\'ying …', + dropZoneClickTitle: '<br>(or click to select {files})', + fileActionSettings: { + removeTitle: 'Remove file', + uploadTitle: 'Upload file', + uploadRetryTitle: 'Retry upload', + downloadTitle: 'Download file', + zoomTitle: 'View details', + dragTitle: 'Move / Rearrange', + indicatorNewTitle: 'Not uploaded yet', + indicatorSuccessTitle: 'Uploaded', + indicatorErrorTitle: 'Upload Error', + indicatorPausedTitle: 'Upload Paused', + indicatorLoadingTitle: 'Uploading ...' + }, + previewZoomButtonTitles: { + prev: 'View previous file', + next: 'View next file', + toggleheader: 'Toggle header', + fullscreen: 'Toggle full screen', + borderless: 'Toggle borderless mode', + close: 'Close detailed preview' + } + }; +})(window.jQuery); diff --git a/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/vi.js b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/vi.js new file mode 100644 index 00000000..7a51a4b9 --- /dev/null +++ b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/vi.js @@ -0,0 +1,112 @@ +/*! + * FileInput Vietnamese Translations + * + * This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or + * any HTML markup tags in the messages must not be converted or translated. + * + * @see http://github.com/kartik-v/bootstrap-fileinput + * + * NOTE: this file must be saved in UTF-8 encoding. + */ + +(function ($) { + "use strict"; + + $.fn.fileinputLocales['vi'] = { + fileSingle: 'tập tin', + filePlural: 'các tập tin', + browseLabel: 'Duyệt …', + removeLabel: 'Gỡ bỏ', + removeTitle: 'Bỏ tập tin đã chọn', + cancelLabel: 'Hủy', + cancelTitle: 'Hủy upload', + pauseLabel: 'Pause', + pauseTitle: 'Pause ongoing upload', + uploadLabel: 'Upload', + uploadTitle: 'Upload tập tin đã chọn', + msgNo: 'Không', + msgNoFilesSelected: 'Không tập tin nào được chọn', + msgPaused: 'Paused', + msgCancelled: 'Đã hủy', + msgPlaceholder: 'Select {files}...', + msgZoomModalHeading: 'Chi tiết xem trước', + msgFileRequired: 'You must select a file to upload.', + msgSizeTooSmall: 'File "{name}" (<b>{size} KB</b>) is too small and must be larger than <b>{minSize} KB</b>.', + msgSizeTooLarge: 'Tập tin "{name}" (<b>{size} KB</b>) vượt quá kích thước giới hạn cho phép <b>{maxSize} KB</b>.', + msgFilesTooLess: 'Bạn phải chọn ít nhất <b>{n}</b> {files} để upload.', + msgFilesTooMany: 'Số lượng tập tin upload <b>({n})</b> vượt quá giới hạn cho phép là <b>{m}</b>.', + msgFileNotFound: 'Không tìm thấy tập tin "{name}"!', + msgFileSecured: 'Các hạn chế về bảo mật không cho phép đọc tập tin "{name}".', + msgFileNotReadable: 'Không đọc được tập tin "{name}".', + msgFilePreviewAborted: 'Đã dừng xem trước tập tin "{name}".', + msgFilePreviewError: 'Đã xảy ra lỗi khi đọc tập tin "{name}".', + msgInvalidFileName: 'Invalid or unsupported characters in file name "{name}".', + msgInvalidFileType: 'Tập tin "{name}" không hợp lệ. Chỉ hỗ trợ loại tập tin "{types}".', + msgInvalidFileExtension: 'Phần mở rộng của tập tin "{name}" không hợp lệ. Chỉ hỗ trợ phần mở rộng "{extensions}".', + msgFileTypes: { + 'image': 'image', + 'html': 'HTML', + 'text': 'text', + 'video': 'video', + 'audio': 'audio', + 'flash': 'flash', + 'pdf': 'PDF', + 'object': 'object' + }, + msgUploadAborted: 'Đã dừng upload', + msgUploadThreshold: 'Đang xử lý...', + msgUploadBegin: 'Initializing...', + msgUploadEnd: 'Done', + msgUploadResume: 'Resuming upload...', + msgUploadEmpty: 'No valid data available for upload.', + msgUploadError: 'Upload Error', + msgDeleteError: 'Delete Error', + msgProgressError: 'Error', + msgValidationError: 'Lỗi xác nhận', + msgLoading: 'Đang nạp {index} tập tin trong số {files} …', + msgProgress: 'Đang nạp {index} tập tin trong số {files} - {name} - {percent}% hoàn thành.', + msgSelected: '{n} {files} được chọn', + msgFoldersNotAllowed: 'Chỉ kéo thả tập tin! Đã bỏ qua {n} thư mục.', + msgImageWidthSmall: 'Chiều rộng của hình ảnh "{name}" phải tối thiểu là {size} px.', + msgImageHeightSmall: 'Chiều cao của hình ảnh "{name}" phải tối thiểu là {size} px.', + msgImageWidthLarge: 'Chiều rộng của hình ảnh "{name}" không được quá {size} px.', + msgImageHeightLarge: 'Chiều cao của hình ảnh "{name}" không được quá {size} px.', + msgImageResizeError: 'Không lấy được kích thước của hình ảnh để resize.', + msgImageResizeException: 'Resize hình ảnh bị lỗi.<pre>{errors}</pre>', + msgAjaxError: 'Something went wrong with the {operation} operation. Please try again later!', + msgAjaxProgressError: '{operation} failed', + msgDuplicateFile: 'File "{name}" of same size "{size} KB" has already been selected earlier. Skipping duplicate selection.', + msgResumableUploadRetriesExceeded: 'Upload aborted beyond <b>{max}</b> retries for file <b>{file}</b>! Error Details: <pre>{error}</pre>', + msgPendingTime: '{time} remaining', + msgCalculatingTime: 'calculating time remaining', + ajaxOperations: { + deleteThumb: 'file delete', + uploadThumb: 'file upload', + uploadBatch: 'batch file upload', + uploadExtra: 'form data upload' + }, + dropZoneTitle: 'Kéo thả tập tin vào đây …', + dropZoneClickTitle: '<br>(hoặc click để chọn {files})', + fileActionSettings: { + removeTitle: 'Gỡ bỏ', + uploadTitle: 'Upload tập tin', + uploadRetryTitle: 'Retry upload', + downloadTitle: 'Download file', + zoomTitle: 'Phóng lớn', + dragTitle: 'Di chuyển / Sắp xếp lại', + indicatorNewTitle: 'Chưa được upload', + indicatorSuccessTitle: 'Đã upload', + indicatorErrorTitle: 'Upload bị lỗi', + indicatorPausedTitle: 'Upload Paused', + indicatorLoadingTitle: 'Đang upload ...' + }, + previewZoomButtonTitles: { + prev: 'Xem tập tin phía trước', + next: 'Xem tập tin tiếp theo', + toggleheader: 'Ẩn/hiện tiêu đề', + fullscreen: 'Bật/tắt toàn màn hình', + borderless: 'Bật/tắt chế độ không viền', + close: 'Đóng' + } + }; +})(window.jQuery); diff --git a/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/zh-TW.js b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/zh-TW.js new file mode 100644 index 00000000..a07eb079 --- /dev/null +++ b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/zh-TW.js @@ -0,0 +1,113 @@ +/*! + * FileInput Chinese Traditional Translations + * + * This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or + * any HTML markup tags in the messages must not be converted or translated. + * + * @see http://github.com/kartik-v/bootstrap-fileinput + * @author kangqf <kangqingfei@gmail.com> + * + * NOTE: this file must be saved in UTF-8 encoding. + */ +(function ($) { + "use strict"; + + $.fn.fileinputLocales['zh-TW'] = { + fileSingle: '單一檔案', + filePlural: '複選檔案', + browseLabel: '瀏覽 …', + removeLabel: '移除', + removeTitle: '清除選取檔案', + cancelLabel: '取消', + cancelTitle: '取消上傳中檔案', + pauseLabel: 'Pause', + pauseTitle: 'Pause ongoing upload', + uploadLabel: '上傳', + uploadTitle: '上傳選取檔案', + msgNo: '沒有', + msgNoFilesSelected: '未選擇檔案', + msgPaused: 'Paused', + msgCancelled: '取消', + zoomTitle: '詳細資料', + msgPlaceholder: '選擇 {files}...', + msgZoomModalHeading: '內容預覽', + msgFileRequired: '必須選擇壹個文件上傳.', + msgSizeTooSmall: '檔案 "{name}" (<b>{size} KB</b>) 必須大於限定大小 <b>{minSize} KB</b>.', + msgSizeTooLarge: '檔案 "{name}" (<b>{size} KB</b>) 大小超過上限 <b>{maxSize} KB</b>.', + msgFilesTooLess: '最少必須選擇 <b>{n}</b> {files} 來上傳. ', + msgFilesTooMany: '上傳的檔案數量 <b>({n})</b> 超過最大檔案上傳限制 <b>{m}</b>.', + msgFileNotFound: '檔案 "{name}" 未發現!', + msgFileSecured: '安全限制,禁止讀取檔案 "{name}".', + msgFileNotReadable: '文件 "{name}" 不可讀取.', + msgFilePreviewAborted: '檔案 "{name}" 預覽中止.', + msgFilePreviewError: '讀取 "{name}" 發生錯誤.', + msgInvalidFileName: '附檔名 "{name}" 包含非法字符.', + msgInvalidFileType: '檔案類型錯誤 "{name}". 只能使用 "{types}" 類型的檔案.', + msgInvalidFileExtension: '附檔名錯誤 "{name}". 只能使用 "{extensions}" 的檔案.', + msgFileTypes: { + 'image': 'image', + 'html': 'HTML', + 'text': 'text', + 'video': 'video', + 'audio': 'audio', + 'flash': 'flash', + 'pdf': 'PDF', + 'object': 'object' + }, + msgUploadAborted: '該文件上傳被中止', + msgUploadThreshold: '處理中...', + msgUploadBegin: '正在初始化...', + msgUploadEnd: '完成', + msgUploadResume: 'Resuming upload...', + msgUploadEmpty: '無效的文件上傳.', + msgUploadError: 'Upload Error', + msgDeleteError: 'Delete Error', + msgProgressError: '上傳錯誤', + msgValidationError: '驗證錯誤', + msgLoading: '載入第 {index} 個檔案,共 {files} …', + msgProgress: '載入第 {index} 個檔案,共 {files} - {name} - {percent}% 成功.', + msgSelected: '{n} {files} 選取', + msgFoldersNotAllowed: '只支援單檔拖曳! 無法使用 {n} 拖拽的資料夹.', + msgImageWidthSmall: '圖檔寬度"{name}"必須至少為{size}像素(px).', + msgImageHeightSmall: '圖檔高度"{name}"必須至少為{size}像素(px).', + msgImageWidthLarge: '圖檔寬度"{name}"不能超過{size}像素(px).', + msgImageHeightLarge: '圖檔高度"{name}"不能超過{size}像素(px).', + msgImageResizeError: '無法獲取的圖像尺寸調整。', + msgImageResizeException: '錯誤而調整圖像大小。<pre>{errors}</pre>', + msgAjaxError: '{operation} 發生錯誤. 請重試!', + msgAjaxProgressError: '{operation} 失敗', + msgDuplicateFile: 'File "{name}" of same size "{size} KB" has already been selected earlier. Skipping duplicate selection.', + msgResumableUploadRetriesExceeded: 'Upload aborted beyond <b>{max}</b> retries for file <b>{file}</b>! Error Details: <pre>{error}</pre>', + msgPendingTime: '{time} remaining', + msgCalculatingTime: 'calculating time remaining', + ajaxOperations: { + deleteThumb: 'file delete', + uploadThumb: 'file upload', + uploadBatch: 'batch file upload', + uploadExtra: 'form data upload' + }, + dropZoneTitle: '拖曳檔案至此 …', + dropZoneClickTitle: '<br>(或點擊{files}按鈕選擇文件)', + fileActionSettings: { + removeTitle: '刪除檔案', + uploadTitle: '上傳檔案', + uploadRetryTitle: '重試', + downloadTitle: '下載檔案', + zoomTitle: '詳細資料', + dragTitle: '移動 / 重置', + indicatorNewTitle: '尚未上傳', + indicatorSuccessTitle: '上傳成功', + indicatorErrorTitle: '上傳失敗', + indicatorPausedTitle: 'Upload Paused', + indicatorLoadingTitle: '上傳中 ...' + }, + previewZoomButtonTitles: { + prev: '預覽上壹個文件', + next: '預覽下壹個文件', + toggleheader: '縮放', + fullscreen: '全屏', + borderless: '無邊界模式', + close: '關閉當前預覽' + } + }; +})(window.jQuery); diff --git a/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/zh.js b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/zh.js new file mode 100644 index 00000000..2b000e2c --- /dev/null +++ b/kvision-modules/kvision-bootstrap-upload/src/main/resources/js/locales/bootstrap-fileinput/zh.js @@ -0,0 +1,112 @@ +/*! + * FileInput Chinese Translations + * + * This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or + * any HTML markup tags in the messages must not be converted or translated. + * + * @see http://github.com/kartik-v/bootstrap-fileinput + * @author kangqf <kangqingfei@gmail.com> + * + * NOTE: this file must be saved in UTF-8 encoding. + */ +(function ($) { + "use strict"; + + $.fn.fileinputLocales['zh'] = { + fileSingle: '文件', + filePlural: '个文件', + browseLabel: '选择 …', + removeLabel: '移除', + removeTitle: '清除选中文件', + cancelLabel: '取消', + cancelTitle: '取消进行中的上传', + pauseLabel: 'Pause', + pauseTitle: 'Pause ongoing upload', + uploadLabel: '上传', + uploadTitle: '上传选中文件', + msgNo: '没有', + msgNoFilesSelected: '未选择文件', + msgPaused: 'Paused', + msgCancelled: '取消', + msgPlaceholder: '选择 {files}...', + msgZoomModalHeading: '详细预览', + msgFileRequired: '必须选择一个文件上传.', + msgSizeTooSmall: '文件 "{name}" (<b>{size} KB</b>) 必须大于限定大小 <b>{minSize} KB</b>.', + msgSizeTooLarge: '文件 "{name}" (<b>{size} KB</b>) 超过了允许大小 <b>{maxSize} KB</b>.', + msgFilesTooLess: '你必须选择最少 <b>{n}</b> {files} 来上传. ', + msgFilesTooMany: '选择的上传文件个数 <b>({n})</b> 超出最大文件的限制个数 <b>{m}</b>.', + msgFileNotFound: '文件 "{name}" 未找到!', + msgFileSecured: '安全限制,为了防止读取文件 "{name}".', + msgFileNotReadable: '文件 "{name}" 不可读.', + msgFilePreviewAborted: '取消 "{name}" 的预览.', + msgFilePreviewError: '读取 "{name}" 时出现了一个错误.', + msgInvalidFileName: '文件名 "{name}" 包含非法字符.', + msgInvalidFileType: '不正确的类型 "{name}". 只支持 "{types}" 类型的文件.', + msgInvalidFileExtension: '不正确的文件扩展名 "{name}". 只支持 "{extensions}" 的文件扩展名.', + msgFileTypes: { + 'image': 'image', + 'html': 'HTML', + 'text': 'text', + 'video': 'video', + 'audio': 'audio', + 'flash': 'flash', + 'pdf': 'PDF', + 'object': 'object' + }, + msgUploadAborted: '该文件上传被中止', + msgUploadThreshold: '处理中...', + msgUploadBegin: '正在初始化...', + msgUploadEnd: '完成', + msgUploadResume: 'Resuming upload...', + msgUploadEmpty: '无效的文件上传.', + msgUploadError: 'Upload Error', + msgDeleteError: 'Delete Error', + msgProgressError: '上传出错', + msgValidationError: '验证错误', + msgLoading: '加载第 {index} 文件 共 {files} …', + msgProgress: '加载第 {index} 文件 共 {files} - {name} - {percent}% 完成.', + msgSelected: '{n} {files} 选中', + msgFoldersNotAllowed: '只支持拖拽文件! 跳过 {n} 拖拽的文件夹.', + msgImageWidthSmall: '图像文件的"{name}"的宽度必须是至少{size}像素.', + msgImageHeightSmall: '图像文件的"{name}"的高度必须至少为{size}像素.', + msgImageWidthLarge: '图像文件"{name}"的宽度不能超过{size}像素.', + msgImageHeightLarge: '图像文件"{name}"的高度不能超过{size}像素.', + msgImageResizeError: '无法获取的图像尺寸调整。', + msgImageResizeException: '调整图像大小时发生错误。<pre>{errors}</pre>', + msgAjaxError: '{operation} 发生错误. 请重试!', + msgAjaxProgressError: '{operation} 失败', + msgDuplicateFile: 'File "{name}" of same size "{size} KB" has already been selected earlier. Skipping duplicate selection.', + msgResumableUploadRetriesExceeded: 'Upload aborted beyond <b>{max}</b> retries for file <b>{file}</b>! Error Details: <pre>{error}</pre>', + msgPendingTime: '{time} remaining', + msgCalculatingTime: 'calculating time remaining', + ajaxOperations: { + deleteThumb: '删除文件', + uploadThumb: '上传文件', + uploadBatch: '批量上传', + uploadExtra: '表单数据上传' + }, + dropZoneTitle: '拖拽文件到这里 …<br>支持多文件同时上传', + dropZoneClickTitle: '<br>(或点击{files}按钮选择文件)', + fileActionSettings: { + removeTitle: '删除文件', + uploadTitle: '上传文件', + downloadTitle: '下载文件', + uploadRetryTitle: '重试', + zoomTitle: '查看详情', + dragTitle: '移动 / 重置', + indicatorNewTitle: '没有上传', + indicatorSuccessTitle: '上传', + indicatorErrorTitle: '上传错误', + indicatorPausedTitle: 'Upload Paused', + indicatorLoadingTitle: '上传 ...' + }, + previewZoomButtonTitles: { + prev: '预览上一个文件', + next: '预览下一个文件', + toggleheader: '缩放', + fullscreen: '全屏', + borderless: '无边界模式', + close: '关闭当前预览' + } + }; +})(window.jQuery); diff --git a/kvision-modules/kvision-bootstrap-upload/src/test/kotlin/test/pl/treksoft/kvision/TestUtil.kt b/kvision-modules/kvision-bootstrap-upload/src/test/kotlin/test/pl/treksoft/kvision/TestUtil.kt new file mode 100644 index 00000000..13c8531b --- /dev/null +++ b/kvision-modules/kvision-bootstrap-upload/src/test/kotlin/test/pl/treksoft/kvision/TestUtil.kt @@ -0,0 +1,100 @@ +/* + * Copyright (c) 2017-present Robert Jaros + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package test.pl.treksoft.kvision + +import org.w3c.dom.Element +import pl.treksoft.jquery.jQuery +import pl.treksoft.kvision.core.Widget +import pl.treksoft.kvision.panel.Root +import kotlin.browser.document +import kotlin.test.assertEquals +import kotlin.test.assertTrue + +interface TestSpec { + fun beforeTest() + + fun afterTest() + + fun run(code: () -> Unit) { + beforeTest() + code() + afterTest() + } +} + +interface SimpleSpec : TestSpec { + + override fun beforeTest() { + } + + override fun afterTest() { + } + +} + +interface DomSpec : TestSpec { + + override fun beforeTest() { + val fixture = "<div style=\"display: none\" id=\"pretest\">" + + "<div id=\"test\"></div></div>" + document.body?.insertAdjacentHTML("afterbegin", fixture) + } + + override fun afterTest() { + val div = document.getElementById("pretest") + div?.let { jQuery(it).remove() } + jQuery(".modal-backdrop").remove() + Root.shutdown() + } + + fun assertEqualsHtml(expected: String?, actual: String?, message: String?) { + if (expected != null && actual != null) { + val exp = jQuery(expected) + val act = jQuery(actual) + val result = exp[0]?.isEqualNode(act[0]) + if (result == true) { + assertTrue(result == true, message) + } else { + assertEquals(expected, actual, message) + } + } else { + assertEquals(expected, actual, message) + } + } +} + +interface WSpec : DomSpec { + + fun runW(code: (widget: Widget, element: Element?) -> Unit) { + run { + val root = Root("test", fixed = true) + val widget = Widget() + widget.id = "test_id" + root.add(widget) + val element = document.getElementById("test_id") + code(widget, element) + } + } + +} + +external fun require(name: String): dynamic diff --git a/kvision-modules/kvision-bootstrap-upload/src/test/kotlin/test/pl/treksoft/kvision/form/upload/UploadInputSpec.kt b/kvision-modules/kvision-bootstrap-upload/src/test/kotlin/test/pl/treksoft/kvision/form/upload/UploadInputSpec.kt new file mode 100644 index 00000000..de7a9315 --- /dev/null +++ b/kvision-modules/kvision-bootstrap-upload/src/test/kotlin/test/pl/treksoft/kvision/form/upload/UploadInputSpec.kt @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2017-present Robert Jaros + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package test.pl.treksoft.kvision.form.upload + +import pl.treksoft.jquery.jQuery +import pl.treksoft.kvision.form.upload.UploadInput +import pl.treksoft.kvision.panel.Root +import test.pl.treksoft.kvision.DomSpec +import kotlin.browser.document +import kotlin.test.Test + +class UploadInputSpec : DomSpec { + + @Test + fun render() { + run { + val root = Root("test", fixed = true) + val upi = UploadInput(multiple = true).apply { + id = "idti" + } + root.add(upi) + val content = document.getElementById("test")?.let { jQuery(it).find("input.form-control")[0]?.outerHTML } + assertEqualsHtml( + "<input class=\"form-control\" id=\"idti\" type=\"file\" multiple=\"true\">", + content, + "Should render correct file input control for multiple files" + ) + upi.multiple = false + val content2 = document.getElementById("test")?.let { jQuery(it).find("input.form-control")[0]?.outerHTML } + assertEqualsHtml( + "<input class=\"form-control\" id=\"idti\" type=\"file\">", + content2, + "Should render correct file input control for single file" + ) + } + } + +} diff --git a/kvision-modules/kvision-bootstrap-upload/src/test/kotlin/test/pl/treksoft/kvision/form/upload/UploadSpec.kt b/kvision-modules/kvision-bootstrap-upload/src/test/kotlin/test/pl/treksoft/kvision/form/upload/UploadSpec.kt new file mode 100644 index 00000000..92078153 --- /dev/null +++ b/kvision-modules/kvision-bootstrap-upload/src/test/kotlin/test/pl/treksoft/kvision/form/upload/UploadSpec.kt @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2017-present Robert Jaros + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package test.pl.treksoft.kvision.form.upload + +import pl.treksoft.jquery.jQuery +import pl.treksoft.kvision.form.upload.Upload +import pl.treksoft.kvision.panel.Root +import test.pl.treksoft.kvision.DomSpec +import kotlin.browser.document +import kotlin.test.Test + +class UploadSpec : DomSpec { + + @Test + fun render() { + run { + val root = Root("test", fixed = true) + val upi = Upload(multiple = true) + val id = upi.input.id + root.add(upi) + val content = document.getElementById("test")?.let { jQuery(it).find("input.form-control")[0]?.outerHTML } + assertEqualsHtml( + "<input class=\"form-control\" id=\"$id\" type=\"file\" multiple=\"true\">", + content, + "Should render correct file input control for multiple files" + ) + upi.multiple = false + val content2 = document.getElementById("test")?.let { jQuery(it).find("input.form-control")[0]?.outerHTML } + assertEqualsHtml( + "<input class=\"form-control\" id=\"$id\" type=\"file\">", + content2, + "Should render correct file input control for single file" + ) + } + } + +} diff --git a/kvision-modules/kvision-bootstrap-upload/webpack.config.d/css.js b/kvision-modules/kvision-bootstrap-upload/webpack.config.d/css.js new file mode 100644 index 00000000..5d710d35 --- /dev/null +++ b/kvision-modules/kvision-bootstrap-upload/webpack.config.d/css.js @@ -0,0 +1,2 @@ +config.module.rules.push({ test: /\.css$/, loader: "style-loader!css-loader" }); + diff --git a/kvision-modules/kvision-bootstrap-upload/webpack.config.d/file.js b/kvision-modules/kvision-bootstrap-upload/webpack.config.d/file.js new file mode 100644 index 00000000..a5c7b5da --- /dev/null +++ b/kvision-modules/kvision-bootstrap-upload/webpack.config.d/file.js @@ -0,0 +1,6 @@ +config.module.rules.push( + { + test: /\.(jpe?g|png|gif)$/i, + loader: 'file-loader' + } +);
\ No newline at end of file diff --git a/kvision-modules/kvision-bootstrap-upload/webpack.config.d/jquery.js b/kvision-modules/kvision-bootstrap-upload/webpack.config.d/jquery.js new file mode 100644 index 00000000..bf5a1a20 --- /dev/null +++ b/kvision-modules/kvision-bootstrap-upload/webpack.config.d/jquery.js @@ -0,0 +1,5 @@ +config.plugins.push(new webpack.ProvidePlugin({ + $: "jquery", + jQuery: "jquery", + "window.jQuery": "jquery" +})); |