mirror of
https://github.com/cryptomator/cryptomator.git
synced 2025-02-17 00:29:00 +00:00
Merge branch 'develop' into libappindicator
This commit is contained in:
commit
1a153e1f6e
1
.github/workflows/appimage.yml
vendored
1
.github/workflows/appimage.yml
vendored
@ -85,6 +85,7 @@ jobs:
|
||||
--java-options "-Xmx256m"
|
||||
--java-options "-Dcryptomator.appVersion=\"${{ needs.get-version.outputs.semVerStr }}\""
|
||||
--java-options "-Dfile.encoding=\"utf-8\""
|
||||
--java-options "-Djava.net.useSystemProxies=true"
|
||||
--java-options "-Dcryptomator.logDir=\"@{userhome}/.local/share/Cryptomator/logs\""
|
||||
--java-options "-Dcryptomator.pluginDir=\"@{userhome}/.local/share/Cryptomator/plugins\""
|
||||
--java-options "-Dcryptomator.settingsPath=\"@{userhome}/.config/Cryptomator/settings.json:@{userhome}/.Cryptomator/settings.json\""
|
||||
|
3
.github/workflows/mac-dmg.yml
vendored
3
.github/workflows/mac-dmg.yml
vendored
@ -95,6 +95,7 @@ jobs:
|
||||
--java-options "-Xss5m"
|
||||
--java-options "-Xmx256m"
|
||||
--java-options "-Dfile.encoding=\"utf-8\""
|
||||
--java-options "-Djava.net.useSystemProxies=true"
|
||||
--java-options "-Dapple.awt.enableTemplateImages=true"
|
||||
--java-options "-Dsun.java2d.metal=true"
|
||||
--java-options "-Dcryptomator.appVersion=\"${{ needs.get-version.outputs.semVerStr }}\""
|
||||
@ -104,7 +105,7 @@ jobs:
|
||||
--java-options "-Dcryptomator.p12Path=\"@{userhome}/Library/Application Support/Cryptomator/key.p12\""
|
||||
--java-options "-Dcryptomator.ipcSocketPath=\"@{userhome}/Library/Application Support/Cryptomator/ipc.socket\""
|
||||
--java-options "-Dcryptomator.integrationsMac.keychainServiceName=\"Cryptomator\""
|
||||
--java-options "-Dcryptomator.mountPointsDir=\"@{userhome}/Cryptomator\""
|
||||
--java-options "-Dcryptomator.mountPointsDir=\"@{userhome}/Library/Application Support/Cryptomator/mnt\""
|
||||
--java-options "-Dcryptomator.showTrayIcon=true"
|
||||
--java-options "-Dcryptomator.buildNumber=\"dmg-${{ needs.get-version.outputs.revNum }}\""
|
||||
--mac-package-identifier org.cryptomator
|
||||
|
7
.github/workflows/win-exe.yml
vendored
7
.github/workflows/win-exe.yml
vendored
@ -112,17 +112,18 @@ jobs:
|
||||
--java-options "-Xmx256m"
|
||||
--java-options "-Dcryptomator.appVersion=\"${{ needs.get-version.outputs.semVerStr }}\""
|
||||
--java-options "-Dfile.encoding=\"utf-8\""
|
||||
--java-options "-Djava.net.useSystemProxies=true"
|
||||
--java-options "-Dcryptomator.logDir=\"@{localappdata}/Cryptomator\""
|
||||
--java-options "-Dcryptomator.pluginDir=\"@{appdata}/Cryptomator/Plugins\""
|
||||
--java-options "-Dcryptomator.settingsPath=\"@{appdata}/Cryptomator/settings.json:@{userhome}/AppData/Roaming/Cryptomator/settings.json\""
|
||||
--java-options "-Dcryptomator.p12Path=\"@{appdata}/Cryptomator/key.p12:@{userhome}/AppData/Roaming/Cryptomator/key.p12\""
|
||||
--java-options "-Dcryptomator.settingsPath=\"@{appdata}/Cryptomator/settings.json;@{userhome}/AppData/Roaming/Cryptomator/settings.json\""
|
||||
--java-options "-Dcryptomator.p12Path=\"@{appdata}/Cryptomator/key.p12;@{userhome}/AppData/Roaming/Cryptomator/key.p12\""
|
||||
--java-options "-Dcryptomator.ipcSocketPath=\"@{localappdata}/Cryptomator/ipc.socket\""
|
||||
--java-options "-Dcryptomator.mountPointsDir=\"@{userhome}/Cryptomator\""
|
||||
--java-options "-Dcryptomator.loopbackAlias=\"${{ env.LOOPBACK_ALIAS }}\""
|
||||
--java-options "-Dcryptomator.showTrayIcon=true"
|
||||
--java-options "-Dcryptomator.buildNumber=\"msi-${{ needs.get-version.outputs.revNum }}\""
|
||||
--java-options "-Dcryptomator.integrationsWin.autoStartShellLinkName=\"Cryptomator\""
|
||||
--java-options "-Dcryptomator.integrationsWin.keychainPaths=\"@{appdata}/Cryptomator/keychain.json:@{userhome}/AppData/Roaming/Cryptomator/keychain.json\""
|
||||
--java-options "-Dcryptomator.integrationsWin.keychainPaths=\"@{appdata}/Cryptomator/keychain.json;@{userhome}/AppData/Roaming/Cryptomator/keychain.json\""
|
||||
--java-options "-Djavafx.verbose=${{ inputs.isDebug }}"
|
||||
--resource-dir dist/win/resources
|
||||
--icon dist/win/resources/Cryptomator.ico
|
||||
|
2
.idea/runConfigurations/Cryptomator_Windows.xml
generated
2
.idea/runConfigurations/Cryptomator_Windows.xml
generated
@ -2,7 +2,7 @@
|
||||
<configuration default="false" name="Cryptomator Windows" type="Application" factoryName="Application">
|
||||
<option name="MAIN_CLASS_NAME" value="org.cryptomator.launcher.Cryptomator" />
|
||||
<module name="cryptomator" />
|
||||
<option name="VM_PARAMETERS" value="-Dcryptomator.settingsPath="@{appdata}/Cryptomator/settings.json:@{userhome}/AppData/Roaming/Cryptomator/settings.json" -Dcryptomator.ipcSocketPath="@{localappdata}/Cryptomator/ipc.socket" -Dcryptomator.logDir="@{localappdata}/Cryptomator" -Dcryptomator.pluginDir="@{appdata}/Cryptomator/Plugins" -Dcryptomator.integrationsWin.keychainPaths="@{appdata}/Cryptomator/keychain.json:@{userhome}/AppData/Roaming/Cryptomator/keychain.json" -Dcryptomator.p12Path="@{appdata}/Cryptomator/key.p12:@{userhome}/AppData/Roaming/Cryptomator/key.p12" -Dcryptomator.mountPointsDir="@{userhome}/Cryptomator" -Dcryptomator.showTrayIcon=true -Xss2m -Xmx512m --enable-preview --enable-native-access=org.cryptomator.jfuse.win" />
|
||||
<option name="VM_PARAMETERS" value="-Dcryptomator.settingsPath="@{appdata}/Cryptomator/settings.json;@{userhome}/AppData/Roaming/Cryptomator/settings.json" -Dcryptomator.ipcSocketPath="@{localappdata}/Cryptomator/ipc.socket" -Dcryptomator.logDir="@{localappdata}/Cryptomator" -Dcryptomator.pluginDir="@{appdata}/Cryptomator/Plugins" -Dcryptomator.integrationsWin.keychainPaths="@{appdata}/Cryptomator/keychain.json;@{userhome}/AppData/Roaming/Cryptomator/keychain.json" -Dcryptomator.p12Path="@{appdata}/Cryptomator/key.p12;@{userhome}/AppData/Roaming/Cryptomator/key.p12" -Dcryptomator.mountPointsDir="@{userhome}/Cryptomator" -Dcryptomator.showTrayIcon=true -Xss2m -Xmx512m --enable-preview --enable-native-access=org.cryptomator.jfuse.win" />
|
||||
<method v="2">
|
||||
<option name="Make" enabled="true" />
|
||||
</method>
|
||||
|
@ -2,7 +2,7 @@
|
||||
<configuration default="false" name="Cryptomator Windows Dev" type="Application" factoryName="Application">
|
||||
<option name="MAIN_CLASS_NAME" value="org.cryptomator.launcher.Cryptomator" />
|
||||
<module name="cryptomator" />
|
||||
<option name="VM_PARAMETERS" value="-Dcryptomator.settingsPath="@{appdata}/Cryptomator-Dev/settings.json:@{userhome}/AppData/Roaming/Cryptomator-Dev/settings.json" -Dcryptomator.ipcSocketPath="@{localappdata}/Cryptomator-Dev/ipc.socket" -Dcryptomator.logDir="@{localappdata}/Cryptomator-Dev" -Dcryptomator.pluginDir="@{appdata}/Cryptomator-Dev/Plugins" -Dcryptomator.integrationsWin.keychainPaths="@{appdata}/Cryptomator-Dev/keychain.json:@{userhome}/AppData/Roaming/Cryptomator-Dev/keychain.json" -Dcryptomator.p12Path="@{appdata}/Cryptomator-Dev/key.p12:@{userhome}/AppData/Roaming/Cryptomator-Dev/key.p12" -Dcryptomator.mountPointsDir="@{userhome}/Cryptomator-Dev" -Dcryptomator.showTrayIcon=true -Xss2m -Xmx512m --enable-preview --enable-native-access=org.cryptomator.jfuse.win" />
|
||||
<option name="VM_PARAMETERS" value="-Dcryptomator.settingsPath="@{appdata}/Cryptomator-Dev/settings.json;@{userhome}/AppData/Roaming/Cryptomator-Dev/settings.json" -Dcryptomator.ipcSocketPath="@{localappdata}/Cryptomator-Dev/ipc.socket" -Dcryptomator.logDir="@{localappdata}/Cryptomator-Dev" -Dcryptomator.pluginDir="@{appdata}/Cryptomator-Dev/Plugins" -Dcryptomator.integrationsWin.keychainPaths="@{appdata}/Cryptomator-Dev/keychain.json;@{userhome}/AppData/Roaming/Cryptomator-Dev/keychain.json" -Dcryptomator.p12Path="@{appdata}/Cryptomator-Dev/key.p12;@{userhome}/AppData/Roaming/Cryptomator-Dev/key.p12" -Dcryptomator.mountPointsDir="@{userhome}/Cryptomator-Dev" -Dcryptomator.showTrayIcon=true -Xss2m -Xmx512m --enable-preview --enable-native-access=org.cryptomator.jfuse.win" />
|
||||
<method v="2">
|
||||
<option name="Make" enabled="true" />
|
||||
</method>
|
||||
|
1
dist/linux/appimage/build.sh
vendored
1
dist/linux/appimage/build.sh
vendored
@ -49,6 +49,7 @@ ${JAVA_HOME}/bin/jpackage \
|
||||
--java-options "-Xmx256m" \
|
||||
--app-version "${VERSION}.${REVISION_NO}" \
|
||||
--java-options "-Dfile.encoding=\"utf-8\"" \
|
||||
--java-options "-Djava.net.useSystemProxies=true" \
|
||||
--java-options "-Dcryptomator.logDir=\"@{userhome}/.local/share/Cryptomator/logs\"" \
|
||||
--java-options "-Dcryptomator.pluginDir=\"@{userhome}/.local/share/Cryptomator/plugins\"" \
|
||||
--java-options "-Dcryptomator.settingsPath=\"@{userhome}/.config/Cryptomator/settings.json:@{userhome}/.Cryptomator/settings.json\"" \
|
||||
|
@ -66,6 +66,7 @@
|
||||
</content_rating>
|
||||
|
||||
<releases>
|
||||
<release date="2023-07-24" version="1.9.2"/>
|
||||
<release date="2023-06-07" version="1.9.1"/>
|
||||
<release date="2023-05-30" version="1.9.0"/>
|
||||
<release date="2023-04-25" version="1.8.0"/>
|
||||
|
1
dist/linux/debian/rules
vendored
1
dist/linux/debian/rules
vendored
@ -48,6 +48,7 @@ override_dh_auto_build:
|
||||
--java-options "-Xss5m" \
|
||||
--java-options "-Xmx256m" \
|
||||
--java-options "-Dfile.encoding=\"utf-8\"" \
|
||||
--java-options "-Djava.net.useSystemProxies=true" \
|
||||
--java-options "-Dcryptomator.logDir=\"@{userhome}/.local/share/Cryptomator/logs\"" \
|
||||
--java-options "-Dcryptomator.pluginDir=\"@{userhome}/.local/share/Cryptomator/plugins\"" \
|
||||
--java-options "-Dcryptomator.settingsPath=\"@{userhome}/.config/Cryptomator/settings.json:@{userhome}/.Cryptomator/settings.json\"" \
|
||||
|
3
dist/mac/dmg/build.sh
vendored
3
dist/mac/dmg/build.sh
vendored
@ -71,6 +71,7 @@ ${JAVA_HOME}/bin/jpackage \
|
||||
--java-options "-Xss5m" \
|
||||
--java-options "-Xmx256m" \
|
||||
--java-options "-Dfile.encoding=\"utf-8\"" \
|
||||
--java-options "-Djava.net.useSystemProxies=true" \
|
||||
--java-options "-Dapple.awt.enableTemplateImages=true" \
|
||||
--java-options "-Dsun.java2d.metal=true" \
|
||||
--java-options "-Dcryptomator.appVersion=\"${VERSION_NO}\"" \
|
||||
@ -80,7 +81,7 @@ ${JAVA_HOME}/bin/jpackage \
|
||||
--java-options "-Dcryptomator.ipcSocketPath=\"@{userhome}/Library/Application Support/${APP_NAME}/ipc.socket\"" \
|
||||
--java-options "-Dcryptomator.p12Path=\"@{userhome}/Library/Application Support/${APP_NAME}/key.p12\"" \
|
||||
--java-options "-Dcryptomator.integrationsMac.keychainServiceName=\"${APP_NAME}\"" \
|
||||
--java-options "-Dcryptomator.mountPointsDir=\"@{userhome}/${APP_NAME}\"" \
|
||||
--java-options "-Dcryptomator.mountPointsDir=\"@{userhome}/Library/Application Support${APP_NAME}/mnt\"" \
|
||||
--java-options "-Dcryptomator.showTrayIcon=true" \
|
||||
--java-options "-Dcryptomator.buildNumber=\"dmg-${REVISION_NO}\"" \
|
||||
--mac-package-identifier ${PACKAGE_IDENTIFIER} \
|
||||
|
35
dist/win/build.ps1
vendored
35
dist/win/build.ps1
vendored
@ -12,6 +12,9 @@ Param(
|
||||
[bool] $clean
|
||||
)
|
||||
|
||||
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
|
||||
$ProgressPreference = 'SilentlyContinue' # disables Invoke-WebRequest's progress bar, which slows down downloads to a few bytes/s
|
||||
|
||||
# check preconditions
|
||||
if ((Get-Command "git" -ErrorAction SilentlyContinue) -eq $null)
|
||||
{
|
||||
@ -26,7 +29,7 @@ if ((Get-Command "mvn" -ErrorAction SilentlyContinue) -eq $null)
|
||||
|
||||
$buildDir = Split-Path -Parent $PSCommandPath
|
||||
$version = $(mvn -f $buildDir/../../pom.xml help:evaluate -Dexpression="project.version" -q -DforceStdout)
|
||||
$semVerNo = $version -replace '(\d\.\d\.\d).*','$1'
|
||||
$semVerNo = $version -replace '(\d+\.\d+\.\d+).*','$1'
|
||||
$revisionNo = $(git rev-list --count HEAD)
|
||||
|
||||
Write-Output "`$version=$version"
|
||||
@ -47,11 +50,28 @@ if ($clean -and (Test-Path -Path $runtimeImagePath)) {
|
||||
Remove-Item -Path $runtimeImagePath -Force -Recurse
|
||||
}
|
||||
|
||||
## download jfx jmods
|
||||
$jfxJmodsChecksum = 'd00767334c43b8832b5cf10267d34ca8f563d187c4655b73eb6020dd79c054b5'
|
||||
$jfxJmodsZip = '.\resources\jfxJmods.zip'
|
||||
if( !(Test-Path -Path $jfxJmodsZip) ) {
|
||||
$jmodsUrl = "https://download2.gluonhq.com/openjfx/20.0.1/openjfx-20.0.1_windows-x64_bin-jmods.zip"
|
||||
Write-Output "Downloading ${jmodsUrl}..."
|
||||
Invoke-WebRequest $jmodsUrl -OutFile $jfxJmodsZip # redirects are followed by default
|
||||
}
|
||||
|
||||
$jmodsChecksumActual = $(Get-FileHash -Path $jfxJmodsZip -Algorithm SHA256).Hash
|
||||
if( $jmodsChecksumActual -ne $jfxJmodsChecksum ) {
|
||||
Write-Error "Checksum mismatch for jfxJmods.zip. Expected: $jfxJmodsChecksum, actual: $jmodsChecksumActual"
|
||||
exit 1;
|
||||
}
|
||||
Expand-Archive -Force -Path $jfxJmodsZip -DestinationPath ".\resources\"
|
||||
|
||||
|
||||
& "$Env:JAVA_HOME\bin\jlink" `
|
||||
--verbose `
|
||||
--output runtime `
|
||||
--module-path "$Env:JAVA_HOME/jmods" `
|
||||
--add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,jdk.unsupported,jdk.crypto.ec,jdk.accessibility,jdk.management.jfr `
|
||||
--module-path "$Env:JAVA_HOME/jmods;$buildDir/resources/javafx-jmods-20.0.1" `
|
||||
--add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,jdk.unsupported,jdk.crypto.ec,jdk.accessibility,jdk.management.jfr,javafx.base,javafx.graphics,javafx.controls,javafx.fxml `
|
||||
--strip-native-commands `
|
||||
--no-header-files `
|
||||
--no-man-pages `
|
||||
@ -82,15 +102,16 @@ if ($clean -and (Test-Path -Path $appPath)) {
|
||||
--java-options "-Dcryptomator.appVersion=`"$semVerNo`"" `
|
||||
--app-version "$semVerNo.$revisionNo" `
|
||||
--java-options "-Dfile.encoding=`"utf-8`"" `
|
||||
--java-options "-Djava.net.useSystemProxies=true" `
|
||||
--java-options "-Dcryptomator.logDir=`"@{localappdata}/$AppName`"" `
|
||||
--java-options "-Dcryptomator.pluginDir=`"@{appdata}/$AppName/Plugins`"" `
|
||||
--java-options "-Dcryptomator.settingsPath=`"@{appdata}/$AppName/settings.json:@{userhome}/AppData/Roaming/$AppName/settings.json`"" `
|
||||
--java-options "-Dcryptomator.settingsPath=`"@{appdata}/$AppName/settings.json;@{userhome}/AppData/Roaming/$AppName/settings.json`"" `
|
||||
--java-options "-Dcryptomator.ipcSocketPath=`"@{localappdata}/$AppName/ipc.socket`"" `
|
||||
--java-options "-Dcryptomator.p12Path=`"@{appdata}/$AppName/key.p12:@{userhome}/AppData/Roaming/$AppName/key.p12`"" `
|
||||
--java-options "-Dcryptomator.p12Path=`"@{appdata}/$AppName/key.p12;@{userhome}/AppData/Roaming/$AppName/key.p12`"" `
|
||||
--java-options "-Dcryptomator.mountPointsDir=`"@{userhome}/$AppName`"" `
|
||||
--java-options "-Dcryptomator.loopbackAlias=`"$LoopbackAlias`"" `
|
||||
--java-options "-Dcryptomator.integrationsWin.autoStartShellLinkName=`"$AppName`"" `
|
||||
--java-options "-Dcryptomator.integrationsWin.keychainPaths=`"@{appdata}/$AppName/keychain.json:@{userhome}/AppData/Roaming/$AppName/keychain.json`"" `
|
||||
--java-options "-Dcryptomator.integrationsWin.keychainPaths=`"@{appdata}/$AppName/keychain.json;@{userhome}/AppData/Roaming/$AppName/keychain.json`"" `
|
||||
--java-options "-Dcryptomator.showTrayIcon=true" `
|
||||
--java-options "-Dcryptomator.buildNumber=`"msi-$revisionNo`"" `
|
||||
--resource-dir resources `
|
||||
@ -151,8 +172,6 @@ $Env:JP_WIXWIZARD_RESOURCES = "$buildDir\resources"
|
||||
"-Dlicense.licenseMergesUrl=file:///$buildDir/../../license/merges"
|
||||
|
||||
# download Winfsp
|
||||
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
|
||||
$ProgressPreference = 'SilentlyContinue' # disables Invoke-WebRequest's progress bar, which slows down downloads to a few bytes/s
|
||||
$winfspMsiUrl= (Select-String -Path ".\bundle\resources\winFspMetaData.wxi" -Pattern '<\?define BundledWinFspDownloadLink="(.+)".*?>').Matches.Groups[1].Value
|
||||
Write-Output "Downloading ${winfspMsiUrl}..."
|
||||
Invoke-WebRequest $winfspMsiUrl -OutFile ".\bundle\resources\winfsp.msi" # redirects are followed by default
|
||||
|
10
dist/win/resources/main.wxs
vendored
10
dist/win/resources/main.wxs
vendored
@ -132,11 +132,17 @@
|
||||
<CustomAction Id="JpSetARPURLUPDATEINFO" Property="ARPURLUPDATEINFO" Value="$(var.JpUpdateURL)" />
|
||||
<?endif?>
|
||||
|
||||
<Property Id="WixQuietExec64CmdTimeout" Value="20" />
|
||||
<!-- Note for custom actions: Immediate CAs run BEFORE the files are installed, hence if you depend on installed files, the CAs must be deferred.-->
|
||||
<!-- WebDAV patches -->
|
||||
<CustomAction Id="PatchWebDAV" Impersonate="no" ExeCommand="[INSTALLDIR]patchWebDAV.bat" Directory="INSTALLDIR" Execute="deferred" Return="asyncWait" />
|
||||
<SetProperty Id="PatchWebDAV" Value=""[INSTALLDIR]patchWebDAV.bat""
|
||||
Sequence="execute" Before="PatchWebDAV" />
|
||||
<CustomAction Id="PatchWebDAV" BinaryKey="WixCA" DllEntry="WixQuietExec64" Execute="deferred" Return="ignore" Impersonate="no"/>
|
||||
|
||||
<!-- Special Settings migration for 1.7.0,. Should be removed eventually, for more info, see ../contrib/version170-migrate-settings.ps1-->
|
||||
<CustomAction Id="V170MigrateSettings" Impersonate="no" ExeCommand="[INSTALLDIR]version170-migrate-settings.bat" Directory="INSTALLDIR" Execute="deferred" Return="asyncWait" />
|
||||
<SetProperty Id="V170MigrateSettings" Value=""[INSTALLDIR]version170-migrate-settings.bat""
|
||||
Sequence="execute" Before="V170MigrateSettings" />
|
||||
<CustomAction Id="V170MigrateSettings" BinaryKey="WixCA" DllEntry="WixQuietExec64" Execute="deferred" Return="ignore" Impersonate="no"/>
|
||||
|
||||
<!-- Running App detection and exit -->
|
||||
<Property Id="FOUNDRUNNINGAPP" Admin="yes"/>
|
||||
|
2
pom.xml
2
pom.xml
@ -33,7 +33,7 @@
|
||||
<nonModularGroupIds>org.ow2.asm,org.apache.jackrabbit,org.apache.httpcomponents</nonModularGroupIds>
|
||||
|
||||
<!-- cryptomator dependencies -->
|
||||
<cryptomator.cryptofs.version>2.6.5</cryptomator.cryptofs.version>
|
||||
<cryptomator.cryptofs.version>2.6.6</cryptomator.cryptofs.version>
|
||||
<cryptomator.integrations.version>1.3.0</cryptomator.integrations.version>
|
||||
<cryptomator.integrations.win.version>1.2.0</cryptomator.integrations.win.version>
|
||||
<cryptomator.integrations.mac.version>1.2.0</cryptomator.integrations.mac.version>
|
||||
|
@ -18,7 +18,6 @@ import java.util.stream.StreamSupport;
|
||||
public class Environment {
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(Environment.class);
|
||||
private static final char PATH_LIST_SEP = ':';
|
||||
private static final int DEFAULT_MIN_PW_LENGTH = 8;
|
||||
private static final String SETTINGS_PATH_PROP_NAME = "cryptomator.settingsPath";
|
||||
private static final String IPC_SOCKET_PATH_PROP_NAME = "cryptomator.ipcSocketPath";
|
||||
@ -131,7 +130,7 @@ public class Environment {
|
||||
|
||||
// visible for testing
|
||||
Stream<Path> getPaths(String propertyName) {
|
||||
Stream<String> rawSettingsPaths = getRawList(propertyName, PATH_LIST_SEP);
|
||||
Stream<String> rawSettingsPaths = getRawList(propertyName, System.getProperty("path.separator").charAt(0));
|
||||
return rawSettingsPaths.filter(Predicate.not(Strings::isNullOrEmpty)).map(Path::of);
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,17 @@
|
||||
package org.cryptomator.common.mount;
|
||||
|
||||
import java.nio.file.Path;
|
||||
|
||||
public class HideawayNotDirectoryException extends IllegalMountPointException {
|
||||
|
||||
private final Path hideaway;
|
||||
|
||||
public HideawayNotDirectoryException(Path path, Path hideaway) {
|
||||
super(path, "Existing hideaway (" + hideaway.toString() + ") for mountpoint is not a directory: " + path.toString());
|
||||
this.hideaway = hideaway;
|
||||
}
|
||||
|
||||
public Path getHideaway() {
|
||||
return hideaway;
|
||||
}
|
||||
}
|
@ -1,9 +1,25 @@
|
||||
package org.cryptomator.common.mount;
|
||||
|
||||
import java.nio.file.Path;
|
||||
|
||||
/**
|
||||
* Indicates that validation or preparation of a mountpoint failed due to a configuration error or an invalid system state.<br>
|
||||
* Instances of this exception are usually caught and displayed to the user in an appropriate fashion, e.g. by {@link org.cryptomator.ui.unlock.UnlockInvalidMountPointController UnlockInvalidMountPointController.}
|
||||
*/
|
||||
public class IllegalMountPointException extends IllegalArgumentException {
|
||||
|
||||
public IllegalMountPointException(String msg) {
|
||||
super(msg);
|
||||
private final Path mountpoint;
|
||||
|
||||
public IllegalMountPointException(Path mountpoint) {
|
||||
this(mountpoint, "The provided mountpoint has a problem: " + mountpoint.toString());
|
||||
}
|
||||
|
||||
}
|
||||
public IllegalMountPointException(Path mountpoint, String msg) {
|
||||
super(msg);
|
||||
this.mountpoint = mountpoint;
|
||||
}
|
||||
|
||||
public Path getMountpoint() {
|
||||
return mountpoint;
|
||||
}
|
||||
}
|
@ -0,0 +1,10 @@
|
||||
package org.cryptomator.common.mount;
|
||||
|
||||
import java.nio.file.Path;
|
||||
|
||||
public class MountPointCleanupFailedException extends IllegalMountPointException {
|
||||
|
||||
public MountPointCleanupFailedException(Path path) {
|
||||
super(path, "Mountpoint could not be cleared: " + path.toString());
|
||||
}
|
||||
}
|
@ -1,8 +1,10 @@
|
||||
package org.cryptomator.common.mount;
|
||||
|
||||
import java.nio.file.Path;
|
||||
|
||||
public class MountPointInUseException extends IllegalMountPointException {
|
||||
|
||||
public MountPointInUseException(String msg) {
|
||||
super(msg);
|
||||
public MountPointInUseException(Path path) {
|
||||
super(path);
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,10 @@
|
||||
package org.cryptomator.common.mount;
|
||||
|
||||
import java.nio.file.Path;
|
||||
|
||||
public class MountPointNotEmptyDirectoryException extends IllegalMountPointException {
|
||||
|
||||
public MountPointNotEmptyDirectoryException(Path path, String msg) {
|
||||
super(path, msg);
|
||||
}
|
||||
}
|
@ -0,0 +1,14 @@
|
||||
package org.cryptomator.common.mount;
|
||||
|
||||
import java.nio.file.Path;
|
||||
|
||||
public class MountPointNotExistingException extends IllegalMountPointException {
|
||||
|
||||
public MountPointNotExistingException(Path path, String msg) {
|
||||
super(path, msg);
|
||||
}
|
||||
|
||||
public MountPointNotExistingException(Path path) {
|
||||
super(path, "Mountpoint does not exist: " + path);
|
||||
}
|
||||
}
|
@ -1,8 +0,0 @@
|
||||
package org.cryptomator.common.mount;
|
||||
|
||||
public class MountPointNotExistsException extends IllegalMountPointException {
|
||||
|
||||
public MountPointNotExistsException(String msg) {
|
||||
super(msg);
|
||||
}
|
||||
}
|
@ -1,8 +1,10 @@
|
||||
package org.cryptomator.common.mount;
|
||||
|
||||
import java.nio.file.Path;
|
||||
|
||||
public class MountPointNotSupportedException extends IllegalMountPointException {
|
||||
|
||||
public MountPointNotSupportedException(String msg) {
|
||||
super(msg);
|
||||
public MountPointNotSupportedException(Path path, String msg) {
|
||||
super(path, msg);
|
||||
}
|
||||
}
|
||||
|
@ -1,12 +0,0 @@
|
||||
package org.cryptomator.common.mount;
|
||||
|
||||
public class MountPointPreparationException extends RuntimeException {
|
||||
|
||||
public MountPointPreparationException(String msg) {
|
||||
super(msg);
|
||||
}
|
||||
|
||||
public MountPointPreparationException(Throwable cause) {
|
||||
super(cause);
|
||||
}
|
||||
}
|
@ -5,13 +5,11 @@ import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.file.DirectoryNotEmptyException;
|
||||
import java.nio.file.FileAlreadyExistsException;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.LinkOption;
|
||||
import java.nio.file.NoSuchFileException;
|
||||
import java.nio.file.NotDirectoryException;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.attribute.BasicFileAttributes;
|
||||
|
||||
public final class MountWithinParentUtil {
|
||||
|
||||
@ -22,31 +20,33 @@ public final class MountWithinParentUtil {
|
||||
|
||||
private MountWithinParentUtil() {}
|
||||
|
||||
static void prepareParentNoMountPoint(Path mountPoint) throws MountPointPreparationException {
|
||||
static void prepareParentNoMountPoint(Path mountPoint) throws IllegalMountPointException, IOException {
|
||||
Path hideaway = getHideaway(mountPoint);
|
||||
var mpExists = Files.exists(mountPoint, LinkOption.NOFOLLOW_LINKS);
|
||||
var mpState = getMountPointState(mountPoint);
|
||||
var hideExists = Files.exists(hideaway, LinkOption.NOFOLLOW_LINKS);
|
||||
|
||||
//TODO: possible improvement by just deleting an _empty_ hideaway
|
||||
if (mpExists && hideExists) { //both resources exist (whatever type)
|
||||
throw new MountPointPreparationException(new FileAlreadyExistsException(hideaway.toString()));
|
||||
} else if (!mpExists && !hideExists) { //neither mountpoint nor hideaway exist
|
||||
throw new MountPointPreparationException(new NoSuchFileException(mountPoint.toString()));
|
||||
} else if (!mpExists) { //only hideaway exists
|
||||
checkIsDirectory(hideaway);
|
||||
LOG.info("Mountpoint {} seems to be not properly cleaned up. Will be fixed on unmount.", mountPoint);
|
||||
try {
|
||||
if (SystemUtils.IS_OS_WINDOWS) {
|
||||
Files.setAttribute(hideaway, WIN_HIDDEN_ATTR, true, LinkOption.NOFOLLOW_LINKS);
|
||||
}
|
||||
} catch (IOException e) {
|
||||
throw new MountPointPreparationException(e);
|
||||
}
|
||||
} else { //only mountpoint exists
|
||||
try {
|
||||
checkIsDirectory(mountPoint);
|
||||
checkIsEmpty(mountPoint);
|
||||
if (mpState == MountPointState.BROKEN_JUNCTION) {
|
||||
LOG.info("Mountpoint \"{}\" is still a junction. Deleting it.", mountPoint);
|
||||
Files.delete(mountPoint); //Throws if mountPoint is also a non-empty folder
|
||||
mpState = MountPointState.NOT_EXISTING;
|
||||
}
|
||||
|
||||
if (mpState == MountPointState.NOT_EXISTING && !hideExists) { //neither mountpoint nor hideaway exist
|
||||
throw new MountPointNotExistingException(mountPoint);
|
||||
} else if (mpState == MountPointState.NOT_EXISTING) { //only hideaway exists
|
||||
checkIsHideawayDirectory(mountPoint, hideaway);
|
||||
LOG.info("Mountpoint {} seems to be not properly cleaned up. Will be fixed on unmount.", mountPoint);
|
||||
if (SystemUtils.IS_OS_WINDOWS) {
|
||||
Files.setAttribute(hideaway, WIN_HIDDEN_ATTR, true, LinkOption.NOFOLLOW_LINKS);
|
||||
}
|
||||
} else {
|
||||
assert mpState == MountPointState.EMPTY_DIR;
|
||||
try {
|
||||
if (hideExists) { //... with hideaway
|
||||
removeResidualHideaway(mountPoint, hideaway);
|
||||
}
|
||||
|
||||
//... (now) without hideaway
|
||||
Files.move(mountPoint, hideaway);
|
||||
if (SystemUtils.IS_OS_WINDOWS) {
|
||||
Files.setAttribute(hideaway, WIN_HIDDEN_ATTR, true, LinkOption.NOFOLLOW_LINKS);
|
||||
@ -54,30 +54,66 @@ public final class MountWithinParentUtil {
|
||||
int attempts = 0;
|
||||
while (!Files.notExists(mountPoint)) {
|
||||
if (attempts >= 10) {
|
||||
throw new MountPointPreparationException("Path " + mountPoint + " could not be cleared");
|
||||
throw new MountPointCleanupFailedException(mountPoint);
|
||||
}
|
||||
Thread.sleep(1000);
|
||||
attempts++;
|
||||
}
|
||||
} catch (IOException e) {
|
||||
throw new MountPointPreparationException(e);
|
||||
} catch (InterruptedException e) {
|
||||
Thread.currentThread().interrupt();
|
||||
throw new MountPointPreparationException(e);
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//visible for testing
|
||||
static MountPointState getMountPointState(Path path) throws IOException, IllegalMountPointException {
|
||||
if (Files.notExists(path, LinkOption.NOFOLLOW_LINKS)) {
|
||||
return MountPointState.NOT_EXISTING;
|
||||
}
|
||||
if (!Files.readAttributes(path, BasicFileAttributes.class, LinkOption.NOFOLLOW_LINKS).isOther()) {
|
||||
checkIsMountPointDirectory(path);
|
||||
checkIsMountPointEmpty(path);
|
||||
return MountPointState.EMPTY_DIR;
|
||||
}
|
||||
if (Files.exists(path /* FOLLOW_LINKS */)) { //Both junction and target exist
|
||||
throw new MountPointInUseException(path);
|
||||
}
|
||||
return MountPointState.BROKEN_JUNCTION;
|
||||
}
|
||||
|
||||
//visible for testing
|
||||
enum MountPointState {
|
||||
|
||||
NOT_EXISTING,
|
||||
|
||||
EMPTY_DIR,
|
||||
|
||||
BROKEN_JUNCTION;
|
||||
|
||||
}
|
||||
|
||||
//visible for testing
|
||||
static void removeResidualHideaway(Path mountPoint, Path hideaway) throws IOException {
|
||||
checkIsHideawayDirectory(mountPoint, hideaway);
|
||||
Files.delete(hideaway); //Fails if not empty
|
||||
}
|
||||
|
||||
static void cleanup(Path mountPoint) {
|
||||
Path hideaway = getHideaway(mountPoint);
|
||||
try {
|
||||
waitForMountpointRestoration(mountPoint);
|
||||
if (Files.notExists(hideaway, LinkOption.NOFOLLOW_LINKS)) {
|
||||
LOG.error("Unable to restore hidden directory to mountpoint \"{}\": Directory does not exist.", mountPoint);
|
||||
return;
|
||||
}
|
||||
|
||||
Files.move(hideaway, mountPoint);
|
||||
if (SystemUtils.IS_OS_WINDOWS) {
|
||||
Files.setAttribute(mountPoint, WIN_HIDDEN_ATTR, false);
|
||||
}
|
||||
} catch (IOException e) {
|
||||
LOG.error("Unable to restore hidden directory to mountpoint {}.", mountPoint, e);
|
||||
LOG.error("Unable to restore hidden directory to mountpoint \"{}\".", mountPoint, e);
|
||||
}
|
||||
}
|
||||
|
||||
@ -99,16 +135,22 @@ public final class MountWithinParentUtil {
|
||||
}
|
||||
}
|
||||
|
||||
private static void checkIsDirectory(Path toCheck) throws MountPointPreparationException {
|
||||
private static void checkIsMountPointDirectory(Path toCheck) throws IllegalMountPointException {
|
||||
if (!Files.isDirectory(toCheck, LinkOption.NOFOLLOW_LINKS)) {
|
||||
throw new MountPointPreparationException(new NotDirectoryException(toCheck.toString()));
|
||||
throw new MountPointNotEmptyDirectoryException(toCheck, "Mountpoint is not a directory: " + toCheck);
|
||||
}
|
||||
}
|
||||
|
||||
private static void checkIsEmpty(Path toCheck) throws MountPointPreparationException, IOException {
|
||||
private static void checkIsHideawayDirectory(Path mountPoint, Path hideawayToCheck) {
|
||||
if (!Files.isDirectory(hideawayToCheck, LinkOption.NOFOLLOW_LINKS)) {
|
||||
throw new HideawayNotDirectoryException(mountPoint, hideawayToCheck);
|
||||
}
|
||||
}
|
||||
|
||||
private static void checkIsMountPointEmpty(Path toCheck) throws IllegalMountPointException, IOException {
|
||||
try (var dirStream = Files.list(toCheck)) {
|
||||
if (dirStream.findFirst().isPresent()) {
|
||||
throw new MountPointPreparationException(new DirectoryNotEmptyException(toCheck.toString()));
|
||||
throw new MountPointNotEmptyDirectoryException(toCheck, "Mountpoint directory is not empty: " + toCheck);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -99,7 +99,7 @@ public class Mounter {
|
||||
var mpIsDriveLetter = userChosenMountPoint.toString().matches("[A-Z]:\\\\");
|
||||
if (mpIsDriveLetter) {
|
||||
if (driveLetters.getOccupied().contains(userChosenMountPoint)) {
|
||||
throw new MountPointInUseException(userChosenMountPoint.toString());
|
||||
throw new MountPointInUseException(userChosenMountPoint);
|
||||
}
|
||||
} else if (canMountToParent && !canMountToDir) {
|
||||
MountWithinParentUtil.prepareParentNoMountPoint(userChosenMountPoint);
|
||||
@ -115,13 +115,13 @@ public class Mounter {
|
||||
|| (!canMountToParent && !mpIsDriveLetter) //
|
||||
|| (!canMountToDir && !canMountToParent && !canMountToSystem && !canMountToDriveLetter);
|
||||
if (configNotSupported) {
|
||||
throw new MountPointNotSupportedException(e.getMessage());
|
||||
throw new MountPointNotSupportedException(userChosenMountPoint, e.getMessage());
|
||||
} else if (canMountToDir && !canMountToParent && !Files.exists(userChosenMountPoint)) {
|
||||
//mountpoint must exist
|
||||
throw new MountPointNotExistsException(e.getMessage());
|
||||
throw new MountPointNotExistingException(userChosenMountPoint, e.getMessage());
|
||||
} else {
|
||||
//TODO: add specific exception for !canMountToDir && canMountToParent && !Files.notExists(userChosenMountPoint)
|
||||
throw new IllegalMountPointException(e.getMessage());
|
||||
throw new IllegalMountPointException(userChosenMountPoint, e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -44,6 +44,7 @@ public class Settings {
|
||||
static final String DEFAULT_KEYCHAIN_PROVIDER = SystemUtils.IS_OS_WINDOWS ? "org.cryptomator.windows.keychain.WindowsProtectedKeychainAccess" : SystemUtils.IS_OS_MAC ? "org.cryptomator.macos.keychain.MacSystemKeychainAccess" : "org.cryptomator.linux.keychain.SecretServiceKeychainAccess";
|
||||
static final String DEFAULT_USER_INTERFACE_ORIENTATION = NodeOrientation.LEFT_TO_RIGHT.name();
|
||||
static final boolean DEFAULT_SHOW_MINIMIZE_BUTTON = false;
|
||||
static final String DEFAULT_LAST_UPDATE_CHECK = "2000-01-01";
|
||||
|
||||
public final ObservableList<VaultSettings> directories;
|
||||
public final BooleanProperty askedForUpdateCheck;
|
||||
@ -67,6 +68,7 @@ public class Settings {
|
||||
public final StringProperty displayConfiguration;
|
||||
public final StringProperty language;
|
||||
public final StringProperty mountService;
|
||||
public final StringProperty lastUpdateCheck;
|
||||
|
||||
private Consumer<Settings> saveCmd;
|
||||
|
||||
@ -104,6 +106,7 @@ public class Settings {
|
||||
this.displayConfiguration = new SimpleStringProperty(this, "displayConfiguration", json.displayConfiguration);
|
||||
this.language = new SimpleStringProperty(this, "language", json.language);
|
||||
this.mountService = new SimpleStringProperty(this, "mountService", json.mountService);
|
||||
this.lastUpdateCheck = new SimpleStringProperty(this, "lastUpdateCheck", json.lastUpdateCheck);
|
||||
|
||||
this.directories.addAll(json.directories.stream().map(VaultSettings::new).toList());
|
||||
|
||||
@ -131,6 +134,7 @@ public class Settings {
|
||||
displayConfiguration.addListener(this::somethingChanged);
|
||||
language.addListener(this::somethingChanged);
|
||||
mountService.addListener(this::somethingChanged);
|
||||
lastUpdateCheck.addListener(this::somethingChanged);
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@ -185,6 +189,7 @@ public class Settings {
|
||||
json.displayConfiguration = displayConfiguration.get();
|
||||
json.language = language.get();
|
||||
json.mountService = mountService.get();
|
||||
json.lastUpdateCheck = lastUpdateCheck.get();
|
||||
return json;
|
||||
}
|
||||
|
||||
|
@ -83,4 +83,7 @@ class SettingsJson {
|
||||
@JsonProperty(value = "preferredVolumeImpl", access = JsonProperty.Access.WRITE_ONLY) // WRITE_ONLY means value is "written" into the java object during deserialization. Upvote this: https://github.com/FasterXML/jackson-annotations/issues/233
|
||||
String preferredVolumeImpl;
|
||||
|
||||
@JsonProperty("lastUpdateCheck")
|
||||
String lastUpdateCheck = Settings.DEFAULT_LAST_UPDATE_CHECK;
|
||||
|
||||
}
|
||||
|
@ -70,7 +70,7 @@ public class Vault {
|
||||
private final Mounter mounter;
|
||||
private final BooleanProperty showingStats;
|
||||
|
||||
private AtomicReference<Mounter.MountHandle> mountHandle = new AtomicReference<>(null);
|
||||
private final AtomicReference<Mounter.MountHandle> mountHandle = new AtomicReference<>(null);
|
||||
|
||||
@Inject
|
||||
Vault(VaultSettings vaultSettings, VaultConfigCache configCache, AtomicReference<CryptoFileSystem> cryptoFileSystem, VaultState state, @Named("lastKnownException") ObjectProperty<Exception> lastKnownException, VaultStats stats, WindowsDriveLetters windowsDriveLetters, Mounter mounter) {
|
||||
|
@ -5,21 +5,23 @@ import dagger.Module;
|
||||
import dagger.Provides;
|
||||
import dagger.multibindings.IntoMap;
|
||||
import org.cryptomator.common.vaults.Vault;
|
||||
import org.cryptomator.ui.changepassword.NewPasswordController;
|
||||
import org.cryptomator.ui.changepassword.PasswordStrengthUtil;
|
||||
import org.cryptomator.ui.common.DefaultSceneFactory;
|
||||
import org.cryptomator.ui.common.FxController;
|
||||
import org.cryptomator.ui.common.FxControllerKey;
|
||||
import org.cryptomator.ui.common.FxmlFile;
|
||||
import org.cryptomator.ui.common.FxmlLoaderFactory;
|
||||
import org.cryptomator.ui.common.FxmlScene;
|
||||
import org.cryptomator.ui.changepassword.NewPasswordController;
|
||||
import org.cryptomator.ui.changepassword.PasswordStrengthUtil;
|
||||
import org.cryptomator.ui.common.StageFactory;
|
||||
import org.cryptomator.ui.fxapp.PrimaryStage;
|
||||
import org.cryptomator.ui.recoverykey.RecoveryKeyDisplayController;
|
||||
|
||||
import javax.inject.Named;
|
||||
import javax.inject.Provider;
|
||||
import javafx.beans.property.IntegerProperty;
|
||||
import javafx.beans.property.ObjectProperty;
|
||||
import javafx.beans.property.SimpleIntegerProperty;
|
||||
import javafx.beans.property.SimpleObjectProperty;
|
||||
import javafx.beans.property.SimpleStringProperty;
|
||||
import javafx.beans.property.StringProperty;
|
||||
@ -65,6 +67,13 @@ public abstract class AddVaultModule {
|
||||
return new SimpleStringProperty("");
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Named("shorteningThreshold")
|
||||
@AddVaultWizardScoped
|
||||
static IntegerProperty provideShorteningThreshold() {
|
||||
return new SimpleIntegerProperty(CreateNewVaultExpertSettingsController.MAX_SHORTENING_THRESHOLD);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@AddVaultWizardWindow
|
||||
@AddVaultWizardScoped
|
||||
@ -130,6 +139,13 @@ public abstract class AddVaultModule {
|
||||
return fxmlLoaders.createScene(FxmlFile.ADDVAULT_SUCCESS);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@FxmlScene(FxmlFile.ADDVAULT_NEW_EXPERT_SETTINGS)
|
||||
@AddVaultWizardScoped
|
||||
static Scene provideCreateNewVaultExpertSettingsScene(@AddVaultWizardWindow FxmlLoaderFactory fxmlLoaders) {
|
||||
return fxmlLoaders.createScene(FxmlFile.ADDVAULT_NEW_EXPERT_SETTINGS);
|
||||
}
|
||||
|
||||
// ------------------
|
||||
|
||||
@Binds
|
||||
@ -181,4 +197,9 @@ public abstract class AddVaultModule {
|
||||
@FxControllerKey(AddVaultSuccessController.class)
|
||||
abstract FxController bindAddVaultSuccessController(AddVaultSuccessController controller);
|
||||
|
||||
@Binds
|
||||
@IntoMap
|
||||
@FxControllerKey(CreateNewVaultExpertSettingsController.class)
|
||||
abstract FxController bindCreateNewVaultExpertSettingsController(CreateNewVaultExpertSettingsController controller);
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,118 @@
|
||||
package org.cryptomator.ui.addvaultwizard;
|
||||
|
||||
import dagger.Lazy;
|
||||
import org.cryptomator.ui.common.FxController;
|
||||
import org.cryptomator.ui.common.FxmlFile;
|
||||
import org.cryptomator.ui.common.FxmlScene;
|
||||
import org.cryptomator.ui.controls.NumericTextField;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Named;
|
||||
import javafx.application.Application;
|
||||
import javafx.beans.binding.Bindings;
|
||||
import javafx.beans.binding.BooleanBinding;
|
||||
import javafx.beans.property.IntegerProperty;
|
||||
import javafx.beans.property.ObjectProperty;
|
||||
import javafx.beans.property.StringProperty;
|
||||
import javafx.fxml.FXML;
|
||||
import javafx.scene.Scene;
|
||||
import javafx.scene.control.CheckBox;
|
||||
import javafx.scene.control.Label;
|
||||
import javafx.stage.Stage;
|
||||
import java.nio.file.Path;
|
||||
|
||||
@AddVaultWizardScoped
|
||||
public class CreateNewVaultExpertSettingsController implements FxController {
|
||||
|
||||
public static final int MAX_SHORTENING_THRESHOLD = 220;
|
||||
public static final int MIN_SHORTENING_THRESHOLD = 36;
|
||||
private static final String DOCS_NAME_SHORTENING_URL = "https://docs.cryptomator.org/en/1.7/security/architecture/#name-shortening";
|
||||
|
||||
private final Stage window;
|
||||
private final Lazy<Application> application;
|
||||
private final Lazy<Scene> chooseLocationScene;
|
||||
private final Lazy<Scene> choosePasswordScene;
|
||||
private final StringProperty vaultNameProperty;
|
||||
private final ObjectProperty<Path> vaultPathProperty;
|
||||
private final IntegerProperty shorteningThreshold;
|
||||
|
||||
private final BooleanBinding validShorteningThreshold;
|
||||
|
||||
//FXML
|
||||
public Label vaultNameLabel;
|
||||
public Label vaultPathLabel;
|
||||
public CheckBox expertSettingsCheckBox;
|
||||
public NumericTextField shorteningThresholdTextField;
|
||||
|
||||
@Inject
|
||||
CreateNewVaultExpertSettingsController(@AddVaultWizardWindow Stage window, //
|
||||
Lazy<Application> application, //
|
||||
@FxmlScene(FxmlFile.ADDVAULT_NEW_LOCATION) Lazy<Scene> chooseLocationScene, //
|
||||
@FxmlScene(FxmlFile.ADDVAULT_NEW_PASSWORD) Lazy<Scene> choosePasswordScene, //
|
||||
@Named("vaultName") StringProperty vaultName, //
|
||||
ObjectProperty<Path> vaultPath, //
|
||||
@Named("shorteningThreshold") IntegerProperty shorteningThreshold) {
|
||||
this.window = window;
|
||||
this.application = application;
|
||||
this.chooseLocationScene = chooseLocationScene;
|
||||
this.choosePasswordScene = choosePasswordScene;
|
||||
this.vaultNameProperty = vaultName;
|
||||
this.vaultPathProperty = vaultPath;
|
||||
this.shorteningThreshold = shorteningThreshold;
|
||||
this.validShorteningThreshold = Bindings.createBooleanBinding(this::isValidShorteningThreshold, shorteningThreshold);
|
||||
}
|
||||
|
||||
@FXML
|
||||
public void initialize() {
|
||||
vaultNameLabel.textProperty().bind(vaultNameProperty);
|
||||
vaultPathLabel.textProperty().bind(vaultPathProperty.asString());
|
||||
shorteningThresholdTextField.setPromptText(MIN_SHORTENING_THRESHOLD + "-" + MAX_SHORTENING_THRESHOLD);
|
||||
shorteningThresholdTextField.setText(Integer.toString(MAX_SHORTENING_THRESHOLD));
|
||||
shorteningThresholdTextField.textProperty().addListener((observable, oldValue, newValue) -> {
|
||||
try {
|
||||
int intValue = Integer.parseInt(newValue);
|
||||
shorteningThreshold.set(intValue);
|
||||
} catch (NumberFormatException e) {
|
||||
shorteningThreshold.set(0); //the value is set to 0 to ensure that an invalid value assignment is detected during a NumberFormatException
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@FXML
|
||||
public void toggleUseExpertSettings() {
|
||||
if (!expertSettingsCheckBox.isSelected()) {
|
||||
shorteningThresholdTextField.setText(Integer.toString(MAX_SHORTENING_THRESHOLD));
|
||||
}
|
||||
}
|
||||
|
||||
@FXML
|
||||
public void back() {
|
||||
window.setScene(chooseLocationScene.get());
|
||||
}
|
||||
|
||||
@FXML
|
||||
public void next() {
|
||||
window.setScene(choosePasswordScene.get());
|
||||
}
|
||||
|
||||
public BooleanBinding validShorteningThresholdProperty() {
|
||||
return validShorteningThreshold;
|
||||
}
|
||||
|
||||
public boolean isValidShorteningThreshold() {
|
||||
var value = shorteningThreshold.get();
|
||||
return value >= MIN_SHORTENING_THRESHOLD && value <= MAX_SHORTENING_THRESHOLD;
|
||||
}
|
||||
|
||||
public void openDocs() {
|
||||
application.get().getHostServices().showDocument(DOCS_NAME_SHORTENING_URL);
|
||||
}
|
||||
|
||||
public Path getVaultPath() {
|
||||
return vaultPathProperty.get();
|
||||
}
|
||||
|
||||
public String getVaultName() {
|
||||
return vaultNameProperty.get();
|
||||
}
|
||||
}
|
@ -48,7 +48,7 @@ public class CreateNewVaultLocationController implements FxController {
|
||||
|
||||
private final Stage window;
|
||||
private final Lazy<Scene> chooseNameScene;
|
||||
private final Lazy<Scene> choosePasswordScene;
|
||||
private final Lazy<Scene> chooseExpertSettingsScene;
|
||||
private final List<RadioButton> locationPresetBtns;
|
||||
private final ObjectProperty<Path> vaultPath;
|
||||
private final StringProperty vaultName;
|
||||
@ -68,10 +68,15 @@ public class CreateNewVaultLocationController implements FxController {
|
||||
public FontAwesome5IconView badLocation;
|
||||
|
||||
@Inject
|
||||
CreateNewVaultLocationController(@AddVaultWizardWindow Stage window, @FxmlScene(FxmlFile.ADDVAULT_NEW_NAME) Lazy<Scene> chooseNameScene, @FxmlScene(FxmlFile.ADDVAULT_NEW_PASSWORD) Lazy<Scene> choosePasswordScene, ObjectProperty<Path> vaultPath, @Named("vaultName") StringProperty vaultName, ResourceBundle resourceBundle) {
|
||||
CreateNewVaultLocationController(@AddVaultWizardWindow Stage window, //
|
||||
@FxmlScene(FxmlFile.ADDVAULT_NEW_NAME) Lazy<Scene> chooseNameScene, //
|
||||
@FxmlScene(FxmlFile.ADDVAULT_NEW_EXPERT_SETTINGS) Lazy<Scene> chooseExpertSettingsScene, //
|
||||
ObjectProperty<Path> vaultPath, //
|
||||
@Named("vaultName") StringProperty vaultName, //
|
||||
ResourceBundle resourceBundle) {
|
||||
this.window = window;
|
||||
this.chooseNameScene = chooseNameScene;
|
||||
this.choosePasswordScene = choosePasswordScene;
|
||||
this.chooseExpertSettingsScene = chooseExpertSettingsScene;
|
||||
this.vaultPath = vaultPath;
|
||||
this.vaultName = vaultName;
|
||||
this.resourceBundle = resourceBundle;
|
||||
@ -151,7 +156,7 @@ public class CreateNewVaultLocationController implements FxController {
|
||||
@FXML
|
||||
public void next() {
|
||||
if (validVaultPath.getValue()) {
|
||||
window.setScene(choosePasswordScene.get());
|
||||
window.setScene(chooseExpertSettingsScene.get());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -10,13 +10,12 @@ import org.cryptomator.cryptolib.api.CryptorProvider;
|
||||
import org.cryptomator.cryptolib.api.Masterkey;
|
||||
import org.cryptomator.cryptolib.api.MasterkeyLoader;
|
||||
import org.cryptomator.cryptolib.common.MasterkeyFileAccess;
|
||||
import org.cryptomator.ui.changepassword.NewPasswordController;
|
||||
import org.cryptomator.ui.common.FxController;
|
||||
import org.cryptomator.ui.common.FxmlFile;
|
||||
import org.cryptomator.ui.common.FxmlScene;
|
||||
import org.cryptomator.ui.changepassword.NewPasswordController;
|
||||
import org.cryptomator.ui.common.Tasks;
|
||||
import org.cryptomator.ui.fxapp.FxApplicationWindows;
|
||||
import org.cryptomator.ui.keyloading.masterkeyfile.MasterkeyFileLoadingStrategy;
|
||||
import org.cryptomator.ui.recoverykey.RecoveryKeyFactory;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
@ -26,6 +25,7 @@ import javax.inject.Named;
|
||||
import javafx.beans.binding.Bindings;
|
||||
import javafx.beans.binding.ObjectBinding;
|
||||
import javafx.beans.property.BooleanProperty;
|
||||
import javafx.beans.property.IntegerProperty;
|
||||
import javafx.beans.property.ObjectProperty;
|
||||
import javafx.beans.property.SimpleBooleanProperty;
|
||||
import javafx.beans.property.StringProperty;
|
||||
@ -37,7 +37,6 @@ import javafx.scene.control.ToggleGroup;
|
||||
import javafx.stage.Stage;
|
||||
import java.io.IOException;
|
||||
import java.io.UncheckedIOException;
|
||||
import java.net.URI;
|
||||
import java.nio.channels.WritableByteChannel;
|
||||
import java.nio.file.FileSystem;
|
||||
import java.nio.file.Files;
|
||||
@ -57,7 +56,7 @@ public class CreateNewVaultPasswordController implements FxController {
|
||||
private static final Logger LOG = LoggerFactory.getLogger(CreateNewVaultPasswordController.class);
|
||||
|
||||
private final Stage window;
|
||||
private final Lazy<Scene> chooseLocationScene;
|
||||
private final Lazy<Scene> chooseExpertSettingsScene;
|
||||
private final Lazy<Scene> recoveryKeyScene;
|
||||
private final Lazy<Scene> successScene;
|
||||
private final FxApplicationWindows appWindows;
|
||||
@ -75,6 +74,7 @@ public class CreateNewVaultPasswordController implements FxController {
|
||||
private final BooleanProperty processing;
|
||||
private final BooleanProperty readyToCreateVault;
|
||||
private final ObjectBinding<ContentDisplay> createVaultButtonState;
|
||||
private final IntegerProperty shorteningThreshold;
|
||||
|
||||
/* FXML */
|
||||
public ToggleGroup recoveryKeyChoice;
|
||||
@ -83,9 +83,25 @@ public class CreateNewVaultPasswordController implements FxController {
|
||||
public NewPasswordController newPasswordSceneController;
|
||||
|
||||
@Inject
|
||||
CreateNewVaultPasswordController(@AddVaultWizardWindow Stage window, @FxmlScene(FxmlFile.ADDVAULT_NEW_LOCATION) Lazy<Scene> chooseLocationScene, @FxmlScene(FxmlFile.ADDVAULT_NEW_RECOVERYKEY) Lazy<Scene> recoveryKeyScene, @FxmlScene(FxmlFile.ADDVAULT_SUCCESS) Lazy<Scene> successScene, FxApplicationWindows appWindows, ExecutorService executor, RecoveryKeyFactory recoveryKeyFactory, @Named("vaultName") StringProperty vaultName, ObjectProperty<Path> vaultPath, @AddVaultWizardWindow ObjectProperty<Vault> vault, @Named("recoveryKey") StringProperty recoveryKey, VaultListManager vaultListManager, ResourceBundle resourceBundle, ReadmeGenerator readmeGenerator, SecureRandom csprng, MasterkeyFileAccess masterkeyFileAccess) {
|
||||
CreateNewVaultPasswordController(@AddVaultWizardWindow Stage window, //
|
||||
@FxmlScene(FxmlFile.ADDVAULT_NEW_EXPERT_SETTINGS) Lazy<Scene> chooseExpertSettingsScene, //
|
||||
@FxmlScene(FxmlFile.ADDVAULT_NEW_RECOVERYKEY) Lazy<Scene> recoveryKeyScene, //
|
||||
@FxmlScene(FxmlFile.ADDVAULT_SUCCESS) Lazy<Scene> successScene, //
|
||||
FxApplicationWindows appWindows, //
|
||||
ExecutorService executor, //
|
||||
RecoveryKeyFactory recoveryKeyFactory, //
|
||||
@Named("vaultName") StringProperty vaultName, //
|
||||
ObjectProperty<Path> vaultPath, //
|
||||
@AddVaultWizardWindow ObjectProperty<Vault> vault, //
|
||||
@Named("recoveryKey") StringProperty recoveryKey, //
|
||||
VaultListManager vaultListManager, //
|
||||
ResourceBundle resourceBundle, //
|
||||
@Named("shorteningThreshold") IntegerProperty shorteningThreshold, //
|
||||
ReadmeGenerator readmeGenerator, //
|
||||
SecureRandom csprng, //
|
||||
MasterkeyFileAccess masterkeyFileAccess) {
|
||||
this.window = window;
|
||||
this.chooseLocationScene = chooseLocationScene;
|
||||
this.chooseExpertSettingsScene = chooseExpertSettingsScene;
|
||||
this.recoveryKeyScene = recoveryKeyScene;
|
||||
this.successScene = successScene;
|
||||
this.appWindows = appWindows;
|
||||
@ -103,6 +119,7 @@ public class CreateNewVaultPasswordController implements FxController {
|
||||
this.processing = new SimpleBooleanProperty();
|
||||
this.readyToCreateVault = new SimpleBooleanProperty();
|
||||
this.createVaultButtonState = Bindings.when(processing).then(ContentDisplay.LEFT).otherwise(ContentDisplay.TEXT_ONLY);
|
||||
this.shorteningThreshold = shorteningThreshold;
|
||||
}
|
||||
|
||||
@FXML
|
||||
@ -116,7 +133,7 @@ public class CreateNewVaultPasswordController implements FxController {
|
||||
|
||||
@FXML
|
||||
public void back() {
|
||||
window.setScene(chooseLocationScene.get());
|
||||
window.setScene(chooseExpertSettingsScene.get());
|
||||
}
|
||||
|
||||
@FXML
|
||||
@ -176,7 +193,11 @@ public class CreateNewVaultPasswordController implements FxController {
|
||||
// 2. initialize vault:
|
||||
try {
|
||||
MasterkeyLoader loader = ignored -> masterkey.copy();
|
||||
CryptoFileSystemProperties fsProps = CryptoFileSystemProperties.cryptoFileSystemProperties().withCipherCombo(CryptorProvider.Scheme.SIV_GCM).withKeyLoader(loader).build();
|
||||
CryptoFileSystemProperties fsProps = CryptoFileSystemProperties.cryptoFileSystemProperties() //
|
||||
.withCipherCombo(CryptorProvider.Scheme.SIV_GCM) //
|
||||
.withKeyLoader(loader) //
|
||||
.withShorteningThreshold(shorteningThreshold.get()) //
|
||||
.build();
|
||||
CryptoFileSystemProvider.initialize(path, fsProps, DEFAULT_KEY_ID);
|
||||
|
||||
// 3. write vault-internal readme file:
|
||||
|
@ -4,6 +4,7 @@ public enum FxmlFile {
|
||||
ADDVAULT_EXISTING("/fxml/addvault_existing.fxml"), //
|
||||
ADDVAULT_NEW_NAME("/fxml/addvault_new_name.fxml"), //
|
||||
ADDVAULT_NEW_LOCATION("/fxml/addvault_new_location.fxml"), //
|
||||
ADDVAULT_NEW_EXPERT_SETTINGS("/fxml/addvault_new_expert_settings.fxml"), //
|
||||
ADDVAULT_NEW_PASSWORD("/fxml/addvault_new_password.fxml"), //
|
||||
ADDVAULT_NEW_RECOVERYKEY("/fxml/addvault_new_recoverykey.fxml"), //
|
||||
ADDVAULT_SUCCESS("/fxml/addvault_success.fxml"), //
|
||||
@ -41,6 +42,7 @@ public enum FxmlFile {
|
||||
RECOVERYKEY_RESET_PASSWORD_SUCCESS("/fxml/recoverykey_reset_password_success.fxml"), //
|
||||
RECOVERYKEY_SUCCESS("/fxml/recoverykey_success.fxml"), //
|
||||
REMOVE_VAULT("/fxml/remove_vault.fxml"), //
|
||||
UPDATE_REMINDER("/fxml/update_reminder.fxml"), //
|
||||
UNLOCK_ENTER_PASSWORD("/fxml/unlock_enter_password.fxml"),
|
||||
UNLOCK_INVALID_MOUNT_POINT("/fxml/unlock_invalid_mount_point.fxml"), //
|
||||
UNLOCK_SELECT_MASTERKEYFILE("/fxml/unlock_select_masterkeyfile.fxml"), //
|
||||
|
@ -40,6 +40,7 @@ public enum FontAwesome5Icon {
|
||||
LOCK("\uF023"), //
|
||||
LOCK_OPEN("\uF3C1"), //
|
||||
MAGIC("\uF0D0"), //
|
||||
PENCIL("\uF303"), //
|
||||
PLUS("\uF067"), //
|
||||
PRINT("\uF02F"), //
|
||||
QUESTION("\uF128"), //
|
||||
|
@ -13,18 +13,19 @@ public class FormattedLabel extends Label {
|
||||
private final StringProperty format = new SimpleStringProperty("");
|
||||
private final ObjectProperty<Object> arg1 = new SimpleObjectProperty<>();
|
||||
private final ObjectProperty<Object> arg2 = new SimpleObjectProperty<>();
|
||||
// add arg2, arg3, ... on demand
|
||||
private final ObjectProperty<Object> arg3 = new SimpleObjectProperty<>();
|
||||
// add arg4, arg5, ... on demand
|
||||
|
||||
public FormattedLabel() {
|
||||
textProperty().bind(createStringBinding());
|
||||
}
|
||||
|
||||
protected StringBinding createStringBinding() {
|
||||
return Bindings.createStringBinding(this::updateText, format, arg1, arg2);
|
||||
return Bindings.createStringBinding(this::updateText, format, arg1, arg2, arg3);
|
||||
}
|
||||
|
||||
private String updateText() {
|
||||
return String.format(format.get(), arg1.get(), arg2.get());
|
||||
return String.format(format.get(), arg1.get(), arg2.get(), arg3.get());
|
||||
}
|
||||
|
||||
/* Observables */
|
||||
@ -64,4 +65,16 @@ public class FormattedLabel extends Label {
|
||||
public void setArg2(Object arg2) {
|
||||
this.arg2.set(arg2);
|
||||
}
|
||||
|
||||
public ObjectProperty<Object> arg3Property() {
|
||||
return arg3;
|
||||
}
|
||||
|
||||
public Object getArg3() {
|
||||
return arg3.get();
|
||||
}
|
||||
|
||||
public void setArg3(Object arg3) {
|
||||
this.arg3.set(arg3);
|
||||
}
|
||||
}
|
||||
|
@ -68,6 +68,8 @@ public class FxApplication {
|
||||
return null;
|
||||
});
|
||||
|
||||
appWindows.checkAndShowUpdateReminderWindow();
|
||||
|
||||
launchEventHandler.startHandlingLaunchEvents();
|
||||
autoUnlocker.tryUnlockForTimespan(2, TimeUnit.MINUTES);
|
||||
}
|
||||
|
@ -8,19 +8,21 @@ package org.cryptomator.ui.fxapp;
|
||||
import dagger.Module;
|
||||
import dagger.Provides;
|
||||
import org.cryptomator.ui.error.ErrorComponent;
|
||||
import org.cryptomator.ui.health.HealthCheckComponent;
|
||||
import org.cryptomator.ui.lock.LockComponent;
|
||||
import org.cryptomator.ui.mainwindow.MainWindowComponent;
|
||||
import org.cryptomator.ui.preferences.PreferencesComponent;
|
||||
import org.cryptomator.ui.quit.QuitComponent;
|
||||
|
||||
import org.cryptomator.ui.traymenu.TrayMenuComponent;
|
||||
import org.cryptomator.ui.unlock.UnlockComponent;
|
||||
import org.cryptomator.ui.updatereminder.UpdateReminderComponent;
|
||||
import org.cryptomator.ui.vaultoptions.VaultOptionsComponent;
|
||||
|
||||
import javafx.scene.image.Image;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
|
||||
@Module(includes = {UpdateCheckerModule.class}, subcomponents = {TrayMenuComponent.class, MainWindowComponent.class, PreferencesComponent.class, UnlockComponent.class, LockComponent.class, QuitComponent.class, ErrorComponent.class})
|
||||
@Module(includes = {UpdateCheckerModule.class}, subcomponents = {TrayMenuComponent.class, MainWindowComponent.class, PreferencesComponent.class, VaultOptionsComponent.class, UnlockComponent.class, LockComponent.class, QuitComponent.class, ErrorComponent.class, HealthCheckComponent.class, UpdateReminderComponent.class})
|
||||
abstract class FxApplicationModule {
|
||||
|
||||
private static Image createImageFromResource(String resourceName) throws IOException {
|
||||
@ -52,4 +54,5 @@ abstract class FxApplicationModule {
|
||||
static QuitComponent provideQuitComponent(QuitComponent.Builder builder) {
|
||||
return builder.build();
|
||||
}
|
||||
|
||||
}
|
@ -13,6 +13,9 @@ import org.cryptomator.ui.preferences.SelectedPreferencesTab;
|
||||
import org.cryptomator.ui.quit.QuitComponent;
|
||||
import org.cryptomator.ui.unlock.UnlockComponent;
|
||||
import org.cryptomator.ui.unlock.UnlockWorkflow;
|
||||
import org.cryptomator.ui.updatereminder.UpdateReminderComponent;
|
||||
import org.cryptomator.ui.vaultoptions.SelectedVaultOptionsTab;
|
||||
import org.cryptomator.ui.vaultoptions.VaultOptionsComponent;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
@ -43,22 +46,36 @@ public class FxApplicationWindows {
|
||||
private final Lazy<PreferencesComponent> preferencesWindow;
|
||||
private final QuitComponent.Builder quitWindowBuilder;
|
||||
private final UnlockComponent.Factory unlockWorkflowFactory;
|
||||
private final UpdateReminderComponent.Factory updateReminderWindowBuilder;
|
||||
private final LockComponent.Factory lockWorkflowFactory;
|
||||
private final ErrorComponent.Factory errorWindowFactory;
|
||||
private final ExecutorService executor;
|
||||
private final VaultOptionsComponent.Factory vaultOptionsWindow;
|
||||
private final FilteredList<Window> visibleWindows;
|
||||
|
||||
@Inject
|
||||
public FxApplicationWindows(@PrimaryStage Stage primaryStage, Optional<TrayIntegrationProvider> trayIntegration, Lazy<MainWindowComponent> mainWindow, Lazy<PreferencesComponent> preferencesWindow, QuitComponent.Builder quitWindowBuilder, UnlockComponent.Factory unlockWorkflowFactory, LockComponent.Factory lockWorkflowFactory, ErrorComponent.Factory errorWindowFactory, ExecutorService executor) {
|
||||
public FxApplicationWindows(@PrimaryStage Stage primaryStage,
|
||||
Optional<TrayIntegrationProvider> trayIntegration, //
|
||||
Lazy<MainWindowComponent> mainWindow, //
|
||||
Lazy<PreferencesComponent> preferencesWindow, //
|
||||
QuitComponent.Builder quitWindowBuilder, //
|
||||
UnlockComponent.Factory unlockWorkflowFactory, //
|
||||
UpdateReminderComponent.Factory updateReminderWindowBuilder, //
|
||||
LockComponent.Factory lockWorkflowFactory, //
|
||||
ErrorComponent.Factory errorWindowFactory, //
|
||||
VaultOptionsComponent.Factory vaultOptionsWindow, //
|
||||
ExecutorService executor) {
|
||||
this.primaryStage = primaryStage;
|
||||
this.trayIntegration = trayIntegration;
|
||||
this.mainWindow = mainWindow;
|
||||
this.preferencesWindow = preferencesWindow;
|
||||
this.quitWindowBuilder = quitWindowBuilder;
|
||||
this.unlockWorkflowFactory = unlockWorkflowFactory;
|
||||
this.updateReminderWindowBuilder = updateReminderWindowBuilder;
|
||||
this.lockWorkflowFactory = lockWorkflowFactory;
|
||||
this.errorWindowFactory = errorWindowFactory;
|
||||
this.executor = executor;
|
||||
this.vaultOptionsWindow = vaultOptionsWindow;
|
||||
this.visibleWindows = Window.getWindows().filtered(Window::isShowing);
|
||||
}
|
||||
|
||||
@ -105,10 +122,18 @@ public class FxApplicationWindows {
|
||||
return CompletableFuture.supplyAsync(() -> preferencesWindow.get().showPreferencesWindow(selectedTab), Platform::runLater).whenComplete(this::reportErrors);
|
||||
}
|
||||
|
||||
public CompletionStage<Stage> showVaultOptionsWindow(Vault vault, SelectedVaultOptionsTab tab) {
|
||||
return showMainWindow().thenApplyAsync((window) -> vaultOptionsWindow.create(vault).showVaultOptionsWindow(tab), Platform::runLater).whenComplete(this::reportErrors);
|
||||
}
|
||||
|
||||
public void showQuitWindow(QuitResponse response, boolean forced) {
|
||||
CompletableFuture.runAsync(() -> quitWindowBuilder.build().showQuitWindow(response,forced), Platform::runLater);
|
||||
}
|
||||
|
||||
public void checkAndShowUpdateReminderWindow() {
|
||||
CompletableFuture.runAsync(() -> updateReminderWindowBuilder.create().checkAndShowUpdateReminderWindow(), Platform::runLater);
|
||||
}
|
||||
|
||||
public CompletionStage<Void> startUnlockWorkflow(Vault vault, @Nullable Stage owner) {
|
||||
return CompletableFuture.supplyAsync(() -> {
|
||||
Preconditions.checkState(vault.stateProperty().transition(VaultState.Value.LOCKED, VaultState.Value.PROCESSING), "Vault not locked.");
|
||||
|
@ -19,7 +19,6 @@ import org.cryptomator.ui.health.HealthCheckComponent;
|
||||
import org.cryptomator.ui.migration.MigrationComponent;
|
||||
import org.cryptomator.ui.removevault.RemoveVaultComponent;
|
||||
import org.cryptomator.ui.stats.VaultStatisticsComponent;
|
||||
import org.cryptomator.ui.vaultoptions.VaultOptionsComponent;
|
||||
import org.cryptomator.ui.wrongfilealert.WrongFileAlertComponent;
|
||||
|
||||
import javax.inject.Named;
|
||||
@ -33,7 +32,7 @@ import javafx.stage.StageStyle;
|
||||
import java.util.Map;
|
||||
import java.util.ResourceBundle;
|
||||
|
||||
@Module(subcomponents = {AddVaultWizardComponent.class, HealthCheckComponent.class, MigrationComponent.class, RemoveVaultComponent.class, VaultOptionsComponent.class, VaultStatisticsComponent.class, WrongFileAlertComponent.class, ErrorComponent.class})
|
||||
@Module(subcomponents = {AddVaultWizardComponent.class, MigrationComponent.class, RemoveVaultComponent.class, VaultStatisticsComponent.class, WrongFileAlertComponent.class, ErrorComponent.class})
|
||||
abstract class MainWindowModule {
|
||||
|
||||
@Provides
|
||||
|
@ -1,19 +1,28 @@
|
||||
package org.cryptomator.ui.unlock;
|
||||
|
||||
import org.cryptomator.common.ObservableUtil;
|
||||
import org.cryptomator.common.mount.HideawayNotDirectoryException;
|
||||
import org.cryptomator.common.mount.IllegalMountPointException;
|
||||
import org.cryptomator.common.mount.MountPointCleanupFailedException;
|
||||
import org.cryptomator.common.mount.MountPointInUseException;
|
||||
import org.cryptomator.common.mount.MountPointNotExistsException;
|
||||
import org.cryptomator.common.mount.MountPointNotEmptyDirectoryException;
|
||||
import org.cryptomator.common.mount.MountPointNotExistingException;
|
||||
import org.cryptomator.common.mount.MountPointNotSupportedException;
|
||||
import org.cryptomator.common.vaults.Vault;
|
||||
import org.cryptomator.ui.common.FxController;
|
||||
import org.cryptomator.ui.controls.FormattedLabel;
|
||||
import org.cryptomator.ui.fxapp.FxApplicationWindows;
|
||||
import org.cryptomator.ui.preferences.SelectedPreferencesTab;
|
||||
import org.cryptomator.ui.vaultoptions.SelectedVaultOptionsTab;
|
||||
import org.jetbrains.annotations.PropertyKey;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javafx.beans.property.ObjectProperty;
|
||||
import javafx.beans.value.ObservableValue;
|
||||
import javafx.fxml.FXML;
|
||||
import javafx.stage.Stage;
|
||||
import java.nio.file.Path;
|
||||
import java.util.ResourceBundle;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
|
||||
//At the current point in time only the CustomMountPointChooser may cause this window to be shown.
|
||||
@UnlockScoped
|
||||
@ -21,32 +30,32 @@ public class UnlockInvalidMountPointController implements FxController {
|
||||
|
||||
private final Stage window;
|
||||
private final Vault vault;
|
||||
private final AtomicReference<Throwable> unlockException;
|
||||
private final FxApplicationWindows appWindows;
|
||||
private final ResourceBundle resourceBundle;
|
||||
|
||||
private final ObservableValue<ExceptionType> exceptionType;
|
||||
private final ObservableValue<Path> exceptionPath;
|
||||
private final ObservableValue<String> exceptionMessage;
|
||||
private final ObservableValue<Path> hideawayPath;
|
||||
private final ObservableValue<String> format;
|
||||
private final ObservableValue<Boolean> showPreferences;
|
||||
private final ObservableValue<Boolean> showVaultOptions;
|
||||
|
||||
public FormattedLabel dialogDescription;
|
||||
|
||||
@Inject
|
||||
UnlockInvalidMountPointController(@UnlockWindow Stage window, @UnlockWindow Vault vault, @UnlockWindow AtomicReference<Throwable> unlockException, FxApplicationWindows appWindows, ResourceBundle resourceBundle) {
|
||||
UnlockInvalidMountPointController(@UnlockWindow Stage window, @UnlockWindow Vault vault, @UnlockWindow ObjectProperty<IllegalMountPointException> illegalMountPointException, FxApplicationWindows appWindows, ResourceBundle resourceBundle) {
|
||||
this.window = window;
|
||||
this.vault = vault;
|
||||
this.unlockException = unlockException;
|
||||
this.appWindows = appWindows;
|
||||
this.resourceBundle = resourceBundle;
|
||||
}
|
||||
|
||||
@FXML
|
||||
public void initialize() {
|
||||
var e = unlockException.get();
|
||||
var translationKey = switch (e) {
|
||||
case MountPointNotSupportedException x -> "unlock.error.customPath.description.notSupported";
|
||||
case MountPointNotExistsException x -> "unlock.error.customPath.description.notExists";
|
||||
case MountPointInUseException x -> "unlock.error.customPath.description.inUse";
|
||||
default -> "unlock.error.customPath.description.generic";
|
||||
};
|
||||
dialogDescription.setFormat(resourceBundle.getString(translationKey));
|
||||
dialogDescription.setArg1(e.getMessage());
|
||||
this.exceptionType = illegalMountPointException.map(this::getExceptionType);
|
||||
this.exceptionPath = illegalMountPointException.map(IllegalMountPointException::getMountpoint);
|
||||
this.exceptionMessage = illegalMountPointException.map(IllegalMountPointException::getMessage);
|
||||
this.hideawayPath = illegalMountPointException.map(e -> e instanceof HideawayNotDirectoryException haeExc ? haeExc.getHideaway() : null);
|
||||
|
||||
this.format = ObservableUtil.mapWithDefault(exceptionType, type -> resourceBundle.getString(type.translationKey), "");
|
||||
this.showPreferences = ObservableUtil.mapWithDefault(exceptionType, type -> type.action == ButtonAction.SHOW_PREFERENCES, false);
|
||||
this.showVaultOptions = ObservableUtil.mapWithDefault(exceptionType, type -> type.action == ButtonAction.SHOW_VAULT_OPTIONS, false);
|
||||
}
|
||||
|
||||
@FXML
|
||||
@ -60,4 +69,98 @@ public class UnlockInvalidMountPointController implements FxController {
|
||||
window.close();
|
||||
}
|
||||
|
||||
@FXML
|
||||
public void closeAndOpenVaultOptions() {
|
||||
appWindows.showVaultOptionsWindow(vault, SelectedVaultOptionsTab.MOUNT);
|
||||
window.close();
|
||||
}
|
||||
|
||||
private ExceptionType getExceptionType(Throwable unlockException) {
|
||||
return switch (unlockException) {
|
||||
case MountPointNotSupportedException x -> ExceptionType.NOT_SUPPORTED;
|
||||
case MountPointNotExistingException x -> ExceptionType.NOT_EXISTING;
|
||||
case MountPointInUseException x -> ExceptionType.IN_USE;
|
||||
case HideawayNotDirectoryException x -> ExceptionType.HIDEAWAY_NOT_DIR;
|
||||
case MountPointCleanupFailedException x -> ExceptionType.COULD_NOT_BE_CLEARED;
|
||||
case MountPointNotEmptyDirectoryException x -> ExceptionType.NOT_EMPTY_DIRECTORY;
|
||||
default -> ExceptionType.GENERIC;
|
||||
};
|
||||
}
|
||||
|
||||
private enum ExceptionType {
|
||||
|
||||
NOT_SUPPORTED("unlock.error.customPath.description.notSupported", ButtonAction.SHOW_PREFERENCES),
|
||||
NOT_EXISTING("unlock.error.customPath.description.notExists", ButtonAction.SHOW_VAULT_OPTIONS),
|
||||
IN_USE("unlock.error.customPath.description.inUse", ButtonAction.SHOW_VAULT_OPTIONS),
|
||||
HIDEAWAY_NOT_DIR("unlock.error.customPath.description.hideawayNotDir", ButtonAction.SHOW_VAULT_OPTIONS),
|
||||
COULD_NOT_BE_CLEARED("unlock.error.customPath.description.couldNotBeCleaned", ButtonAction.SHOW_VAULT_OPTIONS),
|
||||
NOT_EMPTY_DIRECTORY("unlock.error.customPath.description.notEmptyDir", ButtonAction.SHOW_VAULT_OPTIONS),
|
||||
GENERIC("unlock.error.customPath.description.generic", ButtonAction.SHOW_PREFERENCES);
|
||||
|
||||
private final String translationKey;
|
||||
private final ButtonAction action;
|
||||
|
||||
ExceptionType(@PropertyKey(resourceBundle = "i18n.strings") String translationKey, ButtonAction action) {
|
||||
this.translationKey = translationKey;
|
||||
this.action = action;
|
||||
}
|
||||
}
|
||||
|
||||
private enum ButtonAction {
|
||||
|
||||
//TODO Add option to show filesystem, e.g. for ExceptionType.HIDEAWAY_EXISTS
|
||||
SHOW_PREFERENCES,
|
||||
SHOW_VAULT_OPTIONS;
|
||||
|
||||
}
|
||||
|
||||
/* Getter */
|
||||
|
||||
public Path getExceptionPath() {
|
||||
return exceptionPath.getValue();
|
||||
}
|
||||
|
||||
public ObservableValue<Path> exceptionPathProperty() {
|
||||
return exceptionPath;
|
||||
}
|
||||
|
||||
public String getFormat() {
|
||||
return format.getValue();
|
||||
}
|
||||
|
||||
public ObservableValue<String> formatProperty() {
|
||||
return format;
|
||||
}
|
||||
|
||||
public String getExceptionMessage() {
|
||||
return exceptionMessage.getValue();
|
||||
}
|
||||
|
||||
public ObservableValue<String> exceptionMessageProperty() {
|
||||
return exceptionMessage;
|
||||
}
|
||||
|
||||
public Path getHideawayPath() {
|
||||
return hideawayPath.getValue();
|
||||
}
|
||||
|
||||
public ObservableValue<Path> hideawayPathProperty() {
|
||||
return hideawayPath;
|
||||
}
|
||||
|
||||
public Boolean getShowPreferences() {
|
||||
return showPreferences.getValue();
|
||||
}
|
||||
|
||||
public ObservableValue<Boolean> showPreferencesProperty() {
|
||||
return showPreferences;
|
||||
}
|
||||
|
||||
public Boolean getShowVaultOptions() {
|
||||
return showVaultOptions.getValue();
|
||||
}
|
||||
|
||||
public ObservableValue<Boolean> showVaultOptionsProperty() {
|
||||
return showVaultOptions;
|
||||
}
|
||||
}
|
@ -4,6 +4,7 @@ import dagger.Binds;
|
||||
import dagger.Module;
|
||||
import dagger.Provides;
|
||||
import dagger.multibindings.IntoMap;
|
||||
import org.cryptomator.common.mount.IllegalMountPointException;
|
||||
import org.cryptomator.common.vaults.Vault;
|
||||
import org.cryptomator.ui.common.DefaultSceneFactory;
|
||||
import org.cryptomator.ui.common.FxController;
|
||||
@ -18,12 +19,13 @@ import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.inject.Named;
|
||||
import javax.inject.Provider;
|
||||
import javafx.beans.property.ObjectProperty;
|
||||
import javafx.beans.property.SimpleObjectProperty;
|
||||
import javafx.scene.Scene;
|
||||
import javafx.stage.Modality;
|
||||
import javafx.stage.Stage;
|
||||
import java.util.Map;
|
||||
import java.util.ResourceBundle;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
|
||||
@Module(subcomponents = {KeyLoadingComponent.class})
|
||||
abstract class UnlockModule {
|
||||
@ -61,8 +63,8 @@ abstract class UnlockModule {
|
||||
@Provides
|
||||
@UnlockWindow
|
||||
@UnlockScoped
|
||||
static AtomicReference<Throwable> unlockException() {
|
||||
return new AtomicReference<>();
|
||||
static ObjectProperty<IllegalMountPointException> illegalMountPointException() {
|
||||
return new SimpleObjectProperty<>();
|
||||
}
|
||||
|
||||
@Provides
|
||||
|
@ -17,11 +17,11 @@ import org.slf4j.LoggerFactory;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javafx.application.Platform;
|
||||
import javafx.beans.property.ObjectProperty;
|
||||
import javafx.concurrent.Task;
|
||||
import javafx.scene.Scene;
|
||||
import javafx.stage.Stage;
|
||||
import java.io.IOException;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
|
||||
/**
|
||||
* A multi-step task that consists of background activities as well as user interaction.
|
||||
@ -40,10 +40,10 @@ public class UnlockWorkflow extends Task<Boolean> {
|
||||
private final Lazy<Scene> invalidMountPointScene;
|
||||
private final FxApplicationWindows appWindows;
|
||||
private final KeyLoadingStrategy keyLoadingStrategy;
|
||||
private final AtomicReference<Throwable> unlockFailedException;
|
||||
private final ObjectProperty<IllegalMountPointException> illegalMountPointException;
|
||||
|
||||
@Inject
|
||||
UnlockWorkflow(@UnlockWindow Stage window, @UnlockWindow Vault vault, VaultService vaultService, @FxmlScene(FxmlFile.UNLOCK_SUCCESS) Lazy<Scene> successScene, @FxmlScene(FxmlFile.UNLOCK_INVALID_MOUNT_POINT) Lazy<Scene> invalidMountPointScene, FxApplicationWindows appWindows, @UnlockWindow KeyLoadingStrategy keyLoadingStrategy, @UnlockWindow AtomicReference<Throwable> unlockFailedException) {
|
||||
UnlockWorkflow(@UnlockWindow Stage window, @UnlockWindow Vault vault, VaultService vaultService, @FxmlScene(FxmlFile.UNLOCK_SUCCESS) Lazy<Scene> successScene, @FxmlScene(FxmlFile.UNLOCK_INVALID_MOUNT_POINT) Lazy<Scene> invalidMountPointScene, FxApplicationWindows appWindows, @UnlockWindow KeyLoadingStrategy keyLoadingStrategy, @UnlockWindow ObjectProperty<IllegalMountPointException> illegalMountPointException) {
|
||||
this.window = window;
|
||||
this.vault = vault;
|
||||
this.vaultService = vaultService;
|
||||
@ -51,7 +51,7 @@ public class UnlockWorkflow extends Task<Boolean> {
|
||||
this.invalidMountPointScene = invalidMountPointScene;
|
||||
this.appWindows = appWindows;
|
||||
this.keyLoadingStrategy = keyLoadingStrategy;
|
||||
this.unlockFailedException = unlockFailedException;
|
||||
this.illegalMountPointException = illegalMountPointException;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -79,7 +79,7 @@ public class UnlockWorkflow extends Task<Boolean> {
|
||||
|
||||
private void handleIllegalMountPointError(IllegalMountPointException impe) {
|
||||
Platform.runLater(() -> {
|
||||
unlockFailedException.set(impe);
|
||||
illegalMountPointException.set(impe);
|
||||
window.setScene(invalidMountPointScene.get());
|
||||
window.show();
|
||||
});
|
||||
|
@ -0,0 +1,38 @@
|
||||
package org.cryptomator.ui.updatereminder;
|
||||
|
||||
import dagger.Lazy;
|
||||
import dagger.Subcomponent;
|
||||
import org.cryptomator.common.settings.Settings;
|
||||
import org.cryptomator.ui.common.FxmlFile;
|
||||
import org.cryptomator.ui.common.FxmlScene;
|
||||
|
||||
import javafx.scene.Scene;
|
||||
import javafx.stage.Stage;
|
||||
import java.time.LocalDate;
|
||||
|
||||
@UpdateReminderScoped
|
||||
@Subcomponent(modules = {UpdateReminderModule.class})
|
||||
public interface UpdateReminderComponent {
|
||||
|
||||
@UpdateReminderWindow
|
||||
Stage window();
|
||||
|
||||
@FxmlScene(FxmlFile.UPDATE_REMINDER)
|
||||
Lazy<Scene> updateReminderScene();
|
||||
|
||||
Settings settings();
|
||||
|
||||
default void checkAndShowUpdateReminderWindow() {
|
||||
if (LocalDate.parse(settings().lastUpdateCheck.get()).isBefore(LocalDate.now().minusDays(14)) && !settings().checkForUpdates.getValue()) {
|
||||
Stage stage = window();
|
||||
stage.setScene(updateReminderScene().get());
|
||||
stage.sizeToScene();
|
||||
stage.show();
|
||||
}
|
||||
}
|
||||
|
||||
@Subcomponent.Factory
|
||||
interface Factory {
|
||||
UpdateReminderComponent create();
|
||||
}
|
||||
}
|
@ -0,0 +1,49 @@
|
||||
package org.cryptomator.ui.updatereminder;
|
||||
|
||||
import org.cryptomator.common.settings.Settings;
|
||||
import org.cryptomator.ui.common.FxController;
|
||||
import org.cryptomator.ui.fxapp.UpdateChecker;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javafx.fxml.FXML;
|
||||
import javafx.stage.Stage;
|
||||
import java.time.LocalDate;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
|
||||
@UpdateReminderScoped
|
||||
public class UpdateReminderController implements FxController {
|
||||
|
||||
private final Stage window;
|
||||
private final Settings settings;
|
||||
private final UpdateChecker updateChecker;
|
||||
|
||||
|
||||
@Inject
|
||||
UpdateReminderController(@UpdateReminderWindow Stage window, Settings settings, UpdateChecker updateChecker) {
|
||||
this.window = window;
|
||||
this.settings = settings;
|
||||
this.updateChecker = updateChecker;
|
||||
}
|
||||
|
||||
@FXML
|
||||
public void cancel() {
|
||||
settings.lastUpdateCheck.set(LocalDate.now().format(DateTimeFormatter.ISO_DATE));
|
||||
window.close();
|
||||
}
|
||||
|
||||
@FXML
|
||||
public void once() {
|
||||
settings.lastUpdateCheck.set(LocalDate.now().format(DateTimeFormatter.ISO_DATE));
|
||||
updateChecker.checkForUpdatesNow();
|
||||
window.close();
|
||||
}
|
||||
|
||||
@FXML
|
||||
public void automatically() {
|
||||
settings.lastUpdateCheck.set(LocalDate.now().format(DateTimeFormatter.ISO_DATE));
|
||||
updateChecker.checkForUpdatesNow();
|
||||
settings.checkForUpdates.set(true);
|
||||
window.close();
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,59 @@
|
||||
package org.cryptomator.ui.updatereminder;
|
||||
|
||||
import dagger.Binds;
|
||||
import dagger.Module;
|
||||
import dagger.Provides;
|
||||
import dagger.multibindings.IntoMap;
|
||||
import org.cryptomator.ui.common.DefaultSceneFactory;
|
||||
import org.cryptomator.ui.common.FxController;
|
||||
import org.cryptomator.ui.common.FxControllerKey;
|
||||
import org.cryptomator.ui.common.FxmlFile;
|
||||
import org.cryptomator.ui.common.FxmlLoaderFactory;
|
||||
import org.cryptomator.ui.common.FxmlScene;
|
||||
import org.cryptomator.ui.common.StageFactory;
|
||||
|
||||
import javax.inject.Provider;
|
||||
import javafx.scene.Scene;
|
||||
import javafx.stage.Modality;
|
||||
import javafx.stage.Stage;
|
||||
import java.util.Map;
|
||||
import java.util.ResourceBundle;
|
||||
|
||||
@Module
|
||||
abstract class UpdateReminderModule {
|
||||
|
||||
@Provides
|
||||
@UpdateReminderWindow
|
||||
@UpdateReminderScoped
|
||||
static FxmlLoaderFactory provideFxmlLoaderFactory(Map<Class<? extends FxController>, Provider<FxController>> factories, DefaultSceneFactory sceneFactory, ResourceBundle resourceBundle) {
|
||||
return new FxmlLoaderFactory(factories, sceneFactory, resourceBundle);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@UpdateReminderWindow
|
||||
@UpdateReminderScoped
|
||||
static Stage provideStage(StageFactory factory, ResourceBundle resourceBundle) {
|
||||
Stage stage = factory.create();
|
||||
stage.setTitle(resourceBundle.getString("updateReminder.title"));
|
||||
stage.setMinWidth(500);
|
||||
stage.setMinHeight(100);
|
||||
stage.initModality(Modality.APPLICATION_MODAL);
|
||||
return stage;
|
||||
}
|
||||
|
||||
@Provides
|
||||
@FxmlScene(FxmlFile.UPDATE_REMINDER)
|
||||
@UpdateReminderScoped
|
||||
static Scene provideUpdateReminderScene(@UpdateReminderWindow FxmlLoaderFactory fxmlLoaders) {
|
||||
return fxmlLoaders.createScene(FxmlFile.UPDATE_REMINDER);
|
||||
}
|
||||
|
||||
|
||||
// ------------------
|
||||
|
||||
@Binds
|
||||
@IntoMap
|
||||
@FxControllerKey(UpdateReminderController.class)
|
||||
abstract FxController bindUpdateReminderController(UpdateReminderController controller);
|
||||
|
||||
}
|
@ -0,0 +1,13 @@
|
||||
package org.cryptomator.ui.updatereminder;
|
||||
|
||||
import javax.inject.Scope;
|
||||
import java.lang.annotation.Documented;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
|
||||
@Scope
|
||||
@Documented
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@interface UpdateReminderScoped {
|
||||
|
||||
}
|
@ -0,0 +1,14 @@
|
||||
package org.cryptomator.ui.updatereminder;
|
||||
|
||||
import javax.inject.Qualifier;
|
||||
import java.lang.annotation.Documented;
|
||||
import java.lang.annotation.Retention;
|
||||
|
||||
import static java.lang.annotation.RetentionPolicy.RUNTIME;
|
||||
|
||||
@Qualifier
|
||||
@Documented
|
||||
@Retention(RUNTIME)
|
||||
@interface UpdateReminderWindow {
|
||||
|
||||
}
|
@ -28,12 +28,13 @@ public interface VaultOptionsComponent {
|
||||
|
||||
ObjectProperty<SelectedVaultOptionsTab> selectedTabProperty();
|
||||
|
||||
default void showVaultOptionsWindow(SelectedVaultOptionsTab selectedTab) {
|
||||
default Stage showVaultOptionsWindow(SelectedVaultOptionsTab selectedTab) {
|
||||
selectedTabProperty().set(selectedTab);
|
||||
Stage stage = window();
|
||||
stage.setScene(scene().get());
|
||||
stage.show();
|
||||
stage.requestFocus();
|
||||
return stage;
|
||||
}
|
||||
|
||||
@Subcomponent.Factory
|
||||
|
79
src/main/resources/fxml/addvault_new_expert_settings.fxml
Normal file
79
src/main/resources/fxml/addvault_new_expert_settings.fxml
Normal file
@ -0,0 +1,79 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<?import org.cryptomator.ui.controls.FontAwesome5IconView?>
|
||||
<?import org.cryptomator.ui.controls.NumericTextField?>
|
||||
<?import javafx.geometry.Insets?>
|
||||
<?import javafx.scene.control.Button?>
|
||||
<?import javafx.scene.control.ButtonBar?>
|
||||
<?import javafx.scene.control.CheckBox?>
|
||||
<?import javafx.scene.control.Hyperlink?>
|
||||
<?import javafx.scene.control.Label?>
|
||||
<?import javafx.scene.control.Tooltip?>
|
||||
<?import javafx.scene.layout.HBox?>
|
||||
<?import javafx.scene.layout.Region?>
|
||||
<?import javafx.scene.layout.StackPane?>
|
||||
<?import javafx.scene.layout.VBox?>
|
||||
<VBox xmlns:fx="http://javafx.com/fxml"
|
||||
xmlns="http://javafx.com/javafx"
|
||||
fx:controller="org.cryptomator.ui.addvaultwizard.CreateNewVaultExpertSettingsController"
|
||||
prefWidth="450"
|
||||
prefHeight="450"
|
||||
spacing="12"
|
||||
alignment="CENTER_LEFT">
|
||||
<padding>
|
||||
<Insets topRightBottomLeft="24"/>
|
||||
</padding>
|
||||
<children>
|
||||
<Region prefHeight="12" VBox.vgrow="NEVER"/>
|
||||
<Label fx:id="vaultNameLabel" alignment="CENTER_RIGHT" graphicTextGap="6" wrapText="true">
|
||||
<graphic>
|
||||
<FontAwesome5IconView styleClass="glyph-icon-muted" wrappingWidth="12" glyph="PENCIL"/>
|
||||
</graphic>
|
||||
</Label>
|
||||
<Label fx:id="vaultPathLabel" alignment="CENTER_RIGHT" graphicTextGap="6" wrapText="true">
|
||||
<graphic>
|
||||
<FontAwesome5IconView styleClass="glyph-icon-muted" wrappingWidth="12" glyph="HDD"/>
|
||||
</graphic>
|
||||
</Label>
|
||||
<Region prefHeight="12" VBox.vgrow="NEVER"/>
|
||||
<CheckBox fx:id="expertSettingsCheckBox" text="%addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox" onAction="#toggleUseExpertSettings"/>
|
||||
<VBox spacing="6" visible="${expertSettingsCheckBox.selected}">
|
||||
<HBox spacing="2" HBox.hgrow="NEVER">
|
||||
<Label text="%addvaultwizard.new.expertSettings.shorteningThreshold.title"/>
|
||||
<Region prefWidth="2"/>
|
||||
<Hyperlink contentDisplay="GRAPHIC_ONLY" onAction="#openDocs">
|
||||
<graphic>
|
||||
<FontAwesome5IconView glyph="QUESTION_CIRCLE" styleClass="glyph-icon-muted"/>
|
||||
</graphic>
|
||||
<tooltip>
|
||||
<Tooltip text="%addvaultwizard.new.expertSettings.shorteningThreshold.tooltip" showDelay="10ms"/>
|
||||
</tooltip>
|
||||
</Hyperlink>
|
||||
</HBox>
|
||||
<NumericTextField fx:id="shorteningThresholdTextField"/>
|
||||
<HBox alignment="TOP_RIGHT">
|
||||
<Region minWidth="4" prefWidth="4" HBox.hgrow="NEVER"/>
|
||||
<StackPane>
|
||||
<Label styleClass="label-muted" text="%addvaultwizard.new.expertSettings.shorteningThreshold.invalid" textAlignment="RIGHT" alignment="CENTER_RIGHT" visible="${!controller.validShorteningThreshold}" managed="${!controller.validShorteningThreshold}" graphicTextGap="6">
|
||||
<graphic>
|
||||
<FontAwesome5IconView styleClass="glyph-icon-red" glyph="TIMES"/>
|
||||
</graphic>
|
||||
</Label>
|
||||
<Label styleClass="label-muted" text="%addvaultwizard.new.expertSettings.shorteningThreshold.valid" textAlignment="RIGHT" alignment="CENTER_RIGHT" visible="${controller.validShorteningThreshold}" managed="${controller.validShorteningThreshold}" graphicTextGap="6">
|
||||
<graphic>
|
||||
<FontAwesome5IconView styleClass="glyph-icon-primary" glyph="CHECK"/>
|
||||
</graphic>
|
||||
</Label>
|
||||
</StackPane>
|
||||
</HBox>
|
||||
</VBox>
|
||||
<Region VBox.vgrow="ALWAYS"/>
|
||||
|
||||
<ButtonBar buttonMinWidth="120" buttonOrder="B+X">
|
||||
<buttons>
|
||||
<Button text="%generic.button.back" ButtonBar.buttonData="BACK_PREVIOUS" onAction="#back"/>
|
||||
<Button text="%generic.button.next" ButtonBar.buttonData="NEXT_FORWARD" onAction="#next" defaultButton="true" disable="${!controller.validShorteningThreshold}"/>
|
||||
</buttons>
|
||||
</ButtonBar>
|
||||
</children>
|
||||
</VBox>
|
@ -20,8 +20,8 @@
|
||||
alignment="CENTER_LEFT">
|
||||
<fx:define>
|
||||
<ToggleGroup fx:id="locationPresetsToggler"/>
|
||||
<FontAwesome5IconView fx:id="badLocation" styleClass="glyph-icon-red" glyph="TIMES" />
|
||||
<FontAwesome5IconView fx:id="goodLocation" styleClass="glyph-icon-primary" glyph="CHECK" />
|
||||
<FontAwesome5IconView fx:id="badLocation" styleClass="glyph-icon-red" glyph="TIMES"/>
|
||||
<FontAwesome5IconView fx:id="goodLocation" styleClass="glyph-icon-primary" glyph="CHECK"/>
|
||||
</fx:define>
|
||||
<padding>
|
||||
<Insets topRightBottomLeft="24"/>
|
||||
@ -47,7 +47,7 @@
|
||||
<VBox spacing="6">
|
||||
<Label text="%addvaultwizard.new.locationLabel" labelFor="$locationTextField"/>
|
||||
<TextField fx:id="locationTextField" promptText="%addvaultwizard.new.locationPrompt" text="${controller.vaultPath}" editable="false" disable="${!controller.anyRadioButtonSelected}" HBox.hgrow="ALWAYS"/>
|
||||
<Label fx:id="locationStatusLabel" alignment="CENTER_RIGHT" wrapText="true" visible="${controller.anyRadioButtonSelected}" maxWidth="Infinity" graphicTextGap="6" />
|
||||
<Label fx:id="locationStatusLabel" alignment="CENTER_RIGHT" wrapText="true" visible="${controller.anyRadioButtonSelected}" maxWidth="Infinity" graphicTextGap="6"/>
|
||||
</VBox>
|
||||
|
||||
<Region VBox.vgrow="ALWAYS"/>
|
||||
|
@ -40,13 +40,14 @@
|
||||
</padding>
|
||||
</Label>
|
||||
|
||||
<FormattedLabel fx:id="dialogDescription" wrapText="true" textAlignment="LEFT"/>
|
||||
<FormattedLabel fx:id="dialogDescription" wrapText="true" textAlignment="LEFT" format="${controller.format}" arg1="${controller.exceptionPath}" arg2="${controller.exceptionMessage}" arg3="${controller.hideawayPath}"/>
|
||||
|
||||
<Region VBox.vgrow="ALWAYS" minHeight="18"/>
|
||||
<ButtonBar buttonMinWidth="120" buttonOrder="+CI">
|
||||
<buttons>
|
||||
<Button text="%generic.button.cancel" ButtonBar.buttonData="CANCEL_CLOSE" cancelButton="true" onAction="#close"/>
|
||||
<Button text="%hub.noKeychain.openBtn" ButtonBar.buttonData="FINISH" defaultButton="true" onAction="#closeAndOpenPreferences"/>
|
||||
<Button text="%hub.noKeychain.openBtn" ButtonBar.buttonData="FINISH" defaultButton="true" onAction="#closeAndOpenPreferences" visible="${controller.showPreferences}" managed="${controller.showPreferences}"/>
|
||||
<Button text="%main.vaultDetail.optionsBtn" ButtonBar.buttonData="FINISH" defaultButton="true" onAction="#closeAndOpenVaultOptions" visible="${controller.showVaultOptions}" managed="${controller.showVaultOptions}"/>
|
||||
</buttons>
|
||||
</ButtonBar>
|
||||
</VBox>
|
||||
|
54
src/main/resources/fxml/update_reminder.fxml
Normal file
54
src/main/resources/fxml/update_reminder.fxml
Normal file
@ -0,0 +1,54 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<?import org.cryptomator.ui.controls.FontAwesome5IconView?>
|
||||
<?import javafx.geometry.Insets?>
|
||||
<?import javafx.scene.control.Button?>
|
||||
<?import javafx.scene.control.ButtonBar?>
|
||||
<?import javafx.scene.control.Label?>
|
||||
<?import javafx.scene.Group?>
|
||||
<?import javafx.scene.layout.HBox?>
|
||||
<?import javafx.scene.layout.Region?>
|
||||
<?import javafx.scene.layout.StackPane?>
|
||||
<?import javafx.scene.layout.VBox?>
|
||||
<?import javafx.scene.shape.Circle?>
|
||||
<HBox xmlns:fx="http://javafx.com/fxml"
|
||||
xmlns="http://javafx.com/javafx"
|
||||
fx:controller="org.cryptomator.ui.updatereminder.UpdateReminderController"
|
||||
minWidth="500"
|
||||
prefWidth="500"
|
||||
minHeight="145"
|
||||
spacing="12"
|
||||
alignment="TOP_LEFT">
|
||||
<padding>
|
||||
<Insets topRightBottomLeft="12"/>
|
||||
</padding>
|
||||
<children>
|
||||
<Group>
|
||||
<StackPane>
|
||||
<padding>
|
||||
<Insets topRightBottomLeft="6"/>
|
||||
</padding>
|
||||
<Circle styleClass="glyph-icon-primary" radius="24"/>
|
||||
<FontAwesome5IconView styleClass="glyph-icon-white" glyph="QUESTION" glyphSize="24"/>
|
||||
</StackPane>
|
||||
</Group>
|
||||
|
||||
<VBox HBox.hgrow="ALWAYS">
|
||||
<Label styleClass="label-large" text="%updateReminder.message" wrapText="true">
|
||||
<padding>
|
||||
<Insets bottom="6" top="6"/>
|
||||
</padding>
|
||||
</Label>
|
||||
<Label text="%updateReminder.description" wrapText="true"/>
|
||||
<Region VBox.vgrow="ALWAYS" minHeight="18"/>
|
||||
<ButtonBar buttonMinWidth="120" buttonOrder="+CY" >
|
||||
<buttons>
|
||||
<Button text="%updateReminder.notNow" ButtonBar.buttonData="CANCEL_CLOSE" cancelButton="true" onAction="#cancel"/>
|
||||
<Button text="%updateReminder.yesOnce" ButtonBar.buttonData="YES" onAction="#once"/>
|
||||
<Button text="%updateReminder.yesAutomatically" ButtonBar.buttonData="YES" defaultButton="true" onAction="#automatically"/>
|
||||
</buttons>
|
||||
</ButtonBar>
|
||||
|
||||
</VBox>
|
||||
</children>
|
||||
</HBox>
|
@ -63,6 +63,12 @@ addvaultwizard.new.validCharacters.message=The vault name may contain the follow
|
||||
addvaultwizard.new.validCharacters.chars=Word characters (e.g. a, ж or 수)
|
||||
addvaultwizard.new.validCharacters.numbers=Numbers
|
||||
addvaultwizard.new.validCharacters.dashes=Hyphen (%s) or underscore (%s)
|
||||
### Expert Settings
|
||||
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=Enable expert settings
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=Enter a value between 36 and 220 (default 220)
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=Open the documentation to learn more.
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.title=Maximum length of encrypted file names
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.valid=Valid
|
||||
### Password
|
||||
addvaultwizard.new.createVaultBtn=Create Vault
|
||||
addvaultwizard.new.generateRecoveryKeyChoice=You won't be able to access your data without your password. Do you want a recovery key for the case you lose your password?
|
||||
@ -130,8 +136,11 @@ unlock.success.revealBtn=Reveal Drive
|
||||
unlock.error.customPath.message=Unable to mount vault to custom path
|
||||
unlock.error.customPath.description.notSupported=If you wish to keep using the custom path, please go to the preferences and select a volume type that supports it. Otherwise, go to the vault options and choose a supported mount point.
|
||||
unlock.error.customPath.description.notExists=The custom mount path does not exist. Either create it in your local filesystem or change it in the vault options.
|
||||
unlock.error.customPath.description.inUse=Drive letter "%s" is already in use.
|
||||
unlock.error.customPath.description.generic=You have selected a custom mount path for this vault, but using it failed with the message: %s
|
||||
unlock.error.customPath.description.inUse=The drive letter or custom mount path "%s" is already in use.
|
||||
unlock.error.customPath.description.hideawayNotDir=The temporary, hidden file "%3$s" used for unlock could not be removed. Please check the file and then delete it manually.
|
||||
unlock.error.customPath.description.couldNotBeCleaned=Your vault could not be mounted to the path "%s". Please try again or choose a different path.
|
||||
unlock.error.customPath.description.notEmptyDir=The custom mount path "%s" is not an empty folder. Please choose an empty folder and try again.
|
||||
unlock.error.customPath.description.generic=You have selected a custom mount path for this vault, but using it failed with the message: %2$s
|
||||
## Hub
|
||||
hub.noKeychain.message=Unable to access device key
|
||||
hub.noKeychain.description=In order to unlock Hub vaults, a device key is required, which is secured using a keychain. To proceed, enable “%s” and select a keychain in the preferences.
|
||||
@ -492,4 +501,12 @@ quit.lockAndQuitBtn=Lock and Quit
|
||||
# Forced Quit
|
||||
quit.forced.message=Some vaults could not be locked
|
||||
quit.forced.description=Locking vaults was blocked by pending operations or open files. You can force lock remaining vaults, however interrupting I/O may result in the loss of unsaved data.
|
||||
quit.forced.forceAndQuitBtn=Force and Quit
|
||||
quit.forced.forceAndQuitBtn=Force and Quit
|
||||
|
||||
# Update Reminder
|
||||
updateReminder.title=Update Check
|
||||
updateReminder.message=Check for Updates?
|
||||
updateReminder.description=Stay updated with new features, bug fixes, and security improvements. We recommend to automatically check for updates.
|
||||
updateReminder.notNow=Not Now
|
||||
updateReminder.yesOnce=Yes, Once
|
||||
updateReminder.yesAutomatically=Yes, Automatically
|
@ -4,7 +4,7 @@
|
||||
## Button
|
||||
generic.button.apply=تطبيق
|
||||
generic.button.back=رجوع
|
||||
generic.button.cancel=الغاء
|
||||
generic.button.cancel=إلغاء
|
||||
generic.button.change=تغيير
|
||||
generic.button.choose=اختر…
|
||||
generic.button.close=إغلاق
|
||||
@ -16,13 +16,20 @@ generic.button.print=طباعة
|
||||
|
||||
# Error
|
||||
error.message=حدث خطأ ما
|
||||
error.description=لم يتوقع "كريبتوماتور" حدوث ذلك. يمكنك البحث عن الحلول الموجودة لهذا الخطأ. وإذا لم يتم الإبلاغ عنه بعد، لا تتردد في فعل ذلك.
|
||||
error.hyperlink.lookup=ابحث عن هذا الخطأ
|
||||
error.hyperlink.report=أبلغ عن هذا الخطأ
|
||||
error.technicalDetails=التفاصيل:
|
||||
error.existingSolutionDescription=لم يتوقع "كريبتوماتور" حدوث ذلك. لكننا وجدنا حلا لهذا الخطأ. يرجى إلقاء نظرة على الرابط التالي.
|
||||
error.hyperlink.solution=ابحث عن الحل
|
||||
|
||||
|
||||
# Defaults
|
||||
defaults.vault.vaultName=مخزن
|
||||
defaults.vault.vaultName=الخزينة
|
||||
|
||||
# Tray Menu
|
||||
traymenu.showMainWindow=اظهار
|
||||
traymenu.showPreferencesWindow=تفضيلات
|
||||
traymenu.showMainWindow=عرض
|
||||
traymenu.showPreferencesWindow=التفضيلات
|
||||
traymenu.lockAllVaults=تأمين الكل
|
||||
traymenu.quitApplication=انهاء
|
||||
traymenu.vault.unlock=افتح
|
||||
@ -37,7 +44,7 @@ addvaultwizard.welcome.existingButton=افتح مخزن موجود
|
||||
## New
|
||||
### Name
|
||||
addvaultwizard.new.nameInstruction=اختر اسم للمخزن
|
||||
addvaultwizard.new.namePrompt=اسم المخزن
|
||||
addvaultwizard.new.namePrompt=اسم الخزينة
|
||||
### Location
|
||||
addvaultwizard.new.locationInstruction=أين يجب على Cryptomator تخزين الملفات المشفرة للمخزن الخاص بك؟
|
||||
addvaultwizard.new.locationLabel=موقع التخزين
|
||||
@ -49,6 +56,13 @@ addvaultwizard.new.fileAlreadyExists=ملف أو مجلد بنفس اسم الم
|
||||
addvaultwizard.new.locationDoesNotExist=المجلد في المسار المحدد غير موجود أو لا يمكن الوصول إليه
|
||||
addvaultwizard.new.locationIsNotWritable=لا يوجد صلاحيات للكتابة على المسار المحدد
|
||||
addvaultwizard.new.locationIsOk=الموقع المناسب للمخزن الخاص بك
|
||||
addvaultwizard.new.invalidName=اسم المخزن غير صالح
|
||||
addvaultwizard.new.validName=اسم المخزن صالح
|
||||
addvaultwizard.new.validCharacters.message=قد يحتوي اسم المخزن على الأحرف التالية:
|
||||
addvaultwizard.new.validCharacters.chars=أحرف الكلمات (أمثلة: a, ж, 수)
|
||||
addvaultwizard.new.validCharacters.numbers=الأعداد
|
||||
addvaultwizard.new.validCharacters.dashes=الشرطة (%s) أو الشرطة السفلية (%s)
|
||||
### Expert Settings
|
||||
### Password
|
||||
addvaultwizard.new.createVaultBtn=إنشاء المخزن
|
||||
addvaultwizard.new.generateRecoveryKeyChoice=لن تتمكن من الوصول إلى بياناتك بدون كلمة المرور الخاصة بك. هل تريد مفتاح استرداد في حالة فقدان كلمة المرور الخاصة بك؟
|
||||
@ -56,7 +70,7 @@ addvaultwizard.new.generateRecoveryKeyChoice.yes=نعم من فضلك، أن ت
|
||||
addvaultwizard.new.generateRecoveryKeyChoice.no=لا شكراً، لن أفقد كلمة المرور الخاصة بي
|
||||
### Information
|
||||
addvault.new.readme.storageLocation.fileName=هام.rtf
|
||||
addvault.new.readme.storageLocation.1=⚠️ ملفات الخزنة ⚠️
|
||||
addvault.new.readme.storageLocation.1=⚠️ ملفات الخزينة ⚠️
|
||||
addvault.new.readme.storageLocation.2=هذا هو موقع تخزين الخزنة الخاصة بك.
|
||||
addvault.new.readme.storageLocation.3=لا تفعل
|
||||
addvault.new.readme.storageLocation.4=• تغيير أي ملفات داخل هذا الدليل أو
|
||||
@ -72,13 +86,17 @@ addvault.new.readme.accessLocation.2=هذا هو موقع الوصول للخر
|
||||
addvault.new.readme.accessLocation.3=سيتم تشفير أي ملفات تضاف إلى هذا المجلد من قبل Cryptomator. يمكنك العمل عليه كأي مجلد آخر. هذه فقط طريقة عرض غير مشفرة لمحتوياتها، ملفاتك تبقى مشفرة على القرص الصلب الخاص بك طوال الوقت.
|
||||
addvault.new.readme.accessLocation.4=لا تتردد في إزالة هذا الملف.
|
||||
## Existing
|
||||
addvaultwizard.existing.instruction=اختر ملف "vault.cryptomator" من خزينتك الحالية. إذا كان يوجد فقط ملف اسمه "masterkey.cryptomator"، اختره عوضاً عنه.
|
||||
addvaultwizard.existing.chooseBtn=اختر…
|
||||
addvaultwizard.existing.filePickerTitle=حدد مِلَفّ المخزن
|
||||
addvaultwizard.existing.filePickerMimeDesc=مخزن Cryptomator
|
||||
## Success
|
||||
addvaultwizard.success.nextStepsInstructions=تم إضافة مخزن "%s".\nتحتاج إلى فتح هذا المخزن للوصول أو إضافة محتويات إليه. بدلاً من ذلك، يمكنك فتحه في أي وقت لاحق.
|
||||
addvaultwizard.success.unlockNow=افتح الان
|
||||
|
||||
# Remove Vault
|
||||
removeVault.title=احذف الحافظة
|
||||
removeVault.message=حذف المخزن؟
|
||||
removeVault.description=سيؤدي هذا إلى نسيان Cryptomator لهذا المخزن فقط. يمكنك إضافته مرة أخرى لاحقاً. لن يتم حذف أي من الملفات المشفرة من القرص الصلب الخاص بك.
|
||||
removeVault.confirmBtn=احذف الحافظة
|
||||
|
||||
@ -93,30 +111,48 @@ forgetPassword.description=سيؤدي هذا إلى حذف كلمة المرور
|
||||
forgetPassword.confirmBtn=نسيت كلمة المرور
|
||||
|
||||
# Unlock
|
||||
unlock.title=فتح "%s"
|
||||
unlock.passwordPrompt=أدخل كلمة السر لـ "%s":
|
||||
unlock.savePassword=تذكر كلمة المرور
|
||||
unlock.unlockBtn=افتح
|
||||
## Select
|
||||
unlock.chooseMasterkey.message=لم يتم العثور على مفتاح التشفير الرئيسي
|
||||
unlock.chooseMasterkey.description=لم يتمكن Cryptomator من العثور على مفتاح التشفير الرئيسي للمخزن "%s". الرجاء اختيار الملف يدوياً.
|
||||
unlock.chooseMasterkey.filePickerTitle=اختر ملف الـ Masterkey
|
||||
unlock.chooseMasterkey.filePickerMimeDesc=مفتاح التشفير الرئيسي في Cryptomator
|
||||
## Success
|
||||
unlock.success.message=تم الفتح بنجاح
|
||||
unlock.success.description=تم فتح "%s" بنجاح! يمكنك الآن الوصول لمخزنك عن طريق القرص الافتراضي الخاص به.
|
||||
unlock.success.rememberChoice=تذكر اختياري ولا تظهر هذا مرة أخرى
|
||||
unlock.success.revealBtn=اظهار القرص
|
||||
## Failure
|
||||
unlock.error.customPath.description.inUse=حرف القرص "%s" قيد الاستخدام.
|
||||
unlock.error.customPath.description.generic=لقد اخترت مسار تثبيت مخصص لهذه الخزينة، ولكن استخدامه فشل مع الرسالة: %s
|
||||
## Hub
|
||||
hub.noKeychain.message=غير قادر على الوصول إلى مفتاح الجهاز
|
||||
hub.noKeychain.openBtn=فتح التفضيلات
|
||||
### Waiting
|
||||
hub.auth.message=جاري الانتظار للمصادقة…
|
||||
### Receive Key
|
||||
### Register Device
|
||||
hub.register.message=اسم الجهاز متطلب
|
||||
hub.register.nameLabel=اسم الجهاز
|
||||
hub.register.occupiedMsg=الاسم مستخدم مسبقاً
|
||||
hub.register.registerBtn=تأكيد
|
||||
### Registration Success
|
||||
hub.registerSuccess.description=للدخول إلى الخزينة، يحتاج جهازك إلى إذن من مالك الخزينة.
|
||||
### Registration Failed
|
||||
hub.registerFailed.message=أخفق في تسمية الجهاز
|
||||
### Unauthorized
|
||||
hub.unauthorized.message=تم رفض الوصول
|
||||
### License Exceeded
|
||||
|
||||
# Lock
|
||||
## Force
|
||||
lock.forced.message=فشلت عملية القفل
|
||||
lock.forced.description=تم حظر قفل "%s" بواسطة العمليات المعلقة أو الملفات المفتوحة. يمكنك فرض قفل هذا المخزن، ولكن مقاطعة عمليات الادخال والاخراج I/O قد تؤدي لفقدان البيانات غير المحفوظة.
|
||||
lock.forced.retryBtn=اعد المحاولة
|
||||
lock.forced.forceBtn=قفل قسري
|
||||
## Failure
|
||||
lock.fail.message=فشلت عملية اقفال الخزنة.
|
||||
lock.fail.description=فشل عملية قفل %s". تأكد من حفظ العمل غير المحفوظ في مكان آخر وأن العمليات الهامة للقراءة/الكتابة قد انتهت. من أجل إغلاق المخزن، اقتل تطبيق Cryptomator.
|
||||
@ -152,10 +188,20 @@ migration.impossible.moreInfo=لا يزال ممكناً فتح المخزن ب
|
||||
|
||||
# Health Check
|
||||
## Start
|
||||
health.intro.remarkFix=لا يمكن حل جميع المشاكل.
|
||||
health.intro.affirmation=لقد قرأت وفهمت المعلومات الواردة أعلاه
|
||||
## Start Failure
|
||||
health.fail.moreInfo=المزيد من المعلومات
|
||||
## Check Selection
|
||||
health.checkList.selectAllButton=اختر جميع الفحوص
|
||||
health.checkList.deselectAllButton=إلغاء اختيار جميع الفحوص
|
||||
## Detail view
|
||||
health.check.detail.fixAllSpecificBtn=إصلاح كل الأنواع
|
||||
## Result view
|
||||
health.result.severityFilter.good=جيد
|
||||
health.result.severityFilter.info=معلومات
|
||||
health.result.severityFilter.warn=تحذير
|
||||
health.result.severityFilter.crit=حرج
|
||||
## Fix Application
|
||||
|
||||
# Preferences
|
||||
@ -196,6 +242,8 @@ stats.cacheHitRate=معدل استخدام الكاش
|
||||
stats.read.throughput.idle=قراءة: خامل
|
||||
stats.decr.total.data.none=تم فك تشفير البيانات:-
|
||||
## Write
|
||||
stats.write.total.data.mib=البيانات المكتوبة: %.1f م.ب
|
||||
stats.write.total.data.gib=البيانات المكتوبة: %.1f ج.ب
|
||||
stats.encr.total.data.none=البيانات المشفرة: -
|
||||
|
||||
## Accesses
|
||||
@ -263,10 +311,11 @@ wrongFileAlert.link=لمزيد من المساعدة، قم بزيارة
|
||||
## General
|
||||
vaultOptions.general=عام
|
||||
vaultOptions.general.vaultName=اسم المخزن
|
||||
vaultOptions.general.autoLock.lockAfterTimePart2=دقائق
|
||||
vaultOptions.general.unlockAfterStartup=فتح قفل المخزن عند بدء تشغيل Cryptomator
|
||||
vaultOptions.general.actionAfterUnlock=بعد فتح القفل بنجاح
|
||||
vaultOptions.general.actionAfterUnlock.ignore=لا تفعل شيئاً
|
||||
vaultOptions.general.actionAfterUnlock.reveal=اظهار القرص
|
||||
vaultOptions.general.actionAfterUnlock.reveal=إظهار القرص
|
||||
vaultOptions.general.actionAfterUnlock.ask=اسأل
|
||||
|
||||
## Mount
|
||||
@ -315,4 +364,6 @@ passwordStrength.messageLabel.4=قوية جداً
|
||||
# Quit
|
||||
quit.lockAndQuitBtn=قفل و خروج
|
||||
|
||||
# Forced Quit
|
||||
# Forced Quit
|
||||
|
||||
# Update Reminder
|
@ -20,6 +20,9 @@ error.description=Cryptomator не чакаў такога павароту. Т
|
||||
error.hyperlink.lookup=Шукаць гэтую памылку
|
||||
error.hyperlink.report=Паведаміць пра гэтую памылку
|
||||
error.technicalDetails=Падрабязнасці:
|
||||
error.existingSolutionDescription=Cryptomator не чакаў такога, але мы знайшлі, як можна выправіць гэтую хібу. Калі ласка, скарыстайся спасылкаю.
|
||||
error.hyperlink.solution=Паглядзець на рашэнне
|
||||
|
||||
|
||||
# Defaults
|
||||
defaults.vault.vaultName=Скарбніца
|
||||
@ -59,6 +62,7 @@ addvaultwizard.new.validCharacters.message=Нчзва скарбніцы мус
|
||||
addvaultwizard.new.validCharacters.chars=Слоўныя знакі, накшталт a, ж або 수
|
||||
addvaultwizard.new.validCharacters.numbers=Лічбы
|
||||
addvaultwizard.new.validCharacters.dashes=Злучок (%s) або падкрэслінік (%s)
|
||||
### Expert Settings
|
||||
### Password
|
||||
addvaultwizard.new.createVaultBtn=Стварыць скарбніцу
|
||||
addvaultwizard.new.generateRecoveryKeyChoice=Бяз гэтага пароля ты ня зможаш атрымаць доступ да сваіх даных. Ці хочаш ты мець ключ аднаўлення на выпадак, калі ты згубіш свой пароль?
|
||||
@ -126,6 +130,7 @@ unlock.success.revealBtn=Паказаць дыск
|
||||
unlock.error.customPath.message=Не магчыма змантажаваць скарбніцу да карыстальніцкай сцежкі
|
||||
unlock.error.customPath.description.notSupported=Калі ты надалей жадаеш карыстацца адмысловаю сцежкаю, калі ласка, пайдзі ў налады ды абары там тып тому, які падтрымлівае яе. У іншым выпадку пайдзі ў опцыі скарбніцы ды абяры там пункт мантажавання, які падтрымліваецца.
|
||||
unlock.error.customPath.description.notExists=Адмысловая сцежка мантажавання не існуе. Ствары яе ў сваёй файлавай сістэме, альбо змяні яе ў опцыях скарбніцы.
|
||||
unlock.error.customPath.description.inUse=Дыскавая літара "%s" ужо выкарыстоўваецца.
|
||||
unlock.error.customPath.description.generic=Ты абраў адмысловую сцежку мантажавання для гэтай скарбніцы, але скарыстацца ёю не ўдалося. Вось паведамленне пра памылку: %s
|
||||
## Hub
|
||||
hub.noKeychain.message=Няма доступу да ключа прылады
|
||||
@ -193,11 +198,15 @@ migration.error.missingFileSystemCapabilities.reason.READ_ACCESS=Файлава
|
||||
migration.error.missingFileSystemCapabilities.reason.WRITE_ACCESS=Файлавая сістэма не дазваляе пісаць у яе.
|
||||
## Impossible
|
||||
migration.impossible.heading=Не мажліва перанесці скарбніцу
|
||||
migration.impossible.reason=Скарбніца ня можа аўтаматычна зьміґравацца, бо ейнае месца сховішча альбо пункт доступу не падтрымліваюцца.
|
||||
migration.impossible.moreInfo=Скарбніца ўсё яшчэ можа адчыняцца, нягледзячы на старую вэрсію. Інструкцыю ручнога міґравання скарбніцы ты знойдзеш тут:
|
||||
|
||||
# Health Check
|
||||
## Start
|
||||
health.title=Тэст на цэласнасць для "%s"
|
||||
health.intro.header=Тэст на цэласнасць
|
||||
health.intro.text=Тэст на цэласнасьць – гэта калекцыя тэстаў для выяўлення ды выпраўленню хібаў унутранай структуры тваёй скарбніцы. Калі ласка, зьвярні ўвагу:
|
||||
health.intro.remarkSync=Пераканайся, што ўсе прыстоі цалкам сынхранаваныя – гэта вырашае большасьць праблемаў.
|
||||
health.intro.remarkFix=Ня ўсе хібы могуць быць выпраўленыя.
|
||||
health.intro.remarkBackup=Калі даныя пашкоджаныя, дапаможа толькі рэзервовая копія.
|
||||
health.intro.affirmation=Я прачытала і зразумела інфармацыю зверху
|
||||
@ -270,8 +279,10 @@ preferences.interface.showMinimizeButton=Паказаць кнопку згор
|
||||
preferences.interface.showTrayIcon=Паказваць іконку на інфармацыйнай панэлі (спатрэбіцца перазапуск)
|
||||
## Volume
|
||||
preferences.volume=Віртуальны дыск
|
||||
preferences.volume.type=Тып тому
|
||||
preferences.volume.type.automatic=Аўтаматычна
|
||||
preferences.volume.docsTooltip=Адчыні дакумэнтацыю, каб даведацца больш пра розныя тыпы тому.
|
||||
preferences.volume.fuseRestartRequired=Каб дастасаваць зьмены, Cryptomator патрэбна перазапусьціць.
|
||||
preferences.volume.tcp.port=Порт TCP
|
||||
preferences.volume.supportedFeatures=Абраны тып тому падтрымлівае наступныя функцыі:
|
||||
preferences.volume.feature.mountAuto=Аўтаматычны выбар пункту мантажавання
|
||||
@ -348,6 +359,7 @@ main.vaultlist.contextMenu.reveal=Паказаць дыск
|
||||
main.vaultlist.addVaultBtn=Дадаць скарбніцу
|
||||
## Vault Detail
|
||||
### Welcome
|
||||
main.vaultDetail.welcomeOnboarding=Дзякуй, што ты абраў Cryptomator для абароны тваіх файлаў. Калі табе патрэбна дапамога, калі ласка, паглядзі нашы інструкцыі:
|
||||
### Locked
|
||||
main.vaultDetail.lockedStatus=ЗАМКНЁНА
|
||||
main.vaultDetail.unlockBtn=Адамкнуць…
|
||||
@ -386,6 +398,7 @@ main.vaultDetail.error.windowTitle=Памылка загрузкі скарбн
|
||||
# Wrong File Alert
|
||||
wrongFileAlert.title=Як зашыфраваць файлы
|
||||
wrongFileAlert.message=Ці спрабаваў ты зашыфраваць гэтыя файлы?
|
||||
wrongFileAlert.description=Для гэтай мэты Cryptomator стварае том у тваім мэнэджары файлавай сыстэмы.
|
||||
wrongFileAlert.instruction.0=Каб зашыфраваць файлы, зрабі наступныя крокі:
|
||||
wrongFileAlert.instruction.1=1. Разамкні свая скарбніцу.
|
||||
wrongFileAlert.instruction.2=2. Пстрыкні па "Паказаць"; каб адчыніць том у тваім файлавым мэнэджары.
|
||||
@ -426,6 +439,7 @@ vaultOptions.masterkey.recoveryKeyExplanation=Ключ аднаўлення –
|
||||
vaultOptions.masterkey.showRecoveryKeyBtn=Паказаць ключ аднаўлення
|
||||
vaultOptions.masterkey.recoverPasswordBtn=Скінуць пароль
|
||||
## Hub
|
||||
vaultOptions.hub=Аднаўленне
|
||||
|
||||
# Recovery Key
|
||||
## Display Recovery Key
|
||||
@ -437,6 +451,7 @@ recoveryKey.display.StorageHints=Захоўвай іх у бяспечным м
|
||||
## Reset Password
|
||||
### Enter Recovery Key
|
||||
recoveryKey.recover.title=Скінуць пароль
|
||||
recoveryKey.recover.prompt=Увядзі ключ аднаўлення для "%s":
|
||||
recoveryKey.recover.correctKey=Гэта валідны ключ аднаўлення
|
||||
recoveryKey.recover.wrongKey=Гэты ключ аднаўлення належыць іншай скарбніцы
|
||||
recoveryKey.recover.invalidKey=Несапраўдны ключ аднаўлення
|
||||
@ -448,6 +463,10 @@ recoveryKey.recover.resetSuccess.message=Пароль паспяхова скі
|
||||
recoveryKey.recover.resetSuccess.description=Ты можаш разамкнуць сваю скарбніцу з дапамогаю новага паролю.
|
||||
|
||||
# Convert Vault
|
||||
convertVault.title=Перабудаваць скарбніцу
|
||||
convertVault.convert.convertBtn.before=Перабудаваць
|
||||
convertVault.convert.convertBtn.processing=Перабудаванне…
|
||||
convertVault.success.message=Перабудаванне прайшло паспяхова
|
||||
|
||||
# New Password
|
||||
newPassword.promptText=Увядзі новы пароль
|
||||
@ -470,4 +489,6 @@ quit.lockAndQuitBtn=Замкнуць ды вайсці
|
||||
# Forced Quit
|
||||
quit.forced.message=Некаторыя скарбніцы не магчыма замкнуць
|
||||
quit.forced.description=Замыканне скарбніц было заблакавана праз дзеючыя аперацыі альбо праз адчыненыя файлы. Ты можаш прымусова замкнуць скарбніцы, але гэта можа прывесці да страты незахаваных даных.
|
||||
quit.forced.forceAndQuitBtn=Прымусіць і выйсці
|
||||
quit.forced.forceAndQuitBtn=Прымусіць і выйсці
|
||||
|
||||
# Update Reminder
|
@ -21,6 +21,7 @@ error.hyperlink.lookup=Търсене на грешката
|
||||
error.hyperlink.report=Докладване на грешката
|
||||
error.technicalDetails=Подробности:
|
||||
|
||||
|
||||
# Defaults
|
||||
defaults.vault.vaultName=Хранилище
|
||||
|
||||
@ -59,6 +60,7 @@ addvaultwizard.new.validCharacters.message=Името на хранилищет
|
||||
addvaultwizard.new.validCharacters.chars=Букви (напр. a, ж или 수)
|
||||
addvaultwizard.new.validCharacters.numbers=Числа
|
||||
addvaultwizard.new.validCharacters.dashes=Тире (%s) или долна черта (%s)
|
||||
### Expert Settings
|
||||
### Password
|
||||
addvaultwizard.new.createVaultBtn=Създаване
|
||||
addvaultwizard.new.generateRecoveryKeyChoice=Без парола няма да имате достъп до данните си. Желаете ли да бъде създаден ключ за възстановяване, в случай че загубите паролата си?
|
||||
@ -118,17 +120,42 @@ unlock.chooseMasterkey.filePickerMimeDesc=Гкавен ключ на Крипт
|
||||
## Success
|
||||
unlock.success.message=Отключено е успешно
|
||||
unlock.success.description=Съдържанието на хранилището „%s“ е достъпно в точката му на монтиране.
|
||||
unlock.success.rememberChoice=Запомняне на избора и да не бъде задаван отново този въпрос
|
||||
unlock.success.revealBtn=Разкриване на диска
|
||||
## Failure
|
||||
unlock.error.customPath.message=Хранилището не може да бъде монтирано в потребителския път
|
||||
unlock.error.customPath.description.notSupported=Ако искате да продължите да използвате потребитрлския път, отидете в настройките и изберете вид на дял, който поддържа потребителски пътища. В противен случай отидете в настройките на хранилището и изберете поддържана точка за монтиране.
|
||||
unlock.error.customPath.description.notExists=Потребителският път на монтиране не съществува. Създайте го в местната файлова система или го променете в настройките на хранилището.
|
||||
unlock.error.customPath.description.inUse=Има друго устройство с буква „%s“.
|
||||
unlock.error.customPath.description.generic=Избрали сте потребителски път за монтиране на това хранилище, но при използването на този път възникна следната грешка: %s
|
||||
## Hub
|
||||
hub.noKeychain.message=Няма достъп до ключа на устройството
|
||||
hub.noKeychain.description=За да отключите хранилищата в Hub е необходим ключ за устройството, който се защитава с помощта на ключодържател. За да продължите, разрешете „%s“ и изберете ключодържателя в настройките.
|
||||
hub.noKeychain.openBtn=Към настройките
|
||||
### Waiting
|
||||
hub.auth.message=Изчакване на удостоверяване…
|
||||
hub.auth.description=Автоматично ще бъдете пренасочени към страницата за вход.
|
||||
hub.auth.loginLink=Не сте пренасочени? Щракнете тук, за да посетите.
|
||||
### Receive Key
|
||||
hub.receive.message=Обработване на отговора…
|
||||
hub.receive.description=Криптоматор получава и обработва отговора от Hub. Изчакайте.
|
||||
### Register Device
|
||||
hub.register.message=Изисква се име на устройство
|
||||
hub.register.description=Изглежда, че това е първи достъп до Hub от това устройство. За да го разпознаете при разрешаване на достъпа, трябва да му дадете име.
|
||||
hub.register.nameLabel=Име на устройството
|
||||
hub.register.occupiedMsg=Това име вече е заето
|
||||
hub.register.registerBtn=Потвърждаване
|
||||
### Registration Success
|
||||
hub.registerSuccess.message=Устройството е именувано
|
||||
hub.registerSuccess.description=За да получи достъп до хранилището, устройството трябва да бъде упълномощено от собственика на хранилището.
|
||||
### Registration Failed
|
||||
hub.registerFailed.message=Грешка при именуване на устройството
|
||||
hub.registerFailed.description=В процеса на именуване е допусната грешка. За повече подробности разгледайте дневника на приложението.
|
||||
### Unauthorized
|
||||
hub.unauthorized.message=Отказан достъп
|
||||
hub.unauthorized.description=Устройството не е упълномощено за достъп до това хранилище. Поискайте достъп от собственика.
|
||||
### License Exceeded
|
||||
hub.invalidLicense.message=Лиценза за Hub е недействителен
|
||||
|
||||
# Lock
|
||||
## Force
|
||||
@ -140,6 +167,7 @@ hub.noKeychain.openBtn=Към настройките
|
||||
## Success
|
||||
migration.success.unlockNow=Отключване сега
|
||||
## Missing file system capabilities
|
||||
migration.error.missingFileSystemCapabilities.title=Неподдържана файлова система
|
||||
## Impossible
|
||||
|
||||
# Health Check
|
||||
@ -166,7 +194,9 @@ preferences.title=Настройки
|
||||
## General
|
||||
## Interface
|
||||
preferences.interface.theme=Оформление
|
||||
preferences.interface.theme.automatic=Автоматично
|
||||
## Volume
|
||||
preferences.volume.type.automatic=Автоматично
|
||||
## Updates
|
||||
## Contribution
|
||||
#<-- Add entries for donations and code/translation/documentation contribution -->
|
||||
@ -230,4 +260,6 @@ vaultOptions.masterkey.changePasswordBtn=Промяна на парола
|
||||
|
||||
# Quit
|
||||
|
||||
# Forced Quit
|
||||
# Forced Quit
|
||||
|
||||
# Update Reminder
|
@ -21,6 +21,7 @@ error.hyperlink.lookup=ত্রুটিটি খুঁজে দেখুন
|
||||
error.hyperlink.report=ত্রুটিটি রিপোর্ট করুন
|
||||
error.technicalDetails=বিস্তারিত:
|
||||
|
||||
|
||||
# Defaults
|
||||
defaults.vault.vaultName=ভোল্ট
|
||||
|
||||
@ -57,6 +58,7 @@ addvaultwizard.new.validCharacters.message=ভোল্টের নামটি
|
||||
addvaultwizard.new.validCharacters.chars=শব্দের অক্ষরগুলো (যেমনঃ a, ж অথবা 수)
|
||||
addvaultwizard.new.validCharacters.numbers=সংখ্যা
|
||||
addvaultwizard.new.validCharacters.dashes=হাইফেন (%s) অথবা আন্ডারস্কোর (%s)
|
||||
### Expert Settings
|
||||
### Password
|
||||
addvaultwizard.new.createVaultBtn=ভোল্ট তৈরি করুন
|
||||
addvaultwizard.new.generateRecoveryKeyChoice=পাসওয়ার্ড ছাড়া আপনি আপনার তথ্যগুলো ব্যবহার করতে পারবেন না. তাই আপনি কি একটি পুনরুদ্ধার চাবি চান যদি আপনি পাসওয়ার্ড হারিয়ে ফেলেন?
|
||||
@ -172,4 +174,6 @@ vaultOptions.mount.mountPoint.directoryPickerButton=নির্বাচন ক
|
||||
|
||||
# Quit
|
||||
|
||||
# Forced Quit
|
||||
# Forced Quit
|
||||
|
||||
# Update Reminder
|
@ -17,6 +17,7 @@ generic.button.print=Ispis
|
||||
# Error
|
||||
error.message=Došlo je do greške
|
||||
|
||||
|
||||
# Defaults
|
||||
defaults.vault.vaultName=Sef
|
||||
|
||||
@ -49,6 +50,7 @@ addvaultwizard.new.fileAlreadyExists=Upozorenje: Fajl ili mapa s tim nazivom ve
|
||||
addvaultwizard.new.locationDoesNotExist=Direktorij u navedenoj putanji ne postoji ili mu se ne može pristupiti
|
||||
addvaultwizard.new.locationIsNotWritable=Nije moguće izvršiti operaciju pisanja na navedenoj putanji
|
||||
addvaultwizard.new.locationIsOk=Pogodno mjesto za vaš sef
|
||||
### Expert Settings
|
||||
### Password
|
||||
addvaultwizard.new.createVaultBtn=Kreiraj novi sef
|
||||
addvaultwizard.new.generateRecoveryKeyChoice=Nećete moći pristupiti svojim podacima bez lozinke. Želite li ključ za oporavak u slučaju da izgubite lozinku?
|
||||
@ -314,4 +316,6 @@ passwordStrength.messageLabel.4=Veoma sigurno
|
||||
# Quit
|
||||
quit.lockAndQuitBtn=Zaključaj i zatvori
|
||||
|
||||
# Forced Quit
|
||||
# Forced Quit
|
||||
|
||||
# Update Reminder
|
@ -20,6 +20,9 @@ error.description=Ui! Cryptomator no esperava que passés això. Podeu cercar al
|
||||
error.hyperlink.lookup=Cerca aquest error
|
||||
error.hyperlink.report=Notifica aquest error
|
||||
error.technicalDetails=Detalls:
|
||||
error.existingSolutionDescription=Cryptomator no esperava que això ocorreguera. Però hem trobat una solució per a aquest error. Per favor, done una ullada al següent enllaç.
|
||||
error.hyperlink.solution=Buscar la solució
|
||||
|
||||
|
||||
# Defaults
|
||||
defaults.vault.vaultName=Caixa forta
|
||||
@ -59,6 +62,7 @@ addvaultwizard.new.validCharacters.message=El nom de la caixa forta només pot c
|
||||
addvaultwizard.new.validCharacters.chars=Caràcters que formen paraules (ex.: a, ж or 수)
|
||||
addvaultwizard.new.validCharacters.numbers=Nombres
|
||||
addvaultwizard.new.validCharacters.dashes=Guionet (%s) o guió baix (%s)
|
||||
### Expert Settings
|
||||
### Password
|
||||
addvaultwizard.new.createVaultBtn=Crea la caixa forta
|
||||
addvaultwizard.new.generateRecoveryKeyChoice=No podreu accedir a les vostres dades sense la contrasenya. Voleu crear una clau de recuperació en cas perdre la vostra contrasenya?
|
||||
@ -476,4 +480,6 @@ quit.lockAndQuitBtn=Bloqueja i surt
|
||||
# Forced Quit
|
||||
quit.forced.message=Algunes caixes fortes no s'han pogut bloquejar
|
||||
quit.forced.description=No s'ha pogut blocar la caixa forta perquè hi ha operacions pendents o fitxers oberts. Podeu forçar-ne el blocatge, però heu de saber que interrompre l'entrada/sortida pot produir la pèrdua de dades.
|
||||
quit.forced.forceAndQuitBtn=Forçar i sortir
|
||||
quit.forced.forceAndQuitBtn=Forçar i sortir
|
||||
|
||||
# Update Reminder
|
@ -20,6 +20,9 @@ error.description=Jejda! Tohle Cryptomator nečekal. Můžete najít již existu
|
||||
error.hyperlink.lookup=Vyhledat tuto chybu
|
||||
error.hyperlink.report=Nahlásit tuto chybu
|
||||
error.technicalDetails=Podrobnosti:
|
||||
error.existingSolutionDescription=Cryptomator neočekával, že se tak stane. Našli jsme však existující řešení pro tuto chybu. Podívejte se prosím na následující odkaz.
|
||||
error.hyperlink.solution=Podívejte se na řešení
|
||||
|
||||
|
||||
# Defaults
|
||||
defaults.vault.vaultName=Trezor
|
||||
@ -59,6 +62,12 @@ addvaultwizard.new.validCharacters.message=Název trezoru může obsahovat tyto
|
||||
addvaultwizard.new.validCharacters.chars=Slovní znaky (např. a, ж nebo 수)
|
||||
addvaultwizard.new.validCharacters.numbers=Čísla
|
||||
addvaultwizard.new.validCharacters.dashes=Pomlčka (%s) nebo podtržítko (%s)
|
||||
### Expert Settings
|
||||
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=Zobrazit expertní nastavení
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=Zadejte hodnotu mezi 36 a 220 (výchozí 220)
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=Otevřete dokumentaci, abyste se dozvěděli více.
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.title=Maximální délka šifrovaných názvů souborů
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.valid=Platný
|
||||
### Password
|
||||
addvaultwizard.new.createVaultBtn=Vytvořit trezor
|
||||
addvaultwizard.new.generateRecoveryKeyChoice=Nebudete mít přístup k datům bez hesla. Chcete recovery klíč pro případ, že ztratíte heslo?
|
||||
@ -123,11 +132,20 @@ unlock.success.description=Trezor "%s" byl úspěšně odemčen a nyní je dostu
|
||||
unlock.success.rememberChoice=Pamatovat si volbu, nezobrazovat to znovu
|
||||
unlock.success.revealBtn=Zobrazit jednotku
|
||||
## Failure
|
||||
unlock.error.customPath.message=Nelze připojit trezor k vlastní cestě
|
||||
unlock.error.customPath.description.notSupported=Pokud chcete pokračovat v používání vlastní cesty, přejděte do nastavení a vyberte typ hlasitosti, který ji podporuje. V opačném případě přejděte do možností trezoru a vyberte podporovaný přípojný bod.
|
||||
unlock.error.customPath.description.notExists=Cesta k připojení neexistuje. Buď ji vytvořte ve vašem lokálním souborovém systému, nebo ji změňte v možnostech trezoru.
|
||||
unlock.error.customPath.description.inUse=Písmeno „%s“ už je používáno pro jiný disk.
|
||||
unlock.error.customPath.description.generic=Pro tento trezor jste vybrali vlastní cestu, ale použití selhalo se zprávou: %s
|
||||
## Hub
|
||||
hub.noKeychain.message=Nelze získat přístup ke klíči zařízení
|
||||
hub.noKeychain.openBtn=Otevřít předvolby
|
||||
### Waiting
|
||||
hub.auth.message=Čekání na ověření…
|
||||
hub.auth.description=Měli byste být automaticky přesměrováni na přihlašovací stránku.
|
||||
hub.auth.loginLink=Nebyli jste přesměrováni? Klikněte zde pro otevření.
|
||||
### Receive Key
|
||||
hub.receive.message=Zpracovávání odezvy…
|
||||
### Register Device
|
||||
hub.register.message=Je vyžadován název zařízení
|
||||
hub.register.nameLabel=Název zařízení
|
||||
@ -142,6 +160,7 @@ hub.registerFailed.message=Pojmenování zařízení se nezdařilo
|
||||
hub.unauthorized.message=Přístup odepřen
|
||||
hub.unauthorized.description=Vaše zařízení dosud nebylo oprávněno k přístupu k tomuto trezoru. Požádejte vlastníka trezoru, aby jej autorizoval.
|
||||
### License Exceeded
|
||||
hub.invalidLicense.message=Licence Hubu je neplatná
|
||||
|
||||
# Lock
|
||||
## Force
|
||||
@ -219,6 +238,11 @@ health.result.severityFilter.good=Dobré
|
||||
health.result.severityFilter.info=Informace
|
||||
health.result.severityFilter.warn=Varování
|
||||
health.result.severityFilter.crit=Kritické
|
||||
health.result.fixStateFilter.fixable=Opravitelné
|
||||
health.result.fixStateFilter.notFixable=Ne opravitelné
|
||||
health.result.fixStateFilter.fixing=Opravování…
|
||||
health.result.fixStateFilter.fixed=Opraveno
|
||||
health.result.fixStateFilter.fixFailed=Opravovaní selhalo
|
||||
## Fix Application
|
||||
health.fix.fixBtn=Opravit
|
||||
health.fix.successTip=Oprava byla úspěšná
|
||||
@ -250,6 +274,7 @@ preferences.interface.showTrayIcon=Zobrazit ikonu v liště (vyžaduje restart)
|
||||
## Volume
|
||||
preferences.volume=Virtuální jednotky
|
||||
preferences.volume.type.automatic=Automatické
|
||||
preferences.volume.tcp.port=TCP port
|
||||
## Updates
|
||||
preferences.updates=Aktualizace
|
||||
preferences.updates.currentVersion=Aktuální verze: %s
|
||||
@ -324,12 +349,15 @@ main.vaultDetail.passwordSavedInKeychain=Heslo uloženo
|
||||
main.vaultDetail.unlockedStatus=ODEMKNUTO
|
||||
main.vaultDetail.accessLocation=Obsah vašeho trezoru je dostupný:
|
||||
main.vaultDetail.revealBtn=Zobrazit jednotku
|
||||
main.vaultDetail.copyUri=Kopírovat URL
|
||||
main.vaultDetail.lockBtn=Zamknout
|
||||
main.vaultDetail.bytesPerSecondRead=Přečteno:
|
||||
main.vaultDetail.bytesPerSecondWritten=Zapsáno:
|
||||
main.vaultDetail.throughput.idle=nečinný
|
||||
main.vaultDetail.throughput.kbps=%.1f KiB/s
|
||||
main.vaultDetail.throughput.mbps=%.1f MiB/s
|
||||
main.vaultDetail.stats=Statistiky trezoru
|
||||
main.vaultDetail.locateEncryptedFileBtn=Najít šifrovaný soubor
|
||||
### Missing
|
||||
main.vaultDetail.missing.info=Cryptomator nemohl najít trezor na této cestě.
|
||||
main.vaultDetail.missing.recheck=Znovu zkontrolovat
|
||||
@ -375,6 +403,7 @@ vaultOptions.mount.mountPoint=Přípojný bod
|
||||
vaultOptions.mount.mountPoint.auto=Automaticky vybrat vhodné místo
|
||||
vaultOptions.mount.mountPoint.driveLetter=Použít zvolenou jednotku
|
||||
vaultOptions.mount.mountPoint.directoryPickerButton=Vybrat...
|
||||
vaultOptions.mount.mountPoint.directoryPickerTitle=Vyberte složku
|
||||
## Master Key
|
||||
vaultOptions.masterkey=Heslo
|
||||
vaultOptions.masterkey.changePasswordBtn=Změnit heslo
|
||||
@ -383,6 +412,9 @@ vaultOptions.masterkey.recoveryKeyExplanation=Obnovovací klíč je váš jedin
|
||||
vaultOptions.masterkey.showRecoveryKeyBtn=Zobrazit klíč k obnově
|
||||
vaultOptions.masterkey.recoverPasswordBtn=Resetovat heslo
|
||||
## Hub
|
||||
vaultOptions.hub=Obnovení
|
||||
vaultOptions.hub.convertInfo=V případě nouze můžete použít klíč pro obnovení k převedení tohoho trezoru na trezor s heslem.
|
||||
vaultOptions.hub.convertBtn=Převést na trezor s heslem
|
||||
|
||||
# Recovery Key
|
||||
## Display Recovery Key
|
||||
@ -418,4 +450,15 @@ passwordStrength.messageLabel.4=velmi silné
|
||||
quit.title=Ukončit aplikaci
|
||||
quit.lockAndQuitBtn=Uzamknout a zavřít
|
||||
|
||||
# Forced Quit
|
||||
# Forced Quit
|
||||
quit.forced.message=Některé trezory nelze uzamknout
|
||||
quit.forced.description=Uzamčení trezorů bylo zablokováno probíhajícími operacemi nebo otevřenými soubory. Můžete vynutit uzamčení zbývajících trezorů, ale přerušení I/O může mít za následek ztrátu neuložených dat.
|
||||
quit.forced.forceAndQuitBtn=Vynutit a ukončit
|
||||
|
||||
# Update Reminder
|
||||
updateReminder.title=Kontrola aktualizací
|
||||
updateReminder.message=Zkontrolovat aktualizace?
|
||||
updateReminder.description=Získejte aktuální informace o nových funkcích, opravách chyb a vylepšeních zabezpečení. Doporučujeme automaticky kontrolovat aktualizace.
|
||||
updateReminder.notNow=Nyní ne
|
||||
updateReminder.yesOnce=Ano, jednou
|
||||
updateReminder.yesAutomatically=Ano, automaticky
|
@ -20,6 +20,9 @@ error.description=Cryptomator forventede ikke at dette skete. Du kan gennemse ek
|
||||
error.hyperlink.lookup=Slå denne fejl op
|
||||
error.hyperlink.report=Rapportér denne fejl
|
||||
error.technicalDetails=Detaljer:
|
||||
error.existingSolutionDescription=Cryptomator forventede ikke, at dette ville ske. Men vi har fundet en eksisterende løsning på denne fejl. Tag et kig på følgende link.
|
||||
error.hyperlink.solution=Tjek løsningen
|
||||
|
||||
|
||||
# Defaults
|
||||
defaults.vault.vaultName=Boks
|
||||
@ -59,6 +62,12 @@ addvaultwizard.new.validCharacters.message=Boks-navnet må indeholde de følgend
|
||||
addvaultwizard.new.validCharacters.chars=Bogstaver (fx a, ж eller 수)
|
||||
addvaultwizard.new.validCharacters.numbers=Tal
|
||||
addvaultwizard.new.validCharacters.dashes=Bindestreg (%s) eller understregning (%s)
|
||||
### Expert Settings
|
||||
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=Aktivér ekspertindstillinger
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=Indtast en værdi mellem 36 og 220 (standard 220)
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=Åbn dokumentationen for at få mere at vide.
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.title=Maksimal længde af krypterede filnavne
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.valid=Gyldig
|
||||
### Password
|
||||
addvaultwizard.new.createVaultBtn=Opret boks
|
||||
addvaultwizard.new.generateRecoveryKeyChoice=Du kan ikke tilgå dine data uden din adgangskode. Vil du oprette en gendannelses-nøgle i tilfælde af, at du mister din adgangskode?
|
||||
@ -126,6 +135,7 @@ unlock.success.revealBtn=Vis drev
|
||||
unlock.error.customPath.message=Kan ikke montere boks til brugerdefineret sti
|
||||
unlock.error.customPath.description.notSupported=Hvis du ønsker at fortsætte med at bruge den brugerdefinerede sti, skal du gå til præferencer og vælge en type drev der understøtter det. Hvis ikke, skal du gå til boksens indstillinger og vælge et understøttet monteringspunkt.
|
||||
unlock.error.customPath.description.notExists=Den brugerdefinerede monteringssti eksisterer ikke. Opret den enten i dit lokale filsystem eller skift monteringssti i boksens indstillinger.
|
||||
unlock.error.customPath.description.inUse=Drevbogstavet "%s" er allerede i brug.
|
||||
unlock.error.customPath.description.generic=Du har valgt en brugerdefineret monteringssti til denne boks, men det mislykkedes med beskeden: %s
|
||||
## Hub
|
||||
hub.noKeychain.message=Kan ikke tilgå enhedsnøgle
|
||||
@ -154,7 +164,7 @@ hub.registerFailed.description=Der opstod en fejl i navngivnings-processen. Kig
|
||||
hub.unauthorized.message=Adgang nægtet
|
||||
hub.unauthorized.description=Din enhed er endnu ikke blevet godkendt til at få adgang til denne boks. Spørg boks-ejeren om godkendelse.
|
||||
### License Exceeded
|
||||
hub.invalidLicense.message=Ugyldig Hub licens
|
||||
hub.invalidLicense.message=Ugyldig Hub-licens
|
||||
hub.invalidLicense.description=Din Cryptomator Hub har en ugyldig licens. Få venligst en Hub administrator til at opgradere eller forny licensen.
|
||||
|
||||
# Lock
|
||||
@ -434,6 +444,9 @@ vaultOptions.masterkey.recoveryKeyExplanation=En gendannelsesnøgle er den enest
|
||||
vaultOptions.masterkey.showRecoveryKeyBtn=Vis gendannelsesnøgle
|
||||
vaultOptions.masterkey.recoverPasswordBtn=Nulstil adgangskode
|
||||
## Hub
|
||||
vaultOptions.hub=Gendannelse
|
||||
vaultOptions.hub.convertInfo=Du kan bruge gendannelsesnøglen til at konvertere denne Hub-boks til en adgangskode-baseret boks i en nødsituation.
|
||||
vaultOptions.hub.convertBtn=Konvertér til adgangskodebaseret boks
|
||||
|
||||
# Recovery Key
|
||||
## Display Recovery Key
|
||||
@ -445,6 +458,7 @@ recoveryKey.display.StorageHints=Opbevar den et meget sikkert sted, som fx:\n
|
||||
## Reset Password
|
||||
### Enter Recovery Key
|
||||
recoveryKey.recover.title=Nulstil adgangskode
|
||||
recoveryKey.recover.prompt=Indtast gendannelsesnøgle for "%s":
|
||||
recoveryKey.recover.correctKey=Dette er en gyldig gendannelsesnøgle
|
||||
recoveryKey.recover.wrongKey=Denne gendannelsesnøgle tilhører en anden boks
|
||||
recoveryKey.recover.invalidKey=Denne gendannelsesnøgle er ikke gyldig
|
||||
@ -456,6 +470,11 @@ recoveryKey.recover.resetSuccess.message=Adgangskod nulstillet
|
||||
recoveryKey.recover.resetSuccess.description=Du kan nu låse din boks op med den nye adgangskode.
|
||||
|
||||
# Convert Vault
|
||||
convertVault.title=Konvertér boks
|
||||
convertVault.convert.convertBtn.before=Konvertér
|
||||
convertVault.convert.convertBtn.processing=Konverterer…
|
||||
convertVault.success.message=Konvertering udført
|
||||
convertVault.hubToPassword.success.description=Du kan nu låse boksen op med den valgte adgangskode uden at kræve Hub adgang.
|
||||
|
||||
# New Password
|
||||
newPassword.promptText=Skriv en ny adgangskode
|
||||
@ -478,4 +497,12 @@ quit.lockAndQuitBtn=Lås og afslut
|
||||
# Forced Quit
|
||||
quit.forced.message=Nogle bokse kunne ikke låses
|
||||
quit.forced.description=Låsning af "%s" blev blokeret fordi der er igangværende operationer eller åbne filer. Du kan gennemtvinge låsningen - men en afbrydelse af igangværende I/O operationer kan resultere i tab af data som endnu ikke er gemt.
|
||||
quit.forced.forceAndQuitBtn=Tving og afslut
|
||||
quit.forced.forceAndQuitBtn=Tving og afslut
|
||||
|
||||
# Update Reminder
|
||||
updateReminder.title=Opdateringstjek
|
||||
updateReminder.message=Tjek for opdateringer?
|
||||
updateReminder.description=Hold dig opdateret med nye funktioner, fejlrettelser og sikkerhedsforbedringer. Vi anbefaler automatisk at søge efter opdateringer.
|
||||
updateReminder.notNow=Ikke nu
|
||||
updateReminder.yesOnce=Ja, én gang
|
||||
updateReminder.yesAutomatically=Ja, automatisk
|
@ -20,6 +20,9 @@ error.description=Cryptomator hat diesen Fehler nicht erwartet. Du kannst für i
|
||||
error.hyperlink.lookup=Diesen Fehler nachschlagen
|
||||
error.hyperlink.report=Diesen Fehler melden
|
||||
error.technicalDetails=Details:
|
||||
error.existingSolutionDescription=Cryptomator hat dies nicht erwartet, wir haben jedoch eine funktionierende Lösung für diesen Fehler gefunden. Bitte wirf einen Blick auf den folgenden Link.
|
||||
error.hyperlink.solution=Lösung nachsehen
|
||||
|
||||
|
||||
# Defaults
|
||||
defaults.vault.vaultName=Tresor
|
||||
@ -59,6 +62,12 @@ addvaultwizard.new.validCharacters.message=Der Tresorname darf folgende Zeichen
|
||||
addvaultwizard.new.validCharacters.chars=Wortzeichen (z. B. a, ж oder 수)
|
||||
addvaultwizard.new.validCharacters.numbers=Zahlen
|
||||
addvaultwizard.new.validCharacters.dashes=Bindestrich (%s) oder Unterstrich (%s)
|
||||
### Expert Settings
|
||||
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=Experten-Einstellungen anzeigen
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=Gebe einen Wert zwischen 36 und 220 (Standard 220) ein
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=Öffne die Dokumentation, um mehr zu erfahren.
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.title=Maximale Länge der verschlüsselten Dateinamen
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.valid=Gültig
|
||||
### Password
|
||||
addvaultwizard.new.createVaultBtn=Tresor erstellen
|
||||
addvaultwizard.new.generateRecoveryKeyChoice=Ohne dieses Passwort kannst du auf deine Daten nicht mehr zugreifen. Möchtest du für den Fall eines Passwortverlusts einen Wiederherstellungsschlüssel erstellen?
|
||||
@ -78,7 +87,7 @@ addvault.new.readme.storageLocation.9=3. Öffne den Zugangsort durch Klicken au
|
||||
addvault.new.readme.storageLocation.10=Falls du Hilfe brauchst, lies die Dokumentation: %s
|
||||
addvault.new.readme.accessLocation.fileName=WILLKOMMEN.rtf
|
||||
addvault.new.readme.accessLocation.1=🔐️ VERSCHLÜSSELTES LAUFWERK 🔐️
|
||||
addvault.new.readme.accessLocation.2=Dies ist der Zugangsort deines Tresors.
|
||||
addvault.new.readme.accessLocation.2=Dies ist der Zugriffsort auf deinen Tresor.
|
||||
addvault.new.readme.accessLocation.3=Alle zu diesem Laufwerk hinzugefügten Dateien werden von Cryptomator verschlüsselt. Du kannst mit diesem arbeiten wie mit jedem anderen Laufwerk bzw. Ordner. Dies ist lediglich eine unverschlüsselte Ansicht des Laufwerkinhalts; auf deiner Festplatte bleiben deine Dateien weiterhin verschlüsselt.
|
||||
addvault.new.readme.accessLocation.4=Du kannst diese Datei löschen.
|
||||
## Existing
|
||||
@ -125,8 +134,9 @@ unlock.success.revealBtn=Laufwerk anzeigen
|
||||
## Failure
|
||||
unlock.error.customPath.message=Tresor kann nicht an benutzerdefinierten Pfad eingehängt werden
|
||||
unlock.error.customPath.description.notSupported=Wenn du weiterhin den benutzerdefinierten Pfad verwenden möchtest, öffne die allgemeinen Einstellungen und wähle einen unterstützten Laufwerkstyp. Andernfalls gehe zu den Tresor-Optionen und wähle einen unterstützten Einhängepunkt.
|
||||
unlock.error.customPath.description.notExists=Der benutzerdefinierte Einhängepunkt existiert nicht. Entweder erstelle ihn in deinem lokalen Dateisystem oder ändere ihn in den Tresor-Optionen.
|
||||
unlock.error.customPath.description.generic=Du hast für diesen Tresor einen benutzerdefinierten Einhängepunkt ausgewählt, aber die Verwendung ist fehlgeschlagen mit der Meldung: %s
|
||||
unlock.error.customPath.description.notExists=Der benutzerdefinierte Einhängepunkt existiert nicht. Erstelle ihn in deinem lokalen Dateisystem oder ändere ihn in den Tresor-Optionen.
|
||||
unlock.error.customPath.description.inUse=Laufwerksbuchstabe „%s“ wird bereits verwendet.
|
||||
unlock.error.customPath.description.generic=Du hast für diesen Tresor einen benutzerdefinierten Einhängepunkt ausgewählt, aber dessen Verwendung ist fehlgeschlagen mit der Meldung: %s
|
||||
## Hub
|
||||
hub.noKeychain.message=Zugriff auf Geräteschlüssel nicht möglich
|
||||
hub.noKeychain.description=Zum Entsperren von Hub-Tresoren wird ein Geräteschlüssel benötigt, der in einem Schlüsselbund gesichert ist. Um fortzufahren, aktiviere „%s“ und wähle in den Einstellungen einen Schlüsselbund.
|
||||
@ -155,7 +165,7 @@ hub.unauthorized.message=Zugriff verweigert
|
||||
hub.unauthorized.description=Dein Gerät wurde noch nicht für den Zugriff auf diesen Tresor autorisiert. Bitte den Tresorbesitzer, dein Gerät zu autorisieren.
|
||||
### License Exceeded
|
||||
hub.invalidLicense.message=Hub-Lizenz ungültig
|
||||
hub.invalidLicense.description=Die Lizenz für deine Cryptomator Hub-Instanz ist ungültig. Bitte informiere einen Hub-Administrator, um die Lizenz zu aktualisieren oder zu erneuern.
|
||||
hub.invalidLicense.description=Die Lizenz deiner Cryptomator-Hub-Instanz ist ungültig. Bitte informiere deinen Hub-Administrator, um die Lizenz zu erweitern oder zu erneuern.
|
||||
|
||||
# Lock
|
||||
## Force
|
||||
@ -173,7 +183,7 @@ migration.title=Tresor upgraden
|
||||
migration.start.header=Tresor upgraden
|
||||
migration.start.text=Um deinen Tresor "%s" in dieser neuen Version von Cryptomator zu öffnen, muss der Tresor auf ein neueres Format aktualisiert werden. Bevor du dies tust, solltest du Folgendes wissen:
|
||||
migration.start.remarkUndone=Diese Aktualisierung kann nicht rückgängig gemacht werden.
|
||||
migration.start.remarkVersions=Ältere Versionen von Cryptomator werden den aktualisierten Tresor nicht öffnen können.
|
||||
migration.start.remarkVersions=Ältere Versionen von Cryptomator können den aktualisierten Tresor nicht öffnen.
|
||||
migration.start.remarkCanRun=Du musst sicherstellen, dass jedes Gerät, von dem aus du auf den Tresor zugreifst, diese Version von Cryptomator ausführen kann.
|
||||
migration.start.remarkSynced=Du musst sicherstellen, dass dein Tresor auf diesem Gerät und auf deinen anderen Geräten vollständig synchronisiert ist, bevor du ihn aktualisierst.
|
||||
migration.start.confirm=Ich habe die oben genannten Informationen gelesen und verstanden
|
||||
@ -423,9 +433,9 @@ vaultOptions.mount.winDriveLetterOccupied=belegt
|
||||
vaultOptions.mount.mountPoint=Einhängepunkt
|
||||
vaultOptions.mount.mountPoint.auto=Automatisch einen geeigneten Ort auswählen
|
||||
vaultOptions.mount.mountPoint.driveLetter=Laufwerksbuchstaben zuweisen
|
||||
vaultOptions.mount.mountPoint.custom=Ausgewähltes Verzeichnis verwenden
|
||||
vaultOptions.mount.mountPoint.custom=Gewähltes Verzeichnis verwenden
|
||||
vaultOptions.mount.mountPoint.directoryPickerButton=Durchsuchen …
|
||||
vaultOptions.mount.mountPoint.directoryPickerTitle=Verzeichnis wählen
|
||||
vaultOptions.mount.mountPoint.directoryPickerTitle=Wähle ein Verzeichnis
|
||||
## Master Key
|
||||
vaultOptions.masterkey=Passwort
|
||||
vaultOptions.masterkey.changePasswordBtn=Passwort ändern
|
||||
@ -436,7 +446,7 @@ vaultOptions.masterkey.recoverPasswordBtn=Passwort zurücksetzen
|
||||
## Hub
|
||||
vaultOptions.hub=Wiederherstellung
|
||||
vaultOptions.hub.convertInfo=Im Notfall kannst du den Wiederherstellungsschlüssel verwenden, um diesen Hub-Tresor in einen passwortgeschützten Tresor umzuwandeln.
|
||||
vaultOptions.hub.convertBtn=In einen passwortgeschützten Tresor umwandeln
|
||||
vaultOptions.hub.convertBtn=In passwortgeschützten Tresor umwandeln
|
||||
|
||||
# Recovery Key
|
||||
## Display Recovery Key
|
||||
@ -448,7 +458,7 @@ recoveryKey.display.StorageHints=Bewahre ihn möglichst sicher auf, z. B.\n •
|
||||
## Reset Password
|
||||
### Enter Recovery Key
|
||||
recoveryKey.recover.title=Passwort zurücksetzen
|
||||
recoveryKey.recover.prompt=Gib den Wiederherstellungsschlüssel für "%s" ein:
|
||||
recoveryKey.recover.prompt=Gib den Wiederherstellungsschlüssel für „%s“ ein:
|
||||
recoveryKey.recover.correctKey=Dieser Wiederherstellungsschlüssel ist gültig
|
||||
recoveryKey.recover.wrongKey=Dieser Wiederherstellungsschlüssel gehört zu einem anderen Tresor
|
||||
recoveryKey.recover.invalidKey=Dieser Wiederherstellungsschlüssel ist ungültig
|
||||
@ -460,11 +470,11 @@ recoveryKey.recover.resetSuccess.message=Passwort erfolgreich zurückgesetzt
|
||||
recoveryKey.recover.resetSuccess.description=Du kannst deinen Tresor mit dem neuen Passwort entsperren.
|
||||
|
||||
# Convert Vault
|
||||
convertVault.title=Tresor konvertieren
|
||||
convertVault.title=Tresor umwandeln
|
||||
convertVault.convert.convertBtn.before=Konvertieren
|
||||
convertVault.convert.convertBtn.processing=Konvertierung läuft…
|
||||
convertVault.success.message=Konvertierung erfolgreich
|
||||
convertVault.hubToPassword.success.description=Du kannst nun den Tresor mit dem gewählten Passwort entsperren, ohne Hub Zugriff zu benötigen.
|
||||
convertVault.convert.convertBtn.processing=Wird umgewandelt…
|
||||
convertVault.success.message=Umwandlung erfolgreich
|
||||
convertVault.hubToPassword.success.description=Du kannst nun den Tresor mit dem gewählten Passwort entsperren, ohne Hub-Zugriff zu benötigen.
|
||||
|
||||
# New Password
|
||||
newPassword.promptText=Gib ein neues Passwort ein
|
||||
@ -487,4 +497,12 @@ quit.lockAndQuitBtn=Sperren und beenden
|
||||
# Forced Quit
|
||||
quit.forced.message=Einige Tresore konnten nicht gesperrt werden
|
||||
quit.forced.description=Das Sperren von Tresoren wurde durch ausstehende Operationen oder geöffnete Dateien verhindert. Du kannst das Sperren der verbleibenden Tresore erzwingen, jedoch kann das Unterbrechen von E/A-Vorgängen zum Verlust ungespeicherter Daten führen.
|
||||
quit.forced.forceAndQuitBtn=Erzwingen und beenden
|
||||
quit.forced.forceAndQuitBtn=Erzwingen und beenden
|
||||
|
||||
# Update Reminder
|
||||
updateReminder.title=Aktualisierung überprüfen
|
||||
updateReminder.message=Nach Updates suchen?
|
||||
updateReminder.description=Bleibe auf dem Laufenden was neue Features, Bug fixes und Sicherheitsverbesserungen angeht. Wir empfehlen automatisch nach Updates suchen zu lassen.
|
||||
updateReminder.notNow=Nicht jetzt
|
||||
updateReminder.yesOnce=Ja, einmalig
|
||||
updateReminder.yesAutomatically=Ja, automatisch
|
@ -20,6 +20,9 @@ error.description=Ωχ! Το Cryptomator δεν περίμενε να συμβε
|
||||
error.hyperlink.lookup=Αναζήτηση αυτού του σφάλματος
|
||||
error.hyperlink.report=Αναφέρετε αυτό το σφάλμα
|
||||
error.technicalDetails=Λεπτομέρειες:
|
||||
error.existingSolutionDescription=Το Cryptomator δεν περίμενε ότι θα συμβεί αυτό. Αλλά βρήκαμε μια υπάρχουσα λύση για αυτό το σφάλμα. Ρίξτε μια ματιά στον παρακάτω σύνδεσμο.
|
||||
error.hyperlink.solution=Αναζήτηση της λύσης
|
||||
|
||||
|
||||
# Defaults
|
||||
defaults.vault.vaultName=Κρύπτη
|
||||
@ -59,6 +62,12 @@ addvaultwizard.new.validCharacters.message=Το όνομα κρύπτης μπο
|
||||
addvaultwizard.new.validCharacters.chars=Χαρακτήρες λέξεων (πχ, a, ж or 수)
|
||||
addvaultwizard.new.validCharacters.numbers=Αριθμοί
|
||||
addvaultwizard.new.validCharacters.dashes=Παύλα (%s) ή κάτω παύλα (%s)
|
||||
### Expert Settings
|
||||
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=Ενεργοποιήστε τις ρυθμίσεις ειδικών
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=Εισάγετε μια τιμή μεταξύ 36 και 220 (προεπιλογή 220)
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=Ανοίξτε την τεκμηρίωση για να μάθετε περισσότερα.
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.title=Μέγιστο μήκος ονομάτων κρυπτογραφημένων αρχείων
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.valid=Έγκυρο
|
||||
### Password
|
||||
addvaultwizard.new.createVaultBtn=Δημιουργία Κρύπτης
|
||||
addvaultwizard.new.generateRecoveryKeyChoice=Δεν θα μπορείτε να έχετε πρόσβαση στα δεδομένα σας χωρίς τον κωδικό σας. Θέλετε να δημιουργηθεί ένα κλειδί ανάκτησης στην περίπτωση που χάσετε τον κωδικό σας;
|
||||
@ -126,6 +135,7 @@ unlock.success.revealBtn=Αποκάλυψη εικονικού δίσκου
|
||||
unlock.error.customPath.message=Αδυναμία προσάρτησης της κρύπτης στην προσαρμοσμένη διαδρομή
|
||||
unlock.error.customPath.description.notSupported=Εάν θέλετε να συνεχίσετε να χρησιμοποιείτε την προσαρμοσμένη διαδρομή, μεταβείτε στις προτιμήσεις και επιλέξτε έναν τύπο τόμου που την υποστηρίζει. Διαφορετικά, μεταβείτε στις επιλογές της κρύπτης και επιλέξτε ένα υποστηριζόμενο σημείο προσάρτησης.
|
||||
unlock.error.customPath.description.notExists=Η προσαρμοσμένη διαδρομή προσάρτησης δεν υπάρχει. Είτε δημιουργήστε την στο τοπικό σύστημα αρχείων σας είτε αλλάξτε την στις επιλογές κρύπτης.
|
||||
unlock.error.customPath.description.inUse=Το γράμμα μονάδας δίσκου "%s" χρησιμοποιείται ήδη.
|
||||
unlock.error.customPath.description.generic=Έχετε επιλέξει μια προσαρμοσμένη διαδρομή προσάρτησης για αυτή την κρύπτη, αλλά η χρήση της απέτυχε με το μήνυμα: %s
|
||||
## Hub
|
||||
hub.noKeychain.message=Δεν είναι δυνατή η πρόσβαση στο κλειδί της συσκευής
|
||||
@ -487,4 +497,12 @@ quit.lockAndQuitBtn=Κλείδωμα και Έξοδος
|
||||
# Forced Quit
|
||||
quit.forced.message=Δεν ήταν δυνατό να κλειδωθούν ορισμένες κρύπτες
|
||||
quit.forced.description=Το κλείδωμα κρυπτών αποκλείστηκε από εκκρεμείς ενέργειες ή από ανοιχτά αρχεία. Μπορείτε να αναγκάσετε το κλείδωμα εναπομείναντων θησαυροφυλάκων, ωστόσο η διακοπή I/O μπορεί να οδηγήσει στην απώλεια μη αποθηκευμένων δεδομένων.
|
||||
quit.forced.forceAndQuitBtn=Εξαναγκασμός και Έξοδος
|
||||
quit.forced.forceAndQuitBtn=Εξαναγκασμός και Έξοδος
|
||||
|
||||
# Update Reminder
|
||||
updateReminder.title=Έλεγχος Ενημερώσεων
|
||||
updateReminder.message=Έλεγχος για ενημερώσεις;
|
||||
updateReminder.description=Μείνετε ενημερωμένοι με νέες δυνατότητες, διορθώσεις σφαλμάτων και βελτιώσεις ασφάλειας. Συνιστούμε τον αυτόματο έλεγχο για ενημερώσεις.
|
||||
updateReminder.notNow=Όχι Τώρα
|
||||
updateReminder.yesOnce=Ναι, Μία Φορά
|
||||
updateReminder.yesAutomatically=Ναι, Αυτόματα
|
@ -20,6 +20,9 @@ error.description=Cryptomator no esperaba que esto sucediera. Puede buscar soluc
|
||||
error.hyperlink.lookup=Buscar este error
|
||||
error.hyperlink.report=Notificar este error
|
||||
error.technicalDetails=Detalles:
|
||||
error.existingSolutionDescription=Cryptomator no esperaba que esto ocurriera, pero hemos encontrado una solución existente para este error. Eche un vistazo al siguiente enlace.
|
||||
error.hyperlink.solution=Buscar la solución
|
||||
|
||||
|
||||
# Defaults
|
||||
defaults.vault.vaultName=Bóveda
|
||||
@ -59,6 +62,7 @@ addvaultwizard.new.validCharacters.message=El nombre de la bóveda puede contene
|
||||
addvaultwizard.new.validCharacters.chars=Caracteres de la palabra (por ejemplo, a, ж o 수)
|
||||
addvaultwizard.new.validCharacters.numbers=Números
|
||||
addvaultwizard.new.validCharacters.dashes=Guion (%s) o subrayado (%s)
|
||||
### Expert Settings
|
||||
### Password
|
||||
addvaultwizard.new.createVaultBtn=Crear bóveda
|
||||
addvaultwizard.new.generateRecoveryKeyChoice=No podrá acceder a sus datos sin su contraseña. ¿Desea una clave de recuperación en caso de que pierda su contraseña?
|
||||
@ -126,6 +130,7 @@ unlock.success.revealBtn=Revelar unidad
|
||||
unlock.error.customPath.message=No se puede montar la bóveda en la ruta personalizada
|
||||
unlock.error.customPath.description.notSupported=Si desea seguir usando la ruta personalizada, vaya a las preferencias y seleccione un tipo de volumen que lo admita. De lo contrario, vaya a las opciones de la bóveda y elija un punto de montaje compatible.
|
||||
unlock.error.customPath.description.notExists=La ruta de montaje personalizada no existe. Créela en su sistema de archivos local o cámbiela en las opciones de la bóveda.
|
||||
unlock.error.customPath.description.inUse=La letra de la unidad "%s" ya está en uso.
|
||||
unlock.error.customPath.description.generic=Seleccionó una ruta de montaje personalizada para esta bóveda, pero falló al usarla con el mensaje: %s
|
||||
## Hub
|
||||
hub.noKeychain.message=No se puede acceder a la clave del dispositivo
|
||||
@ -164,7 +169,7 @@ lock.forced.description=El bloqueo de "%s" fue bloqueado por operaciones pendien
|
||||
lock.forced.retryBtn=Reintentar
|
||||
lock.forced.forceBtn=Forzar bloqueo
|
||||
## Failure
|
||||
lock.fail.message=Error al bloquear la bóveda.
|
||||
lock.fail.message=Error al bloquear la bóveda
|
||||
lock.fail.description=No se pudo bloquear la bóveda "%s". Asegúrese de que el trabajo no guardado se ha guardado en otro lugar y las operaciones de lectura/escritura importantes han finalizado. Para cerrar la bóveda termine el proceso de Cryptomator.
|
||||
|
||||
# Migration
|
||||
@ -487,4 +492,6 @@ quit.lockAndQuitBtn=Bloquear y salir
|
||||
# Forced Quit
|
||||
quit.forced.message=Algunas bóvedas no pudieron ser bloqueadas
|
||||
quit.forced.description=El bloqueo de las bóvedas fue impedido por operaciones pendientes o archivos abiertos. Puede forzar a bloquear las bóvedas restantes, sin embargo, la interrupción de E/S puede resultar en la pérdida de datos sin guardar.
|
||||
quit.forced.forceAndQuitBtn=Forzar y salir
|
||||
quit.forced.forceAndQuitBtn=Forzar y salir
|
||||
|
||||
# Update Reminder
|
@ -18,6 +18,7 @@ generic.button.print=چاپ
|
||||
error.message=خطایی رخ داده است
|
||||
error.technicalDetails=جزئیات:
|
||||
|
||||
|
||||
# Defaults
|
||||
defaults.vault.vaultName=گاوصندوق
|
||||
|
||||
@ -43,6 +44,7 @@ addvaultwizard.new.directoryPickerLabel=مکان سفارشی
|
||||
addvaultwizard.new.directoryPickerButton=انتخاب کنید…
|
||||
addvaultwizard.new.fileAlreadyExists=در حال حاضر یک فایل یا پوشه با همین نام وجود دارد
|
||||
addvaultwizard.new.validCharacters.numbers=اعداد
|
||||
### Expert Settings
|
||||
### Password
|
||||
### Information
|
||||
## Existing
|
||||
@ -145,4 +147,6 @@ vaultOptions.mount.mountPoint.directoryPickerButton=انتخاب کنید…
|
||||
|
||||
# Quit
|
||||
|
||||
# Forced Quit
|
||||
# Forced Quit
|
||||
|
||||
# Update Reminder
|
@ -20,6 +20,9 @@ error.description=Cryptomator ei odottanut tämän tapahtuvan. Voit etsiä olema
|
||||
error.hyperlink.lookup=Etsi tämä virhe
|
||||
error.hyperlink.report=Ilmoita ongelmasta
|
||||
error.technicalDetails=Tiedot:
|
||||
error.existingSolutionDescription=Cryptomator ei odottanut tämän tapahtuvan. Mutta löysimme olemassa olevan ratkaisun tähän virheeseen. Ole hyvä ja katso seuraavaa linkkiä.
|
||||
error.hyperlink.solution=Etsi ratkaisu
|
||||
|
||||
|
||||
# Defaults
|
||||
defaults.vault.vaultName=Vault
|
||||
@ -59,6 +62,7 @@ addvaultwizard.new.validCharacters.message=Vaultin nimi voi sisältää seuraava
|
||||
addvaultwizard.new.validCharacters.chars=Sanamerkit (e.g. a, ж or 수)
|
||||
addvaultwizard.new.validCharacters.numbers=Numerot
|
||||
addvaultwizard.new.validCharacters.dashes=Hyphen (%s) tai alaviiva (%s)
|
||||
### Expert Settings
|
||||
### Password
|
||||
addvaultwizard.new.createVaultBtn=Luo Uusi Vault
|
||||
addvaultwizard.new.generateRecoveryKeyChoice=Et voi käyttää tietojasi ilman salasanaasi. Haluatko palautusavaimen siltä varalta, että menetät salasanasi?
|
||||
@ -126,6 +130,7 @@ unlock.success.revealBtn=Paljasta Asema
|
||||
unlock.error.customPath.message=Holvia ei pystytty yhdistämään valittuun polkuun
|
||||
unlock.error.customPath.description.notSupported=Mikäli haluat jatkaa mukautetun polun käyttöä, ole hyvä ja mene Asetuksiin ja valitse volyymityyppi mikä tukee sitä. Muussa tapauksessa avaa holvin asetukset ja valitse tuettu mukautettu polku.
|
||||
unlock.error.customPath.description.notExists=Valitsemaasi mukautettua polkua ei ole olemassa. Voit joko luoda uuden polun tai muuttaa polkua holvisi asetuksissa.
|
||||
unlock.error.customPath.description.inUse=Asemakirjain "%s" on jo käytössä.
|
||||
unlock.error.customPath.description.generic=Olet valinnut mukautetun polun holvillesi, mutta sen kanssa ilmeni ongelma: %s
|
||||
## Hub
|
||||
hub.noKeychain.message=Laitteen avainta ei löytynyt
|
||||
@ -178,13 +183,28 @@ migration.start.remarkCanRun=Sinun tulee varmistaa, että kaikki laitteet joilla
|
||||
migration.start.remarkSynced=Sinun tulee varmistaa, että holvisi on täysin ajantasalla tällä laitteella ja muilla laitteillasi, ennen kuin aloitat päivitysprosessin.
|
||||
migration.start.confirm=Olen lukenut ja ymmärtänyt yllä ilmoitetut ohjeet
|
||||
## Run
|
||||
migration.run.enterPassword=Kirjoita "%s" salasana
|
||||
migration.run.startMigrationBtn=Siirrä Holvi
|
||||
migration.run.progressHint=Tämä saattaa kestää jonkin aikaa…
|
||||
## Success
|
||||
migration.success.nextStepsInstructions="%s" siirretty onnistuneesti.\nVoit nyt avata holvin lukituksen.
|
||||
migration.success.unlockNow=Avaa Nyt
|
||||
## Missing file system capabilities
|
||||
migration.error.missingFileSystemCapabilities.title=Tiedostojärjestelmää ei tueta
|
||||
migration.error.missingFileSystemCapabilities.description=Siirtoa ei aloitettu, koska varastosi sijaitsee riittämättömässä tiedostojärjestelmässä.
|
||||
migration.error.missingFileSystemCapabilities.reason.LONG_FILENAMES=Tiedostojärjestelmä ei tue pitkiä tiedostonimiä.
|
||||
migration.error.missingFileSystemCapabilities.reason.LONG_PATHS=Tiedostojärjestelmä ei tue pitkiä polkuja.
|
||||
migration.error.missingFileSystemCapabilities.reason.READ_ACCESS=Tiedostojärjestelmä ei salli lukemista.
|
||||
migration.error.missingFileSystemCapabilities.reason.WRITE_ACCESS=Tiedostojärjestelmä ei salli kirjoittamista.
|
||||
## Impossible
|
||||
migration.impossible.heading=Holvin siirtäminen ei onnistu
|
||||
migration.impossible.reason=Varastoa ei voida siirtää automaattisesti, koska sen tallennuspaikka tai tukiasema ei ole yhteensopiva.
|
||||
migration.impossible.moreInfo=Varasto voidaan edelleen avata vanhemmalla versiolla. Katso ohjeet varaston manuaaliseen siirtämiseen osoitteesta
|
||||
|
||||
# Health Check
|
||||
## Start
|
||||
health.title="%s" kuntotarkastus
|
||||
health.intro.header=Kuntotarkastus
|
||||
## Start Failure
|
||||
## Check Selection
|
||||
## Detail view
|
||||
@ -255,4 +275,6 @@ vaultOptions.masterkey.changePasswordBtn=Vaihda salasana
|
||||
|
||||
# Quit
|
||||
|
||||
# Forced Quit
|
||||
# Forced Quit
|
||||
|
||||
# Update Reminder
|
@ -21,6 +21,7 @@ error.hyperlink.lookup=Hanapin ang solusyon
|
||||
error.hyperlink.report=I-report ang problema
|
||||
error.technicalDetails=Mga detalye:
|
||||
|
||||
|
||||
# Defaults
|
||||
defaults.vault.vaultName=Vault
|
||||
|
||||
@ -49,6 +50,8 @@ addvaultwizard.new.locationPrompt=…
|
||||
addvaultwizard.new.directoryPickerLabel=Custom Location
|
||||
addvaultwizard.new.directoryPickerButton=Mamili…
|
||||
addvaultwizard.new.directoryPickerTitle=Pumili ng Direktoryo
|
||||
### Expert Settings
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=Ibukas ang dokumentasyon para matuto pa.
|
||||
### Password
|
||||
addvaultwizard.new.createVaultBtn=Gumawa ng bagong Vault
|
||||
### Information
|
||||
@ -69,6 +72,7 @@ removeVault.confirmBtn=Itangal ang vault
|
||||
# Change Password
|
||||
|
||||
# Forget Password
|
||||
forgetPassword.message=Nakalimutan ang iyong password?
|
||||
|
||||
# Unlock
|
||||
unlock.savePassword=Maalala ang password
|
||||
@ -169,4 +173,7 @@ vaultOptions.mount.mountPoint.directoryPickerButton=Mamili…
|
||||
|
||||
# Quit
|
||||
|
||||
# Forced Quit
|
||||
# Forced Quit
|
||||
|
||||
# Update Reminder
|
||||
updateReminder.message=I-tsek kung may bagong update?
|
@ -20,6 +20,9 @@ error.description=Oups ! Cryptomator ne s'attendait pas à ce que cela se produi
|
||||
error.hyperlink.lookup=Rechercher cette erreur
|
||||
error.hyperlink.report=Signaler cette erreur
|
||||
error.technicalDetails=Détails :
|
||||
error.existingSolutionDescription=Cryptomator ne s'attendait pas à ce que cela se produise. Mais nous avons trouvé une solution existante pour cette erreur. Veuillez consulter le lien suivant.
|
||||
error.hyperlink.solution=Rechercher la solution
|
||||
|
||||
|
||||
# Defaults
|
||||
defaults.vault.vaultName=Coffre
|
||||
@ -59,6 +62,12 @@ addvaultwizard.new.validCharacters.message=Le nom du coffre ne peut contenir que
|
||||
addvaultwizard.new.validCharacters.chars=Caractères de mot (par exemple a, ж ou 수)
|
||||
addvaultwizard.new.validCharacters.numbers=Nombres
|
||||
addvaultwizard.new.validCharacters.dashes=Tiret (%s) ou tiret du bas (%s)
|
||||
### Expert Settings
|
||||
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=Activer les paramètres experts
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=Entrez une valeur entre 36 et 220 (par défaut 220)
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=Ouvrez la documentation pour en savoir plus.
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.title=Longueur maximale des noms de fichiers chiffrés
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.valid=Valide
|
||||
### Password
|
||||
addvaultwizard.new.createVaultBtn=Créer un coffre
|
||||
addvaultwizard.new.generateRecoveryKeyChoice=Il sera impossible d’accéder à vos données sans mot de passe. Souhaitez-vous créer une clé de secours en cas d'oubli du mot passe ?
|
||||
@ -69,7 +78,7 @@ addvault.new.readme.storageLocation.fileName=IMPORTANT.rtf
|
||||
addvault.new.readme.storageLocation.1=Fichiers de coffre-fort
|
||||
addvault.new.readme.storageLocation.2=Ceci est l'emplacement de stockage de votre coffre.
|
||||
addvault.new.readme.storageLocation.3=NE PAS
|
||||
addvault.new.readme.storageLocation.4=• modifier les fichiers dans ce répertoire ni
|
||||
addvault.new.readme.storageLocation.4=• Modifier n'importe quel fichier dans ce répertoire ou
|
||||
addvault.new.readme.storageLocation.5=• coller de fichier à chiffrer dans ce répertoire.
|
||||
addvault.new.readme.storageLocation.6=Si vous voulez chiffrer les fichiers et afficher le contenu du coffre, faites ce qui suit :
|
||||
addvault.new.readme.storageLocation.7=1. Ajouter ce coffre à Cryptomator.
|
||||
@ -126,6 +135,7 @@ unlock.success.revealBtn=Révéler le lecteur
|
||||
unlock.error.customPath.message=Impossible de monter le coffre vers le chemin personnalisé
|
||||
unlock.error.customPath.description.notSupported=Si vous souhaitez continuer à utiliser le chemin personnalisé, veuillez aller dans les préférences et sélectionner un type de volume qui le prend en charge. Sinon, allez dans les options du coffre et choisissez un point de montage pris en charge.
|
||||
unlock.error.customPath.description.notExists=Le chemin de montage personnalisé n'existe pas. Créez-le dans votre système de fichiers local ou modifiez-le dans les options du coffre.
|
||||
unlock.error.customPath.description.inUse=La lettre de lecteur "%s" est déjà utilisée.
|
||||
unlock.error.customPath.description.generic=Vous avez sélectionné un chemin de montage personnalisé pour ce coffre, mais son utilisation a échoué avec le message : %s
|
||||
## Hub
|
||||
hub.noKeychain.message=Impossible d'accéder à la clé du périphérique
|
||||
@ -435,7 +445,7 @@ vaultOptions.masterkey.showRecoveryKeyBtn=Afficher la clé de récupération
|
||||
vaultOptions.masterkey.recoverPasswordBtn=Réinitialiser le mot de passe
|
||||
## Hub
|
||||
vaultOptions.hub=Récupération
|
||||
vaultOptions.hub.convertInfo=Vous pouvez utiliser la clé de récupération pour convertir ce coffre Hub en coffre basé sur un mot de passe en cas d'urgence.
|
||||
vaultOptions.hub.convertInfo=Vous pouvez utiliser la clé de récupération pour convertir ce coffre Hub en coffre à mot de passe en cas d'urgence.
|
||||
vaultOptions.hub.convertBtn=Convertir en coffre-fort basé sur mot de passe
|
||||
|
||||
# Recovery Key
|
||||
@ -448,7 +458,7 @@ recoveryKey.display.StorageHints=Gardez-la dans un endroit sûr, par ex. :\n •
|
||||
## Reset Password
|
||||
### Enter Recovery Key
|
||||
recoveryKey.recover.title=Réinitialiser le mot de passe
|
||||
recoveryKey.recover.prompt=Entrez la clé de récupération pour "%s " :
|
||||
recoveryKey.recover.prompt=Entrez la clé de récupération pour "%s" :
|
||||
recoveryKey.recover.correctKey=Cette clé de récupération est correcte
|
||||
recoveryKey.recover.wrongKey=Cette clé de récupération appartient à un autre coffre
|
||||
recoveryKey.recover.invalidKey=Cette clé de récupération n'est pas valide
|
||||
@ -487,4 +497,12 @@ quit.lockAndQuitBtn=Verrouiller et quitter
|
||||
# Forced Quit
|
||||
quit.forced.message=Certains coffres n'ont pas pu être verrouillés
|
||||
quit.forced.description=Le verrouillage des coffres a été bloqué par des opérations en attente ou des fichiers ouverts. Vous pouvez forcer le verrouillage des coffres restants, mais l'interruption d'E/S peut entraîner la perte de données non enregistrées.
|
||||
quit.forced.forceAndQuitBtn=Forcer la fermeture
|
||||
quit.forced.forceAndQuitBtn=Forcer la fermeture
|
||||
|
||||
# Update Reminder
|
||||
updateReminder.title=Recherche de mise à jour
|
||||
updateReminder.message=Rechercher des mises à jour ?
|
||||
updateReminder.description=Restez à jour avec de nouvelles fonctionnalités, des corrections de bugs et des améliorations de sécurité. La vérification automatique des mises à jour est recommandée.
|
||||
updateReminder.notNow=Plus tard
|
||||
updateReminder.yesOnce=Cette fois seulement
|
||||
updateReminder.yesAutomatically=Oui, automatiquement
|
@ -17,6 +17,7 @@ generic.button.print=Imprimir
|
||||
# Error
|
||||
error.message=Produciuse un erro
|
||||
|
||||
|
||||
# Defaults
|
||||
|
||||
# Tray Menu
|
||||
@ -26,6 +27,7 @@ error.message=Produciuse un erro
|
||||
## New
|
||||
### Name
|
||||
### Location
|
||||
### Expert Settings
|
||||
### Password
|
||||
### Information
|
||||
## Existing
|
||||
@ -120,4 +122,6 @@ main.closeBtn.tooltip=Pechar
|
||||
|
||||
# Quit
|
||||
|
||||
# Forced Quit
|
||||
# Forced Quit
|
||||
|
||||
# Update Reminder
|
@ -21,6 +21,7 @@ error.hyperlink.lookup=חיפוש שגיאה
|
||||
error.hyperlink.report=דיווח על שגיאה
|
||||
error.technicalDetails=פרטים:
|
||||
|
||||
|
||||
# Defaults
|
||||
defaults.vault.vaultName=כספת
|
||||
|
||||
@ -59,6 +60,7 @@ addvaultwizard.new.validCharacters.message=שם כספת יכול לכלול א
|
||||
addvaultwizard.new.validCharacters.chars=תווי מילים (למשל: a, ж or 수)
|
||||
addvaultwizard.new.validCharacters.numbers=מספרים
|
||||
addvaultwizard.new.validCharacters.dashes=מקף (%s) או קו תחתון (%s)
|
||||
### Expert Settings
|
||||
### Password
|
||||
addvaultwizard.new.createVaultBtn=צור כספת חדשה
|
||||
addvaultwizard.new.generateRecoveryKeyChoice=לא תיהיה אפשרות לקבל גישה למידע שלך בלי הסיסמה שלך. האם תרצה/י מפתח שחזור למקרה ותאבד/י את הסיסמה שלך?
|
||||
@ -479,4 +481,6 @@ quit.lockAndQuitBtn=נעילה ויציאה
|
||||
# Forced Quit
|
||||
quit.forced.message=חלק מה vaults לא היו ניתנים לנעילה
|
||||
quit.forced.description=נעילה כספות נחסמה על ידי תהליכים ממתינים או קבצים פתוחים. אתה יכול לנעול את הכספת בכוח, אולם הפרעה לפעולת קריאה וכתיבה עשויה לגרום לאובדן מידע לא שמור.
|
||||
quit.forced.forceAndQuitBtn=נעילה בכח ויציאה
|
||||
quit.forced.forceAndQuitBtn=נעילה בכח ויציאה
|
||||
|
||||
# Update Reminder
|
@ -21,6 +21,7 @@ error.hyperlink.lookup=इस त्रुटि को ढूंढिए
|
||||
error.hyperlink.report=त्रुटि रिपोर्ट करें
|
||||
error.technicalDetails=अधिक जानकारी:
|
||||
|
||||
|
||||
# Defaults
|
||||
defaults.vault.vaultName=वॉल्ट
|
||||
|
||||
@ -57,6 +58,7 @@ addvaultwizard.new.invalidName=तिजोरी के लिए इस ना
|
||||
addvaultwizard.new.validName=आप इस नाम का उपयोग कर सकते हैं
|
||||
addvaultwizard.new.validCharacters.message=नाम के लिए केवल इन वर्णों का उपयोग कर सकते हैं
|
||||
addvaultwizard.new.validCharacters.numbers=नंबर
|
||||
### Expert Settings
|
||||
### Password
|
||||
addvaultwizard.new.createVaultBtn=वॉल्ट बनाएं
|
||||
addvaultwizard.new.generateRecoveryKeyChoice=आप अपने पासवर्ड के बिना अपने डेटा तक नहीं पहुंच पाएंगे। क्या आप उस वक़्त के लिए एक पुनर्प्राप्ति कुंजी चाहते हैं जब आप अपना पासवर्ड खो देते हैं?
|
||||
@ -277,4 +279,6 @@ passwordStrength.messageLabel.4=बहुत मजबूत
|
||||
quit.title=एप्लीकेशन को बंद करें
|
||||
|
||||
# Forced Quit
|
||||
quit.forced.message=कुछ वॉल्ट्स लॉक नहीं हो पायी
|
||||
quit.forced.message=कुछ वॉल्ट्स लॉक नहीं हो पायी
|
||||
|
||||
# Update Reminder
|
@ -21,6 +21,7 @@ error.hyperlink.lookup=Pogledaj ovu grešku
|
||||
error.hyperlink.report=Prijavi ovu grešku
|
||||
error.technicalDetails=Detalji:
|
||||
|
||||
|
||||
# Defaults
|
||||
defaults.vault.vaultName=Trezor
|
||||
|
||||
@ -53,6 +54,7 @@ addvaultwizard.new.fileAlreadyExists=Datoteka ili mapa s nazivom trezora već po
|
||||
addvaultwizard.new.locationDoesNotExist=Mapa u navedenoj putanji ne postoji ili joj se ne može pristupiti
|
||||
addvaultwizard.new.locationIsNotWritable=Nemate pravo pisanja u navedenu mapu
|
||||
addvaultwizard.new.locationIsOk=Prikladna lokacija za Vaš trezor
|
||||
### Expert Settings
|
||||
### Password
|
||||
addvaultwizard.new.createVaultBtn=Izradi trezor
|
||||
addvaultwizard.new.generateRecoveryKeyChoice=Nećete moći pristupiti svojim podacima bez lozinke. Želite li ključ za oporavak za slučaj gubitka lozinke?
|
||||
@ -378,4 +380,6 @@ passwordStrength.messageLabel.4=Vrlo jaka
|
||||
# Quit
|
||||
quit.lockAndQuitBtn=Zaključaj i napusti
|
||||
|
||||
# Forced Quit
|
||||
# Forced Quit
|
||||
|
||||
# Update Reminder
|
@ -20,6 +20,9 @@ error.description=Upsz! A Cryptomator nem számított rá, hogy ez megtörténik
|
||||
error.hyperlink.lookup=Hiba okának keresése
|
||||
error.hyperlink.report=Hiba jelentése
|
||||
error.technicalDetails=Részletek:
|
||||
error.existingSolutionDescription=A Cryptomator nem számított arra, hogy ez megtörténjen. Viszont már találtunk egy létező megoldást erre a problémára. Kérem, látogassa meg az alábbi linket.
|
||||
error.hyperlink.solution=Megoldás megnézése
|
||||
|
||||
|
||||
# Defaults
|
||||
defaults.vault.vaultName=Széf
|
||||
@ -59,6 +62,7 @@ addvaultwizard.new.validCharacters.message=A vault neve a következő karakterek
|
||||
addvaultwizard.new.validCharacters.chars=Szókarakterek (pl. a, ж vagy 수)
|
||||
addvaultwizard.new.validCharacters.numbers=Számok
|
||||
addvaultwizard.new.validCharacters.dashes=Kötőjel (%s) vagy alulvonás (%s)
|
||||
### Expert Settings
|
||||
### Password
|
||||
addvaultwizard.new.createVaultBtn=Új széf létrehozása
|
||||
addvaultwizard.new.generateRecoveryKeyChoice=Nem fog tudni hozzáférni az adataihoz a jelszó nélkül. Akar egy visszaállítási kulcsot arra az esetre, ha elveszíti a jelszavát?
|
||||
@ -126,6 +130,7 @@ unlock.success.revealBtn=Széf megjelenítése
|
||||
unlock.error.customPath.message=Nem lehet csatolni a széfet az egyéni útvonalhoz
|
||||
unlock.error.customPath.description.notSupported=Ha szeretné továbbra is az egyéni útvonalat használni, kérem, menjen a beállításokba és válasszon egy kötet típust, amely támogatja azt. Máskülönben, menjen a széf opciókhoz és válasszon egy támogatott csatoláspontot.
|
||||
unlock.error.customPath.description.notExists=Az egyéni csatolás útvonal nem létezik. Hozza létre a helyi fájlrendszerében vagy változtassa meg a széf opciókban.
|
||||
unlock.error.customPath.description.inUse=A "%s" meghajtó betűjel már használat alatt van.
|
||||
unlock.error.customPath.description.generic=Egyéni csatolási útvonalat választott ehhez a széfhez, de használatakor ez a hibaüzenet érkezett: %s
|
||||
## Hub
|
||||
hub.noKeychain.message=Nem lehet az eszközkulcshoz hozzáférni
|
||||
@ -487,4 +492,6 @@ quit.lockAndQuitBtn=Zárolás és kilépés
|
||||
# Forced Quit
|
||||
quit.forced.message=Egyes széfeket nem lehetett lezárni
|
||||
quit.forced.description=A széfek zárolását függőbben lévő műveletek vagy megnyitott fájlok blokkolták. Kényszerítheti a maradék széfek zárolását, de az I/O megszakítása nem mentett adatok elvesztéséhez vezethet.
|
||||
quit.forced.forceAndQuitBtn=Kényszerítés és Kilépés
|
||||
quit.forced.forceAndQuitBtn=Kényszerítés és Kilépés
|
||||
|
||||
# Update Reminder
|
@ -21,6 +21,7 @@ error.hyperlink.lookup=Cari error berikut
|
||||
error.hyperlink.report=Laporkan error berikut
|
||||
error.technicalDetails=Rincian:
|
||||
|
||||
|
||||
# Defaults
|
||||
defaults.vault.vaultName=Vault
|
||||
|
||||
@ -53,6 +54,7 @@ addvaultwizard.new.fileAlreadyExists=Sudah ada file atau direktori dengan nama v
|
||||
addvaultwizard.new.locationDoesNotExist=Direktori pada path yang dipilih tidak tersedia atau tidak dapat diakses
|
||||
addvaultwizard.new.locationIsNotWritable=Anda tidak memiliki hak akses untuk menulis pada path yang dipilih
|
||||
addvaultwizard.new.locationIsOk=Lokasi yang sesuai dengan vault Anda
|
||||
### Expert Settings
|
||||
### Password
|
||||
addvaultwizard.new.createVaultBtn=Buat Vault
|
||||
addvaultwizard.new.generateRecoveryKeyChoice=Anda tidak dapat mengakses data tanpa kata sandi yang Anda miliki. Apa Anda ingin sebuah kunci pemulihan untuk berjaga-jaga jika seandainya Anda kehilangan kata sandi?
|
||||
@ -378,4 +380,6 @@ passwordStrength.messageLabel.4=Sangat kuat
|
||||
# Quit
|
||||
quit.lockAndQuitBtn=Kunci dan Keluar
|
||||
|
||||
# Forced Quit
|
||||
# Forced Quit
|
||||
|
||||
# Update Reminder
|
@ -20,6 +20,9 @@ error.description=Oops! Cryptomator non si aspettava che ciò accadesse. Puoi ce
|
||||
error.hyperlink.lookup=Cerca questo errore
|
||||
error.hyperlink.report=Segnala questo errore
|
||||
error.technicalDetails=Dettagli:
|
||||
error.existingSolutionDescription=Cryptomator non si aspettava che questo problema accadesse. Ma abbiamo trovato una soluzione a questo errore. Dai un'occhiata al seguente link.
|
||||
error.hyperlink.solution=Cerca la soluzione
|
||||
|
||||
|
||||
# Defaults
|
||||
defaults.vault.vaultName=Cassaforte
|
||||
@ -59,6 +62,12 @@ addvaultwizard.new.validCharacters.message=Il nome della cassaforte può contene
|
||||
addvaultwizard.new.validCharacters.chars=Caratteri della parola (e.g. a, ж or 수)
|
||||
addvaultwizard.new.validCharacters.numbers=Numeri
|
||||
addvaultwizard.new.validCharacters.dashes=Trattino (%s) o tratto basso (%s)
|
||||
### Expert Settings
|
||||
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=Abilita le impostazioni avanzate
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=Inserisci un valore compreso tra 36 e 220 (predefinito 220)
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=Apri la documentazione per saperne di più.
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.title=Lunghezza massima dei nomi dei file crittografati
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.valid=Valido
|
||||
### Password
|
||||
addvaultwizard.new.createVaultBtn=Crea Cassaforte
|
||||
addvaultwizard.new.generateRecoveryKeyChoice=Non potrai accedere ai tuoi dati senza la tua password. Desideri una chiave di recupero nel caso dovessi perdere la password?
|
||||
@ -126,6 +135,7 @@ unlock.success.revealBtn=Rivela l'Unità
|
||||
unlock.error.customPath.message=Impossibile montare la cassaforte sul percorso personalizzato
|
||||
unlock.error.customPath.description.notSupported=Se desideri continuare a utilizzare il percorso personalizzato, vai alle preferenze e seleziona un tipo di volume che lo supporta. Altrimenti, vai alle opzioni della cassaforte e scegli un punto di montaggio supportato.
|
||||
unlock.error.customPath.description.notExists=Il percorso di mount personalizzato non esiste. Crealo nel tuo file system locale o cambialo nelle opzioni della cassaforte.
|
||||
unlock.error.customPath.description.inUse=La lettera di unità "%s" è già in uso.
|
||||
unlock.error.customPath.description.generic=Hai selezionato un percorso di montaggio personalizzato per questa cassaforte, ma il suo utilizzo è fallito col messaggio: %s
|
||||
## Hub
|
||||
hub.noKeychain.message=Impossibile accedere alla chiave del dispositivo
|
||||
@ -487,4 +497,12 @@ quit.lockAndQuitBtn=Blocca ed Esci
|
||||
# Forced Quit
|
||||
quit.forced.message=Qualche cassaforte non può essere bloccata
|
||||
quit.forced.description=Il blocco delle cassaforte è stato bloccato da operazioni in attesa o da file aperti. È possibile forzare il blocco delle cassaforti rimanenti, tuttavia interrompere le operazioni I/O potrebbe causare la perdita di dati non salvati.
|
||||
quit.forced.forceAndQuitBtn=Forza e Esci
|
||||
quit.forced.forceAndQuitBtn=Forza e Esci
|
||||
|
||||
# Update Reminder
|
||||
updateReminder.title=Controllo aggiornamenti
|
||||
updateReminder.message=Controllo aggiornamenti?
|
||||
updateReminder.description=Rimani aggiornato per nuove funzionalità, correzioni di bug e miglioramenti di sicurezza. Si consiglia di controllare automaticamente la presenza di aggiornamenti.
|
||||
updateReminder.notNow=Non adesso
|
||||
updateReminder.yesOnce=Sì, una volta
|
||||
updateReminder.yesAutomatically=Sì, automaticamente
|
@ -16,10 +16,13 @@ generic.button.print=印刷
|
||||
|
||||
# Error
|
||||
error.message=エラー %s
|
||||
error.description=Cryptomator で予期できない問題が発生しました! 。このエラーの解決方法を検索することができ、まだ報告されていない場合は、報告を行うことができます。
|
||||
error.description=Cryptomator で予期しない問題が発生しました。このエラーの解決方法を検索することができ、まだ報告されていない場合は、報告を行うことができます。
|
||||
error.hyperlink.lookup=このエラーを検索する
|
||||
error.hyperlink.report=このエラーを報告する
|
||||
error.technicalDetails=詳細:
|
||||
error.existingSolutionDescription=Cryptomator が予期しない状況が発生しましたが、解決策が見つかりました。以下のリンクを参照してください。
|
||||
error.hyperlink.solution=解決策を調べる
|
||||
|
||||
|
||||
# Defaults
|
||||
defaults.vault.vaultName=金庫
|
||||
@ -59,6 +62,12 @@ addvaultwizard.new.validCharacters.message=金庫の名前には次の文字が
|
||||
addvaultwizard.new.validCharacters.chars=単語文字 (例: a、ж、수)
|
||||
addvaultwizard.new.validCharacters.numbers=数字
|
||||
addvaultwizard.new.validCharacters.dashes=ハイフン (%s) またはアンダースコア (%s)
|
||||
### Expert Settings
|
||||
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=上級者向け設定を有効にする
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=36 から 220 までの値を入力してください (既定値は 220)
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=ドキュメントを開いて詳細を見る
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.title=暗号化ファイル名の最大長
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.valid=有効
|
||||
### Password
|
||||
addvaultwizard.new.createVaultBtn=金庫を作成
|
||||
addvaultwizard.new.generateRecoveryKeyChoice=データにアクセスするにはパスワードが必須です。パスワードを紛失したときのためにリカバリーキーは必要ですか?
|
||||
@ -126,6 +135,7 @@ unlock.success.revealBtn=ドライブを表示
|
||||
unlock.error.customPath.message=カスタム パスに金庫をマウントできません
|
||||
unlock.error.customPath.description.notSupported=カスタム パスを使い続けたい場合、環境設定に移動してサポートしているボリューム タイプを選択してください。もしくは、金庫のオプションに移動してサポートされるマウント ポイントを選択してください。
|
||||
unlock.error.customPath.description.notExists=カスタム マウント パスが存在していません。ローカル ファイルシステムで作成するか、金庫のオプションで変更してください。
|
||||
unlock.error.customPath.description.inUse=ドライブレター「%s」は既に使用されています。
|
||||
unlock.error.customPath.description.generic=この金庫のカスタム マウント パスを選択しましたが、次のメッセージで失敗しました: %s
|
||||
## Hub
|
||||
hub.noKeychain.message=デバイス キーにアクセスできません
|
||||
@ -435,6 +445,8 @@ vaultOptions.masterkey.showRecoveryKeyBtn=回復キーを表示
|
||||
vaultOptions.masterkey.recoverPasswordBtn=パスワードをリセット
|
||||
## Hub
|
||||
vaultOptions.hub=回復
|
||||
vaultOptions.hub.convertInfo=緊急時にはリカバリキーを利用して Hub 金庫からパスワードで解錠できる金庫に変換できます。
|
||||
vaultOptions.hub.convertBtn=パスワードに基づいた金庫に変換
|
||||
|
||||
# Recovery Key
|
||||
## Display Recovery Key
|
||||
@ -446,6 +458,7 @@ recoveryKey.display.StorageHints=十分に安全な場所に保存してくだ
|
||||
## Reset Password
|
||||
### Enter Recovery Key
|
||||
recoveryKey.recover.title=パスワードをリセット
|
||||
recoveryKey.recover.prompt="%s" のリカバリーキーを入力してください:
|
||||
recoveryKey.recover.correctKey=有効な回復キー
|
||||
recoveryKey.recover.wrongKey=この回復キーは別の金庫に属しています
|
||||
recoveryKey.recover.invalidKey=この回復キーは有効ではありません
|
||||
@ -461,6 +474,7 @@ convertVault.title=金庫を変換
|
||||
convertVault.convert.convertBtn.before=変換
|
||||
convertVault.convert.convertBtn.processing=変換中…
|
||||
convertVault.success.message=変換完了
|
||||
convertVault.hubToPassword.success.description=Hub へアクセスせずに選択したパスワードで金庫を解錠できるようになりました。
|
||||
|
||||
# New Password
|
||||
newPassword.promptText=新しいパスワードを入力してください
|
||||
@ -483,4 +497,12 @@ quit.lockAndQuitBtn=施錠して終了
|
||||
# Forced Quit
|
||||
quit.forced.message=一部の金庫を施錠できませんでした
|
||||
quit.forced.description=保留中の操作か、開かれたファイルによって、金庫の施錠が中断されました。残りの金庫を強制的に施錠することはできますが、I/O を中断すると保存されていないデータを失う可能性があります。
|
||||
quit.forced.forceAndQuitBtn=強制的に終了
|
||||
quit.forced.forceAndQuitBtn=強制的に終了
|
||||
|
||||
# Update Reminder
|
||||
updateReminder.title=更新の確認
|
||||
updateReminder.message=更新を確認するか
|
||||
updateReminder.description=自動的に更新をチェックして、新機能、バグ修正、セキュリティの改善などを入手するのをお勧めします。
|
||||
updateReminder.notNow=また後で
|
||||
updateReminder.yesOnce=はい、一度だけ
|
||||
updateReminder.yesAutomatically=自動的に行う
|
@ -21,6 +21,7 @@ error.hyperlink.lookup=에러 검색하기
|
||||
error.hyperlink.report=에러 보고하기
|
||||
error.technicalDetails=상세 정보:
|
||||
|
||||
|
||||
# Defaults
|
||||
defaults.vault.vaultName=Vault
|
||||
|
||||
@ -59,6 +60,7 @@ addvaultwizard.new.validCharacters.message=Vault 이름에는 다음과 같은
|
||||
addvaultwizard.new.validCharacters.chars=문자 (예시: a, ж or 수)
|
||||
addvaultwizard.new.validCharacters.numbers=숫자
|
||||
addvaultwizard.new.validCharacters.dashes=대시 (%s) 또는 언더바 (%s)
|
||||
### Expert Settings
|
||||
### Password
|
||||
addvaultwizard.new.createVaultBtn=Vault 생성
|
||||
addvaultwizard.new.generateRecoveryKeyChoice=비밀번호가 없으면 데이터에 접근할 수 없습니다. 비밀번호를 잊었을 때를 대비한 복구 키를 원하십니까?
|
||||
@ -402,4 +404,6 @@ quit.title=앱 종료
|
||||
quit.message=잠금 해제된 vault들이 존재합니다
|
||||
quit.lockAndQuitBtn=Vault 잠금 후 종료하기
|
||||
|
||||
# Forced Quit
|
||||
# Forced Quit
|
||||
|
||||
# Update Reminder
|
@ -21,6 +21,7 @@ error.hyperlink.lookup=Meklējiet šo kļūdu
|
||||
error.hyperlink.report=Ziņojiet par šo kļūdu
|
||||
error.technicalDetails=Detaļas:
|
||||
|
||||
|
||||
# Defaults
|
||||
defaults.vault.vaultName=Glabātava
|
||||
|
||||
@ -55,6 +56,7 @@ addvaultwizard.new.validCharacters.message=Krātuves nosaukums var saturēt šā
|
||||
addvaultwizard.new.validCharacters.chars=Burtus (piemēram: a, ж vai 수)
|
||||
addvaultwizard.new.validCharacters.numbers=Skaitļus
|
||||
addvaultwizard.new.validCharacters.dashes=Defise (%s) vai pasvītra (%s)
|
||||
### Expert Settings
|
||||
### Password
|
||||
addvaultwizard.new.createVaultBtn=Izveidot glabātuvi
|
||||
addvaultwizard.new.generateRecoveryKeyChoice=Jūs nevarēsiet piekļūt saviem datiem bez paroles. Vai vēlaties atkopšanas atslēgu gadījumam, kad esat pazaudējis paroli?
|
||||
@ -275,4 +277,6 @@ passwordStrength.messageLabel.4=Ļoti stipra
|
||||
# Quit
|
||||
quit.lockAndQuitBtn=Aizslēgt un aizvērt
|
||||
|
||||
# Forced Quit
|
||||
# Forced Quit
|
||||
|
||||
# Update Reminder
|
@ -5,6 +5,7 @@
|
||||
|
||||
# Error
|
||||
|
||||
|
||||
# Defaults
|
||||
|
||||
# Tray Menu
|
||||
@ -14,6 +15,7 @@
|
||||
## New
|
||||
### Name
|
||||
### Location
|
||||
### Expert Settings
|
||||
### Password
|
||||
### Information
|
||||
## Existing
|
||||
@ -107,4 +109,6 @@ hub.register.registerBtn=Потврди
|
||||
|
||||
# Quit
|
||||
|
||||
# Forced Quit
|
||||
# Forced Quit
|
||||
|
||||
# Update Reminder
|
@ -20,6 +20,9 @@ error.description=Oops! Cryptomator forventet ikke at dette skulle skje. Du kan
|
||||
error.hyperlink.lookup=Slå opp denne feilen
|
||||
error.hyperlink.report=Rapporter denne feilen
|
||||
error.technicalDetails=Detaljer:
|
||||
error.existingSolutionDescription=Cryptomator forventet ikke at dette skulle skje. Men vi fant en eksisterende løsning for denne feilen. Ta en titt ved å følge lenken.
|
||||
error.hyperlink.solution=Slå opp løsningen
|
||||
|
||||
|
||||
# Defaults
|
||||
defaults.vault.vaultName=Hvelv
|
||||
@ -59,6 +62,7 @@ addvaultwizard.new.validCharacters.message=Hvelvnavnet kan inneholde følgende t
|
||||
addvaultwizard.new.validCharacters.chars=Ordtegn (eks. a, ж or 수)
|
||||
addvaultwizard.new.validCharacters.numbers=Tall
|
||||
addvaultwizard.new.validCharacters.dashes=Bindestrek (%s) eller understrek (%s)
|
||||
### Expert Settings
|
||||
### Password
|
||||
addvaultwizard.new.createVaultBtn=Opprett hvelv
|
||||
addvaultwizard.new.generateRecoveryKeyChoice=Du vil ikke kunne få tilgang til dataene dine uten passordet. Vil du ha en gjenopprettingsnøkkel i tilefelle du mister passordet ditt?
|
||||
@ -121,11 +125,12 @@ unlock.chooseMasterkey.filePickerMimeDesc=Cryptomator Hovednøkkel
|
||||
unlock.success.message=Opplåsing vellykket
|
||||
unlock.success.description=Vellykket opplåsing av "%s"! Hvelvet ditt er nå tilgjengelig via sin virtuelle stasjon.
|
||||
unlock.success.rememberChoice=Husk valget - ikke vis dette igjen
|
||||
unlock.success.revealBtn=Gjør enheten synlig
|
||||
unlock.success.revealBtn=Vis enheten
|
||||
## Failure
|
||||
unlock.error.customPath.message=Kan ikke montere hvelvet til egendefinert sti
|
||||
unlock.error.customPath.description.notSupported=Hvis du vil fortsette å bruke den egendefinerte stien, gå til innstillingene og velg en enhetstype som støtter den. Gå ellers til hvelvalternativene og velg et støttet monteringspunkt.
|
||||
unlock.error.customPath.description.notExists=Egendefinert monteringssti eksisterer ikke. Enten opprett den i ditt lokale filsystem eller endre den i hvelvvalgene.
|
||||
unlock.error.customPath.description.inUse=Drevbokstaven "%s" er allerede i bruk.
|
||||
unlock.error.customPath.description.generic=Du har valgt en egendefinert monterings sti for dette hvelvet, men ved bruk av den mislyktes med meldingen: %s
|
||||
## Hub
|
||||
hub.noKeychain.message=Får ikke tilgang til enhetsnøkkel
|
||||
@ -274,8 +279,10 @@ preferences.interface.showMinimizeButton=Vis minimer-knapp
|
||||
preferences.interface.showTrayIcon=Vis verktøykasseikon (krever omstart)
|
||||
## Volume
|
||||
preferences.volume=Virtuell enhet
|
||||
preferences.volume.type=Volumtype
|
||||
preferences.volume.type.automatic=Automatisk
|
||||
preferences.volume.docsTooltip=Åpne dokumentasjonen for å lære mer om de forskjellige volumtypene.
|
||||
preferences.volume.fuseRestartRequired=For å iverksette endringene, må Cryptomator startes på nytt.
|
||||
preferences.volume.tcp.port=TCP Port
|
||||
preferences.volume.supportedFeatures=Valgt volumtype støtter følgende funksjoner:
|
||||
preferences.volume.feature.mountAuto=Valg av automatisk monteringspunkt
|
||||
@ -348,7 +355,7 @@ main.vaultlist.contextMenu.lock=Lås
|
||||
main.vaultlist.contextMenu.unlock=Lås opp…
|
||||
main.vaultlist.contextMenu.unlockNow=Lås opp nå
|
||||
main.vaultlist.contextMenu.vaultoptions=Alternativer for hvelvet
|
||||
main.vaultlist.contextMenu.reveal=Gjør enheten synlig
|
||||
main.vaultlist.contextMenu.reveal=Vis enheten
|
||||
main.vaultlist.addVaultBtn=Legg til hvelv
|
||||
## Vault Detail
|
||||
### Welcome
|
||||
@ -362,7 +369,7 @@ main.vaultDetail.passwordSavedInKeychain=Passordet er lagret
|
||||
### Unlocked
|
||||
main.vaultDetail.unlockedStatus=ULÅST
|
||||
main.vaultDetail.accessLocation=Innholdet i hvelvet ditt er tilgjengelig her:
|
||||
main.vaultDetail.revealBtn=Gjør enheten synlig
|
||||
main.vaultDetail.revealBtn=Vis enheten
|
||||
main.vaultDetail.copyUri=Kopier URI
|
||||
main.vaultDetail.lockBtn=Lås
|
||||
main.vaultDetail.bytesPerSecondRead=Lesehastighet:
|
||||
@ -407,20 +414,20 @@ vaultOptions.general.autoLock.lockAfterTimePart2=minutter
|
||||
vaultOptions.general.unlockAfterStartup=Lås opp hvelvet når du starter Cryptomator
|
||||
vaultOptions.general.actionAfterUnlock=Etter vellykket opplåsing
|
||||
vaultOptions.general.actionAfterUnlock.ignore=Ikke gjør noe
|
||||
vaultOptions.general.actionAfterUnlock.reveal=Gjør enheten synlig
|
||||
vaultOptions.general.actionAfterUnlock.reveal=Vis enheten
|
||||
vaultOptions.general.actionAfterUnlock.ask=Spør
|
||||
vaultOptions.general.startHealthCheckBtn=Start helsesjekk
|
||||
|
||||
## Mount
|
||||
vaultOptions.mount=Montering
|
||||
vaultOptions.mount.info=Alternativer avhenger av den valgte volumtypen.
|
||||
vaultOptions.mount.linkToPreferences=Åpne virtuelle driv-innstillinger
|
||||
vaultOptions.mount.linkToPreferences=Åpne virtuelle drev-innstillinger
|
||||
vaultOptions.mount.readonly=Skrivebeskyttet
|
||||
vaultOptions.mount.customMountFlags=Tilpassede moteringsparametre
|
||||
vaultOptions.mount.winDriveLetterOccupied=opptatt
|
||||
vaultOptions.mount.mountPoint=Monteringspunkt
|
||||
vaultOptions.mount.mountPoint.auto=Velg et passende sted automatisk
|
||||
vaultOptions.mount.mountPoint.driveLetter=Bruk tildelt enhetsbokstav
|
||||
vaultOptions.mount.mountPoint.driveLetter=Bruk tildelt drevbokstav
|
||||
vaultOptions.mount.mountPoint.custom=Bruk valgt mappe
|
||||
vaultOptions.mount.mountPoint.directoryPickerButton=Velg…
|
||||
vaultOptions.mount.mountPoint.directoryPickerTitle=Velg en mappe
|
||||
@ -432,6 +439,8 @@ vaultOptions.masterkey.recoveryKeyExplanation=En gjenopprettingsnøkkel er den e
|
||||
vaultOptions.masterkey.showRecoveryKeyBtn=Vis gjenopprettingsnøkkelen
|
||||
vaultOptions.masterkey.recoverPasswordBtn=Nullstill passord
|
||||
## Hub
|
||||
vaultOptions.hub=Gjenoppretting
|
||||
vaultOptions.hub.convertBtn=Konverter til passordbasert hvelv
|
||||
|
||||
# Recovery Key
|
||||
## Display Recovery Key
|
||||
@ -443,6 +452,7 @@ recoveryKey.display.StorageHints=Oppbevar den et veldig sikkert sted, f.eks. ved
|
||||
## Reset Password
|
||||
### Enter Recovery Key
|
||||
recoveryKey.recover.title=Nullstill passordet
|
||||
recoveryKey.recover.prompt=Angi gjenopprettingsnøkkelen for "%s":
|
||||
recoveryKey.recover.correctKey=Gjenopprettingsnøkkelen er gyldig
|
||||
recoveryKey.recover.wrongKey=Gjenopprettingsnøkkelen tilhører et annet hvelv
|
||||
recoveryKey.recover.invalidKey=Gjennopprettingsnøkkelen er ugyldig
|
||||
@ -454,6 +464,10 @@ recoveryKey.recover.resetSuccess.message=Passordnullstillingen vellykket
|
||||
recoveryKey.recover.resetSuccess.description=Du kan låse opp hvelvet med det nye passordet.
|
||||
|
||||
# Convert Vault
|
||||
convertVault.title=Konverter hvelvet
|
||||
convertVault.convert.convertBtn.before=Konverter
|
||||
convertVault.convert.convertBtn.processing=Konverterer…
|
||||
convertVault.success.message=Konverteringen var vellykket
|
||||
|
||||
# New Password
|
||||
newPassword.promptText=Skriv inn et nytt passord
|
||||
@ -476,4 +490,6 @@ quit.lockAndQuitBtn=Lås og avslutt
|
||||
# Forced Quit
|
||||
quit.forced.message=Noen hvelv kunne ikke låses
|
||||
quit.forced.description=Låsing av hvelvene ble blokkert av ventende operasjoner eller åpne filer. Du kan tvinge låsing av gjenværende hvelv, men forstyrring av I/O kan resultere i tap av ulagret data.
|
||||
quit.forced.forceAndQuitBtn=Tvinge og avslutte
|
||||
quit.forced.forceAndQuitBtn=Tvinge og avslutte
|
||||
|
||||
# Update Reminder
|
@ -20,6 +20,9 @@ error.description=Oeps! Cryptomator verwachtte niet dat dit zou gebeuren. U kunt
|
||||
error.hyperlink.lookup=Deze fout opzoeken
|
||||
error.hyperlink.report=Deze fout melden
|
||||
error.technicalDetails=Details:
|
||||
error.existingSolutionDescription=Cryptomator had niet verwacht dat dit zou gebeuren. Maar we hebben een bestaande oplossing voor deze fout gevonden. Neem een kijkje op de volgende link.
|
||||
error.hyperlink.solution=Zoek de oplossing op
|
||||
|
||||
|
||||
# Defaults
|
||||
defaults.vault.vaultName=Kluis
|
||||
@ -59,6 +62,12 @@ addvaultwizard.new.validCharacters.message=De kluisnaam mag de volgende karakter
|
||||
addvaultwizard.new.validCharacters.chars=Woordtekens (b.v. a, ½ of ±)
|
||||
addvaultwizard.new.validCharacters.numbers=Nummers
|
||||
addvaultwizard.new.validCharacters.dashes=Koppelteken (%s) of lage streep (%s)
|
||||
### Expert Settings
|
||||
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=Schakel geavanceerde instellingen in
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=Voer een waarde in tussen 36 en 220 (standaard 220)
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=Open de documentatie om meer te leren.
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.title=Maximale lengte van versleutelde bestandsnamen
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.valid=Geldig
|
||||
### Password
|
||||
addvaultwizard.new.createVaultBtn=Kluis aanmaken
|
||||
addvaultwizard.new.generateRecoveryKeyChoice=Zonder wachtwoord hebt u geen toegang tot uw data. Wilt u een herstelsleutel voor het geval u uw wachtwoord verliest?
|
||||
@ -126,6 +135,7 @@ unlock.success.revealBtn=Toon Schijf
|
||||
unlock.error.customPath.message=Kan kluis niet aan aangepast pad koppelen
|
||||
unlock.error.customPath.description.notSupported=Als je het aangepaste pad wilt blijven gebruiken, ga dan naar de voorkeuren en selecteer een volume type dat het ondersteunt. Anders ga je naar de kluis opties en kies je een steunpunt voor het koppelplaten.
|
||||
unlock.error.customPath.description.notExists=Het aangepaste koppelpad bestaat niet. Maak het aan in uw lokale bestandssysteem of verander het in de kluis opties.
|
||||
unlock.error.customPath.description.inUse=Schijfletter "%s" is al in gebruik.
|
||||
unlock.error.customPath.description.generic=Je hebt een aangepast koppel pad geselecteerd voor deze kluis, maar het gebruik ervan is mislukt met het bericht: %s
|
||||
## Hub
|
||||
hub.noKeychain.message=Geen toegang tot de apparaatsleutel
|
||||
@ -487,4 +497,12 @@ quit.lockAndQuitBtn=Vergrendelen en Afsluiten
|
||||
# Forced Quit
|
||||
quit.forced.message=Sommige kluizen konden niet vergrendeld worden
|
||||
quit.forced.description=Kluizen vergrendelen is geblokkeerd door openstaande bewerkingen of geopende bestanden. U kunt de resterende kluizen forceren, maar het onderbreken van I/O kan leiden tot het verlies van niet-opgeslagen gegevens.
|
||||
quit.forced.forceAndQuitBtn=Forceren en afsluiten
|
||||
quit.forced.forceAndQuitBtn=Forceren en afsluiten
|
||||
|
||||
# Update Reminder
|
||||
updateReminder.title=Zoek naar updates
|
||||
updateReminder.message=Controleren op updates?
|
||||
updateReminder.description=Blijf op de hoogte met nieuwe functies, bugfixes en beveiligingsverbeteringen. We raden aan om automatisch te controleren op updates.
|
||||
updateReminder.notNow=Niet Nu
|
||||
updateReminder.yesOnce=Ja, Eenmaal
|
||||
updateReminder.yesAutomatically=Ja, Automatisch
|
@ -16,6 +16,7 @@ generic.button.print=Skriv ut
|
||||
|
||||
# Error
|
||||
|
||||
|
||||
# Defaults
|
||||
|
||||
# Tray Menu
|
||||
@ -43,6 +44,7 @@ addvaultwizard.new.locationPrompt=…
|
||||
addvaultwizard.new.directoryPickerLabel=Tilpassa lagringsstad
|
||||
addvaultwizard.new.directoryPickerButton=Vel…
|
||||
addvaultwizard.new.directoryPickerTitle=Vel mappe
|
||||
### Expert Settings
|
||||
### Password
|
||||
addvaultwizard.new.createVaultBtn=Opprett kvelven
|
||||
addvaultwizard.new.generateRecoveryKeyChoice=Du vil ikkje kunna få tilgang til dataa dine utan passordet. Vil du ha ein gjenopprettingsnøkkel i tilfelle du mistar passordet ditt?
|
||||
@ -273,4 +275,6 @@ passwordStrength.messageLabel.4=Veldig sterkt
|
||||
# Quit
|
||||
quit.lockAndQuitBtn=Lås og avslutt
|
||||
|
||||
# Forced Quit
|
||||
# Forced Quit
|
||||
|
||||
# Update Reminder
|
@ -16,6 +16,7 @@ generic.button.print=ਪਰਿੰਟ ਕਰੋ
|
||||
|
||||
# Error
|
||||
|
||||
|
||||
# Defaults
|
||||
defaults.vault.vaultName=ਵਾਲਟ
|
||||
|
||||
@ -44,6 +45,7 @@ addvaultwizard.new.locationPrompt=…
|
||||
addvaultwizard.new.directoryPickerLabel=ਪਸੰਦੀਦਾ ਟਿਕਾਣਾ
|
||||
addvaultwizard.new.directoryPickerButton=…ਚੁਣੋ
|
||||
addvaultwizard.new.directoryPickerTitle=ਡਾਇਰੈਕਟਰੀ ਚੁਣੋ
|
||||
### Expert Settings
|
||||
### Password
|
||||
addvaultwizard.new.createVaultBtn=ਵਾਲਟ ਬਣਾਓ
|
||||
addvaultwizard.new.generateRecoveryKeyChoice=ਤੁਸੀਂ ਬਿਨਾਂ ਪਾਸਵਰਡ ਦੇ ਆਪਣੇ ਡਾਟੇ ਨੂੰ ਇਸਤੇਮਾਲ ਨਹੀਂ ਕਰ ਸਕੋਗੇ। ਕੀ ਤੁਸੀਂ ਰਿਕਵਰੀ ਕੁੰਜੀ ਚਾਹੋਗੇ, ਜੇ ਕਿਤੇ ਤੁਸੀਂ ਆਪਣਾ ਪਾਸਵਰਡ ਭੁੱਲ ਜਾਓ?
|
||||
@ -305,4 +307,6 @@ passwordStrength.messageLabel.4=ਬਹੁਤ ਮਜ਼ਬੂਤ
|
||||
# Quit
|
||||
quit.lockAndQuitBtn=ਲਾਕ ਕਰੋ ਤੇ ਬਾਹਰ ਜਾਓ
|
||||
|
||||
# Forced Quit
|
||||
# Forced Quit
|
||||
|
||||
# Update Reminder
|
@ -20,6 +20,9 @@ error.description=Cryptomator nie spodziewał się czegoś takiego. Możesz wysz
|
||||
error.hyperlink.lookup=Wyszukaj ten błąd
|
||||
error.hyperlink.report=Zgłoś ten błąd
|
||||
error.technicalDetails=Szczegóły:
|
||||
error.existingSolutionDescription=Cryptomator nie spodziewał się, że tak się stanie. Znaleźliśmy jednak istniejące rozwiązanie dla tego błędu. Proszę spojrzeć na poniższy link.
|
||||
error.hyperlink.solution=Wyszukaj rozwiązanie
|
||||
|
||||
|
||||
# Defaults
|
||||
defaults.vault.vaultName=Sejf
|
||||
@ -59,6 +62,12 @@ addvaultwizard.new.validCharacters.message=Nazwa sejfu może zawierać następuj
|
||||
addvaultwizard.new.validCharacters.chars=Znaki słów (np. a, ж lub 수)
|
||||
addvaultwizard.new.validCharacters.numbers=Liczby
|
||||
addvaultwizard.new.validCharacters.dashes=Myślnik (%s) lub podkreślenie (%s)
|
||||
### Expert Settings
|
||||
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=Włącz ustawienia eksperta
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=Wprowadź wartość między 36 a 220 (domyślnie 220)
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=Otwórz dokumentację, aby dowiedzieć się więcej.
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.title=Maksymalna długość zaszyfrowanych nazw plików
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.valid=Poprawne
|
||||
### Password
|
||||
addvaultwizard.new.createVaultBtn=Utwórz sejf
|
||||
addvaultwizard.new.generateRecoveryKeyChoice=Nie będziesz mógł uzyskać dostępu do swoich danych bez hasła. Czy chciałbyś klucz odzyskiwania w przypadku utraty hasła?
|
||||
@ -126,6 +135,7 @@ unlock.success.revealBtn=Pokaż Dysk
|
||||
unlock.error.customPath.message=Nie można zamontować sejfu na niestandardowej ścieżce
|
||||
unlock.error.customPath.description.notSupported=Jeśli chcesz nadal używać niestandardowej ścieżki, przejdź do preferencji i wybierz typ udziału, który ją obsługuje. W przeciwnym razie przejdź do opcji sejfu i wybierz obsługiwany punkt montowania.
|
||||
unlock.error.customPath.description.notExists=Niestandardowa ścieżka montowania nie istnieje. Stwórz ją w lokalnym systemie plików lub zmień ją w opcjach sejfu.
|
||||
unlock.error.customPath.description.inUse=Litera dysku "%s" jest już w użyciu.
|
||||
unlock.error.customPath.description.generic=Wybrałeś niestandardową ścieżkę montowania dla tego sejfu, ale użycie jej nie powiodło się z wiadomością: %s
|
||||
## Hub
|
||||
hub.noKeychain.message=Brak dostępu do klucza urządzenia
|
||||
@ -487,4 +497,12 @@ quit.lockAndQuitBtn=Zablokuj i wyjdź
|
||||
# Forced Quit
|
||||
quit.forced.message=Niektóre sejfy nie mogą być zablokowane
|
||||
quit.forced.description=Blokowanie sejfów zostało zablokowane przez oczekujące operacje lub otwarte pliki. Możesz wymusić zablokowanie pozostałych sejfów, jednak przerwanie I/O może spowodować utratę niezapisanych danych.
|
||||
quit.forced.forceAndQuitBtn=Wymuś i wyjdź
|
||||
quit.forced.forceAndQuitBtn=Wymuś i wyjdź
|
||||
|
||||
# Update Reminder
|
||||
updateReminder.title=Sprawdzanie aktualizacji
|
||||
updateReminder.message=Sprawdzić aktualizacje?
|
||||
updateReminder.description=Bądź na bieżąco z nowymi funkcjami, poprawkami błędów i poprawkami bezpieczeństwa. Zalecamy automatyczne sprawdzanie aktualizacji.
|
||||
updateReminder.notNow=Nie teraz
|
||||
updateReminder.yesOnce=Tak, raz
|
||||
updateReminder.yesAutomatically=Tak, automatycznie
|
@ -20,6 +20,9 @@ error.description=Opa! Cryptomator não esperava que isto acontecesse. Pode proc
|
||||
error.hyperlink.lookup=Procure este erro
|
||||
error.hyperlink.report=Relatar este erro
|
||||
error.technicalDetails=Detalhes:
|
||||
error.existingSolutionDescription=O Cryptomator não esperava que isso acontecesse. Mas encontrámos uma solução existente para esse erro. Por favor, veja o seguinte link.
|
||||
error.hyperlink.solution=Procure a solução
|
||||
|
||||
|
||||
# Defaults
|
||||
defaults.vault.vaultName=Cofre
|
||||
@ -59,6 +62,12 @@ addvaultwizard.new.validCharacters.message=O nome do cofre pode conter os seguin
|
||||
addvaultwizard.new.validCharacters.chars=Caracteres válidos (p. ex. a, ж ou 수)
|
||||
addvaultwizard.new.validCharacters.numbers=Números
|
||||
addvaultwizard.new.validCharacters.dashes=Hífen (%s) ou sublinhado (%s)
|
||||
### Expert Settings
|
||||
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=Ativar configurações avançadas
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=Digite um valor entre 36 e 220 (padrão 220)
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=Abra a documentação para saber mais.
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.title=Comprimento máximo dos ficheiros encriptados
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.valid=Válido
|
||||
### Password
|
||||
addvaultwizard.new.createVaultBtn=Criar Cofre
|
||||
addvaultwizard.new.generateRecoveryKeyChoice=Não será capaz de aceder aos seus dados sem a sua palavra-passe. Quer uma chave de recuperação para caso perca a sua palavra-passe?
|
||||
@ -70,8 +79,8 @@ addvault.new.readme.storageLocation.1=⚠ ARQUIVOS DO COFRE ⚠
|
||||
addvault.new.readme.storageLocation.2=Este é o local de armazenamento do seu cofre.
|
||||
addvault.new.readme.storageLocation.3=NÃO FAÇA
|
||||
addvault.new.readme.storageLocation.4=- alterar quaisquer ficheiros dentro deste directório ou
|
||||
addvault.new.readme.storageLocation.5=- colar quaisquer ficheiros para encriptação neste directório.
|
||||
addvault.new.readme.storageLocation.6=Se deseja criptografar arquivos e visualizar o conteúdo do cofre, faça o seguinte:
|
||||
addvault.new.readme.storageLocation.5=- colar quaisquer ficheiros para encriptação neste diretório.
|
||||
addvault.new.readme.storageLocation.6=Se deseja encriptar arquivos e visualizar o conteúdo do cofre, faça o seguinte:
|
||||
addvault.new.readme.storageLocation.7=1. Adicione este cofre ao Cryptomator.
|
||||
addvault.new.readme.storageLocation.8=2. Desbloqueie o cofre no Cryptomator.
|
||||
addvault.new.readme.storageLocation.9=3. Abra o local de acesso clicando no botão "Revelar".
|
||||
@ -111,7 +120,7 @@ forgetPassword.confirmBtn=Esquecer a Palavra-passe
|
||||
unlock.title=Desbloquear "%s"
|
||||
unlock.passwordPrompt=Insira a senha para "%s":
|
||||
unlock.savePassword=Recordar a palavra-passe
|
||||
unlock.unlockBtn=Destrancar
|
||||
unlock.unlockBtn=Desbloquear
|
||||
## Select
|
||||
unlock.chooseMasterkey.message=Chave Mestra não encontrada
|
||||
unlock.chooseMasterkey.description=Não foi possível encontrar o ficheiro masterkey no local predefinido para este cofre. Por favor, escolha o ficheiro chave manualmente.
|
||||
@ -124,6 +133,8 @@ unlock.success.rememberChoice=Lembrar escolha, não mostrar isto novamente
|
||||
unlock.success.revealBtn=Revelar unidade
|
||||
## Failure
|
||||
unlock.error.customPath.message=Não é possível montar o cofre no caminho personalizado
|
||||
unlock.error.customPath.description.notSupported=Se pretender continuar a utilizar o caminho personalizado, vá às preferências e seleccione um tipo de volume que o suporte. Caso contrário, aceda às opções do vault e escolha um ponto de montagem suportado.
|
||||
unlock.error.customPath.description.notExists=O caminho de montagem personalizado não existe. Crie-o no seu sistema de ficheiros local ou altere-o nas opções do vault.
|
||||
## Hub
|
||||
hub.noKeychain.message=Não foi possível aceder à chave do dispositivo
|
||||
hub.noKeychain.description=Para desbloquear os cofres do Hub, é necessária uma chave do dispositivo, que é protegida usando um porta-chaves. Para continuar, ative “%s” e selecione um porta-chaves nas preferências.
|
||||
@ -138,11 +149,11 @@ hub.receive.description=Cryptomator está a receber e a processar a resposta do
|
||||
### Register Device
|
||||
hub.register.message=Nome do dispositivo necessário
|
||||
hub.register.description=Parece ser o primeiro acesso ao Hub a partir deste dispositivo. Para identificá-lo para autorização de acesso, é preciso dar um nome a este dispositivo.
|
||||
hub.register.nameLabel=Nome do Dispositivo
|
||||
hub.register.nameLabel=Nome do dispositivo
|
||||
hub.register.occupiedMsg=Nome já utilizado
|
||||
hub.register.registerBtn=Confirmar
|
||||
### Registration Success
|
||||
hub.registerSuccess.message=Nome de Dispositivo
|
||||
hub.registerSuccess.message=Nome do dispositivo
|
||||
hub.registerSuccess.description=Para aceder ao cofre, o seu dispositivo precisa de ser autorizado pelo proprietário do cofre.
|
||||
### Registration Failed
|
||||
hub.registerFailed.message=Falha ao nomear o dispositivo
|
||||
@ -176,7 +187,7 @@ migration.run.startMigrationBtn=Migrar Cofre
|
||||
migration.run.progressHint=Isso pode levar algum tempo…
|
||||
## Success
|
||||
migration.success.nextStepsInstructions="%s" foi migrado com sucesso.\nPoderá desbloquear o seu cofre agora.
|
||||
migration.success.unlockNow=Destrancar agora
|
||||
migration.success.unlockNow=Desbloquear agora
|
||||
## Missing file system capabilities
|
||||
migration.error.missingFileSystemCapabilities.title=Sistema de ficheiros não suportado
|
||||
migration.error.missingFileSystemCapabilities.description=O processo de migração não foi iniciado, porque o seu cofre está localizado num sistema de ficheiros inadequado.
|
||||
@ -223,6 +234,10 @@ health.result.severityFilter.good=Ótimo
|
||||
health.result.severityFilter.info=Informações
|
||||
health.result.severityFilter.warn=Atenção
|
||||
health.result.severityFilter.crit=Crítico
|
||||
health.result.fixStateFilter.all=Estado de reparação - Todos
|
||||
health.result.fixStateFilter.fixable=Reparável
|
||||
health.result.fixStateFilter.notFixable=Não reparável
|
||||
health.result.fixStateFilter.fixing=Reparação…
|
||||
health.result.fixStateFilter.fixed=Corrigido
|
||||
health.result.fixStateFilter.fixFailed=Falha na correção
|
||||
## Fix Application
|
||||
@ -274,6 +289,12 @@ preferences.about=Sobre
|
||||
# Vault Statistics
|
||||
stats.title=Estatísticas de %s
|
||||
## Read
|
||||
stats.read.throughput.kibs=Leitura: %.2f KiB/s
|
||||
stats.read.throughput.mibs=Leitura: %.2f MiB/s
|
||||
stats.read.total.data.none=Dados lidos: -
|
||||
stats.read.total.data.kib=Dados lidos: %.1f KiB
|
||||
stats.read.total.data.mib=Dados lidos: %.1f MiB
|
||||
stats.read.total.data.gib=Dados lidos: %.1f GiB
|
||||
stats.decr.total.data.none=Dados desencriptados: -
|
||||
stats.decr.total.data.kib=Dados desencriptados: %.1f KiB
|
||||
stats.decr.total.data.mib=Dados desencriptados: %.1f MiB
|
||||
@ -307,9 +328,9 @@ main.supporterCertificateMissing.tooltip=Por favor, considere doar
|
||||
## Vault List
|
||||
main.vaultlist.emptyList.onboardingInstruction=Clique aqui para adicionar um cofre
|
||||
main.vaultlist.contextMenu.remove=Remover…
|
||||
main.vaultlist.contextMenu.lock=Trancar
|
||||
main.vaultlist.contextMenu.lock=Bloquear
|
||||
main.vaultlist.contextMenu.unlock=Desbloquear…
|
||||
main.vaultlist.contextMenu.unlockNow=Destrancar agora
|
||||
main.vaultlist.contextMenu.unlockNow=Desbloquear agora
|
||||
main.vaultlist.contextMenu.vaultoptions=Mostrar opções do Cofre
|
||||
main.vaultlist.contextMenu.reveal=Revelar unidade
|
||||
main.vaultlist.addVaultBtn=Adicionar Cofre
|
||||
@ -319,7 +340,7 @@ main.vaultDetail.welcomeOnboarding=Obrigado por escolher Cryptomator para proteg
|
||||
### Locked
|
||||
main.vaultDetail.lockedStatus=BLOQUEADO
|
||||
main.vaultDetail.unlockBtn=Desbloquear…
|
||||
main.vaultDetail.unlockNowBtn=Destrancar agora
|
||||
main.vaultDetail.unlockNowBtn=Desbloquear agora
|
||||
main.vaultDetail.optionsBtn=Opções do Cofre
|
||||
main.vaultDetail.passwordSavedInKeychain=Palavra-passe guardada
|
||||
### Unlocked
|
||||
@ -327,7 +348,7 @@ main.vaultDetail.unlockedStatus=DESBLOQUEADO
|
||||
main.vaultDetail.accessLocation=O conteúdo do seu cofre está acessível aqui:
|
||||
main.vaultDetail.revealBtn=Revelar unidade
|
||||
main.vaultDetail.copyUri=Copiar endereço
|
||||
main.vaultDetail.lockBtn=Trancar
|
||||
main.vaultDetail.lockBtn=Bloquear
|
||||
main.vaultDetail.bytesPerSecondRead=Ler:
|
||||
main.vaultDetail.bytesPerSecondWritten=Escrever:
|
||||
main.vaultDetail.throughput.idle=inativo
|
||||
@ -367,8 +388,8 @@ vaultOptions.general=Geral
|
||||
vaultOptions.general.vaultName=Nome do Cofre
|
||||
vaultOptions.general.autoLock.lockAfterTimePart1=Bloquear quando inativo por
|
||||
vaultOptions.general.autoLock.lockAfterTimePart2=minutos
|
||||
vaultOptions.general.unlockAfterStartup=Destrancar o cofre ao iniciar o Cryptomator
|
||||
vaultOptions.general.actionAfterUnlock=Após destrancar com sucesso
|
||||
vaultOptions.general.unlockAfterStartup=Desbloquear o cofre ao iniciar o Cryptomator
|
||||
vaultOptions.general.actionAfterUnlock=Após desbloquear com sucesso
|
||||
vaultOptions.general.actionAfterUnlock.ignore=Não fazer nada
|
||||
vaultOptions.general.actionAfterUnlock.reveal=Revelar unidade
|
||||
vaultOptions.general.actionAfterUnlock.ask=Perguntar
|
||||
@ -417,6 +438,7 @@ recoveryKey.recover.resetSuccess.message=Palavra-passe redefinida com sucesso
|
||||
recoveryKey.recover.resetSuccess.description=Você pode desbloquear o seu cofre com a nova senha.
|
||||
|
||||
# Convert Vault
|
||||
convertVault.convert.convertBtn.processing=Convertendo…
|
||||
|
||||
# New Password
|
||||
newPassword.promptText=Inserir uma nova palavra-passe
|
||||
@ -439,4 +461,6 @@ quit.lockAndQuitBtn=Bloquear e Sair
|
||||
# Forced Quit
|
||||
quit.forced.message=Alguns cofres não poderam ser fechados
|
||||
quit.forced.description=Bloquear os cofres foi impossibilitado por operações pendentes ou ficheiros abertos. Poderá forçar o bloqueio dos cofres restantes, sob a possibilidade da perda de dados não guardados.
|
||||
quit.forced.forceAndQuitBtn=Forçar e Sair
|
||||
quit.forced.forceAndQuitBtn=Forçar e Sair
|
||||
|
||||
# Update Reminder
|
@ -20,6 +20,9 @@ error.description=Oops! Cryptomator não esperava que isso acontecesse. Você po
|
||||
error.hyperlink.lookup=Procure este erro
|
||||
error.hyperlink.report=Reportar este erro
|
||||
error.technicalDetails=Detalhes:
|
||||
error.existingSolutionDescription=O Cryptomator encontrou um erro inesperado, mas há uma solução pré-existente disponível no seguinte link.
|
||||
error.hyperlink.solution=Procure a solução
|
||||
|
||||
|
||||
# Defaults
|
||||
defaults.vault.vaultName=Cofre
|
||||
@ -59,6 +62,12 @@ addvaultwizard.new.validCharacters.message=O nome do cofre pode conter os seguin
|
||||
addvaultwizard.new.validCharacters.chars=Caracteres de texto (exemplo: a, ж ou 수)
|
||||
addvaultwizard.new.validCharacters.numbers=Números
|
||||
addvaultwizard.new.validCharacters.dashes=Hífen (%s) ou sublinhado (%s)
|
||||
### Expert Settings
|
||||
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=Ativar configurações avançadas
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=Digite um valor entre 36 e 220 (padrão 220)
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=Abra a documentação para saber mais.
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.title=Comprimento máximo dos nomes de arquivos encriptados
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.valid=Válido
|
||||
### Password
|
||||
addvaultwizard.new.createVaultBtn=Criar Cofre
|
||||
addvaultwizard.new.generateRecoveryKeyChoice=Você não será capaz de acessar seus dados sem sua senha. Você quer uma chave de recuperação para o caso de perder sua senha?
|
||||
@ -126,6 +135,7 @@ unlock.success.revealBtn=Revelar Volume
|
||||
unlock.error.customPath.message=Não foi possível iniciar o cofre no caminho personalizado
|
||||
unlock.error.customPath.description.notSupported=Se você deseja continuar usando o caminho personalizado, por favor vá para as preferências e selecione um tipo de volume que o suporte. Caso contrário, vá para as opções de cofre e escolha um ponto de montagem suportado.
|
||||
unlock.error.customPath.description.notExists=O caminho de montagem personalizado não existe. Crie o caminho em seu sistema de arquivos local, ou o altere nas opções de cofre.
|
||||
unlock.error.customPath.description.inUse=A letra da unidade de disco "%s" já está em uso.
|
||||
unlock.error.customPath.description.generic=Você selecionou um caminho de montagem personalizado para este cofre, mas ao usá-lo ocorreu uma falha com a mensagem: %s
|
||||
## Hub
|
||||
hub.noKeychain.message=Não foi possível acessar a chave do dispositivo
|
||||
@ -487,4 +497,12 @@ quit.lockAndQuitBtn=Bloquear e Sair
|
||||
# Forced Quit
|
||||
quit.forced.message=Alguns cofres não puderam ser trancados
|
||||
quit.forced.description=O bloqueio dos cofres foi impedido por operações pendentes ou arquivos abertos. Você pode forçar o bloqueio dos cofres restantes, no entanto, essa interrupção de E/S pode resultar na perda de dados não salvos nos cofres — “seus dados”.
|
||||
quit.forced.forceAndQuitBtn=Forçar e Sair
|
||||
quit.forced.forceAndQuitBtn=Forçar e Sair
|
||||
|
||||
# Update Reminder
|
||||
updateReminder.title=Verificação de Atualizações
|
||||
updateReminder.message=Verificar Atualizações?
|
||||
updateReminder.description=Mantenha-se atualizado com novos recursos, correções de bugs e melhoramentos de segurança. Recomendamos verificar atualizações automaticamente.
|
||||
updateReminder.notNow=Agora Não
|
||||
updateReminder.yesOnce=Sim, Uma Vez
|
||||
updateReminder.yesAutomatically=Sim, Automaticamente
|
@ -20,6 +20,9 @@ error.description=Cryptomatorul nu se aștepta să se întâmple asta. Puteți c
|
||||
error.hyperlink.lookup=Caută soluții pentru această eroare
|
||||
error.hyperlink.report=Raportează această eroare
|
||||
error.technicalDetails=Detalii:
|
||||
error.existingSolutionDescription=Cryptomator nu s-a aşteptat să se întâmple asta. Dar am găsit o soluţie pentru această eroare. Vă rugăm să cititi următorul link.
|
||||
error.hyperlink.solution=Caută soluția
|
||||
|
||||
|
||||
# Defaults
|
||||
defaults.vault.vaultName=Seif
|
||||
@ -59,6 +62,12 @@ addvaultwizard.new.validCharacters.message=Numele seifului poate conține următ
|
||||
addvaultwizard.new.validCharacters.chars=Caractere (e.x. a, ж or 수)
|
||||
addvaultwizard.new.validCharacters.numbers=Numere
|
||||
addvaultwizard.new.validCharacters.dashes=Linii(%s) sau sub-linii(%s)
|
||||
### Expert Settings
|
||||
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=Activează setările Expert
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=Introduceți o valoare între 36 și 220 (implicit 220)
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=Deschideți documentația pentru a afla mai multe.
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.title=Lungimea maximă a numelor de fișiere criptate
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.valid=Valid
|
||||
### Password
|
||||
addvaultwizard.new.createVaultBtn=Crează seif
|
||||
addvaultwizard.new.generateRecoveryKeyChoice=Nu veți putea accesa datele dvs. fără parolă. Doriți o cheie de recuperare pentru cazul în care vă pierdeți parola?
|
||||
@ -126,6 +135,7 @@ unlock.success.revealBtn=Dezvăluie partiția
|
||||
unlock.error.customPath.message=Nu se poate monta seiful în locația alesă
|
||||
unlock.error.customPath.description.notSupported=Dacă doriți să continuați să utilizați locația aleasă, vă rugăm să mergeți la preferințe și să selectați o unitate de stocare suportată. În caz contrar, mergeți la opțiunile seifului și alegeți o locație de montare suportată.
|
||||
unlock.error.customPath.description.notExists=Locația de montare aleasă nu există. Creați-o în sistemul de fișiere local sau schimbați-o din opțiunile seifului.
|
||||
unlock.error.customPath.description.inUse=Partiția cu litera "%s" este deja folosită.
|
||||
unlock.error.customPath.description.generic=Ați selectat o locație de montare pentru acest seif, dar utilizarea ei a eșuat cu mesajul: %s
|
||||
## Hub
|
||||
hub.noKeychain.message=Cheia dispozitivului nu a putut fi accesată
|
||||
@ -154,6 +164,8 @@ hub.registerFailed.description=O eroare a fost întâmpinata în procesul de den
|
||||
hub.unauthorized.message=Acces respins
|
||||
hub.unauthorized.description=Dispozitivul dvs. nu a fost autorizat să acceseze acest seif. Solicitați proprietarului seifului să va autorizeze accesul.
|
||||
### License Exceeded
|
||||
hub.invalidLicense.message=Licență de Hub invalidă
|
||||
hub.invalidLicense.description=Instanța Hub are o licență invalidă. Vă rugăm să informați un administrator Hub să actualizeze sau să reînnoiască licența.
|
||||
|
||||
# Lock
|
||||
## Force
|
||||
@ -272,9 +284,17 @@ preferences.interface.showMinimizeButton=Arată butonul de minimizare
|
||||
preferences.interface.showTrayIcon=Arată tray icon (necesită repornire)
|
||||
## Volume
|
||||
preferences.volume=Unitate virtuală
|
||||
preferences.volume.type=Tip volum
|
||||
preferences.volume.type.automatic=Automat
|
||||
preferences.volume.docsTooltip=Deschideți documentația pentru a afla mai multe despre tipurile diferite de unități de stocare.
|
||||
preferences.volume.fuseRestartRequired=Cryptomator trebuie repornit pentru ca modificările să fie aplicate.
|
||||
preferences.volume.tcp.port=Portul TCP
|
||||
preferences.volume.supportedFeatures=Tipul de volum selectat suportă următoarele caracteristici:
|
||||
preferences.volume.feature.mountAuto=Selectare punct de montare automat
|
||||
preferences.volume.feature.mountToDir=Director personalizat ca punct de montaj
|
||||
preferences.volume.feature.mountToDriveLetter=Literă unitate ca punct de montare
|
||||
preferences.volume.feature.mountFlags=Opțiuni de montare personalizată
|
||||
preferences.volume.feature.readOnly=Montare read-only
|
||||
## Updates
|
||||
preferences.updates=Actualizări
|
||||
preferences.updates.currentVersion=Versiunea actuală: %s
|
||||
@ -297,21 +317,27 @@ stats.title=Statistici pentru %s
|
||||
stats.cacheHitRate=Rata de control cache
|
||||
## Read
|
||||
stats.read.throughput.idle=Citire: inactiv
|
||||
stats.read.throughput.kibs=Citire: %.2f kiB/s
|
||||
stats.read.throughput.mibs=Citire: %.2f MiB/s
|
||||
stats.read.total.data.none=Date citite: -
|
||||
stats.read.total.data.kib=Date citite: %.1f KiB
|
||||
stats.read.total.data.mib=Date citite: %.1f MiB
|
||||
stats.read.total.data.gib=Date citite: %.1f GiB
|
||||
stats.decr.total.data.none=Date decriptate: -
|
||||
stats.decr.total.data.kib=Date decriptate: %.1f KiB
|
||||
stats.decr.total.data.mib=Date decriptate: %.1f MiB
|
||||
stats.decr.total.data.gib=Date decriptate: %.1f GiB
|
||||
stats.read.accessCount=Total citit: %d
|
||||
## Write
|
||||
stats.write.throughput.idle=Scriere: inactiv
|
||||
stats.write.throughput.kibs=Scrie: %.2f KiB/s
|
||||
stats.write.throughput.mibs=Scrie: %.2f MiB/s
|
||||
stats.write.total.data.none=Date scrise: -
|
||||
stats.write.total.data.kib=Date scrise: %.1f KiB
|
||||
stats.write.total.data.mib=Date scrise: %.1f MiB
|
||||
stats.write.total.data.gib=Date scrise: %.1f GiB
|
||||
stats.encr.total.data.none=Date criptate: -
|
||||
stats.encr.total.data.kib=Date criptate: %.1f KiB
|
||||
stats.encr.total.data.mib=Date criptate: %.1f MiB
|
||||
stats.encr.total.data.gib=Date criptate: %.1f GiB
|
||||
stats.write.accessCount=Total scrieri: %d
|
||||
@ -349,12 +375,18 @@ main.vaultDetail.passwordSavedInKeychain=Parola a fost salvată
|
||||
main.vaultDetail.unlockedStatus=DEBLOCAT
|
||||
main.vaultDetail.accessLocation=Conținutul seifului tău este accesibil aici:
|
||||
main.vaultDetail.revealBtn=Dezvăluie unitatea
|
||||
main.vaultDetail.copyUri=Copiază URI
|
||||
main.vaultDetail.lockBtn=Blocaţi
|
||||
main.vaultDetail.bytesPerSecondRead=Citire:
|
||||
main.vaultDetail.bytesPerSecondWritten=Scriere:
|
||||
main.vaultDetail.throughput.idle=inactiv
|
||||
main.vaultDetail.throughput.kbps=%.1f KiB/s
|
||||
main.vaultDetail.throughput.mbps=%.1f MiB/s
|
||||
main.vaultDetail.stats=Statistici de seif
|
||||
main.vaultDetail.locateEncryptedFileBtn=Localizează fișier criptat
|
||||
main.vaultDetail.locateEncryptedFileBtn.tooltip=Alege un fișier din seiful tău pentru a-i localiza echivalentul criptat
|
||||
main.vaultDetail.encryptedPathsCopied=Căile au fost copiate în Clipboard
|
||||
main.vaultDetail.filePickerTitle=Alege fișier din seifului
|
||||
### Missing
|
||||
main.vaultDetail.missing.info=Cryptomator nu a putut găsi un seif pe această cale.
|
||||
main.vaultDetail.missing.recheck=Verifică din nou
|
||||
@ -393,13 +425,17 @@ vaultOptions.general.startHealthCheckBtn=Începe verificarea de sănătate
|
||||
|
||||
## Mount
|
||||
vaultOptions.mount=Montare
|
||||
vaultOptions.mount.info=Opțiunile depind de tipul de volum selectat.
|
||||
vaultOptions.mount.linkToPreferences=Deschide preferințele discului virtual
|
||||
vaultOptions.mount.readonly=Doar citire
|
||||
vaultOptions.mount.customMountFlags=Atribute de montare personalizate
|
||||
vaultOptions.mount.winDriveLetterOccupied=ocupat
|
||||
vaultOptions.mount.mountPoint=Punct de montare
|
||||
vaultOptions.mount.mountPoint.auto=Alegeţi automat o locaţie potrivită
|
||||
vaultOptions.mount.mountPoint.driveLetter=Utilizați litera de unitate atribuită
|
||||
vaultOptions.mount.mountPoint.custom=Folosește directorul ales
|
||||
vaultOptions.mount.mountPoint.directoryPickerButton=Alege…
|
||||
vaultOptions.mount.mountPoint.directoryPickerTitle=Alege un director
|
||||
## Master Key
|
||||
vaultOptions.masterkey=Parolă
|
||||
vaultOptions.masterkey.changePasswordBtn=Schimbați parola
|
||||
@ -408,6 +444,9 @@ vaultOptions.masterkey.recoveryKeyExplanation=O cheie de recuperare este singuru
|
||||
vaultOptions.masterkey.showRecoveryKeyBtn=Afișează cheia de recuperare
|
||||
vaultOptions.masterkey.recoverPasswordBtn=Resetează Parola
|
||||
## Hub
|
||||
vaultOptions.hub=Recuperare
|
||||
vaultOptions.hub.convertInfo=În caz de urgență, poți folosi cheia de recuperare pentru a transforma acest seif Hub într-un seif cu parolă.
|
||||
vaultOptions.hub.convertBtn=Transformă în seif cu parolă
|
||||
|
||||
# Recovery Key
|
||||
## Display Recovery Key
|
||||
@ -419,6 +458,7 @@ recoveryKey.display.StorageHints=Păstrați cheia de recuperare undeva foarte si
|
||||
## Reset Password
|
||||
### Enter Recovery Key
|
||||
recoveryKey.recover.title=Resetează Parola
|
||||
recoveryKey.recover.prompt=Introduce cheia de recuperare pentru "%s:
|
||||
recoveryKey.recover.correctKey=Cheia de recuperare este validă
|
||||
recoveryKey.recover.wrongKey=Cheia de recuperare aparţine unui alt seif
|
||||
recoveryKey.recover.invalidKey=Cheia de recuperare nu este validă
|
||||
@ -430,6 +470,11 @@ recoveryKey.recover.resetSuccess.message=Parola a fost resetată cu succes
|
||||
recoveryKey.recover.resetSuccess.description=Puteți debloca seiful cu parola noua.
|
||||
|
||||
# Convert Vault
|
||||
convertVault.title=Transformă seiful
|
||||
convertVault.convert.convertBtn.before=Convertește
|
||||
convertVault.convert.convertBtn.processing=În curs de convertire…
|
||||
convertVault.success.message=Convertire reușită
|
||||
convertVault.hubToPassword.success.description=Acum poti debloca seiful cu parola aleasa fara a necesita acces Hub.
|
||||
|
||||
# New Password
|
||||
newPassword.promptText=Introduceți o parolă nouă
|
||||
@ -452,4 +497,12 @@ quit.lockAndQuitBtn=Blocați și ieșiți
|
||||
# Forced Quit
|
||||
quit.forced.message=Unele seifuri nu au putut fi blocate
|
||||
quit.forced.description=Încuierea seifurilor a fost blocata de operațiuni in curs sau de fișiere deschise. Puteți încuia forțat aceste seifuri dar prin întreruperea operațiunilor I/O poate rezulta în pierderea datelor nesalvate.
|
||||
quit.forced.forceAndQuitBtn=Încuiați forțat și ieșiți
|
||||
quit.forced.forceAndQuitBtn=Încuiați forțat și ieșiți
|
||||
|
||||
# Update Reminder
|
||||
updateReminder.title=Verificare actualizare
|
||||
updateReminder.message=Verificați dacă există actualizări?
|
||||
updateReminder.description=Rămâneți la curent cu noi caracteristici, remedieri ale erorilor și îmbunătățiri de securitate. Vă recomandăm să verificați automat actualizările.
|
||||
updateReminder.notNow=Nu acum
|
||||
updateReminder.yesOnce=Da, o dată
|
||||
updateReminder.yesAutomatically=Da, automat
|
@ -20,6 +20,9 @@ error.description=Произошла непредвиденная ситуаци
|
||||
error.hyperlink.lookup=Найти ошибку
|
||||
error.hyperlink.report=Сообщить об ошибке
|
||||
error.technicalDetails=Подробности:
|
||||
error.existingSolutionDescription=Произошло неожиданное событие. Однако мы нашли решение этой проблемы. Ознакомьтесь с ним по ссылке.
|
||||
error.hyperlink.solution=Найти решение
|
||||
|
||||
|
||||
# Defaults
|
||||
defaults.vault.vaultName=Хранилище
|
||||
@ -59,6 +62,12 @@ addvaultwizard.new.validCharacters.message=Имя хранилища может
|
||||
addvaultwizard.new.validCharacters.chars=Буквы (например, a, ж или 수)
|
||||
addvaultwizard.new.validCharacters.numbers=Цифры
|
||||
addvaultwizard.new.validCharacters.dashes=Дефис (%s) или подчёркивание (%s)
|
||||
### Expert Settings
|
||||
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=Включить расширенные настройки
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=Введите значение между 36 и 220 (по умолчанию 220)
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=См. подробности в документации.
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.title=Максимальная длина зашифрованных имён файлов
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.valid=Корректно
|
||||
### Password
|
||||
addvaultwizard.new.createVaultBtn=Создать хранилище
|
||||
addvaultwizard.new.generateRecoveryKeyChoice=Вы не сможете получить доступ к своим данным без пароля. Хотите создать ключ для восстановления на случай утери пароля?
|
||||
@ -126,6 +135,7 @@ unlock.success.revealBtn=Показать диск
|
||||
unlock.error.customPath.message=Невозможно смонтировать хранилище по указанному пути
|
||||
unlock.error.customPath.description.notSupported=Если вы хотите продолжить использование пользовательского пути, перейдите в настройки и выберите тип тома, который его поддерживает. В противном случае, перейдите в настройки хранилища и выберите поддерживаемую точку монтирования.
|
||||
unlock.error.customPath.description.notExists=Пользовательский путь монтирования не существует. Либо создайте его в локальной файловой системе, либо измените в параметрах хранилища.
|
||||
unlock.error.customPath.description.inUse=Буква диска "%s" уже используется.
|
||||
unlock.error.customPath.description.generic=Вы выбрали свой путь монтирования этого хранилища, но его нельзя использовать: %s
|
||||
## Hub
|
||||
hub.noKeychain.message=Нет доступа к ключу устройства
|
||||
@ -151,7 +161,7 @@ hub.registerSuccess.description=Для доступа к хранилищу ва
|
||||
hub.registerFailed.message=Ошибка присвоения имени устройству
|
||||
hub.registerFailed.description=Ошибка присвоения имени. Более подробную информацию см. в журнале приложения.
|
||||
### Unauthorized
|
||||
hub.unauthorized.message=Нет доступа
|
||||
hub.unauthorized.message=Доступ запрещен
|
||||
hub.unauthorized.description=Устройство ещё не авторизовано для доступа к этому хранилищу. Попросите владельца хранилища разрешить его.
|
||||
### License Exceeded
|
||||
hub.invalidLicense.message=Лицензия хаба недействительна
|
||||
@ -487,4 +497,12 @@ quit.lockAndQuitBtn=Заблокировать и выйти
|
||||
# Forced Quit
|
||||
quit.forced.message=Некоторые хранилища не могут быть заблокированы
|
||||
quit.forced.description=Блокировка хранилищ была прервана из-за отложенной операции или открытых файлов. Вы можете заблокировать оставшиеся хранилища принудительно, однако прерывание ввода-вывода может привести к потере несохранённых данных.
|
||||
quit.forced.forceAndQuitBtn=Заблокировать и выйти
|
||||
quit.forced.forceAndQuitBtn=Заблокировать и выйти
|
||||
|
||||
# Update Reminder
|
||||
updateReminder.title=Проверка обновлений
|
||||
updateReminder.message=Проверить обновления?
|
||||
updateReminder.description=Будьте в курсе новых возможностей, исправлений ошибок и улучшений безопасности. Мы рекомендуем автоматически проверять наличие обновлений.
|
||||
updateReminder.notNow=Не сейчас
|
||||
updateReminder.yesOnce=Да, один раз
|
||||
updateReminder.yesAutomatically=Да, автоматически
|
@ -17,6 +17,7 @@ generic.button.print=මුද්රණය කරන්න
|
||||
error.message=දෝෂය: %s
|
||||
error.technicalDetails=විස්තර:
|
||||
|
||||
|
||||
# Defaults
|
||||
|
||||
# Tray Menu
|
||||
@ -29,6 +30,7 @@ traymenu.vault.unlock=අගුළුහරින්න
|
||||
### Name
|
||||
### Location
|
||||
addvaultwizard.new.locationPrompt=…
|
||||
### Expert Settings
|
||||
### Password
|
||||
### Information
|
||||
## Existing
|
||||
@ -123,4 +125,6 @@ main.closeBtn.tooltip=වසන්න
|
||||
|
||||
# Quit
|
||||
|
||||
# Forced Quit
|
||||
# Forced Quit
|
||||
|
||||
# Update Reminder
|
@ -20,6 +20,9 @@ error.description=Cryptomator toto neočakával. Môžte nahliadnuť do existuj
|
||||
error.hyperlink.lookup=Vyhľadať túto chybu
|
||||
error.hyperlink.report=Nahlásiť túto chybu
|
||||
error.technicalDetails=Podrobnosti:
|
||||
error.existingSolutionDescription=Cryptomator nečakal, že sa toto stane. Našli sme však existujúce riešenie tejto chyby. Pozrite si prosím nasledujúci odkaz.
|
||||
error.hyperlink.solution=Vyhľadať riešenie
|
||||
|
||||
|
||||
# Defaults
|
||||
defaults.vault.vaultName=Trezor
|
||||
@ -59,6 +62,11 @@ addvaultwizard.new.validCharacters.message=Meno trezora smie obsahovať nasleduj
|
||||
addvaultwizard.new.validCharacters.chars=Slovné znaky (napr. a, ж alebo 수)
|
||||
addvaultwizard.new.validCharacters.numbers=Čísla
|
||||
addvaultwizard.new.validCharacters.dashes=Pomlčka (%s) alebo podčiarnik (%s)
|
||||
### Expert Settings
|
||||
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=Povoliť expertné nastavenia
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=Zadajte hodnotu medzi 36 a 220 (predvolená 220)
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=Otvorte dokumentáciu pre viac informácií.
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.valid=Platný
|
||||
### Password
|
||||
addvaultwizard.new.createVaultBtn=Vytvoriť trezor
|
||||
addvaultwizard.new.generateRecoveryKeyChoice=Bez hesla nebudete mať prístup k svojim údajom. Chcete obnovovací kľúč pre prípad straty hesla?
|
||||
@ -110,7 +118,7 @@ forgetPassword.confirmBtn=Zabudnuté heslo
|
||||
# Unlock
|
||||
unlock.title=Odomknúť "%s"
|
||||
unlock.passwordPrompt=Zadajte heslo pre "%s":
|
||||
unlock.savePassword=Odomknúť.uložiťHeslo
|
||||
unlock.savePassword=Zapamätať heslo
|
||||
unlock.unlockBtn=Odomknúť
|
||||
## Select
|
||||
unlock.chooseMasterkey.message=Súbor hlavného kľúča nenájdený
|
||||
@ -124,6 +132,8 @@ unlock.success.rememberChoice=Zapamätať voľbu, už viac nezobrazovať
|
||||
unlock.success.revealBtn=Odkryť disk
|
||||
## Failure
|
||||
unlock.error.customPath.message=Nie je možné namapovať trezor na uživateĺskej ceste
|
||||
unlock.error.customPath.description.notSupported=Ak chcete naďalej používať vlastnú cestu, prejdite do nastavení a vyberte typ zväzku, ktorý ju podporuje. V opačnom prípade prejdite na možnosti trezoru a vyberte podporovaný bod pripojenia.
|
||||
unlock.error.customPath.description.inUse=Písmeno jednotky „%s“ sa už používa.
|
||||
unlock.error.customPath.description.generic=Vybrali ste voliteľnú cestu pripojenia pre tento trezor, ale použiť ho zlyhalo so správou: %s
|
||||
## Hub
|
||||
hub.noKeychain.message=Nemôžem pristúpiť ku kľúču zariadenia
|
||||
@ -430,7 +440,7 @@ vaultOptions.masterkey.changePasswordBtn=Zmeniť heslo
|
||||
vaultOptions.masterkey.forgetSavedPasswordBtn=Zabudnúť uložené heslo
|
||||
vaultOptions.masterkey.recoveryKeyExplanation=Kľúč pre obnovu je Vašou jedinou cestou k obnove prístupu do trezoru v prípade straty hesla.
|
||||
vaultOptions.masterkey.showRecoveryKeyBtn=Ukázať klúč obnovy
|
||||
vaultOptions.masterkey.recoverPasswordBtn=Resetovanie hesla
|
||||
vaultOptions.masterkey.recoverPasswordBtn=Obnoviť heslo
|
||||
## Hub
|
||||
vaultOptions.hub=Obnova
|
||||
|
||||
@ -438,12 +448,13 @@ vaultOptions.hub=Obnova
|
||||
## Display Recovery Key
|
||||
recoveryKey.display.title=Ukázať kľúč obnovenia
|
||||
recoveryKey.create.message=Požadované heslo
|
||||
recoveryKey.create.description=Zadajte Vaše heslo pre zobrazenie kľúča obnovy k "%s":
|
||||
recoveryKey.create.description=Zadajte heslo pre "%s", aby sa zobrazil kľúč na obnovenie.
|
||||
recoveryKey.display.description=Nasledujúci kľúč obnovy slúži k prístupu k "%s":
|
||||
recoveryKey.display.StorageHints=Uchovávajte ho na bezpečnom mieste, ako napr.:\n- v menežérovi hesiel\n- uložené na USB kľúči\n- vytlačené na papiery
|
||||
## Reset Password
|
||||
### Enter Recovery Key
|
||||
recoveryKey.recover.title=Resetovanie hesla
|
||||
recoveryKey.recover.prompt=Zadajte obnovovací kľúč pre „%s":
|
||||
recoveryKey.recover.correctKey=Toto je platný kľúč obnovy
|
||||
recoveryKey.recover.wrongKey=Tento kľúč obnovy patrí inému trezoru
|
||||
recoveryKey.recover.invalidKey=Toto je neplatný kľúč obnovy
|
||||
@ -459,6 +470,7 @@ convertVault.title=Konvertovať trezor
|
||||
convertVault.convert.convertBtn.before=Konvertovať
|
||||
convertVault.convert.convertBtn.processing=Konvertujem…
|
||||
convertVault.success.message=Konverzia úspešná
|
||||
convertVault.hubToPassword.success.description=Teraz môžete odomknúť trezor pomocou zvoleného hesla bez toho, aby ste potrebovali prístup k Hub službe.
|
||||
|
||||
# New Password
|
||||
newPassword.promptText=Zadajte nové heslo
|
||||
@ -481,4 +493,6 @@ quit.lockAndQuitBtn=Zamknúť a Skončiť
|
||||
# Forced Quit
|
||||
quit.forced.message=Niektoré trezory nemožno uzamknúť
|
||||
quit.forced.description=Uzavretie trezorov bolo blokované prebiehajúcou operáciou alebo otvorenými súbormi. Môžte vynútiť uzamknutie ostávajúcich trezorov, čo preruší I/O a to môže viesť k strate neuložených dát.
|
||||
quit.forced.forceAndQuitBtn=Vynútiť a skončiť
|
||||
quit.forced.forceAndQuitBtn=Vynútiť a skončiť
|
||||
|
||||
# Update Reminder
|
@ -21,6 +21,7 @@ error.hyperlink.lookup=Poiščite to napako
|
||||
error.hyperlink.report=Prijavite to napako
|
||||
error.technicalDetails=Podrobnosti:
|
||||
|
||||
|
||||
# Defaults
|
||||
|
||||
# Tray Menu
|
||||
@ -30,6 +31,7 @@ error.technicalDetails=Podrobnosti:
|
||||
## New
|
||||
### Name
|
||||
### Location
|
||||
### Expert Settings
|
||||
### Password
|
||||
### Information
|
||||
## Existing
|
||||
@ -129,4 +131,6 @@ recoveryKey.recover.invalidKey=Obnovitveni ključ ni pravilen
|
||||
|
||||
# Quit
|
||||
|
||||
# Forced Quit
|
||||
# Forced Quit
|
||||
|
||||
# Update Reminder
|
@ -16,6 +16,7 @@ generic.button.print=Štampaj
|
||||
|
||||
# Error
|
||||
|
||||
|
||||
# Defaults
|
||||
defaults.vault.vaultName=Sef
|
||||
|
||||
@ -48,6 +49,7 @@ addvaultwizard.new.fileAlreadyExists=Datoteka ili direktorijum sa ovim imenom se
|
||||
addvaultwizard.new.locationDoesNotExist=Direktorijum na datoj lokaciji ne postoji ili mu se ne može pristupiti
|
||||
addvaultwizard.new.locationIsNotWritable=Nemate pristup pisanju na datoj lokaciji
|
||||
addvaultwizard.new.locationIsOk=Prikladna lokacija za vaš sef
|
||||
### Expert Settings
|
||||
### Password
|
||||
addvaultwizard.new.createVaultBtn=Napravi sef
|
||||
addvaultwizard.new.generateRecoveryKeyChoice=Nećete moći da pristupite vašim podacima bez vaše lozinke. Da li želite rezervni ključ u slučaju gubitka lozinke?
|
||||
@ -317,4 +319,6 @@ passwordStrength.messageLabel.4=Веома јака
|
||||
# Quit
|
||||
quit.lockAndQuitBtn=Zaključaj i Izađi
|
||||
|
||||
# Forced Quit
|
||||
# Forced Quit
|
||||
|
||||
# Update Reminder
|
@ -16,6 +16,7 @@ generic.button.print=Štampaj
|
||||
|
||||
# Error
|
||||
|
||||
|
||||
# Defaults
|
||||
defaults.vault.vaultName=Sef
|
||||
|
||||
@ -47,6 +48,7 @@ addvaultwizard.new.fileAlreadyExists=Datoteka ili direktorijum sa ovim imenom se
|
||||
addvaultwizard.new.locationDoesNotExist=Direktorijum na datoj lokaciji ne postoji ili mu se ne može pristupiti
|
||||
addvaultwizard.new.locationIsNotWritable=Nemate pristup pisanju na datoj lokaciji
|
||||
addvaultwizard.new.locationIsOk=Prikladna lokacija za vaš sef
|
||||
### Expert Settings
|
||||
### Password
|
||||
addvaultwizard.new.createVaultBtn=Napravi sef
|
||||
addvaultwizard.new.generateRecoveryKeyChoice=Nećete moći da pristupite vašim podacima bez vaše lozinke. Da li želite rezervni ključ u slučaju gubitka lozinke?
|
||||
@ -234,4 +236,6 @@ vaultOptions.masterkey.changePasswordBtn=Promena lozinke
|
||||
|
||||
# Quit
|
||||
|
||||
# Forced Quit
|
||||
# Forced Quit
|
||||
|
||||
# Update Reminder
|
@ -20,6 +20,9 @@ error.description=Hoppsan! Cryptomator stötte på något oväntat. Du kan leta
|
||||
error.hyperlink.lookup=Slå upp detta fel
|
||||
error.hyperlink.report=Rapportera fel
|
||||
error.technicalDetails=Detaljer:
|
||||
error.existingSolutionDescription=Cryptomator förväntade sig inte att det här skulle hända. Men vi hittade en befintlig lösning för detta fel. Ta en titt på följande länk.
|
||||
error.hyperlink.solution=Se lösningen
|
||||
|
||||
|
||||
# Defaults
|
||||
defaults.vault.vaultName=Valv
|
||||
@ -59,6 +62,12 @@ addvaultwizard.new.validCharacters.message=Valvets namn kan innehålla följande
|
||||
addvaultwizard.new.validCharacters.chars=Ordtecken (t ex. a, ж or 수)
|
||||
addvaultwizard.new.validCharacters.numbers=Siffror
|
||||
addvaultwizard.new.validCharacters.dashes=Bindestreck (%s) eller understrykningstecken (%s)
|
||||
### Expert Settings
|
||||
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=Visa expertinställningar
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=Ange ett värde mellan 36 och 220 (standard 220)
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=Öppna dokumentationen för att lära dig mer.
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.title=Maximal längd på krypterade filnamn
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.valid=Valid
|
||||
### Password
|
||||
addvaultwizard.new.createVaultBtn=Skapa Valv
|
||||
addvaultwizard.new.generateRecoveryKeyChoice=Du kommer inte ha tillgång till din data utan ditt lösenord. Vill du skapa en återställningsnyckel, ifall du tappar bort ditt lösenord?
|
||||
@ -126,6 +135,7 @@ unlock.success.revealBtn=Visa enhet
|
||||
unlock.error.customPath.message=Det går inte att montera valvet på utpekad sökväg
|
||||
unlock.error.customPath.description.notSupported=Om du vill fortsätta använda den anpassade sökvägen, gå till inställningarna och välj en volymtyp som stöder den. Annars går du till valvalternativen och väljer en monteringspunkt som stöds.
|
||||
unlock.error.customPath.description.notExists=Den anpassade monteringssökvägen finns inte. Skapa den antingen i ditt lokala filsystem eller ändra den i valvalternativen.
|
||||
unlock.error.customPath.description.inUse=Enhetsbokstav "%s" används redan.
|
||||
unlock.error.customPath.description.generic=Den anpassade monteringssökvägen gick inte att använda. Felmeddelande: %s
|
||||
## Hub
|
||||
hub.noKeychain.message=Kan inte komma åt enhetsnyckeln
|
||||
@ -479,4 +489,12 @@ quit.lockAndQuitBtn=Lås och avsluta
|
||||
# Forced Quit
|
||||
quit.forced.message=Vissa valv kunde inte låsas
|
||||
quit.forced.description=Valvlåsningen blockerades av köade operationer eller öppna filer. Du kan framtvinga låsning av återstående valv, men att störa pågående operationer kan resultera i förlust av osparat data.
|
||||
quit.forced.forceAndQuitBtn=Tvinga och avsluta
|
||||
quit.forced.forceAndQuitBtn=Tvinga och avsluta
|
||||
|
||||
# Update Reminder
|
||||
updateReminder.title=Sök efter uppdateringar
|
||||
updateReminder.message=Sök efter uppdateringar?
|
||||
updateReminder.description=Håll dig uppdaterad med nya funktioner, buggfixar och säkerhetsförbättringar. Vi rekommenderar att automatiskt söka efter uppdateringar.
|
||||
updateReminder.notNow=Inte nu
|
||||
updateReminder.yesOnce=Ja, en gång
|
||||
updateReminder.yesAutomatically=Ja, automatiskt
|
@ -21,6 +21,7 @@ error.hyperlink.lookup=Angalia kosa hili
|
||||
error.hyperlink.report=Ripoti kosa hili
|
||||
error.technicalDetails=Maelezo:
|
||||
|
||||
|
||||
# Defaults
|
||||
defaults.vault.vaultName=Kuba
|
||||
|
||||
@ -59,6 +60,7 @@ addvaultwizard.new.validCharacters.message=Jina la kuhifadhi linaweza kuwa na he
|
||||
addvaultwizard.new.validCharacters.chars=Vibambo vya maneno (k.m. a, ж au 수)
|
||||
addvaultwizard.new.validCharacters.numbers=Namba
|
||||
addvaultwizard.new.validCharacters.dashes=Kistariungio (%s) au kistari (%s)
|
||||
### Expert Settings
|
||||
### Password
|
||||
addvaultwizard.new.createVaultBtn=Unda Kuba
|
||||
addvaultwizard.new.generateRecoveryKeyChoice=Hutaweza kufikia data yako bila neno la siri lako. Unataka ufunguo wa kurejesha kwa kesi unayopoteza neno lako la siri?
|
||||
@ -476,4 +478,6 @@ quit.lockAndQuitBtn=Funga na Acha
|
||||
# Forced Quit
|
||||
quit.forced.message=Baadhi ya kuba hazikuweza kufungwa
|
||||
quit.forced.description=Kufunga kuba kulizuiwa na shughuli zinazosubiri au kufungua faili. Unaweza kulazimisha kufunga vyumba vilivyosalia, hata hivyo kukatiza I/O kunaweza kusababisha upotevu wa data ambayo haijahifadhiwa.
|
||||
quit.forced.forceAndQuitBtn=Lazimisha na Uache
|
||||
quit.forced.forceAndQuitBtn=Lazimisha na Uache
|
||||
|
||||
# Update Reminder
|
@ -21,6 +21,7 @@ error.hyperlink.lookup=இந்தப் பிழையைத் தேடு
|
||||
error.hyperlink.report=இந்தப் பிழையைப் புகாரளி
|
||||
error.technicalDetails=விவரங்கள்:
|
||||
|
||||
|
||||
# Defaults
|
||||
defaults.vault.vaultName=பெட்டகம்
|
||||
|
||||
@ -53,6 +54,7 @@ addvaultwizard.new.fileAlreadyExists=பெட்டகம் பெயருட
|
||||
addvaultwizard.new.locationDoesNotExist=குறிப்பிட்ட பாதையில் ஒரு கோப்பகம் இல்லை அல்லது அணுக முடியாது
|
||||
addvaultwizard.new.locationIsNotWritable=குறிப்பிடப்பட்ட பாதையில் எழுதுவதற்கான அணுகல் இல்லை
|
||||
addvaultwizard.new.locationIsOk=உங்கள் பெட்டகத்திற்கு ஏற்ற இடம்
|
||||
### Expert Settings
|
||||
### Password
|
||||
addvaultwizard.new.createVaultBtn=பெட்டகத்தை உருவாக்கவும்
|
||||
addvaultwizard.new.generateRecoveryKeyChoice=உங்கள் கடவுச்சொல் இல்லாமல் உங்கள் தரவை அணுக முடியாது. உங்கள் கடவுச்சொல்லை இழந்தால் மீட்டெடுப்பு விசை தேவையா?
|
||||
@ -300,4 +302,6 @@ quit.lockAndQuitBtn=பூட்டு மற்றும் வெளியே
|
||||
# Forced Quit
|
||||
quit.forced.message=சில பெட்டகங்களை பூட்ட முடியவில்லை
|
||||
quit.forced.description=நிலுவையில் உள்ள செயல்பாடுகள் அல்லது திறந்த கோப்புகளால் பெட்டகங்களைப் பூட்டுவது தடுக்கப்பட்டது. மீதமுள்ள பெட்டகங்களை நீங்கள் கட்டாயப்படுத்தலாம், இருப்பினும் I/O குறுக்கிடுவது சேமிக்கப்படாத தரவை இழக்க நேரிடும்.
|
||||
quit.forced.forceAndQuitBtn=கட்டாயப்படுத்தி வெளியேறு
|
||||
quit.forced.forceAndQuitBtn=கட்டாயப்படுத்தி வெளியேறு
|
||||
|
||||
# Update Reminder
|
@ -5,6 +5,7 @@
|
||||
|
||||
# Error
|
||||
|
||||
|
||||
# Defaults
|
||||
|
||||
# Tray Menu
|
||||
@ -14,6 +15,7 @@
|
||||
## New
|
||||
### Name
|
||||
### Location
|
||||
### Expert Settings
|
||||
### Password
|
||||
### Information
|
||||
## Existing
|
||||
@ -109,4 +111,6 @@ preferences.interface.theme.light=కాంతి
|
||||
|
||||
# Quit
|
||||
|
||||
# Forced Quit
|
||||
# Forced Quit
|
||||
|
||||
# Update Reminder
|
@ -21,6 +21,7 @@ error.hyperlink.lookup=ค้นหาข้อผิดพลาดนี้
|
||||
error.hyperlink.report=รายงานข้อผิดพลาดนี้
|
||||
error.technicalDetails=รายละเอียด:
|
||||
|
||||
|
||||
# Defaults
|
||||
defaults.vault.vaultName=Vault
|
||||
|
||||
@ -53,6 +54,7 @@ addvaultwizard.new.fileAlreadyExists=คำเตือน: มีชื่อ
|
||||
addvaultwizard.new.locationDoesNotExist=ไม่มีไดเรกทอรีในตำแหน่งที่คุณเลือก หรือไม่สามารถเข้าถึงได้
|
||||
addvaultwizard.new.locationIsNotWritable=ไม่มีสิทธิ์ในการเขียนตำแหน่งที่คุณเลือก
|
||||
addvaultwizard.new.locationIsOk=ตำแหน่งนี้เหมาะสมสำหรับ Vault ของคุณ
|
||||
### Expert Settings
|
||||
### Password
|
||||
addvaultwizard.new.createVaultBtn=สร้าง Vault
|
||||
addvaultwizard.new.generateRecoveryKeyChoice=หากคุณลืมรหัสผ่าน คุณจะไม่สามารถเข้าถึงข้อมูลเหล่านี้ได้ คุณต้องการที่จะสร้างรหัสกู้คืนหรือไม่?
|
||||
@ -174,4 +176,6 @@ vaultOptions.mount.mountPoint.directoryPickerButton=เลือก...
|
||||
|
||||
# Quit
|
||||
|
||||
# Forced Quit
|
||||
# Forced Quit
|
||||
|
||||
# Update Reminder
|
@ -15,11 +15,14 @@ generic.button.next=İleri
|
||||
generic.button.print=Yazdır
|
||||
|
||||
# Error
|
||||
error.message=Hata: %s
|
||||
error.description=Uups! Cryptomator bunun olmasını beklemiyordu. Bu hata için mevcut çözümlere bakabilirsiniz. Ya da henüz bildirilmediyse, bunu raporlamaktan çekinmeyin.
|
||||
error.hyperlink.lookup=Bu hatayı ara
|
||||
error.message=Bir hata oluştu
|
||||
error.description=Cryptomator bunun olmasını beklemiyordu. Bu hata için mevcut çözümlere bakabilirsiniz. Ya da henüz bildirilmediyse, bunu raporlamaktan çekinmeyin.
|
||||
error.hyperlink.lookup=Bu hatayı araştır
|
||||
error.hyperlink.report=Bu hatayı bildir
|
||||
error.technicalDetails=Detaylar:
|
||||
error.existingSolutionDescription=Cryptomator bunun olmasını beklemiyordu. Ancak bu hata için hali hazırda bir çözüm olduğunu bulduk. Lütfen aşağıdaki bağlantıya göz atın.
|
||||
error.hyperlink.solution=Çözüme bak
|
||||
|
||||
|
||||
# Defaults
|
||||
defaults.vault.vaultName=Kasa
|
||||
@ -46,7 +49,7 @@ addvaultwizard.new.namePrompt=Kasa Adı
|
||||
addvaultwizard.new.locationInstruction=Cryptomator kasanızın şifreli dosyalarını nerede depolasın?
|
||||
addvaultwizard.new.locationLabel=Depolama konumu
|
||||
addvaultwizard.new.locationPrompt=…
|
||||
addvaultwizard.new.directoryPickerLabel=Özel Konum
|
||||
addvaultwizard.new.directoryPickerLabel=Diğer konum
|
||||
addvaultwizard.new.directoryPickerButton=Seç…
|
||||
addvaultwizard.new.directoryPickerTitle=Dizin Seç
|
||||
addvaultwizard.new.fileAlreadyExists=Kasa adına sahip bir dosya veya dizin zaten mevcut
|
||||
@ -59,6 +62,12 @@ addvaultwizard.new.validCharacters.message=Kasa adı aşağıdaki karakterleri i
|
||||
addvaultwizard.new.validCharacters.chars=Kelime karakterleri (örn. a, ж veya 수)
|
||||
addvaultwizard.new.validCharacters.numbers=Sayılar
|
||||
addvaultwizard.new.validCharacters.dashes=Tire (%s) veya alt çizgi (%s)
|
||||
### Expert Settings
|
||||
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=Uzman düzeyi ayarları etkinleştir
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=36 ile 220 arasında bir değer girin (varsayılan 220)
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=Daha fazlasını öğrenmek için dökümantasyonu açın.
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.title=Şifrelenmiş dosya isimleri için maksimum uzunluk
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.valid=Geçerli
|
||||
### Password
|
||||
addvaultwizard.new.createVaultBtn=Kasa Oluştur
|
||||
addvaultwizard.new.generateRecoveryKeyChoice=Şifreniz olmadan verilerinize erişemeyeceksiniz. Şifrenizi kaybetmeniz durumunda kullanabileceğiniz bir kurtarma anahtarı ister misiniz?
|
||||
@ -110,10 +119,10 @@ forgetPassword.confirmBtn=Şifreyi Unut
|
||||
# Unlock
|
||||
unlock.title="%s" kilidini aç
|
||||
unlock.passwordPrompt="%s" için şifre girin:
|
||||
unlock.savePassword=Şifreyi Hatırla
|
||||
unlock.unlockBtn=Kilidi Aç
|
||||
unlock.savePassword=Şifreyi hatırla
|
||||
unlock.unlockBtn=Kilit aç
|
||||
## Select
|
||||
unlock.chooseMasterkey.message=Ana anahtar dosyası bulunamadı
|
||||
unlock.chooseMasterkey.message=Master anahtar dosyası bulunamadı
|
||||
unlock.chooseMasterkey.description=Bu kasa için masterkey dosyası beklenen konumda bulunamadı. Lütfen anahtar dosyasını manuel olarak seçin.
|
||||
unlock.chooseMasterkey.filePickerTitle=Masterkey Dosyasını Seç
|
||||
unlock.chooseMasterkey.filePickerMimeDesc=Cryptomator Ana anahtarı
|
||||
@ -126,6 +135,7 @@ unlock.success.revealBtn=Sürücüyü Göster
|
||||
unlock.error.customPath.message=Kasa özel yola bağlanamıyor
|
||||
unlock.error.customPath.description.notSupported=Özel yolu kullanmaya devam etmek istiyorsanız, lütfen tercihlere gidin ve onu destekleyen bir cilt türü seçin. Aksi takdirde kasa seçeneklerine gidin ve desteklenen bir bağlama noktası seçin.
|
||||
unlock.error.customPath.description.notExists=Özel bağlama yolu mevcut değil. Ya yerel dosya sisteminizde oluşturun ya da kasa seçeneklerinde değiştirin.
|
||||
unlock.error.customPath.description.inUse=Sürücü harfi "%s" zaten kullanımdadır.
|
||||
unlock.error.customPath.description.generic=Bu kasa için özel bir bağlama yolu seçtiniz, ancak bunu kullanmak şu mesajla başarısız oldu: %s
|
||||
## Hub
|
||||
hub.noKeychain.message=Cihaz anahtarına erişilemiyor
|
||||
@ -487,4 +497,6 @@ quit.lockAndQuitBtn=Kilitle ve Çık
|
||||
# Forced Quit
|
||||
quit.forced.message=Bazı kasalar kilitlenemedi
|
||||
quit.forced.description=Kasaların kilitlenmesi, bekleyen işlemler veya açık dosyalar tarafından engellendi. Kalan kasaları zorla kilitleyebilirsiniz, ancak G/Ç'nin kesilmesi kaydedilmemiş verilerin kaybına neden olabilir.
|
||||
quit.forced.forceAndQuitBtn=Zorla ve Çık
|
||||
quit.forced.forceAndQuitBtn=Zorla ve Çık
|
||||
|
||||
# Update Reminder
|
@ -21,6 +21,7 @@ error.hyperlink.lookup=Дізнатися більше про цю помилк
|
||||
error.hyperlink.report=Повідомити про помилку
|
||||
error.technicalDetails=Подробиці:
|
||||
|
||||
|
||||
# Defaults
|
||||
defaults.vault.vaultName=Сховище
|
||||
|
||||
@ -59,6 +60,7 @@ addvaultwizard.new.validCharacters.message=Назва сховища може м
|
||||
addvaultwizard.new.validCharacters.chars=Літери (напр. a, ж or 수)
|
||||
addvaultwizard.new.validCharacters.numbers=Цифри
|
||||
addvaultwizard.new.validCharacters.dashes=Дефіс (%s) або підкреслення (%s)
|
||||
### Expert Settings
|
||||
### Password
|
||||
addvaultwizard.new.createVaultBtn=Створити сховище
|
||||
addvaultwizard.new.generateRecoveryKeyChoice=Ви не зможете отримати доступ до своїх даних, якщо втратите пароль. Хочете створити ключ відновлення на випадок втрати паролю?
|
||||
@ -358,4 +360,6 @@ convertVault.hubToPassword.success.description=Тепер ви можете ро
|
||||
|
||||
# Quit
|
||||
|
||||
# Forced Quit
|
||||
# Forced Quit
|
||||
|
||||
# Update Reminder
|
@ -20,6 +20,9 @@ error.description=Oops! Cryptomator không mong đợi điều này xảy ra. B
|
||||
error.hyperlink.lookup=Tìm kiếm lỗi này
|
||||
error.hyperlink.report=Báo cáo lỗi
|
||||
error.technicalDetails=Chi tiết:
|
||||
error.existingSolutionDescription=Cryptomator không mong đợi điều này xảy ra. Nhưng chúng tôi đã tìm thấy một giải pháp hiện có cho lỗi này. Vui lòng xem qua liên kết sau.
|
||||
error.hyperlink.solution=Tra cứu giải pháp
|
||||
|
||||
|
||||
# Defaults
|
||||
defaults.vault.vaultName=Vault
|
||||
@ -59,6 +62,7 @@ addvaultwizard.new.validCharacters.message=Tên vault có thể chứa những k
|
||||
addvaultwizard.new.validCharacters.chars=Các ký tự trong từ (ví dụ: a, ж hoặc 수)
|
||||
addvaultwizard.new.validCharacters.numbers=Số
|
||||
addvaultwizard.new.validCharacters.dashes=Dấu gạch ngang (%s) hoặc dấu gạch dưới (%s)
|
||||
### Expert Settings
|
||||
### Password
|
||||
addvaultwizard.new.createVaultBtn=Tạo Vault
|
||||
addvaultwizard.new.generateRecoveryKeyChoice=Bạn sẽ không thể truy cập dữ liệu của mình nếu không có mật khẩu. Bạn có muốn có khóa khôi phục cho trường hợp mất mật khẩu không?
|
||||
@ -82,6 +86,7 @@ addvault.new.readme.accessLocation.2=Đây là vị trí truy cập vault của
|
||||
addvault.new.readme.accessLocation.3=Bất kỳ tệp nào được thêm vào đây sẽ được mã hóa bởi Cryptomator. Bạn có thể làm việc trên nó như trên bất kỳ ổ đĩa/thư mục nào khác. Đây chỉ là chế độ xem nội dung được giải mã của nó, các tệp của bạn luôn được mã hóa trên ổ cứng của bạn.
|
||||
addvault.new.readme.accessLocation.4=Bạn hoàn toàn có thể xoá tập tin này.
|
||||
## Existing
|
||||
addvaultwizard.existing.instruction=Chọn tệp "vault.cryptomator" trong vault hiện tại của bạn. Nếu chỉ tồn tại một tệp có tên "masterkey.cryptomator", hãy chọn tệp đó để thay thế.
|
||||
addvaultwizard.existing.chooseBtn=Chọn…
|
||||
addvaultwizard.existing.filePickerTitle=Chọn Tập Tin Vault
|
||||
addvaultwizard.existing.filePickerMimeDesc=Cryptomator Vault
|
||||
@ -113,6 +118,7 @@ unlock.savePassword=Nhớ mật khẩu
|
||||
unlock.unlockBtn=Mở khoá
|
||||
## Select
|
||||
unlock.chooseMasterkey.message=Không tìm thấy tệp Masterkey
|
||||
unlock.chooseMasterkey.description=Cryptomator không thể tìm thấy tệp khóa chính cho vault "%s". Vui lòng chọn tệp khoá theo cách thủ công.
|
||||
unlock.chooseMasterkey.filePickerTitle=Chọn tệp Masterkey
|
||||
unlock.chooseMasterkey.filePickerMimeDesc=Khóa chính Cryptomator
|
||||
## Success
|
||||
@ -121,7 +127,15 @@ unlock.success.description=Nội dung trong vault "%s" đã có thể được t
|
||||
unlock.success.rememberChoice=Ghi nhớ lựa chọn, không hiện lại
|
||||
unlock.success.revealBtn=Hiển thị Ổ đĩa
|
||||
## Failure
|
||||
unlock.error.customPath.message=Không thể gắn vault vào đường dẫn tùy chỉnh
|
||||
unlock.error.customPath.description.notSupported=Nếu bạn muốn tiếp tục sử dụng đường dẫn tuỳ chỉnh, vui lòng chuyển đến tuỳ chọn và chọn loại ổ đĩa hỗ trợ nó. Nếu không, hãy chuyển đến tuỳ chọn vault và chọn điểm gắn kết được hỗ trợ.
|
||||
unlock.error.customPath.description.notExists=Đường dẫn gắn kết tuỳ chỉnh không tồn tại. Tạo nó trong hệ thống tệp cục bộ của bạn hoặc thay đổi nó trong các tuỳ chọn vault.
|
||||
unlock.error.customPath.description.inUse=Ký tự ổ đĩa "%s" đã được sử dụng.
|
||||
unlock.error.customPath.description.generic=Bạn đã chọn một đường dẫn gắn kết tuỳ chỉnh cho vault này, nhưng sử dụng nó không thành công với thông báo: %s
|
||||
## Hub
|
||||
hub.noKeychain.message=Không thể truy cập khoá thiết bị
|
||||
hub.noKeychain.description=Để mở khoá vault Hub, cần có khoá thiết bị, khoá này được bảo mật bằng chuỗi khoá. Để tiếp tục, hãy bật “%s” và chọn một chuỗi khoá trong tuỳ chọn.
|
||||
hub.noKeychain.openBtn=Mở Tuỳ chọn
|
||||
### Waiting
|
||||
hub.auth.message=Đang chờ xác thực…
|
||||
hub.auth.description=Bạn sẽ tự động được chuyển hướng đến trang đăng nhập.
|
||||
@ -131,6 +145,7 @@ hub.receive.message=Đang xử lý phản hồi…
|
||||
hub.receive.description=Cryptomator đang nhận và xử lý phản hồi từ Hub. Vui lòng chờ.
|
||||
### Register Device
|
||||
hub.register.message=Tên thiết bị bắt buộc
|
||||
hub.register.description=Đây dường như là lần truy cập Hub đầu tiên từ thiết bị này. Để xác định nó để cấp quyền truy cập, bạn cần đặt tên cho thiết bị này.
|
||||
hub.register.nameLabel=Tên thiết bị
|
||||
hub.register.occupiedMsg=Tên đã sử dụng
|
||||
hub.register.registerBtn=Xác nhận
|
||||
@ -144,10 +159,13 @@ hub.registerFailed.description=Lỗi phát sinh trong quá trình đặt tên.
|
||||
hub.unauthorized.message=Truy cập bị từ chối
|
||||
hub.unauthorized.description=Thiết bị của bạn chưa được phép truy cập vault này. Yêu cầu chủ sở hữu cấp phép.
|
||||
### License Exceeded
|
||||
hub.invalidLicense.message=Giấy phép Hub không hợp lệ
|
||||
hub.invalidLicense.description=Phiên bản Cryptomator Hub của bạn có giấy phép không hợp lệ. Vui lòng thông báo cho quản trị viên Hub để nâng cấp hoặc gia hạn giấy phép.
|
||||
|
||||
# Lock
|
||||
## Force
|
||||
lock.forced.message=Khóa thất bại
|
||||
lock.forced.description=Việc khoá "%s" đã bị chặn bởi các hoạt động đang chờ xử lý hoặc các tệp đang mở. Bạn có thể buộc khoá vault này, tuy nhiên, việc gián đoạn I/O có thể dẫn đến mất dữ liệu chưa lưu.
|
||||
lock.forced.retryBtn=Thử lại
|
||||
lock.forced.forceBtn=Ép Khoá
|
||||
## Failure
|
||||
@ -158,21 +176,30 @@ lock.fail.description=Không thể khoá vault "%s". Hãy chắc rằng phần v
|
||||
migration.title=Nâng cấp Vault
|
||||
## Start
|
||||
migration.start.header=Nâng cấp Vault
|
||||
migration.start.text=Để mở vault "%s" của bạn trong phiên bản Cryptomator mới này, vault cần được nâng cấp lên định dạng mới hơn. Trước khi làm điều này, bạn nên biết những điều sau đây:
|
||||
migration.start.remarkUndone=Không thể hoàn tác nâng cấp này.
|
||||
migration.start.remarkVersions=Các phiên bản cũ hơn của Cryptomator sẽ không thể mở vault đã nâng cấp.
|
||||
migration.start.remarkCanRun=Bạn phải chắc chắn rằng mọi thiết bị mà bạn truy cập vào vault đều có thể chạy phiên bản Cryptomator này.
|
||||
migration.start.remarkSynced=Bạn phải đảm bảo rằng vault của mình được đồng bộ hoá hoàn toàn trên thiết bị này và trên các thiết bị khác trước khi nâng cấp.
|
||||
migration.start.confirm=Tôi đã đọc và hiểu thông tin trên
|
||||
## Run
|
||||
migration.run.enterPassword=Nhập mật khẩu cho "%s"
|
||||
migration.run.startMigrationBtn=Chuyển Vault
|
||||
migration.run.progressHint=Việc này có thể mất một chút thời gian…
|
||||
## Success
|
||||
migration.success.nextStepsInstructions=Đã nâng cấp "%s" thành công.\nBây giờ bạn có thể mở khóa vault của mình.
|
||||
migration.success.unlockNow=Mở khóa bây giờ
|
||||
## Missing file system capabilities
|
||||
migration.error.missingFileSystemCapabilities.title=Hệ thống tệp không được hỗ trợ
|
||||
migration.error.missingFileSystemCapabilities.description=Quá trình nâng cấp chưa được bắt đầu vì vault của bạn được đặt trên một hệ thống tệp không đủ khả năng.
|
||||
migration.error.missingFileSystemCapabilities.reason.LONG_FILENAMES=Hệ thống tệp không hỗ trợ tên tệp dài.
|
||||
migration.error.missingFileSystemCapabilities.reason.LONG_PATHS=Hệ thống tệp không hỗ trợ đường dẫn dài.
|
||||
migration.error.missingFileSystemCapabilities.reason.READ_ACCESS=Hệ thống tệp không cho phép đọc.
|
||||
migration.error.missingFileSystemCapabilities.reason.WRITE_ACCESS=Hệ thống tệp không cho phép ghi vào.
|
||||
## Impossible
|
||||
migration.impossible.heading=Không thể di chuyển vault
|
||||
migration.impossible.reason=Vault không thể được nâng cấp tự động vì vị trí lưu trữ hoặc điểm truy cập của nó không tương thích.
|
||||
migration.impossible.moreInfo=Vault vẫn có thể được mở bằng phiên bản cũ hơn. Để biết hướng dẫn về cách nâng cấp vault theo cách thủ công, hãy truy cập
|
||||
|
||||
# Health Check
|
||||
## Start
|
||||
@ -189,12 +216,38 @@ health.fail.ioError=Đã xảy ra lỗi khi truy cập và đọc tệp config.
|
||||
health.fail.parseError=Lỗi xuất hiện khi phân tích cú pháp trong cấu hình của vault.
|
||||
health.fail.moreInfo=Thêm thông tin
|
||||
## Check Selection
|
||||
health.checkList.description=Chọn kiểm tra trong danh sách bên trái hoặc sử dụng các nút bên dưới.
|
||||
health.checkList.selectAllButton=Chọn Tất cả Kiểm tra
|
||||
health.checkList.deselectAllButton=Bỏ chọn Tất cả Kiểm tra
|
||||
health.check.runBatchBtn=Chạy Kiểm tra Đã chọn
|
||||
## Detail view
|
||||
health.check.detail.noSelectedCheck=Để biết kết quả, hãy chọn kiểm tra sức khoẻ đã hoàn thành trong danh sách bên trái.
|
||||
health.check.detail.checkScheduled=Việc kiểm tra đã được lên lịch.
|
||||
health.check.detail.checkRunning=Kiểm tra hiện đang chạy…
|
||||
health.check.detail.checkSkipped=Kiểm tra không được chọn để chạy.
|
||||
health.check.detail.checkFinished=Việc kiểm tra đã kết thúc thành công.
|
||||
health.check.detail.checkFinishedAndFound=Kiểm tra chạy xong. Vui lòng xem lại kết quả.
|
||||
health.check.detail.checkFailed=Kiểm tra đã thoát do lỗi.
|
||||
health.check.detail.checkCancelled=Việc kiểm tra đã bị huỷ bỏ.
|
||||
health.check.detail.listFilters.label=Lọc
|
||||
health.check.detail.fixAllSpecificBtn=Sửa tất cả các loại
|
||||
health.check.exportBtn=Xuất Báo Cáo
|
||||
## Result view
|
||||
health.result.severityFilter.all=Mức độ nghiêm trọng - Tất cả
|
||||
health.result.severityFilter.good=Tốt
|
||||
health.result.severityFilter.info=Thông tin
|
||||
health.result.severityFilter.warn=Cảnh báo
|
||||
health.result.severityFilter.crit=Nghiêm trọng
|
||||
health.result.severityTip.good=Mức độ nghiêm trọng: Tốt\nCấu trúc vault bình thường.
|
||||
health.result.severityTip.info=Mức độ nghiêm trọng: Thông tin\nCấu trúc vault nguyên vẹn, đề xuất sửa chữa.
|
||||
health.result.severityTip.warn=Mức độ nghiêm trọng: Cảnh báo\nCấu trúc vault bị hỏng, rất nên sửa chữa.
|
||||
health.result.severityTip.crit=Mức độ nghiêm trọng: Nghiêm trọng\nCấu trúc vault bị hỏng, mất dữ liệu được xác định.
|
||||
health.result.fixStateFilter.all=Trạng thái sửa lỗi - Tất cả
|
||||
health.result.fixStateFilter.fixable=Có thể sửa chữa
|
||||
health.result.fixStateFilter.notFixable=Không thể sửa chữa
|
||||
health.result.fixStateFilter.fixing=Đang sửa…
|
||||
health.result.fixStateFilter.fixed=Đã sửa
|
||||
health.result.fixStateFilter.fixFailed=Sửa lỗi không thành công
|
||||
## Fix Application
|
||||
health.fix.fixBtn=Sửa
|
||||
health.fix.successTip=Sửa thành công
|
||||
@ -226,7 +279,17 @@ preferences.interface.showMinimizeButton=Hiện nút thu nhỏ
|
||||
preferences.interface.showTrayIcon=Hiển thị biểu tượng khay (yêu cầu khởi động lại)
|
||||
## Volume
|
||||
preferences.volume=Ổ lưu trữ ảo
|
||||
preferences.volume.type=Loại Ổ đĩa
|
||||
preferences.volume.type.automatic=Tự động
|
||||
preferences.volume.docsTooltip=Mở tài liệu để tìm hiểu thêm về các loại ổ đĩa khác nhau.
|
||||
preferences.volume.fuseRestartRequired=Để áp dụng các thay đổi, Cryptomator cần được khởi động lại.
|
||||
preferences.volume.tcp.port=Cổng TCP
|
||||
preferences.volume.supportedFeatures=Loại ổ đĩa đã chọn hỗ trợ các tính năng sau:
|
||||
preferences.volume.feature.mountAuto=Lựa chọn điểm gắn kết tự động
|
||||
preferences.volume.feature.mountToDir=Thư mục tuỳ chỉnh làm điểm gắn kết
|
||||
preferences.volume.feature.mountToDriveLetter=Ký tự ổ đĩa làm điểm gắn kết
|
||||
preferences.volume.feature.mountFlags=Tuỳ chọn gắn kết tuỳ chỉnh
|
||||
preferences.volume.feature.readOnly=Gắn kết chỉ đọc
|
||||
## Updates
|
||||
preferences.updates=Cập nhật
|
||||
preferences.updates.currentVersion=Phiên bản hiện tại: %s
|
||||
@ -248,27 +311,35 @@ preferences.about=Giới thiệu
|
||||
stats.title=Thống kê về %s
|
||||
stats.cacheHitRate=Tỷ lệ truy cập bộ nhớ cache
|
||||
## Read
|
||||
stats.read.throughput.idle=Đọc: không có
|
||||
stats.read.throughput.idle=Đọc: nhàn rỗi
|
||||
stats.read.throughput.kibs=Đọc: %.2f KiB/s
|
||||
stats.read.throughput.mibs=Đọc: %.2f MiB/s
|
||||
stats.read.total.data.none=Dữ liệu đã đọc: -
|
||||
stats.read.total.data.kib=Dữ liệu đã đọc: %.1f KiB
|
||||
stats.read.total.data.mib=Dữ liệu đã đọc: %.1f MiB
|
||||
stats.read.total.data.gib=Dữ liệu đã đọc: %.1f GiB
|
||||
stats.decr.total.data.none=Dữ liệu được giải mã: -
|
||||
stats.decr.total.data.mib=Dữ liệu được giải mã: %.1f MiB
|
||||
stats.decr.total.data.gib=Dữ liệu được giải mã: %.1f GiB
|
||||
stats.decr.total.data.none=Dữ liệu đã giải mã: -
|
||||
stats.decr.total.data.kib=Dữ liệu đã giải mã: %.1f KiB
|
||||
stats.decr.total.data.mib=Dữ liệu đã giải mã: %.1f MiB
|
||||
stats.decr.total.data.gib=Dữ liệu đã giải mã: %.1f GiB
|
||||
stats.read.accessCount=Tổng đọc: %d
|
||||
## Write
|
||||
stats.write.throughput.idle=Ghi: tạm ngưng
|
||||
stats.write.throughput.idle=Ghi: nhàn rỗi
|
||||
stats.write.throughput.kibs=Ghi: %.2f KiB/s
|
||||
stats.write.throughput.mibs=Ghi: %.2f MiB/s
|
||||
stats.write.total.data.none=Dữ liệu đã ghi: -
|
||||
stats.write.total.data.kib=Dữ liệu đã ghi: %.1f KiB
|
||||
stats.write.total.data.mib=Dữ liệu đã ghi: %.1f MiB
|
||||
stats.write.total.data.gib=Dữ liệu đã ghi: %.1f GiB
|
||||
stats.encr.total.data.none=Dữ liệu được mã hóa: -
|
||||
stats.encr.total.data.mib=Dữ liệu được mã hóa: %.1f MiB
|
||||
stats.encr.total.data.gib=Dữ liệu được mã hóa: %.1f GiB
|
||||
stats.encr.total.data.none=Dữ liệu đã mã hoá: -
|
||||
stats.encr.total.data.kib=Dữ liệu đã mã hoá: %.1f KiB
|
||||
stats.encr.total.data.mib=Dữ liệu đã mã hoá: %.1f MiB
|
||||
stats.encr.total.data.gib=Dữ liệu đã mã hoá: %.1f GiB
|
||||
stats.write.accessCount=Tổng ghi: %d
|
||||
|
||||
## Accesses
|
||||
stats.access.current=Truy cập: %d
|
||||
stats.access.total=Tổng số lần truy cập: %d
|
||||
|
||||
|
||||
# Main Window
|
||||
@ -299,12 +370,18 @@ main.vaultDetail.passwordSavedInKeychain=Đã lưu mật khẩu
|
||||
main.vaultDetail.unlockedStatus=ĐÃ MỞ KHÓA
|
||||
main.vaultDetail.accessLocation=Nội dung trong vault của bạn có thể truy cập ở đây:
|
||||
main.vaultDetail.revealBtn=Hiển thị Ổ đĩa
|
||||
main.vaultDetail.copyUri=Sao chép URI
|
||||
main.vaultDetail.lockBtn=Khoá
|
||||
main.vaultDetail.bytesPerSecondRead=Đọc:
|
||||
main.vaultDetail.bytesPerSecondWritten=Ghi:
|
||||
main.vaultDetail.throughput.idle=chờ
|
||||
main.vaultDetail.throughput.idle=nhàn rỗi
|
||||
main.vaultDetail.throughput.kbps=%.1f Kib/s
|
||||
main.vaultDetail.throughput.mbps=%.1f MiB/s
|
||||
main.vaultDetail.stats=Thống kê Vault
|
||||
main.vaultDetail.locateEncryptedFileBtn=Định vị Tệp Đã mã hoá
|
||||
main.vaultDetail.locateEncryptedFileBtn.tooltip=Chọn một tệp từ vaule của bạn để xác định vị trí đối tác được mã hoá của nó
|
||||
main.vaultDetail.encryptedPathsCopied=Đường dẫn Đã sao chép vào Bảng tạm!
|
||||
main.vaultDetail.filePickerTitle=Chọn Tệp Bên trong Vault
|
||||
### Missing
|
||||
main.vaultDetail.missing.info=Cryptomator không thể tìm thấy vault tại đường dẫn này.
|
||||
main.vaultDetail.missing.recheck=Kiểm tra lại
|
||||
@ -321,6 +398,7 @@ main.vaultDetail.error.windowTitle=Lỗi khi tải dữ liệu
|
||||
# Wrong File Alert
|
||||
wrongFileAlert.title=Cách mã hóa tệp
|
||||
wrongFileAlert.message=Bạn đã cố gắng mã hóa các tệp này?
|
||||
wrongFileAlert.description=Với mục đích này, Cryptomator cung cấp một ổ đĩa trong trình quản lý tệp hệ thống của bạn.
|
||||
wrongFileAlert.instruction.0=Để mã hóa tệp, hãy làm theo các bước sau:
|
||||
wrongFileAlert.instruction.1=1. Mở Vault của bạn.
|
||||
wrongFileAlert.instruction.2=2. Bấm vào "Hiển thị" để mở ổ đĩa trên trình quản lý tệp.
|
||||
@ -331,7 +409,7 @@ wrongFileAlert.link=Để được hỗ trợ thêm, hãy truy cập
|
||||
## General
|
||||
vaultOptions.general=Chung
|
||||
vaultOptions.general.vaultName=Tên Vault
|
||||
vaultOptions.general.autoLock.lockAfterTimePart1=Khóa khi không hoạt động trong
|
||||
vaultOptions.general.autoLock.lockAfterTimePart1=Khoá khi nhàn rỗi trong
|
||||
vaultOptions.general.autoLock.lockAfterTimePart2=phút
|
||||
vaultOptions.general.unlockAfterStartup=Mở khóa vault khi khởi động Cryptomator
|
||||
vaultOptions.general.actionAfterUnlock=Sau khi mở khóa thành công
|
||||
@ -341,12 +419,18 @@ vaultOptions.general.actionAfterUnlock.ask=Hỏi
|
||||
vaultOptions.general.startHealthCheckBtn=Bắt đầu Kiểm tra sức khỏe
|
||||
|
||||
## Mount
|
||||
vaultOptions.mount=Gắn kết
|
||||
vaultOptions.mount.info=Các tuỳ chọn phụ thuộc vào loại ổ đĩa đã chọn.
|
||||
vaultOptions.mount.linkToPreferences=Mở tuỳ chọn ổ đĩa ảo
|
||||
vaultOptions.mount.readonly=Chỉ đọc
|
||||
vaultOptions.mount.customMountFlags=Cờ gắn kết tuỳ chỉnh
|
||||
vaultOptions.mount.winDriveLetterOccupied=đã bị chiếm
|
||||
vaultOptions.mount.mountPoint=Đường dẫn gắn kết
|
||||
vaultOptions.mount.mountPoint.auto=Tự động chọn một vị trí thích hợp
|
||||
vaultOptions.mount.mountPoint.driveLetter=Sử dụng ký tự ổ đĩa được chỉ định
|
||||
vaultOptions.mount.mountPoint.custom=Sử dụng thư mục đã chọn
|
||||
vaultOptions.mount.mountPoint.directoryPickerButton=Chọn…
|
||||
vaultOptions.mount.mountPoint.directoryPickerTitle=Chọn một thư mục
|
||||
## Master Key
|
||||
vaultOptions.masterkey=Mật khẩu
|
||||
vaultOptions.masterkey.changePasswordBtn=Đổi mật khẩu
|
||||
@ -355,6 +439,9 @@ vaultOptions.masterkey.recoveryKeyExplanation=Khóa khôi phục là cách duy n
|
||||
vaultOptions.masterkey.showRecoveryKeyBtn=Hiện Khóa Khôi Phục
|
||||
vaultOptions.masterkey.recoverPasswordBtn=Đặt lại Mật khẩu
|
||||
## Hub
|
||||
vaultOptions.hub=Khôi phục
|
||||
vaultOptions.hub.convertInfo=Bạn có thể sử dụng khoá khôi phục để chuyển đổi vault Hub này thành vault dựa-trên-mật-khẩu trong trường hợp khẩn cấp.
|
||||
vaultOptions.hub.convertBtn=Chuyển đổi thành Vault Dựa-trên-Mật-khẩu
|
||||
|
||||
# Recovery Key
|
||||
## Display Recovery Key
|
||||
@ -366,7 +453,10 @@ recoveryKey.display.StorageHints=Giữ ở một nơi rất an toàn, ví dụ:\
|
||||
## Reset Password
|
||||
### Enter Recovery Key
|
||||
recoveryKey.recover.title=Đặt lại Mật khẩu
|
||||
recoveryKey.recover.prompt=Nhập khoá khôi phục cho "%s":
|
||||
recoveryKey.recover.correctKey=Đây là khóa khôi phục hợp lệ
|
||||
recoveryKey.recover.wrongKey=Khoá phục hồi này thuộc về một vault khác
|
||||
recoveryKey.recover.invalidKey=Khoá khôi phục này không hợp lệ
|
||||
recoveryKey.printout.heading=Khóa Khôi phục Cryptomator\n"%s"\n
|
||||
### Reset Password
|
||||
recoveryKey.recover.resetBtn=Đặt lại
|
||||
@ -375,6 +465,11 @@ recoveryKey.recover.resetSuccess.message=Đặt lại mật khẩu thành công
|
||||
recoveryKey.recover.resetSuccess.description=Bạn có thể mở khóa vault với mật khẩu mới.
|
||||
|
||||
# Convert Vault
|
||||
convertVault.title=Chuyển đổi Vault
|
||||
convertVault.convert.convertBtn.before=Chuyển đổi
|
||||
convertVault.convert.convertBtn.processing=Đang chuyển đổi…
|
||||
convertVault.success.message=Chuyển đổi thành công
|
||||
convertVault.hubToPassword.success.description=Bây giờ bạn có thể mở khoá vault bằng mật khẩu đã chọn mà không cần truy cập Hub.
|
||||
|
||||
# New Password
|
||||
newPassword.promptText=Nhập mật khẩu mới
|
||||
@ -397,4 +492,6 @@ quit.lockAndQuitBtn=Khóa và Thoát
|
||||
# Forced Quit
|
||||
quit.forced.message=Không thể khóa một số vault
|
||||
quit.forced.description=Việc khoá vault đã bị chặn bởi các hoạt động đang chờ xử lý hoặc các tệp đang mở. Bạn có thể buộc khóa các vault còn lại, tuy nhiên việc làm gián đoạn đọc/ghi có thể dẫn đến mất dữ liệu chưa được lưu.
|
||||
quit.forced.forceAndQuitBtn=Bắt buộc và Thoát
|
||||
quit.forced.forceAndQuitBtn=Bắt buộc và Thoát
|
||||
|
||||
# Update Reminder
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user