mirror of
https://github.com/vrtmrz/obsidian-livesync.git
synced 2026-07-31 08:51:23 +00:00
Merge pull request #1015 from zeedif/refactor/i18n-source-keys
refactor(i18n): migrate UI text to source-based localization keys
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -1,33 +1,78 @@
|
||||
{
|
||||
", please select the option that best describes the current state of your Vault. The application will then check your files in the most appropriate way based on your selection.": ", please select the option that best describes the current state of your Vault. The application will then check your files in the most appropriate way based on your selection.",
|
||||
"(Active)": "(Active)",
|
||||
"(BETA) Always overwrite with a newer file": "(BETA) Always overwrite with a newer file",
|
||||
"(Beta) Use ignore files": "(Beta) Use ignore files",
|
||||
"(Days passed, 0 to disable automatic-deletion)": "(Days passed, 0 to disable automatic-deletion)",
|
||||
"(e.g., after editing many files whilst offline)": "(e.g., after editing many files whilst offline)",
|
||||
"(e.g., immediately after restoring on another computer, or having recovered from a backup)": "(e.g., immediately after restoring on another computer, or having recovered from a backup)",
|
||||
"(e.g., setting up for the first time on a new smartphone, starting from a clean slate)": "(e.g., setting up for the first time on a new smartphone, starting from a clean slate)",
|
||||
"(ex. Read chunks online) If this option is enabled, LiveSync reads chunks online directly instead of replicating them locally. Increasing Custom chunk size is recommended.": "(ex. Read chunks online) If this option is enabled, LiveSync reads chunks online directly instead of replicating them locally. Increasing Custom chunk size is recommended.",
|
||||
"(MB) If this is set, changes to local and remote files that are larger than this will be skipped. If the file becomes smaller again, a newer one will be used.": "(MB) If this is set, changes to local and remote files that are larger than this will be skipped. If the file becomes smaller again, a newer one will be used.",
|
||||
"(Mega chars)": "(Mega chars)",
|
||||
"(Missing)": "(Missing)",
|
||||
"(Not recommended) If set, credentials will be stored in the file.": "(Not recommended) If set, credentials will be stored in the file.",
|
||||
"(Obsolete) Use an old adapter for compatibility": "(Obsolete) Use an old adapter for compatibility",
|
||||
"(RegExp) Empty to sync all files. Set filter as a regular expression to limit synchronising files.": "(RegExp) Empty to sync all files. Set filter as a regular expression to limit synchronising files.",
|
||||
"(RegExp) If this is set, any changes to local and remote files that match this will be skipped.": "(RegExp) If this is set, any changes to local and remote files that match this will be skipped.",
|
||||
"(Select this if you are already using synchronisation on another computer or smartphone.) This option is suitable if you are new to LiveSync and want to set it up from scratch.": "(Select this if you are already using synchronisation on another computer or smartphone.) This option is suitable if you are new to LiveSync and want to set it up from scratch.",
|
||||
"(Select this if you are configuring this device as the first synchronisation device.) This option is suitable if you are new to LiveSync and want to set it up from scratch.": "(Select this if you are configuring this device as the first synchronisation device.) This option is suitable if you are new to LiveSync and want to set it up from scratch.",
|
||||
"↑: Overwrite Remote": "↑: Overwrite Remote",
|
||||
"↓: Overwrite Local": "↓: Overwrite Local",
|
||||
"⇅: Use newer": "⇅: Use newer",
|
||||
"+1 week": "+1 week",
|
||||
"> [!INFO]- The connected devices have been detected as follows:\n${devices}": "> [!INFO]- The connected devices have been detected as follows:\n${devices}",
|
||||
"⚠️ Important Notice": "⚠️ Important Notice",
|
||||
"⚠️ Please Confirm the Following": "⚠️ Please Confirm the Following",
|
||||
"✔ SELECT": "✔ SELECT",
|
||||
"✔ SYNC": "✔ SYNC",
|
||||
"✔ WATCH": "✔ WATCH",
|
||||
"📡 Off": "📡 Off",
|
||||
"📡 On": "📡 On",
|
||||
"🔴 Disconnected": "🔴 Disconnected",
|
||||
"🕵️ Diag": "🕵️ Diag",
|
||||
"🗑 Delete": "🗑 Delete",
|
||||
"🟢 Connected": "🟢 Connected",
|
||||
"${count} issue(s) detected!": "${count} issue(s) detected!",
|
||||
"A Setup URI is a single string of text containing your server address and authentication details. Using a URI, if one was generated by your server installation script, provides a simple and secure configuration.": "A Setup URI is a single string of text containing your server address and authentication details. Using a URI, if one was generated by your server installation script, provides a simple and secure configuration.",
|
||||
"Accept": "Accept",
|
||||
"Accept in session": "Accept in session",
|
||||
"ACCEPTED": "ACCEPTED",
|
||||
"ACCEPTED (in session)": "ACCEPTED (in session)",
|
||||
"Access Key": "Access Key",
|
||||
"Access Key ID": "Access Key ID",
|
||||
"Action": "Action",
|
||||
"Activate": "Activate",
|
||||
"Active Remote Configuration": "Active Remote Configuration",
|
||||
"Add default patterns": "Add default patterns",
|
||||
"Add new connection": "Add new connection",
|
||||
"AddOn Module (ConfigSync) has not been loaded. This is very unexpected situation. Please report this issue.": "AddOn Module (ConfigSync) has not been loaded. This is very unexpected situation. Please report this issue.",
|
||||
"AddOn Module (HiddenFileSync) has not been loaded. This is very unexpected situation. Please report this issue.": "AddOn Module (HiddenFileSync) has not been loaded. This is very unexpected situation. Please report this issue.",
|
||||
"Advanced": "Advanced",
|
||||
"Advanced Settings": "Advanced Settings",
|
||||
"After restarting, the data on this device will be uploaded to the server as the 'master copy'. Please be aware that any unintended data currently on the server will be completely overwritten.": "After restarting, the data on this device will be uploaded to the server as the 'master copy'. Please be aware that any unintended data currently on the server will be completely overwritten.",
|
||||
"After restarting, the database on this device will be rebuilt using data from the server. If there are any unsynchronised files in this vault, conflicts may occur with the server data.": "After restarting, the database on this device will be rebuilt using data from the server. If there are any unsynchronised files in this vault, conflicts may occur with the server data.",
|
||||
"After that, synchronise to a brand new vault on each other device with the new remote one by one.": "After that, synchronise to a brand new vault on each other device with the new remote one by one.",
|
||||
"All checks passed successfully!": "All checks passed successfully!",
|
||||
"All devices have the same progress value (${progress}). Your devices seem to be synchronised. And be able to proceed with Garbage Collection.": "All devices have the same progress value (${progress}). Your devices seem to be synchronised. And be able to proceed with Garbage Collection.",
|
||||
"All the same or non-existent": "All the same or non-existent",
|
||||
"Allow in session": "Allow in session",
|
||||
"Allow permanently": "Allow permanently",
|
||||
"Also, please note that if you are using Peer-to-Peer synchronization, this configuration will be used when you switch to other methods and connect to a remote server in the future.": "Also, please note that if you are using Peer-to-Peer synchronization, this configuration will be used when you switch to other methods and connect to a remote server in the future.",
|
||||
"Always prompt merge conflicts": "Always prompt merge conflicts",
|
||||
"Analyse": "Analyse",
|
||||
"Analyse database usage": "Analyse database usage",
|
||||
"Analyse database usage and generate a TSV report for diagnosis yourself. You can paste the generated report with any spreadsheet you like.": "Analyse database usage and generate a TSV report for diagnosis yourself. You can paste the generated report with any spreadsheet you like.",
|
||||
"Apply All Selected": "Apply All Selected",
|
||||
"Apply Latest Change if Conflicting": "Apply Latest Change if Conflicting",
|
||||
"Apply preset configuration": "Apply preset configuration",
|
||||
"Apply the settings": "Apply the settings",
|
||||
"Ask a passphrase at every launch": "Ask a passphrase at every launch",
|
||||
"Auto Connect": "Auto Connect",
|
||||
"Auto Start P2P Connection": "Auto Start P2P Connection",
|
||||
"Automatic": "Automatic",
|
||||
"Automatically Sync all files when opening Obsidian.": "Automatically Sync all files when opening Obsidian.",
|
||||
"Available Peers": "Available Peers",
|
||||
"Back": "Back",
|
||||
"Back to non-configured": "Back to non-configured",
|
||||
"Batch database update": "Batch database update",
|
||||
@@ -35,19 +80,31 @@
|
||||
"Batch size": "Batch size",
|
||||
"Batch size of on-demand fetching": "Batch size of on-demand fetching",
|
||||
"Before v0.17.16, we used an old adapter for the local database. Now the new adapter is preferred. However, it needs local database rebuilding. Please disable this toggle when you have enough time. If leave it enabled, also while fetching from the remote database, you will be asked to disable this.": "Before v0.17.16, we used an old adapter for the local database. Now the new adapter is preferred. However, it needs local database rebuilding. Please disable this toggle when you have enough time. If leave it enabled, also while fetching from the remote database, you will be asked to disable this.",
|
||||
"Broadcasting?": "Broadcasting?",
|
||||
"Bucket Name": "Bucket Name",
|
||||
"by resetting the remote, you will be informed on other devices.": "by resetting the remote, you will be informed on other devices.",
|
||||
"Cancel": "Cancel",
|
||||
"Cancel Garbage Collection": "Cancel Garbage Collection",
|
||||
"Changing the encryption algorithm will prevent access to any data previously encrypted with a different algorithm. Ensure that all your devices are configured to use the same algorithm to maintain access to your data.": "Changing the encryption algorithm will prevent access to any data previously encrypted with a different algorithm. Ensure that all your devices are configured to use the same algorithm to maintain access to your data.",
|
||||
"Changing this setting requires migrating existing data (a bit time may be taken) and restarting Obsidian. Please make sure to back up your data before proceeding.": "Changing this setting requires migrating existing data (a bit time may be taken) and restarting Obsidian. Please make sure to back up your data before proceeding.",
|
||||
"Check": "Check",
|
||||
"Check and convert non-path-obfuscated files": "Check and convert non-path-obfuscated files",
|
||||
"Check for documents that have not been converted to path-obfuscated IDs and convert them if necessary.": "Check for documents that have not been converted to path-obfuscated IDs and convert them if necessary.",
|
||||
"Checking connection... Please wait.": "Checking connection... Please wait.",
|
||||
"Chunks": "Chunks",
|
||||
"Close": "Close",
|
||||
"Close & Disconnect": "Close & Disconnect",
|
||||
"Close this dialog": "Close this dialog",
|
||||
"Closed:": "Closed:",
|
||||
"cmdConfigSync.showCustomizationSync": "Show Customization sync",
|
||||
"Comma separated `.gitignore, .dockerignore`": "Comma separated `.gitignore, .dockerignore`",
|
||||
"Command": "Command",
|
||||
"Communicating": "Communicating",
|
||||
"Compaction in progress on remote database...": "Compaction in progress on remote database...",
|
||||
"Compaction on remote database completed successfully.": "Compaction on remote database completed successfully.",
|
||||
"Compaction on remote database failed.": "Compaction on remote database failed.",
|
||||
"Compaction on remote database timed out.": "Compaction on remote database timed out.",
|
||||
"Compare file": "Compare file",
|
||||
"Compare the content of files between on local database and storage. If not matched, you will be asked which one you want to keep.": "Compare the content of files between on local database and storage. If not matched, you will be asked which one you want to keep.",
|
||||
"Compatibility (Conflict Behaviour)": "Compatibility (Conflict Behaviour)",
|
||||
"Compatibility (Database structure)": "Compatibility (Database structure)",
|
||||
@@ -56,48 +113,78 @@
|
||||
"Compatibility (Remote Database)": "Compatibility (Remote Database)",
|
||||
"Compatibility (Trouble addressed)": "Compatibility (Trouble addressed)",
|
||||
"Compute revisions for chunks": "Compute revisions for chunks",
|
||||
"Configuration": "Configuration",
|
||||
"Configuration Encryption": "Configuration Encryption",
|
||||
"Configure": "Configure",
|
||||
"Configure And Change Remote": "Configure And Change Remote",
|
||||
"Configure E2EE": "Configure E2EE",
|
||||
"Configure Remote": "Configure Remote",
|
||||
"Configure the same server information as your other devices again, manually, very advanced users only.": "Configure the same server information as your other devices again, manually, very advanced users only.",
|
||||
"Connect": "Connect",
|
||||
"Connected to Signaling Server (as Peer ID: ${peerId})": "Connected to Signaling Server (as Peer ID: ${peerId})",
|
||||
"Connected:": "Connected:",
|
||||
"Connection Method": "Connection Method",
|
||||
"Connection Settings": "Connection Settings",
|
||||
"Connection:": "Connection:",
|
||||
"Continue anyway": "Continue anyway",
|
||||
"Continue to CouchDB setup": "Continue to CouchDB setup",
|
||||
"Continue to Peer-to-Peer only setup": "Continue to Peer-to-Peer only setup",
|
||||
"Continue to S3/MinIO/R2 setup": "Continue to S3/MinIO/R2 setup",
|
||||
"Copy": "Copy",
|
||||
"Copy Report to clipboard": "Copy Report to clipboard",
|
||||
"CouchDB Configuration": "CouchDB Configuration",
|
||||
"CouchDB Connection Tweak": "CouchDB Connection Tweak",
|
||||
"Create P2P remote": "Create P2P remote",
|
||||
"Cross-platform": "Cross-platform",
|
||||
"Current adapter: {adapter}": "Current adapter: {adapter}",
|
||||
"Custom Headers": "Custom Headers",
|
||||
"Customization Sync": "Customization Sync",
|
||||
"Customization Sync (Beta3)": "Customization Sync (Beta3)",
|
||||
"Data Compression": "Data Compression",
|
||||
"Data to Copy": "Data to Copy",
|
||||
"Database -> Storage": "Database -> Storage",
|
||||
"Database Adapter": "Database Adapter",
|
||||
"Database Name": "Database Name",
|
||||
"Database suffix": "Database suffix",
|
||||
"Date": "Date",
|
||||
"Default": "Default",
|
||||
"Delay conflict resolution of inactive files": "Delay conflict resolution of inactive files",
|
||||
"Delay merge conflict prompt for inactive files.": "Delay merge conflict prompt for inactive files.",
|
||||
"Delete": "Delete",
|
||||
"Delete all customization sync data": "Delete all customization sync data",
|
||||
"Delete all data on the remote server.": "Delete all data on the remote server.",
|
||||
"Delete All of": "Delete All of",
|
||||
"Delete local database to reset or uninstall Self-hosted LiveSync": "Delete local database to reset or uninstall Self-hosted LiveSync",
|
||||
"Delete old metadata of deleted files on start-up": "Delete old metadata of deleted files on start-up",
|
||||
"Delete Remote Configuration": "Delete Remote Configuration",
|
||||
"Delete remote configuration '{name}'?": "Delete remote configuration '{name}'?",
|
||||
"Delete remote configuration '${name}'?": "Delete remote configuration '${name}'?",
|
||||
"DENIED": "DENIED",
|
||||
"DENIED (in session)": "DENIED (in session)",
|
||||
"Deny": "Deny",
|
||||
"Deny in session": "Deny in session",
|
||||
"Deny permanently": "Deny permanently",
|
||||
"Deselect all": "Deselect all",
|
||||
"desktop": "desktop",
|
||||
"Detected Peers": "Detected Peers",
|
||||
"Developer": "Developer",
|
||||
"Device": "Device",
|
||||
"device name": "device name",
|
||||
"Device name": "Device name",
|
||||
"Device name to identify the device. Please use shorter one for the stable peer detection, i.e., \"iphone-16\" or \"macbook-2021\".": "Device name to identify the device. Please use shorter one for the stable peer detection, i.e., \"iphone-16\" or \"macbook-2021\".",
|
||||
"Device Peer ID": "Device Peer ID",
|
||||
"Device Setup Method": "Device Setup Method",
|
||||
"Devices:": "Devices:",
|
||||
"Diagnostic RTCPeerConnection is enabled": "Diagnostic RTCPeerConnection is enabled",
|
||||
"dialog.yourLanguageAvailable": "Self-hosted LiveSync had translations for your language, so the %{Display language} setting was enabled.\n\nNote: Not all messages are translated. We are waiting for your contributions!\nNote 2: If you create an Issue, **please revert to %{lang-def}** and then take screenshots, messages and logs. This can be done in the setting dialogue.\nMay you find it easy to use!",
|
||||
"dialog.yourLanguageAvailable.btnRevertToDefault": "Keep %{lang-def}",
|
||||
"dialog.yourLanguageAvailable.Title": " Translation is available!",
|
||||
"Diff": "Diff",
|
||||
"Different": "Different",
|
||||
"Disables all synchronization and restart.": "Disables all synchronization and restart.",
|
||||
"Disables logging, only shows notifications. Please disable if you report an issue.": "Disables logging, only shows notifications. Please disable if you report an issue.",
|
||||
"Disconnect": "Disconnect",
|
||||
"Dismiss": "Dismiss",
|
||||
"Display Language": "Display Language",
|
||||
"Display name": "Display name",
|
||||
"Do not check configuration mismatch before replication": "Do not check configuration mismatch before replication",
|
||||
@@ -136,33 +223,70 @@
|
||||
"Enable customization sync": "Enable customization sync",
|
||||
"Enable Developers' Debug Tools.": "Enable Developers' Debug Tools.",
|
||||
"Enable edge case treatment features": "Enable edge case treatment features",
|
||||
"Enable P2P Replicator": "Enable P2P Replicator",
|
||||
"Enable poweruser features": "Enable poweruser features",
|
||||
"Enable this if your Object Storage doesn't support CORS": "Enable this if your Object Storage doesn't support CORS",
|
||||
"Enable this option to automatically apply the most recent change to documents even when it conflicts": "Enable this option to automatically apply the most recent change to documents even when it conflicts",
|
||||
"Enabled": "Enabled",
|
||||
"Enabling end-to-end encryption ensures that your data is encrypted on your device before being sent to the remote server. This means that even if someone gains access to the server, they won't be able to read your data without the passphrase. Make sure to remember your passphrase, as it will be required to decrypt your data on other devices.": "Enabling end-to-end encryption ensures that your data is encrypted on your device before being sent to the remote server. This means that even if someone gains access to the server, they won't be able to read your data without the passphrase. Make sure to remember your passphrase, as it will be required to decrypt your data on other devices.",
|
||||
"Encrypt contents on the remote database. If you use the plugin's synchronization feature, enabling this is recommended.": "Encrypt contents on the remote database. If you use the plugin's synchronization feature, enabling this is recommended.",
|
||||
"Encrypting sensitive configuration items": "Encrypting sensitive configuration items",
|
||||
"Encryption Algorithm": "Encryption Algorithm",
|
||||
"Encryption phassphrase. If changed, you should overwrite the server's database with the new (encrypted) files.": "Encryption phassphrase. If changed, you should overwrite the server's database with the new (encrypted) files.",
|
||||
"End-to-End Encryption": "End-to-End Encryption",
|
||||
"Endpoint URL": "Endpoint URL",
|
||||
"Enhance chunk size": "Enhance chunk size",
|
||||
"Enter a folder prefix (optional)": "Enter a folder prefix (optional)",
|
||||
"Enter Server Information": "Enter Server Information",
|
||||
"Enter Setup URI": "Enter Setup URI",
|
||||
"Enter the server information manually": "Enter the server information manually",
|
||||
"Enter TURN credential": "Enter TURN credential",
|
||||
"Enter TURN username": "Enter TURN username",
|
||||
"Enter your Access Key ID": "Enter your Access Key ID",
|
||||
"Enter your Bucket Name": "Enter your Bucket Name",
|
||||
"Enter your database name": "Enter your database name",
|
||||
"Enter your JWT Key ID": "Enter your JWT Key ID",
|
||||
"Enter your JWT secret or private key": "Enter your JWT secret or private key",
|
||||
"Enter your JWT Subject (CouchDB Username)": "Enter your JWT Subject (CouchDB Username)",
|
||||
"Enter your passphrase": "Enter your passphrase",
|
||||
"Enter your password": "Enter your password",
|
||||
"Enter your Region (e.g., us-east-1, auto for R2)": "Enter your Region (e.g., us-east-1, auto for R2)",
|
||||
"Enter your Secret Access Key": "Enter your Secret Access Key",
|
||||
"Enter your username": "Enter your username",
|
||||
"Error during connection test: ${reason}": "Error during connection test: ${reason}",
|
||||
"Error during testAndFixSettings: ${reason}": "Error during testAndFixSettings: ${reason}",
|
||||
"Experimental Settings": "Experimental Settings",
|
||||
"Export": "Export",
|
||||
"Failed to connect to remote for compaction.": "Failed to connect to remote for compaction.",
|
||||
"Failed to connect to remote for compaction. ${reason}": "Failed to connect to remote for compaction. ${reason}",
|
||||
"Failed to connect to the server: ${reason}": "Failed to connect to the server: ${reason}",
|
||||
"Failed to connect to the server. Please check your settings.": "Failed to connect to the server. Please check your settings.",
|
||||
"Failed to connect to the signalling relay: ${reason}": "Failed to connect to the signalling relay: ${reason}",
|
||||
"Failed to create replicator instance.": "Failed to create replicator instance.",
|
||||
"Failed to parse Setup-URI.": "Failed to parse Setup-URI.",
|
||||
"Failed to start one-shot replication before Garbage Collection. Garbage Collection Cancelled.": "Failed to start one-shot replication before Garbage Collection. Garbage Collection Cancelled.",
|
||||
"Failed to start replication after Garbage Collection.": "Failed to start replication after Garbage Collection.",
|
||||
"Failed:": "Failed:",
|
||||
"Fetch": "Fetch",
|
||||
"Fetch chunks on demand": "Fetch chunks on demand",
|
||||
"Fetch database with previous behaviour": "Fetch database with previous behaviour",
|
||||
"Fetch remote settings": "Fetch remote settings",
|
||||
"FETCHING": "FETCHING",
|
||||
"Fetching status...": "Fetching status...",
|
||||
"File integrity": "File integrity",
|
||||
"File to resolve conflict": "File to resolve conflict",
|
||||
"File to view History": "File to view History",
|
||||
"Filename": "Filename",
|
||||
"Final Confirmation: Overwrite Server Data with This Device's Files": "Final Confirmation: Overwrite Server Data with This Device's Files",
|
||||
"First, please select the option that best describes your current situation.": "First, please select the option that best describes your current situation.",
|
||||
"Fix": "Fix",
|
||||
"Flag and restart": "Flag and restart",
|
||||
"Flagged Selective": "Flagged Selective",
|
||||
"Folder Prefix": "Folder Prefix",
|
||||
"For HS256/HS512 algorithms, provide the shared secret key. For ES256/ES512 algorithms, provide the pkcs8 PEM-formatted private key.": "For HS256/HS512 algorithms, provide the shared secret key. For ES256/ES512 algorithms, provide the pkcs8 PEM-formatted private key.",
|
||||
"Forces the file to be synced when opened.": "Forces the file to be synced when opened.",
|
||||
"Fresh Start Wipe": "Fresh Start Wipe",
|
||||
"Furthermore, if conflicts are already present in the server data, they will be synchronised to this device as they are, and you will need to resolve them locally.": "Furthermore, if conflicts are already present in the server data, they will be synchronised to this device as they are, and you will need to resolve them locally.",
|
||||
"Garbage Collection cancelled by user.": "Garbage Collection cancelled by user.",
|
||||
"Garbage Collection completed. Deleted chunks: ${deletedChunks} / ${totalChunks}. Time taken: ${seconds} seconds.": "Garbage Collection completed. Deleted chunks: ${deletedChunks} / ${totalChunks}. Time taken: ${seconds} seconds.",
|
||||
"Garbage Collection Confirmation": "Garbage Collection Confirmation",
|
||||
@@ -170,15 +294,33 @@
|
||||
"Garbage Collection: Found ${unusedChunks} unused chunks to delete.": "Garbage Collection: Found ${unusedChunks} unused chunks to delete.",
|
||||
"Garbage Collection: Scanned ${scanned} / ~${docCount}": "Garbage Collection: Scanned ${scanned} / ~${docCount}",
|
||||
"Garbage Collection: Scanning completed. Total chunks: ${totalChunks}, Used chunks: ${usedChunks}": "Garbage Collection: Scanning completed. Total chunks: ${totalChunks}, Used chunks: ${usedChunks}",
|
||||
"Gathering information...": "Gathering information...",
|
||||
"Generate Random ID": "Generate Random ID",
|
||||
"Group ID": "Group ID",
|
||||
"Handle files as Case-Sensitive": "Handle files as Case-Sensitive",
|
||||
"Have you created a backup before proceeding?": "Have you created a backup before proceeding?",
|
||||
"Hidden file synchronization have been temporarily disabled. Please enable them after the fetching, if you need them.": "Hidden file synchronization have been temporarily disabled. Please enable them after the fetching, if you need them.",
|
||||
"Hidden Files": "Hidden Files",
|
||||
"Hide completely": "Hide completely",
|
||||
"Hide not applicable items": "Hide not applicable items",
|
||||
"Higher (${local} > ${remote})": "Higher (${local} > ${remote})",
|
||||
"Highlight diff": "Highlight diff",
|
||||
"How to display network errors when the sync server is unreachable.": "How to display network errors when the sync server is unreachable.",
|
||||
"How would you like to configure the connection to your server?": "How would you like to configure the connection to your server?",
|
||||
"However, This should not be enabled if you want to increase your secrecy more.": "However, This should not be enabled if you want to increase your secrecy more.",
|
||||
"I am adding a device to an existing synchronisation setup": "I am adding a device to an existing synchronisation setup",
|
||||
"I am setting this up for the first time": "I am setting this up for the first time",
|
||||
"I am setting up a new server for the first time / I want to reset my existing server.": "I am setting up a new server for the first time / I want to reset my existing server.",
|
||||
"I am unable to create a backup of my Vault.": "I am unable to create a backup of my Vault.",
|
||||
"I am unable to create a backup of my Vaults.": "I am unable to create a backup of my Vaults.",
|
||||
"I have created a backup of my Vault.": "I have created a backup of my Vault.",
|
||||
"I know my server details, let me enter them": "I know my server details, let me enter them",
|
||||
"I understand that all changes made on other smartphones or computers possibly could be lost.": "I understand that all changes made on other smartphones or computers possibly could be lost.",
|
||||
"I understand that other devices will no longer be able to synchronise, and will need to be reset the synchronisation information.": "I understand that other devices will no longer be able to synchronise, and will need to be reset the synchronisation information.",
|
||||
"I understand that this action is irreversible once performed.": "I understand that this action is irreversible once performed.",
|
||||
"I understand the risks and will proceed without a backup.": "I understand the risks and will proceed without a backup.",
|
||||
"I Understand, Overwrite Server": "I Understand, Overwrite Server",
|
||||
"If \"Auto Start P2P Connection\" is enabled, the P2P connection will be started automatically when the plug-in launches.": "If \"Auto Start P2P Connection\" is enabled, the P2P connection will be started automatically when the plug-in launches.",
|
||||
"If disabled(toggled), chunks will be split on the UI thread (Previous behaviour).": "If disabled(toggled), chunks will be split on the UI thread (Previous behaviour).",
|
||||
"If enabled per-filed efficient customization sync will be used. We need a small migration when enabling this. And all devices should be updated to v0.23.18. Once we enabled this, we lost a compatibility with old versions.": "If enabled per-filed efficient customization sync will be used. We need a small migration when enabling this. And all devices should be updated to v0.23.18. Once we enabled this, we lost a compatibility with old versions.",
|
||||
"If enabled, chunks will be split into no more than 100 items. However, dedupe is slightly weaker.": "If enabled, chunks will be split into no more than 100 items. However, dedupe is slightly weaker.",
|
||||
@@ -191,16 +333,38 @@
|
||||
"If this enabled, chunks will be split into semantically meaningful segments. Not all platforms support this feature.": "If this enabled, chunks will be split into semantically meaningful segments. Not all platforms support this feature.",
|
||||
"If this is set, changes to local files which are matched by the ignore files will be skipped. Remote changes are determined using local ignore files.": "If this is set, changes to local files which are matched by the ignore files will be skipped. Remote changes are determined using local ignore files.",
|
||||
"If this option is enabled, PouchDB will hold the connection open for 60 seconds, and if no change arrives in that time, close and reopen the socket, instead of holding it open indefinitely. Useful when a proxy limits request duration but can increase resource usage.": "If this option is enabled, PouchDB will hold the connection open for 60 seconds, and if no change arrives in that time, close and reopen the socket, instead of holding it open indefinitely. Useful when a proxy limits request duration but can increase resource usage.",
|
||||
"If you cannot avoid CORS issues, you might want to try this option. It uses Obsidian's internal API to communicate with the CouchDB server. Not compliant with web standards, but works. Note that this might break in future Obsidian versions.": "If you cannot avoid CORS issues, you might want to try this option. It uses Obsidian's internal API to communicate with the CouchDB server. Not compliant with web standards, but works. Note that this might break in future Obsidian versions.",
|
||||
"If you cannot avoid CORS issues, you might want to try this option. It uses Obsidian's internal API to communicate with the S3 server. Not compliant with web standards, but works. Note that this might break in future Obsidian versions.": "If you cannot avoid CORS issues, you might want to try this option. It uses Obsidian's internal API to communicate with the S3 server. Not compliant with web standards, but works. Note that this might break in future Obsidian versions.",
|
||||
"If you have unsynchronised changes in your Vault on this device, they will likely diverge from the server's versions after the reset. This may result in a large number of file conflicts.": "If you have unsynchronised changes in your Vault on this device, they will likely diverge from the server's versions after the reset. This may result in a large number of file conflicts.",
|
||||
"If you reached the payload size limit when using IBM Cloudant, please decrease batch size and batch limit to a lower value.": "If you reached the payload size limit when using IBM Cloudant, please decrease batch size and batch limit to a lower value.",
|
||||
"If you understand the risks and still wish to proceed, select so.": "If you understand the risks and still wish to proceed, select so.",
|
||||
"If you want to store the data in a specific folder within the bucket, you can specify a folder prefix here. Otherwise, leave it blank to store data at the root of the bucket.": "If you want to store the data in a specific folder within the bucket, you can specify a folder prefix here. Otherwise, leave it blank to store data at the root of the bucket.",
|
||||
"If you want to use `LiveSync`, you should broadcast changes. All `watching` peers which detects this will start the replication for fetching.": "If you want to use `LiveSync`, you should broadcast changes. All `watching` peers which detects this will start the replication for fetching.",
|
||||
"Ignore": "Ignore",
|
||||
"Ignore and Proceed": "Ignore and Proceed",
|
||||
"Ignore files": "Ignore files",
|
||||
"Ignore patterns": "Ignore patterns",
|
||||
"Import connection": "Import connection",
|
||||
"IMPORTANT": "IMPORTANT",
|
||||
"In most cases, you should stick with the default algorithm (${algorithm}), This setting is only required if you have an existing Vault encrypted in a different format.": "In most cases, you should stick with the default algorithm (${algorithm}), This setting is only required if you have an existing Vault encrypted in a different format.",
|
||||
"In this scenario, Self-hosted LiveSync will recreate metadata for every file and deliberately generate conflicts. Where the file content is identical, these conflicts will be resolved automatically.": "In this scenario, Self-hosted LiveSync will recreate metadata for every file and deliberately generate conflicts. Where the file content is identical, these conflicts will be resolved automatically.",
|
||||
"Incoming:": "Incoming:",
|
||||
"Incubate Chunks in Document": "Incubate Chunks in Document",
|
||||
"Initial Action": "Initial Action",
|
||||
"Initialise all journal history, On the next sync, every item will be received and sent.": "Initialise all journal history, On the next sync, every item will be received and sent.",
|
||||
"Initialise journal received history. On the next sync, every item except this device sent will be downloaded again.": "Initialise journal received history. On the next sync, every item except this device sent will be downloaded again.",
|
||||
"Initialise journal sent history. On the next sync, every item except this device received will be sent again.": "Initialise journal sent history. On the next sync, every item except this device received will be sent again.",
|
||||
"Interval (sec)": "Interval (sec)",
|
||||
"INVERTED": "INVERTED",
|
||||
"Issue detection log:": "Issue detection log:",
|
||||
"It is strongly advised to create a backup before proceeding. Continuing without a backup may lead to data loss.": "It is strongly advised to create a backup before proceeding. Continuing without a backup may lead to data loss.",
|
||||
"Just for a minute, please!": "Just for a minute, please!",
|
||||
"JWT (JSON Web Token) authentication allows you to securely authenticate with the CouchDB server using tokens. Ensure that your CouchDB server is configured to accept JWTs and that the provided key and settings match the server's configuration. Incidentally, I have not verified it very thoroughly.": "JWT (JSON Web Token) authentication allows you to securely authenticate with the CouchDB server using tokens. Ensure that your CouchDB server is configured to accept JWTs and that the provided key and settings match the server's configuration. Incidentally, I have not verified it very thoroughly.",
|
||||
"JWT Algorithm": "JWT Algorithm",
|
||||
"JWT Expiration Duration (minutes)": "JWT Expiration Duration (minutes)",
|
||||
"JWT Key": "JWT Key",
|
||||
"JWT Key ID (kid)": "JWT Key ID (kid)",
|
||||
"JWT Subject (sub)": "JWT Subject (sub)",
|
||||
"K.exp": "Experimental",
|
||||
"K.long_p2p_sync": "%{title_p2p_sync}",
|
||||
"K.P2P": "%{Peer}-to-%{Peer}",
|
||||
@@ -222,6 +386,7 @@
|
||||
"lang-zh-tw": "繁體中文",
|
||||
"Later": "Later",
|
||||
"Limit: {datetime} ({timestamp})": "Limit: {datetime} ({timestamp})",
|
||||
"live": "live",
|
||||
"LiveSync could not handle multiple vaults which have same name without different prefix, This should be automatically configured.": "LiveSync could not handle multiple vaults which have same name without different prefix, This should be automatically configured.",
|
||||
"liveSyncReplicator.beforeLiveSync": "Before LiveSync, start OneShot once...",
|
||||
"liveSyncReplicator.cantReplicateLowerValue": "We can't replicate more lower value.",
|
||||
@@ -250,6 +415,7 @@
|
||||
"liveSyncSetting.valueShouldBeInRange": "The value should ${min} < value < ${max}",
|
||||
"liveSyncSettings.btnApply": "Apply",
|
||||
"Local Database Tweak": "Local Database Tweak",
|
||||
"Local only": "Local only",
|
||||
"Lock": "Lock",
|
||||
"Lock Server": "Lock Server",
|
||||
"Lock the remote server to prevent synchronization with other devices.": "Lock the remote server to prevent synchronization with other devices.",
|
||||
@@ -258,6 +424,9 @@
|
||||
"logPane.pause": "Pause",
|
||||
"logPane.title": "Self-hosted LiveSync Log",
|
||||
"logPane.wrap": "Wrap",
|
||||
"Lower (${local} < ${remote})": "Lower (${local} < ${remote})",
|
||||
"Maintenance Commands": "Maintenance Commands",
|
||||
"Maintenance mode": "Maintenance mode",
|
||||
"Maximum delay for batch database updating": "Maximum delay for batch database updating",
|
||||
"Maximum file size": "Maximum file size",
|
||||
"Maximum Incubating Chunk Size": "Maximum Incubating Chunk Size",
|
||||
@@ -270,6 +439,7 @@
|
||||
"Merge": "Merge",
|
||||
"Minimum delay for batch database updating": "Minimum delay for batch database updating",
|
||||
"Minimum interval for syncing": "Minimum interval for syncing",
|
||||
"Mixed": "Mixed",
|
||||
"moduleCheckRemoteSize.logCheckingStorageSizes": "Checking storage sizes",
|
||||
"moduleCheckRemoteSize.logCurrentStorageSize": "Remote storage size: ${measuredSize}",
|
||||
"moduleCheckRemoteSize.logExceededWarning": "Remote storage size: ${measuredSize} exceeded ${notifySize}",
|
||||
@@ -352,23 +522,39 @@
|
||||
"moduleMigration.titleWelcome": "Welcome to Self-hosted LiveSync",
|
||||
"moduleObsidianMenu.replicate": "Replicate",
|
||||
"More actions": "More actions",
|
||||
"Mostly Complete: Decision Required": "Mostly Complete: Decision Required",
|
||||
"Move remotely deleted files to the trash, instead of deleting.": "Move remotely deleted files to the trash, instead of deleting.",
|
||||
"My remote server is already set up. I want to join this device.": "My remote server is already set up. I want to join this device.",
|
||||
"Name": "Name",
|
||||
"Network warning style": "Network warning style",
|
||||
"NEW": "NEW",
|
||||
"New Remote": "New Remote",
|
||||
"Newer (${diff})": "Newer (${diff})",
|
||||
"No checks have been performed yet.": "No checks have been performed yet.",
|
||||
"No connected device information found. Cancelling Garbage Collection.": "No connected device information found. Cancelling Garbage Collection.",
|
||||
"No Connection": "No Connection",
|
||||
"No devices available. Waiting for other devices to connect...": "No devices available. Waiting for other devices to connect...",
|
||||
"No Items.": "No Items.",
|
||||
"No limit configured": "No limit configured",
|
||||
"NO PREVIEW": "NO PREVIEW",
|
||||
"No, please take me back": "No, please take me back",
|
||||
"Node ID": "Node ID",
|
||||
"Node Information Missing": "Node Information Missing",
|
||||
"Non-Synchronising files": "Non-Synchronising files",
|
||||
"Normal Files": "Normal Files",
|
||||
"Not all messages have been translated. And, please revert to \"Default\" when reporting errors.": "Not all messages have been translated. And, please revert to \"Default\" when reporting errors.",
|
||||
"Not configured": "Not configured",
|
||||
"Not now": "Not now",
|
||||
"Note that the Group ID is not limited to the generated format; you can use any string as the Group ID.": "Note that the Group ID is not limited to the generated format; you can use any string as the Group ID.",
|
||||
"Note that you can generate a new Setup URI by running the \"Copy settings as a new Setup URI\" command in the command palette.": "Note that you can generate a new Setup URI by running the \"Copy settings as a new Setup URI\" command in the command palette.",
|
||||
"Notify all setting files": "Notify all setting files",
|
||||
"Notify customized": "Notify customized",
|
||||
"Notify when other device has newly customized.": "Notify when other device has newly customized.",
|
||||
"Notify when the estimated remote storage size exceeds on start up": "Notify when the estimated remote storage size exceeds on start up",
|
||||
"Number of batches to process at a time. Defaults to 40. Minimum is 2. This along with batch size controls how many docs are kept in memory at a time.": "Number of batches to process at a time. Defaults to 40. Minimum is 2. This along with batch size controls how many docs are kept in memory at a time.",
|
||||
"Number of changes to sync at a time. Defaults to 50. Minimum is 2.": "Number of changes to sync at a time. Defaults to 50. Minimum is 2.",
|
||||
"Obfuscate Properties": "Obfuscate Properties",
|
||||
"Obfuscating properties (e.g., path of file, size, creation and modification dates) adds an additional layer of security by making it harder to identify the structure and names of your files and folders on the remote server. This helps protect your privacy and makes it more difficult for unauthorized users to infer information about your data.": "Obfuscating properties (e.g., path of file, size, creation and modification dates) adds an additional layer of security by making it harder to identify the structure and names of your files and folders on the remote server. This helps protect your privacy and makes it more difficult for unauthorized users to infer information about your data.",
|
||||
"Obsidian version": "Obsidian version",
|
||||
"obsidianLiveSyncSettingTab.btnApply": "Apply",
|
||||
"obsidianLiveSyncSettingTab.btnCheck": "Check",
|
||||
@@ -541,16 +727,29 @@
|
||||
"obsidianLiveSyncSettingTab.titleUpdateThinning": "Update Thinning",
|
||||
"obsidianLiveSyncSettingTab.warnCorsOriginUnmatched": "⚠ CORS Origin is unmatched ${from}->${to}",
|
||||
"obsidianLiveSyncSettingTab.warnNoAdmin": "⚠ You do not have administrator privileges.",
|
||||
"Of course, we can back up the data before proceeding.": "Of course, we can back up the data before proceeding.",
|
||||
"Off": "Off",
|
||||
"Ok": "Ok",
|
||||
"Old Algorithm": "Old Algorithm",
|
||||
"Older (${diff})": "Older (${diff})",
|
||||
"Older fallback (Slow, W/O WebAssembly)": "Older fallback (Slow, W/O WebAssembly)",
|
||||
"On": "On",
|
||||
"On the source device, from the command palette, run the 'Show settings as a QR code' command.": "On the source device, from the command palette, run the 'Show settings as a QR code' command.",
|
||||
"On the source device, open Obsidian.": "On the source device, open Obsidian.",
|
||||
"On this device, please keep this Vault open.": "On this device, please keep this Vault open.",
|
||||
"On this device, switch to the camera app or use a QR code scanner to scan the displayed QR code.": "On this device, switch to the camera app or use a QR code scanner to scan the displayed QR code.",
|
||||
"Open": "Open",
|
||||
"Open connection": "Open connection",
|
||||
"Open P2P Setup...": "Open P2P Setup...",
|
||||
"Open the dialog": "Open the dialog",
|
||||
"Other files": "Other files",
|
||||
"Overwrite": "Overwrite",
|
||||
"Overwrite patterns": "Overwrite patterns",
|
||||
"Overwrite remote": "Overwrite remote",
|
||||
"Overwrite remote with local DB and passphrase.": "Overwrite remote with local DB and passphrase.",
|
||||
"Overwrite Server Data with This Device's Files": "Overwrite Server Data with This Device's Files",
|
||||
"P2P Configuration": "P2P Configuration",
|
||||
"P2P Status": "P2P Status",
|
||||
"P2P.AskPassphraseForDecrypt": "The remote peer shared the configuration. Please input the passphrase to decrypt the configuration.",
|
||||
"P2P.AskPassphraseForShare": "The remote peer requested this device configuration. Please input the passphrase to share the configuration. You can ignore the request by cancelling this dialogue.",
|
||||
"P2P.DisabledButNeed": "%{title_p2p_sync} is disabled. Do you really want to enable it?",
|
||||
@@ -574,36 +773,59 @@
|
||||
"paneMaintenance.remoteLockedResolvedDevice": "paneMaintenance.remoteLockedResolvedDevice",
|
||||
"paneMaintenance.unlockDatabaseReady": "paneMaintenance.unlockDatabaseReady",
|
||||
"Passphrase": "Passphrase",
|
||||
"Passphrase is required.": "Passphrase is required.",
|
||||
"Passphrase of sensitive configuration items": "Passphrase of sensitive configuration items",
|
||||
"password": "password",
|
||||
"Password": "Password",
|
||||
"Paste a connection string": "Paste a connection string",
|
||||
"Paste the Setup URI generated from one of your active devices.": "Paste the Setup URI generated from one of your active devices.",
|
||||
"Path": "Path",
|
||||
"Path Obfuscation": "Path Obfuscation",
|
||||
"Patterns to match files for overwriting instead of merging": "Patterns to match files for overwriting instead of merging",
|
||||
"Patterns to match files for syncing": "Patterns to match files for syncing",
|
||||
"Peer ID:": "Peer ID:",
|
||||
"Peer to Peer Replicator": "Peer to Peer Replicator",
|
||||
"Peer-to-Peer only": "Peer-to-Peer only",
|
||||
"Peer-to-Peer Synchronisation": "Peer-to-Peer Synchronisation",
|
||||
"Peers": "Peers",
|
||||
"Per-file-saved customization sync": "Per-file-saved customization sync",
|
||||
"Perform": "Perform",
|
||||
"Perform cleanup": "Perform cleanup",
|
||||
"Perform Garbage Collection": "Perform Garbage Collection",
|
||||
"Perform Garbage Collection to remove unused chunks and reduce database size.": "Perform Garbage Collection to remove unused chunks and reduce database size.",
|
||||
"Periodic Sync interval": "Periodic Sync interval",
|
||||
"PERMANENT": "PERMANENT",
|
||||
"Pick a file to resolve conflict": "Pick a file to resolve conflict",
|
||||
"Pick a file to show history": "Pick a file to show history",
|
||||
"Please be aware that the End-to-End Encryption passphrase is not validated until the synchronisation process actually commences. This is a security measure designed to protect your data.": "Please be aware that the End-to-End Encryption passphrase is not validated until the synchronisation process actually commences. This is a security measure designed to protect your data.",
|
||||
"Please configure your end-to-end encryption settings.": "Please configure your end-to-end encryption settings.",
|
||||
"Please disable 'Read chunks online' in settings to use Garbage Collection.": "Please disable 'Read chunks online' in settings to use Garbage Collection.",
|
||||
"Please enable 'Compute revisions for chunks' in settings to use Garbage Collection.": "Please enable 'Compute revisions for chunks' in settings to use Garbage Collection.",
|
||||
"Please enter the CouchDB server information below.": "Please enter the CouchDB server information below.",
|
||||
"Please enter the details required to connect to your S3/MinIO/R2 compatible object storage service.": "Please enter the details required to connect to your S3/MinIO/R2 compatible object storage service.",
|
||||
"Please enter the Peer-to-Peer Synchronisation information below.": "Please enter the Peer-to-Peer Synchronisation information below.",
|
||||
"Please enter the Setup URI that was generated during server installation or on another device, along with the vault passphrase.": "Please enter the Setup URI that was generated during server installation or on another device, along with the vault passphrase.",
|
||||
"Please follow the steps below to import settings from your existing device.": "Please follow the steps below to import settings from your existing device.",
|
||||
"PLEASE NOTE": "PLEASE NOTE",
|
||||
"Please select 'Cancel' explicitly to cancel this operation.": "Please select 'Cancel' explicitly to cancel this operation.",
|
||||
"Please select a method to import the settings from another device.": "Please select a method to import the settings from another device.",
|
||||
"Please select an active P2P remote configuration to change P2P sync targets.": "Please select an active P2P remote configuration to change P2P sync targets.",
|
||||
"Please select an option to proceed": "Please select an option to proceed",
|
||||
"Please select the button below to restart and proceed to the data fetching confirmation.": "Please select the button below to restart and proceed to the data fetching confirmation.",
|
||||
"Please select the button below to restart and proceed to the final confirmation.": "Please select the button below to restart and proceed to the final confirmation.",
|
||||
"Please select the type of server to which you are connecting.": "Please select the type of server to which you are connecting.",
|
||||
"Please select your situation.": "Please select your situation.",
|
||||
"Please set device name to identify this device. This name should be unique among your devices. While not configured, we cannot enable this feature.": "Please set device name to identify this device. This name should be unique among your devices. While not configured, we cannot enable this feature.",
|
||||
"Please set this device name": "Please set this device name",
|
||||
"Please understand that this is intended behaviour.": "Please understand that this is intended behaviour.",
|
||||
"Plug-in version": "Plug-in version",
|
||||
"Plugins": "Plugins",
|
||||
"Prepare the 'report' to create an issue": "Prepare the 'report' to create an issue",
|
||||
"Presets": "Presets",
|
||||
"Prevent fetching configuration from server": "Prevent fetching configuration from server",
|
||||
"Proceed": "Proceed",
|
||||
"Proceed Garbage Collection": "Proceed Garbage Collection",
|
||||
"Proceed to the next step.": "Proceed to the next step.",
|
||||
"Proceed with Setup URI": "Proceed with Setup URI",
|
||||
"Proceeding with Garbage Collection, ignoring missing nodes.": "Proceeding with Garbage Collection, ignoring missing nodes.",
|
||||
"Proceeding with Garbage Collection.": "Proceeding with Garbage Collection.",
|
||||
@@ -629,15 +851,22 @@
|
||||
"RedFlag.FetchRemoteConfig.Title": "Fetch Remote Configuration",
|
||||
"Reduces storage space by discarding all non-latest revisions. This requires the same amount of free space on the remote server and the local client.": "Reduces storage space by discarding all non-latest revisions. This requires the same amount of free space on the remote server and the local client.",
|
||||
"Reducing the frequency with which on-disk changes are reflected into the DB": "Reducing the frequency with which on-disk changes are reflected into the DB",
|
||||
"Refresh": "Refresh",
|
||||
"Region": "Region",
|
||||
"Relay settings": "Relay settings",
|
||||
"Reload": "Reload",
|
||||
"Remediation": "Remediation",
|
||||
"Remediation Setting Changed": "Remediation Setting Changed",
|
||||
"Remote Database Tweak (In sunset)": "Remote Database Tweak (In sunset)",
|
||||
"Remote Databases": "Remote Databases",
|
||||
"Remote name": "Remote name",
|
||||
"Remote only": "Remote only",
|
||||
"Remote server type": "Remote server type",
|
||||
"Remote Type": "Remote Type",
|
||||
"Rename": "Rename",
|
||||
"Replicate now": "Replicate now",
|
||||
"Replicating": "Replicating",
|
||||
"Replicating...": "Replicating...",
|
||||
"Replicator.Dialogue.Locked.Action.Dismiss": "Cancel for reconfirmation",
|
||||
"Replicator.Dialogue.Locked.Action.Fetch": "Reset Synchronisation on This Device",
|
||||
"Replicator.Dialogue.Locked.Action.Unlock": "Unlock the remote database",
|
||||
@@ -660,6 +889,7 @@
|
||||
"Reset": "Reset",
|
||||
"Reset all": "Reset all",
|
||||
"Reset all journal counter": "Reset all journal counter",
|
||||
"Reset and Resume Synchronisation": "Reset and Resume Synchronisation",
|
||||
"Reset journal received history": "Reset journal received history",
|
||||
"Reset journal sent history": "Reset journal sent history",
|
||||
"Reset notification threshold and check the remote database usage": "Reset notification threshold and check the remote database usage",
|
||||
@@ -672,14 +902,26 @@
|
||||
"Resolve all conflicted files": "Resolve all conflicted files",
|
||||
"Resolve All conflicted files by the newer one": "Resolve All conflicted files by the newer one",
|
||||
"Resolve all conflicted files by the newer one. Caution: This will overwrite the older one, and cannot resurrect the overwritten one.": "Resolve all conflicted files by the newer one. Caution: This will overwrite the older one, and cannot resurrect the overwritten one.",
|
||||
"Restart and Fetch Data": "Restart and Fetch Data",
|
||||
"Restart and Initialise Server": "Restart and Initialise Server",
|
||||
"Restart Now": "Restart Now",
|
||||
"Restarting Obsidian is strongly recommended. Until restart, some changes may not take effect, and display may be inconsistent. Are you sure to restart now?": "Restarting Obsidian is strongly recommended. Until restart, some changes may not take effect, and display may be inconsistent. Are you sure to restart now?",
|
||||
"Restore or reconstruct local database from remote.": "Restore or reconstruct local database from remote.",
|
||||
"Rev": "Rev",
|
||||
"Revert changes": "Revert changes",
|
||||
"Revoke": "Revoke",
|
||||
"Room ID": "Room ID",
|
||||
"Room ID suffix:": "Room ID suffix:",
|
||||
"Run Doctor": "Run Doctor",
|
||||
"S3/MinIO/R2 Configuration": "S3/MinIO/R2 Configuration",
|
||||
"S3/MinIO/R2 Object Storage": "S3/MinIO/R2 Object Storage",
|
||||
"Same": "Same",
|
||||
"Same or local only": "Same or local only",
|
||||
"Save and Apply": "Save and Apply",
|
||||
"Save settings to a markdown file. You will be notified when new settings arrive. You can set different files by the platform.": "Save settings to a markdown file. You will be notified when new settings arrive. You can set different files by the platform.",
|
||||
"Saving will be performed forcefully after this number of seconds.": "Saving will be performed forcefully after this number of seconds.",
|
||||
"Scan a QR Code (Recommended for mobile)": "Scan a QR Code (Recommended for mobile)",
|
||||
"Scan changes": "Scan changes",
|
||||
"Scan changes on customization sync": "Scan changes on customization sync",
|
||||
"Scan customization automatically": "Scan customization automatically",
|
||||
"Scan customization before replicating.": "Scan customization before replicating.",
|
||||
@@ -688,17 +930,28 @@
|
||||
"Scan for Broken files": "Scan for Broken files",
|
||||
"Scan for hidden files before replication": "Scan for hidden files before replication",
|
||||
"Scan hidden files periodically": "Scan hidden files periodically",
|
||||
"Scan QR Code": "Scan QR Code",
|
||||
"Scan the QR code displayed on an active device using this device's camera.": "Scan the QR code displayed on an active device using this device's camera.",
|
||||
"Schedule and Restart": "Schedule and Restart",
|
||||
"Scram Switches": "Scram Switches",
|
||||
"Scram!": "Scram!",
|
||||
"Seconds, 0 to disable": "Seconds, 0 to disable",
|
||||
"Seconds. Saving to the local database will be delayed until this value after we stop typing or saving.": "Seconds. Saving to the local database will be delayed until this value after we stop typing or saving.",
|
||||
"Secret Access Key": "Secret Access Key",
|
||||
"Secret Key": "Secret Key",
|
||||
"Select active P2P remote": "Select active P2P remote",
|
||||
"Select All Shiny": "Select All Shiny",
|
||||
"Select Flagged Shiny": "Select Flagged Shiny",
|
||||
"Select P2P remote...": "Select P2P remote...",
|
||||
"Select the database adapter to use.": "Select the database adapter to use.",
|
||||
"Selecting this option will result in the current data on this device being used to initialise the server. Any existing data on the server will be completely overwritten.": "Selecting this option will result in the current data on this device being used to initialise the server. Any existing data on the server will be completely overwritten.",
|
||||
"Selecting this option will result in this device joining the existing server. You need to fetching the existing synchronisation data from the server to this device.": "Selecting this option will result in this device joining the existing server. You need to fetching the existing synchronisation data from the server to this device.",
|
||||
"Selective": "Selective",
|
||||
"Send": "Send",
|
||||
"Send chunks": "Send chunks",
|
||||
"SENDING": "SENDING",
|
||||
"Server URI": "Server URI",
|
||||
"SESSION": "SESSION",
|
||||
"Setting.GenerateKeyPair.Desc": "We have generated a key pair!\n\nNote: This key pair will never be shown again. Please save it in a safe place. If you have lost it, you need to generate a new key pair.\nNote 2: The public key is in spki format, and the Private key is in pkcs8 format. For the sake of convenience, newlines are converted to `\\n` in public key.\nNote 3: The public key should be configured in the remote database, and the private key should be configured in local devices.\n\n>[!FOR YOUR EYES ONLY]-\n> <div class=\"sls-keypair\">\n>\n> ### Public Key\n> ```\n${public_key}\n> ```\n>\n> ### Private Key\n> ```\n${private_key}\n> ```\n>\n> </div>\n\n>[!Both for copying]-\n>\n> <div class=\"sls-keypair\">\n>\n> ```\n${public_key}\n${private_key}\n> ```\n>\n> </div>\n\n",
|
||||
"Setting.GenerateKeyPair.Title": "New key pair has been generated!",
|
||||
"Setting.TroubleShooting": "TroubleShooting",
|
||||
@@ -707,7 +960,10 @@
|
||||
"Setting.TroubleShooting.ScanBrokenFiles": "Scan for broken files",
|
||||
"Setting.TroubleShooting.ScanBrokenFiles.Desc": "Scans for files that are not stored correctly in the database.",
|
||||
"SettingTab.Message.AskRebuild": "Your changes require fetching from the remote database. Do you want to proceed?",
|
||||
"Setup Complete: Preparing to Fetch Synchronisation Data": "Setup Complete: Preparing to Fetch Synchronisation Data",
|
||||
"Setup Complete: Preparing to Initialise Server": "Setup Complete: Preparing to Initialise Server",
|
||||
"Setup URI dialog cancelled.": "Setup URI dialog cancelled.",
|
||||
"Setup-URI": "Setup-URI",
|
||||
"Setup.Apply.Buttons.ApplyAndFetch": "Apply and Fetch",
|
||||
"Setup.Apply.Buttons.ApplyAndMerge": "Apply and Merge",
|
||||
"Setup.Apply.Buttons.ApplyAndRebuild": "Apply and Rebuild",
|
||||
@@ -777,16 +1033,29 @@
|
||||
"Show status inside the editor": "Show status inside the editor",
|
||||
"Show status on the status bar": "Show status on the status bar",
|
||||
"Show verbose log. Please enable if you report an issue.": "Show verbose log. Please enable if you report an issue.",
|
||||
"Signaling Server Connection": "Signaling Server Connection",
|
||||
"Signalling Status": "Signalling Status",
|
||||
"Skip and close": "Skip and close",
|
||||
"Snippets": "Snippets",
|
||||
"Some devices have differing progress values (max: ${maxProgress}, min: ${minProgress}).\nThis may indicate that some devices have not completed synchronisation, which could lead to conflicts. Strongly recommend confirming that all devices are synchronised before proceeding.": "Some devices have differing progress values (max: ${maxProgress}, min: ${minProgress}).\nThis may indicate that some devices have not completed synchronisation, which could lead to conflicts. Strongly recommend confirming that all devices are synchronised before proceeding.",
|
||||
"Start Broadcasting": "Start Broadcasting",
|
||||
"Start change-broadcasting on Connect": "Start change-broadcasting on Connect",
|
||||
"Start Sync & Close": "Start Sync & Close",
|
||||
"Starts synchronisation when a file is saved.": "Starts synchronisation when a file is saved.",
|
||||
"Stat": "Stat",
|
||||
"Stats": "Stats",
|
||||
"Stop ⚡": "Stop ⚡",
|
||||
"Stop Broadcasting": "Stop Broadcasting",
|
||||
"Stop reflecting database changes to storage files.": "Stop reflecting database changes to storage files.",
|
||||
"Stop watching for file changes.": "Stop watching for file changes.",
|
||||
"Storage -> Database": "Storage -> Database",
|
||||
"Strongly Recommended": "Strongly Recommended",
|
||||
"Suppress notification of hidden files change": "Suppress notification of hidden files change",
|
||||
"Suspend database reflecting": "Suspend database reflecting",
|
||||
"Suspend file watching": "Suspend file watching",
|
||||
"Switch to IDB": "Switch to IDB",
|
||||
"Switch to IndexedDB": "Switch to IndexedDB",
|
||||
"Sync": "Sync",
|
||||
"Sync after merging file": "Sync after merging file",
|
||||
"Sync automatically after merging files": "Sync automatically after merging files",
|
||||
"Sync Mode": "Sync Mode",
|
||||
@@ -794,25 +1063,56 @@
|
||||
"Sync on File Open": "Sync on File Open",
|
||||
"Sync on Save": "Sync on Save",
|
||||
"Sync on Startup": "Sync on Startup",
|
||||
"Sync once": "Sync once",
|
||||
"Synchronisation utilising journal files. You must have set up an S3/MinIO/R2 compatible object storage.": "Synchronisation utilising journal files. You must have set up an S3/MinIO/R2 compatible object storage.",
|
||||
"Synchronising files": "Synchronising files",
|
||||
"Syncing": "Syncing",
|
||||
"Syncing...": "Syncing...",
|
||||
"Target patterns": "Target patterns",
|
||||
"Test Settings and Continue": "Test Settings and Continue",
|
||||
"Testing only - Resolve file conflicts by syncing newer copies of the file, this can overwrite modified files. Be Warned.": "Testing only - Resolve file conflicts by syncing newer copies of the file, this can overwrite modified files. Be Warned.",
|
||||
"The connection to the server has been configured successfully. As the next step,": "The connection to the server has been configured successfully. As the next step,",
|
||||
"The delay for consecutive on-demand fetches": "The delay for consecutive on-demand fetches",
|
||||
"The files in this Vault are almost identical to the server's.": "The files in this Vault are almost identical to the server's.",
|
||||
"The following accepted nodes are missing its node information:\n- ${missingNodes}\n\nThis indicates that they have not been connected for some time or have been left on an older version.\nIt is preferable to update all devices if possible. If you have any devices that are no longer in use, you can clear all accepted nodes by locking the remote once.": "The following accepted nodes are missing its node information:\n- ${missingNodes}\n\nThis indicates that they have not been connected for some time or have been left on an older version.\nIt is preferable to update all devices if possible. If you have any devices that are no longer in use, you can clear all accepted nodes by locking the remote once.",
|
||||
"The Group ID and passphrase are used to identify your group of devices. Make sure to use the same Group ID and passphrase on all devices you want to synchronise.": "The Group ID and passphrase are used to identify your group of devices. Make sure to use the same Group ID and passphrase on all devices you want to synchronise.",
|
||||
"The Hash algorithm for chunk IDs": "The Hash algorithm for chunk IDs",
|
||||
"The IndexedDB adapter often offers superior performance in certain scenarios, but it has been found to cause memory leaks when used with LiveSync mode. When using LiveSync mode, please use IDB adapter instead.": "The IndexedDB adapter often offers superior performance in certain scenarios, but it has been found to cause memory leaks when used with LiveSync mode. When using LiveSync mode, please use IDB adapter instead.",
|
||||
"the latest synchronisation data will be downloaded from the server to this device.": "the latest synchronisation data will be downloaded from the server to this device.",
|
||||
"the local database, that is to say the synchronisation information, must be reconstituted.": "the local database, that is to say the synchronisation information, must be reconstituted.",
|
||||
"The maximum duration for which chunks can be incubated within the document. Chunks exceeding this period will graduate to independent chunks.": "The maximum duration for which chunks can be incubated within the document. Chunks exceeding this period will graduate to independent chunks.",
|
||||
"The maximum number of chunks that can be incubated within the document. Chunks exceeding this number will immediately graduate to independent chunks.": "The maximum number of chunks that can be incubated within the document. Chunks exceeding this number will immediately graduate to independent chunks.",
|
||||
"The maximum total size of chunks that can be incubated within the document. Chunks exceeding this size will immediately graduate to independent chunks.": "The maximum total size of chunks that can be incubated within the document. Chunks exceeding this size will immediately graduate to independent chunks.",
|
||||
"The minimum interval for automatic synchronisation on event.": "The minimum interval for automatic synchronisation on event.",
|
||||
"The remote is already set up, and the configuration is compatible (or got compatible by this operation).": "The remote is already set up, and the configuration is compatible (or got compatible by this operation).",
|
||||
"The Setup-URI does not appear to be valid. Please check that you have copied it correctly.": "The Setup-URI does not appear to be valid. Please check that you have copied it correctly.",
|
||||
"The Setup-URI is valid and ready to use.": "The Setup-URI is valid and ready to use.",
|
||||
"the single, authoritative master copy": "the single, authoritative master copy",
|
||||
"the synchronisation data on the server will be built based on the current data on this device.": "the synchronisation data on the server will be built based on the current data on this device.",
|
||||
"Themes": "Themes",
|
||||
"There is a way to resolve this on other devices.": "There is a way to resolve this on other devices.",
|
||||
"There may be differences between the files in this Vault and the server.": "There may be differences between the files in this Vault and the server.",
|
||||
"Therefore, we ask that you exercise extreme caution when configuring server information manually. If an incorrect passphrase is entered, the data on the server will become corrupted.": "Therefore, we ask that you exercise extreme caution when configuring server information manually. If an incorrect passphrase is entered, the data on the server will become corrupted.",
|
||||
"This can isolate your connections between devices. Use the same Room ID for the same devices.": "This can isolate your connections between devices. Use the same Room ID for the same devices.",
|
||||
"This device": "This device",
|
||||
"This device name": "This device name",
|
||||
"This feature enables direct synchronisation between devices. No server is required, but both devices must be online at the same time for synchronisation to occur, and some features may be limited. Internet connection is only required to signalling (detecting peers) and not for data transfer.": "This feature enables direct synchronisation between devices. No server is required, but both devices must be online at the same time for synchronisation to occur, and some features may be limited. Internet connection is only required to signalling (detecting peers) and not for data transfer.",
|
||||
"This is an advanced option for users who do not have a URI or who wish to configure detailed settings.": "This is an advanced option for users who do not have a URI or who wish to configure detailed settings.",
|
||||
"This is an extremely powerful operation. We strongly recommend that you copy your Vault folder to a safe location.": "This is an extremely powerful operation. We strongly recommend that you copy your Vault folder to a safe location.",
|
||||
"This is the most suitable synchronisation method for the design. All functions are available. You must have set up a CouchDB instance.": "This is the most suitable synchronisation method for the design. All functions are available. You must have set up a CouchDB instance.",
|
||||
"This passphrase will not be copied to another device. It will be set to `Default` until you configure it again.": "This passphrase will not be copied to another device. It will be set to `Default` until you configure it again.",
|
||||
"This password is used to encrypt the connection. Use something long enough.": "This password is used to encrypt the connection. Use something long enough.",
|
||||
"This procedure will first delete all existing synchronisation data from the server. Following this, the server data will be completely rebuilt, using the current state of your Vault on this device (including its local database) as": "This procedure will first delete all existing synchronisation data from the server. Following this, the server data will be completely rebuilt, using the current state of your Vault on this device (including its local database) as",
|
||||
"This setting must be the same even when connecting to multiple synchronisation destinations.": "This setting must be the same even when connecting to multiple synchronisation destinations.",
|
||||
"This Vault is empty, or contains only new files that are not on the server.": "This Vault is empty, or contains only new files that are not on the server.",
|
||||
"This will rebuild the local database on this device using the most recent data from the server. This action is designed to resolve synchronisation inconsistencies and restore correct functionality.": "This will rebuild the local database on this device using the most recent data from the server. This action is designed to resolve synchronisation inconsistencies and restore correct functionality.",
|
||||
"This will recreate chunks for all files. If there were missing chunks, this may fix the errors.": "This will recreate chunks for all files. If there were missing chunks, this may fix the errors.",
|
||||
"To minimise the creation of new conflicts": "To minimise the creation of new conflicts",
|
||||
"Transfer Tweak": "Transfer Tweak",
|
||||
"TURN Credential": "TURN Credential",
|
||||
"TURN server settings are only necessary if you are behind a strict NAT or firewall that prevents direct P2P connections. In most cases, you can leave these fields blank.": "TURN server settings are only necessary if you are behind a strict NAT or firewall that prevents direct P2P connections. In most cases, you can leave these fields blank.",
|
||||
"TURN Server URLs (comma-separated)": "TURN Server URLs (comma-separated)",
|
||||
"TURN Username": "TURN Username",
|
||||
"TweakMismatchResolve.Action.DisableAutoAcceptCompatible": "Disable auto-accept",
|
||||
"TweakMismatchResolve.Action.Dismiss": "Dismiss",
|
||||
"TweakMismatchResolve.Action.EnableAutoAcceptCompatible": "Enable auto-accept",
|
||||
@@ -1105,21 +1405,36 @@
|
||||
"Ui.SetupWizard.SetupRemote.ProceedP2P": "Continue to P2P setup",
|
||||
"Ui.SetupWizard.SetupRemote.Title": "Choose a synchronisation remote",
|
||||
"Unique name between all synchronized devices. To edit this setting, please disable customization sync once.": "Unique name between all synchronized devices. To edit this setting, please disable customization sync once.",
|
||||
"Unless you are certain, selecting this options is bit dangerous. It assumes that the server configuration is compatible with this device. If this is not the case, data loss may occur. Please ensure you know what you are doing.": "Unless you are certain, selecting this options is bit dangerous. It assumes that the server configuration is compatible with this device. If this is not the case, data loss may occur. Please ensure you know what you are doing.",
|
||||
"Updating list...": "Updating list...",
|
||||
"URL": "URL",
|
||||
"Use a custom passphrase": "Use a custom passphrase",
|
||||
"Use a Setup URI (Recommended)": "Use a Setup URI (Recommended)",
|
||||
"Use Custom HTTP Handler": "Use Custom HTTP Handler",
|
||||
"Use Diagnostic RTCPeerConnection for statistics": "Use Diagnostic RTCPeerConnection for statistics",
|
||||
"Use dynamic iteration count": "Use dynamic iteration count",
|
||||
"Use internal API": "Use internal API",
|
||||
"Use Internal API": "Use Internal API",
|
||||
"Use JWT Authentication": "Use JWT Authentication",
|
||||
"Use Path-Style Access": "Use Path-Style Access",
|
||||
"Use Random Number": "Use Random Number",
|
||||
"Use Segmented-splitter": "Use Segmented-splitter",
|
||||
"Use splitting-limit-capped chunk splitter": "Use splitting-limit-capped chunk splitter",
|
||||
"Use the trash bin": "Use the trash bin",
|
||||
"Use timeouts instead of heartbeats": "Use timeouts instead of heartbeats",
|
||||
"Use vrtmrz's relay": "Use vrtmrz's relay",
|
||||
"username": "username",
|
||||
"Username": "Username",
|
||||
"Verbose Log": "Verbose Log",
|
||||
"Verify all": "Verify all",
|
||||
"Verify and repair all files": "Verify and repair all files",
|
||||
"Warning! This will have a serious impact on performance. And the logs will not be synchronised under the default name. Please be careful with logs; they often contain your confidential information.": "Warning! This will have a serious impact on performance. And the logs will not be synchronised under the default name. Please be careful with logs; they often contain your confidential information.",
|
||||
"WATCHING": "WATCHING",
|
||||
"We can not use \"/\" to the device name": "We can not use \"/\" to the device name",
|
||||
"We can use only Secure (HTTPS) connections on Obsidian Mobile.": "We can use only Secure (HTTPS) connections on Obsidian Mobile.",
|
||||
"We cannot change the device name while this feature is enabled. Please disable this feature to change the device name.": "We cannot change the device name while this feature is enabled. Please disable this feature to change the device name.",
|
||||
"We have to configure the device name": "We have to configure the device name",
|
||||
"We recommend that you copy your Vault folder to a safe location. This will provide a safeguard in case a large number of conflicts arise, or if you accidentally synchronise with an incorrect destination.": "We recommend that you copy your Vault folder to a safe location. This will provide a safeguard in case a large number of conflicts arise, or if you accidentally synchronise with an incorrect destination.",
|
||||
"We will now guide you through a few questions to simplify the synchronisation setup.": "We will now guide you through a few questions to simplify the synchronisation setup.",
|
||||
"We will now proceed with the server configuration.": "We will now proceed with the server configuration.",
|
||||
"Welcome to Self-hosted LiveSync": "Welcome to Self-hosted LiveSync",
|
||||
@@ -1130,5 +1445,8 @@
|
||||
"xxhash64 (Fastest)": "xxhash64 (Fastest)",
|
||||
"Yes, I want to add this device to my existing synchronisation": "Yes, I want to add this device to my existing synchronisation",
|
||||
"Yes, I want to set up a new synchronisation": "Yes, I want to set up a new synchronisation",
|
||||
"You are adding this device to an existing synchronisation setup.": "You are adding this device to an existing synchronisation setup."
|
||||
"You are adding this device to an existing synchronisation setup.": "You are adding this device to an existing synchronisation setup.",
|
||||
"You can configure in the Obsidian Plugin Settings.": "You can configure in the Obsidian Plugin Settings.",
|
||||
"You should create a new synchronisation destination and rebuild your data there.": "You should create a new synchronisation destination and rebuild your data there.",
|
||||
"You should perform this operation only in exceptional circumstances, such as when the server data is completely corrupted, when changes on all other devices are no longer needed, or when the database size has become unusually large in comparison to the Vault size.": "You should perform this operation only in exceptional circumstances, such as when the server data is completely corrupted, when changes on all other devices are no longer needed, or when the database size has become unusually large in comparison to the Vault size."
|
||||
}
|
||||
|
||||
@@ -1,33 +1,78 @@
|
||||
{
|
||||
", please select the option that best describes the current state of your Vault. The application will then check your files in the most appropriate way based on your selection.": ", selecciona la opción que mejor describa el estado actual de tu Vault. La aplicación comprobará entonces tus archivos de la forma más adecuada según tu elección.",
|
||||
"(Active)": "(Activo)",
|
||||
"(BETA) Always overwrite with a newer file": "(BETA) Sobrescribir siempre con archivo más nuevo",
|
||||
"(Beta) Use ignore files": "(Beta) Usar archivos de ignorar",
|
||||
"(Days passed, 0 to disable automatic-deletion)": "(Días transcurridos, 0 para desactivar)",
|
||||
"(e.g., after editing many files whilst offline)": "(p. ej., tras editar muchos archivos sin conexión)",
|
||||
"(e.g., immediately after restoring on another computer, or having recovered from a backup)": "(p. ej., justo después de restaurar en otro ordenador o de recuperar una copia de seguridad)",
|
||||
"(e.g., setting up for the first time on a new smartphone, starting from a clean slate)": "(p. ej., configurando por primera vez un móvil nuevo, empezando de cero)",
|
||||
"(ex. Read chunks online) If this option is enabled, LiveSync reads chunks online directly instead of replicating them locally. Increasing Custom chunk size is recommended.": "(Ej: Leer chunks online) Lee chunks directamente en línea. Aumente tamaño de chunks personalizados",
|
||||
"(MB) If this is set, changes to local and remote files that are larger than this will be skipped. If the file becomes smaller again, a newer one will be used.": "(MB) Saltar cambios en archivos locales/remotos mayores a este tamaño. Si se reduce, se usará versión nueva",
|
||||
"(Mega chars)": "(Millones de caracteres)",
|
||||
"(Missing)": "(Falta)",
|
||||
"(Not recommended) If set, credentials will be stored in the file.": "(No recomendado) Almacena credenciales en el archivo",
|
||||
"(Obsolete) Use an old adapter for compatibility": "(Obsoleto) Usar adaptador antiguo",
|
||||
"(RegExp) Empty to sync all files. Set filter as a regular expression to limit synchronising files.": "(RegExp) Déjelo vacío para sincronizar todos los archivos. Defina un filtro como expresión regular para limitar los archivos que se sincronizan.",
|
||||
"(RegExp) If this is set, any changes to local and remote files that match this will be skipped.": "(RegExp) Si se establece, se omitirá cualquier cambio en archivos locales y remotos que coincida con este patrón.",
|
||||
"(Select this if you are already using synchronisation on another computer or smartphone.) This option is suitable if you are new to LiveSync and want to set it up from scratch.": "(Seleccione esto si ya utiliza la sincronización en otro ordenador o teléfono). Esta opción es adecuada si desea añadir este dispositivo a una configuración de LiveSync existente。",
|
||||
"(Select this if you are configuring this device as the first synchronisation device.) This option is suitable if you are new to LiveSync and want to set it up from scratch.": "(Seleccione esto si está configurando este dispositivo como el primer dispositivo de sincronización). Esta opción es adecuada si es nuevo en LiveSync y desea configurarlo desde cero。",
|
||||
"↑: Overwrite Remote": "↑: Sobrescribir remoto",
|
||||
"↓: Overwrite Local": "↓: Sobrescribir local",
|
||||
"⇅: Use newer": "⇅: Usar el más nuevo",
|
||||
"+1 week": "+1 semana",
|
||||
"> [!INFO]- The connected devices have been detected as follows:\n${devices}": "> [!INFO]- Se han detectado los siguientes dispositivos conectados:\n${devices}",
|
||||
"⚠️ Important Notice": "⚠️ Aviso importante",
|
||||
"⚠️ Please Confirm the Following": "⚠️ Confirma lo siguiente",
|
||||
"✔ SELECT": "✔ SELECCIONAR",
|
||||
"✔ SYNC": "✔ SINCRONIZAR",
|
||||
"✔ WATCH": "✔ OBSERVAR",
|
||||
"📡 Off": "📡 Desactivado",
|
||||
"📡 On": "📡 Activado",
|
||||
"🔴 Disconnected": "🔴 Desconectado",
|
||||
"🕵️ Diag": "🕵️ Diagnóstico",
|
||||
"🗑 Delete": "🗑 Eliminar",
|
||||
"🟢 Connected": "🟢 Conectado",
|
||||
"${count} issue(s) detected!": "¡${count} problema(s) detectado(s)!",
|
||||
"A Setup URI is a single string of text containing your server address and authentication details. Using a URI, if one was generated by your server installation script, provides a simple and secure configuration.": "Un URI de configuración es una única cadena de texto que contiene la dirección del servidor y los datos de autenticación. Si el script de instalación de su servidor generó un URI, usarlo proporciona una configuración sencilla y segura。",
|
||||
"Accept": "Aceptar",
|
||||
"Accept in session": "Aceptar en esta sesión",
|
||||
"ACCEPTED": "ACEPTADO",
|
||||
"ACCEPTED (in session)": "ACEPTADO (en esta sesión)",
|
||||
"Access Key": "Clave de acceso",
|
||||
"Access Key ID": "ID de clave de acceso",
|
||||
"Action": "Acción",
|
||||
"Activate": "Activar",
|
||||
"Active Remote Configuration": "Configuración remota activa",
|
||||
"Add default patterns": "Añadir patrones predeterminados",
|
||||
"Add new connection": "Añadir conexión",
|
||||
"AddOn Module (ConfigSync) has not been loaded. This is very unexpected situation. Please report this issue.": "El módulo complementario (ConfigSync) no se ha cargado. Esta situación es muy inesperada. Informa de este problema.",
|
||||
"AddOn Module (HiddenFileSync) has not been loaded. This is very unexpected situation. Please report this issue.": "El módulo complementario (HiddenFileSync) no se ha cargado. Esta situación es muy inesperada. Informa de este problema.",
|
||||
"Advanced": "Avanzado",
|
||||
"Advanced Settings": "Ajustes avanzados",
|
||||
"After restarting, the data on this device will be uploaded to the server as the 'master copy'. Please be aware that any unintended data currently on the server will be completely overwritten.": "Tras reiniciar, los datos de este dispositivo se subirán al servidor como «copia maestra». Ten en cuenta que cualquier dato no deseado que haya ahora en el servidor se sobrescribirá por completo.",
|
||||
"After restarting, the database on this device will be rebuilt using data from the server. If there are any unsynchronised files in this vault, conflicts may occur with the server data.": "Tras reiniciar, la base de datos de este dispositivo se reconstruirá con los datos del servidor. Si hay archivos sin sincronizar en este vault, pueden producirse conflictos con los datos del servidor.",
|
||||
"After that, synchronise to a brand new vault on each other device with the new remote one by one.": "Después, sincroniza con un vault totalmente nuevo en cada uno de los demás dispositivos, uno por uno, usando el nuevo remoto.",
|
||||
"All checks passed successfully!": "¡Todas las comprobaciones se han superado correctamente!",
|
||||
"All devices have the same progress value (${progress}). Your devices seem to be synchronised. And be able to proceed with Garbage Collection.": "Todos los dispositivos tienen el mismo valor de progreso (${progress}). Parece que están sincronizados, por lo que se puede continuar con la recolección de basura.",
|
||||
"All the same or non-existent": "Todo igual o inexistente",
|
||||
"Allow in session": "Permitir en esta sesión",
|
||||
"Allow permanently": "Permitir permanentemente",
|
||||
"Also, please note that if you are using Peer-to-Peer synchronization, this configuration will be used when you switch to other methods and connect to a remote server in the future.": "Además, si usas sincronización punto a punto, esta configuración se aplicará cuando en el futuro cambies a otros métodos y te conectes a un servidor remoto.",
|
||||
"Always prompt merge conflicts": "Siempre preguntar en conflictos",
|
||||
"Analyse": "Analizar",
|
||||
"Analyse database usage": "Analizar el uso de la base de datos",
|
||||
"Analyse database usage and generate a TSV report for diagnosis yourself. You can paste the generated report with any spreadsheet you like.": "Analiza el uso de la base de datos y genera un informe TSV para que puedas diagnosticarlo tú mismo. Puedes pegar el informe generado en la hoja de cálculo que prefieras.",
|
||||
"Apply All Selected": "Aplicar todo lo seleccionado",
|
||||
"Apply Latest Change if Conflicting": "Aplicar último cambio en conflictos",
|
||||
"Apply preset configuration": "Aplicar configuración predefinida",
|
||||
"Apply the settings": "Aplicar los ajustes",
|
||||
"Ask a passphrase at every launch": "Solicitar la frase de contraseña en cada inicio",
|
||||
"Auto Connect": "Conexión automática",
|
||||
"Auto Start P2P Connection": "Iniciar la conexión P2P automáticamente",
|
||||
"Automatic": "Automático",
|
||||
"Automatically Sync all files when opening Obsidian.": "Sincronizar automáticamente todos los archivos al abrir Obsidian",
|
||||
"Available Peers": "Pares disponibles",
|
||||
"Back": "Volver",
|
||||
"Back to non-configured": "Volver a no configurado",
|
||||
"Batch database update": "Actualización por lotes de BD",
|
||||
@@ -35,19 +80,31 @@
|
||||
"Batch size": "Tamaño de lote",
|
||||
"Batch size of on-demand fetching": "Tamaño de lote para obtención bajo demanda",
|
||||
"Before v0.17.16, we used an old adapter for the local database. Now the new adapter is preferred. However, it needs local database rebuilding. Please disable this toggle when you have enough time. If leave it enabled, also while fetching from the remote database, you will be asked to disable this.": "Antes de v0.17.16 usábamos adaptador antiguo. Nuevo adaptador requiere reconstruir BD local. Desactive cuando pueda",
|
||||
"Broadcasting?": "¿Difusión?",
|
||||
"Bucket Name": "Nombre del bucket",
|
||||
"by resetting the remote, you will be informed on other devices.": "al restablecer el remoto, se te avisará en los demás dispositivos.",
|
||||
"Cancel": "Cancelar",
|
||||
"Cancel Garbage Collection": "Cancelar la recolección de basura",
|
||||
"Changing the encryption algorithm will prevent access to any data previously encrypted with a different algorithm. Ensure that all your devices are configured to use the same algorithm to maintain access to your data.": "Cambiar el algoritmo de cifrado impedirá acceder a los datos cifrados previamente con otro algoritmo. Asegúrate de que todos tus dispositivos usen el mismo algoritmo para no perder el acceso a tus datos.",
|
||||
"Changing this setting requires migrating existing data (a bit time may be taken) and restarting Obsidian. Please make sure to back up your data before proceeding.": "Cambiar este ajuste requiere migrar los datos existentes (puede tardar un poco) y reiniciar Obsidian. Asegúrate de hacer una copia de seguridad de tus datos antes de continuar.",
|
||||
"Check": "Comprobar",
|
||||
"Check and convert non-path-obfuscated files": "Comprobar y convertir archivos sin ofuscación de ruta",
|
||||
"Check for documents that have not been converted to path-obfuscated IDs and convert them if necessary.": "Comprueba los documentos que aún no se hayan convertido a identificadores con ruta ofuscada y conviértelos si es necesario.",
|
||||
"Checking connection... Please wait.": "Comprobando la conexión... Espera un momento.",
|
||||
"Chunks": "Fragmentos (chunks)",
|
||||
"Close": "Cerrar",
|
||||
"Close & Disconnect": "Cerrar y desconectar",
|
||||
"Close this dialog": "Cerrar este diálogo",
|
||||
"Closed:": "Cerradas:",
|
||||
"cmdConfigSync.showCustomizationSync": "Mostrar sincronización de personalización",
|
||||
"Comma separated `.gitignore, .dockerignore`": "Separados por comas: `.gitignore, .dockerignore`",
|
||||
"Command": "Comando",
|
||||
"Communicating": "Comunicando",
|
||||
"Compaction in progress on remote database...": "Compactación en curso en la base de datos remota...",
|
||||
"Compaction on remote database completed successfully.": "La compactación de la base de datos remota se ha completado correctamente.",
|
||||
"Compaction on remote database failed.": "La compactación de la base de datos remota ha fallado.",
|
||||
"Compaction on remote database timed out.": "La compactación de la base de datos remota ha superado el tiempo de espera.",
|
||||
"Compare file": "Comparar archivo",
|
||||
"Compare the content of files between on local database and storage. If not matched, you will be asked which one you want to keep.": "Compara el contenido de los archivos entre la base de datos local y el almacenamiento. Si no coinciden, se te preguntará cuál deseas conservar.",
|
||||
"Compatibility (Conflict Behaviour)": "Compatibilidad (comportamiento de conflictos)",
|
||||
"Compatibility (Database structure)": "Compatibilidad (estructura de la base de datos)",
|
||||
@@ -57,48 +114,78 @@
|
||||
"Compatibility (Trouble addressed)": "Compatibilidad (problemas corregidos)",
|
||||
"Compute revisions for chunks": "Calcular revisiones para los chunks",
|
||||
"Compute revisions for chunks (Previous behaviour)": "Calcular revisiones para chunks (comportamiento anterior)",
|
||||
"Configuration": "Configuración",
|
||||
"Configuration Encryption": "Cifrado de configuración",
|
||||
"Configure": "Configurar",
|
||||
"Configure And Change Remote": "Configurar y cambiar remoto",
|
||||
"Configure E2EE": "Configurar E2EE",
|
||||
"Configure Remote": "Configurar remoto",
|
||||
"Configure the same server information as your other devices again, manually, very advanced users only.": "Configure manualmente la misma información del servidor que en sus otros dispositivos. Solo para usuarios muy avanzados。",
|
||||
"Connect": "Conectar",
|
||||
"Connected to Signaling Server (as Peer ID: ${peerId})": "Conectado al servidor de señalización (como ID de par: ${peerId})",
|
||||
"Connected:": "Conectadas:",
|
||||
"Connection Method": "Método de conexión",
|
||||
"Connection Settings": "Ajustes de conexión",
|
||||
"Connection:": "Conexión:",
|
||||
"Continue anyway": "Continuar de todos modos",
|
||||
"Continue to CouchDB setup": "Continuar con la configuración de CouchDB",
|
||||
"Continue to Peer-to-Peer only setup": "Continuar con la configuración solo Peer-to-Peer",
|
||||
"Continue to S3/MinIO/R2 setup": "Continuar con la configuración de S3/MinIO/R2",
|
||||
"Copy": "Copiar",
|
||||
"Copy Report to clipboard": "Copiar el informe al portapapeles",
|
||||
"CouchDB Configuration": "Configuración de CouchDB",
|
||||
"CouchDB Connection Tweak": "Ajustes de conexión de CouchDB",
|
||||
"Create P2P remote": "Crear remoto P2P",
|
||||
"Cross-platform": "Multiplataforma",
|
||||
"Current adapter: {adapter}": "Adaptador actual: {adapter}",
|
||||
"Custom Headers": "Encabezados personalizados",
|
||||
"Customization Sync": "Sincronización de personalización",
|
||||
"Customization Sync (Beta3)": "Sincronización de personalización (Beta3)",
|
||||
"Data Compression": "Compresión de datos",
|
||||
"Data to Copy": "Datos a copiar",
|
||||
"Database -> Storage": "Base de datos -> Almacenamiento",
|
||||
"Database Adapter": "Adaptador de base de datos",
|
||||
"Database Name": "Nombre de la base de datos",
|
||||
"Database suffix": "Sufijo de base de datos",
|
||||
"Date": "Fecha",
|
||||
"Default": "Predeterminado",
|
||||
"Delay conflict resolution of inactive files": "Retrasar resolución de conflictos en archivos inactivos",
|
||||
"Delay merge conflict prompt for inactive files.": "Retrasar aviso de fusión para archivos inactivos",
|
||||
"Delete": "Eliminar",
|
||||
"Delete all customization sync data": "Eliminar todos los datos de sincronización de personalización",
|
||||
"Delete all data on the remote server.": "Eliminar todos los datos del servidor remoto.",
|
||||
"Delete All of": "Eliminar todo de",
|
||||
"Delete local database to reset or uninstall Self-hosted LiveSync": "Eliminar la base de datos local para restablecer o desinstalar Self-hosted LiveSync",
|
||||
"Delete old metadata of deleted files on start-up": "Borrar metadatos viejos al iniciar",
|
||||
"Delete Remote Configuration": "Eliminar configuración remota",
|
||||
"Delete remote configuration '{name}'?": "¿Eliminar la configuración remota '{name}'?",
|
||||
"Delete remote configuration '${name}'?": "¿Eliminar la configuración remota «${name}»?",
|
||||
"DENIED": "DENEGADO",
|
||||
"DENIED (in session)": "DENEGADO (en esta sesión)",
|
||||
"Deny": "Denegar",
|
||||
"Deny in session": "Denegar en esta sesión",
|
||||
"Deny permanently": "Denegar permanentemente",
|
||||
"Deselect all": "Deseleccionar todo",
|
||||
"desktop": "equipo de escritorio",
|
||||
"Detected Peers": "Pares detectados",
|
||||
"Developer": "Desarrollador",
|
||||
"Device": "Dispositivo",
|
||||
"device name": "nombre del dispositivo",
|
||||
"Device name": "Nombre del dispositivo",
|
||||
"Device name to identify the device. Please use shorter one for the stable peer detection, i.e., \"iphone-16\" or \"macbook-2021\".": "Nombre para identificar el dispositivo. Usa uno corto para que la detección de pares sea estable, por ejemplo «iphone-16» o «macbook-2021».",
|
||||
"Device Peer ID": "ID de par del dispositivo",
|
||||
"Device Setup Method": "Método de configuración del dispositivo",
|
||||
"Devices:": "Dispositivos:",
|
||||
"Diagnostic RTCPeerConnection is enabled": "El RTCPeerConnection de diagnóstico está habilitado",
|
||||
"dialog.yourLanguageAvailable": "Self-hosted LiveSync tenía traducciones para tu idioma, así que se ha activado el ajuste %{Display language}.\n\nNota: no todos los mensajes están traducidos. ¡Esperamos tus contribuciones!\nNota 2: si abres una incidencia, **vuelve antes a %{lang-def}** y luego haz las capturas de pantalla y recoge los mensajes y registros. Puedes hacerlo desde el diálogo de ajustes.\n¡Que lo disfrutes!",
|
||||
"dialog.yourLanguageAvailable.btnRevertToDefault": "Mantener %{lang-def}",
|
||||
"dialog.yourLanguageAvailable.Title": " ¡Hay traducción disponible!",
|
||||
"Diff": "Diferencias",
|
||||
"Different": "Distinto",
|
||||
"Disables all synchronization and restart.": "Desactiva toda la sincronización y reinicia la aplicación.",
|
||||
"Disables logging, only shows notifications. Please disable if you report an issue.": "Desactiva registros, solo muestra notificaciones. Desactívelo si reporta un problema.",
|
||||
"Disconnect": "Desconectar",
|
||||
"Dismiss": "Descartar",
|
||||
"Display Language": "Idioma de visualización",
|
||||
"Display name": "Nombre para mostrar",
|
||||
"Do not check configuration mismatch before replication": "No verificar incompatibilidades antes de replicar",
|
||||
@@ -137,33 +224,70 @@
|
||||
"Enable customization sync": "Habilitar sincronización de personalización",
|
||||
"Enable Developers' Debug Tools.": "Habilitar herramientas de depuración",
|
||||
"Enable edge case treatment features": "Habilitar manejo de casos límite",
|
||||
"Enable P2P Replicator": "Habilitar el replicador P2P",
|
||||
"Enable poweruser features": "Habilitar funciones para usuarios avanzados",
|
||||
"Enable this if your Object Storage doesn't support CORS": "Habilitar si su almacenamiento no soporta CORS",
|
||||
"Enable this option to automatically apply the most recent change to documents even when it conflicts": "Aplicar cambios recientes automáticamente aunque generen conflictos",
|
||||
"Enabled": "Habilitado",
|
||||
"Enabling end-to-end encryption ensures that your data is encrypted on your device before being sent to the remote server. This means that even if someone gains access to the server, they won't be able to read your data without the passphrase. Make sure to remember your passphrase, as it will be required to decrypt your data on other devices.": "Activar el cifrado de extremo a extremo garantiza que tus datos se cifren en tu dispositivo antes de enviarse al servidor remoto. Así, aunque alguien acceda al servidor, no podrá leer tus datos sin la frase de contraseña. Recuérdala bien, porque será necesaria para descifrar tus datos en los demás dispositivos.",
|
||||
"Encrypt contents on the remote database. If you use the plugin's synchronization feature, enabling this is recommended.": "Cifrar contenido en la base de datos remota. Se recomienda habilitar si usa la sincronización del plugin.",
|
||||
"Encrypting sensitive configuration items": "Cifrando elementos sensibles",
|
||||
"Encryption Algorithm": "Algoritmo de cifrado",
|
||||
"Encryption phassphrase. If changed, you should overwrite the server's database with the new (encrypted) files.": "Frase de cifrado. Si la cambia, sobrescriba la base del servidor con los nuevos archivos cifrados.",
|
||||
"End-to-End Encryption": "Cifrado de extremo a extremo",
|
||||
"Endpoint URL": "URL del endpoint",
|
||||
"Enhance chunk size": "Mejorar tamaño de chunks",
|
||||
"Enter a folder prefix (optional)": "Introduce un prefijo de carpeta (opcional)",
|
||||
"Enter Server Information": "Introducir información del servidor",
|
||||
"Enter Setup URI": "Introducir el Setup URI",
|
||||
"Enter the server information manually": "Introducir manualmente la información del servidor",
|
||||
"Enter TURN credential": "Introduce la credencial de TURN",
|
||||
"Enter TURN username": "Introduce el usuario de TURN",
|
||||
"Enter your Access Key ID": "Introduce tu ID de clave de acceso",
|
||||
"Enter your Bucket Name": "Introduce el nombre de tu bucket",
|
||||
"Enter your database name": "Introduce el nombre de tu base de datos",
|
||||
"Enter your JWT Key ID": "Introduce el ID de tu clave JWT",
|
||||
"Enter your JWT secret or private key": "Introduce tu secreto JWT o tu clave privada",
|
||||
"Enter your JWT Subject (CouchDB Username)": "Introduce el sujeto JWT (usuario de CouchDB)",
|
||||
"Enter your passphrase": "Introduce tu frase de contraseña",
|
||||
"Enter your password": "Introduce tu contraseña",
|
||||
"Enter your Region (e.g., us-east-1, auto for R2)": "Introduce tu región (p. ej., us-east-1, o auto para R2)",
|
||||
"Enter your Secret Access Key": "Introduce tu clave de acceso secreta",
|
||||
"Enter your username": "Introduce tu usuario",
|
||||
"Error during connection test: ${reason}": "Error durante la prueba de conexión: ${reason}",
|
||||
"Error during testAndFixSettings: ${reason}": "Error durante testAndFixSettings: ${reason}",
|
||||
"Experimental Settings": "Ajustes experimentales",
|
||||
"Export": "Exportar",
|
||||
"Failed to connect to remote for compaction.": "No se pudo conectar al remoto para la compactación.",
|
||||
"Failed to connect to remote for compaction. ${reason}": "No se pudo conectar al remoto para la compactación. ${reason}",
|
||||
"Failed to connect to the server: ${reason}": "No se pudo conectar al servidor: ${reason}",
|
||||
"Failed to connect to the server. Please check your settings.": "No se pudo conectar al servidor. Revisa tus ajustes.",
|
||||
"Failed to connect to the signalling relay: ${reason}": "No se pudo conectar al relé de señalización: ${reason}",
|
||||
"Failed to create replicator instance.": "No se pudo crear la instancia del replicador.",
|
||||
"Failed to parse Setup-URI.": "No se pudo interpretar el Setup-URI.",
|
||||
"Failed to start one-shot replication before Garbage Collection. Garbage Collection Cancelled.": "No se pudo iniciar la replicación puntual previa a la recolección de basura. Recolección de basura cancelada.",
|
||||
"Failed to start replication after Garbage Collection.": "No se pudo iniciar la replicación después de la recolección de basura.",
|
||||
"Failed:": "Fallidas:",
|
||||
"Fetch": "Obtener",
|
||||
"Fetch chunks on demand": "Obtener chunks bajo demanda",
|
||||
"Fetch database with previous behaviour": "Obtener BD con comportamiento anterior",
|
||||
"Fetch remote settings": "Obtener ajustes remotos",
|
||||
"FETCHING": "OBTENIENDO",
|
||||
"Fetching status...": "Obteniendo el estado...",
|
||||
"File integrity": "Integridad de archivos",
|
||||
"File to resolve conflict": "Archivo para resolver el conflicto",
|
||||
"File to view History": "Archivo cuyo historial se va a ver",
|
||||
"Filename": "Nombre de archivo",
|
||||
"Final Confirmation: Overwrite Server Data with This Device's Files": "Confirmación final: sobrescribir los datos del servidor con los archivos de este dispositivo",
|
||||
"First, please select the option that best describes your current situation.": "Primero, seleccione la opción que describa mejor su situación actual。",
|
||||
"Fix": "Corregir",
|
||||
"Flag and restart": "Marcar y reiniciar",
|
||||
"Flagged Selective": "Selectivo marcado",
|
||||
"Folder Prefix": "Prefijo de carpeta",
|
||||
"For HS256/HS512 algorithms, provide the shared secret key. For ES256/ES512 algorithms, provide the pkcs8 PEM-formatted private key.": "Para los algoritmos HS256/HS512, indica la clave secreta compartida. Para ES256/ES512, indica la clave privada en formato PEM pkcs8.",
|
||||
"Forces the file to be synced when opened.": "Forzar sincronización al abrir archivo",
|
||||
"Fresh Start Wipe": "Borrado para reinicio completo",
|
||||
"Furthermore, if conflicts are already present in the server data, they will be synchronised to this device as they are, and you will need to resolve them locally.": "Además, si ya hay conflictos en los datos del servidor, se sincronizarán tal cual a este dispositivo y tendrás que resolverlos localmente.",
|
||||
"Garbage Collection cancelled by user.": "Recolección de basura cancelada por el usuario.",
|
||||
"Garbage Collection completed. Deleted chunks: ${deletedChunks} / ${totalChunks}. Time taken: ${seconds} seconds.": "Recolección de basura completada. Chunks eliminados: ${deletedChunks} / ${totalChunks}. Tiempo empleado: ${seconds} segundos.",
|
||||
"Garbage Collection Confirmation": "Confirmación de la recolección de basura",
|
||||
@@ -171,15 +295,33 @@
|
||||
"Garbage Collection: Found ${unusedChunks} unused chunks to delete.": "Recolección de basura: se han encontrado ${unusedChunks} chunks sin usar para eliminar.",
|
||||
"Garbage Collection: Scanned ${scanned} / ~${docCount}": "Recolección de basura: analizados ${scanned} / ~${docCount}",
|
||||
"Garbage Collection: Scanning completed. Total chunks: ${totalChunks}, Used chunks: ${usedChunks}": "Recolección de basura: análisis completado. Chunks totales: ${totalChunks}, chunks en uso: ${usedChunks}",
|
||||
"Gathering information...": "Recopilando información...",
|
||||
"Generate Random ID": "Generar un ID aleatorio",
|
||||
"Group ID": "ID de grupo",
|
||||
"Handle files as Case-Sensitive": "Manejar archivos como sensibles a mayúsculas",
|
||||
"Have you created a backup before proceeding?": "¿Has creado una copia de seguridad antes de continuar?",
|
||||
"Hidden file synchronization have been temporarily disabled. Please enable them after the fetching, if you need them.": "La sincronización de archivos ocultos se ha desactivado temporalmente. Vuelve a activarla después de la obtención si la necesitas.",
|
||||
"Hidden Files": "Archivos ocultos",
|
||||
"Hide completely": "Ocultar por completo",
|
||||
"Hide not applicable items": "Ocultar elementos no aplicables",
|
||||
"Higher (${local} > ${remote})": "Superior (${local} > ${remote})",
|
||||
"Highlight diff": "Resaltar las diferencias",
|
||||
"How to display network errors when the sync server is unreachable.": "Cómo mostrar los errores de red cuando el servidor de sincronización no está disponible.",
|
||||
"How would you like to configure the connection to your server?": "¿Cómo desea configurar la conexión con su servidor?",
|
||||
"However, This should not be enabled if you want to increase your secrecy more.": "Sin embargo, esto no debería habilitarse si quieres aumentar aún más tu privacidad.",
|
||||
"I am adding a device to an existing synchronisation setup": "Estoy agregando un dispositivo a una configuración de sincronización existente",
|
||||
"I am setting this up for the first time": "Estoy configurando esto por primera vez",
|
||||
"I am setting up a new server for the first time / I want to reset my existing server.": "Estoy configurando un servidor nuevo por primera vez / quiero restablecer mi servidor actual.",
|
||||
"I am unable to create a backup of my Vault.": "No puedo crear una copia de seguridad de mi Vault.",
|
||||
"I am unable to create a backup of my Vaults.": "No puedo crear una copia de seguridad de mis Vaults.",
|
||||
"I have created a backup of my Vault.": "He creado una copia de seguridad de mi Vault.",
|
||||
"I know my server details, let me enter them": "Conozco los datos de mi servidor; permítame introducirlos",
|
||||
"I understand that all changes made on other smartphones or computers possibly could be lost.": "Entiendo que todos los cambios hechos en otros móviles u ordenadores podrían perderse.",
|
||||
"I understand that other devices will no longer be able to synchronise, and will need to be reset the synchronisation information.": "Entiendo que los demás dispositivos ya no podrán sincronizar y que habrá que restablecer su información de sincronización.",
|
||||
"I understand that this action is irreversible once performed.": "Entiendo que esta acción es irreversible una vez realizada.",
|
||||
"I understand the risks and will proceed without a backup.": "Entiendo los riesgos y continuaré sin copia de seguridad.",
|
||||
"I Understand, Overwrite Server": "Lo entiendo, sobrescribir el servidor",
|
||||
"If \"Auto Start P2P Connection\" is enabled, the P2P connection will be started automatically when the plug-in launches.": "Si «Iniciar la conexión P2P automáticamente» está activado, la conexión P2P se iniciará al arrancar el complemento.",
|
||||
"If disabled(toggled), chunks will be split on the UI thread (Previous behaviour).": "Si se desactiva, chunks se dividen en hilo UI (comportamiento anterior)",
|
||||
"If enabled per-filed efficient customization sync will be used. We need a small migration when enabling this. And all devices should be updated to v0.23.18. Once we enabled this, we lost a compatibility with old versions.": "Habilita sincronización eficiente por archivo. Requiere migración y actualizar todos dispositivos a v0.23.18. Pierde compatibilidad con versiones antiguas",
|
||||
"If enabled, chunks will be split into no more than 100 items. However, dedupe is slightly weaker.": "Divide chunks en máximo 100 ítems. Menos eficiente en deduplicación",
|
||||
@@ -192,16 +334,38 @@
|
||||
"If this enabled, chunks will be split into semantically meaningful segments. Not all platforms support this feature.": "Divide chunks en segmentos semánticos. No todos los sistemas lo soportan",
|
||||
"If this is set, changes to local files which are matched by the ignore files will be skipped. Remote changes are determined using local ignore files.": "Saltar cambios en archivos locales que coincidan con ignore files. Cambios remotos usan ignore files locales",
|
||||
"If this option is enabled, PouchDB will hold the connection open for 60 seconds, and if no change arrives in that time, close and reopen the socket, instead of holding it open indefinitely. Useful when a proxy limits request duration but can increase resource usage.": "Mantiene conexión 60s. Si no hay cambios, reinicia socket. Útil con proxies limitantes",
|
||||
"If you cannot avoid CORS issues, you might want to try this option. It uses Obsidian's internal API to communicate with the CouchDB server. Not compliant with web standards, but works. Note that this might break in future Obsidian versions.": "Si no puedes evitar problemas de CORS, prueba esta opción. Usa la API interna de Obsidian para comunicarse con el servidor CouchDB. No cumple los estándares web, pero funciona. Ten en cuenta que podría dejar de funcionar en versiones futuras de Obsidian.",
|
||||
"If you cannot avoid CORS issues, you might want to try this option. It uses Obsidian's internal API to communicate with the S3 server. Not compliant with web standards, but works. Note that this might break in future Obsidian versions.": "Si no puedes evitar problemas de CORS, prueba esta opción. Usa la API interna de Obsidian para comunicarse con el servidor S3. No cumple los estándares web, pero funciona. Ten en cuenta que podría dejar de funcionar en versiones futuras de Obsidian.",
|
||||
"If you have unsynchronised changes in your Vault on this device, they will likely diverge from the server's versions after the reset. This may result in a large number of file conflicts.": "Si tienes cambios sin sincronizar en el Vault de este dispositivo, es probable que divergan de las versiones del servidor tras el restablecimiento. Esto puede provocar un gran número de conflictos de archivos.",
|
||||
"If you reached the payload size limit when using IBM Cloudant, please decrease batch size and batch limit to a lower value.": "Si alcanzas el límite de tamaño de carga al usar IBM Cloudant, reduce el tamaño de lote y el límite de lote.",
|
||||
"If you understand the risks and still wish to proceed, select so.": "Si entiendes los riesgos y aun así quieres continuar, indícalo.",
|
||||
"If you want to store the data in a specific folder within the bucket, you can specify a folder prefix here. Otherwise, leave it blank to store data at the root of the bucket.": "Si quieres guardar los datos en una carpeta concreta del bucket, indica aquí un prefijo de carpeta. Si no, déjalo vacío para guardarlos en la raíz del bucket.",
|
||||
"If you want to use `LiveSync`, you should broadcast changes. All `watching` peers which detects this will start the replication for fetching.": "Si quieres usar `LiveSync`, debes difundir los cambios. Todos los pares que estén `observando` y lo detecten iniciarán la replicación para obtenerlos.",
|
||||
"Ignore": "Ignorar",
|
||||
"Ignore and Proceed": "Ignorar y continuar",
|
||||
"Ignore files": "Archivos a ignorar",
|
||||
"Ignore patterns": "Patrones de exclusión",
|
||||
"Import connection": "Importar conexión",
|
||||
"IMPORTANT": "IMPORTANTE",
|
||||
"In most cases, you should stick with the default algorithm (${algorithm}), This setting is only required if you have an existing Vault encrypted in a different format.": "En la mayoría de los casos deberías mantener el algoritmo predeterminado (${algorithm}). Este ajuste solo es necesario si ya tienes un Vault cifrado en otro formato.",
|
||||
"In this scenario, Self-hosted LiveSync will recreate metadata for every file and deliberately generate conflicts. Where the file content is identical, these conflicts will be resolved automatically.": "En este caso, Self-hosted LiveSync recreará los metadatos de todos los archivos y generará conflictos a propósito. Cuando el contenido del archivo sea idéntico, esos conflictos se resolverán automáticamente.",
|
||||
"Incoming:": "Entrantes:",
|
||||
"Incubate Chunks in Document": "Incubar chunks en documento",
|
||||
"Initial Action": "Acción inicial",
|
||||
"Initialise all journal history, On the next sync, every item will be received and sent.": "Restablece todo el historial del diario. En la próxima sincronización se recibirán y enviarán todos los elementos.",
|
||||
"Initialise journal received history. On the next sync, every item except this device sent will be downloaded again.": "Inicializa el historial de recepción del diario. En la próxima sincronización se volverán a descargar todos los elementos salvo los enviados por este dispositivo.",
|
||||
"Initialise journal sent history. On the next sync, every item except this device received will be sent again.": "Inicializa el historial de envío del diario. En la próxima sincronización se volverán a enviar todos los elementos salvo los recibidos por este dispositivo.",
|
||||
"Interval (sec)": "Intervalo (segundos)",
|
||||
"INVERTED": "INVERTIDO",
|
||||
"Issue detection log:": "Registro de detección de problemas:",
|
||||
"It is strongly advised to create a backup before proceeding. Continuing without a backup may lead to data loss.": "Se recomienda encarecidamente crear una copia de seguridad antes de continuar. Continuar sin copia de seguridad puede provocar pérdida de datos.",
|
||||
"Just for a minute, please!": "¡Solo un momento, por favor!",
|
||||
"JWT (JSON Web Token) authentication allows you to securely authenticate with the CouchDB server using tokens. Ensure that your CouchDB server is configured to accept JWTs and that the provided key and settings match the server's configuration. Incidentally, I have not verified it very thoroughly.": "La autenticación JWT (JSON Web Token) permite autenticarse de forma segura con el servidor CouchDB mediante tokens. Asegúrate de que tu servidor CouchDB esté configurado para aceptar JWT y de que la clave y los ajustes indicados coincidan con la configuración del servidor. Por cierto, no lo he verificado a fondo.",
|
||||
"JWT Algorithm": "Algoritmo JWT",
|
||||
"JWT Expiration Duration (minutes)": "Duración de caducidad del JWT (minutos)",
|
||||
"JWT Key": "Clave JWT",
|
||||
"JWT Key ID (kid)": "ID de clave JWT (kid)",
|
||||
"JWT Subject (sub)": "Sujeto JWT (sub)",
|
||||
"K.exp": "Experimental",
|
||||
"K.long_p2p_sync": "%{title_p2p_sync}",
|
||||
"K.P2P": "%{Peer} a %{Peer}",
|
||||
@@ -223,6 +387,7 @@
|
||||
"lang-zh-tw": "Chino tradicional",
|
||||
"Later": "Más tarde",
|
||||
"Limit: {datetime} ({timestamp})": "Límite: {datetime} ({timestamp})",
|
||||
"live": "en vivo",
|
||||
"LiveSync could not handle multiple vaults which have same name without different prefix, This should be automatically configured.": "LiveSync no puede manejar múltiples bóvedas con mismo nombre sin prefijo. Se configura automáticamente",
|
||||
"liveSyncReplicator.beforeLiveSync": "Antes de LiveSync, inicia OneShot...",
|
||||
"liveSyncReplicator.cantReplicateLowerValue": "No podemos replicar un valor más bajo.",
|
||||
@@ -251,6 +416,7 @@
|
||||
"liveSyncSetting.valueShouldBeInRange": "El valor debe estar entre ${min} y ${max}",
|
||||
"liveSyncSettings.btnApply": "Aplicar",
|
||||
"Local Database Tweak": "Ajustes de la base de datos local",
|
||||
"Local only": "Solo local",
|
||||
"Lock": "Bloquear",
|
||||
"Lock Server": "Bloquear servidor",
|
||||
"Lock the remote server to prevent synchronization with other devices.": "Bloquea el servidor remoto para impedir la sincronización con otros dispositivos.",
|
||||
@@ -259,6 +425,9 @@
|
||||
"logPane.pause": "Pausar",
|
||||
"logPane.title": "Registro de Self-hosted LiveSync",
|
||||
"logPane.wrap": "Ajustar",
|
||||
"Lower (${local} < ${remote})": "Inferior (${local} < ${remote})",
|
||||
"Maintenance Commands": "Comandos de mantenimiento",
|
||||
"Maintenance mode": "Modo de mantenimiento",
|
||||
"Maximum delay for batch database updating": "Retraso máximo para actualización por lotes",
|
||||
"Maximum file size": "Tamaño máximo de archivo",
|
||||
"Maximum Incubating Chunk Size": "Tamaño máximo de chunks incubados",
|
||||
@@ -271,6 +440,7 @@
|
||||
"Merge": "Fusionar",
|
||||
"Minimum delay for batch database updating": "Retraso mínimo para actualización por lotes",
|
||||
"Minimum interval for syncing": "Intervalo mínimo de sincronización",
|
||||
"Mixed": "Mixto",
|
||||
"moduleCheckRemoteSize.logCheckingStorageSizes": "Comprobando tamaños de almacenamiento",
|
||||
"moduleCheckRemoteSize.logCurrentStorageSize": "Tamaño del almacenamiento remoto: ${measuredSize}",
|
||||
"moduleCheckRemoteSize.logExceededWarning": "Tamaño del almacenamiento remoto: ${measuredSize} superó ${notifySize}",
|
||||
@@ -353,23 +523,39 @@
|
||||
"moduleMigration.titleWelcome": "Bienvenido a Self-hosted LiveSync",
|
||||
"moduleObsidianMenu.replicate": "Replicar",
|
||||
"More actions": "Más acciones",
|
||||
"Mostly Complete: Decision Required": "Casi terminado: se requiere una decisión",
|
||||
"Move remotely deleted files to the trash, instead of deleting.": "Mover archivos borrados remotos a papelera en lugar de eliminarlos",
|
||||
"My remote server is already set up. I want to join this device.": "Mi servidor remoto ya está configurado. Quiero añadir este dispositivo.",
|
||||
"Name": "Nombre",
|
||||
"Network warning style": "Estilo de advertencia de red",
|
||||
"NEW": "NUEVO",
|
||||
"New Remote": "Nuevo remoto",
|
||||
"Newer (${diff})": "Más nuevo (${diff})",
|
||||
"No checks have been performed yet.": "Todavía no se ha realizado ninguna comprobación.",
|
||||
"No connected device information found. Cancelling Garbage Collection.": "No se ha encontrado información de dispositivos conectados. Se cancela la recolección de basura.",
|
||||
"No Connection": "Sin conexión",
|
||||
"No devices available. Waiting for other devices to connect...": "No hay dispositivos disponibles. Esperando a que se conecten otros dispositivos...",
|
||||
"No Items.": "Sin elementos.",
|
||||
"No limit configured": "Sin límite configurado",
|
||||
"NO PREVIEW": "SIN VISTA PREVIA",
|
||||
"No, please take me back": "No, volver atrás",
|
||||
"Node ID": "ID de nodo",
|
||||
"Node Information Missing": "Falta la información del nodo",
|
||||
"Non-Synchronising files": "Archivos no sincronizados",
|
||||
"Normal Files": "Archivos normales",
|
||||
"Not all messages have been translated. And, please revert to \"Default\" when reporting errors.": "No todos los mensajes están traducidos. Por favor, vuelva a \"Predeterminado\" al reportar errores.",
|
||||
"Not configured": "Sin configurar",
|
||||
"Not now": "Ahora no",
|
||||
"Note that the Group ID is not limited to the generated format; you can use any string as the Group ID.": "El ID de grupo no está limitado al formato generado: puedes usar cualquier cadena de texto.",
|
||||
"Note that you can generate a new Setup URI by running the \"Copy settings as a new Setup URI\" command in the command palette.": "Puedes generar un Setup URI nuevo ejecutando el comando «Copy settings as a new Setup URI» en la paleta de comandos.",
|
||||
"Notify all setting files": "Notificar todos los archivos de configuración",
|
||||
"Notify customized": "Notificar personalizaciones",
|
||||
"Notify when other device has newly customized.": "Notificar cuando otro dispositivo personalice",
|
||||
"Notify when the estimated remote storage size exceeds on start up": "Notificar cuando el tamaño estimado del almacenamiento remoto exceda al iniciar",
|
||||
"Number of batches to process at a time. Defaults to 40. Minimum is 2. This along with batch size controls how many docs are kept in memory at a time.": "Número de lotes a procesar. Default 40, mínimo 2. Controla documentos en memoria",
|
||||
"Number of changes to sync at a time. Defaults to 50. Minimum is 2.": "Número de cambios a sincronizar simultáneamente. Default 50, mínimo 2",
|
||||
"Obfuscate Properties": "Ofuscar propiedades",
|
||||
"Obfuscating properties (e.g., path of file, size, creation and modification dates) adds an additional layer of security by making it harder to identify the structure and names of your files and folders on the remote server. This helps protect your privacy and makes it more difficult for unauthorized users to infer information about your data.": "Ofuscar las propiedades (p. ej., la ruta del archivo, el tamaño y las fechas de creación y modificación) añade una capa extra de seguridad, ya que dificulta identificar la estructura y los nombres de tus archivos y carpetas en el servidor remoto. Esto ayuda a proteger tu privacidad y hace más difícil que usuarios no autorizados deduzcan información sobre tus datos.",
|
||||
"Obsidian version": "Versión de Obsidian",
|
||||
"obsidianLiveSyncSettingTab.btnApply": "Aplicar",
|
||||
"obsidianLiveSyncSettingTab.btnCheck": "Verificar",
|
||||
@@ -541,16 +727,29 @@
|
||||
"obsidianLiveSyncSettingTab.titleUpdateThinning": "Actualización de adelgazamiento",
|
||||
"obsidianLiveSyncSettingTab.warnCorsOriginUnmatched": "⚠ El origen de CORS no coincide: {from}->{to}",
|
||||
"obsidianLiveSyncSettingTab.warnNoAdmin": "⚠ No tienes privilegios de administrador.",
|
||||
"Of course, we can back up the data before proceeding.": "Por supuesto, se puede hacer una copia de seguridad de los datos antes de continuar.",
|
||||
"Off": "Desactivado",
|
||||
"Ok": "Aceptar",
|
||||
"Old Algorithm": "Algoritmo antiguo",
|
||||
"Older (${diff})": "Más antiguo (${diff})",
|
||||
"Older fallback (Slow, W/O WebAssembly)": "Alternativa anterior (lenta, sin WebAssembly)",
|
||||
"On": "Activado",
|
||||
"On the source device, from the command palette, run the 'Show settings as a QR code' command.": "En el dispositivo de origen, ejecuta desde la paleta de comandos «Show settings as a QR code».",
|
||||
"On the source device, open Obsidian.": "En el dispositivo de origen, abre Obsidian.",
|
||||
"On this device, please keep this Vault open.": "En este dispositivo, mantén este Vault abierto.",
|
||||
"On this device, switch to the camera app or use a QR code scanner to scan the displayed QR code.": "En este dispositivo, cambia a la aplicación de cámara o usa un lector de QR para escanear el código mostrado.",
|
||||
"Open": "Abrir",
|
||||
"Open connection": "Abrir conexión",
|
||||
"Open P2P Setup...": "Abrir la configuración P2P...",
|
||||
"Open the dialog": "Abrir el diálogo",
|
||||
"Other files": "Otros archivos",
|
||||
"Overwrite": "Sobrescribir",
|
||||
"Overwrite patterns": "Patrones de sobrescritura",
|
||||
"Overwrite remote": "Sobrescribir remoto",
|
||||
"Overwrite remote with local DB and passphrase.": "Sobrescribe el remoto con la base de datos local y la frase de contraseña.",
|
||||
"Overwrite Server Data with This Device's Files": "Sobrescribir los datos del servidor con los archivos de este dispositivo",
|
||||
"P2P Configuration": "Configuración P2P",
|
||||
"P2P Status": "Estado P2P",
|
||||
"P2P.AskPassphraseForDecrypt": "El par remoto ha compartido la configuración. Introduce la frase de contraseña para descifrarla.",
|
||||
"P2P.AskPassphraseForShare": "El par remoto ha solicitado la configuración de este dispositivo. Introduce la frase de contraseña para compartirla. Puedes ignorar la solicitud cancelando este diálogo.",
|
||||
"P2P.DisabledButNeed": "%{title_p2p_sync} está desactivada. ¿Seguro que quieres activarla?",
|
||||
@@ -574,36 +773,59 @@
|
||||
"paneMaintenance.remoteLockedResolvedDevice": "La base de datos remota está bloqueada, pero este dispositivo ya fue aceptado.",
|
||||
"paneMaintenance.unlockDatabaseReady": "Desbloquear la base de datos",
|
||||
"Passphrase": "Frase de contraseña",
|
||||
"Passphrase is required.": "Se requiere la frase de contraseña.",
|
||||
"Passphrase of sensitive configuration items": "Frase para elementos sensibles",
|
||||
"password": "contraseña",
|
||||
"Password": "Contraseña",
|
||||
"Paste a connection string": "Pegar cadena de conexión",
|
||||
"Paste the Setup URI generated from one of your active devices.": "Pegue el URI de configuración generado desde uno de sus dispositivos activos。",
|
||||
"Path": "Ruta",
|
||||
"Path Obfuscation": "Ofuscación de rutas",
|
||||
"Patterns to match files for overwriting instead of merging": "Patrones para identificar archivos que se sobrescribirán en lugar de fusionarse",
|
||||
"Patterns to match files for syncing": "Patrones para identificar archivos que se sincronizarán",
|
||||
"Peer ID:": "ID de par:",
|
||||
"Peer to Peer Replicator": "Replicador Punto a Punto",
|
||||
"Peer-to-Peer only": "Solo Peer-to-Peer",
|
||||
"Peer-to-Peer Synchronisation": "Sincronización entre pares",
|
||||
"Peers": "Pares",
|
||||
"Per-file-saved customization sync": "Sincronización de personalización por archivo",
|
||||
"Perform": "Ejecutar",
|
||||
"Perform cleanup": "Ejecutar limpieza",
|
||||
"Perform Garbage Collection": "Ejecutar recolección de basura",
|
||||
"Perform Garbage Collection to remove unused chunks and reduce database size.": "Ejecuta la recolección de basura para eliminar chunks no usados y reducir el tamaño de la base de datos.",
|
||||
"Periodic Sync interval": "Intervalo de sincronización periódica",
|
||||
"PERMANENT": "PERMANENTE",
|
||||
"Pick a file to resolve conflict": "Elegir un archivo para resolver el conflicto",
|
||||
"Pick a file to show history": "Elige un archivo para ver su historial",
|
||||
"Please be aware that the End-to-End Encryption passphrase is not validated until the synchronisation process actually commences. This is a security measure designed to protect your data.": "Ten en cuenta que la frase de contraseña del cifrado de extremo a extremo no se valida hasta que comienza realmente la sincronización. Es una medida de seguridad para proteger tus datos.",
|
||||
"Please configure your end-to-end encryption settings.": "Configura los ajustes de cifrado de extremo a extremo.",
|
||||
"Please disable 'Read chunks online' in settings to use Garbage Collection.": "Desactiva «Leer chunks en línea» en los ajustes para poder usar la recolección de basura.",
|
||||
"Please enable 'Compute revisions for chunks' in settings to use Garbage Collection.": "Activa «Calcular revisiones para los chunks» en los ajustes para poder usar la recolección de basura.",
|
||||
"Please enter the CouchDB server information below.": "Introduce a continuación los datos del servidor CouchDB.",
|
||||
"Please enter the details required to connect to your S3/MinIO/R2 compatible object storage service.": "Introduce los datos necesarios para conectarte a tu servicio de almacenamiento de objetos compatible con S3/MinIO/R2.",
|
||||
"Please enter the Peer-to-Peer Synchronisation information below.": "Introduce a continuación los datos de la sincronización punto a punto.",
|
||||
"Please enter the Setup URI that was generated during server installation or on another device, along with the vault passphrase.": "Introduce el Setup URI generado durante la instalación del servidor o en otro dispositivo, junto con la frase de contraseña del vault.",
|
||||
"Please follow the steps below to import settings from your existing device.": "Sigue los pasos siguientes para importar los ajustes desde tu dispositivo actual.",
|
||||
"PLEASE NOTE": "TEN EN CUENTA",
|
||||
"Please select 'Cancel' explicitly to cancel this operation.": "Selecciona «Cancelar» de forma explícita para cancelar esta operación.",
|
||||
"Please select a method to import the settings from another device.": "Seleccione un método para importar la configuración desde otro dispositivo。",
|
||||
"Please select an active P2P remote configuration to change P2P sync targets.": "Selecciona una configuración remota P2P activa para cambiar los destinos de sincronización P2P.",
|
||||
"Please select an option to proceed": "Seleccione una opción para continuar",
|
||||
"Please select the button below to restart and proceed to the data fetching confirmation.": "Pulsa el botón de abajo para reiniciar y pasar a la confirmación de la obtención de datos.",
|
||||
"Please select the button below to restart and proceed to the final confirmation.": "Pulsa el botón de abajo para reiniciar y pasar a la confirmación final.",
|
||||
"Please select the type of server to which you are connecting.": "Seleccione el tipo de servidor al que se está conectando。",
|
||||
"Please select your situation.": "Selecciona tu situación.",
|
||||
"Please set device name to identify this device. This name should be unique among your devices. While not configured, we cannot enable this feature.": "Define un nombre para identificar este dispositivo. Debe ser único entre tus dispositivos. Mientras no esté configurado, no podremos habilitar esta función.",
|
||||
"Please set this device name": "Define el nombre de este dispositivo",
|
||||
"Please understand that this is intended behaviour.": "Comprende que este es el comportamiento previsto.",
|
||||
"Plug-in version": "Versión del complemento",
|
||||
"Plugins": "Complementos",
|
||||
"Prepare the 'report' to create an issue": "Preparar el «informe» para abrir una incidencia",
|
||||
"Presets": "Preconfiguraciones",
|
||||
"Prevent fetching configuration from server": "Impedir la obtención de la configuración desde el servidor",
|
||||
"Proceed": "Continuar",
|
||||
"Proceed Garbage Collection": "Continuar con la recolección de basura",
|
||||
"Proceed to the next step.": "Continuar al paso siguiente.",
|
||||
"Proceed with Setup URI": "Continuar con el URI de configuración",
|
||||
"Proceeding with Garbage Collection, ignoring missing nodes.": "Se continúa con la recolección de basura, ignorando los nodos ausentes.",
|
||||
"Proceeding with Garbage Collection.": "Se continúa con la recolección de basura.",
|
||||
@@ -629,15 +851,22 @@
|
||||
"RedFlag.FetchRemoteConfig.Title": "Obtener la configuración remota",
|
||||
"Reduces storage space by discarding all non-latest revisions. This requires the same amount of free space on the remote server and the local client.": "Reduce el espacio de almacenamiento descartando todas las revisiones que no sean la última. Requiere la misma cantidad de espacio libre en el servidor remoto y en el cliente local.",
|
||||
"Reducing the frequency with which on-disk changes are reflected into the DB": "Reducir frecuencia de actualizaciones de disco a BD",
|
||||
"Refresh": "Actualizar",
|
||||
"Region": "Región",
|
||||
"Relay settings": "Ajustes del relé",
|
||||
"Reload": "Recargar",
|
||||
"Remediation": "Remediación",
|
||||
"Remediation Setting Changed": "La configuración de remediación cambió",
|
||||
"Remote Database Tweak (In sunset)": "Ajustes de base de datos remota (en retirada)",
|
||||
"Remote Databases": "Bases de datos remotas",
|
||||
"Remote name": "Nombre del remoto",
|
||||
"Remote only": "Solo remoto",
|
||||
"Remote server type": "Tipo de servidor remoto",
|
||||
"Remote Type": "Tipo de remoto",
|
||||
"Rename": "Renombrar",
|
||||
"Replicate now": "Replicar ahora",
|
||||
"Replicating": "Replicando",
|
||||
"Replicating...": "Replicando...",
|
||||
"Replicator.Dialogue.Locked.Action.Dismiss": "Cancelar para volver a confirmarlo",
|
||||
"Replicator.Dialogue.Locked.Action.Fetch": "Restablecer la sincronización en este dispositivo",
|
||||
"Replicator.Dialogue.Locked.Action.Unlock": "Desbloquear la base de datos remota",
|
||||
@@ -660,6 +889,7 @@
|
||||
"Reset": "Restablecer",
|
||||
"Reset all": "Restablecer todo",
|
||||
"Reset all journal counter": "Restablecer todos los contadores del diario",
|
||||
"Reset and Resume Synchronisation": "Restablecer y reanudar la sincronización",
|
||||
"Reset journal received history": "Restablecer historial de recepción del diario",
|
||||
"Reset journal sent history": "Restablecer historial de envío del diario",
|
||||
"Reset notification threshold and check the remote database usage": "Restablecer el umbral de aviso y comprobar el uso de la base de datos remota",
|
||||
@@ -672,14 +902,26 @@
|
||||
"Resolve all conflicted files": "Resolver todos los archivos en conflicto",
|
||||
"Resolve All conflicted files by the newer one": "Resolver todos los archivos en conflicto con la versión más reciente",
|
||||
"Resolve all conflicted files by the newer one. Caution: This will overwrite the older one, and cannot resurrect the overwritten one.": "Resuelve todos los archivos en conflicto conservando la versión más reciente. Precaución: esto sobrescribirá la versión anterior y no podrá recuperarse.",
|
||||
"Restart and Fetch Data": "Reiniciar y obtener los datos",
|
||||
"Restart and Initialise Server": "Reiniciar e inicializar el servidor",
|
||||
"Restart Now": "Reiniciar ahora",
|
||||
"Restarting Obsidian is strongly recommended. Until restart, some changes may not take effect, and display may be inconsistent. Are you sure to restart now?": "Se recomienda encarecidamente reiniciar Obsidian. Hasta que lo hagas, puede que algunos cambios no surtan efecto y que la interfaz se muestre de forma inconsistente. ¿Seguro que quieres reiniciar ahora?",
|
||||
"Restore or reconstruct local database from remote.": "Restaura o reconstruye la base de datos local desde el remoto.",
|
||||
"Rev": "Rev",
|
||||
"Revert changes": "Revertir cambios",
|
||||
"Revoke": "Revocar",
|
||||
"Room ID": "ID de sala",
|
||||
"Room ID suffix:": "Sufijo del ID de sala:",
|
||||
"Run Doctor": "Ejecutar el Doctor",
|
||||
"S3/MinIO/R2 Configuration": "Configuración de S3/MinIO/R2",
|
||||
"S3/MinIO/R2 Object Storage": "Almacenamiento de objetos S3/MinIO/R2",
|
||||
"Same": "Igual",
|
||||
"Same or local only": "Igual o solo local",
|
||||
"Save and Apply": "Guardar y aplicar",
|
||||
"Save settings to a markdown file. You will be notified when new settings arrive. You can set different files by the platform.": "Guardar configuración en archivo markdown. Se notificarán nuevos ajustes. Puede definir diferentes archivos por plataforma",
|
||||
"Saving will be performed forcefully after this number of seconds.": "Guardado forzado tras esta cantidad de segundos",
|
||||
"Scan a QR Code (Recommended for mobile)": "Escanear un código QR (recomendado para móviles)",
|
||||
"Scan changes": "Buscar cambios",
|
||||
"Scan changes on customization sync": "Escanear cambios en sincronización de personalización",
|
||||
"Scan customization automatically": "Escanear personalización automáticamente",
|
||||
"Scan customization before replicating.": "Escanear personalización antes de replicar",
|
||||
@@ -688,17 +930,28 @@
|
||||
"Scan for Broken files": "Buscar archivos dañados",
|
||||
"Scan for hidden files before replication": "Escanear archivos ocultos antes de replicar",
|
||||
"Scan hidden files periodically": "Escanear archivos ocultos periódicamente",
|
||||
"Scan QR Code": "Escanear código QR",
|
||||
"Scan the QR code displayed on an active device using this device's camera.": "Escanee con la cámara de este dispositivo el código QR mostrado en un dispositivo activo。",
|
||||
"Schedule and Restart": "Programar y reiniciar",
|
||||
"Scram Switches": "Interruptores de emergencia",
|
||||
"Scram!": "Medidas de emergencia",
|
||||
"Seconds, 0 to disable": "Segundos, 0 para desactivar",
|
||||
"Seconds. Saving to the local database will be delayed until this value after we stop typing or saving.": "Segundos. Guardado en BD local se retrasará hasta este valor tras dejar de escribir/guardar",
|
||||
"Secret Access Key": "Clave de acceso secreta",
|
||||
"Secret Key": "Clave secreta",
|
||||
"Select active P2P remote": "Seleccionar el remoto P2P activo",
|
||||
"Select All Shiny": "Seleccionar todo lo nuevo",
|
||||
"Select Flagged Shiny": "Seleccionar lo nuevo marcado",
|
||||
"Select P2P remote...": "Seleccionar remoto P2P...",
|
||||
"Select the database adapter to use.": "Selecciona el adaptador de base de datos que se usará.",
|
||||
"Selecting this option will result in the current data on this device being used to initialise the server. Any existing data on the server will be completely overwritten.": "Al elegir esta opción, los datos actuales de este dispositivo se usarán para inicializar el servidor. Cualquier dato existente en el servidor se sobrescribirá por completo.",
|
||||
"Selecting this option will result in this device joining the existing server. You need to fetching the existing synchronisation data from the server to this device.": "Al elegir esta opción, este dispositivo se unirá al servidor existente. Tendrás que obtener del servidor los datos de sincronización ya existentes.",
|
||||
"Selective": "Selectivo",
|
||||
"Send": "Enviar",
|
||||
"Send chunks": "Enviar chunks",
|
||||
"SENDING": "ENVIANDO",
|
||||
"Server URI": "URI del servidor",
|
||||
"SESSION": "SESIÓN",
|
||||
"Setting.GenerateKeyPair.Desc": "Hemos generado un par de claves.\n\nNota: Este par de claves no volverá a mostrarse. Guárdalo en un lugar seguro. Si lo pierdes, tendrás que generar uno nuevo.\nNota 2: La clave pública está en formato spki y la clave privada en formato pkcs8. Para mayor comodidad, los saltos de línea de la clave pública se convierten en `\\n`.\nNota 3: La clave pública debe configurarse en la base de datos remota y la clave privada en los dispositivos locales.\n\n>[!SOLO PARA TUS OJOS]-\n> <div class=\"sls-keypair\">\n>\n> ### Clave pública\n> ```\n${public_key}\n> ```\n>\n> ### Clave privada\n> ```\n${private_key}\n> ```\n>\n> </div>\n\n>[!Ambas para copiar]-\n>\n> <div class=\"sls-keypair\">\n>\n> ```\n${public_key}\n${private_key}\n> ```\n>\n> </div>",
|
||||
"Setting.GenerateKeyPair.Title": "¡Se ha generado un nuevo par de claves!",
|
||||
"Setting.TroubleShooting": "Resolución de problemas",
|
||||
@@ -707,7 +960,10 @@
|
||||
"Setting.TroubleShooting.ScanBrokenFiles": "Buscar archivos dañados",
|
||||
"Setting.TroubleShooting.ScanBrokenFiles.Desc": "Busca archivos que no se hayan guardado correctamente en la base de datos.",
|
||||
"SettingTab.Message.AskRebuild": "Tus cambios requieren obtener los datos de la base de datos remota. ¿Quieres continuar?",
|
||||
"Setup Complete: Preparing to Fetch Synchronisation Data": "Configuración completada: preparando la obtención de los datos de sincronización",
|
||||
"Setup Complete: Preparing to Initialise Server": "Configuración completada: preparando la inicialización del servidor",
|
||||
"Setup URI dialog cancelled.": "Se ha cancelado el diálogo del Setup URI.",
|
||||
"Setup-URI": "Setup-URI",
|
||||
"Setup.> [!INFO]- The connected devices have been detected as follows:\n${devices}": "> [!INFO]- Se detectaron los siguientes dispositivos conectados:\n${devices}",
|
||||
"Setup.All devices have the same progress value (${progress}). Your devices seem to be synchronised. And be able to proceed with Garbage Collection.": "Todos los dispositivos tienen el mismo valor de progreso (${progress}). Parece que tus dispositivos están sincronizados y se puede continuar con la recolección de basura.",
|
||||
"Setup.Apply.Buttons.ApplyAndFetch": "Aplicar y obtener",
|
||||
@@ -818,16 +1074,29 @@
|
||||
"Show status inside the editor": "Mostrar estado dentro del editor",
|
||||
"Show status on the status bar": "Mostrar estado en la barra de estado",
|
||||
"Show verbose log. Please enable if you report an issue.": "Mostrar registro detallado. Actívelo si reporta un problema.",
|
||||
"Signaling Server Connection": "Conexión al servidor de señalización",
|
||||
"Signalling Status": "Estado de la señalización",
|
||||
"Skip and close": "Omitir y cerrar",
|
||||
"Snippets": "Fragmentos",
|
||||
"Some devices have differing progress values (max: ${maxProgress}, min: ${minProgress}).\nThis may indicate that some devices have not completed synchronisation, which could lead to conflicts. Strongly recommend confirming that all devices are synchronised before proceeding.": "Algunos dispositivos tienen valores de progreso distintos (máx.: ${maxProgress}, mín.: ${minProgress}).\nEsto puede indicar que algunos no han terminado de sincronizar, lo que podría provocar conflictos. Se recomienda encarecidamente confirmar que todos los dispositivos están sincronizados antes de continuar.",
|
||||
"Start Broadcasting": "Iniciar difusión",
|
||||
"Start change-broadcasting on Connect": "Iniciar la difusión de cambios al conectar",
|
||||
"Start Sync & Close": "Iniciar sincronización y cerrar",
|
||||
"Starts synchronisation when a file is saved.": "Inicia sincronización al guardar un archivo",
|
||||
"Stat": "Estado",
|
||||
"Stats": "Estadísticas",
|
||||
"Stop ⚡": "Detener ⚡",
|
||||
"Stop Broadcasting": "Detener difusión",
|
||||
"Stop reflecting database changes to storage files.": "Dejar de reflejar cambios de BD en archivos",
|
||||
"Stop watching for file changes.": "Dejar de monitorear cambios en archivos",
|
||||
"Storage -> Database": "Almacenamiento -> Base de datos",
|
||||
"Strongly Recommended": "Muy recomendado",
|
||||
"Suppress notification of hidden files change": "Suprimir notificaciones de cambios en archivos ocultos",
|
||||
"Suspend database reflecting": "Suspender reflejo de base de datos",
|
||||
"Suspend file watching": "Suspender monitorización de archivos",
|
||||
"Switch to IDB": "Cambiar a IDB",
|
||||
"Switch to IndexedDB": "Cambiar a IndexedDB",
|
||||
"Sync": "Sincronizar",
|
||||
"Sync after merging file": "Sincronizar tras fusionar archivo",
|
||||
"Sync automatically after merging files": "Sincronizar automáticamente tras fusionar archivos",
|
||||
"Sync Mode": "Modo de sincronización",
|
||||
@@ -835,25 +1104,56 @@
|
||||
"Sync on File Open": "Sincronizar al abrir archivo",
|
||||
"Sync on Save": "Sincronizar al guardar",
|
||||
"Sync on Startup": "Sincronizar al iniciar",
|
||||
"Sync once": "Sincronizar una vez",
|
||||
"Synchronisation utilising journal files. You must have set up an S3/MinIO/R2 compatible object storage.": "Sincronización mediante archivos de registro. Debe haber configurado un almacenamiento de objetos compatible con S3/MinIO/R2。",
|
||||
"Synchronising files": "Archivos sincronizados",
|
||||
"Syncing": "Sincronización",
|
||||
"Syncing...": "Sincronizando...",
|
||||
"Target patterns": "Patrones objetivo",
|
||||
"Test Settings and Continue": "Probar los ajustes y continuar",
|
||||
"Testing only - Resolve file conflicts by syncing newer copies of the file, this can overwrite modified files. Be Warned.": "Solo pruebas - Resolver conflictos sincronizando copias nuevas (puede sobrescribir modificaciones)",
|
||||
"The connection to the server has been configured successfully. As the next step,": "La conexión con el servidor se ha configurado correctamente. Como paso siguiente,",
|
||||
"The delay for consecutive on-demand fetches": "Retraso entre obtenciones consecutivas",
|
||||
"The files in this Vault are almost identical to the server's.": "Los archivos de este Vault son casi idénticos a los del servidor.",
|
||||
"The following accepted nodes are missing its node information:\n- ${missingNodes}\n\nThis indicates that they have not been connected for some time or have been left on an older version.\nIt is preferable to update all devices if possible. If you have any devices that are no longer in use, you can clear all accepted nodes by locking the remote once.": "A los siguientes nodos aceptados les falta su información de nodo:\n- ${missingNodes}\n\nEsto indica que llevan tiempo sin conectarse o que se han quedado en una versión antigua.\nSi es posible, conviene actualizar todos los dispositivos. Si tienes dispositivos que ya no usas, puedes borrar todos los nodos aceptados bloqueando el remoto una vez.",
|
||||
"The Group ID and passphrase are used to identify your group of devices. Make sure to use the same Group ID and passphrase on all devices you want to synchronise.": "El ID de grupo y la frase de contraseña identifican tu grupo de dispositivos. Usa el mismo ID de grupo y la misma frase de contraseña en todos los dispositivos que quieras sincronizar.",
|
||||
"The Hash algorithm for chunk IDs": "Algoritmo hash para IDs de chunks",
|
||||
"The IndexedDB adapter often offers superior performance in certain scenarios, but it has been found to cause memory leaks when used with LiveSync mode. When using LiveSync mode, please use IDB adapter instead.": "El adaptador IndexedDB suele ofrecer mejor rendimiento en ciertos casos, pero se ha comprobado que provoca fugas de memoria con el modo LiveSync. Si usas el modo LiveSync, utiliza en su lugar el adaptador IDB.",
|
||||
"the latest synchronisation data will be downloaded from the server to this device.": "se descargarán a este dispositivo los datos de sincronización más recientes del servidor.",
|
||||
"the local database, that is to say the synchronisation information, must be reconstituted.": "hay que reconstruir la base de datos local, es decir, la información de sincronización.",
|
||||
"The maximum duration for which chunks can be incubated within the document. Chunks exceeding this period will graduate to independent chunks.": "Duración máxima para incubar chunks. Excedentes se independizan",
|
||||
"The maximum number of chunks that can be incubated within the document. Chunks exceeding this number will immediately graduate to independent chunks.": "Número máximo de chunks que pueden incubarse en el documento. Excedentes se independizan",
|
||||
"The maximum total size of chunks that can be incubated within the document. Chunks exceeding this size will immediately graduate to independent chunks.": "Tamaño total máximo de chunks incubados. Excedentes se independizan",
|
||||
"The minimum interval for automatic synchronisation on event.": "Intervalo mínimo para la sincronización automática al producirse un evento.",
|
||||
"The remote is already set up, and the configuration is compatible (or got compatible by this operation).": "El remoto ya está configurado y la configuración es compatible (o pasa a serlo con esta operación).",
|
||||
"The Setup-URI does not appear to be valid. Please check that you have copied it correctly.": "El Setup-URI no parece válido. Comprueba que lo hayas copiado correctamente.",
|
||||
"The Setup-URI is valid and ready to use.": "El Setup-URI es válido y está listo para usarse.",
|
||||
"the single, authoritative master copy": "la única copia maestra de referencia",
|
||||
"the synchronisation data on the server will be built based on the current data on this device.": "los datos de sincronización del servidor se construirán a partir de los datos actuales de este dispositivo.",
|
||||
"Themes": "Temas",
|
||||
"There is a way to resolve this on other devices.": "Hay una forma de resolver esto en los demás dispositivos.",
|
||||
"There may be differences between the files in this Vault and the server.": "Puede haber diferencias entre los archivos de este Vault y los del servidor.",
|
||||
"Therefore, we ask that you exercise extreme caution when configuring server information manually. If an incorrect passphrase is entered, the data on the server will become corrupted.": "Por tanto, extrema la precaución al configurar manualmente los datos del servidor. Si introduces una frase de contraseña incorrecta, los datos del servidor se corromperán.",
|
||||
"This can isolate your connections between devices. Use the same Room ID for the same devices.": "Esto permite aislar tus conexiones entre dispositivos. Usa el mismo ID de sala para los mismos dispositivos.",
|
||||
"This device": "Este dispositivo",
|
||||
"This device name": "Nombre de este dispositivo",
|
||||
"This feature enables direct synchronisation between devices. No server is required, but both devices must be online at the same time for synchronisation to occur, and some features may be limited. Internet connection is only required to signalling (detecting peers) and not for data transfer.": "Esta función permite la sincronización directa entre dispositivos. No requiere servidor, pero ambos dispositivos deben estar en línea al mismo tiempo para que la sincronización se produzca, y algunas funciones pueden ser limitadas. La conexión a Internet solo se necesita para la señalización (detección de pares), no para la transferencia de datos。",
|
||||
"This is an advanced option for users who do not have a URI or who wish to configure detailed settings.": "Esta es una opción avanzada para usuarios que no disponen de un URI o que desean configurar parámetros detallados。",
|
||||
"This is an extremely powerful operation. We strongly recommend that you copy your Vault folder to a safe location.": "Esta es una operación extremadamente potente. Te recomendamos encarecidamente copiar la carpeta de tu Vault a un lugar seguro.",
|
||||
"This is the most suitable synchronisation method for the design. All functions are available. You must have set up a CouchDB instance.": "Este es el método de sincronización más adecuado para el diseño. Todas las funciones están disponibles. Debe tener configurada una instancia de CouchDB。",
|
||||
"This passphrase will not be copied to another device. It will be set to `Default` until you configure it again.": "Esta frase no se copia a otros dispositivos. Usará `Default` hasta reconfigurar",
|
||||
"This password is used to encrypt the connection. Use something long enough.": "Esta contraseña se usa para cifrar la conexión. Usa algo suficientemente largo.",
|
||||
"This procedure will first delete all existing synchronisation data from the server. Following this, the server data will be completely rebuilt, using the current state of your Vault on this device (including its local database) as": "Este procedimiento eliminará primero todos los datos de sincronización existentes en el servidor. A continuación, los datos del servidor se reconstruirán por completo usando el estado actual del Vault de este dispositivo (incluida su base de datos local) como",
|
||||
"This setting must be the same even when connecting to multiple synchronisation destinations.": "Este ajuste debe ser el mismo incluso si te conectas a varios destinos de sincronización.",
|
||||
"This Vault is empty, or contains only new files that are not on the server.": "Este Vault está vacío o solo contiene archivos nuevos que no están en el servidor.",
|
||||
"This will rebuild the local database on this device using the most recent data from the server. This action is designed to resolve synchronisation inconsistencies and restore correct functionality.": "Esto reconstruirá la base de datos local de este dispositivo con los datos más recientes del servidor. La acción está pensada para resolver inconsistencias de sincronización y restaurar el funcionamiento correcto.",
|
||||
"This will recreate chunks for all files. If there were missing chunks, this may fix the errors.": "Esto recreará los fragmentos de todos los archivos. Si faltaban fragmentos, esto puede corregir los errores.",
|
||||
"To minimise the creation of new conflicts": "Para minimizar la creación de nuevos conflictos",
|
||||
"Transfer Tweak": "Ajustes de transferencia",
|
||||
"TURN Credential": "Credencial de TURN",
|
||||
"TURN server settings are only necessary if you are behind a strict NAT or firewall that prevents direct P2P connections. In most cases, you can leave these fields blank.": "Los ajustes del servidor TURN solo son necesarios si estás detrás de un NAT estricto o de un cortafuegos que impide las conexiones P2P directas. En la mayoría de los casos puedes dejar estos campos vacíos.",
|
||||
"TURN Server URLs (comma-separated)": "URL de servidores TURN (separadas por comas)",
|
||||
"TURN Username": "Usuario de TURN",
|
||||
"TweakMismatchResolve.Action.DisableAutoAcceptCompatible": "Desactivar la aceptación automática",
|
||||
"TweakMismatchResolve.Action.Dismiss": "Descartar",
|
||||
"TweakMismatchResolve.Action.EnableAutoAcceptCompatible": "Activar la aceptación automática",
|
||||
@@ -1146,21 +1446,36 @@
|
||||
"Ui.SetupWizard.SetupRemote.ProceedP2P": "Continuar con la configuración de P2P",
|
||||
"Ui.SetupWizard.SetupRemote.Title": "Elige un remoto de sincronización",
|
||||
"Unique name between all synchronized devices. To edit this setting, please disable customization sync once.": "Nombre único entre dispositivos sincronizados. Para editarlo, desactive sincronización de personalización",
|
||||
"Unless you are certain, selecting this options is bit dangerous. It assumes that the server configuration is compatible with this device. If this is not the case, data loss may occur. Please ensure you know what you are doing.": "Si no estás seguro, elegir esta opción es algo arriesgado. Da por supuesto que la configuración del servidor es compatible con este dispositivo. Si no lo es, puede haber pérdida de datos. Asegúrate de saber lo que haces.",
|
||||
"Updating list...": "Actualizando lista...",
|
||||
"URL": "URL",
|
||||
"Use a custom passphrase": "Usar una frase de contraseña personalizada",
|
||||
"Use a Setup URI (Recommended)": "Usar un URI de configuración (recomendado)",
|
||||
"Use Custom HTTP Handler": "Usar manejador HTTP personalizado",
|
||||
"Use Diagnostic RTCPeerConnection for statistics": "Usar el RTCPeerConnection de diagnóstico para las estadísticas",
|
||||
"Use dynamic iteration count": "Usar conteo de iteraciones dinámico",
|
||||
"Use internal API": "Usar la API interna",
|
||||
"Use Internal API": "Usar la API interna",
|
||||
"Use JWT Authentication": "Usar autenticación JWT",
|
||||
"Use Path-Style Access": "Usar acceso de tipo ruta (path-style)",
|
||||
"Use Random Number": "Usar número aleatorio",
|
||||
"Use Segmented-splitter": "Usar divisor segmentado",
|
||||
"Use splitting-limit-capped chunk splitter": "Usar divisor de chunks con límite",
|
||||
"Use the trash bin": "Usar papelera",
|
||||
"Use timeouts instead of heartbeats": "Usar timeouts en lugar de latidos",
|
||||
"Use vrtmrz's relay": "Usar el relé de vrtmrz",
|
||||
"username": "nombre de usuario",
|
||||
"Username": "Usuario",
|
||||
"Verbose Log": "Registro detallado",
|
||||
"Verify all": "Verificar todo",
|
||||
"Verify and repair all files": "Verificar y reparar todos los archivos",
|
||||
"Warning! This will have a serious impact on performance. And the logs will not be synchronised under the default name. Please be careful with logs; they often contain your confidential information.": "¡Advertencia! Impacta rendimiento. Los logs no se sincronizan con nombre predeterminado. Contienen información confidencial",
|
||||
"WATCHING": "OBSERVANDO",
|
||||
"We can not use \"/\" to the device name": "No se puede usar \"/\" en el nombre del dispositivo",
|
||||
"We can use only Secure (HTTPS) connections on Obsidian Mobile.": "En Obsidian Mobile solo se pueden usar conexiones seguras (HTTPS).",
|
||||
"We cannot change the device name while this feature is enabled. Please disable this feature to change the device name.": "No podemos cambiar el nombre del dispositivo mientras esta función esté habilitada. Deshabilita la función para cambiarlo.",
|
||||
"We have to configure the device name": "Hay que configurar el nombre del dispositivo",
|
||||
"We recommend that you copy your Vault folder to a safe location. This will provide a safeguard in case a large number of conflicts arise, or if you accidentally synchronise with an incorrect destination.": "Te recomendamos copiar la carpeta de tu Vault a un lugar seguro. Así tendrás una salvaguarda en caso de que surjan muchos conflictos o de que sincronices por error con un destino incorrecto.",
|
||||
"We will now guide you through a few questions to simplify the synchronisation setup.": "Ahora le guiaremos con unas pocas preguntas para simplificar la configuración de la sincronización。",
|
||||
"We will now proceed with the server configuration.": "Ahora continuaremos con la configuración del servidor。",
|
||||
"Welcome to Self-hosted LiveSync": "Bienvenido a Self-hosted LiveSync",
|
||||
@@ -1171,5 +1486,8 @@
|
||||
"xxhash64 (Fastest)": "xxhash64 (el más rápido)",
|
||||
"Yes, I want to add this device to my existing synchronisation": "Sí, quiero añadir este dispositivo a mi sincronización existente",
|
||||
"Yes, I want to set up a new synchronisation": "Sí, quiero configurar una nueva sincronización",
|
||||
"You are adding this device to an existing synchronisation setup.": "Está añadiendo este dispositivo a una configuración de sincronización existente。"
|
||||
"You are adding this device to an existing synchronisation setup.": "Está añadiendo este dispositivo a una configuración de sincronización existente。",
|
||||
"You can configure in the Obsidian Plugin Settings.": "Puedes configurarlo en los ajustes del complemento de Obsidian.",
|
||||
"You should create a new synchronisation destination and rebuild your data there.": "Deberías crear un nuevo destino de sincronización y reconstruir allí tus datos.",
|
||||
"You should perform this operation only in exceptional circumstances, such as when the server data is completely corrupted, when changes on all other devices are no longer needed, or when the database size has become unusually large in comparison to the Vault size.": "Solo deberías realizar esta operación en circunstancias excepcionales: cuando los datos del servidor estén completamente corruptos, cuando ya no necesites los cambios de los demás dispositivos o cuando el tamaño de la base de datos sea inusualmente grande respecto al del Vault."
|
||||
}
|
||||
|
||||
@@ -1,7 +1,18 @@
|
||||
", please select the option that best describes the current state of your Vault. The application will then check your files in the most appropriate way based on your selection.":
|
||||
", please select the option that best describes the current state of your
|
||||
Vault. The application will then check your files in the most appropriate
|
||||
way based on your selection."
|
||||
(Active): (Active)
|
||||
(BETA) Always overwrite with a newer file: (BETA) Always overwrite with a newer file
|
||||
(Beta) Use ignore files: (Beta) Use ignore files
|
||||
(Days passed, 0 to disable automatic-deletion): (Days passed, 0 to disable automatic-deletion)
|
||||
(e.g., after editing many files whilst offline): (e.g., after editing many files whilst offline)
|
||||
(e.g., immediately after restoring on another computer, or having recovered from a backup):
|
||||
(e.g., immediately after restoring on another computer, or having recovered
|
||||
from a backup)
|
||||
(e.g., setting up for the first time on a new smartphone, starting from a clean slate):
|
||||
(e.g., setting up for the first time on a new smartphone, starting from a
|
||||
clean slate)
|
||||
(ex. Read chunks online) If this option is enabled, LiveSync reads chunks online directly instead of replicating them locally. Increasing Custom chunk size is recommended.:
|
||||
(ex. Read chunks online) If this option is enabled, LiveSync reads chunks
|
||||
online directly instead of replicating them locally. Increasing Custom chunk
|
||||
@@ -11,6 +22,7 @@
|
||||
this will be skipped. If the file becomes smaller again, a newer one will be
|
||||
used.
|
||||
(Mega chars): (Mega chars)
|
||||
(Missing): (Missing)
|
||||
(Not recommended) If set, credentials will be stored in the file.: (Not recommended) If set, credentials will be stored in the file.
|
||||
(Obsolete) Use an old adapter for compatibility: (Obsolete) Use an old adapter for compatibility
|
||||
(RegExp) Empty to sync all files. Set filter as a regular expression to limit synchronising files.:
|
||||
@@ -19,21 +31,76 @@
|
||||
(RegExp) If this is set, any changes to local and remote files that match this will be skipped.:
|
||||
(RegExp) If this is set, any changes to local and remote files that match this
|
||||
will be skipped.
|
||||
"↑: Overwrite Remote": "↑: Overwrite Remote"
|
||||
"↓: Overwrite Local": "↓: Overwrite Local"
|
||||
"⇅: Use newer": "⇅: Use newer"
|
||||
+1 week: +1 week
|
||||
⚠️ Important Notice: ⚠️ Important Notice
|
||||
⚠️ Please Confirm the Following: ⚠️ Please Confirm the Following
|
||||
✔ SELECT: ✔ SELECT
|
||||
✔ SYNC: ✔ SYNC
|
||||
✔ WATCH: ✔ WATCH
|
||||
📡 Off: 📡 Off
|
||||
📡 On: 📡 On
|
||||
🔴 Disconnected: 🔴 Disconnected
|
||||
🕵️ Diag: 🕵️ Diag
|
||||
🗑 Delete: 🗑 Delete
|
||||
🟢 Connected: 🟢 Connected
|
||||
${count} issue(s) detected!: ${count} issue(s) detected!
|
||||
Accept: Accept
|
||||
Accept in session: Accept in session
|
||||
ACCEPTED: ACCEPTED
|
||||
ACCEPTED (in session): ACCEPTED (in session)
|
||||
Access Key: Access Key
|
||||
Access Key ID: Access Key ID
|
||||
Action: Action
|
||||
Activate: Activate
|
||||
Active Remote Configuration: Active Remote Configuration
|
||||
Add default patterns: Add default patterns
|
||||
Add new connection: Add new connection
|
||||
AddOn Module (ConfigSync) has not been loaded. This is very unexpected situation. Please report this issue.:
|
||||
AddOn Module (ConfigSync) has not been loaded. This is very unexpected
|
||||
situation. Please report this issue.
|
||||
AddOn Module (HiddenFileSync) has not been loaded. This is very unexpected situation. Please report this issue.:
|
||||
AddOn Module (HiddenFileSync) has not been loaded. This is very unexpected
|
||||
situation. Please report this issue.
|
||||
Advanced: Advanced
|
||||
Advanced Settings: Advanced Settings
|
||||
After restarting, the data on this device will be uploaded to the server as the 'master copy'. Please be aware that any unintended data currently on the server will be completely overwritten.:
|
||||
After restarting, the data on this device will be uploaded to the server as
|
||||
the 'master copy'. Please be aware that any unintended data currently on the
|
||||
server will be completely overwritten.
|
||||
After restarting, the database on this device will be rebuilt using data from the server. If there are any unsynchronised files in this vault, conflicts may occur with the server data.:
|
||||
After restarting, the database on this device will be rebuilt using data
|
||||
from the server. If there are any unsynchronised files in this vault,
|
||||
conflicts may occur with the server data.
|
||||
After that, synchronise to a brand new vault on each other device with the new remote one by one.:
|
||||
After that, synchronise to a brand new vault on each other device with the
|
||||
new remote one by one.
|
||||
All checks passed successfully!: All checks passed successfully!
|
||||
All the same or non-existent: All the same or non-existent
|
||||
Allow in session: Allow in session
|
||||
Allow permanently: Allow permanently
|
||||
Also, please note that if you are using Peer-to-Peer synchronization, this configuration will be used when you switch to other methods and connect to a remote server in the future.:
|
||||
Also, please note that if you are using Peer-to-Peer synchronization, this
|
||||
configuration will be used when you switch to other methods and connect to a
|
||||
remote server in the future.
|
||||
Always prompt merge conflicts: Always prompt merge conflicts
|
||||
Analyse: Analyse
|
||||
Analyse database usage: Analyse database usage
|
||||
Analyse database usage and generate a TSV report for diagnosis yourself. You can paste the generated report with any spreadsheet you like.:
|
||||
Analyse database usage and generate a TSV report for diagnosis yourself. You
|
||||
can paste the generated report with any spreadsheet you like.
|
||||
Apply All Selected: Apply All Selected
|
||||
Apply Latest Change if Conflicting: Apply Latest Change if Conflicting
|
||||
Apply preset configuration: Apply preset configuration
|
||||
Apply the settings: Apply the settings
|
||||
Ask a passphrase at every launch: Ask a passphrase at every launch
|
||||
Auto Connect: Auto Connect
|
||||
Auto Start P2P Connection: Auto Start P2P Connection
|
||||
Automatic: Automatic
|
||||
Automatically Sync all files when opening Obsidian.: Automatically Sync all files when opening Obsidian.
|
||||
Available Peers: Available Peers
|
||||
Back: Back
|
||||
Back to non-configured: Back to non-configured
|
||||
Batch database update: Batch database update
|
||||
@@ -45,8 +112,14 @@ Before v0.17.16, we used an old adapter for the local database. Now the new adap
|
||||
adapter is preferred. However, it needs local database rebuilding. Please
|
||||
disable this toggle when you have enough time. If leave it enabled, also while
|
||||
fetching from the remote database, you will be asked to disable this.
|
||||
Broadcasting?: Broadcasting?
|
||||
Bucket Name: Bucket Name
|
||||
by resetting the remote, you will be informed on other devices.: by resetting the remote, you will be informed on other devices.
|
||||
Cancel: Cancel
|
||||
Changing the encryption algorithm will prevent access to any data previously encrypted with a different algorithm. Ensure that all your devices are configured to use the same algorithm to maintain access to your data.:
|
||||
Changing the encryption algorithm will prevent access to any data previously
|
||||
encrypted with a different algorithm. Ensure that all your devices are
|
||||
configured to use the same algorithm to maintain access to your data.
|
||||
Changing this setting requires migrating existing data (a bit time may be taken) and restarting Obsidian. Please make sure to back up your data before proceeding.:
|
||||
Changing this setting requires migrating existing data (a bit time may be
|
||||
taken) and restarting Obsidian. Please make sure to back up your data before
|
||||
@@ -56,9 +129,18 @@ Check and convert non-path-obfuscated files: Check and convert non-path-obfuscat
|
||||
Check for documents that have not been converted to path-obfuscated IDs and convert them if necessary.:
|
||||
Check for documents that have not been converted to path-obfuscated IDs and
|
||||
convert them if necessary.
|
||||
Checking connection... Please wait.: Checking connection... Please wait.
|
||||
Chunks: Chunks
|
||||
Close: Close
|
||||
Close & Disconnect: Close & Disconnect
|
||||
Close this dialog: Close this dialog
|
||||
"Closed:": "Closed:"
|
||||
cmdConfigSync:
|
||||
showCustomizationSync: Show Customization sync
|
||||
Comma separated `.gitignore, .dockerignore`: Comma separated `.gitignore, .dockerignore`
|
||||
Command: Command
|
||||
Communicating: Communicating
|
||||
Compare file: Compare file
|
||||
Compare the content of files between on local database and storage. If not matched, you will be asked which one you want to keep.:
|
||||
Compare the content of files between on local database and storage. If not
|
||||
matched, you will be asked which one you want to keep.
|
||||
@@ -69,36 +151,64 @@ Compatibility (Metadata): Compatibility (Metadata)
|
||||
Compatibility (Remote Database): Compatibility (Remote Database)
|
||||
Compatibility (Trouble addressed): Compatibility (Trouble addressed)
|
||||
Compute revisions for chunks: Compute revisions for chunks
|
||||
Configuration: Configuration
|
||||
Configuration Encryption: Configuration Encryption
|
||||
Configure: Configure
|
||||
Configure And Change Remote: Configure And Change Remote
|
||||
Configure E2EE: Configure E2EE
|
||||
Configure Remote: Configure Remote
|
||||
Connect: Connect
|
||||
"Connected to Signaling Server (as Peer ID: ${peerId})": "Connected to Signaling Server (as Peer ID: ${peerId})"
|
||||
"Connected:": "Connected:"
|
||||
Connection Settings: Connection Settings
|
||||
"Connection:": "Connection:"
|
||||
Continue anyway: Continue anyway
|
||||
Copy: Copy
|
||||
Copy Report to clipboard: Copy Report to clipboard
|
||||
CouchDB Configuration: CouchDB Configuration
|
||||
CouchDB Connection Tweak: CouchDB Connection Tweak
|
||||
Create P2P remote: Create P2P remote
|
||||
Cross-platform: Cross-platform
|
||||
"Current adapter: {adapter}": "Current adapter: {adapter}"
|
||||
Custom Headers: Custom Headers
|
||||
Customization Sync: Customization Sync
|
||||
Customization Sync (Beta3): Customization Sync (Beta3)
|
||||
Data Compression: Data Compression
|
||||
Data to Copy: Data to Copy
|
||||
Database -> Storage: Database -> Storage
|
||||
Database Adapter: Database Adapter
|
||||
Database Name: Database Name
|
||||
Database suffix: Database suffix
|
||||
Date: Date
|
||||
Default: Default
|
||||
Delay conflict resolution of inactive files: Delay conflict resolution of inactive files
|
||||
Delay merge conflict prompt for inactive files.: Delay merge conflict prompt for inactive files.
|
||||
Delete: Delete
|
||||
Delete all customization sync data: Delete all customization sync data
|
||||
Delete all data on the remote server.: Delete all data on the remote server.
|
||||
Delete All of: Delete All of
|
||||
Delete local database to reset or uninstall Self-hosted LiveSync: Delete local database to reset or uninstall Self-hosted LiveSync
|
||||
Delete old metadata of deleted files on start-up: Delete old metadata of deleted files on start-up
|
||||
Delete Remote Configuration: Delete Remote Configuration
|
||||
Delete remote configuration '{name}'?: Delete remote configuration '{name}'?
|
||||
Delete remote configuration '${name}'?: Delete remote configuration '${name}'?
|
||||
DENIED: DENIED
|
||||
DENIED (in session): DENIED (in session)
|
||||
Deny: Deny
|
||||
Deny in session: Deny in session
|
||||
Deny permanently: Deny permanently
|
||||
Deselect all: Deselect all
|
||||
desktop: desktop
|
||||
Detected Peers: Detected Peers
|
||||
Developer: Developer
|
||||
device name: device name
|
||||
Device name: Device name
|
||||
Device name to identify the device. Please use shorter one for the stable peer detection, i.e., "iphone-16" or "macbook-2021".:
|
||||
Device name to identify the device. Please use shorter one for the stable
|
||||
peer detection, i.e., "iphone-16" or "macbook-2021".
|
||||
Device Peer ID: Device Peer ID
|
||||
"Devices:": "Devices:"
|
||||
Diagnostic RTCPeerConnection is enabled: Diagnostic RTCPeerConnection is enabled
|
||||
dialog:
|
||||
yourLanguageAvailable:
|
||||
_value: >-
|
||||
@@ -116,10 +226,14 @@ dialog:
|
||||
May you find it easy to use!
|
||||
btnRevertToDefault: Keep %{lang-def}
|
||||
Title: " Translation is available!"
|
||||
Diff: Diff
|
||||
Different: Different
|
||||
Disables all synchronization and restart.: Disables all synchronization and restart.
|
||||
Disables logging, only shows notifications. Please disable if you report an issue.:
|
||||
Disables logging, only shows notifications. Please disable if you report an
|
||||
issue.
|
||||
Disconnect: Disconnect
|
||||
Dismiss: Dismiss
|
||||
Display Language: Display Language
|
||||
Display name: Display name
|
||||
Do not check configuration mismatch before replication: Do not check configuration mismatch before replication
|
||||
@@ -202,38 +316,115 @@ Enable advanced features: Enable advanced features
|
||||
Enable customization sync: Enable customization sync
|
||||
Enable Developers' Debug Tools.: Enable Developers' Debug Tools.
|
||||
Enable edge case treatment features: Enable edge case treatment features
|
||||
Enable P2P Replicator: Enable P2P Replicator
|
||||
Enable poweruser features: Enable poweruser features
|
||||
Enable this if your Object Storage doesn't support CORS: Enable this if your Object Storage doesn't support CORS
|
||||
Enable this option to automatically apply the most recent change to documents even when it conflicts:
|
||||
Enable this option to automatically apply the most recent change to documents
|
||||
even when it conflicts
|
||||
Enabled: Enabled
|
||||
Enabling end-to-end encryption ensures that your data is encrypted on your device before being sent to the remote server. This means that even if someone gains access to the server, they won't be able to read your data without the passphrase. Make sure to remember your passphrase, as it will be required to decrypt your data on other devices.:
|
||||
Enabling end-to-end encryption ensures that your data is encrypted on your
|
||||
device before being sent to the remote server. This means that even if
|
||||
someone gains access to the server, they won't be able to read your data
|
||||
without the passphrase. Make sure to remember your passphrase, as it will be
|
||||
required to decrypt your data on other devices.
|
||||
Encrypt contents on the remote database. If you use the plugin's synchronization feature, enabling this is recommended.:
|
||||
Encrypt contents on the remote database. If you use the plugin's
|
||||
synchronization feature, enabling this is recommended.
|
||||
Encrypting sensitive configuration items: Encrypting sensitive configuration items
|
||||
Encryption Algorithm: Encryption Algorithm
|
||||
Encryption phassphrase. If changed, you should overwrite the server's database with the new (encrypted) files.:
|
||||
Encryption phassphrase. If changed, you should overwrite the server's database
|
||||
with the new (encrypted) files.
|
||||
End-to-End Encryption: End-to-End Encryption
|
||||
Endpoint URL: Endpoint URL
|
||||
Enhance chunk size: Enhance chunk size
|
||||
Enter a folder prefix (optional): Enter a folder prefix (optional)
|
||||
Enter Setup URI: Enter Setup URI
|
||||
Enter TURN credential: Enter TURN credential
|
||||
Enter TURN username: Enter TURN username
|
||||
Enter your Access Key ID: Enter your Access Key ID
|
||||
Enter your Bucket Name: Enter your Bucket Name
|
||||
Enter your database name: Enter your database name
|
||||
Enter your JWT Key ID: Enter your JWT Key ID
|
||||
Enter your JWT secret or private key: Enter your JWT secret or private key
|
||||
Enter your JWT Subject (CouchDB Username): Enter your JWT Subject (CouchDB Username)
|
||||
Enter your passphrase: Enter your passphrase
|
||||
Enter your password: Enter your password
|
||||
Enter your Region (e.g., us-east-1, auto for R2): Enter your Region (e.g., us-east-1, auto for R2)
|
||||
Enter your Secret Access Key: Enter your Secret Access Key
|
||||
Enter your username: Enter your username
|
||||
"Error during connection test: ${reason}": "Error during connection test: ${reason}"
|
||||
"Error during testAndFixSettings: ${reason}": "Error during testAndFixSettings: ${reason}"
|
||||
Experimental Settings: Experimental Settings
|
||||
Export: Export
|
||||
"Failed to connect to the server: ${reason}": "Failed to connect to the server: ${reason}"
|
||||
Failed to connect to the server. Please check your settings.: Failed to connect to the server. Please check your settings.
|
||||
"Failed to connect to the signalling relay: ${reason}": "Failed to connect to the signalling relay: ${reason}"
|
||||
Failed to create replicator instance.: Failed to create replicator instance.
|
||||
Failed to parse Setup-URI.: Failed to parse Setup-URI.
|
||||
"Failed:": "Failed:"
|
||||
Fetch: Fetch
|
||||
Fetch chunks on demand: Fetch chunks on demand
|
||||
Fetch database with previous behaviour: Fetch database with previous behaviour
|
||||
Fetch remote settings: Fetch remote settings
|
||||
FETCHING: FETCHING
|
||||
Fetching status...: Fetching status...
|
||||
File integrity: File integrity
|
||||
File to resolve conflict: File to resolve conflict
|
||||
File to view History: File to view History
|
||||
Filename: Filename
|
||||
"Final Confirmation: Overwrite Server Data with This Device's Files": "Final Confirmation: Overwrite Server Data with This Device's Files"
|
||||
Fix: Fix
|
||||
Flag and restart: Flag and restart
|
||||
Flagged Selective: Flagged Selective
|
||||
Folder Prefix: Folder Prefix
|
||||
For HS256/HS512 algorithms, provide the shared secret key. For ES256/ES512 algorithms, provide the pkcs8 PEM-formatted private key.:
|
||||
For HS256/HS512 algorithms, provide the shared secret key. For ES256/ES512
|
||||
algorithms, provide the pkcs8 PEM-formatted private key.
|
||||
Forces the file to be synced when opened.: Forces the file to be synced when opened.
|
||||
Fresh Start Wipe: Fresh Start Wipe
|
||||
Furthermore, if conflicts are already present in the server data, they will be synchronised to this device as they are, and you will need to resolve them locally.:
|
||||
Furthermore, if conflicts are already present in the server data, they will
|
||||
be synchronised to this device as they are, and you will need to resolve
|
||||
them locally.
|
||||
Garbage Collection V3 (Beta): Garbage Collection V3 (Beta)
|
||||
Gathering information...: Gathering information...
|
||||
Generate Random ID: Generate Random ID
|
||||
Group ID: Group ID
|
||||
Handle files as Case-Sensitive: Handle files as Case-Sensitive
|
||||
Have you created a backup before proceeding?: Have you created a backup before proceeding?
|
||||
Hidden file synchronization have been temporarily disabled. Please enable them after the fetching, if you need them.:
|
||||
Hidden file synchronization have been temporarily disabled. Please enable
|
||||
them after the fetching, if you need them.
|
||||
Hidden Files: Hidden Files
|
||||
Hide completely: Hide completely
|
||||
Hide not applicable items: Hide not applicable items
|
||||
Higher (${local} > ${remote}): Higher (${local} > ${remote})
|
||||
Highlight diff: Highlight diff
|
||||
How to display network errors when the sync server is unreachable.: How to display network errors when the sync server is unreachable.
|
||||
However, This should not be enabled if you want to increase your secrecy more.:
|
||||
However, This should not be enabled if you want to increase your secrecy
|
||||
more.
|
||||
I am setting up a new server for the first time / I want to reset my existing server.:
|
||||
I am setting up a new server for the first time / I want to reset my
|
||||
existing server.
|
||||
I am unable to create a backup of my Vault.: I am unable to create a backup of my Vault.
|
||||
I am unable to create a backup of my Vaults.: I am unable to create a backup of my Vaults.
|
||||
I have created a backup of my Vault.: I have created a backup of my Vault.
|
||||
I understand that all changes made on other smartphones or computers possibly could be lost.:
|
||||
I understand that all changes made on other smartphones or computers
|
||||
possibly could be lost.
|
||||
I understand that other devices will no longer be able to synchronise, and will need to be reset the synchronisation information.:
|
||||
I understand that other devices will no longer be able to synchronise, and
|
||||
will need to be reset the synchronisation information.
|
||||
I understand that this action is irreversible once performed.: I understand that this action is irreversible once performed.
|
||||
I understand the risks and will proceed without a backup.: I understand the risks and will proceed without a backup.
|
||||
I Understand, Overwrite Server: I Understand, Overwrite Server
|
||||
If "Auto Start P2P Connection" is enabled, the P2P connection will be started automatically when the plug-in launches.:
|
||||
If "Auto Start P2P Connection" is enabled, the P2P connection will be
|
||||
started automatically when the plug-in launches.
|
||||
If disabled(toggled), chunks will be split on the UI thread (Previous behaviour).:
|
||||
If disabled(toggled), chunks will be split on the UI thread (Previous
|
||||
behaviour).
|
||||
@@ -267,13 +458,47 @@ If this option is enabled, PouchDB will hold the connection open for 60 seconds,
|
||||
seconds, and if no change arrives in that time, close and reopen the socket,
|
||||
instead of holding it open indefinitely. Useful when a proxy limits request
|
||||
duration but can increase resource usage.
|
||||
If you cannot avoid CORS issues, you might want to try this option. It uses Obsidian's internal API to communicate with the CouchDB server. Not compliant with web standards, but works. Note that this might break in future Obsidian versions.:
|
||||
If you cannot avoid CORS issues, you might want to try this option. It uses
|
||||
Obsidian's internal API to communicate with the CouchDB server. Not
|
||||
compliant with web standards, but works. Note that this might break in
|
||||
future Obsidian versions.
|
||||
If you cannot avoid CORS issues, you might want to try this option. It uses Obsidian's internal API to communicate with the S3 server. Not compliant with web standards, but works. Note that this might break in future Obsidian versions.:
|
||||
If you cannot avoid CORS issues, you might want to try this option. It uses
|
||||
Obsidian's internal API to communicate with the S3 server. Not compliant
|
||||
with web standards, but works. Note that this might break in future Obsidian
|
||||
versions.
|
||||
If you have unsynchronised changes in your Vault on this device, they will likely diverge from the server's versions after the reset. This may result in a large number of file conflicts.:
|
||||
If you have unsynchronised changes in your Vault on this device, they will
|
||||
likely diverge from the server's versions after the reset. This may result
|
||||
in a large number of file conflicts.
|
||||
If you reached the payload size limit when using IBM Cloudant, please decrease batch size and batch limit to a lower value.:
|
||||
If you reached the payload size limit when using IBM Cloudant, please decrease
|
||||
batch size and batch limit to a lower value.
|
||||
If you understand the risks and still wish to proceed, select so.: If you understand the risks and still wish to proceed, select so.
|
||||
If you want to store the data in a specific folder within the bucket, you can specify a folder prefix here. Otherwise, leave it blank to store data at the root of the bucket.:
|
||||
If you want to store the data in a specific folder within the bucket, you
|
||||
can specify a folder prefix here. Otherwise, leave it blank to store data at
|
||||
the root of the bucket.
|
||||
If you want to use `LiveSync`, you should broadcast changes. All `watching` peers which detects this will start the replication for fetching.:
|
||||
If you want to use `LiveSync`, you should broadcast changes. All `watching`
|
||||
peers which detects this will start the replication for fetching.
|
||||
Ignore: Ignore
|
||||
Ignore files: Ignore files
|
||||
Ignore patterns: Ignore patterns
|
||||
Import connection: Import connection
|
||||
IMPORTANT: IMPORTANT
|
||||
In most cases, you should stick with the default algorithm (${algorithm}), This setting is only required if you have an existing Vault encrypted in a different format.:
|
||||
In most cases, you should stick with the default algorithm (${algorithm}),
|
||||
This setting is only required if you have an existing Vault encrypted in a
|
||||
different format.
|
||||
In this scenario, Self-hosted LiveSync will recreate metadata for every file and deliberately generate conflicts. Where the file content is identical, these conflicts will be resolved automatically.:
|
||||
In this scenario, Self-hosted LiveSync will recreate metadata for every file
|
||||
and deliberately generate conflicts. Where the file content is identical,
|
||||
these conflicts will be resolved automatically.
|
||||
"Incoming:": "Incoming:"
|
||||
Incubate Chunks in Document: Incubate Chunks in Document
|
||||
Initial Action: Initial Action
|
||||
Initialise all journal history, On the next sync, every item will be received and sent.:
|
||||
Initialise all journal history, On the next sync, every item will be received
|
||||
and sent.
|
||||
@@ -284,6 +509,23 @@ Initialise journal sent history. On the next sync, every item except this device
|
||||
Initialise journal sent history. On the next sync, every item except this
|
||||
device received will be sent again.
|
||||
Interval (sec): Interval (sec)
|
||||
INVERTED: INVERTED
|
||||
"Issue detection log:": "Issue detection log:"
|
||||
It is strongly advised to create a backup before proceeding. Continuing without a backup may lead to data loss.:
|
||||
It is strongly advised to create a backup before proceeding. Continuing
|
||||
without a backup may lead to data loss.
|
||||
Just for a minute, please!: Just for a minute, please!
|
||||
JWT (JSON Web Token) authentication allows you to securely authenticate with the CouchDB server using tokens. Ensure that your CouchDB server is configured to accept JWTs and that the provided key and settings match the server's configuration. Incidentally, I have not verified it very thoroughly.:
|
||||
JWT (JSON Web Token) authentication allows you to securely authenticate with
|
||||
the CouchDB server using tokens. Ensure that your CouchDB server is
|
||||
configured to accept JWTs and that the provided key and settings match the
|
||||
server's configuration. Incidentally, I have not verified it very
|
||||
thoroughly.
|
||||
JWT Algorithm: JWT Algorithm
|
||||
JWT Expiration Duration (minutes): JWT Expiration Duration (minutes)
|
||||
JWT Key: JWT Key
|
||||
JWT Key ID (kid): JWT Key ID (kid)
|
||||
JWT Subject (sub): JWT Subject (sub)
|
||||
K:
|
||||
exp: Experimental
|
||||
long_p2p_sync: "%{title_p2p_sync}"
|
||||
@@ -306,6 +548,7 @@ lang-zh: 简体中文
|
||||
lang-zh-tw: 繁體中文
|
||||
Later: Later
|
||||
"Limit: {datetime} ({timestamp})": "Limit: {datetime} ({timestamp})"
|
||||
live: live
|
||||
LiveSync could not handle multiple vaults which have same name without different prefix, This should be automatically configured.:
|
||||
LiveSync could not handle multiple vaults which have same name without
|
||||
different prefix, This should be automatically configured.
|
||||
@@ -342,6 +585,7 @@ liveSyncSetting:
|
||||
liveSyncSettings:
|
||||
btnApply: Apply
|
||||
Local Database Tweak: Local Database Tweak
|
||||
Local only: Local only
|
||||
Lock: Lock
|
||||
Lock Server: Lock Server
|
||||
Lock the remote server to prevent synchronization with other devices.: Lock the remote server to prevent synchronization with other devices.
|
||||
@@ -351,6 +595,9 @@ logPane:
|
||||
pause: Pause
|
||||
title: Self-hosted LiveSync Log
|
||||
wrap: Wrap
|
||||
Lower (${local} < ${remote}): Lower (${local} < ${remote})
|
||||
Maintenance Commands: Maintenance Commands
|
||||
Maintenance mode: Maintenance mode
|
||||
Maximum delay for batch database updating: Maximum delay for batch database updating
|
||||
Maximum file size: Maximum file size
|
||||
Maximum Incubating Chunk Size: Maximum Incubating Chunk Size
|
||||
@@ -363,6 +610,7 @@ Memory cache size (by total items): Memory cache size (by total items)
|
||||
Merge: Merge
|
||||
Minimum delay for batch database updating: Minimum delay for batch database updating
|
||||
Minimum interval for syncing: Minimum interval for syncing
|
||||
Mixed: Mixed
|
||||
moduleCheckRemoteSize:
|
||||
logCheckingStorageSizes: Checking storage sizes
|
||||
logCurrentStorageSize: "Remote storage size: ${measuredSize}"
|
||||
@@ -641,15 +889,33 @@ moduleMigration:
|
||||
moduleObsidianMenu:
|
||||
replicate: Replicate
|
||||
More actions: More actions
|
||||
"Mostly Complete: Decision Required": "Mostly Complete: Decision Required"
|
||||
Move remotely deleted files to the trash, instead of deleting.: Move remotely deleted files to the trash, instead of deleting.
|
||||
My remote server is already set up. I want to join this device.: My remote server is already set up. I want to join this device.
|
||||
Name: Name
|
||||
Network warning style: Network warning style
|
||||
NEW: NEW
|
||||
New Remote: New Remote
|
||||
Newer (${diff}): Newer (${diff})
|
||||
No checks have been performed yet.: No checks have been performed yet.
|
||||
No Connection: No Connection
|
||||
No devices available. Waiting for other devices to connect...: No devices available. Waiting for other devices to connect...
|
||||
No Items.: No Items.
|
||||
No limit configured: No limit configured
|
||||
NO PREVIEW: NO PREVIEW
|
||||
Non-Synchronising files: Non-Synchronising files
|
||||
Normal Files: Normal Files
|
||||
Not all messages have been translated. And, please revert to "Default" when reporting errors.:
|
||||
Not all messages have been translated. And, please revert to "Default" when
|
||||
reporting errors.
|
||||
Not configured: Not configured
|
||||
Not now: Not now
|
||||
Note that the Group ID is not limited to the generated format; you can use any string as the Group ID.:
|
||||
Note that the Group ID is not limited to the generated format; you can use
|
||||
any string as the Group ID.
|
||||
Note that you can generate a new Setup URI by running the "Copy settings as a new Setup URI" command in the command palette.:
|
||||
Note that you can generate a new Setup URI by running the "Copy settings as
|
||||
a new Setup URI" command in the command palette.
|
||||
Notify all setting files: Notify all setting files
|
||||
Notify customized: Notify customized
|
||||
Notify when other device has newly customized.: Notify when other device has newly customized.
|
||||
@@ -658,6 +924,13 @@ Number of batches to process at a time. Defaults to 40. Minimum is 2. This along
|
||||
Number of batches to process at a time. Defaults to 40. Minimum is 2. This
|
||||
along with batch size controls how many docs are kept in memory at a time.
|
||||
Number of changes to sync at a time. Defaults to 50. Minimum is 2.: Number of changes to sync at a time. Defaults to 50. Minimum is 2.
|
||||
Obfuscate Properties: Obfuscate Properties
|
||||
Obfuscating properties (e.g., path of file, size, creation and modification dates) adds an additional layer of security by making it harder to identify the structure and names of your files and folders on the remote server. This helps protect your privacy and makes it more difficult for unauthorized users to infer information about your data.:
|
||||
Obfuscating properties (e.g., path of file, size, creation and modification
|
||||
dates) adds an additional layer of security by making it harder to identify
|
||||
the structure and names of your files and folders on the remote server. This
|
||||
helps protect your privacy and makes it more difficult for unauthorized
|
||||
users to infer information about your data.
|
||||
obsidianLiveSyncSettingTab:
|
||||
btnApply: Apply
|
||||
btnCheck: Check
|
||||
@@ -912,11 +1185,26 @@ obsidianLiveSyncSettingTab:
|
||||
titleUpdateThinning: Update Thinning
|
||||
warnCorsOriginUnmatched: ⚠ CORS Origin is unmatched ${from}->${to}
|
||||
warnNoAdmin: ⚠ You do not have administrator privileges.
|
||||
Of course, we can back up the data before proceeding.: Of course, we can back up the data before proceeding.
|
||||
Off: Off
|
||||
Ok: Ok
|
||||
Old Algorithm: Old Algorithm
|
||||
Older (${diff}): Older (${diff})
|
||||
Older fallback (Slow, W/O WebAssembly): Older fallback (Slow, W/O WebAssembly)
|
||||
On: On
|
||||
On the source device, from the command palette, run the 'Show settings as a QR code' command.:
|
||||
On the source device, from the command palette, run the 'Show settings as a
|
||||
QR code' command.
|
||||
On the source device, open Obsidian.: On the source device, open Obsidian.
|
||||
On this device, please keep this Vault open.: On this device, please keep this Vault open.
|
||||
On this device, switch to the camera app or use a QR code scanner to scan the displayed QR code.:
|
||||
On this device, switch to the camera app or use a QR code scanner to scan
|
||||
the displayed QR code.
|
||||
Open: Open
|
||||
Open connection: Open connection
|
||||
Open P2P Setup...: Open P2P Setup...
|
||||
Open the dialog: Open the dialog
|
||||
Other files: Other files
|
||||
Overwrite: Overwrite
|
||||
Overwrite patterns: Overwrite patterns
|
||||
Overwrite remote: Overwrite remote
|
||||
@@ -968,34 +1256,70 @@ P2P:
|
||||
SyncAlreadyRunning: P2P Sync is already running.
|
||||
SyncCompleted: P2P Sync completed.
|
||||
SyncStartedWith: P2P Sync with ${name} have been started.
|
||||
P2P Configuration: P2P Configuration
|
||||
P2P Status: P2P Status
|
||||
paneMaintenance:
|
||||
markDeviceResolvedAfterBackup: paneMaintenance.markDeviceResolvedAfterBackup
|
||||
remoteLockedAndDeviceNotAccepted: paneMaintenance.remoteLockedAndDeviceNotAccepted
|
||||
remoteLockedResolvedDevice: paneMaintenance.remoteLockedResolvedDevice
|
||||
unlockDatabaseReady: paneMaintenance.unlockDatabaseReady
|
||||
Passphrase: Passphrase
|
||||
Passphrase is required.: Passphrase is required.
|
||||
Passphrase of sensitive configuration items: Passphrase of sensitive configuration items
|
||||
password: password
|
||||
Password: Password
|
||||
Paste a connection string: Paste a connection string
|
||||
Path: Path
|
||||
Path Obfuscation: Path Obfuscation
|
||||
Patterns to match files for overwriting instead of merging: Patterns to match files for overwriting instead of merging
|
||||
Patterns to match files for syncing: Patterns to match files for syncing
|
||||
"Peer ID:": "Peer ID:"
|
||||
Peer to Peer Replicator: Peer to Peer Replicator
|
||||
Peer-to-Peer Synchronisation: Peer-to-Peer Synchronisation
|
||||
Peers: Peers
|
||||
Per-file-saved customization sync: Per-file-saved customization sync
|
||||
Perform: Perform
|
||||
Perform cleanup: Perform cleanup
|
||||
Perform Garbage Collection: Perform Garbage Collection
|
||||
Perform Garbage Collection to remove unused chunks and reduce database size.: Perform Garbage Collection to remove unused chunks and reduce database size.
|
||||
Periodic Sync interval: Periodic Sync interval
|
||||
PERMANENT: PERMANENT
|
||||
Pick a file to resolve conflict: Pick a file to resolve conflict
|
||||
Pick a file to show history: Pick a file to show history
|
||||
Please be aware that the End-to-End Encryption passphrase is not validated until the synchronisation process actually commences. This is a security measure designed to protect your data.:
|
||||
Please be aware that the End-to-End Encryption passphrase is not validated
|
||||
until the synchronisation process actually commences. This is a security
|
||||
measure designed to protect your data.
|
||||
Please configure your end-to-end encryption settings.: Please configure your end-to-end encryption settings.
|
||||
Please enter the CouchDB server information below.: Please enter the CouchDB server information below.
|
||||
Please enter the details required to connect to your S3/MinIO/R2 compatible object storage service.:
|
||||
Please enter the details required to connect to your S3/MinIO/R2 compatible
|
||||
object storage service.
|
||||
Please enter the Peer-to-Peer Synchronisation information below.: Please enter the Peer-to-Peer Synchronisation information below.
|
||||
Please enter the Setup URI that was generated during server installation or on another device, along with the vault passphrase.:
|
||||
Please enter the Setup URI that was generated during server installation or
|
||||
on another device, along with the vault passphrase.
|
||||
Please follow the steps below to import settings from your existing device.: Please follow the steps below to import settings from your existing device.
|
||||
PLEASE NOTE: PLEASE NOTE
|
||||
Please select an active P2P remote configuration to change P2P sync targets.: Please select an active P2P remote configuration to change P2P sync targets.
|
||||
Please select the button below to restart and proceed to the data fetching confirmation.:
|
||||
Please select the button below to restart and proceed to the data fetching
|
||||
confirmation.
|
||||
Please select the button below to restart and proceed to the final confirmation.:
|
||||
Please select the button below to restart and proceed to the final
|
||||
confirmation.
|
||||
Please select your situation.: Please select your situation.
|
||||
Please set device name to identify this device. This name should be unique among your devices. While not configured, we cannot enable this feature.:
|
||||
Please set device name to identify this device. This name should be unique
|
||||
among your devices. While not configured, we cannot enable this feature.
|
||||
Please set this device name: Please set this device name
|
||||
Please understand that this is intended behaviour.: Please understand that this is intended behaviour.
|
||||
Plugins: Plugins
|
||||
Prepare the 'report' to create an issue: Prepare the 'report' to create an issue
|
||||
Presets: Presets
|
||||
Prevent fetching configuration from server: Prevent fetching configuration from server
|
||||
Proceed: Proceed
|
||||
Proceed to the next step.: Proceed to the next step.
|
||||
Process small files in the foreground: Process small files in the foreground
|
||||
Property Encryption: Property Encryption
|
||||
PureJS fallback (Fast, W/O WebAssembly): PureJS fallback (Fast, W/O WebAssembly)
|
||||
@@ -1096,15 +1420,22 @@ Reduces storage space by discarding all non-latest revisions. This requires the
|
||||
Reduces storage space by discarding all non-latest revisions. This requires
|
||||
the same amount of free space on the remote server and the local client.
|
||||
Reducing the frequency with which on-disk changes are reflected into the DB: Reducing the frequency with which on-disk changes are reflected into the DB
|
||||
Refresh: Refresh
|
||||
Region: Region
|
||||
Relay settings: Relay settings
|
||||
Reload: Reload
|
||||
Remediation: Remediation
|
||||
Remediation Setting Changed: Remediation Setting Changed
|
||||
Remote Database Tweak (In sunset): Remote Database Tweak (In sunset)
|
||||
Remote Databases: Remote Databases
|
||||
Remote name: Remote name
|
||||
Remote only: Remote only
|
||||
Remote server type: Remote server type
|
||||
Remote Type: Remote Type
|
||||
Rename: Rename
|
||||
Replicate now: Replicate now
|
||||
Replicating: Replicating
|
||||
Replicating...: Replicating...
|
||||
Replicator:
|
||||
Dialogue:
|
||||
Locked:
|
||||
@@ -1150,6 +1481,7 @@ Resend all chunks to the remote.: Resend all chunks to the remote.
|
||||
Reset: Reset
|
||||
Reset all: Reset all
|
||||
Reset all journal counter: Reset all journal counter
|
||||
Reset and Resume Synchronisation: Reset and Resume Synchronisation
|
||||
Reset journal received history: Reset journal received history
|
||||
Reset journal sent history: Reset journal sent history
|
||||
Reset notification threshold and check the remote database usage: Reset notification threshold and check the remote database usage
|
||||
@@ -1166,16 +1498,28 @@ Resolve All conflicted files by the newer one: Resolve All conflicted files by t
|
||||
"Resolve all conflicted files by the newer one. Caution: This will overwrite the older one, and cannot resurrect the overwritten one.":
|
||||
"Resolve all conflicted files by the newer one. Caution: This will overwrite
|
||||
the older one, and cannot resurrect the overwritten one."
|
||||
Restart and Fetch Data: Restart and Fetch Data
|
||||
Restart and Initialise Server: Restart and Initialise Server
|
||||
Restart Now: Restart Now
|
||||
Restarting Obsidian is strongly recommended. Until restart, some changes may not take effect, and display may be inconsistent. Are you sure to restart now?:
|
||||
Restarting Obsidian is strongly recommended. Until restart, some changes may
|
||||
not take effect, and display may be inconsistent. Are you sure to restart now?
|
||||
Restore or reconstruct local database from remote.: Restore or reconstruct local database from remote.
|
||||
Rev: Rev
|
||||
Revert changes: Revert changes
|
||||
Revoke: Revoke
|
||||
Room ID: Room ID
|
||||
"Room ID suffix:": "Room ID suffix:"
|
||||
Run Doctor: Run Doctor
|
||||
S3/MinIO/R2 Configuration: S3/MinIO/R2 Configuration
|
||||
Same: Same
|
||||
Same or local only: Same or local only
|
||||
Save and Apply: Save and Apply
|
||||
Save settings to a markdown file. You will be notified when new settings arrive. You can set different files by the platform.:
|
||||
Save settings to a markdown file. You will be notified when new settings
|
||||
arrive. You can set different files by the platform.
|
||||
Saving will be performed forcefully after this number of seconds.: Saving will be performed forcefully after this number of seconds.
|
||||
Scan changes: Scan changes
|
||||
Scan changes on customization sync: Scan changes on customization sync
|
||||
Scan customization automatically: Scan customization automatically
|
||||
Scan customization before replicating.: Scan customization before replicating.
|
||||
@@ -1184,6 +1528,7 @@ Scan customization periodically: Scan customization periodically
|
||||
Scan for Broken files: Scan for Broken files
|
||||
Scan for hidden files before replication: Scan for hidden files before replication
|
||||
Scan hidden files periodically: Scan hidden files periodically
|
||||
Scan QR Code: Scan QR Code
|
||||
Schedule and Restart: Schedule and Restart
|
||||
Scram Switches: Scram Switches
|
||||
Scram!: Scram!
|
||||
@@ -1191,11 +1536,27 @@ Seconds, 0 to disable: Seconds, 0 to disable
|
||||
Seconds. Saving to the local database will be delayed until this value after we stop typing or saving.:
|
||||
Seconds. Saving to the local database will be delayed until this value after
|
||||
we stop typing or saving.
|
||||
Secret Access Key: Secret Access Key
|
||||
Secret Key: Secret Key
|
||||
Select active P2P remote: Select active P2P remote
|
||||
Select All Shiny: Select All Shiny
|
||||
Select Flagged Shiny: Select Flagged Shiny
|
||||
Select P2P remote...: Select P2P remote...
|
||||
Select the database adapter to use.: Select the database adapter to use.
|
||||
Selecting this option will result in the current data on this device being used to initialise the server. Any existing data on the server will be completely overwritten.:
|
||||
Selecting this option will result in the current data on this device being
|
||||
used to initialise the server. Any existing data on the server will be
|
||||
completely overwritten.
|
||||
Selecting this option will result in this device joining the existing server. You need to fetching the existing synchronisation data from the server to this device.:
|
||||
Selecting this option will result in this device joining the existing
|
||||
server. You need to fetching the existing synchronisation data from the
|
||||
server to this device.
|
||||
Selective: Selective
|
||||
Send: Send
|
||||
Send chunks: Send chunks
|
||||
SENDING: SENDING
|
||||
Server URI: Server URI
|
||||
SESSION: SESSION
|
||||
Setting:
|
||||
GenerateKeyPair:
|
||||
Desc: >+
|
||||
@@ -1389,6 +1750,8 @@ Setup:
|
||||
ButtonClose: Close this dialog
|
||||
"Please enable 'Compute revisions for chunks' in settings to use Garbage Collection.": Please enable 'Compute revisions for chunks' in settings to use Garbage Collection.
|
||||
"Please disable 'Read chunks online' in settings to use Garbage Collection.": Please disable 'Read chunks online' in settings to use Garbage Collection.
|
||||
"Setup Complete: Preparing to Fetch Synchronisation Data": "Setup Complete: Preparing to Fetch Synchronisation Data"
|
||||
"Setup Complete: Preparing to Initialise Server": "Setup Complete: Preparing to Initialise Server"
|
||||
"Setup URI dialog cancelled.": Setup URI dialog cancelled.
|
||||
"Please select 'Cancel' explicitly to cancel this operation.": Please select 'Cancel' explicitly to cancel this operation.
|
||||
"Failed to connect to remote for compaction.": Failed to connect to remote for compaction.
|
||||
@@ -1400,6 +1763,27 @@ Setup:
|
||||
"Failed to start one-shot replication before Garbage Collection. Garbage Collection Cancelled.": Failed to start one-shot replication before Garbage Collection. Garbage Collection Cancelled.
|
||||
"Cancel Garbage Collection": Cancel Garbage Collection
|
||||
"No connected device information found. Cancelling Garbage Collection.": No connected device information found. Cancelling Garbage Collection.
|
||||
Setup-URI: Setup-URI
|
||||
Signaling Server Connection: Signaling Server Connection
|
||||
Signalling Status: Signalling Status
|
||||
Skip and close: Skip and close
|
||||
Snippets: Snippets
|
||||
Start Broadcasting: Start Broadcasting
|
||||
Start change-broadcasting on Connect: Start change-broadcasting on Connect
|
||||
Start Sync & Close: Start Sync & Close
|
||||
Stat: Stat
|
||||
Stats: Stats
|
||||
Stop ⚡: Stop ⚡
|
||||
Stop Broadcasting: Stop Broadcasting
|
||||
Strongly Recommended: Strongly Recommended
|
||||
Sync: Sync
|
||||
Sync once: Sync once
|
||||
Syncing...: Syncing...
|
||||
Test Settings and Continue: Test Settings and Continue
|
||||
The connection to the server has been configured successfully. As the next step,:
|
||||
The connection to the server has been configured successfully. As the next
|
||||
step,
|
||||
The files in this Vault are almost identical to the server's.: The files in this Vault are almost identical to the server's.
|
||||
"The following accepted nodes are missing its node information:\n- ${missingNodes}\n\nThis indicates that they have not been connected for some time or have been left on an older version.\nIt is preferable to update all devices if possible. If you have any devices that are no longer in use, you can clear all accepted nodes by locking the remote once.":
|
||||
|-
|
||||
The following accepted nodes are missing its node information:
|
||||
@@ -1474,11 +1858,21 @@ Testing only - Resolve file conflicts by syncing newer copies of the file, this
|
||||
Testing only - Resolve file conflicts by syncing newer copies of the file,
|
||||
this can overwrite modified files. Be Warned.
|
||||
The delay for consecutive on-demand fetches: The delay for consecutive on-demand fetches
|
||||
The Group ID and passphrase are used to identify your group of devices. Make sure to use the same Group ID and passphrase on all devices you want to synchronise.:
|
||||
The Group ID and passphrase are used to identify your group of devices. Make
|
||||
sure to use the same Group ID and passphrase on all devices you want to
|
||||
synchronise.
|
||||
The Hash algorithm for chunk IDs: The Hash algorithm for chunk IDs
|
||||
The IndexedDB adapter often offers superior performance in certain scenarios, but it has been found to cause memory leaks when used with LiveSync mode. When using LiveSync mode, please use IDB adapter instead.:
|
||||
The IndexedDB adapter often offers superior performance in certain scenarios,
|
||||
but it has been found to cause memory leaks when used with LiveSync mode. When
|
||||
using LiveSync mode, please use IDB adapter instead.
|
||||
the latest synchronisation data will be downloaded from the server to this device.:
|
||||
the latest synchronisation data will be downloaded from the server to this
|
||||
device.
|
||||
the local database, that is to say the synchronisation information, must be reconstituted.:
|
||||
the local database, that is to say the synchronisation information, must be
|
||||
reconstituted.
|
||||
The maximum duration for which chunks can be incubated within the document. Chunks exceeding this period will graduate to independent chunks.:
|
||||
The maximum duration for which chunks can be incubated within the document.
|
||||
Chunks exceeding this period will graduate to independent chunks.
|
||||
@@ -1489,13 +1883,61 @@ The maximum total size of chunks that can be incubated within the document. Chun
|
||||
The maximum total size of chunks that can be incubated within the document.
|
||||
Chunks exceeding this size will immediately graduate to independent chunks.
|
||||
The minimum interval for automatic synchronisation on event.: The minimum interval for automatic synchronisation on event.
|
||||
The remote is already set up, and the configuration is compatible (or got compatible by this operation).:
|
||||
The remote is already set up, and the configuration is compatible (or got
|
||||
compatible by this operation).
|
||||
The Setup-URI does not appear to be valid. Please check that you have copied it correctly.:
|
||||
The Setup-URI does not appear to be valid. Please check that you have copied
|
||||
it correctly.
|
||||
The Setup-URI is valid and ready to use.: The Setup-URI is valid and ready to use.
|
||||
the single, authoritative master copy: the single, authoritative master copy
|
||||
the synchronisation data on the server will be built based on the current data on this device.:
|
||||
the synchronisation data on the server will be built based on the current
|
||||
data on this device.
|
||||
Themes: Themes
|
||||
There is a way to resolve this on other devices.: There is a way to resolve this on other devices.
|
||||
There may be differences between the files in this Vault and the server.: There may be differences between the files in this Vault and the server.
|
||||
Therefore, we ask that you exercise extreme caution when configuring server information manually. If an incorrect passphrase is entered, the data on the server will become corrupted.:
|
||||
Therefore, we ask that you exercise extreme caution when configuring server
|
||||
information manually. If an incorrect passphrase is entered, the data on the
|
||||
server will become corrupted.
|
||||
This can isolate your connections between devices. Use the same Room ID for the same devices.:
|
||||
This can isolate your connections between devices. Use the same Room ID for
|
||||
the same devices.
|
||||
This device: This device
|
||||
This device name: This device name
|
||||
This is an extremely powerful operation. We strongly recommend that you copy your Vault folder to a safe location.:
|
||||
This is an extremely powerful operation. We strongly recommend that you copy
|
||||
your Vault folder to a safe location.
|
||||
This passphrase will not be copied to another device. It will be set to `Default` until you configure it again.:
|
||||
This passphrase will not be copied to another device. It will be set to
|
||||
`Default` until you configure it again.
|
||||
This password is used to encrypt the connection. Use something long enough.: This password is used to encrypt the connection. Use something long enough.
|
||||
This procedure will first delete all existing synchronisation data from the server. Following this, the server data will be completely rebuilt, using the current state of your Vault on this device (including its local database) as:
|
||||
This procedure will first delete all existing synchronisation data from the
|
||||
server. Following this, the server data will be completely rebuilt, using
|
||||
the current state of your Vault on this device (including its local
|
||||
database) as
|
||||
This setting must be the same even when connecting to multiple synchronisation destinations.:
|
||||
This setting must be the same even when connecting to multiple
|
||||
synchronisation destinations.
|
||||
This Vault is empty, or contains only new files that are not on the server.: This Vault is empty, or contains only new files that are not on the server.
|
||||
This will rebuild the local database on this device using the most recent data from the server. This action is designed to resolve synchronisation inconsistencies and restore correct functionality.:
|
||||
This will rebuild the local database on this device using the most recent
|
||||
data from the server. This action is designed to resolve synchronisation
|
||||
inconsistencies and restore correct functionality.
|
||||
This will recreate chunks for all files. If there were missing chunks, this may fix the errors.:
|
||||
This will recreate chunks for all files. If there were missing chunks, this
|
||||
may fix the errors.
|
||||
To minimise the creation of new conflicts: To minimise the creation of new conflicts
|
||||
Transfer Tweak: Transfer Tweak
|
||||
TURN Credential: TURN Credential
|
||||
TURN server settings are only necessary if you are behind a strict NAT or firewall that prevents direct P2P connections. In most cases, you can leave these fields blank.:
|
||||
TURN server settings are only necessary if you are behind a strict NAT or
|
||||
firewall that prevents direct P2P connections. In most cases, you can leave
|
||||
these fields blank.
|
||||
TURN Server URLs (comma-separated): TURN Server URLs (comma-separated)
|
||||
TURN Username: TURN Username
|
||||
TweakMismatchResolve:
|
||||
Action:
|
||||
Dismiss: Dismiss
|
||||
@@ -1608,13 +2050,26 @@ TweakMismatchResolve:
|
||||
Unique name between all synchronized devices. To edit this setting, please disable customization sync once.:
|
||||
Unique name between all synchronized devices. To edit this setting, please
|
||||
disable customization sync once.
|
||||
Unless you are certain, selecting this options is bit dangerous. It assumes that the server configuration is compatible with this device. If this is not the case, data loss may occur. Please ensure you know what you are doing.:
|
||||
Unless you are certain, selecting this options is bit dangerous. It assumes
|
||||
that the server configuration is compatible with this device. If this is not
|
||||
the case, data loss may occur. Please ensure you know what you are doing.
|
||||
Updating list...: Updating list...
|
||||
URL: URL
|
||||
Use a custom passphrase: Use a custom passphrase
|
||||
Use Custom HTTP Handler: Use Custom HTTP Handler
|
||||
Use Diagnostic RTCPeerConnection for statistics: Use Diagnostic RTCPeerConnection for statistics
|
||||
Use dynamic iteration count: Use dynamic iteration count
|
||||
Use internal API: Use internal API
|
||||
Use Internal API: Use Internal API
|
||||
Use JWT Authentication: Use JWT Authentication
|
||||
Use Path-Style Access: Use Path-Style Access
|
||||
Use Random Number: Use Random Number
|
||||
Use Segmented-splitter: Use Segmented-splitter
|
||||
Use splitting-limit-capped chunk splitter: Use splitting-limit-capped chunk splitter
|
||||
Use the trash bin: Use the trash bin
|
||||
Use timeouts instead of heartbeats: Use timeouts instead of heartbeats
|
||||
Use vrtmrz's relay: Use vrtmrz's relay
|
||||
username: username
|
||||
Username: Username
|
||||
Verbose Log: Verbose Log
|
||||
@@ -1624,9 +2079,17 @@ Warning! This will have a serious impact on performance. And the logs will not b
|
||||
Warning! This will have a serious impact on performance. And the logs will not
|
||||
be synchronised under the default name. Please be careful with logs; they
|
||||
often contain your confidential information.
|
||||
WATCHING: WATCHING
|
||||
We can not use "/" to the device name: We can not use "/" to the device name
|
||||
We can use only Secure (HTTPS) connections on Obsidian Mobile.: We can use only Secure (HTTPS) connections on Obsidian Mobile.
|
||||
We cannot change the device name while this feature is enabled. Please disable this feature to change the device name.:
|
||||
We cannot change the device name while this feature is enabled. Please disable
|
||||
this feature to change the device name.
|
||||
We have to configure the device name: We have to configure the device name
|
||||
We recommend that you copy your Vault folder to a safe location. This will provide a safeguard in case a large number of conflicts arise, or if you accidentally synchronise with an incorrect destination.:
|
||||
We recommend that you copy your Vault folder to a safe location. This will
|
||||
provide a safeguard in case a large number of conflicts arise, or if you
|
||||
accidentally synchronise with an incorrect destination.
|
||||
When you save a file in the editor, start a sync automatically: When you save a file in the editor, start a sync automatically
|
||||
Write credentials in the file: Write credentials in the file
|
||||
Write logs into the file: Write logs into the file
|
||||
@@ -1961,3 +2424,14 @@ Ui:
|
||||
ProceedCouchDb: Continue to CouchDB setup
|
||||
ProceedP2P: Continue to P2P setup
|
||||
Title: Choose a synchronisation remote
|
||||
|
||||
You can configure in the Obsidian Plugin Settings.: You can configure in the Obsidian Plugin Settings.
|
||||
|
||||
You should create a new synchronisation destination and rebuild your data there.:
|
||||
You should create a new synchronisation destination and rebuild your data
|
||||
there.
|
||||
You should perform this operation only in exceptional circumstances, such as when the server data is completely corrupted, when changes on all other devices are no longer needed, or when the database size has become unusually large in comparison to the Vault size.:
|
||||
You should perform this operation only in exceptional circumstances, such as
|
||||
when the server data is completely corrupted, when changes on all other
|
||||
devices are no longer needed, or when the database size has become unusually
|
||||
large in comparison to the Vault size.
|
||||
|
||||
+524
-14
@@ -1,7 +1,16 @@
|
||||
", please select the option that best describes the current state of your Vault. The application will then check your files in the most appropriate way based on your selection.":
|
||||
", selecciona la opción que mejor describa el estado actual de tu Vault. La
|
||||
aplicación comprobará entonces tus archivos de la forma más adecuada según tu
|
||||
elección."
|
||||
(Active): (Activo)
|
||||
(BETA) Always overwrite with a newer file: (BETA) Sobrescribir siempre con archivo más nuevo
|
||||
(Beta) Use ignore files: (Beta) Usar archivos de ignorar
|
||||
(Days passed, 0 to disable automatic-deletion): (Días transcurridos, 0 para desactivar)
|
||||
(e.g., after editing many files whilst offline): (p. ej., tras editar muchos archivos sin conexión)
|
||||
(e.g., immediately after restoring on another computer, or having recovered from a backup):
|
||||
(p. ej., justo después de restaurar en otro ordenador o de recuperar una copia
|
||||
de seguridad)
|
||||
(e.g., setting up for the first time on a new smartphone, starting from a clean slate): (p. ej., configurando por primera vez un móvil nuevo, empezando de cero)
|
||||
(ex. Read chunks online) If this option is enabled, LiveSync reads chunks online directly instead of replicating them locally. Increasing Custom chunk size is recommended.:
|
||||
"(Ej: Leer chunks online) Lee chunks directamente en línea. Aumente tamaño de
|
||||
chunks personalizados"
|
||||
@@ -9,6 +18,7 @@
|
||||
(MB) Saltar cambios en archivos locales/remotos mayores a este tamaño. Si se
|
||||
reduce, se usará versión nueva
|
||||
(Mega chars): (Millones de caracteres)
|
||||
(Missing): (Falta)
|
||||
(Not recommended) If set, credentials will be stored in the file.: (No recomendado) Almacena credenciales en el archivo
|
||||
(Obsolete) Use an old adapter for compatibility: (Obsoleto) Usar adaptador antiguo
|
||||
(RegExp) Empty to sync all files. Set filter as a regular expression to limit synchronising files.:
|
||||
@@ -17,18 +27,67 @@
|
||||
(RegExp) If this is set, any changes to local and remote files that match this will be skipped.:
|
||||
(RegExp) Si se establece, se omitirá cualquier cambio en archivos locales y
|
||||
remotos que coincida con este patrón.
|
||||
"↑: Overwrite Remote": "↑: Sobrescribir remoto"
|
||||
"↓: Overwrite Local": "↓: Sobrescribir local"
|
||||
"⇅: Use newer": "⇅: Usar el más nuevo"
|
||||
+1 week: +1 semana
|
||||
"> [!INFO]- The connected devices have been detected as follows:\n${devices}": |-
|
||||
> [!INFO]- Se han detectado los siguientes dispositivos conectados:
|
||||
${devices}
|
||||
⚠️ Important Notice: ⚠️ Aviso importante
|
||||
⚠️ Please Confirm the Following: ⚠️ Confirma lo siguiente
|
||||
✔ SELECT: ✔ SELECCIONAR
|
||||
✔ SYNC: ✔ SINCRONIZAR
|
||||
✔ WATCH: ✔ OBSERVAR
|
||||
📡 Off: 📡 Desactivado
|
||||
📡 On: 📡 Activado
|
||||
🔴 Disconnected: 🔴 Desconectado
|
||||
🕵️ Diag: 🕵️ Diagnóstico
|
||||
🗑 Delete: 🗑 Eliminar
|
||||
🟢 Connected: 🟢 Conectado
|
||||
${count} issue(s) detected!: ¡${count} problema(s) detectado(s)!
|
||||
Accept: Aceptar
|
||||
Accept in session: Aceptar en esta sesión
|
||||
ACCEPTED: ACEPTADO
|
||||
ACCEPTED (in session): ACEPTADO (en esta sesión)
|
||||
Access Key: Clave de acceso
|
||||
Access Key ID: ID de clave de acceso
|
||||
Action: Acción
|
||||
Activate: Activar
|
||||
Active Remote Configuration: Configuración remota activa
|
||||
Add default patterns: Añadir patrones predeterminados
|
||||
Add new connection: Añadir conexión
|
||||
AddOn Module (ConfigSync) has not been loaded. This is very unexpected situation. Please report this issue.:
|
||||
El módulo complementario (ConfigSync) no se ha cargado. Esta situación es muy
|
||||
inesperada. Informa de este problema.
|
||||
AddOn Module (HiddenFileSync) has not been loaded. This is very unexpected situation. Please report this issue.:
|
||||
El módulo complementario (HiddenFileSync) no se ha cargado. Esta situación es
|
||||
muy inesperada. Informa de este problema.
|
||||
Advanced: Avanzado
|
||||
Advanced Settings: Ajustes avanzados
|
||||
After restarting, the data on this device will be uploaded to the server as the 'master copy'. Please be aware that any unintended data currently on the server will be completely overwritten.:
|
||||
Tras reiniciar, los datos de este dispositivo se subirán al servidor como
|
||||
«copia maestra». Ten en cuenta que cualquier dato no deseado que haya ahora en
|
||||
el servidor se sobrescribirá por completo.
|
||||
After restarting, the database on this device will be rebuilt using data from the server. If there are any unsynchronised files in this vault, conflicts may occur with the server data.:
|
||||
Tras reiniciar, la base de datos de este dispositivo se reconstruirá con los
|
||||
datos del servidor. Si hay archivos sin sincronizar en este vault, pueden
|
||||
producirse conflictos con los datos del servidor.
|
||||
After that, synchronise to a brand new vault on each other device with the new remote one by one.:
|
||||
Después, sincroniza con un vault totalmente nuevo en cada uno de los demás
|
||||
dispositivos, uno por uno, usando el nuevo remoto.
|
||||
All checks passed successfully!: ¡Todas las comprobaciones se han superado correctamente!
|
||||
All devices have the same progress value (${progress}). Your devices seem to be synchronised. And be able to proceed with Garbage Collection.:
|
||||
Todos los dispositivos tienen el mismo valor de progreso (${progress}). Parece
|
||||
que están sincronizados, por lo que se puede continuar con la recolección de
|
||||
basura.
|
||||
All the same or non-existent: Todo igual o inexistente
|
||||
Allow in session: Permitir en esta sesión
|
||||
Allow permanently: Permitir permanentemente
|
||||
Also, please note that if you are using Peer-to-Peer synchronization, this configuration will be used when you switch to other methods and connect to a remote server in the future.:
|
||||
Además, si usas sincronización punto a punto, esta configuración se aplicará
|
||||
cuando en el futuro cambies a otros métodos y te conectes a un servidor
|
||||
remoto.
|
||||
Always prompt merge conflicts: Siempre preguntar en conflictos
|
||||
Analyse: Analizar
|
||||
Analyse database usage: Analizar el uso de la base de datos
|
||||
@@ -36,10 +95,16 @@ Analyse database usage and generate a TSV report for diagnosis yourself. You can
|
||||
Analiza el uso de la base de datos y genera un informe TSV para que puedas
|
||||
diagnosticarlo tú mismo. Puedes pegar el informe generado en la hoja de
|
||||
cálculo que prefieras.
|
||||
Apply All Selected: Aplicar todo lo seleccionado
|
||||
Apply Latest Change if Conflicting: Aplicar último cambio en conflictos
|
||||
Apply preset configuration: Aplicar configuración predefinida
|
||||
Apply the settings: Aplicar los ajustes
|
||||
Ask a passphrase at every launch: Solicitar la frase de contraseña en cada inicio
|
||||
Auto Connect: Conexión automática
|
||||
Auto Start P2P Connection: Iniciar la conexión P2P automáticamente
|
||||
Automatic: Automático
|
||||
Automatically Sync all files when opening Obsidian.: Sincronizar automáticamente todos los archivos al abrir Obsidian
|
||||
Available Peers: Pares disponibles
|
||||
Back: Volver
|
||||
Back to non-configured: Volver a no configurado
|
||||
Batch database update: Actualización por lotes de BD
|
||||
@@ -49,9 +114,15 @@ Batch size of on-demand fetching: Tamaño de lote para obtención bajo demanda
|
||||
Before v0.17.16, we used an old adapter for the local database. Now the new adapter is preferred. However, it needs local database rebuilding. Please disable this toggle when you have enough time. If leave it enabled, also while fetching from the remote database, you will be asked to disable this.:
|
||||
Antes de v0.17.16 usábamos adaptador antiguo. Nuevo adaptador requiere
|
||||
reconstruir BD local. Desactive cuando pueda
|
||||
Broadcasting?: ¿Difusión?
|
||||
Bucket Name: Nombre del bucket
|
||||
by resetting the remote, you will be informed on other devices.: al restablecer el remoto, se te avisará en los demás dispositivos.
|
||||
Cancel: Cancelar
|
||||
Cancel Garbage Collection: Cancelar la recolección de basura
|
||||
Changing the encryption algorithm will prevent access to any data previously encrypted with a different algorithm. Ensure that all your devices are configured to use the same algorithm to maintain access to your data.:
|
||||
Cambiar el algoritmo de cifrado impedirá acceder a los datos cifrados
|
||||
previamente con otro algoritmo. Asegúrate de que todos tus dispositivos usen
|
||||
el mismo algoritmo para no perder el acceso a tus datos.
|
||||
Changing this setting requires migrating existing data (a bit time may be taken) and restarting Obsidian. Please make sure to back up your data before proceeding.:
|
||||
Cambiar este ajuste requiere migrar los datos existentes (puede tardar un
|
||||
poco) y reiniciar Obsidian. Asegúrate de hacer una copia de seguridad de tus
|
||||
@@ -61,13 +132,22 @@ Check and convert non-path-obfuscated files: Comprobar y convertir archivos sin
|
||||
Check for documents that have not been converted to path-obfuscated IDs and convert them if necessary.:
|
||||
Comprueba los documentos que aún no se hayan convertido a identificadores con
|
||||
ruta ofuscada y conviértelos si es necesario.
|
||||
Checking connection... Please wait.: Comprobando la conexión... Espera un momento.
|
||||
Chunks: Fragmentos (chunks)
|
||||
Close: Cerrar
|
||||
Close & Disconnect: Cerrar y desconectar
|
||||
Close this dialog: Cerrar este diálogo
|
||||
"Closed:": "Cerradas:"
|
||||
cmdConfigSync:
|
||||
showCustomizationSync: Mostrar sincronización de personalización
|
||||
Comma separated `.gitignore, .dockerignore`: "Separados por comas: `.gitignore, .dockerignore`"
|
||||
Command: Comando
|
||||
Communicating: Comunicando
|
||||
Compaction in progress on remote database...: Compactación en curso en la base de datos remota...
|
||||
Compaction on remote database completed successfully.: La compactación de la base de datos remota se ha completado correctamente.
|
||||
Compaction on remote database failed.: La compactación de la base de datos remota ha fallado.
|
||||
Compaction on remote database timed out.: La compactación de la base de datos remota ha superado el tiempo de espera.
|
||||
Compare file: Comparar archivo
|
||||
Compare the content of files between on local database and storage. If not matched, you will be asked which one you want to keep.:
|
||||
Compara el contenido de los archivos entre la base de datos local y el
|
||||
almacenamiento. Si no coinciden, se te preguntará cuál deseas conservar.
|
||||
@@ -79,39 +159,67 @@ Compatibility (Remote Database): Compatibilidad (base de datos remota)
|
||||
Compatibility (Trouble addressed): Compatibilidad (problemas corregidos)
|
||||
Compute revisions for chunks: Calcular revisiones para los chunks
|
||||
Compute revisions for chunks (Previous behaviour): Calcular revisiones para chunks (comportamiento anterior)
|
||||
Configuration: Configuración
|
||||
Configuration Encryption: Cifrado de configuración
|
||||
Configure: Configurar
|
||||
Configure And Change Remote: Configurar y cambiar remoto
|
||||
Configure E2EE: Configurar E2EE
|
||||
Configure Remote: Configurar remoto
|
||||
Connect: Conectar
|
||||
"Connected to Signaling Server (as Peer ID: ${peerId})": "Conectado al servidor de señalización (como ID de par: ${peerId})"
|
||||
"Connected:": "Conectadas:"
|
||||
Connection Settings: Ajustes de conexión
|
||||
"Connection:": "Conexión:"
|
||||
Continue anyway: Continuar de todos modos
|
||||
Copy: Copiar
|
||||
Copy Report to clipboard: Copiar el informe al portapapeles
|
||||
CouchDB Configuration: Configuración de CouchDB
|
||||
CouchDB Connection Tweak: Ajustes de conexión de CouchDB
|
||||
Create P2P remote: Crear remoto P2P
|
||||
Cross-platform: Multiplataforma
|
||||
"Current adapter: {adapter}": "Adaptador actual: {adapter}"
|
||||
Custom Headers: Encabezados personalizados
|
||||
Customization Sync: Sincronización de personalización
|
||||
Customization Sync (Beta3): Sincronización de personalización (Beta3)
|
||||
Data Compression: Compresión de datos
|
||||
Data to Copy: Datos a copiar
|
||||
Database -> Storage: Base de datos -> Almacenamiento
|
||||
Database Adapter: Adaptador de base de datos
|
||||
Database Name: Nombre de la base de datos
|
||||
Database suffix: Sufijo de base de datos
|
||||
Date: Fecha
|
||||
Default: Predeterminado
|
||||
Delay conflict resolution of inactive files: Retrasar resolución de conflictos en archivos inactivos
|
||||
Delay merge conflict prompt for inactive files.: Retrasar aviso de fusión para archivos inactivos
|
||||
Delete: Eliminar
|
||||
Delete all customization sync data: Eliminar todos los datos de sincronización de personalización
|
||||
Delete all data on the remote server.: Eliminar todos los datos del servidor remoto.
|
||||
Delete All of: Eliminar todo de
|
||||
Delete local database to reset or uninstall Self-hosted LiveSync:
|
||||
Eliminar la base de datos local para restablecer o desinstalar Self-hosted
|
||||
LiveSync
|
||||
Delete old metadata of deleted files on start-up: Borrar metadatos viejos al iniciar
|
||||
Delete Remote Configuration: Eliminar configuración remota
|
||||
Delete remote configuration '{name}'?: ¿Eliminar la configuración remota '{name}'?
|
||||
Delete remote configuration '${name}'?: ¿Eliminar la configuración remota «${name}»?
|
||||
DENIED: DENEGADO
|
||||
DENIED (in session): DENEGADO (en esta sesión)
|
||||
Deny: Denegar
|
||||
Deny in session: Denegar en esta sesión
|
||||
Deny permanently: Denegar permanentemente
|
||||
Deselect all: Deseleccionar todo
|
||||
desktop: equipo de escritorio
|
||||
Detected Peers: Pares detectados
|
||||
Developer: Desarrollador
|
||||
Device: Dispositivo
|
||||
device name: nombre del dispositivo
|
||||
Device name: Nombre del dispositivo
|
||||
Device name to identify the device. Please use shorter one for the stable peer detection, i.e., "iphone-16" or "macbook-2021".:
|
||||
Nombre para identificar el dispositivo. Usa uno corto para que la detección de
|
||||
pares sea estable, por ejemplo «iphone-16» o «macbook-2021».
|
||||
Device Peer ID: ID de par del dispositivo
|
||||
"Devices:": "Dispositivos:"
|
||||
Diagnostic RTCPeerConnection is enabled: El RTCPeerConnection de diagnóstico está habilitado
|
||||
dialog:
|
||||
yourLanguageAvailable:
|
||||
_value: >-
|
||||
@@ -129,10 +237,14 @@ dialog:
|
||||
¡Que lo disfrutes!
|
||||
Title: " ¡Hay traducción disponible!"
|
||||
btnRevertToDefault: Mantener %{lang-def}
|
||||
Diff: Diferencias
|
||||
Different: Distinto
|
||||
Disables all synchronization and restart.: Desactiva toda la sincronización y reinicia la aplicación.
|
||||
Disables logging, only shows notifications. Please disable if you report an issue.:
|
||||
Desactiva registros, solo muestra notificaciones. Desactívelo si reporta un
|
||||
problema.
|
||||
Disconnect: Desconectar
|
||||
Dismiss: Descartar
|
||||
Display Language: Idioma de visualización
|
||||
Display name: Nombre para mostrar
|
||||
Do not check configuration mismatch before replication: No verificar incompatibilidades antes de replicar
|
||||
@@ -211,36 +323,84 @@ Enable advanced features: Habilitar características avanzadas
|
||||
Enable customization sync: Habilitar sincronización de personalización
|
||||
Enable Developers' Debug Tools.: Habilitar herramientas de depuración
|
||||
Enable edge case treatment features: Habilitar manejo de casos límite
|
||||
Enable P2P Replicator: Habilitar el replicador P2P
|
||||
Enable poweruser features: Habilitar funciones para usuarios avanzados
|
||||
Enable this if your Object Storage doesn't support CORS: Habilitar si su almacenamiento no soporta CORS
|
||||
Enable this option to automatically apply the most recent change to documents even when it conflicts: Aplicar cambios recientes automáticamente aunque generen conflictos
|
||||
Enabled: Habilitado
|
||||
Enabling end-to-end encryption ensures that your data is encrypted on your device before being sent to the remote server. This means that even if someone gains access to the server, they won't be able to read your data without the passphrase. Make sure to remember your passphrase, as it will be required to decrypt your data on other devices.:
|
||||
Activar el cifrado de extremo a extremo garantiza que tus datos se cifren en
|
||||
tu dispositivo antes de enviarse al servidor remoto. Así, aunque alguien
|
||||
acceda al servidor, no podrá leer tus datos sin la frase de contraseña.
|
||||
Recuérdala bien, porque será necesaria para descifrar tus datos en los demás
|
||||
dispositivos.
|
||||
Encrypt contents on the remote database. If you use the plugin's synchronization feature, enabling this is recommended.:
|
||||
Cifrar contenido en la base de datos remota. Se recomienda habilitar si usa la
|
||||
sincronización del plugin.
|
||||
Encrypting sensitive configuration items: Cifrando elementos sensibles
|
||||
Encryption Algorithm: Algoritmo de cifrado
|
||||
Encryption phassphrase. If changed, you should overwrite the server's database with the new (encrypted) files.:
|
||||
Frase de cifrado. Si la cambia, sobrescriba la base del servidor con los
|
||||
nuevos archivos cifrados.
|
||||
End-to-End Encryption: Cifrado de extremo a extremo
|
||||
Endpoint URL: URL del endpoint
|
||||
Enhance chunk size: Mejorar tamaño de chunks
|
||||
Enter a folder prefix (optional): Introduce un prefijo de carpeta (opcional)
|
||||
Enter Setup URI: Introducir el Setup URI
|
||||
Enter TURN credential: Introduce la credencial de TURN
|
||||
Enter TURN username: Introduce el usuario de TURN
|
||||
Enter your Access Key ID: Introduce tu ID de clave de acceso
|
||||
Enter your Bucket Name: Introduce el nombre de tu bucket
|
||||
Enter your database name: Introduce el nombre de tu base de datos
|
||||
Enter your JWT Key ID: Introduce el ID de tu clave JWT
|
||||
Enter your JWT secret or private key: Introduce tu secreto JWT o tu clave privada
|
||||
Enter your JWT Subject (CouchDB Username): Introduce el sujeto JWT (usuario de CouchDB)
|
||||
Enter your passphrase: Introduce tu frase de contraseña
|
||||
Enter your password: Introduce tu contraseña
|
||||
Enter your Region (e.g., us-east-1, auto for R2): Introduce tu región (p. ej., us-east-1, o auto para R2)
|
||||
Enter your Secret Access Key: Introduce tu clave de acceso secreta
|
||||
Enter your username: Introduce tu usuario
|
||||
"Error during connection test: ${reason}": "Error durante la prueba de conexión: ${reason}"
|
||||
"Error during testAndFixSettings: ${reason}": "Error durante testAndFixSettings: ${reason}"
|
||||
Experimental Settings: Ajustes experimentales
|
||||
Export: Exportar
|
||||
Failed to connect to remote for compaction.: No se pudo conectar al remoto para la compactación.
|
||||
Failed to connect to remote for compaction. ${reason}: No se pudo conectar al remoto para la compactación. ${reason}
|
||||
"Failed to connect to the server: ${reason}": "No se pudo conectar al servidor: ${reason}"
|
||||
Failed to connect to the server. Please check your settings.: No se pudo conectar al servidor. Revisa tus ajustes.
|
||||
"Failed to connect to the signalling relay: ${reason}": "No se pudo conectar al relé de señalización: ${reason}"
|
||||
Failed to create replicator instance.: No se pudo crear la instancia del replicador.
|
||||
Failed to parse Setup-URI.: No se pudo interpretar el Setup-URI.
|
||||
Failed to start one-shot replication before Garbage Collection. Garbage Collection Cancelled.:
|
||||
No se pudo iniciar la replicación puntual previa a la recolección de basura.
|
||||
Recolección de basura cancelada.
|
||||
Failed to start replication after Garbage Collection.: No se pudo iniciar la replicación después de la recolección de basura.
|
||||
"Failed:": "Fallidas:"
|
||||
Fetch: Obtener
|
||||
Fetch chunks on demand: Obtener chunks bajo demanda
|
||||
Fetch database with previous behaviour: Obtener BD con comportamiento anterior
|
||||
Fetch remote settings: Obtener ajustes remotos
|
||||
FETCHING: OBTENIENDO
|
||||
Fetching status...: Obteniendo el estado...
|
||||
File integrity: Integridad de archivos
|
||||
File to resolve conflict: Archivo para resolver el conflicto
|
||||
File to view History: Archivo cuyo historial se va a ver
|
||||
Filename: Nombre de archivo
|
||||
"Final Confirmation: Overwrite Server Data with This Device's Files":
|
||||
"Confirmación final: sobrescribir los datos del servidor con los archivos de
|
||||
este dispositivo"
|
||||
Fix: Corregir
|
||||
Flag and restart: Marcar y reiniciar
|
||||
Flagged Selective: Selectivo marcado
|
||||
Folder Prefix: Prefijo de carpeta
|
||||
For HS256/HS512 algorithms, provide the shared secret key. For ES256/ES512 algorithms, provide the pkcs8 PEM-formatted private key.:
|
||||
Para los algoritmos HS256/HS512, indica la clave secreta compartida. Para
|
||||
ES256/ES512, indica la clave privada en formato PEM pkcs8.
|
||||
Forces the file to be synced when opened.: Forzar sincronización al abrir archivo
|
||||
Fresh Start Wipe: Borrado para reinicio completo
|
||||
Furthermore, if conflicts are already present in the server data, they will be synchronised to this device as they are, and you will need to resolve them locally.:
|
||||
Además, si ya hay conflictos en los datos del servidor, se sincronizarán tal
|
||||
cual a este dispositivo y tendrás que resolverlos localmente.
|
||||
Garbage Collection cancelled by user.: Recolección de basura cancelada por el usuario.
|
||||
"Garbage Collection completed. Deleted chunks: ${deletedChunks} / ${totalChunks}. Time taken: ${seconds} seconds.":
|
||||
"Recolección de basura completada. Chunks eliminados: ${deletedChunks} /
|
||||
@@ -254,13 +414,43 @@ Garbage Collection V3 (Beta): Recolección de basura V3 (Beta)
|
||||
"Garbage Collection: Scanning completed. Total chunks: ${totalChunks}, Used chunks: ${usedChunks}":
|
||||
"Recolección de basura: análisis completado. Chunks totales: ${totalChunks},
|
||||
chunks en uso: ${usedChunks}"
|
||||
Gathering information...: Recopilando información...
|
||||
Generate Random ID: Generar un ID aleatorio
|
||||
Group ID: ID de grupo
|
||||
Handle files as Case-Sensitive: Manejar archivos como sensibles a mayúsculas
|
||||
Have you created a backup before proceeding?: ¿Has creado una copia de seguridad antes de continuar?
|
||||
Hidden file synchronization have been temporarily disabled. Please enable them after the fetching, if you need them.:
|
||||
La sincronización de archivos ocultos se ha desactivado temporalmente. Vuelve
|
||||
a activarla después de la obtención si la necesitas.
|
||||
Hidden Files: Archivos ocultos
|
||||
Hide completely: Ocultar por completo
|
||||
Hide not applicable items: Ocultar elementos no aplicables
|
||||
Higher (${local} > ${remote}): Superior (${local} > ${remote})
|
||||
Highlight diff: Resaltar las diferencias
|
||||
How to display network errors when the sync server is unreachable.:
|
||||
Cómo mostrar los errores de red cuando el servidor de sincronización no está
|
||||
disponible.
|
||||
However, This should not be enabled if you want to increase your secrecy more.:
|
||||
Sin embargo, esto no debería habilitarse si quieres aumentar aún más tu
|
||||
privacidad.
|
||||
I am setting up a new server for the first time / I want to reset my existing server.:
|
||||
Estoy configurando un servidor nuevo por primera vez / quiero restablecer mi
|
||||
servidor actual.
|
||||
I am unable to create a backup of my Vault.: No puedo crear una copia de seguridad de mi Vault.
|
||||
I am unable to create a backup of my Vaults.: No puedo crear una copia de seguridad de mis Vaults.
|
||||
I have created a backup of my Vault.: He creado una copia de seguridad de mi Vault.
|
||||
I understand that all changes made on other smartphones or computers possibly could be lost.:
|
||||
Entiendo que todos los cambios hechos en otros móviles u ordenadores podrían
|
||||
perderse.
|
||||
I understand that other devices will no longer be able to synchronise, and will need to be reset the synchronisation information.:
|
||||
Entiendo que los demás dispositivos ya no podrán sincronizar y que habrá que
|
||||
restablecer su información de sincronización.
|
||||
I understand that this action is irreversible once performed.: Entiendo que esta acción es irreversible una vez realizada.
|
||||
I understand the risks and will proceed without a backup.: Entiendo los riesgos y continuaré sin copia de seguridad.
|
||||
I Understand, Overwrite Server: Lo entiendo, sobrescribir el servidor
|
||||
If "Auto Start P2P Connection" is enabled, the P2P connection will be started automatically when the plug-in launches.:
|
||||
Si «Iniciar la conexión P2P automáticamente» está activado, la conexión P2P se
|
||||
iniciará al arrancar el complemento.
|
||||
If disabled(toggled), chunks will be split on the UI thread (Previous behaviour).: Si se desactiva, chunks se dividen en hilo UI (comportamiento anterior)
|
||||
If enabled per-filed efficient customization sync will be used. We need a small migration when enabling this. And all devices should be updated to v0.23.18. Once we enabled this, we lost a compatibility with old versions.:
|
||||
Habilita sincronización eficiente por archivo. Requiere migración y actualizar
|
||||
@@ -285,14 +475,48 @@ If this is set, changes to local files which are matched by the ignore files wil
|
||||
If this option is enabled, PouchDB will hold the connection open for 60 seconds, and if no change arrives in that time, close and reopen the socket, instead of holding it open indefinitely. Useful when a proxy limits request duration but can increase resource usage.:
|
||||
Mantiene conexión 60s. Si no hay cambios, reinicia socket. Útil con proxies
|
||||
limitantes
|
||||
If you cannot avoid CORS issues, you might want to try this option. It uses Obsidian's internal API to communicate with the CouchDB server. Not compliant with web standards, but works. Note that this might break in future Obsidian versions.:
|
||||
Si no puedes evitar problemas de CORS, prueba esta opción. Usa la API interna
|
||||
de Obsidian para comunicarse con el servidor CouchDB. No cumple los estándares
|
||||
web, pero funciona. Ten en cuenta que podría dejar de funcionar en versiones
|
||||
futuras de Obsidian.
|
||||
If you cannot avoid CORS issues, you might want to try this option. It uses Obsidian's internal API to communicate with the S3 server. Not compliant with web standards, but works. Note that this might break in future Obsidian versions.:
|
||||
Si no puedes evitar problemas de CORS, prueba esta opción. Usa la API interna
|
||||
de Obsidian para comunicarse con el servidor S3. No cumple los estándares web,
|
||||
pero funciona. Ten en cuenta que podría dejar de funcionar en versiones
|
||||
futuras de Obsidian.
|
||||
If you have unsynchronised changes in your Vault on this device, they will likely diverge from the server's versions after the reset. This may result in a large number of file conflicts.:
|
||||
Si tienes cambios sin sincronizar en el Vault de este dispositivo, es probable
|
||||
que divergan de las versiones del servidor tras el restablecimiento. Esto
|
||||
puede provocar un gran número de conflictos de archivos.
|
||||
If you reached the payload size limit when using IBM Cloudant, please decrease batch size and batch limit to a lower value.:
|
||||
Si alcanzas el límite de tamaño de carga al usar IBM Cloudant, reduce el
|
||||
tamaño de lote y el límite de lote.
|
||||
If you understand the risks and still wish to proceed, select so.: Si entiendes los riesgos y aun así quieres continuar, indícalo.
|
||||
If you want to store the data in a specific folder within the bucket, you can specify a folder prefix here. Otherwise, leave it blank to store data at the root of the bucket.:
|
||||
Si quieres guardar los datos en una carpeta concreta del bucket, indica aquí
|
||||
un prefijo de carpeta. Si no, déjalo vacío para guardarlos en la raíz del
|
||||
bucket.
|
||||
If you want to use `LiveSync`, you should broadcast changes. All `watching` peers which detects this will start the replication for fetching.:
|
||||
Si quieres usar `LiveSync`, debes difundir los cambios. Todos los pares que
|
||||
estén `observando` y lo detecten iniciarán la replicación para obtenerlos.
|
||||
Ignore: Ignorar
|
||||
Ignore and Proceed: Ignorar y continuar
|
||||
Ignore files: Archivos a ignorar
|
||||
Ignore patterns: Patrones de exclusión
|
||||
Import connection: Importar conexión
|
||||
IMPORTANT: IMPORTANTE
|
||||
In most cases, you should stick with the default algorithm (${algorithm}), This setting is only required if you have an existing Vault encrypted in a different format.:
|
||||
En la mayoría de los casos deberías mantener el algoritmo predeterminado
|
||||
(${algorithm}). Este ajuste solo es necesario si ya tienes un Vault cifrado en
|
||||
otro formato.
|
||||
In this scenario, Self-hosted LiveSync will recreate metadata for every file and deliberately generate conflicts. Where the file content is identical, these conflicts will be resolved automatically.:
|
||||
En este caso, Self-hosted LiveSync recreará los metadatos de todos los
|
||||
archivos y generará conflictos a propósito. Cuando el contenido del archivo
|
||||
sea idéntico, esos conflictos se resolverán automáticamente.
|
||||
"Incoming:": "Entrantes:"
|
||||
Incubate Chunks in Document: Incubar chunks en documento
|
||||
Initial Action: Acción inicial
|
||||
Initialise all journal history, On the next sync, every item will be received and sent.:
|
||||
Restablece todo el historial del diario. En la próxima sincronización se
|
||||
recibirán y enviarán todos los elementos.
|
||||
@@ -305,6 +529,23 @@ Initialise journal sent history. On the next sync, every item except this device
|
||||
volverán a enviar todos los elementos salvo los recibidos por este
|
||||
dispositivo.
|
||||
Interval (sec): Intervalo (segundos)
|
||||
INVERTED: INVERTIDO
|
||||
"Issue detection log:": "Registro de detección de problemas:"
|
||||
It is strongly advised to create a backup before proceeding. Continuing without a backup may lead to data loss.:
|
||||
Se recomienda encarecidamente crear una copia de seguridad antes de continuar.
|
||||
Continuar sin copia de seguridad puede provocar pérdida de datos.
|
||||
Just for a minute, please!: ¡Solo un momento, por favor!
|
||||
JWT (JSON Web Token) authentication allows you to securely authenticate with the CouchDB server using tokens. Ensure that your CouchDB server is configured to accept JWTs and that the provided key and settings match the server's configuration. Incidentally, I have not verified it very thoroughly.:
|
||||
La autenticación JWT (JSON Web Token) permite autenticarse de forma segura con
|
||||
el servidor CouchDB mediante tokens. Asegúrate de que tu servidor CouchDB esté
|
||||
configurado para aceptar JWT y de que la clave y los ajustes indicados
|
||||
coincidan con la configuración del servidor. Por cierto, no lo he verificado a
|
||||
fondo.
|
||||
JWT Algorithm: Algoritmo JWT
|
||||
JWT Expiration Duration (minutes): Duración de caducidad del JWT (minutos)
|
||||
JWT Key: Clave JWT
|
||||
JWT Key ID (kid): ID de clave JWT (kid)
|
||||
JWT Subject (sub): Sujeto JWT (sub)
|
||||
K:
|
||||
P2P: "%{Peer} a %{Peer}"
|
||||
Peer: par
|
||||
@@ -327,6 +568,7 @@ lang-zh: Chino simplificado
|
||||
lang-zh-tw: Chino tradicional
|
||||
Later: Más tarde
|
||||
"Limit: {datetime} ({timestamp})": "Límite: {datetime} ({timestamp})"
|
||||
live: en vivo
|
||||
LiveSync could not handle multiple vaults which have same name without different prefix, This should be automatically configured.:
|
||||
LiveSync no puede manejar múltiples bóvedas con mismo nombre sin prefijo. Se
|
||||
configura automáticamente
|
||||
@@ -364,6 +606,7 @@ liveSyncSetting:
|
||||
liveSyncSettings:
|
||||
btnApply: Aplicar
|
||||
Local Database Tweak: Ajustes de la base de datos local
|
||||
Local only: Solo local
|
||||
Lock: Bloquear
|
||||
Lock Server: Bloquear servidor
|
||||
Lock the remote server to prevent synchronization with other devices.:
|
||||
@@ -375,6 +618,9 @@ logPane:
|
||||
pause: Pausar
|
||||
title: Registro de Self-hosted LiveSync
|
||||
wrap: Ajustar
|
||||
Lower (${local} < ${remote}): Inferior (${local} < ${remote})
|
||||
Maintenance Commands: Comandos de mantenimiento
|
||||
Maintenance mode: Modo de mantenimiento
|
||||
Maximum delay for batch database updating: Retraso máximo para actualización por lotes
|
||||
Maximum file size: Tamaño máximo de archivo
|
||||
Maximum Incubating Chunk Size: Tamaño máximo de chunks incubados
|
||||
@@ -387,6 +633,7 @@ Memory cache size (by total items): Tamaño caché memoria (por ítems)
|
||||
Merge: Fusionar
|
||||
Minimum delay for batch database updating: Retraso mínimo para actualización por lotes
|
||||
Minimum interval for syncing: Intervalo mínimo de sincronización
|
||||
Mixed: Mixto
|
||||
moduleCheckRemoteSize:
|
||||
logCheckingStorageSizes: Comprobando tamaños de almacenamiento
|
||||
logCurrentStorageSize: "Tamaño del almacenamiento remoto: ${measuredSize}"
|
||||
@@ -670,12 +917,55 @@ moduleMigration:
|
||||
titleCaseSensitivity: Distinción de mayúsculas y minúsculas
|
||||
titleRecommendSetupUri: Recomendación de usar un Setup URI
|
||||
titleWelcome: Bienvenido a Self-hosted LiveSync
|
||||
"Mostly Complete: Decision Required": "Casi terminado: se requiere una decisión"
|
||||
My remote server is already set up. I want to join this device.: Mi servidor remoto ya está configurado. Quiero añadir este dispositivo.
|
||||
Name: Nombre
|
||||
NEW: NUEVO
|
||||
Newer (${diff}): Más nuevo (${diff})
|
||||
No checks have been performed yet.: Todavía no se ha realizado ninguna comprobación.
|
||||
No connected device information found. Cancelling Garbage Collection.:
|
||||
No se ha encontrado información de dispositivos conectados. Se cancela la
|
||||
recolección de basura.
|
||||
No Connection: Sin conexión
|
||||
No devices available. Waiting for other devices to connect...:
|
||||
No hay dispositivos disponibles. Esperando a que se conecten otros
|
||||
dispositivos...
|
||||
No Items.: Sin elementos.
|
||||
NO PREVIEW: SIN VISTA PREVIA
|
||||
Node ID: ID de nodo
|
||||
Node Information Missing: Falta la información del nodo
|
||||
Not configured: Sin configurar
|
||||
Not now: Ahora no
|
||||
Note that the Group ID is not limited to the generated format; you can use any string as the Group ID.:
|
||||
"El ID de grupo no está limitado al formato generado: puedes usar cualquier
|
||||
cadena de texto."
|
||||
Note that you can generate a new Setup URI by running the "Copy settings as a new Setup URI" command in the command palette.:
|
||||
Puedes generar un Setup URI nuevo ejecutando el comando «Copy settings as a
|
||||
new Setup URI» en la paleta de comandos.
|
||||
Obfuscate Properties: Ofuscar propiedades
|
||||
Obfuscating properties (e.g., path of file, size, creation and modification dates) adds an additional layer of security by making it harder to identify the structure and names of your files and folders on the remote server. This helps protect your privacy and makes it more difficult for unauthorized users to infer information about your data.:
|
||||
Ofuscar las propiedades (p. ej., la ruta del archivo, el tamaño y las fechas
|
||||
de creación y modificación) añade una capa extra de seguridad, ya que
|
||||
dificulta identificar la estructura y los nombres de tus archivos y carpetas
|
||||
en el servidor remoto. Esto ayuda a proteger tu privacidad y hace más difícil
|
||||
que usuarios no autorizados deduzcan información sobre tus datos.
|
||||
Obsidian version: Versión de Obsidian
|
||||
Of course, we can back up the data before proceeding.: Por supuesto, se puede
|
||||
hacer una copia de seguridad de los datos antes de continuar.
|
||||
Off: Desactivado
|
||||
Older (${diff}): Más antiguo (${diff})
|
||||
On: Activado
|
||||
On the source device, from the command palette, run the 'Show settings as a QR code' command.:
|
||||
En el dispositivo de origen, ejecuta desde la paleta de comandos «Show
|
||||
settings as a QR code».
|
||||
On the source device, open Obsidian.: En el dispositivo de origen, abre Obsidian.
|
||||
On this device, please keep this Vault open.: En este dispositivo, mantén este Vault abierto.
|
||||
On this device, switch to the camera app or use a QR code scanner to scan the displayed QR code.:
|
||||
En este dispositivo, cambia a la aplicación de cámara o usa un lector de QR
|
||||
para escanear el código mostrado.
|
||||
Open connection: Abrir conexión
|
||||
Open P2P Setup...: Abrir la configuración P2P...
|
||||
Other files: Otros archivos
|
||||
P2P:
|
||||
AskPassphraseForDecrypt: El par remoto ha compartido la configuración. Introduce
|
||||
la frase de contraseña para descifrarla.
|
||||
@@ -723,17 +1013,55 @@ P2P:
|
||||
SyncAlreadyRunning: La sincronización P2P ya está en marcha.
|
||||
SyncCompleted: Sincronización P2P completada.
|
||||
SyncStartedWith: Se ha iniciado la sincronización P2P con ${name}.
|
||||
P2P Configuration: Configuración P2P
|
||||
P2P Status: Estado P2P
|
||||
Passphrase is required.: Se requiere la frase de contraseña.
|
||||
Path: Ruta
|
||||
"Peer ID:": "ID de par:"
|
||||
Peer to Peer Replicator: Replicador Punto a Punto
|
||||
Peers: Pares
|
||||
PERMANENT: PERMANENTE
|
||||
Pick a file to show history: Elige un archivo para ver su historial
|
||||
Please be aware that the End-to-End Encryption passphrase is not validated until the synchronisation process actually commences. This is a security measure designed to protect your data.:
|
||||
Ten en cuenta que la frase de contraseña del cifrado de extremo a extremo no
|
||||
se valida hasta que comienza realmente la sincronización. Es una medida de
|
||||
seguridad para proteger tus datos.
|
||||
Please configure your end-to-end encryption settings.: Configura los ajustes de cifrado de extremo a extremo.
|
||||
Please disable 'Read chunks online' in settings to use Garbage Collection.:
|
||||
Desactiva «Leer chunks en línea» en los ajustes para poder usar la recolección
|
||||
de basura.
|
||||
Please enable 'Compute revisions for chunks' in settings to use Garbage Collection.:
|
||||
Activa «Calcular revisiones para los chunks» en los ajustes para poder usar la
|
||||
recolección de basura.
|
||||
Please enter the CouchDB server information below.: Introduce a continuación los datos del servidor CouchDB.
|
||||
Please enter the details required to connect to your S3/MinIO/R2 compatible object storage service.:
|
||||
Introduce los datos necesarios para conectarte a tu servicio de almacenamiento
|
||||
de objetos compatible con S3/MinIO/R2.
|
||||
Please enter the Peer-to-Peer Synchronisation information below.: Introduce a continuación los datos de la sincronización punto a punto.
|
||||
Please enter the Setup URI that was generated during server installation or on another device, along with the vault passphrase.:
|
||||
Introduce el Setup URI generado durante la instalación del servidor o en otro
|
||||
dispositivo, junto con la frase de contraseña del vault.
|
||||
Please follow the steps below to import settings from your existing device.:
|
||||
Sigue los pasos siguientes para importar los ajustes desde tu dispositivo
|
||||
actual.
|
||||
PLEASE NOTE: TEN EN CUENTA
|
||||
Please select 'Cancel' explicitly to cancel this operation.: Selecciona «Cancelar» de forma explícita para cancelar esta operación.
|
||||
Please select an active P2P remote configuration to change P2P sync targets.:
|
||||
Selecciona una configuración remota P2P activa para cambiar los destinos de
|
||||
sincronización P2P.
|
||||
Please select the button below to restart and proceed to the data fetching confirmation.:
|
||||
Pulsa el botón de abajo para reiniciar y pasar a la confirmación de la
|
||||
obtención de datos.
|
||||
Please select the button below to restart and proceed to the final confirmation.: Pulsa el botón de abajo para reiniciar y pasar a la confirmación final.
|
||||
Please select your situation.: Selecciona tu situación.
|
||||
Please understand that this is intended behaviour.: Comprende que este es el comportamiento previsto.
|
||||
Plug-in version: Versión del complemento
|
||||
Plugins: Complementos
|
||||
Prepare the 'report' to create an issue: Preparar el «informe» para abrir una incidencia
|
||||
Prevent fetching configuration from server: Impedir la obtención de la configuración desde el servidor
|
||||
Proceed: Continuar
|
||||
Proceed Garbage Collection: Continuar con la recolección de basura
|
||||
Proceed to the next step.: Continuar al paso siguiente.
|
||||
Proceeding with Garbage Collection, ignoring missing nodes.: Se continúa con la recolección de basura, ignorando los nodos ausentes.
|
||||
Proceeding with Garbage Collection.: Se continúa con la recolección de basura.
|
||||
Progress: Progreso
|
||||
@@ -831,6 +1159,16 @@ Reduces storage space by discarding all non-latest revisions. This requires the
|
||||
Reduce el espacio de almacenamiento descartando todas las revisiones que no
|
||||
sean la última. Requiere la misma cantidad de espacio libre en el servidor
|
||||
remoto y en el cliente local.
|
||||
Refresh: Actualizar
|
||||
Relay settings: Ajustes del relé
|
||||
Reload: Recargar
|
||||
Remote only: Solo remoto
|
||||
Replicate now: Replicar ahora
|
||||
Replicating:
|
||||
_value: Replicando
|
||||
"":
|
||||
"":
|
||||
"": Replicando...
|
||||
Replicator:
|
||||
Dialogue:
|
||||
Locked:
|
||||
@@ -873,17 +1211,46 @@ Rerun the onboarding wizard to set up Self-hosted LiveSync again.:
|
||||
Vuelve a ejecutar el asistente de configuración inicial para configurar
|
||||
Self-hosted LiveSync de nuevo.
|
||||
Rerun Wizard: Volver a ejecutar el asistente
|
||||
Reset and Resume Synchronisation: Restablecer y reanudar la sincronización
|
||||
Reset notification threshold and check the remote database usage: Restablecer el umbral de aviso y comprobar el uso de la base de datos remota
|
||||
Reset the remote storage size threshold and check the remote storage size again.:
|
||||
Restablece el umbral de tamaño del almacenamiento remoto y vuelve a comprobar
|
||||
su tamaño.
|
||||
Restart and Fetch Data: Reiniciar y obtener los datos
|
||||
Restart and Initialise Server: Reiniciar e inicializar el servidor
|
||||
Restarting Obsidian is strongly recommended. Until restart, some changes may not take effect, and display may be inconsistent. Are you sure to restart now?:
|
||||
Se recomienda encarecidamente reiniciar Obsidian. Hasta que lo hagas, puede
|
||||
que algunos cambios no surtan efecto y que la interfaz se muestre de forma
|
||||
inconsistente. ¿Seguro que quieres reiniciar ahora?
|
||||
Rev: Rev
|
||||
Revert changes: Revertir cambios
|
||||
Revoke: Revocar
|
||||
Room ID: ID de sala
|
||||
"Room ID suffix:": "Sufijo del ID de sala:"
|
||||
Run Doctor: Ejecutar el Doctor
|
||||
S3/MinIO/R2 Configuration: Configuración de S3/MinIO/R2
|
||||
Same: Igual
|
||||
Same or local only: Igual o solo local
|
||||
Save and Apply: Guardar y aplicar
|
||||
Scan changes: Buscar cambios
|
||||
Scan for Broken files: Buscar archivos dañados
|
||||
Scan QR Code: Escanear código QR
|
||||
Scram Switches: Interruptores de emergencia
|
||||
Secret Access Key: Clave de acceso secreta
|
||||
Select active P2P remote: Seleccionar el remoto P2P activo
|
||||
Select All Shiny: Seleccionar todo lo nuevo
|
||||
Select Flagged Shiny: Seleccionar lo nuevo marcado
|
||||
Select P2P remote...: Seleccionar remoto P2P...
|
||||
Selecting this option will result in the current data on this device being used to initialise the server. Any existing data on the server will be completely overwritten.:
|
||||
Al elegir esta opción, los datos actuales de este dispositivo se usarán para
|
||||
inicializar el servidor. Cualquier dato existente en el servidor se
|
||||
sobrescribirá por completo.
|
||||
Selecting this option will result in this device joining the existing server. You need to fetching the existing synchronisation data from the server to this device.:
|
||||
Al elegir esta opción, este dispositivo se unirá al servidor existente.
|
||||
Tendrás que obtener del servidor los datos de sincronización ya existentes.
|
||||
Selective: Selectivo
|
||||
SENDING: ENVIANDO
|
||||
SESSION: SESIÓN
|
||||
SettingTab:
|
||||
Message:
|
||||
AskRebuild: Tus cambios requieren obtener los datos de la base de datos remota.
|
||||
@@ -1570,7 +1937,11 @@ Setting:
|
||||
ScanBrokenFiles:
|
||||
_value: Buscar archivos dañados
|
||||
Desc: Busca archivos que no se hayan guardado correctamente en la base de datos.
|
||||
"Setup Complete: Preparing to Fetch Synchronisation Data": "Configuración
|
||||
completada: preparando la obtención de los datos de sincronización"
|
||||
"Setup Complete: Preparing to Initialise Server": "Configuración completada: preparando la inicialización del servidor"
|
||||
Setup URI dialog cancelled.: Se ha cancelado el diálogo del Setup URI.
|
||||
Setup-URI: Setup-URI
|
||||
Should we keep folders that don't have any files inside?: ¿Mantener carpetas vacías?
|
||||
Should we only check for conflicts when a file is opened?: ¿Solo comprobar conflictos al abrir archivo?
|
||||
Should we prompt you about conflicting files when a file is opened?: ¿Notificar sobre conflictos al abrir archivo?
|
||||
@@ -1584,6 +1955,10 @@ Show status icon instead of file warnings banner: Mostrar icono de estado en lug
|
||||
Show status inside the editor: Mostrar estado dentro del editor
|
||||
Show status on the status bar: Mostrar estado en la barra de estado
|
||||
Show verbose log. Please enable if you report an issue.: Mostrar registro detallado. Actívelo si reporta un problema.
|
||||
Signaling Server Connection: Conexión al servidor de señalización
|
||||
Signalling Status: Estado de la señalización
|
||||
Skip and close: Omitir y cerrar
|
||||
Snippets: Fragmentos
|
||||
"Some devices have differing progress values (max: ${maxProgress}, min: ${minProgress}).\nThis may indicate that some devices have not completed synchronisation, which could lead to conflicts. Strongly recommend confirming that all devices are synchronised before proceeding.": >-
|
||||
Algunos dispositivos tienen valores de progreso distintos (máx.:
|
||||
${maxProgress}, mín.: ${minProgress}).
|
||||
@@ -1591,15 +1966,24 @@ Show verbose log. Please enable if you report an issue.: Mostrar registro detall
|
||||
Esto puede indicar que algunos no han terminado de sincronizar, lo que podría
|
||||
provocar conflictos. Se recomienda encarecidamente confirmar que todos los
|
||||
dispositivos están sincronizados antes de continuar.
|
||||
Start Broadcasting: Iniciar difusión
|
||||
Start change-broadcasting on Connect: Iniciar la difusión de cambios al conectar
|
||||
Start Sync & Close: Iniciar sincronización y cerrar
|
||||
Starts synchronisation when a file is saved.: Inicia sincronización al guardar un archivo
|
||||
Stat: Estado
|
||||
Stats: Estadísticas
|
||||
Stop ⚡: Detener ⚡
|
||||
Stop Broadcasting: Detener difusión
|
||||
Stop reflecting database changes to storage files.: Dejar de reflejar cambios de BD en archivos
|
||||
Stop watching for file changes.: Dejar de monitorear cambios en archivos
|
||||
Storage -> Database: Almacenamiento -> Base de datos
|
||||
Strongly Recommended: Muy recomendado
|
||||
Suppress notification of hidden files change: Suprimir notificaciones de cambios en archivos ocultos
|
||||
Suspend database reflecting: Suspender reflejo de base de datos
|
||||
Suspend file watching: Suspender monitorización de archivos
|
||||
Switch to IDB: Cambiar a IDB
|
||||
Switch to IndexedDB: Cambiar a IndexedDB
|
||||
Sync: Sincronizar
|
||||
Sync after merging file: Sincronizar tras fusionar archivo
|
||||
Sync automatically after merging files: Sincronizar automáticamente tras fusionar archivos
|
||||
Sync Mode: Modo de sincronización
|
||||
@@ -1607,13 +1991,23 @@ Sync on Editor Save: Sincronizar al guardar en editor
|
||||
Sync on File Open: Sincronizar al abrir archivo
|
||||
Sync on Save: Sincronizar al guardar
|
||||
Sync on Startup: Sincronizar al iniciar
|
||||
Sync once: Sincronizar una vez
|
||||
Synchronising files: Archivos sincronizados
|
||||
Syncing: Sincronización
|
||||
Syncing:
|
||||
_value: Sincronización
|
||||
"":
|
||||
"":
|
||||
"": Sincronizando...
|
||||
Target patterns: Patrones objetivo
|
||||
Test Settings and Continue: Probar los ajustes y continuar
|
||||
Testing only - Resolve file conflicts by syncing newer copies of the file, this can overwrite modified files. Be Warned.:
|
||||
Solo pruebas - Resolver conflictos sincronizando copias nuevas (puede
|
||||
sobrescribir modificaciones)
|
||||
The connection to the server has been configured successfully. As the next step,:
|
||||
La conexión con el servidor se ha configurado correctamente. Como paso
|
||||
siguiente,
|
||||
The delay for consecutive on-demand fetches: Retraso entre obtenciones consecutivas
|
||||
The files in this Vault are almost identical to the server's.: Los archivos de este Vault son casi idénticos a los del servidor.
|
||||
"The following accepted nodes are missing its node information:\n- ${missingNodes}\n\nThis indicates that they have not been connected for some time or have been left on an older version.\nIt is preferable to update all devices if possible. If you have any devices that are no longer in use, you can clear all accepted nodes by locking the remote once.": >-
|
||||
A los siguientes nodos aceptados les falta su información de nodo:
|
||||
|
||||
@@ -1626,22 +2020,80 @@ The delay for consecutive on-demand fetches: Retraso entre obtenciones consecuti
|
||||
Si es posible, conviene actualizar todos los dispositivos. Si tienes
|
||||
dispositivos que ya no usas, puedes borrar todos los nodos aceptados
|
||||
bloqueando el remoto una vez.
|
||||
The Group ID and passphrase are used to identify your group of devices. Make sure to use the same Group ID and passphrase on all devices you want to synchronise.:
|
||||
El ID de grupo y la frase de contraseña identifican tu grupo de dispositivos.
|
||||
Usa el mismo ID de grupo y la misma frase de contraseña en todos los
|
||||
dispositivos que quieras sincronizar.
|
||||
The Hash algorithm for chunk IDs: Algoritmo hash para IDs de chunks
|
||||
The IndexedDB adapter often offers superior performance in certain scenarios, but it has been found to cause memory leaks when used with LiveSync mode. When using LiveSync mode, please use IDB adapter instead.:
|
||||
El adaptador IndexedDB suele ofrecer mejor rendimiento en ciertos casos, pero
|
||||
se ha comprobado que provoca fugas de memoria con el modo LiveSync. Si usas el
|
||||
modo LiveSync, utiliza en su lugar el adaptador IDB.
|
||||
the latest synchronisation data will be downloaded from the server to this device.:
|
||||
se descargarán a este dispositivo los datos de sincronización más recientes
|
||||
del servidor.
|
||||
the local database, that is to say the synchronisation information, must be reconstituted.:
|
||||
hay que reconstruir la base de datos local, es decir, la información de
|
||||
sincronización.
|
||||
The maximum duration for which chunks can be incubated within the document. Chunks exceeding this period will graduate to independent chunks.: Duración máxima para incubar chunks. Excedentes se independizan
|
||||
The maximum number of chunks that can be incubated within the document. Chunks exceeding this number will immediately graduate to independent chunks.:
|
||||
Número máximo de chunks que pueden incubarse en el documento. Excedentes se
|
||||
independizan
|
||||
The maximum total size of chunks that can be incubated within the document. Chunks exceeding this size will immediately graduate to independent chunks.: Tamaño total máximo de chunks incubados. Excedentes se independizan
|
||||
The minimum interval for automatic synchronisation on event.: Intervalo mínimo para la sincronización automática al producirse un evento.
|
||||
The remote is already set up, and the configuration is compatible (or got compatible by this operation).:
|
||||
El remoto ya está configurado y la configuración es compatible (o pasa a serlo
|
||||
con esta operación).
|
||||
The Setup-URI does not appear to be valid. Please check that you have copied it correctly.: El Setup-URI no parece válido. Comprueba que lo hayas copiado correctamente.
|
||||
The Setup-URI is valid and ready to use.: El Setup-URI es válido y está listo para usarse.
|
||||
the single, authoritative master copy: la única copia maestra de referencia
|
||||
the synchronisation data on the server will be built based on the current data on this device.:
|
||||
los datos de sincronización del servidor se construirán a partir de los datos
|
||||
actuales de este dispositivo.
|
||||
Themes: Temas
|
||||
There is a way to resolve this on other devices.: Hay una forma de resolver esto en los demás dispositivos.
|
||||
There may be differences between the files in this Vault and the server.: Puede haber diferencias entre los archivos de este Vault y los del servidor.
|
||||
Therefore, we ask that you exercise extreme caution when configuring server information manually. If an incorrect passphrase is entered, the data on the server will become corrupted.:
|
||||
Por tanto, extrema la precaución al configurar manualmente los datos del
|
||||
servidor. Si introduces una frase de contraseña incorrecta, los datos del
|
||||
servidor se corromperán.
|
||||
This can isolate your connections between devices. Use the same Room ID for the same devices.:
|
||||
Esto permite aislar tus conexiones entre dispositivos. Usa el mismo ID de sala
|
||||
para los mismos dispositivos.
|
||||
This device: Este dispositivo
|
||||
This device name: Nombre de este dispositivo
|
||||
This is an extremely powerful operation. We strongly recommend that you copy your Vault folder to a safe location.:
|
||||
Esta es una operación extremadamente potente. Te recomendamos encarecidamente
|
||||
copiar la carpeta de tu Vault a un lugar seguro.
|
||||
This passphrase will not be copied to another device. It will be set to `Default` until you configure it again.: Esta frase no se copia a otros dispositivos. Usará `Default` hasta reconfigurar
|
||||
This password is used to encrypt the connection. Use something long enough.: Esta contraseña se usa para cifrar la conexión. Usa algo suficientemente largo.
|
||||
This procedure will first delete all existing synchronisation data from the server. Following this, the server data will be completely rebuilt, using the current state of your Vault on this device (including its local database) as:
|
||||
Este procedimiento eliminará primero todos los datos de sincronización
|
||||
existentes en el servidor. A continuación, los datos del servidor se
|
||||
reconstruirán por completo usando el estado actual del Vault de este
|
||||
dispositivo (incluida su base de datos local) como
|
||||
This setting must be the same even when connecting to multiple synchronisation destinations.:
|
||||
Este ajuste debe ser el mismo incluso si te conectas a varios destinos de
|
||||
sincronización.
|
||||
This Vault is empty, or contains only new files that are not on the server.:
|
||||
Este Vault está vacío o solo contiene archivos nuevos que no están en el
|
||||
servidor.
|
||||
This will rebuild the local database on this device using the most recent data from the server. This action is designed to resolve synchronisation inconsistencies and restore correct functionality.:
|
||||
Esto reconstruirá la base de datos local de este dispositivo con los datos más
|
||||
recientes del servidor. La acción está pensada para resolver inconsistencias
|
||||
de sincronización y restaurar el funcionamiento correcto.
|
||||
This will recreate chunks for all files. If there were missing chunks, this may fix the errors.:
|
||||
Esto recreará los fragmentos de todos los archivos. Si faltaban fragmentos,
|
||||
esto puede corregir los errores.
|
||||
To minimise the creation of new conflicts: Para minimizar la creación de nuevos conflictos
|
||||
Transfer Tweak: Ajustes de transferencia
|
||||
TURN Credential: Credencial de TURN
|
||||
TURN server settings are only necessary if you are behind a strict NAT or firewall that prevents direct P2P connections. In most cases, you can leave these fields blank.:
|
||||
Los ajustes del servidor TURN solo son necesarios si estás detrás de un NAT
|
||||
estricto o de un cortafuegos que impide las conexiones P2P directas. En la
|
||||
mayoría de los casos puedes dejar estos campos vacíos.
|
||||
TURN Server URLs (comma-separated): URL de servidores TURN (separadas por comas)
|
||||
TURN Username: Usuario de TURN
|
||||
TweakMismatchResolve:
|
||||
Action:
|
||||
DisableAutoAcceptCompatible: Desactivar la aceptación automática
|
||||
@@ -2141,13 +2593,26 @@ Ui:
|
||||
Unique name between all synchronized devices. To edit this setting, please disable customization sync once.:
|
||||
Nombre único entre dispositivos sincronizados. Para editarlo, desactive
|
||||
sincronización de personalización
|
||||
Unless you are certain, selecting this options is bit dangerous. It assumes that the server configuration is compatible with this device. If this is not the case, data loss may occur. Please ensure you know what you are doing.:
|
||||
Si no estás seguro, elegir esta opción es algo arriesgado. Da por supuesto que
|
||||
la configuración del servidor es compatible con este dispositivo. Si no lo es,
|
||||
puede haber pérdida de datos. Asegúrate de saber lo que haces.
|
||||
Updating list...: Actualizando lista...
|
||||
URL: URL
|
||||
Use a custom passphrase: Usar una frase de contraseña personalizada
|
||||
Use Custom HTTP Handler: Usar manejador HTTP personalizado
|
||||
Use Diagnostic RTCPeerConnection for statistics: Usar el RTCPeerConnection de diagnóstico para las estadísticas
|
||||
Use dynamic iteration count: Usar conteo de iteraciones dinámico
|
||||
Use internal API: Usar la API interna
|
||||
Use Internal API: Usar la API interna
|
||||
Use JWT Authentication: Usar autenticación JWT
|
||||
Use Path-Style Access: Usar acceso de tipo ruta (path-style)
|
||||
Use Random Number: Usar número aleatorio
|
||||
Use Segmented-splitter: Usar divisor segmentado
|
||||
Use splitting-limit-capped chunk splitter: Usar divisor de chunks con límite
|
||||
Use the trash bin: Usar papelera
|
||||
Use timeouts instead of heartbeats: Usar timeouts en lugar de latidos
|
||||
Use vrtmrz's relay: Usar el relé de vrtmrz
|
||||
username: nombre de usuario
|
||||
Username: Usuario
|
||||
Verbose Log: Registro detallado
|
||||
@@ -2156,49 +2621,94 @@ Verify and repair all files: Verificar y reparar todos los archivos
|
||||
Warning! This will have a serious impact on performance. And the logs will not be synchronised under the default name. Please be careful with logs; they often contain your confidential information.:
|
||||
¡Advertencia! Impacta rendimiento. Los logs no se sincronizan con nombre
|
||||
predeterminado. Contienen información confidencial
|
||||
WATCHING: OBSERVANDO
|
||||
We can not use "/" to the device name: No se puede usar "/" en el nombre del dispositivo
|
||||
We can use only Secure (HTTPS) connections on Obsidian Mobile.: En Obsidian Mobile solo se pueden usar conexiones seguras (HTTPS).
|
||||
We cannot change the device name while this feature is enabled. Please disable this feature to change the device name.:
|
||||
No podemos cambiar el nombre del dispositivo mientras esta función esté
|
||||
habilitada. Deshabilita la función para cambiarlo.
|
||||
We have to configure the device name: Hay que configurar el nombre del dispositivo
|
||||
We recommend that you copy your Vault folder to a safe location. This will provide a safeguard in case a large number of conflicts arise, or if you accidentally synchronise with an incorrect destination.:
|
||||
Te recomendamos copiar la carpeta de tu Vault a un lugar seguro. Así tendrás
|
||||
una salvaguarda en caso de que surjan muchos conflictos o de que sincronices
|
||||
por error con un destino incorrecto.
|
||||
When you save a file in the editor, start a sync automatically: Iniciar sincronización automática al guardar en editor
|
||||
Write credentials in the file: Escribir credenciales en archivo
|
||||
Write logs into the file: Escribir logs en archivo
|
||||
xxhash32 (Fast but less collision resistance): xxhash32 (rápido, pero con menor resistencia a colisiones)
|
||||
xxhash64 (Fastest): xxhash64 (el más rápido)
|
||||
"Welcome to Self-hosted LiveSync": "Bienvenido a Self-hosted LiveSync"
|
||||
"We will now guide you through a few questions to simplify the synchronisation setup.": "Ahora le guiaremos con unas pocas preguntas para simplificar la configuración de la sincronización。"
|
||||
"We will now guide you through a few questions to simplify the synchronisation setup.":
|
||||
"Ahora le guiaremos con unas pocas preguntas para simplificar la configuración
|
||||
de la sincronización。"
|
||||
"First, please select the option that best describes your current situation.": "Primero, seleccione la opción que describa mejor su situación actual。"
|
||||
"I am setting this up for the first time": "Estoy configurando esto por primera vez"
|
||||
"(Select this if you are configuring this device as the first synchronisation device.) This option is suitable if you are new to LiveSync and want to set it up from scratch.": "(Seleccione esto si está configurando este dispositivo como el primer dispositivo de sincronización). Esta opción es adecuada si es nuevo en LiveSync y desea configurarlo desde cero。"
|
||||
"I am adding a device to an existing synchronisation setup": "Estoy agregando un dispositivo a una configuración de sincronización existente"
|
||||
"(Select this if you are already using synchronisation on another computer or smartphone.) This option is suitable if you are new to LiveSync and want to set it up from scratch.": "(Seleccione esto si ya utiliza la sincronización en otro ordenador o teléfono). Esta opción es adecuada si desea añadir este dispositivo a una configuración de LiveSync existente。"
|
||||
"(Select this if you are configuring this device as the first synchronisation device.) This option is suitable if you are new to LiveSync and want to set it up from scratch.":
|
||||
"(Seleccione esto si está configurando este dispositivo como el primer
|
||||
dispositivo de sincronización). Esta opción es adecuada si es nuevo en
|
||||
LiveSync y desea configurarlo desde cero。"
|
||||
"I am adding a device to an existing synchronisation setup":
|
||||
"Estoy agregando un dispositivo a una configuración de sincronización
|
||||
existente"
|
||||
"(Select this if you are already using synchronisation on another computer or smartphone.) This option is suitable if you are new to LiveSync and want to set it up from scratch.":
|
||||
"(Seleccione esto si ya utiliza la sincronización en otro ordenador o
|
||||
teléfono). Esta opción es adecuada si desea añadir este dispositivo a una
|
||||
configuración de LiveSync existente。"
|
||||
"Yes, I want to set up a new synchronisation": "Sí, quiero configurar una nueva sincronización"
|
||||
"Yes, I want to add this device to my existing synchronisation": "Sí, quiero añadir este dispositivo a mi sincronización existente"
|
||||
"No, please take me back": "No, volver atrás"
|
||||
"Device Setup Method": "Método de configuración del dispositivo"
|
||||
"You are adding this device to an existing synchronisation setup.": "Está añadiendo este dispositivo a una configuración de sincronización existente。"
|
||||
"You are adding this device to an existing synchronisation setup.":
|
||||
"Está añadiendo este dispositivo a una configuración de sincronización
|
||||
existente。"
|
||||
"Please select a method to import the settings from another device.": "Seleccione un método para importar la configuración desde otro dispositivo。"
|
||||
"Use a Setup URI (Recommended)": "Usar un URI de configuración (recomendado)"
|
||||
"Paste the Setup URI generated from one of your active devices.": "Pegue el URI de configuración generado desde uno de sus dispositivos activos。"
|
||||
"Scan a QR Code (Recommended for mobile)": "Escanear un código QR (recomendado para móviles)"
|
||||
"Scan the QR code displayed on an active device using this device's camera.": "Escanee con la cámara de este dispositivo el código QR mostrado en un dispositivo activo。"
|
||||
"Scan the QR code displayed on an active device using this device's camera.":
|
||||
"Escanee con la cámara de este dispositivo el código QR mostrado en un
|
||||
dispositivo activo。"
|
||||
"Enter the server information manually": "Introducir manualmente la información del servidor"
|
||||
"Configure the same server information as your other devices again, manually, very advanced users only.": "Configure manualmente la misma información del servidor que en sus otros dispositivos. Solo para usuarios muy avanzados。"
|
||||
"Configure the same server information as your other devices again, manually, very advanced users only.":
|
||||
"Configure manualmente la misma información del servidor que en sus otros
|
||||
dispositivos. Solo para usuarios muy avanzados。"
|
||||
"Proceed with Setup URI": "Continuar con el URI de configuración"
|
||||
"I know my server details, let me enter them": "Conozco los datos de mi servidor; permítame introducirlos"
|
||||
"Please select an option to proceed": "Seleccione una opción para continuar"
|
||||
"Connection Method": "Método de conexión"
|
||||
"We will now proceed with the server configuration.": "Ahora continuaremos con la configuración del servidor。"
|
||||
"How would you like to configure the connection to your server?": "¿Cómo desea configurar la conexión con su servidor?"
|
||||
"A Setup URI is a single string of text containing your server address and authentication details. Using a URI, if one was generated by your server installation script, provides a simple and secure configuration.": "Un URI de configuración es una única cadena de texto que contiene la dirección del servidor y los datos de autenticación. Si el script de instalación de su servidor generó un URI, usarlo proporciona una configuración sencilla y segura。"
|
||||
"This is an advanced option for users who do not have a URI or who wish to configure detailed settings.": "Esta es una opción avanzada para usuarios que no disponen de un URI o que desean configurar parámetros detallados。"
|
||||
"A Setup URI is a single string of text containing your server address and authentication details. Using a URI, if one was generated by your server installation script, provides a simple and secure configuration.":
|
||||
"Un URI de configuración es una única cadena de texto que contiene la
|
||||
dirección del servidor y los datos de autenticación. Si el script de
|
||||
instalación de su servidor generó un URI, usarlo proporciona una configuración
|
||||
sencilla y segura。"
|
||||
"This is an advanced option for users who do not have a URI or who wish to configure detailed settings.":
|
||||
"Esta es una opción avanzada para usuarios que no disponen de un URI o que
|
||||
desean configurar parámetros detallados。"
|
||||
"Enter Server Information": "Introducir información del servidor"
|
||||
"Please select the type of server to which you are connecting.": "Seleccione el tipo de servidor al que se está conectando。"
|
||||
"Continue to CouchDB setup": "Continuar con la configuración de CouchDB"
|
||||
"Continue to S3/MinIO/R2 setup": "Continuar con la configuración de S3/MinIO/R2"
|
||||
"Continue to Peer-to-Peer only setup": "Continuar con la configuración solo Peer-to-Peer"
|
||||
"This is the most suitable synchronisation method for the design. All functions are available. You must have set up a CouchDB instance.": "Este es el método de sincronización más adecuado para el diseño. Todas las funciones están disponibles. Debe tener configurada una instancia de CouchDB。"
|
||||
"This is the most suitable synchronisation method for the design. All functions are available. You must have set up a CouchDB instance.":
|
||||
"Este es el método de sincronización más adecuado para el diseño. Todas las
|
||||
funciones están disponibles. Debe tener configurada una instancia de CouchDB。"
|
||||
"S3/MinIO/R2 Object Storage": "Almacenamiento de objetos S3/MinIO/R2"
|
||||
"Synchronisation utilising journal files. You must have set up an S3/MinIO/R2 compatible object storage.": "Sincronización mediante archivos de registro. Debe haber configurado un almacenamiento de objetos compatible con S3/MinIO/R2。"
|
||||
"Synchronisation utilising journal files. You must have set up an S3/MinIO/R2 compatible object storage.":
|
||||
"Sincronización mediante archivos de registro. Debe haber configurado un
|
||||
almacenamiento de objetos compatible con S3/MinIO/R2。"
|
||||
"Peer-to-Peer only": "Solo Peer-to-Peer"
|
||||
"This feature enables direct synchronisation between devices. No server is required, but both devices must be online at the same time for synchronisation to occur, and some features may be limited. Internet connection is only required to signalling (detecting peers) and not for data transfer.": "Esta función permite la sincronización directa entre dispositivos. No requiere servidor, pero ambos dispositivos deben estar en línea al mismo tiempo para que la sincronización se produzca, y algunas funciones pueden ser limitadas. La conexión a Internet solo se necesita para la señalización (detección de pares), no para la transferencia de datos。"
|
||||
|
||||
"This feature enables direct synchronisation between devices. No server is required, but both devices must be online at the same time for synchronisation to occur, and some features may be limited. Internet connection is only required to signalling (detecting peers) and not for data transfer.":
|
||||
"Esta función permite la sincronización directa entre dispositivos. No
|
||||
requiere servidor, pero ambos dispositivos deben estar en línea al mismo
|
||||
tiempo para que la sincronización se produzca, y algunas funciones pueden ser
|
||||
limitadas. La conexión a Internet solo se necesita para la señalización
|
||||
(detección de pares), no para la transferencia de datos。"
|
||||
You can configure in the Obsidian Plugin Settings.: Puedes configurarlo en los ajustes del complemento de Obsidian.
|
||||
You should create a new synchronisation destination and rebuild your data there.: Deberías crear un nuevo destino de sincronización y reconstruir allí tus datos.
|
||||
You should perform this operation only in exceptional circumstances, such as when the server data is completely corrupted, when changes on all other devices are no longer needed, or when the database size has become unusually large in comparison to the Vault size.:
|
||||
"Solo deberías realizar esta operación en circunstancias excepcionales: cuando
|
||||
los datos del servidor estén completamente corruptos, cuando ya no necesites
|
||||
los cambios de los demás dispositivos o cuando el tamaño de la base de datos
|
||||
sea inusualmente grande respecto al del Vault."
|
||||
|
||||
@@ -1362,7 +1362,7 @@ export class ConfigSync extends LiveSyncCommands {
|
||||
async storeCustomizationFiles(path: FilePath, termOverRide?: string) {
|
||||
const term = termOverRide || this.services.setting.getDeviceAndVaultName();
|
||||
if (term == "") {
|
||||
this._log("We have to configure the device name", LOG_LEVEL_NOTICE);
|
||||
this._log($msg("We have to configure the device name"), LOG_LEVEL_NOTICE);
|
||||
return;
|
||||
}
|
||||
if (this.useV2) {
|
||||
@@ -1552,7 +1552,7 @@ export class ConfigSync extends LiveSyncCommands {
|
||||
this._log("Scanning customizing files.", logLevel, "scan-all-config");
|
||||
const term = this.services.setting.getDeviceAndVaultName();
|
||||
if (term == "") {
|
||||
this._log("We have to configure the device name", LOG_LEVEL_NOTICE);
|
||||
this._log($msg("We have to configure the device name"), LOG_LEVEL_NOTICE);
|
||||
return;
|
||||
}
|
||||
const filesAll = await this.scanInternalFiles();
|
||||
@@ -1729,7 +1729,11 @@ export class ConfigSync extends LiveSyncCommands {
|
||||
|
||||
if (mode == "CUSTOMIZE") {
|
||||
if (!this.services.setting.getDeviceAndVaultName()) {
|
||||
let name = await this.core.confirm.askString("Device name", "Please set this device name", `desktop`);
|
||||
let name = await this.core.confirm.askString(
|
||||
$msg("Device name"),
|
||||
$msg("Please set this device name"),
|
||||
`desktop`
|
||||
);
|
||||
if (!name) {
|
||||
if (Platform.isAndroidApp) {
|
||||
name = "android-app";
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
import type ObsidianLiveSyncPlugin from "@/main";
|
||||
// import { askString } from "../../common/utils";
|
||||
import { Menu } from "@/deps.ts";
|
||||
import { $msg as translateMessage } from "@/common/translation";
|
||||
|
||||
export let list: IPluginDataExDisplay[] = [];
|
||||
export let thisTerm = "";
|
||||
@@ -61,25 +62,25 @@
|
||||
// NO OP. what's happened?
|
||||
freshness = "";
|
||||
} else if (local && !remote) {
|
||||
freshness = "Local only";
|
||||
freshness = translateMessage("Local only");
|
||||
} else if (remote && !local) {
|
||||
freshness = "Remote only";
|
||||
freshness = translateMessage("Remote only");
|
||||
canApply = true;
|
||||
} else {
|
||||
const dtDiff = (local?.mtime ?? 0) - (remote?.mtime ?? 0);
|
||||
const diff = timeDeltaToHumanReadable(Math.abs(dtDiff));
|
||||
if (dtDiff / 1000 < -10) {
|
||||
// freshness = "✓ Newer";
|
||||
freshness = `Newer (${diff})`;
|
||||
freshness = translateMessage("Newer (${diff})", { diff });
|
||||
canApply = true;
|
||||
contentCheck = true;
|
||||
} else if (dtDiff / 1000 > 10) {
|
||||
// freshness = "⚠ Older";
|
||||
freshness = `Older (${diff})`;
|
||||
freshness = translateMessage("Older (${diff})", { diff });
|
||||
canApply = true;
|
||||
contentCheck = true;
|
||||
} else {
|
||||
freshness = "Same";
|
||||
freshness = translateMessage("Same");
|
||||
canApply = false;
|
||||
contentCheck = true;
|
||||
}
|
||||
@@ -89,11 +90,17 @@
|
||||
if (local?.version || remote?.version) {
|
||||
const compare = `${localVersionStr}`.localeCompare(remoteVersionStr, undefined, { numeric: true });
|
||||
if (compare == 0) {
|
||||
version = "Same";
|
||||
version = translateMessage("Same");
|
||||
} else if (compare < 0) {
|
||||
version = `Lower (${localVersionStr} < ${remoteVersionStr})`;
|
||||
version = translateMessage("Lower (${local} < ${remote})", {
|
||||
local: localVersionStr,
|
||||
remote: remoteVersionStr,
|
||||
});
|
||||
} else if (compare > 0) {
|
||||
version = `Higher (${localVersionStr} > ${remoteVersionStr})`;
|
||||
version = translateMessage("Higher (${local} > ${remote})", {
|
||||
local: localVersionStr,
|
||||
remote: remoteVersionStr,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -135,19 +142,19 @@
|
||||
})
|
||||
.reduce((p, c) => p | (c as number), 0 as number);
|
||||
if (matchingStatus == 0b0000100) {
|
||||
equivalency = "Same";
|
||||
equivalency = translateMessage("Same");
|
||||
canApply = false;
|
||||
} else if (matchingStatus <= 0b0000100) {
|
||||
equivalency = "Same or local only";
|
||||
equivalency = translateMessage("Same or local only");
|
||||
canApply = false;
|
||||
} else if (matchingStatus == 0b0010000) {
|
||||
canApply = true;
|
||||
canCompare = true;
|
||||
equivalency = "Different";
|
||||
equivalency = translateMessage("Different");
|
||||
} else {
|
||||
canApply = true;
|
||||
canCompare = true;
|
||||
equivalency = "Mixed";
|
||||
equivalency = translateMessage("Mixed");
|
||||
}
|
||||
return { equivalency, canApply, canCompare };
|
||||
}
|
||||
@@ -244,7 +251,7 @@
|
||||
if (selected == "") {
|
||||
// NO OP.
|
||||
} else if (selected == thisTerm) {
|
||||
freshness = "This device";
|
||||
freshness = translateMessage("This device");
|
||||
canApply = false;
|
||||
} else {
|
||||
const local = list.find((e) => e.term == thisTerm);
|
||||
@@ -304,11 +311,11 @@
|
||||
if (!local) return;
|
||||
if (!selectedItem) return;
|
||||
const menu = new Menu();
|
||||
menu.addItem((item) => item.setTitle("Compare file").setIsLabel(true));
|
||||
menu.addItem((item) => item.setTitle(translateMessage("Compare file")).setIsLabel(true));
|
||||
menu.addSeparator();
|
||||
const files = unique(local.files.map((e) => e.filename).concat(selectedItem.files.map((e) => e.filename)));
|
||||
const convDate = (dt: PluginDataExFile | undefined) => {
|
||||
if (!dt) return "(Missing)";
|
||||
if (!dt) return translateMessage("(Missing)");
|
||||
const d = new Date(dt.mtime);
|
||||
return d.toLocaleString();
|
||||
};
|
||||
@@ -335,10 +342,14 @@
|
||||
Logger(`Could not find local item`, LOG_LEVEL_VERBOSE);
|
||||
return;
|
||||
}
|
||||
const duplicateTermName = await core.confirm.askString("Duplicate", "device name", "");
|
||||
const duplicateTermName = await core.confirm.askString(
|
||||
translateMessage("Duplicate"),
|
||||
translateMessage("device name"),
|
||||
""
|
||||
);
|
||||
if (duplicateTermName) {
|
||||
if (duplicateTermName.contains("/")) {
|
||||
Logger(`We can not use "/" to the device name`, LOG_LEVEL_NOTICE);
|
||||
Logger(translateMessage('We can not use "/" to the device name'), LOG_LEVEL_NOTICE);
|
||||
return;
|
||||
}
|
||||
const key = `${plugin.core.services.API.getSystemConfigDir()}/${local.files[0].filename}`;
|
||||
@@ -391,7 +402,7 @@
|
||||
{/if}
|
||||
{:else}
|
||||
<span class="spacer"></span>
|
||||
<span class="message even">All the same or non-existent</span>
|
||||
<span class="message even">{translateMessage("All the same or non-existent")}</span>
|
||||
<!-- svelte-ignore a11y_consider_explicit_label -->
|
||||
<button disabled></button>
|
||||
<!-- svelte-ignore a11y_consider_explicit_label -->
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
import { HiddenFileSync } from "@/features/HiddenFileSync/CmdHiddenFileSync.ts";
|
||||
import { LOG_LEVEL_NOTICE, Logger } from "octagonal-wheels/common/logger";
|
||||
import type { LiveSyncBaseCore } from "@/LiveSyncBaseCore.ts";
|
||||
import { $msg as translateMessage } from "@/common/translation";
|
||||
export let plugin: ObsidianLiveSyncPlugin;
|
||||
export let core :LiveSyncBaseCore;
|
||||
// $: core = plugin.core;
|
||||
@@ -32,15 +33,17 @@
|
||||
|
||||
const addOn = core.getAddOn<ConfigSync>(ConfigSync.name)!;
|
||||
if (!addOn) {
|
||||
const msg =
|
||||
"AddOn Module (ConfigSync) has not been loaded. This is very unexpected situation. Please report this issue.";
|
||||
const msg = translateMessage(
|
||||
"AddOn Module (ConfigSync) has not been loaded. This is very unexpected situation. Please report this issue."
|
||||
);
|
||||
Logger(msg, LOG_LEVEL_NOTICE);
|
||||
throw new Error(msg);
|
||||
}
|
||||
const addOnHiddenFileSync = core.getAddOn<HiddenFileSync>(HiddenFileSync.name) as HiddenFileSync;
|
||||
if (!addOnHiddenFileSync) {
|
||||
const msg =
|
||||
"AddOn Module (HiddenFileSync) has not been loaded. This is very unexpected situation. Please report this issue.";
|
||||
const msg = translateMessage(
|
||||
"AddOn Module (HiddenFileSync) has not been loaded. This is very unexpected situation. Please report this issue."
|
||||
);
|
||||
Logger(msg, LOG_LEVEL_NOTICE);
|
||||
throw new Error(msg);
|
||||
}
|
||||
@@ -92,9 +95,9 @@
|
||||
}
|
||||
|
||||
const displays = {
|
||||
CONFIG: "Configuration",
|
||||
THEME: "Themes",
|
||||
SNIPPET: "Snippets",
|
||||
CONFIG: translateMessage("Configuration"),
|
||||
THEME: translateMessage("Themes"),
|
||||
SNIPPET: translateMessage("Snippets"),
|
||||
};
|
||||
async function scanAgain() {
|
||||
await addOn.scanAllConfigFiles(true);
|
||||
@@ -156,20 +159,20 @@
|
||||
}
|
||||
function askOverwriteModeForAutomatic(evt: MouseEvent, key: string) {
|
||||
const menu = new Menu();
|
||||
menu.addItem((item) => item.setTitle("Initial Action").setIsLabel(true));
|
||||
menu.addItem((item) => item.setTitle(translateMessage("Initial Action")).setIsLabel(true));
|
||||
menu.addSeparator();
|
||||
menu.addItem((item) => {
|
||||
item.setTitle(`↑: Overwrite Remote`).onClick((e) => {
|
||||
item.setTitle(translateMessage("↑: Overwrite Remote")).onClick((e) => {
|
||||
applyAutomaticSync(key, "pushForce");
|
||||
});
|
||||
})
|
||||
.addItem((item) => {
|
||||
item.setTitle(`↓: Overwrite Local`).onClick((e) => {
|
||||
item.setTitle(translateMessage("↓: Overwrite Local")).onClick((e) => {
|
||||
applyAutomaticSync(key, "pullForce");
|
||||
});
|
||||
})
|
||||
.addItem((item) => {
|
||||
item.setTitle(`⇅: Use newer`).onClick((e) => {
|
||||
item.setTitle(translateMessage("⇅: Use newer")).onClick((e) => {
|
||||
applyAutomaticSync(key, "safe");
|
||||
});
|
||||
});
|
||||
@@ -201,10 +204,10 @@
|
||||
[MODE_SHINY]: ICON_EMOJI_FLAGGED,
|
||||
};
|
||||
const TITLES: { [key: number]: string } = {
|
||||
[MODE_SELECTIVE]: "Selective",
|
||||
[MODE_PAUSED]: "Ignore",
|
||||
[MODE_AUTOMATIC]: "Automatic",
|
||||
[MODE_SHINY]: "Flagged Selective",
|
||||
[MODE_SELECTIVE]: translateMessage("Selective"),
|
||||
[MODE_PAUSED]: translateMessage("Ignore"),
|
||||
[MODE_AUTOMATIC]: translateMessage("Automatic"),
|
||||
[MODE_SHINY]: translateMessage("Flagged Selective"),
|
||||
};
|
||||
const PREFIX_PLUGIN_ALL = "PLUGIN_ALL";
|
||||
const PREFIX_PLUGIN_DATA = "PLUGIN_DATA";
|
||||
@@ -329,28 +332,30 @@
|
||||
|
||||
<div class="buttonsWrap">
|
||||
<div class="buttons">
|
||||
<button on:click={() => scanAgain()}>Scan changes</button>
|
||||
<button on:click={() => replicate()}>Sync once</button>
|
||||
<button on:click={() => requestUpdate()}>Refresh</button>
|
||||
<button on:click={() => scanAgain()}>{translateMessage("Scan changes")}</button>
|
||||
<button on:click={() => replicate()}>{translateMessage("Sync once")}</button>
|
||||
<button on:click={() => requestUpdate()}>{translateMessage("Refresh")}</button>
|
||||
{#if isMaintenanceMode}
|
||||
<button on:click={() => requestReload()}>Reload</button>
|
||||
<button on:click={() => requestReload()}>{translateMessage("Reload")}</button>
|
||||
{/if}
|
||||
</div>
|
||||
<div class="buttons">
|
||||
<button on:click={() => selectAllNewest(true)}>Select All Shiny</button>
|
||||
<button on:click={() => selectAllNewest(false)}>{ICON_EMOJI_FLAGGED} Select Flagged Shiny</button>
|
||||
<button on:click={() => resetSelectNewest()}>Deselect all</button>
|
||||
<button on:click={() => applyAll()} class="mod-cta">Apply All Selected</button>
|
||||
<button on:click={() => selectAllNewest(true)}>{translateMessage("Select All Shiny")}</button>
|
||||
<button on:click={() => selectAllNewest(false)}
|
||||
>{ICON_EMOJI_FLAGGED} {translateMessage("Select Flagged Shiny")}</button
|
||||
>
|
||||
<button on:click={() => resetSelectNewest()}>{translateMessage("Deselect all")}</button>
|
||||
<button on:click={() => applyAll()} class="mod-cta">{translateMessage("Apply All Selected")}</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="loading">
|
||||
{#if loading || $pluginV2Progress !== 0}
|
||||
<span>Updating list...{$pluginV2Progress == 0 ? "" : ` (${$pluginV2Progress})`}</span>
|
||||
<span>{translateMessage("Updating list...")}{$pluginV2Progress == 0 ? "" : ` (${$pluginV2Progress})`}</span>
|
||||
{/if}
|
||||
</div>
|
||||
<div class="list">
|
||||
{#if list.length == 0}
|
||||
<div class="center">No Items.</div>
|
||||
<div class="center">{translateMessage("No Items.")}</div>
|
||||
{:else}
|
||||
{#each displayEntries as [key, label]}
|
||||
<div>
|
||||
@@ -382,7 +387,7 @@
|
||||
</div>
|
||||
{/each}
|
||||
<div>
|
||||
<h3>Plugins</h3>
|
||||
<h3>{translateMessage("Plugins")}</h3>
|
||||
{#each pluginEntries as [name, listX]}
|
||||
{@const bindKeyAll = `${PREFIX_PLUGIN_ALL}/${name}`}
|
||||
{@const modeAll = automaticListDisp.get(bindKeyAll) ?? MODE_SELECTIVE}
|
||||
@@ -464,7 +469,7 @@
|
||||
>
|
||||
{getIcon(modeEtc)}
|
||||
</button>
|
||||
<span class="name">Other files</span>
|
||||
<span class="name">{translateMessage("Other files")}</span>
|
||||
</div>
|
||||
<div class="body">
|
||||
{#if modeEtc == MODE_SELECTIVE || modeEtc == MODE_SHINY}
|
||||
@@ -492,9 +497,9 @@
|
||||
{#if isMaintenanceMode}
|
||||
<div class="buttons">
|
||||
<div>
|
||||
<h3>Maintenance Commands</h3>
|
||||
<h3>{translateMessage("Maintenance Commands")}</h3>
|
||||
<div class="maintenancerow">
|
||||
<label for="">Delete All of </label>
|
||||
<label for="">{translateMessage("Delete All of")} </label>
|
||||
<select bind:value={deleteTerm}>
|
||||
{#each allTerms as term}
|
||||
<option value={term}>{term}</option>
|
||||
@@ -513,10 +518,20 @@
|
||||
</div>
|
||||
{/if}
|
||||
<div class="buttons">
|
||||
<label><span>Hide not applicable items</span><input type="checkbox" bind:checked={hideEven} /></label>
|
||||
<label
|
||||
><span>{translateMessage("Hide not applicable items")}</span><input
|
||||
type="checkbox"
|
||||
bind:checked={hideEven}
|
||||
/></label
|
||||
>
|
||||
</div>
|
||||
<div class="buttons">
|
||||
<label><span>Maintenance mode</span><input type="checkbox" bind:checked={isMaintenanceMode} /></label>
|
||||
<label
|
||||
><span>{translateMessage("Maintenance mode")}</span><input
|
||||
type="checkbox"
|
||||
bind:checked={isMaintenanceMode}
|
||||
/></label
|
||||
>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
import type { FilePath, LoadedEntry } from "@vrtmrz/livesync-commonlib/compat/common/types";
|
||||
import { decodeBinary, readString } from "@vrtmrz/livesync-commonlib/compat/string_and_binary/convert";
|
||||
import { getDocData, isObjectDifferent, mergeObject } from "@vrtmrz/livesync-commonlib/compat/common/utils";
|
||||
import { $msg as translateMessage } from "@/common/translation";
|
||||
|
||||
interface Props {
|
||||
docs?: LoadedEntry[];
|
||||
@@ -115,7 +116,7 @@
|
||||
let newModes = [] as typeof modesSrc;
|
||||
|
||||
if (!hideLocal) {
|
||||
newModes.push(["", "Not now"]);
|
||||
newModes.push(["", translateMessage("Not now")]);
|
||||
newModes.push(["A", nameA || "A"]);
|
||||
}
|
||||
newModes.push(["B", nameB || "B"]);
|
||||
@@ -127,9 +128,9 @@
|
||||
|
||||
<h2>{filename}</h2>
|
||||
{#if !docA || !docB}
|
||||
<div class="message">Just for a minute, please!</div>
|
||||
<div class="message">{translateMessage("Just for a minute, please!")}</div>
|
||||
<div class="buttons">
|
||||
<button onclick={apply}>Dismiss</button>
|
||||
<button onclick={apply}>{translateMessage("Dismiss")}</button>
|
||||
</div>
|
||||
{:else}
|
||||
<div class="options">
|
||||
@@ -152,7 +153,7 @@
|
||||
{/each}
|
||||
</div>
|
||||
{:else}
|
||||
NO PREVIEW
|
||||
{translateMessage("NO PREVIEW")}
|
||||
{/if}
|
||||
|
||||
<div class="infos">
|
||||
|
||||
@@ -57,6 +57,7 @@ import { tryGetFilePath } from "@vrtmrz/livesync-commonlib/compat/common/utils.d
|
||||
import { configureHiddenFileSyncMode, type ConfigureHiddenFileSyncResult } from "./configureHiddenFileSyncMode.ts";
|
||||
import type { OptionalSyncFeatureMode } from "@/features/optionalSyncFeatures.ts";
|
||||
import { getObsidianCommunityPluginManager } from "@/common/obsidianCommunityPlugins.ts";
|
||||
import { $msg } from "@/common/translation";
|
||||
type SyncDirection = "push" | "pull" | "safe" | "pullForce" | "pushForce";
|
||||
|
||||
type HiddenFileInitialisationProgress = {
|
||||
@@ -1539,10 +1540,7 @@ Offline Changed files: ${files.length}`;
|
||||
this.core.databaseFileAccess.fetchEntryMeta(prefixedFileName, undefined, true),
|
||||
this.core.databaseFileAccess.getConflictedRevs(prefixedFileName),
|
||||
]);
|
||||
const liveRevisions = new Set([
|
||||
...(current && current._rev ? [current._rev] : []),
|
||||
...conflicts,
|
||||
]);
|
||||
const liveRevisions = new Set([...(current && current._rev ? [current._rev] : []), ...conflicts]);
|
||||
if (!selected || selected._rev !== revision || !liveRevisions.has(revision)) {
|
||||
this._log(
|
||||
`Could not use hidden-file revision ${revision} of ${stripAllPrefixes(prefixedFileName)}; the selected revision is no longer live`,
|
||||
@@ -1834,15 +1832,7 @@ Offline Changed files: ${files.length}`;
|
||||
force = false
|
||||
): Promise<boolean> {
|
||||
return Boolean(
|
||||
await this.extractInternalFileFromDatabase(
|
||||
storageFilePath,
|
||||
force,
|
||||
undefined,
|
||||
true,
|
||||
false,
|
||||
true,
|
||||
revision
|
||||
)
|
||||
await this.extractInternalFileFromDatabase(storageFilePath, force, undefined, true, false, true, revision)
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1917,7 +1907,9 @@ Offline Changed files: ${files.length}`;
|
||||
private _allSuspendExtraSync(): Promise<boolean> {
|
||||
if (this.core.settings.syncInternalFiles) {
|
||||
this._log(
|
||||
"Hidden file synchronization have been temporarily disabled. Please enable them after the fetching, if you need them.",
|
||||
$msg(
|
||||
"Hidden file synchronization have been temporarily disabled. Please enable them after the fetching, if you need them."
|
||||
),
|
||||
LOG_LEVEL_NOTICE
|
||||
);
|
||||
this.core.settings.syncInternalFiles = false;
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
import type { LiveSyncTrysteroReplicator } from "@vrtmrz/livesync-commonlib/compat/replication/trystero/LiveSyncTrysteroReplicator";
|
||||
import { delay, fireAndForget } from "octagonal-wheels/promises";
|
||||
import P2PServerStatusCard from "./P2PServerStatusCard.svelte";
|
||||
import { $msg as translateMessage } from "@/common/translation";
|
||||
|
||||
interface Props {
|
||||
liveSyncReplicator: LiveSyncTrysteroReplicator;
|
||||
@@ -84,11 +85,11 @@
|
||||
}
|
||||
|
||||
function getAcceptanceStatus(peer: P2PServerInfo["knownAdvertisements"][number]) {
|
||||
if (peer.isTemporaryAccepted === true) return "ACCEPTED (in session)";
|
||||
if (peer.isAccepted === true) return "ACCEPTED";
|
||||
if (peer.isTemporaryAccepted === false) return "DENIED (in session)";
|
||||
if (peer.isAccepted === false) return "DENIED";
|
||||
return "NEW";
|
||||
if (peer.isTemporaryAccepted === true) return translateMessage("ACCEPTED (in session)");
|
||||
if (peer.isAccepted === true) return translateMessage("ACCEPTED");
|
||||
if (peer.isTemporaryAccepted === false) return translateMessage("DENIED (in session)");
|
||||
if (peer.isAccepted === false) return translateMessage("DENIED");
|
||||
return translateMessage("NEW");
|
||||
}
|
||||
|
||||
function getAcceptanceStatusClass(peer: P2PServerInfo["knownAdvertisements"][number]) {
|
||||
@@ -102,7 +103,7 @@
|
||||
<P2PServerStatusCard {getLiveSyncReplicator} showBroadcastToggle={false} />
|
||||
|
||||
<div class="peers-section">
|
||||
<h3>Available Peers</h3>
|
||||
<h3>{translateMessage("Available Peers")}</h3>
|
||||
{#if serverInfo && serverInfo.knownAdvertisements.length > 0}
|
||||
<div class="peers-list">
|
||||
{#each serverInfo.knownAdvertisements as peer (peer.peerId)}
|
||||
@@ -126,14 +127,18 @@
|
||||
disabled={syncingPeerId !== null}
|
||||
onclick={() => handleSync(peer.peerId)}
|
||||
>
|
||||
{syncingPeerId === peer.peerId ? "Syncing..." : "Sync"}
|
||||
{syncingPeerId === peer.peerId
|
||||
? translateMessage("Syncing...")
|
||||
: translateMessage("Sync")}
|
||||
</button>
|
||||
<button
|
||||
class="btn {rebuildMode ? 'btn-primary' : 'btn-secondary'}"
|
||||
disabled={syncingPeerId !== null}
|
||||
onclick={() => handleSyncThenClose(peer.peerId)}
|
||||
>
|
||||
{syncingPeerId === peer.peerId ? "Syncing..." : "Start Sync & Close"}
|
||||
{syncingPeerId === peer.peerId
|
||||
? translateMessage("Syncing...")
|
||||
: translateMessage("Start Sync & Close")}
|
||||
</button>
|
||||
{:else}
|
||||
<button
|
||||
@@ -141,7 +146,9 @@
|
||||
disabled={syncingPeerId !== null}
|
||||
onclick={() => handleSyncThenClose(peer.peerId)}
|
||||
>
|
||||
{syncingPeerId === peer.peerId ? "Syncing..." : "Sync"}
|
||||
{syncingPeerId === peer.peerId
|
||||
? translateMessage("Syncing...")
|
||||
: translateMessage("Sync")}
|
||||
</button>
|
||||
{/if}
|
||||
</div>
|
||||
@@ -149,16 +156,22 @@
|
||||
{/each}
|
||||
</div>
|
||||
{:else if serverInfo}
|
||||
<p class="no-peers">No devices available. Waiting for other devices to connect...</p>
|
||||
<p class="no-peers">
|
||||
{translateMessage("No devices available. Waiting for other devices to connect...")}
|
||||
</p>
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
<div class="footer">
|
||||
{#if rebuildMode}
|
||||
<button class="btn btn-cancel" onclick={onClose} disabled={syncingPeerId !== null}>Skip and close</button>
|
||||
<button class="btn btn-cancel" onclick={onClose} disabled={syncingPeerId !== null}
|
||||
>{translateMessage("Skip and close")}</button
|
||||
>
|
||||
{:else}
|
||||
<button class="btn btn-cancel" onclick={onClose}>Close</button>
|
||||
<button class="btn btn-cancel" onclick={onCloseAndDisconnect}>Close & Disconnect</button>
|
||||
<button class="btn btn-cancel" onclick={onClose}>{translateMessage("Close")}</button>
|
||||
<button class="btn btn-cancel" onclick={onCloseAndDisconnect}
|
||||
>{translateMessage("Close & Disconnect")}</button
|
||||
>
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -263,7 +263,7 @@
|
||||
</script>
|
||||
|
||||
<article>
|
||||
<h1>Peer to Peer Replicator</h1>
|
||||
<h1>{_msg("Peer to Peer Replicator")}</h1>
|
||||
<details bind:open={isNoticeOpened}>
|
||||
<summary>{_msg("P2P.Note.Summary")}</summary>
|
||||
<p class="important">{_msg("P2P.Note.important_note")}</p>
|
||||
@@ -274,23 +274,23 @@
|
||||
<p>{paragraph}</p>
|
||||
{/each}
|
||||
</details>
|
||||
<h2>Connection Settings</h2>
|
||||
<h2>{_msg("Connection Settings")}</h2>
|
||||
{#if isObsidian}
|
||||
You can configure in the Obsidian Plugin Settings.
|
||||
{_msg("You can configure in the Obsidian Plugin Settings.")}
|
||||
{:else}
|
||||
<details bind:open={isSettingOpened}>
|
||||
<summary>{eRelay}</summary>
|
||||
<table class="settings">
|
||||
<tbody>
|
||||
<tr>
|
||||
<th> Enable P2P Replicator </th>
|
||||
<th>{_msg("Enable P2P Replicator")}</th>
|
||||
<td>
|
||||
<label class={{ "is-dirty": isP2PEnabledModified }}>
|
||||
<input type="checkbox" bind:checked={eP2PEnabled} />
|
||||
</label>
|
||||
</td>
|
||||
</tr><tr>
|
||||
<th> Relay settings </th>
|
||||
<th>{_msg("Relay settings")}</th>
|
||||
<td>
|
||||
<label class={{ "is-dirty": isRelayModified }}>
|
||||
<input
|
||||
@@ -299,12 +299,12 @@
|
||||
bind:value={eRelay}
|
||||
autocomplete="off"
|
||||
/>
|
||||
<button onclick={() => useDefaultRelay()}> Use vrtmrz's relay </button>
|
||||
<button onclick={() => useDefaultRelay()}>{_msg("Use vrtmrz's relay")}</button>
|
||||
</label>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th> Room ID </th>
|
||||
<th>{_msg("Room ID")}</th>
|
||||
<td>
|
||||
<label class={{ "is-dirty": isRoomIdModified }}>
|
||||
<input
|
||||
@@ -315,31 +315,32 @@
|
||||
spellcheck="false"
|
||||
autocorrect="off"
|
||||
/>
|
||||
<button onclick={() => chooseRandom()}> Use Random Number </button>
|
||||
<button onclick={() => chooseRandom()}>{_msg("Use Random Number")}</button>
|
||||
</label>
|
||||
<span>
|
||||
<small>
|
||||
This can isolate your connections between devices. Use the same Room ID for the same
|
||||
devices.</small
|
||||
<small
|
||||
>{_msg(
|
||||
"This can isolate your connections between devices. Use the same Room ID for the same devices."
|
||||
)}</small
|
||||
>
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th> Password </th>
|
||||
<th>{_msg("Password")}</th>
|
||||
<td>
|
||||
<label class={{ "is-dirty": isPasswordModified }}>
|
||||
<input type="password" placeholder="password" bind:value={ePassword} />
|
||||
</label>
|
||||
<span>
|
||||
<small>
|
||||
This password is used to encrypt the connection. Use something long enough.
|
||||
{_msg("This password is used to encrypt the connection. Use something long enough.")}
|
||||
</small>
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th> This device name </th>
|
||||
<th>{_msg("This device name")}</th>
|
||||
<td>
|
||||
<label class={{ "is-dirty": isDeviceNameModified }}>
|
||||
<input
|
||||
@@ -351,14 +352,15 @@
|
||||
</label>
|
||||
<span>
|
||||
<small>
|
||||
Device name to identify the device. Please use shorter one for the stable peer
|
||||
detection, i.e., "iphone-16" or "macbook-2021".
|
||||
{_msg(
|
||||
'Device name to identify the device. Please use shorter one for the stable peer detection, i.e., "iphone-16" or "macbook-2021".'
|
||||
)}
|
||||
</small>
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th> Auto Connect </th>
|
||||
<th>{_msg("Auto Connect")}</th>
|
||||
<td>
|
||||
<label class={{ "is-dirty": isAutoStartModified }}>
|
||||
<input type="checkbox" bind:checked={eAutoStart} />
|
||||
@@ -366,7 +368,7 @@
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th> Start change-broadcasting on Connect </th>
|
||||
<th>{_msg("Start change-broadcasting on Connect")}</th>
|
||||
<td>
|
||||
<label class={{ "is-dirty": isAutoBroadcastModified }}>
|
||||
<input type="checkbox" bind:checked={eAutoBroadcast} />
|
||||
@@ -383,39 +385,43 @@
|
||||
</tr> -->
|
||||
</tbody>
|
||||
</table>
|
||||
<button disabled={!isAnyModified} class="button mod-cta" onclick={saveAndApply}>Save and Apply</button>
|
||||
<button disabled={!isAnyModified} class="button" onclick={revert}>Revert changes</button>
|
||||
<button disabled={!isAnyModified} class="button mod-cta" onclick={saveAndApply}
|
||||
>{_msg("Save and Apply")}</button
|
||||
>
|
||||
<button disabled={!isAnyModified} class="button" onclick={revert}>{_msg("Revert changes")}</button>
|
||||
</details>
|
||||
{/if}
|
||||
|
||||
<div>
|
||||
<h2>Signaling Server Connection</h2>
|
||||
<h2>{_msg("Signaling Server Connection")}</h2>
|
||||
<div>
|
||||
{#if !isConnected}
|
||||
<p>No Connection</p>
|
||||
<p>{_msg("No Connection")}</p>
|
||||
{:else}
|
||||
<p>Connected to Signaling Server (as Peer ID: {serverPeerId})</p>
|
||||
<p>{_msg("Connected to Signaling Server (as Peer ID: ${peerId})", { peerId: serverPeerId })}</p>
|
||||
{/if}
|
||||
</div>
|
||||
<div>
|
||||
{#if !isConnected}
|
||||
<button onclick={openServer}>Connect</button>
|
||||
<button onclick={openServer}>{_msg("Connect")}</button>
|
||||
{:else}
|
||||
<button onclick={closeServer}>Disconnect</button>
|
||||
<button onclick={closeServer}>{_msg("Disconnect")}</button>
|
||||
{#if replicatorInfo?.isBroadcasting !== undefined}
|
||||
{#if replicatorInfo?.isBroadcasting}
|
||||
<button onclick={stopBroadcasting}>Stop Broadcasting</button>
|
||||
<button onclick={stopBroadcasting}>{_msg("Stop Broadcasting")}</button>
|
||||
{:else}
|
||||
<button onclick={startBroadcasting}>Start Broadcasting</button>
|
||||
<button onclick={startBroadcasting}>{_msg("Start Broadcasting")}</button>
|
||||
{/if}
|
||||
{/if}
|
||||
<details>
|
||||
<summary>Broadcasting?</summary>
|
||||
<summary>{_msg("Broadcasting?")}</summary>
|
||||
<p>
|
||||
<small>
|
||||
If you want to use `LiveSync`, you should broadcast changes. All `watching` peers which
|
||||
detects this will start the replication for fetching. <br />
|
||||
However, This should not be enabled if you want to increase your secrecy more.
|
||||
{_msg(
|
||||
"If you want to use `LiveSync`, you should broadcast changes. All `watching` peers which detects this will start the replication for fetching."
|
||||
)}
|
||||
<br />
|
||||
{_msg("However, This should not be enabled if you want to increase your secrecy more.")}
|
||||
</small>
|
||||
</p>
|
||||
</details>
|
||||
@@ -424,13 +430,13 @@
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<h2>Peers</h2>
|
||||
<h2>{_msg("Peers")}</h2>
|
||||
<table class="peers">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Action</th>
|
||||
<th>Command</th>
|
||||
<th>{_msg("Name")}</th>
|
||||
<th>{_msg("Action")}</th>
|
||||
<th>{_msg("Command")}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
|
||||
@@ -95,40 +95,40 @@
|
||||
</script>
|
||||
|
||||
<div class="server-status">
|
||||
<h3>Signalling Status</h3>
|
||||
<h3>{translateMessage("Signalling Status")}</h3>
|
||||
|
||||
<div class="status-item">
|
||||
<span>Connection:</span>
|
||||
<span>{translateMessage("Connection:")}</span>
|
||||
<span class="status-value {isConnected ? 'connected' : 'disconnected'}">
|
||||
{isConnected ? "🟢 Connected" : "🔴 Disconnected"}
|
||||
{isConnected ? translateMessage("🟢 Connected") : translateMessage("🔴 Disconnected")}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="status-item status-action">
|
||||
{#if !isConnected}
|
||||
<button onclick={onOpenConnection}>Open connection</button>
|
||||
<button onclick={onOpenConnection}>{translateMessage("Open connection")}</button>
|
||||
{:else}
|
||||
<button onclick={onDisconnect}>Disconnect</button>
|
||||
<button onclick={onDisconnect}>{translateMessage("Disconnect")}</button>
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
{#if serverInfo}
|
||||
<div class="status-item">
|
||||
<span>Room ID suffix:</span>
|
||||
<span class="room-suffix-display" title={roomSuffix || "Not configured"}>
|
||||
<span>{translateMessage("Room ID suffix:")}</span>
|
||||
<span class="room-suffix-display" title={roomSuffix || translateMessage("Not configured")}>
|
||||
{roomSuffix || "-"}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="status-item">
|
||||
<span>Peer ID:</span>
|
||||
<span>{translateMessage("Peer ID:")}</span>
|
||||
<span class="peer-id-display" title={serverInfo.serverPeerId}>
|
||||
{serverInfo.serverPeerId.slice(0, 12)}...
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="status-item">
|
||||
<span>Devices:</span>
|
||||
<span>{translateMessage("Devices:")}</span>
|
||||
<span>{serverInfo.knownAdvertisements.length}</span>
|
||||
</div>
|
||||
{/if}
|
||||
@@ -146,7 +146,7 @@
|
||||
? translateMessage("Stop announcing changes")
|
||||
: translateMessage("Start announcing changes")}
|
||||
>
|
||||
{isBroadcasting ? '📡 On' : '📡 Off'}
|
||||
{isBroadcasting ? translateMessage("📡 On") : translateMessage("📡 Off")}
|
||||
</button>
|
||||
</div>
|
||||
{/if}
|
||||
@@ -154,39 +154,39 @@
|
||||
{#if core}
|
||||
<div class="status-item status-action diag-toggle-row">
|
||||
<label class="broadcast-label" for="diag-toggle">
|
||||
🕵️ Diag
|
||||
{translateMessage("🕵️ Diag")}
|
||||
</label>
|
||||
<button
|
||||
id="diag-toggle"
|
||||
class="broadcast-button {useDiagRTC ? 'is-on' : 'is-off'}"
|
||||
onclick={toggleDiagRTC}
|
||||
title={useDiagRTC
|
||||
? 'Diagnostic RTCPeerConnection is enabled'
|
||||
: 'Use Diagnostic RTCPeerConnection for statistics'}
|
||||
? translateMessage("Diagnostic RTCPeerConnection is enabled")
|
||||
: translateMessage("Use Diagnostic RTCPeerConnection for statistics")}
|
||||
>
|
||||
{useDiagRTC ? 'On' : 'Off'}
|
||||
{useDiagRTC ? translateMessage("On") : translateMessage("Off")}
|
||||
</button>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
{#if serverInfo}
|
||||
<div class="diag-section">
|
||||
<h4>Stats</h4>
|
||||
<h4>{translateMessage("Stats")}</h4>
|
||||
<div class="diag-grid">
|
||||
<div class="diag-item">
|
||||
<span>Incoming:</span>
|
||||
<span>{translateMessage("Incoming:")}</span>
|
||||
<span>{serverInfo.diag.totalNewConnections}</span>
|
||||
</div>
|
||||
<div class="diag-item">
|
||||
<span>Connected:</span>
|
||||
<span>{translateMessage("Connected:")}</span>
|
||||
<span>{serverInfo.diag.totalSuccessfulConnections}</span>
|
||||
</div>
|
||||
<div class="diag-item">
|
||||
<span>Failed:</span>
|
||||
<span>{translateMessage("Failed:")}</span>
|
||||
<span>{serverInfo.diag.totalFailedConnections}</span>
|
||||
</div>
|
||||
<div class="diag-item">
|
||||
<span>Closed:</span>
|
||||
<span>{translateMessage("Closed:")}</span>
|
||||
<span>{serverInfo.diag.totalClosedConnections}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -170,11 +170,11 @@
|
||||
});
|
||||
|
||||
function getAcceptanceStatus(peer: P2PServerInfo["knownAdvertisements"][number]) {
|
||||
if (peer.isTemporaryAccepted === true) return "ACCEPTED (in session)";
|
||||
if (peer.isAccepted === true) return "ACCEPTED";
|
||||
if (peer.isTemporaryAccepted === false) return "DENIED (in session)";
|
||||
if (peer.isAccepted === false) return "DENIED";
|
||||
return "NEW";
|
||||
if (peer.isTemporaryAccepted === true) return translateMessage("ACCEPTED (in session)");
|
||||
if (peer.isAccepted === true) return translateMessage("ACCEPTED");
|
||||
if (peer.isTemporaryAccepted === false) return translateMessage("DENIED (in session)");
|
||||
if (peer.isAccepted === false) return translateMessage("DENIED");
|
||||
return translateMessage("NEW");
|
||||
}
|
||||
|
||||
function getAcceptanceStatusClass(peer: P2PServerInfo["knownAdvertisements"][number]) {
|
||||
@@ -409,7 +409,7 @@
|
||||
|
||||
<div class="p2p-container">
|
||||
<div class="pane-header">
|
||||
<h2>P2P Status</h2>
|
||||
<h2>{translateMessage("P2P Status")}</h2>
|
||||
<div class="pane-header-actions">
|
||||
<div class="remote-picker-wrap">
|
||||
<select
|
||||
@@ -417,11 +417,11 @@
|
||||
value={selectedP2PRemoteConfigurationId}
|
||||
onchange={onP2PRemoteSelected}
|
||||
disabled={selectingP2PRemote}
|
||||
aria-label="Select active P2P remote"
|
||||
title="Select active P2P remote"
|
||||
aria-label={translateMessage("Select active P2P remote")}
|
||||
title={translateMessage("Select active P2P remote")}
|
||||
>
|
||||
{#if p2pRemoteOptions.length === 0}
|
||||
<option value="">Select P2P remote...</option>
|
||||
<option value="">{translateMessage("Select P2P remote...")}</option>
|
||||
{/if}
|
||||
{#each p2pRemoteOptions as option}
|
||||
<option value={option.id}>
|
||||
@@ -432,8 +432,8 @@
|
||||
<button
|
||||
class="icon-button"
|
||||
onclick={() => createAndSelectP2PRemote()}
|
||||
title="Create P2P remote"
|
||||
aria-label="Create P2P remote"
|
||||
title={translateMessage("Create P2P remote")}
|
||||
aria-label={translateMessage("Create P2P remote")}
|
||||
>
|
||||
+
|
||||
</button>
|
||||
@@ -441,8 +441,8 @@
|
||||
<button
|
||||
class="icon-button"
|
||||
onclick={openConnectionSettings}
|
||||
title="Open P2P Setup..."
|
||||
aria-label="Open P2P Setup..."
|
||||
title={translateMessage("Open P2P Setup...")}
|
||||
aria-label={translateMessage("Open P2P Setup...")}
|
||||
>
|
||||
⚙
|
||||
</button>
|
||||
@@ -450,15 +450,17 @@
|
||||
</div>
|
||||
|
||||
{#if !canEditP2PSettings()}
|
||||
<p class="warning-line">Please select an active P2P remote configuration to change P2P sync targets.</p>
|
||||
<p class="warning-line">
|
||||
{translateMessage("Please select an active P2P remote configuration to change P2P sync targets.")}
|
||||
</p>
|
||||
{/if}
|
||||
|
||||
<P2PServerStatusCard {getLiveSyncReplicator} {core} />
|
||||
|
||||
<div class="peers-section">
|
||||
<div class="peers-header">
|
||||
<h3>Detected Peers</h3>
|
||||
<button class="refresh" onclick={requestServerStatus}>Refresh</button>
|
||||
<h3>{translateMessage("Detected Peers")}</h3>
|
||||
<button class="refresh" onclick={requestServerStatus}>{translateMessage("Refresh")}</button>
|
||||
</div>
|
||||
|
||||
{#if serverInfo && serverInfo.knownAdvertisements.length > 0}
|
||||
@@ -470,7 +472,11 @@
|
||||
{peer.name} :
|
||||
<span class="peer-id-mini" title={peer.peerId}>({peer.peerId.slice(0, 8)})</span>
|
||||
{#if isCommunicating(peer.peerId)}
|
||||
<span class="comm-icon" title="Communicating" aria-label="Communicating">📡</span>
|
||||
<span
|
||||
class="comm-icon"
|
||||
title={translateMessage("Communicating")}
|
||||
aria-label={translateMessage("Communicating")}>📡</span
|
||||
>
|
||||
{/if}
|
||||
</div>
|
||||
<div class="peer-meta">
|
||||
@@ -486,8 +492,12 @@
|
||||
<button
|
||||
class="emoji-button"
|
||||
disabled={replicatingPeerId !== null}
|
||||
title={replicatingPeerId === peer.peerId ? "Replicating..." : "Replicate now"}
|
||||
aria-label={replicatingPeerId === peer.peerId ? "Replicating" : "Replicate now"}
|
||||
title={replicatingPeerId === peer.peerId
|
||||
? translateMessage("Replicating...")
|
||||
: translateMessage("Replicate now")}
|
||||
aria-label={replicatingPeerId === peer.peerId
|
||||
? translateMessage("Replicating")
|
||||
: translateMessage("Replicate now")}
|
||||
onclick={() => startReplication(peer)}
|
||||
>
|
||||
{replicatingPeerId === peer.peerId ? "⏳" : "🔄"}
|
||||
@@ -497,7 +507,7 @@
|
||||
disabled={decidingPeerId !== null}
|
||||
onclick={() => revokeDecision(peer)}
|
||||
>
|
||||
Revoke
|
||||
{translateMessage("Revoke")}
|
||||
</button>
|
||||
<button
|
||||
class="emoji-button"
|
||||
@@ -534,11 +544,11 @@
|
||||
</span>
|
||||
</div>
|
||||
<div class="decision-row">
|
||||
<span class="decision-label">PERMANENT</span>
|
||||
<span class="decision-label">{translateMessage("PERMANENT")}</span>
|
||||
<button
|
||||
class="emoji-button"
|
||||
title="Allow permanently"
|
||||
aria-label="Allow permanently"
|
||||
title={translateMessage("Allow permanently")}
|
||||
aria-label={translateMessage("Allow permanently")}
|
||||
disabled={decidingPeerId !== null}
|
||||
onclick={() => makeDecision(peer, true, false)}
|
||||
>
|
||||
@@ -546,8 +556,8 @@
|
||||
</button>
|
||||
<button
|
||||
class="emoji-button mod-warning"
|
||||
title="Deny permanently"
|
||||
aria-label="Deny permanently"
|
||||
title={translateMessage("Deny permanently")}
|
||||
aria-label={translateMessage("Deny permanently")}
|
||||
disabled={decidingPeerId !== null}
|
||||
onclick={() => makeDecision(peer, false, false)}
|
||||
>
|
||||
@@ -555,11 +565,11 @@
|
||||
</button>
|
||||
</div>
|
||||
<div class="decision-row">
|
||||
<span class="decision-label">SESSION</span>
|
||||
<span class="decision-label">{translateMessage("SESSION")}</span>
|
||||
<button
|
||||
class="emoji-button"
|
||||
title="Allow in session"
|
||||
aria-label="Allow in session"
|
||||
title={translateMessage("Allow in session")}
|
||||
aria-label={translateMessage("Allow in session")}
|
||||
disabled={decidingPeerId !== null}
|
||||
onclick={() => makeDecision(peer, true, true)}
|
||||
>
|
||||
@@ -567,8 +577,8 @@
|
||||
</button>
|
||||
<button
|
||||
class="emoji-button mod-warning"
|
||||
title="Deny in session"
|
||||
aria-label="Deny in session"
|
||||
title={translateMessage("Deny in session")}
|
||||
aria-label={translateMessage("Deny in session")}
|
||||
disabled={decidingPeerId !== null}
|
||||
onclick={() => makeDecision(peer, false, true)}
|
||||
>
|
||||
@@ -582,7 +592,7 @@
|
||||
disabled={decidingPeerId !== null}
|
||||
onclick={() => revokeDecision(peer)}
|
||||
>
|
||||
Revoke
|
||||
{translateMessage("Revoke")}
|
||||
</button>
|
||||
{/if}
|
||||
</div>
|
||||
@@ -590,9 +600,11 @@
|
||||
{/each}
|
||||
</div>
|
||||
{:else if serverInfo}
|
||||
<p class="no-peers">No devices available. Waiting for other devices to connect...</p>
|
||||
<p class="no-peers">
|
||||
{translateMessage("No devices available. Waiting for other devices to connect...")}
|
||||
</p>
|
||||
{:else}
|
||||
<p class="no-peers">Fetching status...</p>
|
||||
<p class="no-peers">{translateMessage("Fetching status...")}</p>
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<script lang="ts">
|
||||
import { AcceptedStatus, type PeerStatus } from "@vrtmrz/livesync-commonlib/compat/replication/trystero/P2PReplicatorPaneCommon";
|
||||
import type { P2PReplicatorHandle } from "./P2PReplicatorPaneHost";
|
||||
import { $msg as translateMessage } from "@/common/translation";
|
||||
|
||||
interface Props {
|
||||
peerStatus: PeerStatus;
|
||||
@@ -27,6 +28,11 @@
|
||||
peer.isSending ? ["SENDING"] : [],
|
||||
].flat()
|
||||
);
|
||||
const chipLabels: Record<string, string> = {
|
||||
WATCHING: translateMessage("WATCHING"),
|
||||
FETCHING: translateMessage("FETCHING"),
|
||||
SENDING: translateMessage("SENDING"),
|
||||
};
|
||||
let acceptedStatusChip = $derived.by(() =>
|
||||
select(
|
||||
peer.accepted.toString(),
|
||||
@@ -40,6 +46,13 @@
|
||||
""
|
||||
) ?? ""
|
||||
);
|
||||
const acceptedStatusLabels: Record<string, string> = {
|
||||
ACCEPTED: translateMessage("ACCEPTED"),
|
||||
"ACCEPTED (in session)": translateMessage("ACCEPTED (in session)"),
|
||||
"DENIED (in session)": translateMessage("DENIED (in session)"),
|
||||
DENIED: translateMessage("DENIED"),
|
||||
NEW: translateMessage("NEW"),
|
||||
};
|
||||
const classList = {
|
||||
["SENDING"]: "connected",
|
||||
["FETCHING"]: "connected",
|
||||
@@ -75,13 +88,13 @@
|
||||
const peerAttrLabels = $derived.by(() => {
|
||||
const attrs = [];
|
||||
if (peer.syncOnConnect) {
|
||||
attrs.push("✔ SYNC");
|
||||
attrs.push(translateMessage("✔ SYNC"));
|
||||
}
|
||||
if (peer.watchOnConnect) {
|
||||
attrs.push("✔ WATCH");
|
||||
attrs.push(translateMessage("✔ WATCH"));
|
||||
}
|
||||
if (peer.syncOnReplicationCommand) {
|
||||
attrs.push("✔ SELECT");
|
||||
attrs.push(translateMessage("✔ SELECT"));
|
||||
}
|
||||
return attrs;
|
||||
});
|
||||
@@ -113,12 +126,14 @@
|
||||
</div>
|
||||
<div class="status-chips">
|
||||
<div class="row">
|
||||
<span class="chip {select(acceptedStatusChip, classList)}">{acceptedStatusChip}</span>
|
||||
<span class="chip {select(acceptedStatusChip, classList)}"
|
||||
>{acceptedStatusLabels[acceptedStatusChip] ?? acceptedStatusChip}</span
|
||||
>
|
||||
</div>
|
||||
{#if isAccepted}
|
||||
<div class="row">
|
||||
{#each statusChips as chip}
|
||||
<span class="chip {select(chip, classList)}">{chip}</span>
|
||||
<span class="chip {select(chip, classList)}">{chipLabels[chip] ?? chip}</span>
|
||||
{/each}
|
||||
</div>
|
||||
{/if}
|
||||
@@ -134,15 +149,25 @@
|
||||
<div class="row">
|
||||
{#if isNew}
|
||||
{#if !isAccepted}
|
||||
<button class="button" onclick={() => makeDecision(true, true)}>Accept in session</button>
|
||||
<button class="button mod-cta" onclick={() => makeDecision(true, false)}>Accept</button>
|
||||
<button class="button" onclick={() => makeDecision(true, true)}
|
||||
>{translateMessage("Accept in session")}</button
|
||||
>
|
||||
<button class="button mod-cta" onclick={() => makeDecision(true, false)}
|
||||
>{translateMessage("Accept")}</button
|
||||
>
|
||||
{/if}
|
||||
{#if !isDenied}
|
||||
<button class="button" onclick={() => makeDecision(false, true)}>Deny in session</button>
|
||||
<button class="button mod-warning" onclick={() => makeDecision(false, false)}>Deny</button>
|
||||
<button class="button" onclick={() => makeDecision(false, true)}
|
||||
>{translateMessage("Deny in session")}</button
|
||||
>
|
||||
<button class="button mod-warning" onclick={() => makeDecision(false, false)}
|
||||
>{translateMessage("Deny")}</button
|
||||
>
|
||||
{/if}
|
||||
{:else}
|
||||
<button class="button mod-warning" onclick={() => revokeDecision()}>Revoke</button>
|
||||
<button class="button mod-warning" onclick={() => revokeDecision()}
|
||||
>{translateMessage("Revoke")}</button
|
||||
>
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
@@ -155,9 +180,9 @@
|
||||
<!-- <button class="button" onclick={replicateFrom} disabled={peer.isFetching}>📥</button>
|
||||
<button class="button" onclick={replicateTo} disabled={peer.isSending}>📤</button> -->
|
||||
{#if peer.isWatching}
|
||||
<button class="button" onclick={stopWatching}>Stop ⚡</button>
|
||||
<button class="button" onclick={stopWatching}>{translateMessage("Stop ⚡")}</button>
|
||||
{:else}
|
||||
<button class="button" onclick={startWatching} title="live">⚡</button>
|
||||
<button class="button" onclick={startWatching} title={translateMessage("live")}>⚡</button>
|
||||
{/if}
|
||||
{#if showPeerMenu}
|
||||
<button class="button" onclick={moreMenu}>...</button>
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
import { DocumentHistoryModal } from "@/modules/features/DocumentHistory/DocumentHistoryModal.ts";
|
||||
import { isPlainText, stripAllPrefixes } from "@vrtmrz/livesync-commonlib/compat/string_and_binary/path";
|
||||
import type { LiveSyncBaseCore } from "@/LiveSyncBaseCore.ts";
|
||||
import { $msg as translateMessage } from "@/common/translation";
|
||||
export let plugin: ObsidianLiveSyncPlugin;
|
||||
export let core: LiveSyncBaseCore;
|
||||
|
||||
@@ -207,29 +208,35 @@
|
||||
<div class="row"><label for="">To:</label><input type="date" bind:value={dispDateTo} disabled={loading} /></div>
|
||||
<div class="row">
|
||||
<label for="">Info:</label>
|
||||
<label><input type="checkbox" bind:checked={showDiffInfo} disabled={loading} /><span>Diff</span></label>
|
||||
<label
|
||||
><input type="checkbox" bind:checked={showChunkCorrected} disabled={loading} /><span>Chunks</span
|
||||
><input type="checkbox" bind:checked={showDiffInfo} disabled={loading} /><span
|
||||
>{translateMessage("Diff")}</span
|
||||
></label
|
||||
>
|
||||
<label
|
||||
><input type="checkbox" bind:checked={checkStorageDiff} disabled={loading} /><span>File integrity</span
|
||||
><input type="checkbox" bind:checked={showChunkCorrected} disabled={loading} /><span
|
||||
>{translateMessage("Chunks")}</span
|
||||
></label
|
||||
>
|
||||
<label
|
||||
><input type="checkbox" bind:checked={checkStorageDiff} disabled={loading} /><span
|
||||
>{translateMessage("File integrity")}</span
|
||||
></label
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
{#if loading}
|
||||
<div class="">Gathering information...</div>
|
||||
<div class="">{translateMessage("Gathering information...")}</div>
|
||||
{/if}
|
||||
<table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th> Date </th>
|
||||
<th> Path </th>
|
||||
<th> Rev </th>
|
||||
<th> Stat </th>
|
||||
<th> {translateMessage("Date")} </th>
|
||||
<th> {translateMessage("Path")} </th>
|
||||
<th> {translateMessage("Rev")} </th>
|
||||
<th> {translateMessage("Stat")} </th>
|
||||
{#if showChunkCorrected}
|
||||
<th> Chunks </th>
|
||||
<th> {translateMessage("Chunks")} </th>
|
||||
{/if}
|
||||
</tr>
|
||||
<tr>
|
||||
@@ -237,7 +244,7 @@
|
||||
{#if loading}
|
||||
<div class=""></div>
|
||||
{:else}
|
||||
<div><button on:click={() => nextWeek()}>+1 week</button></div>
|
||||
<div><button on:click={() => nextWeek()}>{translateMessage("+1 week")}</button></div>
|
||||
{/if}
|
||||
</td>
|
||||
</tr>
|
||||
@@ -286,7 +293,7 @@
|
||||
{#if loading}
|
||||
<div class=""></div>
|
||||
{:else}
|
||||
<div><button on:click={() => prevWeek()}>+1 week</button></div>
|
||||
<div><button on:click={() => prevWeek()}>{translateMessage("+1 week")}</button></div>
|
||||
{/if}
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<script lang="ts">
|
||||
import type { CustomRegExpSource } from "@vrtmrz/livesync-commonlib/compat/common/types";
|
||||
import { isInvertedRegExp, isValidRegExp } from "@vrtmrz/livesync-commonlib/compat/common/utils";
|
||||
import { $msg as translateMessage } from "@/common/translation";
|
||||
|
||||
export let patterns = [] as CustomRegExpSource[];
|
||||
export let originals = [] as CustomRegExpSource[];
|
||||
@@ -31,7 +32,7 @@
|
||||
<!-- svelte-ignore a11y-label-has-associated-control -->
|
||||
<li>
|
||||
<label>{modified[idx]}{statusName[idx]}</label>
|
||||
<span class="chip">{isInvertedExp[idx] ? "INVERTED" : ""}</span>
|
||||
<span class="chip">{isInvertedExp[idx] ? translateMessage("INVERTED") : ""}</span>
|
||||
<input type="text" bind:value={pattern} class={modified[idx]} />
|
||||
<button class="iconbutton" on:click={() => remove(idx)}>🗑</button>
|
||||
</li>
|
||||
|
||||
@@ -479,10 +479,10 @@ export function paneRemoteConfig(
|
||||
})
|
||||
.addSeparator()
|
||||
.addItem((item) => {
|
||||
item.setTitle("🗑 Delete").onClick(async () => {
|
||||
item.setTitle($msg("🗑 Delete")).onClick(async () => {
|
||||
const confirmed = await this.services.UI.confirm.askYesNoDialog(
|
||||
`Delete remote configuration '${config.name}'?`,
|
||||
{ title: "Delete Remote Configuration", defaultOption: "No" }
|
||||
$msg("Delete remote configuration '${name}'?", { name: config.name }),
|
||||
{ title: $msg("Delete Remote Configuration"), defaultOption: "No" }
|
||||
);
|
||||
if (confirmed !== "yes") {
|
||||
return;
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
import InfoNote from "@/modules/services/LiveSyncUI/components/InfoNote.svelte";
|
||||
import ExtraItems from "@/modules/services/LiveSyncUI/components/ExtraItems.svelte";
|
||||
import Check from "@/modules/services/LiveSyncUI/components/Check.svelte";
|
||||
import { $msg as translateMessage } from "@/common/translation";
|
||||
import {
|
||||
TYPE_BACKUP_DONE,
|
||||
TYPE_BACKUP_SKIPPED,
|
||||
@@ -48,90 +49,110 @@
|
||||
}
|
||||
</script>
|
||||
|
||||
<DialogHeader title="Reset Synchronisation on This Device" />
|
||||
<DialogHeader title={translateMessage("Reset Synchronisation on This Device")} />
|
||||
<Guidance
|
||||
>This will rebuild the local database on this device using the most recent data from the server. This action is
|
||||
designed to resolve synchronisation inconsistencies and restore correct functionality.</Guidance
|
||||
>{translateMessage(
|
||||
"This will rebuild the local database on this device using the most recent data from the server. This action is designed to resolve synchronisation inconsistencies and restore correct functionality."
|
||||
)}</Guidance
|
||||
>
|
||||
<Guidance important title="⚠️ Important Notice">
|
||||
<Guidance important title={translateMessage("⚠️ Important Notice")}>
|
||||
<strong
|
||||
>If you have unsynchronised changes in your Vault on this device, they will likely diverge from the server's
|
||||
versions after the reset. This may result in a large number of file conflicts.</strong
|
||||
>{translateMessage(
|
||||
"If you have unsynchronised changes in your Vault on this device, they will likely diverge from the server's versions after the reset. This may result in a large number of file conflicts."
|
||||
)}</strong
|
||||
><br />
|
||||
Furthermore, if conflicts are already present in the server data, they will be synchronised to this device as they are,
|
||||
and you will need to resolve them locally.
|
||||
{translateMessage(
|
||||
"Furthermore, if conflicts are already present in the server data, they will be synchronised to this device as they are, and you will need to resolve them locally."
|
||||
)}
|
||||
</Guidance>
|
||||
<hr />
|
||||
<Instruction>
|
||||
<Question
|
||||
><strong>To minimise the creation of new conflicts</strong>, please select the option that best describes the
|
||||
current state of your Vault. The application will then check your files in the most appropriate way based on
|
||||
your selection.</Question
|
||||
><strong>{translateMessage("To minimise the creation of new conflicts")}</strong>{translateMessage(
|
||||
", please select the option that best describes the current state of your Vault. The application will then check your files in the most appropriate way based on your selection."
|
||||
)}</Question
|
||||
>
|
||||
<Options>
|
||||
<Option
|
||||
selectedValue={TYPE_IDENTICAL}
|
||||
title="The files in this Vault are almost identical to the server's."
|
||||
title={translateMessage("The files in this Vault are almost identical to the server's.")}
|
||||
bind:value={vaultType}
|
||||
>
|
||||
(e.g., immediately after restoring on another computer, or having recovered from a backup)
|
||||
{translateMessage(
|
||||
"(e.g., immediately after restoring on another computer, or having recovered from a backup)"
|
||||
)}
|
||||
</Option>
|
||||
<Option
|
||||
selectedValue={TYPE_INDEPENDENT}
|
||||
title="This Vault is empty, or contains only new files that are not on the server."
|
||||
title={translateMessage("This Vault is empty, or contains only new files that are not on the server.")}
|
||||
bind:value={vaultType}
|
||||
>
|
||||
(e.g., setting up for the first time on a new smartphone, starting from a clean slate)
|
||||
{translateMessage("(e.g., setting up for the first time on a new smartphone, starting from a clean slate)")}
|
||||
</Option>
|
||||
<Option
|
||||
selectedValue={TYPE_UNBALANCED}
|
||||
title="There may be differences between the files in this Vault and the server."
|
||||
title={translateMessage("There may be differences between the files in this Vault and the server.")}
|
||||
bind:value={vaultType}
|
||||
>
|
||||
(e.g., after editing many files whilst offline)
|
||||
{translateMessage("(e.g., after editing many files whilst offline)")}
|
||||
<InfoNote info>
|
||||
In this scenario, Self-hosted LiveSync will recreate metadata for every file and deliberately generate
|
||||
conflicts. Where the file content is identical, these conflicts will be resolved automatically.
|
||||
{translateMessage(
|
||||
"In this scenario, Self-hosted LiveSync will recreate metadata for every file and deliberately generate conflicts. Where the file content is identical, these conflicts will be resolved automatically."
|
||||
)}
|
||||
</InfoNote>
|
||||
</Option>
|
||||
</Options>
|
||||
</Instruction>
|
||||
<hr />
|
||||
<Instruction>
|
||||
<Question>Have you created a backup before proceeding?</Question>
|
||||
<Question>{translateMessage("Have you created a backup before proceeding?")}</Question>
|
||||
<InfoNote>
|
||||
We recommend that you copy your Vault folder to a safe location. This will provide a safeguard in case a large
|
||||
number of conflicts arise, or if you accidentally synchronise with an incorrect destination.
|
||||
{translateMessage(
|
||||
"We recommend that you copy your Vault folder to a safe location. This will provide a safeguard in case a large number of conflicts arise, or if you accidentally synchronise with an incorrect destination."
|
||||
)}
|
||||
</InfoNote>
|
||||
<Options>
|
||||
<Option selectedValue={TYPE_BACKUP_DONE} title="I have created a backup of my Vault." bind:value={backupType} />
|
||||
<Option
|
||||
selectedValue={TYPE_BACKUP_DONE}
|
||||
title={translateMessage("I have created a backup of my Vault.")}
|
||||
bind:value={backupType}
|
||||
/>
|
||||
<Option
|
||||
selectedValue={TYPE_BACKUP_SKIPPED}
|
||||
title="I understand the risks and will proceed without a backup."
|
||||
title={translateMessage("I understand the risks and will proceed without a backup.")}
|
||||
bind:value={backupType}
|
||||
/>
|
||||
<Option
|
||||
selectedValue={TYPE_UNABLE_TO_BACKUP}
|
||||
title="I am unable to create a backup of my Vault."
|
||||
title={translateMessage("I am unable to create a backup of my Vault.")}
|
||||
bind:value={backupType}
|
||||
>
|
||||
<InfoNote error visible={backupType === TYPE_UNABLE_TO_BACKUP}>
|
||||
<strong
|
||||
>It is strongly advised to create a backup before proceeding. Continuing without a backup may lead
|
||||
to data loss.
|
||||
>{translateMessage(
|
||||
"It is strongly advised to create a backup before proceeding. Continuing without a backup may lead to data loss."
|
||||
)}
|
||||
</strong>
|
||||
<br />
|
||||
If you understand the risks and still wish to proceed, select so.
|
||||
{translateMessage("If you understand the risks and still wish to proceed, select so.")}
|
||||
</InfoNote>
|
||||
</Option>
|
||||
</Options>
|
||||
</Instruction>
|
||||
<Instruction>
|
||||
<ExtraItems title="Advanced">
|
||||
<Check title="Prevent fetching configuration from server" bind:value={preventFetchingConfig} />
|
||||
<ExtraItems title={translateMessage("Advanced")}>
|
||||
<Check
|
||||
title={translateMessage("Prevent fetching configuration from server")}
|
||||
bind:value={preventFetchingConfig}
|
||||
/>
|
||||
</ExtraItems>
|
||||
</Instruction>
|
||||
<UserDecisions>
|
||||
<Decision title="Reset and Resume Synchronisation" important disabled={!canProceed} commit={() => commit()} />
|
||||
<Decision title="Cancel" commit={() => setResult(TYPE_CANCEL)} />
|
||||
<Decision
|
||||
title={translateMessage("Reset and Resume Synchronisation")}
|
||||
important
|
||||
disabled={!canProceed}
|
||||
commit={() => commit()}
|
||||
/>
|
||||
<Decision title={translateMessage("Cancel")} commit={() => setResult(TYPE_CANCEL)} />
|
||||
</UserDecisions>
|
||||
|
||||
@@ -18,11 +18,11 @@
|
||||
let userType = $state<IntroResultType>(TYPE_CANCELLED);
|
||||
let proceedTitle = $derived.by(() => {
|
||||
if (userType === TYPE_NEW_USER) {
|
||||
return "Yes, I want to set up a new synchronisation";
|
||||
return translateMessage("Yes, I want to set up a new synchronisation");
|
||||
} else if (userType === TYPE_EXISTING_USER) {
|
||||
return "Yes, I want to add this device to my existing synchronisation";
|
||||
return translateMessage("Yes, I want to add this device to my existing synchronisation");
|
||||
} else {
|
||||
return "Please select an option to proceed";
|
||||
return translateMessage("Please select an option to proceed");
|
||||
}
|
||||
});
|
||||
const canProceed = $derived.by(() => {
|
||||
@@ -30,31 +30,41 @@
|
||||
});
|
||||
</script>
|
||||
|
||||
<DialogHeader title="Welcome to Self-hosted LiveSync" />
|
||||
<Guidance>We will now guide you through a few questions to simplify the synchronisation setup.</Guidance>
|
||||
<DialogHeader title={translateMessage("Welcome to Self-hosted LiveSync")} />
|
||||
<Guidance
|
||||
>{translateMessage(
|
||||
"We will now guide you through a few questions to simplify the synchronisation setup."
|
||||
)}</Guidance
|
||||
>
|
||||
<InfoNote>
|
||||
{translateMessage(
|
||||
"This first setup has several short steps because it confirms encryption, the connection method, and which device provides the initial data. Once it is complete, additional devices can reuse a Setup URI."
|
||||
)}
|
||||
</InfoNote>
|
||||
<Instruction>
|
||||
<Question>First, please select the option that best describes your current situation.</Question>
|
||||
<Question>{translateMessage("First, please select the option that best describes your current situation.")}</Question>
|
||||
<Options>
|
||||
<Option selectedValue={TYPE_NEW_USER} title="I am setting this up for the first time" bind:value={userType}>
|
||||
(Select this if you are configuring this device as the first synchronisation device.) This option is
|
||||
suitable if you are new to LiveSync and want to set it up from scratch.
|
||||
<Option
|
||||
selectedValue={TYPE_NEW_USER}
|
||||
title={translateMessage("I am setting this up for the first time")}
|
||||
bind:value={userType}
|
||||
>
|
||||
{translateMessage(
|
||||
"(Select this if you are configuring this device as the first synchronisation device.) This option is suitable if you are new to LiveSync and want to set it up from scratch."
|
||||
)}
|
||||
</Option>
|
||||
<Option
|
||||
selectedValue={TYPE_EXISTING_USER}
|
||||
title="I am adding a device to an existing synchronisation setup"
|
||||
title={translateMessage("I am adding a device to an existing synchronisation setup")}
|
||||
bind:value={userType}
|
||||
>
|
||||
(Select this if you are already using synchronisation on another computer or smartphone.) This option is
|
||||
suitable if you are new to LiveSync and want to set it up from scratch.
|
||||
{translateMessage(
|
||||
"(Select this if you are already using synchronisation on another computer or smartphone.) This option is suitable if you are new to LiveSync and want to set it up from scratch."
|
||||
)}
|
||||
</Option>
|
||||
</Options>
|
||||
</Instruction>
|
||||
<UserDecisions>
|
||||
<Decision title={proceedTitle} important={canProceed} disabled={!canProceed} commit={() => setResult(userType)} />
|
||||
<Decision title="No, please take me back" commit={() => setResult(TYPE_CANCELLED)} />
|
||||
<Decision title={translateMessage("No, please take me back")} commit={() => setResult(TYPE_CANCELLED)} />
|
||||
</UserDecisions>
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
TYPE_NEW,
|
||||
TYPE_COMPATIBLE_EXISTING,
|
||||
} from "./setupDialogTypes";
|
||||
import { $msg as translateMessage } from "@/common/translation";
|
||||
|
||||
type Props = {
|
||||
setResult: (result: OutroAskUserModeResultType) => void;
|
||||
@@ -25,58 +26,66 @@
|
||||
});
|
||||
const proceedMessage = $derived.by(() => {
|
||||
if (userType === TYPE_NEW) {
|
||||
return "Proceed to the next step.";
|
||||
return translateMessage("Proceed to the next step.");
|
||||
} else if (userType === TYPE_EXISTING) {
|
||||
return "Proceed to the next step.";
|
||||
return translateMessage("Proceed to the next step.");
|
||||
} else if (userType === TYPE_COMPATIBLE_EXISTING) {
|
||||
return "Apply the settings";
|
||||
return translateMessage("Apply the settings");
|
||||
} else {
|
||||
return "Please select an option to proceed";
|
||||
return translateMessage("Please select an option to proceed");
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<DialogHeader title="Mostly Complete: Decision Required" />
|
||||
<DialogHeader title={translateMessage("Mostly Complete: Decision Required")} />
|
||||
<Guidance>
|
||||
The connection to the server has been configured successfully. As the next step, <strong
|
||||
>the local database, that is to say the synchronisation information, must be reconstituted.</strong
|
||||
{translateMessage("The connection to the server has been configured successfully. As the next step,")} <strong
|
||||
>{translateMessage(
|
||||
"the local database, that is to say the synchronisation information, must be reconstituted."
|
||||
)}</strong
|
||||
>
|
||||
</Guidance>
|
||||
<Instruction>
|
||||
<Question>Please select your situation.</Question>
|
||||
<Question>{translateMessage("Please select your situation.")}</Question>
|
||||
<Option
|
||||
title="I am setting up a new server for the first time / I want to reset my existing server."
|
||||
title={translateMessage(
|
||||
"I am setting up a new server for the first time / I want to reset my existing server."
|
||||
)}
|
||||
bind:value={userType}
|
||||
selectedValue={TYPE_NEW}
|
||||
>
|
||||
<InfoNote>
|
||||
Selecting this option will result in the current data on this device being used to initialise the server.
|
||||
Any existing data on the server will be completely overwritten.
|
||||
{translateMessage(
|
||||
"Selecting this option will result in the current data on this device being used to initialise the server. Any existing data on the server will be completely overwritten."
|
||||
)}
|
||||
</InfoNote>
|
||||
</Option>
|
||||
<Option
|
||||
title="My remote server is already set up. I want to join this device."
|
||||
title={translateMessage("My remote server is already set up. I want to join this device.")}
|
||||
bind:value={userType}
|
||||
selectedValue={TYPE_EXISTING}
|
||||
>
|
||||
<InfoNote>
|
||||
Selecting this option will result in this device joining the existing server. You need to fetching the
|
||||
existing synchronisation data from the server to this device.
|
||||
{translateMessage(
|
||||
"Selecting this option will result in this device joining the existing server. You need to fetching the existing synchronisation data from the server to this device."
|
||||
)}
|
||||
</InfoNote>
|
||||
</Option>
|
||||
<Option
|
||||
title="The remote is already set up, and the configuration is compatible (or got compatible by this operation)."
|
||||
title={translateMessage(
|
||||
"The remote is already set up, and the configuration is compatible (or got compatible by this operation)."
|
||||
)}
|
||||
bind:value={userType}
|
||||
selectedValue={TYPE_COMPATIBLE_EXISTING}
|
||||
>
|
||||
<InfoNote warning>
|
||||
Unless you are certain, selecting this options is bit dangerous. It assumes that the server configuration is
|
||||
compatible with this device. If this is not the case, data loss may occur. Please ensure you know what you
|
||||
are doing.
|
||||
{translateMessage(
|
||||
"Unless you are certain, selecting this options is bit dangerous. It assumes that the server configuration is compatible with this device. If this is not the case, data loss may occur. Please ensure you know what you are doing."
|
||||
)}
|
||||
</InfoNote>
|
||||
</Option>
|
||||
</Instruction>
|
||||
<UserDecisions>
|
||||
<Decision title={proceedMessage} important={true} disabled={!canProceed} commit={() => setResult(userType)} />
|
||||
<Decision title="No, please take me back" commit={() => setResult(TYPE_CANCELLED)} />
|
||||
<Decision title={translateMessage("No, please take me back")} commit={() => setResult(TYPE_CANCELLED)} />
|
||||
</UserDecisions>
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
)}
|
||||
</p>
|
||||
<p>
|
||||
<strong>PLEASE NOTE</strong>
|
||||
<strong>{translateMessage("PLEASE NOTE")}</strong>
|
||||
<br />
|
||||
{translateMessage(
|
||||
"After restarting, select an online source device for the initial Fetch. The local LiveSync database on this device will be rebuilt from that source. Unsynchronised files in this Vault may conflict with the fetched data."
|
||||
@@ -43,28 +43,40 @@
|
||||
important={true}
|
||||
commit={() => setResult(TYPE_APPLY)}
|
||||
/>
|
||||
<Decision title="No, please take me back" commit={() => setResult(TYPE_CANCELLED)} />
|
||||
<Decision title={translateMessage("No, please take me back")} commit={() => setResult(TYPE_CANCELLED)} />
|
||||
</UserDecisions>
|
||||
{:else}
|
||||
<DialogHeader title="Setup Complete: Preparing to Fetch Synchronisation Data" />
|
||||
<DialogHeader title={translateMessage("Setup Complete: Preparing to Fetch Synchronisation Data")} />
|
||||
<Guidance>
|
||||
<p>
|
||||
The connection to the server has been configured successfully. As the next step, <strong
|
||||
>the latest synchronisation data will be downloaded from the server to this device.</strong
|
||||
{translateMessage("The connection to the server has been configured successfully. As the next step,")}
|
||||
<strong
|
||||
>{translateMessage(
|
||||
"the latest synchronisation data will be downloaded from the server to this device."
|
||||
)}</strong
|
||||
>
|
||||
</p>
|
||||
<p>
|
||||
<strong>PLEASE NOTE</strong>
|
||||
<strong>{translateMessage("PLEASE NOTE")}</strong>
|
||||
<br />
|
||||
After restarting, the database on this device will be rebuilt using data from the server. If there are any unsynchronised
|
||||
files in this vault, conflicts may occur with the server data.
|
||||
{translateMessage(
|
||||
"After restarting, the database on this device will be rebuilt using data from the server. If there are any unsynchronised files in this vault, conflicts may occur with the server data."
|
||||
)}
|
||||
</p>
|
||||
</Guidance>
|
||||
<Instruction>
|
||||
<Question>Please select the button below to restart and proceed to the data fetching confirmation.</Question>
|
||||
<Question
|
||||
>{translateMessage(
|
||||
"Please select the button below to restart and proceed to the data fetching confirmation."
|
||||
)}</Question
|
||||
>
|
||||
</Instruction>
|
||||
<UserDecisions>
|
||||
<Decision title="Restart and Fetch Data" important={true} commit={() => setResult(TYPE_APPLY)} />
|
||||
<Decision title="No, please take me back" commit={() => setResult(TYPE_CANCELLED)} />
|
||||
<Decision
|
||||
title={translateMessage("Restart and Fetch Data")}
|
||||
important={true}
|
||||
commit={() => setResult(TYPE_APPLY)}
|
||||
/>
|
||||
<Decision title={translateMessage("No, please take me back")} commit={() => setResult(TYPE_CANCELLED)} />
|
||||
</UserDecisions>
|
||||
{/if}
|
||||
|
||||
@@ -36,28 +36,35 @@
|
||||
important={true}
|
||||
commit={() => setResult(TYPE_APPLY)}
|
||||
/>
|
||||
<Decision title="No, please take me back" commit={() => setResult(TYPE_CANCELLED)} />
|
||||
<Decision title={msg("No, please take me back")} commit={() => setResult(TYPE_CANCELLED)} />
|
||||
</UserDecisions>
|
||||
{:else}
|
||||
<DialogHeader title="Setup Complete: Preparing to Initialise Server" />
|
||||
<DialogHeader title={msg("Setup Complete: Preparing to Initialise Server")} />
|
||||
<Guidance>
|
||||
<p>
|
||||
The connection to the server has been configured successfully. As the next step, <strong
|
||||
>the synchronisation data on the server will be built based on the current data on this device.</strong
|
||||
{msg("The connection to the server has been configured successfully. As the next step,")} <strong
|
||||
>{msg(
|
||||
"the synchronisation data on the server will be built based on the current data on this device."
|
||||
)}</strong
|
||||
>
|
||||
</p>
|
||||
<p>
|
||||
<strong>IMPORTANT</strong>
|
||||
<strong>{msg("IMPORTANT")}</strong>
|
||||
<br />
|
||||
After restarting, the data on this device will be uploaded to the server as the 'master copy'. Please be aware
|
||||
that any unintended data currently on the server will be completely overwritten.
|
||||
{msg(
|
||||
"After restarting, the data on this device will be uploaded to the server as the 'master copy'. Please be aware that any unintended data currently on the server will be completely overwritten."
|
||||
)}
|
||||
</p>
|
||||
</Guidance>
|
||||
<Instruction>
|
||||
<Question>Please select the button below to restart and proceed to the final confirmation.</Question>
|
||||
<Question>{msg("Please select the button below to restart and proceed to the final confirmation.")}</Question>
|
||||
</Instruction>
|
||||
<UserDecisions>
|
||||
<Decision title="Restart and Initialise Server" important={true} commit={() => setResult(TYPE_APPLY)} />
|
||||
<Decision title="No, please take me back" commit={() => setResult(TYPE_CANCELLED)} />
|
||||
<Decision
|
||||
title={msg("Restart and Initialise Server")}
|
||||
important={true}
|
||||
commit={() => setResult(TYPE_APPLY)}
|
||||
/>
|
||||
<Decision title={msg("No, please take me back")} commit={() => setResult(TYPE_CANCELLED)} />
|
||||
</UserDecisions>
|
||||
{/if}
|
||||
|
||||
@@ -23,7 +23,11 @@
|
||||
detectedIssues = fixResults;
|
||||
} catch (e) {
|
||||
Logger(e, LOG_LEVEL_VERBOSE, "setup-couchdb-check");
|
||||
detectedIssues.push({ message: `Error during testAndFixSettings: ${e}`, result: "error", classes: [] });
|
||||
detectedIssues.push({
|
||||
message: translateMessage("Error during testAndFixSettings: ${reason}", { reason: `${e}` }),
|
||||
result: "error",
|
||||
classes: [],
|
||||
});
|
||||
}
|
||||
}
|
||||
function isErrorResult(result: ConfigCheckResult): result is ResultError<unknown> | ResultErrorMessage {
|
||||
@@ -71,7 +75,9 @@
|
||||
</div>
|
||||
{#if isFixableError(issue)}
|
||||
<div class="operations">
|
||||
<button onclick={() => fixIssue(issue)} class="mod-cta" disabled={processing}>Fix</button>
|
||||
<button onclick={() => fixIssue(issue)} class="mod-cta" disabled={processing}
|
||||
>{translateMessage("Fix")}</button
|
||||
>
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
@@ -83,15 +89,15 @@
|
||||
<details open={!isAllSuccess}>
|
||||
<summary>
|
||||
{#if detectedIssues.length === 0}
|
||||
No checks have been performed yet.
|
||||
{translateMessage("No checks have been performed yet.")}
|
||||
{:else if isAllSuccess}
|
||||
All checks passed successfully!
|
||||
{translateMessage("All checks passed successfully!")}
|
||||
{:else}
|
||||
{errorIssueCount} issue(s) detected!
|
||||
{translateMessage("${count} issue(s) detected!", { count: `${errorIssueCount}` })}
|
||||
{/if}
|
||||
</summary>
|
||||
{#if detectedIssues.length > 0}
|
||||
<h3>Issue detection log:</h3>
|
||||
<h3>{translateMessage("Issue detection log:")}</h3>
|
||||
{#each detectedIssues as issue}
|
||||
{@render result(issue)}
|
||||
{/each}
|
||||
|
||||
@@ -58,57 +58,69 @@
|
||||
</Check>
|
||||
</Guidance>
|
||||
{:else}
|
||||
<DialogHeader title="Final Confirmation: Overwrite Server Data with This Device's Files" />
|
||||
<DialogHeader title={msg("Final Confirmation: Overwrite Server Data with This Device's Files")} />
|
||||
<Guidance
|
||||
>This procedure will first delete all existing synchronisation data from the server. Following this, the server
|
||||
data will be completely rebuilt, using the current state of your Vault on this device (including its local
|
||||
database) as <strong>the single, authoritative master copy</strong>.</Guidance
|
||||
>{msg(
|
||||
"This procedure will first delete all existing synchronisation data from the server. Following this, the server data will be completely rebuilt, using the current state of your Vault on this device (including its local database) as"
|
||||
)} <strong>{msg("the single, authoritative master copy")}</strong>.</Guidance
|
||||
>
|
||||
<InfoNote>
|
||||
You should perform this operation only in exceptional circumstances, such as when the server data is completely
|
||||
corrupted, when changes on all other devices are no longer needed, or when the database size has become unusually
|
||||
large in comparison to the Vault size.
|
||||
{msg(
|
||||
"You should perform this operation only in exceptional circumstances, such as when the server data is completely corrupted, when changes on all other devices are no longer needed, or when the database size has become unusually large in comparison to the Vault size."
|
||||
)}
|
||||
</InfoNote>
|
||||
<Guidance important title="⚠️ Please Confirm the Following">
|
||||
<Guidance important title={msg("⚠️ Please Confirm the Following")}>
|
||||
<Check
|
||||
title="I understand that all changes made on other smartphones or computers possibly could be lost."
|
||||
title={msg("I understand that all changes made on other smartphones or computers possibly could be lost.")}
|
||||
bind:value={confirmationCheck1}
|
||||
>
|
||||
<InfoNote>There is a way to resolve this on other devices.</InfoNote>
|
||||
<InfoNote>Of course, we can back up the data before proceeding.</InfoNote>
|
||||
<InfoNote>{msg("There is a way to resolve this on other devices.")}</InfoNote>
|
||||
<InfoNote>{msg("Of course, we can back up the data before proceeding.")}</InfoNote>
|
||||
</Check>
|
||||
<Check
|
||||
title="I understand that other devices will no longer be able to synchronise, and will need to be reset the synchronisation information."
|
||||
title={msg(
|
||||
"I understand that other devices will no longer be able to synchronise, and will need to be reset the synchronisation information."
|
||||
)}
|
||||
bind:value={confirmationCheck2}
|
||||
>
|
||||
<InfoNote>by resetting the remote, you will be informed on other devices.</InfoNote>
|
||||
<InfoNote>{msg("by resetting the remote, you will be informed on other devices.")}</InfoNote>
|
||||
</Check>
|
||||
<Check title="I understand that this action is irreversible once performed." bind:value={confirmationCheck3} />
|
||||
<Check
|
||||
title={msg("I understand that this action is irreversible once performed.")}
|
||||
bind:value={confirmationCheck3}
|
||||
/>
|
||||
</Guidance>
|
||||
{/if}
|
||||
<hr />
|
||||
<Instruction>
|
||||
<Question>Have you created a backup before proceeding?</Question>
|
||||
<Question>{msg("Have you created a backup before proceeding?")}</Question>
|
||||
<InfoNote warning>
|
||||
This is an extremely powerful operation. We strongly recommend that you copy your Vault folder to a safe
|
||||
location.
|
||||
{msg(
|
||||
"This is an extremely powerful operation. We strongly recommend that you copy your Vault folder to a safe location."
|
||||
)}
|
||||
</InfoNote>
|
||||
<Options>
|
||||
<Option selectedValue={TYPE_BACKUP_DONE} title="I have created a backup of my Vault." bind:value={backupType} />
|
||||
<Option
|
||||
selectedValue={TYPE_BACKUP_DONE}
|
||||
title={msg("I have created a backup of my Vault.")}
|
||||
bind:value={backupType}
|
||||
/>
|
||||
<Option
|
||||
selectedValue={TYPE_BACKUP_SKIPPED}
|
||||
title="I understand the risks and will proceed without a backup."
|
||||
title={msg("I understand the risks and will proceed without a backup.")}
|
||||
bind:value={backupType}
|
||||
/>
|
||||
<Option
|
||||
selectedValue={TYPE_UNABLE_TO_BACKUP}
|
||||
title="I am unable to create a backup of my Vaults."
|
||||
title={msg("I am unable to create a backup of my Vaults.")}
|
||||
bind:value={backupType}
|
||||
>
|
||||
<InfoNote error visible={backupType === TYPE_UNABLE_TO_BACKUP}>
|
||||
<strong
|
||||
>You should create a new synchronisation destination and rebuild your data there. <br /> After that,
|
||||
synchronise to a brand new vault on each other device with the new remote one by one.</strong
|
||||
>{msg("You should create a new synchronisation destination and rebuild your data there.")} <br />
|
||||
{msg(
|
||||
"After that, synchronise to a brand new vault on each other device with the new remote one by one."
|
||||
)}</strong
|
||||
>
|
||||
</InfoNote>
|
||||
</Option>
|
||||
@@ -116,17 +128,19 @@
|
||||
</Instruction>
|
||||
{#if !isP2P}
|
||||
<Instruction>
|
||||
<ExtraItems title="Advanced">
|
||||
<Check title="Prevent fetching configuration from server" bind:value={preventFetchingConfig} />
|
||||
<ExtraItems title={msg("Advanced")}>
|
||||
<Check title={msg("Prevent fetching configuration from server")} bind:value={preventFetchingConfig} />
|
||||
</ExtraItems>
|
||||
</Instruction>
|
||||
{/if}
|
||||
<UserDecisions>
|
||||
<Decision
|
||||
title={isP2P ? msg("Ui.SetupWizard.RebuildEverythingP2P.Proceed") : "I Understand, Overwrite Server"}
|
||||
title={isP2P
|
||||
? msg("Ui.SetupWizard.RebuildEverythingP2P.Proceed")
|
||||
: msg("I Understand, Overwrite Server")}
|
||||
important
|
||||
disabled={!canProceed}
|
||||
commit={() => commit()}
|
||||
/>
|
||||
<Decision title="Cancel" commit={() => setResult(TYPE_CANCEL)} />
|
||||
<Decision title={msg("Cancel")} commit={() => setResult(TYPE_CANCEL)} />
|
||||
</UserDecisions>
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
import Instruction from "@/modules/services/LiveSyncUI/components/Instruction.svelte";
|
||||
import UserDecisions from "@/modules/services/LiveSyncUI/components/UserDecisions.svelte";
|
||||
import { TYPE_CLOSE, type ScanQRCodeResultType } from "./setupDialogTypes";
|
||||
import { $msg as translateMessage } from "@/common/translation";
|
||||
|
||||
type Props = {
|
||||
setResult: (_result: ScanQRCodeResultType) => void;
|
||||
@@ -12,17 +13,25 @@
|
||||
const { setResult }: Props = $props();
|
||||
</script>
|
||||
|
||||
<DialogHeader title="Scan QR Code" />
|
||||
<Guidance>Please follow the steps below to import settings from your existing device.</Guidance>
|
||||
<DialogHeader title={translateMessage("Scan QR Code")} />
|
||||
<Guidance>{translateMessage("Please follow the steps below to import settings from your existing device.")}</Guidance>
|
||||
<Instruction>
|
||||
<!-- <Question>How would you like to configure the connection to your server?</Question> -->
|
||||
<ol>
|
||||
<li>On this device, please keep this Vault open.</li>
|
||||
<li>On the source device, open Obsidian.</li>
|
||||
<li>On the source device, from the command palette, run the 'Show settings as a QR code' command.</li>
|
||||
<li>On this device, switch to the camera app or use a QR code scanner to scan the displayed QR code.</li>
|
||||
<li>{translateMessage("On this device, please keep this Vault open.")}</li>
|
||||
<li>{translateMessage("On the source device, open Obsidian.")}</li>
|
||||
<li>
|
||||
{translateMessage(
|
||||
"On the source device, from the command palette, run the 'Show settings as a QR code' command."
|
||||
)}
|
||||
</li>
|
||||
<li>
|
||||
{translateMessage(
|
||||
"On this device, switch to the camera app or use a QR code scanner to scan the displayed QR code."
|
||||
)}
|
||||
</li>
|
||||
</ol>
|
||||
</Instruction>
|
||||
<UserDecisions>
|
||||
<Decision title="Close this dialog" important={true} commit={() => setResult(TYPE_CLOSE)} />
|
||||
<Decision title={translateMessage("Close this dialog")} important={true} commit={() => setResult(TYPE_CLOSE)} />
|
||||
</UserDecisions>
|
||||
|
||||
@@ -23,13 +23,13 @@
|
||||
let userType = $state<SelectMethodExistingResultType>(TYPE_CANCELLED);
|
||||
let proceedTitle = $derived.by(() => {
|
||||
if (userType === TYPE_USE_SETUP_URI) {
|
||||
return "Proceed with Setup URI";
|
||||
return translateMessage("Proceed with Setup URI");
|
||||
} else if (userType === TYPE_CONFIGURE_MANUALLY) {
|
||||
return translateMessage("Ui.SetupWizard.SelectExisting.ProceedManual");
|
||||
} else if (userType === TYPE_SCAN_QR_CODE) {
|
||||
return "Scan the QR code displayed on an active device using this device's camera.";
|
||||
return translateMessage("Scan the QR code displayed on an active device using this device's camera.");
|
||||
} else {
|
||||
return "Please select an option to proceed";
|
||||
return translateMessage("Please select an option to proceed");
|
||||
}
|
||||
});
|
||||
const canProceed = $derived.by(() => {
|
||||
@@ -37,16 +37,24 @@
|
||||
});
|
||||
</script>
|
||||
|
||||
<DialogHeader title="Device Setup Method" />
|
||||
<Guidance>You are adding this device to an existing synchronisation setup.</Guidance>
|
||||
<DialogHeader title={translateMessage("Device Setup Method")} />
|
||||
<Guidance>{translateMessage("You are adding this device to an existing synchronisation setup.")}</Guidance>
|
||||
<Instruction>
|
||||
<Question>Please select a method to import the settings from another device.</Question>
|
||||
<Question>{translateMessage("Please select a method to import the settings from another device.")}</Question>
|
||||
<Options>
|
||||
<Option selectedValue={TYPE_USE_SETUP_URI} title="Use a Setup URI (Recommended)" bind:value={userType}>
|
||||
Paste the Setup URI generated from one of your active devices.
|
||||
<Option
|
||||
selectedValue={TYPE_USE_SETUP_URI}
|
||||
title={translateMessage("Use a Setup URI (Recommended)")}
|
||||
bind:value={userType}
|
||||
>
|
||||
{translateMessage("Paste the Setup URI generated from one of your active devices.")}
|
||||
</Option>
|
||||
<Option selectedValue={TYPE_SCAN_QR_CODE} title="Scan a QR Code (Recommended for mobile)" bind:value={userType}>
|
||||
Scan the QR code displayed on an active device using this device's camera.
|
||||
<Option
|
||||
selectedValue={TYPE_SCAN_QR_CODE}
|
||||
title={translateMessage("Scan a QR Code (Recommended for mobile)")}
|
||||
bind:value={userType}
|
||||
>
|
||||
{translateMessage("Scan the QR code displayed on an active device using this device's camera.")}
|
||||
</Option>
|
||||
<Option
|
||||
selectedValue={TYPE_CONFIGURE_MANUALLY}
|
||||
@@ -59,5 +67,5 @@
|
||||
</Instruction>
|
||||
<UserDecisions>
|
||||
<Decision title={proceedTitle} important={canProceed} disabled={!canProceed} commit={() => setResult(userType)} />
|
||||
<Decision title="Cancel" commit={() => setResult(TYPE_CANCELLED)} />
|
||||
<Decision title={translateMessage("Cancel")} commit={() => setResult(TYPE_CANCELLED)} />
|
||||
</UserDecisions>
|
||||
|
||||
@@ -22,11 +22,11 @@
|
||||
let userType = $state<SelectMethodNewUserResultType>(TYPE_CANCELLED);
|
||||
let proceedTitle = $derived.by(() => {
|
||||
if (userType === TYPE_USE_SETUP_URI) {
|
||||
return "Proceed with Setup URI";
|
||||
return translateMessage("Proceed with Setup URI");
|
||||
} else if (userType === TYPE_CONFIGURE_MANUALLY) {
|
||||
return translateMessage("Ui.SetupWizard.SelectNew.ProceedManual");
|
||||
} else {
|
||||
return "Please select an option to proceed";
|
||||
return translateMessage("Please select an option to proceed");
|
||||
}
|
||||
});
|
||||
const canProceed = $derived.by(() => {
|
||||
@@ -34,12 +34,16 @@
|
||||
});
|
||||
</script>
|
||||
|
||||
<DialogHeader title="Connection Method" />
|
||||
<DialogHeader title={translateMessage("Connection Method")} />
|
||||
<Guidance>{translateMessage("Ui.SetupWizard.SelectNew.Guidance")}</Guidance>
|
||||
<Instruction>
|
||||
<Question>{translateMessage("Ui.SetupWizard.SelectNew.Question")}</Question>
|
||||
<Options>
|
||||
<Option selectedValue={TYPE_USE_SETUP_URI} title="Use a Setup URI (Recommended)" bind:value={userType}>
|
||||
<Option
|
||||
selectedValue={TYPE_USE_SETUP_URI}
|
||||
title={translateMessage("Use a Setup URI (Recommended)")}
|
||||
bind:value={userType}
|
||||
>
|
||||
{translateMessage("Ui.SetupWizard.SelectNew.SetupUriOptionDesc")}
|
||||
</Option>
|
||||
<Option
|
||||
@@ -56,5 +60,5 @@
|
||||
</Instruction>
|
||||
<UserDecisions>
|
||||
<Decision title={proceedTitle} important={canProceed} disabled={!canProceed} commit={() => setResult(userType)} />
|
||||
<Decision title="Cancel" commit={() => setResult(TYPE_CANCELLED)} />
|
||||
<Decision title={translateMessage("Cancel")} commit={() => setResult(TYPE_CANCELLED)} />
|
||||
</UserDecisions>
|
||||
|
||||
@@ -22,13 +22,13 @@
|
||||
let userType = $state<SetupRemoteResultType>(TYPE_CANCELLED);
|
||||
let proceedTitle = $derived.by(() => {
|
||||
if (userType === TYPE_COUCHDB) {
|
||||
return "Continue to CouchDB setup";
|
||||
return translateMessage("Continue to CouchDB setup");
|
||||
} else if (userType === TYPE_BUCKET) {
|
||||
return translateMessage("Ui.SetupWizard.SetupRemote.ProceedBucket");
|
||||
} else if (userType === TYPE_P2P) {
|
||||
return translateMessage("Ui.SetupWizard.SetupRemote.ProceedP2P");
|
||||
} else {
|
||||
return "Please select an option to proceed";
|
||||
return translateMessage("Please select an option to proceed");
|
||||
}
|
||||
});
|
||||
const canProceed = $derived.by(() => {
|
||||
@@ -63,5 +63,5 @@
|
||||
</Instruction>
|
||||
<UserDecisions>
|
||||
<Decision title={proceedTitle} important={canProceed} disabled={!canProceed} commit={() => setResult(userType)} />
|
||||
<Decision title="No, please take me back" commit={() => setResult(TYPE_CANCELLED)} />
|
||||
<Decision title={translateMessage("No, please take me back")} commit={() => setResult(TYPE_CANCELLED)} />
|
||||
</UserDecisions>
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
import { getDialogContext, type GuestDialogProps } from "@/modules/services/LiveSyncUI/svelteDialog";
|
||||
import { copyTo, pickBucketSyncSettings } from "@vrtmrz/livesync-commonlib/compat/common/utils";
|
||||
import { TYPE_CANCELLED, type SetupRemoteBucketResultType } from "./setupDialogTypes";
|
||||
import { $msg as translateMessage } from "@/common/translation";
|
||||
|
||||
const default_setting = pickBucketSyncSettings(DEFAULT_SETTINGS);
|
||||
|
||||
@@ -82,17 +83,17 @@
|
||||
const trialRemoteSetting = generateSetting();
|
||||
const replicator = await context.services.replicator.getNewReplicator(trialRemoteSetting);
|
||||
if (!replicator) {
|
||||
return "Failed to create replicator instance.";
|
||||
return translateMessage("Failed to create replicator instance.");
|
||||
}
|
||||
try {
|
||||
const result = await replicator.tryConnectRemote(trialRemoteSetting, false);
|
||||
if (result) {
|
||||
return "";
|
||||
} else {
|
||||
return "Failed to connect to the server. Please check your settings.";
|
||||
return translateMessage("Failed to connect to the server. Please check your settings.");
|
||||
}
|
||||
} catch (e) {
|
||||
return `Failed to connect to the server: ${e}`;
|
||||
return translateMessage("Failed to connect to the server: ${reason}", { reason: `${e}` });
|
||||
}
|
||||
} finally {
|
||||
processing = false;
|
||||
@@ -109,7 +110,7 @@
|
||||
return;
|
||||
}
|
||||
} catch (e) {
|
||||
error = `Error during connection test: ${e}`;
|
||||
error = translateMessage("Error during connection test: ${reason}", { reason: `${e}` });
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -122,9 +123,13 @@
|
||||
}
|
||||
</script>
|
||||
|
||||
<DialogHeader title="S3/MinIO/R2 Configuration" />
|
||||
<Guidance>Please enter the details required to connect to your S3/MinIO/R2 compatible object storage service.</Guidance>
|
||||
<InputRow label="Endpoint URL">
|
||||
<DialogHeader title={translateMessage("S3/MinIO/R2 Configuration")} />
|
||||
<Guidance
|
||||
>{translateMessage(
|
||||
"Please enter the details required to connect to your S3/MinIO/R2 compatible object storage service."
|
||||
)}</Guidance
|
||||
>
|
||||
<InputRow label={translateMessage("Endpoint URL")}>
|
||||
<input
|
||||
type="text"
|
||||
name="s3-endpoint"
|
||||
@@ -137,13 +142,15 @@
|
||||
bind:value={syncSetting.endpoint}
|
||||
/>
|
||||
</InputRow>
|
||||
<InfoNote warning visible={isEndpointInsecure}>We can use only Secure (HTTPS) connections on Obsidian Mobile.</InfoNote>
|
||||
<InfoNote warning visible={isEndpointInsecure}
|
||||
>{translateMessage("We can use only Secure (HTTPS) connections on Obsidian Mobile.")}</InfoNote
|
||||
>
|
||||
|
||||
<InputRow label="Access Key ID">
|
||||
<InputRow label={translateMessage("Access Key ID")}>
|
||||
<input
|
||||
type="text"
|
||||
name="s3-access-key-id"
|
||||
placeholder="Enter your Access Key ID"
|
||||
placeholder={translateMessage("Enter your Access Key ID")}
|
||||
autocorrect="off"
|
||||
autocapitalize="off"
|
||||
spellcheck="false"
|
||||
@@ -152,19 +159,19 @@
|
||||
/>
|
||||
</InputRow>
|
||||
|
||||
<InputRow label="Secret Access Key">
|
||||
<InputRow label={translateMessage("Secret Access Key")}>
|
||||
<Password
|
||||
name="s3-secret-access-key"
|
||||
placeholder="Enter your Secret Access Key"
|
||||
placeholder={translateMessage("Enter your Secret Access Key")}
|
||||
required
|
||||
bind:value={syncSetting.secretKey}
|
||||
/>
|
||||
</InputRow>
|
||||
<InputRow label="Bucket Name">
|
||||
<InputRow label={translateMessage("Bucket Name")}>
|
||||
<input
|
||||
type="text"
|
||||
name="s3-bucket-name"
|
||||
placeholder="Enter your Bucket Name"
|
||||
placeholder={translateMessage("Enter your Bucket Name")}
|
||||
autocorrect="off"
|
||||
autocapitalize="off"
|
||||
spellcheck="false"
|
||||
@@ -172,26 +179,26 @@
|
||||
bind:value={syncSetting.bucket}
|
||||
/></InputRow
|
||||
>
|
||||
<InputRow label="Region">
|
||||
<InputRow label={translateMessage("Region")}>
|
||||
<input
|
||||
type="text"
|
||||
name="s3-region"
|
||||
placeholder="Enter your Region (e.g., us-east-1, auto for R2)"
|
||||
placeholder={translateMessage("Enter your Region (e.g., us-east-1, auto for R2)")}
|
||||
autocorrect="off"
|
||||
autocapitalize="off"
|
||||
spellcheck="false"
|
||||
bind:value={syncSetting.region}
|
||||
/>
|
||||
</InputRow>
|
||||
<InputRow label="Use Path-Style Access">
|
||||
<InputRow label={translateMessage("Use Path-Style Access")}>
|
||||
<input type="checkbox" name="s3-use-path-style" bind:checked={syncSetting.forcePathStyle} />
|
||||
</InputRow>
|
||||
|
||||
<InputRow label="Folder Prefix">
|
||||
<InputRow label={translateMessage("Folder Prefix")}>
|
||||
<input
|
||||
type="text"
|
||||
name="s3-folder-prefix"
|
||||
placeholder="Enter a folder prefix (optional)"
|
||||
placeholder={translateMessage("Enter a folder prefix (optional)")}
|
||||
autocorrect="off"
|
||||
autocapitalize="off"
|
||||
spellcheck="false"
|
||||
@@ -199,20 +206,21 @@
|
||||
/>
|
||||
</InputRow>
|
||||
<InfoNote>
|
||||
If you want to store the data in a specific folder within the bucket, you can specify a folder prefix here.
|
||||
Otherwise, leave it blank to store data at the root of the bucket.
|
||||
{translateMessage(
|
||||
"If you want to store the data in a specific folder within the bucket, you can specify a folder prefix here. Otherwise, leave it blank to store data at the root of the bucket."
|
||||
)}
|
||||
</InfoNote>
|
||||
<InputRow label="Use internal API">
|
||||
<InputRow label={translateMessage("Use internal API")}>
|
||||
<input type="checkbox" name="s3-use-internal-api" bind:checked={syncSetting.useCustomRequestHandler} />
|
||||
</InputRow>
|
||||
<InfoNote>
|
||||
If you cannot avoid CORS issues, you might want to try this option. It uses Obsidian's internal API to communicate
|
||||
with the S3 server. Not compliant with web standards, but works. Note that this might break in future Obsidian
|
||||
versions.
|
||||
{translateMessage(
|
||||
"If you cannot avoid CORS issues, you might want to try this option. It uses Obsidian's internal API to communicate with the S3 server. Not compliant with web standards, but works. Note that this might break in future Obsidian versions."
|
||||
)}
|
||||
</InfoNote>
|
||||
|
||||
<ExtraItems title="Advanced Settings">
|
||||
<InputRow label="Custom Headers">
|
||||
<ExtraItems title={translateMessage("Advanced Settings")}>
|
||||
<InputRow label={translateMessage("Custom Headers")}>
|
||||
<textarea
|
||||
name="bucket-custom-headers"
|
||||
placeholder="e.g., x-example-header: value\n another-header: value2"
|
||||
@@ -229,11 +237,16 @@
|
||||
</InfoNote>
|
||||
|
||||
{#if processing}
|
||||
Checking connection... Please wait.
|
||||
{translateMessage("Checking connection... Please wait.")}
|
||||
{:else}
|
||||
<UserDecisions>
|
||||
<Decision title="Test Settings and Continue" important disabled={!canProceed} commit={() => checkAndCommit()} />
|
||||
<Decision title="Continue anyway" commit={() => commit()} />
|
||||
<Decision title="Cancel" commit={() => cancel()} />
|
||||
<Decision
|
||||
title={translateMessage("Test Settings and Continue")}
|
||||
important
|
||||
disabled={!canProceed}
|
||||
commit={() => checkAndCommit()}
|
||||
/>
|
||||
<Decision title={translateMessage("Continue anyway")} commit={() => commit()} />
|
||||
<Decision title={translateMessage("Cancel")} commit={() => cancel()} />
|
||||
</UserDecisions>
|
||||
{/if}
|
||||
|
||||
@@ -75,7 +75,7 @@
|
||||
const trialRemoteSetting = generateSetting();
|
||||
const replicator = await context.services.replicator.getNewReplicator(trialRemoteSetting);
|
||||
if (!replicator) {
|
||||
return "Failed to create replicator instance.";
|
||||
return translateMessage("Failed to create replicator instance.");
|
||||
}
|
||||
try {
|
||||
const result = await probeCouchDBConnection(
|
||||
@@ -86,10 +86,12 @@
|
||||
if (result.ok) {
|
||||
return "";
|
||||
} else {
|
||||
return `Failed to connect to the server: ${result.reason}`;
|
||||
return translateMessage("Failed to connect to the server: ${reason}", {
|
||||
reason: `${result.reason}`,
|
||||
});
|
||||
}
|
||||
} catch (e) {
|
||||
return `Failed to connect to the server: ${e}`;
|
||||
return translateMessage("Failed to connect to the server: ${reason}", { reason: `${e}` });
|
||||
}
|
||||
} finally {
|
||||
processing = false;
|
||||
@@ -106,7 +108,7 @@
|
||||
return;
|
||||
}
|
||||
} catch (e) {
|
||||
error = `Error during connection test: ${e}`;
|
||||
error = translateMessage("Error during connection test: ${reason}", { reason: `${e}` });
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -159,9 +161,9 @@
|
||||
});
|
||||
</script>
|
||||
|
||||
<DialogHeader title="CouchDB Configuration" />
|
||||
<Guidance>Please enter the CouchDB server information below.</Guidance>
|
||||
<InputRow label="URL">
|
||||
<DialogHeader title={translateMessage("CouchDB Configuration")} />
|
||||
<Guidance>{translateMessage("Please enter the CouchDB server information below.")}</Guidance>
|
||||
<InputRow label={translateMessage("URL")}>
|
||||
<input
|
||||
type="text"
|
||||
name="couchdb-url"
|
||||
@@ -174,13 +176,15 @@
|
||||
pattern="^https?://.+"
|
||||
/>
|
||||
</InputRow>
|
||||
<InfoNote warning visible={isURIInsecure}>We can use only Secure (HTTPS) connections on Obsidian Mobile.</InfoNote>
|
||||
<InfoNote warning visible={isURIInsecure}
|
||||
>{translateMessage("We can use only Secure (HTTPS) connections on Obsidian Mobile.")}</InfoNote
|
||||
>
|
||||
<InfoNote warning visible={isURLInvalid}>{translateMessage("Enter a complete HTTP or HTTPS URL.")}</InfoNote>
|
||||
<InputRow label="Username">
|
||||
<InputRow label={translateMessage("Username")}>
|
||||
<input
|
||||
type="text"
|
||||
name="couchdb-username"
|
||||
placeholder="Enter your username"
|
||||
placeholder={translateMessage("Enter your username")}
|
||||
autocorrect="off"
|
||||
autocapitalize="off"
|
||||
spellcheck="false"
|
||||
@@ -188,20 +192,20 @@
|
||||
bind:value={syncSetting.couchDB_USER}
|
||||
/>
|
||||
</InputRow>
|
||||
<InputRow label="Password">
|
||||
<InputRow label={translateMessage("Password")}>
|
||||
<Password
|
||||
name="couchdb-password"
|
||||
placeholder="Enter your password"
|
||||
placeholder={translateMessage("Enter your password")}
|
||||
bind:value={syncSetting.couchDB_PASSWORD}
|
||||
required
|
||||
/>
|
||||
</InputRow>
|
||||
|
||||
<InputRow label="Database Name">
|
||||
<InputRow label={translateMessage("Database Name")}>
|
||||
<input
|
||||
type="text"
|
||||
name="couchdb-database"
|
||||
placeholder="Enter your database name"
|
||||
placeholder={translateMessage("Enter your database name")}
|
||||
autocorrect="off"
|
||||
autocapitalize="off"
|
||||
spellcheck="false"
|
||||
@@ -212,17 +216,17 @@
|
||||
<InfoNote>
|
||||
{translateMessage("CouchDB validates the database name when you connect. The name must not be empty.")}
|
||||
</InfoNote>
|
||||
<InputRow label="Use Internal API">
|
||||
<InputRow label={translateMessage("Use Internal API")}>
|
||||
<input type="checkbox" name="couchdb-use-internal-api" bind:checked={syncSetting.useRequestAPI} />
|
||||
</InputRow>
|
||||
<InfoNote>
|
||||
If you cannot avoid CORS issues, you might want to try this option. It uses Obsidian's internal API to communicate
|
||||
with the CouchDB server. Not compliant with web standards, but works. Note that this might break in future Obsidian
|
||||
versions.
|
||||
{translateMessage(
|
||||
"If you cannot avoid CORS issues, you might want to try this option. It uses Obsidian's internal API to communicate with the CouchDB server. Not compliant with web standards, but works. Note that this might break in future Obsidian versions."
|
||||
)}
|
||||
</InfoNote>
|
||||
|
||||
<ExtraItems title="Advanced Settings">
|
||||
<InputRow label="Custom Headers">
|
||||
<ExtraItems title={translateMessage("Advanced Settings")}>
|
||||
<InputRow label={translateMessage("Custom Headers")}>
|
||||
<textarea
|
||||
name="couchdb-custom-headers"
|
||||
placeholder="e.g., x-example-header: value\n another-header: value2"
|
||||
@@ -233,11 +237,11 @@
|
||||
></textarea>
|
||||
</InputRow>
|
||||
</ExtraItems>
|
||||
<ExtraItems title="Experimental Settings">
|
||||
<InputRow label="Use JWT Authentication">
|
||||
<ExtraItems title={translateMessage("Experimental Settings")}>
|
||||
<InputRow label={translateMessage("Use JWT Authentication")}>
|
||||
<input type="checkbox" name="couchdb-use-jwt" bind:checked={syncSetting.useJWT} />
|
||||
</InputRow>
|
||||
<InputRow label="JWT Algorithm">
|
||||
<InputRow label={translateMessage("JWT Algorithm")}>
|
||||
<select bind:value={syncSetting.jwtAlgorithm} disabled={!isUseJWT}>
|
||||
<option value="HS256">HS256</option>
|
||||
<option value="HS512">HS512</option>
|
||||
@@ -245,7 +249,7 @@
|
||||
<option value="ES512">ES512</option>
|
||||
</select>
|
||||
</InputRow>
|
||||
<InputRow label="JWT Expiration Duration (minutes)">
|
||||
<InputRow label={translateMessage("JWT Expiration Duration (minutes)")}>
|
||||
<input
|
||||
type="text"
|
||||
name="couchdb-jwt-exp-duration"
|
||||
@@ -254,43 +258,44 @@
|
||||
disabled={!isUseJWT}
|
||||
/>
|
||||
</InputRow>
|
||||
<InputRow label="JWT Key">
|
||||
<InputRow label={translateMessage("JWT Key")}>
|
||||
<textarea
|
||||
name="couchdb-jwt-key"
|
||||
rows="5"
|
||||
autocapitalize="off"
|
||||
spellcheck="false"
|
||||
placeholder="Enter your JWT secret or private key"
|
||||
placeholder={translateMessage("Enter your JWT secret or private key")}
|
||||
bind:value={syncSetting.jwtKey}
|
||||
disabled={!isUseJWT}
|
||||
></textarea>
|
||||
</InputRow>
|
||||
<InfoNote>
|
||||
For HS256/HS512 algorithms, provide the shared secret key. For ES256/ES512 algorithms, provide the pkcs8
|
||||
PEM-formatted private key.
|
||||
{translateMessage(
|
||||
"For HS256/HS512 algorithms, provide the shared secret key. For ES256/ES512 algorithms, provide the pkcs8 PEM-formatted private key."
|
||||
)}
|
||||
</InfoNote>
|
||||
<InputRow label="JWT Key ID (kid)">
|
||||
<InputRow label={translateMessage("JWT Key ID (kid)")}>
|
||||
<input
|
||||
type="text"
|
||||
name="couchdb-jwt-kid"
|
||||
placeholder="Enter your JWT Key ID"
|
||||
placeholder={translateMessage("Enter your JWT Key ID")}
|
||||
bind:value={syncSetting.jwtKid}
|
||||
disabled={!isUseJWT}
|
||||
/>
|
||||
</InputRow>
|
||||
<InputRow label="JWT Subject (sub)">
|
||||
<InputRow label={translateMessage("JWT Subject (sub)")}>
|
||||
<input
|
||||
type="text"
|
||||
name="couchdb-jwt-sub"
|
||||
placeholder="Enter your JWT Subject (CouchDB Username)"
|
||||
placeholder={translateMessage("Enter your JWT Subject (CouchDB Username)")}
|
||||
bind:value={syncSetting.jwtSub}
|
||||
disabled={!isUseJWT}
|
||||
/>
|
||||
</InputRow>
|
||||
<InfoNote warning>
|
||||
JWT (JSON Web Token) authentication allows you to securely authenticate with the CouchDB server using tokens.
|
||||
Ensure that your CouchDB server is configured to accept JWTs and that the provided key and settings match the
|
||||
server's configuration. Incidentally, I have not verified it very thoroughly.
|
||||
{translateMessage(
|
||||
"JWT (JSON Web Token) authentication allows you to securely authenticate with the CouchDB server using tokens. Ensure that your CouchDB server is configured to accept JWTs and that the provided key and settings match the server's configuration. Incidentally, I have not verified it very thoroughly."
|
||||
)}
|
||||
</InfoNote>
|
||||
</ExtraItems>
|
||||
|
||||
@@ -307,7 +312,7 @@
|
||||
</InfoNote>
|
||||
|
||||
{#if processing}
|
||||
Checking connection... Please wait.
|
||||
{translateMessage("Checking connection... Please wait.")}
|
||||
{:else}
|
||||
<UserDecisions>
|
||||
<Decision title={primaryActionTitle} important disabled={!canProceed} commit={() => checkAndCommit()} />
|
||||
@@ -323,6 +328,6 @@
|
||||
commit={() => commit()}
|
||||
/>
|
||||
{/if}
|
||||
<Decision title="Cancel" commit={() => cancel()} />
|
||||
<Decision title={translateMessage("Cancel")} commit={() => cancel()} />
|
||||
</UserDecisions>
|
||||
{/if}
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
import type { GuestDialogProps } from "@/modules/services/LiveSyncUI/svelteDialog";
|
||||
import { copyTo, pickEncryptionSettings } from "@vrtmrz/livesync-commonlib/compat/common/utils";
|
||||
import { TYPE_CANCELLED, type SetupRemoteE2EEResultType } from "./setupDialogTypes";
|
||||
import { $msg as translateMessage } from "@/common/translation";
|
||||
|
||||
type Props = GuestDialogProps<SetupRemoteE2EEResultType, EncryptionSettings>;
|
||||
const { setResult, getInitialData }: Props = $props();
|
||||
@@ -47,30 +48,31 @@
|
||||
}
|
||||
</script>
|
||||
|
||||
<DialogHeader title="End-to-End Encryption" />
|
||||
<Guidance>Please configure your end-to-end encryption settings.</Guidance>
|
||||
<InputRow label="End-to-End Encryption">
|
||||
<DialogHeader title={translateMessage("End-to-End Encryption")} />
|
||||
<Guidance>{translateMessage("Please configure your end-to-end encryption settings.")}</Guidance>
|
||||
<InputRow label={translateMessage("End-to-End Encryption")}>
|
||||
<input type="checkbox" bind:checked={encryptionSettings.encrypt} />
|
||||
<Password
|
||||
name="e2ee-passphrase"
|
||||
placeholder="Enter your passphrase"
|
||||
placeholder={translateMessage("Enter your passphrase")}
|
||||
bind:value={encryptionSettings.passphrase}
|
||||
disabled={!encryptionSettings.encrypt}
|
||||
required={encryptionSettings.encrypt}
|
||||
/>
|
||||
</InputRow>
|
||||
<InfoNote title="Strongly Recommended">
|
||||
Enabling end-to-end encryption ensures that your data is encrypted on your device before being sent to the remote
|
||||
server. This means that even if someone gains access to the server, they won't be able to read your data without the
|
||||
passphrase. Make sure to remember your passphrase, as it will be required to decrypt your data on other devices.
|
||||
<InfoNote title={translateMessage("Strongly Recommended")}>
|
||||
{translateMessage(
|
||||
"Enabling end-to-end encryption ensures that your data is encrypted on your device before being sent to the remote server. This means that even if someone gains access to the server, they won't be able to read your data without the passphrase. Make sure to remember your passphrase, as it will be required to decrypt your data on other devices."
|
||||
)}
|
||||
<br />
|
||||
Also, please note that if you are using Peer-to-Peer synchronization, this configuration will be used when you switch
|
||||
to other methods and connect to a remote server in the future.
|
||||
{translateMessage(
|
||||
"Also, please note that if you are using Peer-to-Peer synchronization, this configuration will be used when you switch to other methods and connect to a remote server in the future."
|
||||
)}
|
||||
</InfoNote>
|
||||
<InfoNote warning>
|
||||
This setting must be the same even when connecting to multiple synchronisation destinations.
|
||||
{translateMessage("This setting must be the same even when connecting to multiple synchronisation destinations.")}
|
||||
</InfoNote>
|
||||
<InputRow label="Obfuscate Properties">
|
||||
<InputRow label={translateMessage("Obfuscate Properties")}>
|
||||
<input
|
||||
type="checkbox"
|
||||
bind:checked={encryptionSettings.usePathObfuscation}
|
||||
@@ -79,14 +81,13 @@
|
||||
</InputRow>
|
||||
|
||||
<InfoNote>
|
||||
Obfuscating properties (e.g., path of file, size, creation and modification dates) adds an additional layer of
|
||||
security by making it harder to identify the structure and names of your files and folders on the remote server.
|
||||
This helps protect your privacy and makes it more difficult for unauthorized users to infer information about your
|
||||
data.
|
||||
{translateMessage(
|
||||
"Obfuscating properties (e.g., path of file, size, creation and modification dates) adds an additional layer of security by making it harder to identify the structure and names of your files and folders on the remote server. This helps protect your privacy and makes it more difficult for unauthorized users to infer information about your data."
|
||||
)}
|
||||
</InfoNote>
|
||||
|
||||
<ExtraItems title="Advanced">
|
||||
<InputRow label="Encryption Algorithm">
|
||||
<ExtraItems title={translateMessage("Advanced")}>
|
||||
<InputRow label={translateMessage("Encryption Algorithm")}>
|
||||
<select bind:value={encryptionSettings.E2EEAlgorithm} disabled={!encryptionSettings.encrypt}>
|
||||
{#each Object.values(E2EEAlgorithms) as alg}
|
||||
<option value={alg}>{E2EEAlgorithmNames[alg] ?? alg}</option>
|
||||
@@ -94,30 +95,33 @@
|
||||
</select>
|
||||
</InputRow>
|
||||
<InfoNote>
|
||||
In most cases, you should stick with the default algorithm ({E2EEAlgorithmNames[
|
||||
DEFAULT_SETTINGS.E2EEAlgorithm
|
||||
]}), This setting is only required if you have an existing Vault encrypted in a different format.
|
||||
{translateMessage(
|
||||
"In most cases, you should stick with the default algorithm (${algorithm}), This setting is only required if you have an existing Vault encrypted in a different format.",
|
||||
{ algorithm: E2EEAlgorithmNames[DEFAULT_SETTINGS.E2EEAlgorithm] }
|
||||
)}
|
||||
</InfoNote>
|
||||
<InfoNote warning>
|
||||
Changing the encryption algorithm will prevent access to any data previously encrypted with a different
|
||||
algorithm. Ensure that all your devices are configured to use the same algorithm to maintain access to your
|
||||
data.
|
||||
{translateMessage(
|
||||
"Changing the encryption algorithm will prevent access to any data previously encrypted with a different algorithm. Ensure that all your devices are configured to use the same algorithm to maintain access to your data."
|
||||
)}
|
||||
</InfoNote>
|
||||
</ExtraItems>
|
||||
|
||||
<InfoNote warning>
|
||||
<p>
|
||||
Please be aware that the End-to-End Encryption passphrase is not validated until the synchronisation process
|
||||
actually commences. This is a security measure designed to protect your data.
|
||||
{translateMessage(
|
||||
"Please be aware that the End-to-End Encryption passphrase is not validated until the synchronisation process actually commences. This is a security measure designed to protect your data."
|
||||
)}
|
||||
</p>
|
||||
<p>
|
||||
Therefore, we ask that you exercise extreme caution when configuring server information manually. If an
|
||||
incorrect passphrase is entered, the data on the server will become corrupted. <br /><br />
|
||||
Please understand that this is intended behaviour.
|
||||
{translateMessage(
|
||||
"Therefore, we ask that you exercise extreme caution when configuring server information manually. If an incorrect passphrase is entered, the data on the server will become corrupted."
|
||||
)} <br /><br />
|
||||
{translateMessage("Please understand that this is intended behaviour.")}
|
||||
</p>
|
||||
</InfoNote>
|
||||
|
||||
<UserDecisions>
|
||||
<Decision title="Proceed" important disabled={!e2eeValid} commit={() => commit()} />
|
||||
<Decision title="Cancel" commit={() => setResult(TYPE_CANCELLED)} />
|
||||
<Decision title={translateMessage("Proceed")} important disabled={!e2eeValid} commit={() => commit()} />
|
||||
<Decision title={translateMessage("Cancel")} commit={() => setResult(TYPE_CANCELLED)} />
|
||||
</UserDecisions>
|
||||
|
||||
@@ -123,7 +123,9 @@
|
||||
try {
|
||||
const result = await probeP2PSetupConnection(replicator);
|
||||
if (!result.ok) {
|
||||
return `Failed to connect to the signalling relay: ${result.reason}`;
|
||||
return translateMessage("Failed to connect to the signalling relay: ${reason}", {
|
||||
reason: `${result.reason}`,
|
||||
});
|
||||
}
|
||||
return "";
|
||||
} finally {
|
||||
@@ -157,7 +159,7 @@
|
||||
return;
|
||||
}
|
||||
} catch (e) {
|
||||
error = `Error during connection test: ${e}`;
|
||||
error = translateMessage("Error during connection test: ${reason}", { reason: `${e}` });
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -178,9 +180,9 @@
|
||||
});
|
||||
</script>
|
||||
|
||||
<DialogHeader title="P2P Configuration" />
|
||||
<Guidance>Please enter the Peer-to-Peer Synchronisation information below.</Guidance>
|
||||
<InputRow label="Enabled">
|
||||
<DialogHeader title={translateMessage("P2P Configuration")} />
|
||||
<Guidance>{translateMessage("Please enter the Peer-to-Peer Synchronisation information below.")}</Guidance>
|
||||
<InputRow label={translateMessage("Enabled")}>
|
||||
<input type="checkbox" name="p2p-enabled" bind:checked={syncSetting.P2P_Enabled} />
|
||||
</InputRow>
|
||||
<InputRow label={translateMessage("Signalling relay URLs")}>
|
||||
@@ -208,7 +210,7 @@
|
||||
rel="noopener noreferrer">{translateMessage("Learn more about P2P connections")}</a
|
||||
>.
|
||||
</InfoNote>
|
||||
<InputRow label="Group ID">
|
||||
<InputRow label={translateMessage("Group ID")}>
|
||||
<input
|
||||
type="text"
|
||||
name="p2p-room-id"
|
||||
@@ -218,17 +220,24 @@
|
||||
spellcheck="false"
|
||||
bind:value={syncSetting.P2P_roomID}
|
||||
/>
|
||||
<button class="button" onclick={() => generateDefaultGroupId()}>Generate Random ID</button>
|
||||
<button class="button" onclick={() => generateDefaultGroupId()}>{translateMessage("Generate Random ID")}</button>
|
||||
</InputRow>
|
||||
<InputRow label="Passphrase">
|
||||
<Password name="p2p-password" placeholder="Enter your passphrase" bind:value={syncSetting.P2P_passphrase} />
|
||||
<InputRow label={translateMessage("Passphrase")}>
|
||||
<Password
|
||||
name="p2p-password"
|
||||
placeholder={translateMessage("Enter your passphrase")}
|
||||
bind:value={syncSetting.P2P_passphrase}
|
||||
/>
|
||||
</InputRow>
|
||||
<InfoNote>
|
||||
The Group ID and passphrase are used to identify your group of devices. Make sure to use the same Group ID and
|
||||
passphrase on all devices you want to synchronise.<br />
|
||||
Note that the Group ID is not limited to the generated format; you can use any string as the Group ID.
|
||||
{translateMessage(
|
||||
"The Group ID and passphrase are used to identify your group of devices. Make sure to use the same Group ID and passphrase on all devices you want to synchronise."
|
||||
)}<br />
|
||||
{translateMessage(
|
||||
"Note that the Group ID is not limited to the generated format; you can use any string as the Group ID."
|
||||
)}
|
||||
</InfoNote>
|
||||
<InputRow label="Device Peer ID">
|
||||
<InputRow label={translateMessage("Device Peer ID")}>
|
||||
<input
|
||||
type="text"
|
||||
name="p2p-device-peer-id"
|
||||
@@ -239,12 +248,13 @@
|
||||
bind:value={syncSetting.P2P_DevicePeerName}
|
||||
/>
|
||||
</InputRow>
|
||||
<InputRow label="Auto Start P2P Connection">
|
||||
<InputRow label={translateMessage("Auto Start P2P Connection")}>
|
||||
<input type="checkbox" name="p2p-auto-start" bind:checked={syncSetting.P2P_AutoStart} />
|
||||
</InputRow>
|
||||
<InfoNote>
|
||||
If "Auto Start P2P Connection" is enabled, the P2P connection will be started automatically when the plug-in
|
||||
launches.
|
||||
{translateMessage(
|
||||
'If "Auto Start P2P Connection" is enabled, the P2P connection will be started automatically when the plug-in launches.'
|
||||
)}
|
||||
</InfoNote>
|
||||
<InputRow label={translateMessage("Announce changes automatically after connecting")}>
|
||||
<input type="checkbox" name="p2p-auto-broadcast" bind:checked={syncSetting.P2P_AutoBroadcast} />
|
||||
@@ -254,10 +264,11 @@
|
||||
"When enabled, this device notifies connected peers after a local change. The notification contains no Vault data; a peer which follows this device then fetches the change through the encrypted P2P connection."
|
||||
)}
|
||||
</InfoNote>
|
||||
<ExtraItems title="Advanced Settings">
|
||||
<ExtraItems title={translateMessage("Advanced Settings")}>
|
||||
<InfoNote>
|
||||
TURN server settings are only necessary if you are behind a strict NAT or firewall that prevents direct P2P
|
||||
connections. In most cases, you can leave these fields blank.
|
||||
{translateMessage(
|
||||
"TURN server settings are only necessary if you are behind a strict NAT or firewall that prevents direct P2P connections. In most cases, you can leave these fields blank."
|
||||
)}
|
||||
</InfoNote>
|
||||
<InfoNote warning>
|
||||
{translateMessage(
|
||||
@@ -269,7 +280,7 @@
|
||||
rel="noopener noreferrer">{translateMessage("Learn more about signalling and TURN")}</a
|
||||
>.
|
||||
</InfoNote>
|
||||
<InputRow label="TURN Server URLs (comma-separated)">
|
||||
<InputRow label={translateMessage("TURN Server URLs (comma-separated)")}>
|
||||
<textarea
|
||||
name="p2p-turn-servers"
|
||||
placeholder="turn:turn.example.com:3478,turn:turn.example.com:443"
|
||||
@@ -279,21 +290,21 @@
|
||||
rows="5"
|
||||
></textarea>
|
||||
</InputRow>
|
||||
<InputRow label="TURN Username">
|
||||
<InputRow label={translateMessage("TURN Username")}>
|
||||
<input
|
||||
type="text"
|
||||
name="p2p-turn-username"
|
||||
placeholder="Enter TURN username"
|
||||
placeholder={translateMessage("Enter TURN username")}
|
||||
autocorrect="off"
|
||||
autocapitalize="off"
|
||||
spellcheck="false"
|
||||
bind:value={syncSetting.P2P_turnUsername}
|
||||
/>
|
||||
</InputRow>
|
||||
<InputRow label="TURN Credential">
|
||||
<InputRow label={translateMessage("TURN Credential")}>
|
||||
<Password
|
||||
name="p2p-turn-credential"
|
||||
placeholder="Enter TURN credential"
|
||||
placeholder={translateMessage("Enter TURN credential")}
|
||||
bind:value={syncSetting.P2P_turnCredential}
|
||||
/>
|
||||
</InputRow>
|
||||
@@ -302,11 +313,16 @@
|
||||
{error}
|
||||
</InfoNote>
|
||||
{#if processing}
|
||||
Checking connection... Please wait.
|
||||
{translateMessage("Checking connection... Please wait.")}
|
||||
{:else}
|
||||
<UserDecisions>
|
||||
<Decision title="Test Settings and Continue" important disabled={!canProceed} commit={() => checkAndCommit()} />
|
||||
<Decision title="Continue anyway" commit={() => commit()} />
|
||||
<Decision title="Cancel" commit={() => cancel()} />
|
||||
<Decision
|
||||
title={translateMessage("Test Settings and Continue")}
|
||||
important
|
||||
disabled={!canProceed}
|
||||
commit={() => checkAndCommit()}
|
||||
/>
|
||||
<Decision title={translateMessage("Continue anyway")} commit={() => commit()} />
|
||||
<Decision title={translateMessage("Cancel")} commit={() => cancel()} />
|
||||
</UserDecisions>
|
||||
{/if}
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
import { decryptString } from "@vrtmrz/livesync-commonlib/compat/encryption/stringEncryption";
|
||||
import type { GuestDialogProps } from "@/modules/services/LiveSyncUI/svelteDialog";
|
||||
import { TYPE_CANCELLED, type UseSetupURIResultType } from "./setupDialogTypes";
|
||||
import { $msg as translateMessage } from "@/common/translation";
|
||||
|
||||
type Props = GuestDialogProps<UseSetupURIResultType, string>;
|
||||
const { setResult, getInitialData }: Props = $props();
|
||||
@@ -34,7 +35,7 @@
|
||||
error = "";
|
||||
if (!seemsValid) return;
|
||||
if (!passphrase) {
|
||||
error = "Passphrase is required.";
|
||||
error = translateMessage("Passphrase is required.");
|
||||
return;
|
||||
}
|
||||
try {
|
||||
@@ -47,7 +48,7 @@
|
||||
// Logger("Settings imported successfully", LOG_LEVEL_NOTICE);
|
||||
return;
|
||||
} catch (e) {
|
||||
error = "Failed to parse Setup-URI.";
|
||||
error = translateMessage("Failed to parse Setup-URI.");
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -56,14 +57,17 @@
|
||||
}
|
||||
</script>
|
||||
|
||||
<DialogHeader title="Enter Setup URI" />
|
||||
<DialogHeader title={translateMessage("Enter Setup URI")} />
|
||||
<Guidance
|
||||
>Please enter the Setup URI that was generated during server installation or on another device, along with the vault
|
||||
passphrase.<br />
|
||||
Note that you can generate a new Setup URI by running the "Copy settings as a new Setup URI" command in the command palette.</Guidance
|
||||
>{translateMessage(
|
||||
"Please enter the Setup URI that was generated during server installation or on another device, along with the vault passphrase."
|
||||
)}<br />
|
||||
{translateMessage(
|
||||
'Note that you can generate a new Setup URI by running the "Copy settings as a new Setup URI" command in the command palette.'
|
||||
)}</Guidance
|
||||
>
|
||||
|
||||
<InputRow label="Setup-URI">
|
||||
<InputRow label={translateMessage("Setup-URI")}>
|
||||
<input
|
||||
type="text"
|
||||
placeholder="obsidian://setuplivesync?settings=...."
|
||||
@@ -74,12 +78,12 @@
|
||||
required
|
||||
/>
|
||||
</InputRow>
|
||||
<InfoNote visible={seemsValid}>The Setup-URI is valid and ready to use.</InfoNote>
|
||||
<InfoNote visible={seemsValid}>{translateMessage("The Setup-URI is valid and ready to use.")}</InfoNote>
|
||||
<InfoNote warning visible={!seemsValid && setupURI.trim() != ""}>
|
||||
The Setup-URI does not appear to be valid. Please check that you have copied it correctly.
|
||||
{translateMessage("The Setup-URI does not appear to be valid. Please check that you have copied it correctly.")}
|
||||
</InfoNote>
|
||||
<InputRow label="Passphrase">
|
||||
<Password placeholder="Enter your passphrase" bind:value={passphrase} required />
|
||||
<InputRow label={translateMessage("Passphrase")}>
|
||||
<Password placeholder={translateMessage("Enter your passphrase")} bind:value={passphrase} required />
|
||||
</InputRow>
|
||||
<InfoNote error visible={error.trim() != ""}>
|
||||
{error}
|
||||
@@ -87,10 +91,10 @@
|
||||
|
||||
<UserDecisions>
|
||||
<Decision
|
||||
title="Test Settings and Continue"
|
||||
title={translateMessage("Test Settings and Continue")}
|
||||
important={true}
|
||||
disabled={!canProceed}
|
||||
commit={() => processSetupURI()}
|
||||
/>
|
||||
<Decision title="Cancel" commit={() => setResult(TYPE_CANCELLED)} />
|
||||
<Decision title={translateMessage("Cancel")} commit={() => setResult(TYPE_CANCELLED)} />
|
||||
</UserDecisions>
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
import Decision from "@/modules/services/LiveSyncUI/components/Decision.svelte";
|
||||
import UserDecisions from "@/modules/services/LiveSyncUI/components/UserDecisions.svelte";
|
||||
import InfoNote from "@/modules/services/LiveSyncUI/components/InfoNote.svelte";
|
||||
import { $msg as translateMessage } from "@/common/translation";
|
||||
const TYPE_OK = "ok";
|
||||
type ResultType = typeof TYPE_OK;
|
||||
type Options = {
|
||||
@@ -38,7 +39,7 @@
|
||||
|
||||
<DialogHeader title="Your {title || 'Data'} is ready to be copied" />
|
||||
<Instruction>
|
||||
<InputRow label={title || "Data to Copy"}>
|
||||
<InputRow label={title || translateMessage("Data to Copy")}>
|
||||
<textarea readonly rows="4">{dataToCopy}</textarea>
|
||||
<button onclick={() => copyToClipboard()}
|
||||
>{#if !copied}📋{:else}✔️{/if}
|
||||
|
||||
Reference in New Issue
Block a user