diff --git a/README.md b/README.md index adaf5e27..b52048a1 100644 --- a/README.md +++ b/README.md @@ -46,12 +46,24 @@ This plug-in may be particularly useful for researchers, engineers, and develope 1. [Set up CouchDB on fly.io](docs/setup_flyio.md) 2. Configure plug-in in [Quick Setup](docs/quick_setup.md) -### Manual Setup +### Setup workflows + +Choose a synchronisation method, prepare its server where required, then follow the corresponding client setup: + +1. CouchDB + 1. Prepare the server: + - [Set up your own CouchDB server](docs/setup_own_server.md). + - [Set up CouchDB on fly.io](docs/setup_flyio.md). + 2. Configure the clients by following [CouchDB Quick Setup](docs/quick_setup.md). +2. Object Storage + 1. Prepare the server. A maintained MinIO server installation guide is not currently available here, so set up an S3-compatible service or server of your choice. + 2. Configure the clients by following [Object Storage Setup](docs/setup_object_storage.md). +3. Peer-to-Peer + 1. No server setup is required. + 2. Configure the clients by following [Peer-to-Peer Setup](docs/setup_p2p.md). + +Each workflow establishes ordinary note synchronisation on the first device, generates the additional-device Setup URI from that working device, and verifies synchronisation in both directions. -1. Set up the server - 1. [Set up CouchDB on fly.io](docs/setup_flyio.md) - 2. [Set up your CouchDB](docs/setup_own_server.md) -2. Configure plug-in in [Quick Setup](docs/quick_setup.md) > [!TIP] > Fly.io is no longer free. Fortunately, we can still use IBM Cloudant despite some limitations. Refer to [Set up IBM Cloudant](docs/setup_cloudant.md). > We can also use peer-to-peer synchronisation without a server. Alternatively, cheap object storage like Cloudflare R2 can be used for free. diff --git a/_tools/bakei18n.ts b/_tools/bakei18n.ts new file mode 100644 index 00000000..9ded7145 --- /dev/null +++ b/_tools/bakei18n.ts @@ -0,0 +1,12 @@ +import { writeFileSync } from "fs"; +import { allMessages } from "../src/common/messages/combinedMessages.dev.ts"; +import path from "path"; +const __dirname = import.meta.dirname; +const currentPath = __dirname; +const outDir = path.resolve(currentPath, "../src/common/messages/combinedMessages.prod.ts"); + +console.log(`Writing to ${outDir}`); +writeFileSync( + outDir, + `export const allMessages: Readonly>>> = ${JSON.stringify(allMessages, null, 4)};` +); diff --git a/_tools/checkI18nCoverage.ts b/_tools/checkI18nCoverage.ts new file mode 100644 index 00000000..6b51f33b --- /dev/null +++ b/_tools/checkI18nCoverage.ts @@ -0,0 +1,58 @@ +import { readFile } from "fs/promises"; +import { join, resolve } from "path"; +import { glob } from "tinyglobby"; +import { parse } from "yaml"; +import { objectToDotted } from "./messagelib.ts"; + +const __dirname = import.meta.dirname; +const targetDir = resolve(join(__dirname, "../src/common/messagesYAML/")); +const files = (await glob(`*.yaml`, { expandDirectories: false, absolute: true, cwd: targetDir })).sort(); + +function flattenMessages(src: Record) { + return Object.fromEntries( + Object.entries(objectToDotted(src)) + .map(([key, value]) => [key.endsWith("._value") ? key.slice(0, -7) : key, value] as const) + .filter(([, value]) => typeof value === "string") + .sort(([a], [b]) => a.localeCompare(b)) + ) as Record; +} + +const localeData = new Map>(); +for (const file of files) { + const segments = file.split(/[/\\]/); + const locale = segments[segments.length - 1]!.replace(/\.yaml$/, ""); + const content = await readFile(file, "utf-8"); + localeData.set(locale, flattenMessages(parse(content) ?? {})); +} + +const baseLocale = "en"; +const base = localeData.get(baseLocale); +if (!base) { + throw new Error("en.yaml not found"); +} + +const baseKeys = Object.keys(base); +const report = Object.fromEntries( + [...localeData.entries()].map(([locale, data]) => { + const keys = new Set(Object.keys(data)); + const missing = baseKeys.filter((key) => !keys.has(key)); + const identicalToEnglish = baseKeys.filter( + (key) => keys.has(key) && locale !== baseLocale && data[key] === base[key] + ); + const translated = baseKeys.length - missing.length; + return [ + locale, + { + totalBaseKeys: baseKeys.length, + translatedKeys: translated, + missingKeys: missing.length, + identicalToEnglishCount: identicalToEnglish.length, + coverage: `${translated}/${baseKeys.length}`, + missing, + identicalToEnglish, + }, + ]; + }) +); + +console.log(JSON.stringify(report, null, 2)); diff --git a/_tools/decompileRosetta.ts b/_tools/decompileRosetta.ts new file mode 100644 index 00000000..9c8b2600 --- /dev/null +++ b/_tools/decompileRosetta.ts @@ -0,0 +1,55 @@ +import { writeFileSync } from "fs"; + +import { SUPPORTED_I18N_LANGS, type I18N_LANGS } from "../src/common/rosetta"; +import { allMessages } from "../src/common/messages/combinedMessages.dev.ts"; + +import path from "path"; +const thisFileDir = __dirname; +const outDir = path.join(thisFileDir, "i18n"); + +const out = {} as Record; + +for (const [key, value] of Object.entries(allMessages)) { + for (const lang of [...SUPPORTED_I18N_LANGS, "def"]) { + if (!out[lang]) out[lang] = {}; + if (lang in value) { + out[lang][key] = value[lang as I18N_LANGS]; + } else { + if (lang === "def") { + out[lang][key] = key; + } else { + out[lang][key] = undefined; + } + } + } +} + +for (const [lang, value] of Object.entries(out)) { + const filename = `${lang}.ts`; + const escapeString = (prefix: string, key: string, str: string) => { + if (str.indexOf("\n") !== -1) { + const encoded = JSON.stringify(str); + const lineWrapped = encoded.split("\\n").join("\\\n" + prefix); + + return `${prefix}${JSON.stringify(key)}: ${lineWrapped},`; + } + return `${prefix}${JSON.stringify(key)}: ${JSON.stringify(str)},`; + }; + // const z ="a" "b" "c"; + const _stringify = (value: Record) => { + let res = "{\n"; + for (const key of Object.keys(value)) { + const v = value[key]; + if (v) { + res += escapeString("", key, v) + "\n"; + } else { + res += escapeString("// ", key, out["def"]?.[key] ?? "") + "\n"; + } + } + return res + "\n}"; + }; + void writeFileSync( + path.join(outDir, filename), + `export const PartialMessages ={\n "${lang}":${_stringify(value)}\n} as const;` + ); +} diff --git a/_tools/decompileRosettaToJson.ts b/_tools/decompileRosettaToJson.ts new file mode 100644 index 00000000..5eb8a65d --- /dev/null +++ b/_tools/decompileRosettaToJson.ts @@ -0,0 +1,30 @@ +import { writeFileSync } from "fs"; + +import { allMessages } from "../src/common/messages/combinedMessages.prod.ts"; +const __dirname = import.meta.dirname; +import path from "path"; +const thisFileDir = __dirname; +const outDir = path.resolve(thisFileDir, "../src/common/messagesJson"); + +const out = {} as Record; + +for (const [key, value] of Object.entries(allMessages)) { + //@ts-ignore + for (const [lang, langValue] of Object.entries(allMessages[key])) { + if (!out[lang]) out[lang] = {}; + if (lang in value) { + out[lang][key] = langValue as string; + } else { + if (lang === "def") { + out[lang][key] = key; + } else { + out[lang][key] = undefined; + } + } + } +} + +for (const [lang, value] of Object.entries(out)) { + const filename = `${lang}.json`; + void writeFileSync(path.join(outDir, filename), JSON.stringify(value, null, 4)); +} diff --git a/_tools/json2yaml.ts b/_tools/json2yaml.ts new file mode 100644 index 00000000..de8cae87 --- /dev/null +++ b/_tools/json2yaml.ts @@ -0,0 +1,27 @@ +// Convert Application convenient Message Resources (JSON) to Human-Editable format (YAML) +import { readFile, writeFile } from "fs/promises"; +import { join, resolve } from "path"; +import { stringify } from "yaml"; +import { glob } from "tinyglobby"; +import { dottedToObject } from "./messagelib"; +const __dirname = import.meta.dirname; + +const targetDir = resolve(join(__dirname, "../src/common/messagesJson/")); +console.log(`Target directory: ${targetDir}`); +const files = await glob(`*.json`, { expandDirectories: false, absolute: true, cwd: targetDir }); +for (const file of files) { + const filePath = resolve(file); + console.log(`Processing file: ${filePath}`); + const content = await readFile(filePath, "utf-8"); + const jsonDataSrc = JSON.parse(content); + const jsonDataD2 = Object.fromEntries( + Object.entries(jsonDataSrc).sort(([keyA], [keyB]) => keyA.localeCompare(keyB)) + ); + const jsonData = dottedToObject(jsonDataD2); + const yamlData = stringify(jsonData, { indent: 2 }); + const yamlFilePath = filePath.replace(/\.json$/, ".yaml").replace("Json", "YAML"); + await writeFile(yamlFilePath, yamlData, "utf-8"); + console.log(`Converted ${filePath} to ${yamlFilePath}`); +} + +// console.dir(files, { depth: 0 }); diff --git a/_tools/messagelib.ts b/_tools/messagelib.ts new file mode 100644 index 00000000..6243ffad --- /dev/null +++ b/_tools/messagelib.ts @@ -0,0 +1,38 @@ +export function objectToDotted(obj: any, prefix = ""): Record { + return Object.entries(obj).reduce( + (acc, [key, value]) => { + const newKey = prefix ? `${prefix}.${key}` : key; + if (typeof value === "object" && value !== null && !Array.isArray(value)) { + Object.assign(acc, objectToDotted(value, newKey)); + } else { + acc[newKey] = value; + } + return acc; + }, + {} as Record + ); +} +export function dottedToObject(obj: Record): Record { + return Object.entries(obj).reduce( + (acc, [key, value]) => { + if (key.includes(" ")) { + // Return as is. + return { ...acc, [key]: value }; // Skip keys with spaces + } + const keys = key.split("."); + keys.reduce((nestedAcc, currKey, index) => { + if (currKey in nestedAcc && typeof nestedAcc[currKey] !== "object") { + nestedAcc[currKey] = { _value: nestedAcc[currKey] }; // Convert to object if not already + } + if (index === keys.length - 1) { + nestedAcc[currKey] = value; + } else { + nestedAcc[currKey] = nestedAcc[currKey] || {}; + } + return nestedAcc[currKey]; + }, acc); + return acc; + }, + {} as Record + ); +} diff --git a/_tools/yaml2json.ts b/_tools/yaml2json.ts new file mode 100644 index 00000000..484ef2a5 --- /dev/null +++ b/_tools/yaml2json.ts @@ -0,0 +1,29 @@ +// Convert Human-Editable format (YAML) to Application convenient Message Resources (JSON) + +import { readFile, writeFile } from "fs/promises"; +import { join, resolve } from "path"; +import { parse } from "yaml"; +import { glob } from "tinyglobby"; +import { objectToDotted } from "./messagelib"; +const __dirname = import.meta.dirname; + +const targetDir = resolve(join(__dirname, "../src/common/messagesYAML/")); +console.log(`Target directory: ${targetDir}`); +const files = await glob(`*.yaml`, { expandDirectories: false, absolute: true, cwd: targetDir }); +for (const file of files) { + const filePath = resolve(file); + const content = await readFile(filePath, "utf-8"); + const jsonDataSrc = parse(content); + const jsonDataD2 = objectToDotted(jsonDataSrc); + const jsonData = Object.fromEntries( + Object.entries(jsonDataD2) + .map(([key, value]) => [key.endsWith("._value") ? key.slice(0, -7) : key, value]) + .sort(([keyA], [keyB]) => keyA.localeCompare(keyB)) + ); + const yamlData = JSON.stringify(jsonData, null, 4) + "\n"; + const yamlFilePath = filePath.replace(/\.yaml$/, ".json").replace("YAML", "Json"); + await writeFile(yamlFilePath, yamlData, "utf-8"); + console.log(`Converted ${filePath} to ${yamlFilePath}`); +} + +// console.dir(files, { depth: 0 }); diff --git a/devs.md b/devs.md index f5c8f3cd..258bf207 100644 --- a/devs.md +++ b/devs.md @@ -172,8 +172,8 @@ This policy is intentionally aligned with the conflict checkboxes and compatibil ### Internationalisation (i18n) - **Translation Workflow**: - 1. Edit the human-readable YAML files in `src/common/messagesYAML/` in the `livesync-commonlib` repository - 2. Run `npm run i18n:bake` in that repository to compile YAML → JSON → TypeScript constants + 1. Edit the human-readable YAML files in this repository under `src/common/messagesYAML/` + 2. Run `npm run i18n:bake` to compile YAML → JSON → TypeScript constants 3. Use `$t()`, `$msg()` functions for translations You can also use `$f` for formatted messages with Tagged Template Literals. - **Usage**: @@ -182,7 +182,9 @@ This policy is intentionally aligned with the conflict checkboxes and compatibil $t("Some message"); // Direct translation $f`Hello, ${userName}`; // Formatted message ``` -- **Supported languages**: `def` (English), `de`, `es`, `ja`, `ko`, `ru`, `zh`, `zh-tw` +- **Supported languages**: `def` (English), `de`, `es`, `fr`, `he`, `ja`, `ko`, `ru`, `zh`, `zh-tw` + +Commonlib owns the typed English fallback for messages requested by its services. LiveSync owns the multilingual application catalogue and injects its translator into the Obsidian, CLI, and browser service compositions. Adding a Commonlib message therefore requires its canonical English definition in Commonlib; LiveSync may provide translations here, while an untranslated key falls back to Commonlib English. Importing a Commonlib language catalogue is not part of the boundary. ### File Path Handling diff --git a/docs/adding_translations.md b/docs/adding_translations.md index 7340607e..ecf0535b 100644 --- a/docs/adding_translations.md +++ b/docs/adding_translations.md @@ -1,34 +1,38 @@ # How to add translations +Self-hosted LiveSync owns its multilingual catalogue. Commonlib supplies only the typed English messages which its services request; the plug-in combines those keys with its application messages and injects the selected translator at each service composition root. + ## Getting ready -1. Clone the Commonlib repository, which owns the translation catalogue. -```sh -git clone https://github.com/vrtmrz/livesync-commonlib -``` -2. Make `ls-debug` folder under your vault's `.obsidian` folder (as like `.../dev/.obsidian/ls-debug`). +1. Clone this repository. -## Add translations for already defined terms + ```sh + git clone https://github.com/vrtmrz/obsidian-livesync + cd obsidian-livesync + npm ci + ``` -1. Install dependencies, and build the plug-in as dev. build. -```sh -cd livesync-commonlib -npm ci -npm run i18n:bake -``` +2. Create an `ls-debug` directory below the test Vault's `.obsidian` directory, for example `.obsidian/ls-debug`. -2. Install the resulting packed Commonlib artefact in a Self-hosted LiveSync development checkout, build the plug-in, copy `main.js` to `.obsidian/plugins/obsidian-livesync` in your test Vault, and run Self-hosted LiveSync. -3. You will get the `missing-translation-yyyy-mm-dd.jsonl`, please fill in new translations. -4. Build the plug-in again, and confirm that displayed things were expected. -5. Add the translations to the Commonlib catalogue, run `npm run i18n:bake`, and make the pull request to `https://github.com/vrtmrz/livesync-commonlib`. +## Add translations for existing messages -## Make messages to be translated +1. Edit the human-readable YAML files under `src/common/messagesYAML/`. +2. Regenerate the JSON and TypeScript resources. -1. Find the message that you want to be translated. -2. Change the literal to use `$tf`, like below. -```diff -- Logger("Could not determine passphrase to save data.json! You probably make the configuration sure again!", LOG_LEVEL_URGENT); -+ Logger($tf('someKeyForPassphraseError'), LOG_LEVEL_URGENT); -``` -3. Make the PR to `https://github.com/vrtmrz/obsidian-livesync`. -4. Follow the steps of "Add translations for already defined terms" to add the translations. + ```sh + npm run i18n:bake + ``` + +3. Build the plug-in in development mode, install it in the test Vault, and run Self-hosted LiveSync. +4. Review any `missing-translation-yyyy-mm-dd.jsonl` file written below `.obsidian/ls-debug`, and add the required translations to the YAML catalogue. +5. Bake and build again, then confirm the displayed text and placeholder substitution in the relevant workflow. + +Commit the edited YAML and all regenerated JSON and TypeScript resources together. + +## Make a message translatable + +1. Add its canonical English entry and translations to `src/common/messagesYAML/`. +2. Replace the source literal with `$msg()` or another existing translation helper, using the English catalogue key as the typed contract. +3. Run `npm run i18n:bake`, build the plug-in, and verify the affected workflow. + +When a new message belongs to Commonlib rather than the application, add its canonical English definition and key type in Commonlib first. Add any available translations to LiveSync when consuming that package; untranslated languages use Commonlib's canonical English fallback. diff --git a/docs/adr/2026_06_real_obsidian_e2e.md b/docs/adr/2026_06_real_obsidian_e2e.md index f65c8b9d..a325aa09 100644 --- a/docs/adr/2026_06_real_obsidian_e2e.md +++ b/docs/adr/2026_06_real_obsidian_e2e.md @@ -6,7 +6,7 @@ Accepted / Implemented ## Release -Not yet. Included in the 1.0.0 release preparation. +Accepted — implemented as the maintained local E2E layer for the 1.0 release preparation. ## Context @@ -148,9 +148,9 @@ Current verification: - `npm run test:e2e:obsidian:customisation-sync` verifies a two-vault Customisation Sync workflow: scan a real snippet CSS file, config JSON file, and sample plug-in fixture into per-file Customisation Sync data, synchronise them through CouchDB, apply them on the second vault, assert the resulting `.obsidian` files, propagate a snippet update, and verify deletion of the source-vault snippet sync data without confusing it with the target vault's own applied copy. - `npm run test:e2e:obsidian:setting-markdown-export` verifies that setting Markdown export creates a vault file and omits credentials when credential export is disabled. - `npm run test:e2e:obsidian:install-appimage` reuses the existing AppImage and extracted binary when they are already present. -- `npm run test:e2e:obsidian:local-suite` runs the local verification sequence for the real Obsidian runner after CouchDB and MinIO have been started. -- `npm run test:e2e:obsidian:local-suite:services` stops leftover CouchDB and MinIO fixtures, starts fresh fixtures, runs the local suite, and stops the fixtures again. -- `npm run test:e2e:obsidian:local-suite:services` has been verified locally with real Obsidian, CouchDB, and MinIO. The run completed discovery, smoke, vault reflection, CouchDB upload, Object Storage upload, startup scan, two-vault synchronisation, Hidden File Sync, Customisation Sync, and setting Markdown export. The build step still emits existing Svelte warnings. +- `npm run test:e2e:obsidian:local-suite` runs the local verification sequence for the real Obsidian runner after CouchDB, MinIO, and the P2P relay have been started. +- `npm run test:e2e:obsidian:local-suite:services` stops leftover CouchDB, MinIO, and P2P relay fixtures, starts fresh fixtures, runs the local suite, and stops the fixtures again. +- `npm run test:e2e:obsidian:local-suite:services` has been verified locally with real Obsidian and all three fixtures. In addition to the core launch and synchronisation scenarios, the maintained suite covers CouchDB, Object Storage, and P2P Setup URI workflows in which the working first device generates the URI imported by the second device. Known limits: @@ -200,7 +200,7 @@ Current implementation status: Current implementation status: - The mocked Vitest browser suites, their P2P runner, their root-level relay helpers, and the manual `harness-ci` workflow have been removed after maintained suites covered the critical flows. -- CouchDB and Object Storage combinations, with and without encryption, are owned by the CLI two-Vault matrix. P2P validation is owned by the CLI Compose E2E suite. Plug-in lifecycle and vault integration are owned by real Obsidian E2E. +- Headless CouchDB and Object Storage combinations, with and without encryption, remain owned by the CLI two-Vault matrix. P2P transport replacement and relay lifecycle remain owned by the CLI Compose E2E suite. Real Obsidian owns the visible CouchDB, Object Storage, and P2P Setup URI workflows, including first-device URI generation, second-device import, and two-way Vault synchronisation. - The Obsidian compatibility implementation still needed by the Webapp has moved to `src/apps/webapp/obsidianMock.ts`; it is not a retained browser E2E Harness. - Remaining high-value scenarios, including RedFlag and Fast Setup (Simple Fetch) variants, should be added according to their owning integration boundary rather than copied line by line from the retired suite. @@ -209,8 +209,8 @@ Current implementation status: Real Obsidian E2E is a local verification layer. It should not be wired into the default CI gate. - Keep the scripts individually runnable for focused local debugging. -- Provide `test:e2e:obsidian:local-suite` for a broader local pass after the CouchDB and MinIO fixtures have been started. -- Provide `test:e2e:obsidian:local-suite:services` for a broader local pass that manages the CouchDB and MinIO fixtures itself. +- Provide `test:e2e:obsidian:local-suite` for a broader local pass after the CouchDB, MinIO, and P2P relay fixtures have been started. +- Provide `test:e2e:obsidian:local-suite:services` for a broader local pass that manages all three fixtures itself. - Use `OBSIDIAN_BINARY` when testing against an installed desktop application. - Use `test:e2e:obsidian:install-appimage` on Linux when a local AppImage copy is needed, and reuse the extracted `_testdata/obsidian/squashfs-root` directory between local runs. - Capture Obsidian logs, plug-in logs, vault snapshots, and service logs manually when investigating failures. diff --git a/docs/adr/2026_07_common_library_package_boundary.md b/docs/adr/2026_07_common_library_package_boundary.md index b0df6e65..972415a1 100644 --- a/docs/adr/2026_07_common_library_package_boundary.md +++ b/docs/adr/2026_07_common_library_package_boundary.md @@ -2,7 +2,7 @@ ## Status -Proposed — the implementation proof is complete, `@vrtmrz/livesync-commonlib@0.1.0-rc.2` has been published and verified as the exact downstream dependency, and the Community directory scanner preview confirms the intended package boundary. +Accepted — the package boundary is implemented, published pre-release artefacts have been verified as exact downstream dependencies, and the Community directory scanner preview confirms the intended source boundary. Each later release candidate still requires immutable artefact and downstream validation. ## Context @@ -107,11 +107,11 @@ In particular, event subscriptions, translation selection, offline-scan maps and ### Translation resources -Translation lookup is separated from the generated catalogue. Core services receive a narrow translator capability, or a service-context equivalent, instead of importing a process-global `$msg` implementation which statically owns every language. +Translation lookup is separated from the application catalogue. Commonlib owns a typed canonical English definition for the messages requested by its services and uses it when a host omits the optional translator capability. This ensures that another consumer receives meaningful English rather than symbolic keys. -The first migration keeps language resources in the common-library repository and exposes them temporarily through the focused compatibility subpath `@vrtmrz/livesync-commonlib/compat/common/i18n`. Importing the root or `context` entry does not load the catalogue. Self-hosted LiveSync imports the catalogue and installs the translator at its composition root. A dedicated language subpath remains the preferred stable replacement once its contract has been narrowed. +Self-hosted LiveSync owns the complete multilingual catalogue, generation tools, selected-language state, and translator implementation. It injects that translator into the Obsidian, CLI, and browser composition roots. Commonlib does not publish `compat/common/i18n`, `compat/common/rosetta`, generated language modules, or JSON catalogues. -This is initially one versioned npm package rather than two independently versioned packages. Message identifiers and their generated catalogue change together, so an immediate package split would add version coordination before the dependency direction is proven. A later `@vrtmrz/livesync-language` package is permitted when independent use or release cadence justifies it. Its dependency must point towards message contracts or core, never from core towards the catalogue. +The canonical Commonlib key type and English fallback change with Commonlib. LiveSync may add translations for those keys without duplicating every English definition; its translator delegates absent keys to Commonlib's canonical English fallback. A separate language package remains possible only if independent consumers and release cadence later justify it; core must never depend on an application catalogue. ### Svelte dialogue hosting @@ -232,7 +232,7 @@ Every retained barrel must correspond to an explicit `exports` entry, list named - Replace `@lib/*` source aliases with package imports. - Remove the `src/lib` submodule, `_types`, `tsconfig.types.json`, `generate-types.mjs`, and release-workflow steps which regenerate fallback declarations. -- Move common-library i18n tooling out of Self-hosted LiveSync release preparation. +- Move the multilingual catalogue and its generation tooling into Self-hosted LiveSync, while retaining only Commonlib's typed English fallback in the package. - Keep application-owned source under `src/apps` until a separate decision moves an application. - Run the community scanner's branch or commit preview before releasing the converted plug-in. @@ -245,15 +245,15 @@ Every retained barrel must correspond to an explicit `exports` entry, list named ## Implementation Proof -The package proof builds Commonlib as one compiled ESM package with a small root, `context`, `settings`, `remote-configurations`, `browser`, `node`, and `rpc` entries, plus the explicit compatibility exports required by the reviewed downstream revision from which it was built. It publishes neither raw TypeScript nor Svelte source. The immutable `@vrtmrz/livesync-commonlib@0.1.0-rc.2` registry artefact can be installed into a clean consumer, imported in Node, type-checked from declarations, and bundled independently for browser context, browser storage, browser services, and workers. Its registry version and checksum are recorded by release validation. +The package proof builds Commonlib as one compiled ESM package with a small root, `context`, `settings`, `remote-configurations`, `browser`, `node`, and `rpc` entries, plus only the explicit compatibility exports required by the reviewed downstream inventory. It publishes neither raw TypeScript nor Svelte source, uses no unrestricted export wildcard, and can be installed into a clean consumer, imported in Node, type-checked from declarations, and bundled independently for browser context, browser storage, browser services, and workers. Release validation records and compares the immutable registry version and checksum. -The published export map contains 126 explicitly named entries, including 118 `compat/*` entries and no unrestricted wildcard. Every compatibility entry was referenced by the reviewed Self-hosted LiveSync source used to prepare the artefact. A final consumer audit then moved imports already covered by the focused `context`, `settings`, and `remote-configurations` entries. The current branch consequently uses 115 compatibility paths; `compat/common/models/setting.const.defaults`, `compat/common/models/setting.const.preferred`, and `compat/hub/hub` remain only as an immutable surplus in `rc.2`. They are candidates for removal from the next reviewed compatibility inventory rather than grounds for changing the published artefact. Remaining compatibility imports still expose migration-only service composition, broader model types, replication implementations, or another contract which the focused entries do not yet replace. +The compatibility inventory is regenerated from the maintained Self-hosted LiveSync consumer. Focused entries replace compatibility imports when their contracts are proven; obsolete paths are removed from the next candidate rather than retained merely because an earlier immutable release contained them. The multilingual `common/i18n` and `common/rosetta` paths have been removed in this way after ownership moved to the host. The proof found and fixed three boundary defects which source-alias consumption had hidden: compiled JSON imports required explicit output extensions, precompiled Svelte output could not safely be treated as source by the downstream Svelte pipeline, and Vite's default client conditions selected Commonlib's browser worker while building the Node CLI. Packed-consumer regressions cover the first two. The CLI now uses Vite's server conditions and treats every Node built-in reported by Commonlib's Node entry as external; the built CLI is exercised through Deno E2E. Importing root or context also no longer patches DOM prototypes, translator injection prevents the context entry from loading the complete language catalogue, and standard input and protocol output are supplied by the package-owned host contract rather than direct stream access in command handlers. Self-hosted LiveSync, its CLI, Webapp, WebPeer, plug-in source, and tests compile against that exact registry artefact without `@lib/*`. Focused downstream storage tests pass against the package-owned Node and File System Access API implementations. Commonlib also owns the Trystero implementation and version; the host retains no direct Trystero dependency, preventing two transport generations from entering one application graph. The old `src/lib` Git submodule, generated `_types` fallback, type-generation scripts, and source aliases are removed by the proof branch. -The Commonlib contract suite passes 21 tests covering Context results, both platform storage implementations, and standard I/O; its complete suite passes 1,123 tests across 62 files. Self-hosted LiveSync's three host-composition contract tests and complete 342-test unit suite across 38 files pass against the registry artefact. The plug-in, CLI, Webapp, and WebPeer production builds also pass. The CLI contract command completes its nine-step Deno workflow against the built Node artefact. +Commonlib's contract and complete suites cover Context results, both platform storage implementations, standard I/O, replication, settings, and package consumption. Self-hosted LiveSync runs the same host-composition result contract for Obsidian, CLI, and browser compositions against the exact packed artefact, followed by its unit, integration, application-build, CLI E2E, and focused real-Obsidian gates. The package-owned Trystero transport also completes the canonical Compose P2P synchronisation workflow with a local relay and two isolated CLI peers. In real Obsidian, the plug-in starts with one consistent `ObsidianServiceContext`, the representative server-selection and Setup URI Svelte dialogues mount and close through their normal controls, their mobile variants satisfy viewport, safe-area, and touch-target assertions, and the settings pane exposes only the effective deletion controls. These runtime checks complement the package tests without making Webapp maintenance the primary release gate. @@ -271,9 +271,9 @@ The 1.0 dependency review found two newly disclosed denial-of-service advisories The remaining audit report is the existing `werift` and `werift-ice` dependency on `ip`, for which npm offers no patched version. The advisory concerns `ip.isPublic()` misclassifying unusual loopback representations. The locked werift implementation uses `ip` for address encoding, decoding, format detection, and loopback filtering, but does not call `isPublic()` or `isPrivate()`. LiveSync reaches werift only through the Node CLI's injected `RTCPeerConnection`; the Obsidian plug-in and browser applications use their platform WebRTC implementation, and the plug-in artefact does not contain werift. The package-level finding is therefore accepted for the 1.0 integration preview as a non-reachable advisory in the reviewed call path, not as a general waiver. Revisit it when werift or `ip` publishes a replacement, or before any change which delegates address trust, routing, or URL access decisions to that dependency. -The local real-Obsidian suite verifies the actual loaded `ObsidianServiceContext`, all 18 services, Vault reflection, CouchDB and Object Storage transfer, remote-activity accounting, CLI-to-Obsidian encrypted synchronisation, startup scanning, two-Vault create, update, delete, ordinary rename, case-only rename, target mismatch, Hidden File Sync, Customisation Sync, and setting Markdown export. These checks establish observable results and host composition rather than relying on declaration compatibility alone. +The local real-Obsidian suite verifies the actual loaded `ObsidianServiceContext`, all 18 services, Vault reflection, CouchDB and Object Storage transfer, remote-activity accounting, CLI-to-Obsidian encrypted synchronisation, startup scanning, two-Vault create, update, delete, ordinary rename, case-only rename, target mismatch, Hidden File Sync, Customisation Sync, setting Markdown export, and two-device CouchDB, Object Storage, and P2P Setup URI workflows. These checks establish observable results and host composition rather than relying on declaration compatibility alone. -The current browser Harness has a pre-existing settings-migration initialisation timeout which reproduces on the untouched baseline. The Webapp Playwright workflow also currently reuses an unrelated process on its configured port and reaches a `Not Found` page. Neither failure is evidence for or against the package boundary. The Webapp production build and direct composition contract pass, while Webapp browser E2E remains supplementary until its runner is repaired. Current acceptance therefore relies primarily on Commonlib owner and packed-consumer tests, LiveSync unit and integration tests, Deno CLI E2E, application production builds, and the focused local real-Obsidian suite. The unrelated Harness and Playwright defects should be tracked independently. +The obsolete mocked browser Harness and its `harness-ci` workflow have been removed. Webapp production builds and the direct browser composition contract remain part of the package-boundary proof; future Webapp browser automation is a Webapp-owned workflow rather than a substitute for real Obsidian E2E. ## Scanner and Repository Consequences @@ -331,12 +331,11 @@ The following are later SDK-stabilisation gates, not blockers for accepting the - Community directory scanning distinguishes plug-in source from the reviewed dependency. - Changes which span the package and plug-in require coordinated package and downstream validation rather than one atomic source commit. - Temporary compatibility exports increase the first package surface, but their pre-1.0 status and explicit classification prevent them from becoming silent permanent contracts. -- Translation, Svelte, and platform dependencies become optional composition concerns rather than root-package side effects. +- Application translation, Svelte, and platform dependencies become optional composition concerns rather than root-package side effects; Commonlib's small English fallback remains safe by default. - Fancy Kit may gain a generally useful typed Obsidian Modal host without acquiring LiveSync policy or a mandatory Svelte dependency. -## Open Questions Before Acceptance +## Later Open Questions -- Define the focused stable language entry point which will replace the temporary compatibility subpath. - Define the minimum conflict and conditional-write guarantees required by the first public high-level client. - Continue narrowing the broad model, service-composition, and replication compatibility paths as focused result contracts become available. - Confirm whether another Fancy Kit consumer needs the framework-neutral Modal host before it is added to the Kit, or whether LiveSync should pilot the contract first. diff --git a/docs/adr/2026_07_p2p_transport_lifecycle.md b/docs/adr/2026_07_p2p_transport_lifecycle.md index b90dc0eb..adc53e77 100644 --- a/docs/adr/2026_07_p2p_transport_lifecycle.md +++ b/docs/adr/2026_07_p2p_transport_lifecycle.md @@ -2,7 +2,7 @@ ## Status -Accepted — implemented and verified against the locked Commonlib package. +Accepted — implemented and verified through Commonlib owner tests, the Compose transport suite, and the real-Obsidian setup workflow. ## Context @@ -31,12 +31,12 @@ LiveSync does not call `close()` on the `RTCPeerConnection` values returned by ` The explicit disconnect operation therefore has the following contract: -| Resource | State after the operation | -| --- | --- | -| LiveSync P2P service and RPC room | Closed immediately. | -| Trystero room membership | Left; room actions and advertisements are no longer available. | -| Nostr relay WebSockets | Closed, with automatic reconnection paused. | -| Underlying WebRTC peer | May remain idle under Trystero ownership for reuse, but cannot carry the departed room's traffic. | +| Resource | State after the operation | +| --------------------------------- | ------------------------------------------------------------------------------------------------- | +| LiveSync P2P service and RPC room | Closed immediately. | +| Trystero room membership | Left; room actions and advertisements are no longer available. | +| Nostr relay WebSockets | Closed, with automatic reconnection paused. | +| Underlying WebRTC peer | May remain idle under Trystero ownership for reuse, but cannot carry the departed room's traffic. | This operation is a logical LiveSync disconnection and a physical signalling-server disconnection. It does not promise that every browser-owned WebRTC object has been destroyed synchronously. @@ -46,6 +46,8 @@ Lifecycle operations on one `LiveSyncTrysteroReplicator` are serialised. A close Relay sockets retain their Trystero-provided close handlers. LiveSync pauses relay reconnection, closes the sockets, and later resumes reconnection through Trystero's public functions. It does not replace `socket.onclose`, because Trystero uses that handler to retire and recreate shared relay clients correctly. +P2P setup follows the transport's actual ownership model. First-device initialisation resets and scans the local database, but does not attempt to lock, reset, or upload to a non-existent central remote database. Its confirmation dialogues therefore describe preparing this device and do not present the central-server overwrite warnings or remote-configuration option. An additional device performs one explicit peer-selection and finite Fetch pass, then resumes database and Vault reflection. The generic second convergence pass remains reserved for central remote types because repeating it for P2P would ask the user to select the same peer twice. + ## Ownership Commonlib owns the LiveSync-specific P2P service, RPC, command, and lifecycle composition. Trystero owns WebRTC peer creation, sharing, reuse, stale detection, and destruction, as well as relay-client reconstruction. The Self-hosted LiveSync host owns the current Commonlib service-feature result and supplies the platform services used by its current replicator. @@ -72,13 +74,13 @@ This interferes with Trystero's shared relay clients. The public pause and resum ## Verification -Commonlib unit tests prove that normal P2P host closure calls `room.leave()` without directly closing Trystero-owned peer connections. Additional package tests cover the action API, replaceable peer-event subscriptions, multiple RPC transport disposers, and serialised open and close operations. +Commonlib unit tests prove that normal P2P host closure calls `room.leave()` without directly closing Trystero-owned peer connections. Additional package tests cover the action API, replaceable peer-event subscriptions, multiple RPC transport disposers, serialised open and close operations, local-only first-device initialisation, and one-pass additional-device Fetch. Self-hosted LiveSync unit tests prove that settings and database replacement leave panes on the current replicator, and that an explicit P2P rebuild bypasses the policy intended for ordinary replication. The canonical Compose P2P suite uses a real local Nostr relay and WebRTC implementation. It covers ordinary two-peer synchronisation, replacement of the active LiveSync replicator followed by discovery and transfer with the same peer, and explicit relay disconnection followed by paused and resumed reconnection. The lifecycle scenario is exposed only through a Docker test build and an injected CLI command runner; it is not part of the public CLI command surface. -A focused real-Obsidian test mounts the P2P status pane without a relay or remote peer, verifies its principal connection control and horizontal layout, and confirms normal process and fixture teardown. Transport replacement and relay lifecycle remain owned by the package and Compose tests rather than being duplicated in Obsidian. +The real-Obsidian P2P Setup URI workflow creates the first device, generates the second-device URI from it, accepts each peer visibly, and verifies a two-way note round-trip through a local relay. A separate focused pane test covers the principal connection control and teardown without requiring a remote peer. Transport replacement and relay-socket lifecycle remain owned by the package and Compose tests rather than being duplicated in Obsidian. ## Consequences diff --git a/docs/quick_setup.md b/docs/quick_setup.md index 181ac11d..3c8d3131 100644 --- a/docs/quick_setup.md +++ b/docs/quick_setup.md @@ -48,6 +48,22 @@ Use this path only when the remote database is new, or when this device is inten Create an ordinary test note and allow it to upload before adding another device. +## Create a Setup URI for another device + +Generate the additional-device Setup URI from the working first device. This captures the settings which that device is actually using, rather than asking another device to reuse the bootstrap URI produced during server provisioning. + +1. Open the Obsidian command palette on the first device. +2. Run `Self-hosted LiveSync: Copy settings as a new Setup URI`. +3. Enter a new passphrase which will protect this Setup URI, then select `OK`. + + ![Masked passphrase for a new additional-device Setup URI](../images/quick-setup/guide-quick-setup-copy-setup-uri-passphrase.png) + +4. Copy the resulting Setup URI, then select `OK`. + + ![Setup URI generated by the working first device](../images/quick-setup/guide-quick-setup-copy-setup-uri-result.png) + +Store the new Setup URI and its passphrase separately. The URI is encrypted, but it contains credentials and Vault settings, so continue to protect it. + ## Add another device Start with a new or separately backed-up Vault. Do not use a production Vault containing unsynchronised notes unless you have reviewed the [Fast Setup choices](./tips/fast-setup.md). @@ -56,7 +72,7 @@ Start with a new or separately backed-up Vault. Do not use a production Vault co 2. Open onboarding from the `Welcome to Self-hosted LiveSync` Notice. 3. Select `I am adding a device to an existing synchronisation setup`, then confirm that you want to add the device. 4. On `Device Setup Method`, select `Use a Setup URI (Recommended)`. -5. Paste the same Setup URI, enter its Setup URI passphrase, and select `Test Settings and Continue`. +5. Paste the new Setup URI generated by the first device, enter its Setup URI passphrase, and select `Test Settings and Continue`. 6. Review `Setup Complete: Preparing to Fetch Synchronisation Data`, then select `Restart and Fetch Data`. ![Additional-device Fetch confirmation](../images/quick-setup/guide-quick-setup-second-fetch.png) diff --git a/docs/setup_object_storage.md b/docs/setup_object_storage.md new file mode 100644 index 00000000..9c725cfe --- /dev/null +++ b/docs/setup_object_storage.md @@ -0,0 +1,108 @@ +# Set up Object Storage + +This guide establishes Object Storage synchronisation on a first device, generates an additional-device Setup URI from that working device, and verifies synchronisation in both directions. + +Object Storage uses the S3-compatible API. Prepare the following before starting: + +- an HTTPS endpoint reachable by every device; +- an access key and secret key with access to the selected bucket; +- a bucket name and region; +- a unique bucket prefix when the bucket is shared; and +- separate passphrases for Vault encryption and Setup URI encryption. + +Back up every Vault involved, and do not use Obsidian Sync, iCloud synchronisation, or another synchronisation service on the same Vault. + +## Generate the bootstrap Setup URI + +The public generator applies the Object Storage preset and records the connection as the selected remote profile. Run it from a trusted terminal: + +```sh +export remote_type=s3 +export endpoint=https://objects.example.com +export access_key= +export secret_key= +export bucket=vault-data +export region=auto +export bucket_prefix=my-vault +export passphrase= +export uri_passphrase= +deno run --minimum-dependency-age=0 --allow-env https://raw.githubusercontent.com/vrtmrz/obsidian-livesync/main/utils/setup/generate_setup_uri.ts +``` + +For providers which require them, set `force_path_style`, `use_custom_request_handler`, or `bucket_custom_headers` as described in the [setup utility reference](../utils/readme.md#object-storage). + +Store the generated Setup URI and Setup URI passphrase separately. The URI is encrypted, but it contains the Object Storage credentials. + +## Set up the first device + +Use a new bucket prefix, or a prefix whose contents you deliberately intend to replace. + +1. Install and enable Self-hosted LiveSync in the intended Vault. +2. Open onboarding from the `Welcome to Self-hosted LiveSync` Notice. +3. Select `I am setting this up for the first time`, then choose the recommended Setup URI method. +4. Paste the bootstrap Setup URI, enter its passphrase, and select `Test Settings and Continue`. + + ![Object Storage Setup URI on the first device](../images/object-storage-setup/guide-object-storage-setup-first-setup-uri.png) + +5. Select `Restart and Initialise Server`, then read and accept the final overwrite confirmation only when this Vault is the intended source of truth. + + ![Object Storage first-device initialisation](../images/object-storage-setup/guide-object-storage-setup-first-initialise.png) + + ![Final Object Storage overwrite confirmation](../images/object-storage-setup/guide-object-storage-setup-first-rebuild-confirmation.png) + +6. A new prefix may show `Fetch Remote Configuration Failed` because it has no saved configuration. Select `Skip and proceed` only for a genuinely new prefix. Otherwise, stop and check the endpoint, credentials, bucket, and prefix. + + ![Expected missing remote configuration for a new Object Storage prefix](../images/object-storage-setup/guide-object-storage-setup-missing-remote-configuration.png) + +7. Keep optional features disabled until ordinary note synchronisation works. +8. Create an ordinary test note, and keep Obsidian open until the LiveSync progress indicators have cleared. + +## Generate the second-device Setup URI + +Generate a fresh Setup URI from the working first device: + +1. Run `Self-hosted LiveSync: Copy settings as a new Setup URI` from the command palette. +2. Enter a new Setup URI passphrase. + + ![Masked passphrase for the additional-device Object Storage Setup URI](../images/object-storage-setup/guide-object-storage-setup-copy-setup-uri-passphrase.png) + +3. Copy the resulting URI. + + ![Object Storage Setup URI generated by the working first device](../images/object-storage-setup/guide-object-storage-setup-copy-setup-uri-result.png) + +Store this URI and its passphrase separately. + +## Add another device + +Start with a new or separately backed-up Vault. + +1. Install and enable Self-hosted LiveSync. +2. Open onboarding, select `I am adding a device to an existing synchronisation setup`, and choose the recommended Setup URI method. +3. Enter the URI generated by the first device and its passphrase. + + ![First-device Object Storage Setup URI entered on the second device](../images/object-storage-setup/guide-object-storage-setup-second-setup-uri.png) + +4. Select `Restart and Fetch Data`. + + ![Object Storage Fetch confirmation on the second device](../images/object-storage-setup/guide-object-storage-setup-second-fetch.png) + +5. For a new or empty Vault, choose `Overwrite all with remote files`, then `Keep local files even if not on remote`. Review the [Fast Setup guide](./tips/fast-setup.md) before choosing a different policy for a Vault containing local work. + + ![Object Storage retrieval method](../images/object-storage-setup/guide-object-storage-setup-retrieval-method.png) + + ![Object Storage local-file policy](../images/object-storage-setup/guide-object-storage-setup-local-file-policy.png) + +6. Keep Obsidian open until retrieval and file reflection finish. + +Confirm that the first device's test note appears unchanged. Create a second ordinary note on the new device, wait for its journal synchronisation to finish, and confirm that it reaches the first device. Configure optional features only after this two-way check passes. + +![First-device note received by the second Object Storage device](../images/object-storage-setup/guide-object-storage-setup-first-to-second.png) + +![Second-device note received by the first Object Storage device](../images/object-storage-setup/guide-object-storage-setup-second-to-first.png) + +## Safety notes + +- Treat the endpoint, bucket, prefix, access key, secret key, Vault passphrase, Setup URI, and Setup URI passphrase as sensitive. +- Use a distinct prefix per synchronisation set unless shared data is explicitly intended. +- Do not select first-device initialisation against an existing prefix unless replacing its contents is deliberate. +- Object Storage is not a Vault backup. Keep independent backups and test restoration separately. diff --git a/docs/setup_own_server.md b/docs/setup_own_server.md index e070b8e9..47af4d55 100644 --- a/docs/setup_own_server.md +++ b/docs/setup_own_server.md @@ -202,7 +202,7 @@ Store the Setup URI and its passphrase separately. Follow [Quick setup](./quick_setup.md#set-up-the-first-device) for the first device. It covers the current onboarding Notice, Setup URI import, server initialisation, and the safety prompts shown for a newly provisioned database. -After ordinary note synchronisation works, follow [Add another device](./quick_setup.md#add-another-device). Configure optional features only after the normal path is verified; [Hidden File Sync has its own guide](./tips/hidden-file-sync.md). +After ordinary note synchronisation works, [generate a new Setup URI on that first device](./quick_setup.md#create-a-setup-uri-for-another-device), then follow [Add another device](./quick_setup.md#add-another-device). Do not make the second device depend on retaining the provisioning-time bootstrap URI. Configure optional features only after the normal path is verified; [Hidden File Sync has its own guide](./tips/hidden-file-sync.md). --- diff --git a/docs/setup_p2p.md b/docs/setup_p2p.md new file mode 100644 index 00000000..9f03b6d0 --- /dev/null +++ b/docs/setup_p2p.md @@ -0,0 +1,121 @@ +# Set up peer-to-peer synchronisation + +This guide establishes a peer-to-peer synchronisation set, generates the second-device Setup URI on the working first device, and verifies synchronisation in both directions with explicit peer approval. + +Peer-to-peer synchronisation has no central copy of the Vault. At least one device containing the required data must be online when another device fetches it. A Nostr-compatible signalling relay helps devices discover each other, while the Vault data travels through the peer connection. + +Before starting: + +- back up both Vaults; +- prepare a signalling relay reachable by both devices; +- ensure the networks permit a WebRTC connection, or review the [P2P troubleshooting guidance](./tips/p2p-sync-tips.md); +- disable every other synchronisation service for these Vaults; and +- keep both devices awake and Obsidian open during the initial transfer. + +## Generate the bootstrap Setup URI + +Run the public generator from a trusted terminal. Supply your own relay for a controlled self-hosted setup: + +```sh +export remote_type=p2p +export p2p_relays=wss://relay.example.com +export p2p_room_id= # Optional; generated when omitted +export p2p_passphrase= # Optional; generated when omitted +export passphrase= +export uri_passphrase= +deno run --minimum-dependency-age=0 --allow-env https://raw.githubusercontent.com/vrtmrz/obsidian-livesync/main/utils/setup/generate_setup_uri.ts +``` + +The generated Setup URI contains the encrypted room, relay, and Vault settings. It deliberately omits the device-specific peer name. Store the URI and its passphrase separately. + +## Set up the first device + +1. Install and enable Self-hosted LiveSync in the intended Vault. +2. Open onboarding from the `Welcome to Self-hosted LiveSync` Notice. +3. Select `I am setting this up for the first time`, then choose the recommended Setup URI method. +4. Paste the bootstrap Setup URI, enter its passphrase, and select `Test Settings and Continue`. + + ![P2P Setup URI on the first device](../images/p2p-setup/guide-p2p-setup-first-setup-uri.png) + +5. Complete the first-device initialisation and final confirmation. This initialises the local LiveSync database; P2P has no central remote database to erase. + + ![P2P local initialisation on the first device](../images/p2p-setup/guide-p2p-setup-first-initialise.png) + + ![P2P local database confirmation on the first device](../images/p2p-setup/guide-p2p-setup-first-rebuild-confirmation.png) + +6. Keep optional features disabled until ordinary note synchronisation works. +7. Open `Self-hosted LiveSync: Open P2P Replicator` from the command palette. Select `Open connection` if signalling is disconnected. + + ![First P2P device connected to the signalling relay](../images/p2p-setup/guide-p2p-setup-first-device-connected.png) + +8. Create an ordinary test note and wait for the local LiveSync progress indicators to clear. + +## Generate the second-device Setup URI + +On the working first device: + +1. Run `Self-hosted LiveSync: Copy settings as a new Setup URI` from the command palette. +2. Enter a new Setup URI passphrase. + + ![Masked passphrase for the additional-device P2P Setup URI](../images/p2p-setup/guide-p2p-setup-copy-setup-uri-passphrase.png) + +3. Copy the resulting URI. + + ![P2P Setup URI generated by the working first device](../images/p2p-setup/guide-p2p-setup-copy-setup-uri-result.png) + +Keep the first device online. Store the new URI and its passphrase separately. + +## Add the second device + +1. Install and enable Self-hosted LiveSync in a new or separately backed-up Vault. +2. Open onboarding, select `I am adding a device to an existing synchronisation setup`, and choose the recommended Setup URI method. +3. Enter the Setup URI generated by the first device and its passphrase. + + ![First-device P2P Setup URI entered on the second device](../images/p2p-setup/guide-p2p-setup-second-setup-uri.png) + +4. Select `Restart and Fetch Data`. + + ![P2P Fetch confirmation on the second device](../images/p2p-setup/guide-p2p-setup-second-fetch.png) + +5. For a new or empty Vault, choose `Overwrite all with remote files`, then `Keep local files even if not on remote`. Review the [Fast Setup guide](./tips/fast-setup.md) before using a Vault which contains local work. + + ![P2P retrieval method](../images/p2p-setup/guide-p2p-setup-retrieval-method.png) + + ![P2P local-file policy](../images/p2p-setup/guide-p2p-setup-local-file-policy.png) + +6. In `P2P Rebuild`, confirm that the expected first-device name is shown, then select `Sync`. + + ![Selecting the first device for P2P Rebuild](../images/p2p-setup/guide-p2p-setup-select-first-device.png) + +7. On the first device, verify the requesting device name and select `Accept`. Use `Accept Temporarily` instead when approval should last only for this Obsidian session. + + ![Explicit P2P connection request on the first device](../images/p2p-setup/guide-p2p-setup-connection-request-1.png) + +8. Keep both devices open until the test note appears on the second device. + + ![First-device note received by the second P2P device](../images/p2p-setup/guide-p2p-setup-first-to-second.png) + +## Verify the return journey + +Create a second ordinary note on the second device. With automatic broadcast disabled, start the next finite synchronisation explicitly: + +1. Open the P2P Replicator pane on both devices. +2. If the previous finite peer connection no longer appears, select `Disconnect` and then `Open connection` on the first device, followed by the second device. The device which joins last is advertised to devices already in the room. +3. On the first device, select `Refresh`, verify the second-device name, then select `Replicate now`. +4. On the second device, verify the requesting first-device name and select `Accept` or `Accept Temporarily`. + + ![Explicit return-journey connection request on the second device](../images/p2p-setup/guide-p2p-setup-connection-request-2.png) + +5. Confirm that the second-device note appears unchanged on the first device. + + ![Second-device note received by the first P2P device](../images/p2p-setup/guide-p2p-setup-second-to-first.png) + +The two devices are now proven to share the same room, encryption settings, and data format in both directions. Configure automatic start, automatic broadcast, or optional features separately after this manual path works. + +## If a peer does not appear + +- Confirm that both panes show `Connected` and the same Room ID suffix. +- Select `Refresh` after the other device joins. +- Reconnect the device which should be discovered last. +- Check that the Setup URI came from the working first device and that neither device copied a peer name manually. +- Check relay reachability, WebRTC restrictions, VPNs, and TURN considerations in [Peer-to-Peer Synchronisation Tips](./tips/p2p-sync-tips.md). diff --git a/docs/tips/p2p-sync-tips.md b/docs/tips/p2p-sync-tips.md index d5def51b..6d8075d6 100644 --- a/docs/tips/p2p-sync-tips.md +++ b/docs/tips/p2p-sync-tips.md @@ -10,6 +10,8 @@ authors: # Peer-to-Peer Synchronisation Tips +For the complete first-device, Setup URI, second-device, and two-way verification procedure, see [Set up peer-to-peer synchronisation](../setup_p2p.md). + > [!IMPORTANT] > Peer-to-peer synchronisation is a supported opt-in feature. WebRTC connectivity still depends on the networks, relays, and optional TURN servers available to every device, so a working connection cannot be guaranteed in every environment. diff --git a/eslint.community.config.mjs b/eslint.community.config.mjs index f243f318..4944a5f8 100644 --- a/eslint.community.config.mjs +++ b/eslint.community.config.mjs @@ -73,8 +73,6 @@ export default defineConfig( { files: ["src/apps/browser/**/*.ts", "src/apps/webapp/**/*.ts"], rules: { - "obsidianmd/no-static-styles-assignment": "off", - "obsidianmd/prefer-create-el": "off", "obsidianmd/prefer-active-doc": "off", }, } diff --git a/images/object-storage-setup/guide-object-storage-setup-copy-setup-uri-passphrase.png b/images/object-storage-setup/guide-object-storage-setup-copy-setup-uri-passphrase.png new file mode 100644 index 00000000..e8745a39 Binary files /dev/null and b/images/object-storage-setup/guide-object-storage-setup-copy-setup-uri-passphrase.png differ diff --git a/images/object-storage-setup/guide-object-storage-setup-copy-setup-uri-result.png b/images/object-storage-setup/guide-object-storage-setup-copy-setup-uri-result.png new file mode 100644 index 00000000..998dcb95 Binary files /dev/null and b/images/object-storage-setup/guide-object-storage-setup-copy-setup-uri-result.png differ diff --git a/images/object-storage-setup/guide-object-storage-setup-first-initialise.png b/images/object-storage-setup/guide-object-storage-setup-first-initialise.png new file mode 100644 index 00000000..597d52e1 Binary files /dev/null and b/images/object-storage-setup/guide-object-storage-setup-first-initialise.png differ diff --git a/images/object-storage-setup/guide-object-storage-setup-first-rebuild-confirmation.png b/images/object-storage-setup/guide-object-storage-setup-first-rebuild-confirmation.png new file mode 100644 index 00000000..152b034d Binary files /dev/null and b/images/object-storage-setup/guide-object-storage-setup-first-rebuild-confirmation.png differ diff --git a/images/object-storage-setup/guide-object-storage-setup-first-setup-uri.png b/images/object-storage-setup/guide-object-storage-setup-first-setup-uri.png new file mode 100644 index 00000000..52242817 Binary files /dev/null and b/images/object-storage-setup/guide-object-storage-setup-first-setup-uri.png differ diff --git a/images/object-storage-setup/guide-object-storage-setup-first-to-second.png b/images/object-storage-setup/guide-object-storage-setup-first-to-second.png new file mode 100644 index 00000000..a2af3b5b Binary files /dev/null and b/images/object-storage-setup/guide-object-storage-setup-first-to-second.png differ diff --git a/images/object-storage-setup/guide-object-storage-setup-local-file-policy.png b/images/object-storage-setup/guide-object-storage-setup-local-file-policy.png new file mode 100644 index 00000000..fe29a27e Binary files /dev/null and b/images/object-storage-setup/guide-object-storage-setup-local-file-policy.png differ diff --git a/images/object-storage-setup/guide-object-storage-setup-missing-remote-configuration.png b/images/object-storage-setup/guide-object-storage-setup-missing-remote-configuration.png new file mode 100644 index 00000000..512b3b6a Binary files /dev/null and b/images/object-storage-setup/guide-object-storage-setup-missing-remote-configuration.png differ diff --git a/images/object-storage-setup/guide-object-storage-setup-retrieval-method.png b/images/object-storage-setup/guide-object-storage-setup-retrieval-method.png new file mode 100644 index 00000000..39e2c52c Binary files /dev/null and b/images/object-storage-setup/guide-object-storage-setup-retrieval-method.png differ diff --git a/images/object-storage-setup/guide-object-storage-setup-second-fetch.png b/images/object-storage-setup/guide-object-storage-setup-second-fetch.png new file mode 100644 index 00000000..84c7d411 Binary files /dev/null and b/images/object-storage-setup/guide-object-storage-setup-second-fetch.png differ diff --git a/images/object-storage-setup/guide-object-storage-setup-second-setup-uri.png b/images/object-storage-setup/guide-object-storage-setup-second-setup-uri.png new file mode 100644 index 00000000..7b5b0e37 Binary files /dev/null and b/images/object-storage-setup/guide-object-storage-setup-second-setup-uri.png differ diff --git a/images/object-storage-setup/guide-object-storage-setup-second-to-first.png b/images/object-storage-setup/guide-object-storage-setup-second-to-first.png new file mode 100644 index 00000000..412cd359 Binary files /dev/null and b/images/object-storage-setup/guide-object-storage-setup-second-to-first.png differ diff --git a/images/p2p-setup/guide-p2p-setup-connection-request-1.png b/images/p2p-setup/guide-p2p-setup-connection-request-1.png new file mode 100644 index 00000000..5144d7c9 Binary files /dev/null and b/images/p2p-setup/guide-p2p-setup-connection-request-1.png differ diff --git a/images/p2p-setup/guide-p2p-setup-connection-request-2.png b/images/p2p-setup/guide-p2p-setup-connection-request-2.png new file mode 100644 index 00000000..ce96df18 Binary files /dev/null and b/images/p2p-setup/guide-p2p-setup-connection-request-2.png differ diff --git a/images/p2p-setup/guide-p2p-setup-copy-setup-uri-passphrase.png b/images/p2p-setup/guide-p2p-setup-copy-setup-uri-passphrase.png new file mode 100644 index 00000000..815068d4 Binary files /dev/null and b/images/p2p-setup/guide-p2p-setup-copy-setup-uri-passphrase.png differ diff --git a/images/p2p-setup/guide-p2p-setup-copy-setup-uri-result.png b/images/p2p-setup/guide-p2p-setup-copy-setup-uri-result.png new file mode 100644 index 00000000..4798828f Binary files /dev/null and b/images/p2p-setup/guide-p2p-setup-copy-setup-uri-result.png differ diff --git a/images/p2p-setup/guide-p2p-setup-first-device-connected.png b/images/p2p-setup/guide-p2p-setup-first-device-connected.png new file mode 100644 index 00000000..19bdca4f Binary files /dev/null and b/images/p2p-setup/guide-p2p-setup-first-device-connected.png differ diff --git a/images/p2p-setup/guide-p2p-setup-first-initialise.png b/images/p2p-setup/guide-p2p-setup-first-initialise.png new file mode 100644 index 00000000..9cf9a206 Binary files /dev/null and b/images/p2p-setup/guide-p2p-setup-first-initialise.png differ diff --git a/images/p2p-setup/guide-p2p-setup-first-rebuild-confirmation.png b/images/p2p-setup/guide-p2p-setup-first-rebuild-confirmation.png new file mode 100644 index 00000000..9940c589 Binary files /dev/null and b/images/p2p-setup/guide-p2p-setup-first-rebuild-confirmation.png differ diff --git a/images/p2p-setup/guide-p2p-setup-first-setup-uri.png b/images/p2p-setup/guide-p2p-setup-first-setup-uri.png new file mode 100644 index 00000000..31bc7d23 Binary files /dev/null and b/images/p2p-setup/guide-p2p-setup-first-setup-uri.png differ diff --git a/images/p2p-setup/guide-p2p-setup-first-to-second.png b/images/p2p-setup/guide-p2p-setup-first-to-second.png new file mode 100644 index 00000000..ba2909c1 Binary files /dev/null and b/images/p2p-setup/guide-p2p-setup-first-to-second.png differ diff --git a/images/p2p-setup/guide-p2p-setup-local-file-policy.png b/images/p2p-setup/guide-p2p-setup-local-file-policy.png new file mode 100644 index 00000000..fe29a27e Binary files /dev/null and b/images/p2p-setup/guide-p2p-setup-local-file-policy.png differ diff --git a/images/p2p-setup/guide-p2p-setup-retrieval-method.png b/images/p2p-setup/guide-p2p-setup-retrieval-method.png new file mode 100644 index 00000000..39e2c52c Binary files /dev/null and b/images/p2p-setup/guide-p2p-setup-retrieval-method.png differ diff --git a/images/p2p-setup/guide-p2p-setup-second-fetch.png b/images/p2p-setup/guide-p2p-setup-second-fetch.png new file mode 100644 index 00000000..84c7d411 Binary files /dev/null and b/images/p2p-setup/guide-p2p-setup-second-fetch.png differ diff --git a/images/p2p-setup/guide-p2p-setup-second-setup-uri.png b/images/p2p-setup/guide-p2p-setup-second-setup-uri.png new file mode 100644 index 00000000..f37250c9 Binary files /dev/null and b/images/p2p-setup/guide-p2p-setup-second-setup-uri.png differ diff --git a/images/p2p-setup/guide-p2p-setup-second-to-first.png b/images/p2p-setup/guide-p2p-setup-second-to-first.png new file mode 100644 index 00000000..3a3b64c9 Binary files /dev/null and b/images/p2p-setup/guide-p2p-setup-second-to-first.png differ diff --git a/images/p2p-setup/guide-p2p-setup-select-first-device.png b/images/p2p-setup/guide-p2p-setup-select-first-device.png new file mode 100644 index 00000000..0165f9de Binary files /dev/null and b/images/p2p-setup/guide-p2p-setup-select-first-device.png differ diff --git a/images/quick-setup/guide-quick-setup-copy-setup-uri-passphrase.png b/images/quick-setup/guide-quick-setup-copy-setup-uri-passphrase.png new file mode 100644 index 00000000..815068d4 Binary files /dev/null and b/images/quick-setup/guide-quick-setup-copy-setup-uri-passphrase.png differ diff --git a/images/quick-setup/guide-quick-setup-copy-setup-uri-result.png b/images/quick-setup/guide-quick-setup-copy-setup-uri-result.png new file mode 100644 index 00000000..01773d1e Binary files /dev/null and b/images/quick-setup/guide-quick-setup-copy-setup-uri-result.png differ diff --git a/package-lock.json b/package-lock.json index e4b0a34c..4e17e543 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,7 +22,7 @@ "@smithy/querystring-builder": "^4.2.9", "@smithy/types": "^4.14.3", "@smithy/util-retry": "^4.4.5", - "@vrtmrz/livesync-commonlib": "0.1.0-rc.5", + "@vrtmrz/livesync-commonlib": "0.1.0-rc.6", "@vrtmrz/obsidian-plugin-kit": "0.1.2", "diff-match-patch": "^1.0.5", "fflate": "^0.8.2", @@ -57,7 +57,7 @@ "@types/transform-pouch": "^1.0.6", "@typescript-eslint/parser": "8.56.1", "@vitest/coverage-v8": "^4.1.8", - "@vrtmrz/obsidian-test-session": "0.2.2", + "@vrtmrz/obsidian-test-session": "0.2.3", "dotenv-cli": "^11.0.0", "esbuild": "0.28.1", "esbuild-plugin-inline-worker": "^0.1.1", @@ -4898,9 +4898,9 @@ } }, "node_modules/@vrtmrz/livesync-commonlib": { - "version": "0.1.0-rc.5", - "resolved": "https://registry.npmjs.org/@vrtmrz/livesync-commonlib/-/livesync-commonlib-0.1.0-rc.5.tgz", - "integrity": "sha512-Ryq0uInp2Rdnf6Nk7MVxlaWFPaCmny6CEhk0OXBXjlty+8I9IkLargZgWSuCyZcausJpLjZFlWPkFh0AKrcYxw==", + "version": "0.1.0-rc.6", + "resolved": "https://registry.npmjs.org/@vrtmrz/livesync-commonlib/-/livesync-commonlib-0.1.0-rc.6.tgz", + "integrity": "sha512-tE8f0zfqejYmDufUx0NwnyNq0JEVJJTnHFM0DY+vjS0ZDafDXP6VTuSNzGrPQeSLF+Sg1SFvuk8ELoIs1YpWXA==", "license": "MIT", "dependencies": { "@aws-sdk/client-s3": "^3.808.0", @@ -4973,9 +4973,9 @@ } }, "node_modules/@vrtmrz/obsidian-test-session": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@vrtmrz/obsidian-test-session/-/obsidian-test-session-0.2.2.tgz", - "integrity": "sha512-wWC7kKjF/2M6cIIIXTXLK4UkPADt3B81jryt3ZANlfpxCniNmXmoEYMVIhPSnZxbQNZqYLuF5RXARf9FxwYELQ==", + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@vrtmrz/obsidian-test-session/-/obsidian-test-session-0.2.3.tgz", + "integrity": "sha512-8ZX/tDr6K2jgOyFVFRKopBax0BfkV5qnPll46TKl6OaxvVyUeWv3Zhyq/w8i3+r1WwmZjOipGXuK5Ae2FnbTAg==", "dev": true, "license": "MIT", "engines": { diff --git a/package.json b/package.json index 1dac7d41..f67fde1d 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,11 @@ "precheck:compatibility": "npm run build", "check:compatibility": "node utils/check-compatibility.js --file main.js --ios 15", "check": "npm run tsc-check && npm run tsc-check:apps && npm run lint && npm run lint:community -- --quiet && npm run svelte-check && npm run check:compatibility", + "i18n:bake": "npm run i18n:yaml2json && npm run i18n:bakejson && npm run i18n:format", + "i18n:bakejson": "tsx _tools/bakei18n.ts", + "i18n:format": "prettier --config .prettierrc.mjs --write --log-level error 'src/common/messagesJson/*.json' 'src/common/messages/*.ts'", + "i18n:json2yaml": "tsx _tools/json2yaml.ts", + "i18n:yaml2json": "tsx _tools/yaml2json.ts", "unittest": "deno test -A --no-check --coverage=cov_profile --v8-flags=--expose-gc --trace-leaks ./src/", "test:unit": "vitest run --config vitest.config.unit.ts", "test:setup-tools": "bash utils/flyio/setenv.test.sh && deno test -A --config=utils/flyio/deno.jsonc --frozen --lock=utils/flyio/deno.lock utils/livesync-commonlib-version.test.ts utils/couchdb/provision.test.ts utils/setup/generate_setup_uri.test.ts utils/flyio/generate_setupuri.test.ts", @@ -51,6 +56,8 @@ "test:e2e:obsidian:couchdb-upload": "tsx test/e2e-obsidian/scripts/couchdb-upload.ts", "test:e2e:obsidian:cli-to-obsidian-sync": "tsx test/e2e-obsidian/scripts/cli-to-obsidian-sync.ts", "test:e2e:obsidian:minio-upload": "tsx test/e2e-obsidian/scripts/minio-upload.ts", + "test:e2e:obsidian:object-storage-setup-uri-workflow": "tsx test/e2e-obsidian/scripts/object-storage-setup-uri-workflow.ts", + "test:e2e:obsidian:p2p-setup-uri-workflow": "tsx test/e2e-obsidian/scripts/p2p-setup-uri-workflow.ts", "test:e2e:obsidian:startup-scan": "tsx test/e2e-obsidian/scripts/startup-scan.ts", "test:e2e:obsidian:setup-uri-workflow": "tsx test/e2e-obsidian/scripts/setup-uri-workflow.ts", "test:e2e:obsidian:two-vault-sync": "tsx test/e2e-obsidian/scripts/two-vault-sync.ts", @@ -59,6 +66,8 @@ "test:e2e:obsidian:setting-markdown-export": "tsx test/e2e-obsidian/scripts/setting-markdown-export.ts", "test:e2e:obsidian:local-suite": "tsx test/e2e-obsidian/scripts/local-suite.ts", "test:e2e:obsidian:local-suite:services": "tsx test/e2e-obsidian/scripts/local-suite.ts --manage-services", + "test:docker-p2p:start": "docker compose -f test/fixtures/p2p-relay/compose.yml up -d", + "test:docker-p2p:stop": "docker compose -f test/fixtures/p2p-relay/compose.yml down --volumes", "test:docker-couchdb:up": "npx dotenv-cli -e .env -e .test.env -- ./test/shell/couchdb-start.sh", "test:docker-couchdb:init": "npx dotenv-cli -e .env -e .test.env -- ./test/shell/couchdb-init.sh", "test:docker-couchdb:start": "npm run test:docker-couchdb:up && sleep 5 && npm run test:docker-couchdb:init", @@ -103,7 +112,7 @@ "@types/transform-pouch": "^1.0.6", "@typescript-eslint/parser": "8.56.1", "@vitest/coverage-v8": "^4.1.8", - "@vrtmrz/obsidian-test-session": "0.2.2", + "@vrtmrz/obsidian-test-session": "0.2.3", "dotenv-cli": "^11.0.0", "esbuild": "0.28.1", "esbuild-plugin-inline-worker": "^0.1.1", @@ -152,7 +161,7 @@ "@smithy/querystring-builder": "^4.2.9", "@smithy/types": "^4.14.3", "@smithy/util-retry": "^4.4.5", - "@vrtmrz/livesync-commonlib": "0.1.0-rc.5", + "@vrtmrz/livesync-commonlib": "0.1.0-rc.6", "@vrtmrz/obsidian-plugin-kit": "0.1.2", "diff-match-patch": "^1.0.5", "fflate": "^0.8.2", diff --git a/src/apps/browser/BrowserConfirm.ts b/src/apps/browser/BrowserConfirm.ts index 83d349f9..3963cb2d 100644 --- a/src/apps/browser/BrowserConfirm.ts +++ b/src/apps/browser/BrowserConfirm.ts @@ -1,4 +1,5 @@ import type { Confirm, ConfirmActionLayout } from "@vrtmrz/livesync-commonlib/compat/interfaces/Confirm"; +import { createNativeElement } from "@/apps/browserDom"; import MessageBox from "./ui/MessageBox.svelte"; import TextInputBox from "./ui/TextInputBox.svelte"; @@ -13,9 +14,9 @@ function displayMessageBox( buttons: U, title: string, commit: (ret: U[number]) => T, - actionLayout?: ConfirmActionLayout + actionLayout: ConfirmActionLayout = "vertical" ): Promise { - const el = _activeDocument.createElement("div"); + const el = createNativeElement(_activeDocument, "div"); const p = promiseWithResolvers(); mount(MessageBox, { target: el, @@ -42,7 +43,7 @@ function promptForInput( placeholder: string, isPassword?: boolean ): Promise { - const el = _activeDocument.createElement("div"); + const el = createNativeElement(_activeDocument, "div"); const p = promiseWithResolvers(); mount(TextInputBox, { target: el, @@ -103,12 +104,12 @@ export class BrowserConfirm implements Confirm { const existing = _activeDocument.querySelector(`[data-livesync-popup="${CSS.escape(key)}"]`); existing?.remove(); - const notice = _activeDocument.createElement("div"); + const notice = createNativeElement(_activeDocument, "div"); notice.className = "livesync-browser-notice"; notice.dataset.livesyncPopup = key; const [beforeText, afterText] = dialogText.split("{HERE}", 2); notice.append(beforeText); - const anchor = _activeDocument.createElement("a"); + const anchor = createNativeElement(_activeDocument, "a"); anchor.href = "#"; anchorCallback(anchor); anchor.addEventListener("click", () => notice.remove()); diff --git a/src/apps/browser/BrowserMenu.ts b/src/apps/browser/BrowserMenu.ts index 8dabf5d4..55af8921 100644 --- a/src/apps/browser/BrowserMenu.ts +++ b/src/apps/browser/BrowserMenu.ts @@ -1,4 +1,5 @@ import { promiseWithResolvers, type PromiseWithResolvers } from "octagonal-wheels/promises"; +import { createNativeElement } from "@/apps/browserDom"; import { mount } from "svelte"; import MenuView from "./ui/MenuView.svelte"; import { _activeDocument } from "@vrtmrz/livesync-commonlib/compat/common/coreEnvFunctions"; @@ -41,7 +42,7 @@ export class Menu { } waitingForClose?: PromiseWithResolvers; showAtPosition(pos: { x: number; y: number }) { - const el = _activeDocument.createElement("div"); + const el = createNativeElement(_activeDocument, "div"); if (this.waitingForClose) { this.waitingForClose.resolve(); } diff --git a/src/apps/browser/BrowserSvelteDialogManager.ts b/src/apps/browser/BrowserSvelteDialogManager.ts index 45f2518c..ebb10ed0 100644 --- a/src/apps/browser/BrowserSvelteDialogManager.ts +++ b/src/apps/browser/BrowserSvelteDialogManager.ts @@ -3,6 +3,7 @@ import { SvelteDialogManagerBase, SvelteDialogMixIn, } from "@vrtmrz/livesync-commonlib/compat/services/implements/base/SvelteDialog"; +import { createNativeElement } from "@/apps/browserDom"; import type { ServiceContext } from "@vrtmrz/livesync-commonlib/context"; import type { SvelteDialogManagerDependencies } from "@vrtmrz/livesync-commonlib/compat/services/implements/base/SvelteDialog"; import { _activeDocument } from "@vrtmrz/livesync-commonlib/compat/common/coreEnvFunctions"; @@ -15,13 +16,13 @@ export class ShimModal { isOpen: boolean = false; baseEl: HTMLElement; constructor() { - const baseEl = _activeDocument.createElement("popup"); + const baseEl = createNativeElement(_activeDocument, "popup"); this.baseEl = baseEl; - this.contentEl = _activeDocument.createElement("div"); + this.contentEl = createNativeElement(_activeDocument, "div"); this.contentEl.className = "modal-content"; - this.titleEl = _activeDocument.createElement("div"); + this.titleEl = createNativeElement(_activeDocument, "div"); this.titleEl.className = "modal-title"; - this.modalEl = _activeDocument.createElement("div"); + this.modalEl = createNativeElement(_activeDocument, "div"); this.modalEl.className = "modal"; this.modalEl.hidden = true; this.modalEl.appendChild(this.titleEl); diff --git a/src/apps/browser/createLiveSyncBrowserServiceHub.ts b/src/apps/browser/createLiveSyncBrowserServiceHub.ts index c0327653..f7cd13b0 100644 --- a/src/apps/browser/createLiveSyncBrowserServiceHub.ts +++ b/src/apps/browser/createLiveSyncBrowserServiceHub.ts @@ -1,9 +1,10 @@ import { BrowserServiceHub, type BrowserServiceHost } from "@vrtmrz/livesync-commonlib/compat/services/BrowserServices"; import type { KeyValueDatabaseFactory } from "@vrtmrz/livesync-commonlib/compat/interfaces/KeyValueDatabase"; -import type { ServiceContext } from "@vrtmrz/livesync-commonlib/context"; +import { ServiceContext } from "@vrtmrz/livesync-commonlib/context"; import { BrowserAPIService } from "@vrtmrz/livesync-commonlib/compat/services/implements/browser/BrowserAPIService"; import { BrowserConfirm } from "./BrowserConfirm"; import { LiveSyncBrowserUIService } from "./LiveSyncBrowserUIService"; +import { setLang, translateLiveSyncMessage } from "@/common/translation"; export type LiveSyncBrowserServiceHubOptions = { context?: T; @@ -26,8 +27,11 @@ function createLiveSyncBrowserHost(): BrowserServiceHo export function createLiveSyncBrowserServiceHub( options: LiveSyncBrowserServiceHubOptions = {} ): BrowserServiceHub { + const context = options.context ?? (new ServiceContext({ translate: translateLiveSyncMessage }) as T); return new BrowserServiceHub({ ...options, + context, + onDisplayLanguageChanged: setLang, host: createLiveSyncBrowserHost(), }); } diff --git a/src/apps/browser/createLiveSyncBrowserServiceHub.unit.spec.ts b/src/apps/browser/createLiveSyncBrowserServiceHub.unit.spec.ts index bae3ac92..1e0c3dbe 100644 --- a/src/apps/browser/createLiveSyncBrowserServiceHub.unit.spec.ts +++ b/src/apps/browser/createLiveSyncBrowserServiceHub.unit.spec.ts @@ -15,8 +15,8 @@ describe("LiveSync browser service context contract", () => { }); const hub = createLiveSyncBrowserServiceHub({ context }); - expect(observeServiceContext(context, "message")).toEqual({ - translation: "webapp:message", + expect(observeServiceContext(context, "moduleLocalDatabase.logWaitingForReady")).toEqual({ + translation: "webapp:moduleLocalDatabase.logWaitingForReady", receivedEvents: ["context-contract-event"], }); const composition = observeServiceComposition(hub, context); diff --git a/src/apps/browserDom.ts b/src/apps/browserDom.ts new file mode 100644 index 00000000..5b300442 --- /dev/null +++ b/src/apps/browserDom.ts @@ -0,0 +1,21 @@ +/** + * Native DOM creation for browser applications which run outside Obsidian. + * + * Obsidian adds creation helpers to its own DOM environment. The standalone + * Webapp and WebPeer hosts do not own those prototype extensions, and the + * Webapp compatibility layer implements them on top of this native boundary. + */ +type NativeDocumentCreation = Pick; + +export function createNativeElement( + document: NativeDocumentCreation, + tag: K +): HTMLElementTagNameMap[K]; +export function createNativeElement(document: NativeDocumentCreation, tag: string): HTMLElement; +export function createNativeElement(document: NativeDocumentCreation, tag: string): HTMLElement { + return document.createElement(tag); +} + +export function createNativeFragment(document: NativeDocumentCreation): DocumentFragment { + return document.createDocumentFragment(); +} diff --git a/src/apps/cli/services/NodeServiceHub.ts b/src/apps/cli/services/NodeServiceHub.ts index d3643d04..bed9cb16 100644 --- a/src/apps/cli/services/NodeServiceHub.ts +++ b/src/apps/cli/services/NodeServiceHub.ts @@ -28,6 +28,7 @@ import { path as nodePath } from "@vrtmrz/livesync-commonlib/node"; import type { KeyValueDBService } from "@vrtmrz/livesync-commonlib/compat/services/base/KeyValueDBService"; import { PouchDB } from "@/apps/cli/lib/pouchdb-node"; import { NodeServiceContext } from "./NodeServiceContext"; +import { setLang } from "@/common/translation"; export { NodeServiceContext } from "./NodeServiceContext"; @@ -95,7 +96,11 @@ export class NodeServiceHub extends InjectableServ const conflict = new InjectableConflictService(context); const fileProcessing = new InjectableFileProcessingService(context); - const setting = new NodeSettingService(context, { APIService: API }, localStoragePath); + const setting = new NodeSettingService( + context, + { APIService: API, onDisplayLanguageChanged: setLang }, + localStoragePath + ); const appLifecycle = new NodeAppLifecycleService(context, { settingService: setting, diff --git a/src/apps/webapp/bootstrap.ts b/src/apps/webapp/bootstrap.ts index 6abc278a..a99aa4c7 100644 --- a/src/apps/webapp/bootstrap.ts +++ b/src/apps/webapp/bootstrap.ts @@ -1,4 +1,5 @@ import { LiveSyncWebApp } from "./main"; +import { createNativeElement } from "@/apps/browserDom"; import { VaultHistoryStore, type VaultHistoryItem } from "./vaultSelector"; import { compatGlobal, _activeDocument } from "@vrtmrz/livesync-commonlib/compat/common/coreEnvFunctions"; @@ -55,24 +56,24 @@ async function renderHistoryList(): Promise { emptyEl.classList.toggle("is-hidden", items.length > 0); for (const item of items) { - const row = _activeDocument.createElement("div"); + const row = createNativeElement(_activeDocument, "div"); row.className = "vault-item"; - const info = _activeDocument.createElement("div"); + const info = createNativeElement(_activeDocument, "div"); info.className = "vault-item-info"; - const name = _activeDocument.createElement("div"); + const name = createNativeElement(_activeDocument, "div"); name.className = "vault-item-name"; name.textContent = item.name; - const meta = _activeDocument.createElement("div"); + const meta = createNativeElement(_activeDocument, "div"); meta.className = "vault-item-meta"; const label = item.id === lastUsedId ? "Last used" : "Used"; meta.textContent = `${label}: ${formatLastUsed(item.lastUsedAt)}`; info.append(name, meta); - const useButton = _activeDocument.createElement("button"); + const useButton = createNativeElement(_activeDocument, "button"); useButton.type = "button"; useButton.textContent = "Use this vault"; useButton.addEventListener("click", () => { diff --git a/src/apps/webapp/obsidianMock.ts b/src/apps/webapp/obsidianMock.ts index 16e563f9..06b39421 100644 --- a/src/apps/webapp/obsidianMock.ts +++ b/src/apps/webapp/obsidianMock.ts @@ -5,6 +5,7 @@ * Obsidian mock, and must not become a general test environment for the plug-in. When the Webapp compatibility boundary * is redesigned, replace this implementation here rather than extending it as a shared Obsidian simulation. */ +import { createNativeElement, createNativeFragment } from "@/apps/browserDom"; import type { Command, DataWriteOptions, @@ -456,7 +457,7 @@ class Workspace extends Events { revealLeaf() { return Promise.resolve(); } - containerEl: HTMLElement = document.createElement("div"); + containerEl: HTMLElement = createNativeElement(document, "div"); } export class App { vaultName: string = "MockVault"; @@ -543,19 +544,19 @@ export class Modal { constructor(app: App) { this.app = app; - this.contentEl = document.createElement("div"); + this.contentEl = createNativeElement(document, "div"); this.contentEl.className = "modal-content"; - this.titleEl = document.createElement("div"); + this.titleEl = createNativeElement(document, "div"); this.titleEl.className = "modal-title"; - this.modalEl = document.createElement("div"); + this.modalEl = createNativeElement(document, "div"); this.modalEl.className = "modal"; - this.modalEl.style.display = "none"; + this.modalEl.hidden = true; this.modalEl.appendChild(this.titleEl); this.modalEl.appendChild(this.contentEl); } open() { this.isOpen = true; - this.modalEl.style.display = "block"; + this.modalEl.hidden = false; if (!this.modalEl.parentElement) { document.body.appendChild(this.modalEl); } @@ -563,7 +564,7 @@ export class Modal { } close() { this.isOpen = false; - this.modalEl.style.display = "none"; + this.modalEl.hidden = true; this.onClose(); } onOpen() {} @@ -581,7 +582,7 @@ export class PluginSettingTab { constructor(app: App, plugin: Plugin) { this.app = app; this.plugin = plugin; - this.containerEl = document.createElement("div"); + this.containerEl = createNativeElement(document, "div"); } display() {} } @@ -621,12 +622,12 @@ export class Component { } export class ButtonComponent extends Component { - buttonEl: HTMLButtonElement = document.createElement("button"); + buttonEl: HTMLButtonElement = createNativeElement(document, "button"); private clickHandler: ((evt: MouseEvent) => unknown) | null = null; constructor() { super(); - this.buttonEl = document.createElement("button"); + this.buttonEl = createNativeElement(document, "button"); this.buttonEl.type = "button"; } @@ -664,12 +665,12 @@ export class ButtonComponent extends Component { } export class TextComponent extends Component { - inputEl: HTMLInputElement = document.createElement("input"); + inputEl: HTMLInputElement = createNativeElement(document, "input"); private changeHandler: ((value: string) => unknown) | null = null; constructor() { super(); - this.inputEl = document.createElement("input"); + this.inputEl = createNativeElement(document, "input"); this.inputEl.type = "text"; } @@ -708,12 +709,12 @@ export class TextComponent extends Component { } export class ToggleComponent extends Component { - inputEl: HTMLInputElement = document.createElement("input"); + inputEl: HTMLInputElement = createNativeElement(document, "input"); private changeHandler: ((value: boolean) => unknown) | null = null; constructor() { super(); - this.inputEl = document.createElement("input"); + this.inputEl = createNativeElement(document, "input"); this.inputEl.type = "checkbox"; } @@ -738,16 +739,16 @@ export class ToggleComponent extends Component { } export class DropdownComponent extends Component { - selectEl: HTMLSelectElement = document.createElement("select"); + selectEl: HTMLSelectElement = createNativeElement(document, "select"); private changeHandler: ((value: string) => unknown) | null = null; constructor() { super(); - this.selectEl = document.createElement("select"); + this.selectEl = createNativeElement(document, "select"); } addOption(v: string, d: string) { - const option = document.createElement("option"); + const option = createNativeElement(document, "option"); option.value = v; option.textContent = d; this.selectEl.appendChild(option); @@ -782,12 +783,12 @@ export class DropdownComponent extends Component { } export class SliderComponent extends Component { - inputEl: HTMLInputElement = document.createElement("input"); + inputEl: HTMLInputElement = createNativeElement(document, "input"); private changeHandler: ((value: number) => unknown) | null = null; constructor() { super(); - this.inputEl = document.createElement("input"); + this.inputEl = createNativeElement(document, "input"); this.inputEl.type = "range"; } @@ -917,7 +918,7 @@ if (typeof HTMLElement !== "undefined") { info?: DomElementInfo | string, callback?: (element: HTMLDivElement) => void ): HTMLDivElement { - const element = document.createElement("div"); + const element = createNativeElement(document, "div"); applyDomElementInfo(element, info); this.appendChild(element); callback?.(element); @@ -929,7 +930,7 @@ if (typeof HTMLElement !== "undefined") { info?: DomElementInfo | string, callback?: (element: HTMLElementTagNameMap[K]) => void ): HTMLElementTagNameMap[K] { - const element = document.createElement(tag); + const element = createNativeElement(document, tag); applyDomElementInfo(element, info); this.appendChild(element); callback?.(element); @@ -940,7 +941,7 @@ if (typeof HTMLElement !== "undefined") { info?: DomElementInfo | string, callback?: (element: HTMLSpanElement) => void ): HTMLSpanElement { - const element = document.createElement("span"); + const element = createNativeElement(document, "span"); applyDomElementInfo(element, info); this.appendChild(element); callback?.(element); @@ -980,7 +981,7 @@ export class FuzzySuggestModal { function parseHtmlFragment(html: string): DocumentFragment { const parsed = new DOMParser().parseFromString(html, "text/html"); - const fragment = document.createDocumentFragment(); + const fragment = createNativeFragment(document); for (const child of [...parsed.body.childNodes]) { fragment.appendChild(document.importNode(child, true)); } @@ -999,7 +1000,7 @@ export class ItemView {} export class WorkspaceLeaf {} export function sanitizeHTMLToDom(html: string) { - const div = document.createElement("div"); + const div = createNativeElement(document, "div"); div.appendChild(parseHtmlFragment(html)); return div; } diff --git a/src/common/messages/combinedMessages.dev.ts b/src/common/messages/combinedMessages.dev.ts new file mode 100644 index 00000000..c4e10feb --- /dev/null +++ b/src/common/messages/combinedMessages.dev.ts @@ -0,0 +1,50 @@ +import { PartialMessages as def } from "./def.ts"; +import { PartialMessages as es } from "./es.ts"; +import { PartialMessages as fr } from "./fr.ts"; +import { PartialMessages as he } from "./he.ts"; +import { PartialMessages as ja } from "./ja.ts"; +import { PartialMessages as ko } from "./ko.ts"; +import { PartialMessages as ru } from "./ru.ts"; +import { PartialMessages as zh } from "./zh.ts"; +import { PartialMessages as zhTw } from "./zh-tw.ts"; +import { expandKeywords, type MESSAGE } from "@/common/rosetta.ts"; + +type MessageKeys = keyof typeof def.def; + +const messages = { + ...def, + ...es, + ...fr, + ...he, + ...ja, + ...ko, + ...ru, + ...zh, + ...zhTw, +}; +const w = Object.entries(messages) + .map(([lang, messageDefs]) => Object.entries(messageDefs).map(([key, value]) => [key, [lang, value]] as const)) + .flat(); + +const _allMessages = w.reduce( + (acc, [key, value]) => { + if (!acc[key]) acc[key] = {}; + acc[key][value[0]] = value[1]; + return acc; + }, + {} as Record> +) as Record; + +const expandedMessage = { + ...expandKeywords(_allMessages, "def"), + ...expandKeywords(_allMessages, "es"), + ...expandKeywords(_allMessages, "fr"), + ...expandKeywords(_allMessages, "ja"), + ...expandKeywords(_allMessages, "ko"), + ...expandKeywords(_allMessages, "ru"), + ...expandKeywords(_allMessages, "zh"), + ...expandKeywords(_allMessages, "zh-tw"), +}; + +export const allMessages = expandedMessage as { [key: string]: MESSAGE }; +export { type MessageKeys }; diff --git a/src/common/messages/combinedMessages.prod.ts b/src/common/messages/combinedMessages.prod.ts new file mode 100644 index 00000000..529229ca --- /dev/null +++ b/src/common/messages/combinedMessages.prod.ts @@ -0,0 +1,9379 @@ +export const allMessages: Readonly>>> = { + "(Active)": { + def: "(Active)", + es: "(Activo)", + ja: "(有効)", + ko: "(활성)", + ru: "(Активна)", + zh: "(已启用)", + "zh-tw": "(已啟用)", + }, + "(BETA) Always overwrite with a newer file": { + def: "(BETA) Always overwrite with a newer file", + es: "(BETA) Sobrescribir siempre con archivo más nuevo", + fr: "(BÊTA) Toujours écraser avec un fichier plus récent", + he: "(BETA) תמיד לדרוס עם קובץ חדש יותר", + ja: "(ベータ機能) 常に新しいファイルで上書きする", + ko: "(베타) 항상 새로운 파일로 덮어쓰기", + ru: "(БЕТА) Всегда перезаписывать более новым файлом", + zh: "始终使用更新的文件覆盖(测试版)", + }, + "(Beta) Use ignore files": { + def: "(Beta) Use ignore files", + es: "(Beta) Usar archivos de ignorar", + fr: "(Bêta) Utiliser les fichiers d'exclusion", + he: "(בטא) שימוש בקבצי התעלמות", + ja: "(ベータ機能) 除外ファイル(ignore)の使用", + ko: "(베타) 제외 규칙 파일 사용", + ru: "(Бета) Использовать файлы игнорирования", + zh: "(测试版)使用忽略文件", + }, + "(Days passed, 0 to disable automatic-deletion)": { + def: "(Days passed, 0 to disable automatic-deletion)", + es: "(Días transcurridos, 0 para desactivar)", + fr: "(Jours écoulés, 0 pour désactiver la suppression automatique)", + he: "(ימים שעברו; 0 לביטול מחיקה אוטומטית)", + ja: "(経過日数、0で自動削除を無効化)", + ko: "(지난 일수, 0으로 설정하면 자동 삭제 비활성화)", + ru: "(Дней прошло, 0 для отключения автоматического удаления)", + zh: "(已过天数,0为禁用自动删除)", + }, + "(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.": + { + def: "(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.", + es: "(Ej: Leer chunks online) Lee chunks directamente en línea. Aumente tamaño de chunks personalizados", + fr: "(ex. Lire les fragments en ligne) Si cette option est activée, LiveSync lit les fragments directement en ligne au lieu de les répliquer localement. L'augmentation de la taille personnalisée des fragments est recommandée.", + he: "(לדוגמה: קריאת נתחים אונליין) אם אפשרות זו מופעלת, LiveSync קורא נתחים ישירות מהשרת מבלי לשכפל אותם מקומית. מומלץ להגדיל את גודל הנתח המותאם אישית.", + ja: "(例: チャンクをオンラインで読む) このオプションを有効にすると、LiveSyncはチャンクをローカルに複製せず、直接オンラインで読み込みます。カスタムチャンクサイズを増やすことをお勧めします。", + ko: "(예: 청크를 원격에서 읽음) 이 옵션을 활성화하면, LiveSync는 청크를 로컬에 복제하지 않고 원격에서 직접 읽습니다. 커스텀 청크 크기를 키우는 것을 권장합니다.", + ru: "(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.", + zh: "(例如,在线读取块)如果启用此选项,LiveSync 将直接在线读取块,而不是在本地复制块。建议增加自定义块大小", + }, + "(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.": + { + def: "(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.", + es: "(MB) Saltar cambios en archivos locales/remotos mayores a este tamaño. Si se reduce, se usará versión nueva", + fr: "(Mo) Si cette valeur est définie, les modifications des fichiers locaux et distants plus grands que cette taille seront ignorées. Si le fichier redevient plus petit, une version plus récente sera utilisée.", + he: "(MB) אם ערך זה מוגדר, שינויים בקבצים מקומיים ומרוחקים הגדולים מגודל זה יידלגו. אם הקובץ יקטן שוב, ייעשה שימוש בגרסה החדשה יותר.", + ja: "(MB) この値を設定すると、これより大きいサイズのローカルファイルやリモートファイルの変更はスキップされます。ファイルが再び小さくなった場合は、新しいものが使用されます。", + ko: "(MB) 이 값이 설정되면, 이보다 큰 로컬 및 원격 파일의 변경 사항은 건너뜁니다. 파일이 다시 작아지면 더 새로운 파일이 사용됩니다.", + ru: "(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.", + zh: "(MB)如果设置了此项,大于此大小的本地和远程文件的更改将被跳过。如果文件再次变小,将使用更新的文件", + }, + "(Mega chars)": { + def: "(Mega chars)", + es: "(Millones de caracteres)", + fr: "(Méga caractères)", + he: "(מגה תווים)", + ja: "(メガ文字)", + ko: "(메가 문자)", + ru: "(Мега символов)", + zh: "(百万字符)", + }, + "(Not recommended) If set, credentials will be stored in the file.": { + def: "(Not recommended) If set, credentials will be stored in the file.", + es: "(No recomendado) Almacena credenciales en el archivo", + fr: "(Non recommandé) Si activé, les identifiants seront stockés dans le fichier.", + he: "(לא מומלץ) אם מוגדר, פרטי הגישה יישמרו בקובץ.", + ja: "(非推奨) 設定した場合、認証情報がファイルに保存されます。", + ko: "(권장하지 않음) 설정한 경우 자격 증명이 파일에 저장됩니다.", + ru: "(Not recommended) If set, credentials will be stored in the file.", + zh: "(不建议)如果设置,凭据将存储在文件中", + }, + "(Obsolete) Use an old adapter for compatibility": { + def: "(Obsolete) Use an old adapter for compatibility", + es: "(Obsoleto) Usar adaptador antiguo", + fr: "(Obsolète) Utiliser un ancien adaptateur pour la compatibilité", + he: "(מיושן) שימוש במתאם ישן לתאימות לאחור", + ja: "(廃止済み)古いアダプターを互換性のために利用", + ko: "(사용 중단) 호환성을 위해 이전 어댑터 사용", + ru: "(Устарело) Использовать старый адаптер для совместимости", + zh: "(已弃用)为兼容性使用旧适配器", + }, + "(RegExp) Empty to sync all files. Set filter as a regular expression to limit synchronising files.": { + def: "(RegExp) Empty to sync all files. Set filter as a regular expression to limit synchronising files.", + es: "(RegExp) Déjelo vacío para sincronizar todos los archivos. Defina un filtro como expresión regular para limitar los archivos que se sincronizan.", + ja: "(正規表現)空欄で全ファイルを同期します。正規表現を指定すると、同期対象のファイルを絞り込めます。", + ko: "(정규식) 비워 두면 모든 파일을 동기화합니다. 정규식을 지정하면 동기화할 파일을 제한할 수 있습니다.", + ru: "(RegExp) Оставьте пустым, чтобы синхронизировать все файлы. Укажите регулярное выражение, чтобы ограничить синхронизируемые файлы.", + zh: "(正则表达式)留空表示同步所有文件。可设置正则表达式来限制需要同步的文件。", + "zh-tw": "(正則表示式)留空即同步所有檔案。設定正則表示式可限制要同步的檔案。", + }, + "(RegExp) If this is set, any changes to local and remote files that match this will be skipped.": { + def: "(RegExp) If this is set, any changes to local and remote files that match this will be skipped.", + es: "(RegExp) Si se establece, se omitirá cualquier cambio en archivos locales y remotos que coincida con este patrón.", + ja: "(正規表現)設定すると、これに一致するローカル/リモートファイルの変更はすべてスキップされます。", + ko: "(정규식) 설정하면 이 패턴과 일치하는 로컬 및 원격 파일 변경은 모두 건너뜁니다.", + ru: "(RegExp) Если задано, любые изменения локальных и удалённых файлов, соответствующих этому шаблону, будут пропускаться.", + zh: "(正则表达式)如果已设置,则所有匹配此模式的本地和远端文件变更都会被跳过。", + "zh-tw": "(正則表示式)若已設定,所有符合此模式的本機與遠端檔案變更都會被略過。", + }, + "(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.": + { + def: "(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.", + es: "(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。", + ja: "(別の PC やスマートフォンですでに同期を利用している場合に選択してください。)この端末を既存の LiveSync 構成に追加する場合に適しています。", + ko: "(다른 컴퓨터나 스마트폰에서 이미 동기화를 사용 중인 경우 선택하세요.) 이 장치를 기존 LiveSync 구성에 추가하려는 경우에 적합합니다。", + ru: "(Выберите этот вариант, если вы уже используете синхронизацию на другом компьютере или смартфоне.) Он подходит, если вы хотите добавить это устройство к уже существующей конфигурации LiveSync。", + zh: "(如果你已经在另一台电脑或手机上使用同步,请选择此项。)此选项适合将当前设备加入现有 LiveSync 配置的用户。", + "zh-tw": + "(如果你已經在另一台電腦或手機上使用同步,請選擇此項。)此選項適合將目前裝置加入既有 LiveSync 設定的使用者。", + }, + "(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.": + { + def: "(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.", + es: "(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。", + ja: "(この端末を最初の同期端末として設定する場合に選択してください。)LiveSync を初めて利用し、最初から設定したい場合に適しています。", + ko: "(이 장치를 첫 번째 동기화 장치로 설정하는 경우 선택하세요.) LiveSync를 처음 사용하며 처음부터 설정하려는 경우에 적합합니다。", + ru: "(Выберите этот вариант, если настраиваете это устройство как первое устройство синхронизации.) Он подходит, если вы впервые используете LiveSync и хотите настроить всё с нуля。", + zh: "(如果你正在将此设备配置为第一台同步设备,请选择此项。)此选项适合初次使用 LiveSync,并希望从头开始配置的用户。", + "zh-tw": + "(如果你正在將此裝置設定為第一台同步裝置,請選擇此項。)此選項適合初次使用 LiveSync,並希望從頭開始設定的使用者。", + }, + "> [!INFO]- The connected devices have been detected as follows:\n${devices}": { + def: "> [!INFO]- The connected devices have been detected as follows:\n${devices}", + ja: "> [!INFO]- 次の接続済みデバイスが検出されました:\n${devices}", + ko: "> [!INFO]- 다음 연결된 기기가 감지되었습니다:\n${devices}", + ru: "> [!INFO]- Обнаружены следующие подключённые устройства:\n${devices}", + zh: "> [!INFO]- 已检测到以下已连接设备:\n${devices}", + "zh-tw": "> [!INFO]- 已偵測到以下已連線裝置:\n${devices}", + }, + "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.": + { + def: "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.", + es: "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。", + ja: "Setup URI は、サーバーアドレスと認証情報を含む 1 本の文字列です。サーバーのインストールスクリプトで生成された URI がある場合は、それを使うと簡単かつ安全に設定できます。", + ko: "설정 URI는 서버 주소와 인증 정보를 포함한 단일 문자열입니다. 서버 설치 스크립트가 URI를 생성했다면 이를 사용하면 간단하고 안전하게 구성할 수 있습니다。", + ru: "Setup URI — это одна строка текста, содержащая адрес сервера и данные аутентификации. Если URI был создан скриптом установки сервера, его использование обеспечивает простую и безопасную настройку。", + zh: "Setup URI 是一段包含服务器地址与认证信息的文本。如果服务器安装脚本已经生成了 URI,使用它可以更简单且更安全地完成配置。", + "zh-tw": + "Setup URI 是一段包含伺服器位址與驗證資訊的文字。如果伺服器安裝腳本已經產生 URI,使用它可以更簡單且更安全地完成設定。", + }, + "Access Key": { + def: "Access Key", + es: "Clave de acceso", + fr: "Clé d'accès", + he: "מפתח גישה", + ja: "アクセスキー", + ko: "액세스 키", + ru: "Ключ доступа", + zh: "访问密钥", + }, + Activate: { + def: "Activate", + es: "Activar", + ja: "有効化", + ko: "활성화", + ru: "Активировать", + zh: "启用", + "zh-tw": "啟用", + }, + "Active Remote Configuration": { + def: "Active Remote Configuration", + fr: "Configuration distante active", + he: "תצורת שרת מרוחק פעיל", + ru: "Активная удалённая конфигурация", + zh: "生效中的远程配置", + "zh-tw": "目前啟用的遠端設定", + }, + "Add default patterns": { + def: "Add default patterns", + es: "Añadir patrones predeterminados", + ja: "デフォルトパターンを追加", + ko: "기본 패턴 추가", + ru: "Добавить шаблоны по умолчанию", + zh: "添加默认模式", + "zh-tw": "新增預設模式", + }, + "Add new connection": { + def: "Add new connection", + es: "Añadir conexión", + ja: "接続を追加", + ko: "연결 추가", + ru: "Добавить подключение", + zh: "新增连接", + "zh-tw": "新增連線", + }, + "All devices have the same progress value (${progress}). Your devices seem to be synchronised. And be able to proceed with Garbage Collection.": + { + def: "All devices have the same progress value (${progress}). Your devices seem to be synchronised. And be able to proceed with Garbage Collection.", + ja: "すべてのデバイスで進捗値が同じです(${progress})。デバイスは同期されているようなので、Garbage Collection を続行できます。", + ko: "모든 기기의 진행 값이 동일합니다(${progress}). 기기들이 동기화된 것으로 보이므로 Garbage Collection을 진행할 수 있습니다.", + ru: "У всех устройств одинаковое значение прогресса (${progress}). Похоже, ваши устройства синхронизированы, и можно продолжать Garbage Collection.", + zh: "所有设备的进度值均相同(${progress})。看起来你的设备已经同步,可以继续执行垃圾回收。", + "zh-tw": "所有裝置的進度值均相同(${progress})。看起來你的裝置已同步,可以繼續執行垃圾回收。", + }, + "Always prompt merge conflicts": { + def: "Always prompt merge conflicts", + es: "Siempre preguntar en conflictos", + fr: "Toujours demander pour les conflits de fusion", + he: "תמיד להציג בקשת אישור לקונפליקטי מיזוג", + ja: "常に競合は手動で解決する", + ko: "항상 병합 충돌 알림", + ru: "Всегда запрашивать разрешение конфликтов слияния", + zh: "始终提示合并冲突", + "zh-tw": "總是提示合併衝突", + }, + Analyse: { + def: "Analyse", + fr: "Analyser", + he: "ניתוח", + ru: "Анализировать", + zh: "立即分析", + "zh-tw": "分析", + }, + "Analyse database usage": { + def: "Analyse database usage", + fr: "Analyser l'utilisation de la base de données", + he: "ניתוח שימוש במסד נתונים", + ja: "データベース使用状況を分析", + ko: "데이터베이스 사용량 분석", + ru: "Анализ использования базы данных", + zh: "分析数据库使用情况", + "zh-tw": "分析資料庫使用情況", + }, + "Analyse database usage and generate a TSV report for diagnosis yourself. You can paste the generated report with any spreadsheet you like.": + { + def: "Analyse database usage and generate a TSV report for diagnosis yourself. You can paste the generated report with any spreadsheet you like.", + fr: "Analyser l'utilisation de la base de données et générer un rapport TSV pour un diagnostic personnel. Vous pouvez coller le rapport généré dans le tableur de votre choix.", + he: 'נתח שימוש במסד הנתונים וצור דו"ח TSV לאבחון עצמי. ניתן להדביק את הדו"ח שנוצר בכל גיליון אלקטרוני.', + ja: "データベース使用状況を分析し、自分で診断できるよう TSV レポートを生成します。生成したレポートは任意のスプレッドシートに貼り付けて確認できます。", + ko: "데이터베이스 사용량을 분석하고 직접 진단할 수 있도록 TSV 보고서를 생성합니다. 생성된 보고서는 원하는 스프레드시트에 붙여 넣어 확인할 수 있습니다.", + ru: "Проанализируйте использование базы данных и создайте TSV-отчёт для самостоятельной диагностики. Полученный отчёт можно вставить в любую удобную для вас таблицу.", + zh: "分析数据库使用情况并生成 TSV 报告以供您自行诊断。您可以将生成的报告粘贴到您喜欢的任何电子表格中。", + "zh-tw": + "分析資料庫使用情況並產生 TSV 報告,方便你自行診斷。你可以將產生的報告貼到任何慣用的試算表中查看。", + }, + "Apply Latest Change if Conflicting": { + def: "Apply Latest Change if Conflicting", + es: "Aplicar último cambio en conflictos", + fr: "Appliquer la dernière modification en cas de conflit", + he: "החל שינוי אחרון בעת קונפליקט", + ja: "競合がある場合は最新の変更を適用する", + ko: "충돌 시 최신 변경 사항 적용", + ru: "Применить последнее изменение при конфликте", + zh: "如果冲突则应用最新更改", + "zh-tw": "發生衝突時套用最新變更", + }, + "Apply preset configuration": { + def: "Apply preset configuration", + es: "Aplicar configuración predefinida", + fr: "Appliquer une configuration prédéfinie", + he: "החל תצורה קבועה מראש", + ja: "プリセットを適用する", + ko: "프리셋 구성 적용", + ru: "Применить предустановленную конфигурацию", + zh: "应用预设配置", + "zh-tw": "套用預設配置", + }, + "Ask a passphrase at every launch": { + def: "Ask a passphrase at every launch", + es: "Solicitar la frase de contraseña en cada inicio", + ja: "起動のたびにパスフレーズを確認", + ko: "시작할 때마다 암호문구 묻기", + ru: "Запрашивать парольную фразу при каждом запуске", + zh: "每次启动时询问密码短语", + "zh-tw": "每次啟動時都詢問密語", + }, + "Automatically Sync all files when opening Obsidian.": { + def: "Automatically Sync all files when opening Obsidian.", + es: "Sincronizar automáticamente todos los archivos al abrir Obsidian", + fr: "Synchroniser automatiquement tous les fichiers à l'ouverture d'Obsidian.", + he: "סנכרן את כל הקבצים אוטומטית עם פתיחת Obsidian.", + ja: "Obsidian起動時にすべてのファイルを自動同期します。", + ko: "Obsidian을 열 때 모든 파일을 자동으로 동기화합니다.", + ru: "Автоматически синхронизировать все файлы при открытии Obsidian.", + zh: "打开 Obsidian 时自动同步所有文件", + "zh-tw": "開啟 Obsidian 時自動同步所有檔案。", + }, + Back: { + def: "Back", + es: "Volver", + ja: "戻る", + ko: "뒤로", + ru: "Назад", + zh: "返回", + "zh-tw": "返回", + }, + "Back to non-configured": { + def: "Back to non-configured", + es: "Volver a no configurado", + ja: "未設定状態に戻す", + ko: "미구성 상태로 되돌리기", + ru: "Вернуть в состояние без настройки", + zh: "恢复为未配置状态", + "zh-tw": "恢復為未設定狀態", + }, + "Batch database update": { + def: "Batch database update", + es: "Actualización por lotes de BD", + fr: "Mise à jour groupée de la base de données", + he: "עדכון אצווה למסד נתונים", + ja: "データベースのバッチ更新", + ko: "일괄 데이터베이스 업데이트", + ru: "Пакетное обновление базы данных", + zh: "批量数据库更新", + "zh-tw": "批次更新資料庫", + }, + "Batch limit": { + def: "Batch limit", + es: "Límite de lotes", + fr: "Limite de lot", + he: "מגבלת אצווה", + ja: "バッチの上限", + ko: "일괄 제한", + ru: "Пакетный лимит", + zh: "批量限制", + "zh-tw": "批次上限", + }, + "Batch size": { + def: "Batch size", + es: "Tamaño de lote", + fr: "Taille de lot", + he: "גודל אצווה", + ja: "バッチ容量", + ko: "일괄 크기", + ru: "Размер пакета", + zh: "批量大小", + "zh-tw": "批次大小", + }, + "Batch size of on-demand fetching": { + def: "Batch size of on-demand fetching", + es: "Tamaño de lote para obtención bajo demanda", + fr: "Taille de lot pour la récupération à la demande", + he: "גודל אצווה במשיכה לפי דרישה", + ja: "オンデマンド取得のバッチサイズ", + ko: "필요 시 가져올 청크 묶음 크기", + ru: "Размер пакета при запросе по требованию", + zh: "按需获取的批量大小", + "zh-tw": "按需抓取的批次大小", + }, + "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.": + { + def: "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.", + es: "Antes de v0.17.16 usábamos adaptador antiguo. Nuevo adaptador requiere reconstruir BD local. Desactive cuando pueda", + fr: "Avant la version v0.17.16, nous utilisions un ancien adaptateur pour la base de données locale. Le nouvel adaptateur est désormais recommandé. Cependant, il nécessite une reconstruction de la base locale. Veuillez désactiver cette option lorsque vous aurez suffisamment de temps. Si elle reste activée, il vous sera également demandé de la désactiver lors de la récupération depuis la base distante.", + he: "לפני גרסה 0.17.16, השתמשנו במתאם ישן למסד הנתונים המקומי. כעת המתאם החדש מועדף. עם זאת, הדבר מצריך בנייה מחדש של מסד הנתונים המקומי. אנא כבה אפשרות זו כשיש לך זמן פנוי. אם תשאיר אותה מופעלת, גם בעת משיכה ממסד הנתונים המרוחק, תתבקש לכבות אותה.", + ja: "v0.17.6までは古いアダプターをローカル用のデータベースに使用していましたが、現在は新しいアダプターを推奨しています。しかし、新しいアダプターに変更するにはローカルデータベースの再構築が必要です。有効のままにしておくと、リモートデータベースからフェッチする場合に、この設定を無効にするかの質問が表示されます。", + ko: "v0.17.16 이전에는 로컬 데이터베이스에 이전 어댑터를 사용했습니다. 이제는 새로운 어댑터를 권장합니다. 하지만 로컬 데이터베이스 재구축이 필요합니다. 충분한 시간이 있을 때 이 토글을 비활성화해 주세요. 활성화된 상태로 두면 원격 데이터베이스에서 가져올 때도 이를 비활성화하라는 메시지가 나타납니다.", + ru: "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.", + zh: "在 v0.17.16 之前,我们使用旧适配器作为本地数据库。现在首选新适配器。但是,它需要重建本地数据库。请在有足够时间时禁用此开关。如果保持启用状态,并且在从远程数据库获取时,系统将要求您禁用此开关。", + }, + "Bucket Name": { + def: "Bucket Name", + es: "Nombre del bucket", + fr: "Nom du bucket", + he: "שם דלי (Bucket)", + ja: "バケット名", + ko: "버킷 이름", + ru: "Имя бакета", + zh: "存储桶名称", + "zh-tw": "儲存桶名稱", + }, + Cancel: { + def: "Cancel", + es: "Cancelar", + ja: "キャンセル", + ko: "취소", + ru: "Отмена", + zh: "取消", + "zh-tw": "取消", + }, + "Cancel Garbage Collection": { + def: "Cancel Garbage Collection", + ja: "Garbage Collection をキャンセル", + ko: "Garbage Collection 취소", + ru: "Отменить Garbage Collection", + zh: "取消垃圾回收", + "zh-tw": "取消垃圾回收", + }, + "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.": + { + def: "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: { + def: "Check", + fr: "Vérifier", + he: "בדוק", + ru: "Проверить", + zh: "立即检查", + "zh-tw": "檢查", + }, + "Check and convert non-path-obfuscated files": { + def: "Check and convert non-path-obfuscated files", + es: "Comprobar y convertir archivos sin ofuscación de ruta", + ja: "パス難読化されていないファイルを確認して変換", + ko: "경로 난독화되지 않은 파일 검사 및 변환", + ru: "Проверить и преобразовать файлы без обфускации пути", + zh: "检查并转换未进行路径混淆的文件", + "zh-tw": "檢查並轉換未進行路徑混淆的檔案", + }, + "Check for documents that have not been converted to path-obfuscated IDs and convert them if necessary.": { + def: "Check for documents that have not been converted to path-obfuscated IDs and convert them if necessary.", + es: "Comprueba los documentos que aún no se hayan convertido a identificadores con ruta ofuscada y conviértelos si es necesario.", + ja: "まだパス難読化 ID に変換されていないドキュメントを確認し、必要に応じて変換します。", + ko: "아직 경로 난독화 ID로 변환되지 않은 문서를 확인하고 필요하면 변환합니다.", + ru: "Проверяет документы, которые ещё не были преобразованы в path-obfuscated ID, и при необходимости преобразует их.", + zh: "检查尚未转换为路径混淆 ID 的文档,并在需要时将其转换。", + "zh-tw": "檢查尚未轉換為路徑混淆 ID 的文件,並在需要時進行轉換。", + }, + "cmdConfigSync.showCustomizationSync": { + def: "Show Customization sync", + es: "Mostrar sincronización de personalización", + fr: "Afficher la synchronisation de personnalisation", + he: "הצג סנכרון התאמה אישית", + ja: "カスタマイズ同期を表示", + ko: "사용자 설정 동기화 표시", + ru: "Показать синхронизацию настроек", + zh: "显示自定义同步", + "zh-tw": "顯示自訂同步", + }, + "Comma separated `.gitignore, .dockerignore`": { + def: "Comma separated `.gitignore, .dockerignore`", + es: "Separados por comas: `.gitignore, .dockerignore`", + fr: "Séparés par des virgules `.gitignore, .dockerignore`", + he: "רשימה מופרדת בפסיקים `.gitignore, .dockerignore`", + ja: "カンマ区切り `.gitignore, .dockerignore`", + ko: "쉼표로 구분된 `.gitignore, .dockerignore`", + ru: "Через запятую `.gitignore, .dockerignore`", + zh: "用逗号分隔,例如 `.gitignore, .dockerignore`", + }, + "Compaction in progress on remote database...": { + def: "Compaction in progress on remote database...", + ja: "リモートデータベースでコンパクションを実行中です...", + ko: "원격 데이터베이스에서 압축을 진행 중입니다...", + ru: "Выполняется компакция удалённой базы данных...", + zh: "正在远程数据库上执行压缩...", + "zh-tw": "正在遠端資料庫上執行壓縮...", + }, + "Compaction on remote database completed successfully.": { + def: "Compaction on remote database completed successfully.", + ja: "リモートデータベースでのコンパクションが正常に完了しました。", + ko: "원격 데이터베이스 압축이 성공적으로 완료되었습니다.", + ru: "Компакция удалённой базы данных успешно завершена.", + zh: "远程数据库压缩已成功完成。", + "zh-tw": "遠端資料庫壓縮已成功完成。", + }, + "Compaction on remote database failed.": { + def: "Compaction on remote database failed.", + ja: "リモートデータベースでのコンパクションに失敗しました。", + ko: "원격 데이터베이스 압축에 실패했습니다.", + ru: "Компакция удалённой базы данных завершилась ошибкой.", + zh: "远程数据库压缩失败。", + "zh-tw": "遠端資料庫壓縮失敗。", + }, + "Compaction on remote database timed out.": { + def: "Compaction on remote database timed out.", + ja: "リモートデータベースでのコンパクションがタイムアウトしました。", + ko: "원격 데이터베이스 압축 시간이 초과되었습니다.", + ru: "Время ожидания компакции удалённой базы данных истекло.", + zh: "远程数据库压缩超时。", + "zh-tw": "遠端資料庫壓縮逾時。", + }, + "Compare the content of files between on local database and storage. If not matched, you will be asked which one you want to keep.": + { + def: "Compare the content of files between on local database and storage. If not matched, you will be asked which one you want to keep.", + es: "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.", + ja: "ローカルデータベースとストレージ上のファイル内容を比較します。一致しない場合は、どちらを残すか選択できます。", + ko: "로컬 데이터베이스와 저장소 간의 파일 내용을 비교합니다. 일치하지 않으면 어떤 쪽을 유지할지 묻게 됩니다.", + ru: "Сравнивает содержимое файлов между локальной базой данных и хранилищем. Если они не совпадут, вам предложат выбрать, какую версию сохранить.", + zh: "比较本地数据库与存储中的文件内容;如果不一致,你将被询问要保留哪一份。", + "zh-tw": "比較本機資料庫與儲存空間中的檔案內容;若不一致,系統會詢問你要保留哪一份。", + }, + "Compatibility (Conflict Behaviour)": { + def: "Compatibility (Conflict Behaviour)", + es: "Compatibilidad (comportamiento de conflictos)", + ja: "互換性(競合時の挙動)", + ko: "호환성 (충돌 동작)", + ru: "Совместимость (поведение при конфликтах)", + zh: "兼容性(冲突行为)", + "zh-tw": "相容性(衝突行為)", + }, + "Compatibility (Database structure)": { + def: "Compatibility (Database structure)", + es: "Compatibilidad (estructura de la base de datos)", + ja: "互換性(データベース構造)", + ko: "호환성 (데이터베이스 구조)", + ru: "Совместимость (структура базы данных)", + zh: "兼容性(数据库结构)", + "zh-tw": "相容性(資料庫結構)", + }, + "Compatibility (Internal API Usage)": { + def: "Compatibility (Internal API Usage)", + es: "Compatibilidad (uso de la API interna)", + ja: "互換性(内部 API の利用)", + ko: "호환성 (내부 API 사용)", + ru: "Совместимость (использование внутреннего API)", + zh: "兼容性(内部 API 使用)", + "zh-tw": "相容性(內部 API 使用)", + }, + "Compatibility (Metadata)": { + def: "Compatibility (Metadata)", + es: "Compatibilidad (metadatos)", + ja: "互換性(メタデータ)", + ko: "호환성 (메타데이터)", + ru: "Совместимость (метаданные)", + zh: "兼容性(元数据)", + "zh-tw": "相容性(中繼資料)", + }, + "Compatibility (Remote Database)": { + def: "Compatibility (Remote Database)", + es: "Compatibilidad (base de datos remota)", + ja: "互換性(リモートデータベース)", + ko: "호환성 (원격 데이터베이스)", + ru: "Совместимость (удалённая база данных)", + zh: "兼容性(远端数据库)", + "zh-tw": "相容性(遠端資料庫)", + }, + "Compatibility (Trouble addressed)": { + def: "Compatibility (Trouble addressed)", + es: "Compatibilidad (problemas corregidos)", + ja: "互換性(対処済みの問題)", + ko: "호환성 (문제 대응)", + ru: "Совместимость (исправленные проблемы)", + zh: "兼容性(问题修复)", + "zh-tw": "相容性(問題修復)", + }, + "Compute revisions for chunks": { + def: "Compute revisions for chunks", + fr: "Calculer les révisions pour les fragments", + he: "חשב גרסאות לנתחים", + ja: "チャンクの修正(リビジョン)を計算", + ko: "청크에 대한 리비전 계산", + ru: "Вычислять ревизии для чанков", + zh: "为 chunks 计算修订版本(以前的行为)", + }, + "Configuration Encryption": { + def: "Configuration Encryption", + es: "Cifrado de configuración", + ja: "設定の暗号化", + ko: "구성 암호화", + ru: "Шифрование конфигурации", + zh: "配置加密", + "zh-tw": "設定加密", + }, + Configure: { + def: "Configure", + es: "Configurar", + ja: "設定", + ko: "설정", + ru: "Настроить", + zh: "配置", + "zh-tw": "設定", + }, + "Configure And Change Remote": { + def: "Configure And Change Remote", + es: "Configurar y cambiar remoto", + ja: "リモートを設定して切り替える", + ko: "원격 구성 및 변경", + ru: "Настроить и переключить удалённое хранилище", + zh: "配置并切换远端", + "zh-tw": "設定並切換遠端", + }, + "Configure E2EE": { + def: "Configure E2EE", + es: "Configurar E2EE", + ja: "E2EE を設定", + ko: "E2EE 구성", + ru: "Настроить сквозное шифрование", + zh: "配置 E2EE", + "zh-tw": "設定 E2EE", + }, + "Configure Remote": { + def: "Configure Remote", + es: "Configurar remoto", + ja: "リモートを設定", + ko: "원격 구성", + ru: "Настроить удалённое хранилище", + zh: "配置远端", + "zh-tw": "設定遠端", + }, + "Configure the same server information as your other devices again, manually, very advanced users only.": { + def: "Configure the same server information as your other devices again, manually, very advanced users only.", + es: "Configure manualmente la misma información del servidor que en sus otros dispositivos. Solo para usuarios muy avanzados。", + ja: "他の端末と同じサーバー情報を手動で再入力します。上級者向けの方法です。", + ko: "다른 장치와 동일한 서버 정보를 다시 수동으로 입력합니다. 고급 사용자 전용입니다。", + ru: "Снова вручную укажите те же параметры сервера, что и на других устройствах. Только для очень опытных пользователей。", + zh: "手动重新输入与你其他设备相同的服务器信息。仅适合高级用户。", + "zh-tw": "手動重新輸入與其他裝置相同的伺服器資訊。僅適合進階使用者。", + }, + "Connection Method": { + def: "Connection Method", + es: "Método de conexión", + ja: "接続方法", + ko: "연결 방법", + ru: "Способ подключения", + zh: "连接方式", + "zh-tw": "連線方式", + }, + "Continue to CouchDB setup": { + def: "Continue to CouchDB setup", + es: "Continuar con la configuración de CouchDB", + ja: "CouchDB 設定へ進む", + ko: "CouchDB 설정으로 계속", + ru: "Перейти к настройке CouchDB", + zh: "继续进行 CouchDB 设置", + "zh-tw": "繼續進行 CouchDB 設定", + }, + "Continue to Peer-to-Peer only setup": { + def: "Continue to Peer-to-Peer only setup", + es: "Continuar con la configuración solo Peer-to-Peer", + ja: "Peer-to-Peer 専用設定へ進む", + ko: "Peer-to-Peer 전용 설정으로 계속", + ru: "Перейти к настройке только Peer-to-Peer", + zh: "继续进行仅 Peer-to-Peer 设置", + "zh-tw": "繼續進行僅 Peer-to-Peer 設定", + }, + "Continue to S3/MinIO/R2 setup": { + def: "Continue to S3/MinIO/R2 setup", + es: "Continuar con la configuración de S3/MinIO/R2", + ja: "S3/MinIO/R2 設定へ進む", + ko: "S3/MinIO/R2 설정으로 계속", + ru: "Перейти к настройке S3/MinIO/R2", + zh: "继续进行 S3/MinIO/R2 设置", + "zh-tw": "繼續進行 S3/MinIO/R2 設定", + }, + Copy: { + def: "Copy", + es: "Copiar", + ja: "コピー", + ko: "복사", + ru: "Копировать", + zh: "复制", + "zh-tw": "複製", + }, + "Copy Report to clipboard": { + def: "Copy Report to clipboard", + fr: "Copier le rapport dans le presse-papiers", + he: 'העתק דו"ח ללוח', + ja: "レポートをクリップボードにコピー", + ko: "보고서를 클립보드에 복사", + ru: "Копировать отчёт в буфер обмена", + zh: "将报告复制到剪贴板", + "zh-tw": "將報告複製到剪貼簿", + }, + "CouchDB Connection Tweak": { + def: "CouchDB Connection Tweak", + es: "Ajustes de conexión de CouchDB", + ja: "CouchDB 接続の調整", + ko: "CouchDB 연결 조정", + ru: "Настройки подключения CouchDB", + zh: "CouchDB 连接调优", + "zh-tw": "CouchDB 連線調校", + }, + "Cross-platform": { + def: "Cross-platform", + es: "Multiplataforma", + ja: "クロスプラットフォーム", + ko: "크로스 플랫폼", + ru: "Кроссплатформенные", + zh: "跨平台", + "zh-tw": "跨平台", + }, + "Current adapter: {adapter}": { + def: "Current adapter: {adapter}", + es: "Adaptador actual: {adapter}", + ja: "現在のアダプター: {adapter}", + ko: "현재 어댑터: {adapter}", + ru: "Текущий адаптер: {adapter}", + zh: "当前适配器:{adapter}", + "zh-tw": "目前的適配器:{adapter}", + }, + "Customization Sync": { + def: "Customization Sync", + es: "Sincronización de personalización", + ja: "カスタマイズ同期", + ko: "사용자 지정 동기화", + ru: "Синхронизация настроек", + zh: "自定义同步", + "zh-tw": "自訂同步", + }, + "Customization Sync (Beta3)": { + def: "Customization Sync (Beta3)", + es: "Sincronización de personalización (Beta3)", + ja: "カスタマイズ同期 (Beta3)", + ko: "사용자 지정 동기화 (Beta3)", + ru: "Синхронизация настроек (Beta3)", + zh: "自定义同步(Beta3)", + "zh-tw": "自訂同步(Beta3)", + }, + "Data Compression": { + def: "Data Compression", + es: "Compresión de datos", + fr: "Compression des données", + he: "דחיסת נתונים", + ja: "データ圧縮", + ko: "데이터 압축", + ru: "Сжатие данных", + zh: "数据压缩", + "zh-tw": "資料壓縮", + }, + "Database -> Storage": { + def: "Database -> Storage", + "zh-tw": "資料庫 -> 儲存空間", + }, + "Database Adapter": { + def: "Database Adapter", + es: "Adaptador de base de datos", + ja: "データベースアダプター", + ko: "데이터베이스 어댑터", + ru: "Адаптер базы данных", + zh: "数据库适配器", + "zh-tw": "資料庫適配器", + }, + "Database Name": { + def: "Database Name", + es: "Nombre de la base de datos", + fr: "Nom de la base de données", + he: "שם מסד נתונים", + ja: "データベース名", + ko: "데이터베이스 이름", + ru: "Имя базы данных", + zh: "数据库名称", + "zh-tw": "資料庫名稱", + }, + "Database suffix": { + def: "Database suffix", + es: "Sufijo de base de datos", + fr: "Suffixe de la base de données", + he: "סיומת מסד נתונים", + ja: "データベースの接尾辞(suffix)", + ko: "데이터베이스 접미사", + ru: "Суффикс базы данных", + zh: "数据库后缀", + "zh-tw": "資料庫後綴", + }, + Default: { + def: "Default", + es: "Predeterminado", + ja: "デフォルト", + ko: "기본값", + ru: "По умолчанию", + zh: "默认", + "zh-tw": "預設", + }, + "Delay conflict resolution of inactive files": { + def: "Delay conflict resolution of inactive files", + es: "Retrasar resolución de conflictos en archivos inactivos", + fr: "Différer la résolution des conflits pour les fichiers inactifs", + he: "עכב פתרון קונפליקטים לקבצים לא פעילים", + ja: "非アクティブなファイルは、競合解決を先送りする", + ko: "비활성 파일의 충돌 해결 지연", + ru: "Отложить разрешение конфликтов для неактивных файлов", + zh: "推迟解决不活动文件", + "zh-tw": "延後處理非活動檔案的衝突", + }, + "Delay merge conflict prompt for inactive files.": { + def: "Delay merge conflict prompt for inactive files.", + es: "Retrasar aviso de fusión para archivos inactivos", + fr: "Différer l'invite de conflit de fusion pour les fichiers inactifs.", + he: "עכב הצגת בקשת מיזוג לקבצים לא פעילים.", + ja: "非アクティブなファイルの競合解決のプロンプトの表示を遅延させる", + ko: "비활성 파일의 병합 충돌 프롬프트 지연.", + ru: "Отложить запрос конфликта слияния для неактивных файлов.", + zh: "推迟手动解决不活动文件", + "zh-tw": "延後顯示非活動檔案的合併衝突提示。", + }, + Delete: { + def: "Delete", + es: "Eliminar", + ja: "削除", + ko: "삭제", + ru: "Удалить", + zh: "删除", + "zh-tw": "刪除", + }, + "Delete all customization sync data": { + def: "Delete all customization sync data", + es: "Eliminar todos los datos de sincronización de personalización", + ja: "カスタマイズ同期データをすべて削除", + ko: "모든 사용자 정의 동기화 데이터 삭제", + ru: "Удалить все данные синхронизации настроек", + zh: "删除所有自定义同步数据", + "zh-tw": "刪除所有自訂同步資料", + }, + "Delete all data on the remote server.": { + def: "Delete all data on the remote server.", + es: "Eliminar todos los datos del servidor remoto.", + ja: "リモートサーバー上のすべてのデータを削除します。", + ko: "원격 서버의 모든 데이터를 삭제합니다.", + ru: "Удалить все данные на удалённом сервере.", + zh: "删除远端服务器上的所有数据。", + "zh-tw": "刪除遠端伺服器上的所有資料。", + }, + "Delete local database to reset or uninstall Self-hosted LiveSync": { + def: "Delete local database to reset or uninstall Self-hosted LiveSync", + es: "Eliminar la base de datos local para restablecer o desinstalar Self-hosted LiveSync", + ja: "Self-hosted LiveSync をリセットまたはアンインストールするため、ローカルデータベースを削除", + ko: "Self-hosted LiveSync를 초기화하거나 제거하기 위해 로컬 데이터베이스를 삭제", + ru: "Удалить локальную базу данных, чтобы сбросить или удалить Self-hosted LiveSync", + zh: "删除本地数据库以重置或卸载 Self-hosted LiveSync", + "zh-tw": "刪除本機資料庫以重設或解除安裝 Self-hosted LiveSync", + }, + "Delete old metadata of deleted files on start-up": { + def: "Delete old metadata of deleted files on start-up", + es: "Borrar metadatos viejos al iniciar", + fr: "Supprimer les anciennes métadonnées des fichiers effacés au démarrage", + he: "מחק מטה-נתונים ישנים של קבצים שנמחקו בעת הפעלה", + ja: "削除済みデータのメタデータをクリーンナップする", + ko: "시작 시 삭제된 파일의 오래된 메타데이터 삭제", + ru: "Удалять старые метаданные удалённых файлов при запуске", + zh: "启动时删除已删除文件的旧元数据", + "zh-tw": "啟動時刪除已刪除檔案的舊中繼資料", + }, + "Delete Remote Configuration": { + def: "Delete Remote Configuration", + es: "Eliminar configuración remota", + ja: "リモート設定を削除", + ko: "원격 구성 삭제", + ru: "Удалить удалённую конфигурацию", + zh: "删除远端配置", + "zh-tw": "刪除遠端設定", + }, + "Delete remote configuration '{name}'?": { + def: "Delete remote configuration '{name}'?", + es: "¿Eliminar la configuración remota '{name}'?", + ja: "リモート設定 '{name}' を削除しますか?", + ko: "'{name}' 원격 구성을 삭제할까요?", + ru: "Удалить удалённую конфигурацию '{name}'?", + zh: "要删除远端配置“{name}”吗?", + "zh-tw": "要刪除遠端設定「{name}」嗎?", + }, + desktop: { + def: "desktop", + es: "equipo de escritorio", + ja: "デスクトップ", + ko: "데스크톱", + ru: "рабочий стол", + zh: "桌面设备", + "zh-tw": "桌面裝置", + }, + Developer: { + def: "Developer", + es: "Desarrollador", + ja: "開発者", + ko: "개발자", + ru: "Разработчик", + zh: "开发者", + "zh-tw": "開發者", + }, + Device: { + def: "Device", + ja: "デバイス", + ko: "기기", + ru: "Устройство", + zh: "设备", + "zh-tw": "裝置", + }, + "Device name": { + def: "Device name", + es: "Nombre del dispositivo", + fr: "Nom de l'appareil", + he: "שם מכשיר", + ja: "デバイス名", + ko: "기기 이름", + ru: "Имя устройства", + zh: "设备名称", + "zh-tw": "裝置名稱", + }, + "Device Setup Method": { + def: "Device Setup Method", + es: "Método de configuración del dispositivo", + ja: "端末の設定方法", + ko: "장치 설정 방법", + ru: "Способ настройки устройства", + zh: "设备设置方式", + "zh-tw": "裝置設定方式", + }, + "dialog.yourLanguageAvailable": { + def: "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 Default** and then take screenshots, messages and logs. This can be done in the setting dialogue.\nMay you find it easy to use!", + fr: "Self-hosted LiveSync dispose d'une traduction pour votre langue, le paramètre %{Display language} a donc été activé.\n\nNote : Tous les messages ne sont pas traduits. Nous attendons vos contributions !\nNote 2 : Si vous créez un ticket, **veuillez revenir à Par défaut** puis prendre des captures d'écran, messages et journaux. Cela peut être fait dans la boîte de dialogue des paramètres.\nBonne utilisation !", + he: "ל-Self-hosted LiveSync יש תרגום לשפתך, ולכן הגדרת %{Display language} הופעלה.\n\nהערה: לא כל ההודעות מתורגמות. אנחנו ממתינים לתרומותיך!\nהערה 2: אם אתה פותח Issue, **אנא חזור ל-%{lang-def}** ואז צלם צילומי מסך, הודעות ויומנים. ניתן לעשות זאת בדיאלוג ההגדרות.\nנקווה שתמצא/י את הפלאגין נוח לשימוש!", + ja: "Self-hosted LiveSync に設定されている言語の翻訳がありましたので、インターフェースの表示言語が適用されました。\n\n注意: 全てのメッセージは翻訳されていません。あなたの貢献をお待ちしています!\nGithubにIssueを作成する際には、 インターフェースの表示言語 を一旦 Default に戻してから、スクショやメッセージ、ログを収集してください。これは設定から変更できます。\n\n便利に使用できれば幸いです。", + ko: "Self-hosted LiveSync에서 귀하의 언어로 번역을 제공하므로 %{Display language} 설정이 활성화되었습니다.\n\n참고: 모든 메시지가 번역되지는 않습니다. 귀하의 기여를 기다리고 있습니다!\n참고 2: 이슈를 생성하는 경우 **Default로 되돌린 후** 스크린샷, 메시지, 로그를 가져와 주세요. 이는 설정 대화 상자에서 할 수 있습니다.\n간편하게 사용하실 수 있었으면 좋겠습니다!", + ru: "Self-hosted LiveSync имеет переводы для вашего языка, поэтому была включена настройка языка Display language.\n\nПримечание: Не все сообщения переведены. Мы ждём ваших предложений!\nПримечание 2: При создании Issue, пожалуйста, вернитесь к lang-def, затем сделайте скриншоты, сообщения и логи. Это можно сделать в настройках.\nНадеемся, вам будет удобно использовать!", + zh: "Self-hosted LiveSync已提供您语言的翻译,因此启用了%{Display language}\n\n注意:并非所有消息都已翻译。我们期待您的贡献!\n注意 2:若您创建问题报告, **请切换回Default** ,然后截取屏幕截图、消息和日志,此操作可在设置对话框中完成\n愿您使用顺心!", + "zh-tw": + "Self-hosted LiveSync 已提供你目前語言的翻譯,因此已啟用顯示語言設定。\n\n注意:並非所有訊息都已完成翻譯,歡迎協助補充!\n注意 2:如果你要回報問題,請先切回預設語言,再附上截圖、訊息與日誌。\n\n希望你使用愉快!", + }, + "dialog.yourLanguageAvailable.btnRevertToDefault": { + def: "Keep Default", + fr: "Conserver Par défaut", + he: "השאר %{lang-def}", + ja: "Keep Default", + ko: "Default 유지", + ru: "Оставить lang-def", + zh: "保持Default", + "zh-tw": "恢復為預設語言", + }, + "dialog.yourLanguageAvailable.Title": { + def: " Translation is available!", + fr: " Une traduction est disponible !", + he: " תרגום זמין!", + ja: "翻訳が利用可能です!", + ko: " 번역을 사용할 수 있습니다!", + ru: "Доступен перевод!", + zh: " 翻译可用!", + "zh-tw": "已提供你的語言翻譯!", + }, + "Disables all synchronization and restart.": { + def: "Disables all synchronization and restart.", + es: "Desactiva toda la sincronización y reinicia la aplicación.", + ja: "すべての同期を無効にして再起動します。", + ko: "모든 동기화를 비활성화하고 재시작합니다.", + ru: "Отключает всю синхронизацию и перезапускает приложение.", + zh: "禁用所有同步并重新启动。", + "zh-tw": "停用所有同步並重新啟動。", + }, + "Disables logging, only shows notifications. Please disable if you report an issue.": { + def: "Disables logging, only shows notifications. Please disable if you report an issue.", + es: "Desactiva registros, solo muestra notificaciones. Desactívelo si reporta un problema.", + fr: "Désactive la journalisation, n'affiche que les notifications. Veuillez désactiver si vous signalez un problème.", + he: "מכבה רישום יומן, מציג התראות בלבד. אנא כבה אם אתה מדווח על בעיה.", + ja: "ログを無効にし、通知のみを表示します。Issueを報告する場合は無効にしてください。", + ko: "로깅을 비활성화하고 알림만 표시합니다. 문제를 신고하는 경우 비활성화해 주세요.", + ru: "Отключает логирование, показывает только уведомления. Пожалуйста, отключите при сообщении о проблеме.", + zh: "禁用日志记录,仅显示通知。如果您报告问题,请禁用此选项", + "zh-tw": "停用日誌記錄,只顯示通知。如果你要回報問題,請關閉此選項。", + }, + "Display Language": { + def: "Display Language", + es: "Idioma de visualización", + fr: "Langue d'affichage", + he: "שפת תצוגה", + ja: "インターフェースの表示言語", + ko: "표시 언어", + ru: "Язык интерфейса", + zh: "显示语言", + "zh-tw": "顯示語言", + }, + "Display name": { + def: "Display name", + es: "Nombre para mostrar", + ja: "表示名", + ko: "표시 이름", + ru: "Отображаемое имя", + zh: "显示名称", + "zh-tw": "顯示名稱", + }, + "Do not check configuration mismatch before replication": { + def: "Do not check configuration mismatch before replication", + es: "No verificar incompatibilidades antes de replicar", + fr: "Ne pas vérifier les incohérences de configuration avant la réplication", + he: "אל תבדוק אי-התאמה בתצורה לפני שכפול", + ja: "サーバーから同期する前に設定の不一致を確認しない", + ko: "복제 전 구성 불일치 확인 안 함", + ru: "Не проверять несовпадение конфигурации перед репликацией", + zh: "在复制前不检查配置不匹配", + "zh-tw": "複寫前不檢查設定是否不一致", + }, + "Do not keep metadata of deleted files.": { + def: "Do not keep metadata of deleted files.", + es: "No conservar metadatos de archivos borrados", + fr: "Ne pas conserver les métadonnées des fichiers supprimés.", + he: "אל תשמור מטה-נתונים של קבצים שנמחקו.", + ja: "削除済みファイルのメタデータを保持しない", + ko: "삭제된 파일의 메타데이터를 보관하지 않습니다.", + ru: "Не хранить метаданные удалённых файлов.", + zh: "不保留已删除文件的元数据 ", + "zh-tw": "不保留已刪除檔案的中繼資料。", + }, + "Do not split chunks in the background": { + def: "Do not split chunks in the background", + es: "No dividir chunks en segundo plano", + fr: "Ne pas fragmenter en arrière-plan", + he: "אל תפצל נתחים ברקע", + ja: "バックグラウンドでチャンクを分割しない", + ko: "백그라운드에서 청크 분할 안 함", + ru: "Не разделять чанки в фоновом режиме", + zh: "不在后台分割 chunks", + "zh-tw": "不在背景分割 chunks", + }, + "Do not use internal API": { + def: "Do not use internal API", + es: "No usar API interna", + fr: "Ne pas utiliser l'API interne", + he: "אל תשתמש ב-API פנימי", + ja: "内部APIを使用しない", + ko: "내부 API 사용 안 함", + ru: "Не использовать внутренний API", + zh: "不使用内部 API", + "zh-tw": "不使用內部 API", + }, + "Doctor.Button.DismissThisVersion": { + def: "No, and do not ask again until the next release", + fr: "Non, et ne plus demander jusqu'à la prochaine version", + he: "לא, ואל תשאל שוב עד לגרסה הבאה", + ja: "いいえ、次のリリースまで再度確認しない", + ko: "아니요, 다음 릴리스까지 다시 묻지 않음", + ru: "Нет, и не спрашивать до следующего выпуска", + zh: "拒绝,并且直到下个版本前不再询问", + }, + "Doctor.Button.Fix": { + def: "Fix it", + fr: "Corriger", + he: "תקן", + ja: "修正する", + ko: "수정", + ru: "Исправить", + zh: "修复", + }, + "Doctor.Button.FixButNoRebuild": { + def: "Fix it but no rebuild", + fr: "Corriger mais sans reconstruction", + he: "תקן ללא בנייה מחדש", + ja: "修正するが再構築はしない", + ko: "수정하지만 재구축하지 않음", + ru: "Исправить без перестроения", + zh: "修复但不重建", + }, + "Doctor.Button.No": { + def: "No", + fr: "Non", + he: "לא", + ja: "いいえ", + ko: "아니요", + ru: "Нет", + zh: "拒绝", + }, + "Doctor.Button.Skip": { + def: "Leave it as is", + fr: "Laisser tel quel", + he: "השאר כפי שהוא", + ja: "そのままにする", + ko: "그대로 두기", + ru: "Оставить как есть", + zh: "保持不变", + }, + "Doctor.Button.Yes": { + def: "Yes", + fr: "Oui", + he: "כן", + ja: "はい", + ko: "예", + ru: "Да", + zh: "确定", + }, + "Doctor.Dialogue.Main": { + def: "Hi! Config Doctor has been activated because of ${activateReason}!\nAnd, unfortunately some configurations were detected as potential problems.\nPlease be assured. Let's solve them one by one.\n\nTo let you know ahead of time, we will ask you about the following items.\n\n${issues}\n\nShall we get started?", + fr: "Bonjour ! Config Doctor a été activé en raison de ${activateReason} !\nEt, malheureusement, certaines configurations ont été détectées comme des problèmes potentiels.\nPas d'inquiétude. Résolvons-les un par un.\n\nPour information, nous allons vous interroger sur les éléments suivants.\n\n${issues}\n\nVoulez-vous commencer ?", + he: "שלום! רופא התצורה הופעל בגלל ${activateReason}!\nולמרבה הצער, זוהו תצורות שעשויות להיות בעייתיות.\nהיה רגוע/ה. בואו נפתור אותן אחת אחת.\n\nלידיעתך מראש, נשאל אותך על הפריטים הבאים.\n\n${issues}\n\nהאם להתחיל?", + ja: "こんにちは!${activateReason}のため、設定診断ツールが起動しました!\n残念ながら、いくつかの設定が潜在的な問題として検出されました。\nご安心ください。一つずつ解決していきましょう。\n\n事前にお知らせしますと、以下の項目についてお尋ねします。\n\n${issues}\n\n始めていいですか?", + ko: "안녕하세요! ${activateReason} 로 인해 구성 진단 마법사가 활성화되었습니다!\n그리고 일부 구성이 잠재적인 문제로 감지되었습니다.\n안심하세요. 하나씩 해결해 봅시다.\n\n대상 항목은 다음과 같습니다.\n\n${issues}\n\n시작하시겠습니까?", + ru: "Привет! Диагностика настроек активирована из-за activateReason!\nК сожалению, некоторые настройки были обнаружены как потенциальные проблемы.\nНе волнуйтесь. Давайте решим их по очереди.\n\nСообщаем вам заранее, мы спросим о следующих пунктах.\n\nissues\n\nНачнём?", + zh: "您好!配置医生已根据您的要求启动(感谢您)!!遗憾的是,检测到部分配置存在潜在问题。请放心,我们将逐一解决这些问题。\n\n提前告知您,我们将就以下事项进行确认:\n\n为数据块计算修订版本(此前行为)\n增强块大小\n\n我们开始处理吗?", + }, + "Doctor.Dialogue.MainFix": { + def: "\n## ${name}\n\n| Current | Ideal |\n|:---:|:---:|\n| ${current} | ${ideal} |\n\n**Recommendation Level:** ${level}\n\n### Why this has been detected?\n\n${reason}\n\n${note}\n\nFix this to the ideal value?", + fr: "\n## ${name}\n\n| Actuel | Idéal |\n|:---:|:---:|\n| ${current} | ${ideal} |\n\n**Niveau de recommandation :** ${level}\n\n### Pourquoi ceci a-t-il été détecté ?\n\n${reason}\n\n${note}\n\nCorriger à la valeur idéale ?", + he: "\n## ${name}\n\n| נוכחי | אידאלי |\n|:---:|:---:|\n| ${current} | ${ideal} |\n\n**רמת המלצה:** ${level}\n\n### מדוע זה זוהה?\n\n${reason}\n\n${note}\n\nלתקן לערך האידאלי?", + ja: "\n## ${name}\n\n| 現在の値 | 理想値 |\n|:---:|:---:|\n| ${current} | ${ideal} |\n\n**推奨レベル:** ${level}\n\n### 診断理由?\n\n${reason}\n\n${note}\n\nこれを理想値に修正しますか?", + ko: "**구성 이름:** `${name}`\n**현재 값:** `${current}`, **이상적인 값:** `${ideal}`\n**권장 수준:** ${level}\n**왜 이것이 감지되었나요?**\n${reason}\n\n\n${note}\n\n이상적인 값으로 수정하시겠습니까?", + ru: "name\n\n| Текущее | Идеальное |\n|:---:|:---:|\n| current | ideal |\n\n**Уровень рекомендации:** level\n\n### Почему это было обнаружено?\n\nreason\n\nnote\n\nИсправить на идеальное значение?", + zh: "\n## ${name}\n\n| Current | Ideal |\n|:---:|:---:|\n| ${current} | ${ideal} |\n\n**Recommendation Level:** ${level}\n\n### Why this has been detected?\n\n${reason}\n\n${note}\n\nFix this to the ideal value?", + }, + "Doctor.Dialogue.Title": { + def: "Self-hosted LiveSync Config Doctor", + fr: "Docteur Config Self-hosted LiveSync", + he: "Self-hosted LiveSync Config Doctor", + ja: "Self-hosted LiveSync 設定診断ツール", + ko: "Self-hosted LiveSync 구성 진단 마법사", + ru: "Диагностика Self-hosted LiveSync", + zh: "Self-hosted LiveSync 配置诊断", + }, + "Doctor.Dialogue.TitleAlmostDone": { + def: "Almost done!", + fr: "Presque terminé !", + he: "כמעט סיימנו!", + ja: "あと少しです!", + ko: "거의 완료되었습니다!", + ru: "Почти готово!", + zh: "全部完成!", + }, + "Doctor.Dialogue.TitleFix": { + def: "Fix issue ${current}/${total}", + fr: "Corriger le problème ${current}/${total}", + he: "תקן בעיה ${current}/${total}", + ja: "問題の修正 ${current}/${total}", + ko: "문제 해결 ${current}/${total}", + ru: "Исправление проблемы current/total", + zh: "修复问题 ${current}/${total}", + }, + "Doctor.Level.Must": { + def: "Must", + fr: "Obligatoire", + he: "חובה", + ja: "必須", + ko: "필수", + ru: "Обязательно", + zh: "必须", + }, + "Doctor.Level.Necessary": { + def: "Necessary", + fr: "Nécessaire", + he: "נדרש", + ja: "必要", + ko: "필수", + ru: "Необходимо", + zh: "必要", + }, + "Doctor.Level.Optional": { + def: "Optional", + fr: "Optionnel", + he: "אופציונלי", + ja: "任意", + ko: "선택사항", + ru: "Опционально", + zh: "可选", + }, + "Doctor.Level.Recommended": { + def: "Recommended", + fr: "Recommandé", + he: "מומלץ", + ja: "推奨", + ko: "권장", + ru: "Рекомендуется", + zh: "推荐", + }, + "Doctor.Message.NoIssues": { + def: "No issues detected!", + fr: "Aucun problème détecté !", + he: "לא זוהו בעיות!", + ja: "問題は検出されませんでした!", + ko: "문제가 감지되지 않았습니다!", + ru: "Проблем не обнаружено!", + zh: "未发现问题!", + }, + "Doctor.Message.RebuildLocalRequired": { + def: "Attention! A local database rebuild is required to apply this!", + fr: "Attention ! Une reconstruction de la base locale est requise pour appliquer ceci !", + he: "שים לב! נדרשת בנייה מחדש של מסד הנתונים המקומי כדי להחיל זאת!", + ja: "注意!これを適用するにはローカルデータベースの再構築が必要です!", + ko: "주의! 이를 적용하려면 로컬 데이터베이스 재구축이 필요합니다!", + ru: "Внимание! Для применения требуется перестроение локальной базы данных!", + zh: "注意!需要重建本地数据库以应用此项!", + }, + "Doctor.Message.RebuildRequired": { + def: "Attention! A rebuild is required to apply this!", + fr: "Attention ! Une reconstruction est requise pour appliquer ceci !", + he: "שים לב! נדרשת בנייה מחדש כדי להחיל זאת!", + ja: "注意!これを適用するには再構築が必要です!", + ko: "주의! 이를 적용하려면 재구축이 필요합니다!", + ru: "Внимание! Для применения требуется перестроение!", + zh: "注意!需要重建才能应用此项!", + }, + "Doctor.Message.SomeSkipped": { + def: "We left some issues as is. Shall I ask you again on next startup?", + fr: "Nous avons laissé certains problèmes en l'état. Dois-je vous demander à nouveau au prochain démarrage ?", + he: "השארנו כמה בעיות כפי שהן. האם לשאול שוב בהפעלה הבאה?", + ja: "いくつかの問題をそのままにしました。次回起動時に再度確認しますか?", + ko: "일부 문제를 그대로 두었습니다. 다음 시작 시 다시 질문할까요?", + ru: "Некоторые проблемы оставлены как есть. Спросить снова при следующем запуске?", + zh: "我们将某些问题留给了以后处理。是否要在下次启动时再次询问您?", + }, + "Doctor.RULES.E2EE_V02500.REASON": { + def: "The End-to-End Encryption has got now more robust and faster. Also because, the previous E2EE was found to be compromised in a re-conducted code review. It should be applied as soon as possible. Really apologises for your inconvenience. And, this setting is not forward compatible. All synchronised devices must be updated to v0.25.0 or higher. Rebuilds are not required and will be converted from the new transfer to the new format, However, it is recommended to rebuild whenever possible.", + fr: "Le chiffrement de bout en bout est désormais plus robuste et plus rapide. Aussi parce que le précédent E2EE s'est révélé compromis lors d'une nouvelle revue de code. Il doit être appliqué dès que possible. Nous nous excusons sincèrement pour la gêne occasionnée. Ce paramètre n'est pas compatible avec les versions antérieures. Tous les appareils synchronisés doivent être mis à jour en v0.25.0 ou supérieur. Les reconstructions ne sont pas requises et seront converties du nouveau transfert vers le nouveau format. Il est toutefois recommandé de reconstruire dans la mesure du possible.", + he: "ההצפנה מקצה לקצה עודכנה לגרסה חזקה ומהירה יותר. בנוסף, בסקירת קוד שנערכה מחדש הוסבר שההצפנה הקודמת נפרצת. יש להחיל זאת בהקדם האפשרי. מתנצלים על אי הנוחות. שים לב שהגדרה זו אינה תואמת לאחור. כל המכשירים המסונכרנים חייבים להיות מעודכנים לגרסה 0.25.0 ומעלה. אין צורך בבנייה מחדש והנתונים יומרו בהדרגה לפורמט החדש, אך מומלץ לבנות מחדש בהזדמנות הראשונה.", + ja: "エンドツーエンド暗号化がより堅牢で高速になりました。また、以前のE2EEは再コードレビューにより脆弱性が発見されました。できるだけ早く適用することをお勧めします。ご不便をおかけして申し訳ありません。また、この設定は下位互換性がありません。すべての同期デバイスをv0.25.0以降にアップデートする必要があります。再構築は必須ではなく、新しい転送から新しいフォーマットに変換されますが、可能な限り再構築をお勧めします。", + ru: "Сквозное шифрование стало более надёжным и быстрым. Предыдущее E2EE было скомпрометировано. Следует применить как можно скорее.", + zh: "The End-to-End Encryption has got now more robust and faster. Also because, the previous E2EE was found to be compromised in a re-conducted code review. It should be applied as soon as possible. Really apologises for your inconvenience. And, this setting is not forward compatible. All synchronised devices must be updated to v0.25.0 or higher. Rebuilds are not required and will be converted from the new transfer to the new format, However, it is recommended to rebuild whenever possible.", + }, + "Document History": { + def: "Document History", + "zh-tw": "文件歷程", + }, + Duplicate: { + def: "Duplicate", + es: "Duplicar", + ja: "複製", + ko: "복제", + ru: "Дублировать", + zh: "复制", + "zh-tw": "複製", + }, + "Duplicate remote": { + def: "Duplicate remote", + es: "Duplicar remoto", + ja: "リモート設定を複製", + ko: "원격 구성 복제", + ru: "Дублировать удалённую конфигурацию", + zh: "复制远端配置", + "zh-tw": "複製遠端設定", + }, + "E2EE Configuration": { + def: "E2EE Configuration", + es: "Configuración de E2EE", + ja: "E2EE 設定", + ko: "E2EE 구성", + ru: "Конфигурация сквозного шифрования", + zh: "E2EE 配置", + "zh-tw": "E2EE 設定", + }, + "Edge case addressing (Behaviour)": { + def: "Edge case addressing (Behaviour)", + es: "Tratamiento de casos límite (comportamiento)", + ja: "特殊なケースへの対応(動作)", + ko: "특수 상황 처리 (동작)", + ru: "Обработка особых случаев (поведение)", + zh: "边缘情况处理(行为)", + "zh-tw": "邊緣情況處理(行為)", + }, + "Edge case addressing (Database)": { + def: "Edge case addressing (Database)", + es: "Tratamiento de casos límite (base de datos)", + ja: "特殊なケースへの対応(データベース)", + ko: "특수 상황 처리 (데이터베이스)", + ru: "Обработка особых случаев (база данных)", + zh: "边缘情况处理(数据库)", + "zh-tw": "邊緣情況處理(資料庫)", + }, + "Edge case addressing (Processing)": { + def: "Edge case addressing (Processing)", + es: "Tratamiento de casos límite (procesamiento)", + ja: "特殊なケースへの対応(処理)", + ko: "특수 상황 처리 (처리)", + ru: "Обработка особых случаев (обработка)", + zh: "边缘情况处理(处理)", + "zh-tw": "邊緣情況處理(處理)", + }, + "Emergency restart": { + def: "Emergency restart", + es: "Reinicio de emergencia", + ja: "緊急再起動", + ko: "긴급 재시작", + ru: "Аварийный перезапуск", + zh: "紧急重启", + "zh-tw": "緊急重新啟動", + }, + "Enable advanced features": { + def: "Enable advanced features", + es: "Habilitar características avanzadas", + fr: "Activer les fonctionnalités avancées", + he: "הפעל תכונות מתקדמות", + ja: "高度な機能を有効にする", + ko: "고급 기능 활성화", + ru: "Включить расширенные функции", + zh: "启用高级功能", + "zh-tw": "啟用進階功能", + }, + "Enable customization sync": { + def: "Enable customization sync", + es: "Habilitar sincronización de personalización", + fr: "Activer la synchronisation de personnalisation", + he: "הפעל סנכרון התאמה אישית", + ja: "カスタマイズ同期を有効", + ko: "사용자 설정 동기화 활성화", + ru: "Включить синхронизацию настроек", + zh: "启用自定义同步", + "zh-tw": "啟用自訂同步", + }, + "Enable Developers' Debug Tools.": { + def: "Enable Developers' Debug Tools.", + es: "Habilitar herramientas de depuración", + fr: "Activer les outils de débogage pour développeurs.", + he: "הפעל כלי ניפוי באגים למפתחים.", + ja: "開発者用デバッグツールを有効にする", + ko: "개발자 디버그 도구 활성화", + ru: "Включить инструменты разработчика.", + zh: "启用开发者调试工具 ", + "zh-tw": "啟用開發者除錯工具。", + }, + "Enable edge case treatment features": { + def: "Enable edge case treatment features", + es: "Habilitar manejo de casos límite", + fr: "Activer les fonctionnalités pour cas particuliers", + he: "הפעל תכונות לטיפול במקרי קצה", + ja: "エッジケース対応機能を有効にする", + ko: "특수 사례 처리 기능 활성화", + ru: "Включить функции обработки граничных случаев", + zh: "启用边缘情况处理功能", + "zh-tw": "啟用邊緣情況處理功能", + }, + "Enable poweruser features": { + def: "Enable poweruser features", + es: "Habilitar funciones para usuarios avanzados", + fr: "Activer les fonctionnalités pour utilisateurs avancés", + he: "הפעל תכונות למשתמש מתקדם", + ja: "エキスパート機能を有効にする", + ko: "파워 유저 기능 활성화", + ru: "Включить функции для опытных пользователей", + zh: "启用高级用户功能", + "zh-tw": "啟用進階使用者功能", + }, + "Enable this if your Object Storage doesn't support CORS": { + def: "Enable this if your Object Storage doesn't support CORS", + es: "Habilitar si su almacenamiento no soporta CORS", + fr: "Activer ceci si votre stockage objet ne prend pas en charge CORS", + he: "הפעל אם אחסון האובייקטים שלך לא תומך ב-CORS", + ja: "オブジェクトストレージがCORSをサポートしていない場合は有効にしてください", + ko: "객체 스토리지가 CORS를 지원하지 않는 경우 활성화하세요", + ru: "Включите, если ваше объектное хранилище не поддерживает CORS", + zh: "如果您的对象存储不支持 CORS,请启用此功能 ", + "zh-tw": "如果你的物件儲存不支援 CORS,請啟用此選項", + }, + "Enable this option to automatically apply the most recent change to documents even when it conflicts": { + def: "Enable this option to automatically apply the most recent change to documents even when it conflicts", + es: "Aplicar cambios recientes automáticamente aunque generen conflictos", + fr: "Activer cette option pour appliquer automatiquement la modification la plus récente aux documents même en cas de conflit", + he: "הפעל אפשרות זו כדי להחיל אוטומטית את השינוי האחרון במסמכים גם כשיש קונפליקט", + ja: "このオプションを有効にすると、競合があっても最新の変更を自動的にドキュメントに適用します", + ko: "이 옵션을 활성화하면 충돌이 있어도 문서에 가장 최근 변경 사항을 자동으로 적용합니다", + ru: "Включите эту опцию для автоматического применения последних изменений к документам даже при конфликте", + zh: "启用此选项可在文档冲突时自动应用最新的更改", + "zh-tw": "啟用此選項後,即使發生衝突也會自動套用文件的最新變更", + }, + "Encrypt contents on the remote database. If you use the plugin's synchronization feature, enabling this is recommended.": + { + def: "Encrypt contents on the remote database. If you use the plugin's synchronization feature, enabling this is recommended.", + es: "Cifrar contenido en la base de datos remota. Se recomienda habilitar si usa la sincronización del plugin.", + fr: "Chiffrer le contenu sur la base de données distante. Si vous utilisez la fonction de synchronisation du plugin, l'activation est recommandée.", + he: "הצפן תוכן במסד הנתונים המרוחק. אם אתה משתמש בתכונת הסנכרון של התוסף, מומלץ להפעיל זאת.", + ja: "リモートデータベースの暗号化(オンにすることを推奨)", + ko: "원격 데이터베이스의 내용을 암호화합니다. 플러그인의 동기화 기능을 사용하는 경우 활성화를 권장합니다.", + ru: "Шифровать содержимое на удалённой базе данных. Рекомендуется включить при использовании функции синхронизации плагина.", + zh: "加密远程数据库中的内容。如果您使用插件的同步功能,则建议启用此功能 ", + "zh-tw": "加密遠端資料庫中的內容。如果你使用外掛的同步功能,建議啟用此選項。", + }, + "Encrypting sensitive configuration items": { + def: "Encrypting sensitive configuration items", + es: "Cifrando elementos sensibles", + fr: "Chiffrement des éléments de configuration sensibles", + he: "הצפן פריטי תצורה רגישים", + ja: "機密性の高い設定項目の暗号化", + ko: "민감한 구성 항목 암호화", + ru: "Шифрование конфиденциальных настроек", + zh: "加密敏感配置项", + "zh-tw": "加密敏感設定項目", + }, + "Encryption phassphrase. If changed, you should overwrite the server's database with the new (encrypted) files.": { + def: "Encryption phassphrase. If changed, you should overwrite the server's database with the new (encrypted) files.", + es: "Frase de cifrado. Si la cambia, sobrescriba la base del servidor con los nuevos archivos cifrados.", + fr: "Phrase secrète de chiffrement. Si modifiée, vous devriez écraser la base de données du serveur avec les nouveaux fichiers (chiffrés).", + he: "ביטוי סיסמה להצפנה. אם שונה, יש לדרוס את מסד הנתונים של השרת בקבצים החדשים (המוצפנים).", + ja: "暗号化パスフレーズ。変更した場合、新しい(暗号化された)ファイルでサーバーのデータベースを上書きする必要があります。", + ko: "패스프레이즈는 암호화에 사용되는 긴 암호 문구입니다. 변경한 경우, 암호화된 새 파일로 서버의 데이터베이스를 덮어써야 합니다.", + ru: "Парольная фраза шифрования. При изменении нужно перезаписать базу данных сервера новыми (зашифрованными) файлами.", + zh: "加密密码。如果更改,您应该用新的(加密的)文件覆盖服务器的数据库 ", + "zh-tw": "加密密語。如果變更了它,你應以新的(已加密)檔案覆寫伺服器上的資料庫。", + }, + "End-to-End Encryption": { + def: "End-to-End Encryption", + es: "Cifrado de extremo a extremo", + fr: "Chiffrement de bout en bout", + he: "הצפנה מקצה לקצה", + ja: "E2E暗号化", + ko: "종단간 암호화", + ru: "Сквозное шифрование", + zh: "端到端加密", + "zh-tw": "端對端加密", + }, + "Endpoint URL": { + def: "Endpoint URL", + es: "URL del endpoint", + fr: "URL du point de terminaison", + he: "כתובת נקודת קצה (Endpoint URL)", + ja: "エンドポイントURL", + ko: "엔드포인트 URL", + ru: "URL конечной точки", + zh: "终端URL", + "zh-tw": "端點 URL", + }, + "Enhance chunk size": { + def: "Enhance chunk size", + es: "Mejorar tamaño de chunks", + fr: "Améliorer la taille des fragments", + he: "הגדל גודל נתח", + ja: "チャンクサイズを最適化する", + ko: "청크 크기 향상", + ru: "Улучшить размер чанка", + zh: "增大块大小", + "zh-tw": "擴大 chunk 大小", + }, + "Enter Server Information": { + def: "Enter Server Information", + es: "Introducir información del servidor", + ja: "サーバー情報の入力", + ko: "서버 정보 입력", + ru: "Ввести данные сервера", + zh: "输入服务器信息", + "zh-tw": "輸入伺服器資訊", + }, + "Enter the server information manually": { + def: "Enter the server information manually", + es: "Introducir manualmente la información del servidor", + ja: "サーバー情報を手動で入力する", + ko: "서버 정보를 수동으로 입력", + ru: "Ввести данные сервера вручную", + zh: "手动输入服务器信息", + "zh-tw": "手動輸入伺服器資訊", + }, + Export: { + def: "Export", + es: "Exportar", + ja: "エクスポート", + ko: "내보내기", + ru: "Экспорт", + zh: "导出", + "zh-tw": "匯出", + }, + "Failed to connect to remote for compaction.": { + def: "Failed to connect to remote for compaction.", + ja: "リモートデータベースに接続できず、コンパクションを実行できませんでした。", + ko: "압축을 위해 원격 데이터베이스에 연결하지 못했습니다.", + ru: "Не удалось подключиться к удалённой базе данных для компакции.", + zh: "无法连接到远程数据库以执行压缩。", + "zh-tw": "無法連線到遠端資料庫以執行壓縮。", + }, + "Failed to connect to remote for compaction. ${reason}": { + def: "Failed to connect to remote for compaction. ${reason}", + ja: "リモートデータベースに接続できず、コンパクションを実行できませんでした。${reason}", + ko: "압축을 위해 원격 데이터베이스에 연결하지 못했습니다. ${reason}", + ru: "Не удалось подключиться к удалённой базе данных для компакции. ${reason}", + zh: "无法连接到远程数据库以执行压缩。${reason}", + "zh-tw": "無法連線到遠端資料庫以執行壓縮。${reason}", + }, + "Failed to start one-shot replication before Garbage Collection. Garbage Collection Cancelled.": { + def: "Failed to start one-shot replication before Garbage Collection. Garbage Collection Cancelled.", + ja: "Garbage Collection 前にワンショットレプリケーションを開始できませんでした。Garbage Collection はキャンセルされました。", + ko: "Garbage Collection 전에 일회성 복제를 시작하지 못했습니다. Garbage Collection을 취소합니다.", + ru: "Не удалось запустить одноразовую репликацию перед Garbage Collection. Garbage Collection отменена.", + zh: "无法在垃圾回收前启动一次性复制。垃圾回收已取消。", + "zh-tw": "無法在垃圾回收前啟動一次性複寫。垃圾回收已取消。", + }, + "Failed to start replication after Garbage Collection.": { + def: "Failed to start replication after Garbage Collection.", + ja: "Garbage Collection 後にレプリケーションを開始できませんでした。", + ko: "Garbage Collection 후 복제를 시작하지 못했습니다.", + ru: "Не удалось запустить репликацию после Garbage Collection.", + zh: "垃圾回收后无法启动复制。", + "zh-tw": "垃圾回收後無法啟動複寫。", + }, + Fetch: { + def: "Fetch", + es: "Obtener", + ja: "取得", + ko: "가져오기", + ru: "Получить", + zh: "获取", + "zh-tw": "抓取", + }, + "Fetch chunks on demand": { + def: "Fetch chunks on demand", + es: "Obtener chunks bajo demanda", + fr: "Récupérer les fragments à la demande", + he: "משוך נתחים לפי דרישה", + ja: "ユーザーのタイミングでチャンクの更新を確認する", + ko: "필요 시 청크 원격 가져오기", + ru: "Загружать чанки по требованию", + zh: "按需获取块", + "zh-tw": "按需抓取 chunks", + }, + "Fetch database with previous behaviour": { + def: "Fetch database with previous behaviour", + es: "Obtener BD con comportamiento anterior", + fr: "Récupérer la base de données avec le comportement précédent", + he: "משוך מסד נתונים עם התנהגות קודמת", + ja: "以前の動作でデータベースを取得", + ko: "이전 동작으로 데이터베이스 가져오기", + ru: "Загрузить базу данных с предыдущим поведением", + zh: "使用以前的行为获取数据库", + "zh-tw": "以前一種行為抓取資料庫", + }, + "Fetch remote settings": { + def: "Fetch remote settings", + es: "Obtener ajustes remotos", + ja: "リモート設定を取得", + ko: "원격 설정 가져오기", + ru: "Получить настройки с удалённого хранилища", + zh: "获取远端设置", + "zh-tw": "抓取遠端設定", + }, + "File to resolve conflict": { + def: "File to resolve conflict", + es: "Archivo para resolver el conflicto", + ja: "競合を解決するファイル", + ko: "충돌을 해결할 파일", + ru: "Файл для разрешения конфликта", + zh: "选择要解决冲突的文件", + "zh-tw": "要解決衝突的檔案", + }, + "File to view History": { + def: "File to view History", + "zh-tw": "要檢視歷程的檔案", + }, + Filename: { + def: "Filename", + es: "Nombre de archivo", + fr: "Nom de fichier", + he: "שם קובץ", + ja: "ファイル名", + ko: "파일명", + ru: "Имя файла", + zh: "文件名", + "zh-tw": "檔名", + }, + "First, please select the option that best describes your current situation.": { + def: "First, please select the option that best describes your current situation.", + es: "Primero, seleccione la opción que describa mejor su situación actual。", + ja: "まず、現在の状況に最も近い項目を選択してください。", + ko: "먼저 현재 상황에 가장 잘 맞는 항목을 선택해 주세요。", + ru: "Сначала выберите вариант, который лучше всего описывает вашу текущую ситуацию。", + zh: "首先,请选择最符合你当前情况的选项。", + "zh-tw": "首先,請選擇最符合你目前情況的選項。", + }, + "Flag and restart": { + def: "Flag and restart", + es: "Marcar y reiniciar", + ja: "フラグを立てて再起動", + ko: "표시 후 재시작", + ru: "Пометить и перезапустить", + zh: "标记后重启", + "zh-tw": "標記後重新啟動", + }, + "Forces the file to be synced when opened.": { + def: "Forces the file to be synced when opened.", + es: "Forzar sincronización al abrir archivo", + fr: "Force la synchronisation du fichier à son ouverture.", + he: "מכריח סנכרון הקובץ בעת פתיחתו.", + ja: "ファイルを開いたときに強制的に同期します。", + ko: "파일을 열 때 강제로 동기화합니다.", + ru: "Принудительно синхронизировать файл при открытии.", + zh: "打开文件时强制同步该文件 ", + "zh-tw": "開啟檔案時強制同步該檔案。", + }, + "Fresh Start Wipe": { + def: "Fresh Start Wipe", + es: "Borrado para reinicio completo", + ja: "初期化ワイプ", + ko: "새로 시작 지우기", + ru: "Полный сброс для чистого старта", + zh: "全新开始清除", + "zh-tw": "全新開始清除", + }, + "Garbage Collection cancelled by user.": { + def: "Garbage Collection cancelled by user.", + ja: "ユーザーによって Garbage Collection がキャンセルされました。", + ko: "사용자가 Garbage Collection을 취소했습니다.", + ru: "Пользователь отменил Garbage Collection.", + zh: "用户已取消垃圾回收。", + "zh-tw": "使用者已取消垃圾回收。", + }, + "Garbage Collection completed. Deleted chunks: ${deletedChunks} / ${totalChunks}. Time taken: ${seconds} seconds.": + { + def: "Garbage Collection completed. Deleted chunks: ${deletedChunks} / ${totalChunks}. Time taken: ${seconds} seconds.", + ja: "Garbage Collection が完了しました。削除したチャンク: ${deletedChunks} / ${totalChunks}。所要時間: ${seconds} 秒。", + ko: "Garbage Collection이 완료되었습니다. 삭제된 청크: ${deletedChunks} / ${totalChunks}. 소요 시간: ${seconds}초.", + ru: "Garbage Collection завершена. Удалено чанков: ${deletedChunks} / ${totalChunks}. Затраченное время: ${seconds} сек.", + zh: "垃圾回收完成。已删除 chunks:${deletedChunks} / ${totalChunks}。耗时:${seconds} 秒。", + "zh-tw": "垃圾回收完成。已刪除 chunks:${deletedChunks} / ${totalChunks}。耗時:${seconds} 秒。", + }, + "Garbage Collection Confirmation": { + def: "Garbage Collection Confirmation", + ja: "Garbage Collection の確認", + ko: "Garbage Collection 확인", + ru: "Подтверждение Garbage Collection", + zh: "垃圾回收确认", + "zh-tw": "垃圾回收確認", + }, + "Garbage Collection V3 (Beta)": { + def: "Garbage Collection V3 (Beta)", + es: "Recolección de basura V3 (Beta)", + ja: "ガーベジコレクション V3 (Beta)", + ko: "가비지 컬렉션 V3 (Beta)", + ru: "Сборка мусора V3 (Beta)", + zh: "垃圾回收 V3(Beta)", + "zh-tw": "垃圾回收 V3(Beta)", + }, + "Garbage Collection: Found ${unusedChunks} unused chunks to delete.": { + def: "Garbage Collection: Found ${unusedChunks} unused chunks to delete.", + ja: "Garbage Collection: 削除対象の未使用チャンクが ${unusedChunks} 件見つかりました。", + ko: "Garbage Collection: 삭제할 미사용 청크 ${unusedChunks}개를 찾았습니다.", + ru: "Garbage Collection: найдено ${unusedChunks} неиспользуемых чанков для удаления.", + zh: "垃圾回收:发现 ${unusedChunks} 个未使用的 chunks 待删除。", + "zh-tw": "垃圾回收:找到 ${unusedChunks} 個未使用的 chunks 可刪除。", + }, + "Garbage Collection: Scanned ${scanned} / ~${docCount}": { + def: "Garbage Collection: Scanned ${scanned} / ~${docCount}", + ja: "Garbage Collection: ${scanned} / ~${docCount} をスキャン済み", + ko: "Garbage Collection: ${scanned} / ~${docCount} 스캔됨", + ru: "Garbage Collection: просканировано ${scanned} / ~${docCount}", + zh: "垃圾回收:已扫描 ${scanned} / ~${docCount}", + "zh-tw": "垃圾回收:已掃描 ${scanned} / ~${docCount}", + }, + "Garbage Collection: Scanning completed. Total chunks: ${totalChunks}, Used chunks: ${usedChunks}": { + def: "Garbage Collection: Scanning completed. Total chunks: ${totalChunks}, Used chunks: ${usedChunks}", + ja: "Garbage Collection: スキャン完了。総チャンク数: ${totalChunks}、使用中チャンク数: ${usedChunks}", + ko: "Garbage Collection: 스캔 완료. 전체 청크 수: ${totalChunks}, 사용 중인 청크 수: ${usedChunks}", + ru: "Garbage Collection: сканирование завершено. Всего чанков: ${totalChunks}, используемых чанков: ${usedChunks}", + zh: "垃圾回收:扫描完成。总 chunks:${totalChunks},已使用 chunks:${usedChunks}", + "zh-tw": "垃圾回收:掃描完成。總 chunks:${totalChunks},已使用 chunks:${usedChunks}", + }, + "Handle files as Case-Sensitive": { + def: "Handle files as Case-Sensitive", + es: "Manejar archivos como sensibles a mayúsculas", + fr: "Gérer les fichiers en respectant la casse", + he: "טפל בקבצים כתלויי רישיות", + ja: "ファイルの大文字・小文字を区別する", + ko: "파일을 대소문자 구분으로 처리", + ru: "Обрабатывать файлы с учётом регистра", + zh: "将文件视为区分大小写", + "zh-tw": "將檔案視為區分大小寫", + }, + "Hidden Files": { + def: "Hidden Files", + es: "Archivos ocultos", + ja: "隠しファイル", + ko: "숨김 파일", + ru: "Скрытые файлы", + zh: "隐藏文件", + "zh-tw": "隱藏檔案", + }, + "Hide completely": { + def: "Hide completely", + zh: "完全隐藏", + "zh-tw": "完全隱藏", + }, + "Highlight diff": { + def: "Highlight diff", + "zh-tw": "醒目顯示差異", + }, + "How to display network errors when the sync server is unreachable.": { + def: "How to display network errors when the sync server is unreachable.", + es: "Cómo mostrar los errores de red cuando el servidor de sincronización no está disponible.", + ja: "同期サーバーに到達できない場合のネットワークエラーの表示方法を設定します。", + ko: "동기화 서버에 연결할 수 없을 때 네트워크 오류를 어떻게 표시할지 설정합니다.", + ru: "Определяет, как отображать сетевые ошибки, если сервер синхронизации недоступен.", + zh: "当同步服务器不可达时,如何显示网络错误。", + "zh-tw": "當同步伺服器無法連線時,如何顯示網路錯誤。", + }, + "How would you like to configure the connection to your server?": { + def: "How would you like to configure the connection to your server?", + es: "¿Cómo desea configurar la conexión con su servidor?", + ja: "サーバー接続をどのように設定しますか?", + ko: "서버 연결을 어떻게 구성하시겠습니까?", + ru: "Как вы хотите настроить подключение к серверу?", + zh: "你希望如何配置与服务器的连接?", + "zh-tw": "你希望如何設定與伺服器的連線?", + }, + "I am adding a device to an existing synchronisation setup": { + def: "I am adding a device to an existing synchronisation setup", + es: "Estoy agregando un dispositivo a una configuración de sincronización existente", + ja: "既存の同期構成に端末を追加します", + ko: "기존 동기화 구성에 장치를 추가합니다", + ru: "Я добавляю устройство к существующей настройке синхронизации", + zh: "我要将设备加入现有同步配置", + "zh-tw": "我要將裝置加入既有同步設定", + }, + "I am setting this up for the first time": { + def: "I am setting this up for the first time", + es: "Estoy configurando esto por primera vez", + ja: "はじめて設定します", + ko: "처음으로 설정합니다", + ru: "Я настраиваю это впервые", + zh: "我是第一次进行设置", + "zh-tw": "我是第一次進行設定", + }, + "I know my server details, let me enter them": { + def: "I know my server details, let me enter them", + es: "Conozco los datos de mi servidor; permítame introducirlos", + ja: "サーバー情報を把握しているので、自分で入力します", + ko: "서버 정보를 알고 있으니 직접 입력하겠습니다", + ru: "Я знаю параметры сервера, позвольте ввести их вручную", + zh: "我知道服务器详情,让我手动输入", + "zh-tw": "我知道伺服器資訊,讓我手動輸入", + }, + "If disabled(toggled), chunks will be split on the UI thread (Previous behaviour).": { + def: "If disabled(toggled), chunks will be split on the UI thread (Previous behaviour).", + es: "Si se desactiva, chunks se dividen en hilo UI (comportamiento anterior)", + fr: "Si désactivé, les fragments seront découpés sur le thread UI (comportement précédent).", + he: "אם מכובה, נתחים יפוצלו בשרשור ממשק המשתמש (התנהגות קודמת).", + ja: "無効(トグル)にすると、チャンクはUIスレッドで分割されます(以前の動作)。", + ko: "비활성화(토글)되면 청크는 UI 스레드에서 분할됩니다 (이전 동작).", + ru: "Если отключено, чанки будут разделяться в основном потоке.", + zh: "如果禁用(切换),chunks 将在 UI 线程上分割(以前的行为)", + "zh-tw": "若停用(關閉)此選項,chunks 會在 UI 執行緒上分割(舊有行為)。", + }, + "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.": + { + def: "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.", + es: "Habilita sincronización eficiente por archivo. Requiere migración y actualizar todos dispositivos a v0.23.18. Pierde compatibilidad con versiones antiguas", + fr: "Si activée, la synchronisation de personnalisation efficace par fichier sera utilisée. Une petite migration est nécessaire lors de l'activation. Tous les appareils doivent être à jour en v0.23.18. Une fois cette option activée, la compatibilité avec les anciennes versions est perdue.", + he: "אם מופעל, ייעשה שימוש בסנכרון התאמה אישית יעיל לפי קובץ. נדרשת הגירה קטנה בעת ההפעלה. כל המכשירים צריכים להיות מעודכנים לגרסה 0.23.18. לאחר ההפעלה, התאימות לגרסאות ישנות תיפגע.", + ja: "有効にすると、ファイルごとの効率的なカスタマイズ同期が使用されます。有効化時に小規模な移行が必要です。また、すべてのデバイスをv0.23.18にアップデートする必要があります。一度有効にすると、古いバージョンとの互換性がなくなります。", + ko: "활성화하면 파일별 효율적인 사용자 설정 동기화가 사용됩니다. 이를 활성화할 때 소규모 데이터 구조 전환이 필요합니다. 모든 기기를 v0.23.18로 업데이트해야 합니다. 이를 활성화하면 이전 버전과의 호환성이 사라집니다.", + ru: "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.", + zh: "如果启用,将使用基于文件的、高效的自定义同步。启用此功能需要进行一次小的迁移。所有设备都应更新到 v0.23.18。一旦启用此功能,我们将失去与旧版本的兼容性", + "zh-tw": + "啟用後會使用以每個檔案為單位的高效率自訂同步。啟用時需要進行一次小型遷移,且所有裝置都應升級到 v0.23.18。啟用後將不再相容舊版本。", + }, + "If enabled, chunks will be split into no more than 100 items. However, dedupe is slightly weaker.": { + def: "If enabled, chunks will be split into no more than 100 items. However, dedupe is slightly weaker.", + es: "Divide chunks en máximo 100 ítems. Menos eficiente en deduplicación", + fr: "Si activée, les fragments seront découpés en 100 éléments au maximum. Cependant, la déduplication est légèrement moins efficace.", + he: "אם מופעל, נתחים יפוצלו לא ליותר מ-100 פריטים. עם זאת, ביטול כפילויות יהיה חלש מעט יותר.", + ja: "有効にすると、チャンクは最大100項目に分割されます。ただし、重複除去の精度は落ちます。", + ko: "활성화하면 청크는 최대 100개 항목으로 분할됩니다. 하지만 중복 제거 기능이 약간 약해집니다.", + ru: "Если включено, чанки будут разделены не более чем на 100 элементов.", + zh: "如果启用,数据块将被分割成不超过 100 项。但是,去重效果会稍弱", + "zh-tw": "啟用後,chunks 最多會分成 100 個項目,但去重效果會稍微變弱。", + }, + "If enabled, newly created chunks are temporarily kept within the document, and graduated to become independent chunks once stabilised.": + { + def: "If enabled, newly created chunks are temporarily kept within the document, and graduated to become independent chunks once stabilised.", + es: "Chunks nuevos se mantienen temporalmente en el documento hasta estabilizarse", + fr: "Si activée, les fragments nouvellement créés sont temporairement conservés dans le document et promus en fragments indépendants une fois stabilisés.", + he: "אם מופעל, נתחים שנוצרו לאחרונה נשמרים זמנית בתוך המסמך, ומוסמכים לנתחים עצמאיים לאחר יציבות.", + ja: "有効にすると、新しく作成されたチャンクはドキュメント内に一時的に保持され、安定したら独立したチャンクになります。", + ko: "활성화하면 새로 생성된 변경 기록(청크)은 문서 안에 임시로 보관되며, 일정 조건을 만족하면 자동으로 문서 밖으로 분리되어 저장됩니다.", + ru: "Если включено, вновь созданные чанки временно хранятся в документе.", + zh: "如果启用,新创建的数据块将暂时保留在文档中,并在稳定后成为独立数据块", + "zh-tw": "啟用後,新建立的 chunks 會暫時保留在文件中,待穩定後再獨立出去。", + }, + "If enabled, the ⛔ icon will be shown inside the status instead of the file warnings banner. No details will be shown.": + { + def: "If enabled, the ⛔ icon will be shown inside the status instead of the file warnings banner. No details will be shown.", + es: "Si se activa, se mostrará el icono ⛔ en el estado en lugar del banner de advertencia de archivos. No se mostrarán detalles.", + fr: "Si activée, l'icône ⛔ s'affichera dans le statut à la place de la bannière d'avertissements de fichiers. Aucun détail ne sera affiché.", + he: "אם מופעל, אייקון ⛔ יוצג בסטטוס במקום פס האזהרות. לא יוצגו פרטים.", + ja: "有効にすると、ファイル警告バナーの代わりにステータス内へ ⛔ アイコンのみを表示します。詳細は表示されません。", + ko: "활성화하면 파일 경고 배너 대신 상태 영역에 ⛔ 아이콘만 표시됩니다. 자세한 내용은 표시되지 않습니다.", + ru: "Если включено, значок будет показан внутри статуса.", + zh: "如果启用,状态栏内将显示 ⛔ 图标,而非文件警告横幅,不会显示任何详细信息。", + "zh-tw": "啟用後,將在狀態列中顯示 ⛔ 圖示,而不是檔案警告橫幅,且不會顯示詳細資訊。", + }, + "If enabled, the file under 1kb will be processed in the UI thread.": { + def: "If enabled, the file under 1kb will be processed in the UI thread.", + es: "Archivos <1kb se procesan en hilo UI", + fr: "Si activée, les fichiers de moins de 1 Ko seront traités sur le thread UI.", + he: "אם מופעל, קבצים קטנים מ-1KB יעובדו בשרשור ממשק המשתמש.", + ja: "有効にすると、1kb未満のファイルはUIスレッドで処理されます。", + ko: "활성화하면 1kb 미만의 파일은 UI 스레드에서 처리됩니다.", + ru: "Если включено, файлы меньше 1КБ будут обрабатываться в основном потоке.", + zh: "如果启用,小于 1kb 的文件将在 UI 线程中处理", + "zh-tw": "啟用後,小於 1KB 的檔案會在 UI 執行緒中處理。", + }, + "If enabled, the notification of hidden files change will be suppressed.": { + def: "If enabled, the notification of hidden files change will be suppressed.", + es: "Si se habilita, se suprimirá la notificación de cambios en archivos ocultos.", + fr: "Si activée, les notifications de modifications des fichiers cachés seront supprimées.", + he: "אם מופעל, התראות על שינוי בקבצים נסתרים יודחקו.", + ja: "有効にすると、隠しファイルの変更通知が抑制されます。", + ko: "활성화하면 숨겨진 파일 변경 알림이 억제됩니다.", + ru: "Если включено, уведомление об изменении скрытых файлов будет подавлено.", + zh: "如果启用,将不再通知隐藏文件被更改", + "zh-tw": "啟用後,將不再通知隱藏檔案變更。", + }, + "If this enabled, all chunks will be stored with the revision made from its content. (Previous behaviour)": { + def: "If this enabled, all chunks will be stored with the revision made from its content. (Previous behaviour)", + es: "Si se habilita, todos los chunks se almacenan con la revisión hecha desde su contenido. (comportamiento anterior)", + fr: "Si activée, tous les fragments seront stockés avec la révision issue de leur contenu. (Comportement précédent)", + he: "אם מופעל, כל הנתחים יישמרו עם גרסה המבוססת על תוכנם. (התנהגות קודמת)", + ja: "有効にすると、すべてのチャンクはコンテンツから作成されたリビジョンと共に保存されます(以前の動作)。", + ko: "이 옵션이 활성화되면 모든 청크는 콘텐츠에서 생성된 리비전과 함께 저장됩니다. (이전 동작)", + ru: "Если включено, все чанки будут храниться с ревизией из содержимого.", + zh: "如果启用,所有 chunks 将使用根据其内容生成的修订版本存储(以前的行为)", + "zh-tw": "啟用後,所有 chunks 都會以其內容產生的修訂版本儲存(舊有行為)。", + }, + "If this enabled, All files are handled as case-Sensitive (Previous behaviour).": { + def: "If this enabled, All files are handled as case-Sensitive (Previous behaviour).", + es: "Si se habilita, todos los archivos se manejan como sensibles a mayúsculas (comportamiento anterior)", + fr: "Si activée, tous les fichiers sont gérés en respectant la casse (comportement précédent).", + he: "אם מופעל, כל הקבצים מטופלים כתלויי רישיות (התנהגות קודמת).", + ja: "有効にすると、すべてのファイルは大文字小文字を区別して処理されます(以前の動作)。", + ko: "이 옵션이 활성화되면 모든 파일이 대소문자를 구분하여 처리됩니다 (이전 동작).", + ru: "Если включено, все файлы обрабатываются с учётом регистра.", + zh: "如果启用,所有文件都将视为区分大小写(以前的行为)", + "zh-tw": "啟用後,所有檔案都會以區分大小寫方式處理(舊有行為)。", + }, + "If this enabled, chunks will be split into semantically meaningful segments. Not all platforms support this feature.": + { + def: "If this enabled, chunks will be split into semantically meaningful segments. Not all platforms support this feature.", + es: "Divide chunks en segmentos semánticos. No todos los sistemas lo soportan", + fr: "Si activée, les fragments seront découpés en segments sémantiquement signifiants. Toutes les plateformes ne prennent pas en charge cette fonctionnalité.", + he: "אם מופעל, נתחים יפוצלו לחלקים עם משמעות סמנטית. לא כל הפלטפורמות תומכות בתכונה זו.", + ja: "有効にすると、チャンクは意味的に有意なセグメントに分割されます。すべてのプラットフォームがこの機能をサポートしているわけではありません。", + ko: "이 옵션을 활성화하면 청크가 문단이나 의미 단위로 나뉘어 저장됩니다. 단, 이 기능은 일부 플랫폼에서는 지원되지 않을 수 있습니다.", + ru: "Если включено, чанки будут разделены на семантически значимые сегменты.", + zh: "如果启用此功能,数据块将被分割成具有语义意义的段落。并非所有平台都支持此功能", + "zh-tw": "啟用後,chunks 會依語意切分成有意義的區段,並非所有平台都支援此功能。", + }, + "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.": + { + def: "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.", + es: "Saltar cambios en archivos locales que coincidan con ignore files. Cambios remotos usan ignore files locales", + fr: "Si défini, les modifications des fichiers locaux correspondant aux fichiers d'exclusion seront ignorées. Les changements distants sont déterminés à l'aide des fichiers d'exclusion locaux.", + he: "אם מוגדר, שינויים בקבצים מקומיים התואמים לקבצי ההתעלמות יידלגו. שינויים מרוחקים נקבעים לפי קבצי ההתעלמות המקומיים.", + ja: "これを設定すると、除外ファイルに一致するローカルファイルの変更はスキップされます。リモートの変更はローカルの無視ファイルを使用して判定されます。", + ko: "이 옵션을 활성화하면, 제외 규칙 파일에 일치하는 로컬 파일의 변경 사항은 건너뜁니다. 원격 변경 여부 또한 로컬의 제외 규칙 파일에 따라 판단됩니다.", + ru: "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.", + zh: "如果设置了此项,与忽略文件匹配的本地文件的更改将被跳过。远程更改使用本地忽略文件确定", + }, + "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.": + { + def: "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.", + es: "Mantiene conexión 60s. Si no hay cambios, reinicia socket. Útil con proxies limitantes", + fr: "Si cette option est activée, PouchDB maintiendra la connexion ouverte pendant 60 secondes, et si aucun changement n'arrive durant cette période, fermera et rouvrira la socket au lieu de la garder ouverte indéfiniment. Utile lorsqu'un proxy limite la durée des requêtes, mais peut augmenter l'utilisation des ressources.", + he: "אם אפשרות זו מופעלת, PouchDB ישמור את החיבור פתוח ל-60 שניות, ואם אין שינוי בפרק זמן זה, יסגור ויפתח מחדש את השקע, במקום להחזיק אותו פתוח ללא הגבלה. שימושי כשפרוקסי מגביל משך בקשות, אך עשוי להגביר שימוש במשאבים.", + ja: "このオプションを有効にすると、PouchDBは接続を60秒間保持し、その間に通信がない場合、一度接続を閉じて再接続します。接続を無期限に保持する代わりにこの動作を行います。プロキシ(Cloudflareなど)がリクエストの持続時間を制限している場合に有用ですが、リソース使用量が増加する可能性があります。", + ko: "이 옵션이 활성화되면 PouchDB는 연결을 더이상 무한히 열어두지 않고 60초 동안 유지합니다. 그 시간 내에 변경 사항이 없으면 소켓을 닫고 다시 엽니다. 프록시가 요청 지속 시간을 제한할 때 유용하지만 리소스 사용량이 증가할 수 있습니다.", + ru: "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.", + zh: "如果启用此选项,PouchDB 将保持连接打开 60 秒,如果在此时间内没有更改到达,则关闭并重新打开套接字,而不是无限期保持打开。当代理限制请求持续时间时有用,但可能会增加资源使用ß", + }, + "If you reached the payload size limit when using IBM Cloudant, please decrease batch size and batch limit to a lower value.": + { + def: "If you reached the payload size limit when using IBM Cloudant, please decrease batch size and batch limit to a lower value.", + "zh-tw": "如果你在使用 IBM Cloudant 時遇到負載大小上限,請調低批次大小與批次上限。", + }, + "Ignore and Proceed": { + def: "Ignore and Proceed", + ja: "無視して続行", + ko: "무시하고 계속", + ru: "Игнорировать и продолжить", + zh: "忽略并继续", + "zh-tw": "忽略並繼續", + }, + "Ignore files": { + def: "Ignore files", + es: "Archivos a ignorar", + fr: "Fichiers d'exclusion", + he: "קבצי התעלמות", + ja: "除外ファイル", + ko: "제외 규칙 파일", + ru: "Файлы для игнорирования", + zh: "忽略文件", + }, + "Ignore patterns": { + def: "Ignore patterns", + es: "Patrones de exclusión", + ja: "除外パターン", + ko: "무시 패턴", + ru: "Шаблоны исключения", + zh: "忽略模式", + "zh-tw": "忽略模式", + }, + "Import connection": { + def: "Import connection", + es: "Importar conexión", + ja: "接続をインポート", + ko: "연결 가져오기", + ru: "Импортировать подключение", + zh: "导入连接", + "zh-tw": "匯入連線", + }, + "Incubate Chunks in Document": { + def: "Incubate Chunks in Document", + es: "Incubar chunks en documento", + fr: "Incuber les fragments dans le document", + he: "בשל נתחים בתוך המסמך", + ja: "ドキュメント内でチャンクを一時保管する", + ko: "문서 내 변경 기록 임시 보관", + ru: "Инкубировать чанки в документе", + zh: "在文档中孵化块", + }, + "Initialise all journal history, On the next sync, every item will be received and sent.": { + def: "Initialise all journal history, On the next sync, every item will be received and sent.", + es: "Restablece todo el historial del diario. En la próxima sincronización se recibirán y enviarán todos los elementos.", + ja: "すべてのジャーナル履歴を初期化します。次回の同期時に、すべての項目が再受信・再送信されます。", + ko: "모든 저널 기록을 초기화합니다. 다음 동기화 때 모든 항목을 다시 받고 다시 보냅니다.", + ru: "Инициализирует всю историю журнала. При следующей синхронизации каждый элемент будет заново получен и отправлен.", + zh: "初始化所有日志历史。下次同步时,所有项目都会重新接收并发送。", + "zh-tw": "初始化所有日誌歷史。下次同步時,每個項目都會重新接收與傳送。", + }, + "Initialise journal received history. On the next sync, every item except this device sent will be downloaded again.": + { + def: "Initialise journal received history. On the next sync, every item except this device sent will be downloaded again.", + "zh-tw": "初始化接收日誌歷程。下次同步時,除了此裝置已送出的項目外,其他項目都會再次下載。", + }, + "Initialise journal sent history. On the next sync, every item except this device received will be sent again.": { + def: "Initialise journal sent history. On the next sync, every item except this device received will be sent again.", + "zh-tw": "初始化傳送日誌歷程。下次同步時,除了此裝置已接收的項目外,其他項目都會再次傳送。", + }, + "Interval (sec)": { + def: "Interval (sec)", + es: "Intervalo (segundos)", + fr: "Intervalle (sec)", + he: "מרווח (שניות)", + ja: "秒", + ko: "간격 (초)", + ru: "Интервал (сек)", + zh: "间隔(秒)", + }, + "K.exp": { + def: "Experimental", + fr: "Expérimental", + he: "ניסיוני", + ja: "試験機能", + ko: "실험 기능", + ru: "Экспериментальная", + zh: "实验性", + }, + "K.long_p2p_sync": { + def: "Peer-to-Peer Sync", + fr: "Synchronisation pair-à-pair", + he: "%{title_p2p_sync}", + ja: "Peer-to-Peer Sync (試験機能)", + ko: "피어 투 피어(P2P) 동기화 (실험 기능)", + ru: "title_p2p_sync", + zh: "Peer-to-Peer同步 (实验性)", + }, + "K.P2P": { + def: "Peer-to-Peer", + fr: "Pair-à-Pair", + he: "%{Peer}-ל-%{Peer}", + ja: "Peer-to-Peer", + ko: "피어-to-피어", + ru: "Peer-к-Peer", + zh: "Peer-to-Peer", + }, + "K.Peer": { + def: "Peer", + fr: "Pair", + he: "עמית", + ja: "Peer", + ko: "피어", + ru: "Устройство", + zh: "Peer", + }, + "K.ScanCustomization": { + def: "Scan customization", + fr: "Analyser la personnalisation", + he: "סרוק התאמה אישית", + ja: "Scan customization", + ko: "사용자 설정 검색", + ru: "Scan customization", + zh: "扫描自定义", + }, + "K.short_p2p_sync": { + def: "P2P Sync", + fr: "Sync P2P", + he: "סנכרון P2P", + ja: "P2P Sync (試験機能)", + ko: "P2P 동기화 (실험 기능)", + ru: "P2P Синхр.", + zh: "P2P同步(实验性)", + }, + "K.title_p2p_sync": { + def: "Peer-to-Peer Sync", + fr: "Synchronisation pair-à-pair", + he: "סנכרון עמית-לעמית", + ja: "Peer-to-Peer Sync", + ko: "피어 투 피어(P2P) 동기화", + ru: "Синхронизация между устройствами", + zh: "Peer-to-Peer同步", + }, + "Keep empty folder": { + def: "Keep empty folder", + es: "Mantener carpetas vacías", + fr: "Conserver les dossiers vides", + he: "שמור תיקייה ריקה", + ja: "空フォルダの維持", + ko: "빈 폴더 유지", + ru: "Сохранять пустые папки", + zh: "保留空文件夹", + }, + lang_def: { + def: "Default", + fr: "Par défaut", + he: "ברירת מחדל", + ja: "Default", + ko: "Default", + ru: "По умолчанию", + zh: "Default", + }, + "lang-de": { + def: "Deutsche", + es: "Alemán", + fr: "Deutsche", + he: "Deutsche", + ja: "Deutsche", + ko: "Deutsche", + ru: "Deutsch", + zh: "Deutsche", + }, + "lang-def": { + def: "Default", + fr: "Par défaut", + he: "%{lang_def}", + ja: "Default", + ko: "Default", + ru: "lang_def", + zh: "Default", + }, + "lang-es": { + def: "Español", + es: "Español", + fr: "Español", + he: "Español", + ja: "Español", + ko: "Español", + ru: "Español", + zh: "Español", + }, + "lang-fr": { + def: "Français", + es: "Français", + fr: "Français", + he: "Français", + ja: "Français", + ko: "Français", + ru: "Français", + zh: "Français", + }, + "lang-he": { + def: "Hebrew", + he: "עברית", + }, + "lang-ja": { + def: "日本語", + es: "Japonés", + fr: "日本語", + he: "日本語", + ja: "日本語", + ko: "日本語", + ru: "日本語", + zh: "日本語", + }, + "lang-ko": { + def: "한국어", + fr: "한국어", + he: "한국어", + ja: "한국어", + ko: "한국어", + ru: "한국어", + zh: "한국어", + }, + "lang-ru": { + def: "Русский", + es: "Ruso", + fr: "Русский", + he: "Русский", + ja: "Русский", + ko: "Русский", + ru: "Русский", + zh: "Русский", + }, + "lang-zh": { + def: "简体中文", + es: "Chino simplificado", + fr: "简体中文", + he: "简体中文", + ja: "简体中文", + ko: "简体中文", + ru: "简体中文", + zh: "简体中文", + }, + "lang-zh-tw": { + def: "繁體中文", + es: "Chino tradicional", + fr: "繁體中文", + he: "繁體中文", + ja: "繁體中文", + ko: "繁體中文", + ru: "繁體中文", + zh: "繁體中文", + }, + Later: { + def: "Later", + es: "Más tarde", + ja: "後で", + ko: "나중에", + ru: "Позже", + zh: "稍后", + "zh-tw": "稍後", + }, + "Limit: {datetime} ({timestamp})": { + def: "Limit: {datetime} ({timestamp})", + es: "Límite: {datetime} ({timestamp})", + ja: "制限: {datetime} ({timestamp})", + ko: "제한: {datetime} ({timestamp})", + ru: "Лимит: {datetime} ({timestamp})", + zh: "限制:{datetime}({timestamp})", + "zh-tw": "限制:{datetime}({timestamp})", + }, + "LiveSync could not handle multiple vaults which have same name without different prefix, This should be automatically configured.": + { + def: "LiveSync could not handle multiple vaults which have same name without different prefix, This should be automatically configured.", + es: "LiveSync no puede manejar múltiples bóvedas con mismo nombre sin prefijo. Se configura automáticamente", + fr: "LiveSync ne peut pas gérer plusieurs coffres portant le même nom sans préfixe distinct. Ceci devrait être configuré automatiquement.", + he: "LiveSync אינו יכול לטפל במספר כספות עם אותו שם ללא קידומת שונה. הדבר אמור להיות מוגדר אוטומטית.", + ja: "LiveSyncは、接頭辞(プレフィックス)のない同名の保管庫(Vault)を扱うことができません。これは自動的に設定されます。", + ko: "LiveSync는 서로 다른 접두사 없이 동일한 이름을 가진 여러 볼트를 처리할 수 없습니다. 이는 자동으로 구성되어야 합니다.", + ru: "LiveSync не может обработать несколько хранилищ с одинаковым именем без разных префиксов.", + zh: "LiveSync 无法处理具有相同名称但没有不同前缀的多个库。这应该自动配置", + }, + "liveSyncReplicator.beforeLiveSync": { + def: "Before LiveSync, start OneShot once...", + es: "Antes de LiveSync, inicia OneShot...", + fr: "Avant LiveSync, lancement d'un OneShot initial...", + he: "לפני LiveSync, התחל OneShot פעם אחת...", + ja: "LiveSyncの前に、まずOneShotを開始します...", + ko: "LiveSync 전에 OneShot을 먼저 시작합니다...", + ru: "Перед LiveSync запускаем OneShot...", + zh: "在LiveSync前,先启动OneShot一次...", + }, + "liveSyncReplicator.cantReplicateLowerValue": { + def: "We can't replicate more lower value.", + es: "No podemos replicar un valor más bajo.", + fr: "Impossible de répliquer une valeur inférieure.", + he: "לא ניתן לשכפל ערך נמוך יותר.", + ja: "これ以上低い値ではレプリケーション(複製)できません。", + ko: "더 낮은 값으로 복제할 수 없습니다.", + ru: "Нельзя реплицировать с меньшим значением.", + zh: "我们无法复制更小的值", + }, + "liveSyncReplicator.checkingLastSyncPoint": { + def: "Looking for the point last synchronized point.", + es: "Buscando el último punto sincronizado.", + fr: "Recherche du dernier point de synchronisation.", + he: "מחפש נקודת הסנכרון האחרונה.", + ja: "最後に同期したポイントを探しています。", + ko: "마지막으로 동기화된 지점을 찾고 있습니다.", + ru: "Поиск последней точки синхронизации.", + zh: "查找上次同步点", + }, + "liveSyncReplicator.couldNotConnectTo": { + def: "Could not connect to ${uri} : ${name}\n(${db})", + es: "No se pudo conectar a ${uri} : ${name} \n(${db})", + fr: "Connexion impossible à ${uri} : ${name}\n(${db})", + he: "לא ניתן להתחבר אל ${uri} : ${name}\n(${db})", + ja: "${uri} : ${name}に接続できませんでした\n(${db})", + ko: "${uri}에 연결할 수 없습니다: ${name} \n(${db})", + ru: "Не удалось подключиться к uri : name\n(db)", + zh: "无法连接到 ${uri} : ${name}\n(${db})", + }, + "liveSyncReplicator.couldNotConnectToRemoteDb": { + def: "Could not connect to remote database: ${d}", + es: "No se pudo conectar a base de datos remota: ${d}", + fr: "Connexion à la base distante impossible : ${d}", + he: "לא ניתן להתחבר למסד הנתונים המרוחק: ${d}", + ja: "リモートデータベースに接続できませんでした: ${d}", + ko: "원격 데이터베이스에 연결할 수 없습니다: ${d}", + ru: "Не удалось подключиться к удалённой базе данных: d", + zh: "无法连接到远程数据库:${d}", + }, + "liveSyncReplicator.couldNotConnectToServer": { + def: "The connection to the remote has been prevented, or failed.", + es: "No se pudo conectar al servidor.", + fr: "Connexion au serveur impossible.", + he: "לא ניתן להתחבר לשרת.", + ja: "サーバーに接続できませんでした。", + ko: "서버에 연결할 수 없습니다.", + ru: "Не удалось подключиться к серверу.", + zh: "无法连接到服务器", + }, + "liveSyncReplicator.couldNotConnectToURI": { + def: "Could not connect to ${uri}:${dbRet}", + es: "No se pudo conectar a ${uri}:${dbRet}", + fr: "Connexion impossible à ${uri}:${dbRet}", + he: "לא ניתן להתחבר אל ${uri}:${dbRet}", + ja: "${uri}に接続できませんでした: ${dbRet}", + ko: "${uri}에 연결할 수 없습니다: ${dbRet}", + ru: "Не удалось подключиться к uri:dbRet", + zh: "无法连接到 ${uri}:${dbRet}", + }, + "liveSyncReplicator.couldNotMarkResolveRemoteDb": { + def: "Could not mark resolve remote database.", + es: "No se pudo marcar como resuelta la base de datos remota.", + fr: "Impossible de marquer la résolution de la base distante.", + he: "לא ניתן לסמן פתרון למסד הנתונים המרוחק.", + ja: "リモートデータベースを解決済みとしてマークできませんでした。", + ko: "원격 데이터베이스를 해결됨으로 표시할 수 없습니다.", + ru: "Не удалось отметить удалённую базу данных как разрешённую.", + zh: "无法标记并解决远程数据库", + }, + "liveSyncReplicator.liveSyncBegin": { + def: "LiveSync begin...", + es: "Inicio de LiveSync...", + fr: "Démarrage de LiveSync...", + he: "LiveSync מתחיל...", + ja: "LiveSyncを開始...", + ko: "LiveSync 시작...", + ru: "Начало LiveSync...", + zh: "LiveSync 开始...", + }, + "liveSyncReplicator.lockRemoteDb": { + def: "Lock remote database to prevent data corruption", + es: "Bloquear base de datos remota para prevenir corrupción de datos", + fr: "Verrouillage de la base distante pour éviter la corruption des données", + he: "נועל מסד נתונים מרוחק למניעת פגיעה בנתונים", + ja: "データ破損を防ぐためリモートデータベースをロック", + ko: "데이터 손상을 방지하기 위해 원격 데이터베이스를 잠급니다", + ru: "Блокировка удалённой базы данных для предотвращения повреждения данных", + zh: "锁定远程数据库以防止数据损坏", + }, + "liveSyncReplicator.markDeviceResolved": { + def: "Mark this device as 'resolved'.", + es: "Marcar este dispositivo como 'resuelto'.", + fr: "Marquer cet appareil comme « résolu ».", + he: "סמן מכשיר זה כ'נפתר'.", + ja: "このデバイスを『解決済み』としてマーク。", + ko: "이 기기를 '해결됨'으로 표시합니다.", + ru: "Отметить это устройство как «разрешённое».", + zh: "将此设备标记为“已解决”", + }, + "liveSyncReplicator.mismatchedTweakDetected": { + def: "Some mismatches have been detected in the configuration between devices. Running a manual replication will attempt to resolve this issue.", + }, + "liveSyncReplicator.oneShotSyncBegin": { + def: "OneShot Sync begin... (${syncMode})", + es: "Inicio de sincronización OneShot... (${syncMode})", + fr: "Démarrage de la synchronisation OneShot... (${syncMode})", + he: "סנכרון OneShot מתחיל... (${syncMode})", + ja: "OneShot同期を開始... (${syncMode})", + ko: "OneShot 동기화 시작... (${syncMode})", + ru: "Начало OneShot синхронизации... (syncMode)", + zh: "OneShot同步开始...(${syncMode})", + }, + "liveSyncReplicator.remoteDbCorrupted": { + def: "Remote database is newer or corrupted, make sure to latest version of self-hosted-livesync installed", + es: "La base de datos remota es más nueva o está dañada, asegúrese de tener la última versión de self-hosted-livesync instalada", + fr: "La base distante est plus récente ou corrompue, assurez-vous d'avoir installé la dernière version de self-hosted-livesync", + he: "מסד הנתונים המרוחק חדש יותר או פגום, ודא שגרסת self-hosted-livesync המותקנת היא העדכנית ביותר", + ja: "リモートデータベースが新しいか破損しています。self-hosted-livesyncの最新バージョンがインストールされていることを確認してください", + ko: "원격 데이터베이스가 더 최신이거나 손상되었습니다. 최신 버전의 self-hosted-livesync가 설치되어 있는지 확인하세요", + ru: "Удалённая база данных новее или повреждена, убедитесь, что установлена последняя версия self-hosted-livesync", + zh: "远程数据库较新或已损坏,请确保已安装最新版本的self-hosted-livesync", + }, + "liveSyncReplicator.remoteDbCreatedOrConnected": { + def: "Remote Database Created or Connected", + es: "Base de datos remota creada o conectada", + fr: "Base distante créée ou connectée", + he: "מסד הנתונים המרוחק נוצר או חובר", + ja: "リモートデータベースが作成または接続されました", + ko: "원격 데이터베이스가 생성되거나 연결되었습니다", + ru: "Удалённая база данных создана или подключена", + zh: "远程数据库已创建或连接", + }, + "liveSyncReplicator.remoteDbDestroyed": { + def: "Remote Database Destroyed", + es: "Base de datos remota destruida", + fr: "Base distante détruite", + he: "מסד הנתונים המרוחק נהרס", + ja: "リモートデータベースが削除されました", + ko: "원격 데이터베이스가 삭제되었습니다", + ru: "Удалённая база данных уничтожена", + zh: "远程数据库已销毁", + }, + "liveSyncReplicator.remoteDbDestroyError": { + def: "Something happened on Remote Database Destroy:", + es: "Algo ocurrió al destruir base de datos remota:", + fr: "Un problème est survenu lors de la destruction de la base distante :", + he: "אירעה שגיאה בהריסת מסד הנתונים המרוחק:", + ja: "リモートデータベースの削除中に問題が発生しました:", + ko: "원격 데이터베이스 삭제 중 오류가 발생했습니다:", + ru: "Произошла ошибка при уничтожении удалённой базы данных:", + zh: "远程数据库销毁时发生错误:", + }, + "liveSyncReplicator.remoteDbMarkedResolved": { + def: "Remote database has been marked resolved.", + es: "Base de datos remota marcada como resuelta.", + fr: "La base distante a été marquée comme résolue.", + he: "מסד הנתונים המרוחק סומן כנפתר.", + ja: "リモートデータベースが解決済みとしてマークされました。", + ko: "원격 데이터베이스가 해결됨으로 표시되었습니다.", + ru: "Удалённая база данных отмечена как разрешённая.", + zh: "远程数据库已标记为已解决", + }, + "liveSyncReplicator.replicationClosed": { + def: "Replication closed", + es: "Replicación cerrada", + fr: "Réplication fermée", + he: "השכפול נסגר", + ja: "レプリケーション(複製)が終了しました", + ko: "복제가 종료되었습니다", + ru: "Репликация закрыта", + zh: "同步已关闭", + }, + "liveSyncReplicator.replicationInProgress": { + def: "Replication is already in progress", + es: "Replicación en curso", + fr: "Une réplication est déjà en cours", + he: "שכפול כבר מתבצע", + ja: "レプリケーション(複製)は既に進行中です", + ko: "복제가 이미 진행 중입니다", + ru: "Репликация уже выполняется", + zh: "同步正在进行中", + }, + "liveSyncReplicator.retryLowerBatchSize": { + def: "Retry with lower batch size:${batch_size}/${batches_limit}", + es: "Reintentar con tamaño de lote más bajo:${batch_size}/${batches_limit}", + fr: "Nouvelle tentative avec une taille de lot réduite :${batch_size}/${batches_limit}", + he: "מנסה שוב עם גודל אצווה קטן יותר:${batch_size}/${batches_limit}", + ja: "より小さいバッチサイズで再試行: ${batch_size}/${batches_limit}", + ko: "더 낮은 일괄 크기로 재시도: ${batch_size}/${batches_limit}", + ru: "Повтор с меньшим размером пакета: batch_size/batches_limit", + zh: "使用更小的批量大小重试:${batch_size}/${batches_limit}", + }, + "liveSyncReplicator.unlockRemoteDb": { + def: "Unlock remote database to prevent data corruption", + es: "Desbloquear base de datos remota para prevenir corrupción de datos", + fr: "Déverrouillage de la base distante pour éviter la corruption des données", + he: "מבטל נעילת מסד הנתונים המרוחק למניעת פגיעה בנתונים", + ja: "データ破損を防ぐためリモートデータベースをアンロック", + ko: "데이터 손상을 방지하기 위해 원격 데이터베이스를 잠금 해제합니다", + ru: "Разблокировка удалённой базы данных для предотвращения повреждения данных", + zh: "解锁远程数据库以防止数据损坏", + }, + "liveSyncSetting.errorNoSuchSettingItem": { + def: "No such setting item: ${key}", + es: "No existe el ajuste: ${key}", + fr: "Élément de paramètre inexistant : ${key}", + he: "פריט הגדרה לא קיים: ${key}", + ja: "その設定項目は存在しません: ${key}", + ko: "해당 설정 항목이 없습니다: ${key}", + ru: "Такого параметра настройки не существует: key", + zh: "没有此设置项:${key}", + }, + "liveSyncSetting.originalValue": { + def: "Original: ${value}", + es: "Original: ${value}", + fr: "Original : ${value}", + he: "ערך מקורי: ${value}", + ja: "元の値: ${value}", + ko: "원본: ${value}", + ru: "Оригинал: value", + zh: "原始值:${value}", + }, + "liveSyncSetting.valueShouldBeInRange": { + def: "The value should ${min} < value < ${max}", + es: "El valor debe estar entre ${min} y ${max}", + fr: "La valeur doit être ${min} < valeur < ${max}", + he: "הערך צריך להיות ${min} < ערך < ${max}", + ja: "値は ${min} < 値 < ${max} の範囲である必要があります", + ko: "값은 ${min} < 값 < ${max} 범위에 있어야 합니다", + ru: "Значение должно быть min < значение < max", + zh: "值应该在 ${min} < value < ${max} 之间", + }, + "liveSyncSettings.btnApply": { + def: "Apply", + es: "Aplicar", + fr: "Appliquer", + he: "החל", + ja: "適用", + ko: "적용", + ru: "Применить", + zh: "应用", + }, + "Local Database Tweak": { + def: "Local Database Tweak", + es: "Ajustes de la base de datos local", + ja: "ローカルデータベースの調整", + ko: "로컬 데이터베이스 조정", + ru: "Настройки локальной базы данных", + }, + Lock: { + def: "Lock", + es: "Bloquear", + ja: "ロック", + ko: "잠금", + ru: "Заблокировать", + zh: "锁定", + "zh-tw": "鎖定", + }, + "Lock Server": { + def: "Lock Server", + es: "Bloquear servidor", + ja: "サーバーをロック", + ko: "서버 잠금", + ru: "Заблокировать сервер", + zh: "锁定服务器", + "zh-tw": "鎖定伺服器", + }, + "Lock the remote server to prevent synchronization with other devices.": { + def: "Lock the remote server to prevent synchronization with other devices.", + es: "Bloquea el servidor remoto para impedir la sincronización con otros dispositivos.", + ja: "他のデバイスとの同期を防ぐため、リモートサーバーをロックします。", + ko: "다른 기기와의 동기화를 방지하기 위해 원격 서버를 잠급니다.", + ru: "Блокирует удалённый сервер, чтобы запретить синхронизацию с другими устройствами.", + zh: "锁定远端服务器,以阻止其他设备继续同步。", + "zh-tw": "鎖定遠端伺服器,以防止其他裝置進行同步。", + }, + "logPane.autoScroll": { + def: "Auto scroll", + es: "Autodesplazamiento", + fr: "Défilement automatique", + he: "גלילה אוטומטית", + ja: "自動スクロール", + ko: "자동 스크롤", + ru: "Автопрокрутка", + zh: "自动滚动", + }, + "logPane.logWindowOpened": { + def: "Log window opened", + es: "Ventana de registro abierta", + fr: "Fenêtre des journaux ouverte", + he: "חלון יומן נפתח", + ja: "ログウィンドウが開かれました", + ko: "로그 창이 열렸습니다", + ru: "Окно лога открыто", + zh: "日志窗口已打开", + }, + "logPane.pause": { + def: "Pause", + es: "Pausar", + fr: "Pause", + he: "השהה", + ja: "一時停止", + ko: "일시 중단", + ru: "Пауза", + zh: "暂停", + }, + "logPane.title": { + def: "Self-hosted LiveSync Log", + es: "Registro de Self-hosted LiveSync", + fr: "Journaux Self-hosted LiveSync", + he: "יומן Self-hosted LiveSync", + ja: "Self-hosted LiveSync ログ", + ko: "Self-hosted LiveSync 로그", + ru: "Лог Self-hosted LiveSync", + zh: "Self-hosted LiveSync 日志", + }, + "logPane.wrap": { + def: "Wrap", + es: "Ajustar", + fr: "Retour à la ligne", + he: "גלישת שורות", + ja: "折り返し", + ko: "줄 바꿈", + ru: "Перенос", + zh: "自动换行", + }, + "Maximum delay for batch database updating": { + def: "Maximum delay for batch database updating", + es: "Retraso máximo para actualización por lotes", + fr: "Délai maximum pour la mise à jour groupée de la base", + he: "עיכוב מקסימלי לעדכון אצווה של מסד נתונים", + ja: "バッチデータベース更新の最大遅延", + ko: "일괄 데이터베이스 업데이트 최대 지연", + ru: "Максимальная задержка пакетного обновления базы данных", + zh: "批量数据库更新的最大延迟", + }, + "Maximum file size": { + def: "Maximum file size", + es: "Tamaño máximo de archivo", + fr: "Taille maximale de fichier", + he: "גודל קובץ מקסימלי", + ja: "最大ファイル容量", + ko: "최대 파일 크기", + ru: "Максимальный размер файла", + zh: "最大文件大小", + }, + "Maximum Incubating Chunk Size": { + def: "Maximum Incubating Chunk Size", + es: "Tamaño máximo de chunks incubados", + fr: "Taille maximale des fragments en incubation", + he: "גודל מקסימלי לנתח בבישול", + ja: "保持するチャンクの最大サイズ", + ko: "임시 보관 변경 기록의 최대 크기", + ru: "Максимальный размер инкубируемого чанка", + zh: "最大孵化块大小", + }, + "Maximum Incubating Chunks": { + def: "Maximum Incubating Chunks", + es: "Máximo de chunks incubados", + fr: "Nombre maximum de fragments en incubation", + he: "מספר מקסימלי של נתחים בבישול", + ja: "一時保管する最大チャンク数", + ko: "임시 보관 중인 변경 기록 최대 수", + ru: "Максимальное количество инкубируемых чанков", + zh: "最大孵化块数", + }, + "Maximum Incubation Period": { + def: "Maximum Incubation Period", + es: "Periodo máximo de incubación", + fr: "Période maximale d'incubation", + he: "תקופת בישול מקסימלית", + ja: "最大保持期限", + ko: "변경 기록 임시 보관 최대 시간", + ru: "Максимальный период инкубации", + zh: "最大孵化期", + }, + "MB (0 to disable).": { + def: "MB (0 to disable).", + es: "MB (0 para desactivar)", + fr: "Mo (0 pour désactiver).", + he: "MB (0 לביטול).", + ja: "MB (0で無効化)。", + ko: "MB (0으로 설정하면 비활성화).", + ru: "МБ (0 для отключения).", + zh: "MB(0为禁用)", + }, + "Memory cache": { + def: "Memory cache", + es: "Caché en memoria", + ja: "メモリキャッシュ", + ko: "메모리 캐시", + ru: "Кэш в памяти", + }, + "Memory cache size (by total characters)": { + def: "Memory cache size (by total characters)", + es: "Tamaño caché memoria (por caracteres)", + fr: "Taille du cache mémoire (par nombre total de caractères)", + he: 'גודל מטמון זיכרון (לפי סה"כ תווים)', + ja: "全体でキャッシュする文字数", + ko: "메모리 캐시 크기 (총 문자 수)", + ru: "Размер кэша памяти (по общему количеству символов)", + zh: "内存缓存大小(按总字符数)", + }, + "Memory cache size (by total items)": { + def: "Memory cache size (by total items)", + es: "Tamaño caché memoria (por ítems)", + fr: "Taille du cache mémoire (par nombre total d'éléments)", + he: 'גודל מטמון זיכרון (לפי סה"כ פריטים)', + ja: "全体のキャッシュサイズ", + ko: "메모리 캐시 크기 (총 항목 수)", + ru: "Размер кэша памяти (по общему количеству элементов)", + zh: "内存缓存大小(按总项目数)", + }, + Merge: { + def: "Merge", + es: "Fusionar", + ja: "マージ", + ko: "병합", + ru: "Объединить", + zh: "合并", + }, + "Minimum delay for batch database updating": { + def: "Minimum delay for batch database updating", + es: "Retraso mínimo para actualización por lotes", + fr: "Délai minimum pour la mise à jour groupée de la base", + he: "עיכוב מינימלי לעדכון אצווה של מסד נתונים", + ja: "バッチデータベース更新の最小遅延", + ko: "일괄 데이터베이스 업데이트 최소 지연", + ru: "Минимальная задержка пакетного обновления базы данных", + zh: "批量数据库更新的最小延迟", + }, + "Minimum interval for syncing": { + def: "Minimum interval for syncing", + fr: "Intervalle minimum pour la synchronisation", + he: "מרווח מינימלי לסנכרון", + ja: "同期間隔の最小値", + ko: "동기화 최소 간격", + ru: "Минимальный интервал синхронизации", + zh: "同步最小间隔", + "zh-tw": "同步最小間隔", + }, + "moduleCheckRemoteSize.logCheckingStorageSizes": { + def: "Checking storage sizes", + es: "Comprobando tamaños de almacenamiento", + fr: "Vérification des tailles de stockage", + he: "בודק גדלי אחסון", + ja: "ストレージサイズを確認中", + ko: "스토리지 크기 확인 중", + ru: "Проверка размеров хранилища", + zh: "正在检查存储大小", + }, + "moduleCheckRemoteSize.logCurrentStorageSize": { + def: "Remote storage size: ${measuredSize}", + es: "Tamaño del almacenamiento remoto: ${measuredSize}", + fr: "Taille du stockage distant : ${measuredSize}", + he: "גודל אחסון מרוחק: ${measuredSize}", + ja: "リモートストレージサイズ: ${measuredSize}", + ko: "원격 스토리지 크기: ${measuredSize}", + ru: "Размер удалённого хранилища: measuredSize", + zh: "远程存储大小:${measuredSize}", + }, + "moduleCheckRemoteSize.logExceededWarning": { + def: "Remote storage size: ${measuredSize} exceeded ${notifySize}", + es: "Tamaño del almacenamiento remoto: ${measuredSize} superó ${notifySize}", + fr: "Taille du stockage distant : ${measuredSize} a dépassé ${notifySize}", + he: "גודל אחסון מרוחק: ${measuredSize} עלה על ${notifySize}", + ja: "リモートストレージサイズ: ${measuredSize} が ${notifySize} を超過しました", + ko: "원격 스토리지 크기: ${measuredSize}가 ${notifySize}를 초과했습니다", + ru: "Размер удалённого хранилища: measuredSize превысил notifySize", + zh: "远程存储大小:${measuredSize} 超过 ${notifySize}", + }, + "moduleCheckRemoteSize.logThresholdEnlarged": { + def: "Threshold has been enlarged to ${size}MB", + es: "El umbral se ha ampliado a ${size}MB", + fr: "Le seuil a été augmenté à ${size} Mo", + he: "הסף הורחב ל-${size}MB", + ja: "しきい値が ${size}MB に設定されました", + ko: "임계값이 ${size}MB로 증가되었습니다", + ru: "Порог увеличен до sizeМБ", + zh: "阈值已扩大到 ${size}MB", + }, + "moduleCheckRemoteSize.msgConfirmRebuild": { + def: "This may take a bit of a long time. Do you really want to rebuild everything now?", + es: "Esto puede llevar un poco de tiempo. ¿Realmente quieres reconstruir todo ahora?", + fr: "Cela peut prendre un certain temps. Voulez-vous vraiment tout reconstruire maintenant ?", + he: "פעולה זו עשויה לקחת זמן מה. האם אתה בטוח שברצונך לבנות מחדש עכשיו?", + ja: "これは少し時間がかかる場合があります。本当に今すべてを再構築しますか?", + ko: "시간이 꽤 오래 걸릴 수 있습니다. 정말 지금 모든 것을 재구축하시겠습니까?", + ru: "Это может занять некоторое время. Вы действительно хотите перестроить всё сейчас?", + zh: "这可能需要一些时间。您真的想现在重建所有内容吗?", + }, + "moduleCheckRemoteSize.msgDatabaseGrowing": { + def: "**Your database is getting larger!** But do not worry, we can address it now. The time before running out of space on the remote storage.\n\n| Measured size | Configured size |\n| --- | --- |\n| ${estimatedSize} | ${maxSize} |\n\n> [!MORE]-\n> If you have been using it for many years, there may be unreferenced chunks - that is, garbage - accumulating in the database. Therefore, we recommend rebuilding everything. It will probably become much smaller.\n>\n> If the volume of your vault is simply increasing, it is better to rebuild everything after organizing the files. Self-hosted LiveSync does not delete the actual data even if you delete it to speed up the process. It is roughly [documented](https://github.com/vrtmrz/obsidian-livesync/blob/main/docs/tech_info.md).\n>\n> If you don't mind the increase, you can increase the notification limit by 100MB. This is the case if you are running it on your own server. However, it is better to rebuild everything from time to time.\n>\n\n> [!WARNING]\n> If you perform rebuild everything, make sure all devices are synchronised. The plug-in will merge as much as possible, though.\n", + es: "**¡Tu base de datos está creciendo!** Pero no te preocupes, podemos abordarlo ahora. El tiempo antes de quedarse sin espacio en el almacenamiento remoto.\n\n| Tamaño medido | Tamaño configurado |\n| --- | --- |\n| ${estimatedSize} | ${maxSize} |\n\n> [!MORE]-\n> Si lo has estado utilizando durante muchos años, puede haber fragmentos no referenciados - es decir, basura - acumulándose en la base de datos. Por lo tanto, recomendamos reconstruir todo. Probablemente se volverá mucho más pequeño.\n>\n> Si el volumen de tu bóveda simplemente está aumentando, es mejor reconstruir todo después de organizar los archivos. Self-hosted LiveSync no elimina los datos reales incluso si los eliminas para acelerar el proceso. Está aproximadamente [documentado](https://github.com/vrtmrz/obsidian-livesync/blob/main/docs/tech_info.md).\n>\n> Si no te importa el aumento, puedes aumentar el límite de notificación en 100 MB. Este es el caso si lo estás ejecutando en tu propio servidor. Sin embargo, es mejor reconstruir todo de vez en cuando.\n>\n\n> [!WARNING]\n> Si realizas la reconstrucción completa, asegúrate de que todos los dispositivos estén sincronizados. El complemento fusionará tanto como sea posible, sin embargo.\n", + fr: "**Votre base de données grossit !** Pas d'inquiétude, nous pouvons y remédier dès maintenant, avant de manquer d'espace sur le stockage distant.\n\n| Taille mesurée | Taille configurée |\n| --- | --- |\n| ${estimatedSize} | ${maxSize} |\n\n> [!MORE]-\n> Si vous l'utilisez depuis de nombreuses années, il peut y avoir des fragments non référencés — des déchets, en somme — accumulés dans la base. Nous recommandons donc de tout reconstruire. Cela réduira probablement beaucoup la taille.\n>\n> Si le volume de votre coffre augmente simplement, il est préférable de tout reconstruire après avoir organisé les fichiers. Self-hosted LiveSync ne supprime pas réellement les données même si vous les effacez, afin d'accélérer le processus. Ceci est documenté grossièrement [ici](https://github.com/vrtmrz/obsidian-livesync/blob/main/docs/tech_info.md).\n>\n> Si cela ne vous dérange pas, vous pouvez augmenter la limite de notification de 100 Mo. C'est le cas si vous l'exécutez sur votre propre serveur. Il reste toutefois préférable de tout reconstruire de temps en temps.\n>\n\n> [!WARNING]\n> Si vous tout reconstruisez, assurez-vous que tous les appareils sont synchronisés. Le plug-in fusionnera autant que possible cependant.\n", + he: "**מסד הנתונים שלך הולך וגדל!** אל תדאג, אנחנו יכולים לטפל בזה עכשיו. הזמן שנשאר עד לאזול המקום באחסון המרוחק.\n\n| גודל נמדד | גודל מוגדר |\n| --- | --- |\n| ${estimatedSize} | ${maxSize} |\n\n> [!MORE]-\n> אם אתה משתמש בפלאגין כבר שנים רבות, ייתכן שנצברו נתחים לא מקושרים — כלומר, זבל — במסד הנתונים. לכן, אנו ממליצים לבנות הכל מחדש. ככל הנראה מסד הנתונים יהיה קטן בהרבה לאחר מכן.\n>\n> אם נפח הכספת שלך פשוט גדל, עדיף לבנות מחדש לאחר ארגון הקבצים. Self-hosted LiveSync אינו מוחק נתונים בפועל גם כאשר אתה מוחק קבצים כדי להאיץ את התהליך. הדבר [מתועד בפירוט](https://github.com/vrtmrz/obsidian-livesync/blob/main/docs/tech_info.md).\n>\n> אם אינך מוטרד מהגידול, ניתן להגדיל את סף ההתראה ב-100MB. הדבר מתאים אם השרת הוא שלך. עם זאת, מומלץ לבנות מחדש מעת לעת.\n>\n\n> [!WARNING]\n> אם תבנה מחדש, ודא שכל המכשירים מסונכרנים. הפלאגין ינסה למזג כמה שניתן.\n", + ja: "**データベースが大きくなっています!** でも心配しないでください。リモートストレージの容量が不足する前に対応できます。\n\n| 測定サイズ | 設定サイズ |\n| --- | --- |\n| ${estimatedSize} | ${maxSize} |\n\n> [!MORE]-\n> 長年使用している場合、参照されていないチャンク(つまりゴミ)がデータベースに蓄積している可能性があります。そのため、すべてを再構築することをお勧めします。おそらくかなり小さくなるでしょう。\n>\n> 単純に保管庫の容量が増えている場合は、事前にファイルを整理してからすべてを再構築するのが良いでしょう。Self-hosted LiveSyncは処理速度を上げるため、削除しても実際のデータを削除しません。これはおおまかに[documentation](https://github.com/vrtmrz/obsidian-livesync/blob/main/docs/tech_info.md)に記載されています。\n>\n> 増加を気にしない場合は、通知制限を100MB単位で増やすことができます。これは自分のサーバーで実行している場合に適しています。ただし、定期的にすべてを再構築する方が良いでしょう。\n>\n\n> [!WARNING]\n> すべてを再構築する場合は、すべてのデバイスが同期されていることを確認してください。もちろん、プラグインは可能な限り解決しようと努力はしますけど...\n", + ko: "**데이터베이스 용량이 점점 커지고 있습니다!** 하지만 걱정하지 마세요. 아직 원격 스토리지 공간이 완전히 부족해진 건 아닙니다.\n\n| 측정된 크기 | 설정된 한도 |\n| --- | --- |\n| ${estimatedSize} | ${maxSize} |\n\n> [!MORE]-\n> 오랜 기간 사용했다면 참조되지 않는 청크, 즉 '쓰레기 데이터'가 쌓였을 수 있습니다. 이 경우 전체 재구성을 권장합니다. 용량이 훨씬 줄어들 수 있습니다.\n> \n> 단순히 볼트 자체 용량이 커지고 있는 것이라면, 먼저 파일을 정리한 후 전체를 재구성하는 것이 좋습니다. Self-hosted LiveSync는 처리 속도를 위해 삭제해도 실제 데이터를 바로 지우지 않습니다. 이 내용은 [기술 문서](https://github.com/vrtmrz/obsidian-livesync/blob/main/docs/tech_info.md)에 간략히 정리되어 있습니다.\n> \n> 용량 증가가 괜찮다면 알림 임계치를 100MB 단위로 높일 수 있습니다. 직접 서버를 운영하는 경우에 적합한 방법입니다. 다만, 가끔은 전체 재구성을 해주는 것이 바람직합니다.\n\n> [!WARNING]\n> 전체 재구성을 실행할 경우, 모든 기기가 반드시 동기화되어 있어야 합니다. 플러그인이 최대한 병합하려고 시도하긴 하지만 완전하지 않을 수 있습니다.", + ru: "Ваша база данных увеличивается! Но не волнуйтесь, мы можем решить это сейчас.", + zh: "**您的数据库正在变大!** 但别担心,我们现在可以解决它。在远程存储空间用完之前还有时间。\n\n| 测量大小 | 配置大小 |\n| --- | --- |\n| ${estimatedSize} | ${maxSize} |\n\n> [!MORE]-\n> 如果您已经使用了很多年,数据库中可能会积累未引用的 chunks——也就是垃圾。因此,我们建议重建所有内容。它可能会变得小得多。\n> \n> 如果您的库容量只是在增加,最好在整理文件后重建所有内容。即使您为了加速过程删除了文件,Self-hosted LiveSync 也不会删除实际数据。这大致[有文档记录](https://github.com/vrtmrz/obsidian-livesync/blob/main/docs/tech_info.md)。\n> \n> 如果您不介意增加,可以将通知限制增加 100MB。如果您在自己的服务器上运行,就是这种情况。但是,最好还是不时地重建所有内容。\n> \n\n> [!WARNING]\n> 如果您执行重建所有内容,请确保所有设备都已同步。尽管如此,插件会尽可能地合并\n", + }, + "moduleCheckRemoteSize.msgSetDBCapacity": { + def: "We can set a maximum database capacity warning, **to take action before running out of space on the remote storage**.\nDo you want to enable this?\n\n> [!MORE]-\n> - 0: Do not warn about storage size.\n> This is recommended if you have enough space on the remote storage especially you have self-hosted. And you can check the storage size and rebuild manually.\n> - 800: Warn if the remote storage size exceeds 800MB.\n> This is recommended if you are using fly.io with 1GB limit or IBM Cloudant.\n> - 2000: Warn if the remote storage size exceeds 2GB.\n\nIf we have reached the limit, we will be asked to enlarge the limit step by step.\n", + es: "Podemos configurar una advertencia de capacidad máxima de base de datos, **para tomar medidas antes de quedarse sin espacio en el almacenamiento remoto**.\n¿Quieres habilitar esto?\n\n> [!MORE]-\n> - 0: No advertir sobre el tamaño del almacenamiento.\n> Esto es recomendado si tienes suficiente espacio en el almacenamiento remoto, especialmente si lo tienes autoalojado. Y puedes comprobar el tamaño del almacenamiento y reconstruir manualmente.\n> - 800: Advertir si el tamaño del almacenamiento remoto supera los 800 MB.\n> Esto es recomendado si estás usando fly.io con un límite de 1 GB o IBM Cloudant.\n> - 2000: Advertir si el tamaño del almacenamiento remoto supera los 2 GB.\n\nSi hemos alcanzado el límite, se nos pedirá que aumentemos el límite paso a paso.\n", + fr: "Nous pouvons définir un avertissement de capacité maximale de la base de données, **afin d'agir avant de manquer d'espace sur le stockage distant**.\nVoulez-vous activer ceci ?\n\n> [!MORE]-\n> - 0 : Ne pas avertir sur la taille de stockage.\n> Recommandé si vous avez suffisamment d'espace sur le stockage distant, surtout en auto-hébergement. Vous pouvez vérifier la taille et reconstruire manuellement.\n> - 800 : Avertir si la taille du stockage distant dépasse 800 Mo.\n> Recommandé si vous utilisez fly.io avec une limite de 1 Go ou IBM Cloudant.\n> - 2000 : Avertir si la taille du stockage distant dépasse 2 Go.\n\nSi la limite est atteinte, il nous sera proposé de l'augmenter étape par étape.\n", + he: "ניתן להגדיר אזהרת קיבולת מקסימלית של מסד הנתונים, **כדי לנקוט פעולה לפני שנגמר המקום באחסון המרוחד**.\nהאם להפעיל זאת?\n\n> [!MORE]-\n> - 0: אל תזהיר על גודל האחסון.\n> מומלץ אם יש לך מספיק מקום באחסון המרוחד, בעיקר אם השרת הוא שלך. ניתן לבדוק את גודל האחסון ולבנות מחדש ידנית.\n> - 800: הזהר אם גודל האחסון המרוחד עולה על 800MB.\n> מומלץ אם אתה משתמש ב-fly.io עם מגבלת 1GB או ב-IBM Cloudant.\n> - 2000: הזהר אם גודל האחסון המרוחד עולה על 2GB.\n\nאם הגענו למגבלה, תתבקש להרחיב את הסף בהדרגה.\n", + ja: "リモートストレージの容量が不足する前に対策を講じるため、**最大データベース容量の警告**を設定できます。\nこれを有効にしますか?\n\n> [!MORE]-\n> - 0: ストレージサイズについて警告しない。\n> 自宅サーバーなど、リモートストレージに十分な容量がある場合に推奨されます。ストレージサイズを確認し、手動で再構築できます。\n> - 800: リモートストレージサイズが800MBを超えたら警告。\n> 1GB制限のfly.ioやIBM Cloudantを使用している場合に推奨されます。\n> - 2000: リモートストレージサイズが2GBを超えたら警告。\n\n制限に達した場合、段階的に制限を増やすよう求められます。\n", + ko: "**원격 스토리지 공간이 부족해지기 전에 미리 조치할 수 있도록** 데이터베이스 용량 경고를 설정할 수 있습니다.\n이 기능을 활성화하시겠습니까?\n\n> [!MORE]-\n> - 0: 스토리지 용량에 대한 경고 없음\n> 자체 서버를 사용하는 등 여유 공간이 충분한 경우에 권장됩니다. 스토리지 용량을 직접 확인하고 수동으로 재구성할 수 있습니다.\n> - 800: 원격 스토리지 용량이 800MB를 초과하면 경고\n> 1GB 제한이 있는 fly.io나 IBM Cloudant 사용 시 권장됩니다.\n> - 2000: 원격 스토리지 용량이 2GB를 초과하면 경고\n\n설정한 용량 한도에 도달하면, 단계적으로 경고 한도를 늘릴지 여부를 묻게 됩니다.\n", + ru: "Можно установить предупреждение о максимальной ёмкости базы данных.", + zh: "我们可以设置一个最大数据库容量警告,**以便在远程存储空间耗尽前采取行动**。\n您想启用这个功能吗?\n\n> [!MORE]-\n> - 0: 不警告存储大小。\n> 如果您在远程存储(尤其是自托管)上有足够的空间,则推荐此选项。您可以手动检查存储大小并重建。\n> - 800: 如果远程存储大小超过 800MB 则发出警告。\n> 如果您使用的是 fly.io(1GB 限制) 或 IBM Cloudant,则推荐此选项。\n> - 2000: 如果远程存储大小超过 2GB 则发出警告。\n\n如果达到限制,系统会要求我们逐步增大限制\n", + }, + "moduleCheckRemoteSize.noticeExceeded": { + def: "Remote storage size is ${measuredSize}, above the configured ${notifySize} notification threshold. {HERE}", + }, + "moduleCheckRemoteSize.noticeNotConfigured": { + def: "Remote storage size notifications are not configured. {HERE}", + }, + "moduleCheckRemoteSize.option2GB": { + def: "2GB (Standard)", + es: "2GB (Estándar)", + fr: "2 Go (Standard)", + he: "2GB (סטנדרטי)", + ja: "2GB (標準)", + ko: "2GB (표준)", + ru: "2ГБ (Стандарт)", + zh: "2GB (标准)", + }, + "moduleCheckRemoteSize.option800MB": { + def: "800MB (Cloudant, fly.io)", + es: "800MB (Cloudant, fly.io)", + fr: "800 Mo (Cloudant, fly.io)", + he: "800MB (Cloudant, fly.io)", + ja: "800MB (Cloudant, fly.io)", + ko: "800MB (Cloudant, fly.io)", + ru: "800МБ (Cloudant, fly.io)", + zh: "800MB (Cloudant, fly.io)", + }, + "moduleCheckRemoteSize.optionAskMeLater": { + def: "Ask me later", + es: "Pregúntame más tarde", + fr: "Me demander plus tard", + he: "שאל מאוחר יותר", + ja: "後で確認する", + ko: "나중에 물어보기", + ru: "Спросить позже", + zh: "稍后问我", + }, + "moduleCheckRemoteSize.optionDismiss": { + def: "Dismiss", + es: "Descartar", + fr: "Ignorer", + he: "דחה", + ja: "無視", + ko: "무시", + ru: "Отклонить", + zh: "忽略", + }, + "moduleCheckRemoteSize.optionIncreaseLimit": { + def: "increase to ${newMax}MB", + es: "aumentar a ${newMax}MB", + fr: "augmenter à ${newMax} Mo", + he: "הגדל ל-${newMax}MB", + ja: "${newMax}MBに設定", + ko: "${newMax}MB로 증가", + ru: "увеличить до newMaxМБ", + zh: "增加到 ${newMax}MB", + }, + "moduleCheckRemoteSize.optionNoWarn": { + def: "No, never warn please", + es: "No, nunca advertir por favor", + fr: "Non, ne jamais avertir", + he: "לא, אל תזהיר בכלל", + ja: "いいえ、警告しないでください", + ko: "아니요, 경고하지 마세요", + ru: "Нет, не уведомлять", + zh: "不,请永远不要警告", + }, + "moduleCheckRemoteSize.optionRebuildAll": { + def: "Rebuild Everything Now", + es: "Reconstruir todo ahora", + fr: "Tout reconstruire maintenant", + he: "בנה הכל מחדש עכשיו", + ja: "今すべてを再構築", + ko: "지금 모든 것 재구축", + ru: "Перестроить всё сейчас", + zh: "立即重建所有内容", + }, + "moduleCheckRemoteSize.optionReview": { + def: "Review options", + }, + "moduleCheckRemoteSize.titleDatabaseSizeLimitExceeded": { + def: "Remote storage size exceeded the limit", + es: "El tamaño del almacenamiento remoto superó el límite", + fr: "Taille du stockage distant au-delà de la limite", + he: "גודל האחסון המרוחד חרג מהמגבלה", + ja: "リモートストレージサイズが制限を超過しました", + ko: "원격 스토리지 크기가 제한을 초과했습니다", + ru: "Размер удалённого хранилища превысил лимит", + zh: "远程存储大小超出限制", + }, + "moduleCheckRemoteSize.titleDatabaseSizeNotify": { + def: "Setting up database size notification", + es: "Configuración de notificación de tamaño de base de datos", + fr: "Configuration de la notification de taille de base", + he: "הגדרת התראה על גודל מסד נתונים", + ja: "データベースサイズ通知の設定", + ko: "데이터베이스 크기 알림 설정", + ru: "Настройка уведомления о размере базы данных", + zh: "设置数据库大小通知", + }, + "moduleInputUIObsidian.defaultTitleConfirmation": { + def: "Confirmation", + es: "Confirmación", + fr: "Confirmation", + he: "אישור", + ja: "確認", + ko: "확인", + ru: "Подтверждение", + zh: "确认", + }, + "moduleInputUIObsidian.defaultTitleSelect": { + def: "Select", + es: "Seleccionar", + fr: "Sélection", + he: "בחר", + ja: "選択", + ko: "선택", + ru: "Выбор", + zh: "选择", + }, + "moduleInputUIObsidian.optionNo": { + def: "No", + es: "No", + fr: "Non", + he: "לא", + ja: "いいえ", + ko: "아니요", + ru: "Нет", + zh: "否", + }, + "moduleInputUIObsidian.optionYes": { + def: "Yes", + es: "Sí", + fr: "Oui", + he: "כן", + ja: "はい", + ko: "예", + ru: "Да", + zh: "是", + }, + "moduleLiveSyncMain.logAdditionalSafetyScan": { + def: "Additional safety scan...", + es: "Escanéo de seguridad adicional...", + fr: "Analyse de sécurité supplémentaire...", + he: "סריקת בטיחות נוספת...", + ja: "追加の安全スキャン中...", + ko: "추가 안전 검사 중...", + ru: "Дополнительная проверка безопасности...", + zh: "额外的安全扫描...", + }, + "moduleLiveSyncMain.logLoadingPlugin": { + def: "Loading plugin...", + es: "Cargando complemento...", + fr: "Chargement du plugin...", + he: "טוען תוסף...", + ja: "プラグインをロード中...", + ko: "플러그인 로딩 중...", + ru: "Загрузка плагина...", + zh: "正在加载插件...", + }, + "moduleLiveSyncMain.logPluginInitCancelled": { + def: "Plugin initialisation was cancelled by a module", + es: "La inicialización del complemento fue cancelada por un módulo", + fr: "L'initialisation du plugin a été annulée par un module", + he: "אתחול התוסף בוטל על ידי מודול", + ja: "プラグインの初期化がモジュールによってキャンセルされました", + ko: "모듈에 의해 플러그인 초기화가 취소되었습니다", + ru: "Инициализация плагина отменена модулем", + zh: "插件初始化被某个模块取消", + }, + "moduleLiveSyncMain.logPluginVersion": { + def: "Self-hosted LiveSync v${manifestVersion} ${packageVersion}", + es: "Self-hosted LiveSync v${manifestVersion} ${packageVersion}", + fr: "Self-hosted LiveSync v${manifestVersion} ${packageVersion}", + he: "Self-hosted LiveSync גרסה ${manifestVersion} ${packageVersion}", + ja: "Self-hosted LiveSync v${manifestVersion} ${packageVersion}", + ko: "Self-hosted LiveSync v${manifestVersion} ${packageVersion}", + ru: "Self-hosted LiveSync vmanifestVersion packageVersion", + zh: "Self-hosted LiveSync v${manifestVersion} ${packageVersion}", + }, + "moduleLiveSyncMain.logReadChangelog": { + def: "LiveSync has updated, please read the changelog!", + es: "LiveSync se ha actualizado, ¡por favor lee el registro de cambios!", + fr: "LiveSync a été mis à jour, veuillez lire le journal des modifications !", + he: "LiveSync עודכן, אנא קרא את יומן השינויים!", + ja: "LiveSyncが更新されました。変更履歴をお読みください!", + ko: "LiveSync가 업데이트되었습니다. 변경사항을 읽어보세요!", + ru: "LiveSync обновлён, пожалуйста, прочитайте список изменений!", + zh: "LiveSync 已更新,请阅读更新日志!", + }, + "moduleLiveSyncMain.logSafetyScanCompleted": { + def: "Additional safety scan completed", + es: "Escanéo de seguridad adicional completado", + fr: "Analyse de sécurité supplémentaire terminée", + he: "סריקת הבטיחות הנוספת הושלמה", + ja: "追加の安全スキャンが完了しました", + ko: "추가 안전 검사가 완료되었습니다", + ru: "Дополнительная проверка безопасности завершена", + zh: "额外的安全扫描完成", + }, + "moduleLiveSyncMain.logSafetyScanFailed": { + def: "Additional safety scan has failed on a module", + es: "El escaneo de seguridad adicional ha fallado en un módulo", + fr: "L'analyse de sécurité supplémentaire a échoué sur un module", + he: "סריקת הבטיחות הנוספת נכשלה במודול", + ja: "モジュールで追加の安全スキャンが失敗しました", + ko: "모듈에서 추가 안전 검사가 실패했습니다", + ru: "Дополнительная проверка безопасности не удалась в модуле", + zh: "额外的安全扫描在某个模块上失败", + }, + "moduleLiveSyncMain.logUnloadingPlugin": { + def: "Unloading plugin...", + es: "Descargando complemento...", + fr: "Déchargement du plugin...", + he: "מסיר תוסף...", + ja: "プラグインをアンロード中...", + ko: "플러그인 언로딩 중...", + ru: "Выгрузка плагина...", + zh: "正在卸载插件...", + }, + "moduleLiveSyncMain.logVersionUpdate": { + def: "LiveSync has been updated, In case of breaking updates, all automatic synchronization has been temporarily disabled. Ensure that all devices are up to date before enabling.", + es: "LiveSync se ha actualizado, en caso de actualizaciones que rompan, toda la sincronización automática se ha desactivado temporalmente. Asegúrate de que todos los dispositivos estén actualizados antes de habilitar.", + fr: "LiveSync a été mis à jour. En cas de mises à jour non rétrocompatibles, toute synchronisation automatique a été temporairement désactivée. Assurez-vous que tous les appareils sont à jour avant d'activer.", + he: "LiveSync עודכן. במקרה של עדכונים משמעותיים, כל הסנכרון האוטומטי הושבת זמנית. ודא שכל המכשירים מעודכנים לפני ההפעלה.", + ja: "LiveSyncが更新されました。互換性のない更新の場合、すべての自動同期が一時的に無効化されています。有効にする前に、すべてのデバイスが最新の状態であることを確認してください。", + ko: "LiveSync가 업데이트되었습니다. 호환성 문제가 있는 업데이트의 경우 모든 자동 동기화가 일시적으로 비활성화되었습니다. 활성화하기 전에 모든 기기가 최신 상태인지 확인하세요.", + ru: "LiveSync обновлён. В случае критических изменений автоматическая синхронизация временно отключена. Убедитесь, что все устройства обновлены перед включением.", + zh: "LiveSync 已更新,如果存在破坏性更新,所有自动同步已暂时禁用。请确保所有设备都更新到最新版本后再启用", + }, + "moduleLiveSyncMain.msgScramEnabled": { + def: "Self-hosted LiveSync has been configured to ignore some events. Is this correct?\n\n| Type | Status | Note |\n|:---:|:---:|---|\n| Storage Events | ${fileWatchingStatus} | Every modification will be ignored |\n| Database Events | ${parseReplicationStatus} | Every synchronised change will be postponed |\n\nDo you want to resume them and restart Obsidian?\n\n> [!DETAILS]-\n> These flags are set by the plug-in while rebuilding, or fetching. If the process ends abnormally, it may be kept unintended.\n> If you are not sure, you can try to rerun these processes. Make sure to back your vault up.\n", + es: "Self-hosted LiveSync se ha configurado para ignorar algunos eventos. ¿Es esto correcto?\n\n| Tipo | Estado | Nota |\n|:---:|:---:|---|\n| Eventos de almacenamiento | ${fileWatchingStatus} | Se ignorará cada modificación |\n| Eventos de base de datos | ${parseReplicationStatus} | Cada cambio sincronizado se pospondrá |\n\n¿Quieres reanudarlos y reiniciar Obsidian?\n\n> [!DETAILS]-\n> Estas banderas son establecidas por el complemento mientras se reconstruye o se obtiene. Si el proceso termina de forma anormal, puede mantenerse sin querer.\n> Si no estás seguro, puedes intentar volver a ejecutar estos procesos. Asegúrate de hacer una copia de seguridad de tu bóveda.\n", + fr: "Self-hosted LiveSync a été configuré pour ignorer certains événements. Est-ce correct ?\n\n| Type | Statut | Note |\n|:---:|:---:|---|\n| Événements de stockage | ${fileWatchingStatus} | Toute modification sera ignorée |\n| Événements de base | ${parseReplicationStatus} | Tout changement synchronisé sera reporté |\n\nVoulez-vous les reprendre et redémarrer Obsidian ?\n\n> [!DETAILS]-\n> Ces indicateurs sont définis par le plug-in lors d'une reconstruction ou d'une récupération. Si le processus se termine anormalement, ils peuvent rester activés involontairement.\n> Si vous n'êtes pas certain, vous pouvez relancer ces processus. Veillez à sauvegarder votre coffre.\n", + he: "Self-hosted LiveSync הוגדר להתעלם מאירועים מסוימים. האם זה נכון?\n\n| סוג | סטטוס | הערה |\n|:---:|:---:|---|\n| אירועי אחסון | ${fileWatchingStatus} | כל שינוי יתעלם |\n| אירועי מסד נתונים | ${parseReplicationStatus} | כל שינוי מסונכרן יידחה |\n\nהאם לחדש אותם ולהפעיל מחדש את Obsidian?\n\n> [!DETAILS]-\n> דגלים אלה מוגדרים על ידי הפלאגין במהלך בנייה מחדש או משיכה. אם התהליך הסתיים בצורה לא תקינה, ייתכן שהם נשארו כלא מכוון.\n> אם אינך בטוח, ניתן לנסות להריץ מחדש את התהליכים. ודא שיש לך גיבוי של הכספת.\n", + ja: "Self-hosted LiveSyncは一部のイベントを無視するように設定されています。これは正しいですか?\n\n| タイプ | ステータス | メモ |\n|:---:|:---:|---|\n| ストレージイベント | ${fileWatchingStatus} | すべての変更が無視されます |\n| データベースイベント | ${parseReplicationStatus} | すべての同期された変更が延期されます |\n\nこれらを再開してObsidianを再起動しますか?\n\n> [!DETAILS]-\n> これらのフラグは、プラグインが再構築またはフェッチ中に設定されます。プロセスが異常終了した場合、意図せず保持されることがあります。\n> 不明な場合は、これらのプロセスを再実行してみてください。必ず保管庫をバックアップしてください。\n", + ko: "Self-hosted LiveSync가 일부 이벤트를 무시하도록 설정되어 있습니다. 이 설정이 맞습니까?\n\n| 유형 | 상태 | 설명 |\n|:---:|:---:|---|\n| 스토리지 이벤트 | ${fileWatchingStatus} | 모든 수정 사항이 무시됩니다 |\n| 데이터베이스 이벤트 | ${parseReplicationStatus} | 모든 동기화 변경이 지연됩니다 |\n\n이벤트 감지를 다시 활성화하고 Obsidian을 재시작하시겠습니까?\n\n> [!DETAILS]-\n> 이러한 설정은 플러그인이 재구성 또는 데이터 가져오기 중에 자동으로 설정한 것입니다. 프로세스가 비정상적으로 종료되면 이 상태가 의도치 않게 유지될 수 있습니다.\n> 상태가 확실하지 않다면 이 과정을 다시 실행해 보세요. 재시작 전에 반드시 볼트를 백업해 주세요.", + ru: "Self-hosted LiveSync has been configured to ignore some events. Is this correct?\n\n| Type | Status | Note |\n|:---:|:---:|---|\n| Storage Events | ${fileWatchingStatus} | Every modification will be ignored |\n| Database Events | ${parseReplicationStatus} | Every synchronised change will be postponed |\n\nDo you want to resume them and restart Obsidian?\n\n> [!DETAILS]-\n> These flags are set by the plug-in while rebuilding, or fetching. If the process ends abnormally, it may be kept unintended.\n> If you are not sure, you can try to rerun these processes. Make sure to back your vault up.\n", + zh: "Self-hosted LiveSync 已被配置为忽略某些事件。这样对吗?\n\n| 类型 | 状态 | 说明 |\n|:---:|:---:|---|\n| 存储事件 | ${fileWatchingStatus} | 所有修改都将被忽略 |\n| 数据库事件 | ${parseReplicationStatus} | 所有同步的更改都将被推迟 |\n\n您想恢复它们并重启 Obsidian 吗?\n\n> [!DETAILS]-\n> 这些标志是在重建或获取时由插件设置的。如果过程异常结束,它们可能会被无意中保留。\n> 如果您不确定,可以尝试重新运行这些过程。请确保备份您的库。\n", + }, + "moduleLiveSyncMain.optionKeepLiveSyncDisabled": { + def: "Keep LiveSync disabled", + es: "Mantener LiveSync desactivado", + fr: "Garder LiveSync désactivé", + he: "השאר LiveSync מנוטרל", + ja: "LiveSyncを無効のままにする", + ko: "LiveSync 비활성화 유지", + ru: "Оставить LiveSync отключённым", + zh: "保持 LiveSync 禁用", + }, + "moduleLiveSyncMain.optionResumeAndRestart": { + def: "Resume and restart Obsidian", + es: "Reanudar y reiniciar Obsidian", + fr: "Reprendre et redémarrer Obsidian", + he: "חדש והפעל מחדש את Obsidian", + ja: "再開してObsidianを再起動", + ko: "재개 후 Obsidian 재시작", + ru: "Продолжить и перезапустить Obsidian", + zh: "恢复并重启 Obsidian", + }, + "moduleLiveSyncMain.titleScramEnabled": { + def: "Scram Enabled", + es: "Scram habilitado", + fr: "Mode Scram activé", + he: "מצב בלימה פעיל", + ja: "緊急停止(Scram)が有効", + ko: "Scram 활성화됨", + ru: "Экстренная остановка включена", + zh: "紧急停止已启用", + }, + "moduleLocalDatabase.logWaitingForReady": { + def: "Waiting for ready...", + es: "Esperando a que la base de datos esté lista...", + fr: "En attente de disponibilité...", + he: "ממתין לכשירות...", + ja: "しばらくお待ちください...", + ko: "준비 대기 중...", + ru: "Ожидание готовности...", + zh: "等待就绪...", + }, + "moduleLog.showLog": { + def: "Show Log", + es: "Mostrar registro", + fr: "Afficher le journal", + he: "הצג יומן", + ja: "ログを表示", + ko: "로그 표시", + ru: "Показать лог", + zh: "显示日志", + }, + "moduleMigration.docUri": { + def: "https://github.com/vrtmrz/obsidian-livesync/blob/main/README.md#how-to-use", + es: "https://github.com/vrtmrz/obsidian-livesync/blob/main/README_ES.md#how-to-use", + fr: "https://github.com/vrtmrz/obsidian-livesync/blob/main/README.md#how-to-use", + he: "https://github.com/vrtmrz/obsidian-livesync/blob/main/README.md#how-to-use", + ja: "https://github.com/vrtmrz/obsidian-livesync/blob/main/README.md#how-to-use", + ko: "https://github.com/vrtmrz/obsidian-livesync/blob/main/README.md#how-to-use", + ru: "https://github.com/vrtmrz/obsidian-livesync/blob/main/README.md#how-to-use", + zh: "https://github.com/vrtmrz/obsidian-livesync/blob/main/docs/zh/README_zh.md#%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8", + }, + "moduleMigration.fix0256.buttons.checkItLater": { + def: "Check it later", + fr: "Vérifier plus tard", + he: "בדוק מאוחר יותר", + ja: "後で確認する", + ru: "Проверить позже", + zh: "稍后检查", + }, + "moduleMigration.fix0256.buttons.DismissForever": { + def: "I have fixed it, and do not ask again", + fr: "J'ai corrigé, et ne plus demander", + he: "תיקנתי, ואל תשאל שוב", + ja: "修正済み、今後確認しない", + ru: "Исправлено, больше не спрашивать", + zh: "我已经修复了,不再询问", + }, + "moduleMigration.fix0256.buttons.fix": { + def: "Fix", + fr: "Corriger", + he: "תקן", + ja: "修正", + ru: "Исправить", + zh: "修复", + }, + "moduleMigration.fix0256.message": { + def: 'Due to a recent bug (in v0.25.6), some files may not have been saved correctly in the sync database.\nWe have scanned our files and found some that need to be fixed.\n\n**Files ready to be fixed:**\n\n${files}\n\nThese files have size-matched original file on the storage, and are likely to be recoverable.\nWe can use them to fix the database, please click the "Fix" button below to fix them.\n\n${messageUnrecoverable}\n\nIf you want to run it again, you can do so from Hatch.\n', + fr: "En raison d'un bug récent (en v0.25.6), certains fichiers peuvent ne pas avoir été enregistrés correctement dans la base de synchronisation.\nNous avons analysé vos fichiers et trouvé ceux à corriger.\n\n**Fichiers prêts à être corrigés :**\n\n${files}\n\nCes fichiers ont un original de taille correspondante sur le stockage, et sont probablement récupérables.\nNous pouvons les utiliser pour corriger la base, veuillez cliquer sur le bouton « Corriger » ci-dessous pour les réparer.\n\n${messageUnrecoverable}\n\nSi vous voulez relancer l'opération, vous pouvez le faire depuis Hatch.\n", + he: 'בשל באג אחרון (בגרסה 0.25.6), ייתכן שחלק מהקבצים לא נשמרו כהלכה במסד הנתונים לסנכרון.\nסרקנו את הקבצים ומצאנו כאלה שיש לתקן.\n\n**קבצים מוכנים לתיקון:**\n\n${files}\n\nלקבצים אלה יש קובץ מקורי תואם גודל באחסון, וסביר שניתן לשחזרם.\nניתן להשתמש בהם לתיקון מסד הנתונים. לחץ על כפתור "תקן" למטה לתיקון.\n\n${messageUnrecoverable}\n\nאם ברצונך להריץ שוב, ניתן לעשות זאת מ-Hatch.\n', + ja: "最近のバグ(v0.25.6)により、一部のファイルが同期データベースに正しく保存されていない可能性があります。\nファイルをスキャンし、修正が必要なものが見つかりました。\n\n**修正準備ができたファイル:**\n\n${files}\n\nこれらのファイルはストレージ上の元ファイルとサイズが一致しており、復元可能です。\n「修正」ボタンをクリックしてデータベースを修正できます。\n\n${messageUnrecoverable}\n\n再実行したい場合は、Hatchから実行できます。\n", + ru: "Из-за недавней ошибки некоторые файлы могут быть неправильно сохранены.", + zh: "由于最近的一个 bug(在 v0.25.6 版本中),某些文件可能未正确保存到同步数据库中\n我们已经扫描了文件,并发现一些需要修复的文件\n\n**准备修复的文件:**\n\n${files}\n\n这些文件在存储中与原文件的大小匹配,可能是可恢复的\n我们可以使用它们修复数据库,请点击下方的“修复”按钮进行修复\n\n${messageUnrecoverable}\n\n\n如果你希望再次执行此操作,可以前往 Hatch 页面进行操作\n", + }, + "moduleMigration.fix0256.messageUnrecoverable": { + def: "**Files cannot be fixed on this device:**\n\n${filesNotRecoverable}\n\nThese files have inconsistent metadata, and cannot be fixed on this device (mostly we cannot determine which is correct).\nTo restore them, please check your other devices (also by this feature) or restore them manually from a backup.\n", + fr: "**Fichiers non réparables sur cet appareil :**\n\n${filesNotRecoverable}\n\nCes fichiers ont des métadonnées incohérentes et ne peuvent être corrigés sur cet appareil (le plus souvent, nous ne pouvons déterminer lequel est correct).\nPour les restaurer, vérifiez vos autres appareils (par cette même fonction) ou restaurez-les manuellement depuis une sauvegarde.\n", + he: "**קבצים שלא ניתן לתקן במכשיר זה:**\n\n${filesNotRecoverable}\n\nלקבצים אלה יש מטה-נתונים לא עקביים, ולא ניתן לתקנם במכשיר זה (לרוב לא ניתן לקבוע מה נכון). לשחזורם, אנא בדוק מכשירים אחרים שלך (גם בתכונה זו) או שחזר ידנית מגיבוי.\n", + ja: "**このデバイスで修正できないファイル:**\n\n${filesNotRecoverable}\n\nこれらのファイルはメタデータに不整合があり、このデバイスでは修正できません(ほとんどの場合、どちらが正しいか判定できません)。\n復元するには、他のデバイスで確認するか、バックアップから手動で復元してください。\n", + ru: "Файлы не могут быть исправлены на этом устройстве:", + zh: "**无法在此设备上修复的文件:**\n\n${filesNotRecoverable}\n\n这些文件的元数据不一致,无法在此设备上修复(大多数情况下我们无法确定哪一个是正确的)\n要恢复它们,请检查你的其他设备(同样使用此功能),或从备份中手动恢复\n", + }, + "moduleMigration.fix0256.title": { + def: "Broken files has been detected", + fr: "Fichiers corrompus détectés", + he: "זוהו קבצים פגומים", + ja: "破損ファイルが検出されました", + ru: "Обнаружены повреждённые файлы", + zh: "检测到损坏的文件", + }, + "moduleMigration.insecureChunkExist.buttons.fetch": { + def: "I already rebuilt the remote. Fetch from the remote", + fr: "J'ai déjà reconstruit le distant. Récupérer depuis le distant", + he: "כבר בניתי מחדש את השרת המרוחק. משוך מהשרת המרוחד", + ja: "リモートを既に再構築した。リモートからフェッチ", + ru: "Я уже перестроил удалённую. Загрузить с удалённой", + zh: "我已经重建了远程数据库,将从远程获取", + }, + "moduleMigration.insecureChunkExist.buttons.later": { + def: "I will do it later", + fr: "Je le ferai plus tard", + he: "אטפל בזה מאוחר יותר", + ja: "後で行う", + ru: "Сделаю позже", + zh: "我稍后再做", + }, + "moduleMigration.insecureChunkExist.buttons.rebuild": { + def: "Rebuild Everything", + fr: "Tout reconstruire", + he: "בנה הכל מחדש", + ja: "すべてを再構築", + ru: "Перестроить всё", + zh: "重建所有内容", + }, + "moduleMigration.insecureChunkExist.laterMessage": { + def: "We strongly recommend to treat this as soon as possible!", + fr: "Nous recommandons fortement de traiter ceci dès que possible !", + he: "אנו ממליצים בחום לטפל בזה בהקדם האפשרי!", + ja: "できるだけ早く対処することを強くお勧めします!", + ru: "Мы настоятельно рекомендуем обработать это как можно скорее!", + zh: "我们强烈建议尽快处理此问题!", + }, + "moduleMigration.insecureChunkExist.message": { + def: "Some chunks are not securely stored and are not encrypted in databases.\n**Please rebuild the database to fix this issue**.\n\nIf your Remote Database is not configured with SSL, or using less-secure credentials, **you are at risk of exposing sensitive data**.\n\nNote: Please upgrade your Self-hosted LiveSync v0.25.6 or higher on all your devices, and back your vault up surely.\nNote2: Rebuild Everything and Fetch consumes a bit of time and traffic, please do it in off-peak hours and ensure a stable network connection.\n", + fr: "Certains fragments ne sont pas stockés de façon sécurisée et ne sont pas chiffrés dans les bases.\n**Veuillez reconstruire la base pour corriger ce problème.**\n\nSi votre base distante n'est pas configurée avec SSL, ou utilise des identifiants peu sûrs, **vous risquez d'exposer des données sensibles**.\n\nNote : Veuillez mettre à jour Self-hosted LiveSync en v0.25.6 ou supérieur sur tous vos appareils, et sauvegardez votre coffre avec soin.\nNote 2 : Tout reconstruire et Récupérer consomme un peu de temps et de bande passante, veuillez le faire hors des heures de pointe et avec une connexion réseau stable.\n", + he: "חלק מהנתחים לא מאוחסנים בצורה מאובטחת ואינם מוצפנים במסד הנתונים.\n**אנא בנה מחדש את מסד הנתונים כדי לתקן בעיה זו**.\n\nאם מסד הנתונים המרוחד אינו מוגדר עם SSL, או משתמש בפרטי גישה פחות מאובטחים, **אתה בסיכון של חשיפת מידע רגיש**.\n\nהערה: אנא שדרג את Self-hosted LiveSync לגרסה 0.25.6 ומעלה על כל מכשיריך, וגבה את הכספת שלך.\nהערה 2: בנייה מחדש ומשיכה דורשות זמן ותעבורת רשת. אנא עשה זאת בשעות שיא נמוך וודא חיבור רשת יציב.\n", + ja: "一部のチャンクが安全に保存されておらず、データベースで暗号化されていません。\n**この問題を修正するにはデータベースを再構築してください**。\n\nリモートデータベースがSSLで設定されていない、または安全性の低い認証情報を使用している場合、**機密データが漏洩するリスクがあります**。\n\n注意: すべてのデバイスでSelf-hosted LiveSync v0.25.6以降にアップグレードし、必ず保管庫をバックアップしてください。\n注意2: すべてを再構築とフェッチは時間とトラフィックを消費します。オフピーク時間に安定したネットワークで実行してください。\n", + ru: "Некоторые чанки хранятся небезопасно. Пожалуйста, перестройте базу данных.", + zh: "一些块未安全存储,并且在数据库中未加密\n**请重建数据库以修复此问题**.\n\n如果你的远程数据库未配置 SSL,或者使用了不安全的凭据 **你可能面临暴露敏感数据的风险**.\n\n注意:请在所有设备上将 Self-hosted LiveSync 升级到 v0.25.6 或更高版本,并确保备份你的保险库\n\n注意2:重建所有内容和获取操作会消耗一些时间和流量,请在非高峰时段进行,并确保网络连接稳定\n", + }, + "moduleMigration.insecureChunkExist.title": { + def: "Insecure chunks found!", + fr: "Fragments non sécurisés détectés !", + he: "נמצאו נתחים לא מאובטחים!", + ja: "安全でないチャンクが見つかりました!", + ru: "Обнаружены небезопасные чанки!", + zh: "发现不安全的块!", + }, + "moduleMigration.logBulkSendCorrupted": { + def: "Send chunks in bulk has been enabled, however, this feature had been corrupted. Sorry for your inconvenience. Automatically disabled.", + es: "El envío de fragmentos en bloque se ha habilitado, sin embargo, esta función se ha corrompido. Disculpe las molestias. Deshabilitado automáticamente.", + fr: "L'envoi groupé de fragments a été activé, mais cette fonctionnalité était corrompue. Désolé pour la gêne. Désactivée automatiquement.", + he: "שליחת נתחים באצווה הופעלה, אך תכונה זו הייתה פגועה. מתנצלים על אי הנוחות. נוטרלה אוטומטית.", + ja: "チャンクの一括送信が有効にされていましたが、この機能に問題がありました。ご不便をおかけして申し訳ありません。自動的に無効化されました。", + ko: "청크 일괄 전송이 활성화되었지만, 이 기능에 문제가 있었습니다. 불편을 드려 죄송합니다. 자동으로 비활성화되었습니다.", + ru: "Отправка чанков пакетами была включена, но эта функция была повреждена. Приносим извинения. Автоматически отключено.", + zh: "已启用批量发送 chunks,但此功能已损坏。给您带来不便,我们深表歉意。已自动禁用", + }, + "moduleMigration.logFetchRemoteTweakFailed": { + def: "Failed to fetch remote tweak values", + es: "Error al obtener los valores de ajuste remoto", + fr: "Échec de la récupération des valeurs d'ajustement distantes", + he: "נכשל במשיכת ערכי כיוונון מרוחקים", + ja: "リモートの調整値の取得に失敗しました", + ko: "원격 조정 값을 가져오는데 실패했습니다", + ru: "Не удалось загрузить удалённые настройки", + zh: "获取远程调整值失败", + }, + "moduleMigration.logLocalDatabaseNotReady": { + def: "Something went wrong! The local database is not ready", + es: "¡Algo salió mal! La base de datos local no está lista", + fr: "Un problème est survenu ! La base locale n'est pas prête", + he: "משהו השתבש! מסד הנתונים המקומי אינו מוכן", + ja: "何か問題が発生しました!ローカルデータベースが準備できていません", + ko: "문제가 발생했습니다! 로컬 데이터베이스가 준비되지 않았습니다", + ru: "Что-то пошло не так! Локальная база данных не готова", + zh: "出错了!本地数据库尚未准备好", + }, + "moduleMigration.logMigratedSameBehaviour": { + def: "Migrated to db:${current} with the same behaviour as before", + es: "Migrado a db:${current} con el mismo comportamiento que antes", + fr: "Migration vers db:${current} avec le même comportement qu'auparavant", + he: "הוגר ל-db:${current} עם אותה התנהגות כמקודם", + ja: "以前と同じ動作でdb:${current}に移行しました", + ko: "이전과 같은 방식으로 동작하도록 db:${current}로 데이터 구조 전환이 완료되었습니다", + ru: "Миграция на db:current с тем же поведением, что и раньше", + zh: "已迁移到 db:${current},行为与之前相同", + }, + "moduleMigration.logMigrationFailed": { + def: "Migration failed or cancelled from ${old} to ${current}", + es: "La migración falló o se canceló de ${old} a ${current}", + fr: "Migration échouée ou annulée de ${old} vers ${current}", + he: "הגירה נכשלה או בוטלה מ-${old} ל-${current}", + ja: "${old}から${current}への移行が失敗またはキャンセルされました", + ko: "${old}에서 ${current}로의 데이터 구조 전환이 실패했거나 중단되었습니다", + ru: "Миграция не удалась или отменена с old на current", + zh: "从 ${old} 到 ${current} 的迁移失败或已取消", + }, + "moduleMigration.logRedflag2CreationFail": { + def: "Failed to create redflag2", + es: "Error al crear redflag2", + fr: "Échec de création de redflag2", + he: "יצירת redflag2 נכשלה", + ja: "redflag2の作成に失敗しました", + ko: "redflag2 생성에 실패했습니다", + ru: "Не удалось создать redflag2", + zh: "创建 redflag2 失败", + }, + "moduleMigration.logRemoteTweakUnavailable": { + def: "Could not get remote tweak values", + es: "No se pudieron obtener los valores de ajuste remoto", + fr: "Impossible d'obtenir les valeurs d'ajustement distantes", + he: "לא ניתן לקבל ערכי כיוונון מרוחקים", + ja: "リモートの調整値を取得できませんでした", + ko: "원격 조정 값을 가져올 수 없습니다", + ru: "Не удалось получить удалённые настройки", + zh: "无法获取远程调整值", + }, + "moduleMigration.logSetupCancelled": { + def: "The setup has been cancelled, Self-hosted LiveSync waiting for your setup!", + es: "La configuración ha sido cancelada, ¡Self-hosted LiveSync está esperando tu configuración!", + fr: "La configuration a été annulée, Self-hosted LiveSync attend votre configuration !", + he: "ההגדרה בוטלה, Self-hosted LiveSync ממתין להגדרתך!", + ja: "セットアップがキャンセルされました。Self-hosted LiveSyncはセットアップを待っています!", + ko: "설정이 취소되었습니다. Self-hosted LiveSync가 설정을 기다리고 있습니다!", + ru: "Настройка отменена, Self-hosted LiveSync ожидает вашей настройки!", + zh: "设置已取消,Self-hosted LiveSync 正在等待您的设置!", + }, + "moduleMigration.msgFetchRemoteAgain": { + def: "As you may already know, the self-hosted LiveSync has changed its default behaviour and database structure.\n\nAnd thankfully, with your time and efforts, the remote database appears to have already been migrated. Congratulations!\n\nHowever, we need a bit more. The configuration of this device is not compatible with the remote database. We will need to fetch the remote database again. Should we fetch from the remote again now?\n\n___Note: We cannot synchronise until the configuration has been changed and the database has been fetched again.___\n___Note2: The chunks are completely immutable, we can fetch only the metadata and difference.___", + es: "Como ya sabrás, Self-hosted LiveSync ha cambiado su comportamiento predeterminado y la estructura de la base de datos.\n\nAfortunadamente, con tu tiempo y esfuerzo, la base de datos remota parece haber sido ya migrada. ¡Felicidades!\n\nSin embargo, necesitamos un poco más. La configuración de este dispositivo no es compatible con la base de datos remota. Necesitaremos volver a obtener la base de datos remota. ¿Debemos obtenerla nuevamente ahora?\n\n___Nota: No podemos sincronizar hasta que la configuración haya sido cambiada y la base de datos haya sido obtenida nuevamente.___\n___Nota2: Los fragmentos son completamente inmutables, solo podemos obtener los metadatos y diferencias.___", + fr: "Comme vous le savez peut-être déjà, Self-hosted LiveSync a modifié son comportement par défaut et la structure de sa base de données.\n\nEt, grâce à votre temps et vos efforts, la base distante semble déjà avoir été migrée. Félicitations !\n\nCependant, il faut encore un peu plus. La configuration de cet appareil n'est pas compatible avec la base distante. Nous devrons récupérer à nouveau la base distante. Devons-nous récupérer depuis le distant maintenant ?\n\n___Note : Nous ne pouvons pas synchroniser tant que la configuration n'a pas été modifiée et que la base n'a pas été récupérée à nouveau.___\n___Note 2 : Les fragments sont complètement immuables, nous ne pouvons récupérer que les métadonnées et les différences.___", + he: "כפי שייתכן שכבר ידוע לך, Self-hosted LiveSync שינה את התנהגות ברירת המחדל ומבנה מסד הנתונים.\n\nובזכות זמנך ומאמציך, מסד הנתונים המרוחד נראה כבר הוגר. ברכות!\n\nעם זאת, נדרש עוד קצת. תצורת מכשיר זה אינה תואמת למסד הנתונים המרוחד. נצטרך למשוך את מסד הנתונים המרוחד שוב. האם למשוך מהשרת המרוחד עכשיו?\n\n___הערה: לא ניתן לסנכרן עד שהתצורה תשתנה ומסד הנתונים יימשך שוב.___\n___הערה 2: הנתחים הם בלתי-ניתנים לשינוי לחלוטין, ניתן למשוך רק את המטה-נתונים וההפרש.___", + ja: "ご存知のとおり、self-hosted LiveSyncはデフォルトの動作とデータベース構造を変更しました。\n\nご協力のおかげで、リモートデータベースはすでに移行されているようです。おめでとうございます!\n\nしかし、もう少し必要です。このデバイスの設定はリモートデータベースと互換性がありません。リモートデータベースを再度フェッチする必要があります。今すぐリモートから再フェッチしますか?\n\n___注意: 設定が変更され、データベースが再フェッチされるまで同期できません。___\n___注意2: チャンクは完全に不変なので、メタデータと差分のみフェッチできます。___", + ko: "이미 알고 계시겠지만, Self-hosted LiveSync의 기본 동작 방식과 데이터베이스 구조가 변경되었습니다.\n\n다행히도 여러분의 노력 덕분에 원격 데이터베이스는 이미 성공적으로 데이터 구조 전환이 완료된 것으로 보입니다. 축하드립니다!\n\n하지만 아직 일부 추가 작업이 필요합니다. 이 기기의 설정이 원격 데이터베이스와 호환되지 않으므로, 원격 데이터를 다시 가져와야 합니다. 지금 원격 데이터베이스를 다시 가져오시겠습니까?\n\n___참고: 설정이 변경되고 데이터베이스를 다시 불러오기 전까지는 동기화가 불가능합니다.___\n___참고2: 청크는 변경이 불가능한 구조이므로, 메타데이터와 차이점만 가져올 수 있습니다.___", + ru: "Удалённая база данных, похоже, уже была мигрирована. Конфигурация этого устройства несовместима.", + zh: "您可能已经知道,Self-hosted LiveSync 更改了其默认行为和数据库结构。\n\n值得庆幸的是,在您的时间和努力下,远程数据库似乎已经迁移完成。恭喜!\n\n但是,我们还需要一点点操作。此设备的配置与远程数据库不兼容。我们需要再次从远程数据库获取。我们现在应该再次从远程获取吗?\n\n___注意:在更改配置并再次获取数据库之前,我们无法进行同步。___\n___注意2:chunks 是完全不可变的,我们只能获取元数据和差异", + }, + "moduleMigration.msgInitialSetup": { + def: "Your device has **not been set up yet**. Let me guide you through the setup process.\n\nPlease keep in mind that every dialogue content can be copied to the clipboard. If you need to refer to it later, you can paste it into a note in Obsidian. You can also translate it into your language using a translation tool.\n\nFirst, do you have **Setup URI**?\n\nNote: If you do not know what it is, please refer to the [documentation](${URI_DOC}).", + es: "Tu dispositivo **aún no ha sido configurado**. Permíteme guiarte a través del proceso de configuración.\n\nTen en cuenta que todo el contenido del diálogo se puede copiar al portapapeles. Si necesitas consultarlo más tarde, puedes pegarlo en una nota en Obsidian. También puedes traducirlo a tu idioma utilizando una herramienta de traducción.\n\nPrimero, ¿tienes **URI de configuración**?\n\nNota: Si no sabes qué es, consulta la [documentación](${URI_DOC}).", + fr: "Votre appareil n'a **pas encore été configuré**. Laissez-moi vous guider dans le processus de configuration.\n\nVeuillez noter que chaque contenu de boîte de dialogue peut être copié dans le presse-papiers. Si vous souhaitez vous y référer plus tard, vous pouvez le coller dans une note d'Obsidian. Vous pouvez également le traduire dans votre langue via un outil de traduction.\n\nTout d'abord, disposez-vous d'une **URI de configuration** ?\n\nNote : Si vous ne savez pas ce que c'est, consultez la [documentation](${URI_DOC}).", + he: "המכשיר שלך **טרם הוגדר**. אנחנו כאן לעזור לך בתהליך ההגדרה.\n\nשים לב שניתן להעתיק את תוכן כל דיאלוג ללוח. אם צריך לחזור אליו מאוחר יותר, ניתן להדביק אותו כפתק ב-Obsidian. ניתן גם לתרגם לשפתך בעזרת כלי תרגום.\n\nראשית, האם יש לך **Setup URI**?\n\nהערה: אם אינך יודע מהו, אנא עיין ב[תיעוד](${URI_DOC}).", + ja: "このデバイスは**まだセットアップされていません**。セットアッププロセスをご案内します。\n\nすべてのダイアログの内容はクリップボードにコピーできます。後で参照する必要があれば、Obsidianのノートに貼り付けてください。翻訳ツールを使ってお使いの言語に翻訳することもできます。\n\nまず、**セットアップURI**をお持ちですか?\n\n注意: それが何か分からない場合は、[documentation](${URI_DOC})を参照してください。", + ko: "이 기기는 **아직 초기 설정이 완료되지 않았습니다**. 지금부터 설정 과정을 안내해 드리겠습니다.\n\n모든 대화 내용은 클립보드에 복사할 수 있습니다. 나중에 참고하려면 Obsidian 노트에 붙여넣거나 번역 도구를 활용해 번역하셔도 됩니다.\n\n먼저, **Setup URI**를 가지고 계신가요?\n\n참고: Setup URI가 무엇인지 잘 모르시겠다면 [문서](${URI_DOC})를 참고해 주세요.", + ru: "Ваше устройство ещё не настроено. У вас есть Setup URI?", + zh: "您的设备**尚未设置**。让我引导您完成设置过程。\n\n请记住,每个对话框内容都可以复制到剪贴板。如果以后需要参考,可以将其粘贴到 Obsidian 的笔记中。您也可以使用翻译工具将其翻译成您的语言。\n\n首先,您有**设置 URI** 吗?\n\n注意:如果您不知道这是什么,请参阅[文档](${URI_DOC})", + }, + "moduleMigration.msgRecommendSetupUri": { + def: "We strongly recommend that you generate a set-up URI and use it.\nIf you do not have knowledge about it, please refer to the [documentation](${URI_DOC}) (Sorry again, but it is important).\n\nHow do you want to set it up manually?", + es: "Te recomendamos encarecidamente que generes una URI de configuración y la utilices.\nSi no tienes conocimientos al respecto, consulta la [documentación](${URI_DOC}) (Lo siento de nuevo, pero es importante).\n\n¿Cómo quieres configurarlo manualmente?", + fr: "Nous recommandons vivement de générer une URI de configuration et de l'utiliser.\nSi vous ne connaissez pas, veuillez consulter la [documentation](${URI_DOC}) (Désolé encore, mais c'est important).\n\nComment souhaitez-vous effectuer la configuration manuellement ?", + he: "אנו ממליצים בחום לייצר Setup URI ולהשתמש בו.\nאם אין לך ידע בנושא, אנא עיין ב[תיעוד](${URI_DOC}) (מתנצלים שוב, אך זה חשוב).\n\nכיצד ברצונך להגדיר ידנית?", + ja: "セットアップURIを生成して使用することを強くお勧めします。\nこれについて知識がない場合は、[documentation](${URI_DOC})を参照してください(重要です)。\n\n手動でセットアップしますか?", + ko: "Setup URI를 생성해 사용하는 것을 강력히 권장합니다.\nSetup URI가 무엇인지 잘 모르시겠다면 [문서](${URI_DOC})를 참고해 주세요. 중요한 내용이니 꼭 확인하시기 바랍니다.\n\n직접 수동 설정을 진행하시겠습니까?", + ru: "Мы рекомендуем сгенерировать Setup URI.", + zh: "我们强烈建议您生成一个设置 URI 并使用它。\n如果您对此不了解,请参阅[文档](${URI_DOC})(再次抱歉,但这很重要)。\n\n您想如何手动设置?", + }, + "moduleMigration.msgSinceV02321": { + def: "Since v0.23.21, the self-hosted LiveSync has changed the default behaviour and database structure. The following changes have been made:\n\n1. **Case sensitivity of filenames**\n The handling of filenames is now case-insensitive. This is a beneficial change for most platforms, other than Linux and iOS, which do not manage filename case sensitivity effectively.\n (On These, a warning will be displayed for files with the same name but different cases).\n\n2. **Revision handling of the chunks**\n Chunks are immutable, which allows their revisions to be fixed. This change will enhance the performance of file saving.\n\n___However, to enable either of these changes, both remote and local databases need to be rebuilt. This process takes a few minutes, and we recommend doing it when you have ample time.___\n\n- If you wish to maintain the previous behaviour, you can skip this process by using `${KEEP}`.\n- If you do not have enough time, please choose `${DISMISS}`. You will be prompted again later.\n- If you have rebuilt the database on another device, please select `${DISMISS}` and try synchronizing again. Since a difference has been detected, you will be prompted again.", + es: "Desde la versión v0.23.21, Self-hosted LiveSync ha cambiado el comportamiento predeterminado y la estructura de la base de datos. Se han realizado los siguientes cambios:\n\n1. **Sensibilidad a mayúsculas de los nombres de archivo**\n El manejo de los nombres de archivo ahora no distingue entre mayúsculas y minúsculas. Este cambio es beneficioso para la mayoría de las plataformas, excepto Linux y iOS, que no gestionan efectivamente la sensibilidad a mayúsculas de los nombres de archivo.\n (En estos, se mostrará una advertencia para archivos con el mismo nombre pero diferentes mayúsculas).\n\n2. **Manejo de revisiones de los fragmentos**\n Los fragmentos son inmutables, lo que permite que sus revisiones sean fijas. Este cambio mejorará el rendimiento al guardar archivos.\n\n___Sin embargo, para habilitar cualquiera de estos cambios, es necesario reconstruir tanto las bases de datos remota como la local. Este proceso toma unos minutos, y recomendamos hacerlo cuando tengas tiempo suficiente.___\n\n- Si deseas mantener el comportamiento anterior, puedes omitir este proceso usando `${KEEP}`.\n- Si no tienes suficiente tiempo, por favor elige `${DISMISS}`. Se te pedirá nuevamente más tarde.\n- Si has reconstruido la base de datos en otro dispositivo, selecciona `${DISMISS}` e intenta sincronizar nuevamente. Dado que se ha detectado una diferencia, se te solicitará nuevamente.", + fr: "Depuis la v0.23.21, Self-hosted LiveSync a modifié son comportement par défaut et la structure de sa base. Les changements suivants ont été effectués :\n\n1. **Sensibilité à la casse des noms de fichiers**\n La gestion des noms de fichiers est désormais insensible à la casse. C'est un changement bénéfique pour la plupart des plateformes, hormis Linux et iOS, qui ne gèrent pas efficacement la casse des noms de fichiers.\n (Sur celles-ci, un avertissement s'affichera pour les fichiers portant le même nom avec une casse différente).\n\n2. **Gestion des révisions des fragments**\n Les fragments sont immuables, ce qui permet de fixer leurs révisions. Ce changement améliore les performances d'enregistrement des fichiers.\n\n___Cependant, pour activer l'un ou l'autre de ces changements, les bases locale et distante doivent être reconstruites. Ce processus prend quelques minutes, et nous recommandons de le faire quand vous avez le temps.___\n\n- Si vous souhaitez conserver le comportement précédent, vous pouvez ignorer ce processus via `${KEEP}`.\n- Si vous n'avez pas le temps, choisissez `${DISMISS}`. Vous serez invité à nouveau plus tard.\n- Si vous avez reconstruit la base sur un autre appareil, sélectionnez `${DISMISS}` et réessayez la synchronisation. Une différence étant détectée, vous serez invité à nouveau.", + he: "מאז גרסה 0.23.21, Self-hosted LiveSync שינה את התנהגות ברירת המחדל ומבנה מסד הנתונים. השינויים הבאים בוצעו:\n\n1. **תלות רישיות בשמות קבצים**\n הטיפול בשמות קבצים הוא כעת ללא תלות רישיות. זהו שינוי מועיל לרוב הפלטפורמות,\n פרט ל-Linux ו-iOS שאינן מנהלות תלות רישיות בקבצים ביעילות.\n (בפלטפורמות אלה, תוצג אזהרה עבור קבצים עם אותו שם אך רישיות שונה).\n\n2. **טיפול בגרסאות של נתחים**\n נתחים הם בלתי-ניתנים לשינוי, מה שמאפשר גרסאות קבועות. שינוי זה ישפר את\n ביצועי שמירת הקבצים.\n\n___עם זאת, כדי להפעיל אחד מהשינויים הללו, יש לבנות מחדש גם את מסד הנתונים המרוחד וגם את המקומי. תהליך זה לוקח כמה דקות, ואנו ממליצים לעשות זאת כשיש לך זמן פנוי.___\n\n- אם ברצונך לשמור את ההתנהגות הקודמת, ניתן לדלג על תהליך זה באמצעות `${KEEP}`.\n- אם אין לך מספיק זמן, אנא בחר `${DISMISS}`. תקבל תזכורת בהמשך.\n- אם בנית מחדש את מסד הנתונים במכשיר אחר, אנא בחר `${DISMISS}` ונסה לסנכרן שוב. מאחר שזוהה הפרש, תקבל תזכורת שוב.", + ja: "v0.23.21以降、self-hosted LiveSyncはデフォルトの動作とデータベース構造を変更しました。以下の変更が行われました:\n\n1. **ファイル名の大文字小文字の区別**\n ファイル名の処理が大文字小文字を区別しなくなりました。これは、ファイル名の大文字小文字を効果的に管理しないLinuxとiOS以外のほとんどのプラットフォームにとって有益な変更です。\n (これらの環境では、同じ名前で大文字小文字が異なるファイルに対して警告が表示されます)。\n\n2. **チャンクのリビジョン処理**\n チャンクは不変であり、リビジョンを固定できます。この変更により、ファイル保存のパフォーマンスが向上します。\n\n___しかし、これらの変更を有効にするには、リモートとローカルの両方のデータベースを再構築する必要があります。このプロセスは数分かかります。時間に余裕があるときに行うことをお勧めします。___\n\n- 以前の動作を維持したい場合は、`${KEEP}`を使用してこのプロセスをスキップできます。\n- 時間がない場合は、`${DISMISS}`を選択してください。後で再度確認されます。\n- 別のデバイスでデータベースを再構築した場合は、`${DISMISS}`を選択して再度同期してみてください。差異が検出されたため、再度確認されます。", + ko: "v0.23.21부터 Self-hosted LiveSync의 기본 동작 방식과 데이터베이스 구조가 변경되었습니다. 주요 변경사항은 다음과 같습니다:\n\n1. **파일명 대소문자 구분 처리**\n 이제 파일명은 대소문자를 구분하지 않고 처리됩니다. 이는 파일명 구분을 제대로 지원하지 않는 Linux 및 iOS를 제외한 대부분의 플랫폼에서 유리한 변화입니다.\n (Linux나 iOS에서는 대소문자만 다른 파일이 존재할 경우 경고가 표시됩니다)\n\n2. **청크 리비전 관리 방식 개선**\n 청크는 변경 불가능한(immutable) 구조로 고정되며, 이를 통해 리비전 처리가 안정화되고 파일 저장 성능이 향상됩니다.\n\n___단, 위 기능을 활성화하려면 원격 및 로컬 데이터베이스를 모두 재구성해야 합니다. 이 과정은 수 분이 소요되므로 여유가 있을 때 실행하시는 것을 권장합니다.___\n\n- 기존 방식대로 유지하려면 `${KEEP}`을 선택해 이 과정을 건너뛸 수 있습니다.\n- 시간이 부족하다면 `${DISMISS}`를 눌러주시면 나중에 다시 안내드리겠습니다.\n- 이미 다른 기기에서 데이터베이스를 재구성하셨다면 `${DISMISS}`를 선택한 뒤 다시 동기화해 보세요. 차이점이 감지되면 다시 안내드리겠습니다.", + ru: "Начиная с v0.23.21, self-hosted LiveSync изменил поведение и структуру базы данных.", + zh: "自 v0.23.21 起,Self-hosted LiveSync 更改了默认行为和数据库结构。进行了以下更改:\n\n1. **文件名的区分大小写** \n现在处理文件名时不区分大小写。这对于大多数平台来说是一个有益的更改,除了 Linux 和 iOS,它们不能有效地管理文件名的大小写敏感性。\n(在这些平台上,对于名称相同但大小写不同的文件将显示警告)。\n\n2. **chunks 的版本处理** \nchunks 是不可变的,这使得它们的版本可以固定。此更改将提高文件保存的性能。\n\n___然而,要启用这些更改中的任何一个,都需要重建远程和本地数据库。这个过程需要几分钟,我们建议您在有充足时间时进行。___\n\n- 如果您希望保持以前的行为,可以使用 `${KEEP}` 跳过此过程。\n- 如果您没有足够的时间,请选择 `${DISMISS}`。稍后会再次提示您。\n- 如果您已在另一台设备上重建了数据库,请选择 `${DISMISS}` 并尝试再次同步。由于检测到差异,系统会再次提示您", + }, + "moduleMigration.optionAdjustRemote": { + def: "Adjust to remote", + es: "Ajustar al remoto", + fr: "Ajuster au distant", + he: "התאם לשרת המרוחד", + ja: "リモートに合わせる", + ko: "원격에 맞추기", + ru: "Настроить под удалённую", + zh: "调整到远程设置", + }, + "moduleMigration.optionDecideLater": { + def: "Decide it later", + es: "Decidirlo más tarde", + fr: "Décider plus tard", + he: "החלט מאוחר יותר", + ja: "後で決める", + ko: "나중에 결정하기", + ru: "Решить позже", + zh: "稍后决定", + }, + "moduleMigration.optionEnableBoth": { + def: "Enable both", + es: "Habilitar ambos", + fr: "Activer les deux", + he: "הפעל את שניהם", + ja: "両方を有効にする", + ko: "둘 다 활성화", + ru: "Включить оба", + zh: "启用两者", + }, + "moduleMigration.optionEnableFilenameCaseInsensitive": { + def: "Enable only #1", + es: "Habilitar solo #1", + fr: "Activer seulement #1", + he: "הפעל רק #1", + ja: "#1のみ有効にする", + ko: "#1만 활성화", + ru: "Включить только #1", + zh: "仅启用 #1", + }, + "moduleMigration.optionEnableFixedRevisionForChunks": { + def: "Enable only #2", + es: "Habilitar solo #2", + fr: "Activer seulement #2", + he: "הפעל רק #2", + ja: "#2のみ有効にする", + ko: "#2만 활성화", + ru: "Включить только #2", + zh: "仅启用 #2", + }, + "moduleMigration.optionHaveSetupUri": { + def: "Yes, I have", + es: "Sí, tengo", + fr: "Oui, j'en ai une", + he: "כן, יש לי", + ja: "はい、持っています", + ko: "예, 있습니다", + ru: "Да, есть", + zh: "是的,我有", + }, + "moduleMigration.optionKeepPreviousBehaviour": { + def: "Keep previous behaviour", + es: "Mantener comportamiento anterior", + fr: "Conserver le comportement précédent", + he: "שמור על התנהגות קודמת", + ja: "以前の動作を維持", + ko: "이전 동작 유지", + ru: "Сохранить предыдущее поведение", + zh: "保持以前的行为", + }, + "moduleMigration.optionManualSetup": { + def: "Set it up all manually", + es: "Configurarlo todo manualmente", + fr: "Tout configurer manuellement", + he: "הגדר הכל ידנית", + ja: "すべて手動でセットアップ", + ko: "모든 것을 수동으로 설정", + ru: "Настроить всё вручную", + zh: "全部手动设置", + }, + "moduleMigration.optionNoAskAgain": { + def: "No, please ask again", + es: "No, por favor pregúntame de nuevo", + fr: "Non, demandez à nouveau", + he: "לא, אנא שאל שוב", + ja: "いいえ、後で確認する", + ko: "아니요 (나중에 다시 물어보기)", + ru: "Нет, спросить снова", + zh: "不,请稍后再次询问", + }, + "moduleMigration.optionNoSetupUri": { + def: "No, I do not have", + fr: "Non, je n'en ai pas", + he: "לא, אין לי", + ja: "いいえ、持っていません", + ko: "아니요, 없습니다", + ru: "Нет, нет", + zh: "不,我没有", + }, + "moduleMigration.optionRemindNextLaunch": { + def: "Remind me at the next launch", + fr: "Me rappeler au prochain lancement", + he: "הזכר לי בהפעלה הבאה", + ja: "次回起動時にリマインド", + ko: "다음 시작 시 알림", + ru: "Напомнить при следующем запуске", + zh: "下次启动时提醒我", + }, + "moduleMigration.optionSetupViaP2P": { + def: "Use P2P Sync to set up", + fr: "Utiliser Sync P2P pour configurer", + he: "השתמש ב-%{short_p2p_sync} להגדרה", + ja: "P2P Sync (試験機能)を使ってセットアップ", + ko: "P2P 동기화 (실험 기능)를 사용하여 설정", + ru: "Использовать short_p2p_sync для настройки", + zh: "Use P2P同步(实验性) to set up", + }, + "moduleMigration.optionSetupWizard": { + def: "Take me into the setup wizard", + fr: "Ouvrir l'assistant de configuration", + he: "קח אותי לאשף ההגדרה", + ja: "セットアップウィザードへ", + ko: "설정 마법사로 안내", + ru: "Перейти в мастер настройки", + zh: "带我进入设置向导", + }, + "moduleMigration.optionYesFetchAgain": { + def: "Yes, fetch again", + fr: "Oui, récupérer à nouveau", + he: "כן, משוך שוב", + ja: "はい、再フェッチする", + ko: "예 (다시 가져오기)", + ru: "Да, загрузить снова", + zh: "是的,再次获取", + }, + "moduleMigration.titleCaseSensitivity": { + def: "Case Sensitivity", + fr: "Sensibilité à la casse", + he: "תלות רישיות", + ja: "大文字小文字の区別", + ko: "대소문자 구분", + ru: "Чувствительность к регистру", + zh: "大小写敏感性", + }, + "moduleMigration.titleRecommendSetupUri": { + def: "Recommendation to use Setup URI", + fr: "Recommandation d'utilisation de l'URI de configuration", + he: "המלצה לשימוש ב-Setup URI", + ja: "セットアップURIの使用を推奨", + ko: "Setup URI 사용 권장", + ru: "Рекомендация использовать Setup URI", + zh: "推荐使用设置 URI", + }, + "moduleMigration.titleWelcome": { + def: "Welcome to Self-hosted LiveSync", + fr: "Bienvenue dans Self-hosted LiveSync", + he: "ברוך הבא ל-Self-hosted LiveSync", + ja: "Self-hosted LiveSyncへようこそ", + ko: "Self-hosted LiveSync에 오신 것을 환영합니다", + ru: "Добро пожаловать в Self-hosted LiveSync", + zh: "欢迎使用 Self-hosted LiveSync", + }, + "moduleObsidianMenu.replicate": { + def: "Replicate", + es: "Replicar", + fr: "Répliquer", + he: "שכפל", + ja: "レプリケート", + ko: "복제", + ru: "Реплицировать", + zh: "复制", + }, + "More actions": { + def: "More actions", + es: "Más acciones", + ja: "その他の操作", + ko: "추가 작업", + ru: "Другие действия", + zh: "更多操作", + "zh-tw": "更多操作", + }, + "Move remotely deleted files to the trash, instead of deleting.": { + def: "Move remotely deleted files to the trash, instead of deleting.", + es: "Mover archivos borrados remotos a papelera en lugar de eliminarlos", + fr: "Déplacer les fichiers supprimés à distance vers la corbeille, au lieu de les supprimer.", + he: "העבר קבצים שנמחקו מרחוק לאשפה, במקום למחוק.", + ja: "リモートで削除されたファイルを削除せずにゴミ箱に移動する。", + ko: "원격에서 삭제된 파일을 삭제하는 대신 휴지통으로 이동합니다.", + ru: "Перемещать удалённые на удалённом сервере файлы в корзину вместо удаления.", + zh: "将远程删除的文件移至回收站,而不是直接删除", + }, + "Network warning style": { + def: "Network warning style", + es: "Estilo de advertencia de red", + ja: "ネットワーク警告の表示方式", + ko: "네트워크 경고 표시 방식", + ru: "Стиль сетевого предупреждения", + zh: "网络警告样式", + "zh-tw": "網路警告樣式", + }, + "New Remote": { + def: "New Remote", + es: "Nuevo remoto", + ja: "新しいリモート", + ko: "새 원격", + ru: "Новое удалённое хранилище", + zh: "新建远端", + "zh-tw": "新增遠端", + }, + "No connected device information found. Cancelling Garbage Collection.": { + def: "No connected device information found. Cancelling Garbage Collection.", + ja: "接続済みデバイスの情報が見つかりませんでした。Garbage Collection をキャンセルします。", + ko: "연결된 기기 정보를 찾을 수 없습니다. Garbage Collection을 취소합니다.", + ru: "Не найдена информация о подключённых устройствах. Garbage Collection отменяется.", + zh: "未找到已连接设备的信息。正在取消垃圾回收。", + "zh-tw": "找不到已連線裝置的資訊。正在取消垃圾回收。", + }, + "No limit configured": { + def: "No limit configured", + es: "Sin límite configurado", + ja: "制限は設定されていません", + ko: "제한이 설정되지 않음", + ru: "Лимит не задан", + zh: "未配置限制", + "zh-tw": "尚未設定限制", + }, + "No, please take me back": { + def: "No, please take me back", + es: "No, volver atrás", + ja: "いいえ、前に戻ります", + ko: "아니요, 이전으로 돌아가겠습니다", + ru: "Нет, верните меня назад", + zh: "不,返回上一步", + "zh-tw": "不,返回上一步", + }, + "Node ID": { + def: "Node ID", + ja: "ノード ID", + ko: "노드 ID", + ru: "ID узла", + zh: "节点 ID", + "zh-tw": "節點 ID", + }, + "Node Information Missing": { + def: "Node Information Missing", + ja: "ノード情報がありません", + ko: "노드 정보 누락", + ru: "Отсутствует информация об узле", + zh: "节点信息缺失", + "zh-tw": "節點資訊缺失", + }, + "Non-Synchronising files": { + def: "Non-Synchronising files", + es: "Archivos no sincronizados", + ja: "同期しないファイル", + ko: "동기화하지 않는 파일", + ru: "Несинхронизируемые файлы", + zh: "不同步的文件", + "zh-tw": "不同步的檔案", + }, + "Normal Files": { + def: "Normal Files", + es: "Archivos normales", + ja: "通常ファイル", + ko: "일반 파일", + ru: "Обычные файлы", + zh: "普通文件", + "zh-tw": "一般檔案", + }, + 'Not all messages have been translated. And, please revert to "Default" when reporting errors.': { + def: 'Not all messages have been translated. And, please revert to "Default" when reporting errors.', + es: 'No todos los mensajes están traducidos. Por favor, vuelva a "Predeterminado" al reportar errores.', + fr: "Tous les messages n'ont pas été traduits. Et veuillez revenir à « Par défaut » lorsque vous signalez des erreurs.", + he: 'לא כל ההודעות תורגמו. בנוסף, אנא חזור ל"ברירת מחדל" בעת דיווח על שגיאות.', + ja: 'すべてのメッセージが翻訳されているわけではありません。また、Issue報告の際にはいったん"Default"に戻してください', + ko: '모든 메시지가 번역되지 않았습니다. 오류 신고 시 "기본값"으로 되돌려 주세요.', + ru: "Не все сообщения переведены. И, пожалуйста, вернитесь к «По умолчанию» при сообщении об ошибках.", + zh: '并非所有消息都已翻译。请在报告错误时恢复为"默认"', + }, + "Notify all setting files": { + def: "Notify all setting files", + es: "Notificar todos los archivos de configuración", + fr: "Notifier tous les fichiers de paramètres", + he: "הודע על כל קבצי ההגדרות", + ja: "すべての設定を通知", + ko: "모든 설정 파일 알림", + ru: "Уведомлять обо всех файлах настроек", + zh: "通知所有设置文件", + }, + "Notify customized": { + def: "Notify customized", + es: "Notificar personalizaciones", + fr: "Notifier les personnalisations", + he: "הודע על התאמות אישיות", + ja: "カスタマイズが行われたら通知する", + ko: "사용자 설정 알림", + ru: "Уведомлять о настройках", + zh: "通知自定义设置", + }, + "Notify when other device has newly customized.": { + def: "Notify when other device has newly customized.", + es: "Notificar cuando otro dispositivo personalice", + fr: "Notifier lorsqu'un autre appareil a une nouvelle personnalisation.", + he: "הודע כאשר מכשיר אחר הוסיף התאמה אישית חדשה.", + ja: "別の端末がカスタマイズを行なったら通知する", + ko: "다른 기기에서 새로운 사용자 설정이 있을 때 알림을 받습니다.", + ru: "Уведомлять, когда другое устройство изменило настройки.", + zh: "当其他设备有新的自定义设置时通知 ", + }, + "Notify when the estimated remote storage size exceeds on start up": { + def: "Notify when the estimated remote storage size exceeds on start up", + es: "Notificar cuando el tamaño estimado del almacenamiento remoto exceda al iniciar", + fr: "Notifier quand la taille estimée du stockage distant est dépassée au démarrage", + he: "הודע כשגודל האחסון המרוחד המשוער עולה על הסף בעת הפעלה", + ja: "起動時に予想リモートストレージサイズを超えたら通知", + ko: "시작 시 예상 원격 스토리지 크기가 초과되면 알림", + ru: "Уведомлять, когда оценочный размер удалённого хранилища превышает при запуске", + zh: "启动时当估计的远程存储大小超出时通知", + }, + "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.": + { + def: "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.", + es: "Número de lotes a procesar. Default 40, mínimo 2. Controla documentos en memoria", + fr: "Nombre de lots à traiter à la fois. Par défaut 40. Minimum 2. Ceci, avec la taille de lot, contrôle le nombre de documents conservés en mémoire à la fois.", + he: "מספר האצוות לעיבוד בכל פעם. ברירת מחדל 40, מינימום 2. יחד עם גודל האצווה קובע כמה מסמכים נשמרים בזיכרון בו-זמנית.", + ja: "1度に処理するバッチの数。デフォルトは40、最小は2。この数値は、どれだけの容量の書類がメモリに保存されるかも定義します。", + ko: "한 번에 처리할 일괄 처리 수입니다. 기본값은 40입니다. 최소값은 2입니다. 이는 일괄 크기와 함께 메모리에 보관되는 문서 수를 제어합니다.", + ru: "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.", + zh: "一次处理的批量数量。默认为 40。最小为 2。此设置与批量大小一起控制一次在内存中保留多少文档", + }, + "Number of changes to sync at a time. Defaults to 50. Minimum is 2.": { + def: "Number of changes to sync at a time. Defaults to 50. Minimum is 2.", + es: "Número de cambios a sincronizar simultáneamente. Default 50, mínimo 2", + fr: "Nombre de modifications à synchroniser à la fois. Par défaut 50. Minimum 2.", + he: "מספר השינויים לסנכרון בכל פעם. ברירת מחדל 50, מינימום 2.", + ja: "一度に同期する変更の数。デフォルトは50、最小は2。", + ko: "한 번에 동기화할 변경 사항의 수입니다. 기본값은 50입니다. 최소값은 2입니다.", + ru: "Количество изменений для синхронизации за раз. По умолчанию 50. Минимум 2.", + zh: "一次同步的更改数量。默认为 50。最小为 2。", + }, + "Obsidian version": { + def: "Obsidian version", + ja: "Obsidian バージョン", + ko: "Obsidian 버전", + ru: "Версия Obsidian", + zh: "Obsidian 版本", + "zh-tw": "Obsidian 版本", + }, + "obsidianLiveSyncSettingTab.btnApply": { + def: "Apply", + es: "Aplicar", + fr: "Appliquer", + he: "החל", + ja: "適用", + ko: "적용", + ru: "Применить", + zh: "应用", + "zh-tw": "套用", + }, + "obsidianLiveSyncSettingTab.btnCheck": { + def: "Check", + es: "Verificar", + fr: "Vérifier", + he: "בדוק", + ja: "確認", + ko: "확인", + ru: "Проверить", + zh: "检查", + }, + "obsidianLiveSyncSettingTab.btnCopy": { + def: "Copy", + es: "Copiar", + fr: "Copier", + he: "העתק", + ja: "コピー", + ko: "복사", + ru: "Копировать", + zh: "复制", + }, + "obsidianLiveSyncSettingTab.btnDisable": { + def: "Disable", + es: "Desactivar", + fr: "Désactiver", + he: "נטרל", + ja: "無効化", + ko: "비활성화", + ru: "Отключить", + zh: "禁用", + "zh-tw": "停用", + }, + "obsidianLiveSyncSettingTab.btnDiscard": { + def: "Discard", + es: "Descartar", + fr: "Abandonner", + he: "ביטול שינויים", + ja: "破棄", + ko: "삭제", + ru: "Отменить", + zh: "丢弃", + }, + "obsidianLiveSyncSettingTab.btnEnable": { + def: "Enable", + es: "Activar", + fr: "Activer", + he: "הפעל", + ja: "有効化", + ko: "활성화", + ru: "Включить", + zh: "启用", + }, + "obsidianLiveSyncSettingTab.btnFix": { + def: "Fix", + es: "Corregir", + fr: "Corriger", + he: "תקן", + ja: "修正", + ko: "수정", + ru: "Исправить", + zh: "修复", + }, + "obsidianLiveSyncSettingTab.btnGotItAndUpdated": { + def: "I got it and updated.", + es: "Lo entendí y actualicé.", + fr: "J'ai compris et mis à jour.", + he: "הבנתי ועדכנתי.", + ja: "理解しました、更新しました。", + ko: "알겠습니다. 업데이트했습니다.", + ru: "Понял и обновил.", + zh: "我明白了并且已更新", + }, + "obsidianLiveSyncSettingTab.btnNext": { + def: "Next", + es: "Siguiente", + fr: "Suivant", + he: "הבא", + ja: "次へ", + ko: "다음", + ru: "Далее", + zh: "下一步", + "zh-tw": "下一步", + }, + "obsidianLiveSyncSettingTab.btnStart": { + def: "Start", + es: "Iniciar", + fr: "Démarrer", + he: "התחל", + ja: "開始", + ko: "시작", + ru: "Старт", + zh: "开始", + }, + "obsidianLiveSyncSettingTab.btnTest": { + def: "Test", + es: "Probar", + fr: "Tester", + he: "בדוק", + ja: "テスト", + ko: "테스트", + ru: "Тест", + zh: "测试", + }, + "obsidianLiveSyncSettingTab.btnUse": { + def: "Use", + es: "Usar", + fr: "Utiliser", + he: "השתמש", + ja: "使用", + ko: "사용", + ru: "Использовать", + zh: "使用", + }, + "obsidianLiveSyncSettingTab.buttonFetch": { + def: "Fetch", + es: "Obtener", + fr: "Récupérer", + he: "משוך", + ja: "フェッチ", + ko: "가져오기", + ru: "Загрузить", + zh: "获取", + }, + "obsidianLiveSyncSettingTab.buttonNext": { + def: "Next", + es: "Siguiente", + fr: "Suivant", + he: "הבא", + ja: "次へ", + ko: "다음", + ru: "Далее", + zh: "下一步", + "zh-tw": "下一步", + }, + "obsidianLiveSyncSettingTab.defaultLanguage": { + def: "Default", + es: "Predeterminado", + fr: "Par défaut", + he: "ברירת מחדל", + ja: "デフォルト", + ko: "기본값", + ru: "По умолчанию", + zh: "默认语言", + "zh-tw": "預設語言", + }, + "obsidianLiveSyncSettingTab.descConnectSetupURI": { + def: "This is the recommended method to set up Self-hosted LiveSync with a Setup URI.", + es: "Este es el método recomendado para configurar Self-hosted LiveSync con una URI de configuración.", + fr: "Méthode recommandée pour configurer Self-hosted LiveSync avec une URI de configuration.", + he: "זוהי השיטה המומלצת להגדרת Self-hosted LiveSync עם Setup URI.", + ja: "セットアップURIを使用してSelf-hosted LiveSyncをセットアップする推奨方法です。", + ko: "이것은 Setup URI로 Self-hosted LiveSync를 설정하는 권장 방법입니다.", + ru: "Это рекомендуемый способ настройки Self-hosted LiveSync с помощью Setup URI.", + zh: "这是使用设置 URI 设置 Self-hosted LiveSync 的推荐方法", + }, + "obsidianLiveSyncSettingTab.descCopySetupURI": { + def: "Perfect for setting up a new device!", + es: "¡Perfecto para configurar un nuevo dispositivo!", + fr: "Parfait pour configurer un nouvel appareil !", + he: "מושלם להגדרת מכשיר חדש!", + ja: "新しいデバイスのセットアップにおすすめ!", + ko: "새 기기 설정에 완벽합니다!", + ru: "Идеально подходит для настройки нового устройства!", + zh: "非常适合设置新设备!", + }, + "obsidianLiveSyncSettingTab.descEnableLiveSync": { + def: "Only enable this after configuring either of the above two options or completing all configuration manually.", + es: "Solo habilita esto después de configurar cualquiera de las dos opciones anteriores o completar toda la configuración manualmente.", + fr: "N'activez ceci qu'après avoir configuré l'une des deux options ci-dessus ou terminé toute la configuration manuellement.", + he: "הפעל רק לאחר הגדרת אחת משתי האפשרויות לעיל, או לאחר השלמת כל ההגדרות ידנית.", + ja: "上記の2つのオプションのいずれかを設定するか、すべての設定を手動で完了した後にのみ有効にしてください。", + ko: "위의 두 옵션 중 하나를 구성하거나 모든 구성을 수동으로 완료한 후에만 활성화하세요.", + ru: "Включайте это только после настройки одного из двух вариантов выше или после полного ручного завершения всей конфигурации.", + zh: "仅在配置了上述两个选项之一或手动完成所有配置后启用此选项", + }, + "obsidianLiveSyncSettingTab.descFetchConfigFromRemote": { + def: "Fetch necessary settings from already configured remote server.", + es: "Obtener las configuraciones necesarias del servidor remoto ya configurado.", + fr: "Récupérer les paramètres nécessaires depuis un serveur distant déjà configuré.", + he: "משוך הגדרות נדרשות מהשרת המרוחד שהוגדר כבר.", + ja: "既に設定済みのリモートサーバーから必要な設定を取得します。", + ko: "이미 구성된 원격 서버에서 필요한 설정을 가져옵니다.", + ru: "Получить необходимые настройки с уже настроенного удалённого сервера.", + zh: "从已配置的远程服务器获取必要的设置", + }, + "obsidianLiveSyncSettingTab.descManualSetup": { + def: "Not recommended, but useful if you don't have a Setup URI", + es: "No recomendado, pero útil si no tienes una URI de configuración", + fr: "Non recommandé, mais utile si vous n'avez pas d'URI de configuration", + he: "לא מומלץ, אך שימושי אם אין לך Setup URI", + ja: "推奨しませんが、セットアップURIがない場合に便利です", + ko: "권장하지 않지만 Setup URI가 없는 경우에 유용합니다", + ru: "Не рекомендуется, но полезно, если у вас нет Setup URI.", + zh: "不推荐,但如果您没有设置 URI 则很有用", + }, + "obsidianLiveSyncSettingTab.descTestDatabaseConnection": { + def: "Open database connection. If the remote database is not found and you have permission to create a database, the database will be created.", + es: "Abrir conexión a la base de datos. Si no se encuentra la base de datos remota y tienes permiso para crear una base de datos, se creará la base de datos.", + fr: "Ouvrir la connexion à la base de données. Si la base distante est introuvable et que vous avez l'autorisation de créer une base, elle sera créée.", + he: "פתח חיבור למסד נתונים. אם מסד הנתונים המרוחד לא נמצא ויש לך הרשאה ליצור אחד, הוא ייצור.", + ja: "データベース接続を開きます。リモートデータベースが見つからず、データベースを作成する権限がある場合は、データベースが作成されます。", + ko: "데이터베이스 연결을 엽니다. 원격 데이터베이스를 찾을 수 없고 데이터베이스 생성 권한이 있는 경우, 데이터베이스가 생성됩니다.", + ru: "Открыть подключение к базе данных. Если удалённая база данных не найдена и у вас есть право на её создание, база будет создана.", + zh: "打开数据库连接。如果未找到远程数据库并且您有创建数据库的权限,则将创建数据库", + }, + "obsidianLiveSyncSettingTab.descValidateDatabaseConfig": { + def: "Checks and fixes any potential issues with the database config.", + es: "Verifica y soluciona cualquier problema potencial con la configuración de la base de datos.", + fr: "Vérifie et corrige les problèmes potentiels de la configuration de la base.", + he: "בודק ומתקן בעיות אפשריות בתצורת מסד הנתונים.", + ja: "データベース設定の潜在的な問題を確認し、修正します。", + ko: "데이터베이스 구성의 잠재적 문제를 확인하고 수정합니다.", + ru: "Проверяет и исправляет любые потенциальные проблемы в конфигурации базы данных.", + zh: "检查并修复数据库配置中的任何潜在问题", + }, + "obsidianLiveSyncSettingTab.errAccessForbidden": { + def: "❗ Access forbidden.", + es: "Acceso prohibido.", + fr: "❗ Accès interdit.", + he: "❗ גישה נדחתה.", + ja: "❗ アクセスが禁止されています。", + ko: "❗ 액세스가 금지되었습니다.", + ru: "❗ Доступ запрещён.", + zh: "❗ 访问被禁止", + }, + "obsidianLiveSyncSettingTab.errCannotContinueTest": { + def: "We could not continue the test.", + es: "No se pudo continuar con la prueba.", + fr: "Impossible de poursuivre le test.", + he: "לא ניתן להמשיך בבדיקה.", + ja: "テストを続行できませんでした。", + ko: "테스트를 계속할 수 없습니다.", + ru: "Мы не можем продолжить тест.", + zh: "我们无法继续测试。", + }, + "obsidianLiveSyncSettingTab.errCorsCredentials": { + def: "❗ cors.credentials is wrong", + es: "❗ cors.credentials es incorrecto", + fr: "❗ cors.credentials est incorrect", + he: "❗ cors.credentials שגוי", + ja: "❗ cors.credentialsが不正です", + ko: "❗ cors.credentials가 잘못되었습니다", + ru: "❗ cors.credentials неверно", + zh: "❗ cors.credentials 设置错误", + }, + "obsidianLiveSyncSettingTab.errCorsNotAllowingCredentials": { + def: "❗ CORS is not allowing credentials", + es: "CORS no permite credenciales", + fr: "❗ CORS n'autorise pas les identifiants", + he: "❗ CORS אינו מאפשר פרטי גישה", + ja: "❗ CORSが認証情報を許可していません", + ko: "❗ CORS에서 자격 증명을 허용하지 않습니다", + ru: "❗ CORS не разрешает учётные данные", + zh: "❗ CORS 不允许凭据", + }, + "obsidianLiveSyncSettingTab.errCorsOrigins": { + def: "❗ cors.origins is wrong", + es: "❗ cors.origins es incorrecto", + fr: "❗ cors.origins est incorrect", + he: "❗ cors.origins שגוי", + ja: "❗ cors.originsが不正です", + ko: "❗ cors.origins가 잘못되었습니다", + ru: "❗ cors.origins неверно", + zh: "❗ cors.origins 设置错误", + }, + "obsidianLiveSyncSettingTab.errEnableCors": { + def: "❗ httpd.enable_cors is wrong", + es: "❗ httpd.enable_cors es incorrecto", + fr: "❗ httpd.enable_cors est incorrect", + he: "❗ httpd.enable_cors שגוי", + ja: "❗ httpd.enable_corsが不正です", + ko: "❗ httpd.enable_cors가 잘못되었습니다", + ru: "❗ httpd.enable_cors неверно", + zh: "❗ httpd.enable_cors 设置错误", + }, + "obsidianLiveSyncSettingTab.errEnableCorsChttpd": { + def: "❗ chttpd.enable_cors is wrong", + fr: "❗ chttpd.enable_cors est incorrect", + he: "❗ chttpd.enable_cors שגוי", + ja: "❗ chttpd.enable_corsが不正です", + ru: "❗ chttpd.enable_cors неверно", + zh: "❗ chttpd.enable_cors 设置错误", + }, + "obsidianLiveSyncSettingTab.errMaxDocumentSize": { + def: "❗ couchdb.max_document_size is low)", + es: "❗ couchdb.max_document_size es bajo)", + fr: "❗ couchdb.max_document_size est trop bas)", + he: "❗ couchdb.max_document_size נמוך)", + ja: "❗ couchdb.max_document_sizeが低すぎます", + ko: "❗ couchdb.max_document_size가 낮습니다)", + ru: "❗ couchdb.max_document_size низкое", + zh: "❗ couchdb.max_document_size 设置过低)", + }, + "obsidianLiveSyncSettingTab.errMaxRequestSize": { + def: "❗ chttpd.max_http_request_size is low)", + es: "❗ chttpd.max_http_request_size es bajo)", + fr: "❗ chttpd.max_http_request_size est trop bas)", + he: "❗ chttpd.max_http_request_size נמוך)", + ja: "❗ chttpd.max_http_request_sizeが低すぎます", + ko: "❗ chttpd.max_http_request_size가 낮습니다)", + ru: "❗ chttpd.max_http_request_size низкое", + zh: "❗ chttpd.max_http_request_size 设置过低)", + }, + "obsidianLiveSyncSettingTab.errMissingWwwAuth": { + def: "❗ httpd.WWW-Authenticate is missing", + es: "❗ httpd.WWW-Authenticate falta", + fr: "❗ httpd.WWW-Authenticate est manquant", + he: "❗ httpd.WWW-Authenticate חסר", + ja: "❗ httpd.WWW-Authenticateが不足しています", + ko: "❗ httpd.WWW-Authenticate가 누락되었습니다", + ru: "❗ httpd.WWW-Authenticate отсутствует", + zh: "❗ 缺少 httpd.WWW-Authenticate 设置", + }, + "obsidianLiveSyncSettingTab.errRequireValidUser": { + def: "❗ chttpd.require_valid_user is wrong.", + es: "❗ chttpd.require_valid_user es incorrecto.", + fr: "❗ chttpd.require_valid_user est incorrect.", + he: "❗ chttpd.require_valid_user שגוי.", + ja: "❗ chttpd.require_valid_userが不正です。", + ko: "❗ chttpd.require_valid_user가 잘못되었습니다.", + ru: "❗ chttpd.require_valid_user неверно.", + zh: "❗ chttpd.require_valid_user 设置错误", + }, + "obsidianLiveSyncSettingTab.errRequireValidUserAuth": { + def: "❗ chttpd_auth.require_valid_user is wrong.", + es: "❗ chttpd_auth.require_valid_user es incorrecto.", + fr: "❗ chttpd_auth.require_valid_user est incorrect.", + he: "❗ chttpd_auth.require_valid_user שגוי.", + ja: "❗ chttpd_auth.require_valid_userが不正です。", + ko: "❗ chttpd_auth.require_valid_user가 잘못되었습니다.", + ru: "❗ chttpd_auth.require_valid_user неверно.", + zh: "❗ chttpd_auth.require_valid_user 设置错误", + }, + "obsidianLiveSyncSettingTab.labelDisabled": { + def: "⏹️ : Disabled", + es: "⏹️ : Desactivado", + fr: "⏹️ : Désactivé", + he: "⏹️ : מנוטרל", + ja: "⏹️ : 無効", + ko: "⏹️ : 비활성화됨", + ru: "⏹️ : Отключено", + zh: "⏹️:已禁用", + "zh-tw": "⏹️ : 已停用", + }, + "obsidianLiveSyncSettingTab.labelEnabled": { + def: "🔁 : Enabled", + es: "🔁 : Activado", + fr: "🔁 : Activé", + he: "🔁 : מופעל", + ja: "🔁 : 有効", + ko: "🔁 : 활성화됨", + ru: "🔁 : Включено", + zh: "🔁:已启用", + "zh-tw": "🔁 : 已啟用", + }, + "obsidianLiveSyncSettingTab.levelAdvanced": { + def: " (Advanced)", + es: " (avanzado)", + fr: " (Avancé)", + he: " (מתקדם)", + ja: " (上級)", + ko: " (고급)", + ru: " (Расширенные)", + zh: "(进阶)", + }, + "obsidianLiveSyncSettingTab.levelEdgeCase": { + def: " (Edge Case)", + es: " (excepción)", + fr: " (Cas particulier)", + he: " (מקרה קצה)", + ja: " (エッジケース)", + ko: " (특수 사례)", + ru: " (Граничные случаи)", + zh: "(边缘情况)", + }, + "obsidianLiveSyncSettingTab.levelPowerUser": { + def: " (Power User)", + es: " (experto)", + fr: " (Utilisateur avancé)", + he: " (משתמש מתקדם)", + ja: " (エキスパート)", + ko: " (파워 유저)", + ru: " (Опытный пользователь)", + zh: "(高级用户)", + }, + "obsidianLiveSyncSettingTab.linkOpenInBrowser": { + def: "Open in browser", + es: "Abrir en el navegador", + fr: "Ouvrir dans le navigateur", + he: "פתח בדפדפן", + ja: "ブラウザで開く", + ko: "브라우저에서 열기", + ru: "Открыть в браузере", + zh: "在浏览器中打开", + }, + "obsidianLiveSyncSettingTab.linkPageTop": { + def: "Page Top", + es: "Ir arriba", + fr: "Haut de la page", + he: "ראש העמוד", + ja: "ページトップ", + ko: "페이지 상단", + ru: "В начало страницы", + zh: "页面顶部", + }, + "obsidianLiveSyncSettingTab.linkTipsAndTroubleshooting": { + def: "Tips and Troubleshooting", + es: "Consejos y solución de problemas", + fr: "Conseils et dépannage", + he: "טיפים ופתרון בעיות", + ja: "ヒントとトラブルシューティング", + ko: "팁 및 문제 해결", + ru: "Советы и устранение неполадок", + zh: "提示和故障排除", + }, + "obsidianLiveSyncSettingTab.linkTroubleshooting": { + def: "/docs/troubleshooting.md", + es: "/docs/es/troubleshooting.md", + fr: "/docs/troubleshooting.md", + he: "/docs/troubleshooting.md", + ja: "/docs/troubleshooting.md", + ko: "/docs/troubleshooting.md", + ru: "/docs/troubleshooting.md", + zh: "/docs/troubleshooting.md", + }, + "obsidianLiveSyncSettingTab.logCannotUseCloudant": { + def: "This feature cannot be used with IBM Cloudant.", + es: "Esta función no se puede utilizar con IBM Cloudant.", + fr: "Cette fonctionnalité ne peut pas être utilisée avec IBM Cloudant.", + he: "לא ניתן להשתמש בתכונה זו עם IBM Cloudant.", + ja: "この機能はIBM Cloudantでは使用できません。", + ko: "이 기능은 IBM Cloudant와 함께 사용할 수 없습니다.", + ru: "Эта функция недоступна для IBM Cloudant.", + zh: "此功能不能与 IBM Cloudant 一起使用 ", + }, + "obsidianLiveSyncSettingTab.logCheckingConfigDone": { + def: "Checking configuration done", + es: "Verificación de configuración completada", + fr: "Vérification de la configuration terminée", + he: "בדיקת התצורה הושלמה", + ja: "設定の確認が完了しました", + ko: "구성 확인 완료", + ru: "Проверка конфигурации завершена", + zh: "配置检查完成", + }, + "obsidianLiveSyncSettingTab.logCheckingConfigFailed": { + def: "Checking configuration failed", + es: "La verificación de configuración falló", + fr: "Échec de la vérification de la configuration", + he: "בדיקת התצורה נכשלה", + ja: "設定の確認に失敗しました", + ko: "구성 확인 실패", + ru: "Проверка конфигурации не удалась", + zh: "配置检查失败", + }, + "obsidianLiveSyncSettingTab.logCheckingDbConfig": { + def: "Checking database configuration", + es: "Verificando la configuración de la base de datos", + fr: "Vérification de la configuration de la base", + he: "בודק תצורת מסד נתונים", + ja: "データベース設定を確認中", + ko: "데이터베이스 구성 확인 중", + ru: "Проверка конфигурации базы данных", + zh: "正在检查数据库配置", + }, + "obsidianLiveSyncSettingTab.logCheckPassphraseFailed": { + def: "ERROR: Failed to check passphrase with the remote server:\n${db}.", + es: "ERROR: Error al comprobar la frase de contraseña con el servidor remoto: \n${db}.", + fr: "ERREUR : Échec de la vérification de la phrase secrète avec le serveur distant :\n${db}.", + he: "שגיאה: בדיקת ביטוי הסיסמה עם השרת המרוחד נכשלה:\n${db}.", + ja: "エラー: リモートサーバーとのパスフレーズ確認に失敗しました:\n${db}。", + ko: "오류: 원격 서버와 패스프레이즈 확인에 실패했습니다: \n${db}.", + ru: "ОШИБКА: Не удалось проверить пароль с удалённым сервером: db.", + zh: "错误:无法使用远程服务器检查密码:\n${db} ", + }, + "obsidianLiveSyncSettingTab.logConfiguredDisabled": { + def: "Configured synchronization mode: DISABLED", + es: "Modo de sincronización configurado: DESACTIVADO", + fr: "Mode de synchronisation configuré : DÉSACTIVÉ", + he: "מצב סנכרון שהוגדר: מנוטרל", + ja: "設定された同期モード: 無効", + ko: "구성된 동기화 모드: 비활성화됨", + ru: "Настроенный режим синхронизации: ОТКЛЮЧЕН", + zh: "已配置的同步模式:已禁用", + "zh-tw": "已設定的同步模式:已停用", + }, + "obsidianLiveSyncSettingTab.logConfiguredLiveSync": { + def: "Configured synchronization mode: LiveSync", + es: "Modo de sincronización configurado: Sincronización en Vivo", + fr: "Mode de synchronisation configuré : LiveSync", + he: "מצב סנכרון שהוגדר: LiveSync", + ja: "設定された同期モード: LiveSync", + ko: "구성된 동기화 모드: LiveSync", + ru: "Настроенный режим синхронизации: LiveSync", + zh: "已配置的同步模式:LiveSync", + "zh-tw": "已設定的同步模式:LiveSync", + }, + "obsidianLiveSyncSettingTab.logConfiguredPeriodic": { + def: "Configured synchronization mode: Periodic", + es: "Modo de sincronización configurado: Periódico", + fr: "Mode de synchronisation configuré : Périodique", + he: "מצב סנכרון שהוגדר: תקופתי", + ja: "設定された同期モード: 定期", + ko: "구성된 동기화 모드: 주기적", + ru: "Настроенный режим синхронизации: Периодический", + zh: "已配置的同步模式:定期同步", + "zh-tw": "已設定的同步模式:定期同步", + }, + "obsidianLiveSyncSettingTab.logCouchDbConfigFail": { + def: "CouchDB Configuration: ${title} failed", + es: "Configuración de CouchDB: ${title} falló", + fr: "Configuration CouchDB : échec de ${title}", + he: "תצורת CouchDB: ${title} נכשלה", + ja: "CouchDB設定: ${title} 失敗", + ko: "CouchDB 구성: ${title} 실패", + ru: "Конфигурация CouchDB: title не удалась", + zh: "CouchDB 配置:${title} 失败", + }, + "obsidianLiveSyncSettingTab.logCouchDbConfigSet": { + def: "CouchDB Configuration: ${title} -> Set ${key} to ${value}", + es: "Configuración de CouchDB: ${title} -> Establecer ${key} en ${value}", + fr: "Configuration CouchDB : ${title} -> ${key} défini à ${value}", + he: "תצורת CouchDB: ${title} -> הגדר ${key} ל-${value}", + ja: "CouchDB設定: ${title} -> ${key}を${value}に設定", + ko: "CouchDB 구성: ${title} -> ${key}를 ${value}로 설정", + ru: "Конфигурация CouchDB: title -> Установить key в value", + zh: "CouchDB 配置:${title} -> 设置 ${key} 为 ${value}", + }, + "obsidianLiveSyncSettingTab.logCouchDbConfigUpdated": { + def: "CouchDB Configuration: ${title} successfully updated", + es: "Configuración de CouchDB: ${title} actualizado correctamente", + fr: "Configuration CouchDB : ${title} mise à jour avec succès", + he: "תצורת CouchDB: ${title} עודכנה בהצלחה", + ja: "CouchDB設定: ${title} 正常に更新されました", + ko: "CouchDB 구성: ${title} 성공적으로 업데이트됨", + ru: "Конфигурация CouchDB: title успешно обновлена", + zh: "CouchDB 配置:${title} 成功更新", + }, + "obsidianLiveSyncSettingTab.logDatabaseConnected": { + def: "Database connected", + es: "Base de datos conectada", + fr: "Base de données connectée", + he: "מסד הנתונים מחובר", + ja: "データベースに接続しました", + ko: "데이터베이스 연결됨", + ru: "База данных подключена", + zh: "数据库已连接", + }, + "obsidianLiveSyncSettingTab.logEncryptionNoPassphrase": { + def: "You cannot enable encryption without a passphrase", + es: "No puedes habilitar el cifrado sin una frase de contraseña", + fr: "Impossible d'activer le chiffrement sans phrase secrète", + he: "לא ניתן להפעיל הצפנה ללא ביטוי סיסמה", + ja: "パスフレーズなしでは暗号化を有効にできません", + ko: "패스프레이즈 없이는 암호화를 활성화할 수 없습니다", + ru: "Вы не можете включить шифрование без парольной фразы", + zh: "没有密码无法启用加密", + }, + "obsidianLiveSyncSettingTab.logEncryptionNoSupport": { + def: "Your device does not support encryption.", + es: "Tu dispositivo no admite el cifrado.", + fr: "Votre appareil ne prend pas en charge le chiffrement.", + he: "המכשיר שלך אינו תומך בהצפנה.", + ja: "お使いのデバイスは暗号化をサポートしていません。", + ko: "기기가 암호화를 지원하지 않습니다.", + ru: "Ваше устройство не поддерживает шифрование.", + zh: "您的设备不支持加密 ", + }, + "obsidianLiveSyncSettingTab.logErrorOccurred": { + def: "An error occurred!!", + es: "¡Ocurrió un error!", + fr: "Une erreur s'est produite !!", + he: "אירעה שגיאה!!", + ja: "エラーが発生しました!!", + ko: "오류가 발생했습니다!", + ru: "Произошла ошибка!!", + zh: "发生错误!!", + }, + "obsidianLiveSyncSettingTab.logEstimatedSize": { + def: "Estimated size: ${size}", + es: "Tamaño estimado: ${size}", + fr: "Taille estimée : ${size}", + he: "גודל משוער: ${size}", + ja: "推定サイズ: ${size}", + ko: "예상 크기: ${size}", + ru: "Примерный размер: size", + zh: "估计大小:${size}", + }, + "obsidianLiveSyncSettingTab.logPassphraseInvalid": { + def: "Passphrase is not valid, please fix it.", + es: "La frase de contraseña no es válida, por favor corrígela.", + fr: "La phrase secrète est invalide, veuillez la corriger.", + he: "ביטוי הסיסמה אינו תקין, אנא תקן אותו.", + ja: "パスフレーズが無効です、修正してください。", + ko: "패스프레이즈가 유효하지 않습니다. 수정해 주세요.", + ru: "Парольная фраза недействительна, пожалуйста, исправьте.", + zh: "密码无效,请修正", + }, + "obsidianLiveSyncSettingTab.logPassphraseNotCompatible": { + def: "ERROR: Passphrase is not compatible with the remote server! Please check it again!", + es: "ERROR: ¡La frase de contraseña no es compatible con el servidor remoto! ¡Por favor, revísala de nuevo!", + fr: "ERREUR : la phrase secrète n'est pas compatible avec le serveur distant ! Veuillez vérifier à nouveau !", + he: "שגיאה: ביטוי הסיסמה אינו תואם לשרת המרוחד! אנא בדוק שוב!", + ja: "エラー: パスフレーズがリモートサーバーと適合しません!再度確認してください!", + ko: "오류: 패스프레이즈가 원격 서버와 호환되지 않습니다! 다시 확인해 주세요!", + ru: "ОШИБКА: Парольная фраза несовместима с удалённым сервером!", + zh: "错误:密码与远程服务器不兼容!请再次检查!", + }, + "obsidianLiveSyncSettingTab.logRebuildNote": { + def: "Syncing has been disabled, fetch and re-enabled if desired.", + es: "La sincronización ha sido desactivada, obtén y vuelve a activar si lo deseas.", + fr: "La synchronisation a été désactivée, récupérez et réactivez si souhaité.", + he: "הסנכרון הושבת, משוך והפעל מחדש אם רצוי.", + ja: "同期が無効になりました。必要に応じてフェッチして再有効化してください。", + ko: "동기화가 비활성화되었습니다. 원하는 경우 가져오기 후 다시 활성화하세요.", + ru: "Синхронизация отключена, загрузите и включите снова при желании.", + zh: "同步已禁用,如果需要,请获取并重新启用", + }, + "obsidianLiveSyncSettingTab.logSelectAnyPreset": { + def: "Select any preset.", + es: "Selecciona cualquier preestablecido.", + fr: "Sélectionnez un préréglage.", + he: "בחר קביעה מראש כלשהי.", + ja: "プリセットを選択してください。", + ko: "프리셋을 선택하세요.", + ru: "Выберите любой пресет.", + zh: "请选择任一预设。", + "zh-tw": "請選擇任一預設項目。", + }, + "obsidianLiveSyncSettingTab.logServerConfigurationCheck": { + def: "obsidianLiveSyncSettingTab.logServerConfigurationCheck", + }, + "obsidianLiveSyncSettingTab.msgAreYouSureProceed": { + def: "Are you sure to proceed?", + es: "¿Estás seguro de proceder?", + fr: "Êtes-vous sûr de vouloir continuer ?", + he: "האם אתה בטוח שברצונך להמשיך?", + ja: "本当に続行しますか?", + ko: "정말로 진행하시겠습니까?", + ru: "Вы уверены, что хотите продолжить?", + zh: "您确定要继续吗?", + }, + "obsidianLiveSyncSettingTab.msgChangesNeedToBeApplied": { + def: "Changes need to be applied!", + es: "¡Los cambios deben aplicarse!", + fr: "Des modifications doivent être appliquées !", + he: "יש להחיל שינויים!", + ja: "変更を適用する必要があります!", + ko: "변경사항을 적용해야 합니다!", + ru: "Изменения нужно применить!", + zh: "需要应用更改!", + }, + "obsidianLiveSyncSettingTab.msgConfigCheck": { + def: "--Config check--", + es: "--Verificación de configuración--", + fr: "--Vérification de la configuration--", + he: "--בדיקת תצורה--", + ja: "--設定確認--", + ko: "--구성 확인--", + ru: "--Проверка конфигурации--", + zh: "--配置检查--", + }, + "obsidianLiveSyncSettingTab.msgConfigCheckFailed": { + def: "The configuration check has failed. Do you want to continue anyway?", + es: "La verificación de configuración ha fallado. ¿Quieres continuar de todos modos?", + fr: "La vérification de la configuration a échoué. Voulez-vous continuer malgré tout ?", + he: "בדיקת התצורה נכשלה. האם ברצונך להמשיך בכל זאת?", + ja: "設定確認に失敗しました。それでも続行しますか?", + ko: "구성 확인에 실패했습니다. 그래도 계속하시겠습니까?", + ru: "Проверка конфигурации не удалась. Вы всё равно хотите продолжить?", + zh: "配置检查失败。仍要继续吗?", + "zh-tw": "設定檢查失敗。仍要繼續嗎?", + }, + "obsidianLiveSyncSettingTab.msgConnectionCheck": { + def: "--Connection check--", + es: "--Verificación de conexión--", + fr: "--Vérification de la connexion--", + he: "--בדיקת חיבור--", + ja: "--接続確認--", + ko: "--연결 확인--", + ru: "--Проверка подключения--", + zh: "--连接检查--", + }, + "obsidianLiveSyncSettingTab.msgConnectionProxyNote": { + def: "If you're having trouble with the Connection-check (even after checking config), please check your reverse proxy configuration.", + es: "Si tienes problemas con la verificación de conexión (incluso después de verificar la configuración), por favor verifica la configuración de tu proxy reverso.", + fr: "Si vous rencontrez des problèmes de vérification de connexion (même après avoir vérifié la configuration), veuillez vérifier votre configuration de reverse proxy.", + he: "אם אתה נתקל בבעיות עם בדיקת החיבור (גם לאחר בדיקת התצורה), אנא בדוק את הגדרות ה-reverse proxy שלך.", + ja: "設定確認後も接続確認に問題がある場合は、リバースプロキシの設定を確認してください。", + ko: "구성 확인 후에도 연결 확인에 문제가 있는 경우, 리버스 프록시 구성을 확인해 주세요.", + ru: "Если у вас проблемы с проверкой подключения, проверьте конфигурацию обратного прокси.", + zh: "如果您在连接检查时遇到问题(即使检查了配置后),请检查您的反向代理配置", + }, + "obsidianLiveSyncSettingTab.msgCurrentOrigin": { + def: "Current origin: ${origin}", + es: "Origen actual: {origin}", + fr: "Origine actuelle : ${origin}", + he: "מקור נוכחי: ${origin}", + ja: "現在のオリジン: ${origin}", + ko: "현재 원점: {origin}", + ru: "Текущий origin: origin", + zh: "当前源: {origin}", + }, + "obsidianLiveSyncSettingTab.msgDiscardConfirmation": { + def: "Do you really want to discard existing settings and databases?", + es: "¿Realmente deseas descartar las configuraciones y bases de datos existentes?", + fr: "Voulez-vous vraiment abandonner les paramètres et bases existants ?", + he: "האם אתה בטוח שברצונך לבטל הגדרות ומסדי נתונים קיימים?", + ja: "本当に既存の設定とデータベースを破棄しますか?", + ko: "정말로 기존 설정과 데이터베이스를 삭제하시겠습니까?", + ru: "Вы действительно хотите отменить существующие настройки и базы данных?", + zh: "您真的要丢弃现有的设置和数据库吗?", + }, + "obsidianLiveSyncSettingTab.msgDone": { + def: "--Done--", + es: "--Hecho--", + fr: "--Terminé--", + he: "--הסתיים--", + ja: "--完了--", + ko: "--완료--", + ru: "--Готово--", + zh: "--完成--", + }, + "obsidianLiveSyncSettingTab.msgEnableCors": { + def: "Set httpd.enable_cors", + es: "Configurar httpd.enable_cors", + fr: "Définir httpd.enable_cors", + he: "הגדר httpd.enable_cors", + ja: "httpd.enable_corsを設定", + ko: "httpd.enable_cors 설정", + ru: "Установить httpd.enable_cors", + zh: "设置 httpd.enable_cors", + }, + "obsidianLiveSyncSettingTab.msgEnableCorsChttpd": { + def: "Set chttpd.enable_cors", + fr: "Définir chttpd.enable_cors", + he: "הגדר chttpd.enable_cors", + ja: "chttpd.enable_corsを設定", + ru: "Установить chttpd.enable_cors", + zh: "设置 chttpd.enable_cors", + }, + "obsidianLiveSyncSettingTab.msgEnableEncryptionRecommendation": { + def: "We recommend enabling End-To-End Encryption, and Path Obfuscation. Are you sure you want to continue without encryption?", + es: "Recomendamos habilitar el cifrado de extremo a extremo y la obfuscación de ruta. ¿Estás seguro de querer continuar sin cifrado?", + fr: "Nous recommandons d'activer le chiffrement de bout en bout et l'obfuscation des chemins. Êtes-vous sûr de vouloir continuer sans chiffrement ?", + he: "אנו ממליצים להפעיל הצפנה מקצה לקצה ואת ערפול הנתיב. האם אתה בטוח שברצונך להמשיך ללא הצפנה?", + ja: "エンドツーエンド暗号化とパス難読化を有効にすることをお勧めします。暗号化なしで続行してもよろしいですか?", + ko: "종단간 암호화와 경로 난독화를 활성화하는 것을 권장합니다. 정말로 암호화 없이 계속하시겠습니까?", + ru: "Мы рекомендуем включить сквозное шифрование. Вы уверены, что хотите продолжить без шифрования?", + zh: "建议启用端到端加密和路径混淆。你确定要在未加密的情况下继续吗?", + "zh-tw": "我們建議啟用端對端加密與路徑混淆。你確定要在未加密的情況下繼續嗎?", + }, + "obsidianLiveSyncSettingTab.msgFetchConfigFromRemote": { + def: "Do you want to fetch the config from the remote server?", + es: "¿Quieres obtener la configuración del servidor remoto?", + fr: "Voulez-vous récupérer la configuration depuis le serveur distant ?", + he: "האם ברצונך למשוך את התצורה מהשרת המרוחד?", + ja: "リモートサーバーから設定を取得しますか?", + ko: "원격 서버에서 구성을 가져오시겠습니까?", + ru: "Вы хотите загрузить конфигурацию с удалённого сервера?", + zh: "要从远端服务器获取配置吗?", + "zh-tw": "要從遠端伺服器抓取設定嗎?", + }, + "obsidianLiveSyncSettingTab.msgGenerateSetupURI": { + def: "All done! Do you want to generate a setup URI to set up other devices?", + es: "¡Todo listo! ¿Quieres generar un URI de configuración para configurar otros dispositivos?", + fr: "Tout est prêt ! Voulez-vous générer une URI de configuration pour configurer d'autres appareils ?", + he: "הכל מוכן! האם ברצונך לייצר Setup URI להגדרת מכשירים אחרים?", + ja: "完了!他のデバイスをセットアップするためのセットアップURIを生成しますか?", + ko: "모든 작업이 완료되었습니다! 다른 기기를 설정하기 위해 Setup URI를 생성하시겠습니까?", + ru: "Всё готово! Вы хотите сгенерировать Setup URI для настройки других устройств?", + zh: "全部完成!要生成设置 URI 以便配置其他设备吗?", + "zh-tw": "全部完成!要產生 Setup URI 以便設定其他裝置嗎?", + }, + "obsidianLiveSyncSettingTab.msgIfConfigNotPersistent": { + def: "If the server configuration is not persistent (e.g., running on docker), the values here may change. Once you are able to connect, please update the settings in the server's local.ini.", + es: "Si la configuración del servidor no es persistente (por ejemplo, ejecutándose en docker), los valores aquí pueden cambiar. Una vez que puedas conectarte, por favor actualiza las configuraciones en el local.ini del servidor.", + fr: "Si la configuration du serveur n'est pas persistante (par ex. fonctionnant sur Docker), les valeurs peuvent changer. Une fois la connexion établie, mettez à jour les paramètres dans le local.ini du serveur.", + he: "אם תצורת השרת אינה קבועה (למשל, פועלת ב-docker), הערכים כאן עשויים להשתנות. לאחר שתצליח להתחבר, אנא עדכן את ההגדרות ב-local.ini של השרת.", + ja: "サーバー設定が永続的でない場合(例: Dockerで実行中)、ここの値は変更される可能性があります。接続できるようになったら、サーバーのlocal.iniの設定を更新してください。", + ko: "서버 설정이 영구적으로 저장되지 않는 환경(예: Docker에서 실행 중)에서는 이곳의 값들이 변경될 수 있습니다. 연결이 가능해지면 서버의 local.ini 파일에서 설정을 수동으로 업데이트해 주세요.", + ru: "Если конфигурация сервера непостоянна, значения здесь могут измениться.", + zh: "如果服务器配置不是持久的(例如,在 docker 上运行),此处的值可能会更改。一旦能够连接,请更新服务器 local.ini 中的设置", + }, + "obsidianLiveSyncSettingTab.msgInvalidPassphrase": { + def: "Your encryption passphrase might be invalid. Are you sure you want to continue?", + es: "Tu frase de contraseña de cifrado podría ser inválida. ¿Estás seguro de querer continuar?", + fr: "Votre phrase secrète de chiffrement peut être invalide. Êtes-vous sûr de vouloir continuer ?", + he: "ביטוי הסיסמה להצפנה שלך עשוי להיות לא תקין. האם אתה בטוח שברצונך להמשיך?", + ja: "暗号化パスフレーズが無効かもしれません。続行してもよろしいですか?", + ko: "암호화 패스프레이즈가 유효하지 않을 수 있습니다. 정말로 계속하시겠습니까?", + ru: "Ваша парольная фраза шифрования может быть недействительна.", + zh: "你的加密密码短语可能无效。你确定要继续吗?", + "zh-tw": "你的加密密語可能無效。你確定要繼續嗎?", + }, + "obsidianLiveSyncSettingTab.msgNewVersionNote": { + def: "Here due to an upgrade notification? Please review the version history. If you're satisfied, click the button. A new update will prompt this again.", + es: "¿Aquí debido a una notificación de actualización? Por favor, revise el historial de versiones. Si está satisfecho, haga clic en el botón. Una nueva actualización volverá a mostrar esto.", + fr: "Arrivé ici suite à une notification de mise à jour ? Consultez l'historique des versions. Si vous êtes satisfait, cliquez sur le bouton. Une nouvelle mise à jour reproposera ceci.", + he: "הגעת כאן בשל הודעת שדרוג? אנא עיין בהיסטוריית הגרסאות. אם אתה מרוצה, לחץ על הכפתור. עדכון חדש יציג זאת שוב.", + ja: "アップグレード通知でここに来ましたか?バージョン履歴を確認してください。納得したらボタンをクリックしてください。新しい更新があると再度確認されます。", + ko: "업그레이드 알림으로 여기에 오셨나요? 버전 기록을 검토해 주세요. 만족하신다면 버튼을 클릭하세요. 새로운 업데이트 시 다시 안내됩니다.", + ru: "Вы пришли из-за уведомления об обновлении? Просмотрите историю версий.", + zh: "因为升级通知来到这里?请查看版本历史。如果您满意,请点击按钮。新的更新将再次提示此信息", + }, + "obsidianLiveSyncSettingTab.msgNonHTTPSInfo": { + def: "Configured as non-HTTPS URI. Be warned that this may not work on mobile devices.", + es: "Configurado como URI que no es HTTPS. Ten en cuenta que esto puede no funcionar en dispositivos móviles.", + fr: "Configuré avec une URI non HTTPS. Attention, ceci peut ne pas fonctionner sur les appareils mobiles.", + he: "מוגדר כ-URI שאינו HTTPS. שים לב שהדבר עשוי שלא לפעול על מכשירים ניידים.", + ja: "非HTTPS URIとして設定されています。モバイルデバイスでは動作しない可能性があります。", + ko: "비 HTTPS URI로 구성되었습니다. 모바일 기기에서는 작동하지 않을 수 있으니 주의하세요.", + ru: "Настроено как не-HTTPS URI. Это может не работать на мобильных устройствах.", + zh: "配置为非 HTTPS URI。请注意,这可能在移动设备上无法工作", + }, + "obsidianLiveSyncSettingTab.msgNonHTTPSWarning": { + def: "Cannot connect to non-HTTPS URI. Please update your config and try again.", + es: "No se puede conectar a URI que no sean HTTPS. Por favor, actualiza tu configuración y vuelve a intentarlo.", + fr: "Connexion impossible à une URI non HTTPS. Mettez à jour votre configuration et réessayez.", + he: "לא ניתן להתחבר ל-URI שאינו HTTPS. אנא עדכן את התצורה ונסה שוב.", + ja: "非HTTPS URIに接続できません。設定を更新して再試行してください。", + ko: "비 HTTPS URI에 연결할 수 없습니다. 구성을 업데이트하고 다시 시도해 주세요.", + ru: "Не удаётся подключиться к не-HTTPS URI. Обновите конфигурацию.", + zh: "无法连接到非 HTTPS URI。请更新您的配置并重试", + }, + "obsidianLiveSyncSettingTab.msgNotice": { + def: "---Notice---", + es: "---Aviso---", + fr: "---Avis---", + he: "---הודעה---", + ja: "---お知らせ---", + ko: "---공지사항---", + ru: "---Уведомление---", + zh: "---注意---", + }, + "obsidianLiveSyncSettingTab.msgObjectStorageWarning": { + def: "WARNING: This feature is a Work In Progress, so please keep in mind the following:\n- Append only architecture. A rebuild is required to shrink the storage.\n- A bit fragile.\n- When first syncing, all history will be transferred from the remote. Be mindful of data caps and slow speeds.\n- Only differences are synced live.\n\nIf you run into any issues, or have ideas about this feature, please create a issue on GitHub.\nI appreciate you for your great dedication.", + es: "ADVERTENCIA: Esta característica está en desarrollo, así que por favor ten en cuenta lo siguiente:\n- Arquitectura de solo anexado. Se requiere una reconstrucción para reducir el almacenamiento.\n- Un poco frágil.\n- Al sincronizar por primera vez, todo el historial será transferido desde el remoto. Ten en cuenta los límites de datos y las velocidades lentas.\n- Solo las diferencias se sincronizan en vivo.\n\nSi encuentras algún problema o tienes ideas sobre esta característica, por favor crea un issue en GitHub.\nAprecio mucho tu gran dedicación.", + fr: "AVERTISSEMENT : cette fonctionnalité est en cours de développement, gardez à l'esprit ce qui suit :\n- Architecture en ajout seul. Une reconstruction est nécessaire pour réduire le stockage.\n- Un peu fragile.\n- Lors de la première synchronisation, tout l'historique sera transféré depuis le distant. Attention aux limites de données et aux débits lents.\n- Seules les différences sont synchronisées en direct.\n\nSi vous rencontrez des problèmes ou avez des idées sur cette fonctionnalité, merci d'ouvrir un ticket sur GitHub.\nMerci pour votre grand dévouement.", + he: "אזהרה: תכונה זו בשלב פיתוח, לכן שים לב לנקודות הבאות:\n- ארכיטקטורת הוספה בלבד. נדרשת בנייה מחדש לצמצום האחסון.\n- קצת רגיש.\n- בסנכרון הראשון, כל ההיסטוריה תועבר מהשרת המרוחד. שים לב למגבלות נתונים ומהירות.\n- רק הפרשים מסונכרנים בזמן אמת.\n\nאם נתקלת בבעיות, או שיש לך רעיונות לגבי תכונה זו, אנא פתח Issue ב-GitHub.\nאנחנו מעריכים את ההקדשה הגדולה שלך.", + ja: "警告: この機能は開発中です。以下の点にご注意ください:\n- 追記専用アーキテクチャ。ストレージを縮小するには再構築が必要です。\n- やや不安定です。\n- 初回同期時、すべての履歴がリモートから転送されます。データ制限と速度に注意してください。\n- ライブ同期は差分のみです。\n\n問題があれば、またはこの機能についてアイデアがあれば、GitHubにIssueを作成してください。\nご協力に感謝します。", + ko: "⚠️ 주의: 이 기능은 아직 개발 중(WIP)입니다. 다음 사항을 유의해 주세요:\n- 추가 전용 구조(append-only)로 동작합니다. 저장 용량을 줄이려면 데이터 재구성이 필요합니다.\n- 기능이 다소 불안정할 수 있습니다.\n- 최초 동기화 시, 전체 히스토리가 원격 서버에서 전송됩니다. 데이터 용량 제한 및 느린 속도에 유의해 주세요.\n- 실시간 동기화는 변경된 부분만 처리됩니다.\n\n문제가 발생했거나 개선 아이디어가 있으시면 GitHub에 이슈를 등록해 주세요.\n기여에 깊이 감사드립니다.", + ru: "ПРЕДУПРЕЖДЕНИЕ: Эта функция в разработке.", + zh: "警告:此功能仍在开发中,请注意以下几点:\n- 仅追加架构。需要重建才能缩小存储空间。\n- 有点脆弱。\n- 首次同步时,所有历史记录将从远程传输。注意数据上限和慢速。\n- 只有差异会实时同步。\n\n如果您遇到任何问题,或对此功能有任何想法,请在 GitHub 上创建 issue。\n感谢您的巨大贡献", + }, + "obsidianLiveSyncSettingTab.msgOriginCheck": { + def: "Origin check: ${org}", + es: "Verificación de origen: {org}", + fr: "Vérification d'origine : ${org}", + he: "בדיקת מקור: ${org}", + ja: "オリジン確認: ${org}", + ko: "원점 확인: {org}", + ru: "Проверка origin: org", + zh: "源检查: {org}", + }, + "obsidianLiveSyncSettingTab.msgRebuildRequired": { + def: "Rebuilding Databases are required to apply the changes.. Please select the method to apply the changes.\n\n
\nLegends\n\n| Symbol | Meaning |\n|: ------ :| ------- |\n| ⇔ | Up to Date |\n| ⇄ | Synchronise to balance |\n| ⇐,⇒ | Transfer to overwrite |\n| ⇠,⇢ | Transfer to overwrite from other side |\n\n
\n\n## ${OPTION_REBUILD_BOTH}\nAt a glance: 📄 ⇒¹ 💻 ⇒² 🛰️ ⇢ⁿ 💻 ⇄ⁿ⁺¹ 📄\nReconstruct both the local and remote databases using existing files from this device.\nThis causes a lockout other devices, and they need to perform fetching.\n## ${OPTION_FETCH}\nAt a glance: 📄 ⇄² 💻 ⇐¹ 🛰️ ⇔ 💻 ⇔ 📄\nInitialise the local database and reconstruct it using data fetched from the remote database.\nThis case includes the case which you have rebuilt the remote database.\n## ${OPTION_ONLY_SETTING}\nStore only the settings. **Caution: This may lead to data corruption**; database reconstruction is generally necessary.", + es: "Es necesario reconstruir las bases de datos para aplicar los cambios. Por favor selecciona el método para aplicar los cambios.\n\n
\nLegendas\n\n| Símbolo | Significado |\n|: ------ :| ------- |\n| ⇔ | Actualizado |\n| ⇄ | Sincronizar para equilibrar |\n| ⇐,⇒ | Transferir para sobrescribir |\n| ⇠,⇢ | Transferir para sobrescribir desde otro lado |\n\n
\n\n## ${OPTION_REBUILD_BOTH}\nA simple vista: 📄 ⇒¹ 💻 ⇒² 🛰️ ⇢ⁿ 💻 ⇄ⁿ⁺¹ 📄\nReconstruir tanto la base de datos local como la remota utilizando los archivos existentes de este dispositivo.\nEsto bloquea a otros dispositivos, y necesitan realizar la obtención.\n## ${OPTION_FETCH}\nA simple vista: 📄 ⇄² 💻 ⇐¹ 🛰️ ⇔ 💻 ⇔ 📄\nInicializa la base de datos local y la reconstruye utilizando los datos obtenidos de la base de datos remota.\nEste caso incluye el caso en el que has reconstruido la base de datos remota.\n## ${OPTION_ONLY_SETTING}\nAlmacena solo la configuración. **Precaución: esto puede provocar corrupción de datos**; generalmente es necesario reconstruir la base de datos.", + fr: "La reconstruction des bases de données est nécessaire pour appliquer les changements. Veuillez sélectionner la méthode d'application.\n\n
\nLégende\n\n| Symbole | Signification |\n|: ------ :| ------- |\n| ⇔ | À jour |\n| ⇄ | Synchroniser pour équilibrer |\n| ⇐,⇒ | Transférer pour écraser |\n| ⇠,⇢ | Transférer pour écraser depuis l'autre côté |\n\n
\n\n## ${OPTION_REBUILD_BOTH}\nEn bref : 📄 ⇒¹ 💻 ⇒² 🛰️ ⇢ⁿ 💻 ⇄ⁿ⁺¹ 📄\nReconstruit les bases locale et distante à partir des fichiers existants de cet appareil.\nCeci provoque un verrouillage des autres appareils, qui devront effectuer une récupération.\n## ${OPTION_FETCH}\nEn bref : 📄 ⇄² 💻 ⇐¹ 🛰️ ⇔ 💻 ⇔ 📄\nInitialise la base locale et la reconstruit à partir des données récupérées depuis la base distante.\nCe cas inclut également celui où vous avez reconstruit la base distante.\n## ${OPTION_ONLY_SETTING}\nNe stocker que les paramètres. **Attention : cela peut entraîner une corruption des données** ; une reconstruction de la base est généralement nécessaire.", + he: "נדרשת בנייה מחדש של מסדי הנתונים כדי להחיל את השינויים. אנא בחר את השיטה.\n\n
\nמקרא\n\n| סמל | משמעות |\n|: ------ :| ------- |\n| ⇔ | מעודכן |\n| ⇄ | סנכרן לאיזון |\n| ⇐,⇒ | העבר לדריסה |\n| ⇠,⇢ | העבר לדריסה מהצד השני |\n\n
\n\n## ${OPTION_REBUILD_BOTH}\nבמבט: 📄 ⇒¹ 💻 ⇒² 🛰️ ⇢ⁿ 💻 ⇄ⁿ⁺¹ 📄\nבנה מחדש גם את מסד הנתונים המקומי וגם המרוחד תוך שימוש בקבצים קיימים ממכשיר זה.\nפעולה זו תנעל מכשירים אחרים שיצטרכו לבצע משיכה.\n## ${OPTION_FETCH}\nבמבט: 📄 ⇄² 💻 ⇐¹ 🛰️ ⇔ 💻 ⇔ 📄\nאתחל את מסד הנתונים המקומי ובנה אותו מחדש תוך שימוש בנתונים שנמשכו ממסד הנתונים המרוחד.\nכולל את המקרה שבו בנית מחדש את מסד הנתונים המרוחד.\n## ${OPTION_ONLY_SETTING}\nשמור רק את ההגדרות. **זהירות: עלול לגרום לפגיעה בנתונים**; בנייה מחדש של מסד הנתונים נדרשת בדרך כלל.", + ja: "変更を適用するにはデータベースの再構築が必要です。変更を適用する方法を選択してください。\n\n
\n凡例\n\n| 記号 | 意味 |\n|: ------ :| ------- |\n| ⇔ | 最新 |\n| ⇄ | 同期してバランスを取る |\n| ⇐,⇒ | 上書きするため転送 |\n| ⇠,⇢ | 反対側から上書きするため転送 |\n\n
\n\n## ${OPTION_REBUILD_BOTH}\n概要: 📄 ⇒¹ 💻 ⇒² 🛰️ ⇢ⁿ 💻 ⇄ⁿ⁺¹ 📄\nこのデバイスの既存ファイルを使用してローカルとリモートの両方のデータベースを再構築します。\n他のデバイスはロックアウトされ、フェッチが必要です。\n## ${OPTION_FETCH}\n概要: 📄 ⇄² 💻 ⇐¹ 🛰️ ⇔ 💻 ⇔ 📄\nローカルデータベースを初期化し、リモートデータベースから取得したデータを使用して再構築します。\nリモートデータベースを再構築した場合も含まれます。\n## ${OPTION_ONLY_SETTING}\n設定のみを保存します。**注意: データ破損につながる可能性があります**。通常、データベースの再構築が必要です。", + ko: "변경사항을 적용하려면 데이터베이스를 재구축해야 합니다. 아래 중 한 가지 방법을 선택해 주세요.\n\n
\n범례\n\n| 기호 | 의미 |\n|: ------ :| ------- |\n| ⇔ | 최신 상태 |\n| ⇄ | 동기화 균형 유지 |\n| ⇐,⇒ | 덮어쓰기 방식의 전송 |\n| ⇠,⇢ | 상대편에서 가져와 덮어쓰기 |\n\n
\n\n## ${OPTION_REBUILD_BOTH}\n개요: 📄 ⇒¹ 💻 ⇒² 🛰️ ⇢ⁿ 💻 ⇄ⁿ⁺¹ 📄\n이 기기의 기존 파일을 기반으로 로컬과 원격 데이터베이스를 모두 재구축합니다.\n이 과정에서 다른 기기는 일시적으로 접근이 제한되며, 가져오기 작업을 별도로 수행해야 합니다.\n\n## ${OPTION_FETCH}\n개요: 📄 ⇄² 💻 ⇐¹ 🛰️ ⇔ 💻 ⇔ 📄\n로컬 데이터베이스를 초기화한 후, 원격 데이터베이스에서 데이터를 가져와 재구축합니다.\n이는 원격 측에서 데이터베이스를 먼저 재구축한 경우에도 해당됩니다.\n\n## ${OPTION_ONLY_SETTING}\n설정만 저장합니다. **⚠️ 주의: 이 방법은 데이터 손상을 일으킬 수 있습니다.** 일반적으로는 전체 데이터베이스 재구축이 필요합니다.", + ru: "Требуется перестроение баз данных для применения изменений.", + zh: "需要重建数据库以应用更改。请选择应用更改的方法。\n\n
\n图例\n\n| 符号 | 含义 |\n|: ------ :| ------- |\n| ⇔ | 最新 |\n| ⇄ | 同步以平衡 |\n| ⇐,⇒ | 传输以覆盖 |\n| ⇠,⇢ | 从另一侧传输以覆盖 |\n\n
\n\n## ${OPTION_REBUILD_BOTH}\n概览:📄 ⇒¹ 💻 ⇒² 🛰️ ⇢ⁿ 💻 ⇄ⁿ⁺¹ 📄\n使用此设备的现有文件重建本地和远程数据库。\n这将导致其他设备被锁定,并且它们需要执行获取操作。\n## ${OPTION_FETCH}\n概览:📄 ⇄² 💻 ⇐¹ 🛰️ ⇔ 💻 ⇔ 📄\n初始化本地数据库并使用从远程数据库获取的数据重建它。\n这种情况包括您已经重建了远程数据库的情况。\n## ${OPTION_ONLY_SETTING}\n仅存储设置。**注意:这可能导致数据损坏**;通常需要重建数据库", + }, + "obsidianLiveSyncSettingTab.msgSelectAndApplyPreset": { + def: "Please select and apply any preset item to complete the wizard.", + es: "Por favor, selecciona y aplica cualquier elemento preestablecido para completar el asistente.", + fr: "Veuillez sélectionner et appliquer un préréglage pour terminer l'assistant.", + he: "אנא בחר והחל פריט קבוע מראש כלשהו להשלמת האשף.", + ja: "ウィザードを完了するには、プリセット項目を選択して適用してください。", + ko: "마법사를 완료하려면 프리셋 항목을 선택하고 적용해 주세요.", + ru: "Выберите и примените любой пресет для завершения мастера.", + zh: "请选择并应用任一预设项以完成向导。", + "zh-tw": "請選擇並套用任一預設項目以完成精靈。", + }, + "obsidianLiveSyncSettingTab.msgSetCorsCredentials": { + def: "Set cors.credentials", + es: "Configurar cors.credentials", + fr: "Définir cors.credentials", + he: "הגדר cors.credentials", + ja: "cors.credentialsを設定", + ko: "cors.credentials 설정", + ru: "Установить cors.credentials", + zh: "设置 cors.credentials", + }, + "obsidianLiveSyncSettingTab.msgSetCorsOrigins": { + def: "Set cors.origins", + es: "Configurar cors.origins", + fr: "Définir cors.origins", + he: "הגדר cors.origins", + ja: "cors.originsを設定", + ko: "cors.origins 설정", + ru: "Установить cors.origins", + zh: "设置 cors.origins", + }, + "obsidianLiveSyncSettingTab.msgSetMaxDocSize": { + def: "Set couchdb.max_document_size", + es: "Configurar couchdb.max_document_size", + fr: "Définir couchdb.max_document_size", + he: "הגדר couchdb.max_document_size", + ja: "couchdb.max_document_sizeを設定", + ko: "couchdb.max_document_size 설정", + ru: "Установить couchdb.max_document_size", + zh: "设置 couchdb.max_document_size", + }, + "obsidianLiveSyncSettingTab.msgSetMaxRequestSize": { + def: "Set chttpd.max_http_request_size", + es: "Configurar chttpd.max_http_request_size", + fr: "Définir chttpd.max_http_request_size", + he: "הגדר chttpd.max_http_request_size", + ja: "chttpd.max_http_request_sizeを設定", + ko: "chttpd.max_http_request_size 설정", + ru: "Установить chttpd.max_http_request_size", + zh: "设置 chttpd.max_http_request_size", + }, + "obsidianLiveSyncSettingTab.msgSetRequireValidUser": { + def: "Set chttpd.require_valid_user = true", + es: "Configurar chttpd.require_valid_user = true", + fr: "Définir chttpd.require_valid_user = true", + he: "הגדר chttpd.require_valid_user = true", + ja: "chttpd.require_valid_user = trueを設定", + ko: "chttpd.require_valid_user = true로 설정", + ru: "Установить chttpd.require_valid_user = true", + zh: "设置 chttpd.require_valid_user = true", + }, + "obsidianLiveSyncSettingTab.msgSetRequireValidUserAuth": { + def: "Set chttpd_auth.require_valid_user = true", + es: "Configurar chttpd_auth.require_valid_user = true", + fr: "Définir chttpd_auth.require_valid_user = true", + he: "הגדר chttpd_auth.require_valid_user = true", + ja: "chttpd_auth.require_valid_user = trueを設定", + ko: "chttpd_auth.require_valid_user = true로 설정", + ru: "Установить chttpd_auth.require_valid_user = true", + zh: "设置 chttpd_auth.require_valid_user = true", + }, + "obsidianLiveSyncSettingTab.msgSettingModified": { + def: 'The setting "${setting}" was modified from another device. Click {HERE} to reload settings. Click elsewhere to ignore changes.', + es: 'La configuración "${setting}" fue modificada desde otro dispositivo. Haz clic {HERE} para recargar la configuración. Haz clic en otro lugar para ignorar los cambios.', + fr: "Le paramètre « ${setting} » a été modifié depuis un autre appareil. Cliquez sur {HERE} pour recharger les paramètres. Cliquez ailleurs pour ignorer les modifications.", + he: 'ההגדרה "${setting}" שונתה ממכשיר אחר. לחץ על {HERE} לטעינה מחדש של ההגדרות. לחץ במקום אחר להתעלמות מהשינויים.', + ja: '設定"${setting}"が別のデバイスから変更されました。{HERE}をクリックして設定を再読み込みしてください。変更を無視するには他の場所をクリックしてください。', + ko: '"${setting}" 설정이 다른 기기에서 수정되었습니다. 설정을 다시 로드하려면 {HERE}를 클릭하세요. 변경사항을 무시하려면 다른 곳을 클릭하세요.', + ru: "Настройка setting была изменена с другого устройства.", + zh: '设置 "${setting}" 已从另一台设备修改。点击 {HERE} 重新加载设置。点击其他地方忽略更改', + }, + "obsidianLiveSyncSettingTab.msgSettingsUnchangeableDuringSync": { + def: 'These settings are unable to be changed during synchronization. Please disable all syncing in the "Sync Settings" to unlock.', + es: 'Estas configuraciones no se pueden cambiar durante la sincronización. Por favor, deshabilita toda la sincronización en las "Configuraciones de Sincronización" para desbloquear.', + fr: "Ces paramètres ne peuvent pas être modifiés durant la synchronisation. Désactivez toute synchronisation dans « Paramètres de synchronisation » pour déverrouiller.", + he: 'הגדרות אלה אינן ניתנות לשינוי במהלך סנכרון. אנא נטרל את כל הסנכרון ב"הגדרות סנכרון" כדי לבטל נעילה.', + ja: 'これらの設定は同期中に変更できません。ロックを解除するには、"同期設定"ですべての同期を無効にしてください。', + ko: '동기화 중에는 이 설정들을 변경할 수 없습니다. 잠금을 해제하려면 "동기화 설정"에서 모든 동기화를 비활성화해 주세요.', + ru: "Эти настройки нельзя изменить во время синхронизации.", + zh: "这些设置在同步期间无法更改。请在“同步设置”中禁用所有同步以解锁", + }, + "obsidianLiveSyncSettingTab.msgSetWwwAuth": { + def: "Set httpd.WWW-Authenticate", + es: "Configurar httpd.WWW-Authenticate", + fr: "Définir httpd.WWW-Authenticate", + he: "הגדר httpd.WWW-Authenticate", + ja: "httpd.WWW-Authenticateを設定", + ko: "httpd.WWW-Authenticate 설정", + ru: "Установить httpd.WWW-Authenticate", + zh: "设置 httpd.WWW-Authenticate", + }, + "obsidianLiveSyncSettingTab.nameApplySettings": { + def: "Apply Settings", + es: "Aplicar configuraciones", + fr: "Appliquer les paramètres", + he: "החל הגדרות", + ja: "設定を適用", + ko: "설정 적용", + ru: "Применить настройки", + zh: "应用设置", + }, + "obsidianLiveSyncSettingTab.nameConnectSetupURI": { + def: "Connect with Setup URI", + es: "Conectar con URI de configuración", + fr: "Se connecter avec une URI de configuration", + he: "התחבר עם Setup URI", + ja: "セットアップURIで接続", + ko: "Setup URI로 연결", + ru: "Подключиться через Setup URI", + zh: "使用设置 URI 连接", + }, + "obsidianLiveSyncSettingTab.nameCopySetupURI": { + def: "Copy the current settings to a Setup URI", + es: "Copiar la configuración actual a una URI de configuración", + fr: "Copier les paramètres actuels vers une URI de configuration", + he: "העתק הגדרות נוכחיות ל-Setup URI", + ja: "現在の設定をセットアップURIにコピー", + ko: "현재 설정을 Setup URI로 복사", + ru: "Копировать текущие настройки в Setup URI", + zh: "将当前设置复制为设置 URI", + }, + "obsidianLiveSyncSettingTab.nameDisableHiddenFileSync": { + def: "Disable Hidden files sync", + es: "Desactivar sincronización de archivos ocultos", + fr: "Désactiver la synchronisation des fichiers cachés", + he: "נטרל סנכרון קבצים נסתרים", + ja: "隠しファイル同期を無効化", + ko: "숨김 파일 동기화 비활성화", + ru: "Отключить синхронизацию скрытых файлов", + zh: "禁用隐藏文件同步", + "zh-tw": "停用隱藏檔案同步", + }, + "obsidianLiveSyncSettingTab.nameDiscardSettings": { + def: "Discard existing settings and databases", + es: "Descartar configuraciones y bases de datos existentes", + fr: "Abandonner les paramètres et bases existants", + he: "בטל הגדרות ומסדי נתונים קיימים", + ja: "既存の設定とデータベースを破棄", + ko: "기존 설정 및 데이터베이스 삭제", + ru: "Отменить существующие настройки и базы данных", + zh: "丢弃现有设置和数据库", + }, + "obsidianLiveSyncSettingTab.nameEnableHiddenFileSync": { + def: "Enable Hidden files sync", + es: "Activar sincronización de archivos ocultos", + fr: "Activer la synchronisation des fichiers cachés", + he: "הפעל סנכרון קבצים נסתרים", + ja: "隠しファイル同期を有効化", + ko: "숨김 파일 동기화 활성화", + ru: "Включить синхронизацию скрытых файлов", + zh: "启用隐藏文件同步", + "zh-tw": "啟用隱藏檔案同步", + }, + "obsidianLiveSyncSettingTab.nameEnableLiveSync": { + def: "Enable LiveSync", + es: "Activar LiveSync", + fr: "Activer LiveSync", + he: "הפעל LiveSync", + ja: "LiveSyncを有効化", + ko: "LiveSync 활성화", + ru: "Включить LiveSync", + zh: "启用 LiveSync", + }, + "obsidianLiveSyncSettingTab.nameHiddenFileSynchronization": { + def: "Hidden file synchronization", + es: "Sincronización de archivos ocultos", + fr: "Synchronisation des fichiers cachés", + he: "סנכרון קבצים נסתרים", + ja: "隠しファイル同期", + ko: "숨김 파일 동기화", + ru: "Синхронизация скрытых файлов", + zh: "隐藏文件同步", + "zh-tw": "隱藏檔案同步", + }, + "obsidianLiveSyncSettingTab.nameManualSetup": { + def: "Manual Setup", + es: "Configuración manual", + fr: "Configuration manuelle", + he: "הגדרה ידנית", + ja: "手動セットアップ", + ko: "수동 설정", + ru: "Ручная настройка", + zh: "手动设置", + }, + "obsidianLiveSyncSettingTab.nameTestConnection": { + def: "Test Connection", + es: "Probar conexión", + fr: "Tester la connexion", + he: "בדוק חיבור", + ja: "接続テスト", + ko: "연결 테스트", + ru: "Тест подключения", + zh: "测试连接", + }, + "obsidianLiveSyncSettingTab.nameTestDatabaseConnection": { + def: "Test Database Connection", + es: "Probar Conexión de Base de Datos", + fr: "Tester la connexion à la base de données", + he: "בדוק חיבור למסד נתונים", + ja: "データベース接続テスト", + ko: "데이터베이스 연결 테스트", + ru: "Тест подключения к базе данных", + zh: "测试数据库连接", + }, + "obsidianLiveSyncSettingTab.nameValidateDatabaseConfig": { + def: "Validate Database Configuration", + es: "Validar Configuración de la Base de Datos", + fr: "Valider la configuration de la base de données", + he: "אמת תצורת מסד נתונים", + ja: "データベース設定を検証", + ko: "데이터베이스 구성 검증", + ru: "Проверить конфигурацию базы данных", + zh: "验证数据库配置", + }, + "obsidianLiveSyncSettingTab.okAdminPrivileges": { + def: "✔ You have administrator privileges.", + es: "✔ Tienes privilegios de administrador.", + fr: "✔ Vous disposez des privilèges administrateur.", + he: "✔ יש לך הרשאות מנהל.", + ja: "✔ 管理者権限があります。", + ko: "✔ 관리자 권한이 있습니다.", + ru: "✔ У вас есть права администратора.", + zh: "✔ 您拥有管理员权限", + }, + "obsidianLiveSyncSettingTab.okCorsCredentials": { + def: "✔ cors.credentials is ok.", + es: "✔ cors.credentials está correcto.", + fr: "✔ cors.credentials est correct.", + he: "✔ cors.credentials תקין.", + ja: "✔ cors.credentialsは正常です。", + ko: "✔ cors.credentials가 정상입니다.", + ru: "✔ cors.credentials в порядке.", + zh: "✔ cors.credentials 设置正确", + }, + "obsidianLiveSyncSettingTab.okCorsCredentialsForOrigin": { + def: "CORS credentials OK", + es: "CORS credenciales OK", + fr: "Identifiants CORS OK", + he: "CORS credentials תקין", + ja: "CORS認証情報OK", + ko: "CORS 자격 증명 정상", + ru: "CORS учётные данные в порядке", + zh: "CORS 凭据正常", + }, + "obsidianLiveSyncSettingTab.okCorsOriginMatched": { + def: "✔ CORS origin OK", + es: "✔ Origen de CORS correcto", + fr: "✔ Origine CORS OK", + he: "✔ CORS origin תקין", + ja: "✔ CORSオリジンOK", + ko: "✔ CORS 원점 정상", + ru: "✔ CORS origin в порядке", + zh: "✔ CORS 源正常", + }, + "obsidianLiveSyncSettingTab.okCorsOrigins": { + def: "✔ cors.origins is ok.", + es: "✔ cors.origins está correcto.", + fr: "✔ cors.origins est correct.", + he: "✔ cors.origins תקין.", + ja: "✔ cors.originsは正常です。", + ko: "✔ cors.origins가 정상입니다.", + ru: "✔ cors.origins в порядке.", + zh: "✔ cors.origins 设置正确", + }, + "obsidianLiveSyncSettingTab.okEnableCors": { + def: "✔ httpd.enable_cors is ok.", + es: "✔ httpd.enable_cors está correcto.", + fr: "✔ httpd.enable_cors est correct.", + he: "✔ httpd.enable_cors תקין.", + ja: "✔ httpd.enable_corsは正常です。", + ko: "✔ httpd.enable_cors가 정상입니다.", + ru: "✔ httpd.enable_cors в порядке.", + zh: "✔ httpd.enable_cors 设置正确", + }, + "obsidianLiveSyncSettingTab.okEnableCorsChttpd": { + def: "✔ chttpd.enable_cors is ok.", + fr: "✔ chttpd.enable_cors est correct.", + he: "✔ chttpd.enable_cors תקין.", + ja: "✔ chttpd.enable_corsは正常です。", + ru: "✔ chttpd.enable_cors в порядке.", + zh: "✔ chttpd.enable_cors is ok.", + }, + "obsidianLiveSyncSettingTab.okMaxDocumentSize": { + def: "✔ couchdb.max_document_size is ok.", + es: "✔ couchdb.max_document_size está correcto.", + fr: "✔ couchdb.max_document_size est correct.", + he: "✔ couchdb.max_document_size תקין.", + ja: "✔ couchdb.max_document_sizeは正常です。", + ko: "✔ couchdb.max_document_size가 정상입니다.", + ru: "✔ couchdb.max_document_size в порядке.", + zh: "✔ couchdb.max_document_size 设置正确", + }, + "obsidianLiveSyncSettingTab.okMaxRequestSize": { + def: "✔ chttpd.max_http_request_size is ok.", + es: "✔ chttpd.max_http_request_size está correcto.", + fr: "✔ chttpd.max_http_request_size est correct.", + he: "✔ chttpd.max_http_request_size תקין.", + ja: "✔ chttpd.max_http_request_sizeは正常です。", + ko: "✔ chttpd.max_http_request_size가 정상입니다.", + ru: "✔ chttpd.max_http_request_size в порядке.", + zh: "✔ chttpd.max_http_request_size 设置正确", + }, + "obsidianLiveSyncSettingTab.okRequireValidUser": { + def: "✔ chttpd.require_valid_user is ok.", + es: "✔ chttpd.require_valid_user está correcto.", + fr: "✔ chttpd.require_valid_user est correct.", + he: "✔ chttpd.require_valid_user תקין.", + ja: "✔ chttpd.require_valid_userは正常です。", + ko: "✔ chttpd.require_valid_user가 정상입니다.", + ru: "✔ chttpd.require_valid_user в порядке.", + zh: "✔ chttpd.require_valid_user 设置正确", + }, + "obsidianLiveSyncSettingTab.okRequireValidUserAuth": { + def: "✔ chttpd_auth.require_valid_user is ok.", + es: "✔ chttpd_auth.require_valid_user está correcto.", + fr: "✔ chttpd_auth.require_valid_user est correct.", + he: "✔ chttpd_auth.require_valid_user תקין.", + ja: "✔ chttpd_auth.require_valid_userは正常です。", + ko: "✔ chttpd_auth.require_valid_user가 정상입니다.", + ru: "✔ chttpd_auth.require_valid_user в порядке.", + zh: "✔ chttpd_auth.require_valid_user 设置正确", + }, + "obsidianLiveSyncSettingTab.okWwwAuth": { + def: "✔ httpd.WWW-Authenticate is ok.", + es: "✔ httpd.WWW-Authenticate está correcto.", + fr: "✔ httpd.WWW-Authenticate est correct.", + he: "✔ httpd.WWW-Authenticate תקין.", + ja: "✔ httpd.WWW-Authenticateは正常です。", + ko: "✔ httpd.WWW-Authenticate가 정상입니다.", + ru: "✔ httpd.WWW-Authenticate в порядке.", + zh: "✔ httpd.WWW-Authenticate 设置正确", + }, + "obsidianLiveSyncSettingTab.optionApply": { + def: "Apply", + es: "Aplicar", + fr: "Appliquer", + he: "החל", + ja: "適用", + ko: "적용", + ru: "Применить", + zh: "应用", + }, + "obsidianLiveSyncSettingTab.optionCancel": { + def: "Cancel", + es: "Cancelar", + fr: "Annuler", + he: "ביטול", + ja: "キャンセル", + ko: "취소", + ru: "Отмена", + zh: "取消", + }, + "obsidianLiveSyncSettingTab.optionCouchDB": { + def: "CouchDB", + es: "CouchDB", + fr: "CouchDB", + he: "CouchDB", + ja: "CouchDB", + ko: "CouchDB", + ru: "CouchDB", + zh: "CouchDB", + }, + "obsidianLiveSyncSettingTab.optionDisableAllAutomatic": { + def: "Disable all automatic", + es: "Desactivar lo automático", + fr: "Désactiver toute automatisation", + he: "נטרל את כל האוטומטי", + ja: "すべての自動を無効化", + ko: "모든 자동 비활성화", + ru: "Отключить всё автоматическое", + zh: "禁用所有自动同步", + "zh-tw": "停用所有自動同步", + }, + "obsidianLiveSyncSettingTab.optionFetchFromRemote": { + def: "Fetch from Remote", + es: "Obtener del remoto", + fr: "Récupérer depuis le distant", + he: "משוך מהשרת המרוחד", + ja: "リモートからフェッチ", + ko: "원격에서 가져오기", + ru: "Загрузить с удалённого", + zh: "从远程获取", + }, + "obsidianLiveSyncSettingTab.optionHere": { + def: "HERE", + es: "AQUÍ", + fr: "ICI", + he: "כאן", + ja: "ここ", + ko: "여기", + ru: "ЗДЕСЬ", + zh: "这里", + }, + "obsidianLiveSyncSettingTab.optionLiveSync": { + def: "LiveSync", + es: "Sincronización LiveSync", + fr: "LiveSync", + he: "LiveSync", + ja: "LiveSync 同期", + ko: "LiveSync 동기화", + ru: "Синхронизация LiveSync", + zh: "LiveSync 同步", + "zh-tw": "LiveSync 同步", + }, + "obsidianLiveSyncSettingTab.optionMinioS3R2": { + def: "Minio,S3,R2", + es: "Minio,S3,R2", + fr: "Minio, S3, R2", + he: "Minio,S3,R2", + ja: "Minio,S3,R2", + ko: "Minio,S3,R2", + ru: "Minio,S3,R2", + zh: "Minio, S3, R2", + }, + "obsidianLiveSyncSettingTab.optionOkReadEverything": { + def: "OK, I have read everything.", + es: "OK, he leído todo.", + fr: "OK, j'ai tout lu.", + he: "בסדר, קראתי הכל.", + ja: "OK、すべて読みました。", + ko: "네, 모든 것을 읽었습니다.", + ru: "ОК, я всё прочитал.", + zh: "好的,我已经阅读了所有内容 ", + }, + "obsidianLiveSyncSettingTab.optionOnEvents": { + def: "On events", + es: "En eventos", + fr: "Sur événements", + he: "על אירועים", + ja: "イベント時", + ko: "이벤트 시", + ru: "По событиям", + zh: "事件触发时", + "zh-tw": "事件觸發時", + }, + "obsidianLiveSyncSettingTab.optionPeriodicAndEvents": { + def: "Periodic and on events", + es: "Periódico y en eventos", + fr: "Périodique et sur événements", + he: "תקופתי ועל אירועים", + ja: "定期およびイベント時", + ko: "주기적 및 이벤트 시", + ru: "Периодически и по событиям", + zh: "定期与事件触发", + "zh-tw": "定期與事件觸發", + }, + "obsidianLiveSyncSettingTab.optionPeriodicWithBatch": { + def: "Periodic w/ batch", + es: "Periódico con lote", + fr: "Périodique avec lot", + he: "תקופתי עם אצווה", + ja: "バッチ付き定期", + ko: "주기적 w/ 일괄", + ru: "Периодически с пакетами", + zh: "定期(批处理)", + "zh-tw": "定期(批次)", + }, + "obsidianLiveSyncSettingTab.optionRebuildBoth": { + def: "Rebuild Both from This Device", + es: "Reconstructuir ambos desde este dispositivo", + fr: "Tout reconstruire depuis cet appareil", + he: "בנה שניהם מחדש ממכשיר זה", + ja: "このデバイスから両方を再構築", + ko: "이 기기에서 둘 다 재구축", + ru: "Перестроить оба с этого устройства", + zh: "从此设备重建两者", + }, + "obsidianLiveSyncSettingTab.optionSaveOnlySettings": { + def: "(Danger) Save Only Settings", + es: "(Peligro) Guardar solo configuración", + fr: "(Danger) N'enregistrer que les paramètres", + he: "(סכנה) שמור הגדרות בלבד", + ja: "(危険) 設定のみ保存", + ko: "(위험) 설정만 저장", + ru: "(Опасно) Сохранить только настройки", + zh: "(危险)仅保存设置", + }, + "obsidianLiveSyncSettingTab.panelChangeLog": { + def: "Change Log", + es: "Registro de cambios", + fr: "Journal des modifications", + he: "יומן שינויים", + ja: "変更履歴", + ko: "변경 로그", + ru: "История изменений", + zh: "更新日志", + }, + "obsidianLiveSyncSettingTab.panelGeneralSettings": { + def: "General Settings", + es: "Configuraciones Generales", + fr: "Paramètres généraux", + he: "הגדרות כלליות", + ja: "一般設定", + ko: "일반 설정", + ru: "Основные настройки", + zh: "常规设置", + }, + "obsidianLiveSyncSettingTab.panelPrivacyEncryption": { + def: "Privacy & Encryption", + es: "Privacidad y Cifrado", + fr: "Confidentialité et chiffrement", + he: "פרטיות והצפנה", + ja: "プライバシーと暗号化", + ko: "개인정보 보호 및 암호화", + ru: "Конфиденциальность и шифрование", + zh: "隐私与加密", + }, + "obsidianLiveSyncSettingTab.panelRemoteConfiguration": { + def: "Remote Configuration", + es: "Configuración remota", + fr: "Configuration distante", + he: "תצורת שרת מרוחד", + ja: "リモート設定", + ko: "원격 구성", + ru: "Удалённая конфигурация", + zh: "远程配置", + }, + "obsidianLiveSyncSettingTab.panelSetup": { + def: "Setup", + es: "Configuración", + fr: "Configuration", + he: "הגדרה", + ja: "セットアップ", + ko: "설정", + ru: "Настройка", + zh: "设置", + }, + "obsidianLiveSyncSettingTab.serverVersion": { + def: "Server info: ${info}", + fr: "Infos serveur : ${info}", + he: "פרטי שרת: ${info}", + ja: "サーバー情報: ${info}", + ru: "Информация о сервере: info", + zh: "服务器信息: ${info}", + }, + "obsidianLiveSyncSettingTab.titleActiveRemoteServer": { + def: "Active Remote Server", + fr: "Serveur distant actif", + he: "שרת מרוחד פעיל", + ja: "アクティブなリモートサーバー", + ru: "Активный удалённый сервер", + zh: "活动远程服务器", + }, + "obsidianLiveSyncSettingTab.titleAppearance": { + def: "Appearance", + es: "Apariencia", + fr: "Apparence", + he: "מראה", + ja: "外観", + ko: "외관", + ru: "Внешний вид", + zh: "外观", + "zh-tw": "外觀", + }, + "obsidianLiveSyncSettingTab.titleConflictResolution": { + def: "Conflict resolution", + es: "Resolución de conflictos", + fr: "Résolution des conflits", + he: "פתרון קונפליקטים", + ja: "競合解決", + ko: "충돌 해결", + ru: "Разрешение конфликтов", + zh: "冲突处理", + "zh-tw": "衝突處理", + }, + "obsidianLiveSyncSettingTab.titleCongratulations": { + def: "Congratulations!", + es: "¡Felicidades!", + fr: "Félicitations !", + he: "מזל טוב!", + ja: "おめでとうございます!", + ko: "축하합니다!", + ru: "Поздравляем!", + zh: "恭喜!", + "zh-tw": "恭喜!", + }, + "obsidianLiveSyncSettingTab.titleCouchDB": { + def: "CouchDB", + es: "Servidor CouchDB", + fr: "CouchDB", + he: "CouchDB", + ja: "CouchDB サーバー", + ko: "CouchDB 서버", + ru: "Сервер CouchDB", + zh: "CouchDB 服务器", + "zh-tw": "CouchDB 伺服器", + }, + "obsidianLiveSyncSettingTab.titleDeletionPropagation": { + def: "Deletion Propagation", + es: "Propagación de eliminación", + fr: "Propagation des suppressions", + he: "הפצת מחיקות", + ja: "削除の伝播", + ko: "삭제 전파", + ru: "Распространение удалений", + zh: "删除传播", + "zh-tw": "刪除傳播", + }, + "obsidianLiveSyncSettingTab.titleEncryptionNotEnabled": { + def: "Encryption is not enabled", + es: "El cifrado no está habilitado", + fr: "Le chiffrement n'est pas activé", + he: "ההצפנה אינה מופעלת", + ja: "暗号化が有効になっていません", + ko: "암호화가 활성화되지 않음", + ru: "Шифрование не включено", + zh: "尚未启用加密", + "zh-tw": "尚未啟用加密", + }, + "obsidianLiveSyncSettingTab.titleEncryptionPassphraseInvalid": { + def: "Encryption Passphrase Invalid", + es: "La frase de contraseña de cifrado es inválida", + fr: "Phrase secrète de chiffrement invalide", + he: "ביטוי סיסמה להצפנה לא תקין", + ja: "暗号化パスフレーズが無効です", + ko: "암호화 패스프레이즈 유효하지 않음", + ru: "Парольная фраза шифрования недействительна", + zh: "加密密码短语无效", + "zh-tw": "加密密語無效", + }, + "obsidianLiveSyncSettingTab.titleExtraFeatures": { + def: "Enable extra and advanced features", + es: "Habilitar funciones extras y avanzadas", + fr: "Activer les fonctionnalités supplémentaires et avancées", + he: "הפעל תכונות נוספות ומתקדמות", + ja: "追加および上級機能を有効化", + ko: "추가 및 고급 기능 활성화", + ru: "Включить дополнительные и расширенные функции", + zh: "启用额外和高级功能", + }, + "obsidianLiveSyncSettingTab.titleFetchConfig": { + def: "Fetch Config", + es: "Obtener configuración", + fr: "Récupérer la configuration", + he: "משוך תצורה", + ja: "設定を取得", + ko: "구성 가져오기", + ru: "Загрузить конфигурацию", + zh: "获取配置", + "zh-tw": "抓取設定", + }, + "obsidianLiveSyncSettingTab.titleFetchConfigFromRemote": { + def: "Fetch config from remote server", + es: "Obtener configuración del servidor remoto", + fr: "Récupérer la configuration depuis le serveur distant", + he: "משוך תצורה מהשרת המרוחד", + ja: "リモートサーバーから設定を取得", + ko: "원격 서버에서 구성 가져오기", + ru: "Загрузить конфигурацию с удалённого сервера", + zh: "从远程服务器获取配置", + }, + "obsidianLiveSyncSettingTab.titleFetchSettings": { + def: "Fetch Settings", + es: "Obtener configuraciones", + fr: "Récupérer les paramètres", + he: "משוך הגדרות", + ja: "設定の取得", + ko: "설정 가져오기", + ru: "Загрузить настройки", + zh: "获取设置", + }, + "obsidianLiveSyncSettingTab.titleHiddenFiles": { + def: "Hidden Files", + es: "Archivos ocultos", + fr: "Fichiers cachés", + he: "קבצים נסתרים", + ja: "隠しファイル", + ko: "숨김 파일", + ru: "Скрытые файлы", + zh: "隐藏文件", + "zh-tw": "隱藏檔案", + }, + "obsidianLiveSyncSettingTab.titleLogging": { + def: "Logging", + es: "Registro", + fr: "Journalisation", + he: "רישום יומן", + ja: "ログ", + ko: "로깅", + ru: "Логирование", + zh: "日志", + "zh-tw": "記錄", + }, + "obsidianLiveSyncSettingTab.titleMinioS3R2": { + def: "Minio,S3,R2", + es: "MinIO, S3, R2", + fr: "Minio, S3, R2", + he: "Minio,S3,R2", + ja: "MinIO、S3、R2", + ko: "MinIO, S3, R2", + ru: "MinIO, S3, R2", + zh: "MinIO、S3、R2", + "zh-tw": "MinIO、S3、R2", + }, + "obsidianLiveSyncSettingTab.titleNotification": { + def: "Notification", + es: "Notificación", + fr: "Notification", + he: "התראה", + ja: "通知", + ko: "알림", + ru: "Уведомления", + zh: "通知", + "zh-tw": "通知", + }, + "obsidianLiveSyncSettingTab.titleOnlineTips": { + def: "Online Tips", + es: "Consejos en línea", + fr: "Conseils en ligne", + he: "טיפים אונליין", + ja: "オンラインヒント", + ko: "온라인 팁", + ru: "Онлайн советы", + zh: "在线提示", + }, + "obsidianLiveSyncSettingTab.titleQuickSetup": { + def: "Quick Setup", + es: "Configuración rápida", + fr: "Configuration rapide", + he: "הגדרה מהירה", + ja: "クイックセットアップ", + ko: "빠른 설정", + ru: "Быстрая настройка", + zh: "快速设置", + }, + "obsidianLiveSyncSettingTab.titleRebuildRequired": { + def: "Rebuild Required", + es: "Reconstrucción necesaria", + fr: "Reconstruction requise", + he: "נדרשת בנייה מחדש", + ja: "再構築が必要", + ko: "재구축 필요", + ru: "Требуется перестроение", + zh: "需要重建", + }, + "obsidianLiveSyncSettingTab.titleRemoteConfigCheckFailed": { + def: "Remote Configuration Check Failed", + es: "La verificación de configuración remota falló", + fr: "Échec de la vérification de la configuration distante", + he: "בדיקת תצורת שרת מרוחד נכשלה", + ja: "リモート設定の確認に失敗", + ko: "원격 구성 확인 실패", + ru: "Проверка удалённой конфигурации не удалась", + zh: "远端配置检查失败", + "zh-tw": "遠端設定檢查失敗", + }, + "obsidianLiveSyncSettingTab.titleRemoteServer": { + def: "Remote Server", + es: "Servidor remoto", + fr: "Serveur distant", + he: "שרת מרוחד", + ja: "リモートサーバー", + ko: "원격 서버", + ru: "Удалённый сервер", + zh: "远端服务器", + "zh-tw": "遠端伺服器", + }, + "obsidianLiveSyncSettingTab.titleReset": { + def: "Reset", + es: "Reiniciar", + fr: "Réinitialiser", + he: "אתחול", + ja: "リセット", + ko: "리셋", + ru: "Сброс", + zh: "重置", + }, + "obsidianLiveSyncSettingTab.titleSetupOtherDevices": { + def: "To setup other devices", + es: "Para configurar otros dispositivos", + fr: "Pour configurer d'autres appareils", + he: "להגדרת מכשירים אחרים", + ja: "他のデバイスのセットアップ", + ko: "다른 기기 설정", + ru: "Для настройки других устройств", + zh: "设置其他设备", + }, + "obsidianLiveSyncSettingTab.titleSynchronizationMethod": { + def: "Synchronization Method", + es: "Método de sincronización", + fr: "Méthode de synchronisation", + he: "שיטת סנכרון", + ja: "同期方法", + ko: "동기화 방법", + ru: "Метод синхронизации", + zh: "同步方式", + "zh-tw": "同步方式", + }, + "obsidianLiveSyncSettingTab.titleSynchronizationPreset": { + def: "Synchronization Preset", + es: "Preestablecimiento de sincronización", + fr: "Préréglage de synchronisation", + he: "קבוע מראש לסנכרון", + ja: "同期プリセット", + ko: "동기화 프리셋", + ru: "Пресет синхронизации", + zh: "同步预设", + "zh-tw": "同步預設", + }, + "obsidianLiveSyncSettingTab.titleSyncSettings": { + def: "Sync Settings", + es: "Configuraciones de Sincronización", + fr: "Paramètres de synchronisation", + he: "הגדרות סנכרון", + ja: "同期設定", + ko: "동기화 설정", + ru: "Настройки синхронизации", + zh: "同步设置", + }, + "obsidianLiveSyncSettingTab.titleSyncSettingsViaMarkdown": { + def: "Sync Settings via Markdown", + es: "Configuración de sincronización a través de Markdown", + fr: "Synchroniser les paramètres via Markdown", + he: "סנכרון הגדרות דרך Markdown", + ja: "Markdown経由で設定を同期", + ko: "마크다운을 통한 동기화 설정", + ru: "Синхронизация настроек через Markdown", + zh: "通过 Markdown 同步设置", + "zh-tw": "透過 Markdown 同步設定", + }, + "obsidianLiveSyncSettingTab.titleUpdateThinning": { + def: "Update Thinning", + es: "Actualización de adelgazamiento", + fr: "Lissage des mises à jour", + he: "דילול עדכונים", + ja: "更新の間引き", + ko: "업데이트 솎아내기", + ru: "Оптимизация обновлений", + zh: "更新精简", + "zh-tw": "更新精簡", + }, + "obsidianLiveSyncSettingTab.warnCorsOriginUnmatched": { + def: "⚠ CORS Origin is unmatched ${from}->${to}", + es: "⚠ El origen de CORS no coincide: {from}->{to}", + fr: "⚠ L'origine CORS ne correspond pas ${from}->${to}", + he: "⚠ CORS Origin אינו תואם ${from}->${to}", + ja: "⚠ CORS Originが一致しません ${from}->${to}", + ko: "⚠ CORS 원점이 일치하지 않습니다 {from}->{to}", + ru: "⚠ CORS Origin не совпадает from->to", + zh: "⚠ CORS 源不匹配 {from}->{to}", + }, + "obsidianLiveSyncSettingTab.warnNoAdmin": { + def: "⚠ You do not have administrator privileges.", + es: "⚠ No tienes privilegios de administrador.", + fr: "⚠ Vous n'avez pas les privilèges administrateur.", + he: "⚠ אין לך הרשאות מנהל.", + ja: "⚠ 管理者権限がありません。", + ko: "⚠ 관리자 권한이 없습니다.", + ru: "⚠ У вас нет прав администратора.", + zh: "⚠ 您没有管理员权限", + }, + Ok: { + def: "Ok", + es: "Aceptar", + ja: "OK", + ko: "확인", + ru: "ОК", + zh: "确定", + "zh-tw": "確定", + }, + "Old Algorithm": { + def: "Old Algorithm", + es: "Algoritmo antiguo", + ja: "旧アルゴリズム", + ko: "이전 알고리즘", + ru: "Старый алгоритм", + zh: "旧算法", + "zh-tw": "舊演算法", + }, + "Older fallback (Slow, W/O WebAssembly)": { + def: "Older fallback (Slow, W/O WebAssembly)", + es: "Alternativa anterior (lenta, sin WebAssembly)", + ja: "旧フォールバック (低速、WebAssembly なし)", + ko: "이전 대체 방식 (느림, WebAssembly 없음)", + ru: "Старый вариант fallback (медленный, без WebAssembly)", + zh: "旧版回退(较慢,无 WebAssembly)", + "zh-tw": "舊版回退(較慢,無 WebAssembly)", + }, + Open: { + def: "Open", + es: "Abrir", + ja: "開く", + ko: "열기", + ru: "Открыть", + zh: "打开", + }, + "Open the dialog": { + def: "Open the dialog", + es: "Abrir el diálogo", + ja: "ダイアログを開く", + ko: "대화상자 열기", + ru: "Открыть диалог", + zh: "打开对话框", + }, + Overwrite: { + def: "Overwrite", + es: "Sobrescribir", + ja: "上書き", + ko: "덮어쓰기", + ru: "Перезаписать", + zh: "覆盖", + }, + "Overwrite patterns": { + def: "Overwrite patterns", + es: "Patrones de sobrescritura", + ja: "上書きパターン", + ko: "덮어쓰기 패턴", + ru: "Шаблоны перезаписи", + zh: "覆盖模式", + "zh-tw": "覆寫模式", + }, + "Overwrite remote": { + def: "Overwrite remote", + es: "Sobrescribir remoto", + ja: "リモートを上書き", + ko: "원격 덮어쓰기", + ru: "Перезаписать удалённое хранилище", + zh: "覆盖远端", + "zh-tw": "覆寫遠端", + }, + "Overwrite remote with local DB and passphrase.": { + def: "Overwrite remote with local DB and passphrase.", + es: "Sobrescribe el remoto con la base de datos local y la frase de contraseña.", + ja: "ローカル DB とパスフレーズでリモートを上書きします。", + ko: "로컬 DB와 암호문구로 원격을 덮어씁니다.", + ru: "Перезаписать удалённое хранилище локальной БД и парольной фразой.", + zh: "使用本地数据库和密码短语覆盖远端。", + "zh-tw": "使用本機資料庫與密語覆寫遠端。", + }, + "Overwrite Server Data with This Device's Files": { + def: "Overwrite Server Data with This Device's Files", + es: "Sobrescribir los datos del servidor con los archivos de este dispositivo", + ja: "このデバイスのファイルでサーバーデータを上書き", + ko: "이 기기의 파일로 서버 데이터를 덮어쓰기", + ru: "Перезаписать данные сервера файлами с этого устройства", + zh: "用本设备文件覆盖服务器数据", + "zh-tw": "以此裝置的檔案覆寫伺服器資料", + }, + "P2P.AskPassphraseForDecrypt": { + def: "The remote peer shared the configuration. Please input the passphrase to decrypt the configuration.", + fr: "Le pair distant a partagé la configuration. Veuillez saisir la phrase secrète pour déchiffrer la configuration.", + he: "העמית המרוחד שיתף את התצורה. אנא הזן את ביטוי הסיסמה לפענוח התצורה.", + ja: "リモートピアから設定が共有されました。設定を復号するためのパスフレーズを入力してください。", + ko: "원격 피어가 구성을 공유했습니다. 구성을 복호화하려면 패스프레이즈를 입력해 주세요.", + ru: "Удалённое устройство предоставило конфигурацию. Введите пароль для расшифровки.", + zh: "远程对等方共享了配置,请输入密码短语以解密配置", + }, + "P2P.AskPassphraseForShare": { + def: "The remote peer requested this device configuration. Please input the passphrase to share the configuration. You can ignore the request by cancelling this dialogue.", + fr: "Le pair distant a demandé la configuration de cet appareil. Veuillez saisir la phrase secrète pour partager la configuration. Vous pouvez ignorer la demande en annulant cette boîte de dialogue.", + he: "העמית המרוחד ביקש את תצורת מכשיר זה. אנא הזן את ביטוי הסיסמה לשיתוף התצורה. ניתן להתעלם מהבקשה על ידי ביטול הדיאלוג.", + ja: "リモートピアからこのデバイスの設定が要求されました。設定を共有するためのパスフレーズを入力してください。このダイアログをキャンセルすることでリクエストを無視できます。", + ko: "원격 피어가 이 기기의 구성을 요청했습니다. 구성을 공유하려면 패스프레이즈를 입력해 주세요. 이 대화상자를 취소하여 요청을 무시할 수 있습니다.", + ru: "Удалённое устройство запрашивает эту конфигурацию. Введите пароль для передачи.", + zh: "远程对等方请求此设备配置,请输入密码短语以共享配置。你可以通过取消此对话框来忽略此请求", + }, + "P2P.DisabledButNeed": { + def: "Peer-to-Peer Sync is disabled. Do you really want to enable it?", + fr: "Synchronisation pair-à-pair est désactivé. Voulez-vous vraiment l'activer ?", + he: "%{title_p2p_sync} מנוטרל. האם אתה בטוח שברצונך להפעיל?", + ja: "Peer-to-Peer Syncは無効になっています。本当に有効にしますか?", + ko: "피어 투 피어(P2P) 동기화가 비활성화되어 있습니다. 정말로 활성화하시겠습니까?", + ru: "title_p2p_sync отключён. Вы действительно хотите включить?", + zh: "Peer-to-Peer同步 已禁用。你确定要启用它吗?", + }, + "P2P.FailedToOpen": { + def: "Failed to open P2P connection to the signalling server.", + fr: "Échec d'ouverture de la connexion P2P vers le serveur de signalisation.", + he: "לא ניתן לפתוח חיבור P2P לשרת האותות.", + ja: "シグナリングサーバーへのP2P接続を開けませんでした。", + ko: "시그널링 서버에 P2P 연결을 열 수 없습니다.", + ru: "Не удалось открыть P2P подключение к серверу сигнализации.", + zh: "无法打开 P2P 连接到信令服务器", + }, + "P2P.NoAutoSyncPeers": { + def: "No auto-sync peers found. Please set peers on the Peer-to-Peer Sync pane.", + fr: "Aucun pair de synchronisation automatique trouvé. Veuillez définir des pairs dans le panneau Synchronisation pair-à-pair.", + he: "לא נמצאו עמיתים לסנכרון אוטומטי. אנא הגדר עמיתים בלוח %{long_p2p_sync}.", + ja: "自動同期ピアが見つかりません。Peer-to-Peer Sync (試験機能)ペインでピアを設定してください。", + ko: "자동 동기화 피어를 찾을 수 없습니다. 피어 투 피어(P2P) 동기화 (실험 기능) 창에서 피어를 설정해 주세요.", + ru: "Автосинхронизируемые устройства не найдены.", + zh: "未找到自动同步的对等方,请在 Peer-to-Peer同步 (实验性) 面板中设置对等方", + }, + "P2P.NoKnownPeers": { + def: "No peers has been detected, waiting incoming other peers...", + fr: "Aucun pair détecté, en attente d'autres pairs entrants...", + he: "לא זוהו עמיתים, ממתין לעמיתים נכנסים...", + ja: "ピアが検出されていません。他のピアからの接続を待機中...", + ko: "피어가 감지되지 않았습니다. 다른 피어의 접속을 기다리고 있습니다...", + ru: "Устройства не обнаружены, ожидаем другие устройства...", + zh: "未检测到对等方,正在等待其他对等方的连接...", + }, + "P2P.Note.description": { + def: " This replicator allows us to synchronise our vault with other devices\nusing a peer-to-peer connection. We can use this to synchronise our vault with our other devices without using a cloud service.\nThis replicator is based on Trystero. It also uses a signalling server to establish a connection between devices. The signalling server is used to exchange connection information between devices. It does (or,should) not know or store any of our data.\n\nThe signalling server can be hosted by anyone. This is just a Nostr relay. For the sake of simplicity and checking the behaviour of the replicator, an instance of the signalling server is hosted by vrtmrz. You can use the experimental server provided by vrtmrz, or you can use any other server.\n\nBy the way, even if the signalling server does not store our data, it can see the connection information of some of our devices. Please be aware of this. Also, be cautious when using the server provided by someone else.", + fr: " Ce réplicateur permet de synchroniser notre coffre avec d'autres\nappareils via une connexion pair-à-pair. Nous pouvons l'utiliser pour synchroniser notre coffre avec nos autres appareils sans recourir à un service cloud.\nCe réplicateur est basé sur Trystero. Il utilise également un serveur de signalisation pour établir une connexion entre les appareils. Le serveur de signalisation sert à échanger les informations de connexion entre appareils. Il ne connaît (ou ne devrait connaître) ni ne stocke aucune de nos données.\n\nLe serveur de signalisation peut être hébergé par n'importe qui. Il s'agit simplement d'un relais Nostr. Par souci de simplicité et pour vérifier le comportement du réplicateur, une instance du serveur de signalisation est hébergée par vrtmrz. Vous pouvez utiliser le serveur expérimental fourni par vrtmrz, ou tout autre serveur.\n\nAu passage, même si le serveur de signalisation ne stocke pas nos données, il peut voir les informations de connexion de certains de nos appareils. Soyez-en conscient. Soyez également prudent avec un serveur fourni par quelqu'un d'autre.", + he: " רפליקטור זה מאפשר לסנכרן את הכספת עם מכשירים אחרים באמצעות חיבור עמית-לעמית.\nניתן להשתמש בזה לסנכרון הכספת עם מכשירים אחרים ללא שירות ענן.\nרפליקטור זה מבוסס על Trystero. הוא משתמש גם בשרת אותות לביסוס חיבור בין מכשירים. שרת האותות משמש להחלפת מידע חיבור בין מכשירים. הוא אינו (ולא אמור) לדעת או לאחסן את הנתונים שלנו.\n\nשרת האותות יכול להיות מאוחסן על ידי כל אחד. זהו ממסר Nostr בלבד. לצורך פשטות ובדיקת התנהגות הרפליקטור, vrtmrz מאחסן עותק של שרת האותות. ניתן להשתמש בשרת הניסיוני של vrtmrz, או בכל שרת אחר.\n\nאגב, גם אם שרת האותות אינו מאחסן נתונים, הוא יכול לראות מידע חיבור של חלק ממכשיריך. אנא שים לב לכך. כמו כן, היה זהיר בשימוש בשרת של מישהו אחר.", + ja: "このレプリケーターは、ピアツーピア接続を使用して、Vaultを他のデバイスと同期することができます。クラウドサービスを使用せずに、他のデバイスとVaultを同期することができます。\nこのレプリケーターはTrysteroをベースにしています。デバイス間の接続を確立するためにシグナリングサーバーを使用します。シグナリングサーバーはデバイス間で接続情報を交換するために使用されます。私たちのデータを知ったり保存したりすることはありません(または、そうあるべきではありません)。\n\nシグナリングサーバーは誰でもホストできます。これは単なるNostrリレーです。簡便さとレプリケーターの動作確認のために、vrtmrzがシグナリングサーバーのインスタンスをホストしています。vrtmrzが提供する実験用サーバーを使用することも、他のサーバーを使用することもできます。\n\nなお、シグナリングサーバーが私たちのデータを保存しなくても、一部のデバイスの接続情報を見ることができます。これにご注意ください。また、他の人が提供するサーバーを使用する場合は注意してください。", + ko: "이 복제기는 피어 투 피어(P2P) 연결을 통해 다른 기기들과 볼트를 동기화할 수 있도록 합니다. 클라우드 서비스를 거치지 않고도 기기간 동기화를 구현할 수 있습니다.\n\n이 복제기는 Trystero를 기반으로 하며, 기기 간 연결을 설정하기 위해 시그널링 서버를 사용합니다. 시그널링 서버는 단순히 연결 정보를 교환하는 용도로만 사용되며, 사용자 데이터를 저장하거나 접근하지 않습니다 (또는 그래야만 합니다).\n\n시그널링 서버는 누구나 운영할 수 있으며, 이는 단순한 Nostr 릴레이입니다. 편의성과 복제기의 작동 확인을 위해 `vrtmrz`가 자체적으로 시그널링 서버 인스턴스를 운영 중입니다. 사용자는 `vrtmrz`가 제공하는 실험용 서버를 사용할 수도 있고, 별도로 자신만의 서버를 설정할 수도 있습니다.\n\n참고로, 시그널링 서버는 사용자 데이터를 저장하지 않더라도 일부 기기의 연결 정보는 볼 수 있습니다. 이 점을 유의해 주세요. 특히 타인이 운영하는 서버를 사용할 경우 주의가 필요합니다.", + ru: "Этот репликатор позволяет синхронизировать хранилище с другими устройствами с использованием однорангового соединения.", + zh: " This replicator allows us to synchronise our vault with other devices\nusing a peer-to-peer connection. We can use this to synchronise our vault with our other devices without using a cloud service.\nThis replicator is based on Trystero. It also uses a signaling server to establish a connection between devices. The signaling server is used to exchange connection information between devices. It does (or,should) not know or store any of our data.\n\nThe signaling server can be hosted by anyone. This is just a Nostr relay. For the sake of simplicity and checking the behaviour of the replicator, an instance of the signaling server is hosted by vrtmrz. You can use the experimental server provided by vrtmrz, or you can use any other server.\n\nBy the way, even if the signaling server does not store our data, it can see the connection information of some of our devices. Please be aware of this. Also, be cautious when using the server provided by someone else.", + }, + "P2P.Note.important_note": { + def: "Peer-to-Peer Replicator.", + fr: "Réplicateur pair-à-pair.", + he: "רפליקטור עמית-לעמית.", + ja: "ピアツーピアレプリケーターの実験的実装", + ko: "피어 투 피어(P2P) 복제기의 실험적 구현입니다.", + ru: "P2P репликатор.", + zh: "The Experimental Implementation of the Peer-to-Peer Replicator.", + }, + "P2P.Note.important_note_sub": { + def: "This feature is still on the bleeding edge. Please be aware that ensure your data is backed up before using this feature. And, we would be so happy if you could contribute to the development of this feature.", + fr: "Cette fonctionnalité est encore en tout début de développement. Veillez à sauvegarder vos données avant de l'utiliser. Nous serions très heureux si vous contribuiez au développement de cette fonctionnalité.", + he: "תכונה זו עדיין בשלב מתקדם. ודא שהנתונים שלך מגובים לפני השימוש. ונשמח אם תוכל לתרום לפיתוח תכונה זו.", + ja: "この機能はまだ実験段階です。期待通りに動作しない可能性があることにご注意ください。さらに、バグ、セキュリティの問題、その他の問題がある可能性があります。この機能は自己責任でご使用ください。この機能の開発にご協力ください。", + ko: "이 기능은 아직 실험 단계에 있습니다. 이 기능이 예상대로 작동하지 않을 수 있음을 알아주세요. 또한 버그, 보안 문제 및 기타 문제가 있을 수 있습니다. 이 기능을 사용할 때는 본인의 책임 하에 사용하세요. 이 기능의 개발에 기여해 주세요.", + ru: "Эта функция всё ещё на стадии разработки. Пожалуйста, убедитесь, что ваши данные зарезервированы.", + zh: "This feature is still in the experimental stage. Please be aware that this feature may not work as expected. Furthermore, it may have some bugs, security issues, and other issues. Please use this feature at your own risk. Please contribute to the development of this feature.", + }, + "P2P.Note.Summary": { + def: "What is this feature? (and some important notes, please read once)", + fr: "Qu'est-ce que cette fonctionnalité ? (et quelques notes importantes, à lire)", + he: "מהי תכונה זו? (ועוד הערות חשובות, נא לקרוא פעם אחת)", + ja: "この機能について(重要な注意事項を含む、一度お読みください)", + ko: "이 기능은 무엇인가요? (설명과 참고사항이 적혀있습니다. 한 번 읽어보세요!)", + ru: "Что это за функция? (важные замечания)", + zh: "What is this feature? (and some important notes, please read once)", + }, + "P2P.NotEnabled": { + def: "Peer-to-Peer Sync is not enabled. We cannot open a new connection.", + fr: "Synchronisation pair-à-pair n'est pas activé. Nous ne pouvons pas ouvrir de nouvelle connexion.", + he: "%{title_p2p_sync} אינו מופעל. לא ניתן לפתוח חיבור חדש.", + ja: "Peer-to-Peer Syncが有効になっていません。新しい接続を開くことができません。", + ko: "피어 투 피어(P2P) 동기화가 활성화되지 않았습니다. 새로운 연결을 열 수 없습니다.", + ru: "title_p2p_sync не включён. Мы не можем открыть новое подключение.", + zh: "Peer-to-Peer同步 is not enabled. We cannot open a new connection.", + }, + "P2P.P2PReplication": { + def: "Peer-to-Peer Replication", + fr: "Réplication Pair-à-Pair", + he: "שכפול %{P2P}", + ja: "Peer-to-Peerレプリケーション(複製)", + ko: "피어-to-피어 복제", + ru: "P2P Репликация", + zh: "Peer-to-Peer Replication", + }, + "P2P.PaneTitle": { + def: "Peer-to-Peer Sync", + fr: "Synchronisation pair-à-pair", + he: "%{long_p2p_sync}", + ja: "Peer-to-Peer Sync (試験機能)", + ko: "피어 투 피어(P2P) 동기화 (실험 기능)", + ru: "long_p2p_sync", + zh: "Peer-to-Peer同步 (实验性)", + }, + "P2P.ReplicatorInstanceMissing": { + def: "P2P Sync replicator is not found, possibly not have been configured or enabled.", + fr: "Le réplicateur Sync P2P est introuvable, peut-être non configuré ou non activé.", + he: "רפליקטור סנכרון P2P לא נמצא, ייתכן שלא הוגדר או הופעל.", + ja: "P2P同期レプリケーターが見つかりません。設定または有効化されていない可能性があります。", + ko: "P2P 동기화 복제기를 찾을 수 없습니다. 구성되지 않았거나 활성화되지 않았을 수 있습니다.", + ru: "P2P Sync репликатор не найден, возможно, не настроен.", + zh: "P2P Sync replicator is not found, possibly not have been configured or enabled.", + }, + "P2P.SeemsOffline": { + def: "Peer ${name} seems offline, skipped.", + fr: "Le pair ${name} semble hors ligne, ignoré.", + he: "העמית ${name} נראה לא מחובר, מדלג.", + ja: "ピア${name}はオフラインのようです。スキップしました。", + ko: "피어 ${name}이(가) 오프라인인 것 같습니다. 건너뜁니다.", + ru: "Устройство name офлайн, пропущено.", + zh: "Peer ${name} seems offline, skipped.", + }, + "P2P.SyncAlreadyRunning": { + def: "P2P Sync is already running.", + fr: "La Sync P2P est déjà en cours.", + he: "סנכרון P2P כבר פועל.", + ja: "P2P同期はすでに実行中です。", + ko: "P2P 동기화가 이미 실행 중입니다.", + ru: "P2P Sync уже запущен.", + zh: "P2P Sync is already running.", + }, + "P2P.SyncCompleted": { + def: "P2P Sync completed.", + fr: "Sync P2P terminée.", + he: "סנכרון P2P הושלם.", + ja: "P2P同期が完了しました。", + ko: "P2P 동기화가 완료되었습니다.", + ru: "P2P Sync завершён.", + zh: "P2P Sync completed.", + }, + "P2P.SyncStartedWith": { + def: "P2P Sync with ${name} have been started.", + fr: "La Sync P2P avec ${name} a démarré.", + he: "סנכרון P2P עם ${name} התחיל.", + ja: "${name}とのP2P同期を開始しました。", + ko: "${name}과의 P2P 동기화가 시작되었습니다.", + ru: "P2P Sync с name начат.", + zh: "P2P Sync with ${name} have been started.", + }, + "paneMaintenance.markDeviceResolvedAfterBackup": { + def: "paneMaintenance.markDeviceResolvedAfterBackup", + es: "Marcar el dispositivo como resuelto después de hacer una copia de seguridad", + ja: "バックアップ後にこのデバイスを解決済みにする", + ko: "백업 후 장치를 해결됨으로 표시", + ru: "Пометить устройство как обработанное после резервного копирования", + zh: "请在完成备份后将此设备标记为已处理。", + "zh-tw": "請在完成備份後將此裝置標記為已處理。", + }, + "paneMaintenance.remoteLockedAndDeviceNotAccepted": { + def: "paneMaintenance.remoteLockedAndDeviceNotAccepted", + es: "La base de datos remota está bloqueada y este dispositivo aún no ha sido aceptado.", + ja: "リモートデータベースはロックされており、このデバイスはまだ承認されていません。", + ko: "원격 데이터베이스가 잠겨 있으며 이 장치는 아직 승인되지 않았습니다.", + ru: "Удалённая база данных заблокирована, и это устройство ещё не одобрено.", + zh: "远端数据库已锁定,且此设备尚未被接受。", + "zh-tw": "遠端資料庫已鎖定,且此裝置尚未被接受。", + }, + "paneMaintenance.remoteLockedResolvedDevice": { + def: "paneMaintenance.remoteLockedResolvedDevice", + es: "La base de datos remota está bloqueada, pero este dispositivo ya fue aceptado.", + ja: "リモートデータベースはロックされていますが、このデバイスはすでに承認されています。", + ko: "원격 데이터베이스가 잠겨 있지만 이 장치는 이미 승인되었습니다.", + ru: "Удалённая база данных заблокирована, но это устройство уже одобрено.", + zh: "远端数据库已锁定,但此设备已被接受。", + "zh-tw": "遠端資料庫已鎖定,但此裝置已被接受。", + }, + "paneMaintenance.unlockDatabaseReady": { + def: "paneMaintenance.unlockDatabaseReady", + es: "Desbloquear la base de datos", + ja: "データベースのロックを解除", + ko: "데이터베이스 잠금 해제", + ru: "Разблокировать базу данных", + zh: "现在可以解锁数据库。", + "zh-tw": "現在可以解鎖資料庫。", + }, + Passphrase: { + def: "Passphrase", + es: "Frase de contraseña", + fr: "Phrase secrète", + he: "ביטוי סיסמה", + ja: "パスフレーズ", + ko: "패스프레이즈", + ru: "Парольная фраза", + zh: "密码", + }, + "Passphrase of sensitive configuration items": { + def: "Passphrase of sensitive configuration items", + es: "Frase para elementos sensibles", + fr: "Phrase secrète des éléments de configuration sensibles", + he: "ביטוי סיסמה לפריטי תצורה רגישים", + ja: "機密性の高い設定項目にパスフレーズを使用", + ko: "민감한 구성 항목의 패스프레이즈", + ru: "Парольная фраза для конфиденциальных настроек", + zh: "敏感配置项的密码", + }, + password: { + def: "password", + es: "contraseña", + fr: "mot de passe", + he: "סיסמה", + ja: "パスワード", + ko: "비밀번호", + ru: "пароль", + zh: "密码", + }, + Password: { + def: "Password", + es: "Contraseña", + fr: "Mot de passe", + he: "סיסמה", + ja: "パスワード", + ko: "비밀번호", + ru: "Пароль", + zh: "密码", + }, + "Paste a connection string": { + def: "Paste a connection string", + es: "Pegar cadena de conexión", + ja: "接続文字列を貼り付ける", + ko: "연결 문자열 붙여넣기", + ru: "Вставить строку подключения", + zh: "粘贴连接字符串", + "zh-tw": "貼上連線字串", + }, + "Paste the Setup URI generated from one of your active devices.": { + def: "Paste the Setup URI generated from one of your active devices.", + es: "Pegue el URI de configuración generado desde uno de sus dispositivos activos。", + ja: "稼働中の端末で生成した Setup URI を貼り付けてください。", + ko: "현재 사용 중인 장치 중 하나에서 생성한 설정 URI를 붙여 넣으세요。", + ru: "Вставьте Setup URI, созданный на одном из ваших активных устройств。", + zh: "粘贴从一台已在使用的设备上生成的 Setup URI。", + "zh-tw": "貼上從一台已在使用裝置上產生的 Setup URI。", + }, + "Path Obfuscation": { + def: "Path Obfuscation", + es: "Ofuscación de rutas", + fr: "Obfuscation des chemins", + he: "ערפול נתיב", + ja: "パスの難読化", + ko: "경로 난독화", + ru: "Обфускация путей", + zh: "路径混淆", + }, + "Patterns to match files for overwriting instead of merging": { + def: "Patterns to match files for overwriting instead of merging", + es: "Patrones para identificar archivos que se sobrescribirán en lugar de fusionarse", + ja: "マージではなく上書きするファイルを判定するパターン", + ko: "병합 대신 덮어쓸 파일을 판별하는 패턴", + ru: "Шаблоны для файлов, которые нужно перезаписывать вместо объединения", + zh: "用于匹配需覆盖而非合并文件的模式", + "zh-tw": "用於匹配需覆寫而非合併檔案的模式", + }, + "Patterns to match files for syncing": { + def: "Patterns to match files for syncing", + es: "Patrones para identificar archivos que se sincronizarán", + ja: "同期対象ファイルを判定するパターン", + ko: "동기화할 파일을 판별하는 패턴", + ru: "Шаблоны для файлов, которые нужно синхронизировать", + zh: "用于匹配同步文件的模式", + "zh-tw": "用於匹配同步檔案的模式", + }, + "Peer-to-Peer only": { + def: "Peer-to-Peer only", + es: "Solo Peer-to-Peer", + ja: "Peer-to-Peer のみ", + ko: "Peer-to-Peer 전용", + ru: "Только Peer-to-Peer", + zh: "仅 Peer-to-Peer", + "zh-tw": "僅 Peer-to-Peer", + }, + "Peer-to-Peer Synchronisation": { + def: "Peer-to-Peer Synchronisation", + es: "Sincronización entre pares", + ja: "ピアツーピア同期", + ko: "피어 투 피어 동기화", + ru: "Одноранговая синхронизация", + zh: "点对点同步", + "zh-tw": "點對點同步", + }, + "Per-file-saved customization sync": { + def: "Per-file-saved customization sync", + es: "Sincronización de personalización por archivo", + fr: "Synchronisation de personnalisation enregistrée par fichier", + he: "סנכרון התאמה אישית שנשמר לפי קובץ", + ja: "ファイルごとのカスタマイズ同期", + ko: "파일별 저장 사용자 설정 동기화", + ru: "Синхронизация настроек для каждого файла", + zh: "按文件保存的自定义同步", + }, + Perform: { + def: "Perform", + es: "Ejecutar", + ja: "実行", + ko: "실행", + ru: "Выполнить", + zh: "执行", + "zh-tw": "執行", + }, + "Perform cleanup": { + def: "Perform cleanup", + es: "Ejecutar limpieza", + ja: "クリーンアップを実行", + ko: "정리 실행", + ru: "Выполнить очистку", + zh: "执行清理", + "zh-tw": "執行清理", + }, + "Perform Garbage Collection": { + def: "Perform Garbage Collection", + es: "Ejecutar recolección de basura", + ja: "ガーベジコレクションを実行", + ko: "가비지 컬렉션 실행", + ru: "Выполнить сборку мусора", + zh: "执行垃圾回收", + "zh-tw": "執行垃圾回收", + }, + "Perform Garbage Collection to remove unused chunks and reduce database size.": { + def: "Perform Garbage Collection to remove unused chunks and reduce database size.", + es: "Ejecuta la recolección de basura para eliminar chunks no usados y reducir el tamaño de la base de datos.", + ja: "未使用のチャンクを削除し、データベースサイズを削減するためにガーベジコレクションを実行します。", + ko: "사용하지 않는 청크를 제거하고 데이터베이스 크기를 줄이기 위해 가비지 컬렉션을 실행합니다.", + ru: "Выполняет сборку мусора, чтобы удалить неиспользуемые чанки и уменьшить размер базы данных.", + zh: "执行垃圾回收以清理未使用的 chunks 并减小数据库体积。", + "zh-tw": "執行垃圾回收以移除未使用的 chunks 並減少資料庫大小。", + }, + "Periodic Sync interval": { + def: "Periodic Sync interval", + es: "Intervalo de sincronización periódica", + fr: "Intervalle de synchronisation périodique", + he: "מרווח סנכרון תקופתי", + ja: "定時同期の感覚", + ko: "주기적 동기화 간격", + ru: "Интервал периодической синхронизации", + zh: "定期同步间隔", + }, + "Pick a file to resolve conflict": { + def: "Pick a file to resolve conflict", + es: "Elegir un archivo para resolver el conflicto", + ja: "競合を解決するファイルを選択", + ko: "충돌을 해결할 파일 선택", + ru: "Выбрать файл для разрешения конфликта", + zh: "选择要解决冲突的文件", + "zh-tw": "選擇要解決衝突的檔案", + }, + "Pick a file to show history": { + def: "Pick a file to show history", + "zh-tw": "選擇要顯示歷程的檔案", + }, + "Please disable 'Read chunks online' in settings to use Garbage Collection.": { + def: "Please disable 'Read chunks online' in settings to use Garbage Collection.", + ja: "Garbage Collection を使うには、設定で「Read chunks online」を無効にしてください。", + ko: 'Garbage Collection을 사용하려면 설정에서 "Read chunks online"을 비활성화해 주세요.', + ru: "Чтобы использовать Garbage Collection, отключите в настройках «Read chunks online».", + zh: "要使用垃圾回收,请在设置中禁用“Read chunks online”。", + "zh-tw": "若要使用垃圾回收,請在設定中停用「Read chunks online」。", + }, + "Please enable 'Compute revisions for chunks' in settings to use Garbage Collection.": { + def: "Please enable 'Compute revisions for chunks' in settings to use Garbage Collection.", + ja: "Garbage Collection を使うには、設定で「Compute revisions for chunks」を有効にしてください。", + ko: 'Garbage Collection을 사용하려면 설정에서 "Compute revisions for chunks"를 활성화해 주세요.', + ru: "Чтобы использовать Garbage Collection, включите в настройках «Compute revisions for chunks».", + zh: "要使用垃圾回收,请在设置中启用“Compute revisions for chunks”。", + "zh-tw": "若要使用垃圾回收,請在設定中啟用「Compute revisions for chunks」。", + }, + "Please select 'Cancel' explicitly to cancel this operation.": { + def: "Please select 'Cancel' explicitly to cancel this operation.", + ja: "この操作を中止するには、明示的に「キャンセル」を選択してください。", + ko: '이 작업을 취소하려면 반드시 "취소"를 명시적으로 선택해 주세요.', + ru: "Чтобы отменить эту операцию, явно выберите «Отмена».", + zh: "如需取消此操作,请明确选择“取消”。", + "zh-tw": "若要取消此操作,請明確選擇「取消」。", + }, + "Please select a method to import the settings from another device.": { + def: "Please select a method to import the settings from another device.", + es: "Seleccione un método para importar la configuración desde otro dispositivo。", + ja: "別の端末から設定を取り込む方法を選択してください。", + ko: "다른 장치에서 설정을 가져올 방법을 선택해 주세요。", + ru: "Выберите способ импорта настроек с другого устройства。", + zh: "请选择一种从其他设备导入设置的方法。", + "zh-tw": "請選擇一種從其他裝置匯入設定的方法。", + }, + "Please select an option to proceed": { + def: "Please select an option to proceed", + es: "Seleccione una opción para continuar", + ja: "続行するには項目を選択してください", + ko: "계속하려면 항목을 선택해 주세요", + ru: "Чтобы продолжить, выберите вариант", + zh: "请选择一个选项以继续", + "zh-tw": "請選擇一個選項以繼續", + }, + "Please select the type of server to which you are connecting.": { + def: "Please select the type of server to which you are connecting.", + es: "Seleccione el tipo de servidor al que se está conectando。", + ja: "接続するサーバーの種類を選択してください。", + ko: "연결할 서버 유형을 선택해 주세요。", + ru: "Выберите тип сервера, к которому вы подключаетесь。", + zh: "请选择你要连接的服务器类型。", + "zh-tw": "請選擇你要連線的伺服器類型。", + }, + "Please set device name to identify this device. This name should be unique among your devices. While not configured, we cannot enable this feature.": + { + def: "Please set device name to identify this device. This name should be unique among your devices. While not configured, we cannot enable this feature.", + es: "Define un nombre para identificar este dispositivo. Debe ser único entre tus dispositivos. Mientras no esté configurado, no podremos habilitar esta función.", + ja: "このデバイスを識別するためのデバイス名を設定してください。この名前は各デバイスで一意である必要があります。設定されるまで、この機能は有効にできません。", + ko: "이 장치를 식별할 장치 이름을 설정해 주세요. 이 이름은 장치 간에 고유해야 합니다. 설정되기 전까지는 이 기능을 활성화할 수 없습니다.", + ru: "Укажите имя устройства для идентификации этого устройства. Имя должно быть уникальным среди ваших устройств. Пока оно не задано, мы не можем включить эту функцию.", + zh: "请设置设备名称以标识此设备。该名称在你的所有设备之间应保持唯一;未配置前无法启用此功能。", + }, + "Please set this device name": { + def: "Please set this device name", + es: "Define el nombre de este dispositivo", + ja: "このデバイス名を設定してください", + ko: "이 장치 이름을 설정해 주세요", + ru: "Укажите имя этого устройства", + zh: "请设置此设备名称", + "zh-tw": "請設定此裝置名稱", + }, + "Plug-in version": { + def: "Plug-in version", + ja: "プラグインバージョン", + ko: "플러그인 버전", + ru: "Версия плагина", + zh: "插件版本", + "zh-tw": "外掛版本", + }, + "Prepare the 'report' to create an issue": { + def: "Prepare the 'report' to create an issue", + fr: "Préparer le « rapport » pour créer un ticket", + he: "הכן 'דו\"ח' ליצירת Issue", + ja: "Issue 作成用の「レポート」を準備", + ko: "이슈 생성을 위한 '보고서' 준비", + ru: "Подготовить «отчёт» для создания Issue", + zh: "准备 '报告' 以创建问题单", + "zh-tw": "準備建立 Issue 用的「報告」", + }, + Presets: { + def: "Presets", + es: "Preconfiguraciones", + fr: "Préréglages", + he: "קביעות מראש", + ja: "プリセット", + ko: "프리셋", + ru: "Пресеты", + zh: "预设", + }, + "Proceed Garbage Collection": { + def: "Proceed Garbage Collection", + ja: "Garbage Collection を続行", + ko: "Garbage Collection 계속", + ru: "Продолжить Garbage Collection", + zh: "继续执行垃圾回收", + "zh-tw": "繼續執行垃圾回收", + }, + "Proceed with Setup URI": { + def: "Proceed with Setup URI", + es: "Continuar con el URI de configuración", + ja: "Setup URI で続行", + ko: "설정 URI로 계속", + ru: "Продолжить с Setup URI", + zh: "继续使用 Setup URI", + "zh-tw": "繼續使用 Setup URI", + }, + "Proceeding with Garbage Collection, ignoring missing nodes.": { + def: "Proceeding with Garbage Collection, ignoring missing nodes.", + ja: "不足しているノードを無視して Garbage Collection を続行します。", + ko: "누락된 노드를 무시하고 Garbage Collection을 계속 진행합니다.", + ru: "Продолжаем Garbage Collection, игнорируя отсутствующие узлы.", + zh: "正在继续执行垃圾回收,并忽略缺失节点。", + "zh-tw": "正在繼續執行垃圾回收,並忽略缺失節點。", + }, + "Proceeding with Garbage Collection.": { + def: "Proceeding with Garbage Collection.", + ja: "Garbage Collection を実行します。", + ko: "Garbage Collection을 진행합니다.", + ru: "Запускаем Garbage Collection.", + zh: "正在执行垃圾回收。", + "zh-tw": "正在執行垃圾回收。", + }, + "Process small files in the foreground": { + def: "Process small files in the foreground", + es: "Procesar archivos pequeños en primer plano", + fr: "Traiter les petits fichiers au premier plan", + he: "עבד קבצים קטנים בחזית", + ja: "小さいファイルを最前面で処理", + ko: "포그라운드에서 작은 파일 처리", + ru: "Обрабатывать маленькие файлы в основном потоке", + zh: "在前台处理小文件", + }, + Progress: { + def: "Progress", + ja: "進捗", + ko: "진행 상태", + ru: "Прогресс", + zh: "进度", + "zh-tw": "進度", + }, + "Property Encryption": { + def: "Property Encryption", + fr: "Chiffrement des propriétés", + he: "הצפנת מאפיינים", + ru: "Шифрование свойств", + zh: "属性加密", + }, + "PureJS fallback (Fast, W/O WebAssembly)": { + def: "PureJS fallback (Fast, W/O WebAssembly)", + es: "Alternativa PureJS (rápida, sin WebAssembly)", + ja: "PureJS フォールバック (高速、WebAssembly なし)", + ko: "PureJS 대체 방식 (빠름, WebAssembly 없음)", + ru: "Вариант PureJS (быстрый, без WebAssembly)", + zh: "PureJS 回退(快速,无 WebAssembly)", + "zh-tw": "PureJS 回退(快速,無 WebAssembly)", + }, + "Purge all download/upload cache.": { + def: "Purge all download/upload cache.", + es: "Purga toda la caché de descarga y carga.", + ja: "ダウンロード/アップロードキャッシュをすべて削除します。", + ko: "모든 다운로드/업로드 캐시를 제거합니다.", + ru: "Очистить весь кэш загрузки/выгрузки.", + zh: "清除所有下载/上传缓存。", + "zh-tw": "清除所有下載/上傳快取。", + }, + "Purge all journal counter": { + def: "Purge all journal counter", + es: "Purgar todos los contadores del diario", + ja: "すべてのジャーナルカウンターを削除", + ko: "모든 저널 카운터 삭제", + ru: "Очистить все счётчики журнала", + zh: "清除所有日志计数器", + "zh-tw": "清除所有日誌計數器", + }, + "Rebuild local and remote database with local files.": { + def: "Rebuild local and remote database with local files.", + es: "Reconstruye la base de datos local y remota usando los archivos locales.", + ja: "ローカルファイルを使ってローカルとリモートのデータベースを再構築します。", + ko: "로컬 파일로 로컬 및 원격 데이터베이스를 다시 구축합니다.", + ru: "Перестроить локальную и удалённую базы данных на основе локальных файлов.", + zh: "使用本地文件重建本地和远端数据库。", + "zh-tw": "以本機檔案重建本機與遠端資料庫。", + }, + "Rebuilding Operations (Remote Only)": { + def: "Rebuilding Operations (Remote Only)", + es: "Operaciones de reconstrucción (solo remoto)", + ja: "再構築操作 (リモートのみ)", + ko: "재구축 작업 (원격 전용)", + ru: "Операции перестроения (только удалённое хранилище)", + zh: "重建操作(仅远端)", + "zh-tw": "重建作業(僅遠端)", + }, + "Recovery and Repair": { + def: "Recovery and Repair", + "zh-tw": "修復與修補", + }, + "Recreate all": { + def: "Recreate all", + es: "Recrear todo", + ja: "すべて再作成", + ko: "모두 다시 생성", + ru: "Пересоздать всё", + zh: "全部重建", + "zh-tw": "全部重建", + }, + "Recreate missing chunks for all files": { + def: "Recreate missing chunks for all files", + es: "Recrear fragmentos faltantes para todos los archivos", + ja: "すべてのファイルの不足チャンクを再作成", + ko: "모든 파일의 누락된 청크 다시 생성", + ru: "Пересоздать отсутствующие чанки для всех файлов", + zh: "为所有文件重建缺失的 chunks", + "zh-tw": "為所有檔案重建遺失的 chunks", + }, + "RedFlag.Fetch.Method.Desc": { + def: "How do you want to fetch?\n- Create a local database once before fetching.\n **Low Traffic**, **High CPU**, **Low Risk**\n Recommended if ...\n - Files possibly inconsistent\n - Files were not so much\n- Create local file chunks before fetching.\n **Low Traffic**, **Moderate CPU**, **Low to Moderate Risk**\n Recommended if ...\n - Files probably consistent\n - You have a lot of files.\n- Fetch everything from the remote.\n **High Traffic**, **Low CPU**, **Low to Moderate Risk**\n\n>[!INFO]- Details\n> ## Create a local database once before fetching.\n> **Low Traffic**, **High CPU**, **Low Risk**\n> This option first creates a local database using existing local files before fetching data from the remote source.\n> If matching files exist both locally and remotely, only the differences between them will be transferred.\n> However, files present in both locations will initially be handled as conflicted files. They will be resolved automatically if they are not actually conflicted, but this process may take time.\n> This is generally the safest method, minimizing data loss risk.\n> ## Create local file chunks before fetching.\n> **Low Traffic**, **Moderate CPU**, **Low to Moderate Risk** (depending operation)\n> This option first creates chunks from local files for the database, then fetches data. Consequently, only chunks missing locally are transferred. However, all metadata is taken from the remote source.\n> Local files are then compared against this metadata at launch. The content considered newer will overwrite the older one (by modified time). This outcome is then synchronised back to the remote database.\n> This is generally safe if local files are genuinely the latest timestamp. However, it can cause problems if a file has a newer timestamp but older content (like the initial `welcome.md`).\n> This uses less CPU and faster than \"Create a local database once before fetching\", but it may lead to data loss if not used carefully.\n> ## Fetch everything from the remote.\n> **High Traffic**, **Low CPU**, **Low to Moderate Risk** (depending operation)\n> All things will be fetched from the remote.\n> Similar to the Create local file chunks before fetching, but all chunks are fetched from the remote source.\n> This is the most traditional way to fetch, typically consuming the most network traffic and time. It also carries a similar risk of overwriting remote files to the 'Create local file chunks before fetching' option.\n> However, it is often considered the most stable method because it is the longest-established and most straightforward approach.", + fr: "Comment voulez-vous récupérer ?\n- Créer une base locale avant de récupérer.\n **Trafic faible**, **CPU élevé**, **Risque faible**\n Recommandé si ...\n - Fichiers possiblement incohérents\n - Fichiers peu nombreux\n- Créer des fragments de fichiers locaux avant de récupérer.\n **Trafic faible**, **CPU modéré**, **Risque faible à modéré**\n Recommandé si ...\n - Fichiers probablement cohérents\n - Vous avez beaucoup de fichiers.\n- Tout récupérer depuis le distant.\n **Trafic élevé**, **CPU faible**, **Risque faible à modéré**\n\n>[!INFO]- Détails\n> ## Créer une base locale avant de récupérer.\n> **Trafic faible**, **CPU élevé**, **Risque faible**\n> Cette option crée d'abord une base locale à partir des fichiers locaux existants avant de récupérer les données depuis la source distante.\n> Si des fichiers correspondants existent à la fois localement et à distance, seules les différences entre eux seront transférées.\n> Toutefois, les fichiers présents aux deux emplacements seront initialement traités comme en conflit. Ils seront résolus automatiquement s'ils ne le sont pas réellement, mais ce processus peut prendre du temps.\n> C'est généralement la méthode la plus sûre, minimisant le risque de perte de données.\n> ## Créer des fragments de fichiers locaux avant de récupérer.\n> **Trafic faible**, **CPU modéré**, **Risque faible à modéré** (selon l'opération)\n> Cette option crée d'abord des fragments à partir des fichiers locaux pour la base, puis récupère les données. Par conséquent, seuls les fragments manquants localement sont transférés. Cependant, toutes les métadonnées sont prises de la source distante.\n> Les fichiers locaux sont ensuite comparés à ces métadonnées au lancement. Le contenu considéré comme plus récent écrasera le plus ancien (selon la date de modification). Le résultat est ensuite synchronisé vers la base distante.\n> C'est généralement sûr si les fichiers locaux ont bien l'horodatage le plus récent. Cela peut toutefois poser problème si un fichier a un horodatage plus récent mais un contenu plus ancien (comme le `welcome.md` initial).\n> Cette méthode utilise moins de CPU et est plus rapide que « Créer une base locale avant de récupérer », mais peut entraîner une perte de données si elle n'est pas utilisée avec précaution.\n> ## Tout récupérer depuis le distant.\n> **Trafic élevé**, **CPU faible**, **Risque faible à modéré** (selon l'opération)\n> Tout sera récupéré depuis le distant.\n> Similaire à Créer des fragments de fichiers locaux avant de récupérer, mais tous les fragments sont récupérés depuis la source distante.\n> C'est la façon la plus traditionnelle de récupérer, consommant généralement le plus de trafic réseau et de temps. Elle comporte également un risque similaire d'écraser les fichiers distants à l'option « Créer des fragments de fichiers locaux avant de récupérer ».\n> Elle est toutefois souvent considérée comme la méthode la plus stable car c'est la plus ancienne et la plus directe.", + he: 'כיצד ברצונך למשוך?\n- %{RedFlag.Fetch.Method.FetchSafer}.\n **תעבורה נמוכה**, **מעבד גבוה**, **סיכון נמוך**\n מומלץ אם...\n - קבצים עשויים להיות לא עקביים\n - אין הרבה קבצים\n- %{RedFlag.Fetch.Method.FetchSmoother}.\n **תעבורה נמוכה**, **מעבד בינוני**, **סיכון נמוך עד בינוני**\n מומלץ אם...\n - הקבצים ככל הנראה עקביים\n - יש לך הרבה קבצים.\n- %{RedFlag.Fetch.Method.FetchTraditional}.\n **תעבורה גבוהה**, **מעבד נמוך**, **סיכון נמוך עד בינוני**\n\n>[!INFO]- פרטים\n> ## %{RedFlag.Fetch.Method.FetchSafer}.\n> **תעבורה נמוכה**, **מעבד גבוה**, **סיכון נמוך**\n> אפשרות זו יוצרת תחילה מסד נתונים מקומי תוך שימוש בקבצים מקומיים קיימים לפני משיכת נתונים מהמקור המרוחד.\n> אם קיימים קבצים תואמים גם מקומית וגם מרחוק, רק ההפרשים ביניהם יועברו.\n> עם זאת, קבצים הקיימים בשני המקומות יטופלו תחילה כקבצים מתנגשים. הם ייפתרו אוטומטית אם לא מתנגשים בפועל, אך תהליך זה עשוי לקחת זמן.\n> זוהי בדרך כלל השיטה הבטוחה ביותר, ממזערת סיכון לאובדן נתונים.\n> ## %{RedFlag.Fetch.Method.FetchSmoother}.\n> **תעבורה נמוכה**, **מעבד בינוני**, **סיכון נמוך עד בינוני** (תלוי בפעולה)\n> אפשרות זו יוצרת תחילה נתחים מקבצים מקומיים למסד הנתונים, ואז מושכת נתונים. כתוצאה מכך, רק נתחים חסרים מקומית מועברים. עם זאת, כל המטה-נתונים נלקחים מהמקור המרוחד.\n> קבצים מקומיים נבדקים לאחר מכן מול מטה-נתונים אלה בעת ההפעלה. התוכן שנחשב חדש יותר ידרוס את הישן יותר (לפי זמן שינוי).\n> בדרך כלל בטוח אם הקבצים המקומיים הם אכן חדשים ביותר. עם זאת, עלול לגרום לבעיות אם לקובץ יש חותמת זמן חדשה יותר אך תוכן ישן יותר (כמו `welcome.md` ראשוני).\n> שיטה זו משתמשת בפחות מעבד ומהירה יותר מ-"%{RedFlag.Fetch.Method.FetchSafer}", אך עלולה להוביל לאובדן נתונים אם לא משתמשים בה בזהירות.\n> ## %{RedFlag.Fetch.Method.FetchTraditional}.\n> **תעבורה גבוהה**, **מעבד נמוך**, **סיכון נמוך עד בינוני** (תלוי בפעולה)\n> הכל יימשך מהשרת המרוחד.\n> דומה ל-%{RedFlag.Fetch.Method.FetchSmoother}, אך כל הנתחים נמשכים מהמקור המרוחד.\n> זוהי הדרך המסורתית ביותר למשיכה, צורכת בדרך כלל את רוב תעבורת הרשת והזמן.\n> עם זאת, היא נחשבת לעתים קרובות לשיטה היציבה ביותר מכיוון שהיא הוותיקה והישירה ביותר.', + ja: "どのようにフェッチしますか?\n- フェッチ前にローカルデータベースを作成\n **低トラフィック**, **高CPU負荷**, **低リスク**\n 推奨条件...\n - ファイルの整合性に不安がある\n - ファイル数がそれほど多くない\n- フェッチ前にローカルファイルチャンクを作成\n **低トラフィック**, **中程CPU負荷**, **低~中リスク**\n 推奨条件...\n - ファイルがおそらく整合している\n - ファイル数が多い\n- リモートからすべてをフェッチ\n **高トラフィック**, **低CPU負荷**, **低~中リスク**\n\n>[!INFO]- 詳細\n> ## フェッチ前にローカルデータベースを作成\n> **低トラフィック**, **高CPU負荷**, **低リスク**\n> このオプションは、リモートからデータをフェッチする前に、既存のローカルファイルを使用してローカルデータベースを作成します。\n> ローカルとリモートの両方に一致するファイルがある場合、差分のみが転送されます。\n> ただし、両方の場所に存在するファイルは最初は競合ファイルとして処理されます。実際に競合していなければ自動的に解決されますが、この処理には時間がかかる場合があります。\n> これは一般的に最も安全な方法で、データ損失のリスクを最小限に抑えます。\n> ## フェッチ前にローカルファイルチャンクを作成\n> **低トラフィック**, **中程CPU負荷**, **低~中リスク**(操作による)\n> このオプションは、最初にローカルファイルからデータベース用のチャンクを作成し、その後データをフェッチします。そのため、ローカルにないチャンクのみが転送されます。ただし、すべてのメタデータはリモートから取得されます。\n> ローカルファイルは起動時にこのメタデータと比較されます。新しいと判断されたコンテンツ(更新日時による)が古いものを上書きします。この結果はリモートデータベースに同期されます。\n> ローカルファイルが本当に最新のタイムスタンプであれば一般的に安全です。ただし、ファイルのタイムスタンプが新しくてもコンテンツが古い場合(初期の`welcome.md`など)は問題が発生する可能性があります。\n> これは\"フェッチ前にローカルデータベースを作成\"よりCPU使用量が少なく高速ですが、注意しないとデータ損失につながる可能性があります。\n> ## リモートからすべてをフェッチ\n> **高トラフィック**, **低CPU負荷**, **低~中リスク**(操作による)\n> すべてのデータがリモートからフェッチされます。\n> フェッチ前にローカルファイルチャンクを作成と似ていますが、すべてのチャンクがリモートからフェッチされます。\n> これは最も従来のフェッチ方法で、通常最もネットワークトラフィックと時間を消費します。'フェッチ前にローカルファイルチャンクを作成'オプションと同様のリモートファイル上書きのリスクがあります。\n> ただし、最も歴史があり簡単なアプローチであるため、最も安定した方法と見なされることが多いです。", + ko: "어떻게 가져오시겠습니까?\n- 가져오기 전에 로컬 데이터베이스를 한 번 생성. (권장)\n **낮은 트래픽**, **높은 CPU**, **낮은 위험**\n- 가져오기 전에 로컬 파일 청크 생성.\n **낮은 트래픽**, **보통 CPU**, **낮음에서 보통 위험**\n- 원격에서 모든 것 가져오기.\n **높은 트래픽**, **낮은 CPU**, **낮음에서 보통 위험**\n\n>[!INFO]- 세부 사항\n> ## 가져오기 전에 로컬 데이터베이스를 한 번 생성. (권장)\n> **낮은 트래픽**, **높은 CPU**, **낮은 위험**\n> 이 옵션은 원격 소스에서 데이터를 가져오기 전에 기존 로컬 파일을 사용하여 로컬 데이터베이스를 먼저 생성합니다.\n> 로컬과 원격 모두에 일치하는 파일이 있으면 둘 사이의 차이점만 전송됩니다.\n> 하지만 두 위치 모두에 있는 파일은 초기에 충돌 파일로 처리됩니다. 실제로 충돌하지 않는다면 자동으로 해결되지만 이 과정은 시간이 걸릴 수 있습니다.\n> 이는 일반적으로 가장 안전한 방법으로 데이터 손실 위험을 최소화합니다.\n> ## 가져오기 전에 로컬 파일 청크 생성.\n> **낮은 트래픽**, **보통 CPU**, **낮음에서 보통 위험** (작업에 따라)\n> 이 옵션은 먼저 로컬 파일에서 데이터베이스용 청크를 생성한 다음 데이터를 가져옵니다. 따라서 로컬에 없는 청크만 전송됩니다. 하지만 모든 메타데이터는 원격 소스에서 가져옵니다.\n> 그런 다음 로컬 파일이 시작 시 이 메타데이터와 비교됩니다. 더 새로운 것으로 간주되는 콘텐츠가 오래된 것을 덮어씁니다(수정 시간 기준). 이 결과는 원격 데이터베이스에 다시 동기화됩니다.\n> 로컬 파일이 실제로 최신 타임스탬프라면 일반적으로 안전합니다. 하지만 파일이 더 새로운 타임스탬프를 가지고 있지만 더 오래된 콘텐츠를 가지고 있다면(초기 `welcome.md`처럼) 문제가 발생할 수 있습니다.\n> 이는 \"가져오기 전에 로컬 데이터베이스를 한 번 생성\"보다 CPU를 덜 사용하고 더 빠르지만 주의 깊게 사용하지 않으면 데이터 손실로 이어질 수 있습니다.\n> ## 원격에서 모든 것 가져오기.\n> **높은 트래픽**, **낮은 CPU**, **낮음에서 보통 위험** (작업에 따라)\n> 모든 것이 원격에서 가져와집니다.\n> 가져오기 전에 로컬 파일 청크 생성와 유사하지만 모든 청크가 원격 소스에서 가져와집니다.\n> 이는 가장 전통적인 가져오기 방법으로 일반적으로 가장 많은 네트워크 트래픽과 시간을 소모합니다. 또한 '가져오기 전에 로컬 파일 청크 생성' 옵션과 유사하게 원격 파일을 덮어쓸 위험이 있습니다.\n> 하지만 가장 오래되고 가장 직접적인 접근 방식이기 때문에 종종 가장 안정적인 방법으로 간주됩니다.", + ru: "Как вы хотите загрузить?", + zh: "How do you want to fetch?\n- Create a local database once before fetching.\n **Low Traffic**, **High CPU**, **Low Risk**\n Recommended if ...\n - Files possibly inconsistent\n - Files were not so much\n- Create local file chunks before fetching.\n **Low Traffic**, **Moderate CPU**, **Low to Moderate Risk**\n Recommended if ...\n - Files probably consistent\n - You have a lot of files.\n- Fetch everything from the remote.\n **High Traffic**, **Low CPU**, **Low to Moderate Risk**\n\n>[!INFO]- Details\n> ## Create a local database once before fetching.\n> **Low Traffic**, **High CPU**, **Low Risk**\n> This option first creates a local database using existing local files before fetching data from the remote source.\n> If matching files exist both locally and remotely, only the differences between them will be transferred.\n> However, files present in both locations will initially be handled as conflicted files. They will be resolved automatically if they are not actually conflicted, but this process may take time.\n> This is generally the safest method, minimizing data loss risk.\n> ## Create local file chunks before fetching.\n> **Low Traffic**, **Moderate CPU**, **Low to Moderate Risk** (depending operation)\n> This option first creates chunks from local files for the database, then fetches data. Consequently, only chunks missing locally are transferred. However, all metadata is taken from the remote source.\n> Local files are then compared against this metadata at launch. The content considered newer will overwrite the older one (by modified time). This outcome is then synchronised back to the remote database.\n> This is generally safe if local files are genuinely the latest timestamp. However, it can cause problems if a file has a newer timestamp but older content (like the initial `welcome.md`).\n> This uses less CPU and faster than \"Create a local database once before fetching\", but it may lead to data loss if not used carefully.\n> ## Fetch everything from the remote.\n> **High Traffic**, **Low CPU**, **Low to Moderate Risk** (depending operation)\n> All things will be fetched from the remote.\n> Similar to the Create local file chunks before fetching, but all chunks are fetched from the remote source.\n> This is the most traditional way to fetch, typically consuming the most network traffic and time. It also carries a similar risk of overwriting remote files to the 'Create local file chunks before fetching' option.\n> However, it is often considered the most stable method because it is the longest-established and most straightforward approach.", + }, + "RedFlag.Fetch.Method.FetchSafer": { + def: "Create a local database once before fetching", + fr: "Créer une base locale avant de récupérer", + he: "צור מסד נתונים מקומי לפני המשיכה", + ja: "フェッチ前にローカルデータベースを作成", + ko: "가져오기 전에 로컬 데이터베이스를 한 번 생성", + ru: "Создать локальную базу данных перед загрузкой", + zh: "Create a local database once before fetching", + }, + "RedFlag.Fetch.Method.FetchSmoother": { + def: "Create local file chunks before fetching", + fr: "Créer des fragments de fichiers locaux avant de récupérer", + he: "צור נתחי קבצים מקומיים לפני המשיכה", + ja: "フェッチ前にローカルファイルチャンクを作成", + ko: "가져오기 전에 로컬 파일 청크 생성", + ru: "Создать локальные чанки перед загрузкой", + zh: "Create local file chunks before fetching", + }, + "RedFlag.Fetch.Method.FetchTraditional": { + def: "Fetch everything from the remote", + fr: "Tout récupérer depuis le distant", + he: "משוך הכל מהשרת המרוחד", + ja: "リモートからすべてをフェッチ", + ko: "원격에서 모든 것 가져오기", + ru: "Загрузить всё с удалённого", + zh: "Fetch everything from the remote", + }, + "RedFlag.Fetch.Method.Title": { + def: "How do you want to fetch?", + fr: "Comment voulez-vous récupérer ?", + he: "כיצד ברצונך למשוך?", + ja: "どのようにフェッチしますか?", + ko: "어떻게 가져오시겠습니까?", + ru: "Как вы хотите загрузить?", + zh: "How do you want to fetch?", + }, + "RedFlag.FetchRemoteConfig.Buttons.Cancel": { + def: "No, use local settings", + fr: "Non, utiliser les paramètres locaux", + he: "לא, השתמש בהגדרות המקומיות", + ja: "いいえ、ローカル設定を使用", + ru: "Нет, использовать локальные настройки", + zh: "No, use local settings", + }, + "RedFlag.FetchRemoteConfig.Buttons.Fetch": { + def: "Yes, fetch and apply remote settings", + fr: "Oui, récupérer et appliquer les paramètres distants", + he: "כן, משוך והחל הגדרות מרוחקות", + ja: "はい、リモート設定を取得して適用", + ru: "Да, загрузить и применить удалённые настройки", + zh: "Yes, fetch and apply remote settings", + }, + "RedFlag.FetchRemoteConfig.Message": { + def: "Do you want to fetch and apply remotely stored preference settings to the device?", + fr: "Voulez-vous récupérer et appliquer les préférences stockées à distance sur cet appareil ?", + he: "האם ברצונך למשוך ולהחיל הגדרות שמורות מרחוק על מכשיר זה?", + ja: "リモートに保存された設定を取得して、このデバイスに適用しますか?", + ru: "Вы хотите загрузить и применить удалённые настройки?", + zh: "Do you want to fetch and apply remotely stored preference settings to the device?", + }, + "RedFlag.FetchRemoteConfig.Title": { + def: "Fetch Remote Configuration", + fr: "Récupérer la configuration distante", + he: "משוך תצורה מרוחקת", + ja: "リモート設定の取得", + ru: "Загрузить удалённую конфигурацию", + zh: "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.": + { + def: "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.", + ja: "最新版以外のすべてのリビジョンを破棄して、使用容量を削減します。実行には、リモートサーバーとローカルクライアントの両方に同程度の空き容量が必要です。", + ko: "최신 버전이 아닌 모든 리비전을 제거하여 저장 공간을 줄입니다. 이 작업을 수행하려면 원격 서버와 로컬 클라이언트에 동일한 양의 여유 공간이 필요합니다.", + zh: "通过丢弃所有非最新版本来减少存储空间。这需要远程服务器和本地客户端具备相同数量的可用空间。", + "zh-tw": + "透過捨棄所有非最新版本來減少儲存空間占用。執行此操作時,遠端伺服器與本機用戶端都需要具備相同數量的可用空間。", + }, + "Reducing the frequency with which on-disk changes are reflected into the DB": { + def: "Reducing the frequency with which on-disk changes are reflected into the DB", + es: "Reducir frecuencia de actualizaciones de disco a BD", + fr: "Réduire la fréquence à laquelle les modifications sur disque sont reflétées dans la base", + he: "הפחת את תדירות השתקפות שינויים בדיסק למסד הנתונים", + ja: "ローカルでの変更がデータベースに反映される頻度を下げる(所定の回数まとめて同期する、逐一反映しない)", + ko: "디스크 변경 사항이 데이터베이스에 반영되는 빈도를 줄입니다", + ru: "Уменьшение частоты отражения изменений с диска в БД", + zh: "降低将磁盘上的更改反映到数据库中的频率", + }, + Region: { + def: "Region", + es: "Región", + fr: "Région", + he: "אזור", + ja: "リージョン", + ko: "지역", + ru: "Регион", + zh: "区域", + }, + Remediation: { + def: "Remediation", + es: "Remediación", + ja: "是正", + ko: "복구 조치", + ru: "Исправление", + zh: "修复设置", + "zh-tw": "修復設定", + }, + "Remediation Setting Changed": { + def: "Remediation Setting Changed", + es: "La configuración de remediación cambió", + ja: "是正設定が変更されました", + ko: "복구 설정이 변경됨", + ru: "Настройки исправления изменены", + zh: "修复设置已更改", + "zh-tw": "修復設定已變更", + }, + "Remote Database Tweak (In sunset)": { + def: "Remote Database Tweak (In sunset)", + es: "Ajustes de base de datos remota (en retirada)", + ja: "リモートデータベースの調整 (廃止予定)", + ko: "원격 데이터베이스 조정 (폐기 예정)", + ru: "Настройки удалённой базы данных (устаревает)", + zh: "远端数据库调优(逐步淘汰)", + "zh-tw": "遠端資料庫調校(即將淘汰)", + }, + "Remote Databases": { + def: "Remote Databases", + es: "Bases de datos remotas", + ja: "リモートデータベース", + ko: "원격 데이터베이스", + ru: "Удалённые базы данных", + zh: "远端数据库", + "zh-tw": "遠端資料庫", + }, + "Remote name": { + def: "Remote name", + es: "Nombre del remoto", + ja: "リモート名", + ko: "원격 이름", + ru: "Имя удалённого хранилища", + zh: "远端名称", + "zh-tw": "遠端名稱", + }, + "Remote server type": { + def: "Remote server type", + es: "Tipo de servidor remoto", + fr: "Type de serveur distant", + he: "סוג שרת מרוחד", + ja: "リモートの種別", + ko: "원격 서버 유형", + ru: "Тип удалённого сервера", + zh: "远程服务器类型", + }, + "Remote Type": { + def: "Remote Type", + es: "Tipo de remoto", + fr: "Type de distant", + he: "סוג מרוחד", + ja: "同期方式", + ko: "원격 유형", + ru: "Удалённый тип", + zh: "远程类型", + }, + Rename: { + def: "Rename", + es: "Renombrar", + ja: "名前を変更", + ko: "이름 바꾸기", + ru: "Переименовать", + zh: "重命名", + "zh-tw": "重新命名", + }, + "Replicator.Dialogue.Locked.Action.Dismiss": { + def: "Cancel for reconfirmation", + fr: "Annuler pour reconfirmer", + he: "ביטול לאישור מחדש", + ja: "再確認のためキャンセル", + ko: "재확인을 위해 취소", + ru: "Отмена для подтверждения", + zh: "Cancel for reconfirmation", + }, + "Replicator.Dialogue.Locked.Action.Fetch": { + def: "Reset Synchronisation on This Device", + fr: "Réinitialiser la synchronisation sur cet appareil", + he: "אפס סנכרון במכשיר זה", + ja: "このデバイスの同期をリセット", + ko: "원격 데이터베이스에서 모든 것을 다시 가져오기", + ru: "Сбросить синхронизацию на этом устройстве", + zh: "Reset Synchronisation on This Device", + }, + "Replicator.Dialogue.Locked.Action.Unlock": { + def: "Unlock the remote database", + fr: "Déverrouiller la base distante", + he: "בטל נעילת מסד הנתונים המרוחד", + ja: "リモートデータベースのロックを解除", + ko: "원격 데이터베이스 잠금 해제", + ru: "Разблокировать удалённую базу данных", + zh: "Unlock the remote database", + }, + "Replicator.Dialogue.Locked.Message": { + def: "Remote database is locked. This is due to a rebuild on one of the terminals.\nThe device is therefore asked to withhold the connection to avoid database corruption.\n\nThere are three options that we can do:\n\n- Reset Synchronisation on This Device\n The most preferred and reliable way. This will dispose the local database once, and reset all synchronisation information from the remote database again, In most case, we can perform this safely. However, it takes some time and should be done in stable network.\n- Unlock the remote database\n This method can only be used if we are already reliably synchronised by other replication methods. This does not simply mean that we have the same files. If you are not sure, you should avoid it.\n- Cancel for reconfirmation\n This will cancel the operation. And we will asked again on next request.\n", + fr: "La base distante est verrouillée. Ceci est dû à une reconstruction sur l'un des terminaux.\nL'appareil est donc prié de suspendre la connexion pour éviter la corruption de la base.\n\nTrois options sont possibles :\n\n- Réinitialiser la synchronisation sur cet appareil\n La méthode la plus recommandée et fiable. Elle supprime la base locale puis réinitialise toutes les informations de synchronisation depuis la base distante. Dans la plupart des cas, c'est sûr. Cela prend cependant du temps et devrait se faire sur un réseau stable.\n- Déverrouiller la base distante\n Cette méthode ne peut être utilisée que si nous sommes déjà synchronisés de manière fiable par d'autres méthodes de réplication. Cela ne signifie pas simplement que nous avons les mêmes fichiers. Dans le doute, évitez.\n- Annuler pour reconfirmer\n Ceci annule l'opération. Vous serez à nouveau interrogé à la prochaine requête.\n", + he: "מסד הנתונים המרוחד נעול. הסיבה היא בנייה מחדש באחד הטרמינלים.\nלכן המכשיר מתבקש להמנע מחיבור כדי למנוע פגיעה במסד הנתונים.\n\nקיימות שלוש אפשרויות:\n\n- %{Replicator.Dialogue.Locked.Action.Fetch}\n הדרך המועדפת והאמינה ביותר. פעולה זו תמחק את מסד הנתונים המקומי פעם,\n ותאפס את כל מידע הסנכרון ממסד הנתונים המרוחד מחדש. ברוב המקרים ניתן\n לעשות זאת בבטחה. עם זאת, דורשת זמן ויש לבצע ברשת יציבה.\n- %{Replicator.Dialogue.Locked.Action.Unlock}\n ניתן להשתמש בשיטה זו רק אם כבר מסונכרנים באופן אמין בשיטות שכפול\n אחרות. פשוט לא מספיק שיש אותם קבצים. אם אינך בטוח, הימנע מכך.\n- %{Replicator.Dialogue.Locked.Action.Dismiss}\n פעולה זו תבטל את הפעולה. תתבקש שוב בבקשה הבאה.\n", + ja: "リモートデータベースがロックされています。これはいずれかの端末での再構築が原因です。\nデータベースの破損を避けるため、このデバイスは接続を保留するよう求められています。\n\n3つのオプションがあります:\n\n- このデバイスの同期をリセット\n 最も推奨される信頼性の高い方法です。ローカルデータベースを一度破棄し、リモートデータベースからすべての同期情報を再取得します。ほとんどの場合、これは安全に実行できます。ただし、時間がかかり、安定したネットワークで実行する必要があります。\n- リモートデータベースのロックを解除\n この方法は、他のレプリケーション(複製)方法ですでに確実に同期されている場合のみ使用できます。単に同じファイルがあるという意味ではありません。確信がない場合は避けてください。\n- 再確認のためキャンセル\n 操作をキャンセルします。次回のリクエスト時に再度確認されます。\n", + ko: "원격 데이터베이스가 잠겨 있습니다. 이는 일부 터미널에서 데이터베이스를 재구축했기 때문입니다.\n따라서 현재 기기는 데이터베이스 손상을 방지하기 위해 연결을 일시적으로 보류해야 합니다.\n\n선택할 수 있는 세 가지 방법이 있습니다:\n\n- 원격 데이터베이스에서 모든 것을 다시 가져오기\n 가장 권장되고 신뢰할 수 있는 방법입니다. 로컬 데이터베이스를 초기화한 뒤, 원격 데이터베이스의 전체 데이터를 다시 가져옵니다. 대부분의 경우 안전하게 수행할 수 있으나, 시간이 다소 걸리며 안정적인 네트워크 환경에서 진행해야 합니다.\n- 원격 데이터베이스 잠금 해제\n 이 방법은 다른 동기화 방식으로 이미 완전하고 안정적으로 동기화된 경우에만 사용할 수 있습니다. 단순히 파일이 같다는 의미가 아니므로, 확신이 없다면 사용을 피하는 것이 좋습니다.\n- 재확인을 위해 취소\n 이번 작업을 취소하고, 다음 요청 시 다시 안내받습니다.\n", + ru: "Удалённая база данных заблокирована. Это связано с перестроением на одном из устройств.", + zh: "Remote database is locked. This is due to a rebuild on one of the terminals.\nThe device is therefore asked to withhold the connection to avoid database corruption.\n\nThere are three options that we can do:\n\n- Reset Synchronisation on This Device\n The most preferred and reliable way. This will dispose the local database once, and fetch all from the remote database again, In most case, we can perform this safely. However, it takes some time and should be done in stable network.\n- Unlock the remote database\n This method can only be used if we are already reliably synchronised by other replication methods. This does not simply mean that we have the same files. If you are not sure, you should avoid it.\n- Cancel for reconfirmation\n This will cancel the operation. And we will asked again on next request.\n", + }, + "Replicator.Dialogue.Locked.Message.Fetch": { + def: "Fetch all has been scheduled. Plug-in will be restarted to perform it.", + fr: "Tout récupérer a été planifié. Le plug-in sera redémarré pour l'exécuter.", + he: "משיכה מלאה תוזמנה. הפלאגין יופעל מחדש לביצועה.", + ja: "全フェッチがスケジュールされました。プラグインは実行のために再起動されます。", + ko: "모든 것 가져오기가 예약되었습니다. 이를 수행하기 위해 플러그인이 재시작됩니다.", + ru: "Загрузка всего запланирована. Плагин будет перезапущен.", + zh: "Fetch all has been scheduled. Plug-in will be restarted to perform it.", + }, + "Replicator.Dialogue.Locked.Message.Unlocked": { + def: "The remote database has been unlocked. Please retry the operation.", + fr: "La base distante a été déverrouillée. Veuillez réessayer l'opération.", + he: "מסד הנתונים המרוחד בוטל נעילתו. אנא נסה שוב את הפעולה.", + ja: "リモートデータベースのロックが解除されました。操作を再試行してください。", + ko: "원격 데이터베이스 잠금이 해제되었습니다. 작업을 다시 시도해 주세요.", + ru: "Удалённая база данных разблокирована. Повторите операцию.", + zh: "The remote database has been unlocked. Please retry the operation.", + }, + "Replicator.Dialogue.Locked.Title": { + def: "Locked", + fr: "Verrouillée", + he: "נעול", + ja: "ロック中", + ko: "잠김", + ru: "Заблокировано", + zh: "Locked", + }, + "Replicator.Message.Cleaned": { + def: "Database cleaning up is in process. replication has been cancelled", + fr: "Nettoyage de la base en cours. La réplication a été annulée", + he: "ניקוי מסד הנתונים בתהליך. השכפול בוטל", + ja: "データベースのクリーナップ中です。レプリケーション(複製)はキャンセルされました。", + ko: "데이터베이스 정리가 진행 중입니다. 복제가 취소되었습니다", + ru: "Очистка базы данных в процессе. Репликация отменена", + zh: "Database cleaning up is in process. replication has been cancelled", + }, + "Replicator.Message.InitialiseFatalError": { + def: "No replicator is available, this is the fatal error.", + fr: "Aucun réplicateur disponible, il s'agit d'une erreur fatale.", + he: "אין רפליקטור זמין, זוהי שגיאה קריטית.", + ja: "レプリケーターが利用できません。これは致命的なエラーです。", + ko: "사용 가능한 복제기가 없습니다. 치명적인 오류입니다.", + ru: "Репликатор недоступен, это фатальная ошибка.", + zh: "No replicator is available, this is the fatal error.", + }, + "Replicator.Message.Pending": { + def: "Some file events are pending. Replication has been cancelled.", + fr: "Des événements de fichier sont en attente. La réplication a été annulée.", + he: "חלק מאירועי הקבצים ממתינים. השכפול בוטל.", + ja: "ファイルイベントが保留中です。レプリケーション(複製)はキャンセルされました。", + ko: "일부 파일 이벤트가 대기 중입니다. 복제가 취소되었습니다.", + ru: "Некоторые события файлов ожидают. Репликация отменена.", + zh: "Some file events are pending. Replication has been cancelled.", + }, + "Replicator.Message.SomeModuleFailed": { + def: "Replication has been cancelled by some module failure", + fr: "La réplication a été annulée suite à l'échec d'un module", + he: "השכפול בוטל בשל כשל במודול", + ja: "一部のモジュールの失敗によりレプリケーション(複製)がキャンセルされました。", + ko: "일부 모듈 실패로 복제가 취소되었습니다", + ru: "Репликация отменена из-за сбоя модуля", + zh: "Replication has been cancelled by some module failure", + }, + "Replicator.Message.VersionUpFlash": { + def: "An update has been detected. Please open the Settings dialogue and check the Change Log. Replication has been cancelled.", + fr: "Une mise à jour a été détectée. Veuillez ouvrir la boîte de dialogue des paramètres et consulter le journal des modifications. La réplication a été annulée.", + he: "זוהה עדכון. אנא פתח את דיאלוג ההגדרות ובדוק את יומן השינויים. השכפול בוטל.", + ja: "更新が検出されました。設定ダイアログを開いて変更ログを確認してください。レプリケーション(複製)はキャンセルされました。", + ko: "설정을 열고 메시지를 확인해 주세요. 복제가 취소되었습니다.", + ru: "Обновление обнаружено. Откройте настройки и проверьте историю изменений.", + zh: "An update has been detected. Please open the Settings dialogue and check the Change Log. Replication has been cancelled.", + }, + "Requires restart of Obsidian": { + def: "Requires restart of Obsidian", + es: "Requiere reiniciar Obsidian", + fr: "Nécessite un redémarrage d'Obsidian", + he: "דורש הפעלה מחדש של Obsidian", + ja: "Obsidianの再起動が必要です", + ko: "Obsidian 재시작 필요", + ru: "Требуется перезапуск Obsidian", + zh: "需要重启 Obsidian", + }, + "Requires restart of Obsidian.": { + def: "Requires restart of Obsidian.", + es: "Requiere reiniciar Obsidian", + fr: "Nécessite un redémarrage d'Obsidian.", + he: "דורש הפעלה מחדש של Obsidian.", + ja: "Obsidianの再起動が必要です。", + ko: "Obsidian 재시작이 필요합니다.", + ru: "Требуется перезапуск Obsidian.", + zh: "需要重启 Obsidian ", + }, + "Rerun Onboarding Wizard": { + def: "Rerun Onboarding Wizard", + fr: "Relancer l'assistant d'intégration", + he: "הרץ שוב את אשף ההכוונה", + ja: "オンボーディングウィザードを再実行", + ko: "온보딩 마법사 다시 실행", + ru: "Перезапустить мастер настройки", + zh: "重新运行引导向导", + "zh-tw": "重新執行導覽精靈", + }, + "Rerun the onboarding wizard to set up Self-hosted LiveSync again.": { + def: "Rerun the onboarding wizard to set up Self-hosted LiveSync again.", + fr: "Relancer l'assistant d'intégration pour reconfigurer Self-hosted LiveSync.", + he: "הרץ שוב את אשף ההכוונה להגדרת Self-hosted LiveSync מחדש.", + ja: "オンボーディングウィザードを再実行して、Self-hosted LiveSync をもう一度設定します。", + ko: "온보딩 마법사를 다시 실행하여 Self-hosted LiveSync를 다시 설정합니다.", + ru: "Перезапустить мастер настройки для повторной настройки Self-hosted LiveSync.", + zh: "重新运行引导向导以再次设置 Self-hosted LiveSync。", + "zh-tw": "重新執行導覽精靈以再次設定 Self-hosted LiveSync。", + }, + "Rerun Wizard": { + def: "Rerun Wizard", + fr: "Relancer l'assistant", + he: "הרץ שוב את האשף", + ja: "ウィザードを再実行", + ko: "마법사 다시 실행", + ru: "Перезапустить мастер", + zh: "重新运行向导", + "zh-tw": "重新執行精靈", + }, + Resend: { + def: "Resend", + es: "Reenviar", + ja: "再送信", + ko: "다시 보내기", + ru: "Повторно отправить", + zh: "重新发送", + "zh-tw": "重新傳送", + }, + "Resend all chunks to the remote.": { + def: "Resend all chunks to the remote.", + es: "Reenvía todos los chunks al remoto.", + ja: "すべてのチャンクをリモートへ再送信します。", + ko: "모든 청크를 원격으로 다시 보냅니다.", + ru: "Повторно отправить все чанки в удалённое хранилище.", + zh: "将所有 chunks 重新发送到远端。", + "zh-tw": "將所有 chunks 重新傳送到遠端。", + }, + Reset: { + def: "Reset", + es: "Restablecer", + ja: "リセット", + ko: "재설정", + ru: "Сброс", + zh: "重置", + "zh-tw": "重設", + }, + "Reset all": { + def: "Reset all", + es: "Restablecer todo", + ja: "すべてリセット", + ko: "모두 재설정", + ru: "Сбросить всё", + zh: "全部重置", + "zh-tw": "全部重設", + }, + "Reset all journal counter": { + def: "Reset all journal counter", + es: "Restablecer todos los contadores del diario", + ja: "すべてのジャーナルカウンターをリセット", + ko: "모든 저널 카운터 재설정", + ru: "Сбросить все счётчики журнала", + zh: "重置所有日志计数器", + "zh-tw": "重設所有日誌計數器", + }, + "Reset journal received history": { + def: "Reset journal received history", + es: "Restablecer historial de recepción del diario", + ja: "ジャーナル受信履歴をリセット", + ko: "저널 수신 기록 재설정", + ru: "Сбросить историю полученных записей журнала", + zh: "重置日志接收历史", + "zh-tw": "重設日誌接收歷史", + }, + "Reset journal sent history": { + def: "Reset journal sent history", + es: "Restablecer historial de envío del diario", + ja: "ジャーナル送信履歴をリセット", + ko: "저널 송신 기록 재설정", + ru: "Сбросить историю отправленных записей журнала", + zh: "重置日志发送历史", + "zh-tw": "重設日誌傳送歷史", + }, + "Reset notification threshold and check the remote database usage": { + def: "Reset notification threshold and check the remote database usage", + fr: "Réinitialiser le seuil de notification et vérifier l'utilisation de la base distante", + he: "אפס סף התראה ובדוק שימוש במסד הנתונים המרוחד", + ja: "通知しきい値をリセットしてリモートデータベース使用量を確認", + ko: "알림 임계값을 초기화하고 원격 데이터베이스 사용량 확인", + ru: "Сбросить порог уведомления и проверить использование удалённой базы данных", + zh: "重置通知阈值并检查远程数据库使用情况", + "zh-tw": "重設通知閾值並檢查遠端資料庫使用情況", + }, + "Reset received": { + def: "Reset received", + es: "Restablecer recepción", + ja: "受信履歴をリセット", + ko: "수신 기록 재설정", + ru: "Сбросить полученные", + zh: "重置接收记录", + "zh-tw": "重設接收紀錄", + }, + "Reset sent history": { + def: "Reset sent history", + es: "Restablecer historial de envío", + ja: "送信履歴をリセット", + ko: "송신 기록 재설정", + ru: "Сбросить историю отправки", + zh: "重置发送历史", + "zh-tw": "重設傳送歷史", + }, + "Reset Synchronisation information": { + def: "Reset Synchronisation information", + es: "Restablecer información de sincronización", + ja: "同期情報をリセット", + ko: "동기화 정보 재설정", + ru: "Сбросить информацию о синхронизации", + zh: "重置同步信息", + "zh-tw": "重設同步資訊", + }, + "Reset Synchronisation on This Device": { + def: "Reset Synchronisation on This Device", + es: "Restablecer sincronización en este dispositivo", + ja: "このデバイスの同期状態をリセット", + ko: "이 장치의 동기화 상태 재설정", + ru: "Сбросить синхронизацию на этом устройстве", + zh: "重置此设备上的同步", + "zh-tw": "重設此裝置上的同步", + }, + "Reset the remote storage size threshold and check the remote storage size again.": { + def: "Reset the remote storage size threshold and check the remote storage size again.", + fr: "Réinitialiser le seuil de taille du stockage distant et vérifier à nouveau la taille du stockage distant.", + he: "אפס את סף גודל האחסון המרוחד ובדוק שוב את גודל האחסון המרוחד.", + ja: "リモートストレージ容量のしきい値をリセットし、リモートストレージ容量を再確認します。", + ko: "원격 저장소 크기 임계값을 초기화하고 원격 저장소 크기를 다시 확인합니다.", + ru: "Сбросить порог размера удалённого хранилища и проверить размер хранилища снова.", + zh: "重置远程存储大小阈值并再次检查远程存储大小。", + "zh-tw": "重設遠端儲存空間大小閾值,並再次檢查遠端儲存空間大小。", + }, + "Resolve All": { + def: "Resolve All", + es: "Resolver todo", + ja: "すべて解決", + ko: "모두 해결", + ru: "Разрешить всё", + zh: "全部处理", + "zh-tw": "全部處理", + }, + "Resolve all conflicted files": { + def: "Resolve all conflicted files", + es: "Resolver todos los archivos en conflicto", + ja: "競合しているすべてのファイルを解決", + ko: "충돌한 모든 파일 해결", + ru: "Разрешить все конфликтующие файлы", + zh: "解决所有冲突文件", + "zh-tw": "解決所有衝突檔案", + }, + "Resolve All conflicted files by the newer one": { + def: "Resolve All conflicted files by the newer one", + es: "Resolver todos los archivos en conflicto con la versión más reciente", + ja: "競合したすべてのファイルを新しい方で解決", + ko: "충돌한 모든 파일을 최신 버전으로 해결", + ru: "Разрешить все конфликтующие файлы в пользу более новой версии", + zh: "将所有冲突文件解析为较新的版本", + "zh-tw": "將所有衝突檔案統一為較新的版本", + }, + "Resolve all conflicted files by the newer one. Caution: This will overwrite the older one, and cannot resurrect the overwritten one.": + { + def: "Resolve all conflicted files by the newer one. Caution: This will overwrite the older one, and cannot resurrect the overwritten one.", + es: "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.", + ja: "競合しているすべてのファイルを新しい方の内容で解決します。注意:古い方は上書きされ、復元できません。", + ko: "충돌한 모든 파일을 더 최신 버전으로 해결합니다. 주의: 이전 버전은 덮어써지며 복원할 수 없습니다.", + ru: "Разрешает все конфликтующие файлы в пользу более новой версии. Внимание: старая версия будет перезаписана и её нельзя будет восстановить.", + zh: "将所有冲突文件统一保留较新的版本。注意:这会覆盖较旧的版本,且被覆盖的内容无法恢复。", + "zh-tw": "將所有衝突檔案統一保留較新的版本。注意:這會覆寫較舊的版本,且被覆寫的內容無法復原。", + }, + "Restart Now": { + def: "Restart Now", + es: "Reiniciar ahora", + ja: "今すぐ再起動", + ko: "지금 재시작", + ru: "Перезапустить сейчас", + zh: "立即重启", + "zh-tw": "立即重新啟動", + }, + "Restarting Obsidian is strongly recommended. Until restart, some changes may not take effect, and display may be inconsistent. Are you sure to restart now?": + { + def: "Restarting Obsidian is strongly recommended. Until restart, some changes may not take effect, and display may be inconsistent. Are you sure to restart now?", + "zh-tw": + "強烈建議重新啟動 Obsidian。在重新啟動之前,部分變更可能尚未生效,顯示也可能不一致。你確定要現在重新啟動嗎?", + }, + "Restore or reconstruct local database from remote.": { + def: "Restore or reconstruct local database from remote.", + es: "Restaura o reconstruye la base de datos local desde el remoto.", + ja: "リモートからローカルデータベースを復元または再構築します。", + ko: "원격에서 로컬 데이터베이스를 복원하거나 재구축합니다.", + ru: "Восстановить или перестроить локальную базу данных из удалённой.", + zh: "从远端恢复或重建本地数据库。", + "zh-tw": "從遠端還原或重建本機資料庫。", + }, + "Run Doctor": { + def: "Run Doctor", + fr: "Lancer le Docteur", + he: "הפעל Doctor", + ja: "診断を実行", + ko: "진단 실행", + ru: "Запустить диагностику", + zh: "立即诊断", + "zh-tw": "執行診斷", + }, + "S3/MinIO/R2 Object Storage": { + def: "S3/MinIO/R2 Object Storage", + es: "Almacenamiento de objetos S3/MinIO/R2", + ja: "S3/MinIO/R2 オブジェクトストレージ", + ko: "S3/MinIO/R2 객체 스토리지", + ru: "Объектное хранилище S3/MinIO/R2", + zh: "S3/MinIO/R2 对象存储", + "zh-tw": "S3/MinIO/R2 物件儲存", + }, + "Save settings to a markdown file. You will be notified when new settings arrive. You can set different files by the platform.": + { + def: "Save settings to a markdown file. You will be notified when new settings arrive. You can set different files by the platform.", + es: "Guardar configuración en archivo markdown. Se notificarán nuevos ajustes. Puede definir diferentes archivos por plataforma", + fr: "Enregistrer les paramètres dans un fichier markdown. Vous serez notifié à l'arrivée de nouveaux paramètres. Vous pouvez définir des fichiers différents selon la plateforme.", + he: "שמור הגדרות לקובץ Markdown. תיודע כשהגדרות חדשות יגיעו. ניתן להגדיר קבצים שונים לפי פלטפורמה.", + ja: "Markdownファイルに設定を保存します。新しい設定が到着すると通知されます。プラットフォームごとに異なるファイルを設定できます。", + ko: "설정을 마크다운 파일에 저장합니다. 새로운 설정이 도착하면 알림을 받게 됩니다. 플랫폼별로 다른 파일을 설정할 수 있습니다.", + ru: "Save settings to a markdown file. You will be notified when new settings arrive. You can set different files by the platform.", + zh: "将设置保存到一个 Markdown 文件中。当新设置到达时,您将收到通知。您可以根据平台设置不同的文件 ", + }, + "Saving will be performed forcefully after this number of seconds.": { + def: "Saving will be performed forcefully after this number of seconds.", + es: "Guardado forzado tras esta cantidad de segundos", + fr: "L'enregistrement sera forcé au bout de ce nombre de secondes.", + he: "השמירה תתבצע בכפייה לאחר מספר שניות זה.", + ja: "この秒数後に強制的に保存されます。", + ko: "이 시간(초) 후에 강제로 저장이 수행됩니다.", + ru: "Сохранение будет принудительно выполнено после этого количества секунд.", + zh: "在此秒数后将强制执行保存 ", + }, + "Scan a QR Code (Recommended for mobile)": { + def: "Scan a QR Code (Recommended for mobile)", + es: "Escanear un código QR (recomendado para móviles)", + ja: "QR コードをスキャンする(モバイル推奨)", + ko: "QR 코드 스캔(모바일 권장)", + ru: "Сканировать QR-код (рекомендуется для мобильных устройств)", + zh: "扫描二维码(移动端推荐)", + "zh-tw": "掃描 QR Code(行動裝置推薦)", + }, + "Scan changes on customization sync": { + def: "Scan changes on customization sync", + es: "Escanear cambios en sincronización de personalización", + fr: "Analyser les modifications de synchronisation de personnalisation", + he: "סרוק שינויים בסנכרון התאמה אישית", + ja: "カスタマイズされた同期時に、変更をスキャンする", + ko: "사용자 설정 동기화 시 변경 사항 검색", + ru: "Сканировать изменения при синхронизации настроек", + zh: "在自定义同步时扫描更改", + }, + "Scan customization automatically": { + def: "Scan customization automatically", + es: "Escanear personalización automáticamente", + fr: "Analyser automatiquement la personnalisation", + he: "סרוק התאמה אישית אוטומטית", + ja: "自動的にカスタマイズをスキャン", + ko: "사용자 설정 자동 검색", + ru: "Сканировать настройки автоматически", + zh: "自动扫描自定义设置", + }, + "Scan customization before replicating.": { + def: "Scan customization before replicating.", + es: "Escanear personalización antes de replicar", + fr: "Analyser la personnalisation avant de répliquer.", + he: "סרוק התאמה אישית לפני שכפול.", + ja: "レプリケーション(複製)前に、カスタマイズをスキャン", + ko: "복제하기 전에 사용자 설정을 검색합니다.", + ru: "Сканировать настройки перед репликацией.", + zh: "在复制前扫描自定义设置 ", + }, + "Scan customization every 1 minute.": { + def: "Scan customization every 1 minute.", + es: "Escanear personalización cada 1 minuto", + fr: "Analyser la personnalisation toutes les 1 minute.", + he: "סרוק התאמה אישית כל דקה.", + ja: "カスタマイズのスキャンを1分ごとに行う", + ko: "1분마다 사용자 설정을 검색합니다.", + ru: "Сканировать настройки каждую минуту.", + zh: "每1分钟扫描自定义设置 ", + }, + "Scan customization periodically": { + def: "Scan customization periodically", + es: "Escanear personalización periódicamente", + fr: "Analyser la personnalisation périodiquement", + he: "סרוק התאמה אישית תקופתית", + ja: "定期的にカスタマイズをスキャン", + ko: "주기적으로 사용자 설정 검색", + ru: "Сканировать настройки периодически", + zh: "定期扫描自定义设置", + }, + "Scan for Broken files": { + def: "Scan for Broken files", + ja: "破損ファイルをスキャン", + ko: "손상된 파일 검사", + zh: "扫描损坏文件", + "zh-tw": "掃描損壞檔案", + }, + "Scan for hidden files before replication": { + def: "Scan for hidden files before replication", + es: "Escanear archivos ocultos antes de replicar", + fr: "Analyser les fichiers cachés avant réplication", + he: "סרוק קבצים נסתרים לפני שכפול", + ja: "レプリケーション(複製)開始前に、隠しファイルのスキャンを行う", + ko: "복제 전 숨겨진 파일 검색", + ru: "Сканировать скрытые файлы перед репликацией", + zh: "复制前扫描隐藏文件", + }, + "Scan hidden files periodically": { + def: "Scan hidden files periodically", + es: "Escanear archivos ocultos periódicamente", + fr: "Analyser les fichiers cachés périodiquement", + he: "סרוק קבצים נסתרים תקופתית", + ja: "定期的に隠しファイルのスキャンを行う", + ko: "주기적으로 숨겨진 파일 검색", + ru: "Сканировать скрытые файлы периодически", + zh: "定期扫描隐藏文件", + }, + "Scan the QR code displayed on an active device using this device's camera.": { + def: "Scan the QR code displayed on an active device using this device's camera.", + es: "Escanee con la cámara de este dispositivo el código QR mostrado en un dispositivo activo。", + ja: "稼働中の端末に表示された QR コードを、この端末のカメラで読み取ってください。", + ko: "이 장치의 카메라로 활성 장치에 표시된 QR 코드를 스캔하세요。", + ru: "Отсканируйте QR-код, показанный на активном устройстве, с помощью камеры этого устройства。", + zh: "使用当前设备的摄像头扫描另一台已在使用设备上显示的二维码。", + "zh-tw": "使用目前裝置的相機掃描另一台已在使用裝置上顯示的 QR Code。", + }, + "Schedule and Restart": { + def: "Schedule and Restart", + es: "Programar y reiniciar", + ja: "予約して再起動", + ko: "예약 후 재시작", + ru: "Запланировать и перезапустить", + zh: "安排并重启", + "zh-tw": "排程後重新啟動", + }, + "Scram Switches": { + def: "Scram Switches", + ja: "緊急対応スイッチ", + ko: "긴급 전환 스위치", + zh: "紧急开关", + "zh-tw": "緊急處置開關", + }, + "Scram!": { + def: "Scram!", + es: "Medidas de emergencia", + ja: "緊急停止", + ko: "긴급 조치", + ru: "Экстренные меры", + zh: "紧急处置", + "zh-tw": "緊急處置", + }, + "Seconds, 0 to disable": { + def: "Seconds, 0 to disable", + es: "Segundos, 0 para desactivar", + fr: "Secondes, 0 pour désactiver", + he: "שניות, 0 לביטול", + ja: "秒数、0で無効", + ko: "초 단위, 0으로 설정하면 비활성화", + ru: "Секунд, 0 для отключения", + zh: "秒,0为禁用", + }, + "Seconds. Saving to the local database will be delayed until this value after we stop typing or saving.": { + def: "Seconds. Saving to the local database will be delayed until this value after we stop typing or saving.", + es: "Segundos. Guardado en BD local se retrasará hasta este valor tras dejar de escribir/guardar", + fr: "Secondes. L'enregistrement dans la base locale sera différé de cette valeur après l'arrêt de la frappe ou de l'enregistrement.", + he: "שניות. השמירה למסד הנתונים המקומי תתעכב בערך זה לאחר הפסקת הקלדה או שמירה.", + ja: "秒。入力や保存を停止してからこの値の間、ローカルデータベースへの保存が遅延されます。", + ko: "초 단위입니다. 타이핑이나 저장을 중단한 후 이 시간동안 로컬 데이터베이스 저장이 지연됩니다.", + ru: "Секунды. Сохранение в локальную базу данных будет отложено.", + zh: "秒。在我们停止输入或保存后,保存到本地数据库将延迟此值 ", + }, + "Secret Key": { + def: "Secret Key", + es: "Clave secreta", + fr: "Clé secrète", + he: "מפתח סודי", + ja: "シークレットキー", + ko: "시크릿 키", + ru: "Секретный ключ", + zh: "Secret Key", + }, + "Select the database adapter to use.": { + def: "Select the database adapter to use.", + es: "Selecciona el adaptador de base de datos que se usará.", + ja: "使用するデータベースアダプターを選択します。", + ko: "사용할 데이터베이스 어댑터를 선택합니다.", + ru: "Выберите используемый адаптер базы данных.", + zh: "选择要使用的数据库适配器。", + "zh-tw": "選擇要使用的資料庫適配器。", + }, + Send: { + def: "Send", + es: "Enviar", + ja: "送信", + ko: "보내기", + ru: "Отправить", + zh: "发送", + "zh-tw": "傳送", + }, + "Send chunks": { + def: "Send chunks", + es: "Enviar chunks", + ja: "チャンクを送信", + ko: "청크 보내기", + ru: "Отправить чанки", + zh: "发送 chunks", + "zh-tw": "傳送 chunks", + }, + "Server URI": { + def: "Server URI", + es: "URI del servidor", + fr: "URI du serveur", + he: "כתובת שרת (URI)", + ja: "URI", + ko: "서버 URI", + ru: "URI сервера", + zh: "服务器 URI", + }, + "Setting.GenerateKeyPair.Desc": { + def: '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>
\n>\n> ### Public Key\n> ```\n${public_key}\n> ```\n>\n> ### Private Key\n> ```\n${private_key}\n> ```\n>\n>
\n\n>[!Both for copying]-\n>\n>
\n>\n> ```\n${public_key}\n${private_key}\n> ```\n>\n>
\n\n', + es: '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>
\n>\n> ### Clave pública\n> ```\n${public_key}\n> ```\n>\n> ### Clave privada\n> ```\n${private_key}\n> ```\n>\n>
\n\n>[!Ambas para copiar]-\n>\n>
\n>\n> ```\n${public_key}\n${private_key}\n> ```\n>\n>
', + fr: 'Nous avons généré une paire de clés !\n\nNote : cette paire de clés ne sera plus jamais affichée. Veuillez la conserver dans un endroit sûr. Si vous la perdez, vous devrez générer une nouvelle paire.\nNote 2 : la clé publique est au format spki, et la clé privée au format pkcs8. Pour plus de commodité, les retours à la ligne sont convertis en `\\n` dans la clé publique.\nNote 3 : la clé publique doit être configurée dans la base distante, et la clé privée sur les appareils locaux.\n\n>[!POUR VOS YEUX SEULEMENT]-\n>
\n>\n> ### Clé publique\n> ```\n${public_key}\n> ```\n>\n> ### Clé privée\n> ```\n${private_key}\n> ```\n>\n>
\n\n>[!Les deux pour copier]-\n>\n>
\n>\n> ```\n${public_key}\n${private_key}\n> ```\n>\n>
\n\n', + he: 'יצרנו זוג מפתחות!\n\nהערה: זוג מפתחות זה לא יוצג שוב. אנא שמור אותו במקום בטוח. אם אבד לך, יהיה צורך לייצר זוג מפתחות חדש.\nהערה 2: המפתח הציבורי הוא בפורמט spki, והמפתח הפרטי הוא בפורמט pkcs8. לנוחות, שורות חדשות ממוירות ל-`\\n` במפתח הציבורי.\nהערה 3: יש להגדיר את המפתח הציבורי במסד הנתונים המרוחד, ואת המפתח הפרטי במכשירים המקומיים.\n\n>[!FOR YOUR EYES ONLY]-\n>
\n>\n> ### מפתח ציבורי\n> ```\n${public_key}\n> ```\n>\n> ### מפתח פרטי\n> ```\n${private_key}\n> ```\n>\n>
\n\n>[!Both for copying]-\n>\n>
\n>\n> ```\n${public_key}\n${private_key}\n> ```\n>\n>
\n\n', + ja: 'キーペアを生成しました!\n\n注意: このキーペアは再度表示されません。安全な場所に保存してください。紛失した場合は、新しいキーペアを生成する必要があります。\n注意2: 公開鍵はspki形式、秘密鍵はpkcs8形式です。利便性のため、公開鍵の改行は`\\n`に変換されています。\n注意3: 公開鍵はリモートデータベースに、秘密鍵はローカルデバイスに設定してください。\n\n>[!FOR YOUR EYES ONLY]-\n>
\n>\n> ### 公開鍵\n> ```\n${public_key}\n> ```\n>\n> ### 秘密鍵\n> ```\n${private_key}\n> ```\n>\n>
\n\n>[!Both for copying]-\n>\n>
\n>\n> ```\n${public_key}\n${private_key}\n> ```\n>\n>
\n\n', + ko: '키 페어를 생성했습니다!\n\n참고: 이 키 페어는 다시 표시되지 않습니다. 안전한 곳에 저장해 주세요. 분실하면 새 키 페어를 생성해야 합니다.\n참고 2: 공개 키는 spki 형식이고, 개인 키는 pkcs8 형식입니다. 편의상 공개 키의 줄 바꿈은 `\\n`으로 변환됩니다.\n참고 3: 공개 키는 원격 데이터베이스에서 구성되어야 하고, 개인 키는 로컬 기기에서 구성되어야 합니다.\n\n>[!FOR YOUR EYES ONLY]-\n>
\n>\n> ### 공개 키\n> ```\n${public_key}\n> ```\n>\n> ### 개인 키\n> ```\n${private_key}\n> ```\n>\n>
\n\n>[!Both for copying]-\n>\n>
\n>\n> ```\n${public_key}\n${private_key}\n> ```\n>\n>
\n\n\n', + ru: "Мы сгенерировали пару ключей!", + zh: '我们已经生成了一组密钥对!\n\n注意:这组密钥对之后将不会再次显示。请务必妥善保管;如果丢失,你需要重新生成新的密钥对。\n注意 2:公钥采用 spki 格式,私钥采用 pkcs8 格式。为方便复制,公钥中的换行会被转换为 `\\n`。\n注意 3:公钥应配置在远端数据库中,私钥应配置在本地设备上。\n\n>[!仅限本人查看]-\n>
\n>\n> ### 公钥\n> ```\n${public_key}\n> ```\n>\n> ### 私钥\n> ```\n${private_key}\n> ```\n>\n>
\n\n>[!整段复制]-\n>\n>
\n>\n> ```\n${public_key}\n${private_key}\n> ```\n>\n>
', + "zh-tw": + '我們已產生新的金鑰對!\n\n注意:此金鑰對之後將不會再次顯示。請務必妥善保存;若遺失,必須重新產生新的金鑰對。\n注意 2:公鑰採用 spki 格式,私鑰採用 pkcs8 格式。為了方便複製,公鑰中的換行會轉換為 `\\n`。\n注意 3:公鑰應設定在遠端資料庫中,私鑰則應設定在本機裝置上。\n\n>[!僅供本人查看]-\n>
\n>\n> ### 公鑰\n> ```\n${public_key}\n> ```\n>\n> ### 私鑰\n> ```\n${private_key}\n> ```\n>\n>
\n\n>[!便於整段複製]-\n>\n>
\n>\n> ```\n${public_key}\n${private_key}\n> ```\n>\n>
', + }, + "Setting.GenerateKeyPair.Title": { + def: "New key pair has been generated!", + es: "¡Se ha generado un nuevo par de claves!", + fr: "Une nouvelle paire de clés a été générée !", + he: "זוג מפתחות חדש נוצר!", + ja: "新しいキーペアが生成されました!", + ko: "새 키 페어가 생성되었습니다!", + ru: "Новая пара ключей сгенерирована!", + zh: "已生成新的密钥对!", + "zh-tw": "已產生新的金鑰對!", + }, + "Setting.TroubleShooting": { + def: "TroubleShooting", + fr: "Dépannage", + he: "פתרון בעיות", + ja: "トラブルシューティング", + ko: "문제 해결", + ru: "Устранение неполадок", + zh: "故障排除", + }, + "Setting.TroubleShooting.Doctor": { + def: "Setting Doctor", + fr: "Docteur des paramètres", + he: "Doctor הגדרות", + ja: "設定診断ツール", + ko: "설정 진단 마법사", + ru: "Диагностика настроек", + zh: "设置诊断", + }, + "Setting.TroubleShooting.Doctor.Desc": { + def: "Detects non optimal settings. (Same as during migration)", + fr: "Détecte les paramètres non optimaux. (Identique à la migration)", + he: "מזהה הגדרות לא אופטימליות. (זהה לפעולה במהלך הגירה)", + ja: "最適でない設定を検出します。(マイグレーション時と同じ)", + ko: "최적화되지 않은 설정을 감지합니다. (데이터 구조 전환 시와 동일)", + ru: "Обнаруживает неоптимальные настройки.", + zh: "检测系统中不合理的设置。(与迁移期间逻辑相同)", + }, + "Setting.TroubleShooting.ScanBrokenFiles": { + def: "Scan for broken files", + fr: "Analyser les fichiers corrompus", + he: "סרוק קבצים פגומים", + ja: "破損ファイルのスキャン", + ko: "손상된 파일 검사", + ru: "Сканировать повреждённые файлы", + zh: "扫描损坏或异常的文件", + }, + "Setting.TroubleShooting.ScanBrokenFiles.Desc": { + def: "Scans for files that are not stored correctly in the database.", + fr: "Analyse les fichiers qui ne sont pas stockés correctement dans la base.", + he: "סורק קבצים שלא נשמרו כהלכה במסד הנתונים.", + ja: "データベースに正しく保存されていないファイルをスキャンします。", + ko: "데이터베이스에 올바르게 저장되지 않은 파일을 검사합니다.", + ru: "Сканирует файлы, которые неправильно хранятся в базе данных.", + zh: "扫描数据库中未正确存储的文件。", + }, + "SettingTab.Message.AskRebuild": { + def: "Your changes require fetching from the remote database. Do you want to proceed?", + fr: "Vos modifications nécessitent une récupération depuis la base distante. Voulez-vous continuer ?", + he: "השינויים שלך מצריכים משיכה ממסד הנתונים המרוחד. האם להמשיך?", + ja: "変更にはリモートデータベースからのフェッチが必要です。続行しますか?", + ko: "변경 사항을 적용하려면 원격 데이터베이스에서 가져와야 합니다. 계속 진행하시겠습니까?", + ru: "Ваши изменения требуют загрузки из удалённой базы данных. Хотите продолжить?", + zh: "Your changes require fetching from the remote database. Do you want to proceed?", + }, + "Setup URI dialog cancelled.": { + def: "Setup URI dialog cancelled.", + ja: "Setup URI ダイアログはキャンセルされました。", + ko: "Setup URI 대화 상자가 취소되었습니다.", + ru: "Диалог Setup URI был отменён.", + zh: "Setup URI 对话框已取消。", + "zh-tw": "Setup URI 對話框已取消。", + }, + "Setup.Apply.Buttons.ApplyAndFetch": { + def: "Apply and Fetch", + fr: "Appliquer et récupérer", + he: "החל ומשוך", + ja: "適用してフェッチ", + ru: "Применить и загрузить", + zh: "Apply and Fetch", + }, + "Setup.Apply.Buttons.ApplyAndMerge": { + def: "Apply and Merge", + fr: "Appliquer et fusionner", + he: "החל ומזג", + ja: "適用してマージ", + ru: "Применить и объединить", + zh: "Apply and Merge", + }, + "Setup.Apply.Buttons.ApplyAndRebuild": { + def: "Apply and Rebuild", + fr: "Appliquer et reconstruire", + he: "החל ובנה מחדש", + ja: "適用して再構築", + ru: "Применить и перестроить", + zh: "Apply and Rebuild", + }, + "Setup.Apply.Buttons.Cancel": { + def: "Discard and Cancel", + fr: "Abandonner et annuler", + he: "בטל ובטל", + ja: "破棄してキャンセル", + ru: "Отменить и отменить", + zh: "Discard and Cancel", + }, + "Setup.Apply.Buttons.OnlyApply": { + def: "Only Apply", + fr: "Appliquer seulement", + he: "החל בלבד", + ja: "適用のみ", + ru: "Только применить", + zh: "Only Apply", + }, + "Setup.Apply.Message": { + def: "The new configuration is ready. Let us proceed to apply it.\nThere are several ways to apply this:\n\n- Apply and Fetch\n Configure this device as a new client. After applying, synchronise from the remote server.\n- Apply and Merge\n Configure on a device that already has the file. It processes the local files and transfers the differences. Conflicts may arise.\n- Apply and Rebuild\n Rebuild the remote using local files. This is typically done if the server becomes corrupted or we wish to start from scratch.\n Other devices will be locked and required to re-fetch.\n- Only Apply\n Apply only. Conflicts may arise if a rebuild is required.", + fr: "La nouvelle configuration est prête. Procédons à son application.\nPlusieurs manières de l'appliquer :\n\n- Appliquer et récupérer\n Configurer cet appareil comme nouveau client. Après application, synchroniser depuis le serveur distant.\n- Appliquer et fusionner\n Configurer sur un appareil qui possède déjà les fichiers. Traite les fichiers locaux et transfère les différences. Des conflits peuvent apparaître.\n- Appliquer et reconstruire\n Reconstruire le distant à partir des fichiers locaux. Typiquement effectué si le serveur est corrompu ou si l'on souhaite repartir de zéro.\n Les autres appareils seront verrouillés et devront refaire une récupération.\n- Appliquer seulement\n Appliquer uniquement. Des conflits peuvent apparaître si une reconstruction est nécessaire.", + he: "התצורה החדשה מוכנה. בואו נמשיך להחיל אותה.\nישנן מספר דרכים להחיל זאת:\n\n- החל ומשוך\n הגדר מכשיר זה כלקוח חדש. לאחר ההחלה, סנכרן מהשרת המרוחד.\n- החל ומזג\n הגדר על מכשיר שכבר יש בו קבצים. מעבד קבצים מקומיים ומעביר הפרשים. עלולים\n לקום קונפליקטים.\n- החל ובנה מחדש\n בנה את השרת המרוחד מחדש תוך שימוש בקבצים מקומיים. נעשה בדרך כלל אם השרת\n מושחת או אם רוצים להתחיל מאפס. מכשירים אחרים יינעלו ויצטרכו למשוך מחדש.\n- החל בלבד\n החל בלבד. עלולים לקום קונפליקטים אם נדרשת בנייה מחדש.", + ja: "新しい設定の準備ができました。適用に進みましょう。\n適用方法はいくつかあります:\n\n- 適用してフェッチ\n このデバイスを新しいクライアントとして設定します。適用後、リモートサーバーから同期します。\n- 適用してマージ\n 既にファイルがあるデバイスで設定します。ローカルファイルを処理し、差分を転送します。競合が発生する場合があります。\n- 適用して再構築\n ローカルファイルを使用してリモートを再構築します。これは通常、サーバーが破損した場合や最初からやり直したい場合に行います。\n 他のデバイスはロックされ、再フェッチが必要になります。\n- 適用のみ\n 適用のみを行います。再構築が必要な場合、競合が発生する可能性があります。", + ru: "Новая конфигурация готова. Есть несколько способов применить её.", + zh: "The new configuration is ready. Let us proceed to apply it.\nThere are several ways to apply this:\n\n- Apply and Fetch\n Configure this device as a new client. After applying, synchronise from the remote server.\n- Apply and Merge\n Configure on a device that already has the file. It processes the local files and transfers the differences. Conflicts may arise.\n- Apply and Rebuild\n Rebuild the remote using local files. This is typically done if the server becomes corrupted or we wish to start from scratch.\n Other devices will be locked and required to re-fetch.\n- Only Apply\n Apply only. Conflicts may arise if a rebuild is required.", + }, + "Setup.Apply.Title": { + def: "Apply new configuration from the ${method}", + fr: "Appliquer la nouvelle configuration depuis ${method}", + he: "החל תצורה חדשה מה-${method}", + ja: "${method}からの新しい設定を適用", + ru: "Применить новую конфигурацию из method", + zh: "Apply new configuration from the ${method}", + }, + "Setup.Apply.WarningRebuildRecommended": { + def: "NOTE: after adjusting the settings, it has been determined that a rebuild is required; Just Import is not recommended.", + fr: "NOTE : après ajustement des paramètres, il a été déterminé qu'une reconstruction est requise ; un simple import n'est pas recommandé.", + he: "שים לב: לאחר כוונון ההגדרות, נקבע שנדרשת בנייה מחדש; ייבוא בלבד אינו מומלץ.", + ja: "注意: 設定の調整後、再構築が必要と判断されました。インポートのみは推奨されません。", + ru: "ПРИМЕЧАНИЕ: после настройки изменений определено, что требуется перестроение.", + zh: "NOTE: after adjusting the settings, it has been determined that a rebuild is required; Just Import is not recommended.", + }, + "Setup.Doctor.Buttons.No": { + def: "No, please use the settings in the URI as is", + fr: "Non, utiliser les paramètres de l'URI tels quels", + he: "לא, אנא השתמש בהגדרות ה-URI כפי שהן", + ja: "いいえ、URIの設定をそのまま使用", + ru: "Нет, использовать настройки из URI как есть", + zh: "No, please use the settings in the URI as is", + }, + "Setup.Doctor.Buttons.Yes": { + def: "Yes, please consult the doctor", + fr: "Oui, consulter le docteur", + he: "כן, אנא יעץ ל-Doctor", + ja: "はい、診断ツールに相談する", + ru: "Да, пожалуйста, запустить диагностику", + zh: "Yes, please consult the doctor", + }, + "Setup.Doctor.Message": { + def: "Self-hosted LiveSync has gradually become longer in history and some recommended settings have changed.\n\nNow, setup is a very good time to do this.\n\nDo you want to run Doctor to check if the imported settings are optimal compared to the latest state?", + fr: "Self-hosted LiveSync s'est progressivement étoffé et certains paramètres recommandés ont évolué.\n\nLa configuration est un bon moment pour le faire.\n\nVoulez-vous lancer le Docteur pour vérifier si les paramètres importés sont optimaux par rapport au dernier état ?", + he: "Self-hosted LiveSync הפך ארוך יותר בהיסטוריה שלו וחלק מההגדרות המומלצות השתנו.\n\nעכשיו, הגדרה היא זמן מצוין לכך.\n\nהאם ברצונך להפעיל את Doctor כדי לבדוק אם ההגדרות המיובאות אופטימליות בהשוואה למצב הנוכחי?", + ja: "Self-hosted LiveSyncは徐々に歴史が長くなり、一部の推奨設定が変更されています。\n\nセットアップは、これを行う非常に良い機会です。\n\nインポートされた設定が最新の状態と比較して最適かどうかを確認するために、診断ツールを実行しますか?", + ru: "Self-hosted LiveSync постепенно набрал историю и некоторые рекомендуемые настройки изменились.", + zh: "Self-hosted LiveSync has gradually become longer in history and some recommended settings have changed.\n\nNow, setup is a very good time to do this.\n\nDo you want to run Doctor to check if the imported settings are optimal compared to the latest state?", + }, + "Setup.Doctor.Title": { + def: "Do you want to consult the doctor?", + fr: "Voulez-vous consulter le docteur ?", + he: "האם ברצונך להתייעץ עם ה-Doctor?", + ja: "診断ツールに相談しますか?", + ru: "Хотите запустить диагностику?", + zh: "Do you want to consult the doctor?", + }, + "Setup.FetchRemoteConf.Buttons.Fetch": { + def: "Yes, please fetch the configuration", + fr: "Oui, récupérer la configuration", + he: "כן, אנא משוך את התצורה", + ja: "はい、設定を取得", + ru: "Да, загрузить конфигурацию", + zh: "Yes, please fetch the configuration", + }, + "Setup.FetchRemoteConf.Buttons.Skip": { + def: "No, please use the settings in the URI", + fr: "Non, utiliser les paramètres de l'URI", + he: "לא, אנא השתמש בהגדרות ב-URI", + ja: "いいえ、URIの設定を使用", + ru: "Нет, использовать настройки из URI", + zh: "No, please use the settings in the URI", + }, + "Setup.FetchRemoteConf.Message": { + def: "If we have already synchronised once with another device, the remote database stores the suitable configuration values between the synchronised devices. The plug-in would like to retrieve them for robust configuration.\n\nHowever, we have to make sure the one thing. Are we currently in a situation where we can access the network safely and retrieve the settings?\n\nNote: Mostly, you are safe to do this, that your remote database is hosted with a SSL certificate, and your network is not compromised.", + fr: "Si nous avons déjà synchronisé une fois avec un autre appareil, la base distante stocke les valeurs de configuration adaptées entre les appareils synchronisés. Le plug-in souhaiterait les récupérer pour une configuration robuste.\n\nMais il faut s'assurer d'une chose. Sommes-nous actuellement dans une situation où nous pouvons accéder au réseau en toute sécurité et récupérer les paramètres ?\n\nNote : le plus souvent, c'est sûr si votre base distante est hébergée avec un certificat SSL et si votre réseau n'est pas compromis.", + he: "אם סנכרנו כבר פעם עם מכשיר אחר, מסד הנתונים המרוחד מאחסן ערכי תצורה מתאימים בין המכשירים המסונכרנים. הפלאגין ירצה לאחזר אותם לתצורה חזקה יותר.\n\nעם זאת, עלינו לוודא דבר אחד. האם אנחנו כרגע במצב שבו ניתן לגשת לרשת בבטחה ולאחזר את ההגדרות?\nהערה: ברוב המקרים, אתה בטוח לעשות זאת, כל עוד מסד הנתונים המרוחד שלך מאוחסן עם תעודת SSL, ורשתך אינה פגומה.", + ja: "既に他のデバイスと同期したことがある場合、リモートデータベースには同期されたデバイス間の適切な設定値が保存されています。プラグインは堅牢な設定のためにそれらを取得したいと考えています。\n\nただし、1つ確認が必要です。現在、ネットワークに安全にアクセスして設定を取得できる状況ですか?\n\n注意: リモートデータベースがSSL証明書でホストされており、ネットワークが侵害されていなければ、ほとんどの場合安全に実行できます。", + ru: "Если мы уже синхронизировались с другим устройством, удалённая база данных хранит подходящие значения конфигурации.", + zh: "If we have already synchronised once with another device, the remote database stores the suitable configuration values between the synchronised devices. The plug-in would like to retrieve them for robust configuration.\n\nHowever, we have to make sure the one thing. Are we currently in a situation where we can access the network safely and retrieve the settings?\n\nNote: Mostly, you are safe to do this, that your remote database is hosted with a SSL certificate, and your network is not compromised.", + }, + "Setup.FetchRemoteConf.Title": { + def: "Fetch configuration from remote database?", + fr: "Récupérer la configuration depuis la base distante ?", + he: "אחזר תצורה ממסד הנתונים המרוחד?", + ja: "リモートデータベースから設定を取得しますか?", + ru: "Загрузить конфигурацию с удалённой базы данных?", + zh: "Fetch configuration from remote database?", + }, + "Setup.QRCode": { + def: 'We have generated a QR code to transfer the settings. Please scan the QR code with your phone or other device.\nNote: The QR code is not encrypted, so be careful to open this.\n\n>[!FOR YOUR EYES ONLY]-\n>
${qr_image}
', + fr: "Nous avons généré un QR code pour transférer les paramètres. Scannez-le avec votre téléphone ou un autre appareil.\nNote : le QR code n'est pas chiffré, soyez prudent en l'affichant.\n\n>[!POUR VOS YEUX SEULEMENT]-\n>
${qr_image}
", + he: 'יצרנו קוד QR להעברת ההגדרות. אנא סרוק את קוד ה-QR עם הטלפון או מכשיר אחר.\nהערה: קוד ה-QR אינו מוצפן, אז היה זהיר בפתיחתו.\n\n>[!FOR YOUR EYES ONLY]-\n>
${qr_image}
', + ja: '設定を転送するためのQRコードを生成しました。スマートフォンや他のデバイスでQRコードをスキャンしてください。\n注意: QRコードは暗号化されていないため、開く際は注意してください。\n\n>[!FOR YOUR EYES ONLY]-\n>
${qr_image}
', + ko: '설정을 전송하기 위한 QR 코드를 생성했습니다. 휴대폰이나 다른 기기로 QR 코드를 스캔해 주세요.\n참고: QR 코드는 암호화되지 않았으므로 열 때 주의하세요.\n\n>[!FOR YOUR EYES ONLY]-\n>
${qr_image}
', + ru: "Мы сгенерировали QR-код для передачи настроек. Отсканируйте QR-код телефоном.", + zh: 'We have generated a QR code to transfer the settings. Please scan the QR code with your phone or other device.\nNote: The QR code is not encrypted, so be careful to open this.\n\n>[!FOR YOUR EYES ONLY]-\n>
${qr_image}
', + }, + "Setup.RemoteE2EE.AdvancedTitle": { + def: "Advanced", + es: "Avanzado", + ja: "詳細設定", + ko: "고급", + ru: "Дополнительно", + zh: "高级", + "zh-tw": "進階", + }, + "Setup.RemoteE2EE.AlgorithmWarning": { + def: "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.", + es: "Cambiar el algoritmo de cifrado impedirá el acceso a cualquier dato cifrado anteriormente con otro algoritmo. Asegúrate de que todos tus dispositivos estén configurados para usar el mismo algoritmo y así mantener el acceso a tus datos.", + ja: "暗号化アルゴリズムを変更すると、別のアルゴリズムで暗号化された既存データにはアクセスできなくなります。すべての端末で同じアルゴリズムを使うよう設定し、データにアクセスできる状態を維持してください。", + ko: "암호화 알고리즘을 변경하면 다른 알고리즘으로 암호화된 기존 데이터에 접근할 수 없게 됩니다. 모든 기기에서 동일한 알고리즘을 사용하도록 설정해 데이터 접근성을 유지하세요.", + ru: "Изменение алгоритма шифрования лишит доступа к данным, которые ранее были зашифрованы другим алгоритмом. Убедитесь, что все ваши устройства настроены на использование одного и того же алгоритма, чтобы сохранить доступ к данным.", + zh: "更改加密算法会导致之前使用其他算法加密的数据无法访问。请确保所有设备都配置为使用同一算法,以保持对数据的访问能力。", + "zh-tw": + "變更加密演算法後,先前以其他演算法加密的資料將無法再存取。請確認所有裝置都設定為使用相同演算法,以維持對資料的存取能力。", + }, + "Setup.RemoteE2EE.ButtonCancel": { + def: "Cancel", + es: "Cancelar", + ja: "キャンセル", + ko: "취소", + ru: "Отмена", + zh: "取消", + "zh-tw": "取消", + }, + "Setup.RemoteE2EE.ButtonProceed": { + def: "Proceed", + es: "Continuar", + ja: "進む", + ko: "진행", + ru: "Продолжить", + zh: "继续", + "zh-tw": "繼續", + }, + "Setup.RemoteE2EE.DefaultAlgorithmDesc": { + def: "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.", + es: "En la mayoría de los casos, debes mantener el algoritmo predeterminado (${algorithm}). Este ajuste solo es necesario si ya tienes un Vault cifrado con un formato diferente.", + ja: "ほとんどの場合は、既定のアルゴリズム(${algorithm})をそのまま使用してください。この設定が必要になるのは、既存の Vault が別の形式で暗号化されている場合のみです。", + ko: "대부분의 경우 기본 알고리즘(${algorithm})을 그대로 사용하는 것이 좋습니다. 이 설정은 기존 Vault가 다른 형식으로 암호화되어 있는 경우에만 필요합니다.", + ru: "В большинстве случаев следует оставить алгоритм по умолчанию (${algorithm}). Этот параметр нужен только в том случае, если у вас уже есть Vault, зашифрованный в другом формате.", + zh: "在大多数情况下,你应继续使用默认算法(${algorithm})。只有当你已有一个采用不同格式加密的 Vault 时,才需要调整此设置。", + "zh-tw": + "在大多數情況下,建議維持使用預設演算法(${algorithm})。只有當你現有的 Vault 是以不同格式加密時,才需要調整這項設定。", + }, + "Setup.RemoteE2EE.Guidance": { + def: "Please configure your end-to-end encryption settings.", + es: "Configura tus ajustes de cifrado de extremo a extremo.", + ja: "エンドツーエンド暗号化の設定を行ってください。", + ko: "엔드투엔드 암호화 설정을 구성해 주세요.", + ru: "Пожалуйста, настройте параметры сквозного шифрования.", + zh: "请配置你的端到端加密设置。", + "zh-tw": "請設定你的端對端加密選項。", + }, + "Setup.RemoteE2EE.LabelEncrypt": { + def: "End-to-End Encryption", + es: "Cifrado de extremo a extremo", + ja: "エンドツーエンド暗号化", + ko: "엔드투엔드 암호화", + ru: "Сквозное шифрование", + zh: "端到端加密", + "zh-tw": "端對端加密", + }, + "Setup.RemoteE2EE.LabelEncryptionAlgorithm": { + def: "Encryption Algorithm", + es: "Algoritmo de cifrado", + ja: "暗号化アルゴリズム", + ko: "암호화 알고리즘", + ru: "Алгоритм шифрования", + zh: "加密算法", + "zh-tw": "加密演算法", + }, + "Setup.RemoteE2EE.LabelObfuscateProperties": { + def: "Obfuscate Properties", + es: "Ofuscar propiedades", + ja: "プロパティを難読化", + ko: "속성 난독화", + ru: "Обфусцировать свойства", + zh: "混淆属性", + "zh-tw": "混淆屬性", + }, + "Setup.RemoteE2EE.MultiDestinationWarning": { + def: "This setting must be the same even when connecting to multiple synchronisation destinations.", + es: "Este ajuste debe ser el mismo incluso cuando te conectes a varios destinos de sincronización.", + ja: "複数の同期先へ接続する場合でも、この設定は同一である必要があります。", + ko: "여러 동기화 대상에 연결하는 경우에도 이 설정은 동일해야 합니다.", + ru: "Этот параметр должен быть одинаковым даже при подключении к нескольким направлениям синхронизации.", + zh: "即使连接到多个同步目标,此设置也必须保持一致。", + "zh-tw": "即使連線到多個同步目標,這項設定也必須保持一致。", + }, + "Setup.RemoteE2EE.ObfuscatePropertiesDesc": { + def: "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.", + es: "Ofuscar propiedades (por ejemplo, la ruta del archivo, el tamaño y las fechas de creación y modificación) añade una capa adicional de seguridad al dificultar la identificación de la estructura y los nombres de tus archivos y carpetas en el servidor remoto. Esto ayuda a proteger tu privacidad y dificulta que usuarios no autorizados deduzcan información sobre tus datos.", + ja: "プロパティ(ファイルパス、サイズ、作成日時、更新日時など)を難読化すると、リモートサーバー上のファイルやフォルダーの構造や名前を特定しにくくできるため、追加の保護層になります。これによりプライバシーが守られ、権限のない第三者がデータに関する情報を推測しにくくなります。", + ko: "속성(예: 파일 경로, 크기, 생성일 및 수정일)을 난독화하면 원격 서버에서 파일과 폴더의 구조 및 이름을 식별하기 어렵게 만들어 보안을 한층 강화할 수 있습니다. 이는 개인 정보를 보호하고 권한 없는 사용자가 데이터에 관한 정보를 추론하기 어렵게 만듭니다.", + ru: "Обфускация свойств (например, пути к файлу, размера, дат создания и изменения) добавляет дополнительный уровень защиты, затрудняя определение структуры и названий ваших файлов и папок на удалённом сервере. Это помогает защитить вашу конфиденциальность и усложняет для посторонних вывод информации о ваших данных.", + zh: "混淆属性(例如文件路径、大小、创建和修改日期)可以增加一层额外保护,使远程服务器上的文件与文件夹结构及名称更难被识别。这有助于保护你的隐私,也让未授权用户更难推断你的数据相关信息。", + "zh-tw": + "混淆屬性(例如檔案路徑、大小、建立時間與修改時間)可以額外增加一層安全保護,讓遠端伺服器上的檔案與資料夾結構及名稱更難被辨識。這有助於保護你的隱私,也讓未授權使用者更難推測你的資料資訊。", + }, + "Setup.RemoteE2EE.PassphraseValidationLine1": { + def: "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.", + es: "Ten en cuenta que la frase de contraseña del cifrado de extremo a extremo no se valida hasta que el proceso de sincronización comienza realmente. Esta es una medida de seguridad diseñada para proteger tus datos.", + ja: "エンドツーエンド暗号化のパスフレーズは、実際に同期処理が開始されるまで検証されない点にご注意ください。これはデータを保護するためのセキュリティ対策です。", + ko: "엔드투엔드 암호화 패스프레이즈는 실제 동기화가 시작되기 전까지 검증되지 않는다는 점에 유의하세요. 이것은 데이터를 보호하기 위한 보안 조치입니다.", + ru: "Обратите внимание: парольная фраза для сквозного шифрования не проверяется до фактического начала процесса синхронизации. Это сделано в целях безопасности ваших данных.", + zh: "请注意,在同步过程真正开始之前,端到端加密密码短语不会被校验。这是一项用于保护你数据的安全措施。", + "zh-tw": "請注意,端對端加密的密語要到同步程序實際開始時才會進行驗證。這是為了保護你資料而設計的安全措施。", + }, + "Setup.RemoteE2EE.PassphraseValidationLine2": { + def: "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. Please understand that this is intended behaviour.", + es: "Por lo tanto, te pedimos que tengas muchísimo cuidado al configurar manualmente la información del servidor. Si introduces una frase de contraseña incorrecta, los datos del servidor se corromperán. Ten en cuenta que este comportamiento es intencionado.", + ja: "そのため、サーバー情報を手動で設定する際は細心の注意を払ってください。誤ったパスフレーズを入力すると、サーバー上のデータが破損します。これは意図された動作ですので、あらかじめご理解ください。", + ko: "따라서 서버 정보를 수동으로 구성할 때는 각별히 주의해 주세요. 잘못된 패스프레이즈를 입력하면 서버의 데이터가 손상됩니다. 이는 의도된 동작이니 반드시 이해하고 진행해 주세요.", + ru: "Поэтому при ручной настройке информации о сервере требуется предельная осторожность. Если будет введена неверная парольная фраза, данные на сервере будут повреждены. Пожалуйста, учтите, что это ожидаемое поведение.", + zh: "因此,在手动配置服务器信息时请务必格外小心。如果输入了错误的密码短语,服务器上的数据将会损坏。请理解这属于预期行为。", + "zh-tw": + "因此,在手動設定伺服器資訊時請務必格外小心。如果輸入了錯誤的密語,伺服器上的資料將會損毀。請理解這是系統的預期行為。", + }, + "Setup.RemoteE2EE.PlaceholderPassphrase": { + def: "Enter your passphrase", + es: "Introduce tu frase de contraseña", + ja: "パスフレーズを入力してください", + ko: "패스프레이즈를 입력하세요", + ru: "Введите парольную фразу", + zh: "输入你的密码短语", + "zh-tw": "輸入你的密語", + }, + "Setup.RemoteE2EE.StronglyRecommendedLine1": { + def: "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.", + es: "Al habilitar el cifrado de extremo a extremo, tus datos se cifran en tu dispositivo antes de enviarse al servidor remoto. Esto significa que, incluso si alguien obtiene acceso al servidor, no podrá leer tus datos sin la frase de contraseña. Asegúrate de recordarla, ya que también será necesaria para descifrar tus datos en otros dispositivos.", + ja: "エンドツーエンド暗号化を有効にすると、データはリモートサーバーへ送信される前にこの端末上で暗号化されます。つまり、たとえ誰かがサーバーへアクセスできても、パスフレーズがなければデータを読むことはできません。他の端末でデータを復号する際にも必要になるため、パスフレーズは必ず覚えておいてください。", + ko: "엔드투엔드 암호화를 활성화하면 데이터가 원격 서버로 전송되기 전에 이 기기에서 암호화됩니다. 즉, 누군가 서버에 접근하더라도 패스프레이즈 없이는 데이터를 읽을 수 없습니다. 다른 기기에서 데이터를 복호화할 때도 필요하므로 패스프레이즈를 반드시 기억해 두세요.", + ru: "При включении сквозного шифрования ваши данные шифруются на устройстве до отправки на удалённый сервер. Это означает, что даже если кто-то получит доступ к серверу, он не сможет прочитать ваши данные без парольной фразы. Обязательно запомните парольную фразу, так как она потребуется для расшифровки данных на других устройствах.", + zh: "启用端到端加密后,数据会先在你的设备上加密,再发送到远程服务器。这意味着即使有人获得了服务器访问权限,没有密码短语也无法读取你的数据。请务必记住你的密码短语,因为在其他设备上解密数据时也需要它。", + "zh-tw": + "啟用端對端加密後,資料會先在你的裝置上完成加密,再傳送到遠端伺服器。這表示即使有人取得伺服器存取權,沒有密語也無法讀取你的資料。請務必記住你的密語,因為其他裝置在解密資料時也需要它。", + }, + "Setup.RemoteE2EE.StronglyRecommendedLine2": { + def: "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.", + es: "Además, ten en cuenta que si estás usando sincronización Peer-to-Peer, esta configuración se utilizará cuando más adelante cambies a otros métodos y te conectes a un servidor remoto.", + ja: "また、Peer-to-Peer 同期を使用している場合でも、将来ほかの方式へ切り替えてリモートサーバーへ接続するときには、この設定が使われます。", + ko: "또한 Peer-to-Peer 동기화를 사용 중이더라도, 나중에 다른 방식으로 전환하여 원격 서버에 연결하면 이 설정이 그대로 사용됩니다.", + ru: "Также обратите внимание: если вы используете синхронизацию Peer-to-Peer, эта конфигурация будет использована, когда вы позже переключитесь на другие методы и подключитесь к удалённому серверу.", + zh: "另外请注意,如果你正在使用 Peer-to-Peer 同步,当你以后切换到其他同步方式并连接远程服务器时,也会使用这组配置。", + "zh-tw": + "另外請注意,即使你目前使用的是 Peer-to-Peer 同步,日後若切換到其他方式並連線到遠端伺服器時,也會沿用這組設定。", + }, + "Setup.RemoteE2EE.StronglyRecommendedTitle": { + def: "Strongly Recommended", + es: "Muy recomendable", + ja: "強く推奨", + ko: "강력 권장", + ru: "Настоятельно рекомендуется", + zh: "强烈推荐", + "zh-tw": "強烈建議", + }, + "Setup.RemoteE2EE.Title": { + def: "End-to-End Encryption", + es: "Cifrado de extremo a extremo", + ja: "エンドツーエンド暗号化", + ko: "엔드투엔드 암호화", + ru: "Сквозное шифрование", + zh: "端到端加密", + "zh-tw": "端對端加密", + }, + "Setup.ScanQRCode.ButtonClose": { + def: "Close this dialog", + es: "Cerrar este diálogo", + ja: "このダイアログを閉じる", + ko: "이 대화 상자 닫기", + ru: "Закрыть это окно", + zh: "关闭此对话框", + "zh-tw": "關閉此對話框", + }, + "Setup.ScanQRCode.Guidance": { + def: "Please follow the steps below to import settings from your existing device.", + es: "Sigue los pasos de abajo para importar los ajustes desde tu dispositivo actual.", + ja: "既存の端末から設定を取り込むには、以下の手順に従ってください。", + ko: "기존 기기에서 설정을 가져오려면 아래 단계를 따라 주세요.", + ru: "Чтобы импортировать настройки с существующего устройства, выполните следующие шаги.", + zh: "请按照以下步骤从现有设备导入设置。", + "zh-tw": "請依照以下步驟,從現有裝置匯入設定。", + }, + "Setup.ScanQRCode.Step1": { + def: "On this device, please keep this Vault open.", + es: "En este dispositivo, mantén este Vault abierto.", + ja: "この端末では、この Vault を開いたままにしてください。", + ko: "이 기기에서는 이 Vault를 계속 열어 두세요.", + ru: "На этом устройстве оставьте данный Vault открытым.", + zh: "在这台设备上,请保持此 Vault 处于打开状态。", + "zh-tw": "在這台裝置上,請保持此 Vault 開啟。", + }, + "Setup.ScanQRCode.Step2": { + def: "On the source device, open Obsidian.", + es: "En el dispositivo de origen, abre Obsidian.", + ja: "元の端末で Obsidian を開きます。", + ko: "원본 기기에서 Obsidian을 엽니다.", + ru: "На исходном устройстве откройте Obsidian.", + zh: "在源设备上打开 Obsidian。", + "zh-tw": "在來源裝置上開啟 Obsidian。", + }, + "Setup.ScanQRCode.Step3": { + def: "On the source device, from the command palette, run the 'Show settings as a QR code' command.", + es: 'En el dispositivo de origen, ejecuta desde la paleta de comandos la orden "Mostrar ajustes como código QR".', + ja: "元の端末でコマンドパレットから「設定を QR コードとして表示」を実行します。", + ko: '원본 기기에서 명령 팔레트를 열고 "설정을 QR 코드로 표시" 명령을 실행합니다.', + ru: "На исходном устройстве в палитре команд выполните команду «Показать настройки как QR-код».", + zh: "在源设备上,从命令面板运行“将设置显示为二维码”命令。", + "zh-tw": "在來源裝置上,從命令面板執行「將設定顯示為 QR 碼」命令。", + }, + "Setup.ScanQRCode.Step4": { + def: "On this device, switch to the camera app or use a QR code scanner to scan the displayed QR code.", + es: "En este dispositivo, cambia a la cámara o usa un escáner QR para escanear el código mostrado.", + ja: "この端末でカメラアプリに切り替えるか QR コードスキャナーを使って、表示された QR コードを読み取ってください。", + ko: "이 기기에서 카메라 앱으로 전환하거나 QR 코드 스캐너를 사용해 표시된 QR 코드를 스캔하세요.", + ru: "На этом устройстве откройте приложение камеры или используйте сканер QR-кодов, чтобы считать показанный QR-код.", + zh: "在这台设备上,切换到相机应用或使用二维码扫描器扫描显示出的二维码。", + "zh-tw": "在這台裝置上切換到相機 App,或使用 QR 碼掃描器掃描顯示出的 QR 碼。", + }, + "Setup.ScanQRCode.Title": { + def: "Scan QR Code", + es: "Escanear código QR", + ja: "QRコードをスキャン", + ko: "QR 코드 스캔", + ru: "Сканировать QR-код", + zh: "扫描二维码", + "zh-tw": "掃描 QR 碼", + }, + "Setup.ShowQRCode": { + def: "Show QR code", + fr: "Afficher le QR code", + he: "הצג קוד QR", + ja: "QRコードを表示", + ko: "QR 코드 표시", + ru: "Показать QR код", + zh: "使用QR码", + }, + "Setup.ShowQRCode.Desc": { + def: "Show QR code to transfer the settings.", + fr: "Afficher le QR code pour transférer les paramètres.", + he: "הצג קוד QR להעברת ההגדרות.", + ja: "設定を転送するためのQRコードを表示します。", + ko: "설정을 전송하기 위한 QR 코드를 표시합니다.", + ru: "Показать QR код для передачи настроек.", + zh: "使用QR码来传递配置", + }, + "Setup.UseSetupURI.ButtonCancel": { + def: "Cancel", + es: "Cancelar", + ja: "キャンセル", + ko: "취소", + ru: "Отмена", + zh: "取消", + "zh-tw": "取消", + }, + "Setup.UseSetupURI.ButtonProceed": { + def: "Test Settings and Continue", + es: "Probar ajustes y continuar", + ja: "設定をテストして続行", + ko: "설정 테스트 후 계속", + ru: "Проверить настройки и продолжить", + zh: "测试设置并继续", + "zh-tw": "測試設定並繼續", + }, + "Setup.UseSetupURI.ErrorFailedToParse": { + def: "Failed to parse the Setup URI. Please check the URI and passphrase.", + es: "No se pudo procesar la URI de configuración. Revisa la URI y la frase de contraseña.", + ja: "Setup URI を解析できませんでした。URI とパスフレーズを確認してください。", + ko: "Setup URI를 해석하지 못했습니다. URI와 패스프레이즈를 확인해 주세요.", + ru: "Не удалось обработать Setup URI. Проверьте URI и парольную фразу.", + zh: "无法解析 Setup URI,请检查 URI 和密码短语。", + "zh-tw": "無法解析 Setup URI,請檢查 URI 與密語。", + }, + "Setup.UseSetupURI.ErrorPassphraseRequired": { + def: "Please enter the vault passphrase.", + es: "Introduce la frase de contraseña del Vault.", + ja: "Vault のパスフレーズを入力してください。", + ko: "Vault 패스프레이즈를 입력해 주세요.", + ru: "Пожалуйста, введите парольную фразу Vault.", + zh: "请输入 Vault 密码短语。", + "zh-tw": "請輸入 Vault 的密語。", + }, + "Setup.UseSetupURI.GuidanceLine1": { + def: "Please enter the Setup URI that was generated during server installation or on another device, along with the vault passphrase.", + es: "Introduce la URI de configuración que se generó durante la instalación del servidor o en otro dispositivo, junto con la frase de contraseña del Vault.", + ja: "サーバーのセットアップ時または別の端末で生成された Setup URI と、Vault のパスフレーズを入力してください。", + ko: "서버 설치 중 또는 다른 기기에서 생성된 Setup URI와 Vault 패스프레이즈를 입력해 주세요.", + ru: "Введите Setup URI, созданный во время установки сервера или на другом устройстве, а также парольную фразу Vault.", + zh: "请输入在服务器安装期间或另一台设备上生成的 Setup URI,以及 Vault 密码短语。", + "zh-tw": "請輸入在伺服器安裝期間或其他裝置上產生的 Setup URI,以及 Vault 的密語。", + }, + "Setup.UseSetupURI.GuidanceLine2": { + def: 'Note that you can generate a new Setup URI by running the "Copy settings as a new Setup URI" command in the command palette.', + es: 'Ten en cuenta que puedes generar una nueva URI de configuración ejecutando el comando "Copiar ajustes como nueva URI de configuración" desde la paleta de comandos.', + ja: "コマンドパレットで「設定を新しい Setup URI としてコピー」を実行すると、新しい Setup URI を生成できます。", + ko: '명령 팔레트에서 "설정을 새 Setup URI로 복사" 명령을 실행하면 새 Setup URI를 생성할 수 있습니다.', + ru: "Новый Setup URI можно создать, выполнив в палитре команд команду «Скопировать настройки как новый Setup URI».", + zh: "你可以在命令面板中运行“将设置复制为新的 Setup URI”命令来生成新的 Setup URI。", + "zh-tw": "你可以在命令面板中執行「將設定複製為新的 Setup URI」命令來產生新的 Setup URI。", + }, + "Setup.UseSetupURI.InvalidInfo": { + def: "The Setup URI is invalid. Please check it and try again.", + es: "La URI de configuración no es válida. Revísala e inténtalo de nuevo.", + ja: "Setup URI が無効です。内容を確認して再試行してください。", + ko: "Setup URI가 올바르지 않습니다. 확인한 뒤 다시 시도해 주세요.", + ru: "Setup URI некорректен. Проверьте его и попробуйте снова.", + zh: "Setup URI 无效,请检查后重试。", + "zh-tw": "Setup URI 無效,請檢查後再試一次。", + }, + "Setup.UseSetupURI.LabelPassphrase": { + def: "Vault passphrase", + es: "Frase de contraseña del Vault", + ja: "Vault のパスフレーズ", + ko: "Vault 패스프레이즈", + ru: "Парольная фраза Vault", + zh: "Vault 密码短语", + "zh-tw": "Vault 密語", + }, + "Setup.UseSetupURI.LabelSetupURI": { + def: "Setup URI", + es: "URI de configuración", + ja: "Setup URI", + ko: "Setup URI", + ru: "Setup URI", + zh: "Setup URI", + "zh-tw": "Setup URI", + }, + "Setup.UseSetupURI.PlaceholderPassphrase": { + def: "Enter your vault passphrase", + es: "Introduce la frase de contraseña del Vault", + ja: "Vault のパスフレーズを入力してください", + ko: "Vault 패스프레이즈를 입력하세요", + ru: "Введите парольную фразу Vault", + zh: "输入 Vault 密码短语", + "zh-tw": "輸入 Vault 密語", + }, + "Setup.UseSetupURI.Title": { + def: "Enter Setup URI", + es: "Introducir URI de configuración", + ja: "Setup URI を入力", + ko: "Setup URI 입력", + ru: "Ввести Setup URI", + zh: "输入 Setup URI", + "zh-tw": "輸入 Setup URI", + }, + "Setup.UseSetupURI.ValidInfo": { + def: "The Setup URI is valid and ready to use.", + es: "La URI de configuración es válida y está lista para usarse.", + ja: "Setup URI は有効で、使用できます。", + ko: "Setup URI가 유효하며 사용할 준비가 되었습니다.", + ru: "Setup URI корректен и готов к использованию.", + zh: "Setup URI 有效,可以使用。", + "zh-tw": "Setup URI 有效,可以使用。", + }, + "Should we keep folders that don't have any files inside?": { + def: "Should we keep folders that don't have any files inside?", + es: "¿Mantener carpetas vacías?", + fr: "Conserver les dossiers ne contenant aucun fichier ?", + he: "האם לשמור תיקיות שאין בהן קבצים?", + ja: "中にファイルがないフォルダーを保持しますか?", + ko: "내부에 파일이 없는 폴더를 유지하시겠습니까?", + ru: "Сохранять папки без файлов?", + zh: "我们是否应该保留内部没有任何文件的文件夹?", + }, + "Should we only check for conflicts when a file is opened?": { + def: "Should we only check for conflicts when a file is opened?", + es: "¿Solo comprobar conflictos al abrir archivo?", + fr: "Ne vérifier les conflits qu'à l'ouverture d'un fichier ?", + he: "האם לבדוק קונפליקטים רק בעת פתיחת קובץ?", + ja: "ファイルを開いたときのみ競合をチェックしますか?", + ko: "파일을 열 때만 충돌을 확인하시겠습니까?", + ru: "Проверять конфликты только при открытии файла?", + zh: "我们是否应该仅在文件打开时检查冲突?", + }, + "Should we prompt you about conflicting files when a file is opened?": { + def: "Should we prompt you about conflicting files when a file is opened?", + es: "¿Notificar sobre conflictos al abrir archivo?", + fr: "Vous demander au sujet des fichiers en conflit à l'ouverture d'un fichier ?", + he: "האם להציג בקשה לגבי קבצים מתנגשים בעת פתיחת קובץ?", + ja: "ファイルを開いたときに競合ファイルについて確認を求めますか?", + ko: "파일을 열 때 충돌하는 파일에 대해 알림을 표시하시겠습니까?", + ru: "Спрашивать о конфликтующих файлах при открытии файла?", + zh: "当文件打开时,是否提示冲突文件?", + }, + "Should we prompt you for every single merge, even if we can safely merge automatcially?": { + def: "Should we prompt you for every single merge, even if we can safely merge automatcially?", + es: "¿Preguntar en cada fusión aunque sea automática?", + fr: "Vous demander pour chaque fusion, même si nous pouvons fusionner automatiquement en toute sécurité ?", + he: "האם להציג בקשת אישור לכל מיזוג יחיד, גם אם ניתן למזג בבטחה אוטומטית?", + ja: "自動的に安全にマージできる場合でも、すべてのマージについて確認を求めますか?", + ko: "안전하게 자동 병합할 수 있는 경우에도 모든 병합에 대해 알림을 받으시겠습니까?", + ru: "Спрашивать о каждом слиянии, даже если мы можем безопасно слить автоматически?", + zh: "即使我们可以安全地自动合并,是否也应该为每一次合并提示您?", + }, + "Show full banner": { + def: "Show full banner", + es: "Mostrar banner completo", + ja: "完全なバナーを表示", + ko: "전체 배너 표시", + ru: "Показывать полный баннер", + zh: "显示完整横幅", + "zh-tw": "顯示完整橫幅", + }, + "Show history": { + def: "Show history", + "zh-tw": "顯示歷程", + }, + "Show icon only": { + def: "Show icon only", + zh: "仅显示图标", + "zh-tw": "僅顯示圖示", + }, + "Show only notifications": { + def: "Show only notifications", + es: "Mostrar solo notificaciones", + fr: "N'afficher que les notifications", + he: "הצג התראות בלבד", + ja: "通知のみ表示", + ko: "알림만 표시", + ru: "Показывать только уведомления", + zh: "仅显示通知", + }, + "Show status as icons only": { + def: "Show status as icons only", + es: "Mostrar estado solo con íconos", + fr: "N'afficher le statut que sous forme d'icônes", + he: "הצג סטטוס כאייקונים בלבד", + ja: "ステータス表示をアイコンのみにする", + ko: "아이콘으로만 상태 표시", + ru: "Показывать статус только иконками", + zh: "仅以图标显示状态", + }, + "Show status icon instead of file warnings banner": { + def: "Show status icon instead of file warnings banner", + es: "Mostrar icono de estado en lugar del banner de advertencia de archivos", + fr: "Afficher l'icône de statut au lieu de la bannière d'avertissements", + he: "הצג אייקון סטטוס במקום פס אזהרות הקובץ", + ja: "ファイル警告バナーの代わりにステータスアイコンを表示", + ko: "파일 경고 배너 대신 상태 아이콘 표시", + ru: "Показывать иконку статуса вместо предупреждения о файлах", + zh: "显示状态图标,而非文件警告横幅", + "zh-tw": "以狀態圖示取代檔案警告橫幅", + }, + "Show status inside the editor": { + def: "Show status inside the editor", + es: "Mostrar estado dentro del editor", + fr: "Afficher le statut dans l'éditeur", + he: "הצג סטטוס בתוך העורך", + ja: "ステータスをエディタ内に表示", + ko: "편집기 내부에 상태 표시", + ru: "Показывать статус внутри редактора", + zh: "在编辑器内显示状态", + }, + "Show status on the status bar": { + def: "Show status on the status bar", + es: "Mostrar estado en la barra de estado", + fr: "Afficher le statut dans la barre d'état", + he: "הצג סטטוס בשורת המצב", + ja: "ステータスバーに、ステータスを表示", + ko: "상태 바에 상태 표시", + ru: "Показывать статус в строке состояния", + zh: "在状态栏上显示状态", + }, + "Show verbose log. Please enable if you report an issue.": { + def: "Show verbose log. Please enable if you report an issue.", + es: "Mostrar registro detallado. Actívelo si reporta un problema.", + fr: "Afficher un journal verbeux. À activer si vous signalez un problème.", + he: "הצג יומן מפורט. אנא הפעל אם אתה מדווח על בעיה.", + ja: "エラー以外の詳細ログ項目も表示する。問題が発生した場合は有効にしてください。", + ko: "자세한 로그를 표시합니다. 문제를 신고하는 경우 활성화해 주세요.", + ru: "Показывать подробный лог. Пожалуйста, включите при сообщении о проблеме.", + zh: "显示详细日志。如果您报告问题,请启用此选项 ", + }, + "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.": + { + def: "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.", + ja: "一部のデバイスで進捗値が異なっています(最大: ${maxProgress}、最小: ${minProgress})。\nこれは一部のデバイスで同期が完了していない可能性を示しており、競合の原因になることがあります。続行する前に、すべてのデバイスが同期済みであることを確認することを強くおすすめします。", + ko: "일부 기기의 진행 값이 다릅니다(최대: ${maxProgress}, 최소: ${minProgress}).\n이는 일부 기기가 동기화를 완료하지 않았음을 의미할 수 있으며, 충돌로 이어질 수 있습니다. 계속 진행하기 전에 모든 기기가 동기화되었는지 반드시 확인하는 것을 강력히 권장합니다.", + ru: "У некоторых устройств различаются значения прогресса (макс.: ${maxProgress}, мин.: ${minProgress}).\nЭто может означать, что некоторые устройства ещё не завершили синхронизацию, что может привести к конфликтам. Настоятельно рекомендуется перед продолжением убедиться, что все устройства синхронизированы.", + zh: "某些设备的进度值不同(最大:${maxProgress},最小:${minProgress})。\n这可能表示某些设备尚未完成同步,从而可能引发冲突。强烈建议在继续之前先确认所有设备都已同步。", + "zh-tw": + "某些裝置的進度值不同(最大:${maxProgress},最小:${minProgress})。\n這可能表示某些裝置尚未完成同步,進而可能導致衝突。強烈建議在繼續之前先確認所有裝置都已同步。", + }, + "Starts synchronisation when a file is saved.": { + def: "Starts synchronisation when a file is saved.", + es: "Inicia sincronización al guardar un archivo", + fr: "Démarre la synchronisation à l'enregistrement d'un fichier.", + he: "מתחיל סנכרון כאשר קובץ נשמר.", + ja: "ファイルが保存されたときに同期を開始します。", + ko: "파일이 저장될 때 동기화를 시작합니다.", + ru: "Запускать синхронизацию при сохранении файла.", + zh: "当文件保存时启动同步 ", + }, + "Stop reflecting database changes to storage files.": { + def: "Stop reflecting database changes to storage files.", + es: "Dejar de reflejar cambios de BD en archivos", + fr: "Arrêter de répercuter les modifications de la base vers les fichiers de stockage.", + he: "הפסק לשקף שינויי מסד נתונים לקבצי אחסון.", + ja: "データベースの変更をストレージファイルに反映させない", + ko: "데이터베이스 변경 사항을 스토리지 파일에 반영하는 것을 중단합니다.", + ru: "Остановить отражение изменений базы данных в файлы хранилища.", + zh: "停止将数据库更改反映到存储文件 ", + }, + "Stop watching for file changes.": { + def: "Stop watching for file changes.", + es: "Dejar de monitorear cambios en archivos", + fr: "Arrêter la surveillance des modifications de fichiers.", + he: "הפסק לעקוב אחר שינויי קבצים.", + ja: "監視の停止", + ko: "파일 변경 사항 감시를 중단합니다.", + ru: "Остановить отслеживание изменений файлов.", + zh: "停止监视文件更改 ", + }, + "Storage -> Database": { + def: "Storage -> Database", + "zh-tw": "儲存空間 -> 資料庫", + }, + "Suppress notification of hidden files change": { + def: "Suppress notification of hidden files change", + es: "Suprimir notificaciones de cambios en archivos ocultos", + fr: "Supprimer les notifications de modification des fichiers cachés", + he: "דחוק התראת שינוי קבצים נסתרים", + ja: "隠しファイルの変更通知を抑制", + ko: "숨겨진 파일 변경 알림 억제", + ru: "Подавлять уведомления об изменении скрытых файлов", + zh: "暂停隐藏文件更改的通知", + }, + "Suspend database reflecting": { + def: "Suspend database reflecting", + es: "Suspender reflejo de base de datos", + fr: "Suspendre la répercussion dans la base", + he: "השהה שיקוף מסד נתונים", + ja: "データベース反映の一時停止", + ko: "데이터베이스 반영 일시 중단", + ru: "Приостановить отражение базы данных", + zh: "暂停数据库反映", + }, + "Suspend file watching": { + def: "Suspend file watching", + es: "Suspender monitorización de archivos", + fr: "Suspendre la surveillance des fichiers", + he: "השהה מעקב קבצים", + ja: "監視の一時停止", + ko: "파일 감시 일시 중단", + ru: "Приостановить отслеживание файлов", + zh: "暂停文件监视", + }, + "Switch to IDB": { + def: "Switch to IDB", + es: "Cambiar a IDB", + ja: "IDB に切り替える", + ko: "IDB로 전환", + ru: "Переключиться на IDB", + zh: "切换到 IDB", + "zh-tw": "切換至 IDB", + }, + "Switch to IndexedDB": { + def: "Switch to IndexedDB", + es: "Cambiar a IndexedDB", + ja: "IndexedDB に切り替える", + ko: "IndexedDB로 전환", + ru: "Переключиться на IndexedDB", + zh: "切换到 IndexedDB", + "zh-tw": "切換至 IndexedDB", + }, + "Sync after merging file": { + def: "Sync after merging file", + es: "Sincronizar tras fusionar archivo", + fr: "Synchroniser après fusion d'un fichier", + he: "סנכרן לאחר מיזוג קובץ", + ja: "ファイルがマージ(統合)された時に同期", + ko: "파일 병합 후 동기화", + ru: "Синхронизировать после слияния файла", + zh: "合并文件后同步", + }, + "Sync automatically after merging files": { + def: "Sync automatically after merging files", + es: "Sincronizar automáticamente tras fusionar archivos", + fr: "Synchroniser automatiquement après fusion des fichiers", + he: "סנכרן אוטומטית לאחר מיזוג קבצים", + ja: "ファイルのマージ後に自動的に同期", + ko: "파일 병합 후 자동으로 동기화", + ru: "Синхронизировать автоматически после слияния файлов", + zh: "合并文件后自动同步", + }, + "Sync Mode": { + def: "Sync Mode", + es: "Modo de sincronización", + fr: "Mode de synchronisation", + he: "מצב סנכרון", + ja: "同期モード", + ko: "동기화 모드", + ru: "Режим синхронизации", + zh: "同步模式", + }, + "Sync on Editor Save": { + def: "Sync on Editor Save", + es: "Sincronizar al guardar en editor", + fr: "Synchroniser à l'enregistrement dans l'éditeur", + he: "סנכרן בשמירת עורך", + ja: "エディタでの保存時に、同期されます", + ko: "편집기 저장 시 동기화", + ru: "Синхронизация при сохранении в редакторе", + zh: "编辑器保存时同步", + }, + "Sync on File Open": { + def: "Sync on File Open", + es: "Sincronizar al abrir archivo", + fr: "Synchroniser à l'ouverture d'un fichier", + he: "סנכרן בפתיחת קובץ", + ja: "ファイルを開いた時に同期", + ko: "파일 열기 시 동기화", + ru: "Синхронизация при открытии файла", + zh: "打开文件时同步", + }, + "Sync on Save": { + def: "Sync on Save", + es: "Sincronizar al guardar", + fr: "Synchroniser à l'enregistrement", + he: "סנכרן בשמירה", + ja: "保存時に同期", + ko: "저장 시 동기화", + ru: "Синхронизация при сохранении", + zh: "保存时同步", + }, + "Sync on Startup": { + def: "Sync on Startup", + es: "Sincronizar al iniciar", + fr: "Synchroniser au démarrage", + he: "סנכרן בהפעלה", + ja: "起動時同期", + ko: "시작 시 동기화", + ru: "Синхронизация при запуске", + zh: "启动时同步", + }, + "Synchronisation utilising journal files. You must have set up an S3/MinIO/R2 compatible object storage.": { + def: "Synchronisation utilising journal files. You must have set up an S3/MinIO/R2 compatible object storage.", + es: "Sincronización mediante archivos de registro. Debe haber configurado un almacenamiento de objetos compatible con S3/MinIO/R2。", + ja: "ジャーナルファイルを利用する同期方式です。S3/MinIO/R2 互換のオブジェクトストレージを事前に構成しておく必要があります。", + ko: "저널 파일을 활용하는 동기화 방식입니다. S3/MinIO/R2 호환 객체 스토리지를 미리 구성해야 합니다。", + ru: "Синхронизация с использованием файлов журнала. Необходимо заранее настроить объектное хранилище, совместимое с S3/MinIO/R2。", + zh: "通过日志文件进行同步。你需要事先部署好兼容 S3/MinIO/R2 的对象存储服务。", + "zh-tw": "透過日誌檔進行同步。你需要事先部署好相容 S3/MinIO/R2 的物件儲存服務。", + }, + "Synchronising files": { + def: "Synchronising files", + es: "Archivos sincronizados", + ja: "同期するファイル", + ko: "동기화할 파일", + ru: "Синхронизируемые файлы", + zh: "同步文件", + "zh-tw": "同步中的檔案", + }, + Syncing: { + def: "Syncing", + es: "Sincronización", + ja: "同期", + ko: "동기화", + ru: "Синхронизация", + zh: "同步中", + "zh-tw": "同步中", + }, + "Target patterns": { + def: "Target patterns", + es: "Patrones objetivo", + ja: "対象パターン", + ko: "대상 패턴", + ru: "Целевые шаблоны", + zh: "目标模式", + "zh-tw": "目標模式", + }, + "Testing only - Resolve file conflicts by syncing newer copies of the file, this can overwrite modified files. Be Warned.": + { + def: "Testing only - Resolve file conflicts by syncing newer copies of the file, this can overwrite modified files. Be Warned.", + es: "Solo pruebas - Resolver conflictos sincronizando copias nuevas (puede sobrescribir modificaciones)", + fr: "Test uniquement - Résout les conflits de fichiers en synchronisant les copies plus récentes, ce qui peut écraser des fichiers modifiés. Prudence.", + he: "לבדיקה בלבד - פתור קונפליקטי קבצים על ידי סנכרון עותקים חדשים יותר של הקובץ, פעולה זו עלולה לדרוס קבצים שונו. היה מוזהר.", + ja: "テスト用 - ファイルの新しいコピーを同期してファイル競合を解決します。これにより変更されたファイルが上書きされる可能性があります。注意してください。", + ko: "테스트 전용 - 파일의 새로운 사본을 동기화하여 파일 충돌을 해결하며, 수정된 파일을 덮어쓸 수 있습니다. 주의하세요.", + ru: "Только для тестирования - разрешать конфликты файлов синхронизацией новых копий.", + zh: "仅供测试 - 通过同步文件的较新副本来解决文件冲突,这可能会覆盖修改过的文件。请注意 ", + }, + "The delay for consecutive on-demand fetches": { + def: "The delay for consecutive on-demand fetches", + es: "Retraso entre obtenciones consecutivas", + fr: "Le délai entre récupérations consécutives à la demande", + he: "העיכוב עבור משיכות לפי דרישה עוקבות", + ja: "連続したオンデマンドフェッチの遅延", + ko: "연속 청크 요청 간 대기 시간", + ru: "Задержка для последовательных запросов по требованию", + zh: "连续按需获取的延迟", + }, + "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.": + { + def: "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.", + ja: "次の承認済みノードにはノード情報がありません:\n- ${missingNodes}\n\nこれは、それらがしばらく接続されていないか、古いバージョンのままになっていることを示しています。\n可能であれば、まずすべてのデバイスを更新することをおすすめします。すでに使用していないデバイスがある場合は、リモートを一度ロックすることで承認済みノードをすべてクリアできます。", + ko: "다음 승인된 노드에는 노드 정보가 없습니다:\n- ${missingNodes}\n\n이는 해당 노드가 한동안 연결되지 않았거나 이전 버전에 머물러 있음을 의미합니다.\n가능하다면 먼저 모든 기기를 업데이트하는 것이 좋습니다. 더 이상 사용하지 않는 기기가 있다면 원격을 한 번 잠가 승인된 노드를 모두 정리할 수 있습니다.", + ru: "Для следующих принятых узлов отсутствует информация об узле:\n- ${missingNodes}\n\nЭто означает, что они давно не подключались или остались на старой версии.\nПо возможности рекомендуется сначала обновить все устройства. Если у вас есть устройства, которые больше не используются, вы можете очистить список всех принятых узлов, один раз заблокировав удалённую базу.", + zh: "以下已接受节点缺少节点信息:\n- ${missingNodes}\n\n这表示它们已有一段时间未连接,或仍停留在较旧版本。\n如有可能,建议先更新所有设备。如果有已不再使用的设备,可以先锁定一次远程端以清除全部已接受节点。", + "zh-tw": + "以下已接受節點缺少節點資訊:\n- ${missingNodes}\n\n這表示它們已有一段時間未連線,或仍停留在較舊版本。\n如有可能,建議先更新所有裝置。如果有已不再使用的裝置,可以先鎖定一次遠端端以清除全部已接受節點。", + }, + "The Hash algorithm for chunk IDs": { + def: "The Hash algorithm for chunk IDs", + es: "Algoritmo hash para IDs de chunks", + fr: "L'algorithme de hachage pour les identifiants de fragments", + he: "אלגוריתם Hash עבור מזהי נתחים", + ja: "チャンクIDのハッシュアルゴリズム", + ko: "청크 ID용 해시 알고리즘", + ru: "Хэш-алгоритм для ID чанков", + zh: "块 ID 的哈希算法(实验性)", + }, + "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.": + { + def: "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.", + "zh-tw": + "IndexedDB 適配器在某些情況下通常能提供較佳效能,但在 LiveSync 模式下已發現可能導致記憶體洩漏。使用 LiveSync 模式時,請改用 IDB 適配器。", + }, + "The maximum duration for which chunks can be incubated within the document. Chunks exceeding this period will graduate to independent chunks.": + { + def: "The maximum duration for which chunks can be incubated within the document. Chunks exceeding this period will graduate to independent chunks.", + es: "Duración máxima para incubar chunks. Excedentes se independizan", + fr: "La durée maximale pendant laquelle les fragments peuvent être incubés dans le document. Les fragments dépassant cette période seront promus en fragments indépendants.", + he: "משך הזמן המקסימלי שנתחים יכולים להישמר זמנית בתוך המסמך. נתחים שחורגים מתקופה זו יהפכו לנתחים עצמאיים.", + ja: "ドキュメント内でチャンクを保持できる最大期間。この期間を超えたチャンクは独立したチャンクに昇格します。", + ko: "변경 기록이 문서에 함께 보관될 수 있는 최대 시간입니다. 초과 시 문서에서 분리되어 개별로 저장됩니다.", + ru: "The maximum duration for which chunks can be incubated within the document. Chunks exceeding this period will graduate to independent chunks.", + zh: "文档中可以孵化的数据块的最大持续时间。超过此时间的数据块将成为独立数据块 ", + }, + "The maximum number of chunks that can be incubated within the document. Chunks exceeding this number will immediately graduate to independent chunks.": + { + def: "The maximum number of chunks that can be incubated within the document. Chunks exceeding this number will immediately graduate to independent chunks.", + es: "Número máximo de chunks que pueden incubarse en el documento. Excedentes se independizan", + fr: "Le nombre maximum de fragments pouvant être incubés dans le document. Les fragments dépassant ce nombre seront immédiatement promus en fragments indépendants.", + he: "המספר המקסימלי של נתחים שיכולים להישמר זמנית בתוך המסמך. נתחים שחורגים ממספר זה יהפכו מיד לנתחים עצמאיים.", + ja: "ドキュメント内で保持できるチャンクの最大数。この数を超えたチャンクは即座に独立したチャンクに昇格します。", + ko: "문서 안에 임시로 보관할 수 있는 변경 기록의 최대 개수입니다. 이 수를 초과하면 즉시 독립된 청크로 분리되어 저장됩니다.", + ru: "The maximum number of chunks that can be incubated within the document. Chunks exceeding this number will immediately graduate to independent chunks.", + zh: "文档中可以孵化的数据块的最大数量。超过此数量的数据块将立即成为独立数据块 ", + }, + "The maximum total size of chunks that can be incubated within the document. Chunks exceeding this size will immediately graduate to independent chunks.": + { + def: "The maximum total size of chunks that can be incubated within the document. Chunks exceeding this size will immediately graduate to independent chunks.", + es: "Tamaño total máximo de chunks incubados. Excedentes se independizan", + fr: "La taille totale maximale des fragments pouvant être incubés dans le document. Les fragments dépassant cette taille seront immédiatement promus en fragments indépendants.", + he: "הגודל הכולל המקסימלי של נתחים שיכולים להישמר זמנית בתוך המסמך. נתחים שחורגים מגודל זה יהפכו מיד לנתחים עצמאיים.", + ja: "ドキュメント内で保持できるチャンクの最大合計サイズ。このサイズを超えたチャンクは即座に独立したチャンクに昇格します。", + ko: "문서 안에 임시로 보관할 수 있는 변경 기록의 전체 크기 제한입니다. 초과 시 자동으로 분리됩니다.", + ru: "The maximum total size of chunks that can be incubated within the document. Chunks exceeding this size will immediately graduate to independent chunks.", + zh: "文档中可以孵化的数据块的最大总大小。超过此大小的数据块将立即成为独立数据块 ", + }, + "The minimum interval for automatic synchronisation on event.": { + def: "The minimum interval for automatic synchronisation on event.", + fr: "L'intervalle minimum pour la synchronisation automatique sur événement.", + he: "מרווח הזמן המינימלי לסנכרון אוטומטי על אירוע.", + ja: "イベント発生時の自動同期における最小間隔です。", + ko: "이벤트 발생 시 자동 동기화의 최소 간격입니다.", + ru: "Минимальный интервал автоматической синхронизации по событию.", + zh: "基于事件自动同步的最小间隔。", + "zh-tw": "事件觸發自動同步的最小間隔。", + }, + "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.": + { + def: "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.", + es: "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。", + ja: "この機能では端末同士を直接同期できます。サーバーは不要ですが、同期を行うには両端末が同時にオンラインである必要があり、一部機能は制限されます。インターネット接続はシグナリング(ピア検出)にのみ必要で、データ転送自体には使われません。", + ko: "이 기능은 장치 간 직접 동기화를 제공합니다. 서버는 필요 없지만 동기화가 이루어지려면 두 장치가 동시에 온라인 상태여야 하며 일부 기능은 제한될 수 있습니다. 인터넷 연결은 시그널링(피어 감지)에만 필요하며 데이터 전송 자체에는 필요하지 않습니다。", + ru: "Эта функция обеспечивает прямую синхронизацию между устройствами. Сервер не требуется, но для синхронизации оба устройства должны быть одновременно в сети, а некоторые функции могут быть ограничены. Подключение к Интернету нужно только для сигнализации (обнаружения пиров), а не для передачи данных。", + zh: "此功能可在设备之间直接同步,无需服务器;但同步时两台设备必须同时在线,且部分功能可能受限。互联网连接仅用于信令(发现对端),不用于数据传输。", + "zh-tw": + "此功能可在裝置之間直接同步,無需伺服器;但同步時兩台裝置必須同時在線,且部分功能可能受限。網際網路連線僅用於訊號交換(偵測對端),不用於資料傳輸。", + }, + "This is an advanced option for users who do not have a URI or who wish to configure detailed settings.": { + def: "This is an advanced option for users who do not have a URI or who wish to configure detailed settings.", + es: "Esta es una opción avanzada para usuarios que no disponen de un URI o que desean configurar parámetros detallados。", + ja: "URI を持っていない場合や、詳細設定を手動で行いたいユーザー向けの上級者オプションです。", + ko: "URI가 없거나 세부 설정을 직접 구성하려는 사용자를 위한 고급 옵션입니다。", + ru: "Это расширенный вариант для пользователей, у которых нет URI или которые хотят вручную задать подробные параметры。", + zh: "这是面向没有 URI 或希望手动配置详细参数的高级选项。", + "zh-tw": "這是面向沒有 URI 或希望手動設定詳細參數的進階選項。", + }, + "This is the most suitable synchronisation method for the design. All functions are available. You must have set up a CouchDB instance.": + { + def: "This is the most suitable synchronisation method for the design. All functions are available. You must have set up a CouchDB instance.", + es: "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。", + ja: "この設計に最も適した同期方式です。すべての機能が利用できます。CouchDB インスタンスを事前に構成しておく必要があります。", + ko: "이 설계에 가장 적합한 동기화 방식입니다. 모든 기능을 사용할 수 있습니다. CouchDB 인스턴스를 미리 구성해야 합니다。", + ru: "Это наиболее подходящий для данной архитектуры способ синхронизации. Доступны все функции. Необходимо заранее развернуть экземпляр CouchDB。", + zh: "这是最符合当前设计的同步方式,所有功能均可用。你需要事先部署好 CouchDB 实例。", + "zh-tw": "這是最符合目前設計的同步方式,所有功能皆可使用。你需要事先部署好 CouchDB 實例。", + }, + "This passphrase will not be copied to another device. It will be set to `Default` until you configure it again.": { + def: "This passphrase will not be copied to another device. It will be set to `Default` until you configure it again.", + es: "Esta frase no se copia a otros dispositivos. Usará `Default` hasta reconfigurar", + fr: "Cette phrase secrète ne sera pas copiée vers un autre appareil. Elle sera définie à `Default` jusqu'à ce que vous la configuriez à nouveau.", + he: "ביטוי סיסמה זה לא יועתק למכשיר אחר. הוא יוגדר ל-`Default` עד שתגדיר אותו שוב.", + ja: "このパスフレーズは他のデバイスにコピーされません。再度設定するまで`Default`に設定されます。", + ko: "이 패스프레이즈는 다른 기기로 복사되지 않습니다. 다시 구성할 때까지 `기본값`으로 설정됩니다.", + ru: "This passphrase will not be copied to another device. It will be set to `Default` until you configure it again.", + zh: "此密码不会复制到另一台设备。在您再次配置之前,它将设置为 `Default` ", + }, + "This will recreate chunks for all files. If there were missing chunks, this may fix the errors.": { + def: "This will recreate chunks for all files. If there were missing chunks, this may fix the errors.", + es: "Esto recreará los fragmentos de todos los archivos. Si faltaban fragmentos, esto puede corregir los errores.", + ja: "すべてのファイルについてチャンクを再作成します。欠損しているチャンクがあった場合、エラーが解消される可能性があります。", + ko: "모든 파일의 청크를 다시 생성합니다. 누락된 청크가 있었다면 이 작업으로 오류가 해결될 수 있습니다.", + ru: "Это пересоздаст чанки для всех файлов. Если какие-то чанки отсутствовали, это может исправить ошибки.", + zh: "这会为所有文件重新生成 chunks。如果之前存在缺失的 chunks,这可能修复相关错误。", + "zh-tw": "這會為所有檔案重新建立 chunks。若先前有遺失的 chunks,這可能修復相關錯誤。", + }, + "Transfer Tweak": { + def: "Transfer Tweak", + es: "Ajustes de transferencia", + ja: "転送の調整", + ko: "전송 조정", + ru: "Настройки передачи", + }, + "TweakMismatchResolve.Action.DisableAutoAcceptCompatible": { + def: "Disable auto-accept", + }, + "TweakMismatchResolve.Action.Dismiss": { + def: "Dismiss", + fr: "Ignorer", + he: "דחה", + ja: "無視", + ko: "무시", + ru: "Отмена", + zh: "Dismiss", + }, + "TweakMismatchResolve.Action.EnableAutoAcceptCompatible": { + def: "Enable auto-accept", + }, + "TweakMismatchResolve.Action.UseConfigured": { + def: "Use configured settings", + fr: "Utiliser les paramètres configurés", + he: "השתמש בהגדרות המוגדרות", + ja: "設定済みの設定を使用", + ko: "구성된 설정 사용", + ru: "Использовать настроенные параметры", + zh: "Use configured settings", + }, + "TweakMismatchResolve.Action.UseMine": { + def: "Update remote database settings", + fr: "Mettre à jour les paramètres de la base distante", + he: "עדכן הגדרות מסד הנתונים המרוחד", + ja: "リモートデータベースの設定を更新", + ko: "원격 데이터베이스 설정 업데이트", + ru: "Обновить настройки удалённой базы данных", + zh: "Update remote database settings", + }, + "TweakMismatchResolve.Action.UseMineAcceptIncompatible": { + def: "Update remote database settings but keep as is", + fr: "Mettre à jour la base distante mais garder en l'état", + he: "עדכן הגדרות מסד הנתונים המרוחד אך השאר כפי שהוא", + ja: "リモートデータベースの設定を更新するがそのまま維持", + ko: "원격 데이터베이스 설정 업데이트하지만 그대로 유지", + ru: "Обновить настройки, но оставить как есть", + zh: "Update remote database settings but keep as is", + }, + "TweakMismatchResolve.Action.UseMineWithRebuild": { + def: "Update remote database settings and rebuild again", + fr: "Mettre à jour la base distante et reconstruire", + he: "עדכן הגדרות מסד הנתונים המרוחד ובנה מחדש", + ja: "リモートデータベースの設定を更新して再構築", + ko: "원격 데이터베이스 설정 업데이트하고 다시 재구축", + ru: "Обновить настройки и перестроить снова", + zh: "Update remote database settings and rebuild again", + }, + "TweakMismatchResolve.Action.UseRemote": { + def: "Apply settings to this device", + fr: "Appliquer les paramètres à cet appareil", + he: "החל הגדרות על מכשיר זה", + ja: "このデバイスに設定を適用", + ko: "이 기기에 설정 적용", + ru: "Применить настройки к этому устройству", + zh: "Apply settings to this device", + }, + "TweakMismatchResolve.Action.UseRemoteAcceptIncompatible": { + def: "Apply settings to this device, but and ignore incompatibility", + fr: "Appliquer à cet appareil, mais ignorer l'incompatibilité", + he: "החל הגדרות על מכשיר זה, אך התעלם מאי-תאימות", + ja: "このデバイスに設定を適用し、非互換性を無視", + ko: "이 기기에 설정 적용하지만 호환성 문제 무시", + ru: "Применить настройки, но игнорировать несовместимость", + zh: "Apply settings to this device, but and ignore incompatibility", + }, + "TweakMismatchResolve.Action.UseRemoteWithRebuild": { + def: "Apply settings to this device, and fetch again", + fr: "Appliquer à cet appareil et récupérer à nouveau", + he: "החל הגדרות על מכשיר זה ומשוך שוב", + ja: "このデバイスに設定を適用し、再フェッチ", + ko: "이 기기에 설정 적용하고 다시 가져오기", + ru: "Применить настройки и загрузить снова", + zh: "Apply settings to this device, and fetch again", + }, + "TweakMismatchResolve.Message.AutoAcceptCompatibleUndefined": { + def: "\nIt appears that the settings differ for each device. You can now automatically apply compatible changes to these configurations.\nWould you like to enable this `auto-accept` setting?", + }, + "TweakMismatchResolve.Message.Main": { + def: "\nThe settings in the remote database are as follows. These values are configured by other devices, which are synchronised with this device at least once.\n\nIf you want to use these settings, please select Use configured settings.\nIf you want to keep the settings of this device, please select Dismiss.\n\n${table}\n\n>[!TIP]\n> If you want to synchronise all settings, please use `Sync settings via markdown` after applying minimal configuration with this feature.\n\n${additionalMessage}", + fr: "\nLes paramètres de la base distante sont les suivants. Ces valeurs sont configurées par d'autres appareils, synchronisés au moins une fois avec celui-ci.\n\nPour utiliser ces paramètres, sélectionnez Utiliser les paramètres configurés.\nPour conserver les paramètres de cet appareil, sélectionnez Ignorer.\n\n${table}\n\n>[!ASTUCE]\n> Pour synchroniser tous les paramètres, utilisez « Synchroniser les paramètres via markdown » après application de la configuration minimale avec cette fonctionnalité.\n\n${additionalMessage}", + he: "\nההגדרות במסד הנתונים המרוחד הן כדלקמן. ערכים אלה הוגדרו על ידי מכשירים אחרים, אשר סונכרנו עם מכשיר זה לפחות פעם אחת.\n\nאם ברצונך להשתמש בהגדרות אלה, אנא בחר %{TweakMismatchResolve.Action.UseConfigured}.\nאם ברצונך לשמור את הגדרות מכשיר זה, אנא בחר %{TweakMismatchResolve.Action.Dismiss}.\n\n${table}\n\n>[!TIP]\n> אם ברצונך לסנכרן את כל ההגדרות, אנא השתמש ב-`סנכרון הגדרות דרך Markdown` לאחר החלת תצורה מינימלית עם תכונה זו.\n\n${additionalMessage}", + ja: "\nリモートデータベースの設定は以下の通りです。これらの値は、このデバイスと少なくとも1回同期された他のデバイスによって設定されています。\n\nこれらの設定を使用する場合は、設定済みの設定を使用を選択してください。\nこのデバイスの設定を維持する場合は、無視を選択してください。\n\n${table}\n\n>[!TIP]\n> すべての設定を同期したい場合は、この機能で最小限の設定を適用した後、`Sync settings via markdown`を使用してください。\n\n${additionalMessage}", + ko: "\n원격 데이터베이스의 설정은 다음과 같습니다. 이 값들은 이 기기와 최소 한 번 동기화된 다른 기기에서 구성된 것입니다.\n\n이 설정을 사용하려면 구성된 설정 사용를 선택해 주세요.\n이 기기의 설정을 유지하려면 무시를 선택해 주세요.\n\n${table}\n\n>[!TIP]\n> 모든 설정을 동기화하려면 이 기능으로 최소 구성을 적용한 후 `마크다운을 통한 설정 동기화`를 사용해 주세요.\n\n${additionalMessage}", + ru: "Настройки в удалённой базе данных следующие. Эти значения настроены другими устройствами.", + zh: "\nThe settings in the remote database are as follows. These values are configured by other devices, which are synchronised with this device at least once.\n\nIf you want to use these settings, please select Use configured settings.\nIf you want to keep the settings of this device, please select Dismiss.\n\n${table}\n\n>[!TIP]\n> If you want to synchronise all settings, please use `Sync settings via markdown` after applying minimal configuration with this feature.\n\n${additionalMessage}", + }, + "TweakMismatchResolve.Message.MainTweakResolving": { + def: "Your configuration has not been matched with the one on the remote server.\n\nFollowing configuration should be matched:\n\n${table}\n\nLet us know your decision.\n\n${additionalMessage}", + fr: "Votre configuration ne correspond pas à celle du serveur distant.\n\nLa configuration suivante devrait correspondre :\n\n${table}\n\nFaites-nous part de votre décision.\n\n${additionalMessage}", + he: "התצורה שלך אינה תואמת לזו שבשרת המרוחד.\n\nיש להתאים את התצורות הבאות:\n\n${table}\n\nאנא הודע לנו על החלטתך.\n\n${additionalMessage}", + ja: "設定がリモートサーバーの設定と一致しません。\n\n以下の設定が一致している必要があります:\n\n${table}\n\n判断をお知らせください。\n\n${additionalMessage}", + ko: "구성이 원격 서버의 것과 일치하지 않습니다.\n\n다음 구성이 일치해야 합니다:\n\n${table}\n\n결정을 알려주세요.\n\n${additionalMessage}", + ru: "Ваша конфигурация не совпадает с удалённым сервером.", + zh: "Your configuration has not been matched with the one on the remote server.\n\nFollowing configuration should be matched:\n\n${table}\n\nLet us know your decision.\n\n${additionalMessage}", + }, + "TweakMismatchResolve.Message.mineUpdated": { + def: "The device configuration have been adjusted.", + }, + "TweakMismatchResolve.Message.remoteUpdated": { + def: "The configuration stored remotely has been updated.", + }, + "TweakMismatchResolve.Message.UseRemote.WarningRebuildRecommended": { + def: "\n>[!NOTICE]\n> Some changes are compatible but may consume extra storage and transfer volumes. A rebuild is recommended. However, a rebuild may not be performed at present, but may be implemented in future maintenance.\n> ***Please ensure that you have time and are connected to a stable network to apply!***", + fr: "\n>[!AVIS]\n> Certains changements sont compatibles mais peuvent consommer du stockage et du trafic supplémentaires. Une reconstruction est recommandée. Cependant, elle peut ne pas être effectuée maintenant, mais pourra l'être lors d'une maintenance future.\n> ***Assurez-vous d'avoir du temps et une connexion stable pour appliquer !***", + he: "\n>[!NOTICE]\n> חלק מהשינויים תואמים אך עלולים לצרוך אחסון ותעבורה נוספים. מומלצת בנייה מחדש. עם זאת, ייתכן שבנייה מחדש לא תתבצע כעת, אך תיושם בתחזוקה עתידית.\n> ***ודא שיש לך זמן ושאתה מחובר לרשת יציבה לפני ההחלה!***", + ja: "\n>[!NOTICE]\n> 一部の変更は互換性がありますが、追加のストレージと転送量を消費する可能性があります。再構築をお勧めします。ただし、再構築は現時点では実行されない場合がありますが、将来のメンテナンスで実装される可能性があります。\n> ***適用には時間と安定したネットワーク接続が必要です!***", + ko: "\n>[!NOTICE]\n> 일부 변경사항은 호환 가능하지만 추가 스토리지 및 전송량을 소모할 수 있습니다. 재구축을 권장합니다. 하지만 현재 재구축을 수행하지 않더라도 향후 유지보수에서 구현될 수 있습니다.\n> ***시간적 여유가 있고 안정적인 네트워크에 연결된 상태에서 적용해 주세요!***", + ru: "Некоторые изменения совместимы, но могут потребовать дополнительного хранилища. Рекомендуется перестроение.", + zh: "\n>[!NOTICE]\n> Some changes are compatible but may consume extra storage and transfer volumes. A rebuild is recommended. However, a rebuild may not be performed at present, but may be implemented in future maintenance.\n> ***Please ensure that you have time and are connected to a stable network to apply!***", + }, + "TweakMismatchResolve.Message.UseRemote.WarningRebuildRequired": { + def: "\n>[!WARNING]\n> Some remote configurations are not compatible with the local database of this device. Rebuilding the local database will be required.\n> ***Please ensure that you have time and are connected to a stable network to apply!***", + fr: "\n>[!AVERTISSEMENT]\n> Certaines configurations distantes ne sont pas compatibles avec la base locale de cet appareil. Une reconstruction de la base locale sera requise.\n> ***Assurez-vous d'avoir du temps et une connexion stable pour appliquer !***", + he: "\n>[!WARNING]\n> חלק מהתצורות המרוחקות אינן תואמות למסד הנתונים המקומי של מכשיר זה. נדרשת בנייה מחדש של מסד הנתונים המקומי.\n> ***ודא שיש לך זמן ושאתה מחובר לרשת יציבה לפני ההחלה!***", + ja: "\n>[!WARNING]\n> 一部のリモート設定はこのデバイスのローカルデータベースと互換性がありません。ローカルデータベースの再構築が必要です。\n> ***適用には時間と安定したネットワーク接続が必要です!***", + ko: "\n>[!WARNING]\n> 일부 원격 구성이 이 기기의 로컬 데이터베이스와 호환되지 않습니다. 로컬 데이터베이스 재구축이 필요합니다.\n> ***시간적 여유가 있고 안정적인 네트워크에 연결된 상태에서 적용해 주세요!***", + ru: "Некоторые удалённые конфигурации несовместимы с локальной базой данных. Требуется перестроение.", + zh: "\n>[!WARNING]\n> Some remote configurations are not compatible with the local database of this device. Rebuilding the local database will be required.\n> ***Please ensure that you have time and are connected to a stable network to apply!***", + }, + "TweakMismatchResolve.Message.WarningIncompatibleRebuildRecommended": { + def: "\n>[!NOTICE]\n> We have detected that some of the values are different to make incompatible the local database with the remote database.\n> Some changes are compatible but may consume extra storage and transfer volumes. A rebuild is recommended. However, a rebuild may not be performed at present, but may be implemented in future maintenance.\n> If you want to rebuild, it takes a few minutes or more. **Make sure it is safe to perform it now.**", + fr: "\n>[!AVIS]\n> Nous avons détecté que certaines valeurs diffèrent et rendent la base locale incompatible avec la base distante.\n> Certains changements sont compatibles mais peuvent consommer du stockage et du trafic supplémentaires. Une reconstruction est recommandée. Cependant, elle peut ne pas être effectuée maintenant, mais pourra l'être lors d'une maintenance future.\n> Si vous souhaitez reconstruire, cela prend quelques minutes ou plus. **Assurez-vous qu'il est sûr de le faire maintenant.**", + he: "\n>[!NOTICE]\n> זיהינו שחלק מהערכים שונים, מה שגורם לאי-תאימות בין מסד הנתונים המקומי למרוחד.\n> חלק מהשינויים תואמים אך עלולים לצרוך אחסון ותעבורה נוספים. מומלצת בנייה מחדש. עם זאת, ייתכן שבנייה מחדש לא תתבצע כעת, אך תיושם בתחזוקה עתידית.\n> אם ברצונך לבנות מחדש, הדבר ייקח כמה דקות או יותר. **ודא שבטוח לבצע זאת עכשיו.**", + ja: "\n>[!NOTICE]\n> ローカルデータベースとリモートデータベースの非互換性を引き起こす値の違いが検出されました。\n> 一部の変更は互換性がありますが、追加のストレージと転送量を消費する可能性があります。再構築をお勧めします。ただし、再構築は現時点では実行されない場合がありますが、将来のメンテナンスで実装される可能性があります。\n> 再構築を行う場合は数分以上かかります。**今実行しても安全か確認してください。**", + ko: "\n>[!NOTICE]\n> 로컬 데이터베이스와 원격 데이터베이스가 호환되지 않도록 만드는 값들이 다른 것을 감지했습니다.\n> 일부 변경사항은 호환 가능하지만 추가 스토리지 및 전송량을 소모할 수 있습니다. 재구축을 권장합니다. 하지만 현재 재구축을 수행하지 않더라도 향후 유지보수에서 구현될 수 있습니다.\n> 재구축을 원한다면 몇 분 이상 소요됩니다. **지금 수행해도 안전한지 확인해 주세요.**", + ru: "Обнаружены значения, несовместимые с удалённой базой данных. Рекомендуется перестроение.", + zh: "\n>[!NOTICE]\n> We have detected that some of the values are different to make incompatible the local database with the remote database.\n> Some changes are compatible but may consume extra storage and transfer volumes. A rebuild is recommended. However, a rebuild may not be performed at present, but may be implemented in future maintenance.\n> If you want to rebuild, it takes a few minutes or more. **Make sure it is safe to perform it now.**", + }, + "TweakMismatchResolve.Message.WarningIncompatibleRebuildRequired": { + def: "\n>[!WARNING]\n> We have detected that some of the values are different to make incompatible the local database with the remote database.\n> Either local or remote rebuilds are required. Both of them takes a few minutes or more. **Make sure it is safe to perform it now.**", + fr: "\n>[!AVERTISSEMENT]\n> Nous avons détecté que certaines valeurs diffèrent et rendent la base locale incompatible avec la base distante.\n> Une reconstruction locale ou distante est nécessaire. L'une comme l'autre prend quelques minutes ou plus. **Assurez-vous qu'il est sûr de le faire maintenant.**", + he: "\n>[!WARNING]\n> זיהינו שחלק מהערכים שונים, מה שגורם לאי-תאימות בין מסד הנתונים המקומי למרוחד.\n> נדרשת בנייה מחדש של המסד המקומי או המרוחד. שניהם ייקחו כמה דקות או יותר. **ודא שבטוח לבצע זאת עכשיו.**", + ja: "\n>[!WARNING]\n> ローカルデータベースとリモートデータベースの非互換性を引き起こす値の違いが検出されました。\n> ローカルまたはリモートの再構築が必要です。どちらも数分以上かかります。**今実行しても安全か確認してください。**", + ko: "\n>[!WARNING]\n> 로컬 데이터베이스와 원격 데이터베이스가 호환되지 않도록 만드는 값들이 다른 것을 감지했습니다.\n> 로컬 또는 원격 재구축이 필요합니다. 둘 다 몇 분 이상 소요됩니다. **지금 수행해도 안전한지 확인해 주세요.**", + ru: "Обнаружены значения, несовместимые с удалённой базой данных. Требуется перестроение.", + zh: "\n>[!WARNING]\n> We have detected that some of the values are different to make incompatible the local database with the remote database.\n> Either local or remote rebuilds are required. Both of them takes a few minutes or more. **Make sure it is safe to perform it now.**", + }, + "TweakMismatchResolve.Table": { + def: "| Value name | This device | On Remote |\n|: --- |: ---- :|: ---- :|\n${rows}\n\n", + fr: "| Nom de la valeur | Cet appareil | Sur le distant |\n|: --- |: ---- :|: ---- :|\n${rows}\n\n", + he: "| שם ערך | מכשיר זה | מרוחד |\n|: --- |: ---- :|: ---- :|\n${rows}\n\n", + ja: "| 値の名前 | このデバイス | リモート |\n|: --- |: ---- :|: ---- :|\n${rows}\n\n", + ko: "| 값 이름 | 이 기기 | 원격 |\n|: --- |: ---- :|: ---- :|\n${rows}\n\n", + ru: "| Имя значения | Это устройство | На удалённом |\n|: --- |: ---- :|: ---- :|", + zh: "| Value name | This device | On Remote |\n|: --- |: ---- :|: ---- :|\n${rows}\n\n", + }, + "TweakMismatchResolve.Table.Row": { + def: "| ${name} | ${self} | ${remote} |", + fr: "| ${name} | ${self} | ${remote} |", + he: "| ${name} | ${self} | ${remote} |", + ja: "| ${name} | ${self} | ${remote} |", + ko: "| ${name} | ${self} | ${remote} |", + ru: "| name | self | remote |", + zh: "| ${name} | ${self} | ${remote} |", + }, + "TweakMismatchResolve.Title": { + def: "Configuration Mismatch Detected", + fr: "Incohérence de configuration détectée", + he: "זוהתה אי-התאמה בתצורה", + ja: "設定の不一致が検出されました", + ko: "구성 불일치 감지", + ru: "Обнаружено несоответствие конфигурации", + zh: "Configuration Mismatch Detected", + }, + "TweakMismatchResolve.Title.AutoAcceptCompatible": { + def: "Auto-Accept Available", + }, + "TweakMismatchResolve.Title.TweakResolving": { + def: "Configuration Mismatch Detected", + fr: "Incohérence de configuration détectée", + he: "זוהתה אי-התאמה בתצורה", + ja: "設定の不一致が検出されました", + ko: "구성 불일치 감지", + ru: "Обнаружено несоответствие конфигурации", + zh: "Configuration Mismatch Detected", + }, + "TweakMismatchResolve.Title.UseRemoteConfig": { + def: "Use Remote Configuration", + fr: "Utiliser la configuration distante", + he: "השתמש בתצורה המרוחקת", + ja: "リモート設定を使用", + ko: "원격 구성 사용", + ru: "Использовать удалённую конфигурацию", + zh: "Use Remote Configuration", + }, + "Ui.Common.Signal.Caution": { + def: "CAUTION", + zh: "注意", + }, + "Ui.Common.Signal.Danger": { + def: "DANGER", + zh: "危险", + }, + "Ui.Common.Signal.Notice": { + def: "NOTICE", + zh: "提示", + }, + "Ui.Common.Signal.Warning": { + def: "WARNING", + zh: "警告", + }, + "Ui.Settings.Advanced.LocalDatabaseTweak": { + def: "Local Database Tweak", + zh: "本地数据库调整", + }, + "Ui.Settings.Advanced.MemoryCache": { + def: "Memory Cache", + zh: "内存缓存", + }, + "Ui.Settings.Advanced.TransferTweak": { + def: "Transfer Tweak", + zh: "传输调整", + }, + "Ui.Settings.Common.Analyse": { + def: "Analyse", + zh: "分析", + }, + "Ui.Settings.Common.Back": { + def: "Back", + zh: "返回", + }, + "Ui.Settings.Common.Check": { + def: "Check", + zh: "检查", + }, + "Ui.Settings.Common.Configure": { + def: "Configure", + zh: "配置", + }, + "Ui.Settings.Common.Continue": { + def: "Continue", + zh: "继续", + }, + "Ui.Settings.Common.Delete": { + def: "Delete", + zh: "删除", + }, + "Ui.Settings.Common.Fetch": { + def: "Fetch", + zh: "获取", + }, + "Ui.Settings.Common.Lock": { + def: "Lock", + zh: "锁定", + }, + "Ui.Settings.Common.Merge": { + def: "Merge", + zh: "合并", + }, + "Ui.Settings.Common.Open": { + def: "Open", + zh: "打开", + }, + "Ui.Settings.Common.Overwrite": { + def: "Overwrite", + zh: "覆盖", + }, + "Ui.Settings.Common.Perform": { + def: "Perform", + zh: "执行", + }, + "Ui.Settings.Common.ResetAll": { + def: "Reset all", + zh: "全部重置", + }, + "Ui.Settings.Common.ResolveAll": { + def: "Resolve All", + zh: "全部解决", + }, + "Ui.Settings.Common.Scan": { + def: "Scan", + zh: "扫描", + }, + "Ui.Settings.Common.Send": { + def: "Send", + zh: "发送", + }, + "Ui.Settings.Common.Use": { + def: "Use", + zh: "使用", + }, + "Ui.Settings.Common.VerifyAll": { + def: "Verify all", + zh: "全部校验", + }, + "Ui.Settings.CustomizationSync.OpenDesc": { + def: "Open the dialog", + zh: "打开此对话框", + }, + "Ui.Settings.CustomizationSync.Panel": { + def: "Customization Sync", + zh: "自定义同步", + }, + "Ui.Settings.CustomizationSync.WarnChangeDeviceName": { + def: "We cannot change the device name while this feature is enabled. Please disable this feature to change the device name.", + zh: "启用此功能时无法修改设备名称。请先关闭此功能,再修改设备名称。", + }, + "Ui.Settings.CustomizationSync.WarnSetDeviceName": { + def: "Please set device name to identify this device. This name should be unique among your devices. While not configured, we cannot enable this feature.", + zh: "请先设置用于标识此设备的设备名称。该名称应在你的设备之间保持唯一。未设置前无法启用此功能。", + }, + "Ui.Settings.Hatch.AnalyseDatabaseUsage": { + def: "Analyse database usage", + zh: "分析数据库使用情况", + }, + "Ui.Settings.Hatch.AnalyseDatabaseUsageDesc": { + def: "Analyse database usage and generate a TSV report for diagnosis yourself. You can paste the generated report with any spreadsheet you like.", + zh: "分析数据库使用情况,并生成 TSV 报告供你自行诊断。你可以将生成的报告粘贴到任意电子表格工具中查看。", + }, + "Ui.Settings.Hatch.BackToNonConfigured": { + def: "Back to non-configured", + zh: "返回未配置状态", + }, + "Ui.Settings.Hatch.ConvertNonObfuscated": { + def: "Check and convert non-path-obfuscated files", + zh: "检查并转换未进行路径混淆的文件", + }, + "Ui.Settings.Hatch.ConvertNonObfuscatedDesc": { + def: "Check the local database for files that were stored without path obfuscation and convert them when needed.", + zh: "检查本地数据库中未按路径混淆方式存储的文件,并在需要时将其转换为正确格式。", + }, + "Ui.Settings.Hatch.CopyIssueReport": { + def: "Copy Report to clipboard", + zh: "复制报告到剪贴板", + }, + "Ui.Settings.Hatch.DatabaseLabel": { + def: "Database: ${details}", + zh: "数据库:${details}", + }, + "Ui.Settings.Hatch.DatabaseToStorage": { + def: "Database -> Storage", + zh: "数据库 -> 存储", + }, + "Ui.Settings.Hatch.DeleteCustomizationSyncData": { + def: "Delete all customization sync data", + zh: "删除所有自定义同步数据", + }, + "Ui.Settings.Hatch.GeneratedReport": { + def: "Generated report", + zh: "已生成的报告", + }, + "Ui.Settings.Hatch.Missing": { + def: "Missing", + zh: "缺失", + }, + "Ui.Settings.Hatch.ModifiedSize": { + def: "Modified: ${modified}, Size: ${size}", + zh: "修改时间:${modified},大小:${size}", + }, + "Ui.Settings.Hatch.ModifiedSizeActual": { + def: "Modified: ${modified}, Size: ${size} (actual size: ${actualSize})", + zh: "修改时间:${modified},大小:${size}(实际大小:${actualSize})", + }, + "Ui.Settings.Hatch.PrepareIssueReport": { + def: "Prepare the 'report' to create an issue", + zh: "准备用于提交问题的报告", + }, + "Ui.Settings.Hatch.RecoveryAndRepair": { + def: "Recovery and Repair", + zh: "恢复与修复", + }, + "Ui.Settings.Hatch.RecreateAll": { + def: "Recreate all", + zh: "全部重建", + }, + "Ui.Settings.Hatch.RecreateMissingChunks": { + def: "Recreate missing chunks for all files", + zh: "为所有文件重新创建缺失的数据块", + }, + "Ui.Settings.Hatch.RecreateMissingChunksDesc": { + def: "This will recreate chunks for all files. If there were missing chunks, this may fix the errors.", + zh: "此操作会为所有文件重新创建数据块。如果存在缺失的数据块,可能会修复相关错误。", + }, + "Ui.Settings.Hatch.ResetPanel": { + def: "Reset", + zh: "重置", + }, + "Ui.Settings.Hatch.ResetRemoteUsage": { + def: "Reset notification threshold and check the remote database usage", + zh: "重置通知阈值并检查远程数据库使用情况", + }, + "Ui.Settings.Hatch.ResetRemoteUsageDesc": { + def: "Reset the remote storage size threshold and check the remote storage size again.", + zh: "重置远程存储大小阈值,并再次检查远程存储大小。", + }, + "Ui.Settings.Hatch.ResolveAllConflictedFiles": { + def: "Resolve all conflicted files by the newer one", + zh: "使用较新的版本解决所有冲突文件", + }, + "Ui.Settings.Hatch.ResolveAllConflictedFilesDesc": { + def: "Resolve all conflicted files by the newer one. Caution: This will overwrite the older one, and cannot resurrect the overwritten one.", + zh: "使用较新的版本解决所有冲突文件。注意:此操作会覆盖较旧版本,且无法恢复被覆盖的内容。", + }, + "Ui.Settings.Hatch.RunDoctor": { + def: "Run Doctor", + zh: "运行诊断", + }, + "Ui.Settings.Hatch.ScanBrokenFiles": { + def: "Scan for broken files", + zh: "扫描损坏文件", + }, + "Ui.Settings.Hatch.ScramSwitches": { + def: "Scram Switches", + zh: "紧急开关", + }, + "Ui.Settings.Hatch.ShowHistory": { + def: "Show history", + zh: "查看历史", + }, + "Ui.Settings.Hatch.StorageLabel": { + def: "Storage: ${details}", + zh: "存储:${details}", + }, + "Ui.Settings.Hatch.StorageToDatabase": { + def: "Storage -> Database", + zh: "存储 -> 数据库", + }, + "Ui.Settings.Hatch.VerifyAndRepairAllFiles": { + def: "Verify and repair all files", + zh: "校验并修复所有文件", + }, + "Ui.Settings.Hatch.VerifyAndRepairAllFilesDesc": { + def: "Compare the content of files between the local database and storage. If they do not match, you will be asked which one to keep.", + zh: "比较本地数据库与存储中的文件内容。如果内容不一致,系统会询问你保留哪一份。", + }, + "Ui.Settings.Maintenance.Cleanup": { + def: "Perform cleanup", + zh: "执行清理", + }, + "Ui.Settings.Maintenance.CleanupDesc": { + def: "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.", + zh: "丢弃所有非最新修订版本,以减少存储空间占用。此操作要求远程服务器和本地客户端都具备同等大小的可用空间。", + }, + "Ui.Settings.Maintenance.DeleteLocalDatabase": { + def: "Delete local database to reset or uninstall Self-hosted LiveSync", + zh: "删除本地数据库以重置或卸载 Self-hosted LiveSync", + }, + "Ui.Settings.Maintenance.EmergencyRestart": { + def: "Emergency restart", + zh: "紧急重启", + }, + "Ui.Settings.Maintenance.EmergencyRestartDesc": { + def: "Disable all synchronisation and restart.", + zh: "禁用所有同步并重新启动。", + }, + "Ui.Settings.Maintenance.FreshStartWipe": { + def: "Fresh Start Wipe", + zh: "全新开始清空", + }, + "Ui.Settings.Maintenance.FreshStartWipeDesc": { + def: "Delete all data on the remote server.", + zh: "删除远程服务器上的所有数据。", + }, + "Ui.Settings.Maintenance.GarbageCollection": { + def: "Garbage Collection V3 (Beta)", + zh: "垃圾回收 V3(测试版)", + }, + "Ui.Settings.Maintenance.GarbageCollectionAction": { + def: "Perform Garbage Collection", + zh: "执行垃圾回收", + }, + "Ui.Settings.Maintenance.GarbageCollectionDesc": { + def: "Perform Garbage Collection to remove unused chunks and reduce database size.", + zh: "执行垃圾回收以移除未使用的数据块并减少数据库大小。", + }, + "Ui.Settings.Maintenance.LockServer": { + def: "Lock Server", + zh: "锁定服务器", + }, + "Ui.Settings.Maintenance.LockServerDesc": { + def: "Lock the remote server to prevent synchronisation with other devices.", + zh: "锁定远程服务器,防止与其他设备继续同步。", + }, + "Ui.Settings.Maintenance.OverwriteRemote": { + def: "Overwrite remote", + zh: "覆盖远程端", + }, + "Ui.Settings.Maintenance.OverwriteRemoteDesc": { + def: "Overwrite remote with local DB and passphrase.", + zh: "使用本地数据库和密码短语覆盖远程端数据。", + }, + "Ui.Settings.Maintenance.OverwriteServerData": { + def: "Overwrite Server Data with This Device's Files", + zh: "用此设备的文件覆盖服务器数据", + }, + "Ui.Settings.Maintenance.OverwriteServerDataDesc": { + def: "Rebuild the local and remote database with files from this device.", + zh: "使用此设备上的文件重建本地和远程数据库。", + }, + "Ui.Settings.Maintenance.PurgeAllJournalCounter": { + def: "Purge all journal counter", + zh: "清空全部日志计数器", + }, + "Ui.Settings.Maintenance.PurgeAllJournalCounterDesc": { + def: "Purge all download and upload caches.", + zh: "清空所有下载与上传缓存。", + }, + "Ui.Settings.Maintenance.RebuildingOperations": { + def: "Rebuilding Operations (Remote Only)", + zh: "重建操作(仅远程端)", + }, + "Ui.Settings.Maintenance.Resend": { + def: "Resend", + zh: "重新发送", + }, + "Ui.Settings.Maintenance.ResendDesc": { + def: "Resend all chunks to the remote.", + zh: "将所有数据块重新发送到远程端。", + }, + "Ui.Settings.Maintenance.Reset": { + def: "Reset", + zh: "重置", + }, + "Ui.Settings.Maintenance.ResetAllJournalCounter": { + def: "Reset all journal counter", + zh: "重置全部日志计数器", + }, + "Ui.Settings.Maintenance.ResetAllJournalCounterDesc": { + def: "Initialise all journal history. On the next sync, every item will be received and sent again.", + zh: "初始化全部日志历史。下次同步时,所有项目都会重新接收并重新发送。", + }, + "Ui.Settings.Maintenance.ResetJournalReceived": { + def: "Reset journal received history", + zh: "重置日志接收历史", + }, + "Ui.Settings.Maintenance.ResetJournalReceivedDesc": { + def: "Initialise journal received history. On the next sync, every item except those sent by this device will be downloaded again.", + zh: "初始化日志接收历史。下次同步时,除当前设备发送的项目外,其余项目都会重新下载。", + }, + "Ui.Settings.Maintenance.ResetJournalSent": { + def: "Reset journal sent history", + zh: "重置日志发送历史", + }, + "Ui.Settings.Maintenance.ResetJournalSentDesc": { + def: "Initialise journal sent history. On the next sync, every item except those received by this device will be sent again.", + zh: "初始化日志发送历史。下次同步时,除当前设备已接收的项目外,其余项目都会重新发送。", + }, + "Ui.Settings.Maintenance.ResetLocalSyncInfo": { + def: "Reset Synchronisation information", + zh: "重置同步信息", + }, + "Ui.Settings.Maintenance.ResetLocalSyncInfoDesc": { + def: "Restore or reconstruct local database from remote.", + zh: "从远程端恢复或重建本地数据库。", + }, + "Ui.Settings.Maintenance.ResetReceived": { + def: "Reset received", + zh: "重置接收记录", + }, + "Ui.Settings.Maintenance.ResetSentHistory": { + def: "Reset sent history", + zh: "重置发送记录", + }, + "Ui.Settings.Maintenance.ResetThisDevice": { + def: "Reset Synchronisation on This Device", + zh: "重置此设备上的同步状态", + }, + "Ui.Settings.Maintenance.ScheduleAndRestart": { + def: "Schedule and Restart", + zh: "计划执行并重启", + }, + "Ui.Settings.Maintenance.Scram": { + def: "Scram!", + zh: "紧急处理", + }, + "Ui.Settings.Maintenance.SendChunks": { + def: "Send chunks", + zh: "发送数据块", + }, + "Ui.Settings.Maintenance.Syncing": { + def: "Syncing", + zh: "同步", + }, + "Ui.Settings.Maintenance.WarningLockedReadyAction": { + def: "I am ready, unlock the database", + zh: "我已准备好,立即解锁数据库", + }, + "Ui.Settings.Maintenance.WarningLockedReadyText": { + def: "To prevent unwanted vault corruption, the remote database has been locked for synchronisation. (This device is marked as 'resolved'.) When all your devices are marked as 'resolved', unlock the database. This warning will continue to appear until replication confirms the device is resolved.", + zh: "为防止意外的数据仓库损坏,远程数据库已被锁定,暂停同步。(此设备已被标记为“已确认”)当你的所有设备都标记为“已确认”后,再解锁数据库。在复制过程确认此设备已完成确认之前,此警告会持续显示。", + }, + "Ui.Settings.Maintenance.WarningLockedResolveAction": { + def: "I have made a backup, mark this device as resolved", + zh: "我已完成备份,将此设备标记为“已确认”", + }, + "Ui.Settings.Maintenance.WarningLockedResolveText": { + def: "The remote database is locked for synchronisation to prevent vault corruption because this device is not marked as 'resolved'. Please back up your vault, reset the local database, and select 'Mark this device as resolved'. This warning will persist until replication confirms the device is resolved.", + zh: "为防止数据仓库损坏,由于此设备尚未标记为“已确认”,远程数据库已被锁定,暂停同步。请先备份你的仓库、重置本地数据库,然后选择“将此设备标记为已确认”。在复制过程确认此设备已完成确认之前,此警告会持续显示。", + }, + "Ui.Settings.Maintenance.WriteRedFlagAndRestart": { + def: "Flag and restart", + zh: "标记并重启", + }, + "Ui.Settings.Patches.CompatibilityConflict": { + def: "Compatibility (Conflict Behaviour)", + zh: "兼容性(冲突行为)", + }, + "Ui.Settings.Patches.CompatibilityDatabase": { + def: "Compatibility (Database structure)", + zh: "兼容性(数据库结构)", + }, + "Ui.Settings.Patches.CompatibilityInternalApi": { + def: "Compatibility (Internal API Usage)", + zh: "兼容性(内部 API 使用)", + }, + "Ui.Settings.Patches.CompatibilityMetadata": { + def: "Compatibility (Metadata)", + zh: "兼容性(元数据)", + }, + "Ui.Settings.Patches.CompatibilityRemote": { + def: "Compatibility (Remote Database)", + zh: "兼容性(远程数据库)", + }, + "Ui.Settings.Patches.CompatibilityTrouble": { + def: "Compatibility (Trouble addressed)", + zh: "兼容性(已处理问题)", + }, + "Ui.Settings.Patches.CurrentAdapter": { + def: "Current adapter: ${adapter}", + zh: "当前适配器:${adapter}", + }, + "Ui.Settings.Patches.DatabaseAdapter": { + def: "Database Adapter", + zh: "数据库适配器", + }, + "Ui.Settings.Patches.DatabaseAdapterDesc": { + def: "Select the database adapter to use.", + zh: "选择要使用的数据库适配器。", + }, + "Ui.Settings.Patches.EdgeCaseBehaviour": { + def: "Edge case addressing (Behaviour)", + zh: "边界情况处理(行为)", + }, + "Ui.Settings.Patches.EdgeCaseDatabase": { + def: "Edge case addressing (Database)", + zh: "边界情况处理(数据库)", + }, + "Ui.Settings.Patches.EdgeCaseProcessing": { + def: "Edge case addressing (Processing)", + zh: "边界情况处理(处理流程)", + }, + "Ui.Settings.Patches.IndexedDbWarning": { + def: "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 the IDB adapter instead.", + zh: "IndexedDB 适配器在某些场景下通常具有更好的性能,但在 LiveSync 模式下已发现可能导致内存泄漏。使用 LiveSync 模式时,请改用 IDB 适配器。", + }, + "Ui.Settings.Patches.MigratingToIdb": { + def: "Migrating all data to IDB...", + zh: "正在将所有数据迁移到 IDB...", + }, + "Ui.Settings.Patches.MigratingToIndexedDb": { + def: "Migrating all data to IndexedDB...", + zh: "正在将所有数据迁移到 IndexedDB...", + }, + "Ui.Settings.Patches.MigrationIdbCompleted": { + def: "Migration to IDB completed. Obsidian will be restarted with the new configuration immediately.", + zh: "已完成迁移到 IDB。Obsidian 将立即使用新配置重新启动。", + }, + "Ui.Settings.Patches.MigrationIdbCompletedFollowUp": { + def: "Migration to IDB completed. Please switch the adapter and restart Obsidian.", + zh: "已完成迁移到 IDB。请切换适配器并重新启动 Obsidian。", + }, + "Ui.Settings.Patches.MigrationIndexedDbCompleted": { + def: "Migration to IndexedDB completed. Obsidian will be restarted with the new configuration immediately.", + zh: "已完成迁移到 IndexedDB。Obsidian 将立即使用新配置重新启动。", + }, + "Ui.Settings.Patches.MigrationIndexedDbCompletedFollowUp": { + def: "Migration to IndexedDB completed. Please switch the adapter and restart Obsidian.", + zh: "已完成迁移到 IndexedDB。请切换适配器并重新启动 Obsidian。", + }, + "Ui.Settings.Patches.MigrationWarning": { + def: "Changing this setting requires migrating existing data, which may take some time, and restarting Obsidian. Please make sure to back up your data before proceeding.", + zh: "修改此设置需要迁移现有数据(可能需要一些时间)并重新启动 Obsidian。请先备份你的数据后再继续。", + }, + "Ui.Settings.Patches.OperationToIdb": { + def: "to IDB", + zh: "迁移到 IDB", + }, + "Ui.Settings.Patches.OperationToIndexedDb": { + def: "to IndexedDB", + zh: "迁移到 IndexedDB", + }, + "Ui.Settings.Patches.Remediation": { + def: "Remediation", + zh: "修正", + }, + "Ui.Settings.Patches.RemediationChanged": { + def: "Remediation Setting Changed", + zh: "修正设置已更改", + }, + "Ui.Settings.Patches.RemediationNoLimit": { + def: "No limit configured", + zh: "未设置限制", + }, + "Ui.Settings.Patches.RemediationRestarting": { + def: "Remediation setting changed. Restarting Obsidian...", + zh: "修正设置已更改,正在重新启动 Obsidian...", + }, + "Ui.Settings.Patches.RemediationRestartLater": { + def: "Later", + zh: "稍后", + }, + "Ui.Settings.Patches.RemediationRestartMessage": { + def: "Restarting Obsidian is strongly recommended. Until restart, some changes may not take effect, and the display may be inconsistent. Are you sure you want to restart now?", + zh: "强烈建议重新启动 Obsidian。在重启之前,部分更改可能不会生效,界面显示也可能不一致。确定要现在重启吗?", + }, + "Ui.Settings.Patches.RemediationRestartNow": { + def: "Restart Now", + zh: "立即重启", + }, + "Ui.Settings.Patches.RemediationSuffixChanged": { + def: "Suffix has been changed. Reopening database...", + zh: "后缀已更改,正在重新打开数据库...", + }, + "Ui.Settings.Patches.RemediationWithValue": { + def: "Limit: ${date} (${timestamp})", + zh: "限制:${date}(${timestamp})", + }, + "Ui.Settings.Patches.RemoteDatabaseSunset": { + def: "Remote Database Tweak (In sunset)", + zh: "远程数据库调整(即将弃用)", + }, + "Ui.Settings.Patches.SwitchToIDB": { + def: "Switch to IDB", + zh: "切换到 IDB", + }, + "Ui.Settings.Patches.SwitchToIndexedDb": { + def: "Switch to IndexedDB", + zh: "切换到 IndexedDB", + }, + "Ui.Settings.PowerUsers.ConfigurationEncryption": { + def: "Configuration Encryption", + zh: "配置加密", + }, + "Ui.Settings.PowerUsers.ConnectionTweak": { + def: "CouchDB Connection Tweak", + zh: "CouchDB 连接调整", + }, + "Ui.Settings.PowerUsers.ConnectionTweakDesc": { + def: "If you reached the payload size limit when using IBM Cloudant, please decrease batch size and batch limit to a lower value.", + zh: "如果你在使用 IBM Cloudant 时遇到负载大小限制,请将 batch size 和 batch limit 调低。", + }, + "Ui.Settings.PowerUsers.Default": { + def: "Default", + zh: "默认", + }, + "Ui.Settings.PowerUsers.Developer": { + def: "Developer", + zh: "开发者", + }, + "Ui.Settings.PowerUsers.EncryptSensitiveConfig": { + def: "Encrypt sensitive configuration items", + zh: "加密敏感配置项", + }, + "Ui.Settings.PowerUsers.PromptPassphraseEveryLaunch": { + def: "Ask for a passphrase at every launch", + zh: "每次启动时询问密码短语", + }, + "Ui.Settings.PowerUsers.UseCustomPassphrase": { + def: "Use a custom passphrase", + zh: "使用自定义密码短语", + }, + "Ui.Settings.Remote.Activate": { + def: "Activate", + zh: "启用", + }, + "Ui.Settings.Remote.ActiveSuffix": { + def: " (Active)", + zh: "(当前启用)", + }, + "Ui.Settings.Remote.AddConnection": { + def: "Add new connection", + zh: "新增连接", + }, + "Ui.Settings.Remote.AddRemoteDefaultName": { + def: "New Remote", + zh: "新远程端", + }, + "Ui.Settings.Remote.ConfigureAndChangeRemote": { + def: "Configure and change remote", + zh: "配置并切换远程端", + }, + "Ui.Settings.Remote.ConfigureE2EE": { + def: "Configure E2EE", + zh: "配置端到端加密", + }, + "Ui.Settings.Remote.ConfigureRemote": { + def: "Configure Remote", + zh: "配置远程端", + }, + "Ui.Settings.Remote.DeleteRemoteConfirm": { + def: "Delete remote configuration '${name}'?", + zh: "确定要删除远程配置“${name}”吗?", + }, + "Ui.Settings.Remote.DeleteRemoteTitle": { + def: "Delete Remote Configuration", + zh: "删除远程配置", + }, + "Ui.Settings.Remote.DisplayName": { + def: "Display name", + zh: "显示名称", + }, + "Ui.Settings.Remote.DuplicateRemote": { + def: "Duplicate remote", + zh: "复制远程配置", + }, + "Ui.Settings.Remote.DuplicateRemoteSuffix": { + def: "${name} (Copy)", + zh: "${name}(副本)", + }, + "Ui.Settings.Remote.E2EEConfiguration": { + def: "E2EE Configuration", + zh: "端到端加密配置", + }, + "Ui.Settings.Remote.Export": { + def: "Export", + zh: "导出", + }, + "Ui.Settings.Remote.FetchRemoteSettings": { + def: "Fetch remote settings", + zh: "获取远程设置", + }, + "Ui.Settings.Remote.ImportConnection": { + def: "Import connection", + zh: "导入连接", + }, + "Ui.Settings.Remote.ImportConnectionPrompt": { + def: "Paste a connection string", + zh: "粘贴连接字符串", + }, + "Ui.Settings.Remote.ImportedCouchDb": { + def: "Imported CouchDB", + zh: "已导入的 CouchDB", + }, + "Ui.Settings.Remote.ImportedRemote": { + def: "Remote", + zh: "远程端", + }, + "Ui.Settings.Remote.MoreActions": { + def: "More actions", + zh: "更多操作", + }, + "Ui.Settings.Remote.PeerToPeerPanel": { + def: "Peer-to-Peer Synchronisation", + zh: "点对点同步", + }, + "Ui.Settings.Remote.RemoteConfigurationPrefix": { + def: "Remote configuration", + zh: "远程配置", + }, + "Ui.Settings.Remote.RemoteDatabases": { + def: "Remote Databases", + zh: "远程数据库", + }, + "Ui.Settings.Remote.RemoteName": { + def: "Remote name", + zh: "远程名称", + }, + "Ui.Settings.Remote.RemoteNameCouchDb": { + def: "CouchDB ${host}", + zh: "CouchDB ${host}", + }, + "Ui.Settings.Remote.RemoteNameP2P": { + def: "P2P ${room}", + zh: "P2P ${room}", + }, + "Ui.Settings.Remote.RemoteNameS3": { + def: "S3 ${bucket}", + zh: "S3 ${bucket}", + }, + "Ui.Settings.Remote.Rename": { + def: "Rename", + zh: "重命名", + }, + "Ui.Settings.Selector.AddDefaultPatterns": { + def: "Add default patterns", + zh: "添加默认模式", + }, + "Ui.Settings.Selector.CrossPlatform": { + def: "Cross-platform", + zh: "跨平台", + }, + "Ui.Settings.Selector.Default": { + def: "Default", + zh: "默认", + }, + "Ui.Settings.Selector.HiddenFiles": { + def: "Hidden Files", + zh: "隐藏文件", + }, + "Ui.Settings.Selector.IgnorePatterns": { + def: "Ignore patterns", + zh: "忽略模式", + }, + "Ui.Settings.Selector.NonSynchronisingFiles": { + def: "Non-Synchronising files", + zh: "不同步文件", + }, + "Ui.Settings.Selector.NonSynchronisingFilesDesc": { + def: "(RegExp) If this is set, any changes to local and remote files that match this will be skipped.", + zh: "(RegExp)如果设置了该项,则本地和远程中匹配这些规则的文件变更将被跳过。", + }, + "Ui.Settings.Selector.NormalFiles": { + def: "Normal Files", + zh: "普通文件", + }, + "Ui.Settings.Selector.OverwritePatterns": { + def: "Overwrite patterns", + zh: "覆盖模式", + }, + "Ui.Settings.Selector.OverwritePatternsDesc": { + def: "Patterns to match files for overwriting instead of merging", + zh: "匹配后将执行覆盖而非合并的文件模式", + }, + "Ui.Settings.Selector.SynchronisingFiles": { + def: "Synchronising files", + zh: "同步文件", + }, + "Ui.Settings.Selector.SynchronisingFilesDesc": { + def: "(RegExp) Empty to sync all files. Set a regular expression filter to limit synchronised files.", + zh: "(RegExp)留空则同步所有文件。可设置正则表达式以限制需要同步的文件。", + }, + "Ui.Settings.Selector.TargetPatterns": { + def: "Target patterns", + zh: "目标模式", + }, + "Ui.Settings.Selector.TargetPatternsDesc": { + def: "Patterns to match files for syncing", + zh: "用于匹配需要同步文件的模式", + }, + "Ui.Settings.Setup.RerunWizardButton": { + def: "Rerun Wizard", + zh: "重新运行向导", + }, + "Ui.Settings.Setup.RerunWizardDesc": { + def: "Rerun the onboarding wizard to set up Self-hosted LiveSync again.", + zh: "重新运行引导向导,再次设置 Self-hosted LiveSync。", + }, + "Ui.Settings.Setup.RerunWizardName": { + def: "Rerun Onboarding Wizard", + zh: "重新运行引导向导", + }, + "Ui.Settings.SyncSettings.Fetch": { + def: "Fetch", + zh: "获取", + }, + "Ui.Settings.SyncSettings.Merge": { + def: "Merge", + zh: "合并", + }, + "Ui.Settings.SyncSettings.Overwrite": { + def: "Overwrite", + zh: "覆盖", + }, + "Ui.SetupWizard.Common.Back": { + def: "No, please take me back", + zh: "不,带我返回", + }, + "Ui.SetupWizard.Common.Cancel": { + def: "Cancel", + zh: "取消", + }, + "Ui.SetupWizard.Common.ProceedSelectOption": { + def: "Please select an option to proceed", + zh: "请选择一个选项后继续", + }, + "Ui.SetupWizard.Intro.ExistingOption": { + def: "I am adding a device to an existing synchronisation setup", + zh: "将此设备加入已有同步配置", + }, + "Ui.SetupWizard.Intro.ExistingOptionDesc": { + def: "Select this if you are already using synchronisation on another computer or smartphone. Use this option to connect this device to that existing setup.", + zh: "如果你已经在另一台电脑或手机上使用同步,请选择此项。此选项用于将当前设备连接到既有同步配置。", + }, + "Ui.SetupWizard.Intro.Guidance": { + def: "We will now guide you through a few questions to simplify the synchronisation setup.", + zh: "接下来我们会通过几个问题,帮助你更轻松地完成同步配置。", + }, + "Ui.SetupWizard.Intro.NewOption": { + def: "I am setting this up for the first time", + zh: "首次设置同步", + }, + "Ui.SetupWizard.Intro.NewOptionDesc": { + def: "Select this if you are configuring this device as the first synchronisation device.", + zh: "如果你正把这台设备作为第一台同步设备进行配置,请选择此项。", + }, + "Ui.SetupWizard.Intro.ProceedExisting": { + def: "Yes, I want to add this device to my existing synchronisation", + zh: "是的,我要将此设备加入现有同步", + }, + "Ui.SetupWizard.Intro.ProceedNew": { + def: "Yes, I want to set up a new synchronisation", + zh: "是的,我要开始新的同步配置", + }, + "Ui.SetupWizard.Intro.Question": { + def: "First, please select the option that best describes your current situation.", + zh: "首先,请选择最符合你当前情况的选项。", + }, + "Ui.SetupWizard.Intro.Title": { + def: "Welcome to Self-hosted LiveSync", + zh: "欢迎使用 Self-hosted LiveSync", + }, + "Ui.SetupWizard.Invitation.Start": { + def: "Start setup", + }, + "Ui.SetupWizard.OutroAskUserMode.CompatibleOption": { + def: "The remote is already set up, and the configuration is compatible (or became compatible through this operation).", + zh: "远程端已配置完成,且当前配置兼容(或已通过本次操作变为兼容)。", + }, + "Ui.SetupWizard.OutroAskUserMode.CompatibleOptionDesc": { + def: "Unless you are certain, selecting this option is risky. It assumes the server configuration is compatible with this device. If that is not the case, data loss may occur. Please make sure you understand the consequences.", + zh: "除非你非常确定,否则选择此项存在风险。它假定服务器配置与当前设备兼容。如果事实并非如此,可能会导致数据丢失。请确认你了解后果。", + }, + "Ui.SetupWizard.OutroAskUserMode.ExistingOption": { + def: "My remote server is already set up. I want to join this device.", + zh: "远程服务器已经配置完成,我想让此设备加入同步。", + }, + "Ui.SetupWizard.OutroAskUserMode.ExistingOptionDesc": { + def: "Selecting this option will make this device join the existing server. You need to fetch the existing synchronisation data from the server to this device.", + zh: "选择此项后,此设备会加入已有服务器。你需要将服务器上的现有同步数据获取到此设备。", + }, + "Ui.SetupWizard.OutroAskUserMode.Guidance": { + def: "The connection to the server has been configured successfully. As the next step, the local database, in other words the synchronisation information, must be rebuilt.", + zh: "服务器连接已成功配置。下一步需要重建本地数据库,也就是同步状态信息。", + }, + "Ui.SetupWizard.OutroAskUserMode.NewOption": { + def: "I am setting up a new server for the first time / I want to reset my existing server.", + zh: "我是第一次配置新服务器 / 我想重置现有服务器。", + }, + "Ui.SetupWizard.OutroAskUserMode.NewOptionDesc": { + def: "Selecting this option will initialise the server using the current data on this device. Any existing data on the server will be completely overwritten.", + zh: "选择此项后,服务器会使用当前设备上的数据进行初始化。服务器上的现有数据将被完全覆盖。", + }, + "Ui.SetupWizard.OutroAskUserMode.ProceedApplySettings": { + def: "Apply the settings", + zh: "应用这些设置", + }, + "Ui.SetupWizard.OutroAskUserMode.ProceedNext": { + def: "Proceed to the next step.", + zh: "继续下一步", + }, + "Ui.SetupWizard.OutroAskUserMode.Question": { + def: "Please select your situation.", + zh: "请选择你的当前情况。", + }, + "Ui.SetupWizard.OutroAskUserMode.Title": { + def: "Mostly Complete: Decision Required", + zh: "即将完成:还需要做出选择", + }, + "Ui.SetupWizard.OutroNewP2PUser.GuidanceNotice": { + def: "P2P has no central server copy to overwrite. This step prepares only this device; keep it online when another device fetches its initial data.", + }, + "Ui.SetupWizard.OutroNewP2PUser.GuidancePrimary": { + def: "The peer-to-peer connection has been configured successfully. Next, the local LiveSync database will be built from the current files in this Vault.", + }, + "Ui.SetupWizard.OutroNewP2PUser.Important": { + def: "PLEASE NOTE", + }, + "Ui.SetupWizard.OutroNewP2PUser.Proceed": { + def: "Restart and Prepare This Device", + }, + "Ui.SetupWizard.OutroNewP2PUser.Question": { + def: "Please select the button below to restart and proceed to the local initialisation confirmation.", + }, + "Ui.SetupWizard.OutroNewP2PUser.Title": { + def: "Setup Complete: Preparing This P2P Device", + }, + "Ui.SetupWizard.OutroNewUser.GuidancePrimary": { + def: "The connection to the server has been configured successfully. As the next step, the synchronisation data on the server will be built from the current data on this device.", + zh: "服务器连接已成功配置。下一步将根据当前设备上的数据,在服务器端建立同步数据。", + }, + "Ui.SetupWizard.OutroNewUser.GuidanceWarning": { + def: "After restarting, the data on this device will be uploaded to the server as the master copy. Please note that any unintended data currently on the server will be completely overwritten.", + zh: "重启后,当前设备上的数据会作为主副本上传到服务器。请注意,服务器上现有的非预期数据将被完全覆盖。", + }, + "Ui.SetupWizard.OutroNewUser.Important": { + def: "IMPORTANT", + zh: "重要", + }, + "Ui.SetupWizard.OutroNewUser.Proceed": { + def: "Restart and Initialise Server", + zh: "重启并初始化服务器", + }, + "Ui.SetupWizard.OutroNewUser.Question": { + def: "Please select the button below to restart and proceed to the final confirmation.", + zh: "请选择下方按钮,重启并进入最终确认步骤。", + }, + "Ui.SetupWizard.OutroNewUser.Title": { + def: "Setup Complete: Preparing to Initialise Server", + zh: "设置完成:准备初始化服务器", + }, + "Ui.SetupWizard.RebuildEverythingP2P.ConfirmLocalReset": { + def: "I understand that this resets only this device's local synchronisation database.", + }, + "Ui.SetupWizard.RebuildEverythingP2P.ConfirmLocalResetNote": { + def: "The files currently in this Vault are used to rebuild it.", + }, + "Ui.SetupWizard.RebuildEverythingP2P.ConfirmTitle": { + def: "⚠️ Please Confirm the Following", + }, + "Ui.SetupWizard.RebuildEverythingP2P.Guidance": { + def: "This procedure will discard the local LiveSync database on this device and rebuild it from the current files in this Vault. It does not delete or overwrite data on another device.", + }, + "Ui.SetupWizard.RebuildEverythingP2P.Note": { + def: "Keep this device online after initialisation so that another device can fetch the Vault from it.", + }, + "Ui.SetupWizard.RebuildEverythingP2P.Proceed": { + def: "I Understand, Prepare This Device", + }, + "Ui.SetupWizard.RebuildEverythingP2P.Title": { + def: "Final Confirmation: Prepare This Device for P2P", + }, + "Ui.SetupWizard.SelectExisting.Guidance": { + def: "You are adding this device to an existing synchronisation setup.", + zh: "你正在将此设备加入已有同步配置。", + }, + "Ui.SetupWizard.SelectExisting.ManualOption": { + def: "Enter the server information manually", + zh: "手动输入服务器信息", + }, + "Ui.SetupWizard.SelectExisting.ManualOptionDesc": { + def: "Configure the same server information as your other devices again manually. This is intended only for advanced users.", + zh: "手动重新配置与你其他设备相同的服务器信息。此方式仅适用于高级用户。", + }, + "Ui.SetupWizard.SelectExisting.ProceedManual": { + def: "I know my server details, let me enter them", + zh: "我知道服务器信息,让我手动输入", + }, + "Ui.SetupWizard.SelectExisting.ProceedQr": { + def: "Scan the QR code displayed on an active device using this device's camera.", + zh: "使用本设备摄像头扫描活动设备上显示的二维码", + }, + "Ui.SetupWizard.SelectExisting.ProceedSetupUri": { + def: "Proceed with Setup URI", + zh: "使用 Setup URI 继续", + }, + "Ui.SetupWizard.SelectExisting.QrOption": { + def: "Scan a QR Code (Recommended for mobile)", + zh: "扫描二维码(移动端推荐)", + }, + "Ui.SetupWizard.SelectExisting.QrOptionDesc": { + def: "Scan the QR code displayed on an active device using this device's camera.", + zh: "使用本设备摄像头扫描活动设备上显示的二维码。", + }, + "Ui.SetupWizard.SelectExisting.Question": { + def: "Please select a method to import the settings from another device.", + zh: "请选择一种从其他设备导入设置的方法。", + }, + "Ui.SetupWizard.SelectExisting.SetupUriOption": { + def: "Use a Setup URI (Recommended)", + zh: "使用 Setup URI(推荐)", + }, + "Ui.SetupWizard.SelectExisting.SetupUriOptionDesc": { + def: "Paste the Setup URI generated from one of your active devices.", + zh: "粘贴从某台已启用设备生成的 Setup URI。", + }, + "Ui.SetupWizard.SelectExisting.Title": { + def: "Device Setup Method", + zh: "设备设置方式", + }, + "Ui.SetupWizard.SelectNew.Guidance": { + def: "We will now proceed with the server configuration.", + zh: "接下来将继续配置服务器连接信息。", + }, + "Ui.SetupWizard.SelectNew.ManualOption": { + def: "Enter the server information manually", + zh: "手动输入服务器信息", + }, + "Ui.SetupWizard.SelectNew.ManualOptionDesc": { + def: "This is an advanced option for users who do not have a Setup URI or who want to configure detailed settings.", + zh: "如果你没有 Setup URI,或希望自行配置更详细的参数,可选择此高级选项。", + }, + "Ui.SetupWizard.SelectNew.ProceedManual": { + def: "I know my server details, let me enter them", + zh: "我知道服务器信息,让我手动输入", + }, + "Ui.SetupWizard.SelectNew.ProceedSetupUri": { + def: "Proceed with Setup URI", + zh: "使用 Setup URI 继续", + }, + "Ui.SetupWizard.SelectNew.Question": { + def: "How would you like to configure the connection to your server?", + zh: "你希望如何配置服务器连接?", + }, + "Ui.SetupWizard.SelectNew.SetupUriOption": { + def: "Use a Setup URI (Recommended)", + zh: "使用 Setup URI(推荐)", + }, + "Ui.SetupWizard.SelectNew.SetupUriOptionDesc": { + def: "A Setup URI is a single string containing your server address and authentication details. If one was generated by your server installation script, it provides a simple and secure configuration method.", + zh: "Setup URI 是一段包含服务器地址和认证信息的文本。如果你的服务器安装脚本已经生成了它,这是最简单且安全的配置方式。", + }, + "Ui.SetupWizard.SelectNew.Title": { + def: "Connection Method", + zh: "连接方式", + }, + "Ui.SetupWizard.SetupRemote.BucketOption": { + def: "S3/MinIO/R2 Object Storage", + zh: "S3/MinIO/R2 对象存储", + }, + "Ui.SetupWizard.SetupRemote.BucketOptionDesc": { + def: "Synchronisation using journal files. You must already have an S3/MinIO/R2 compatible object storage service set up.", + zh: "使用日志文件进行同步。你需要先准备好兼容 S3/MinIO/R2 的对象存储服务。", + }, + "Ui.SetupWizard.SetupRemote.CouchDbOptionDesc": { + def: "This is the most suitable synchronisation method for the current design. All features are available. You must already have a CouchDB instance set up.", + zh: "这是当前设计下最适合的同步方式,所有功能都可用。你需要先准备好 CouchDB 实例。", + }, + "Ui.SetupWizard.SetupRemote.Guidance": { + def: "Please select the type of server you are connecting to.", + zh: "请选择你要连接的服务器类型。", + }, + "Ui.SetupWizard.SetupRemote.P2POption": { + def: "Peer-to-Peer only", + zh: "仅点对点", + }, + "Ui.SetupWizard.SetupRemote.P2POptionDesc": { + def: "This enables direct synchronisation between devices. No server is required, but both devices must be online at the same time and some features may be limited. Internet connectivity is required only for signalling, not for data transfer.", + zh: "启用设备之间的直接同步。无需服务器,但两台设备必须同时在线,且部分功能可能受限。互联网连接仅用于信令,不用于传输数据。", + }, + "Ui.SetupWizard.SetupRemote.ProceedBucket": { + def: "Continue to S3/MinIO/R2 setup", + zh: "继续配置 S3/MinIO/R2", + }, + "Ui.SetupWizard.SetupRemote.ProceedCouchDb": { + def: "Continue to CouchDB setup", + zh: "继续配置 CouchDB", + }, + "Ui.SetupWizard.SetupRemote.ProceedP2P": { + def: "Continue to Peer-to-Peer only setup", + zh: "继续配置仅点对点模式", + }, + "Ui.SetupWizard.SetupRemote.Title": { + def: "Enter Server Information", + zh: "输入服务器信息", + }, + "Unique name between all synchronized devices. To edit this setting, please disable customization sync once.": { + def: "Unique name between all synchronized devices. To edit this setting, please disable customization sync once.", + es: "Nombre único entre dispositivos sincronizados. Para editarlo, desactive sincronización de personalización", + fr: "Nom unique parmi tous les appareils synchronisés. Pour modifier ce paramètre, désactivez d'abord la synchronisation de personnalisation.", + he: "שם ייחודי בין כל המכשירים המסונכרנים. כדי לערוך הגדרה זו, אנא נטרל את סנכרון ההתאמה האישית פעם אחת.", + ja: "同期するすべての端末間で重複しない(一意の)名前。この設定を変更する場合、カスタマイズ同期を無効にしてください。", + ko: "모든 동기화된 기기 간 고유 이름입니다. 이 설정을 편집하려면 사용자 설정 동기화를 한 번 비활성화해 주세요.", + ru: "Уникальное имя между всеми синхронизируемыми устройствами.", + zh: "所有同步设备之间的唯一名称。要编辑此设置,请首先禁用自定义同步", + }, + "Use a custom passphrase": { + def: "Use a custom passphrase", + es: "Usar una frase de contraseña personalizada", + ja: "カスタムパスフレーズを使う", + ko: "사용자 지정 암호문구 사용", + ru: "Использовать пользовательскую парольную фразу", + zh: "使用自定义密码短语", + }, + "Use a Setup URI (Recommended)": { + def: "Use a Setup URI (Recommended)", + es: "Usar un URI de configuración (recomendado)", + ja: "Setup URI を使う(推奨)", + ko: "설정 URI 사용(권장)", + ru: "Использовать Setup URI (рекомендуется)", + zh: "使用 Setup URI(推荐)", + "zh-tw": "使用 Setup URI(推薦)", + }, + "Use Custom HTTP Handler": { + def: "Use Custom HTTP Handler", + es: "Usar manejador HTTP personalizado", + fr: "Utiliser un gestionnaire HTTP personnalisé", + he: "השתמש ב-HTTP Handler מותאם אישית", + ja: "カスタムHTTPハンドラーの利用", + ko: "커스텀 HTTP 핸들러 사용", + ru: "Использовать пользовательский HTTP обработчик", + zh: "使用自定义 HTTP 处理程序", + }, + "Use dynamic iteration count": { + def: "Use dynamic iteration count", + es: "Usar conteo de iteraciones dinámico", + fr: "Utiliser un compteur d'itérations dynamique", + he: "השתמש בספירת איטרציות דינמית", + ja: "動的な繰り返し回数", + ko: "동적 반복 횟수 사용", + ru: "Использовать динамическое количество итераций", + zh: "使用动态迭代次数", + }, + "Use Segmented-splitter": { + def: "Use Segmented-splitter", + es: "Usar divisor segmentado", + fr: "Utiliser le découpeur segmenté", + he: "השתמש ב-Segmented-splitter", + ja: "セグメント分割を使用", + ko: "의미 기반 분할 사용", + ru: "Использовать сегментный разделитель", + zh: "使用分段分割器", + }, + "Use splitting-limit-capped chunk splitter": { + def: "Use splitting-limit-capped chunk splitter", + es: "Usar divisor de chunks con límite", + fr: "Utiliser le découpeur de fragments plafonné", + he: "השתמש ב-chunk splitter עם מגבלת פיצול", + ja: "分割制限付きチャンク分割を使用", + ko: "분할 제한 상한 청크 분할기 사용", + ru: "Использовать разделитель чанков с ограничением", + zh: "使用分割限制上限的块分割器", + }, + "Use the trash bin": { + def: "Use the trash bin", + es: "Usar papelera", + fr: "Utiliser la corbeille", + he: "השתמש בסל האשפה", + ja: "ゴミ箱を使用", + ko: "휴지통 사용", + ru: "Использовать корзину", + zh: "使用回收站", + }, + "Use timeouts instead of heartbeats": { + def: "Use timeouts instead of heartbeats", + es: "Usar timeouts en lugar de latidos", + fr: "Utiliser des délais d'attente au lieu de battements", + he: "השתמש בפסק זמן במקום פעימות לב", + ja: "ハートビートの代わりにタイムアウトを使用", + ko: "하트비트 대신 타임아웃 사용", + ru: "Использовать таймауты вместо пульса", + zh: "使用超时而不是心跳", + }, + username: { + def: "username", + es: "nombre de usuario", + fr: "nom d'utilisateur", + he: "שם משתמש", + ja: "ユーザー名", + ko: "사용자명", + ru: "имя пользователя", + zh: "用户名", + }, + Username: { + def: "Username", + es: "Usuario", + fr: "Nom d'utilisateur", + he: "שם משתמש", + ja: "ユーザー名", + ko: "사용자명", + ru: "Имя пользователя", + zh: "用户名", + }, + "Verbose Log": { + def: "Verbose Log", + es: "Registro detallado", + fr: "Journal verbeux", + he: "יומן מפורט", + ja: "エラー以外のログ項目", + ko: "자세한 로그", + ru: "Подробный лог", + zh: "详细日志", + }, + "Verify all": { + def: "Verify all", + es: "Verificar todo", + ja: "すべて検証", + ko: "모두 검증", + ru: "Проверить всё", + zh: "全部校验", + "zh-tw": "全部驗證", + }, + "Verify and repair all files": { + def: "Verify and repair all files", + es: "Verificar y reparar todos los archivos", + ja: "すべてのファイルを検証して修復", + ko: "모든 파일 검증 및 복구", + ru: "Проверить и восстановить все файлы", + zh: "校验并修复所有文件", + "zh-tw": "驗證並修復所有檔案", + }, + "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.": + { + def: "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.", + es: "¡Advertencia! Impacta rendimiento. Los logs no se sincronizan con nombre predeterminado. Contienen información confidencial", + fr: "Attention ! Ceci aura un impact important sur les performances. De plus, les journaux ne seront pas synchronisés sous le nom par défaut. Soyez prudent avec les journaux ; ils contiennent souvent des informations confidentielles.", + he: "אזהרה! לכך תהיה השפעה רצינית על הביצועים. בנוסף, היומנים לא יסונכרנו תחת השם ברירת המחדל. אנא היה זהיר עם יומנים; הם לרוב מכילים מידע סודי שלך.", + ja: "警告!これはパフォーマンスに重大な影響を与えます。また、ログはデフォルト名では同期されません。ログには機密情報が含まれることが多いため、注意してください。", + ko: "경고! 이는 성능에 심각한 영향을 미칩니다. 로그는 기본 이름으로 동기화되지 않습니다. 로그에는 종종 기밀 정보가 포함되어 있으므로 주의해 주세요.", + ru: "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.", + zh: "警告!这将严重影响性能。并且日志不会以默认名称同步。请小心处理日志;它们通常包含您的敏感信息 ", + }, + "We cannot change the device name while this feature is enabled. Please disable this feature to change the device name.": + { + def: "We cannot change the device name while this feature is enabled. Please disable this feature to change the device name.", + es: "No podemos cambiar el nombre del dispositivo mientras esta función esté habilitada. Deshabilita la función para cambiarlo.", + ja: "この機能が有効な間はデバイス名を変更できません。変更するにはこの機能を無効にしてください。", + ko: "이 기능이 활성화되어 있는 동안에는 장치 이름을 변경할 수 없습니다. 장치 이름을 변경하려면 이 기능을 비활성화하세요.", + ru: "Невозможно изменить имя устройства, пока эта функция включена. Отключите её, чтобы изменить имя устройства.", + zh: "启用此功能时无法更改设备名称。如需修改设备名称,请先禁用此功能。", + }, + "We will now guide you through a few questions to simplify the synchronisation setup.": { + def: "We will now guide you through a few questions to simplify the synchronisation setup.", + es: "Ahora le guiaremos con unas pocas preguntas para simplificar la configuración de la sincronización。", + ja: "これからいくつかの質問に沿って、同期設定を簡単に進めます。", + ko: "동기화 설정을 더 쉽게 진행할 수 있도록 몇 가지 질문으로 안내해 드리겠습니다。", + ru: "Сейчас мы зададим несколько вопросов, чтобы упростить настройку синхронизации。", + zh: "接下来我们会通过几个问题,引导你更轻松地完成同步设置。", + "zh-tw": "接下來我們會透過幾個問題,引導你更輕鬆地完成同步設定。", + }, + "We will now proceed with the server configuration.": { + def: "We will now proceed with the server configuration.", + es: "Ahora continuaremos con la configuración del servidor。", + ja: "次にサーバー設定を進めます。", + ko: "이제 서버 구성을 진행하겠습니다。", + ru: "Теперь перейдём к настройке сервера。", + zh: "接下来将继续进行服务器配置。", + "zh-tw": "接下來將繼續進行伺服器設定。", + }, + "Welcome to Self-hosted LiveSync": { + def: "Welcome to Self-hosted LiveSync", + es: "Bienvenido a Self-hosted LiveSync", + ja: "Self-hosted LiveSync へようこそ", + ko: "Self-hosted LiveSync에 오신 것을 환영합니다", + ru: "Добро пожаловать в Self-hosted LiveSync", + zh: "欢迎使用 Self-hosted LiveSync", + "zh-tw": "歡迎使用 Self-hosted LiveSync", + }, + "When you save a file in the editor, start a sync automatically": { + def: "When you save a file in the editor, start a sync automatically", + es: "Iniciar sincronización automática al guardar en editor", + fr: "À l'enregistrement d'un fichier dans l'éditeur, démarrer automatiquement une synchronisation", + he: "כאשר אתה שומר קובץ בעורך, התחל סנכרון אוטומטית", + ja: "エディタでファイルを保存すると、自動的に同期を開始します", + ko: "편집기에서 파일을 저장할 때 자동으로 동기화를 시작합니다", + ru: "Когда вы сохраняете файл в редакторе, автоматически запускать синхронизацию", + zh: "当您在编辑器中保存文件时,自动开始同步", + }, + "Write credentials in the file": { + def: "Write credentials in the file", + es: "Escribir credenciales en archivo", + fr: "Écrire les identifiants dans le fichier", + he: "כתוב פרטי גישה בקובץ", + ja: "認証情報のファイル内保存", + ko: "파일에 자격 증명 저장", + ru: "Записывать учётные данные в файл", + zh: "将凭据写入文件", + }, + "Write logs into the file": { + def: "Write logs into the file", + es: "Escribir logs en archivo", + fr: "Écrire les journaux dans le fichier", + he: "כתוב יומנים לקובץ", + ja: "ファイルにログを記録", + ko: "파일에 로그 기록", + ru: "Записывать логи в файл", + zh: "将日志写入文件", + }, + "xxhash32 (Fast but less collision resistance)": { + def: "xxhash32 (Fast but less collision resistance)", + es: "xxhash32 (rápido, pero con menor resistencia a colisiones)", + ja: "xxhash32 (高速ですが衝突耐性は低め)", + ko: "xxhash32 (빠르지만 충돌 저항성은 낮음)", + ru: "xxhash32 (быстрый, но с меньшей устойчивостью к коллизиям)", + zh: "xxhash32(速度快,但抗碰撞能力较弱)", + "zh-tw": "xxhash32(速度快,但抗碰撞能力較弱)", + }, + "xxhash64 (Fastest)": { + def: "xxhash64 (Fastest)", + es: "xxhash64 (el más rápido)", + ja: "xxhash64 (最速)", + ko: "xxhash64 (가장 빠름)", + ru: "xxhash64 (самый быстрый)", + zh: "xxhash64(最快)", + "zh-tw": "xxhash64(最快)", + }, + "Yes, I want to add this device to my existing synchronisation": { + def: "Yes, I want to add this device to my existing synchronisation", + es: "Sí, quiero añadir este dispositivo a mi sincronización existente", + ja: "はい、この端末を既存の同期に追加します", + ko: "예, 이 장치를 기존 동기화에 추가하겠습니다", + ru: "Да, я хочу добавить это устройство к существующей синхронизации", + zh: "是的,我要把这台设备加入现有同步", + "zh-tw": "是的,我要把這台裝置加入既有同步", + }, + "Yes, I want to set up a new synchronisation": { + def: "Yes, I want to set up a new synchronisation", + es: "Sí, quiero configurar una nueva sincronización", + ja: "はい、新しい同期を設定します", + ko: "예, 새 동기화를 설정하겠습니다", + ru: "Да, я хочу настроить новую синхронизацию", + zh: "是的,我要配置新的同步", + "zh-tw": "是的,我要設定新的同步", + }, + "You are adding this device to an existing synchronisation setup.": { + def: "You are adding this device to an existing synchronisation setup.", + es: "Está añadiendo este dispositivo a una configuración de sincronización existente。", + ja: "この端末を既存の同期構成に追加しようとしています。", + ko: "이 장치를 기존 동기화 구성에 추가하려고 합니다。", + ru: "Вы добавляете это устройство к существующей настройке синхронизации。", + zh: "你正在将此设备加入到现有同步配置中。", + "zh-tw": "你正在將此裝置加入既有同步設定中。", + }, + "Compute revisions for chunks (Previous behaviour)": { + es: "Calcular revisiones para chunks (comportamiento anterior)", + }, + "Setup.> [!INFO]- The connected devices have been detected as follows:\n${devices}": { + es: "> [!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.": + { + es: "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.Cancel Garbage Collection": { + es: "Cancelar la recolección de basura", + }, + "Setup.Compaction in progress on remote database...": { + es: "La compactación está en curso en la base de datos remota...", + }, + "Setup.Compaction on remote database completed successfully.": { + es: "La compactación en la base de datos remota se completó correctamente.", + }, + "Setup.Compaction on remote database failed.": { + es: "La compactación en la base de datos remota falló.", + }, + "Setup.Compaction on remote database timed out.": { + es: "La compactación en la base de datos remota agotó el tiempo de espera.", + }, + "Setup.Device": { + es: "Dispositivo", + }, + "Setup.Failed to connect to remote for compaction.": { + es: "No se pudo conectar a la base de datos remota para la compactación.", + }, + "Setup.Failed to connect to remote for compaction. ${reason}": { + es: "No se pudo conectar a la base de datos remota para la compactación. ${reason}", + }, + "Setup.Failed to start one-shot replication before Garbage Collection. Garbage Collection Cancelled.": { + es: "No se pudo iniciar la replicación de una sola vez antes de la recolección de basura. La recolección de basura se canceló.", + }, + "Setup.Failed to start replication after Garbage Collection.": { + es: "No se pudo iniciar la replicación después de la recolección de basura.", + }, + "Setup.Garbage Collection cancelled by user.": { + es: "El usuario canceló la recolección de basura.", + }, + "Setup.Garbage Collection completed. Deleted chunks: ${deletedChunks} / ${totalChunks}. Time taken: ${seconds} seconds.": + { + es: "Recolección de basura completada. Chunks eliminados: ${deletedChunks} / ${totalChunks}. Tiempo empleado: ${seconds} segundos.", + }, + "Setup.Garbage Collection Confirmation": { + es: "Confirmación de recolección de basura", + }, + "Setup.Garbage Collection: Found ${unusedChunks} unused chunks to delete.": { + es: "Recolección de basura: se encontraron ${unusedChunks} chunks no usados para eliminar.", + }, + "Setup.Garbage Collection: Scanned ${scanned} / ~${docCount}": { + es: "Recolección de basura: escaneados ${scanned} / ~${docCount}", + }, + "Setup.Garbage Collection: Scanning completed. Total chunks: ${totalChunks}, Used chunks: ${usedChunks}": { + es: "Recolección de basura: escaneo completado. Chunks totales: ${totalChunks}, chunks usados: ${usedChunks}", + }, + "Setup.Ignore and Proceed": { + es: "Ignorar y continuar", + }, + "Setup.No connected device information found. Cancelling Garbage Collection.": { + es: "No se encontró información de dispositivos conectados. Cancelando la recolección de basura.", + }, + "Setup.Node ID": { + es: "ID del nodo", + }, + "Setup.Node Information Missing": { + es: "Falta información del nodo", + }, + "Setup.Obsidian version": { + es: "Versión de Obsidian", + }, + "Setup.optionNoSetupUri": { + es: "No, no tengo", + }, + "Setup.optionRemindNextLaunch": { + es: "Recordármelo en el próximo inicio", + }, + "Setup.optionSetupWizard": { + es: "Llévame al asistente de configuración", + }, + "Setup.optionYesFetchAgain": { + es: "Sí, obtener nuevamente", + }, + "Setup.Please disable 'Read chunks online' in settings to use Garbage Collection.": { + es: 'Desactiva "Read chunks online" en los ajustes para usar la recolección de basura.', + }, + "Setup.Please enable 'Compute revisions for chunks' in settings to use Garbage Collection.": { + es: 'Activa "Compute revisions for chunks" en los ajustes para usar la recolección de basura.', + }, + "Setup.Please select 'Cancel' explicitly to cancel this operation.": { + es: 'Selecciona explícitamente "Cancelar" para cancelar esta operación.', + }, + "Setup.Plug-in version": { + es: "Versión del complemento", + }, + "Setup.Proceed Garbage Collection": { + es: "Continuar con la recolección de basura", + }, + "Setup.Proceeding with Garbage Collection, ignoring missing nodes.": { + es: "Continuando con la recolección de basura e ignorando los nodos faltantes.", + }, + "Setup.Proceeding with Garbage Collection.": { + es: "Continuando con la recolección de basura.", + }, + "Setup.Progress": { + es: "Progreso", + }, + "Setup.Setup URI dialog cancelled.": { + es: "Se canceló el diálogo de Setup URI.", + }, + "Setup.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.": + { + es: "Algunos dispositivos tienen valores de progreso diferentes (máx.: ${maxProgress}, mín.: ${minProgress}).\nEsto puede indicar que algunos dispositivos no han completado la sincronización, lo que podría causar conflictos. Se recomienda encarecidamente confirmar que todos los dispositivos estén sincronizados antes de continuar.", + }, + "Setup.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.": + { + es: "Los siguientes nodos aceptados no tienen información del nodo:\n- ${missingNodes}\n\nEsto indica que no se han conectado desde hace algún tiempo o que se han quedado en una versión anterior.\nSi es posible, es preferible actualizar todos los dispositivos. Si tienes dispositivos que ya no se usan, puedes borrar todos los nodos aceptados bloqueando el remoto una vez.", + }, + "Setup.titleCaseSensitivity": { + es: "Sensibilidad a mayúsculas", + }, + "Setup.titleRecommendSetupUri": { + es: "Recomendación de uso de URI de configuración", + }, + "Setup.titleWelcome": { + es: "Bienvenido a Self-hosted LiveSync", + }, + "(Not recommended) If set, credentials will be stored in the file": { + ru: "(Не рекомендуется) Если установлено, учётные данные будут сохранены в файле", + }, + "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.": + { + ru: "До v0.17.16 мы использовали старый адаптер для локальной базы данных. Теперь предпочтителен новый адаптер. Однако требуется перестроение локальной базы данных.", + }, + descConnectSetupURI: { + ru: "Это рекомендуемый способ настройки Self-hosted LiveSync с помощью Setup URI.", + }, + descCopySetupURI: { + ru: "Идеально для настройки нового устройства!", + }, + descEnableLiveSync: { + ru: "Включайте это только после настройки одного из двух вариантов выше.", + }, + descFetchConfigFromRemote: { + ru: "Загрузить необходимые настройки с уже настроенного удалённого сервера.", + }, + descManualSetup: { + ru: "Не рекомендуется, но полезно, если у вас нет Setup URI", + }, + descTestDatabaseConnection: { + ru: "Открыть подключение к базе данных.", + }, + descValidateDatabaseConfig: { + ru: "Проверяет и исправляет потенциальные проблемы с конфигурацией базы данных.", + }, + "If enabled per-filed efficient customization sync will be used. We need a small migration when enabling this.": { + ru: "Если включено, будет использоваться эффективная синхронизация настроек для каждого файла.", + }, + "If this is set, changes to local files which are matched by the ignore files will be skipped.": { + ru: "Если установлено, изменения файлов из списка игнорирования будут пропущены.", + }, + "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.": + { + ru: "Если эта опция включена, PouchDB будет держать соединение открытым 60 секунд.", + }, + "Number of batches to process at a time. Defaults to 40. Minimum is 2.": { + ru: "Количество пакетов для обработки за раз. По умолчанию 40. Минимум 2.", + }, + "Save settings to a markdown file.": { + ru: "Сохранить настройки в файл markdown.", + }, + "The maximum duration for which chunks can be incubated within the document.": { + ru: "Максимальная продолжительность инкубации чанков в документе.", + }, + "The maximum number of chunks that can be incubated within the document.": { + ru: "Максимальное количество инкубируемых чанков в документе.", + }, + "The maximum total size of chunks that can be incubated within the document.": { + ru: "Максимальный общий размер инкубируемых чанков в документе.", + }, + "This passphrase will not be copied to another device. It will be set to until you configure it again.": { + ru: "Эта парольная фраза не будет скопирована на другое устройство.", + }, + "Warning! This will have a serious impact on performance. And the logs will not be synchronised under the default name.": + { + ru: "Внимание! Это серьёзно повлияет на производительность.", + }, +}; diff --git a/src/common/messages/de.ts b/src/common/messages/de.ts new file mode 100644 index 00000000..e9283d0e --- /dev/null +++ b/src/common/messages/de.ts @@ -0,0 +1,4 @@ +import de from "@/common/messagesJson/de.json"; +export const PartialMessages = { + de, +} as const; diff --git a/src/common/messages/def.ts b/src/common/messages/def.ts new file mode 100644 index 00000000..7816a6e6 --- /dev/null +++ b/src/common/messages/def.ts @@ -0,0 +1,4 @@ +import def from "@/common/messagesJson/en.json"; +export const PartialMessages = { + def, +} as const; diff --git a/src/common/messages/es.ts b/src/common/messages/es.ts new file mode 100644 index 00000000..7992be2a --- /dev/null +++ b/src/common/messages/es.ts @@ -0,0 +1,4 @@ +import es from "@/common/messagesJson/es.json"; +export const PartialMessages = { + es, +} as const; diff --git a/src/common/messages/fr.ts b/src/common/messages/fr.ts new file mode 100644 index 00000000..17a81e96 --- /dev/null +++ b/src/common/messages/fr.ts @@ -0,0 +1,4 @@ +import fr from "@/common/messagesJson/fr.json"; +export const PartialMessages = { + fr, +} as const; diff --git a/src/common/messages/he.ts b/src/common/messages/he.ts new file mode 100644 index 00000000..0c1b7607 --- /dev/null +++ b/src/common/messages/he.ts @@ -0,0 +1,4 @@ +import he from "@/common/messagesJson/he.json"; +export const PartialMessages = { + he, +} as const; diff --git a/src/common/messages/ja.ts b/src/common/messages/ja.ts new file mode 100644 index 00000000..f52138fa --- /dev/null +++ b/src/common/messages/ja.ts @@ -0,0 +1,4 @@ +import ja from "@/common/messagesJson/ja.json"; +export const PartialMessages = { + ja, +} as const; diff --git a/src/common/messages/ko.ts b/src/common/messages/ko.ts new file mode 100644 index 00000000..24449174 --- /dev/null +++ b/src/common/messages/ko.ts @@ -0,0 +1,4 @@ +import ko from "@/common/messagesJson/ko.json"; +export const PartialMessages = { + ko, +} as const; diff --git a/src/common/messages/ru.ts b/src/common/messages/ru.ts new file mode 100644 index 00000000..0bdaebce --- /dev/null +++ b/src/common/messages/ru.ts @@ -0,0 +1,4 @@ +import ru from "@/common/messagesJson/ru.json"; +export const PartialMessages = { + ru, +} as const; diff --git a/src/common/messages/zh-tw.ts b/src/common/messages/zh-tw.ts new file mode 100644 index 00000000..712b1c8e --- /dev/null +++ b/src/common/messages/zh-tw.ts @@ -0,0 +1,4 @@ +import zhTw from "@/common/messagesJson/zh-tw.json"; +export const PartialMessages = { + "zh-tw": zhTw, +} as const; diff --git a/src/common/messages/zh.ts b/src/common/messages/zh.ts new file mode 100644 index 00000000..098406a8 --- /dev/null +++ b/src/common/messages/zh.ts @@ -0,0 +1,4 @@ +import zh from "@/common/messagesJson/zh.json"; +export const PartialMessages = { + zh, +} as const; diff --git a/src/common/messagesJson/de.json b/src/common/messagesJson/de.json new file mode 100644 index 00000000..d0738812 --- /dev/null +++ b/src/common/messagesJson/de.json @@ -0,0 +1,295 @@ +{ + "(Active)": "(Aktiv)", + "(RegExp) Empty to sync all files. Set filter as a regular expression to limit synchronising files.": "(RegExp) Leer lassen, um alle Dateien zu synchronisieren. Legen Sie einen Filter als regulären Ausdruck fest, um die zu synchronisierenden Dateien einzuschränken.", + "(RegExp) If this is set, any changes to local and remote files that match this will be skipped.": "(RegExp) Wenn dies gesetzt ist, werden alle Änderungen an lokalen und Remote-Dateien übersprungen, die diesem Muster entsprechen.", + "(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.": "(Wählen Sie dies, wenn Sie die Synchronisation bereits auf einem anderen Computer oder Smartphone verwenden.) Diese Option ist geeignet, wenn Sie dieses Gerät zu einer bestehenden LiveSync-Einrichtung hinzufügen möchten.", + "(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.": "(Wählen Sie dies, wenn Sie dieses Gerät als erstes Synchronisationsgerät einrichten.) Diese Option ist geeignet, wenn Sie LiveSync neu verwenden und von Grund auf einrichten möchten.", + "> [!INFO]- The connected devices have been detected as follows:\n${devices}": "> [!INFO]- Die folgenden verbundenen Geräte wurden erkannt:\n${devices}", + "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.": "Eine Setup-URI ist eine einzelne Zeichenfolge, die Ihre Serveradresse und Authentifizierungsdaten enthält. Wenn Ihre Serverinstallation eine URI erzeugt hat, bietet deren Verwendung eine einfache und sichere Konfiguration。", + "Activate": "Aktivieren", + "Add default patterns": "Standardmuster hinzufügen", + "Add new connection": "Neue Verbindung hinzufügen", + "All devices have the same progress value (${progress}). Your devices seem to be synchronised. And be able to proceed with Garbage Collection.": "Alle Geräte haben denselben Fortschrittswert (${progress}). Ihre Geräte scheinen synchronisiert zu sein. Die Garbage Collection kann fortgesetzt werden.", + "Back": "Zurück", + "Back to non-configured": "Zurück auf nicht konfiguriert", + "Cancel": "Abbrechen", + "Cancel Garbage Collection": "Garbage Collection abbrechen", + "Check and convert non-path-obfuscated files": "Nicht pfadverschleierte Dateien prüfen und konvertieren", + "Check for documents that have not been converted to path-obfuscated IDs and convert them if necessary.": "Prüft Dokumente, die noch nicht in pfadverschleierte IDs umgewandelt wurden, und konvertiert sie bei Bedarf.", + "cmdConfigSync.showCustomizationSync": "Anpassungssynchronisation anzeigen", + "Compaction in progress on remote database...": "Komprimierung auf der Remote-Datenbank läuft...", + "Compaction on remote database completed successfully.": "Die Komprimierung auf der Remote-Datenbank wurde erfolgreich abgeschlossen.", + "Compaction on remote database failed.": "Die Komprimierung auf der Remote-Datenbank ist fehlgeschlagen.", + "Compaction on remote database timed out.": "Die Komprimierung auf der Remote-Datenbank hat eine Zeitüberschreitung erreicht.", + "Compare the content of files between on local database and storage. If not matched, you will be asked which one you want to keep.": "Vergleicht den Inhalt der Dateien zwischen lokaler Datenbank und Speicher. Bei Abweichungen werden Sie gefragt, welche Version behalten werden soll.", + "Compatibility (Conflict Behaviour)": "Kompatibilität (Konfliktverhalten)", + "Compatibility (Database structure)": "Kompatibilität (Datenbankstruktur)", + "Compatibility (Internal API Usage)": "Kompatibilität (interne API-Nutzung)", + "Compatibility (Metadata)": "Kompatibilität (Metadaten)", + "Compatibility (Remote Database)": "Kompatibilität (Remote-Datenbank)", + "Compatibility (Trouble addressed)": "Kompatibilität (Problembehebung)", + "Configure": "Konfigurieren", + "Configure And Change Remote": "Remote konfigurieren und wechseln", + "Configure E2EE": "E2EE konfigurieren", + "Configure Remote": "Remote konfigurieren", + "Configure the same server information as your other devices again, manually, very advanced users only.": "Geben Sie dieselben Serverinformationen wie auf Ihren anderen Geräten erneut manuell ein. Nur für sehr erfahrene Benutzer。", + "Connection Method": "Verbindungsmethode", + "Continue to CouchDB setup": "Weiter zur CouchDB-Einrichtung", + "Continue to Peer-to-Peer only setup": "Weiter zur reinen Peer-to-Peer-Einrichtung", + "Continue to S3/MinIO/R2 setup": "Weiter zur S3/MinIO/R2-Einrichtung", + "Copy": "Kopieren", + "Cross-platform": "Plattformübergreifend", + "Current adapter: {adapter}": "Aktueller Adapter: {adapter}", + "Customization Sync (Beta3)": "Anpassungssynchronisation (Beta3)", + "Database Adapter": "Datenbankadapter", + "Default": "Standard", + "Delete": "Löschen", + "Delete all customization sync data": "Alle Anpassungssynchronisationsdaten löschen", + "Delete all data on the remote server.": "Alle Daten auf dem Remote-Server löschen.", + "Delete local database to reset or uninstall Self-hosted LiveSync": "Lokale Datenbank löschen, um Self-hosted LiveSync zurückzusetzen oder zu deinstallieren", + "Delete Remote Configuration": "Remote-Konfiguration löschen", + "Delete remote configuration '{name}'?": "Remote-Konfiguration „{name}“ löschen?", + "desktop": "Desktop", + "Device": "Gerät", + "Device name": "Gerätename", + "Device Setup Method": "Einrichtungsmethode für das Gerät", + "Disables all synchronization and restart.": "Deaktiviert die gesamte Synchronisation und startet neu.", + "Display name": "Anzeigename", + "Duplicate": "Duplizieren", + "Duplicate remote": "Remote duplizieren", + "E2EE Configuration": "E2EE-Konfiguration", + "Edge case addressing (Behaviour)": "Behandlung von Randfällen (Verhalten)", + "Edge case addressing (Database)": "Behandlung von Randfällen (Datenbank)", + "Edge case addressing (Processing)": "Behandlung von Randfällen (Verarbeitung)", + "Emergency restart": "Notfallneustart", + "Encrypting sensitive configuration items": "Sensible Konfigurationseinträge verschlüsseln", + "Enter Server Information": "Serverinformationen eingeben", + "Enter the server information manually": "Serverinformationen manuell eingeben", + "Export": "Exportieren", + "Failed to connect to remote for compaction.": "Verbindung zur Remote-Datenbank für die Komprimierung fehlgeschlagen.", + "Failed to connect to remote for compaction. ${reason}": "Verbindung zur Remote-Datenbank für die Komprimierung fehlgeschlagen. ${reason}", + "Failed to start one-shot replication before Garbage Collection. Garbage Collection Cancelled.": "Die Einmal-Replikation vor der Garbage Collection konnte nicht gestartet werden. Die Garbage Collection wurde abgebrochen.", + "Failed to start replication after Garbage Collection.": "Die Replikation nach der Garbage Collection konnte nicht gestartet werden.", + "Fetch remote settings": "Remote-Einstellungen abrufen", + "File to resolve conflict": "Datei zur Konfliktlösung", + "First, please select the option that best describes your current situation.": "Wählen Sie bitte zuerst die Option aus, die Ihre aktuelle Situation am besten beschreibt.", + "Flag and restart": "Markieren und neu starten", + "Fresh Start Wipe": "Für Neustart vollständig bereinigen", + "Garbage Collection cancelled by user.": "Garbage Collection wurde vom Benutzer abgebrochen.", + "Garbage Collection completed. Deleted chunks: ${deletedChunks} / ${totalChunks}. Time taken: ${seconds} seconds.": "Garbage Collection abgeschlossen. Gelöschte Chunks: ${deletedChunks} / ${totalChunks}. Benötigte Zeit: ${seconds} Sekunden.", + "Garbage Collection Confirmation": "Bestätigung der Garbage Collection", + "Garbage Collection V3 (Beta)": "Datenbereinigung V3 (Beta)", + "Garbage Collection: Found ${unusedChunks} unused chunks to delete.": "Garbage Collection: ${unusedChunks} ungenutzte Chunks zum Löschen gefunden.", + "Garbage Collection: Scanned ${scanned} / ~${docCount}": "Garbage Collection: ${scanned} / ~${docCount} gescannt", + "Garbage Collection: Scanning completed. Total chunks: ${totalChunks}, Used chunks: ${usedChunks}": "Garbage Collection: Scan abgeschlossen. Gesamtzahl der Chunks: ${totalChunks}, verwendete Chunks: ${usedChunks}", + "Hidden Files": "Versteckte Dateien", + "Hide completely": "Vollständig ausblenden", + "How to display network errors when the sync server is unreachable.": "Legt fest, wie Netzwerkfehler angezeigt werden, wenn der Synchronisationsserver nicht erreichbar ist.", + "How would you like to configure the connection to your server?": "Wie möchten Sie die Verbindung zu Ihrem Server konfigurieren?", + "I am adding a device to an existing synchronisation setup": "Ich füge ein Gerät zu einer bestehenden Synchronisationseinrichtung hinzu", + "I am setting this up for the first time": "Ich richte dies zum ersten Mal ein", + "I know my server details, let me enter them": "Ich kenne meine Serverdaten, ich gebe sie selbst ein", + "If enabled, the ⛔ icon will be shown inside the status instead of the file warnings banner. No details will be shown.": "Wenn aktiviert, wird das Symbol ⛔ im Status statt im Dateiwarnungsbanner angezeigt. Es werden keine Details angezeigt.", + "Ignore and Proceed": "Ignorieren und fortfahren", + "Ignore patterns": "Ausschlussmuster", + "Import connection": "Verbindung importieren", + "Initialise all journal history, On the next sync, every item will be received and sent.": "Gesamte Journal-Historie initialisieren. Beim nächsten Sync werden alle Elemente empfangen und gesendet.", + "Later": "Später", + "Limit: {datetime} ({timestamp})": "Grenze: {datetime} ({timestamp})", + "Lock": "Sperren", + "Lock Server": "Server sperren", + "Lock the remote server to prevent synchronization with other devices.": "Sperrt den Remote-Server, um die Synchronisation mit anderen Geräten zu verhindern.", + "More actions": "Weitere Aktionen", + "Network warning style": "Stil der Netzwerkwarnung", + "New Remote": "Neues Remote", + "No connected device information found. Cancelling Garbage Collection.": "Keine Informationen zu verbundenen Geräten gefunden. Garbage Collection wird abgebrochen.", + "No limit configured": "Kein Limit konfiguriert", + "No, please take me back": "Nein, bitte zurück", + "Node ID": "Knoten-ID", + "Node Information Missing": "Knoteninformationen fehlen", + "Non-Synchronising files": "Nicht zu synchronisierende Dateien", + "Normal Files": "Normale Dateien", + "Obsidian version": "Obsidian-Version", + "obsidianLiveSyncSettingTab.btnApply": "Anwenden", + "obsidianLiveSyncSettingTab.btnDisable": "Deaktivieren", + "obsidianLiveSyncSettingTab.btnNext": "Weiter", + "obsidianLiveSyncSettingTab.buttonNext": "Weiter", + "obsidianLiveSyncSettingTab.defaultLanguage": "Standardsprache", + "obsidianLiveSyncSettingTab.labelDisabled": "⏹️ : Deaktiviert", + "obsidianLiveSyncSettingTab.labelEnabled": "🔁 : Aktiviert", + "obsidianLiveSyncSettingTab.logConfiguredDisabled": "Konfigurierter Synchronisationsmodus: DEAKTIVIERT", + "obsidianLiveSyncSettingTab.logConfiguredLiveSync": "Konfigurierter Synchronisationsmodus: LiveSync", + "obsidianLiveSyncSettingTab.logConfiguredPeriodic": "Konfigurierter Synchronisationsmodus: Periodisch", + "obsidianLiveSyncSettingTab.logSelectAnyPreset": "Wählen Sie eine beliebige Voreinstellung aus.", + "obsidianLiveSyncSettingTab.msgConfigCheckFailed": "Die Konfigurationsprüfung ist fehlgeschlagen. Trotzdem fortfahren?", + "obsidianLiveSyncSettingTab.msgEnableEncryptionRecommendation": "Wir empfehlen, Ende-zu-Ende-Verschlüsselung und Pfadverschleierung zu aktivieren. Möchten Sie wirklich ohne Verschlüsselung fortfahren?", + "obsidianLiveSyncSettingTab.msgFetchConfigFromRemote": "Möchten Sie die Konfiguration vom Remote-Server abrufen?", + "obsidianLiveSyncSettingTab.msgGenerateSetupURI": "Alles fertig! Möchten Sie eine Setup-URI erzeugen, um andere Geräte einzurichten?", + "obsidianLiveSyncSettingTab.msgInvalidPassphrase": "Ihre Verschlüsselungs-Passphrase könnte ungültig sein. Möchten Sie wirklich fortfahren?", + "obsidianLiveSyncSettingTab.msgSelectAndApplyPreset": "Bitte wählen und übernehmen Sie eine beliebige Voreinstellung, um den Assistenten abzuschließen.", + "obsidianLiveSyncSettingTab.nameDisableHiddenFileSync": "Synchronisation versteckter Dateien deaktivieren", + "obsidianLiveSyncSettingTab.nameEnableHiddenFileSync": "Synchronisation versteckter Dateien aktivieren", + "obsidianLiveSyncSettingTab.nameHiddenFileSynchronization": "Synchronisation versteckter Dateien", + "obsidianLiveSyncSettingTab.optionDisableAllAutomatic": "Alle automatischen Vorgänge deaktivieren", + "obsidianLiveSyncSettingTab.optionLiveSync": "LiveSync-Modus", + "obsidianLiveSyncSettingTab.optionOnEvents": "Bei Ereignissen", + "obsidianLiveSyncSettingTab.optionPeriodicAndEvents": "Periodisch und bei Ereignissen", + "obsidianLiveSyncSettingTab.optionPeriodicWithBatch": "Periodisch mit Stapelverarbeitung", + "obsidianLiveSyncSettingTab.titleAppearance": "Darstellung", + "obsidianLiveSyncSettingTab.titleConflictResolution": "Konfliktbehandlung", + "obsidianLiveSyncSettingTab.titleCongratulations": "Glückwunsch!", + "obsidianLiveSyncSettingTab.titleCouchDB": "CouchDB-Server", + "obsidianLiveSyncSettingTab.titleDeletionPropagation": "Weitergabe von Löschungen", + "obsidianLiveSyncSettingTab.titleEncryptionNotEnabled": "Verschlüsselung ist nicht aktiviert", + "obsidianLiveSyncSettingTab.titleEncryptionPassphraseInvalid": "Ungültige Verschlüsselungs-Passphrase", + "obsidianLiveSyncSettingTab.titleFetchConfig": "Konfiguration abrufen", + "obsidianLiveSyncSettingTab.titleHiddenFiles": "Versteckte Dateien", + "obsidianLiveSyncSettingTab.titleLogging": "Protokollierung", + "obsidianLiveSyncSettingTab.titleMinioS3R2": "MinIO / S3 / R2", + "obsidianLiveSyncSettingTab.titleNotification": "Benachrichtigungen", + "obsidianLiveSyncSettingTab.titleRemoteConfigCheckFailed": "Prüfung der Remote-Konfiguration fehlgeschlagen", + "obsidianLiveSyncSettingTab.titleRemoteServer": "Remote-Server", + "obsidianLiveSyncSettingTab.titleSynchronizationMethod": "Synchronisationsmethode", + "obsidianLiveSyncSettingTab.titleSynchronizationPreset": "Synchronisationsvorgabe", + "obsidianLiveSyncSettingTab.titleSyncSettingsViaMarkdown": "Synchronisationseinstellungen per Markdown", + "obsidianLiveSyncSettingTab.titleUpdateThinning": "Update-Ausdünnung", + "Ok": "OK", + "Old Algorithm": "Alter Algorithmus", + "Older fallback (Slow, W/O WebAssembly)": "Älterer Fallback (langsam, ohne WebAssembly)", + "Overwrite patterns": "Überschreibungsmuster", + "Overwrite remote": "Remote überschreiben", + "Overwrite remote with local DB and passphrase.": "Remote mit lokaler Datenbank und Passphrase überschreiben.", + "Overwrite Server Data with This Device's Files": "Serverdaten mit den Dateien dieses Geräts überschreiben", + "paneMaintenance.markDeviceResolvedAfterBackup": "Markieren Sie das Gerät nach der Sicherung als gelöst.", + "paneMaintenance.remoteLockedAndDeviceNotAccepted": "Die Remote-Datenbank ist gesperrt und dieses Gerät wurde noch nicht akzeptiert.", + "paneMaintenance.remoteLockedResolvedDevice": "Die Remote-Datenbank ist gesperrt. Dieses Gerät wurde bereits akzeptiert.", + "paneMaintenance.unlockDatabaseReady": "Die Datenbank kann jetzt entsperrt werden.", + "Paste a connection string": "Verbindungszeichenfolge einfügen", + "Paste the Setup URI generated from one of your active devices.": "Fügen Sie die Setup-URI ein, die auf einem Ihrer aktiven Geräte erzeugt wurde。", + "Patterns to match files for overwriting instead of merging": "Muster zum Erkennen von Dateien, die überschrieben statt zusammengeführt werden sollen", + "Patterns to match files for syncing": "Muster zum Erkennen von Dateien für die Synchronisation", + "Peer-to-Peer only": "Nur Peer-to-Peer", + "Peer-to-Peer Synchronisation": "Peer-to-Peer-Synchronisation", + "Perform": "Ausführen", + "Perform cleanup": "Bereinigung ausführen", + "Perform Garbage Collection": "Garbage Collection ausführen", + "Perform Garbage Collection to remove unused chunks and reduce database size.": "Führt Garbage Collection aus, um ungenutzte Chunks zu entfernen und die Datenbankgröße zu reduzieren.", + "Pick a file to resolve conflict": "Datei zur Konfliktlösung auswählen", + "Please disable 'Read chunks online' in settings to use Garbage Collection.": "Bitte deaktivieren Sie „Read chunks online“ in den Einstellungen, um die Garbage Collection zu verwenden.", + "Please enable 'Compute revisions for chunks' in settings to use Garbage Collection.": "Bitte aktivieren Sie „Compute revisions for chunks“ in den Einstellungen, um die Garbage Collection zu verwenden.", + "Please select 'Cancel' explicitly to cancel this operation.": "Bitte wählen Sie ausdrücklich „Abbrechen“, um diesen Vorgang abzubrechen.", + "Please select a method to import the settings from another device.": "Bitte wählen Sie eine Methode, um die Einstellungen von einem anderen Gerät zu importieren.", + "Please select an option to proceed": "Bitte wählen Sie eine Option, um fortzufahren", + "Please select the type of server to which you are connecting.": "Bitte wählen Sie den Servertyp aus, mit dem Sie sich verbinden。", + "Please set this device name": "Bitte legen Sie den Namen dieses Geräts fest", + "Plug-in version": "Plugin-Version", + "Proceed Garbage Collection": "Garbage Collection fortsetzen", + "Proceed with Setup URI": "Mit Setup-URI fortfahren", + "Proceeding with Garbage Collection, ignoring missing nodes.": "Garbage Collection wird fortgesetzt, fehlende Knoten werden ignoriert.", + "Proceeding with Garbage Collection.": "Garbage Collection wird ausgeführt.", + "Progress": "Fortschritt", + "PureJS fallback (Fast, W/O WebAssembly)": "PureJS-Fallback (schnell, ohne WebAssembly)", + "Purge all download/upload cache.": "Gesamten Download-/Upload-Cache leeren.", + "Purge all journal counter": "Alle Journal-Zähler leeren", + "Rebuild local and remote database with local files.": "Lokale und Remote-Datenbank anhand der lokalen Dateien neu aufbauen.", + "Rebuilding Operations (Remote Only)": "Neuaufbau-Vorgänge (nur Remote)", + "Recreate all": "Alle neu erstellen", + "Recreate missing chunks for all files": "Fehlende Chunks für alle Dateien neu erstellen", + "Remediation": "Problembehebung", + "Remediation Setting Changed": "Problembehebungs-Einstellung geändert", + "Remote Database Tweak (In sunset)": "Remote-Datenbank-Optimierung (wird eingestellt)", + "Remote Databases": "Remote-Datenbanken", + "Remote name": "Remote-Name", + "Rename": "Umbenennen", + "Resend": "Erneut senden", + "Resend all chunks to the remote.": "Alle Chunks erneut an das Remote senden.", + "Reset": "Zurücksetzen", + "Reset all": "Alles zurücksetzen", + "Reset all journal counter": "Alle Journal-Zähler zurücksetzen", + "Reset journal received history": "Empfangsverlauf des Journals zurücksetzen", + "Reset journal sent history": "Sendeverlauf des Journals zurücksetzen", + "Reset received": "Empfang zurücksetzen", + "Reset sent history": "Sendeverlauf zurücksetzen", + "Reset Synchronisation information": "Synchronisationsinformationen zurücksetzen", + "Reset Synchronisation on This Device": "Synchronisation auf diesem Gerät zurücksetzen", + "Resolve All": "Alle auflösen", + "Resolve all conflicted files": "Alle Konfliktdateien auflösen", + "Resolve All conflicted files by the newer one": "Alle Konfliktdateien mit der neueren Version auflösen", + "Resolve all conflicted files by the newer one. Caution: This will overwrite the older one, and cannot resurrect the overwritten one.": "Löst alle Konfliktdateien zugunsten der neueren Version auf. Achtung: Dadurch wird die ältere Version überschrieben und kann nicht wiederhergestellt werden.", + "Restart Now": "Jetzt neu starten", + "Restore or reconstruct local database from remote.": "Lokale Datenbank aus dem Remote wiederherstellen oder neu aufbauen.", + "S3/MinIO/R2 Object Storage": "S3-/MinIO-/R2-Objektspeicher", + "Scan a QR Code (Recommended for mobile)": "QR-Code scannen (für Mobilgeräte empfohlen)", + "Scan the QR code displayed on an active device using this device's camera.": "Scannen Sie den auf einem aktiven Gerät angezeigten QR-Code mit der Kamera dieses Geräts。", + "Schedule and Restart": "Planen und neu starten", + "Scram!": "Notfallmaßnahmen", + "Select the database adapter to use.": "Wählen Sie den zu verwendenden Datenbankadapter aus.", + "Send": "Senden", + "Send chunks": "Chunks senden", + "Setting.GenerateKeyPair.Desc": "Wir haben ein Schlüsselpaar erzeugt!\n\nHinweis: Dieses Schlüsselpaar wird nie wieder angezeigt. Bitte bewahren Sie es an einem sicheren Ort auf. Wenn Sie es verlieren, müssen Sie ein neues Schlüsselpaar erzeugen.\nHinweis 2: Der öffentliche Schlüssel liegt im SPKI-Format vor, der private Schlüssel im PKCS8-Format. Zur besseren Handhabung werden Zeilenumbrüche im öffentlichen Schlüssel zu `\\n` umgewandelt.\nHinweis 3: Der öffentliche Schlüssel sollte in der Remote-Datenbank hinterlegt werden, der private Schlüssel auf den lokalen Geräten.\n\n>[!NUR FÜR IHRE AUGEN]-\n>
\n>\n> ### Öffentlicher Schlüssel\n> ```\n${public_key}\n> ```\n>\n> ### Privater Schlüssel\n> ```\n${private_key}\n> ```\n>\n>
\n\n>[!Beides zum Kopieren]-\n>\n>
\n>\n> ```\n${public_key}\n${private_key}\n> ```\n>\n>
", + "Setting.GenerateKeyPair.Title": "Neues Schlüsselpaar wurde erzeugt!", + "Setup URI dialog cancelled.": "Setup-URI-Dialog abgebrochen.", + "Setup.RemoteE2EE.AdvancedTitle": "Erweitert", + "Setup.RemoteE2EE.AlgorithmWarning": "Wenn Sie den Verschlüsselungsalgorithmus ändern, können Sie nicht mehr auf Daten zugreifen, die zuvor mit einem anderen Algorithmus verschlüsselt wurden. Stellen Sie sicher, dass alle Ihre Geräte denselben Algorithmus verwenden, damit der Zugriff auf Ihre Daten erhalten bleibt.", + "Setup.RemoteE2EE.ButtonCancel": "Abbrechen", + "Setup.RemoteE2EE.ButtonProceed": "Fortfahren", + "Setup.RemoteE2EE.DefaultAlgorithmDesc": "In den meisten Fällen sollten Sie beim Standardalgorithmus (${algorithm}) bleiben. Diese Einstellung ist nur erforderlich, wenn Sie bereits einen Vault haben, der in einem anderen Format verschlüsselt wurde.", + "Setup.RemoteE2EE.Guidance": "Bitte konfigurieren Sie Ihre Einstellungen für die Ende-zu-Ende-Verschlüsselung.", + "Setup.RemoteE2EE.LabelEncrypt": "Ende-zu-Ende-Verschlüsselung", + "Setup.RemoteE2EE.LabelEncryptionAlgorithm": "Verschlüsselungsalgorithmus", + "Setup.RemoteE2EE.LabelObfuscateProperties": "Eigenschaften verschleiern", + "Setup.RemoteE2EE.MultiDestinationWarning": "Diese Einstellung muss auch dann identisch sein, wenn Sie sich mit mehreren Synchronisationszielen verbinden.", + "Setup.RemoteE2EE.ObfuscatePropertiesDesc": "Das Verschleiern von Eigenschaften (z. B. Dateipfad, Größe sowie Erstellungs- und Änderungsdatum) fügt eine zusätzliche Sicherheitsebene hinzu, da die Struktur und die Namen Ihrer Dateien und Ordner auf dem Remote-Server schwerer erkennbar sind. Das schützt Ihre Privatsphäre und erschwert es unbefugten Personen, Informationen über Ihre Daten abzuleiten.", + "Setup.RemoteE2EE.PassphraseValidationLine1": "Bitte beachten Sie, dass die Passphrase für die Ende-zu-Ende-Verschlüsselung erst geprüft wird, wenn der Synchronisationsvorgang tatsächlich beginnt. Dies ist eine Sicherheitsmaßnahme zum Schutz Ihrer Daten.", + "Setup.RemoteE2EE.PassphraseValidationLine2": "Daher bitten wir Sie, beim manuellen Konfigurieren der Serverinformationen äußerst vorsichtig zu sein. Wenn eine falsche Passphrase eingegeben wird, werden die Daten auf dem Server beschädigt. Bitte haben Sie Verständnis dafür, dass dies beabsichtigtes Verhalten ist.", + "Setup.RemoteE2EE.PlaceholderPassphrase": "Geben Sie Ihre Passphrase ein", + "Setup.RemoteE2EE.StronglyRecommendedLine1": "Wenn Sie die Ende-zu-Ende-Verschlüsselung aktivieren, werden Ihre Daten auf Ihrem Gerät verschlüsselt, bevor sie an den Remote-Server gesendet werden. Das bedeutet, dass selbst bei Zugriff auf den Server niemand Ihre Daten ohne die Passphrase lesen kann. Merken Sie sich Ihre Passphrase unbedingt, da sie auch auf anderen Geräten zum Entschlüsseln Ihrer Daten benötigt wird.", + "Setup.RemoteE2EE.StronglyRecommendedLine2": "Bitte beachten Sie außerdem: Wenn Sie Peer-to-Peer-Synchronisation verwenden, wird diese Konfiguration auch dann genutzt, wenn Sie künftig zu anderen Methoden wechseln und sich mit einem Remote-Server verbinden.", + "Setup.RemoteE2EE.StronglyRecommendedTitle": "Dringend empfohlen", + "Setup.RemoteE2EE.Title": "Ende-zu-Ende-Verschlüsselung", + "Setup.ScanQRCode.ButtonClose": "Diesen Dialog schließen", + "Setup.ScanQRCode.Guidance": "Bitte folgen Sie den untenstehenden Schritten, um die Einstellungen von Ihrem vorhandenen Gerät zu importieren.", + "Setup.ScanQRCode.Step1": "Lassen Sie auf diesem Gerät bitte diesen Vault geöffnet.", + "Setup.ScanQRCode.Step2": "Öffnen Sie auf dem Quellgerät Obsidian.", + "Setup.ScanQRCode.Step3": "Führen Sie auf dem Quellgerät im Befehlsmenü den Befehl „Einstellungen als QR-Code anzeigen“ aus.", + "Setup.ScanQRCode.Step4": "Wechseln Sie auf diesem Gerät zur Kamera-App oder verwenden Sie einen QR-Code-Scanner, um den angezeigten QR-Code zu scannen.", + "Setup.ScanQRCode.Title": "QR-Code scannen", + "Setup.UseSetupURI.ButtonCancel": "Abbrechen", + "Setup.UseSetupURI.ButtonProceed": "Einstellungen testen und fortfahren", + "Setup.UseSetupURI.ErrorFailedToParse": "Die Setup-URI konnte nicht verarbeitet werden. Bitte prüfen Sie URI und Passphrase.", + "Setup.UseSetupURI.ErrorPassphraseRequired": "Bitte geben Sie die Passphrase des Vaults ein.", + "Setup.UseSetupURI.GuidanceLine1": "Bitte geben Sie die Setup-URI ein, die während der Servereinrichtung oder auf einem anderen Gerät erzeugt wurde, zusammen mit der Passphrase des Vaults.", + "Setup.UseSetupURI.GuidanceLine2": "Sie können eine neue Setup-URI erzeugen, indem Sie im Befehlsmenü den Befehl „Einstellungen als neue Setup-URI kopieren“ ausführen.", + "Setup.UseSetupURI.InvalidInfo": "Die Setup-URI ist ungültig. Bitte prüfen Sie sie und versuchen Sie es erneut.", + "Setup.UseSetupURI.LabelPassphrase": "Vault-Passphrase", + "Setup.UseSetupURI.LabelSetupURI": "Setup-URI", + "Setup.UseSetupURI.PlaceholderPassphrase": "Geben Sie die Passphrase Ihres Vaults ein", + "Setup.UseSetupURI.Title": "Setup-URI eingeben", + "Setup.UseSetupURI.ValidInfo": "Die Setup-URI ist gültig und kann verwendet werden.", + "Show full banner": "Vollständiges Banner anzeigen", + "Show icon only": "Nur Symbol anzeigen", + "Show status icon instead of file warnings banner": "Statussymbol statt Dateiwarnungsbanner anzeigen", + "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.": "Einige Geräte haben unterschiedliche Fortschrittswerte (max: ${maxProgress}, min: ${minProgress}).\nDas kann darauf hindeuten, dass einige Geräte die Synchronisation noch nicht abgeschlossen haben, was zu Konflikten führen könnte. Es wird dringend empfohlen, vor dem Fortfahren zu bestätigen, dass alle Geräte synchronisiert sind.", + "Switch to IDB": "Zu IDB wechseln", + "Switch to IndexedDB": "Zu IndexedDB wechseln", + "Synchronisation utilising journal files. You must have set up an S3/MinIO/R2 compatible object storage.": "Synchronisation über Journaldateien. Sie müssen einen S3/MinIO/R2-kompatiblen Objektspeicher eingerichtet haben。", + "Synchronising files": "Zu synchronisierende Dateien", + "Syncing": "Synchronisierung", + "Target patterns": "Zielmuster", + "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.": "Für die folgenden akzeptierten Knoten fehlen die Knoteninformationen:\n- ${missingNodes}\n\nDas deutet darauf hin, dass sie seit einiger Zeit nicht verbunden waren oder noch eine ältere Version verwenden.\nEs ist nach Möglichkeit besser, zunächst alle Geräte zu aktualisieren. Wenn Sie Geräte haben, die nicht mehr verwendet werden, können Sie alle akzeptierten Knoten löschen, indem Sie die Remote-Datenbank einmal sperren.", + "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.": "Diese Funktion ermöglicht die direkte Synchronisation zwischen Geräten. Es wird kein Server benötigt, aber beide Geräte müssen gleichzeitig online sein, damit synchronisiert werden kann, und einige Funktionen können eingeschränkt sein. Eine Internetverbindung wird nur für das Signalling (Erkennen von Peers) benötigt, nicht für die Datenübertragung。", + "This is an advanced option for users who do not have a URI or who wish to configure detailed settings.": "Dies ist eine erweiterte Option für Benutzer, die keine URI haben oder detaillierte Einstellungen manuell konfigurieren möchten。", + "This is the most suitable synchronisation method for the design. All functions are available. You must have set up a CouchDB instance.": "Dies ist die für das Design am besten geeignete Synchronisationsmethode. Alle Funktionen sind verfügbar. Sie müssen eine CouchDB-Instanz eingerichtet haben。", + "This will recreate chunks for all files. If there were missing chunks, this may fix the errors.": "Dadurch werden die Chunks für alle Dateien neu erstellt. Falls Chunks fehlen, können die Fehler dadurch behoben werden.", + "Use a Setup URI (Recommended)": "Setup-URI verwenden (empfohlen)", + "Verify all": "Alle prüfen", + "Verify and repair all files": "Alle Dateien prüfen und reparieren", + "We will now guide you through a few questions to simplify the synchronisation setup.": "Wir führen Sie nun durch einige Fragen, um die Synchronisationseinrichtung zu vereinfachen.", + "We will now proceed with the server configuration.": "Wir fahren nun mit der Serverkonfiguration fort。", + "Welcome to Self-hosted LiveSync": "Willkommen bei Self-hosted LiveSync", + "xxhash32 (Fast but less collision resistance)": "xxhash32 (schnell, aber geringere Kollisionsresistenz)", + "xxhash64 (Fastest)": "xxhash64 (am schnellsten)", + "Yes, I want to add this device to my existing synchronisation": "Ja, ich möchte dieses Gerät zu meiner bestehenden Synchronisation hinzufügen", + "Yes, I want to set up a new synchronisation": "Ja, ich möchte eine neue Synchronisation einrichten", + "You are adding this device to an existing synchronisation setup.": "Sie fügen dieses Gerät zu einer bestehenden Synchronisationseinrichtung hinzu." +} diff --git a/src/common/messagesJson/en.json b/src/common/messagesJson/en.json new file mode 100644 index 00000000..e102f15e --- /dev/null +++ b/src/common/messagesJson/en.json @@ -0,0 +1,1134 @@ +{ + "(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)", + "(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)", + "(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.", + "> [!INFO]- The connected devices have been detected as follows:\n${devices}": "> [!INFO]- The connected devices have been detected as follows:\n${devices}", + "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.", + "Access Key": "Access Key", + "Activate": "Activate", + "Active Remote Configuration": "Active Remote Configuration", + "Add default patterns": "Add default patterns", + "Add new connection": "Add new connection", + "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.", + "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 Latest Change if Conflicting": "Apply Latest Change if Conflicting", + "Apply preset configuration": "Apply preset configuration", + "Ask a passphrase at every launch": "Ask a passphrase at every launch", + "Automatically Sync all files when opening Obsidian.": "Automatically Sync all files when opening Obsidian.", + "Back": "Back", + "Back to non-configured": "Back to non-configured", + "Batch database update": "Batch database update", + "Batch limit": "Batch limit", + "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.", + "Bucket Name": "Bucket Name", + "Cancel": "Cancel", + "Cancel Garbage Collection": "Cancel Garbage Collection", + "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.", + "cmdConfigSync.showCustomizationSync": "Show Customization sync", + "Comma separated `.gitignore, .dockerignore`": "Comma separated `.gitignore, .dockerignore`", + "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 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)", + "Compatibility (Internal API Usage)": "Compatibility (Internal API Usage)", + "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 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.", + "Connection Method": "Connection Method", + "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 Connection Tweak": "CouchDB Connection Tweak", + "Cross-platform": "Cross-platform", + "Current adapter: {adapter}": "Current adapter: {adapter}", + "Customization Sync": "Customization Sync", + "Customization Sync (Beta3)": "Customization Sync (Beta3)", + "Data Compression": "Data Compression", + "Database -> Storage": "Database -> Storage", + "Database Adapter": "Database Adapter", + "Database Name": "Database Name", + "Database suffix": "Database suffix", + "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 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}'?", + "desktop": "desktop", + "Developer": "Developer", + "Device": "Device", + "Device name": "Device name", + "Device Setup Method": "Device Setup Method", + "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!", + "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.", + "Display Language": "Display Language", + "Display name": "Display name", + "Do not check configuration mismatch before replication": "Do not check configuration mismatch before replication", + "Do not keep metadata of deleted files.": "Do not keep metadata of deleted files.", + "Do not split chunks in the background": "Do not split chunks in the background", + "Do not use internal API": "Do not use internal API", + "Doctor.Button.DismissThisVersion": "No, and do not ask again until the next release", + "Doctor.Button.Fix": "Fix it", + "Doctor.Button.FixButNoRebuild": "Fix it but no rebuild", + "Doctor.Button.No": "No", + "Doctor.Button.Skip": "Leave it as is", + "Doctor.Button.Yes": "Yes", + "Doctor.Dialogue.Main": "Hi! Config Doctor has been activated because of ${activateReason}!\nAnd, unfortunately some configurations were detected as potential problems.\nPlease be assured. Let's solve them one by one.\n\nTo let you know ahead of time, we will ask you about the following items.\n\n${issues}\n\nShall we get started?", + "Doctor.Dialogue.MainFix": "\n## ${name}\n\n| Current | Ideal |\n|:---:|:---:|\n| ${current} | ${ideal} |\n\n**Recommendation Level:** ${level}\n\n### Why this has been detected?\n\n${reason}\n\n${note}\n\nFix this to the ideal value?", + "Doctor.Dialogue.Title": "Self-hosted LiveSync Config Doctor", + "Doctor.Dialogue.TitleAlmostDone": "Almost done!", + "Doctor.Dialogue.TitleFix": "Fix issue ${current}/${total}", + "Doctor.Level.Must": "Must", + "Doctor.Level.Necessary": "Necessary", + "Doctor.Level.Optional": "Optional", + "Doctor.Level.Recommended": "Recommended", + "Doctor.Message.NoIssues": "No issues detected!", + "Doctor.Message.RebuildLocalRequired": "Attention! A local database rebuild is required to apply this!", + "Doctor.Message.RebuildRequired": "Attention! A rebuild is required to apply this!", + "Doctor.Message.SomeSkipped": "We left some issues as is. Shall I ask you again on next startup?", + "Doctor.RULES.E2EE_V02500.REASON": "The End-to-End Encryption has got now more robust and faster. Also because, the previous E2EE was found to be compromised in a re-conducted code review. It should be applied as soon as possible. Really apologises for your inconvenience. And, this setting is not forward compatible. All synchronised devices must be updated to v0.25.0 or higher. Rebuilds are not required and will be converted from the new transfer to the new format, However, it is recommended to rebuild whenever possible.", + "Document History": "Document History", + "Duplicate": "Duplicate", + "Duplicate remote": "Duplicate remote", + "E2EE Configuration": "E2EE Configuration", + "Edge case addressing (Behaviour)": "Edge case addressing (Behaviour)", + "Edge case addressing (Database)": "Edge case addressing (Database)", + "Edge case addressing (Processing)": "Edge case addressing (Processing)", + "Emergency restart": "Emergency restart", + "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 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", + "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 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 Server Information": "Enter Server Information", + "Enter the server information manually": "Enter the server information manually", + "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 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.", + "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", + "File to resolve conflict": "File to resolve conflict", + "File to view History": "File to view History", + "Filename": "Filename", + "First, please select the option that best describes your current situation.": "First, please select the option that best describes your current situation.", + "Flag and restart": "Flag and restart", + "Forces the file to be synced when opened.": "Forces the file to be synced when opened.", + "Fresh Start Wipe": "Fresh Start Wipe", + "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", + "Garbage Collection V3 (Beta)": "Garbage Collection V3 (Beta)", + "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}", + "Handle files as Case-Sensitive": "Handle files as Case-Sensitive", + "Hidden Files": "Hidden Files", + "Hide completely": "Hide completely", + "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?", + "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 know my server details, let me enter them": "I know my server details, let me enter them", + "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.", + "If enabled, newly created chunks are temporarily kept within the document, and graduated to become independent chunks once stabilised.": "If enabled, newly created chunks are temporarily kept within the document, and graduated to become independent chunks once stabilised.", + "If enabled, the ⛔ icon will be shown inside the status instead of the file warnings banner. No details will be shown.": "If enabled, the ⛔ icon will be shown inside the status instead of the file warnings banner. No details will be shown.", + "If enabled, the file under 1kb will be processed in the UI thread.": "If enabled, the file under 1kb will be processed in the UI thread.", + "If enabled, the notification of hidden files change will be suppressed.": "If enabled, the notification of hidden files change will be suppressed.", + "If this enabled, all chunks will be stored with the revision made from its content. (Previous behaviour)": "If this enabled, all chunks will be stored with the revision made from its content. (Previous behaviour)", + "If this enabled, All files are handled as case-Sensitive (Previous behaviour).": "If this enabled, All files are handled as case-Sensitive (Previous behaviour).", + "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 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.", + "Ignore and Proceed": "Ignore and Proceed", + "Ignore files": "Ignore files", + "Ignore patterns": "Ignore patterns", + "Import connection": "Import connection", + "Incubate Chunks in Document": "Incubate Chunks in Document", + "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)", + "K.exp": "Experimental", + "K.long_p2p_sync": "%{title_p2p_sync}", + "K.P2P": "%{Peer}-to-%{Peer}", + "K.Peer": "Peer", + "K.ScanCustomization": "Scan customization", + "K.short_p2p_sync": "P2P Sync", + "K.title_p2p_sync": "Peer-to-Peer Sync", + "Keep empty folder": "Keep empty folder", + "lang_def": "Default", + "lang-de": "Deutsche", + "lang-def": "%{lang_def}", + "lang-es": "Español", + "lang-fr": "Français", + "lang-he": "Hebrew", + "lang-ja": "日本語", + "lang-ko": "한국어", + "lang-ru": "Русский", + "lang-zh": "简体中文", + "lang-zh-tw": "繁體中文", + "Later": "Later", + "Limit: {datetime} ({timestamp})": "Limit: {datetime} ({timestamp})", + "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.", + "liveSyncReplicator.checkingLastSyncPoint": "Looking for the point last synchronized point.", + "liveSyncReplicator.couldNotConnectTo": "Could not connect to ${uri} : ${name}\n(${db})", + "liveSyncReplicator.couldNotConnectToRemoteDb": "Could not connect to remote database: ${d}", + "liveSyncReplicator.couldNotConnectToServer": "The connection to the remote has been prevented, or failed.", + "liveSyncReplicator.couldNotConnectToURI": "Could not connect to ${uri}:${dbRet}", + "liveSyncReplicator.couldNotMarkResolveRemoteDb": "Could not mark resolve remote database.", + "liveSyncReplicator.liveSyncBegin": "LiveSync begin...", + "liveSyncReplicator.lockRemoteDb": "Lock remote database to prevent data corruption", + "liveSyncReplicator.markDeviceResolved": "Mark this device as 'resolved'.", + "liveSyncReplicator.mismatchedTweakDetected": "Some mismatches have been detected in the configuration between devices. Running a manual replication will attempt to resolve this issue.", + "liveSyncReplicator.oneShotSyncBegin": "OneShot Sync begin... (${syncMode})", + "liveSyncReplicator.remoteDbCorrupted": "Remote database is newer or corrupted, make sure to latest version of self-hosted-livesync installed", + "liveSyncReplicator.remoteDbCreatedOrConnected": "Remote Database Created or Connected", + "liveSyncReplicator.remoteDbDestroyed": "Remote Database Destroyed", + "liveSyncReplicator.remoteDbDestroyError": "Something happened on Remote Database Destroy:", + "liveSyncReplicator.remoteDbMarkedResolved": "Remote database has been marked resolved.", + "liveSyncReplicator.replicationClosed": "Replication closed", + "liveSyncReplicator.replicationInProgress": "Replication is already in progress", + "liveSyncReplicator.retryLowerBatchSize": "Retry with lower batch size:${batch_size}/${batches_limit}", + "liveSyncReplicator.unlockRemoteDb": "Unlock remote database to prevent data corruption", + "liveSyncSetting.errorNoSuchSettingItem": "No such setting item: ${key}", + "liveSyncSetting.originalValue": "Original: ${value}", + "liveSyncSetting.valueShouldBeInRange": "The value should ${min} < value < ${max}", + "liveSyncSettings.btnApply": "Apply", + "Local Database Tweak": "Local Database Tweak", + "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.", + "logPane.autoScroll": "Auto scroll", + "logPane.logWindowOpened": "Log window opened", + "logPane.pause": "Pause", + "logPane.title": "Self-hosted LiveSync Log", + "logPane.wrap": "Wrap", + "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", + "Maximum Incubating Chunks": "Maximum Incubating Chunks", + "Maximum Incubation Period": "Maximum Incubation Period", + "MB (0 to disable).": "MB (0 to disable).", + "Memory cache": "Memory cache", + "Memory cache size (by total characters)": "Memory cache size (by total characters)", + "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", + "moduleCheckRemoteSize.logCheckingStorageSizes": "Checking storage sizes", + "moduleCheckRemoteSize.logCurrentStorageSize": "Remote storage size: ${measuredSize}", + "moduleCheckRemoteSize.logExceededWarning": "Remote storage size: ${measuredSize} exceeded ${notifySize}", + "moduleCheckRemoteSize.logThresholdEnlarged": "Threshold has been enlarged to ${size}MB", + "moduleCheckRemoteSize.msgConfirmRebuild": "This may take a bit of a long time. Do you really want to rebuild everything now?", + "moduleCheckRemoteSize.msgDatabaseGrowing": "**Your database is getting larger!** But do not worry, we can address it now. The time before running out of space on the remote storage.\n\n| Measured size | Configured size |\n| --- | --- |\n| ${estimatedSize} | ${maxSize} |\n\n> [!MORE]-\n> If you have been using it for many years, there may be unreferenced chunks - that is, garbage - accumulating in the database. Therefore, we recommend rebuilding everything. It will probably become much smaller.\n>\n> If the volume of your vault is simply increasing, it is better to rebuild everything after organizing the files. Self-hosted LiveSync does not delete the actual data even if you delete it to speed up the process. It is roughly [documented](https://github.com/vrtmrz/obsidian-livesync/blob/main/docs/tech_info.md).\n>\n> If you don't mind the increase, you can increase the notification limit by 100MB. This is the case if you are running it on your own server. However, it is better to rebuild everything from time to time.\n>\n\n> [!WARNING]\n> If you perform rebuild everything, make sure all devices are synchronised. The plug-in will merge as much as possible, though.\n", + "moduleCheckRemoteSize.msgSetDBCapacity": "We can set a maximum database capacity warning, **to take action before running out of space on the remote storage**.\nDo you want to enable this?\n\n> [!MORE]-\n> - 0: Do not warn about storage size.\n> This is recommended if you have enough space on the remote storage especially you have self-hosted. And you can check the storage size and rebuild manually.\n> - 800: Warn if the remote storage size exceeds 800MB.\n> This is recommended if you are using fly.io with 1GB limit or IBM Cloudant.\n> - 2000: Warn if the remote storage size exceeds 2GB.\n\nIf we have reached the limit, we will be asked to enlarge the limit step by step.\n", + "moduleCheckRemoteSize.noticeExceeded": "Remote storage size is ${measuredSize}, above the configured ${notifySize} notification threshold. {HERE}", + "moduleCheckRemoteSize.noticeNotConfigured": "Remote storage size notifications are not configured. {HERE}", + "moduleCheckRemoteSize.option2GB": "2GB (Standard)", + "moduleCheckRemoteSize.option800MB": "800MB (Cloudant, fly.io)", + "moduleCheckRemoteSize.optionAskMeLater": "Ask me later", + "moduleCheckRemoteSize.optionDismiss": "Dismiss", + "moduleCheckRemoteSize.optionIncreaseLimit": "increase to ${newMax}MB", + "moduleCheckRemoteSize.optionNoWarn": "No, never warn please", + "moduleCheckRemoteSize.optionRebuildAll": "Rebuild Everything Now", + "moduleCheckRemoteSize.optionReview": "Review options", + "moduleCheckRemoteSize.titleDatabaseSizeLimitExceeded": "Remote storage size exceeded the limit", + "moduleCheckRemoteSize.titleDatabaseSizeNotify": "Setting up database size notification", + "moduleInputUIObsidian.defaultTitleConfirmation": "Confirmation", + "moduleInputUIObsidian.defaultTitleSelect": "Select", + "moduleInputUIObsidian.optionNo": "No", + "moduleInputUIObsidian.optionYes": "Yes", + "moduleLiveSyncMain.logAdditionalSafetyScan": "Additional safety scan...", + "moduleLiveSyncMain.logLoadingPlugin": "Loading plugin...", + "moduleLiveSyncMain.logPluginInitCancelled": "Plugin initialisation was cancelled by a module", + "moduleLiveSyncMain.logPluginVersion": "Self-hosted LiveSync v${manifestVersion} ${packageVersion}", + "moduleLiveSyncMain.logReadChangelog": "LiveSync has updated, please read the changelog!", + "moduleLiveSyncMain.logSafetyScanCompleted": "Additional safety scan completed", + "moduleLiveSyncMain.logSafetyScanFailed": "Additional safety scan has failed on a module", + "moduleLiveSyncMain.logUnloadingPlugin": "Unloading plugin...", + "moduleLiveSyncMain.logVersionUpdate": "LiveSync has been updated, In case of breaking updates, all automatic synchronization has been temporarily disabled. Ensure that all devices are up to date before enabling.", + "moduleLiveSyncMain.msgScramEnabled": "Self-hosted LiveSync has been configured to ignore some events. Is this correct?\n\n| Type | Status | Note |\n|:---:|:---:|---|\n| Storage Events | ${fileWatchingStatus} | Every modification will be ignored |\n| Database Events | ${parseReplicationStatus} | Every synchronised change will be postponed |\n\nDo you want to resume them and restart Obsidian?\n\n> [!DETAILS]-\n> These flags are set by the plug-in while rebuilding, or fetching. If the process ends abnormally, it may be kept unintended.\n> If you are not sure, you can try to rerun these processes. Make sure to back your vault up.\n", + "moduleLiveSyncMain.optionKeepLiveSyncDisabled": "Keep LiveSync disabled", + "moduleLiveSyncMain.optionResumeAndRestart": "Resume and restart Obsidian", + "moduleLiveSyncMain.titleScramEnabled": "Scram Enabled", + "moduleLocalDatabase.logWaitingForReady": "Waiting for ready...", + "moduleLog.showLog": "Show Log", + "moduleMigration.docUri": "https://github.com/vrtmrz/obsidian-livesync/blob/main/README.md#how-to-use", + "moduleMigration.fix0256.buttons.checkItLater": "Check it later", + "moduleMigration.fix0256.buttons.DismissForever": "I have fixed it, and do not ask again", + "moduleMigration.fix0256.buttons.fix": "Fix", + "moduleMigration.fix0256.message": "Due to a recent bug (in v0.25.6), some files may not have been saved correctly in the sync database.\nWe have scanned our files and found some that need to be fixed.\n\n**Files ready to be fixed:**\n\n${files}\n\nThese files have size-matched original file on the storage, and are likely to be recoverable.\nWe can use them to fix the database, please click the \"Fix\" button below to fix them.\n\n${messageUnrecoverable}\n\nIf you want to run it again, you can do so from Hatch.\n", + "moduleMigration.fix0256.messageUnrecoverable": "**Files cannot be fixed on this device:**\n\n${filesNotRecoverable}\n\nThese files have inconsistent metadata, and cannot be fixed on this device (mostly we cannot determine which is correct).\nTo restore them, please check your other devices (also by this feature) or restore them manually from a backup.\n", + "moduleMigration.fix0256.title": "Broken files has been detected", + "moduleMigration.insecureChunkExist.buttons.fetch": "I already rebuilt the remote. Fetch from the remote", + "moduleMigration.insecureChunkExist.buttons.later": "I will do it later", + "moduleMigration.insecureChunkExist.buttons.rebuild": "Rebuild Everything", + "moduleMigration.insecureChunkExist.laterMessage": "We strongly recommend to treat this as soon as possible!", + "moduleMigration.insecureChunkExist.message": "Some chunks are not securely stored and are not encrypted in databases.\n**Please rebuild the database to fix this issue**.\n\nIf your Remote Database is not configured with SSL, or using less-secure credentials, **you are at risk of exposing sensitive data**.\n\nNote: Please upgrade your Self-hosted LiveSync v0.25.6 or higher on all your devices, and back your vault up surely.\nNote2: Rebuild Everything and Fetch consumes a bit of time and traffic, please do it in off-peak hours and ensure a stable network connection.\n", + "moduleMigration.insecureChunkExist.title": "Insecure chunks found!", + "moduleMigration.logBulkSendCorrupted": "Send chunks in bulk has been enabled, however, this feature had been corrupted. Sorry for your inconvenience. Automatically disabled.", + "moduleMigration.logFetchRemoteTweakFailed": "Failed to fetch remote tweak values", + "moduleMigration.logLocalDatabaseNotReady": "Something went wrong! The local database is not ready", + "moduleMigration.logMigratedSameBehaviour": "Migrated to db:${current} with the same behaviour as before", + "moduleMigration.logMigrationFailed": "Migration failed or cancelled from ${old} to ${current}", + "moduleMigration.logRedflag2CreationFail": "Failed to create redflag2", + "moduleMigration.logRemoteTweakUnavailable": "Could not get remote tweak values", + "moduleMigration.logSetupCancelled": "The setup has been cancelled, Self-hosted LiveSync waiting for your setup!", + "moduleMigration.msgFetchRemoteAgain": "As you may already know, the self-hosted LiveSync has changed its default behaviour and database structure.\n\nAnd thankfully, with your time and efforts, the remote database appears to have already been migrated. Congratulations!\n\nHowever, we need a bit more. The configuration of this device is not compatible with the remote database. We will need to fetch the remote database again. Should we fetch from the remote again now?\n\n___Note: We cannot synchronise until the configuration has been changed and the database has been fetched again.___\n___Note2: The chunks are completely immutable, we can fetch only the metadata and difference.___", + "moduleMigration.msgInitialSetup": "Your device has **not been set up yet**. Let me guide you through the setup process.\n\nPlease keep in mind that every dialogue content can be copied to the clipboard. If you need to refer to it later, you can paste it into a note in Obsidian. You can also translate it into your language using a translation tool.\n\nFirst, do you have **Setup URI**?\n\nNote: If you do not know what it is, please refer to the [documentation](${URI_DOC}).", + "moduleMigration.msgRecommendSetupUri": "We strongly recommend that you generate a set-up URI and use it.\nIf you do not have knowledge about it, please refer to the [documentation](${URI_DOC}) (Sorry again, but it is important).\n\nHow do you want to set it up manually?", + "moduleMigration.msgSinceV02321": "Since v0.23.21, the self-hosted LiveSync has changed the default behaviour and database structure. The following changes have been made:\n\n1. **Case sensitivity of filenames**\n The handling of filenames is now case-insensitive. This is a beneficial change for most platforms, other than Linux and iOS, which do not manage filename case sensitivity effectively.\n (On These, a warning will be displayed for files with the same name but different cases).\n\n2. **Revision handling of the chunks**\n Chunks are immutable, which allows their revisions to be fixed. This change will enhance the performance of file saving.\n\n___However, to enable either of these changes, both remote and local databases need to be rebuilt. This process takes a few minutes, and we recommend doing it when you have ample time.___\n\n- If you wish to maintain the previous behaviour, you can skip this process by using `${KEEP}`.\n- If you do not have enough time, please choose `${DISMISS}`. You will be prompted again later.\n- If you have rebuilt the database on another device, please select `${DISMISS}` and try synchronizing again. Since a difference has been detected, you will be prompted again.", + "moduleMigration.optionAdjustRemote": "Adjust to remote", + "moduleMigration.optionDecideLater": "Decide it later", + "moduleMigration.optionEnableBoth": "Enable both", + "moduleMigration.optionEnableFilenameCaseInsensitive": "Enable only #1", + "moduleMigration.optionEnableFixedRevisionForChunks": "Enable only #2", + "moduleMigration.optionHaveSetupUri": "Yes, I have", + "moduleMigration.optionKeepPreviousBehaviour": "Keep previous behaviour", + "moduleMigration.optionManualSetup": "Set it up all manually", + "moduleMigration.optionNoAskAgain": "No, please ask again", + "moduleMigration.optionNoSetupUri": "No, I do not have", + "moduleMigration.optionRemindNextLaunch": "Remind me at the next launch", + "moduleMigration.optionSetupViaP2P": "Use %{short_p2p_sync} to set up", + "moduleMigration.optionSetupWizard": "Take me into the setup wizard", + "moduleMigration.optionYesFetchAgain": "Yes, fetch again", + "moduleMigration.titleCaseSensitivity": "Case Sensitivity", + "moduleMigration.titleRecommendSetupUri": "Recommendation to use Setup URI", + "moduleMigration.titleWelcome": "Welcome to Self-hosted LiveSync", + "moduleObsidianMenu.replicate": "Replicate", + "More actions": "More actions", + "Move remotely deleted files to the trash, instead of deleting.": "Move remotely deleted files to the trash, instead of deleting.", + "Network warning style": "Network warning style", + "New Remote": "New Remote", + "No connected device information found. Cancelling Garbage Collection.": "No connected device information found. Cancelling Garbage Collection.", + "No limit configured": "No limit configured", + "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.", + "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.", + "Obsidian version": "Obsidian version", + "obsidianLiveSyncSettingTab.btnApply": "Apply", + "obsidianLiveSyncSettingTab.btnCheck": "Check", + "obsidianLiveSyncSettingTab.btnCopy": "Copy", + "obsidianLiveSyncSettingTab.btnDisable": "Disable", + "obsidianLiveSyncSettingTab.btnDiscard": "Discard", + "obsidianLiveSyncSettingTab.btnEnable": "Enable", + "obsidianLiveSyncSettingTab.btnFix": "Fix", + "obsidianLiveSyncSettingTab.btnGotItAndUpdated": "I got it and updated.", + "obsidianLiveSyncSettingTab.btnNext": "Next", + "obsidianLiveSyncSettingTab.btnStart": "Start", + "obsidianLiveSyncSettingTab.btnTest": "Test", + "obsidianLiveSyncSettingTab.btnUse": "Use", + "obsidianLiveSyncSettingTab.buttonFetch": "Fetch", + "obsidianLiveSyncSettingTab.buttonNext": "Next", + "obsidianLiveSyncSettingTab.defaultLanguage": "Default", + "obsidianLiveSyncSettingTab.descConnectSetupURI": "This is the recommended method to set up Self-hosted LiveSync with a Setup URI.", + "obsidianLiveSyncSettingTab.descCopySetupURI": "Perfect for setting up a new device!", + "obsidianLiveSyncSettingTab.descEnableLiveSync": "Only enable this after configuring either of the above two options or completing all configuration manually.", + "obsidianLiveSyncSettingTab.descFetchConfigFromRemote": "Fetch necessary settings from already configured remote server.", + "obsidianLiveSyncSettingTab.descManualSetup": "Not recommended, but useful if you don't have a Setup URI", + "obsidianLiveSyncSettingTab.descTestDatabaseConnection": "Open database connection. If the remote database is not found and you have permission to create a database, the database will be created.", + "obsidianLiveSyncSettingTab.descValidateDatabaseConfig": "Checks and fixes any potential issues with the database config.", + "obsidianLiveSyncSettingTab.errAccessForbidden": "❗ Access forbidden.", + "obsidianLiveSyncSettingTab.errCannotContinueTest": "We could not continue the test.", + "obsidianLiveSyncSettingTab.errCorsCredentials": "❗ cors.credentials is wrong", + "obsidianLiveSyncSettingTab.errCorsNotAllowingCredentials": "❗ CORS is not allowing credentials", + "obsidianLiveSyncSettingTab.errCorsOrigins": "❗ cors.origins is wrong", + "obsidianLiveSyncSettingTab.errEnableCors": "❗ httpd.enable_cors is wrong", + "obsidianLiveSyncSettingTab.errEnableCorsChttpd": "❗ chttpd.enable_cors is wrong", + "obsidianLiveSyncSettingTab.errMaxDocumentSize": "❗ couchdb.max_document_size is low)", + "obsidianLiveSyncSettingTab.errMaxRequestSize": "❗ chttpd.max_http_request_size is low)", + "obsidianLiveSyncSettingTab.errMissingWwwAuth": "❗ httpd.WWW-Authenticate is missing", + "obsidianLiveSyncSettingTab.errRequireValidUser": "❗ chttpd.require_valid_user is wrong.", + "obsidianLiveSyncSettingTab.errRequireValidUserAuth": "❗ chttpd_auth.require_valid_user is wrong.", + "obsidianLiveSyncSettingTab.labelDisabled": "⏹️ : Disabled", + "obsidianLiveSyncSettingTab.labelEnabled": "🔁 : Enabled", + "obsidianLiveSyncSettingTab.levelAdvanced": " (Advanced)", + "obsidianLiveSyncSettingTab.levelEdgeCase": " (Edge Case)", + "obsidianLiveSyncSettingTab.levelPowerUser": " (Power User)", + "obsidianLiveSyncSettingTab.linkOpenInBrowser": "Open in browser", + "obsidianLiveSyncSettingTab.linkPageTop": "Page Top", + "obsidianLiveSyncSettingTab.linkTipsAndTroubleshooting": "Tips and Troubleshooting", + "obsidianLiveSyncSettingTab.linkTroubleshooting": "/docs/troubleshooting.md", + "obsidianLiveSyncSettingTab.logCannotUseCloudant": "This feature cannot be used with IBM Cloudant.", + "obsidianLiveSyncSettingTab.logCheckingConfigDone": "Checking configuration done", + "obsidianLiveSyncSettingTab.logCheckingConfigFailed": "Checking configuration failed", + "obsidianLiveSyncSettingTab.logCheckingDbConfig": "Checking database configuration", + "obsidianLiveSyncSettingTab.logCheckPassphraseFailed": "ERROR: Failed to check passphrase with the remote server:\n${db}.", + "obsidianLiveSyncSettingTab.logConfiguredDisabled": "Configured synchronization mode: DISABLED", + "obsidianLiveSyncSettingTab.logConfiguredLiveSync": "Configured synchronization mode: LiveSync", + "obsidianLiveSyncSettingTab.logConfiguredPeriodic": "Configured synchronization mode: Periodic", + "obsidianLiveSyncSettingTab.logCouchDbConfigFail": "CouchDB Configuration: ${title} failed", + "obsidianLiveSyncSettingTab.logCouchDbConfigSet": "CouchDB Configuration: ${title} -> Set ${key} to ${value}", + "obsidianLiveSyncSettingTab.logCouchDbConfigUpdated": "CouchDB Configuration: ${title} successfully updated", + "obsidianLiveSyncSettingTab.logDatabaseConnected": "Database connected", + "obsidianLiveSyncSettingTab.logEncryptionNoPassphrase": "You cannot enable encryption without a passphrase", + "obsidianLiveSyncSettingTab.logEncryptionNoSupport": "Your device does not support encryption.", + "obsidianLiveSyncSettingTab.logErrorOccurred": "An error occurred!!", + "obsidianLiveSyncSettingTab.logEstimatedSize": "Estimated size: ${size}", + "obsidianLiveSyncSettingTab.logPassphraseInvalid": "Passphrase is not valid, please fix it.", + "obsidianLiveSyncSettingTab.logPassphraseNotCompatible": "ERROR: Passphrase is not compatible with the remote server! Please check it again!", + "obsidianLiveSyncSettingTab.logRebuildNote": "Syncing has been disabled, fetch and re-enabled if desired.", + "obsidianLiveSyncSettingTab.logSelectAnyPreset": "Select any preset.", + "obsidianLiveSyncSettingTab.logServerConfigurationCheck": "obsidianLiveSyncSettingTab.logServerConfigurationCheck", + "obsidianLiveSyncSettingTab.msgAreYouSureProceed": "Are you sure to proceed?", + "obsidianLiveSyncSettingTab.msgChangesNeedToBeApplied": "Changes need to be applied!", + "obsidianLiveSyncSettingTab.msgConfigCheck": "--Config check--", + "obsidianLiveSyncSettingTab.msgConfigCheckFailed": "The configuration check has failed. Do you want to continue anyway?", + "obsidianLiveSyncSettingTab.msgConnectionCheck": "--Connection check--", + "obsidianLiveSyncSettingTab.msgConnectionProxyNote": "If you're having trouble with the Connection-check (even after checking config), please check your reverse proxy configuration.", + "obsidianLiveSyncSettingTab.msgCurrentOrigin": "Current origin: ${origin}", + "obsidianLiveSyncSettingTab.msgDiscardConfirmation": "Do you really want to discard existing settings and databases?", + "obsidianLiveSyncSettingTab.msgDone": "--Done--", + "obsidianLiveSyncSettingTab.msgEnableCors": "Set httpd.enable_cors", + "obsidianLiveSyncSettingTab.msgEnableCorsChttpd": "Set chttpd.enable_cors", + "obsidianLiveSyncSettingTab.msgEnableEncryptionRecommendation": "We recommend enabling End-To-End Encryption, and Path Obfuscation. Are you sure you want to continue without encryption?", + "obsidianLiveSyncSettingTab.msgFetchConfigFromRemote": "Do you want to fetch the config from the remote server?", + "obsidianLiveSyncSettingTab.msgGenerateSetupURI": "All done! Do you want to generate a setup URI to set up other devices?", + "obsidianLiveSyncSettingTab.msgIfConfigNotPersistent": "If the server configuration is not persistent (e.g., running on docker), the values here may change. Once you are able to connect, please update the settings in the server's local.ini.", + "obsidianLiveSyncSettingTab.msgInvalidPassphrase": "Your encryption passphrase might be invalid. Are you sure you want to continue?", + "obsidianLiveSyncSettingTab.msgNewVersionNote": "Here due to an upgrade notification? Please review the version history. If you're satisfied, click the button. A new update will prompt this again.", + "obsidianLiveSyncSettingTab.msgNonHTTPSInfo": "Configured as non-HTTPS URI. Be warned that this may not work on mobile devices.", + "obsidianLiveSyncSettingTab.msgNonHTTPSWarning": "Cannot connect to non-HTTPS URI. Please update your config and try again.", + "obsidianLiveSyncSettingTab.msgNotice": "---Notice---", + "obsidianLiveSyncSettingTab.msgObjectStorageWarning": "WARNING: This feature is a Work In Progress, so please keep in mind the following:\n- Append only architecture. A rebuild is required to shrink the storage.\n- A bit fragile.\n- When first syncing, all history will be transferred from the remote. Be mindful of data caps and slow speeds.\n- Only differences are synced live.\n\nIf you run into any issues, or have ideas about this feature, please create a issue on GitHub.\nI appreciate you for your great dedication.", + "obsidianLiveSyncSettingTab.msgOriginCheck": "Origin check: ${org}", + "obsidianLiveSyncSettingTab.msgRebuildRequired": "Rebuilding Databases are required to apply the changes.. Please select the method to apply the changes.\n\n
\nLegends\n\n| Symbol | Meaning |\n|: ------ :| ------- |\n| ⇔ | Up to Date |\n| ⇄ | Synchronise to balance |\n| ⇐,⇒ | Transfer to overwrite |\n| ⇠,⇢ | Transfer to overwrite from other side |\n\n
\n\n## ${OPTION_REBUILD_BOTH}\nAt a glance: 📄 ⇒¹ 💻 ⇒² 🛰️ ⇢ⁿ 💻 ⇄ⁿ⁺¹ 📄\nReconstruct both the local and remote databases using existing files from this device.\nThis causes a lockout other devices, and they need to perform fetching.\n## ${OPTION_FETCH}\nAt a glance: 📄 ⇄² 💻 ⇐¹ 🛰️ ⇔ 💻 ⇔ 📄\nInitialise the local database and reconstruct it using data fetched from the remote database.\nThis case includes the case which you have rebuilt the remote database.\n## ${OPTION_ONLY_SETTING}\nStore only the settings. **Caution: This may lead to data corruption**; database reconstruction is generally necessary.", + "obsidianLiveSyncSettingTab.msgSelectAndApplyPreset": "Please select and apply any preset item to complete the wizard.", + "obsidianLiveSyncSettingTab.msgSetCorsCredentials": "Set cors.credentials", + "obsidianLiveSyncSettingTab.msgSetCorsOrigins": "Set cors.origins", + "obsidianLiveSyncSettingTab.msgSetMaxDocSize": "Set couchdb.max_document_size", + "obsidianLiveSyncSettingTab.msgSetMaxRequestSize": "Set chttpd.max_http_request_size", + "obsidianLiveSyncSettingTab.msgSetRequireValidUser": "Set chttpd.require_valid_user = true", + "obsidianLiveSyncSettingTab.msgSetRequireValidUserAuth": "Set chttpd_auth.require_valid_user = true", + "obsidianLiveSyncSettingTab.msgSettingModified": "The setting \"${setting}\" was modified from another device. Click {HERE} to reload settings. Click elsewhere to ignore changes.", + "obsidianLiveSyncSettingTab.msgSettingsUnchangeableDuringSync": "These settings are unable to be changed during synchronization. Please disable all syncing in the \"Sync Settings\" to unlock.", + "obsidianLiveSyncSettingTab.msgSetWwwAuth": "Set httpd.WWW-Authenticate", + "obsidianLiveSyncSettingTab.nameApplySettings": "Apply Settings", + "obsidianLiveSyncSettingTab.nameConnectSetupURI": "Connect with Setup URI", + "obsidianLiveSyncSettingTab.nameCopySetupURI": "Copy the current settings to a Setup URI", + "obsidianLiveSyncSettingTab.nameDisableHiddenFileSync": "Disable Hidden files sync", + "obsidianLiveSyncSettingTab.nameDiscardSettings": "Discard existing settings and databases", + "obsidianLiveSyncSettingTab.nameEnableHiddenFileSync": "Enable Hidden files sync", + "obsidianLiveSyncSettingTab.nameEnableLiveSync": "Enable LiveSync", + "obsidianLiveSyncSettingTab.nameHiddenFileSynchronization": "Hidden file synchronization", + "obsidianLiveSyncSettingTab.nameManualSetup": "Manual Setup", + "obsidianLiveSyncSettingTab.nameTestConnection": "Test Connection", + "obsidianLiveSyncSettingTab.nameTestDatabaseConnection": "Test Database Connection", + "obsidianLiveSyncSettingTab.nameValidateDatabaseConfig": "Validate Database Configuration", + "obsidianLiveSyncSettingTab.okAdminPrivileges": "✔ You have administrator privileges.", + "obsidianLiveSyncSettingTab.okCorsCredentials": "✔ cors.credentials is ok.", + "obsidianLiveSyncSettingTab.okCorsCredentialsForOrigin": "CORS credentials OK", + "obsidianLiveSyncSettingTab.okCorsOriginMatched": "✔ CORS origin OK", + "obsidianLiveSyncSettingTab.okCorsOrigins": "✔ cors.origins is ok.", + "obsidianLiveSyncSettingTab.okEnableCors": "✔ httpd.enable_cors is ok.", + "obsidianLiveSyncSettingTab.okEnableCorsChttpd": "✔ chttpd.enable_cors is ok.", + "obsidianLiveSyncSettingTab.okMaxDocumentSize": "✔ couchdb.max_document_size is ok.", + "obsidianLiveSyncSettingTab.okMaxRequestSize": "✔ chttpd.max_http_request_size is ok.", + "obsidianLiveSyncSettingTab.okRequireValidUser": "✔ chttpd.require_valid_user is ok.", + "obsidianLiveSyncSettingTab.okRequireValidUserAuth": "✔ chttpd_auth.require_valid_user is ok.", + "obsidianLiveSyncSettingTab.okWwwAuth": "✔ httpd.WWW-Authenticate is ok.", + "obsidianLiveSyncSettingTab.optionApply": "Apply", + "obsidianLiveSyncSettingTab.optionCancel": "Cancel", + "obsidianLiveSyncSettingTab.optionCouchDB": "CouchDB", + "obsidianLiveSyncSettingTab.optionDisableAllAutomatic": "Disable all automatic", + "obsidianLiveSyncSettingTab.optionFetchFromRemote": "Fetch from Remote", + "obsidianLiveSyncSettingTab.optionHere": "HERE", + "obsidianLiveSyncSettingTab.optionLiveSync": "LiveSync", + "obsidianLiveSyncSettingTab.optionMinioS3R2": "Minio,S3,R2", + "obsidianLiveSyncSettingTab.optionOkReadEverything": "OK, I have read everything.", + "obsidianLiveSyncSettingTab.optionOnEvents": "On events", + "obsidianLiveSyncSettingTab.optionPeriodicAndEvents": "Periodic and on events", + "obsidianLiveSyncSettingTab.optionPeriodicWithBatch": "Periodic w/ batch", + "obsidianLiveSyncSettingTab.optionRebuildBoth": "Rebuild Both from This Device", + "obsidianLiveSyncSettingTab.optionSaveOnlySettings": "(Danger) Save Only Settings", + "obsidianLiveSyncSettingTab.panelChangeLog": "Change Log", + "obsidianLiveSyncSettingTab.panelGeneralSettings": "General Settings", + "obsidianLiveSyncSettingTab.panelPrivacyEncryption": "Privacy & Encryption", + "obsidianLiveSyncSettingTab.panelRemoteConfiguration": "Remote Configuration", + "obsidianLiveSyncSettingTab.panelSetup": "Setup", + "obsidianLiveSyncSettingTab.serverVersion": "Server info: ${info}", + "obsidianLiveSyncSettingTab.titleActiveRemoteServer": "Active Remote Server", + "obsidianLiveSyncSettingTab.titleAppearance": "Appearance", + "obsidianLiveSyncSettingTab.titleConflictResolution": "Conflict resolution", + "obsidianLiveSyncSettingTab.titleCongratulations": "Congratulations!", + "obsidianLiveSyncSettingTab.titleCouchDB": "CouchDB", + "obsidianLiveSyncSettingTab.titleDeletionPropagation": "Deletion Propagation", + "obsidianLiveSyncSettingTab.titleEncryptionNotEnabled": "Encryption is not enabled", + "obsidianLiveSyncSettingTab.titleEncryptionPassphraseInvalid": "Encryption Passphrase Invalid", + "obsidianLiveSyncSettingTab.titleExtraFeatures": "Enable extra and advanced features", + "obsidianLiveSyncSettingTab.titleFetchConfig": "Fetch Config", + "obsidianLiveSyncSettingTab.titleFetchConfigFromRemote": "Fetch config from remote server", + "obsidianLiveSyncSettingTab.titleFetchSettings": "Fetch Settings", + "obsidianLiveSyncSettingTab.titleHiddenFiles": "Hidden Files", + "obsidianLiveSyncSettingTab.titleLogging": "Logging", + "obsidianLiveSyncSettingTab.titleMinioS3R2": "Minio,S3,R2", + "obsidianLiveSyncSettingTab.titleNotification": "Notification", + "obsidianLiveSyncSettingTab.titleOnlineTips": "Online Tips", + "obsidianLiveSyncSettingTab.titleQuickSetup": "Quick Setup", + "obsidianLiveSyncSettingTab.titleRebuildRequired": "Rebuild Required", + "obsidianLiveSyncSettingTab.titleRemoteConfigCheckFailed": "Remote Configuration Check Failed", + "obsidianLiveSyncSettingTab.titleRemoteServer": "Remote Server", + "obsidianLiveSyncSettingTab.titleReset": "Reset", + "obsidianLiveSyncSettingTab.titleSetupOtherDevices": "To setup other devices", + "obsidianLiveSyncSettingTab.titleSynchronizationMethod": "Synchronization Method", + "obsidianLiveSyncSettingTab.titleSynchronizationPreset": "Synchronization Preset", + "obsidianLiveSyncSettingTab.titleSyncSettings": "Sync Settings", + "obsidianLiveSyncSettingTab.titleSyncSettingsViaMarkdown": "Sync Settings via Markdown", + "obsidianLiveSyncSettingTab.titleUpdateThinning": "Update Thinning", + "obsidianLiveSyncSettingTab.warnCorsOriginUnmatched": "⚠ CORS Origin is unmatched ${from}->${to}", + "obsidianLiveSyncSettingTab.warnNoAdmin": "⚠ You do not have administrator privileges.", + "Ok": "Ok", + "Old Algorithm": "Old Algorithm", + "Older fallback (Slow, W/O WebAssembly)": "Older fallback (Slow, W/O WebAssembly)", + "Open": "Open", + "Open the dialog": "Open the dialog", + "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.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?", + "P2P.FailedToOpen": "Failed to open P2P connection to the signalling server.", + "P2P.NoAutoSyncPeers": "No auto-sync peers found. Please set peers on the %{long_p2p_sync} pane.", + "P2P.NoKnownPeers": "No peers has been detected, waiting incoming other peers...", + "P2P.Note.description": " This replicator allows us to synchronise our vault with other devices\nusing a peer-to-peer connection. We can use this to synchronise our vault with our other devices without using a cloud service.\nThis replicator is based on Trystero. It also uses a signalling server to establish a connection between devices. The signalling server is used to exchange connection information between devices. It does (or,should) not know or store any of our data.\n\nThe signalling server can be hosted by anyone. This is just a Nostr relay. For the sake of simplicity and checking the behaviour of the replicator, an instance of the signalling server is hosted by vrtmrz. You can use the experimental server provided by vrtmrz, or you can use any other server.\n\nBy the way, even if the signalling server does not store our data, it can see the connection information of some of our devices. Please be aware of this. Also, be cautious when using the server provided by someone else.", + "P2P.Note.important_note": "Peer-to-Peer Replicator.", + "P2P.Note.important_note_sub": "This feature is still on the bleeding edge. Please be aware that ensure your data is backed up before using this feature. And, we would be so happy if you could contribute to the development of this feature.", + "P2P.Note.Summary": "What is this feature? (and some important notes, please read once)", + "P2P.NotEnabled": "%{title_p2p_sync} is not enabled. We cannot open a new connection.", + "P2P.P2PReplication": "%{P2P} Replication", + "P2P.PaneTitle": "%{long_p2p_sync}", + "P2P.ReplicatorInstanceMissing": "P2P Sync replicator is not found, possibly not have been configured or enabled.", + "P2P.SeemsOffline": "Peer ${name} seems offline, skipped.", + "P2P.SyncAlreadyRunning": "P2P Sync is already running.", + "P2P.SyncCompleted": "P2P Sync completed.", + "P2P.SyncStartedWith": "P2P Sync with ${name} have been started.", + "paneMaintenance.markDeviceResolvedAfterBackup": "paneMaintenance.markDeviceResolvedAfterBackup", + "paneMaintenance.remoteLockedAndDeviceNotAccepted": "paneMaintenance.remoteLockedAndDeviceNotAccepted", + "paneMaintenance.remoteLockedResolvedDevice": "paneMaintenance.remoteLockedResolvedDevice", + "paneMaintenance.unlockDatabaseReady": "paneMaintenance.unlockDatabaseReady", + "Passphrase": "Passphrase", + "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 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-to-Peer only": "Peer-to-Peer only", + "Peer-to-Peer Synchronisation": "Peer-to-Peer Synchronisation", + "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", + "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 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 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 option to proceed": "Please select an option to proceed", + "Please select the type of server to which you are connecting.": "Please select the type of server to which you are connecting.", + "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", + "Plug-in version": "Plug-in version", + "Prepare the 'report' to create an issue": "Prepare the 'report' to create an issue", + "Presets": "Presets", + "Proceed Garbage Collection": "Proceed Garbage Collection", + "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.", + "Process small files in the foreground": "Process small files in the foreground", + "Progress": "Progress", + "Property Encryption": "Property Encryption", + "PureJS fallback (Fast, W/O WebAssembly)": "PureJS fallback (Fast, W/O WebAssembly)", + "Purge all download/upload cache.": "Purge all download/upload cache.", + "Purge all journal counter": "Purge all journal counter", + "Rebuild local and remote database with local files.": "Rebuild local and remote database with local files.", + "Rebuilding Operations (Remote Only)": "Rebuilding Operations (Remote Only)", + "Recovery and Repair": "Recovery and Repair", + "Recreate all": "Recreate all", + "Recreate missing chunks for all files": "Recreate missing chunks for all files", + "RedFlag.Fetch.Method.Desc": "How do you want to fetch?\n- %{RedFlag.Fetch.Method.FetchSafer}.\n **Low Traffic**, **High CPU**, **Low Risk**\n Recommended if ...\n - Files possibly inconsistent\n - Files were not so much\n- %{RedFlag.Fetch.Method.FetchSmoother}.\n **Low Traffic**, **Moderate CPU**, **Low to Moderate Risk**\n Recommended if ...\n - Files probably consistent\n - You have a lot of files.\n- %{RedFlag.Fetch.Method.FetchTraditional}.\n **High Traffic**, **Low CPU**, **Low to Moderate Risk**\n\n>[!INFO]- Details\n> ## %{RedFlag.Fetch.Method.FetchSafer}.\n> **Low Traffic**, **High CPU**, **Low Risk**\n> This option first creates a local database using existing local files before fetching data from the remote source.\n> If matching files exist both locally and remotely, only the differences between them will be transferred.\n> However, files present in both locations will initially be handled as conflicted files. They will be resolved automatically if they are not actually conflicted, but this process may take time.\n> This is generally the safest method, minimizing data loss risk.\n> ## %{RedFlag.Fetch.Method.FetchSmoother}.\n> **Low Traffic**, **Moderate CPU**, **Low to Moderate Risk** (depending operation)\n> This option first creates chunks from local files for the database, then fetches data. Consequently, only chunks missing locally are transferred. However, all metadata is taken from the remote source.\n> Local files are then compared against this metadata at launch. The content considered newer will overwrite the older one (by modified time). This outcome is then synchronised back to the remote database.\n> This is generally safe if local files are genuinely the latest timestamp. However, it can cause problems if a file has a newer timestamp but older content (like the initial `welcome.md`).\n> This uses less CPU and faster than \"%{RedFlag.Fetch.Method.FetchSafer}\", but it may lead to data loss if not used carefully.\n> ## %{RedFlag.Fetch.Method.FetchTraditional}.\n> **High Traffic**, **Low CPU**, **Low to Moderate Risk** (depending operation)\n> All things will be fetched from the remote.\n> Similar to the %{RedFlag.Fetch.Method.FetchSmoother}, but all chunks are fetched from the remote source.\n> This is the most traditional way to fetch, typically consuming the most network traffic and time. It also carries a similar risk of overwriting remote files to the '%{RedFlag.Fetch.Method.FetchSmoother}' option.\n> However, it is often considered the most stable method because it is the longest-established and most straightforward approach.", + "RedFlag.Fetch.Method.FetchSafer": "Create a local database once before fetching", + "RedFlag.Fetch.Method.FetchSmoother": "Create local file chunks before fetching", + "RedFlag.Fetch.Method.FetchTraditional": "Fetch everything from the remote", + "RedFlag.Fetch.Method.Title": "How do you want to fetch?", + "RedFlag.FetchRemoteConfig.Buttons.Cancel": "No, use local settings", + "RedFlag.FetchRemoteConfig.Buttons.Fetch": "Yes, fetch and apply remote settings", + "RedFlag.FetchRemoteConfig.Message": "Do you want to fetch and apply remotely stored preference settings to the device?", + "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", + "Region": "Region", + "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 server type": "Remote server type", + "Remote Type": "Remote Type", + "Rename": "Rename", + "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", + "Replicator.Dialogue.Locked.Message": "Remote database is locked. This is due to a rebuild on one of the terminals.\nThe device is therefore asked to withhold the connection to avoid database corruption.\n\nThere are three options that we can do:\n\n- %{Replicator.Dialogue.Locked.Action.Fetch}\n The most preferred and reliable way. This will dispose the local database once, and reset all synchronisation information from the remote database again, In most case, we can perform this safely. However, it takes some time and should be done in stable network.\n- %{Replicator.Dialogue.Locked.Action.Unlock}\n This method can only be used if we are already reliably synchronised by other replication methods. This does not simply mean that we have the same files. If you are not sure, you should avoid it.\n- %{Replicator.Dialogue.Locked.Action.Dismiss}\n This will cancel the operation. And we will asked again on next request.\n", + "Replicator.Dialogue.Locked.Message.Fetch": "Fetch all has been scheduled. Plug-in will be restarted to perform it.", + "Replicator.Dialogue.Locked.Message.Unlocked": "The remote database has been unlocked. Please retry the operation.", + "Replicator.Dialogue.Locked.Title": "Locked", + "Replicator.Message.Cleaned": "Database cleaning up is in process. replication has been cancelled", + "Replicator.Message.InitialiseFatalError": "No replicator is available, this is the fatal error.", + "Replicator.Message.Pending": "Some file events are pending. Replication has been cancelled.", + "Replicator.Message.SomeModuleFailed": "Replication has been cancelled by some module failure", + "Replicator.Message.VersionUpFlash": "An update has been detected. Please open the Settings dialogue and check the Change Log. Replication has been cancelled.", + "Requires restart of Obsidian": "Requires restart of Obsidian", + "Requires restart of Obsidian.": "Requires restart of Obsidian.", + "Rerun Onboarding Wizard": "Rerun Onboarding Wizard", + "Rerun the onboarding wizard to set up Self-hosted LiveSync again.": "Rerun the onboarding wizard to set up Self-hosted LiveSync again.", + "Rerun Wizard": "Rerun Wizard", + "Resend": "Resend", + "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 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", + "Reset received": "Reset received", + "Reset sent history": "Reset sent history", + "Reset Synchronisation information": "Reset Synchronisation information", + "Reset Synchronisation on This Device": "Reset Synchronisation on This Device", + "Reset the remote storage size threshold and check the remote storage size again.": "Reset the remote storage size threshold and check the remote storage size again.", + "Resolve All": "Resolve All", + "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 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.", + "Run Doctor": "Run Doctor", + "S3/MinIO/R2 Object Storage": "S3/MinIO/R2 Object Storage", + "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 on customization sync": "Scan changes on customization sync", + "Scan customization automatically": "Scan customization automatically", + "Scan customization before replicating.": "Scan customization before replicating.", + "Scan customization every 1 minute.": "Scan customization every 1 minute.", + "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 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 Key": "Secret Key", + "Select the database adapter to use.": "Select the database adapter to use.", + "Send": "Send", + "Send chunks": "Send chunks", + "Server URI": "Server URI", + "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>
\n>\n> ### Public Key\n> ```\n${public_key}\n> ```\n>\n> ### Private Key\n> ```\n${private_key}\n> ```\n>\n>
\n\n>[!Both for copying]-\n>\n>
\n>\n> ```\n${public_key}\n${private_key}\n> ```\n>\n>
\n\n", + "Setting.GenerateKeyPair.Title": "New key pair has been generated!", + "Setting.TroubleShooting": "TroubleShooting", + "Setting.TroubleShooting.Doctor": "Setting Doctor", + "Setting.TroubleShooting.Doctor.Desc": "Detects non optimal settings. (Same as during migration)", + "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 URI dialog cancelled.": "Setup URI dialog cancelled.", + "Setup.Apply.Buttons.ApplyAndFetch": "Apply and Fetch", + "Setup.Apply.Buttons.ApplyAndMerge": "Apply and Merge", + "Setup.Apply.Buttons.ApplyAndRebuild": "Apply and Rebuild", + "Setup.Apply.Buttons.Cancel": "Discard and Cancel", + "Setup.Apply.Buttons.OnlyApply": "Only Apply", + "Setup.Apply.Message": "The new configuration is ready. Let us proceed to apply it.\nThere are several ways to apply this:\n\n- Apply and Fetch\n Configure this device as a new client. After applying, synchronise from the remote server.\n- Apply and Merge\n Configure on a device that already has the file. It processes the local files and transfers the differences. Conflicts may arise.\n- Apply and Rebuild\n Rebuild the remote using local files. This is typically done if the server becomes corrupted or we wish to start from scratch.\n Other devices will be locked and required to re-fetch.\n- Only Apply\n Apply only. Conflicts may arise if a rebuild is required.", + "Setup.Apply.Title": "Apply new configuration from the ${method}", + "Setup.Apply.WarningRebuildRecommended": "NOTE: after adjusting the settings, it has been determined that a rebuild is required; Just Import is not recommended.", + "Setup.Doctor.Buttons.No": "No, please use the settings in the URI as is", + "Setup.Doctor.Buttons.Yes": "Yes, please consult the doctor", + "Setup.Doctor.Message": "Self-hosted LiveSync has gradually become longer in history and some recommended settings have changed.\n\nNow, setup is a very good time to do this.\n\nDo you want to run Doctor to check if the imported settings are optimal compared to the latest state?", + "Setup.Doctor.Title": "Do you want to consult the doctor?", + "Setup.FetchRemoteConf.Buttons.Fetch": "Yes, please fetch the configuration", + "Setup.FetchRemoteConf.Buttons.Skip": "No, please use the settings in the URI", + "Setup.FetchRemoteConf.Message": "If we have already synchronised once with another device, the remote database stores the suitable configuration values between the synchronised devices. The plug-in would like to retrieve them for robust configuration.\n\nHowever, we have to make sure the one thing. Are we currently in a situation where we can access the network safely and retrieve the settings?\n\nNote: Mostly, you are safe to do this, that your remote database is hosted with a SSL certificate, and your network is not compromised.", + "Setup.FetchRemoteConf.Title": "Fetch configuration from remote database?", + "Setup.QRCode": "We have generated a QR code to transfer the settings. Please scan the QR code with your phone or other device.\nNote: The QR code is not encrypted, so be careful to open this.\n\n>[!FOR YOUR EYES ONLY]-\n>
${qr_image}
", + "Setup.RemoteE2EE.AdvancedTitle": "Advanced", + "Setup.RemoteE2EE.AlgorithmWarning": "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.", + "Setup.RemoteE2EE.ButtonCancel": "Cancel", + "Setup.RemoteE2EE.ButtonProceed": "Proceed", + "Setup.RemoteE2EE.DefaultAlgorithmDesc": "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.", + "Setup.RemoteE2EE.Guidance": "Please configure your end-to-end encryption settings.", + "Setup.RemoteE2EE.LabelEncrypt": "End-to-End Encryption", + "Setup.RemoteE2EE.LabelEncryptionAlgorithm": "Encryption Algorithm", + "Setup.RemoteE2EE.LabelObfuscateProperties": "Obfuscate Properties", + "Setup.RemoteE2EE.MultiDestinationWarning": "This setting must be the same even when connecting to multiple synchronisation destinations.", + "Setup.RemoteE2EE.ObfuscatePropertiesDesc": "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.", + "Setup.RemoteE2EE.PassphraseValidationLine1": "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.", + "Setup.RemoteE2EE.PassphraseValidationLine2": "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. Please understand that this is intended behaviour.", + "Setup.RemoteE2EE.PlaceholderPassphrase": "Enter your passphrase", + "Setup.RemoteE2EE.StronglyRecommendedLine1": "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.", + "Setup.RemoteE2EE.StronglyRecommendedLine2": "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.", + "Setup.RemoteE2EE.StronglyRecommendedTitle": "Strongly Recommended", + "Setup.RemoteE2EE.Title": "End-to-End Encryption", + "Setup.ScanQRCode.ButtonClose": "Close this dialog", + "Setup.ScanQRCode.Guidance": "Please follow the steps below to import settings from your existing device.", + "Setup.ScanQRCode.Step1": "On this device, please keep this Vault open.", + "Setup.ScanQRCode.Step2": "On the source device, open Obsidian.", + "Setup.ScanQRCode.Step3": "On the source device, from the command palette, run the 'Show settings as a QR code' command.", + "Setup.ScanQRCode.Step4": "On this device, switch to the camera app or use a QR code scanner to scan the displayed QR code.", + "Setup.ScanQRCode.Title": "Scan QR Code", + "Setup.ShowQRCode": "Show QR code", + "Setup.ShowQRCode.Desc": "Show QR code to transfer the settings.", + "Setup.UseSetupURI.ButtonCancel": "Cancel", + "Setup.UseSetupURI.ButtonProceed": "Test Settings and Continue", + "Setup.UseSetupURI.ErrorFailedToParse": "Failed to parse the Setup URI. Please check the URI and passphrase.", + "Setup.UseSetupURI.ErrorPassphraseRequired": "Please enter the vault passphrase.", + "Setup.UseSetupURI.GuidanceLine1": "Please enter the Setup URI that was generated during server installation or on another device, along with the vault passphrase.", + "Setup.UseSetupURI.GuidanceLine2": "Note that you can generate a new Setup URI by running the \"Copy settings as a new Setup URI\" command in the command palette.", + "Setup.UseSetupURI.InvalidInfo": "The Setup URI is invalid. Please check it and try again.", + "Setup.UseSetupURI.LabelPassphrase": "Vault passphrase", + "Setup.UseSetupURI.LabelSetupURI": "Setup URI", + "Setup.UseSetupURI.PlaceholderPassphrase": "Enter your vault passphrase", + "Setup.UseSetupURI.Title": "Enter Setup URI", + "Setup.UseSetupURI.ValidInfo": "The Setup URI is valid and ready to use.", + "Should we keep folders that don't have any files inside?": "Should we keep folders that don't have any files inside?", + "Should we only check for conflicts when a file is opened?": "Should we only check for conflicts when a file is opened?", + "Should we prompt you about conflicting files when a file is opened?": "Should we prompt you about conflicting files when a file is opened?", + "Should we prompt you for every single merge, even if we can safely merge automatcially?": "Should we prompt you for every single merge, even if we can safely merge automatcially?", + "Show full banner": "Show full banner", + "Show history": "Show history", + "Show icon only": "Show icon only", + "Show only notifications": "Show only notifications", + "Show status as icons only": "Show status as icons only", + "Show status icon instead of file warnings banner": "Show status icon instead of file warnings banner", + "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.", + "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.", + "Starts synchronisation when a file is saved.": "Starts synchronisation when a file is saved.", + "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", + "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 after merging file": "Sync after merging file", + "Sync automatically after merging files": "Sync automatically after merging files", + "Sync Mode": "Sync Mode", + "Sync on Editor Save": "Sync on Editor Save", + "Sync on File Open": "Sync on File Open", + "Sync on Save": "Sync on Save", + "Sync on Startup": "Sync on Startup", + "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", + "Target patterns": "Target patterns", + "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 delay for consecutive on-demand fetches": "The delay for consecutive on-demand fetches", + "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 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 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.", + "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 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 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.", + "Transfer Tweak": "Transfer Tweak", + "TweakMismatchResolve.Action.DisableAutoAcceptCompatible": "Disable auto-accept", + "TweakMismatchResolve.Action.Dismiss": "Dismiss", + "TweakMismatchResolve.Action.EnableAutoAcceptCompatible": "Enable auto-accept", + "TweakMismatchResolve.Action.UseConfigured": "Use configured settings", + "TweakMismatchResolve.Action.UseMine": "Update remote database settings", + "TweakMismatchResolve.Action.UseMineAcceptIncompatible": "Update remote database settings but keep as is", + "TweakMismatchResolve.Action.UseMineWithRebuild": "Update remote database settings and rebuild again", + "TweakMismatchResolve.Action.UseRemote": "Apply settings to this device", + "TweakMismatchResolve.Action.UseRemoteAcceptIncompatible": "Apply settings to this device, but and ignore incompatibility", + "TweakMismatchResolve.Action.UseRemoteWithRebuild": "Apply settings to this device, and fetch again", + "TweakMismatchResolve.Message.AutoAcceptCompatibleUndefined": "\nIt appears that the settings differ for each device. You can now automatically apply compatible changes to these configurations.\nWould you like to enable this `auto-accept` setting?", + "TweakMismatchResolve.Message.Main": "\nThe settings in the remote database are as follows. These values are configured by other devices, which are synchronised with this device at least once.\n\nIf you want to use these settings, please select %{TweakMismatchResolve.Action.UseConfigured}.\nIf you want to keep the settings of this device, please select %{TweakMismatchResolve.Action.Dismiss}.\n\n${table}\n\n>[!TIP]\n> If you want to synchronise all settings, please use `Sync settings via markdown` after applying minimal configuration with this feature.\n\n${additionalMessage}", + "TweakMismatchResolve.Message.MainTweakResolving": "Your configuration has not been matched with the one on the remote server.\n\nFollowing configuration should be matched:\n\n${table}\n\nLet us know your decision.\n\n${additionalMessage}", + "TweakMismatchResolve.Message.mineUpdated": "The device configuration have been adjusted.", + "TweakMismatchResolve.Message.remoteUpdated": "The configuration stored remotely has been updated.", + "TweakMismatchResolve.Message.UseRemote.WarningRebuildRecommended": "\n>[!NOTICE]\n> Some changes are compatible but may consume extra storage and transfer volumes. A rebuild is recommended. However, a rebuild may not be performed at present, but may be implemented in future maintenance.\n> ***Please ensure that you have time and are connected to a stable network to apply!***", + "TweakMismatchResolve.Message.UseRemote.WarningRebuildRequired": "\n>[!WARNING]\n> Some remote configurations are not compatible with the local database of this device. Rebuilding the local database will be required.\n> ***Please ensure that you have time and are connected to a stable network to apply!***", + "TweakMismatchResolve.Message.WarningIncompatibleRebuildRecommended": "\n>[!NOTICE]\n> We have detected that some of the values are different to make incompatible the local database with the remote database.\n> Some changes are compatible but may consume extra storage and transfer volumes. A rebuild is recommended. However, a rebuild may not be performed at present, but may be implemented in future maintenance.\n> If you want to rebuild, it takes a few minutes or more. **Make sure it is safe to perform it now.**", + "TweakMismatchResolve.Message.WarningIncompatibleRebuildRequired": "\n>[!WARNING]\n> We have detected that some of the values are different to make incompatible the local database with the remote database.\n> Either local or remote rebuilds are required. Both of them takes a few minutes or more. **Make sure it is safe to perform it now.**", + "TweakMismatchResolve.Table": "| Value name | This device | On Remote |\n|: --- |: ---- :|: ---- :|\n${rows}\n\n", + "TweakMismatchResolve.Table.Row": "| ${name} | ${self} | ${remote} |", + "TweakMismatchResolve.Title": "Configuration Mismatch Detected", + "TweakMismatchResolve.Title.AutoAcceptCompatible": "Auto-Accept Available", + "TweakMismatchResolve.Title.TweakResolving": "Configuration Mismatch Detected", + "TweakMismatchResolve.Title.UseRemoteConfig": "Use Remote Configuration", + "Ui.Common.Signal.Caution": "CAUTION", + "Ui.Common.Signal.Danger": "DANGER", + "Ui.Common.Signal.Notice": "NOTICE", + "Ui.Common.Signal.Warning": "WARNING", + "Ui.Settings.Advanced.LocalDatabaseTweak": "Local Database Tweak", + "Ui.Settings.Advanced.MemoryCache": "Memory Cache", + "Ui.Settings.Advanced.TransferTweak": "Transfer Tweak", + "Ui.Settings.Common.Analyse": "Analyse", + "Ui.Settings.Common.Back": "Back", + "Ui.Settings.Common.Check": "Check", + "Ui.Settings.Common.Configure": "Configure", + "Ui.Settings.Common.Continue": "Continue", + "Ui.Settings.Common.Delete": "Delete", + "Ui.Settings.Common.Fetch": "Fetch", + "Ui.Settings.Common.Lock": "Lock", + "Ui.Settings.Common.Merge": "Merge", + "Ui.Settings.Common.Open": "Open", + "Ui.Settings.Common.Overwrite": "Overwrite", + "Ui.Settings.Common.Perform": "Perform", + "Ui.Settings.Common.ResetAll": "Reset all", + "Ui.Settings.Common.ResolveAll": "Resolve All", + "Ui.Settings.Common.Scan": "Scan", + "Ui.Settings.Common.Send": "Send", + "Ui.Settings.Common.Use": "Use", + "Ui.Settings.Common.VerifyAll": "Verify all", + "Ui.Settings.CustomizationSync.OpenDesc": "Open the dialog", + "Ui.Settings.CustomizationSync.Panel": "Customization Sync", + "Ui.Settings.CustomizationSync.WarnChangeDeviceName": "We cannot change the device name while this feature is enabled. Please disable this feature to change the device name.", + "Ui.Settings.CustomizationSync.WarnSetDeviceName": "Please set device name to identify this device. This name should be unique among your devices. While not configured, we cannot enable this feature.", + "Ui.Settings.Hatch.AnalyseDatabaseUsage": "Analyse database usage", + "Ui.Settings.Hatch.AnalyseDatabaseUsageDesc": "Analyse database usage and generate a TSV report for diagnosis yourself. You can paste the generated report with any spreadsheet you like.", + "Ui.Settings.Hatch.BackToNonConfigured": "Back to non-configured", + "Ui.Settings.Hatch.ConvertNonObfuscated": "Check and convert non-path-obfuscated files", + "Ui.Settings.Hatch.ConvertNonObfuscatedDesc": "Check the local database for files that were stored without path obfuscation and convert them when needed.", + "Ui.Settings.Hatch.CopyIssueReport": "Copy Report to clipboard", + "Ui.Settings.Hatch.DatabaseLabel": "Database: ${details}", + "Ui.Settings.Hatch.DatabaseToStorage": "Database -> Storage", + "Ui.Settings.Hatch.DeleteCustomizationSyncData": "Delete all customization sync data", + "Ui.Settings.Hatch.GeneratedReport": "Generated report", + "Ui.Settings.Hatch.Missing": "Missing", + "Ui.Settings.Hatch.ModifiedSize": "Modified: ${modified}, Size: ${size}", + "Ui.Settings.Hatch.ModifiedSizeActual": "Modified: ${modified}, Size: ${size} (actual size: ${actualSize})", + "Ui.Settings.Hatch.PrepareIssueReport": "Prepare the 'report' to create an issue", + "Ui.Settings.Hatch.RecoveryAndRepair": "Recovery and Repair", + "Ui.Settings.Hatch.RecreateAll": "Recreate all", + "Ui.Settings.Hatch.RecreateMissingChunks": "Recreate missing chunks for all files", + "Ui.Settings.Hatch.RecreateMissingChunksDesc": "This will recreate chunks for all files. If there were missing chunks, this may fix the errors.", + "Ui.Settings.Hatch.ResetPanel": "Reset", + "Ui.Settings.Hatch.ResetRemoteUsage": "Reset notification threshold and check the remote database usage", + "Ui.Settings.Hatch.ResetRemoteUsageDesc": "Reset the remote storage size threshold and check the remote storage size again.", + "Ui.Settings.Hatch.ResolveAllConflictedFiles": "Resolve all conflicted files by the newer one", + "Ui.Settings.Hatch.ResolveAllConflictedFilesDesc": "Resolve all conflicted files by the newer one. Caution: This will overwrite the older one, and cannot resurrect the overwritten one.", + "Ui.Settings.Hatch.RunDoctor": "Run Doctor", + "Ui.Settings.Hatch.ScanBrokenFiles": "Scan for broken files", + "Ui.Settings.Hatch.ScramSwitches": "Scram Switches", + "Ui.Settings.Hatch.ShowHistory": "Show history", + "Ui.Settings.Hatch.StorageLabel": "Storage: ${details}", + "Ui.Settings.Hatch.StorageToDatabase": "Storage -> Database", + "Ui.Settings.Hatch.VerifyAndRepairAllFiles": "Verify and repair all files", + "Ui.Settings.Hatch.VerifyAndRepairAllFilesDesc": "Compare the content of files between the local database and storage. If they do not match, you will be asked which one to keep.", + "Ui.Settings.Maintenance.Cleanup": "Perform cleanup", + "Ui.Settings.Maintenance.CleanupDesc": "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.", + "Ui.Settings.Maintenance.DeleteLocalDatabase": "Delete local database to reset or uninstall Self-hosted LiveSync", + "Ui.Settings.Maintenance.EmergencyRestart": "Emergency restart", + "Ui.Settings.Maintenance.EmergencyRestartDesc": "Disable all synchronisation and restart.", + "Ui.Settings.Maintenance.FreshStartWipe": "Fresh Start Wipe", + "Ui.Settings.Maintenance.FreshStartWipeDesc": "Delete all data on the remote server.", + "Ui.Settings.Maintenance.GarbageCollection": "Garbage Collection V3 (Beta)", + "Ui.Settings.Maintenance.GarbageCollectionAction": "Perform Garbage Collection", + "Ui.Settings.Maintenance.GarbageCollectionDesc": "Perform Garbage Collection to remove unused chunks and reduce database size.", + "Ui.Settings.Maintenance.LockServer": "Lock Server", + "Ui.Settings.Maintenance.LockServerDesc": "Lock the remote server to prevent synchronisation with other devices.", + "Ui.Settings.Maintenance.OverwriteRemote": "Overwrite remote", + "Ui.Settings.Maintenance.OverwriteRemoteDesc": "Overwrite remote with local DB and passphrase.", + "Ui.Settings.Maintenance.OverwriteServerData": "Overwrite Server Data with This Device's Files", + "Ui.Settings.Maintenance.OverwriteServerDataDesc": "Rebuild the local and remote database with files from this device.", + "Ui.Settings.Maintenance.PurgeAllJournalCounter": "Purge all journal counter", + "Ui.Settings.Maintenance.PurgeAllJournalCounterDesc": "Purge all download and upload caches.", + "Ui.Settings.Maintenance.RebuildingOperations": "Rebuilding Operations (Remote Only)", + "Ui.Settings.Maintenance.Resend": "Resend", + "Ui.Settings.Maintenance.ResendDesc": "Resend all chunks to the remote.", + "Ui.Settings.Maintenance.Reset": "Reset", + "Ui.Settings.Maintenance.ResetAllJournalCounter": "Reset all journal counter", + "Ui.Settings.Maintenance.ResetAllJournalCounterDesc": "Initialise all journal history. On the next sync, every item will be received and sent again.", + "Ui.Settings.Maintenance.ResetJournalReceived": "Reset journal received history", + "Ui.Settings.Maintenance.ResetJournalReceivedDesc": "Initialise journal received history. On the next sync, every item except those sent by this device will be downloaded again.", + "Ui.Settings.Maintenance.ResetJournalSent": "Reset journal sent history", + "Ui.Settings.Maintenance.ResetJournalSentDesc": "Initialise journal sent history. On the next sync, every item except those received by this device will be sent again.", + "Ui.Settings.Maintenance.ResetLocalSyncInfo": "Reset Synchronisation information", + "Ui.Settings.Maintenance.ResetLocalSyncInfoDesc": "Restore or reconstruct local database from remote.", + "Ui.Settings.Maintenance.ResetReceived": "Reset received", + "Ui.Settings.Maintenance.ResetSentHistory": "Reset sent history", + "Ui.Settings.Maintenance.ResetThisDevice": "Reset Synchronisation on This Device", + "Ui.Settings.Maintenance.ScheduleAndRestart": "Schedule and Restart", + "Ui.Settings.Maintenance.Scram": "Scram!", + "Ui.Settings.Maintenance.SendChunks": "Send chunks", + "Ui.Settings.Maintenance.Syncing": "Syncing", + "Ui.Settings.Maintenance.WarningLockedReadyAction": "I am ready, unlock the database", + "Ui.Settings.Maintenance.WarningLockedReadyText": "To prevent unwanted vault corruption, the remote database has been locked for synchronisation. (This device is marked as 'resolved'.) When all your devices are marked as 'resolved', unlock the database. This warning will continue to appear until replication confirms the device is resolved.", + "Ui.Settings.Maintenance.WarningLockedResolveAction": "I have made a backup, mark this device as resolved", + "Ui.Settings.Maintenance.WarningLockedResolveText": "The remote database is locked for synchronisation to prevent vault corruption because this device is not marked as 'resolved'. Please back up your vault, reset the local database, and select 'Mark this device as resolved'. This warning will persist until replication confirms the device is resolved.", + "Ui.Settings.Maintenance.WriteRedFlagAndRestart": "Flag and restart", + "Ui.Settings.Patches.CompatibilityConflict": "Compatibility (Conflict Behaviour)", + "Ui.Settings.Patches.CompatibilityDatabase": "Compatibility (Database structure)", + "Ui.Settings.Patches.CompatibilityInternalApi": "Compatibility (Internal API Usage)", + "Ui.Settings.Patches.CompatibilityMetadata": "Compatibility (Metadata)", + "Ui.Settings.Patches.CompatibilityRemote": "Compatibility (Remote Database)", + "Ui.Settings.Patches.CompatibilityTrouble": "Compatibility (Trouble addressed)", + "Ui.Settings.Patches.CurrentAdapter": "Current adapter: ${adapter}", + "Ui.Settings.Patches.DatabaseAdapter": "Database Adapter", + "Ui.Settings.Patches.DatabaseAdapterDesc": "Select the database adapter to use.", + "Ui.Settings.Patches.EdgeCaseBehaviour": "Edge case addressing (Behaviour)", + "Ui.Settings.Patches.EdgeCaseDatabase": "Edge case addressing (Database)", + "Ui.Settings.Patches.EdgeCaseProcessing": "Edge case addressing (Processing)", + "Ui.Settings.Patches.IndexedDbWarning": "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 the IDB adapter instead.", + "Ui.Settings.Patches.MigratingToIdb": "Migrating all data to IDB...", + "Ui.Settings.Patches.MigratingToIndexedDb": "Migrating all data to IndexedDB...", + "Ui.Settings.Patches.MigrationIdbCompleted": "Migration to IDB completed. Obsidian will be restarted with the new configuration immediately.", + "Ui.Settings.Patches.MigrationIdbCompletedFollowUp": "Migration to IDB completed. Please switch the adapter and restart Obsidian.", + "Ui.Settings.Patches.MigrationIndexedDbCompleted": "Migration to IndexedDB completed. Obsidian will be restarted with the new configuration immediately.", + "Ui.Settings.Patches.MigrationIndexedDbCompletedFollowUp": "Migration to IndexedDB completed. Please switch the adapter and restart Obsidian.", + "Ui.Settings.Patches.MigrationWarning": "Changing this setting requires migrating existing data, which may take some time, and restarting Obsidian. Please make sure to back up your data before proceeding.", + "Ui.Settings.Patches.OperationToIdb": "to IDB", + "Ui.Settings.Patches.OperationToIndexedDb": "to IndexedDB", + "Ui.Settings.Patches.Remediation": "Remediation", + "Ui.Settings.Patches.RemediationChanged": "Remediation Setting Changed", + "Ui.Settings.Patches.RemediationNoLimit": "No limit configured", + "Ui.Settings.Patches.RemediationRestarting": "Remediation setting changed. Restarting Obsidian...", + "Ui.Settings.Patches.RemediationRestartLater": "Later", + "Ui.Settings.Patches.RemediationRestartMessage": "Restarting Obsidian is strongly recommended. Until restart, some changes may not take effect, and the display may be inconsistent. Are you sure you want to restart now?", + "Ui.Settings.Patches.RemediationRestartNow": "Restart Now", + "Ui.Settings.Patches.RemediationSuffixChanged": "Suffix has been changed. Reopening database...", + "Ui.Settings.Patches.RemediationWithValue": "Limit: ${date} (${timestamp})", + "Ui.Settings.Patches.RemoteDatabaseSunset": "Remote Database Tweak (In sunset)", + "Ui.Settings.Patches.SwitchToIDB": "Switch to IDB", + "Ui.Settings.Patches.SwitchToIndexedDb": "Switch to IndexedDB", + "Ui.Settings.PowerUsers.ConfigurationEncryption": "Configuration Encryption", + "Ui.Settings.PowerUsers.ConnectionTweak": "CouchDB Connection Tweak", + "Ui.Settings.PowerUsers.ConnectionTweakDesc": "If you reached the payload size limit when using IBM Cloudant, please decrease batch size and batch limit to a lower value.", + "Ui.Settings.PowerUsers.Default": "Default", + "Ui.Settings.PowerUsers.Developer": "Developer", + "Ui.Settings.PowerUsers.EncryptSensitiveConfig": "Encrypt sensitive configuration items", + "Ui.Settings.PowerUsers.PromptPassphraseEveryLaunch": "Ask for a passphrase at every launch", + "Ui.Settings.PowerUsers.UseCustomPassphrase": "Use a custom passphrase", + "Ui.Settings.Remote.Activate": "Activate", + "Ui.Settings.Remote.ActiveSuffix": " (Active)", + "Ui.Settings.Remote.AddConnection": "Add new connection", + "Ui.Settings.Remote.AddRemoteDefaultName": "New Remote", + "Ui.Settings.Remote.ConfigureAndChangeRemote": "Configure and change remote", + "Ui.Settings.Remote.ConfigureE2EE": "Configure E2EE", + "Ui.Settings.Remote.ConfigureRemote": "Configure Remote", + "Ui.Settings.Remote.DeleteRemoteConfirm": "Delete remote configuration '${name}'?", + "Ui.Settings.Remote.DeleteRemoteTitle": "Delete Remote Configuration", + "Ui.Settings.Remote.DisplayName": "Display name", + "Ui.Settings.Remote.DuplicateRemote": "Duplicate remote", + "Ui.Settings.Remote.DuplicateRemoteSuffix": "${name} (Copy)", + "Ui.Settings.Remote.E2EEConfiguration": "E2EE Configuration", + "Ui.Settings.Remote.Export": "Export", + "Ui.Settings.Remote.FetchRemoteSettings": "Fetch remote settings", + "Ui.Settings.Remote.ImportConnection": "Import connection", + "Ui.Settings.Remote.ImportConnectionPrompt": "Paste a connection string", + "Ui.Settings.Remote.ImportedCouchDb": "Imported CouchDB", + "Ui.Settings.Remote.ImportedRemote": "Remote", + "Ui.Settings.Remote.MoreActions": "More actions", + "Ui.Settings.Remote.PeerToPeerPanel": "Peer-to-Peer Synchronisation", + "Ui.Settings.Remote.RemoteConfigurationPrefix": "Remote configuration", + "Ui.Settings.Remote.RemoteDatabases": "Remote Databases", + "Ui.Settings.Remote.RemoteName": "Remote name", + "Ui.Settings.Remote.RemoteNameCouchDb": "CouchDB ${host}", + "Ui.Settings.Remote.RemoteNameP2P": "P2P ${room}", + "Ui.Settings.Remote.RemoteNameS3": "S3 ${bucket}", + "Ui.Settings.Remote.Rename": "Rename", + "Ui.Settings.Selector.AddDefaultPatterns": "Add default patterns", + "Ui.Settings.Selector.CrossPlatform": "Cross-platform", + "Ui.Settings.Selector.Default": "Default", + "Ui.Settings.Selector.HiddenFiles": "Hidden Files", + "Ui.Settings.Selector.IgnorePatterns": "Ignore patterns", + "Ui.Settings.Selector.NonSynchronisingFiles": "Non-Synchronising files", + "Ui.Settings.Selector.NonSynchronisingFilesDesc": "(RegExp) If this is set, any changes to local and remote files that match this will be skipped.", + "Ui.Settings.Selector.NormalFiles": "Normal Files", + "Ui.Settings.Selector.OverwritePatterns": "Overwrite patterns", + "Ui.Settings.Selector.OverwritePatternsDesc": "Patterns to match files for overwriting instead of merging", + "Ui.Settings.Selector.SynchronisingFiles": "Synchronising files", + "Ui.Settings.Selector.SynchronisingFilesDesc": "(RegExp) Empty to sync all files. Set a regular expression filter to limit synchronised files.", + "Ui.Settings.Selector.TargetPatterns": "Target patterns", + "Ui.Settings.Selector.TargetPatternsDesc": "Patterns to match files for syncing", + "Ui.Settings.Setup.RerunWizardButton": "Rerun Wizard", + "Ui.Settings.Setup.RerunWizardDesc": "Rerun the onboarding wizard to set up Self-hosted LiveSync again.", + "Ui.Settings.Setup.RerunWizardName": "Rerun Onboarding Wizard", + "Ui.Settings.SyncSettings.Fetch": "Fetch", + "Ui.Settings.SyncSettings.Merge": "Merge", + "Ui.Settings.SyncSettings.Overwrite": "Overwrite", + "Ui.SetupWizard.Common.Back": "No, please take me back", + "Ui.SetupWizard.Common.Cancel": "Cancel", + "Ui.SetupWizard.Common.ProceedSelectOption": "Please select an option to proceed", + "Ui.SetupWizard.Intro.ExistingOption": "I am adding a device to an existing synchronisation setup", + "Ui.SetupWizard.Intro.ExistingOptionDesc": "Select this if you are already using synchronisation on another computer or smartphone. Use this option to connect this device to that existing setup.", + "Ui.SetupWizard.Intro.Guidance": "We will now guide you through a few questions to simplify the synchronisation setup.", + "Ui.SetupWizard.Intro.NewOption": "I am setting this up for the first time", + "Ui.SetupWizard.Intro.NewOptionDesc": "Select this if you are configuring this device as the first synchronisation device.", + "Ui.SetupWizard.Intro.ProceedExisting": "Yes, I want to add this device to my existing synchronisation", + "Ui.SetupWizard.Intro.ProceedNew": "Yes, I want to set up a new synchronisation", + "Ui.SetupWizard.Intro.Question": "First, please select the option that best describes your current situation.", + "Ui.SetupWizard.Intro.Title": "Welcome to Self-hosted LiveSync", + "Ui.SetupWizard.Invitation.Start": "Start setup", + "Ui.SetupWizard.OutroAskUserMode.CompatibleOption": "The remote is already set up, and the configuration is compatible (or became compatible through this operation).", + "Ui.SetupWizard.OutroAskUserMode.CompatibleOptionDesc": "Unless you are certain, selecting this option is risky. It assumes the server configuration is compatible with this device. If that is not the case, data loss may occur. Please make sure you understand the consequences.", + "Ui.SetupWizard.OutroAskUserMode.ExistingOption": "My remote server is already set up. I want to join this device.", + "Ui.SetupWizard.OutroAskUserMode.ExistingOptionDesc": "Selecting this option will make this device join the existing server. You need to fetch the existing synchronisation data from the server to this device.", + "Ui.SetupWizard.OutroAskUserMode.Guidance": "The connection to the server has been configured successfully. As the next step, the local database, in other words the synchronisation information, must be rebuilt.", + "Ui.SetupWizard.OutroAskUserMode.NewOption": "I am setting up a new server for the first time / I want to reset my existing server.", + "Ui.SetupWizard.OutroAskUserMode.NewOptionDesc": "Selecting this option will initialise the server using the current data on this device. Any existing data on the server will be completely overwritten.", + "Ui.SetupWizard.OutroAskUserMode.ProceedApplySettings": "Apply the settings", + "Ui.SetupWizard.OutroAskUserMode.ProceedNext": "Proceed to the next step.", + "Ui.SetupWizard.OutroAskUserMode.Question": "Please select your situation.", + "Ui.SetupWizard.OutroAskUserMode.Title": "Mostly Complete: Decision Required", + "Ui.SetupWizard.OutroNewP2PUser.GuidanceNotice": "P2P has no central server copy to overwrite. This step prepares only this device; keep it online when another device fetches its initial data.", + "Ui.SetupWizard.OutroNewP2PUser.GuidancePrimary": "The peer-to-peer connection has been configured successfully. Next, the local LiveSync database will be built from the current files in this Vault.", + "Ui.SetupWizard.OutroNewP2PUser.Important": "PLEASE NOTE", + "Ui.SetupWizard.OutroNewP2PUser.Proceed": "Restart and Prepare This Device", + "Ui.SetupWizard.OutroNewP2PUser.Question": "Please select the button below to restart and proceed to the local initialisation confirmation.", + "Ui.SetupWizard.OutroNewP2PUser.Title": "Setup Complete: Preparing This P2P Device", + "Ui.SetupWizard.OutroNewUser.GuidancePrimary": "The connection to the server has been configured successfully. As the next step, the synchronisation data on the server will be built from the current data on this device.", + "Ui.SetupWizard.OutroNewUser.GuidanceWarning": "After restarting, the data on this device will be uploaded to the server as the master copy. Please note that any unintended data currently on the server will be completely overwritten.", + "Ui.SetupWizard.OutroNewUser.Important": "IMPORTANT", + "Ui.SetupWizard.OutroNewUser.Proceed": "Restart and Initialise Server", + "Ui.SetupWizard.OutroNewUser.Question": "Please select the button below to restart and proceed to the final confirmation.", + "Ui.SetupWizard.OutroNewUser.Title": "Setup Complete: Preparing to Initialise Server", + "Ui.SetupWizard.RebuildEverythingP2P.ConfirmLocalReset": "I understand that this resets only this device's local synchronisation database.", + "Ui.SetupWizard.RebuildEverythingP2P.ConfirmLocalResetNote": "The files currently in this Vault are used to rebuild it.", + "Ui.SetupWizard.RebuildEverythingP2P.ConfirmTitle": "⚠️ Please Confirm the Following", + "Ui.SetupWizard.RebuildEverythingP2P.Guidance": "This procedure will discard the local LiveSync database on this device and rebuild it from the current files in this Vault. It does not delete or overwrite data on another device.", + "Ui.SetupWizard.RebuildEverythingP2P.Note": "Keep this device online after initialisation so that another device can fetch the Vault from it.", + "Ui.SetupWizard.RebuildEverythingP2P.Proceed": "I Understand, Prepare This Device", + "Ui.SetupWizard.RebuildEverythingP2P.Title": "Final Confirmation: Prepare This Device for P2P", + "Ui.SetupWizard.SelectExisting.Guidance": "You are adding this device to an existing synchronisation setup.", + "Ui.SetupWizard.SelectExisting.ManualOption": "Enter the server information manually", + "Ui.SetupWizard.SelectExisting.ManualOptionDesc": "Configure the same server information as your other devices again manually. This is intended only for advanced users.", + "Ui.SetupWizard.SelectExisting.ProceedManual": "I know my server details, let me enter them", + "Ui.SetupWizard.SelectExisting.ProceedQr": "Scan the QR code displayed on an active device using this device's camera.", + "Ui.SetupWizard.SelectExisting.ProceedSetupUri": "Proceed with Setup URI", + "Ui.SetupWizard.SelectExisting.QrOption": "Scan a QR Code (Recommended for mobile)", + "Ui.SetupWizard.SelectExisting.QrOptionDesc": "Scan the QR code displayed on an active device using this device's camera.", + "Ui.SetupWizard.SelectExisting.Question": "Please select a method to import the settings from another device.", + "Ui.SetupWizard.SelectExisting.SetupUriOption": "Use a Setup URI (Recommended)", + "Ui.SetupWizard.SelectExisting.SetupUriOptionDesc": "Paste the Setup URI generated from one of your active devices.", + "Ui.SetupWizard.SelectExisting.Title": "Device Setup Method", + "Ui.SetupWizard.SelectNew.Guidance": "We will now proceed with the server configuration.", + "Ui.SetupWizard.SelectNew.ManualOption": "Enter the server information manually", + "Ui.SetupWizard.SelectNew.ManualOptionDesc": "This is an advanced option for users who do not have a Setup URI or who want to configure detailed settings.", + "Ui.SetupWizard.SelectNew.ProceedManual": "I know my server details, let me enter them", + "Ui.SetupWizard.SelectNew.ProceedSetupUri": "Proceed with Setup URI", + "Ui.SetupWizard.SelectNew.Question": "How would you like to configure the connection to your server?", + "Ui.SetupWizard.SelectNew.SetupUriOption": "Use a Setup URI (Recommended)", + "Ui.SetupWizard.SelectNew.SetupUriOptionDesc": "A Setup URI is a single string containing your server address and authentication details. If one was generated by your server installation script, it provides a simple and secure configuration method.", + "Ui.SetupWizard.SelectNew.Title": "Connection Method", + "Ui.SetupWizard.SetupRemote.BucketOption": "S3/MinIO/R2 Object Storage", + "Ui.SetupWizard.SetupRemote.BucketOptionDesc": "Synchronisation using journal files. You must already have an S3/MinIO/R2 compatible object storage service set up.", + "Ui.SetupWizard.SetupRemote.CouchDbOptionDesc": "This is the most suitable synchronisation method for the current design. All features are available. You must already have a CouchDB instance set up.", + "Ui.SetupWizard.SetupRemote.Guidance": "Please select the type of server you are connecting to.", + "Ui.SetupWizard.SetupRemote.P2POption": "Peer-to-Peer only", + "Ui.SetupWizard.SetupRemote.P2POptionDesc": "This enables direct synchronisation between devices. No server is required, but both devices must be online at the same time and some features may be limited. Internet connectivity is required only for signalling, not for data transfer.", + "Ui.SetupWizard.SetupRemote.ProceedBucket": "Continue to S3/MinIO/R2 setup", + "Ui.SetupWizard.SetupRemote.ProceedCouchDb": "Continue to CouchDB setup", + "Ui.SetupWizard.SetupRemote.ProceedP2P": "Continue to Peer-to-Peer only setup", + "Ui.SetupWizard.SetupRemote.Title": "Enter Server Information", + "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.", + "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 dynamic iteration count": "Use dynamic iteration count", + "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", + "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.", + "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 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", + "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", + "xxhash32 (Fast but less collision resistance)": "xxhash32 (Fast but less collision resistance)", + "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." +} diff --git a/src/common/messagesJson/es.json b/src/common/messagesJson/es.json new file mode 100644 index 00000000..e266da80 --- /dev/null +++ b/src/common/messagesJson/es.json @@ -0,0 +1,687 @@ +{ + "(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)", + "(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)", + "(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。", + "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。", + "Access Key": "Clave de acceso", + "Activate": "Activar", + "Add default patterns": "Añadir patrones predeterminados", + "Add new connection": "Añadir conexión", + "Always prompt merge conflicts": "Siempre preguntar en conflictos", + "Apply Latest Change if Conflicting": "Aplicar último cambio en conflictos", + "Apply preset configuration": "Aplicar configuración predefinida", + "Ask a passphrase at every launch": "Solicitar la frase de contraseña en cada inicio", + "Automatically Sync all files when opening Obsidian.": "Sincronizar automáticamente todos los archivos al abrir Obsidian", + "Back": "Volver", + "Back to non-configured": "Volver a no configurado", + "Batch database update": "Actualización por lotes de BD", + "Batch limit": "Límite de lotes", + "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", + "Bucket Name": "Nombre del bucket", + "Cancel": "Cancelar", + "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.", + "cmdConfigSync.showCustomizationSync": "Mostrar sincronización de personalización", + "Comma separated `.gitignore, .dockerignore`": "Separados por comas: `.gitignore, .dockerignore`", + "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)", + "Compatibility (Internal API Usage)": "Compatibilidad (uso de la API interna)", + "Compatibility (Metadata)": "Compatibilidad (metadatos)", + "Compatibility (Remote Database)": "Compatibilidad (base de datos remota)", + "Compatibility (Trouble addressed)": "Compatibilidad (problemas corregidos)", + "Compute revisions for chunks (Previous behaviour)": "Calcular revisiones para chunks (comportamiento anterior)", + "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。", + "Connection Method": "Método de conexión", + "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", + "CouchDB Connection Tweak": "Ajustes de conexión de CouchDB", + "Cross-platform": "Multiplataforma", + "Current adapter: {adapter}": "Adaptador actual: {adapter}", + "Customization Sync": "Sincronización de personalización", + "Customization Sync (Beta3)": "Sincronización de personalización (Beta3)", + "Data Compression": "Compresión de datos", + "Database Adapter": "Adaptador de base de datos", + "Database Name": "Nombre de la base de datos", + "Database suffix": "Sufijo de base de datos", + "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 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}'?", + "desktop": "equipo de escritorio", + "Developer": "Desarrollador", + "Device name": "Nombre del dispositivo", + "Device Setup Method": "Método de configuración del dispositivo", + "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.", + "Display Language": "Idioma de visualización", + "Display name": "Nombre para mostrar", + "Do not check configuration mismatch before replication": "No verificar incompatibilidades antes de replicar", + "Do not keep metadata of deleted files.": "No conservar metadatos de archivos borrados", + "Do not split chunks in the background": "No dividir chunks en segundo plano", + "Do not use internal API": "No usar API interna", + "Duplicate": "Duplicar", + "Duplicate remote": "Duplicar remoto", + "E2EE Configuration": "Configuración de E2EE", + "Edge case addressing (Behaviour)": "Tratamiento de casos límite (comportamiento)", + "Edge case addressing (Database)": "Tratamiento de casos límite (base de datos)", + "Edge case addressing (Processing)": "Tratamiento de casos límite (procesamiento)", + "Emergency restart": "Reinicio de emergencia", + "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 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", + "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 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 Server Information": "Introducir información del servidor", + "Enter the server information manually": "Introducir manualmente la información del servidor", + "Export": "Exportar", + "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", + "File to resolve conflict": "Archivo para resolver el conflicto", + "Filename": "Nombre de archivo", + "First, please select the option that best describes your current situation.": "Primero, seleccione la opción que describa mejor su situación actual。", + "Flag and restart": "Marcar y reiniciar", + "Forces the file to be synced when opened.": "Forzar sincronización al abrir archivo", + "Fresh Start Wipe": "Borrado para reinicio completo", + "Garbage Collection V3 (Beta)": "Recolección de basura V3 (Beta)", + "Handle files as Case-Sensitive": "Manejar archivos como sensibles a mayúsculas", + "Hidden Files": "Archivos ocultos", + "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?", + "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 know my server details, let me enter them": "Conozco los datos de mi servidor; permítame introducirlos", + "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", + "If enabled, newly created chunks are temporarily kept within the document, and graduated to become independent chunks once stabilised.": "Chunks nuevos se mantienen temporalmente en el documento hasta estabilizarse", + "If enabled, the ⛔ icon will be shown inside the status instead of the file warnings banner. No details will be shown.": "Si se activa, se mostrará el icono ⛔ en el estado en lugar del banner de advertencia de archivos. No se mostrarán detalles.", + "If enabled, the file under 1kb will be processed in the UI thread.": "Archivos <1kb se procesan en hilo UI", + "If enabled, the notification of hidden files change will be suppressed.": "Si se habilita, se suprimirá la notificación de cambios en archivos ocultos.", + "If this enabled, all chunks will be stored with the revision made from its content. (Previous behaviour)": "Si se habilita, todos los chunks se almacenan con la revisión hecha desde su contenido. (comportamiento anterior)", + "If this enabled, All files are handled as case-Sensitive (Previous behaviour).": "Si se habilita, todos los archivos se manejan como sensibles a mayúsculas (comportamiento anterior)", + "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", + "Ignore files": "Archivos a ignorar", + "Ignore patterns": "Patrones de exclusión", + "Import connection": "Importar conexión", + "Incubate Chunks in Document": "Incubar chunks en documento", + "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.", + "Interval (sec)": "Intervalo (segundos)", + "Keep empty folder": "Mantener carpetas vacías", + "lang-de": "Alemán", + "lang-es": "Español", + "lang-fr": "Français", + "lang-ja": "Japonés", + "lang-ru": "Ruso", + "lang-zh": "Chino simplificado", + "lang-zh-tw": "Chino tradicional", + "Later": "Más tarde", + "Limit: {datetime} ({timestamp})": "Límite: {datetime} ({timestamp})", + "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.", + "liveSyncReplicator.checkingLastSyncPoint": "Buscando el último punto sincronizado.", + "liveSyncReplicator.couldNotConnectTo": "No se pudo conectar a ${uri} : ${name} \n(${db})", + "liveSyncReplicator.couldNotConnectToRemoteDb": "No se pudo conectar a base de datos remota: ${d}", + "liveSyncReplicator.couldNotConnectToServer": "No se pudo conectar al servidor.", + "liveSyncReplicator.couldNotConnectToURI": "No se pudo conectar a ${uri}:${dbRet}", + "liveSyncReplicator.couldNotMarkResolveRemoteDb": "No se pudo marcar como resuelta la base de datos remota.", + "liveSyncReplicator.liveSyncBegin": "Inicio de LiveSync...", + "liveSyncReplicator.lockRemoteDb": "Bloquear base de datos remota para prevenir corrupción de datos", + "liveSyncReplicator.markDeviceResolved": "Marcar este dispositivo como 'resuelto'.", + "liveSyncReplicator.oneShotSyncBegin": "Inicio de sincronización OneShot... (${syncMode})", + "liveSyncReplicator.remoteDbCorrupted": "La base de datos remota es más nueva o está dañada, asegúrese de tener la última versión de self-hosted-livesync instalada", + "liveSyncReplicator.remoteDbCreatedOrConnected": "Base de datos remota creada o conectada", + "liveSyncReplicator.remoteDbDestroyed": "Base de datos remota destruida", + "liveSyncReplicator.remoteDbDestroyError": "Algo ocurrió al destruir base de datos remota:", + "liveSyncReplicator.remoteDbMarkedResolved": "Base de datos remota marcada como resuelta.", + "liveSyncReplicator.replicationClosed": "Replicación cerrada", + "liveSyncReplicator.replicationInProgress": "Replicación en curso", + "liveSyncReplicator.retryLowerBatchSize": "Reintentar con tamaño de lote más bajo:${batch_size}/${batches_limit}", + "liveSyncReplicator.unlockRemoteDb": "Desbloquear base de datos remota para prevenir corrupción de datos", + "liveSyncSetting.errorNoSuchSettingItem": "No existe el ajuste: ${key}", + "liveSyncSetting.originalValue": "Original: ${value}", + "liveSyncSetting.valueShouldBeInRange": "El valor debe estar entre ${min} y ${max}", + "liveSyncSettings.btnApply": "Aplicar", + "Local Database Tweak": "Ajustes de la base de datos 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.", + "logPane.autoScroll": "Autodesplazamiento", + "logPane.logWindowOpened": "Ventana de registro abierta", + "logPane.pause": "Pausar", + "logPane.title": "Registro de Self-hosted LiveSync", + "logPane.wrap": "Ajustar", + "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", + "Maximum Incubating Chunks": "Máximo de chunks incubados", + "Maximum Incubation Period": "Periodo máximo de incubación", + "MB (0 to disable).": "MB (0 para desactivar)", + "Memory cache": "Caché en memoria", + "Memory cache size (by total characters)": "Tamaño caché memoria (por caracteres)", + "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", + "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}", + "moduleCheckRemoteSize.logThresholdEnlarged": "El umbral se ha ampliado a ${size}MB", + "moduleCheckRemoteSize.msgConfirmRebuild": "Esto puede llevar un poco de tiempo. ¿Realmente quieres reconstruir todo ahora?", + "moduleCheckRemoteSize.msgDatabaseGrowing": "**¡Tu base de datos está creciendo!** Pero no te preocupes, podemos abordarlo ahora. El tiempo antes de quedarse sin espacio en el almacenamiento remoto.\n\n| Tamaño medido | Tamaño configurado |\n| --- | --- |\n| ${estimatedSize} | ${maxSize} |\n\n> [!MORE]-\n> Si lo has estado utilizando durante muchos años, puede haber fragmentos no referenciados - es decir, basura - acumulándose en la base de datos. Por lo tanto, recomendamos reconstruir todo. Probablemente se volverá mucho más pequeño.\n>\n> Si el volumen de tu bóveda simplemente está aumentando, es mejor reconstruir todo después de organizar los archivos. Self-hosted LiveSync no elimina los datos reales incluso si los eliminas para acelerar el proceso. Está aproximadamente [documentado](https://github.com/vrtmrz/obsidian-livesync/blob/main/docs/tech_info.md).\n>\n> Si no te importa el aumento, puedes aumentar el límite de notificación en 100 MB. Este es el caso si lo estás ejecutando en tu propio servidor. Sin embargo, es mejor reconstruir todo de vez en cuando.\n>\n\n> [!WARNING]\n> Si realizas la reconstrucción completa, asegúrate de que todos los dispositivos estén sincronizados. El complemento fusionará tanto como sea posible, sin embargo.\n", + "moduleCheckRemoteSize.msgSetDBCapacity": "Podemos configurar una advertencia de capacidad máxima de base de datos, **para tomar medidas antes de quedarse sin espacio en el almacenamiento remoto**.\n¿Quieres habilitar esto?\n\n> [!MORE]-\n> - 0: No advertir sobre el tamaño del almacenamiento.\n> Esto es recomendado si tienes suficiente espacio en el almacenamiento remoto, especialmente si lo tienes autoalojado. Y puedes comprobar el tamaño del almacenamiento y reconstruir manualmente.\n> - 800: Advertir si el tamaño del almacenamiento remoto supera los 800 MB.\n> Esto es recomendado si estás usando fly.io con un límite de 1 GB o IBM Cloudant.\n> - 2000: Advertir si el tamaño del almacenamiento remoto supera los 2 GB.\n\nSi hemos alcanzado el límite, se nos pedirá que aumentemos el límite paso a paso.\n", + "moduleCheckRemoteSize.option2GB": "2GB (Estándar)", + "moduleCheckRemoteSize.option800MB": "800MB (Cloudant, fly.io)", + "moduleCheckRemoteSize.optionAskMeLater": "Pregúntame más tarde", + "moduleCheckRemoteSize.optionDismiss": "Descartar", + "moduleCheckRemoteSize.optionIncreaseLimit": "aumentar a ${newMax}MB", + "moduleCheckRemoteSize.optionNoWarn": "No, nunca advertir por favor", + "moduleCheckRemoteSize.optionRebuildAll": "Reconstruir todo ahora", + "moduleCheckRemoteSize.titleDatabaseSizeLimitExceeded": "El tamaño del almacenamiento remoto superó el límite", + "moduleCheckRemoteSize.titleDatabaseSizeNotify": "Configuración de notificación de tamaño de base de datos", + "moduleInputUIObsidian.defaultTitleConfirmation": "Confirmación", + "moduleInputUIObsidian.defaultTitleSelect": "Seleccionar", + "moduleInputUIObsidian.optionNo": "No", + "moduleInputUIObsidian.optionYes": "Sí", + "moduleLiveSyncMain.logAdditionalSafetyScan": "Escanéo de seguridad adicional...", + "moduleLiveSyncMain.logLoadingPlugin": "Cargando complemento...", + "moduleLiveSyncMain.logPluginInitCancelled": "La inicialización del complemento fue cancelada por un módulo", + "moduleLiveSyncMain.logPluginVersion": "Self-hosted LiveSync v${manifestVersion} ${packageVersion}", + "moduleLiveSyncMain.logReadChangelog": "LiveSync se ha actualizado, ¡por favor lee el registro de cambios!", + "moduleLiveSyncMain.logSafetyScanCompleted": "Escanéo de seguridad adicional completado", + "moduleLiveSyncMain.logSafetyScanFailed": "El escaneo de seguridad adicional ha fallado en un módulo", + "moduleLiveSyncMain.logUnloadingPlugin": "Descargando complemento...", + "moduleLiveSyncMain.logVersionUpdate": "LiveSync se ha actualizado, en caso de actualizaciones que rompan, toda la sincronización automática se ha desactivado temporalmente. Asegúrate de que todos los dispositivos estén actualizados antes de habilitar.", + "moduleLiveSyncMain.msgScramEnabled": "Self-hosted LiveSync se ha configurado para ignorar algunos eventos. ¿Es esto correcto?\n\n| Tipo | Estado | Nota |\n|:---:|:---:|---|\n| Eventos de almacenamiento | ${fileWatchingStatus} | Se ignorará cada modificación |\n| Eventos de base de datos | ${parseReplicationStatus} | Cada cambio sincronizado se pospondrá |\n\n¿Quieres reanudarlos y reiniciar Obsidian?\n\n> [!DETAILS]-\n> Estas banderas son establecidas por el complemento mientras se reconstruye o se obtiene. Si el proceso termina de forma anormal, puede mantenerse sin querer.\n> Si no estás seguro, puedes intentar volver a ejecutar estos procesos. Asegúrate de hacer una copia de seguridad de tu bóveda.\n", + "moduleLiveSyncMain.optionKeepLiveSyncDisabled": "Mantener LiveSync desactivado", + "moduleLiveSyncMain.optionResumeAndRestart": "Reanudar y reiniciar Obsidian", + "moduleLiveSyncMain.titleScramEnabled": "Scram habilitado", + "moduleLocalDatabase.logWaitingForReady": "Esperando a que la base de datos esté lista...", + "moduleLog.showLog": "Mostrar registro", + "moduleMigration.docUri": "https://github.com/vrtmrz/obsidian-livesync/blob/main/README_ES.md#how-to-use", + "moduleMigration.logBulkSendCorrupted": "El envío de fragmentos en bloque se ha habilitado, sin embargo, esta función se ha corrompido. Disculpe las molestias. Deshabilitado automáticamente.", + "moduleMigration.logFetchRemoteTweakFailed": "Error al obtener los valores de ajuste remoto", + "moduleMigration.logLocalDatabaseNotReady": "¡Algo salió mal! La base de datos local no está lista", + "moduleMigration.logMigratedSameBehaviour": "Migrado a db:${current} con el mismo comportamiento que antes", + "moduleMigration.logMigrationFailed": "La migración falló o se canceló de ${old} a ${current}", + "moduleMigration.logRedflag2CreationFail": "Error al crear redflag2", + "moduleMigration.logRemoteTweakUnavailable": "No se pudieron obtener los valores de ajuste remoto", + "moduleMigration.logSetupCancelled": "La configuración ha sido cancelada, ¡Self-hosted LiveSync está esperando tu configuración!", + "moduleMigration.msgFetchRemoteAgain": "Como ya sabrás, Self-hosted LiveSync ha cambiado su comportamiento predeterminado y la estructura de la base de datos.\n\nAfortunadamente, con tu tiempo y esfuerzo, la base de datos remota parece haber sido ya migrada. ¡Felicidades!\n\nSin embargo, necesitamos un poco más. La configuración de este dispositivo no es compatible con la base de datos remota. Necesitaremos volver a obtener la base de datos remota. ¿Debemos obtenerla nuevamente ahora?\n\n___Nota: No podemos sincronizar hasta que la configuración haya sido cambiada y la base de datos haya sido obtenida nuevamente.___\n___Nota2: Los fragmentos son completamente inmutables, solo podemos obtener los metadatos y diferencias.___", + "moduleMigration.msgInitialSetup": "Tu dispositivo **aún no ha sido configurado**. Permíteme guiarte a través del proceso de configuración.\n\nTen en cuenta que todo el contenido del diálogo se puede copiar al portapapeles. Si necesitas consultarlo más tarde, puedes pegarlo en una nota en Obsidian. También puedes traducirlo a tu idioma utilizando una herramienta de traducción.\n\nPrimero, ¿tienes **URI de configuración**?\n\nNota: Si no sabes qué es, consulta la [documentación](${URI_DOC}).", + "moduleMigration.msgRecommendSetupUri": "Te recomendamos encarecidamente que generes una URI de configuración y la utilices.\nSi no tienes conocimientos al respecto, consulta la [documentación](${URI_DOC}) (Lo siento de nuevo, pero es importante).\n\n¿Cómo quieres configurarlo manualmente?", + "moduleMigration.msgSinceV02321": "Desde la versión v0.23.21, Self-hosted LiveSync ha cambiado el comportamiento predeterminado y la estructura de la base de datos. Se han realizado los siguientes cambios:\n\n1. **Sensibilidad a mayúsculas de los nombres de archivo**\n El manejo de los nombres de archivo ahora no distingue entre mayúsculas y minúsculas. Este cambio es beneficioso para la mayoría de las plataformas, excepto Linux y iOS, que no gestionan efectivamente la sensibilidad a mayúsculas de los nombres de archivo.\n (En estos, se mostrará una advertencia para archivos con el mismo nombre pero diferentes mayúsculas).\n\n2. **Manejo de revisiones de los fragmentos**\n Los fragmentos son inmutables, lo que permite que sus revisiones sean fijas. Este cambio mejorará el rendimiento al guardar archivos.\n\n___Sin embargo, para habilitar cualquiera de estos cambios, es necesario reconstruir tanto las bases de datos remota como la local. Este proceso toma unos minutos, y recomendamos hacerlo cuando tengas tiempo suficiente.___\n\n- Si deseas mantener el comportamiento anterior, puedes omitir este proceso usando `${KEEP}`.\n- Si no tienes suficiente tiempo, por favor elige `${DISMISS}`. Se te pedirá nuevamente más tarde.\n- Si has reconstruido la base de datos en otro dispositivo, selecciona `${DISMISS}` e intenta sincronizar nuevamente. Dado que se ha detectado una diferencia, se te solicitará nuevamente.", + "moduleMigration.optionAdjustRemote": "Ajustar al remoto", + "moduleMigration.optionDecideLater": "Decidirlo más tarde", + "moduleMigration.optionEnableBoth": "Habilitar ambos", + "moduleMigration.optionEnableFilenameCaseInsensitive": "Habilitar solo #1", + "moduleMigration.optionEnableFixedRevisionForChunks": "Habilitar solo #2", + "moduleMigration.optionHaveSetupUri": "Sí, tengo", + "moduleMigration.optionKeepPreviousBehaviour": "Mantener comportamiento anterior", + "moduleMigration.optionManualSetup": "Configurarlo todo manualmente", + "moduleMigration.optionNoAskAgain": "No, por favor pregúntame de nuevo", + "moduleObsidianMenu.replicate": "Replicar", + "More actions": "Más acciones", + "Move remotely deleted files to the trash, instead of deleting.": "Mover archivos borrados remotos a papelera en lugar de eliminarlos", + "Network warning style": "Estilo de advertencia de red", + "New Remote": "Nuevo remoto", + "No limit configured": "Sin límite configurado", + "No, please take me back": "No, volver atrás", + "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.", + "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", + "obsidianLiveSyncSettingTab.btnApply": "Aplicar", + "obsidianLiveSyncSettingTab.btnCheck": "Verificar", + "obsidianLiveSyncSettingTab.btnCopy": "Copiar", + "obsidianLiveSyncSettingTab.btnDisable": "Desactivar", + "obsidianLiveSyncSettingTab.btnDiscard": "Descartar", + "obsidianLiveSyncSettingTab.btnEnable": "Activar", + "obsidianLiveSyncSettingTab.btnFix": "Corregir", + "obsidianLiveSyncSettingTab.btnGotItAndUpdated": "Lo entendí y actualicé.", + "obsidianLiveSyncSettingTab.btnNext": "Siguiente", + "obsidianLiveSyncSettingTab.btnStart": "Iniciar", + "obsidianLiveSyncSettingTab.btnTest": "Probar", + "obsidianLiveSyncSettingTab.btnUse": "Usar", + "obsidianLiveSyncSettingTab.buttonFetch": "Obtener", + "obsidianLiveSyncSettingTab.buttonNext": "Siguiente", + "obsidianLiveSyncSettingTab.defaultLanguage": "Predeterminado", + "obsidianLiveSyncSettingTab.descConnectSetupURI": "Este es el método recomendado para configurar Self-hosted LiveSync con una URI de configuración.", + "obsidianLiveSyncSettingTab.descCopySetupURI": "¡Perfecto para configurar un nuevo dispositivo!", + "obsidianLiveSyncSettingTab.descEnableLiveSync": "Solo habilita esto después de configurar cualquiera de las dos opciones anteriores o completar toda la configuración manualmente.", + "obsidianLiveSyncSettingTab.descFetchConfigFromRemote": "Obtener las configuraciones necesarias del servidor remoto ya configurado.", + "obsidianLiveSyncSettingTab.descManualSetup": "No recomendado, pero útil si no tienes una URI de configuración", + "obsidianLiveSyncSettingTab.descTestDatabaseConnection": "Abrir conexión a la base de datos. Si no se encuentra la base de datos remota y tienes permiso para crear una base de datos, se creará la base de datos.", + "obsidianLiveSyncSettingTab.descValidateDatabaseConfig": "Verifica y soluciona cualquier problema potencial con la configuración de la base de datos.", + "obsidianLiveSyncSettingTab.errAccessForbidden": "Acceso prohibido.", + "obsidianLiveSyncSettingTab.errCannotContinueTest": "No se pudo continuar con la prueba.", + "obsidianLiveSyncSettingTab.errCorsCredentials": "❗ cors.credentials es incorrecto", + "obsidianLiveSyncSettingTab.errCorsNotAllowingCredentials": "CORS no permite credenciales", + "obsidianLiveSyncSettingTab.errCorsOrigins": "❗ cors.origins es incorrecto", + "obsidianLiveSyncSettingTab.errEnableCors": "❗ httpd.enable_cors es incorrecto", + "obsidianLiveSyncSettingTab.errMaxDocumentSize": "❗ couchdb.max_document_size es bajo)", + "obsidianLiveSyncSettingTab.errMaxRequestSize": "❗ chttpd.max_http_request_size es bajo)", + "obsidianLiveSyncSettingTab.errMissingWwwAuth": "❗ httpd.WWW-Authenticate falta", + "obsidianLiveSyncSettingTab.errRequireValidUser": "❗ chttpd.require_valid_user es incorrecto.", + "obsidianLiveSyncSettingTab.errRequireValidUserAuth": "❗ chttpd_auth.require_valid_user es incorrecto.", + "obsidianLiveSyncSettingTab.labelDisabled": "⏹️ : Desactivado", + "obsidianLiveSyncSettingTab.labelEnabled": "🔁 : Activado", + "obsidianLiveSyncSettingTab.levelAdvanced": " (avanzado)", + "obsidianLiveSyncSettingTab.levelEdgeCase": " (excepción)", + "obsidianLiveSyncSettingTab.levelPowerUser": " (experto)", + "obsidianLiveSyncSettingTab.linkOpenInBrowser": "Abrir en el navegador", + "obsidianLiveSyncSettingTab.linkPageTop": "Ir arriba", + "obsidianLiveSyncSettingTab.linkTipsAndTroubleshooting": "Consejos y solución de problemas", + "obsidianLiveSyncSettingTab.linkTroubleshooting": "/docs/es/troubleshooting.md", + "obsidianLiveSyncSettingTab.logCannotUseCloudant": "Esta función no se puede utilizar con IBM Cloudant.", + "obsidianLiveSyncSettingTab.logCheckingConfigDone": "Verificación de configuración completada", + "obsidianLiveSyncSettingTab.logCheckingConfigFailed": "La verificación de configuración falló", + "obsidianLiveSyncSettingTab.logCheckingDbConfig": "Verificando la configuración de la base de datos", + "obsidianLiveSyncSettingTab.logCheckPassphraseFailed": "ERROR: Error al comprobar la frase de contraseña con el servidor remoto: \n${db}.", + "obsidianLiveSyncSettingTab.logConfiguredDisabled": "Modo de sincronización configurado: DESACTIVADO", + "obsidianLiveSyncSettingTab.logConfiguredLiveSync": "Modo de sincronización configurado: Sincronización en Vivo", + "obsidianLiveSyncSettingTab.logConfiguredPeriodic": "Modo de sincronización configurado: Periódico", + "obsidianLiveSyncSettingTab.logCouchDbConfigFail": "Configuración de CouchDB: ${title} falló", + "obsidianLiveSyncSettingTab.logCouchDbConfigSet": "Configuración de CouchDB: ${title} -> Establecer ${key} en ${value}", + "obsidianLiveSyncSettingTab.logCouchDbConfigUpdated": "Configuración de CouchDB: ${title} actualizado correctamente", + "obsidianLiveSyncSettingTab.logDatabaseConnected": "Base de datos conectada", + "obsidianLiveSyncSettingTab.logEncryptionNoPassphrase": "No puedes habilitar el cifrado sin una frase de contraseña", + "obsidianLiveSyncSettingTab.logEncryptionNoSupport": "Tu dispositivo no admite el cifrado.", + "obsidianLiveSyncSettingTab.logErrorOccurred": "¡Ocurrió un error!", + "obsidianLiveSyncSettingTab.logEstimatedSize": "Tamaño estimado: ${size}", + "obsidianLiveSyncSettingTab.logPassphraseInvalid": "La frase de contraseña no es válida, por favor corrígela.", + "obsidianLiveSyncSettingTab.logPassphraseNotCompatible": "ERROR: ¡La frase de contraseña no es compatible con el servidor remoto! ¡Por favor, revísala de nuevo!", + "obsidianLiveSyncSettingTab.logRebuildNote": "La sincronización ha sido desactivada, obtén y vuelve a activar si lo deseas.", + "obsidianLiveSyncSettingTab.logSelectAnyPreset": "Selecciona cualquier preestablecido.", + "obsidianLiveSyncSettingTab.msgAreYouSureProceed": "¿Estás seguro de proceder?", + "obsidianLiveSyncSettingTab.msgChangesNeedToBeApplied": "¡Los cambios deben aplicarse!", + "obsidianLiveSyncSettingTab.msgConfigCheck": "--Verificación de configuración--", + "obsidianLiveSyncSettingTab.msgConfigCheckFailed": "La verificación de configuración ha fallado. ¿Quieres continuar de todos modos?", + "obsidianLiveSyncSettingTab.msgConnectionCheck": "--Verificación de conexión--", + "obsidianLiveSyncSettingTab.msgConnectionProxyNote": "Si tienes problemas con la verificación de conexión (incluso después de verificar la configuración), por favor verifica la configuración de tu proxy reverso.", + "obsidianLiveSyncSettingTab.msgCurrentOrigin": "Origen actual: {origin}", + "obsidianLiveSyncSettingTab.msgDiscardConfirmation": "¿Realmente deseas descartar las configuraciones y bases de datos existentes?", + "obsidianLiveSyncSettingTab.msgDone": "--Hecho--", + "obsidianLiveSyncSettingTab.msgEnableCors": "Configurar httpd.enable_cors", + "obsidianLiveSyncSettingTab.msgEnableEncryptionRecommendation": "Recomendamos habilitar el cifrado de extremo a extremo y la obfuscación de ruta. ¿Estás seguro de querer continuar sin cifrado?", + "obsidianLiveSyncSettingTab.msgFetchConfigFromRemote": "¿Quieres obtener la configuración del servidor remoto?", + "obsidianLiveSyncSettingTab.msgGenerateSetupURI": "¡Todo listo! ¿Quieres generar un URI de configuración para configurar otros dispositivos?", + "obsidianLiveSyncSettingTab.msgIfConfigNotPersistent": "Si la configuración del servidor no es persistente (por ejemplo, ejecutándose en docker), los valores aquí pueden cambiar. Una vez que puedas conectarte, por favor actualiza las configuraciones en el local.ini del servidor.", + "obsidianLiveSyncSettingTab.msgInvalidPassphrase": "Tu frase de contraseña de cifrado podría ser inválida. ¿Estás seguro de querer continuar?", + "obsidianLiveSyncSettingTab.msgNewVersionNote": "¿Aquí debido a una notificación de actualización? Por favor, revise el historial de versiones. Si está satisfecho, haga clic en el botón. Una nueva actualización volverá a mostrar esto.", + "obsidianLiveSyncSettingTab.msgNonHTTPSInfo": "Configurado como URI que no es HTTPS. Ten en cuenta que esto puede no funcionar en dispositivos móviles.", + "obsidianLiveSyncSettingTab.msgNonHTTPSWarning": "No se puede conectar a URI que no sean HTTPS. Por favor, actualiza tu configuración y vuelve a intentarlo.", + "obsidianLiveSyncSettingTab.msgNotice": "---Aviso---", + "obsidianLiveSyncSettingTab.msgObjectStorageWarning": "ADVERTENCIA: Esta característica está en desarrollo, así que por favor ten en cuenta lo siguiente:\n- Arquitectura de solo anexado. Se requiere una reconstrucción para reducir el almacenamiento.\n- Un poco frágil.\n- Al sincronizar por primera vez, todo el historial será transferido desde el remoto. Ten en cuenta los límites de datos y las velocidades lentas.\n- Solo las diferencias se sincronizan en vivo.\n\nSi encuentras algún problema o tienes ideas sobre esta característica, por favor crea un issue en GitHub.\nAprecio mucho tu gran dedicación.", + "obsidianLiveSyncSettingTab.msgOriginCheck": "Verificación de origen: {org}", + "obsidianLiveSyncSettingTab.msgRebuildRequired": "Es necesario reconstruir las bases de datos para aplicar los cambios. Por favor selecciona el método para aplicar los cambios.\n\n
\nLegendas\n\n| Símbolo | Significado |\n|: ------ :| ------- |\n| ⇔ | Actualizado |\n| ⇄ | Sincronizar para equilibrar |\n| ⇐,⇒ | Transferir para sobrescribir |\n| ⇠,⇢ | Transferir para sobrescribir desde otro lado |\n\n
\n\n## ${OPTION_REBUILD_BOTH}\nA simple vista: 📄 ⇒¹ 💻 ⇒² 🛰️ ⇢ⁿ 💻 ⇄ⁿ⁺¹ 📄\nReconstruir tanto la base de datos local como la remota utilizando los archivos existentes de este dispositivo.\nEsto bloquea a otros dispositivos, y necesitan realizar la obtención.\n## ${OPTION_FETCH}\nA simple vista: 📄 ⇄² 💻 ⇐¹ 🛰️ ⇔ 💻 ⇔ 📄\nInicializa la base de datos local y la reconstruye utilizando los datos obtenidos de la base de datos remota.\nEste caso incluye el caso en el que has reconstruido la base de datos remota.\n## ${OPTION_ONLY_SETTING}\nAlmacena solo la configuración. **Precaución: esto puede provocar corrupción de datos**; generalmente es necesario reconstruir la base de datos.", + "obsidianLiveSyncSettingTab.msgSelectAndApplyPreset": "Por favor, selecciona y aplica cualquier elemento preestablecido para completar el asistente.", + "obsidianLiveSyncSettingTab.msgSetCorsCredentials": "Configurar cors.credentials", + "obsidianLiveSyncSettingTab.msgSetCorsOrigins": "Configurar cors.origins", + "obsidianLiveSyncSettingTab.msgSetMaxDocSize": "Configurar couchdb.max_document_size", + "obsidianLiveSyncSettingTab.msgSetMaxRequestSize": "Configurar chttpd.max_http_request_size", + "obsidianLiveSyncSettingTab.msgSetRequireValidUser": "Configurar chttpd.require_valid_user = true", + "obsidianLiveSyncSettingTab.msgSetRequireValidUserAuth": "Configurar chttpd_auth.require_valid_user = true", + "obsidianLiveSyncSettingTab.msgSettingModified": "La configuración \"${setting}\" fue modificada desde otro dispositivo. Haz clic {HERE} para recargar la configuración. Haz clic en otro lugar para ignorar los cambios.", + "obsidianLiveSyncSettingTab.msgSettingsUnchangeableDuringSync": "Estas configuraciones no se pueden cambiar durante la sincronización. Por favor, deshabilita toda la sincronización en las \"Configuraciones de Sincronización\" para desbloquear.", + "obsidianLiveSyncSettingTab.msgSetWwwAuth": "Configurar httpd.WWW-Authenticate", + "obsidianLiveSyncSettingTab.nameApplySettings": "Aplicar configuraciones", + "obsidianLiveSyncSettingTab.nameConnectSetupURI": "Conectar con URI de configuración", + "obsidianLiveSyncSettingTab.nameCopySetupURI": "Copiar la configuración actual a una URI de configuración", + "obsidianLiveSyncSettingTab.nameDisableHiddenFileSync": "Desactivar sincronización de archivos ocultos", + "obsidianLiveSyncSettingTab.nameDiscardSettings": "Descartar configuraciones y bases de datos existentes", + "obsidianLiveSyncSettingTab.nameEnableHiddenFileSync": "Activar sincronización de archivos ocultos", + "obsidianLiveSyncSettingTab.nameEnableLiveSync": "Activar LiveSync", + "obsidianLiveSyncSettingTab.nameHiddenFileSynchronization": "Sincronización de archivos ocultos", + "obsidianLiveSyncSettingTab.nameManualSetup": "Configuración manual", + "obsidianLiveSyncSettingTab.nameTestConnection": "Probar conexión", + "obsidianLiveSyncSettingTab.nameTestDatabaseConnection": "Probar Conexión de Base de Datos", + "obsidianLiveSyncSettingTab.nameValidateDatabaseConfig": "Validar Configuración de la Base de Datos", + "obsidianLiveSyncSettingTab.okAdminPrivileges": "✔ Tienes privilegios de administrador.", + "obsidianLiveSyncSettingTab.okCorsCredentials": "✔ cors.credentials está correcto.", + "obsidianLiveSyncSettingTab.okCorsCredentialsForOrigin": "CORS credenciales OK", + "obsidianLiveSyncSettingTab.okCorsOriginMatched": "✔ Origen de CORS correcto", + "obsidianLiveSyncSettingTab.okCorsOrigins": "✔ cors.origins está correcto.", + "obsidianLiveSyncSettingTab.okEnableCors": "✔ httpd.enable_cors está correcto.", + "obsidianLiveSyncSettingTab.okMaxDocumentSize": "✔ couchdb.max_document_size está correcto.", + "obsidianLiveSyncSettingTab.okMaxRequestSize": "✔ chttpd.max_http_request_size está correcto.", + "obsidianLiveSyncSettingTab.okRequireValidUser": "✔ chttpd.require_valid_user está correcto.", + "obsidianLiveSyncSettingTab.okRequireValidUserAuth": "✔ chttpd_auth.require_valid_user está correcto.", + "obsidianLiveSyncSettingTab.okWwwAuth": "✔ httpd.WWW-Authenticate está correcto.", + "obsidianLiveSyncSettingTab.optionApply": "Aplicar", + "obsidianLiveSyncSettingTab.optionCancel": "Cancelar", + "obsidianLiveSyncSettingTab.optionCouchDB": "CouchDB", + "obsidianLiveSyncSettingTab.optionDisableAllAutomatic": "Desactivar lo automático", + "obsidianLiveSyncSettingTab.optionFetchFromRemote": "Obtener del remoto", + "obsidianLiveSyncSettingTab.optionHere": "AQUÍ", + "obsidianLiveSyncSettingTab.optionLiveSync": "Sincronización LiveSync", + "obsidianLiveSyncSettingTab.optionMinioS3R2": "Minio,S3,R2", + "obsidianLiveSyncSettingTab.optionOkReadEverything": "OK, he leído todo.", + "obsidianLiveSyncSettingTab.optionOnEvents": "En eventos", + "obsidianLiveSyncSettingTab.optionPeriodicAndEvents": "Periódico y en eventos", + "obsidianLiveSyncSettingTab.optionPeriodicWithBatch": "Periódico con lote", + "obsidianLiveSyncSettingTab.optionRebuildBoth": "Reconstructuir ambos desde este dispositivo", + "obsidianLiveSyncSettingTab.optionSaveOnlySettings": "(Peligro) Guardar solo configuración", + "obsidianLiveSyncSettingTab.panelChangeLog": "Registro de cambios", + "obsidianLiveSyncSettingTab.panelGeneralSettings": "Configuraciones Generales", + "obsidianLiveSyncSettingTab.panelPrivacyEncryption": "Privacidad y Cifrado", + "obsidianLiveSyncSettingTab.panelRemoteConfiguration": "Configuración remota", + "obsidianLiveSyncSettingTab.panelSetup": "Configuración", + "obsidianLiveSyncSettingTab.titleAppearance": "Apariencia", + "obsidianLiveSyncSettingTab.titleConflictResolution": "Resolución de conflictos", + "obsidianLiveSyncSettingTab.titleCongratulations": "¡Felicidades!", + "obsidianLiveSyncSettingTab.titleCouchDB": "Servidor CouchDB", + "obsidianLiveSyncSettingTab.titleDeletionPropagation": "Propagación de eliminación", + "obsidianLiveSyncSettingTab.titleEncryptionNotEnabled": "El cifrado no está habilitado", + "obsidianLiveSyncSettingTab.titleEncryptionPassphraseInvalid": "La frase de contraseña de cifrado es inválida", + "obsidianLiveSyncSettingTab.titleExtraFeatures": "Habilitar funciones extras y avanzadas", + "obsidianLiveSyncSettingTab.titleFetchConfig": "Obtener configuración", + "obsidianLiveSyncSettingTab.titleFetchConfigFromRemote": "Obtener configuración del servidor remoto", + "obsidianLiveSyncSettingTab.titleFetchSettings": "Obtener configuraciones", + "obsidianLiveSyncSettingTab.titleHiddenFiles": "Archivos ocultos", + "obsidianLiveSyncSettingTab.titleLogging": "Registro", + "obsidianLiveSyncSettingTab.titleMinioS3R2": "MinIO, S3, R2", + "obsidianLiveSyncSettingTab.titleNotification": "Notificación", + "obsidianLiveSyncSettingTab.titleOnlineTips": "Consejos en línea", + "obsidianLiveSyncSettingTab.titleQuickSetup": "Configuración rápida", + "obsidianLiveSyncSettingTab.titleRebuildRequired": "Reconstrucción necesaria", + "obsidianLiveSyncSettingTab.titleRemoteConfigCheckFailed": "La verificación de configuración remota falló", + "obsidianLiveSyncSettingTab.titleRemoteServer": "Servidor remoto", + "obsidianLiveSyncSettingTab.titleReset": "Reiniciar", + "obsidianLiveSyncSettingTab.titleSetupOtherDevices": "Para configurar otros dispositivos", + "obsidianLiveSyncSettingTab.titleSynchronizationMethod": "Método de sincronización", + "obsidianLiveSyncSettingTab.titleSynchronizationPreset": "Preestablecimiento de sincronización", + "obsidianLiveSyncSettingTab.titleSyncSettings": "Configuraciones de Sincronización", + "obsidianLiveSyncSettingTab.titleSyncSettingsViaMarkdown": "Configuración de sincronización a través de Markdown", + "obsidianLiveSyncSettingTab.titleUpdateThinning": "Actualización de adelgazamiento", + "obsidianLiveSyncSettingTab.warnCorsOriginUnmatched": "⚠ El origen de CORS no coincide: {from}->{to}", + "obsidianLiveSyncSettingTab.warnNoAdmin": "⚠ No tienes privilegios de administrador.", + "Ok": "Aceptar", + "Old Algorithm": "Algoritmo antiguo", + "Older fallback (Slow, W/O WebAssembly)": "Alternativa anterior (lenta, sin WebAssembly)", + "Open": "Abrir", + "Open the dialog": "Abrir el diálogo", + "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", + "paneMaintenance.markDeviceResolvedAfterBackup": "Marcar el dispositivo como resuelto después de hacer una copia de seguridad", + "paneMaintenance.remoteLockedAndDeviceNotAccepted": "La base de datos remota está bloqueada y este dispositivo aún no ha sido aceptado.", + "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 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 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-to-Peer only": "Solo Peer-to-Peer", + "Peer-to-Peer Synchronisation": "Sincronización entre 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", + "Pick a file to resolve conflict": "Elegir un archivo para resolver el conflicto", + "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 option to proceed": "Seleccione una opción para continuar", + "Please select the type of server to which you are connecting.": "Seleccione el tipo de servidor al que se está conectando。", + "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", + "Presets": "Preconfiguraciones", + "Proceed with Setup URI": "Continuar con el URI de configuración", + "Process small files in the foreground": "Procesar archivos pequeños en primer plano", + "PureJS fallback (Fast, W/O WebAssembly)": "Alternativa PureJS (rápida, sin WebAssembly)", + "Purge all download/upload cache.": "Purga toda la caché de descarga y carga.", + "Purge all journal counter": "Purgar todos los contadores del diario", + "Rebuild local and remote database with local files.": "Reconstruye la base de datos local y remota usando los archivos locales.", + "Rebuilding Operations (Remote Only)": "Operaciones de reconstrucción (solo remoto)", + "Recreate all": "Recrear todo", + "Recreate missing chunks for all files": "Recrear fragmentos faltantes para todos los archivos", + "Reducing the frequency with which on-disk changes are reflected into the DB": "Reducir frecuencia de actualizaciones de disco a BD", + "Region": "Región", + "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 server type": "Tipo de servidor remoto", + "Remote Type": "Tipo de remoto", + "Rename": "Renombrar", + "Requires restart of Obsidian": "Requiere reiniciar Obsidian", + "Requires restart of Obsidian.": "Requiere reiniciar Obsidian", + "Resend": "Reenviar", + "Resend all chunks to the remote.": "Reenvía todos los chunks al remoto.", + "Reset": "Restablecer", + "Reset all": "Restablecer todo", + "Reset all journal counter": "Restablecer todos los contadores del diario", + "Reset journal received history": "Restablecer historial de recepción del diario", + "Reset journal sent history": "Restablecer historial de envío del diario", + "Reset received": "Restablecer recepción", + "Reset sent history": "Restablecer historial de envío", + "Reset Synchronisation information": "Restablecer información de sincronización", + "Reset Synchronisation on This Device": "Restablecer sincronización en este dispositivo", + "Resolve All": "Resolver todo", + "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 Now": "Reiniciar ahora", + "Restore or reconstruct local database from remote.": "Restaura o reconstruye la base de datos local desde el remoto.", + "S3/MinIO/R2 Object Storage": "Almacenamiento de objetos S3/MinIO/R2", + "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 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", + "Scan customization every 1 minute.": "Escanear personalización cada 1 minuto", + "Scan customization periodically": "Escanear personalización periódicamente", + "Scan for hidden files before replication": "Escanear archivos ocultos antes de replicar", + "Scan hidden files periodically": "Escanear archivos ocultos periódicamente", + "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!": "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 Key": "Clave secreta", + "Select the database adapter to use.": "Selecciona el adaptador de base de datos que se usará.", + "Send": "Enviar", + "Send chunks": "Enviar chunks", + "Server URI": "URI del servidor", + "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>
\n>\n> ### Clave pública\n> ```\n${public_key}\n> ```\n>\n> ### Clave privada\n> ```\n${private_key}\n> ```\n>\n>
\n\n>[!Ambas para copiar]-\n>\n>
\n>\n> ```\n${public_key}\n${private_key}\n> ```\n>\n>
", + "Setting.GenerateKeyPair.Title": "¡Se ha generado un nuevo par de claves!", + "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.Cancel Garbage Collection": "Cancelar la recolección de basura", + "Setup.Compaction in progress on remote database...": "La compactación está en curso en la base de datos remota...", + "Setup.Compaction on remote database completed successfully.": "La compactación en la base de datos remota se completó correctamente.", + "Setup.Compaction on remote database failed.": "La compactación en la base de datos remota falló.", + "Setup.Compaction on remote database timed out.": "La compactación en la base de datos remota agotó el tiempo de espera.", + "Setup.Device": "Dispositivo", + "Setup.Failed to connect to remote for compaction.": "No se pudo conectar a la base de datos remota para la compactación.", + "Setup.Failed to connect to remote for compaction. ${reason}": "No se pudo conectar a la base de datos remota para la compactación. ${reason}", + "Setup.Failed to start one-shot replication before Garbage Collection. Garbage Collection Cancelled.": "No se pudo iniciar la replicación de una sola vez antes de la recolección de basura. La recolección de basura se canceló.", + "Setup.Failed to start replication after Garbage Collection.": "No se pudo iniciar la replicación después de la recolección de basura.", + "Setup.Garbage Collection cancelled by user.": "El usuario canceló la recolección de basura.", + "Setup.Garbage Collection completed. Deleted chunks: ${deletedChunks} / ${totalChunks}. Time taken: ${seconds} seconds.": "Recolección de basura completada. Chunks eliminados: ${deletedChunks} / ${totalChunks}. Tiempo empleado: ${seconds} segundos.", + "Setup.Garbage Collection Confirmation": "Confirmación de recolección de basura", + "Setup.Garbage Collection: Found ${unusedChunks} unused chunks to delete.": "Recolección de basura: se encontraron ${unusedChunks} chunks no usados para eliminar.", + "Setup.Garbage Collection: Scanned ${scanned} / ~${docCount}": "Recolección de basura: escaneados ${scanned} / ~${docCount}", + "Setup.Garbage Collection: Scanning completed. Total chunks: ${totalChunks}, Used chunks: ${usedChunks}": "Recolección de basura: escaneo completado. Chunks totales: ${totalChunks}, chunks usados: ${usedChunks}", + "Setup.Ignore and Proceed": "Ignorar y continuar", + "Setup.No connected device information found. Cancelling Garbage Collection.": "No se encontró información de dispositivos conectados. Cancelando la recolección de basura.", + "Setup.Node ID": "ID del nodo", + "Setup.Node Information Missing": "Falta información del nodo", + "Setup.Obsidian version": "Versión de Obsidian", + "Setup.optionNoSetupUri": "No, no tengo", + "Setup.optionRemindNextLaunch": "Recordármelo en el próximo inicio", + "Setup.optionSetupWizard": "Llévame al asistente de configuración", + "Setup.optionYesFetchAgain": "Sí, obtener nuevamente", + "Setup.Please disable 'Read chunks online' in settings to use Garbage Collection.": "Desactiva \"Read chunks online\" en los ajustes para usar la recolección de basura.", + "Setup.Please enable 'Compute revisions for chunks' in settings to use Garbage Collection.": "Activa \"Compute revisions for chunks\" en los ajustes para usar la recolección de basura.", + "Setup.Please select 'Cancel' explicitly to cancel this operation.": "Selecciona explícitamente \"Cancelar\" para cancelar esta operación.", + "Setup.Plug-in version": "Versión del complemento", + "Setup.Proceed Garbage Collection": "Continuar con la recolección de basura", + "Setup.Proceeding with Garbage Collection, ignoring missing nodes.": "Continuando con la recolección de basura e ignorando los nodos faltantes.", + "Setup.Proceeding with Garbage Collection.": "Continuando con la recolección de basura.", + "Setup.Progress": "Progreso", + "Setup.RemoteE2EE.AdvancedTitle": "Avanzado", + "Setup.RemoteE2EE.AlgorithmWarning": "Cambiar el algoritmo de cifrado impedirá el acceso a cualquier dato cifrado anteriormente con otro algoritmo. Asegúrate de que todos tus dispositivos estén configurados para usar el mismo algoritmo y así mantener el acceso a tus datos.", + "Setup.RemoteE2EE.ButtonCancel": "Cancelar", + "Setup.RemoteE2EE.ButtonProceed": "Continuar", + "Setup.RemoteE2EE.DefaultAlgorithmDesc": "En la mayoría de los casos, debes mantener el algoritmo predeterminado (${algorithm}). Este ajuste solo es necesario si ya tienes un Vault cifrado con un formato diferente.", + "Setup.RemoteE2EE.Guidance": "Configura tus ajustes de cifrado de extremo a extremo.", + "Setup.RemoteE2EE.LabelEncrypt": "Cifrado de extremo a extremo", + "Setup.RemoteE2EE.LabelEncryptionAlgorithm": "Algoritmo de cifrado", + "Setup.RemoteE2EE.LabelObfuscateProperties": "Ofuscar propiedades", + "Setup.RemoteE2EE.MultiDestinationWarning": "Este ajuste debe ser el mismo incluso cuando te conectes a varios destinos de sincronización.", + "Setup.RemoteE2EE.ObfuscatePropertiesDesc": "Ofuscar propiedades (por ejemplo, la ruta del archivo, el tamaño y las fechas de creación y modificación) añade una capa adicional de seguridad al dificultar la identificación de la estructura y los nombres de tus archivos y carpetas en el servidor remoto. Esto ayuda a proteger tu privacidad y dificulta que usuarios no autorizados deduzcan información sobre tus datos.", + "Setup.RemoteE2EE.PassphraseValidationLine1": "Ten en cuenta que la frase de contraseña del cifrado de extremo a extremo no se valida hasta que el proceso de sincronización comienza realmente. Esta es una medida de seguridad diseñada para proteger tus datos.", + "Setup.RemoteE2EE.PassphraseValidationLine2": "Por lo tanto, te pedimos que tengas muchísimo cuidado al configurar manualmente la información del servidor. Si introduces una frase de contraseña incorrecta, los datos del servidor se corromperán. Ten en cuenta que este comportamiento es intencionado.", + "Setup.RemoteE2EE.PlaceholderPassphrase": "Introduce tu frase de contraseña", + "Setup.RemoteE2EE.StronglyRecommendedLine1": "Al habilitar el cifrado de extremo a extremo, tus datos se cifran en tu dispositivo antes de enviarse al servidor remoto. Esto significa que, incluso si alguien obtiene acceso al servidor, no podrá leer tus datos sin la frase de contraseña. Asegúrate de recordarla, ya que también será necesaria para descifrar tus datos en otros dispositivos.", + "Setup.RemoteE2EE.StronglyRecommendedLine2": "Además, ten en cuenta que si estás usando sincronización Peer-to-Peer, esta configuración se utilizará cuando más adelante cambies a otros métodos y te conectes a un servidor remoto.", + "Setup.RemoteE2EE.StronglyRecommendedTitle": "Muy recomendable", + "Setup.RemoteE2EE.Title": "Cifrado de extremo a extremo", + "Setup.ScanQRCode.ButtonClose": "Cerrar este diálogo", + "Setup.ScanQRCode.Guidance": "Sigue los pasos de abajo para importar los ajustes desde tu dispositivo actual.", + "Setup.ScanQRCode.Step1": "En este dispositivo, mantén este Vault abierto.", + "Setup.ScanQRCode.Step2": "En el dispositivo de origen, abre Obsidian.", + "Setup.ScanQRCode.Step3": "En el dispositivo de origen, ejecuta desde la paleta de comandos la orden \"Mostrar ajustes como código QR\".", + "Setup.ScanQRCode.Step4": "En este dispositivo, cambia a la cámara o usa un escáner QR para escanear el código mostrado.", + "Setup.ScanQRCode.Title": "Escanear código QR", + "Setup.Setup URI dialog cancelled.": "Se canceló el diálogo de Setup URI.", + "Setup.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 diferentes (máx.: ${maxProgress}, mín.: ${minProgress}).\nEsto puede indicar que algunos dispositivos no han completado la sincronización, lo que podría causar conflictos. Se recomienda encarecidamente confirmar que todos los dispositivos estén sincronizados antes de continuar.", + "Setup.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.": "Los siguientes nodos aceptados no tienen información del nodo:\n- ${missingNodes}\n\nEsto indica que no se han conectado desde hace algún tiempo o que se han quedado en una versión anterior.\nSi es posible, es preferible actualizar todos los dispositivos. Si tienes dispositivos que ya no se usan, puedes borrar todos los nodos aceptados bloqueando el remoto una vez.", + "Setup.titleCaseSensitivity": "Sensibilidad a mayúsculas", + "Setup.titleRecommendSetupUri": "Recomendación de uso de URI de configuración", + "Setup.titleWelcome": "Bienvenido a Self-hosted LiveSync", + "Setup.UseSetupURI.ButtonCancel": "Cancelar", + "Setup.UseSetupURI.ButtonProceed": "Probar ajustes y continuar", + "Setup.UseSetupURI.ErrorFailedToParse": "No se pudo procesar la URI de configuración. Revisa la URI y la frase de contraseña.", + "Setup.UseSetupURI.ErrorPassphraseRequired": "Introduce la frase de contraseña del Vault.", + "Setup.UseSetupURI.GuidanceLine1": "Introduce la URI de configuración que se generó durante la instalación del servidor o en otro dispositivo, junto con la frase de contraseña del Vault.", + "Setup.UseSetupURI.GuidanceLine2": "Ten en cuenta que puedes generar una nueva URI de configuración ejecutando el comando \"Copiar ajustes como nueva URI de configuración\" desde la paleta de comandos.", + "Setup.UseSetupURI.InvalidInfo": "La URI de configuración no es válida. Revísala e inténtalo de nuevo.", + "Setup.UseSetupURI.LabelPassphrase": "Frase de contraseña del Vault", + "Setup.UseSetupURI.LabelSetupURI": "URI de configuración", + "Setup.UseSetupURI.PlaceholderPassphrase": "Introduce la frase de contraseña del Vault", + "Setup.UseSetupURI.Title": "Introducir URI de configuración", + "Setup.UseSetupURI.ValidInfo": "La URI de configuración es válida y está lista para usarse.", + "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?", + "Should we prompt you for every single merge, even if we can safely merge automatcially?": "¿Preguntar en cada fusión aunque sea automática?", + "Show full banner": "Mostrar banner completo", + "Show only notifications": "Mostrar solo notificaciones", + "Show status as icons only": "Mostrar estado solo con íconos", + "Show status icon instead of file warnings banner": "Mostrar icono de estado en lugar del banner de advertencia de archivos", + "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.", + "Starts synchronisation when a file is saved.": "Inicia sincronización al guardar un archivo", + "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", + "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 after merging file": "Sincronizar tras fusionar archivo", + "Sync automatically after merging files": "Sincronizar automáticamente tras fusionar archivos", + "Sync Mode": "Modo de sincronización", + "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", + "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", + "Target patterns": "Patrones objetivo", + "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 delay for consecutive on-demand fetches": "Retraso entre obtenciones consecutivas", + "The Hash algorithm for chunk IDs": "Algoritmo hash para IDs de chunks", + "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", + "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 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 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.", + "Transfer Tweak": "Ajustes de transferencia", + "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", + "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 dynamic iteration count": "Usar conteo de iteraciones dinámico", + "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", + "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", + "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 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", + "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)", + "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。" +} diff --git a/src/common/messagesJson/fr.json b/src/common/messagesJson/fr.json new file mode 100644 index 00000000..72351b2e --- /dev/null +++ b/src/common/messagesJson/fr.json @@ -0,0 +1,580 @@ +{ + "(BETA) Always overwrite with a newer file": "(BÊTA) Toujours écraser avec un fichier plus récent", + "(Beta) Use ignore files": "(Bêta) Utiliser les fichiers d'exclusion", + "(Days passed, 0 to disable automatic-deletion)": "(Jours écoulés, 0 pour désactiver la suppression automatique)", + "(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. Lire les fragments en ligne) Si cette option est activée, LiveSync lit les fragments directement en ligne au lieu de les répliquer localement. L'augmentation de la taille personnalisée des fragments est recommandée.", + "(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.": "(Mo) Si cette valeur est définie, les modifications des fichiers locaux et distants plus grands que cette taille seront ignorées. Si le fichier redevient plus petit, une version plus récente sera utilisée.", + "(Mega chars)": "(Méga caractères)", + "(Not recommended) If set, credentials will be stored in the file.": "(Non recommandé) Si activé, les identifiants seront stockés dans le fichier.", + "(Obsolete) Use an old adapter for compatibility": "(Obsolète) Utiliser un ancien adaptateur pour la compatibilité", + "Access Key": "Clé d'accès", + "Active Remote Configuration": "Configuration distante active", + "Always prompt merge conflicts": "Toujours demander pour les conflits de fusion", + "Analyse": "Analyser", + "Analyse database usage": "Analyser l'utilisation de la base de données", + "Analyse database usage and generate a TSV report for diagnosis yourself. You can paste the generated report with any spreadsheet you like.": "Analyser l'utilisation de la base de données et générer un rapport TSV pour un diagnostic personnel. Vous pouvez coller le rapport généré dans le tableur de votre choix.", + "Apply Latest Change if Conflicting": "Appliquer la dernière modification en cas de conflit", + "Apply preset configuration": "Appliquer une configuration prédéfinie", + "Automatically Sync all files when opening Obsidian.": "Synchroniser automatiquement tous les fichiers à l'ouverture d'Obsidian.", + "Batch database update": "Mise à jour groupée de la base de données", + "Batch limit": "Limite de lot", + "Batch size": "Taille de lot", + "Batch size of on-demand fetching": "Taille de lot pour la récupération à la demande", + "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.": "Avant la version v0.17.16, nous utilisions un ancien adaptateur pour la base de données locale. Le nouvel adaptateur est désormais recommandé. Cependant, il nécessite une reconstruction de la base locale. Veuillez désactiver cette option lorsque vous aurez suffisamment de temps. Si elle reste activée, il vous sera également demandé de la désactiver lors de la récupération depuis la base distante.", + "Bucket Name": "Nom du bucket", + "Check": "Vérifier", + "cmdConfigSync.showCustomizationSync": "Afficher la synchronisation de personnalisation", + "Comma separated `.gitignore, .dockerignore`": "Séparés par des virgules `.gitignore, .dockerignore`", + "Compute revisions for chunks": "Calculer les révisions pour les fragments", + "Copy Report to clipboard": "Copier le rapport dans le presse-papiers", + "Data Compression": "Compression des données", + "Database Name": "Nom de la base de données", + "Database suffix": "Suffixe de la base de données", + "Delay conflict resolution of inactive files": "Différer la résolution des conflits pour les fichiers inactifs", + "Delay merge conflict prompt for inactive files.": "Différer l'invite de conflit de fusion pour les fichiers inactifs.", + "Delete old metadata of deleted files on start-up": "Supprimer les anciennes métadonnées des fichiers effacés au démarrage", + "Device name": "Nom de l'appareil", + "dialog.yourLanguageAvailable": "Self-hosted LiveSync dispose d'une traduction pour votre langue, le paramètre %{Display language} a donc été activé.\n\nNote : Tous les messages ne sont pas traduits. Nous attendons vos contributions !\nNote 2 : Si vous créez un ticket, **veuillez revenir à %{lang-def}** puis prendre des captures d'écran, messages et journaux. Cela peut être fait dans la boîte de dialogue des paramètres.\nBonne utilisation !", + "dialog.yourLanguageAvailable.btnRevertToDefault": "Conserver %{lang-def}", + "dialog.yourLanguageAvailable.Title": " Une traduction est disponible !", + "Disables logging, only shows notifications. Please disable if you report an issue.": "Désactive la journalisation, n'affiche que les notifications. Veuillez désactiver si vous signalez un problème.", + "Display Language": "Langue d'affichage", + "Do not check configuration mismatch before replication": "Ne pas vérifier les incohérences de configuration avant la réplication", + "Do not keep metadata of deleted files.": "Ne pas conserver les métadonnées des fichiers supprimés.", + "Do not split chunks in the background": "Ne pas fragmenter en arrière-plan", + "Do not use internal API": "Ne pas utiliser l'API interne", + "Doctor.Button.DismissThisVersion": "Non, et ne plus demander jusqu'à la prochaine version", + "Doctor.Button.Fix": "Corriger", + "Doctor.Button.FixButNoRebuild": "Corriger mais sans reconstruction", + "Doctor.Button.No": "Non", + "Doctor.Button.Skip": "Laisser tel quel", + "Doctor.Button.Yes": "Oui", + "Doctor.Dialogue.Main": "Bonjour ! Config Doctor a été activé en raison de ${activateReason} !\nEt, malheureusement, certaines configurations ont été détectées comme des problèmes potentiels.\nPas d'inquiétude. Résolvons-les un par un.\n\nPour information, nous allons vous interroger sur les éléments suivants.\n\n${issues}\n\nVoulez-vous commencer ?", + "Doctor.Dialogue.MainFix": "\n## ${name}\n\n| Actuel | Idéal |\n|:---:|:---:|\n| ${current} | ${ideal} |\n\n**Niveau de recommandation :** ${level}\n\n### Pourquoi ceci a-t-il été détecté ?\n\n${reason}\n\n${note}\n\nCorriger à la valeur idéale ?", + "Doctor.Dialogue.Title": "Docteur Config Self-hosted LiveSync", + "Doctor.Dialogue.TitleAlmostDone": "Presque terminé !", + "Doctor.Dialogue.TitleFix": "Corriger le problème ${current}/${total}", + "Doctor.Level.Must": "Obligatoire", + "Doctor.Level.Necessary": "Nécessaire", + "Doctor.Level.Optional": "Optionnel", + "Doctor.Level.Recommended": "Recommandé", + "Doctor.Message.NoIssues": "Aucun problème détecté !", + "Doctor.Message.RebuildLocalRequired": "Attention ! Une reconstruction de la base locale est requise pour appliquer ceci !", + "Doctor.Message.RebuildRequired": "Attention ! Une reconstruction est requise pour appliquer ceci !", + "Doctor.Message.SomeSkipped": "Nous avons laissé certains problèmes en l'état. Dois-je vous demander à nouveau au prochain démarrage ?", + "Doctor.RULES.E2EE_V02500.REASON": "Le chiffrement de bout en bout est désormais plus robuste et plus rapide. Aussi parce que le précédent E2EE s'est révélé compromis lors d'une nouvelle revue de code. Il doit être appliqué dès que possible. Nous nous excusons sincèrement pour la gêne occasionnée. Ce paramètre n'est pas compatible avec les versions antérieures. Tous les appareils synchronisés doivent être mis à jour en v0.25.0 ou supérieur. Les reconstructions ne sont pas requises et seront converties du nouveau transfert vers le nouveau format. Il est toutefois recommandé de reconstruire dans la mesure du possible.", + "Enable advanced features": "Activer les fonctionnalités avancées", + "Enable customization sync": "Activer la synchronisation de personnalisation", + "Enable Developers' Debug Tools.": "Activer les outils de débogage pour développeurs.", + "Enable edge case treatment features": "Activer les fonctionnalités pour cas particuliers", + "Enable poweruser features": "Activer les fonctionnalités pour utilisateurs avancés", + "Enable this if your Object Storage doesn't support CORS": "Activer ceci si votre stockage objet ne prend pas en charge CORS", + "Enable this option to automatically apply the most recent change to documents even when it conflicts": "Activer cette option pour appliquer automatiquement la modification la plus récente aux documents même en cas de conflit", + "Encrypt contents on the remote database. If you use the plugin's synchronization feature, enabling this is recommended.": "Chiffrer le contenu sur la base de données distante. Si vous utilisez la fonction de synchronisation du plugin, l'activation est recommandée.", + "Encrypting sensitive configuration items": "Chiffrement des éléments de configuration sensibles", + "Encryption phassphrase. If changed, you should overwrite the server's database with the new (encrypted) files.": "Phrase secrète de chiffrement. Si modifiée, vous devriez écraser la base de données du serveur avec les nouveaux fichiers (chiffrés).", + "End-to-End Encryption": "Chiffrement de bout en bout", + "Endpoint URL": "URL du point de terminaison", + "Enhance chunk size": "Améliorer la taille des fragments", + "Fetch chunks on demand": "Récupérer les fragments à la demande", + "Fetch database with previous behaviour": "Récupérer la base de données avec le comportement précédent", + "Filename": "Nom de fichier", + "Forces the file to be synced when opened.": "Force la synchronisation du fichier à son ouverture.", + "Handle files as Case-Sensitive": "Gérer les fichiers en respectant la casse", + "If disabled(toggled), chunks will be split on the UI thread (Previous behaviour).": "Si désactivé, les fragments seront découpés sur le thread UI (comportement précédent).", + "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.": "Si activée, la synchronisation de personnalisation efficace par fichier sera utilisée. Une petite migration est nécessaire lors de l'activation. Tous les appareils doivent être à jour en v0.23.18. Une fois cette option activée, la compatibilité avec les anciennes versions est perdue.", + "If enabled, chunks will be split into no more than 100 items. However, dedupe is slightly weaker.": "Si activée, les fragments seront découpés en 100 éléments au maximum. Cependant, la déduplication est légèrement moins efficace.", + "If enabled, newly created chunks are temporarily kept within the document, and graduated to become independent chunks once stabilised.": "Si activée, les fragments nouvellement créés sont temporairement conservés dans le document et promus en fragments indépendants une fois stabilisés.", + "If enabled, the ⛔ icon will be shown inside the status instead of the file warnings banner. No details will be shown.": "Si activée, l'icône ⛔ s'affichera dans le statut à la place de la bannière d'avertissements de fichiers. Aucun détail ne sera affiché.", + "If enabled, the file under 1kb will be processed in the UI thread.": "Si activée, les fichiers de moins de 1 Ko seront traités sur le thread UI.", + "If enabled, the notification of hidden files change will be suppressed.": "Si activée, les notifications de modifications des fichiers cachés seront supprimées.", + "If this enabled, all chunks will be stored with the revision made from its content. (Previous behaviour)": "Si activée, tous les fragments seront stockés avec la révision issue de leur contenu. (Comportement précédent)", + "If this enabled, All files are handled as case-Sensitive (Previous behaviour).": "Si activée, tous les fichiers sont gérés en respectant la casse (comportement précédent).", + "If this enabled, chunks will be split into semantically meaningful segments. Not all platforms support this feature.": "Si activée, les fragments seront découpés en segments sémantiquement signifiants. Toutes les plateformes ne prennent pas en charge cette fonctionnalité.", + "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.": "Si défini, les modifications des fichiers locaux correspondant aux fichiers d'exclusion seront ignorées. Les changements distants sont déterminés à l'aide des fichiers d'exclusion locaux.", + "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.": "Si cette option est activée, PouchDB maintiendra la connexion ouverte pendant 60 secondes, et si aucun changement n'arrive durant cette période, fermera et rouvrira la socket au lieu de la garder ouverte indéfiniment. Utile lorsqu'un proxy limite la durée des requêtes, mais peut augmenter l'utilisation des ressources.", + "Ignore files": "Fichiers d'exclusion", + "Incubate Chunks in Document": "Incuber les fragments dans le document", + "Interval (sec)": "Intervalle (sec)", + "K.exp": "Expérimental", + "K.long_p2p_sync": "%{title_p2p_sync}", + "K.P2P": "%{Peer}-à-%{Peer}", + "K.Peer": "Pair", + "K.ScanCustomization": "Analyser la personnalisation", + "K.short_p2p_sync": "Sync P2P", + "K.title_p2p_sync": "Synchronisation pair-à-pair", + "Keep empty folder": "Conserver les dossiers vides", + "lang_def": "Par défaut", + "lang-de": "Deutsche", + "lang-def": "%{lang_def}", + "lang-es": "Español", + "lang-fr": "Français", + "lang-ja": "日本語", + "lang-ko": "한국어", + "lang-ru": "Русский", + "lang-zh": "简体中文", + "lang-zh-tw": "繁體中文", + "LiveSync could not handle multiple vaults which have same name without different prefix, This should be automatically configured.": "LiveSync ne peut pas gérer plusieurs coffres portant le même nom sans préfixe distinct. Ceci devrait être configuré automatiquement.", + "liveSyncReplicator.beforeLiveSync": "Avant LiveSync, lancement d'un OneShot initial...", + "liveSyncReplicator.cantReplicateLowerValue": "Impossible de répliquer une valeur inférieure.", + "liveSyncReplicator.checkingLastSyncPoint": "Recherche du dernier point de synchronisation.", + "liveSyncReplicator.couldNotConnectTo": "Connexion impossible à ${uri} : ${name}\n(${db})", + "liveSyncReplicator.couldNotConnectToRemoteDb": "Connexion à la base distante impossible : ${d}", + "liveSyncReplicator.couldNotConnectToServer": "Connexion au serveur impossible.", + "liveSyncReplicator.couldNotConnectToURI": "Connexion impossible à ${uri}:${dbRet}", + "liveSyncReplicator.couldNotMarkResolveRemoteDb": "Impossible de marquer la résolution de la base distante.", + "liveSyncReplicator.liveSyncBegin": "Démarrage de LiveSync...", + "liveSyncReplicator.lockRemoteDb": "Verrouillage de la base distante pour éviter la corruption des données", + "liveSyncReplicator.markDeviceResolved": "Marquer cet appareil comme « résolu ».", + "liveSyncReplicator.oneShotSyncBegin": "Démarrage de la synchronisation OneShot... (${syncMode})", + "liveSyncReplicator.remoteDbCorrupted": "La base distante est plus récente ou corrompue, assurez-vous d'avoir installé la dernière version de self-hosted-livesync", + "liveSyncReplicator.remoteDbCreatedOrConnected": "Base distante créée ou connectée", + "liveSyncReplicator.remoteDbDestroyed": "Base distante détruite", + "liveSyncReplicator.remoteDbDestroyError": "Un problème est survenu lors de la destruction de la base distante :", + "liveSyncReplicator.remoteDbMarkedResolved": "La base distante a été marquée comme résolue.", + "liveSyncReplicator.replicationClosed": "Réplication fermée", + "liveSyncReplicator.replicationInProgress": "Une réplication est déjà en cours", + "liveSyncReplicator.retryLowerBatchSize": "Nouvelle tentative avec une taille de lot réduite :${batch_size}/${batches_limit}", + "liveSyncReplicator.unlockRemoteDb": "Déverrouillage de la base distante pour éviter la corruption des données", + "liveSyncSetting.errorNoSuchSettingItem": "Élément de paramètre inexistant : ${key}", + "liveSyncSetting.originalValue": "Original : ${value}", + "liveSyncSetting.valueShouldBeInRange": "La valeur doit être ${min} < valeur < ${max}", + "liveSyncSettings.btnApply": "Appliquer", + "logPane.autoScroll": "Défilement automatique", + "logPane.logWindowOpened": "Fenêtre des journaux ouverte", + "logPane.pause": "Pause", + "logPane.title": "Journaux Self-hosted LiveSync", + "logPane.wrap": "Retour à la ligne", + "Maximum delay for batch database updating": "Délai maximum pour la mise à jour groupée de la base", + "Maximum file size": "Taille maximale de fichier", + "Maximum Incubating Chunk Size": "Taille maximale des fragments en incubation", + "Maximum Incubating Chunks": "Nombre maximum de fragments en incubation", + "Maximum Incubation Period": "Période maximale d'incubation", + "MB (0 to disable).": "Mo (0 pour désactiver).", + "Memory cache size (by total characters)": "Taille du cache mémoire (par nombre total de caractères)", + "Memory cache size (by total items)": "Taille du cache mémoire (par nombre total d'éléments)", + "Minimum delay for batch database updating": "Délai minimum pour la mise à jour groupée de la base", + "Minimum interval for syncing": "Intervalle minimum pour la synchronisation", + "moduleCheckRemoteSize.logCheckingStorageSizes": "Vérification des tailles de stockage", + "moduleCheckRemoteSize.logCurrentStorageSize": "Taille du stockage distant : ${measuredSize}", + "moduleCheckRemoteSize.logExceededWarning": "Taille du stockage distant : ${measuredSize} a dépassé ${notifySize}", + "moduleCheckRemoteSize.logThresholdEnlarged": "Le seuil a été augmenté à ${size} Mo", + "moduleCheckRemoteSize.msgConfirmRebuild": "Cela peut prendre un certain temps. Voulez-vous vraiment tout reconstruire maintenant ?", + "moduleCheckRemoteSize.msgDatabaseGrowing": "**Votre base de données grossit !** Pas d'inquiétude, nous pouvons y remédier dès maintenant, avant de manquer d'espace sur le stockage distant.\n\n| Taille mesurée | Taille configurée |\n| --- | --- |\n| ${estimatedSize} | ${maxSize} |\n\n> [!MORE]-\n> Si vous l'utilisez depuis de nombreuses années, il peut y avoir des fragments non référencés — des déchets, en somme — accumulés dans la base. Nous recommandons donc de tout reconstruire. Cela réduira probablement beaucoup la taille.\n>\n> Si le volume de votre coffre augmente simplement, il est préférable de tout reconstruire après avoir organisé les fichiers. Self-hosted LiveSync ne supprime pas réellement les données même si vous les effacez, afin d'accélérer le processus. Ceci est documenté grossièrement [ici](https://github.com/vrtmrz/obsidian-livesync/blob/main/docs/tech_info.md).\n>\n> Si cela ne vous dérange pas, vous pouvez augmenter la limite de notification de 100 Mo. C'est le cas si vous l'exécutez sur votre propre serveur. Il reste toutefois préférable de tout reconstruire de temps en temps.\n>\n\n> [!WARNING]\n> Si vous tout reconstruisez, assurez-vous que tous les appareils sont synchronisés. Le plug-in fusionnera autant que possible cependant.\n", + "moduleCheckRemoteSize.msgSetDBCapacity": "Nous pouvons définir un avertissement de capacité maximale de la base de données, **afin d'agir avant de manquer d'espace sur le stockage distant**.\nVoulez-vous activer ceci ?\n\n> [!MORE]-\n> - 0 : Ne pas avertir sur la taille de stockage.\n> Recommandé si vous avez suffisamment d'espace sur le stockage distant, surtout en auto-hébergement. Vous pouvez vérifier la taille et reconstruire manuellement.\n> - 800 : Avertir si la taille du stockage distant dépasse 800 Mo.\n> Recommandé si vous utilisez fly.io avec une limite de 1 Go ou IBM Cloudant.\n> - 2000 : Avertir si la taille du stockage distant dépasse 2 Go.\n\nSi la limite est atteinte, il nous sera proposé de l'augmenter étape par étape.\n", + "moduleCheckRemoteSize.option2GB": "2 Go (Standard)", + "moduleCheckRemoteSize.option800MB": "800 Mo (Cloudant, fly.io)", + "moduleCheckRemoteSize.optionAskMeLater": "Me demander plus tard", + "moduleCheckRemoteSize.optionDismiss": "Ignorer", + "moduleCheckRemoteSize.optionIncreaseLimit": "augmenter à ${newMax} Mo", + "moduleCheckRemoteSize.optionNoWarn": "Non, ne jamais avertir", + "moduleCheckRemoteSize.optionRebuildAll": "Tout reconstruire maintenant", + "moduleCheckRemoteSize.titleDatabaseSizeLimitExceeded": "Taille du stockage distant au-delà de la limite", + "moduleCheckRemoteSize.titleDatabaseSizeNotify": "Configuration de la notification de taille de base", + "moduleInputUIObsidian.defaultTitleConfirmation": "Confirmation", + "moduleInputUIObsidian.defaultTitleSelect": "Sélection", + "moduleInputUIObsidian.optionNo": "Non", + "moduleInputUIObsidian.optionYes": "Oui", + "moduleLiveSyncMain.logAdditionalSafetyScan": "Analyse de sécurité supplémentaire...", + "moduleLiveSyncMain.logLoadingPlugin": "Chargement du plugin...", + "moduleLiveSyncMain.logPluginInitCancelled": "L'initialisation du plugin a été annulée par un module", + "moduleLiveSyncMain.logPluginVersion": "Self-hosted LiveSync v${manifestVersion} ${packageVersion}", + "moduleLiveSyncMain.logReadChangelog": "LiveSync a été mis à jour, veuillez lire le journal des modifications !", + "moduleLiveSyncMain.logSafetyScanCompleted": "Analyse de sécurité supplémentaire terminée", + "moduleLiveSyncMain.logSafetyScanFailed": "L'analyse de sécurité supplémentaire a échoué sur un module", + "moduleLiveSyncMain.logUnloadingPlugin": "Déchargement du plugin...", + "moduleLiveSyncMain.logVersionUpdate": "LiveSync a été mis à jour. En cas de mises à jour non rétrocompatibles, toute synchronisation automatique a été temporairement désactivée. Assurez-vous que tous les appareils sont à jour avant d'activer.", + "moduleLiveSyncMain.msgScramEnabled": "Self-hosted LiveSync a été configuré pour ignorer certains événements. Est-ce correct ?\n\n| Type | Statut | Note |\n|:---:|:---:|---|\n| Événements de stockage | ${fileWatchingStatus} | Toute modification sera ignorée |\n| Événements de base | ${parseReplicationStatus} | Tout changement synchronisé sera reporté |\n\nVoulez-vous les reprendre et redémarrer Obsidian ?\n\n> [!DETAILS]-\n> Ces indicateurs sont définis par le plug-in lors d'une reconstruction ou d'une récupération. Si le processus se termine anormalement, ils peuvent rester activés involontairement.\n> Si vous n'êtes pas certain, vous pouvez relancer ces processus. Veillez à sauvegarder votre coffre.\n", + "moduleLiveSyncMain.optionKeepLiveSyncDisabled": "Garder LiveSync désactivé", + "moduleLiveSyncMain.optionResumeAndRestart": "Reprendre et redémarrer Obsidian", + "moduleLiveSyncMain.titleScramEnabled": "Mode Scram activé", + "moduleLocalDatabase.logWaitingForReady": "En attente de disponibilité...", + "moduleLog.showLog": "Afficher le journal", + "moduleMigration.docUri": "https://github.com/vrtmrz/obsidian-livesync/blob/main/README.md#how-to-use", + "moduleMigration.fix0256.buttons.checkItLater": "Vérifier plus tard", + "moduleMigration.fix0256.buttons.DismissForever": "J'ai corrigé, et ne plus demander", + "moduleMigration.fix0256.buttons.fix": "Corriger", + "moduleMigration.fix0256.message": "En raison d'un bug récent (en v0.25.6), certains fichiers peuvent ne pas avoir été enregistrés correctement dans la base de synchronisation.\nNous avons analysé vos fichiers et trouvé ceux à corriger.\n\n**Fichiers prêts à être corrigés :**\n\n${files}\n\nCes fichiers ont un original de taille correspondante sur le stockage, et sont probablement récupérables.\nNous pouvons les utiliser pour corriger la base, veuillez cliquer sur le bouton « Corriger » ci-dessous pour les réparer.\n\n${messageUnrecoverable}\n\nSi vous voulez relancer l'opération, vous pouvez le faire depuis Hatch.\n", + "moduleMigration.fix0256.messageUnrecoverable": "**Fichiers non réparables sur cet appareil :**\n\n${filesNotRecoverable}\n\nCes fichiers ont des métadonnées incohérentes et ne peuvent être corrigés sur cet appareil (le plus souvent, nous ne pouvons déterminer lequel est correct).\nPour les restaurer, vérifiez vos autres appareils (par cette même fonction) ou restaurez-les manuellement depuis une sauvegarde.\n", + "moduleMigration.fix0256.title": "Fichiers corrompus détectés", + "moduleMigration.insecureChunkExist.buttons.fetch": "J'ai déjà reconstruit le distant. Récupérer depuis le distant", + "moduleMigration.insecureChunkExist.buttons.later": "Je le ferai plus tard", + "moduleMigration.insecureChunkExist.buttons.rebuild": "Tout reconstruire", + "moduleMigration.insecureChunkExist.laterMessage": "Nous recommandons fortement de traiter ceci dès que possible !", + "moduleMigration.insecureChunkExist.message": "Certains fragments ne sont pas stockés de façon sécurisée et ne sont pas chiffrés dans les bases.\n**Veuillez reconstruire la base pour corriger ce problème.**\n\nSi votre base distante n'est pas configurée avec SSL, ou utilise des identifiants peu sûrs, **vous risquez d'exposer des données sensibles**.\n\nNote : Veuillez mettre à jour Self-hosted LiveSync en v0.25.6 ou supérieur sur tous vos appareils, et sauvegardez votre coffre avec soin.\nNote 2 : Tout reconstruire et Récupérer consomme un peu de temps et de bande passante, veuillez le faire hors des heures de pointe et avec une connexion réseau stable.\n", + "moduleMigration.insecureChunkExist.title": "Fragments non sécurisés détectés !", + "moduleMigration.logBulkSendCorrupted": "L'envoi groupé de fragments a été activé, mais cette fonctionnalité était corrompue. Désolé pour la gêne. Désactivée automatiquement.", + "moduleMigration.logFetchRemoteTweakFailed": "Échec de la récupération des valeurs d'ajustement distantes", + "moduleMigration.logLocalDatabaseNotReady": "Un problème est survenu ! La base locale n'est pas prête", + "moduleMigration.logMigratedSameBehaviour": "Migration vers db:${current} avec le même comportement qu'auparavant", + "moduleMigration.logMigrationFailed": "Migration échouée ou annulée de ${old} vers ${current}", + "moduleMigration.logRedflag2CreationFail": "Échec de création de redflag2", + "moduleMigration.logRemoteTweakUnavailable": "Impossible d'obtenir les valeurs d'ajustement distantes", + "moduleMigration.logSetupCancelled": "La configuration a été annulée, Self-hosted LiveSync attend votre configuration !", + "moduleMigration.msgFetchRemoteAgain": "Comme vous le savez peut-être déjà, Self-hosted LiveSync a modifié son comportement par défaut et la structure de sa base de données.\n\nEt, grâce à votre temps et vos efforts, la base distante semble déjà avoir été migrée. Félicitations !\n\nCependant, il faut encore un peu plus. La configuration de cet appareil n'est pas compatible avec la base distante. Nous devrons récupérer à nouveau la base distante. Devons-nous récupérer depuis le distant maintenant ?\n\n___Note : Nous ne pouvons pas synchroniser tant que la configuration n'a pas été modifiée et que la base n'a pas été récupérée à nouveau.___\n___Note 2 : Les fragments sont complètement immuables, nous ne pouvons récupérer que les métadonnées et les différences.___", + "moduleMigration.msgInitialSetup": "Votre appareil n'a **pas encore été configuré**. Laissez-moi vous guider dans le processus de configuration.\n\nVeuillez noter que chaque contenu de boîte de dialogue peut être copié dans le presse-papiers. Si vous souhaitez vous y référer plus tard, vous pouvez le coller dans une note d'Obsidian. Vous pouvez également le traduire dans votre langue via un outil de traduction.\n\nTout d'abord, disposez-vous d'une **URI de configuration** ?\n\nNote : Si vous ne savez pas ce que c'est, consultez la [documentation](${URI_DOC}).", + "moduleMigration.msgRecommendSetupUri": "Nous recommandons vivement de générer une URI de configuration et de l'utiliser.\nSi vous ne connaissez pas, veuillez consulter la [documentation](${URI_DOC}) (Désolé encore, mais c'est important).\n\nComment souhaitez-vous effectuer la configuration manuellement ?", + "moduleMigration.msgSinceV02321": "Depuis la v0.23.21, Self-hosted LiveSync a modifié son comportement par défaut et la structure de sa base. Les changements suivants ont été effectués :\n\n1. **Sensibilité à la casse des noms de fichiers**\n La gestion des noms de fichiers est désormais insensible à la casse. C'est un changement bénéfique pour la plupart des plateformes, hormis Linux et iOS, qui ne gèrent pas efficacement la casse des noms de fichiers.\n (Sur celles-ci, un avertissement s'affichera pour les fichiers portant le même nom avec une casse différente).\n\n2. **Gestion des révisions des fragments**\n Les fragments sont immuables, ce qui permet de fixer leurs révisions. Ce changement améliore les performances d'enregistrement des fichiers.\n\n___Cependant, pour activer l'un ou l'autre de ces changements, les bases locale et distante doivent être reconstruites. Ce processus prend quelques minutes, et nous recommandons de le faire quand vous avez le temps.___\n\n- Si vous souhaitez conserver le comportement précédent, vous pouvez ignorer ce processus via `${KEEP}`.\n- Si vous n'avez pas le temps, choisissez `${DISMISS}`. Vous serez invité à nouveau plus tard.\n- Si vous avez reconstruit la base sur un autre appareil, sélectionnez `${DISMISS}` et réessayez la synchronisation. Une différence étant détectée, vous serez invité à nouveau.", + "moduleMigration.optionAdjustRemote": "Ajuster au distant", + "moduleMigration.optionDecideLater": "Décider plus tard", + "moduleMigration.optionEnableBoth": "Activer les deux", + "moduleMigration.optionEnableFilenameCaseInsensitive": "Activer seulement #1", + "moduleMigration.optionEnableFixedRevisionForChunks": "Activer seulement #2", + "moduleMigration.optionHaveSetupUri": "Oui, j'en ai une", + "moduleMigration.optionKeepPreviousBehaviour": "Conserver le comportement précédent", + "moduleMigration.optionManualSetup": "Tout configurer manuellement", + "moduleMigration.optionNoAskAgain": "Non, demandez à nouveau", + "moduleMigration.optionNoSetupUri": "Non, je n'en ai pas", + "moduleMigration.optionRemindNextLaunch": "Me rappeler au prochain lancement", + "moduleMigration.optionSetupViaP2P": "Utiliser %{short_p2p_sync} pour configurer", + "moduleMigration.optionSetupWizard": "Ouvrir l'assistant de configuration", + "moduleMigration.optionYesFetchAgain": "Oui, récupérer à nouveau", + "moduleMigration.titleCaseSensitivity": "Sensibilité à la casse", + "moduleMigration.titleRecommendSetupUri": "Recommandation d'utilisation de l'URI de configuration", + "moduleMigration.titleWelcome": "Bienvenue dans Self-hosted LiveSync", + "moduleObsidianMenu.replicate": "Répliquer", + "Move remotely deleted files to the trash, instead of deleting.": "Déplacer les fichiers supprimés à distance vers la corbeille, au lieu de les supprimer.", + "Not all messages have been translated. And, please revert to \"Default\" when reporting errors.": "Tous les messages n'ont pas été traduits. Et veuillez revenir à « Par défaut » lorsque vous signalez des erreurs.", + "Notify all setting files": "Notifier tous les fichiers de paramètres", + "Notify customized": "Notifier les personnalisations", + "Notify when other device has newly customized.": "Notifier lorsqu'un autre appareil a une nouvelle personnalisation.", + "Notify when the estimated remote storage size exceeds on start up": "Notifier quand la taille estimée du stockage distant est dépassée au démarrage", + "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.": "Nombre de lots à traiter à la fois. Par défaut 40. Minimum 2. Ceci, avec la taille de lot, contrôle le nombre de documents conservés en mémoire à la fois.", + "Number of changes to sync at a time. Defaults to 50. Minimum is 2.": "Nombre de modifications à synchroniser à la fois. Par défaut 50. Minimum 2.", + "obsidianLiveSyncSettingTab.btnApply": "Appliquer", + "obsidianLiveSyncSettingTab.btnCheck": "Vérifier", + "obsidianLiveSyncSettingTab.btnCopy": "Copier", + "obsidianLiveSyncSettingTab.btnDisable": "Désactiver", + "obsidianLiveSyncSettingTab.btnDiscard": "Abandonner", + "obsidianLiveSyncSettingTab.btnEnable": "Activer", + "obsidianLiveSyncSettingTab.btnFix": "Corriger", + "obsidianLiveSyncSettingTab.btnGotItAndUpdated": "J'ai compris et mis à jour.", + "obsidianLiveSyncSettingTab.btnNext": "Suivant", + "obsidianLiveSyncSettingTab.btnStart": "Démarrer", + "obsidianLiveSyncSettingTab.btnTest": "Tester", + "obsidianLiveSyncSettingTab.btnUse": "Utiliser", + "obsidianLiveSyncSettingTab.buttonFetch": "Récupérer", + "obsidianLiveSyncSettingTab.buttonNext": "Suivant", + "obsidianLiveSyncSettingTab.defaultLanguage": "Par défaut", + "obsidianLiveSyncSettingTab.descConnectSetupURI": "Méthode recommandée pour configurer Self-hosted LiveSync avec une URI de configuration.", + "obsidianLiveSyncSettingTab.descCopySetupURI": "Parfait pour configurer un nouvel appareil !", + "obsidianLiveSyncSettingTab.descEnableLiveSync": "N'activez ceci qu'après avoir configuré l'une des deux options ci-dessus ou terminé toute la configuration manuellement.", + "obsidianLiveSyncSettingTab.descFetchConfigFromRemote": "Récupérer les paramètres nécessaires depuis un serveur distant déjà configuré.", + "obsidianLiveSyncSettingTab.descManualSetup": "Non recommandé, mais utile si vous n'avez pas d'URI de configuration", + "obsidianLiveSyncSettingTab.descTestDatabaseConnection": "Ouvrir la connexion à la base de données. Si la base distante est introuvable et que vous avez l'autorisation de créer une base, elle sera créée.", + "obsidianLiveSyncSettingTab.descValidateDatabaseConfig": "Vérifie et corrige les problèmes potentiels de la configuration de la base.", + "obsidianLiveSyncSettingTab.errAccessForbidden": "❗ Accès interdit.", + "obsidianLiveSyncSettingTab.errCannotContinueTest": "Impossible de poursuivre le test.", + "obsidianLiveSyncSettingTab.errCorsCredentials": "❗ cors.credentials est incorrect", + "obsidianLiveSyncSettingTab.errCorsNotAllowingCredentials": "❗ CORS n'autorise pas les identifiants", + "obsidianLiveSyncSettingTab.errCorsOrigins": "❗ cors.origins est incorrect", + "obsidianLiveSyncSettingTab.errEnableCors": "❗ httpd.enable_cors est incorrect", + "obsidianLiveSyncSettingTab.errEnableCorsChttpd": "❗ chttpd.enable_cors est incorrect", + "obsidianLiveSyncSettingTab.errMaxDocumentSize": "❗ couchdb.max_document_size est trop bas)", + "obsidianLiveSyncSettingTab.errMaxRequestSize": "❗ chttpd.max_http_request_size est trop bas)", + "obsidianLiveSyncSettingTab.errMissingWwwAuth": "❗ httpd.WWW-Authenticate est manquant", + "obsidianLiveSyncSettingTab.errRequireValidUser": "❗ chttpd.require_valid_user est incorrect.", + "obsidianLiveSyncSettingTab.errRequireValidUserAuth": "❗ chttpd_auth.require_valid_user est incorrect.", + "obsidianLiveSyncSettingTab.labelDisabled": "⏹️ : Désactivé", + "obsidianLiveSyncSettingTab.labelEnabled": "🔁 : Activé", + "obsidianLiveSyncSettingTab.levelAdvanced": " (Avancé)", + "obsidianLiveSyncSettingTab.levelEdgeCase": " (Cas particulier)", + "obsidianLiveSyncSettingTab.levelPowerUser": " (Utilisateur avancé)", + "obsidianLiveSyncSettingTab.linkOpenInBrowser": "Ouvrir dans le navigateur", + "obsidianLiveSyncSettingTab.linkPageTop": "Haut de la page", + "obsidianLiveSyncSettingTab.linkTipsAndTroubleshooting": "Conseils et dépannage", + "obsidianLiveSyncSettingTab.linkTroubleshooting": "/docs/troubleshooting.md", + "obsidianLiveSyncSettingTab.logCannotUseCloudant": "Cette fonctionnalité ne peut pas être utilisée avec IBM Cloudant.", + "obsidianLiveSyncSettingTab.logCheckingConfigDone": "Vérification de la configuration terminée", + "obsidianLiveSyncSettingTab.logCheckingConfigFailed": "Échec de la vérification de la configuration", + "obsidianLiveSyncSettingTab.logCheckingDbConfig": "Vérification de la configuration de la base", + "obsidianLiveSyncSettingTab.logCheckPassphraseFailed": "ERREUR : Échec de la vérification de la phrase secrète avec le serveur distant :\n${db}.", + "obsidianLiveSyncSettingTab.logConfiguredDisabled": "Mode de synchronisation configuré : DÉSACTIVÉ", + "obsidianLiveSyncSettingTab.logConfiguredLiveSync": "Mode de synchronisation configuré : LiveSync", + "obsidianLiveSyncSettingTab.logConfiguredPeriodic": "Mode de synchronisation configuré : Périodique", + "obsidianLiveSyncSettingTab.logCouchDbConfigFail": "Configuration CouchDB : échec de ${title}", + "obsidianLiveSyncSettingTab.logCouchDbConfigSet": "Configuration CouchDB : ${title} -> ${key} défini à ${value}", + "obsidianLiveSyncSettingTab.logCouchDbConfigUpdated": "Configuration CouchDB : ${title} mise à jour avec succès", + "obsidianLiveSyncSettingTab.logDatabaseConnected": "Base de données connectée", + "obsidianLiveSyncSettingTab.logEncryptionNoPassphrase": "Impossible d'activer le chiffrement sans phrase secrète", + "obsidianLiveSyncSettingTab.logEncryptionNoSupport": "Votre appareil ne prend pas en charge le chiffrement.", + "obsidianLiveSyncSettingTab.logErrorOccurred": "Une erreur s'est produite !!", + "obsidianLiveSyncSettingTab.logEstimatedSize": "Taille estimée : ${size}", + "obsidianLiveSyncSettingTab.logPassphraseInvalid": "La phrase secrète est invalide, veuillez la corriger.", + "obsidianLiveSyncSettingTab.logPassphraseNotCompatible": "ERREUR : la phrase secrète n'est pas compatible avec le serveur distant ! Veuillez vérifier à nouveau !", + "obsidianLiveSyncSettingTab.logRebuildNote": "La synchronisation a été désactivée, récupérez et réactivez si souhaité.", + "obsidianLiveSyncSettingTab.logSelectAnyPreset": "Sélectionnez un préréglage.", + "obsidianLiveSyncSettingTab.msgAreYouSureProceed": "Êtes-vous sûr de vouloir continuer ?", + "obsidianLiveSyncSettingTab.msgChangesNeedToBeApplied": "Des modifications doivent être appliquées !", + "obsidianLiveSyncSettingTab.msgConfigCheck": "--Vérification de la configuration--", + "obsidianLiveSyncSettingTab.msgConfigCheckFailed": "La vérification de la configuration a échoué. Voulez-vous continuer malgré tout ?", + "obsidianLiveSyncSettingTab.msgConnectionCheck": "--Vérification de la connexion--", + "obsidianLiveSyncSettingTab.msgConnectionProxyNote": "Si vous rencontrez des problèmes de vérification de connexion (même après avoir vérifié la configuration), veuillez vérifier votre configuration de reverse proxy.", + "obsidianLiveSyncSettingTab.msgCurrentOrigin": "Origine actuelle : ${origin}", + "obsidianLiveSyncSettingTab.msgDiscardConfirmation": "Voulez-vous vraiment abandonner les paramètres et bases existants ?", + "obsidianLiveSyncSettingTab.msgDone": "--Terminé--", + "obsidianLiveSyncSettingTab.msgEnableCors": "Définir httpd.enable_cors", + "obsidianLiveSyncSettingTab.msgEnableCorsChttpd": "Définir chttpd.enable_cors", + "obsidianLiveSyncSettingTab.msgEnableEncryptionRecommendation": "Nous recommandons d'activer le chiffrement de bout en bout et l'obfuscation des chemins. Êtes-vous sûr de vouloir continuer sans chiffrement ?", + "obsidianLiveSyncSettingTab.msgFetchConfigFromRemote": "Voulez-vous récupérer la configuration depuis le serveur distant ?", + "obsidianLiveSyncSettingTab.msgGenerateSetupURI": "Tout est prêt ! Voulez-vous générer une URI de configuration pour configurer d'autres appareils ?", + "obsidianLiveSyncSettingTab.msgIfConfigNotPersistent": "Si la configuration du serveur n'est pas persistante (par ex. fonctionnant sur Docker), les valeurs peuvent changer. Une fois la connexion établie, mettez à jour les paramètres dans le local.ini du serveur.", + "obsidianLiveSyncSettingTab.msgInvalidPassphrase": "Votre phrase secrète de chiffrement peut être invalide. Êtes-vous sûr de vouloir continuer ?", + "obsidianLiveSyncSettingTab.msgNewVersionNote": "Arrivé ici suite à une notification de mise à jour ? Consultez l'historique des versions. Si vous êtes satisfait, cliquez sur le bouton. Une nouvelle mise à jour reproposera ceci.", + "obsidianLiveSyncSettingTab.msgNonHTTPSInfo": "Configuré avec une URI non HTTPS. Attention, ceci peut ne pas fonctionner sur les appareils mobiles.", + "obsidianLiveSyncSettingTab.msgNonHTTPSWarning": "Connexion impossible à une URI non HTTPS. Mettez à jour votre configuration et réessayez.", + "obsidianLiveSyncSettingTab.msgNotice": "---Avis---", + "obsidianLiveSyncSettingTab.msgObjectStorageWarning": "AVERTISSEMENT : cette fonctionnalité est en cours de développement, gardez à l'esprit ce qui suit :\n- Architecture en ajout seul. Une reconstruction est nécessaire pour réduire le stockage.\n- Un peu fragile.\n- Lors de la première synchronisation, tout l'historique sera transféré depuis le distant. Attention aux limites de données et aux débits lents.\n- Seules les différences sont synchronisées en direct.\n\nSi vous rencontrez des problèmes ou avez des idées sur cette fonctionnalité, merci d'ouvrir un ticket sur GitHub.\nMerci pour votre grand dévouement.", + "obsidianLiveSyncSettingTab.msgOriginCheck": "Vérification d'origine : ${org}", + "obsidianLiveSyncSettingTab.msgRebuildRequired": "La reconstruction des bases de données est nécessaire pour appliquer les changements. Veuillez sélectionner la méthode d'application.\n\n
\nLégende\n\n| Symbole | Signification |\n|: ------ :| ------- |\n| ⇔ | À jour |\n| ⇄ | Synchroniser pour équilibrer |\n| ⇐,⇒ | Transférer pour écraser |\n| ⇠,⇢ | Transférer pour écraser depuis l'autre côté |\n\n
\n\n## ${OPTION_REBUILD_BOTH}\nEn bref : 📄 ⇒¹ 💻 ⇒² 🛰️ ⇢ⁿ 💻 ⇄ⁿ⁺¹ 📄\nReconstruit les bases locale et distante à partir des fichiers existants de cet appareil.\nCeci provoque un verrouillage des autres appareils, qui devront effectuer une récupération.\n## ${OPTION_FETCH}\nEn bref : 📄 ⇄² 💻 ⇐¹ 🛰️ ⇔ 💻 ⇔ 📄\nInitialise la base locale et la reconstruit à partir des données récupérées depuis la base distante.\nCe cas inclut également celui où vous avez reconstruit la base distante.\n## ${OPTION_ONLY_SETTING}\nNe stocker que les paramètres. **Attention : cela peut entraîner une corruption des données** ; une reconstruction de la base est généralement nécessaire.", + "obsidianLiveSyncSettingTab.msgSelectAndApplyPreset": "Veuillez sélectionner et appliquer un préréglage pour terminer l'assistant.", + "obsidianLiveSyncSettingTab.msgSetCorsCredentials": "Définir cors.credentials", + "obsidianLiveSyncSettingTab.msgSetCorsOrigins": "Définir cors.origins", + "obsidianLiveSyncSettingTab.msgSetMaxDocSize": "Définir couchdb.max_document_size", + "obsidianLiveSyncSettingTab.msgSetMaxRequestSize": "Définir chttpd.max_http_request_size", + "obsidianLiveSyncSettingTab.msgSetRequireValidUser": "Définir chttpd.require_valid_user = true", + "obsidianLiveSyncSettingTab.msgSetRequireValidUserAuth": "Définir chttpd_auth.require_valid_user = true", + "obsidianLiveSyncSettingTab.msgSettingModified": "Le paramètre « ${setting} » a été modifié depuis un autre appareil. Cliquez sur {HERE} pour recharger les paramètres. Cliquez ailleurs pour ignorer les modifications.", + "obsidianLiveSyncSettingTab.msgSettingsUnchangeableDuringSync": "Ces paramètres ne peuvent pas être modifiés durant la synchronisation. Désactivez toute synchronisation dans « Paramètres de synchronisation » pour déverrouiller.", + "obsidianLiveSyncSettingTab.msgSetWwwAuth": "Définir httpd.WWW-Authenticate", + "obsidianLiveSyncSettingTab.nameApplySettings": "Appliquer les paramètres", + "obsidianLiveSyncSettingTab.nameConnectSetupURI": "Se connecter avec une URI de configuration", + "obsidianLiveSyncSettingTab.nameCopySetupURI": "Copier les paramètres actuels vers une URI de configuration", + "obsidianLiveSyncSettingTab.nameDisableHiddenFileSync": "Désactiver la synchronisation des fichiers cachés", + "obsidianLiveSyncSettingTab.nameDiscardSettings": "Abandonner les paramètres et bases existants", + "obsidianLiveSyncSettingTab.nameEnableHiddenFileSync": "Activer la synchronisation des fichiers cachés", + "obsidianLiveSyncSettingTab.nameEnableLiveSync": "Activer LiveSync", + "obsidianLiveSyncSettingTab.nameHiddenFileSynchronization": "Synchronisation des fichiers cachés", + "obsidianLiveSyncSettingTab.nameManualSetup": "Configuration manuelle", + "obsidianLiveSyncSettingTab.nameTestConnection": "Tester la connexion", + "obsidianLiveSyncSettingTab.nameTestDatabaseConnection": "Tester la connexion à la base de données", + "obsidianLiveSyncSettingTab.nameValidateDatabaseConfig": "Valider la configuration de la base de données", + "obsidianLiveSyncSettingTab.okAdminPrivileges": "✔ Vous disposez des privilèges administrateur.", + "obsidianLiveSyncSettingTab.okCorsCredentials": "✔ cors.credentials est correct.", + "obsidianLiveSyncSettingTab.okCorsCredentialsForOrigin": "Identifiants CORS OK", + "obsidianLiveSyncSettingTab.okCorsOriginMatched": "✔ Origine CORS OK", + "obsidianLiveSyncSettingTab.okCorsOrigins": "✔ cors.origins est correct.", + "obsidianLiveSyncSettingTab.okEnableCors": "✔ httpd.enable_cors est correct.", + "obsidianLiveSyncSettingTab.okEnableCorsChttpd": "✔ chttpd.enable_cors est correct.", + "obsidianLiveSyncSettingTab.okMaxDocumentSize": "✔ couchdb.max_document_size est correct.", + "obsidianLiveSyncSettingTab.okMaxRequestSize": "✔ chttpd.max_http_request_size est correct.", + "obsidianLiveSyncSettingTab.okRequireValidUser": "✔ chttpd.require_valid_user est correct.", + "obsidianLiveSyncSettingTab.okRequireValidUserAuth": "✔ chttpd_auth.require_valid_user est correct.", + "obsidianLiveSyncSettingTab.okWwwAuth": "✔ httpd.WWW-Authenticate est correct.", + "obsidianLiveSyncSettingTab.optionApply": "Appliquer", + "obsidianLiveSyncSettingTab.optionCancel": "Annuler", + "obsidianLiveSyncSettingTab.optionCouchDB": "CouchDB", + "obsidianLiveSyncSettingTab.optionDisableAllAutomatic": "Désactiver toute automatisation", + "obsidianLiveSyncSettingTab.optionFetchFromRemote": "Récupérer depuis le distant", + "obsidianLiveSyncSettingTab.optionHere": "ICI", + "obsidianLiveSyncSettingTab.optionLiveSync": "LiveSync", + "obsidianLiveSyncSettingTab.optionMinioS3R2": "Minio, S3, R2", + "obsidianLiveSyncSettingTab.optionOkReadEverything": "OK, j'ai tout lu.", + "obsidianLiveSyncSettingTab.optionOnEvents": "Sur événements", + "obsidianLiveSyncSettingTab.optionPeriodicAndEvents": "Périodique et sur événements", + "obsidianLiveSyncSettingTab.optionPeriodicWithBatch": "Périodique avec lot", + "obsidianLiveSyncSettingTab.optionRebuildBoth": "Tout reconstruire depuis cet appareil", + "obsidianLiveSyncSettingTab.optionSaveOnlySettings": "(Danger) N'enregistrer que les paramètres", + "obsidianLiveSyncSettingTab.panelChangeLog": "Journal des modifications", + "obsidianLiveSyncSettingTab.panelGeneralSettings": "Paramètres généraux", + "obsidianLiveSyncSettingTab.panelPrivacyEncryption": "Confidentialité et chiffrement", + "obsidianLiveSyncSettingTab.panelRemoteConfiguration": "Configuration distante", + "obsidianLiveSyncSettingTab.panelSetup": "Configuration", + "obsidianLiveSyncSettingTab.serverVersion": "Infos serveur : ${info}", + "obsidianLiveSyncSettingTab.titleActiveRemoteServer": "Serveur distant actif", + "obsidianLiveSyncSettingTab.titleAppearance": "Apparence", + "obsidianLiveSyncSettingTab.titleConflictResolution": "Résolution des conflits", + "obsidianLiveSyncSettingTab.titleCongratulations": "Félicitations !", + "obsidianLiveSyncSettingTab.titleCouchDB": "CouchDB", + "obsidianLiveSyncSettingTab.titleDeletionPropagation": "Propagation des suppressions", + "obsidianLiveSyncSettingTab.titleEncryptionNotEnabled": "Le chiffrement n'est pas activé", + "obsidianLiveSyncSettingTab.titleEncryptionPassphraseInvalid": "Phrase secrète de chiffrement invalide", + "obsidianLiveSyncSettingTab.titleExtraFeatures": "Activer les fonctionnalités supplémentaires et avancées", + "obsidianLiveSyncSettingTab.titleFetchConfig": "Récupérer la configuration", + "obsidianLiveSyncSettingTab.titleFetchConfigFromRemote": "Récupérer la configuration depuis le serveur distant", + "obsidianLiveSyncSettingTab.titleFetchSettings": "Récupérer les paramètres", + "obsidianLiveSyncSettingTab.titleHiddenFiles": "Fichiers cachés", + "obsidianLiveSyncSettingTab.titleLogging": "Journalisation", + "obsidianLiveSyncSettingTab.titleMinioS3R2": "Minio, S3, R2", + "obsidianLiveSyncSettingTab.titleNotification": "Notification", + "obsidianLiveSyncSettingTab.titleOnlineTips": "Conseils en ligne", + "obsidianLiveSyncSettingTab.titleQuickSetup": "Configuration rapide", + "obsidianLiveSyncSettingTab.titleRebuildRequired": "Reconstruction requise", + "obsidianLiveSyncSettingTab.titleRemoteConfigCheckFailed": "Échec de la vérification de la configuration distante", + "obsidianLiveSyncSettingTab.titleRemoteServer": "Serveur distant", + "obsidianLiveSyncSettingTab.titleReset": "Réinitialiser", + "obsidianLiveSyncSettingTab.titleSetupOtherDevices": "Pour configurer d'autres appareils", + "obsidianLiveSyncSettingTab.titleSynchronizationMethod": "Méthode de synchronisation", + "obsidianLiveSyncSettingTab.titleSynchronizationPreset": "Préréglage de synchronisation", + "obsidianLiveSyncSettingTab.titleSyncSettings": "Paramètres de synchronisation", + "obsidianLiveSyncSettingTab.titleSyncSettingsViaMarkdown": "Synchroniser les paramètres via Markdown", + "obsidianLiveSyncSettingTab.titleUpdateThinning": "Lissage des mises à jour", + "obsidianLiveSyncSettingTab.warnCorsOriginUnmatched": "⚠ L'origine CORS ne correspond pas ${from}->${to}", + "obsidianLiveSyncSettingTab.warnNoAdmin": "⚠ Vous n'avez pas les privilèges administrateur.", + "P2P.AskPassphraseForDecrypt": "Le pair distant a partagé la configuration. Veuillez saisir la phrase secrète pour déchiffrer la configuration.", + "P2P.AskPassphraseForShare": "Le pair distant a demandé la configuration de cet appareil. Veuillez saisir la phrase secrète pour partager la configuration. Vous pouvez ignorer la demande en annulant cette boîte de dialogue.", + "P2P.DisabledButNeed": "%{title_p2p_sync} est désactivé. Voulez-vous vraiment l'activer ?", + "P2P.FailedToOpen": "Échec d'ouverture de la connexion P2P vers le serveur de signalisation.", + "P2P.NoAutoSyncPeers": "Aucun pair de synchronisation automatique trouvé. Veuillez définir des pairs dans le panneau %{long_p2p_sync}.", + "P2P.NoKnownPeers": "Aucun pair détecté, en attente d'autres pairs entrants...", + "P2P.Note.description": " Ce réplicateur permet de synchroniser notre coffre avec d'autres\nappareils via une connexion pair-à-pair. Nous pouvons l'utiliser pour synchroniser notre coffre avec nos autres appareils sans recourir à un service cloud.\nCe réplicateur est basé sur Trystero. Il utilise également un serveur de signalisation pour établir une connexion entre les appareils. Le serveur de signalisation sert à échanger les informations de connexion entre appareils. Il ne connaît (ou ne devrait connaître) ni ne stocke aucune de nos données.\n\nLe serveur de signalisation peut être hébergé par n'importe qui. Il s'agit simplement d'un relais Nostr. Par souci de simplicité et pour vérifier le comportement du réplicateur, une instance du serveur de signalisation est hébergée par vrtmrz. Vous pouvez utiliser le serveur expérimental fourni par vrtmrz, ou tout autre serveur.\n\nAu passage, même si le serveur de signalisation ne stocke pas nos données, il peut voir les informations de connexion de certains de nos appareils. Soyez-en conscient. Soyez également prudent avec un serveur fourni par quelqu'un d'autre.", + "P2P.Note.important_note": "Réplicateur pair-à-pair.", + "P2P.Note.important_note_sub": "Cette fonctionnalité est encore en tout début de développement. Veillez à sauvegarder vos données avant de l'utiliser. Nous serions très heureux si vous contribuiez au développement de cette fonctionnalité.", + "P2P.Note.Summary": "Qu'est-ce que cette fonctionnalité ? (et quelques notes importantes, à lire)", + "P2P.NotEnabled": "%{title_p2p_sync} n'est pas activé. Nous ne pouvons pas ouvrir de nouvelle connexion.", + "P2P.P2PReplication": "Réplication %{P2P}", + "P2P.PaneTitle": "%{long_p2p_sync}", + "P2P.ReplicatorInstanceMissing": "Le réplicateur Sync P2P est introuvable, peut-être non configuré ou non activé.", + "P2P.SeemsOffline": "Le pair ${name} semble hors ligne, ignoré.", + "P2P.SyncAlreadyRunning": "La Sync P2P est déjà en cours.", + "P2P.SyncCompleted": "Sync P2P terminée.", + "P2P.SyncStartedWith": "La Sync P2P avec ${name} a démarré.", + "Passphrase": "Phrase secrète", + "Passphrase of sensitive configuration items": "Phrase secrète des éléments de configuration sensibles", + "password": "mot de passe", + "Password": "Mot de passe", + "Path Obfuscation": "Obfuscation des chemins", + "Per-file-saved customization sync": "Synchronisation de personnalisation enregistrée par fichier", + "Periodic Sync interval": "Intervalle de synchronisation périodique", + "Prepare the 'report' to create an issue": "Préparer le « rapport » pour créer un ticket", + "Presets": "Préréglages", + "Process small files in the foreground": "Traiter les petits fichiers au premier plan", + "Property Encryption": "Chiffrement des propriétés", + "RedFlag.Fetch.Method.Desc": "Comment voulez-vous récupérer ?\n- %{RedFlag.Fetch.Method.FetchSafer}.\n **Trafic faible**, **CPU élevé**, **Risque faible**\n Recommandé si ...\n - Fichiers possiblement incohérents\n - Fichiers peu nombreux\n- %{RedFlag.Fetch.Method.FetchSmoother}.\n **Trafic faible**, **CPU modéré**, **Risque faible à modéré**\n Recommandé si ...\n - Fichiers probablement cohérents\n - Vous avez beaucoup de fichiers.\n- %{RedFlag.Fetch.Method.FetchTraditional}.\n **Trafic élevé**, **CPU faible**, **Risque faible à modéré**\n\n>[!INFO]- Détails\n> ## %{RedFlag.Fetch.Method.FetchSafer}.\n> **Trafic faible**, **CPU élevé**, **Risque faible**\n> Cette option crée d'abord une base locale à partir des fichiers locaux existants avant de récupérer les données depuis la source distante.\n> Si des fichiers correspondants existent à la fois localement et à distance, seules les différences entre eux seront transférées.\n> Toutefois, les fichiers présents aux deux emplacements seront initialement traités comme en conflit. Ils seront résolus automatiquement s'ils ne le sont pas réellement, mais ce processus peut prendre du temps.\n> C'est généralement la méthode la plus sûre, minimisant le risque de perte de données.\n> ## %{RedFlag.Fetch.Method.FetchSmoother}.\n> **Trafic faible**, **CPU modéré**, **Risque faible à modéré** (selon l'opération)\n> Cette option crée d'abord des fragments à partir des fichiers locaux pour la base, puis récupère les données. Par conséquent, seuls les fragments manquants localement sont transférés. Cependant, toutes les métadonnées sont prises de la source distante.\n> Les fichiers locaux sont ensuite comparés à ces métadonnées au lancement. Le contenu considéré comme plus récent écrasera le plus ancien (selon la date de modification). Le résultat est ensuite synchronisé vers la base distante.\n> C'est généralement sûr si les fichiers locaux ont bien l'horodatage le plus récent. Cela peut toutefois poser problème si un fichier a un horodatage plus récent mais un contenu plus ancien (comme le `welcome.md` initial).\n> Cette méthode utilise moins de CPU et est plus rapide que « %{RedFlag.Fetch.Method.FetchSafer} », mais peut entraîner une perte de données si elle n'est pas utilisée avec précaution.\n> ## %{RedFlag.Fetch.Method.FetchTraditional}.\n> **Trafic élevé**, **CPU faible**, **Risque faible à modéré** (selon l'opération)\n> Tout sera récupéré depuis le distant.\n> Similaire à %{RedFlag.Fetch.Method.FetchSmoother}, mais tous les fragments sont récupérés depuis la source distante.\n> C'est la façon la plus traditionnelle de récupérer, consommant généralement le plus de trafic réseau et de temps. Elle comporte également un risque similaire d'écraser les fichiers distants à l'option « %{RedFlag.Fetch.Method.FetchSmoother} ».\n> Elle est toutefois souvent considérée comme la méthode la plus stable car c'est la plus ancienne et la plus directe.", + "RedFlag.Fetch.Method.FetchSafer": "Créer une base locale avant de récupérer", + "RedFlag.Fetch.Method.FetchSmoother": "Créer des fragments de fichiers locaux avant de récupérer", + "RedFlag.Fetch.Method.FetchTraditional": "Tout récupérer depuis le distant", + "RedFlag.Fetch.Method.Title": "Comment voulez-vous récupérer ?", + "RedFlag.FetchRemoteConfig.Buttons.Cancel": "Non, utiliser les paramètres locaux", + "RedFlag.FetchRemoteConfig.Buttons.Fetch": "Oui, récupérer et appliquer les paramètres distants", + "RedFlag.FetchRemoteConfig.Message": "Voulez-vous récupérer et appliquer les préférences stockées à distance sur cet appareil ?", + "RedFlag.FetchRemoteConfig.Title": "Récupérer la configuration distante", + "Reducing the frequency with which on-disk changes are reflected into the DB": "Réduire la fréquence à laquelle les modifications sur disque sont reflétées dans la base", + "Region": "Région", + "Remote server type": "Type de serveur distant", + "Remote Type": "Type de distant", + "Replicator.Dialogue.Locked.Action.Dismiss": "Annuler pour reconfirmer", + "Replicator.Dialogue.Locked.Action.Fetch": "Réinitialiser la synchronisation sur cet appareil", + "Replicator.Dialogue.Locked.Action.Unlock": "Déverrouiller la base distante", + "Replicator.Dialogue.Locked.Message": "La base distante est verrouillée. Ceci est dû à une reconstruction sur l'un des terminaux.\nL'appareil est donc prié de suspendre la connexion pour éviter la corruption de la base.\n\nTrois options sont possibles :\n\n- %{Replicator.Dialogue.Locked.Action.Fetch}\n La méthode la plus recommandée et fiable. Elle supprime la base locale puis réinitialise toutes les informations de synchronisation depuis la base distante. Dans la plupart des cas, c'est sûr. Cela prend cependant du temps et devrait se faire sur un réseau stable.\n- %{Replicator.Dialogue.Locked.Action.Unlock}\n Cette méthode ne peut être utilisée que si nous sommes déjà synchronisés de manière fiable par d'autres méthodes de réplication. Cela ne signifie pas simplement que nous avons les mêmes fichiers. Dans le doute, évitez.\n- %{Replicator.Dialogue.Locked.Action.Dismiss}\n Ceci annule l'opération. Vous serez à nouveau interrogé à la prochaine requête.\n", + "Replicator.Dialogue.Locked.Message.Fetch": "Tout récupérer a été planifié. Le plug-in sera redémarré pour l'exécuter.", + "Replicator.Dialogue.Locked.Message.Unlocked": "La base distante a été déverrouillée. Veuillez réessayer l'opération.", + "Replicator.Dialogue.Locked.Title": "Verrouillée", + "Replicator.Message.Cleaned": "Nettoyage de la base en cours. La réplication a été annulée", + "Replicator.Message.InitialiseFatalError": "Aucun réplicateur disponible, il s'agit d'une erreur fatale.", + "Replicator.Message.Pending": "Des événements de fichier sont en attente. La réplication a été annulée.", + "Replicator.Message.SomeModuleFailed": "La réplication a été annulée suite à l'échec d'un module", + "Replicator.Message.VersionUpFlash": "Une mise à jour a été détectée. Veuillez ouvrir la boîte de dialogue des paramètres et consulter le journal des modifications. La réplication a été annulée.", + "Requires restart of Obsidian": "Nécessite un redémarrage d'Obsidian", + "Requires restart of Obsidian.": "Nécessite un redémarrage d'Obsidian.", + "Rerun Onboarding Wizard": "Relancer l'assistant d'intégration", + "Rerun the onboarding wizard to set up Self-hosted LiveSync again.": "Relancer l'assistant d'intégration pour reconfigurer Self-hosted LiveSync.", + "Rerun Wizard": "Relancer l'assistant", + "Reset notification threshold and check the remote database usage": "Réinitialiser le seuil de notification et vérifier l'utilisation de la base distante", + "Reset the remote storage size threshold and check the remote storage size again.": "Réinitialiser le seuil de taille du stockage distant et vérifier à nouveau la taille du stockage distant.", + "Run Doctor": "Lancer le Docteur", + "Save settings to a markdown file. You will be notified when new settings arrive. You can set different files by the platform.": "Enregistrer les paramètres dans un fichier markdown. Vous serez notifié à l'arrivée de nouveaux paramètres. Vous pouvez définir des fichiers différents selon la plateforme.", + "Saving will be performed forcefully after this number of seconds.": "L'enregistrement sera forcé au bout de ce nombre de secondes.", + "Scan changes on customization sync": "Analyser les modifications de synchronisation de personnalisation", + "Scan customization automatically": "Analyser automatiquement la personnalisation", + "Scan customization before replicating.": "Analyser la personnalisation avant de répliquer.", + "Scan customization every 1 minute.": "Analyser la personnalisation toutes les 1 minute.", + "Scan customization periodically": "Analyser la personnalisation périodiquement", + "Scan for hidden files before replication": "Analyser les fichiers cachés avant réplication", + "Scan hidden files periodically": "Analyser les fichiers cachés périodiquement", + "Seconds, 0 to disable": "Secondes, 0 pour désactiver", + "Seconds. Saving to the local database will be delayed until this value after we stop typing or saving.": "Secondes. L'enregistrement dans la base locale sera différé de cette valeur après l'arrêt de la frappe ou de l'enregistrement.", + "Secret Key": "Clé secrète", + "Server URI": "URI du serveur", + "Setting.GenerateKeyPair.Desc": "Nous avons généré une paire de clés !\n\nNote : cette paire de clés ne sera plus jamais affichée. Veuillez la conserver dans un endroit sûr. Si vous la perdez, vous devrez générer une nouvelle paire.\nNote 2 : la clé publique est au format spki, et la clé privée au format pkcs8. Pour plus de commodité, les retours à la ligne sont convertis en `\\n` dans la clé publique.\nNote 3 : la clé publique doit être configurée dans la base distante, et la clé privée sur les appareils locaux.\n\n>[!POUR VOS YEUX SEULEMENT]-\n>
\n>\n> ### Clé publique\n> ```\n${public_key}\n> ```\n>\n> ### Clé privée\n> ```\n${private_key}\n> ```\n>\n>
\n\n>[!Les deux pour copier]-\n>\n>
\n>\n> ```\n${public_key}\n${private_key}\n> ```\n>\n>
\n\n", + "Setting.GenerateKeyPair.Title": "Une nouvelle paire de clés a été générée !", + "Setting.TroubleShooting": "Dépannage", + "Setting.TroubleShooting.Doctor": "Docteur des paramètres", + "Setting.TroubleShooting.Doctor.Desc": "Détecte les paramètres non optimaux. (Identique à la migration)", + "Setting.TroubleShooting.ScanBrokenFiles": "Analyser les fichiers corrompus", + "Setting.TroubleShooting.ScanBrokenFiles.Desc": "Analyse les fichiers qui ne sont pas stockés correctement dans la base.", + "SettingTab.Message.AskRebuild": "Vos modifications nécessitent une récupération depuis la base distante. Voulez-vous continuer ?", + "Setup.Apply.Buttons.ApplyAndFetch": "Appliquer et récupérer", + "Setup.Apply.Buttons.ApplyAndMerge": "Appliquer et fusionner", + "Setup.Apply.Buttons.ApplyAndRebuild": "Appliquer et reconstruire", + "Setup.Apply.Buttons.Cancel": "Abandonner et annuler", + "Setup.Apply.Buttons.OnlyApply": "Appliquer seulement", + "Setup.Apply.Message": "La nouvelle configuration est prête. Procédons à son application.\nPlusieurs manières de l'appliquer :\n\n- Appliquer et récupérer\n Configurer cet appareil comme nouveau client. Après application, synchroniser depuis le serveur distant.\n- Appliquer et fusionner\n Configurer sur un appareil qui possède déjà les fichiers. Traite les fichiers locaux et transfère les différences. Des conflits peuvent apparaître.\n- Appliquer et reconstruire\n Reconstruire le distant à partir des fichiers locaux. Typiquement effectué si le serveur est corrompu ou si l'on souhaite repartir de zéro.\n Les autres appareils seront verrouillés et devront refaire une récupération.\n- Appliquer seulement\n Appliquer uniquement. Des conflits peuvent apparaître si une reconstruction est nécessaire.", + "Setup.Apply.Title": "Appliquer la nouvelle configuration depuis ${method}", + "Setup.Apply.WarningRebuildRecommended": "NOTE : après ajustement des paramètres, il a été déterminé qu'une reconstruction est requise ; un simple import n'est pas recommandé.", + "Setup.Doctor.Buttons.No": "Non, utiliser les paramètres de l'URI tels quels", + "Setup.Doctor.Buttons.Yes": "Oui, consulter le docteur", + "Setup.Doctor.Message": "Self-hosted LiveSync s'est progressivement étoffé et certains paramètres recommandés ont évolué.\n\nLa configuration est un bon moment pour le faire.\n\nVoulez-vous lancer le Docteur pour vérifier si les paramètres importés sont optimaux par rapport au dernier état ?", + "Setup.Doctor.Title": "Voulez-vous consulter le docteur ?", + "Setup.FetchRemoteConf.Buttons.Fetch": "Oui, récupérer la configuration", + "Setup.FetchRemoteConf.Buttons.Skip": "Non, utiliser les paramètres de l'URI", + "Setup.FetchRemoteConf.Message": "Si nous avons déjà synchronisé une fois avec un autre appareil, la base distante stocke les valeurs de configuration adaptées entre les appareils synchronisés. Le plug-in souhaiterait les récupérer pour une configuration robuste.\n\nMais il faut s'assurer d'une chose. Sommes-nous actuellement dans une situation où nous pouvons accéder au réseau en toute sécurité et récupérer les paramètres ?\n\nNote : le plus souvent, c'est sûr si votre base distante est hébergée avec un certificat SSL et si votre réseau n'est pas compromis.", + "Setup.FetchRemoteConf.Title": "Récupérer la configuration depuis la base distante ?", + "Setup.QRCode": "Nous avons généré un QR code pour transférer les paramètres. Scannez-le avec votre téléphone ou un autre appareil.\nNote : le QR code n'est pas chiffré, soyez prudent en l'affichant.\n\n>[!POUR VOS YEUX SEULEMENT]-\n>
${qr_image}
", + "Setup.ShowQRCode": "Afficher le QR code", + "Setup.ShowQRCode.Desc": "Afficher le QR code pour transférer les paramètres.", + "Should we keep folders that don't have any files inside?": "Conserver les dossiers ne contenant aucun fichier ?", + "Should we only check for conflicts when a file is opened?": "Ne vérifier les conflits qu'à l'ouverture d'un fichier ?", + "Should we prompt you about conflicting files when a file is opened?": "Vous demander au sujet des fichiers en conflit à l'ouverture d'un fichier ?", + "Should we prompt you for every single merge, even if we can safely merge automatcially?": "Vous demander pour chaque fusion, même si nous pouvons fusionner automatiquement en toute sécurité ?", + "Show only notifications": "N'afficher que les notifications", + "Show status as icons only": "N'afficher le statut que sous forme d'icônes", + "Show status icon instead of file warnings banner": "Afficher l'icône de statut au lieu de la bannière d'avertissements", + "Show status inside the editor": "Afficher le statut dans l'éditeur", + "Show status on the status bar": "Afficher le statut dans la barre d'état", + "Show verbose log. Please enable if you report an issue.": "Afficher un journal verbeux. À activer si vous signalez un problème.", + "Starts synchronisation when a file is saved.": "Démarre la synchronisation à l'enregistrement d'un fichier.", + "Stop reflecting database changes to storage files.": "Arrêter de répercuter les modifications de la base vers les fichiers de stockage.", + "Stop watching for file changes.": "Arrêter la surveillance des modifications de fichiers.", + "Suppress notification of hidden files change": "Supprimer les notifications de modification des fichiers cachés", + "Suspend database reflecting": "Suspendre la répercussion dans la base", + "Suspend file watching": "Suspendre la surveillance des fichiers", + "Sync after merging file": "Synchroniser après fusion d'un fichier", + "Sync automatically after merging files": "Synchroniser automatiquement après fusion des fichiers", + "Sync Mode": "Mode de synchronisation", + "Sync on Editor Save": "Synchroniser à l'enregistrement dans l'éditeur", + "Sync on File Open": "Synchroniser à l'ouverture d'un fichier", + "Sync on Save": "Synchroniser à l'enregistrement", + "Sync on Startup": "Synchroniser au démarrage", + "Testing only - Resolve file conflicts by syncing newer copies of the file, this can overwrite modified files. Be Warned.": "Test uniquement - Résout les conflits de fichiers en synchronisant les copies plus récentes, ce qui peut écraser des fichiers modifiés. Prudence.", + "The delay for consecutive on-demand fetches": "Le délai entre récupérations consécutives à la demande", + "The Hash algorithm for chunk IDs": "L'algorithme de hachage pour les identifiants de fragments", + "The maximum duration for which chunks can be incubated within the document. Chunks exceeding this period will graduate to independent chunks.": "La durée maximale pendant laquelle les fragments peuvent être incubés dans le document. Les fragments dépassant cette période seront promus en fragments indépendants.", + "The maximum number of chunks that can be incubated within the document. Chunks exceeding this number will immediately graduate to independent chunks.": "Le nombre maximum de fragments pouvant être incubés dans le document. Les fragments dépassant ce nombre seront immédiatement promus en fragments indépendants.", + "The maximum total size of chunks that can be incubated within the document. Chunks exceeding this size will immediately graduate to independent chunks.": "La taille totale maximale des fragments pouvant être incubés dans le document. Les fragments dépassant cette taille seront immédiatement promus en fragments indépendants.", + "The minimum interval for automatic synchronisation on event.": "L'intervalle minimum pour la synchronisation automatique sur événement.", + "This passphrase will not be copied to another device. It will be set to `Default` until you configure it again.": "Cette phrase secrète ne sera pas copiée vers un autre appareil. Elle sera définie à `Default` jusqu'à ce que vous la configuriez à nouveau.", + "TweakMismatchResolve.Action.Dismiss": "Ignorer", + "TweakMismatchResolve.Action.UseConfigured": "Utiliser les paramètres configurés", + "TweakMismatchResolve.Action.UseMine": "Mettre à jour les paramètres de la base distante", + "TweakMismatchResolve.Action.UseMineAcceptIncompatible": "Mettre à jour la base distante mais garder en l'état", + "TweakMismatchResolve.Action.UseMineWithRebuild": "Mettre à jour la base distante et reconstruire", + "TweakMismatchResolve.Action.UseRemote": "Appliquer les paramètres à cet appareil", + "TweakMismatchResolve.Action.UseRemoteAcceptIncompatible": "Appliquer à cet appareil, mais ignorer l'incompatibilité", + "TweakMismatchResolve.Action.UseRemoteWithRebuild": "Appliquer à cet appareil et récupérer à nouveau", + "TweakMismatchResolve.Message.Main": "\nLes paramètres de la base distante sont les suivants. Ces valeurs sont configurées par d'autres appareils, synchronisés au moins une fois avec celui-ci.\n\nPour utiliser ces paramètres, sélectionnez %{TweakMismatchResolve.Action.UseConfigured}.\nPour conserver les paramètres de cet appareil, sélectionnez %{TweakMismatchResolve.Action.Dismiss}.\n\n${table}\n\n>[!ASTUCE]\n> Pour synchroniser tous les paramètres, utilisez « Synchroniser les paramètres via markdown » après application de la configuration minimale avec cette fonctionnalité.\n\n${additionalMessage}", + "TweakMismatchResolve.Message.MainTweakResolving": "Votre configuration ne correspond pas à celle du serveur distant.\n\nLa configuration suivante devrait correspondre :\n\n${table}\n\nFaites-nous part de votre décision.\n\n${additionalMessage}", + "TweakMismatchResolve.Message.UseRemote.WarningRebuildRecommended": "\n>[!AVIS]\n> Certains changements sont compatibles mais peuvent consommer du stockage et du trafic supplémentaires. Une reconstruction est recommandée. Cependant, elle peut ne pas être effectuée maintenant, mais pourra l'être lors d'une maintenance future.\n> ***Assurez-vous d'avoir du temps et une connexion stable pour appliquer !***", + "TweakMismatchResolve.Message.UseRemote.WarningRebuildRequired": "\n>[!AVERTISSEMENT]\n> Certaines configurations distantes ne sont pas compatibles avec la base locale de cet appareil. Une reconstruction de la base locale sera requise.\n> ***Assurez-vous d'avoir du temps et une connexion stable pour appliquer !***", + "TweakMismatchResolve.Message.WarningIncompatibleRebuildRecommended": "\n>[!AVIS]\n> Nous avons détecté que certaines valeurs diffèrent et rendent la base locale incompatible avec la base distante.\n> Certains changements sont compatibles mais peuvent consommer du stockage et du trafic supplémentaires. Une reconstruction est recommandée. Cependant, elle peut ne pas être effectuée maintenant, mais pourra l'être lors d'une maintenance future.\n> Si vous souhaitez reconstruire, cela prend quelques minutes ou plus. **Assurez-vous qu'il est sûr de le faire maintenant.**", + "TweakMismatchResolve.Message.WarningIncompatibleRebuildRequired": "\n>[!AVERTISSEMENT]\n> Nous avons détecté que certaines valeurs diffèrent et rendent la base locale incompatible avec la base distante.\n> Une reconstruction locale ou distante est nécessaire. L'une comme l'autre prend quelques minutes ou plus. **Assurez-vous qu'il est sûr de le faire maintenant.**", + "TweakMismatchResolve.Table": "| Nom de la valeur | Cet appareil | Sur le distant |\n|: --- |: ---- :|: ---- :|\n${rows}\n\n", + "TweakMismatchResolve.Table.Row": "| ${name} | ${self} | ${remote} |", + "TweakMismatchResolve.Title": "Incohérence de configuration détectée", + "TweakMismatchResolve.Title.TweakResolving": "Incohérence de configuration détectée", + "TweakMismatchResolve.Title.UseRemoteConfig": "Utiliser la configuration distante", + "Unique name between all synchronized devices. To edit this setting, please disable customization sync once.": "Nom unique parmi tous les appareils synchronisés. Pour modifier ce paramètre, désactivez d'abord la synchronisation de personnalisation.", + "Use Custom HTTP Handler": "Utiliser un gestionnaire HTTP personnalisé", + "Use dynamic iteration count": "Utiliser un compteur d'itérations dynamique", + "Use Segmented-splitter": "Utiliser le découpeur segmenté", + "Use splitting-limit-capped chunk splitter": "Utiliser le découpeur de fragments plafonné", + "Use the trash bin": "Utiliser la corbeille", + "Use timeouts instead of heartbeats": "Utiliser des délais d'attente au lieu de battements", + "username": "nom d'utilisateur", + "Username": "Nom d'utilisateur", + "Verbose Log": "Journal verbeux", + "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.": "Attention ! Ceci aura un impact important sur les performances. De plus, les journaux ne seront pas synchronisés sous le nom par défaut. Soyez prudent avec les journaux ; ils contiennent souvent des informations confidentielles.", + "When you save a file in the editor, start a sync automatically": "À l'enregistrement d'un fichier dans l'éditeur, démarrer automatiquement une synchronisation", + "Write credentials in the file": "Écrire les identifiants dans le fichier", + "Write logs into the file": "Écrire les journaux dans le fichier" +} diff --git a/src/common/messagesJson/he.json b/src/common/messagesJson/he.json new file mode 100644 index 00000000..b95b9b8d --- /dev/null +++ b/src/common/messagesJson/he.json @@ -0,0 +1,581 @@ +{ + "(BETA) Always overwrite with a newer file": "(BETA) תמיד לדרוס עם קובץ חדש יותר", + "(Beta) Use ignore files": "(בטא) שימוש בקבצי התעלמות", + "(Days passed, 0 to disable automatic-deletion)": "(ימים שעברו; 0 לביטול מחיקה אוטומטית)", + "(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.": "(לדוגמה: קריאת נתחים אונליין) אם אפשרות זו מופעלת, LiveSync קורא נתחים ישירות מהשרת מבלי לשכפל אותם מקומית. מומלץ להגדיל את גודל הנתח המותאם אישית.", + "(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) אם ערך זה מוגדר, שינויים בקבצים מקומיים ומרוחקים הגדולים מגודל זה יידלגו. אם הקובץ יקטן שוב, ייעשה שימוש בגרסה החדשה יותר.", + "(Mega chars)": "(מגה תווים)", + "(Not recommended) If set, credentials will be stored in the file.": "(לא מומלץ) אם מוגדר, פרטי הגישה יישמרו בקובץ.", + "(Obsolete) Use an old adapter for compatibility": "(מיושן) שימוש במתאם ישן לתאימות לאחור", + "Access Key": "מפתח גישה", + "Active Remote Configuration": "תצורת שרת מרוחק פעיל", + "Always prompt merge conflicts": "תמיד להציג בקשת אישור לקונפליקטי מיזוג", + "Analyse": "ניתוח", + "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.": "נתח שימוש במסד הנתונים וצור דו\"ח TSV לאבחון עצמי. ניתן להדביק את הדו\"ח שנוצר בכל גיליון אלקטרוני.", + "Apply Latest Change if Conflicting": "החל שינוי אחרון בעת קונפליקט", + "Apply preset configuration": "החל תצורה קבועה מראש", + "Automatically Sync all files when opening Obsidian.": "סנכרן את כל הקבצים אוטומטית עם פתיחת Obsidian.", + "Batch database update": "עדכון אצווה למסד נתונים", + "Batch limit": "מגבלת אצווה", + "Batch size": "גודל אצווה", + "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.": "לפני גרסה 0.17.16, השתמשנו במתאם ישן למסד הנתונים המקומי. כעת המתאם החדש מועדף. עם זאת, הדבר מצריך בנייה מחדש של מסד הנתונים המקומי. אנא כבה אפשרות זו כשיש לך זמן פנוי. אם תשאיר אותה מופעלת, גם בעת משיכה ממסד הנתונים המרוחק, תתבקש לכבות אותה.", + "Bucket Name": "שם דלי (Bucket)", + "Check": "בדוק", + "cmdConfigSync.showCustomizationSync": "הצג סנכרון התאמה אישית", + "Comma separated `.gitignore, .dockerignore`": "רשימה מופרדת בפסיקים `.gitignore, .dockerignore`", + "Compute revisions for chunks": "חשב גרסאות לנתחים", + "Copy Report to clipboard": "העתק דו\"ח ללוח", + "Data Compression": "דחיסת נתונים", + "Database Name": "שם מסד נתונים", + "Database suffix": "סיומת מסד נתונים", + "Delay conflict resolution of inactive files": "עכב פתרון קונפליקטים לקבצים לא פעילים", + "Delay merge conflict prompt for inactive files.": "עכב הצגת בקשת מיזוג לקבצים לא פעילים.", + "Delete old metadata of deleted files on start-up": "מחק מטה-נתונים ישנים של קבצים שנמחקו בעת הפעלה", + "Device name": "שם מכשיר", + "dialog.yourLanguageAvailable": "ל-Self-hosted LiveSync יש תרגום לשפתך, ולכן הגדרת %{Display language} הופעלה.\n\nהערה: לא כל ההודעות מתורגמות. אנחנו ממתינים לתרומותיך!\nהערה 2: אם אתה פותח Issue, **אנא חזור ל-%{lang-def}** ואז צלם צילומי מסך, הודעות ויומנים. ניתן לעשות זאת בדיאלוג ההגדרות.\nנקווה שתמצא/י את הפלאגין נוח לשימוש!", + "dialog.yourLanguageAvailable.btnRevertToDefault": "השאר %{lang-def}", + "dialog.yourLanguageAvailable.Title": " תרגום זמין!", + "Disables logging, only shows notifications. Please disable if you report an issue.": "מכבה רישום יומן, מציג התראות בלבד. אנא כבה אם אתה מדווח על בעיה.", + "Display Language": "שפת תצוגה", + "Do not check configuration mismatch before replication": "אל תבדוק אי-התאמה בתצורה לפני שכפול", + "Do not keep metadata of deleted files.": "אל תשמור מטה-נתונים של קבצים שנמחקו.", + "Do not split chunks in the background": "אל תפצל נתחים ברקע", + "Do not use internal API": "אל תשתמש ב-API פנימי", + "Doctor.Button.DismissThisVersion": "לא, ואל תשאל שוב עד לגרסה הבאה", + "Doctor.Button.Fix": "תקן", + "Doctor.Button.FixButNoRebuild": "תקן ללא בנייה מחדש", + "Doctor.Button.No": "לא", + "Doctor.Button.Skip": "השאר כפי שהוא", + "Doctor.Button.Yes": "כן", + "Doctor.Dialogue.Main": "שלום! רופא התצורה הופעל בגלל ${activateReason}!\nולמרבה הצער, זוהו תצורות שעשויות להיות בעייתיות.\nהיה רגוע/ה. בואו נפתור אותן אחת אחת.\n\nלידיעתך מראש, נשאל אותך על הפריטים הבאים.\n\n${issues}\n\nהאם להתחיל?", + "Doctor.Dialogue.MainFix": "\n## ${name}\n\n| נוכחי | אידאלי |\n|:---:|:---:|\n| ${current} | ${ideal} |\n\n**רמת המלצה:** ${level}\n\n### מדוע זה זוהה?\n\n${reason}\n\n${note}\n\nלתקן לערך האידאלי?", + "Doctor.Dialogue.Title": "Self-hosted LiveSync Config Doctor", + "Doctor.Dialogue.TitleAlmostDone": "כמעט סיימנו!", + "Doctor.Dialogue.TitleFix": "תקן בעיה ${current}/${total}", + "Doctor.Level.Must": "חובה", + "Doctor.Level.Necessary": "נדרש", + "Doctor.Level.Optional": "אופציונלי", + "Doctor.Level.Recommended": "מומלץ", + "Doctor.Message.NoIssues": "לא זוהו בעיות!", + "Doctor.Message.RebuildLocalRequired": "שים לב! נדרשת בנייה מחדש של מסד הנתונים המקומי כדי להחיל זאת!", + "Doctor.Message.RebuildRequired": "שים לב! נדרשת בנייה מחדש כדי להחיל זאת!", + "Doctor.Message.SomeSkipped": "השארנו כמה בעיות כפי שהן. האם לשאול שוב בהפעלה הבאה?", + "Doctor.RULES.E2EE_V02500.REASON": "ההצפנה מקצה לקצה עודכנה לגרסה חזקה ומהירה יותר. בנוסף, בסקירת קוד שנערכה מחדש הוסבר שההצפנה הקודמת נפרצת. יש להחיל זאת בהקדם האפשרי. מתנצלים על אי הנוחות. שים לב שהגדרה זו אינה תואמת לאחור. כל המכשירים המסונכרנים חייבים להיות מעודכנים לגרסה 0.25.0 ומעלה. אין צורך בבנייה מחדש והנתונים יומרו בהדרגה לפורמט החדש, אך מומלץ לבנות מחדש בהזדמנות הראשונה.", + "Enable advanced features": "הפעל תכונות מתקדמות", + "Enable customization sync": "הפעל סנכרון התאמה אישית", + "Enable Developers' Debug Tools.": "הפעל כלי ניפוי באגים למפתחים.", + "Enable edge case treatment features": "הפעל תכונות לטיפול במקרי קצה", + "Enable poweruser features": "הפעל תכונות למשתמש מתקדם", + "Enable this if your Object Storage doesn't support CORS": "הפעל אם אחסון האובייקטים שלך לא תומך ב-CORS", + "Enable this option to automatically apply the most recent change to documents even when it conflicts": "הפעל אפשרות זו כדי להחיל אוטומטית את השינוי האחרון במסמכים גם כשיש קונפליקט", + "Encrypt contents on the remote database. If you use the plugin's synchronization feature, enabling this is recommended.": "הצפן תוכן במסד הנתונים המרוחק. אם אתה משתמש בתכונת הסנכרון של התוסף, מומלץ להפעיל זאת.", + "Encrypting sensitive configuration items": "הצפן פריטי תצורה רגישים", + "Encryption phassphrase. If changed, you should overwrite the server's database with the new (encrypted) files.": "ביטוי סיסמה להצפנה. אם שונה, יש לדרוס את מסד הנתונים של השרת בקבצים החדשים (המוצפנים).", + "End-to-End Encryption": "הצפנה מקצה לקצה", + "Endpoint URL": "כתובת נקודת קצה (Endpoint URL)", + "Enhance chunk size": "הגדל גודל נתח", + "Fetch chunks on demand": "משוך נתחים לפי דרישה", + "Fetch database with previous behaviour": "משוך מסד נתונים עם התנהגות קודמת", + "Filename": "שם קובץ", + "Forces the file to be synced when opened.": "מכריח סנכרון הקובץ בעת פתיחתו.", + "Handle files as Case-Sensitive": "טפל בקבצים כתלויי רישיות", + "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.": "אם מופעל, ייעשה שימוש בסנכרון התאמה אישית יעיל לפי קובץ. נדרשת הגירה קטנה בעת ההפעלה. כל המכשירים צריכים להיות מעודכנים לגרסה 0.23.18. לאחר ההפעלה, התאימות לגרסאות ישנות תיפגע.", + "If enabled, chunks will be split into no more than 100 items. However, dedupe is slightly weaker.": "אם מופעל, נתחים יפוצלו לא ליותר מ-100 פריטים. עם זאת, ביטול כפילויות יהיה חלש מעט יותר.", + "If enabled, newly created chunks are temporarily kept within the document, and graduated to become independent chunks once stabilised.": "אם מופעל, נתחים שנוצרו לאחרונה נשמרים זמנית בתוך המסמך, ומוסמכים לנתחים עצמאיים לאחר יציבות.", + "If enabled, the ⛔ icon will be shown inside the status instead of the file warnings banner. No details will be shown.": "אם מופעל, אייקון ⛔ יוצג בסטטוס במקום פס האזהרות. לא יוצגו פרטים.", + "If enabled, the file under 1kb will be processed in the UI thread.": "אם מופעל, קבצים קטנים מ-1KB יעובדו בשרשור ממשק המשתמש.", + "If enabled, the notification of hidden files change will be suppressed.": "אם מופעל, התראות על שינוי בקבצים נסתרים יודחקו.", + "If this enabled, all chunks will be stored with the revision made from its content. (Previous behaviour)": "אם מופעל, כל הנתחים יישמרו עם גרסה המבוססת על תוכנם. (התנהגות קודמת)", + "If this enabled, All files are handled as case-Sensitive (Previous behaviour).": "אם מופעל, כל הקבצים מטופלים כתלויי רישיות (התנהגות קודמת).", + "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 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.": "אם אפשרות זו מופעלת, PouchDB ישמור את החיבור פתוח ל-60 שניות, ואם אין שינוי בפרק זמן זה, יסגור ויפתח מחדש את השקע, במקום להחזיק אותו פתוח ללא הגבלה. שימושי כשפרוקסי מגביל משך בקשות, אך עשוי להגביר שימוש במשאבים.", + "Ignore files": "קבצי התעלמות", + "Incubate Chunks in Document": "בשל נתחים בתוך המסמך", + "Interval (sec)": "מרווח (שניות)", + "K.exp": "ניסיוני", + "K.long_p2p_sync": "%{title_p2p_sync}", + "K.P2P": "%{Peer}-ל-%{Peer}", + "K.Peer": "עמית", + "K.ScanCustomization": "סרוק התאמה אישית", + "K.short_p2p_sync": "סנכרון P2P", + "K.title_p2p_sync": "סנכרון עמית-לעמית", + "Keep empty folder": "שמור תיקייה ריקה", + "lang_def": "ברירת מחדל", + "lang-de": "Deutsche", + "lang-def": "%{lang_def}", + "lang-es": "Español", + "lang-fr": "Français", + "lang-he": "עברית", + "lang-ja": "日本語", + "lang-ko": "한국어", + "lang-ru": "Русский", + "lang-zh": "简体中文", + "lang-zh-tw": "繁體中文", + "LiveSync could not handle multiple vaults which have same name without different prefix, This should be automatically configured.": "LiveSync אינו יכול לטפל במספר כספות עם אותו שם ללא קידומת שונה. הדבר אמור להיות מוגדר אוטומטית.", + "liveSyncReplicator.beforeLiveSync": "לפני LiveSync, התחל OneShot פעם אחת...", + "liveSyncReplicator.cantReplicateLowerValue": "לא ניתן לשכפל ערך נמוך יותר.", + "liveSyncReplicator.checkingLastSyncPoint": "מחפש נקודת הסנכרון האחרונה.", + "liveSyncReplicator.couldNotConnectTo": "לא ניתן להתחבר אל ${uri} : ${name}\n(${db})", + "liveSyncReplicator.couldNotConnectToRemoteDb": "לא ניתן להתחבר למסד הנתונים המרוחק: ${d}", + "liveSyncReplicator.couldNotConnectToServer": "לא ניתן להתחבר לשרת.", + "liveSyncReplicator.couldNotConnectToURI": "לא ניתן להתחבר אל ${uri}:${dbRet}", + "liveSyncReplicator.couldNotMarkResolveRemoteDb": "לא ניתן לסמן פתרון למסד הנתונים המרוחק.", + "liveSyncReplicator.liveSyncBegin": "LiveSync מתחיל...", + "liveSyncReplicator.lockRemoteDb": "נועל מסד נתונים מרוחק למניעת פגיעה בנתונים", + "liveSyncReplicator.markDeviceResolved": "סמן מכשיר זה כ'נפתר'.", + "liveSyncReplicator.oneShotSyncBegin": "סנכרון OneShot מתחיל... (${syncMode})", + "liveSyncReplicator.remoteDbCorrupted": "מסד הנתונים המרוחק חדש יותר או פגום, ודא שגרסת self-hosted-livesync המותקנת היא העדכנית ביותר", + "liveSyncReplicator.remoteDbCreatedOrConnected": "מסד הנתונים המרוחק נוצר או חובר", + "liveSyncReplicator.remoteDbDestroyed": "מסד הנתונים המרוחק נהרס", + "liveSyncReplicator.remoteDbDestroyError": "אירעה שגיאה בהריסת מסד הנתונים המרוחק:", + "liveSyncReplicator.remoteDbMarkedResolved": "מסד הנתונים המרוחק סומן כנפתר.", + "liveSyncReplicator.replicationClosed": "השכפול נסגר", + "liveSyncReplicator.replicationInProgress": "שכפול כבר מתבצע", + "liveSyncReplicator.retryLowerBatchSize": "מנסה שוב עם גודל אצווה קטן יותר:${batch_size}/${batches_limit}", + "liveSyncReplicator.unlockRemoteDb": "מבטל נעילת מסד הנתונים המרוחק למניעת פגיעה בנתונים", + "liveSyncSetting.errorNoSuchSettingItem": "פריט הגדרה לא קיים: ${key}", + "liveSyncSetting.originalValue": "ערך מקורי: ${value}", + "liveSyncSetting.valueShouldBeInRange": "הערך צריך להיות ${min} < ערך < ${max}", + "liveSyncSettings.btnApply": "החל", + "logPane.autoScroll": "גלילה אוטומטית", + "logPane.logWindowOpened": "חלון יומן נפתח", + "logPane.pause": "השהה", + "logPane.title": "יומן Self-hosted LiveSync", + "logPane.wrap": "גלישת שורות", + "Maximum delay for batch database updating": "עיכוב מקסימלי לעדכון אצווה של מסד נתונים", + "Maximum file size": "גודל קובץ מקסימלי", + "Maximum Incubating Chunk Size": "גודל מקסימלי לנתח בבישול", + "Maximum Incubating Chunks": "מספר מקסימלי של נתחים בבישול", + "Maximum Incubation Period": "תקופת בישול מקסימלית", + "MB (0 to disable).": "MB (0 לביטול).", + "Memory cache size (by total characters)": "גודל מטמון זיכרון (לפי סה\"כ תווים)", + "Memory cache size (by total items)": "גודל מטמון זיכרון (לפי סה\"כ פריטים)", + "Minimum delay for batch database updating": "עיכוב מינימלי לעדכון אצווה של מסד נתונים", + "Minimum interval for syncing": "מרווח מינימלי לסנכרון", + "moduleCheckRemoteSize.logCheckingStorageSizes": "בודק גדלי אחסון", + "moduleCheckRemoteSize.logCurrentStorageSize": "גודל אחסון מרוחק: ${measuredSize}", + "moduleCheckRemoteSize.logExceededWarning": "גודל אחסון מרוחק: ${measuredSize} עלה על ${notifySize}", + "moduleCheckRemoteSize.logThresholdEnlarged": "הסף הורחב ל-${size}MB", + "moduleCheckRemoteSize.msgConfirmRebuild": "פעולה זו עשויה לקחת זמן מה. האם אתה בטוח שברצונך לבנות מחדש עכשיו?", + "moduleCheckRemoteSize.msgDatabaseGrowing": "**מסד הנתונים שלך הולך וגדל!** אל תדאג, אנחנו יכולים לטפל בזה עכשיו. הזמן שנשאר עד לאזול המקום באחסון המרוחק.\n\n| גודל נמדד | גודל מוגדר |\n| --- | --- |\n| ${estimatedSize} | ${maxSize} |\n\n> [!MORE]-\n> אם אתה משתמש בפלאגין כבר שנים רבות, ייתכן שנצברו נתחים לא מקושרים — כלומר, זבל — במסד הנתונים. לכן, אנו ממליצים לבנות הכל מחדש. ככל הנראה מסד הנתונים יהיה קטן בהרבה לאחר מכן.\n>\n> אם נפח הכספת שלך פשוט גדל, עדיף לבנות מחדש לאחר ארגון הקבצים. Self-hosted LiveSync אינו מוחק נתונים בפועל גם כאשר אתה מוחק קבצים כדי להאיץ את התהליך. הדבר [מתועד בפירוט](https://github.com/vrtmrz/obsidian-livesync/blob/main/docs/tech_info.md).\n>\n> אם אינך מוטרד מהגידול, ניתן להגדיל את סף ההתראה ב-100MB. הדבר מתאים אם השרת הוא שלך. עם זאת, מומלץ לבנות מחדש מעת לעת.\n>\n\n> [!WARNING]\n> אם תבנה מחדש, ודא שכל המכשירים מסונכרנים. הפלאגין ינסה למזג כמה שניתן.\n", + "moduleCheckRemoteSize.msgSetDBCapacity": "ניתן להגדיר אזהרת קיבולת מקסימלית של מסד הנתונים, **כדי לנקוט פעולה לפני שנגמר המקום באחסון המרוחד**.\nהאם להפעיל זאת?\n\n> [!MORE]-\n> - 0: אל תזהיר על גודל האחסון.\n> מומלץ אם יש לך מספיק מקום באחסון המרוחד, בעיקר אם השרת הוא שלך. ניתן לבדוק את גודל האחסון ולבנות מחדש ידנית.\n> - 800: הזהר אם גודל האחסון המרוחד עולה על 800MB.\n> מומלץ אם אתה משתמש ב-fly.io עם מגבלת 1GB או ב-IBM Cloudant.\n> - 2000: הזהר אם גודל האחסון המרוחד עולה על 2GB.\n\nאם הגענו למגבלה, תתבקש להרחיב את הסף בהדרגה.\n", + "moduleCheckRemoteSize.option2GB": "2GB (סטנדרטי)", + "moduleCheckRemoteSize.option800MB": "800MB (Cloudant, fly.io)", + "moduleCheckRemoteSize.optionAskMeLater": "שאל מאוחר יותר", + "moduleCheckRemoteSize.optionDismiss": "דחה", + "moduleCheckRemoteSize.optionIncreaseLimit": "הגדל ל-${newMax}MB", + "moduleCheckRemoteSize.optionNoWarn": "לא, אל תזהיר בכלל", + "moduleCheckRemoteSize.optionRebuildAll": "בנה הכל מחדש עכשיו", + "moduleCheckRemoteSize.titleDatabaseSizeLimitExceeded": "גודל האחסון המרוחד חרג מהמגבלה", + "moduleCheckRemoteSize.titleDatabaseSizeNotify": "הגדרת התראה על גודל מסד נתונים", + "moduleInputUIObsidian.defaultTitleConfirmation": "אישור", + "moduleInputUIObsidian.defaultTitleSelect": "בחר", + "moduleInputUIObsidian.optionNo": "לא", + "moduleInputUIObsidian.optionYes": "כן", + "moduleLiveSyncMain.logAdditionalSafetyScan": "סריקת בטיחות נוספת...", + "moduleLiveSyncMain.logLoadingPlugin": "טוען תוסף...", + "moduleLiveSyncMain.logPluginInitCancelled": "אתחול התוסף בוטל על ידי מודול", + "moduleLiveSyncMain.logPluginVersion": "Self-hosted LiveSync גרסה ${manifestVersion} ${packageVersion}", + "moduleLiveSyncMain.logReadChangelog": "LiveSync עודכן, אנא קרא את יומן השינויים!", + "moduleLiveSyncMain.logSafetyScanCompleted": "סריקת הבטיחות הנוספת הושלמה", + "moduleLiveSyncMain.logSafetyScanFailed": "סריקת הבטיחות הנוספת נכשלה במודול", + "moduleLiveSyncMain.logUnloadingPlugin": "מסיר תוסף...", + "moduleLiveSyncMain.logVersionUpdate": "LiveSync עודכן. במקרה של עדכונים משמעותיים, כל הסנכרון האוטומטי הושבת זמנית. ודא שכל המכשירים מעודכנים לפני ההפעלה.", + "moduleLiveSyncMain.msgScramEnabled": "Self-hosted LiveSync הוגדר להתעלם מאירועים מסוימים. האם זה נכון?\n\n| סוג | סטטוס | הערה |\n|:---:|:---:|---|\n| אירועי אחסון | ${fileWatchingStatus} | כל שינוי יתעלם |\n| אירועי מסד נתונים | ${parseReplicationStatus} | כל שינוי מסונכרן יידחה |\n\nהאם לחדש אותם ולהפעיל מחדש את Obsidian?\n\n> [!DETAILS]-\n> דגלים אלה מוגדרים על ידי הפלאגין במהלך בנייה מחדש או משיכה. אם התהליך הסתיים בצורה לא תקינה, ייתכן שהם נשארו כלא מכוון.\n> אם אינך בטוח, ניתן לנסות להריץ מחדש את התהליכים. ודא שיש לך גיבוי של הכספת.\n", + "moduleLiveSyncMain.optionKeepLiveSyncDisabled": "השאר LiveSync מנוטרל", + "moduleLiveSyncMain.optionResumeAndRestart": "חדש והפעל מחדש את Obsidian", + "moduleLiveSyncMain.titleScramEnabled": "מצב בלימה פעיל", + "moduleLocalDatabase.logWaitingForReady": "ממתין לכשירות...", + "moduleLog.showLog": "הצג יומן", + "moduleMigration.docUri": "https://github.com/vrtmrz/obsidian-livesync/blob/main/README.md#how-to-use", + "moduleMigration.fix0256.buttons.checkItLater": "בדוק מאוחר יותר", + "moduleMigration.fix0256.buttons.DismissForever": "תיקנתי, ואל תשאל שוב", + "moduleMigration.fix0256.buttons.fix": "תקן", + "moduleMigration.fix0256.message": "בשל באג אחרון (בגרסה 0.25.6), ייתכן שחלק מהקבצים לא נשמרו כהלכה במסד הנתונים לסנכרון.\nסרקנו את הקבצים ומצאנו כאלה שיש לתקן.\n\n**קבצים מוכנים לתיקון:**\n\n${files}\n\nלקבצים אלה יש קובץ מקורי תואם גודל באחסון, וסביר שניתן לשחזרם.\nניתן להשתמש בהם לתיקון מסד הנתונים. לחץ על כפתור \"תקן\" למטה לתיקון.\n\n${messageUnrecoverable}\n\nאם ברצונך להריץ שוב, ניתן לעשות זאת מ-Hatch.\n", + "moduleMigration.fix0256.messageUnrecoverable": "**קבצים שלא ניתן לתקן במכשיר זה:**\n\n${filesNotRecoverable}\n\nלקבצים אלה יש מטה-נתונים לא עקביים, ולא ניתן לתקנם במכשיר זה (לרוב לא ניתן לקבוע מה נכון). לשחזורם, אנא בדוק מכשירים אחרים שלך (גם בתכונה זו) או שחזר ידנית מגיבוי.\n", + "moduleMigration.fix0256.title": "זוהו קבצים פגומים", + "moduleMigration.insecureChunkExist.buttons.fetch": "כבר בניתי מחדש את השרת המרוחק. משוך מהשרת המרוחד", + "moduleMigration.insecureChunkExist.buttons.later": "אטפל בזה מאוחר יותר", + "moduleMigration.insecureChunkExist.buttons.rebuild": "בנה הכל מחדש", + "moduleMigration.insecureChunkExist.laterMessage": "אנו ממליצים בחום לטפל בזה בהקדם האפשרי!", + "moduleMigration.insecureChunkExist.message": "חלק מהנתחים לא מאוחסנים בצורה מאובטחת ואינם מוצפנים במסד הנתונים.\n**אנא בנה מחדש את מסד הנתונים כדי לתקן בעיה זו**.\n\nאם מסד הנתונים המרוחד אינו מוגדר עם SSL, או משתמש בפרטי גישה פחות מאובטחים, **אתה בסיכון של חשיפת מידע רגיש**.\n\nהערה: אנא שדרג את Self-hosted LiveSync לגרסה 0.25.6 ומעלה על כל מכשיריך, וגבה את הכספת שלך.\nהערה 2: בנייה מחדש ומשיכה דורשות זמן ותעבורת רשת. אנא עשה זאת בשעות שיא נמוך וודא חיבור רשת יציב.\n", + "moduleMigration.insecureChunkExist.title": "נמצאו נתחים לא מאובטחים!", + "moduleMigration.logBulkSendCorrupted": "שליחת נתחים באצווה הופעלה, אך תכונה זו הייתה פגועה. מתנצלים על אי הנוחות. נוטרלה אוטומטית.", + "moduleMigration.logFetchRemoteTweakFailed": "נכשל במשיכת ערכי כיוונון מרוחקים", + "moduleMigration.logLocalDatabaseNotReady": "משהו השתבש! מסד הנתונים המקומי אינו מוכן", + "moduleMigration.logMigratedSameBehaviour": "הוגר ל-db:${current} עם אותה התנהגות כמקודם", + "moduleMigration.logMigrationFailed": "הגירה נכשלה או בוטלה מ-${old} ל-${current}", + "moduleMigration.logRedflag2CreationFail": "יצירת redflag2 נכשלה", + "moduleMigration.logRemoteTweakUnavailable": "לא ניתן לקבל ערכי כיוונון מרוחקים", + "moduleMigration.logSetupCancelled": "ההגדרה בוטלה, Self-hosted LiveSync ממתין להגדרתך!", + "moduleMigration.msgFetchRemoteAgain": "כפי שייתכן שכבר ידוע לך, Self-hosted LiveSync שינה את התנהגות ברירת המחדל ומבנה מסד הנתונים.\n\nובזכות זמנך ומאמציך, מסד הנתונים המרוחד נראה כבר הוגר. ברכות!\n\nעם זאת, נדרש עוד קצת. תצורת מכשיר זה אינה תואמת למסד הנתונים המרוחד. נצטרך למשוך את מסד הנתונים המרוחד שוב. האם למשוך מהשרת המרוחד עכשיו?\n\n___הערה: לא ניתן לסנכרן עד שהתצורה תשתנה ומסד הנתונים יימשך שוב.___\n___הערה 2: הנתחים הם בלתי-ניתנים לשינוי לחלוטין, ניתן למשוך רק את המטה-נתונים וההפרש.___", + "moduleMigration.msgInitialSetup": "המכשיר שלך **טרם הוגדר**. אנחנו כאן לעזור לך בתהליך ההגדרה.\n\nשים לב שניתן להעתיק את תוכן כל דיאלוג ללוח. אם צריך לחזור אליו מאוחר יותר, ניתן להדביק אותו כפתק ב-Obsidian. ניתן גם לתרגם לשפתך בעזרת כלי תרגום.\n\nראשית, האם יש לך **Setup URI**?\n\nהערה: אם אינך יודע מהו, אנא עיין ב[תיעוד](${URI_DOC}).", + "moduleMigration.msgRecommendSetupUri": "אנו ממליצים בחום לייצר Setup URI ולהשתמש בו.\nאם אין לך ידע בנושא, אנא עיין ב[תיעוד](${URI_DOC}) (מתנצלים שוב, אך זה חשוב).\n\nכיצד ברצונך להגדיר ידנית?", + "moduleMigration.msgSinceV02321": "מאז גרסה 0.23.21, Self-hosted LiveSync שינה את התנהגות ברירת המחדל ומבנה מסד הנתונים. השינויים הבאים בוצעו:\n\n1. **תלות רישיות בשמות קבצים**\n הטיפול בשמות קבצים הוא כעת ללא תלות רישיות. זהו שינוי מועיל לרוב הפלטפורמות,\n פרט ל-Linux ו-iOS שאינן מנהלות תלות רישיות בקבצים ביעילות.\n (בפלטפורמות אלה, תוצג אזהרה עבור קבצים עם אותו שם אך רישיות שונה).\n\n2. **טיפול בגרסאות של נתחים**\n נתחים הם בלתי-ניתנים לשינוי, מה שמאפשר גרסאות קבועות. שינוי זה ישפר את\n ביצועי שמירת הקבצים.\n\n___עם זאת, כדי להפעיל אחד מהשינויים הללו, יש לבנות מחדש גם את מסד הנתונים המרוחד וגם את המקומי. תהליך זה לוקח כמה דקות, ואנו ממליצים לעשות זאת כשיש לך זמן פנוי.___\n\n- אם ברצונך לשמור את ההתנהגות הקודמת, ניתן לדלג על תהליך זה באמצעות `${KEEP}`.\n- אם אין לך מספיק זמן, אנא בחר `${DISMISS}`. תקבל תזכורת בהמשך.\n- אם בנית מחדש את מסד הנתונים במכשיר אחר, אנא בחר `${DISMISS}` ונסה לסנכרן שוב. מאחר שזוהה הפרש, תקבל תזכורת שוב.", + "moduleMigration.optionAdjustRemote": "התאם לשרת המרוחד", + "moduleMigration.optionDecideLater": "החלט מאוחר יותר", + "moduleMigration.optionEnableBoth": "הפעל את שניהם", + "moduleMigration.optionEnableFilenameCaseInsensitive": "הפעל רק #1", + "moduleMigration.optionEnableFixedRevisionForChunks": "הפעל רק #2", + "moduleMigration.optionHaveSetupUri": "כן, יש לי", + "moduleMigration.optionKeepPreviousBehaviour": "שמור על התנהגות קודמת", + "moduleMigration.optionManualSetup": "הגדר הכל ידנית", + "moduleMigration.optionNoAskAgain": "לא, אנא שאל שוב", + "moduleMigration.optionNoSetupUri": "לא, אין לי", + "moduleMigration.optionRemindNextLaunch": "הזכר לי בהפעלה הבאה", + "moduleMigration.optionSetupViaP2P": "השתמש ב-%{short_p2p_sync} להגדרה", + "moduleMigration.optionSetupWizard": "קח אותי לאשף ההגדרה", + "moduleMigration.optionYesFetchAgain": "כן, משוך שוב", + "moduleMigration.titleCaseSensitivity": "תלות רישיות", + "moduleMigration.titleRecommendSetupUri": "המלצה לשימוש ב-Setup URI", + "moduleMigration.titleWelcome": "ברוך הבא ל-Self-hosted LiveSync", + "moduleObsidianMenu.replicate": "שכפל", + "Move remotely deleted files to the trash, instead of deleting.": "העבר קבצים שנמחקו מרחוק לאשפה, במקום למחוק.", + "Not all messages have been translated. And, please revert to \"Default\" when reporting errors.": "לא כל ההודעות תורגמו. בנוסף, אנא חזור ל\"ברירת מחדל\" בעת דיווח על שגיאות.", + "Notify all setting files": "הודע על כל קבצי ההגדרות", + "Notify customized": "הודע על התאמות אישיות", + "Notify when other device has newly customized.": "הודע כאשר מכשיר אחר הוסיף התאמה אישית חדשה.", + "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.": "מספר האצוות לעיבוד בכל פעם. ברירת מחדל 40, מינימום 2. יחד עם גודל האצווה קובע כמה מסמכים נשמרים בזיכרון בו-זמנית.", + "Number of changes to sync at a time. Defaults to 50. Minimum is 2.": "מספר השינויים לסנכרון בכל פעם. ברירת מחדל 50, מינימום 2.", + "obsidianLiveSyncSettingTab.btnApply": "החל", + "obsidianLiveSyncSettingTab.btnCheck": "בדוק", + "obsidianLiveSyncSettingTab.btnCopy": "העתק", + "obsidianLiveSyncSettingTab.btnDisable": "נטרל", + "obsidianLiveSyncSettingTab.btnDiscard": "ביטול שינויים", + "obsidianLiveSyncSettingTab.btnEnable": "הפעל", + "obsidianLiveSyncSettingTab.btnFix": "תקן", + "obsidianLiveSyncSettingTab.btnGotItAndUpdated": "הבנתי ועדכנתי.", + "obsidianLiveSyncSettingTab.btnNext": "הבא", + "obsidianLiveSyncSettingTab.btnStart": "התחל", + "obsidianLiveSyncSettingTab.btnTest": "בדוק", + "obsidianLiveSyncSettingTab.btnUse": "השתמש", + "obsidianLiveSyncSettingTab.buttonFetch": "משוך", + "obsidianLiveSyncSettingTab.buttonNext": "הבא", + "obsidianLiveSyncSettingTab.defaultLanguage": "ברירת מחדל", + "obsidianLiveSyncSettingTab.descConnectSetupURI": "זוהי השיטה המומלצת להגדרת Self-hosted LiveSync עם Setup URI.", + "obsidianLiveSyncSettingTab.descCopySetupURI": "מושלם להגדרת מכשיר חדש!", + "obsidianLiveSyncSettingTab.descEnableLiveSync": "הפעל רק לאחר הגדרת אחת משתי האפשרויות לעיל, או לאחר השלמת כל ההגדרות ידנית.", + "obsidianLiveSyncSettingTab.descFetchConfigFromRemote": "משוך הגדרות נדרשות מהשרת המרוחד שהוגדר כבר.", + "obsidianLiveSyncSettingTab.descManualSetup": "לא מומלץ, אך שימושי אם אין לך Setup URI", + "obsidianLiveSyncSettingTab.descTestDatabaseConnection": "פתח חיבור למסד נתונים. אם מסד הנתונים המרוחד לא נמצא ויש לך הרשאה ליצור אחד, הוא ייצור.", + "obsidianLiveSyncSettingTab.descValidateDatabaseConfig": "בודק ומתקן בעיות אפשריות בתצורת מסד הנתונים.", + "obsidianLiveSyncSettingTab.errAccessForbidden": "❗ גישה נדחתה.", + "obsidianLiveSyncSettingTab.errCannotContinueTest": "לא ניתן להמשיך בבדיקה.", + "obsidianLiveSyncSettingTab.errCorsCredentials": "❗ cors.credentials שגוי", + "obsidianLiveSyncSettingTab.errCorsNotAllowingCredentials": "❗ CORS אינו מאפשר פרטי גישה", + "obsidianLiveSyncSettingTab.errCorsOrigins": "❗ cors.origins שגוי", + "obsidianLiveSyncSettingTab.errEnableCors": "❗ httpd.enable_cors שגוי", + "obsidianLiveSyncSettingTab.errEnableCorsChttpd": "❗ chttpd.enable_cors שגוי", + "obsidianLiveSyncSettingTab.errMaxDocumentSize": "❗ couchdb.max_document_size נמוך)", + "obsidianLiveSyncSettingTab.errMaxRequestSize": "❗ chttpd.max_http_request_size נמוך)", + "obsidianLiveSyncSettingTab.errMissingWwwAuth": "❗ httpd.WWW-Authenticate חסר", + "obsidianLiveSyncSettingTab.errRequireValidUser": "❗ chttpd.require_valid_user שגוי.", + "obsidianLiveSyncSettingTab.errRequireValidUserAuth": "❗ chttpd_auth.require_valid_user שגוי.", + "obsidianLiveSyncSettingTab.labelDisabled": "⏹️ : מנוטרל", + "obsidianLiveSyncSettingTab.labelEnabled": "🔁 : מופעל", + "obsidianLiveSyncSettingTab.levelAdvanced": " (מתקדם)", + "obsidianLiveSyncSettingTab.levelEdgeCase": " (מקרה קצה)", + "obsidianLiveSyncSettingTab.levelPowerUser": " (משתמש מתקדם)", + "obsidianLiveSyncSettingTab.linkOpenInBrowser": "פתח בדפדפן", + "obsidianLiveSyncSettingTab.linkPageTop": "ראש העמוד", + "obsidianLiveSyncSettingTab.linkTipsAndTroubleshooting": "טיפים ופתרון בעיות", + "obsidianLiveSyncSettingTab.linkTroubleshooting": "/docs/troubleshooting.md", + "obsidianLiveSyncSettingTab.logCannotUseCloudant": "לא ניתן להשתמש בתכונה זו עם IBM Cloudant.", + "obsidianLiveSyncSettingTab.logCheckingConfigDone": "בדיקת התצורה הושלמה", + "obsidianLiveSyncSettingTab.logCheckingConfigFailed": "בדיקת התצורה נכשלה", + "obsidianLiveSyncSettingTab.logCheckingDbConfig": "בודק תצורת מסד נתונים", + "obsidianLiveSyncSettingTab.logCheckPassphraseFailed": "שגיאה: בדיקת ביטוי הסיסמה עם השרת המרוחד נכשלה:\n${db}.", + "obsidianLiveSyncSettingTab.logConfiguredDisabled": "מצב סנכרון שהוגדר: מנוטרל", + "obsidianLiveSyncSettingTab.logConfiguredLiveSync": "מצב סנכרון שהוגדר: LiveSync", + "obsidianLiveSyncSettingTab.logConfiguredPeriodic": "מצב סנכרון שהוגדר: תקופתי", + "obsidianLiveSyncSettingTab.logCouchDbConfigFail": "תצורת CouchDB: ${title} נכשלה", + "obsidianLiveSyncSettingTab.logCouchDbConfigSet": "תצורת CouchDB: ${title} -> הגדר ${key} ל-${value}", + "obsidianLiveSyncSettingTab.logCouchDbConfigUpdated": "תצורת CouchDB: ${title} עודכנה בהצלחה", + "obsidianLiveSyncSettingTab.logDatabaseConnected": "מסד הנתונים מחובר", + "obsidianLiveSyncSettingTab.logEncryptionNoPassphrase": "לא ניתן להפעיל הצפנה ללא ביטוי סיסמה", + "obsidianLiveSyncSettingTab.logEncryptionNoSupport": "המכשיר שלך אינו תומך בהצפנה.", + "obsidianLiveSyncSettingTab.logErrorOccurred": "אירעה שגיאה!!", + "obsidianLiveSyncSettingTab.logEstimatedSize": "גודל משוער: ${size}", + "obsidianLiveSyncSettingTab.logPassphraseInvalid": "ביטוי הסיסמה אינו תקין, אנא תקן אותו.", + "obsidianLiveSyncSettingTab.logPassphraseNotCompatible": "שגיאה: ביטוי הסיסמה אינו תואם לשרת המרוחד! אנא בדוק שוב!", + "obsidianLiveSyncSettingTab.logRebuildNote": "הסנכרון הושבת, משוך והפעל מחדש אם רצוי.", + "obsidianLiveSyncSettingTab.logSelectAnyPreset": "בחר קביעה מראש כלשהי.", + "obsidianLiveSyncSettingTab.msgAreYouSureProceed": "האם אתה בטוח שברצונך להמשיך?", + "obsidianLiveSyncSettingTab.msgChangesNeedToBeApplied": "יש להחיל שינויים!", + "obsidianLiveSyncSettingTab.msgConfigCheck": "--בדיקת תצורה--", + "obsidianLiveSyncSettingTab.msgConfigCheckFailed": "בדיקת התצורה נכשלה. האם ברצונך להמשיך בכל זאת?", + "obsidianLiveSyncSettingTab.msgConnectionCheck": "--בדיקת חיבור--", + "obsidianLiveSyncSettingTab.msgConnectionProxyNote": "אם אתה נתקל בבעיות עם בדיקת החיבור (גם לאחר בדיקת התצורה), אנא בדוק את הגדרות ה-reverse proxy שלך.", + "obsidianLiveSyncSettingTab.msgCurrentOrigin": "מקור נוכחי: ${origin}", + "obsidianLiveSyncSettingTab.msgDiscardConfirmation": "האם אתה בטוח שברצונך לבטל הגדרות ומסדי נתונים קיימים?", + "obsidianLiveSyncSettingTab.msgDone": "--הסתיים--", + "obsidianLiveSyncSettingTab.msgEnableCors": "הגדר httpd.enable_cors", + "obsidianLiveSyncSettingTab.msgEnableCorsChttpd": "הגדר chttpd.enable_cors", + "obsidianLiveSyncSettingTab.msgEnableEncryptionRecommendation": "אנו ממליצים להפעיל הצפנה מקצה לקצה ואת ערפול הנתיב. האם אתה בטוח שברצונך להמשיך ללא הצפנה?", + "obsidianLiveSyncSettingTab.msgFetchConfigFromRemote": "האם ברצונך למשוך את התצורה מהשרת המרוחד?", + "obsidianLiveSyncSettingTab.msgGenerateSetupURI": "הכל מוכן! האם ברצונך לייצר Setup URI להגדרת מכשירים אחרים?", + "obsidianLiveSyncSettingTab.msgIfConfigNotPersistent": "אם תצורת השרת אינה קבועה (למשל, פועלת ב-docker), הערכים כאן עשויים להשתנות. לאחר שתצליח להתחבר, אנא עדכן את ההגדרות ב-local.ini של השרת.", + "obsidianLiveSyncSettingTab.msgInvalidPassphrase": "ביטוי הסיסמה להצפנה שלך עשוי להיות לא תקין. האם אתה בטוח שברצונך להמשיך?", + "obsidianLiveSyncSettingTab.msgNewVersionNote": "הגעת כאן בשל הודעת שדרוג? אנא עיין בהיסטוריית הגרסאות. אם אתה מרוצה, לחץ על הכפתור. עדכון חדש יציג זאת שוב.", + "obsidianLiveSyncSettingTab.msgNonHTTPSInfo": "מוגדר כ-URI שאינו HTTPS. שים לב שהדבר עשוי שלא לפעול על מכשירים ניידים.", + "obsidianLiveSyncSettingTab.msgNonHTTPSWarning": "לא ניתן להתחבר ל-URI שאינו HTTPS. אנא עדכן את התצורה ונסה שוב.", + "obsidianLiveSyncSettingTab.msgNotice": "---הודעה---", + "obsidianLiveSyncSettingTab.msgObjectStorageWarning": "אזהרה: תכונה זו בשלב פיתוח, לכן שים לב לנקודות הבאות:\n- ארכיטקטורת הוספה בלבד. נדרשת בנייה מחדש לצמצום האחסון.\n- קצת רגיש.\n- בסנכרון הראשון, כל ההיסטוריה תועבר מהשרת המרוחד. שים לב למגבלות נתונים ומהירות.\n- רק הפרשים מסונכרנים בזמן אמת.\n\nאם נתקלת בבעיות, או שיש לך רעיונות לגבי תכונה זו, אנא פתח Issue ב-GitHub.\nאנחנו מעריכים את ההקדשה הגדולה שלך.", + "obsidianLiveSyncSettingTab.msgOriginCheck": "בדיקת מקור: ${org}", + "obsidianLiveSyncSettingTab.msgRebuildRequired": "נדרשת בנייה מחדש של מסדי הנתונים כדי להחיל את השינויים. אנא בחר את השיטה.\n\n
\nמקרא\n\n| סמל | משמעות |\n|: ------ :| ------- |\n| ⇔ | מעודכן |\n| ⇄ | סנכרן לאיזון |\n| ⇐,⇒ | העבר לדריסה |\n| ⇠,⇢ | העבר לדריסה מהצד השני |\n\n
\n\n## ${OPTION_REBUILD_BOTH}\nבמבט: 📄 ⇒¹ 💻 ⇒² 🛰️ ⇢ⁿ 💻 ⇄ⁿ⁺¹ 📄\nבנה מחדש גם את מסד הנתונים המקומי וגם המרוחד תוך שימוש בקבצים קיימים ממכשיר זה.\nפעולה זו תנעל מכשירים אחרים שיצטרכו לבצע משיכה.\n## ${OPTION_FETCH}\nבמבט: 📄 ⇄² 💻 ⇐¹ 🛰️ ⇔ 💻 ⇔ 📄\nאתחל את מסד הנתונים המקומי ובנה אותו מחדש תוך שימוש בנתונים שנמשכו ממסד הנתונים המרוחד.\nכולל את המקרה שבו בנית מחדש את מסד הנתונים המרוחד.\n## ${OPTION_ONLY_SETTING}\nשמור רק את ההגדרות. **זהירות: עלול לגרום לפגיעה בנתונים**; בנייה מחדש של מסד הנתונים נדרשת בדרך כלל.", + "obsidianLiveSyncSettingTab.msgSelectAndApplyPreset": "אנא בחר והחל פריט קבוע מראש כלשהו להשלמת האשף.", + "obsidianLiveSyncSettingTab.msgSetCorsCredentials": "הגדר cors.credentials", + "obsidianLiveSyncSettingTab.msgSetCorsOrigins": "הגדר cors.origins", + "obsidianLiveSyncSettingTab.msgSetMaxDocSize": "הגדר couchdb.max_document_size", + "obsidianLiveSyncSettingTab.msgSetMaxRequestSize": "הגדר chttpd.max_http_request_size", + "obsidianLiveSyncSettingTab.msgSetRequireValidUser": "הגדר chttpd.require_valid_user = true", + "obsidianLiveSyncSettingTab.msgSetRequireValidUserAuth": "הגדר chttpd_auth.require_valid_user = true", + "obsidianLiveSyncSettingTab.msgSettingModified": "ההגדרה \"${setting}\" שונתה ממכשיר אחר. לחץ על {HERE} לטעינה מחדש של ההגדרות. לחץ במקום אחר להתעלמות מהשינויים.", + "obsidianLiveSyncSettingTab.msgSettingsUnchangeableDuringSync": "הגדרות אלה אינן ניתנות לשינוי במהלך סנכרון. אנא נטרל את כל הסנכרון ב\"הגדרות סנכרון\" כדי לבטל נעילה.", + "obsidianLiveSyncSettingTab.msgSetWwwAuth": "הגדר httpd.WWW-Authenticate", + "obsidianLiveSyncSettingTab.nameApplySettings": "החל הגדרות", + "obsidianLiveSyncSettingTab.nameConnectSetupURI": "התחבר עם Setup URI", + "obsidianLiveSyncSettingTab.nameCopySetupURI": "העתק הגדרות נוכחיות ל-Setup URI", + "obsidianLiveSyncSettingTab.nameDisableHiddenFileSync": "נטרל סנכרון קבצים נסתרים", + "obsidianLiveSyncSettingTab.nameDiscardSettings": "בטל הגדרות ומסדי נתונים קיימים", + "obsidianLiveSyncSettingTab.nameEnableHiddenFileSync": "הפעל סנכרון קבצים נסתרים", + "obsidianLiveSyncSettingTab.nameEnableLiveSync": "הפעל LiveSync", + "obsidianLiveSyncSettingTab.nameHiddenFileSynchronization": "סנכרון קבצים נסתרים", + "obsidianLiveSyncSettingTab.nameManualSetup": "הגדרה ידנית", + "obsidianLiveSyncSettingTab.nameTestConnection": "בדוק חיבור", + "obsidianLiveSyncSettingTab.nameTestDatabaseConnection": "בדוק חיבור למסד נתונים", + "obsidianLiveSyncSettingTab.nameValidateDatabaseConfig": "אמת תצורת מסד נתונים", + "obsidianLiveSyncSettingTab.okAdminPrivileges": "✔ יש לך הרשאות מנהל.", + "obsidianLiveSyncSettingTab.okCorsCredentials": "✔ cors.credentials תקין.", + "obsidianLiveSyncSettingTab.okCorsCredentialsForOrigin": "CORS credentials תקין", + "obsidianLiveSyncSettingTab.okCorsOriginMatched": "✔ CORS origin תקין", + "obsidianLiveSyncSettingTab.okCorsOrigins": "✔ cors.origins תקין.", + "obsidianLiveSyncSettingTab.okEnableCors": "✔ httpd.enable_cors תקין.", + "obsidianLiveSyncSettingTab.okEnableCorsChttpd": "✔ chttpd.enable_cors תקין.", + "obsidianLiveSyncSettingTab.okMaxDocumentSize": "✔ couchdb.max_document_size תקין.", + "obsidianLiveSyncSettingTab.okMaxRequestSize": "✔ chttpd.max_http_request_size תקין.", + "obsidianLiveSyncSettingTab.okRequireValidUser": "✔ chttpd.require_valid_user תקין.", + "obsidianLiveSyncSettingTab.okRequireValidUserAuth": "✔ chttpd_auth.require_valid_user תקין.", + "obsidianLiveSyncSettingTab.okWwwAuth": "✔ httpd.WWW-Authenticate תקין.", + "obsidianLiveSyncSettingTab.optionApply": "החל", + "obsidianLiveSyncSettingTab.optionCancel": "ביטול", + "obsidianLiveSyncSettingTab.optionCouchDB": "CouchDB", + "obsidianLiveSyncSettingTab.optionDisableAllAutomatic": "נטרל את כל האוטומטי", + "obsidianLiveSyncSettingTab.optionFetchFromRemote": "משוך מהשרת המרוחד", + "obsidianLiveSyncSettingTab.optionHere": "כאן", + "obsidianLiveSyncSettingTab.optionLiveSync": "LiveSync", + "obsidianLiveSyncSettingTab.optionMinioS3R2": "Minio,S3,R2", + "obsidianLiveSyncSettingTab.optionOkReadEverything": "בסדר, קראתי הכל.", + "obsidianLiveSyncSettingTab.optionOnEvents": "על אירועים", + "obsidianLiveSyncSettingTab.optionPeriodicAndEvents": "תקופתי ועל אירועים", + "obsidianLiveSyncSettingTab.optionPeriodicWithBatch": "תקופתי עם אצווה", + "obsidianLiveSyncSettingTab.optionRebuildBoth": "בנה שניהם מחדש ממכשיר זה", + "obsidianLiveSyncSettingTab.optionSaveOnlySettings": "(סכנה) שמור הגדרות בלבד", + "obsidianLiveSyncSettingTab.panelChangeLog": "יומן שינויים", + "obsidianLiveSyncSettingTab.panelGeneralSettings": "הגדרות כלליות", + "obsidianLiveSyncSettingTab.panelPrivacyEncryption": "פרטיות והצפנה", + "obsidianLiveSyncSettingTab.panelRemoteConfiguration": "תצורת שרת מרוחד", + "obsidianLiveSyncSettingTab.panelSetup": "הגדרה", + "obsidianLiveSyncSettingTab.serverVersion": "פרטי שרת: ${info}", + "obsidianLiveSyncSettingTab.titleActiveRemoteServer": "שרת מרוחד פעיל", + "obsidianLiveSyncSettingTab.titleAppearance": "מראה", + "obsidianLiveSyncSettingTab.titleConflictResolution": "פתרון קונפליקטים", + "obsidianLiveSyncSettingTab.titleCongratulations": "מזל טוב!", + "obsidianLiveSyncSettingTab.titleCouchDB": "CouchDB", + "obsidianLiveSyncSettingTab.titleDeletionPropagation": "הפצת מחיקות", + "obsidianLiveSyncSettingTab.titleEncryptionNotEnabled": "ההצפנה אינה מופעלת", + "obsidianLiveSyncSettingTab.titleEncryptionPassphraseInvalid": "ביטוי סיסמה להצפנה לא תקין", + "obsidianLiveSyncSettingTab.titleExtraFeatures": "הפעל תכונות נוספות ומתקדמות", + "obsidianLiveSyncSettingTab.titleFetchConfig": "משוך תצורה", + "obsidianLiveSyncSettingTab.titleFetchConfigFromRemote": "משוך תצורה מהשרת המרוחד", + "obsidianLiveSyncSettingTab.titleFetchSettings": "משוך הגדרות", + "obsidianLiveSyncSettingTab.titleHiddenFiles": "קבצים נסתרים", + "obsidianLiveSyncSettingTab.titleLogging": "רישום יומן", + "obsidianLiveSyncSettingTab.titleMinioS3R2": "Minio,S3,R2", + "obsidianLiveSyncSettingTab.titleNotification": "התראה", + "obsidianLiveSyncSettingTab.titleOnlineTips": "טיפים אונליין", + "obsidianLiveSyncSettingTab.titleQuickSetup": "הגדרה מהירה", + "obsidianLiveSyncSettingTab.titleRebuildRequired": "נדרשת בנייה מחדש", + "obsidianLiveSyncSettingTab.titleRemoteConfigCheckFailed": "בדיקת תצורת שרת מרוחד נכשלה", + "obsidianLiveSyncSettingTab.titleRemoteServer": "שרת מרוחד", + "obsidianLiveSyncSettingTab.titleReset": "אתחול", + "obsidianLiveSyncSettingTab.titleSetupOtherDevices": "להגדרת מכשירים אחרים", + "obsidianLiveSyncSettingTab.titleSynchronizationMethod": "שיטת סנכרון", + "obsidianLiveSyncSettingTab.titleSynchronizationPreset": "קבוע מראש לסנכרון", + "obsidianLiveSyncSettingTab.titleSyncSettings": "הגדרות סנכרון", + "obsidianLiveSyncSettingTab.titleSyncSettingsViaMarkdown": "סנכרון הגדרות דרך Markdown", + "obsidianLiveSyncSettingTab.titleUpdateThinning": "דילול עדכונים", + "obsidianLiveSyncSettingTab.warnCorsOriginUnmatched": "⚠ CORS Origin אינו תואם ${from}->${to}", + "obsidianLiveSyncSettingTab.warnNoAdmin": "⚠ אין לך הרשאות מנהל.", + "P2P.AskPassphraseForDecrypt": "העמית המרוחד שיתף את התצורה. אנא הזן את ביטוי הסיסמה לפענוח התצורה.", + "P2P.AskPassphraseForShare": "העמית המרוחד ביקש את תצורת מכשיר זה. אנא הזן את ביטוי הסיסמה לשיתוף התצורה. ניתן להתעלם מהבקשה על ידי ביטול הדיאלוג.", + "P2P.DisabledButNeed": "%{title_p2p_sync} מנוטרל. האם אתה בטוח שברצונך להפעיל?", + "P2P.FailedToOpen": "לא ניתן לפתוח חיבור P2P לשרת האותות.", + "P2P.NoAutoSyncPeers": "לא נמצאו עמיתים לסנכרון אוטומטי. אנא הגדר עמיתים בלוח %{long_p2p_sync}.", + "P2P.NoKnownPeers": "לא זוהו עמיתים, ממתין לעמיתים נכנסים...", + "P2P.Note.description": " רפליקטור זה מאפשר לסנכרן את הכספת עם מכשירים אחרים באמצעות חיבור עמית-לעמית.\nניתן להשתמש בזה לסנכרון הכספת עם מכשירים אחרים ללא שירות ענן.\nרפליקטור זה מבוסס על Trystero. הוא משתמש גם בשרת אותות לביסוס חיבור בין מכשירים. שרת האותות משמש להחלפת מידע חיבור בין מכשירים. הוא אינו (ולא אמור) לדעת או לאחסן את הנתונים שלנו.\n\nשרת האותות יכול להיות מאוחסן על ידי כל אחד. זהו ממסר Nostr בלבד. לצורך פשטות ובדיקת התנהגות הרפליקטור, vrtmrz מאחסן עותק של שרת האותות. ניתן להשתמש בשרת הניסיוני של vrtmrz, או בכל שרת אחר.\n\nאגב, גם אם שרת האותות אינו מאחסן נתונים, הוא יכול לראות מידע חיבור של חלק ממכשיריך. אנא שים לב לכך. כמו כן, היה זהיר בשימוש בשרת של מישהו אחר.", + "P2P.Note.important_note": "רפליקטור עמית-לעמית.", + "P2P.Note.important_note_sub": "תכונה זו עדיין בשלב מתקדם. ודא שהנתונים שלך מגובים לפני השימוש. ונשמח אם תוכל לתרום לפיתוח תכונה זו.", + "P2P.Note.Summary": "מהי תכונה זו? (ועוד הערות חשובות, נא לקרוא פעם אחת)", + "P2P.NotEnabled": "%{title_p2p_sync} אינו מופעל. לא ניתן לפתוח חיבור חדש.", + "P2P.P2PReplication": "שכפול %{P2P}", + "P2P.PaneTitle": "%{long_p2p_sync}", + "P2P.ReplicatorInstanceMissing": "רפליקטור סנכרון P2P לא נמצא, ייתכן שלא הוגדר או הופעל.", + "P2P.SeemsOffline": "העמית ${name} נראה לא מחובר, מדלג.", + "P2P.SyncAlreadyRunning": "סנכרון P2P כבר פועל.", + "P2P.SyncCompleted": "סנכרון P2P הושלם.", + "P2P.SyncStartedWith": "סנכרון P2P עם ${name} התחיל.", + "Passphrase": "ביטוי סיסמה", + "Passphrase of sensitive configuration items": "ביטוי סיסמה לפריטי תצורה רגישים", + "password": "סיסמה", + "Password": "סיסמה", + "Path Obfuscation": "ערפול נתיב", + "Per-file-saved customization sync": "סנכרון התאמה אישית שנשמר לפי קובץ", + "Periodic Sync interval": "מרווח סנכרון תקופתי", + "Prepare the 'report' to create an issue": "הכן 'דו\"ח' ליצירת Issue", + "Presets": "קביעות מראש", + "Process small files in the foreground": "עבד קבצים קטנים בחזית", + "Property Encryption": "הצפנת מאפיינים", + "RedFlag.Fetch.Method.Desc": "כיצד ברצונך למשוך?\n- %{RedFlag.Fetch.Method.FetchSafer}.\n **תעבורה נמוכה**, **מעבד גבוה**, **סיכון נמוך**\n מומלץ אם...\n - קבצים עשויים להיות לא עקביים\n - אין הרבה קבצים\n- %{RedFlag.Fetch.Method.FetchSmoother}.\n **תעבורה נמוכה**, **מעבד בינוני**, **סיכון נמוך עד בינוני**\n מומלץ אם...\n - הקבצים ככל הנראה עקביים\n - יש לך הרבה קבצים.\n- %{RedFlag.Fetch.Method.FetchTraditional}.\n **תעבורה גבוהה**, **מעבד נמוך**, **סיכון נמוך עד בינוני**\n\n>[!INFO]- פרטים\n> ## %{RedFlag.Fetch.Method.FetchSafer}.\n> **תעבורה נמוכה**, **מעבד גבוה**, **סיכון נמוך**\n> אפשרות זו יוצרת תחילה מסד נתונים מקומי תוך שימוש בקבצים מקומיים קיימים לפני משיכת נתונים מהמקור המרוחד.\n> אם קיימים קבצים תואמים גם מקומית וגם מרחוק, רק ההפרשים ביניהם יועברו.\n> עם זאת, קבצים הקיימים בשני המקומות יטופלו תחילה כקבצים מתנגשים. הם ייפתרו אוטומטית אם לא מתנגשים בפועל, אך תהליך זה עשוי לקחת זמן.\n> זוהי בדרך כלל השיטה הבטוחה ביותר, ממזערת סיכון לאובדן נתונים.\n> ## %{RedFlag.Fetch.Method.FetchSmoother}.\n> **תעבורה נמוכה**, **מעבד בינוני**, **סיכון נמוך עד בינוני** (תלוי בפעולה)\n> אפשרות זו יוצרת תחילה נתחים מקבצים מקומיים למסד הנתונים, ואז מושכת נתונים. כתוצאה מכך, רק נתחים חסרים מקומית מועברים. עם זאת, כל המטה-נתונים נלקחים מהמקור המרוחד.\n> קבצים מקומיים נבדקים לאחר מכן מול מטה-נתונים אלה בעת ההפעלה. התוכן שנחשב חדש יותר ידרוס את הישן יותר (לפי זמן שינוי).\n> בדרך כלל בטוח אם הקבצים המקומיים הם אכן חדשים ביותר. עם זאת, עלול לגרום לבעיות אם לקובץ יש חותמת זמן חדשה יותר אך תוכן ישן יותר (כמו `welcome.md` ראשוני).\n> שיטה זו משתמשת בפחות מעבד ומהירה יותר מ-\"%{RedFlag.Fetch.Method.FetchSafer}\", אך עלולה להוביל לאובדן נתונים אם לא משתמשים בה בזהירות.\n> ## %{RedFlag.Fetch.Method.FetchTraditional}.\n> **תעבורה גבוהה**, **מעבד נמוך**, **סיכון נמוך עד בינוני** (תלוי בפעולה)\n> הכל יימשך מהשרת המרוחד.\n> דומה ל-%{RedFlag.Fetch.Method.FetchSmoother}, אך כל הנתחים נמשכים מהמקור המרוחד.\n> זוהי הדרך המסורתית ביותר למשיכה, צורכת בדרך כלל את רוב תעבורת הרשת והזמן.\n> עם זאת, היא נחשבת לעתים קרובות לשיטה היציבה ביותר מכיוון שהיא הוותיקה והישירה ביותר.", + "RedFlag.Fetch.Method.FetchSafer": "צור מסד נתונים מקומי לפני המשיכה", + "RedFlag.Fetch.Method.FetchSmoother": "צור נתחי קבצים מקומיים לפני המשיכה", + "RedFlag.Fetch.Method.FetchTraditional": "משוך הכל מהשרת המרוחד", + "RedFlag.Fetch.Method.Title": "כיצד ברצונך למשוך?", + "RedFlag.FetchRemoteConfig.Buttons.Cancel": "לא, השתמש בהגדרות המקומיות", + "RedFlag.FetchRemoteConfig.Buttons.Fetch": "כן, משוך והחל הגדרות מרוחקות", + "RedFlag.FetchRemoteConfig.Message": "האם ברצונך למשוך ולהחיל הגדרות שמורות מרחוק על מכשיר זה?", + "RedFlag.FetchRemoteConfig.Title": "משוך תצורה מרוחקת", + "Reducing the frequency with which on-disk changes are reflected into the DB": "הפחת את תדירות השתקפות שינויים בדיסק למסד הנתונים", + "Region": "אזור", + "Remote server type": "סוג שרת מרוחד", + "Remote Type": "סוג מרוחד", + "Replicator.Dialogue.Locked.Action.Dismiss": "ביטול לאישור מחדש", + "Replicator.Dialogue.Locked.Action.Fetch": "אפס סנכרון במכשיר זה", + "Replicator.Dialogue.Locked.Action.Unlock": "בטל נעילת מסד הנתונים המרוחד", + "Replicator.Dialogue.Locked.Message": "מסד הנתונים המרוחד נעול. הסיבה היא בנייה מחדש באחד הטרמינלים.\nלכן המכשיר מתבקש להמנע מחיבור כדי למנוע פגיעה במסד הנתונים.\n\nקיימות שלוש אפשרויות:\n\n- %{Replicator.Dialogue.Locked.Action.Fetch}\n הדרך המועדפת והאמינה ביותר. פעולה זו תמחק את מסד הנתונים המקומי פעם,\n ותאפס את כל מידע הסנכרון ממסד הנתונים המרוחד מחדש. ברוב המקרים ניתן\n לעשות זאת בבטחה. עם זאת, דורשת זמן ויש לבצע ברשת יציבה.\n- %{Replicator.Dialogue.Locked.Action.Unlock}\n ניתן להשתמש בשיטה זו רק אם כבר מסונכרנים באופן אמין בשיטות שכפול\n אחרות. פשוט לא מספיק שיש אותם קבצים. אם אינך בטוח, הימנע מכך.\n- %{Replicator.Dialogue.Locked.Action.Dismiss}\n פעולה זו תבטל את הפעולה. תתבקש שוב בבקשה הבאה.\n", + "Replicator.Dialogue.Locked.Message.Fetch": "משיכה מלאה תוזמנה. הפלאגין יופעל מחדש לביצועה.", + "Replicator.Dialogue.Locked.Message.Unlocked": "מסד הנתונים המרוחד בוטל נעילתו. אנא נסה שוב את הפעולה.", + "Replicator.Dialogue.Locked.Title": "נעול", + "Replicator.Message.Cleaned": "ניקוי מסד הנתונים בתהליך. השכפול בוטל", + "Replicator.Message.InitialiseFatalError": "אין רפליקטור זמין, זוהי שגיאה קריטית.", + "Replicator.Message.Pending": "חלק מאירועי הקבצים ממתינים. השכפול בוטל.", + "Replicator.Message.SomeModuleFailed": "השכפול בוטל בשל כשל במודול", + "Replicator.Message.VersionUpFlash": "זוהה עדכון. אנא פתח את דיאלוג ההגדרות ובדוק את יומן השינויים. השכפול בוטל.", + "Requires restart of Obsidian": "דורש הפעלה מחדש של Obsidian", + "Requires restart of Obsidian.": "דורש הפעלה מחדש של Obsidian.", + "Rerun Onboarding Wizard": "הרץ שוב את אשף ההכוונה", + "Rerun the onboarding wizard to set up Self-hosted LiveSync again.": "הרץ שוב את אשף ההכוונה להגדרת Self-hosted LiveSync מחדש.", + "Rerun Wizard": "הרץ שוב את האשף", + "Reset notification threshold and check the remote database usage": "אפס סף התראה ובדוק שימוש במסד הנתונים המרוחד", + "Reset the remote storage size threshold and check the remote storage size again.": "אפס את סף גודל האחסון המרוחד ובדוק שוב את גודל האחסון המרוחד.", + "Run Doctor": "הפעל Doctor", + "Save settings to a markdown file. You will be notified when new settings arrive. You can set different files by the platform.": "שמור הגדרות לקובץ Markdown. תיודע כשהגדרות חדשות יגיעו. ניתן להגדיר קבצים שונים לפי פלטפורמה.", + "Saving will be performed forcefully after this number of seconds.": "השמירה תתבצע בכפייה לאחר מספר שניות זה.", + "Scan changes on customization sync": "סרוק שינויים בסנכרון התאמה אישית", + "Scan customization automatically": "סרוק התאמה אישית אוטומטית", + "Scan customization before replicating.": "סרוק התאמה אישית לפני שכפול.", + "Scan customization every 1 minute.": "סרוק התאמה אישית כל דקה.", + "Scan customization periodically": "סרוק התאמה אישית תקופתית", + "Scan for hidden files before replication": "סרוק קבצים נסתרים לפני שכפול", + "Scan hidden files periodically": "סרוק קבצים נסתרים תקופתית", + "Seconds, 0 to disable": "שניות, 0 לביטול", + "Seconds. Saving to the local database will be delayed until this value after we stop typing or saving.": "שניות. השמירה למסד הנתונים המקומי תתעכב בערך זה לאחר הפסקת הקלדה או שמירה.", + "Secret Key": "מפתח סודי", + "Server URI": "כתובת שרת (URI)", + "Setting.GenerateKeyPair.Desc": "יצרנו זוג מפתחות!\n\nהערה: זוג מפתחות זה לא יוצג שוב. אנא שמור אותו במקום בטוח. אם אבד לך, יהיה צורך לייצר זוג מפתחות חדש.\nהערה 2: המפתח הציבורי הוא בפורמט spki, והמפתח הפרטי הוא בפורמט pkcs8. לנוחות, שורות חדשות ממוירות ל-`\\n` במפתח הציבורי.\nהערה 3: יש להגדיר את המפתח הציבורי במסד הנתונים המרוחד, ואת המפתח הפרטי במכשירים המקומיים.\n\n>[!FOR YOUR EYES ONLY]-\n>
\n>\n> ### מפתח ציבורי\n> ```\n${public_key}\n> ```\n>\n> ### מפתח פרטי\n> ```\n${private_key}\n> ```\n>\n>
\n\n>[!Both for copying]-\n>\n>
\n>\n> ```\n${public_key}\n${private_key}\n> ```\n>\n>
\n\n", + "Setting.GenerateKeyPair.Title": "זוג מפתחות חדש נוצר!", + "Setting.TroubleShooting": "פתרון בעיות", + "Setting.TroubleShooting.Doctor": "Doctor הגדרות", + "Setting.TroubleShooting.Doctor.Desc": "מזהה הגדרות לא אופטימליות. (זהה לפעולה במהלך הגירה)", + "Setting.TroubleShooting.ScanBrokenFiles": "סרוק קבצים פגומים", + "Setting.TroubleShooting.ScanBrokenFiles.Desc": "סורק קבצים שלא נשמרו כהלכה במסד הנתונים.", + "SettingTab.Message.AskRebuild": "השינויים שלך מצריכים משיכה ממסד הנתונים המרוחד. האם להמשיך?", + "Setup.Apply.Buttons.ApplyAndFetch": "החל ומשוך", + "Setup.Apply.Buttons.ApplyAndMerge": "החל ומזג", + "Setup.Apply.Buttons.ApplyAndRebuild": "החל ובנה מחדש", + "Setup.Apply.Buttons.Cancel": "בטל ובטל", + "Setup.Apply.Buttons.OnlyApply": "החל בלבד", + "Setup.Apply.Message": "התצורה החדשה מוכנה. בואו נמשיך להחיל אותה.\nישנן מספר דרכים להחיל זאת:\n\n- החל ומשוך\n הגדר מכשיר זה כלקוח חדש. לאחר ההחלה, סנכרן מהשרת המרוחד.\n- החל ומזג\n הגדר על מכשיר שכבר יש בו קבצים. מעבד קבצים מקומיים ומעביר הפרשים. עלולים\n לקום קונפליקטים.\n- החל ובנה מחדש\n בנה את השרת המרוחד מחדש תוך שימוש בקבצים מקומיים. נעשה בדרך כלל אם השרת\n מושחת או אם רוצים להתחיל מאפס. מכשירים אחרים יינעלו ויצטרכו למשוך מחדש.\n- החל בלבד\n החל בלבד. עלולים לקום קונפליקטים אם נדרשת בנייה מחדש.", + "Setup.Apply.Title": "החל תצורה חדשה מה-${method}", + "Setup.Apply.WarningRebuildRecommended": "שים לב: לאחר כוונון ההגדרות, נקבע שנדרשת בנייה מחדש; ייבוא בלבד אינו מומלץ.", + "Setup.Doctor.Buttons.No": "לא, אנא השתמש בהגדרות ה-URI כפי שהן", + "Setup.Doctor.Buttons.Yes": "כן, אנא יעץ ל-Doctor", + "Setup.Doctor.Message": "Self-hosted LiveSync הפך ארוך יותר בהיסטוריה שלו וחלק מההגדרות המומלצות השתנו.\n\nעכשיו, הגדרה היא זמן מצוין לכך.\n\nהאם ברצונך להפעיל את Doctor כדי לבדוק אם ההגדרות המיובאות אופטימליות בהשוואה למצב הנוכחי?", + "Setup.Doctor.Title": "האם ברצונך להתייעץ עם ה-Doctor?", + "Setup.FetchRemoteConf.Buttons.Fetch": "כן, אנא משוך את התצורה", + "Setup.FetchRemoteConf.Buttons.Skip": "לא, אנא השתמש בהגדרות ב-URI", + "Setup.FetchRemoteConf.Message": "אם סנכרנו כבר פעם עם מכשיר אחר, מסד הנתונים המרוחד מאחסן ערכי תצורה מתאימים בין המכשירים המסונכרנים. הפלאגין ירצה לאחזר אותם לתצורה חזקה יותר.\n\nעם זאת, עלינו לוודא דבר אחד. האם אנחנו כרגע במצב שבו ניתן לגשת לרשת בבטחה ולאחזר את ההגדרות?\nהערה: ברוב המקרים, אתה בטוח לעשות זאת, כל עוד מסד הנתונים המרוחד שלך מאוחסן עם תעודת SSL, ורשתך אינה פגומה.", + "Setup.FetchRemoteConf.Title": "אחזר תצורה ממסד הנתונים המרוחד?", + "Setup.QRCode": "יצרנו קוד QR להעברת ההגדרות. אנא סרוק את קוד ה-QR עם הטלפון או מכשיר אחר.\nהערה: קוד ה-QR אינו מוצפן, אז היה זהיר בפתיחתו.\n\n>[!FOR YOUR EYES ONLY]-\n>
${qr_image}
", + "Setup.ShowQRCode": "הצג קוד QR", + "Setup.ShowQRCode.Desc": "הצג קוד QR להעברת ההגדרות.", + "Should we keep folders that don't have any files inside?": "האם לשמור תיקיות שאין בהן קבצים?", + "Should we only check for conflicts when a file is opened?": "האם לבדוק קונפליקטים רק בעת פתיחת קובץ?", + "Should we prompt you about conflicting files when a file is opened?": "האם להציג בקשה לגבי קבצים מתנגשים בעת פתיחת קובץ?", + "Should we prompt you for every single merge, even if we can safely merge automatcially?": "האם להציג בקשת אישור לכל מיזוג יחיד, גם אם ניתן למזג בבטחה אוטומטית?", + "Show only notifications": "הצג התראות בלבד", + "Show status as icons only": "הצג סטטוס כאייקונים בלבד", + "Show status icon instead of file warnings banner": "הצג אייקון סטטוס במקום פס אזהרות הקובץ", + "Show status inside the editor": "הצג סטטוס בתוך העורך", + "Show status on the status bar": "הצג סטטוס בשורת המצב", + "Show verbose log. Please enable if you report an issue.": "הצג יומן מפורט. אנא הפעל אם אתה מדווח על בעיה.", + "Starts synchronisation when a file is saved.": "מתחיל סנכרון כאשר קובץ נשמר.", + "Stop reflecting database changes to storage files.": "הפסק לשקף שינויי מסד נתונים לקבצי אחסון.", + "Stop watching for file changes.": "הפסק לעקוב אחר שינויי קבצים.", + "Suppress notification of hidden files change": "דחוק התראת שינוי קבצים נסתרים", + "Suspend database reflecting": "השהה שיקוף מסד נתונים", + "Suspend file watching": "השהה מעקב קבצים", + "Sync after merging file": "סנכרן לאחר מיזוג קובץ", + "Sync automatically after merging files": "סנכרן אוטומטית לאחר מיזוג קבצים", + "Sync Mode": "מצב סנכרון", + "Sync on Editor Save": "סנכרן בשמירת עורך", + "Sync on File Open": "סנכרן בפתיחת קובץ", + "Sync on Save": "סנכרן בשמירה", + "Sync on Startup": "סנכרן בהפעלה", + "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 Hash algorithm for chunk IDs": "אלגוריתם Hash עבור מזהי נתחים", + "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 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.": "מרווח הזמן המינימלי לסנכרון אוטומטי על אירוע.", + "This passphrase will not be copied to another device. It will be set to `Default` until you configure it again.": "ביטוי סיסמה זה לא יועתק למכשיר אחר. הוא יוגדר ל-`Default` עד שתגדיר אותו שוב.", + "TweakMismatchResolve.Action.Dismiss": "דחה", + "TweakMismatchResolve.Action.UseConfigured": "השתמש בהגדרות המוגדרות", + "TweakMismatchResolve.Action.UseMine": "עדכן הגדרות מסד הנתונים המרוחד", + "TweakMismatchResolve.Action.UseMineAcceptIncompatible": "עדכן הגדרות מסד הנתונים המרוחד אך השאר כפי שהוא", + "TweakMismatchResolve.Action.UseMineWithRebuild": "עדכן הגדרות מסד הנתונים המרוחד ובנה מחדש", + "TweakMismatchResolve.Action.UseRemote": "החל הגדרות על מכשיר זה", + "TweakMismatchResolve.Action.UseRemoteAcceptIncompatible": "החל הגדרות על מכשיר זה, אך התעלם מאי-תאימות", + "TweakMismatchResolve.Action.UseRemoteWithRebuild": "החל הגדרות על מכשיר זה ומשוך שוב", + "TweakMismatchResolve.Message.Main": "\nההגדרות במסד הנתונים המרוחד הן כדלקמן. ערכים אלה הוגדרו על ידי מכשירים אחרים, אשר סונכרנו עם מכשיר זה לפחות פעם אחת.\n\nאם ברצונך להשתמש בהגדרות אלה, אנא בחר %{TweakMismatchResolve.Action.UseConfigured}.\nאם ברצונך לשמור את הגדרות מכשיר זה, אנא בחר %{TweakMismatchResolve.Action.Dismiss}.\n\n${table}\n\n>[!TIP]\n> אם ברצונך לסנכרן את כל ההגדרות, אנא השתמש ב-`סנכרון הגדרות דרך Markdown` לאחר החלת תצורה מינימלית עם תכונה זו.\n\n${additionalMessage}", + "TweakMismatchResolve.Message.MainTweakResolving": "התצורה שלך אינה תואמת לזו שבשרת המרוחד.\n\nיש להתאים את התצורות הבאות:\n\n${table}\n\nאנא הודע לנו על החלטתך.\n\n${additionalMessage}", + "TweakMismatchResolve.Message.UseRemote.WarningRebuildRecommended": "\n>[!NOTICE]\n> חלק מהשינויים תואמים אך עלולים לצרוך אחסון ותעבורה נוספים. מומלצת בנייה מחדש. עם זאת, ייתכן שבנייה מחדש לא תתבצע כעת, אך תיושם בתחזוקה עתידית.\n> ***ודא שיש לך זמן ושאתה מחובר לרשת יציבה לפני ההחלה!***", + "TweakMismatchResolve.Message.UseRemote.WarningRebuildRequired": "\n>[!WARNING]\n> חלק מהתצורות המרוחקות אינן תואמות למסד הנתונים המקומי של מכשיר זה. נדרשת בנייה מחדש של מסד הנתונים המקומי.\n> ***ודא שיש לך זמן ושאתה מחובר לרשת יציבה לפני ההחלה!***", + "TweakMismatchResolve.Message.WarningIncompatibleRebuildRecommended": "\n>[!NOTICE]\n> זיהינו שחלק מהערכים שונים, מה שגורם לאי-תאימות בין מסד הנתונים המקומי למרוחד.\n> חלק מהשינויים תואמים אך עלולים לצרוך אחסון ותעבורה נוספים. מומלצת בנייה מחדש. עם זאת, ייתכן שבנייה מחדש לא תתבצע כעת, אך תיושם בתחזוקה עתידית.\n> אם ברצונך לבנות מחדש, הדבר ייקח כמה דקות או יותר. **ודא שבטוח לבצע זאת עכשיו.**", + "TweakMismatchResolve.Message.WarningIncompatibleRebuildRequired": "\n>[!WARNING]\n> זיהינו שחלק מהערכים שונים, מה שגורם לאי-תאימות בין מסד הנתונים המקומי למרוחד.\n> נדרשת בנייה מחדש של המסד המקומי או המרוחד. שניהם ייקחו כמה דקות או יותר. **ודא שבטוח לבצע זאת עכשיו.**", + "TweakMismatchResolve.Table": "| שם ערך | מכשיר זה | מרוחד |\n|: --- |: ---- :|: ---- :|\n${rows}\n\n", + "TweakMismatchResolve.Table.Row": "| ${name} | ${self} | ${remote} |", + "TweakMismatchResolve.Title": "זוהתה אי-התאמה בתצורה", + "TweakMismatchResolve.Title.TweakResolving": "זוהתה אי-התאמה בתצורה", + "TweakMismatchResolve.Title.UseRemoteConfig": "השתמש בתצורה המרוחקת", + "Unique name between all synchronized devices. To edit this setting, please disable customization sync once.": "שם ייחודי בין כל המכשירים המסונכרנים. כדי לערוך הגדרה זו, אנא נטרל את סנכרון ההתאמה האישית פעם אחת.", + "Use Custom HTTP Handler": "השתמש ב-HTTP Handler מותאם אישית", + "Use dynamic iteration count": "השתמש בספירת איטרציות דינמית", + "Use Segmented-splitter": "השתמש ב-Segmented-splitter", + "Use splitting-limit-capped chunk splitter": "השתמש ב-chunk splitter עם מגבלת פיצול", + "Use the trash bin": "השתמש בסל האשפה", + "Use timeouts instead of heartbeats": "השתמש בפסק זמן במקום פעימות לב", + "username": "שם משתמש", + "Username": "שם משתמש", + "Verbose Log": "יומן מפורט", + "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.": "אזהרה! לכך תהיה השפעה רצינית על הביצועים. בנוסף, היומנים לא יסונכרנו תחת השם ברירת המחדל. אנא היה זהיר עם יומנים; הם לרוב מכילים מידע סודי שלך.", + "When you save a file in the editor, start a sync automatically": "כאשר אתה שומר קובץ בעורך, התחל סנכרון אוטומטית", + "Write credentials in the file": "כתוב פרטי גישה בקובץ", + "Write logs into the file": "כתוב יומנים לקובץ" +} diff --git a/src/common/messagesJson/ja.json b/src/common/messagesJson/ja.json new file mode 100644 index 00000000..d2aff276 --- /dev/null +++ b/src/common/messagesJson/ja.json @@ -0,0 +1,836 @@ +{ + "(Active)": "(有効)", + "(BETA) Always overwrite with a newer file": "(ベータ機能) 常に新しいファイルで上書きする", + "(Beta) Use ignore files": "(ベータ機能) 除外ファイル(ignore)の使用", + "(Days passed, 0 to disable automatic-deletion)": "(経過日数、0で自動削除を無効化)", + "(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.": "(例: チャンクをオンラインで読む) このオプションを有効にすると、LiveSyncはチャンクをローカルに複製せず、直接オンラインで読み込みます。カスタムチャンクサイズを増やすことをお勧めします。", + "(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) この値を設定すると、これより大きいサイズのローカルファイルやリモートファイルの変更はスキップされます。ファイルが再び小さくなった場合は、新しいものが使用されます。", + "(Mega chars)": "(メガ文字)", + "(Not recommended) If set, credentials will be stored in the file.": "(非推奨) 設定した場合、認証情報がファイルに保存されます。", + "(Obsolete) Use an old adapter for compatibility": "(廃止済み)古いアダプターを互換性のために利用", + "(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.": "(正規表現)設定すると、これに一致するローカル/リモートファイルの変更はすべてスキップされます。", + "(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.": "(別の PC やスマートフォンですでに同期を利用している場合に選択してください。)この端末を既存の LiveSync 構成に追加する場合に適しています。", + "(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.": "(この端末を最初の同期端末として設定する場合に選択してください。)LiveSync を初めて利用し、最初から設定したい場合に適しています。", + "> [!INFO]- The connected devices have been detected as follows:\n${devices}": "> [!INFO]- 次の接続済みデバイスが検出されました:\n${devices}", + "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.": "Setup URI は、サーバーアドレスと認証情報を含む 1 本の文字列です。サーバーのインストールスクリプトで生成された URI がある場合は、それを使うと簡単かつ安全に設定できます。", + "Access Key": "アクセスキー", + "Activate": "有効化", + "Add default patterns": "デフォルトパターンを追加", + "Add new connection": "接続を追加", + "All devices have the same progress value (${progress}). Your devices seem to be synchronised. And be able to proceed with Garbage Collection.": "すべてのデバイスで進捗値が同じです(${progress})。デバイスは同期されているようなので、Garbage Collection を続行できます。", + "Always prompt merge conflicts": "常に競合は手動で解決する", + "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.": "データベース使用状況を分析し、自分で診断できるよう TSV レポートを生成します。生成したレポートは任意のスプレッドシートに貼り付けて確認できます。", + "Apply Latest Change if Conflicting": "競合がある場合は最新の変更を適用する", + "Apply preset configuration": "プリセットを適用する", + "Ask a passphrase at every launch": "起動のたびにパスフレーズを確認", + "Automatically Sync all files when opening Obsidian.": "Obsidian起動時にすべてのファイルを自動同期します。", + "Back": "戻る", + "Back to non-configured": "未設定状態に戻す", + "Batch database update": "データベースのバッチ更新", + "Batch limit": "バッチの上限", + "Batch size": "バッチ容量", + "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.": "v0.17.6までは古いアダプターをローカル用のデータベースに使用していましたが、現在は新しいアダプターを推奨しています。しかし、新しいアダプターに変更するにはローカルデータベースの再構築が必要です。有効のままにしておくと、リモートデータベースからフェッチする場合に、この設定を無効にするかの質問が表示されます。", + "Bucket Name": "バケット名", + "Cancel": "キャンセル", + "Cancel Garbage Collection": "Garbage Collection をキャンセル", + "Check and convert non-path-obfuscated files": "パス難読化されていないファイルを確認して変換", + "Check for documents that have not been converted to path-obfuscated IDs and convert them if necessary.": "まだパス難読化 ID に変換されていないドキュメントを確認し、必要に応じて変換します。", + "cmdConfigSync.showCustomizationSync": "カスタマイズ同期を表示", + "Comma separated `.gitignore, .dockerignore`": "カンマ区切り `.gitignore, .dockerignore`", + "Compaction in progress on remote database...": "リモートデータベースでコンパクションを実行中です...", + "Compaction on remote database completed successfully.": "リモートデータベースでのコンパクションが正常に完了しました。", + "Compaction on remote database failed.": "リモートデータベースでのコンパクションに失敗しました。", + "Compaction on remote database timed out.": "リモートデータベースでのコンパクションがタイムアウトしました。", + "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 (Database structure)": "互換性(データベース構造)", + "Compatibility (Internal API Usage)": "互換性(内部 API の利用)", + "Compatibility (Metadata)": "互換性(メタデータ)", + "Compatibility (Remote Database)": "互換性(リモートデータベース)", + "Compatibility (Trouble addressed)": "互換性(対処済みの問題)", + "Compute revisions for chunks": "チャンクの修正(リビジョン)を計算", + "Configuration Encryption": "設定の暗号化", + "Configure": "設定", + "Configure And Change Remote": "リモートを設定して切り替える", + "Configure E2EE": "E2EE を設定", + "Configure Remote": "リモートを設定", + "Configure the same server information as your other devices again, manually, very advanced users only.": "他の端末と同じサーバー情報を手動で再入力します。上級者向けの方法です。", + "Connection Method": "接続方法", + "Continue to CouchDB setup": "CouchDB 設定へ進む", + "Continue to Peer-to-Peer only setup": "Peer-to-Peer 専用設定へ進む", + "Continue to S3/MinIO/R2 setup": "S3/MinIO/R2 設定へ進む", + "Copy": "コピー", + "Copy Report to clipboard": "レポートをクリップボードにコピー", + "CouchDB Connection Tweak": "CouchDB 接続の調整", + "Cross-platform": "クロスプラットフォーム", + "Current adapter: {adapter}": "現在のアダプター: {adapter}", + "Customization Sync": "カスタマイズ同期", + "Customization Sync (Beta3)": "カスタマイズ同期 (Beta3)", + "Data Compression": "データ圧縮", + "Database Adapter": "データベースアダプター", + "Database Name": "データベース名", + "Database suffix": "データベースの接尾辞(suffix)", + "Default": "デフォルト", + "Delay conflict resolution of inactive files": "非アクティブなファイルは、競合解決を先送りする", + "Delay merge conflict prompt for inactive files.": "非アクティブなファイルの競合解決のプロンプトの表示を遅延させる", + "Delete": "削除", + "Delete all customization sync data": "カスタマイズ同期データをすべて削除", + "Delete all data on the remote server.": "リモートサーバー上のすべてのデータを削除します。", + "Delete local database to reset or uninstall Self-hosted LiveSync": "Self-hosted LiveSync をリセットまたはアンインストールするため、ローカルデータベースを削除", + "Delete old metadata of deleted files on start-up": "削除済みデータのメタデータをクリーンナップする", + "Delete Remote Configuration": "リモート設定を削除", + "Delete remote configuration '{name}'?": "リモート設定 '{name}' を削除しますか?", + "desktop": "デスクトップ", + "Developer": "開発者", + "Device": "デバイス", + "Device name": "デバイス名", + "Device Setup Method": "端末の設定方法", + "dialog.yourLanguageAvailable": "Self-hosted LiveSync に設定されている言語の翻訳がありましたので、%{Display Language}が適用されました。\n\n注意: 全てのメッセージは翻訳されていません。あなたの貢献をお待ちしています!\nGithubにIssueを作成する際には、 %{Display Language} を一旦 %{lang-def} に戻してから、スクショやメッセージ、ログを収集してください。これは設定から変更できます。\n\n便利に使用できれば幸いです。", + "dialog.yourLanguageAvailable.btnRevertToDefault": "Keep %{lang-def}", + "dialog.yourLanguageAvailable.Title": "翻訳が利用可能です!", + "Disables all synchronization and restart.": "すべての同期を無効にして再起動します。", + "Disables logging, only shows notifications. Please disable if you report an issue.": "ログを無効にし、通知のみを表示します。Issueを報告する場合は無効にしてください。", + "Display Language": "インターフェースの表示言語", + "Display name": "表示名", + "Do not check configuration mismatch before replication": "サーバーから同期する前に設定の不一致を確認しない", + "Do not keep metadata of deleted files.": "削除済みファイルのメタデータを保持しない", + "Do not split chunks in the background": "バックグラウンドでチャンクを分割しない", + "Do not use internal API": "内部APIを使用しない", + "Doctor.Button.DismissThisVersion": "いいえ、次のリリースまで再度確認しない", + "Doctor.Button.Fix": "修正する", + "Doctor.Button.FixButNoRebuild": "修正するが再構築はしない", + "Doctor.Button.No": "いいえ", + "Doctor.Button.Skip": "そのままにする", + "Doctor.Button.Yes": "はい", + "Doctor.Dialogue.Main": "こんにちは!${activateReason}のため、設定診断ツールが起動しました!\n残念ながら、いくつかの設定が潜在的な問題として検出されました。\nご安心ください。一つずつ解決していきましょう。\n\n事前にお知らせしますと、以下の項目についてお尋ねします。\n\n${issues}\n\n始めていいですか?", + "Doctor.Dialogue.MainFix": "\n## ${name}\n\n| 現在の値 | 理想値 |\n|:---:|:---:|\n| ${current} | ${ideal} |\n\n**推奨レベル:** ${level}\n\n### 診断理由?\n\n${reason}\n\n${note}\n\nこれを理想値に修正しますか?", + "Doctor.Dialogue.Title": "Self-hosted LiveSync 設定診断ツール", + "Doctor.Dialogue.TitleAlmostDone": "あと少しです!", + "Doctor.Dialogue.TitleFix": "問題の修正 ${current}/${total}", + "Doctor.Level.Must": "必須", + "Doctor.Level.Necessary": "必要", + "Doctor.Level.Optional": "任意", + "Doctor.Level.Recommended": "推奨", + "Doctor.Message.NoIssues": "問題は検出されませんでした!", + "Doctor.Message.RebuildLocalRequired": "注意!これを適用するにはローカルデータベースの再構築が必要です!", + "Doctor.Message.RebuildRequired": "注意!これを適用するには再構築が必要です!", + "Doctor.Message.SomeSkipped": "いくつかの問題をそのままにしました。次回起動時に再度確認しますか?", + "Doctor.RULES.E2EE_V02500.REASON": "エンドツーエンド暗号化がより堅牢で高速になりました。また、以前のE2EEは再コードレビューにより脆弱性が発見されました。できるだけ早く適用することをお勧めします。ご不便をおかけして申し訳ありません。また、この設定は下位互換性がありません。すべての同期デバイスをv0.25.0以降にアップデートする必要があります。再構築は必須ではなく、新しい転送から新しいフォーマットに変換されますが、可能な限り再構築をお勧めします。", + "Duplicate": "複製", + "Duplicate remote": "リモート設定を複製", + "E2EE Configuration": "E2EE 設定", + "Edge case addressing (Behaviour)": "特殊なケースへの対応(動作)", + "Edge case addressing (Database)": "特殊なケースへの対応(データベース)", + "Edge case addressing (Processing)": "特殊なケースへの対応(処理)", + "Emergency restart": "緊急再起動", + "Enable advanced features": "高度な機能を有効にする", + "Enable customization sync": "カスタマイズ同期を有効", + "Enable Developers' Debug Tools.": "開発者用デバッグツールを有効にする", + "Enable edge case treatment features": "エッジケース対応機能を有効にする", + "Enable poweruser features": "エキスパート機能を有効にする", + "Enable this if your Object Storage doesn't support CORS": "オブジェクトストレージがCORSをサポートしていない場合は有効にしてください", + "Enable this option to automatically apply the most recent change to documents even when it conflicts": "このオプションを有効にすると、競合があっても最新の変更を自動的にドキュメントに適用します", + "Encrypt contents on the remote database. If you use the plugin's synchronization feature, enabling this is recommended.": "リモートデータベースの暗号化(オンにすることを推奨)", + "Encrypting sensitive configuration items": "機密性の高い設定項目の暗号化", + "Encryption phassphrase. If changed, you should overwrite the server's database with the new (encrypted) files.": "暗号化パスフレーズ。変更した場合、新しい(暗号化された)ファイルでサーバーのデータベースを上書きする必要があります。", + "End-to-End Encryption": "E2E暗号化", + "Endpoint URL": "エンドポイントURL", + "Enhance chunk size": "チャンクサイズを最適化する", + "Enter Server Information": "サーバー情報の入力", + "Enter the server information manually": "サーバー情報を手動で入力する", + "Export": "エクスポート", + "Failed to connect to remote for compaction.": "リモートデータベースに接続できず、コンパクションを実行できませんでした。", + "Failed to connect to remote for compaction. ${reason}": "リモートデータベースに接続できず、コンパクションを実行できませんでした。${reason}", + "Failed to start one-shot replication before Garbage Collection. Garbage Collection Cancelled.": "Garbage Collection 前にワンショットレプリケーションを開始できませんでした。Garbage Collection はキャンセルされました。", + "Failed to start replication after Garbage Collection.": "Garbage Collection 後にレプリケーションを開始できませんでした。", + "Fetch": "取得", + "Fetch chunks on demand": "ユーザーのタイミングでチャンクの更新を確認する", + "Fetch database with previous behaviour": "以前の動作でデータベースを取得", + "Fetch remote settings": "リモート設定を取得", + "File to resolve conflict": "競合を解決するファイル", + "Filename": "ファイル名", + "First, please select the option that best describes your current situation.": "まず、現在の状況に最も近い項目を選択してください。", + "Flag and restart": "フラグを立てて再起動", + "Forces the file to be synced when opened.": "ファイルを開いたときに強制的に同期します。", + "Fresh Start Wipe": "初期化ワイプ", + "Garbage Collection cancelled by user.": "ユーザーによって Garbage Collection がキャンセルされました。", + "Garbage Collection completed. Deleted chunks: ${deletedChunks} / ${totalChunks}. Time taken: ${seconds} seconds.": "Garbage Collection が完了しました。削除したチャンク: ${deletedChunks} / ${totalChunks}。所要時間: ${seconds} 秒。", + "Garbage Collection Confirmation": "Garbage Collection の確認", + "Garbage Collection V3 (Beta)": "ガーベジコレクション V3 (Beta)", + "Garbage Collection: Found ${unusedChunks} unused chunks to delete.": "Garbage Collection: 削除対象の未使用チャンクが ${unusedChunks} 件見つかりました。", + "Garbage Collection: Scanned ${scanned} / ~${docCount}": "Garbage Collection: ${scanned} / ~${docCount} をスキャン済み", + "Garbage Collection: Scanning completed. Total chunks: ${totalChunks}, Used chunks: ${usedChunks}": "Garbage Collection: スキャン完了。総チャンク数: ${totalChunks}、使用中チャンク数: ${usedChunks}", + "Handle files as Case-Sensitive": "ファイルの大文字・小文字を区別する", + "Hidden Files": "隠しファイル", + "How to display network errors when the sync server is unreachable.": "同期サーバーに到達できない場合のネットワークエラーの表示方法を設定します。", + "How would you like to configure the connection to your server?": "サーバー接続をどのように設定しますか?", + "I am adding a device to an existing synchronisation setup": "既存の同期構成に端末を追加します", + "I am setting this up for the first time": "はじめて設定します", + "I know my server details, let me enter them": "サーバー情報を把握しているので、自分で入力します", + "If disabled(toggled), chunks will be split on the UI thread (Previous behaviour).": "無効(トグル)にすると、チャンクはUIスレッドで分割されます(以前の動作)。", + "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.": "有効にすると、ファイルごとの効率的なカスタマイズ同期が使用されます。有効化時に小規模な移行が必要です。また、すべてのデバイスをv0.23.18にアップデートする必要があります。一度有効にすると、古いバージョンとの互換性がなくなります。", + "If enabled, chunks will be split into no more than 100 items. However, dedupe is slightly weaker.": "有効にすると、チャンクは最大100項目に分割されます。ただし、重複除去の精度は落ちます。", + "If enabled, newly created chunks are temporarily kept within the document, and graduated to become independent chunks once stabilised.": "有効にすると、新しく作成されたチャンクはドキュメント内に一時的に保持され、安定したら独立したチャンクになります。", + "If enabled, the ⛔ icon will be shown inside the status instead of the file warnings banner. No details will be shown.": "有効にすると、ファイル警告バナーの代わりにステータス内へ ⛔ アイコンのみを表示します。詳細は表示されません。", + "If enabled, the file under 1kb will be processed in the UI thread.": "有効にすると、1kb未満のファイルはUIスレッドで処理されます。", + "If enabled, the notification of hidden files change will be suppressed.": "有効にすると、隠しファイルの変更通知が抑制されます。", + "If this enabled, all chunks will be stored with the revision made from its content. (Previous behaviour)": "有効にすると、すべてのチャンクはコンテンツから作成されたリビジョンと共に保存されます(以前の動作)。", + "If this enabled, All files are handled as case-Sensitive (Previous behaviour).": "有効にすると、すべてのファイルは大文字小文字を区別して処理されます(以前の動作)。", + "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 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.": "このオプションを有効にすると、PouchDBは接続を60秒間保持し、その間に通信がない場合、一度接続を閉じて再接続します。接続を無期限に保持する代わりにこの動作を行います。プロキシ(Cloudflareなど)がリクエストの持続時間を制限している場合に有用ですが、リソース使用量が増加する可能性があります。", + "Ignore and Proceed": "無視して続行", + "Ignore files": "除外ファイル", + "Ignore patterns": "除外パターン", + "Import connection": "接続をインポート", + "Incubate Chunks in Document": "ドキュメント内でチャンクを一時保管する", + "Initialise all journal history, On the next sync, every item will be received and sent.": "すべてのジャーナル履歴を初期化します。次回の同期時に、すべての項目が再受信・再送信されます。", + "Interval (sec)": "秒", + "K.exp": "試験機能", + "K.long_p2p_sync": "%{title_p2p_sync} (%{exp})", + "K.P2P": "%{Peer}-to-%{Peer}", + "K.Peer": "Peer", + "K.ScanCustomization": "Scan customization", + "K.short_p2p_sync": "P2P Sync (%{exp})", + "K.title_p2p_sync": "Peer-to-Peer Sync", + "Keep empty folder": "空フォルダの維持", + "lang_def": "Default", + "lang-de": "Deutsche", + "lang-def": "%{lang_def}", + "lang-es": "Español", + "lang-fr": "Français", + "lang-ja": "日本語", + "lang-ko": "한국어", + "lang-ru": "Русский", + "lang-zh": "简体中文", + "lang-zh-tw": "繁體中文", + "Later": "後で", + "Limit: {datetime} ({timestamp})": "制限: {datetime} ({timestamp})", + "LiveSync could not handle multiple vaults which have same name without different prefix, This should be automatically configured.": "LiveSyncは、接頭辞(プレフィックス)のない同名の保管庫(Vault)を扱うことができません。これは自動的に設定されます。", + "liveSyncReplicator.beforeLiveSync": "LiveSyncの前に、まずOneShotを開始します...", + "liveSyncReplicator.cantReplicateLowerValue": "これ以上低い値ではレプリケーション(複製)できません。", + "liveSyncReplicator.checkingLastSyncPoint": "最後に同期したポイントを探しています。", + "liveSyncReplicator.couldNotConnectTo": "${uri} : ${name}に接続できませんでした\n(${db})", + "liveSyncReplicator.couldNotConnectToRemoteDb": "リモートデータベースに接続できませんでした: ${d}", + "liveSyncReplicator.couldNotConnectToServer": "サーバーに接続できませんでした。", + "liveSyncReplicator.couldNotConnectToURI": "${uri}に接続できませんでした: ${dbRet}", + "liveSyncReplicator.couldNotMarkResolveRemoteDb": "リモートデータベースを解決済みとしてマークできませんでした。", + "liveSyncReplicator.liveSyncBegin": "LiveSyncを開始...", + "liveSyncReplicator.lockRemoteDb": "データ破損を防ぐためリモートデータベースをロック", + "liveSyncReplicator.markDeviceResolved": "このデバイスを『解決済み』としてマーク。", + "liveSyncReplicator.oneShotSyncBegin": "OneShot同期を開始... (${syncMode})", + "liveSyncReplicator.remoteDbCorrupted": "リモートデータベースが新しいか破損しています。self-hosted-livesyncの最新バージョンがインストールされていることを確認してください", + "liveSyncReplicator.remoteDbCreatedOrConnected": "リモートデータベースが作成または接続されました", + "liveSyncReplicator.remoteDbDestroyed": "リモートデータベースが削除されました", + "liveSyncReplicator.remoteDbDestroyError": "リモートデータベースの削除中に問題が発生しました:", + "liveSyncReplicator.remoteDbMarkedResolved": "リモートデータベースが解決済みとしてマークされました。", + "liveSyncReplicator.replicationClosed": "レプリケーション(複製)が終了しました", + "liveSyncReplicator.replicationInProgress": "レプリケーション(複製)は既に進行中です", + "liveSyncReplicator.retryLowerBatchSize": "より小さいバッチサイズで再試行: ${batch_size}/${batches_limit}", + "liveSyncReplicator.unlockRemoteDb": "データ破損を防ぐためリモートデータベースをアンロック", + "liveSyncSetting.errorNoSuchSettingItem": "その設定項目は存在しません: ${key}", + "liveSyncSetting.originalValue": "元の値: ${value}", + "liveSyncSetting.valueShouldBeInRange": "値は ${min} < 値 < ${max} の範囲である必要があります", + "liveSyncSettings.btnApply": "適用", + "Local Database Tweak": "ローカルデータベースの調整", + "Lock": "ロック", + "Lock Server": "サーバーをロック", + "Lock the remote server to prevent synchronization with other devices.": "他のデバイスとの同期を防ぐため、リモートサーバーをロックします。", + "logPane.autoScroll": "自動スクロール", + "logPane.logWindowOpened": "ログウィンドウが開かれました", + "logPane.pause": "一時停止", + "logPane.title": "Self-hosted LiveSync ログ", + "logPane.wrap": "折り返し", + "Maximum delay for batch database updating": "バッチデータベース更新の最大遅延", + "Maximum file size": "最大ファイル容量", + "Maximum Incubating Chunk Size": "保持するチャンクの最大サイズ", + "Maximum Incubating Chunks": "一時保管する最大チャンク数", + "Maximum Incubation Period": "最大保持期限", + "MB (0 to disable).": "MB (0で無効化)。", + "Memory cache": "メモリキャッシュ", + "Memory cache size (by total characters)": "全体でキャッシュする文字数", + "Memory cache size (by total items)": "全体のキャッシュサイズ", + "Merge": "マージ", + "Minimum delay for batch database updating": "バッチデータベース更新の最小遅延", + "Minimum interval for syncing": "同期間隔の最小値", + "moduleCheckRemoteSize.logCheckingStorageSizes": "ストレージサイズを確認中", + "moduleCheckRemoteSize.logCurrentStorageSize": "リモートストレージサイズ: ${measuredSize}", + "moduleCheckRemoteSize.logExceededWarning": "リモートストレージサイズ: ${measuredSize} が ${notifySize} を超過しました", + "moduleCheckRemoteSize.logThresholdEnlarged": "しきい値が ${size}MB に設定されました", + "moduleCheckRemoteSize.msgConfirmRebuild": "これは少し時間がかかる場合があります。本当に今すべてを再構築しますか?", + "moduleCheckRemoteSize.msgDatabaseGrowing": "**データベースが大きくなっています!** でも心配しないでください。リモートストレージの容量が不足する前に対応できます。\n\n| 測定サイズ | 設定サイズ |\n| --- | --- |\n| ${estimatedSize} | ${maxSize} |\n\n> [!MORE]-\n> 長年使用している場合、参照されていないチャンク(つまりゴミ)がデータベースに蓄積している可能性があります。そのため、すべてを再構築することをお勧めします。おそらくかなり小さくなるでしょう。\n>\n> 単純に保管庫の容量が増えている場合は、事前にファイルを整理してからすべてを再構築するのが良いでしょう。Self-hosted LiveSyncは処理速度を上げるため、削除しても実際のデータを削除しません。これはおおまかに[documentation](https://github.com/vrtmrz/obsidian-livesync/blob/main/docs/tech_info.md)に記載されています。\n>\n> 増加を気にしない場合は、通知制限を100MB単位で増やすことができます。これは自分のサーバーで実行している場合に適しています。ただし、定期的にすべてを再構築する方が良いでしょう。\n>\n\n> [!WARNING]\n> すべてを再構築する場合は、すべてのデバイスが同期されていることを確認してください。もちろん、プラグインは可能な限り解決しようと努力はしますけど...\n", + "moduleCheckRemoteSize.msgSetDBCapacity": "リモートストレージの容量が不足する前に対策を講じるため、**最大データベース容量の警告**を設定できます。\nこれを有効にしますか?\n\n> [!MORE]-\n> - 0: ストレージサイズについて警告しない。\n> 自宅サーバーなど、リモートストレージに十分な容量がある場合に推奨されます。ストレージサイズを確認し、手動で再構築できます。\n> - 800: リモートストレージサイズが800MBを超えたら警告。\n> 1GB制限のfly.ioやIBM Cloudantを使用している場合に推奨されます。\n> - 2000: リモートストレージサイズが2GBを超えたら警告。\n\n制限に達した場合、段階的に制限を増やすよう求められます。\n", + "moduleCheckRemoteSize.option2GB": "2GB (標準)", + "moduleCheckRemoteSize.option800MB": "800MB (Cloudant, fly.io)", + "moduleCheckRemoteSize.optionAskMeLater": "後で確認する", + "moduleCheckRemoteSize.optionDismiss": "無視", + "moduleCheckRemoteSize.optionIncreaseLimit": "${newMax}MBに設定", + "moduleCheckRemoteSize.optionNoWarn": "いいえ、警告しないでください", + "moduleCheckRemoteSize.optionRebuildAll": "今すべてを再構築", + "moduleCheckRemoteSize.titleDatabaseSizeLimitExceeded": "リモートストレージサイズが制限を超過しました", + "moduleCheckRemoteSize.titleDatabaseSizeNotify": "データベースサイズ通知の設定", + "moduleInputUIObsidian.defaultTitleConfirmation": "確認", + "moduleInputUIObsidian.defaultTitleSelect": "選択", + "moduleInputUIObsidian.optionNo": "いいえ", + "moduleInputUIObsidian.optionYes": "はい", + "moduleLiveSyncMain.logAdditionalSafetyScan": "追加の安全スキャン中...", + "moduleLiveSyncMain.logLoadingPlugin": "プラグインをロード中...", + "moduleLiveSyncMain.logPluginInitCancelled": "プラグインの初期化がモジュールによってキャンセルされました", + "moduleLiveSyncMain.logPluginVersion": "Self-hosted LiveSync v${manifestVersion} ${packageVersion}", + "moduleLiveSyncMain.logReadChangelog": "LiveSyncが更新されました。変更履歴をお読みください!", + "moduleLiveSyncMain.logSafetyScanCompleted": "追加の安全スキャンが完了しました", + "moduleLiveSyncMain.logSafetyScanFailed": "モジュールで追加の安全スキャンが失敗しました", + "moduleLiveSyncMain.logUnloadingPlugin": "プラグインをアンロード中...", + "moduleLiveSyncMain.logVersionUpdate": "LiveSyncが更新されました。互換性のない更新の場合、すべての自動同期が一時的に無効化されています。有効にする前に、すべてのデバイスが最新の状態であることを確認してください。", + "moduleLiveSyncMain.msgScramEnabled": "Self-hosted LiveSyncは一部のイベントを無視するように設定されています。これは正しいですか?\n\n| タイプ | ステータス | メモ |\n|:---:|:---:|---|\n| ストレージイベント | ${fileWatchingStatus} | すべての変更が無視されます |\n| データベースイベント | ${parseReplicationStatus} | すべての同期された変更が延期されます |\n\nこれらを再開してObsidianを再起動しますか?\n\n> [!DETAILS]-\n> これらのフラグは、プラグインが再構築またはフェッチ中に設定されます。プロセスが異常終了した場合、意図せず保持されることがあります。\n> 不明な場合は、これらのプロセスを再実行してみてください。必ず保管庫をバックアップしてください。\n", + "moduleLiveSyncMain.optionKeepLiveSyncDisabled": "LiveSyncを無効のままにする", + "moduleLiveSyncMain.optionResumeAndRestart": "再開してObsidianを再起動", + "moduleLiveSyncMain.titleScramEnabled": "緊急停止(Scram)が有効", + "moduleLocalDatabase.logWaitingForReady": "しばらくお待ちください...", + "moduleLog.showLog": "ログを表示", + "moduleMigration.docUri": "https://github.com/vrtmrz/obsidian-livesync/blob/main/README.md#how-to-use", + "moduleMigration.fix0256.buttons.checkItLater": "後で確認する", + "moduleMigration.fix0256.buttons.DismissForever": "修正済み、今後確認しない", + "moduleMigration.fix0256.buttons.fix": "修正", + "moduleMigration.fix0256.message": "最近のバグ(v0.25.6)により、一部のファイルが同期データベースに正しく保存されていない可能性があります。\nファイルをスキャンし、修正が必要なものが見つかりました。\n\n**修正準備ができたファイル:**\n\n${files}\n\nこれらのファイルはストレージ上の元ファイルとサイズが一致しており、復元可能です。\n「修正」ボタンをクリックしてデータベースを修正できます。\n\n${messageUnrecoverable}\n\n再実行したい場合は、Hatchから実行できます。\n", + "moduleMigration.fix0256.messageUnrecoverable": "**このデバイスで修正できないファイル:**\n\n${filesNotRecoverable}\n\nこれらのファイルはメタデータに不整合があり、このデバイスでは修正できません(ほとんどの場合、どちらが正しいか判定できません)。\n復元するには、他のデバイスで確認するか、バックアップから手動で復元してください。\n", + "moduleMigration.fix0256.title": "破損ファイルが検出されました", + "moduleMigration.insecureChunkExist.buttons.fetch": "リモートを既に再構築した。リモートからフェッチ", + "moduleMigration.insecureChunkExist.buttons.later": "後で行う", + "moduleMigration.insecureChunkExist.buttons.rebuild": "すべてを再構築", + "moduleMigration.insecureChunkExist.laterMessage": "できるだけ早く対処することを強くお勧めします!", + "moduleMigration.insecureChunkExist.message": "一部のチャンクが安全に保存されておらず、データベースで暗号化されていません。\n**この問題を修正するにはデータベースを再構築してください**。\n\nリモートデータベースがSSLで設定されていない、または安全性の低い認証情報を使用している場合、**機密データが漏洩するリスクがあります**。\n\n注意: すべてのデバイスでSelf-hosted LiveSync v0.25.6以降にアップグレードし、必ず保管庫をバックアップしてください。\n注意2: すべてを再構築とフェッチは時間とトラフィックを消費します。オフピーク時間に安定したネットワークで実行してください。\n", + "moduleMigration.insecureChunkExist.title": "安全でないチャンクが見つかりました!", + "moduleMigration.logBulkSendCorrupted": "チャンクの一括送信が有効にされていましたが、この機能に問題がありました。ご不便をおかけして申し訳ありません。自動的に無効化されました。", + "moduleMigration.logFetchRemoteTweakFailed": "リモートの調整値の取得に失敗しました", + "moduleMigration.logLocalDatabaseNotReady": "何か問題が発生しました!ローカルデータベースが準備できていません", + "moduleMigration.logMigratedSameBehaviour": "以前と同じ動作でdb:${current}に移行しました", + "moduleMigration.logMigrationFailed": "${old}から${current}への移行が失敗またはキャンセルされました", + "moduleMigration.logRedflag2CreationFail": "redflag2の作成に失敗しました", + "moduleMigration.logRemoteTweakUnavailable": "リモートの調整値を取得できませんでした", + "moduleMigration.logSetupCancelled": "セットアップがキャンセルされました。Self-hosted LiveSyncはセットアップを待っています!", + "moduleMigration.msgFetchRemoteAgain": "ご存知のとおり、self-hosted LiveSyncはデフォルトの動作とデータベース構造を変更しました。\n\nご協力のおかげで、リモートデータベースはすでに移行されているようです。おめでとうございます!\n\nしかし、もう少し必要です。このデバイスの設定はリモートデータベースと互換性がありません。リモートデータベースを再度フェッチする必要があります。今すぐリモートから再フェッチしますか?\n\n___注意: 設定が変更され、データベースが再フェッチされるまで同期できません。___\n___注意2: チャンクは完全に不変なので、メタデータと差分のみフェッチできます。___", + "moduleMigration.msgInitialSetup": "このデバイスは**まだセットアップされていません**。セットアッププロセスをご案内します。\n\nすべてのダイアログの内容はクリップボードにコピーできます。後で参照する必要があれば、Obsidianのノートに貼り付けてください。翻訳ツールを使ってお使いの言語に翻訳することもできます。\n\nまず、**セットアップURI**をお持ちですか?\n\n注意: それが何か分からない場合は、[documentation](${URI_DOC})を参照してください。", + "moduleMigration.msgRecommendSetupUri": "セットアップURIを生成して使用することを強くお勧めします。\nこれについて知識がない場合は、[documentation](${URI_DOC})を参照してください(重要です)。\n\n手動でセットアップしますか?", + "moduleMigration.msgSinceV02321": "v0.23.21以降、self-hosted LiveSyncはデフォルトの動作とデータベース構造を変更しました。以下の変更が行われました:\n\n1. **ファイル名の大文字小文字の区別**\n ファイル名の処理が大文字小文字を区別しなくなりました。これは、ファイル名の大文字小文字を効果的に管理しないLinuxとiOS以外のほとんどのプラットフォームにとって有益な変更です。\n (これらの環境では、同じ名前で大文字小文字が異なるファイルに対して警告が表示されます)。\n\n2. **チャンクのリビジョン処理**\n チャンクは不変であり、リビジョンを固定できます。この変更により、ファイル保存のパフォーマンスが向上します。\n\n___しかし、これらの変更を有効にするには、リモートとローカルの両方のデータベースを再構築する必要があります。このプロセスは数分かかります。時間に余裕があるときに行うことをお勧めします。___\n\n- 以前の動作を維持したい場合は、`${KEEP}`を使用してこのプロセスをスキップできます。\n- 時間がない場合は、`${DISMISS}`を選択してください。後で再度確認されます。\n- 別のデバイスでデータベースを再構築した場合は、`${DISMISS}`を選択して再度同期してみてください。差異が検出されたため、再度確認されます。", + "moduleMigration.optionAdjustRemote": "リモートに合わせる", + "moduleMigration.optionDecideLater": "後で決める", + "moduleMigration.optionEnableBoth": "両方を有効にする", + "moduleMigration.optionEnableFilenameCaseInsensitive": "#1のみ有効にする", + "moduleMigration.optionEnableFixedRevisionForChunks": "#2のみ有効にする", + "moduleMigration.optionHaveSetupUri": "はい、持っています", + "moduleMigration.optionKeepPreviousBehaviour": "以前の動作を維持", + "moduleMigration.optionManualSetup": "すべて手動でセットアップ", + "moduleMigration.optionNoAskAgain": "いいえ、後で確認する", + "moduleMigration.optionNoSetupUri": "いいえ、持っていません", + "moduleMigration.optionRemindNextLaunch": "次回起動時にリマインド", + "moduleMigration.optionSetupViaP2P": "%{short_p2p_sync}を使ってセットアップ", + "moduleMigration.optionSetupWizard": "セットアップウィザードへ", + "moduleMigration.optionYesFetchAgain": "はい、再フェッチする", + "moduleMigration.titleCaseSensitivity": "大文字小文字の区別", + "moduleMigration.titleRecommendSetupUri": "セットアップURIの使用を推奨", + "moduleMigration.titleWelcome": "Self-hosted LiveSyncへようこそ", + "moduleObsidianMenu.replicate": "レプリケート", + "More actions": "その他の操作", + "Move remotely deleted files to the trash, instead of deleting.": "リモートで削除されたファイルを削除せずにゴミ箱に移動する。", + "Network warning style": "ネットワーク警告の表示方式", + "New Remote": "新しいリモート", + "No connected device information found. Cancelling Garbage Collection.": "接続済みデバイスの情報が見つかりませんでした。Garbage Collection をキャンセルします。", + "No limit configured": "制限は設定されていません", + "No, please take me back": "いいえ、前に戻ります", + "Node ID": "ノード ID", + "Node Information Missing": "ノード情報がありません", + "Non-Synchronising files": "同期しないファイル", + "Normal Files": "通常ファイル", + "Not all messages have been translated. And, please revert to \"Default\" when reporting errors.": "すべてのメッセージが翻訳されているわけではありません。また、Issue報告の際にはいったん\"Default\"に戻してください", + "Notify all setting files": "すべての設定を通知", + "Notify customized": "カスタマイズが行われたら通知する", + "Notify when other device has newly customized.": "別の端末がカスタマイズを行なったら通知する", + "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.": "1度に処理するバッチの数。デフォルトは40、最小は2。この数値は、どれだけの容量の書類がメモリに保存されるかも定義します。", + "Number of changes to sync at a time. Defaults to 50. Minimum is 2.": "一度に同期する変更の数。デフォルトは50、最小は2。", + "Obsidian version": "Obsidian バージョン", + "obsidianLiveSyncSettingTab.btnApply": "適用", + "obsidianLiveSyncSettingTab.btnCheck": "確認", + "obsidianLiveSyncSettingTab.btnCopy": "コピー", + "obsidianLiveSyncSettingTab.btnDisable": "無効化", + "obsidianLiveSyncSettingTab.btnDiscard": "破棄", + "obsidianLiveSyncSettingTab.btnEnable": "有効化", + "obsidianLiveSyncSettingTab.btnFix": "修正", + "obsidianLiveSyncSettingTab.btnGotItAndUpdated": "理解しました、更新しました。", + "obsidianLiveSyncSettingTab.btnNext": "次へ", + "obsidianLiveSyncSettingTab.btnStart": "開始", + "obsidianLiveSyncSettingTab.btnTest": "テスト", + "obsidianLiveSyncSettingTab.btnUse": "使用", + "obsidianLiveSyncSettingTab.buttonFetch": "フェッチ", + "obsidianLiveSyncSettingTab.buttonNext": "次へ", + "obsidianLiveSyncSettingTab.defaultLanguage": "デフォルト", + "obsidianLiveSyncSettingTab.descConnectSetupURI": "セットアップURIを使用してSelf-hosted LiveSyncをセットアップする推奨方法です。", + "obsidianLiveSyncSettingTab.descCopySetupURI": "新しいデバイスのセットアップにおすすめ!", + "obsidianLiveSyncSettingTab.descEnableLiveSync": "上記の2つのオプションのいずれかを設定するか、すべての設定を手動で完了した後にのみ有効にしてください。", + "obsidianLiveSyncSettingTab.descFetchConfigFromRemote": "既に設定済みのリモートサーバーから必要な設定を取得します。", + "obsidianLiveSyncSettingTab.descManualSetup": "推奨しませんが、セットアップURIがない場合に便利です", + "obsidianLiveSyncSettingTab.descTestDatabaseConnection": "データベース接続を開きます。リモートデータベースが見つからず、データベースを作成する権限がある場合は、データベースが作成されます。", + "obsidianLiveSyncSettingTab.descValidateDatabaseConfig": "データベース設定の潜在的な問題を確認し、修正します。", + "obsidianLiveSyncSettingTab.errAccessForbidden": "❗ アクセスが禁止されています。", + "obsidianLiveSyncSettingTab.errCannotContinueTest": "テストを続行できませんでした。", + "obsidianLiveSyncSettingTab.errCorsCredentials": "❗ cors.credentialsが不正です", + "obsidianLiveSyncSettingTab.errCorsNotAllowingCredentials": "❗ CORSが認証情報を許可していません", + "obsidianLiveSyncSettingTab.errCorsOrigins": "❗ cors.originsが不正です", + "obsidianLiveSyncSettingTab.errEnableCors": "❗ httpd.enable_corsが不正です", + "obsidianLiveSyncSettingTab.errEnableCorsChttpd": "❗ chttpd.enable_corsが不正です", + "obsidianLiveSyncSettingTab.errMaxDocumentSize": "❗ couchdb.max_document_sizeが低すぎます", + "obsidianLiveSyncSettingTab.errMaxRequestSize": "❗ chttpd.max_http_request_sizeが低すぎます", + "obsidianLiveSyncSettingTab.errMissingWwwAuth": "❗ httpd.WWW-Authenticateが不足しています", + "obsidianLiveSyncSettingTab.errRequireValidUser": "❗ chttpd.require_valid_userが不正です。", + "obsidianLiveSyncSettingTab.errRequireValidUserAuth": "❗ chttpd_auth.require_valid_userが不正です。", + "obsidianLiveSyncSettingTab.labelDisabled": "⏹️ : 無効", + "obsidianLiveSyncSettingTab.labelEnabled": "🔁 : 有効", + "obsidianLiveSyncSettingTab.levelAdvanced": " (上級)", + "obsidianLiveSyncSettingTab.levelEdgeCase": " (エッジケース)", + "obsidianLiveSyncSettingTab.levelPowerUser": " (エキスパート)", + "obsidianLiveSyncSettingTab.linkOpenInBrowser": "ブラウザで開く", + "obsidianLiveSyncSettingTab.linkPageTop": "ページトップ", + "obsidianLiveSyncSettingTab.linkTipsAndTroubleshooting": "ヒントとトラブルシューティング", + "obsidianLiveSyncSettingTab.linkTroubleshooting": "/docs/troubleshooting.md", + "obsidianLiveSyncSettingTab.logCannotUseCloudant": "この機能はIBM Cloudantでは使用できません。", + "obsidianLiveSyncSettingTab.logCheckingConfigDone": "設定の確認が完了しました", + "obsidianLiveSyncSettingTab.logCheckingConfigFailed": "設定の確認に失敗しました", + "obsidianLiveSyncSettingTab.logCheckingDbConfig": "データベース設定を確認中", + "obsidianLiveSyncSettingTab.logCheckPassphraseFailed": "エラー: リモートサーバーとのパスフレーズ確認に失敗しました:\n${db}。", + "obsidianLiveSyncSettingTab.logConfiguredDisabled": "設定された同期モード: 無効", + "obsidianLiveSyncSettingTab.logConfiguredLiveSync": "設定された同期モード: LiveSync", + "obsidianLiveSyncSettingTab.logConfiguredPeriodic": "設定された同期モード: 定期", + "obsidianLiveSyncSettingTab.logCouchDbConfigFail": "CouchDB設定: ${title} 失敗", + "obsidianLiveSyncSettingTab.logCouchDbConfigSet": "CouchDB設定: ${title} -> ${key}を${value}に設定", + "obsidianLiveSyncSettingTab.logCouchDbConfigUpdated": "CouchDB設定: ${title} 正常に更新されました", + "obsidianLiveSyncSettingTab.logDatabaseConnected": "データベースに接続しました", + "obsidianLiveSyncSettingTab.logEncryptionNoPassphrase": "パスフレーズなしでは暗号化を有効にできません", + "obsidianLiveSyncSettingTab.logEncryptionNoSupport": "お使いのデバイスは暗号化をサポートしていません。", + "obsidianLiveSyncSettingTab.logErrorOccurred": "エラーが発生しました!!", + "obsidianLiveSyncSettingTab.logEstimatedSize": "推定サイズ: ${size}", + "obsidianLiveSyncSettingTab.logPassphraseInvalid": "パスフレーズが無効です、修正してください。", + "obsidianLiveSyncSettingTab.logPassphraseNotCompatible": "エラー: パスフレーズがリモートサーバーと適合しません!再度確認してください!", + "obsidianLiveSyncSettingTab.logRebuildNote": "同期が無効になりました。必要に応じてフェッチして再有効化してください。", + "obsidianLiveSyncSettingTab.logSelectAnyPreset": "プリセットを選択してください。", + "obsidianLiveSyncSettingTab.msgAreYouSureProceed": "本当に続行しますか?", + "obsidianLiveSyncSettingTab.msgChangesNeedToBeApplied": "変更を適用する必要があります!", + "obsidianLiveSyncSettingTab.msgConfigCheck": "--設定確認--", + "obsidianLiveSyncSettingTab.msgConfigCheckFailed": "設定確認に失敗しました。それでも続行しますか?", + "obsidianLiveSyncSettingTab.msgConnectionCheck": "--接続確認--", + "obsidianLiveSyncSettingTab.msgConnectionProxyNote": "設定確認後も接続確認に問題がある場合は、リバースプロキシの設定を確認してください。", + "obsidianLiveSyncSettingTab.msgCurrentOrigin": "現在のオリジン: ${origin}", + "obsidianLiveSyncSettingTab.msgDiscardConfirmation": "本当に既存の設定とデータベースを破棄しますか?", + "obsidianLiveSyncSettingTab.msgDone": "--完了--", + "obsidianLiveSyncSettingTab.msgEnableCors": "httpd.enable_corsを設定", + "obsidianLiveSyncSettingTab.msgEnableCorsChttpd": "chttpd.enable_corsを設定", + "obsidianLiveSyncSettingTab.msgEnableEncryptionRecommendation": "エンドツーエンド暗号化とパス難読化を有効にすることをお勧めします。暗号化なしで続行してもよろしいですか?", + "obsidianLiveSyncSettingTab.msgFetchConfigFromRemote": "リモートサーバーから設定を取得しますか?", + "obsidianLiveSyncSettingTab.msgGenerateSetupURI": "完了!他のデバイスをセットアップするためのセットアップURIを生成しますか?", + "obsidianLiveSyncSettingTab.msgIfConfigNotPersistent": "サーバー設定が永続的でない場合(例: Dockerで実行中)、ここの値は変更される可能性があります。接続できるようになったら、サーバーのlocal.iniの設定を更新してください。", + "obsidianLiveSyncSettingTab.msgInvalidPassphrase": "暗号化パスフレーズが無効かもしれません。続行してもよろしいですか?", + "obsidianLiveSyncSettingTab.msgNewVersionNote": "アップグレード通知でここに来ましたか?バージョン履歴を確認してください。納得したらボタンをクリックしてください。新しい更新があると再度確認されます。", + "obsidianLiveSyncSettingTab.msgNonHTTPSInfo": "非HTTPS URIとして設定されています。モバイルデバイスでは動作しない可能性があります。", + "obsidianLiveSyncSettingTab.msgNonHTTPSWarning": "非HTTPS URIに接続できません。設定を更新して再試行してください。", + "obsidianLiveSyncSettingTab.msgNotice": "---お知らせ---", + "obsidianLiveSyncSettingTab.msgObjectStorageWarning": "警告: この機能は開発中です。以下の点にご注意ください:\n- 追記専用アーキテクチャ。ストレージを縮小するには再構築が必要です。\n- やや不安定です。\n- 初回同期時、すべての履歴がリモートから転送されます。データ制限と速度に注意してください。\n- ライブ同期は差分のみです。\n\n問題があれば、またはこの機能についてアイデアがあれば、GitHubにIssueを作成してください。\nご協力に感謝します。", + "obsidianLiveSyncSettingTab.msgOriginCheck": "オリジン確認: ${org}", + "obsidianLiveSyncSettingTab.msgRebuildRequired": "変更を適用するにはデータベースの再構築が必要です。変更を適用する方法を選択してください。\n\n
\n凡例\n\n| 記号 | 意味 |\n|: ------ :| ------- |\n| ⇔ | 最新 |\n| ⇄ | 同期してバランスを取る |\n| ⇐,⇒ | 上書きするため転送 |\n| ⇠,⇢ | 反対側から上書きするため転送 |\n\n
\n\n## ${OPTION_REBUILD_BOTH}\n概要: 📄 ⇒¹ 💻 ⇒² 🛰️ ⇢ⁿ 💻 ⇄ⁿ⁺¹ 📄\nこのデバイスの既存ファイルを使用してローカルとリモートの両方のデータベースを再構築します。\n他のデバイスはロックアウトされ、フェッチが必要です。\n## ${OPTION_FETCH}\n概要: 📄 ⇄² 💻 ⇐¹ 🛰️ ⇔ 💻 ⇔ 📄\nローカルデータベースを初期化し、リモートデータベースから取得したデータを使用して再構築します。\nリモートデータベースを再構築した場合も含まれます。\n## ${OPTION_ONLY_SETTING}\n設定のみを保存します。**注意: データ破損につながる可能性があります**。通常、データベースの再構築が必要です。", + "obsidianLiveSyncSettingTab.msgSelectAndApplyPreset": "ウィザードを完了するには、プリセット項目を選択して適用してください。", + "obsidianLiveSyncSettingTab.msgSetCorsCredentials": "cors.credentialsを設定", + "obsidianLiveSyncSettingTab.msgSetCorsOrigins": "cors.originsを設定", + "obsidianLiveSyncSettingTab.msgSetMaxDocSize": "couchdb.max_document_sizeを設定", + "obsidianLiveSyncSettingTab.msgSetMaxRequestSize": "chttpd.max_http_request_sizeを設定", + "obsidianLiveSyncSettingTab.msgSetRequireValidUser": "chttpd.require_valid_user = trueを設定", + "obsidianLiveSyncSettingTab.msgSetRequireValidUserAuth": "chttpd_auth.require_valid_user = trueを設定", + "obsidianLiveSyncSettingTab.msgSettingModified": "設定\"${setting}\"が別のデバイスから変更されました。{HERE}をクリックして設定を再読み込みしてください。変更を無視するには他の場所をクリックしてください。", + "obsidianLiveSyncSettingTab.msgSettingsUnchangeableDuringSync": "これらの設定は同期中に変更できません。ロックを解除するには、\"同期設定\"ですべての同期を無効にしてください。", + "obsidianLiveSyncSettingTab.msgSetWwwAuth": "httpd.WWW-Authenticateを設定", + "obsidianLiveSyncSettingTab.nameApplySettings": "設定を適用", + "obsidianLiveSyncSettingTab.nameConnectSetupURI": "セットアップURIで接続", + "obsidianLiveSyncSettingTab.nameCopySetupURI": "現在の設定をセットアップURIにコピー", + "obsidianLiveSyncSettingTab.nameDisableHiddenFileSync": "隠しファイル同期を無効化", + "obsidianLiveSyncSettingTab.nameDiscardSettings": "既存の設定とデータベースを破棄", + "obsidianLiveSyncSettingTab.nameEnableHiddenFileSync": "隠しファイル同期を有効化", + "obsidianLiveSyncSettingTab.nameEnableLiveSync": "LiveSyncを有効化", + "obsidianLiveSyncSettingTab.nameHiddenFileSynchronization": "隠しファイル同期", + "obsidianLiveSyncSettingTab.nameManualSetup": "手動セットアップ", + "obsidianLiveSyncSettingTab.nameTestConnection": "接続テスト", + "obsidianLiveSyncSettingTab.nameTestDatabaseConnection": "データベース接続テスト", + "obsidianLiveSyncSettingTab.nameValidateDatabaseConfig": "データベース設定を検証", + "obsidianLiveSyncSettingTab.okAdminPrivileges": "✔ 管理者権限があります。", + "obsidianLiveSyncSettingTab.okCorsCredentials": "✔ cors.credentialsは正常です。", + "obsidianLiveSyncSettingTab.okCorsCredentialsForOrigin": "CORS認証情報OK", + "obsidianLiveSyncSettingTab.okCorsOriginMatched": "✔ CORSオリジンOK", + "obsidianLiveSyncSettingTab.okCorsOrigins": "✔ cors.originsは正常です。", + "obsidianLiveSyncSettingTab.okEnableCors": "✔ httpd.enable_corsは正常です。", + "obsidianLiveSyncSettingTab.okEnableCorsChttpd": "✔ chttpd.enable_corsは正常です。", + "obsidianLiveSyncSettingTab.okMaxDocumentSize": "✔ couchdb.max_document_sizeは正常です。", + "obsidianLiveSyncSettingTab.okMaxRequestSize": "✔ chttpd.max_http_request_sizeは正常です。", + "obsidianLiveSyncSettingTab.okRequireValidUser": "✔ chttpd.require_valid_userは正常です。", + "obsidianLiveSyncSettingTab.okRequireValidUserAuth": "✔ chttpd_auth.require_valid_userは正常です。", + "obsidianLiveSyncSettingTab.okWwwAuth": "✔ httpd.WWW-Authenticateは正常です。", + "obsidianLiveSyncSettingTab.optionApply": "適用", + "obsidianLiveSyncSettingTab.optionCancel": "キャンセル", + "obsidianLiveSyncSettingTab.optionCouchDB": "CouchDB", + "obsidianLiveSyncSettingTab.optionDisableAllAutomatic": "すべての自動を無効化", + "obsidianLiveSyncSettingTab.optionFetchFromRemote": "リモートからフェッチ", + "obsidianLiveSyncSettingTab.optionHere": "ここ", + "obsidianLiveSyncSettingTab.optionLiveSync": "LiveSync 同期", + "obsidianLiveSyncSettingTab.optionMinioS3R2": "Minio,S3,R2", + "obsidianLiveSyncSettingTab.optionOkReadEverything": "OK、すべて読みました。", + "obsidianLiveSyncSettingTab.optionOnEvents": "イベント時", + "obsidianLiveSyncSettingTab.optionPeriodicAndEvents": "定期およびイベント時", + "obsidianLiveSyncSettingTab.optionPeriodicWithBatch": "バッチ付き定期", + "obsidianLiveSyncSettingTab.optionRebuildBoth": "このデバイスから両方を再構築", + "obsidianLiveSyncSettingTab.optionSaveOnlySettings": "(危険) 設定のみ保存", + "obsidianLiveSyncSettingTab.panelChangeLog": "変更履歴", + "obsidianLiveSyncSettingTab.panelGeneralSettings": "一般設定", + "obsidianLiveSyncSettingTab.panelPrivacyEncryption": "プライバシーと暗号化", + "obsidianLiveSyncSettingTab.panelRemoteConfiguration": "リモート設定", + "obsidianLiveSyncSettingTab.panelSetup": "セットアップ", + "obsidianLiveSyncSettingTab.serverVersion": "サーバー情報: ${info}", + "obsidianLiveSyncSettingTab.titleActiveRemoteServer": "アクティブなリモートサーバー", + "obsidianLiveSyncSettingTab.titleAppearance": "外観", + "obsidianLiveSyncSettingTab.titleConflictResolution": "競合解決", + "obsidianLiveSyncSettingTab.titleCongratulations": "おめでとうございます!", + "obsidianLiveSyncSettingTab.titleCouchDB": "CouchDB サーバー", + "obsidianLiveSyncSettingTab.titleDeletionPropagation": "削除の伝播", + "obsidianLiveSyncSettingTab.titleEncryptionNotEnabled": "暗号化が有効になっていません", + "obsidianLiveSyncSettingTab.titleEncryptionPassphraseInvalid": "暗号化パスフレーズが無効です", + "obsidianLiveSyncSettingTab.titleExtraFeatures": "追加および上級機能を有効化", + "obsidianLiveSyncSettingTab.titleFetchConfig": "設定を取得", + "obsidianLiveSyncSettingTab.titleFetchConfigFromRemote": "リモートサーバーから設定を取得", + "obsidianLiveSyncSettingTab.titleFetchSettings": "設定の取得", + "obsidianLiveSyncSettingTab.titleHiddenFiles": "隠しファイル", + "obsidianLiveSyncSettingTab.titleLogging": "ログ", + "obsidianLiveSyncSettingTab.titleMinioS3R2": "MinIO、S3、R2", + "obsidianLiveSyncSettingTab.titleNotification": "通知", + "obsidianLiveSyncSettingTab.titleOnlineTips": "オンラインヒント", + "obsidianLiveSyncSettingTab.titleQuickSetup": "クイックセットアップ", + "obsidianLiveSyncSettingTab.titleRebuildRequired": "再構築が必要", + "obsidianLiveSyncSettingTab.titleRemoteConfigCheckFailed": "リモート設定の確認に失敗", + "obsidianLiveSyncSettingTab.titleRemoteServer": "リモートサーバー", + "obsidianLiveSyncSettingTab.titleReset": "リセット", + "obsidianLiveSyncSettingTab.titleSetupOtherDevices": "他のデバイスのセットアップ", + "obsidianLiveSyncSettingTab.titleSynchronizationMethod": "同期方法", + "obsidianLiveSyncSettingTab.titleSynchronizationPreset": "同期プリセット", + "obsidianLiveSyncSettingTab.titleSyncSettings": "同期設定", + "obsidianLiveSyncSettingTab.titleSyncSettingsViaMarkdown": "Markdown経由で設定を同期", + "obsidianLiveSyncSettingTab.titleUpdateThinning": "更新の間引き", + "obsidianLiveSyncSettingTab.warnCorsOriginUnmatched": "⚠ CORS Originが一致しません ${from}->${to}", + "obsidianLiveSyncSettingTab.warnNoAdmin": "⚠ 管理者権限がありません。", + "Ok": "OK", + "Old Algorithm": "旧アルゴリズム", + "Older fallback (Slow, W/O WebAssembly)": "旧フォールバック (低速、WebAssembly なし)", + "Open": "開く", + "Open the dialog": "ダイアログを開く", + "Overwrite": "上書き", + "Overwrite patterns": "上書きパターン", + "Overwrite remote": "リモートを上書き", + "Overwrite remote with local DB and passphrase.": "ローカル DB とパスフレーズでリモートを上書きします。", + "Overwrite Server Data with This Device's Files": "このデバイスのファイルでサーバーデータを上書き", + "P2P.AskPassphraseForDecrypt": "リモートピアから設定が共有されました。設定を復号するためのパスフレーズを入力してください。", + "P2P.AskPassphraseForShare": "リモートピアからこのデバイスの設定が要求されました。設定を共有するためのパスフレーズを入力してください。このダイアログをキャンセルすることでリクエストを無視できます。", + "P2P.DisabledButNeed": "%{title_p2p_sync}は無効になっています。本当に有効にしますか?", + "P2P.FailedToOpen": "シグナリングサーバーへのP2P接続を開けませんでした。", + "P2P.NoAutoSyncPeers": "自動同期ピアが見つかりません。%{long_p2p_sync}ペインでピアを設定してください。", + "P2P.NoKnownPeers": "ピアが検出されていません。他のピアからの接続を待機中...", + "P2P.Note.description": "このレプリケーターは、ピアツーピア接続を使用して、Vaultを他のデバイスと同期することができます。クラウドサービスを使用せずに、他のデバイスとVaultを同期することができます。\nこのレプリケーターはTrysteroをベースにしています。デバイス間の接続を確立するためにシグナリングサーバーを使用します。シグナリングサーバーはデバイス間で接続情報を交換するために使用されます。私たちのデータを知ったり保存したりすることはありません(または、そうあるべきではありません)。\n\nシグナリングサーバーは誰でもホストできます。これは単なるNostrリレーです。簡便さとレプリケーターの動作確認のために、vrtmrzがシグナリングサーバーのインスタンスをホストしています。vrtmrzが提供する実験用サーバーを使用することも、他のサーバーを使用することもできます。\n\nなお、シグナリングサーバーが私たちのデータを保存しなくても、一部のデバイスの接続情報を見ることができます。これにご注意ください。また、他の人が提供するサーバーを使用する場合は注意してください。", + "P2P.Note.important_note": "ピアツーピアレプリケーターの実験的実装", + "P2P.Note.important_note_sub": "この機能はまだ実験段階です。期待通りに動作しない可能性があることにご注意ください。さらに、バグ、セキュリティの問題、その他の問題がある可能性があります。この機能は自己責任でご使用ください。この機能の開発にご協力ください。", + "P2P.Note.Summary": "この機能について(重要な注意事項を含む、一度お読みください)", + "P2P.NotEnabled": "%{title_p2p_sync}が有効になっていません。新しい接続を開くことができません。", + "P2P.P2PReplication": "%{P2P}レプリケーション(複製)", + "P2P.PaneTitle": "%{long_p2p_sync}", + "P2P.ReplicatorInstanceMissing": "P2P同期レプリケーターが見つかりません。設定または有効化されていない可能性があります。", + "P2P.SeemsOffline": "ピア${name}はオフラインのようです。スキップしました。", + "P2P.SyncAlreadyRunning": "P2P同期はすでに実行中です。", + "P2P.SyncCompleted": "P2P同期が完了しました。", + "P2P.SyncStartedWith": "${name}とのP2P同期を開始しました。", + "paneMaintenance.markDeviceResolvedAfterBackup": "バックアップ後にこのデバイスを解決済みにする", + "paneMaintenance.remoteLockedAndDeviceNotAccepted": "リモートデータベースはロックされており、このデバイスはまだ承認されていません。", + "paneMaintenance.remoteLockedResolvedDevice": "リモートデータベースはロックされていますが、このデバイスはすでに承認されています。", + "paneMaintenance.unlockDatabaseReady": "データベースのロックを解除", + "Passphrase": "パスフレーズ", + "Passphrase of sensitive configuration items": "機密性の高い設定項目にパスフレーズを使用", + "password": "パスワード", + "Password": "パスワード", + "Paste a connection string": "接続文字列を貼り付ける", + "Paste the Setup URI generated from one of your active devices.": "稼働中の端末で生成した Setup URI を貼り付けてください。", + "Path Obfuscation": "パスの難読化", + "Patterns to match files for overwriting instead of merging": "マージではなく上書きするファイルを判定するパターン", + "Patterns to match files for syncing": "同期対象ファイルを判定するパターン", + "Peer-to-Peer only": "Peer-to-Peer のみ", + "Peer-to-Peer Synchronisation": "ピアツーピア同期", + "Per-file-saved customization sync": "ファイルごとのカスタマイズ同期", + "Perform": "実行", + "Perform cleanup": "クリーンアップを実行", + "Perform Garbage Collection": "ガーベジコレクションを実行", + "Perform Garbage Collection to remove unused chunks and reduce database size.": "未使用のチャンクを削除し、データベースサイズを削減するためにガーベジコレクションを実行します。", + "Periodic Sync interval": "定時同期の感覚", + "Pick a file to resolve conflict": "競合を解決するファイルを選択", + "Please disable 'Read chunks online' in settings to use Garbage Collection.": "Garbage Collection を使うには、設定で「Read chunks online」を無効にしてください。", + "Please enable 'Compute revisions for chunks' in settings to use Garbage Collection.": "Garbage Collection を使うには、設定で「Compute revisions for chunks」を有効にしてください。", + "Please select 'Cancel' explicitly to cancel this operation.": "この操作を中止するには、明示的に「キャンセル」を選択してください。", + "Please select a method to import the settings from another device.": "別の端末から設定を取り込む方法を選択してください。", + "Please select an option to proceed": "続行するには項目を選択してください", + "Please select the type of server to which you are connecting.": "接続するサーバーの種類を選択してください。", + "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": "このデバイス名を設定してください", + "Plug-in version": "プラグインバージョン", + "Prepare the 'report' to create an issue": "Issue 作成用の「レポート」を準備", + "Presets": "プリセット", + "Proceed Garbage Collection": "Garbage Collection を続行", + "Proceed with Setup URI": "Setup URI で続行", + "Proceeding with Garbage Collection, ignoring missing nodes.": "不足しているノードを無視して Garbage Collection を続行します。", + "Proceeding with Garbage Collection.": "Garbage Collection を実行します。", + "Process small files in the foreground": "小さいファイルを最前面で処理", + "Progress": "進捗", + "PureJS fallback (Fast, W/O WebAssembly)": "PureJS フォールバック (高速、WebAssembly なし)", + "Purge all download/upload cache.": "ダウンロード/アップロードキャッシュをすべて削除します。", + "Purge all journal counter": "すべてのジャーナルカウンターを削除", + "Rebuild local and remote database with local files.": "ローカルファイルを使ってローカルとリモートのデータベースを再構築します。", + "Rebuilding Operations (Remote Only)": "再構築操作 (リモートのみ)", + "Recreate all": "すべて再作成", + "Recreate missing chunks for all files": "すべてのファイルの不足チャンクを再作成", + "RedFlag.Fetch.Method.Desc": "どのようにフェッチしますか?\n- %{RedFlag.Fetch.Method.FetchSafer}\n **低トラフィック**, **高CPU負荷**, **低リスク**\n 推奨条件...\n - ファイルの整合性に不安がある\n - ファイル数がそれほど多くない\n- %{RedFlag.Fetch.Method.FetchSmoother}\n **低トラフィック**, **中程CPU負荷**, **低~中リスク**\n 推奨条件...\n - ファイルがおそらく整合している\n - ファイル数が多い\n- %{RedFlag.Fetch.Method.FetchTraditional}\n **高トラフィック**, **低CPU負荷**, **低~中リスク**\n\n>[!INFO]- 詳細\n> ## %{RedFlag.Fetch.Method.FetchSafer}\n> **低トラフィック**, **高CPU負荷**, **低リスク**\n> このオプションは、リモートからデータをフェッチする前に、既存のローカルファイルを使用してローカルデータベースを作成します。\n> ローカルとリモートの両方に一致するファイルがある場合、差分のみが転送されます。\n> ただし、両方の場所に存在するファイルは最初は競合ファイルとして処理されます。実際に競合していなければ自動的に解決されますが、この処理には時間がかかる場合があります。\n> これは一般的に最も安全な方法で、データ損失のリスクを最小限に抑えます。\n> ## %{RedFlag.Fetch.Method.FetchSmoother}\n> **低トラフィック**, **中程CPU負荷**, **低~中リスク**(操作による)\n> このオプションは、最初にローカルファイルからデータベース用のチャンクを作成し、その後データをフェッチします。そのため、ローカルにないチャンクのみが転送されます。ただし、すべてのメタデータはリモートから取得されます。\n> ローカルファイルは起動時にこのメタデータと比較されます。新しいと判断されたコンテンツ(更新日時による)が古いものを上書きします。この結果はリモートデータベースに同期されます。\n> ローカルファイルが本当に最新のタイムスタンプであれば一般的に安全です。ただし、ファイルのタイムスタンプが新しくてもコンテンツが古い場合(初期の`welcome.md`など)は問題が発生する可能性があります。\n> これは\"%{RedFlag.Fetch.Method.FetchSafer}\"よりCPU使用量が少なく高速ですが、注意しないとデータ損失につながる可能性があります。\n> ## %{RedFlag.Fetch.Method.FetchTraditional}\n> **高トラフィック**, **低CPU負荷**, **低~中リスク**(操作による)\n> すべてのデータがリモートからフェッチされます。\n> %{RedFlag.Fetch.Method.FetchSmoother}と似ていますが、すべてのチャンクがリモートからフェッチされます。\n> これは最も従来のフェッチ方法で、通常最もネットワークトラフィックと時間を消費します。'%{RedFlag.Fetch.Method.FetchSmoother}'オプションと同様のリモートファイル上書きのリスクがあります。\n> ただし、最も歴史があり簡単なアプローチであるため、最も安定した方法と見なされることが多いです。", + "RedFlag.Fetch.Method.FetchSafer": "フェッチ前にローカルデータベースを作成", + "RedFlag.Fetch.Method.FetchSmoother": "フェッチ前にローカルファイルチャンクを作成", + "RedFlag.Fetch.Method.FetchTraditional": "リモートからすべてをフェッチ", + "RedFlag.Fetch.Method.Title": "どのようにフェッチしますか?", + "RedFlag.FetchRemoteConfig.Buttons.Cancel": "いいえ、ローカル設定を使用", + "RedFlag.FetchRemoteConfig.Buttons.Fetch": "はい、リモート設定を取得して適用", + "RedFlag.FetchRemoteConfig.Message": "リモートに保存された設定を取得して、このデバイスに適用しますか?", + "RedFlag.FetchRemoteConfig.Title": "リモート設定の取得", + "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": "ローカルでの変更がデータベースに反映される頻度を下げる(所定の回数まとめて同期する、逐一反映しない)", + "Region": "リージョン", + "Remediation": "是正", + "Remediation Setting Changed": "是正設定が変更されました", + "Remote Database Tweak (In sunset)": "リモートデータベースの調整 (廃止予定)", + "Remote Databases": "リモートデータベース", + "Remote name": "リモート名", + "Remote server type": "リモートの種別", + "Remote Type": "同期方式", + "Rename": "名前を変更", + "Replicator.Dialogue.Locked.Action.Dismiss": "再確認のためキャンセル", + "Replicator.Dialogue.Locked.Action.Fetch": "このデバイスの同期をリセット", + "Replicator.Dialogue.Locked.Action.Unlock": "リモートデータベースのロックを解除", + "Replicator.Dialogue.Locked.Message": "リモートデータベースがロックされています。これはいずれかの端末での再構築が原因です。\nデータベースの破損を避けるため、このデバイスは接続を保留するよう求められています。\n\n3つのオプションがあります:\n\n- %{Replicator.Dialogue.Locked.Action.Fetch}\n 最も推奨される信頼性の高い方法です。ローカルデータベースを一度破棄し、リモートデータベースからすべての同期情報を再取得します。ほとんどの場合、これは安全に実行できます。ただし、時間がかかり、安定したネットワークで実行する必要があります。\n- %{Replicator.Dialogue.Locked.Action.Unlock}\n この方法は、他のレプリケーション(複製)方法ですでに確実に同期されている場合のみ使用できます。単に同じファイルがあるという意味ではありません。確信がない場合は避けてください。\n- %{Replicator.Dialogue.Locked.Action.Dismiss}\n 操作をキャンセルします。次回のリクエスト時に再度確認されます。\n", + "Replicator.Dialogue.Locked.Message.Fetch": "全フェッチがスケジュールされました。プラグインは実行のために再起動されます。", + "Replicator.Dialogue.Locked.Message.Unlocked": "リモートデータベースのロックが解除されました。操作を再試行してください。", + "Replicator.Dialogue.Locked.Title": "ロック中", + "Replicator.Message.Cleaned": "データベースのクリーナップ中です。レプリケーション(複製)はキャンセルされました。", + "Replicator.Message.InitialiseFatalError": "レプリケーターが利用できません。これは致命的なエラーです。", + "Replicator.Message.Pending": "ファイルイベントが保留中です。レプリケーション(複製)はキャンセルされました。", + "Replicator.Message.SomeModuleFailed": "一部のモジュールの失敗によりレプリケーション(複製)がキャンセルされました。", + "Replicator.Message.VersionUpFlash": "更新が検出されました。設定ダイアログを開いて変更ログを確認してください。レプリケーション(複製)はキャンセルされました。", + "Requires restart of Obsidian": "Obsidianの再起動が必要です", + "Requires restart of Obsidian.": "Obsidianの再起動が必要です。", + "Rerun Onboarding Wizard": "オンボーディングウィザードを再実行", + "Rerun the onboarding wizard to set up Self-hosted LiveSync again.": "オンボーディングウィザードを再実行して、Self-hosted LiveSync をもう一度設定します。", + "Rerun Wizard": "ウィザードを再実行", + "Resend": "再送信", + "Resend all chunks to the remote.": "すべてのチャンクをリモートへ再送信します。", + "Reset": "リセット", + "Reset all": "すべてリセット", + "Reset all journal counter": "すべてのジャーナルカウンターをリセット", + "Reset journal received history": "ジャーナル受信履歴をリセット", + "Reset journal sent history": "ジャーナル送信履歴をリセット", + "Reset notification threshold and check the remote database usage": "通知しきい値をリセットしてリモートデータベース使用量を確認", + "Reset received": "受信履歴をリセット", + "Reset sent history": "送信履歴をリセット", + "Reset Synchronisation information": "同期情報をリセット", + "Reset Synchronisation on This Device": "このデバイスの同期状態をリセット", + "Reset the remote storage size threshold and check the remote storage size again.": "リモートストレージ容量のしきい値をリセットし、リモートストレージ容量を再確認します。", + "Resolve All": "すべて解決", + "Resolve all conflicted files": "競合しているすべてのファイルを解決", + "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.": "競合しているすべてのファイルを新しい方の内容で解決します。注意:古い方は上書きされ、復元できません。", + "Restart Now": "今すぐ再起動", + "Restore or reconstruct local database from remote.": "リモートからローカルデータベースを復元または再構築します。", + "Run Doctor": "診断を実行", + "S3/MinIO/R2 Object Storage": "S3/MinIO/R2 オブジェクトストレージ", + "Save settings to a markdown file. You will be notified when new settings arrive. You can set different files by the platform.": "Markdownファイルに設定を保存します。新しい設定が到着すると通知されます。プラットフォームごとに異なるファイルを設定できます。", + "Saving will be performed forcefully after this number of seconds.": "この秒数後に強制的に保存されます。", + "Scan a QR Code (Recommended for mobile)": "QR コードをスキャンする(モバイル推奨)", + "Scan changes on customization sync": "カスタマイズされた同期時に、変更をスキャンする", + "Scan customization automatically": "自動的にカスタマイズをスキャン", + "Scan customization before replicating.": "レプリケーション(複製)前に、カスタマイズをスキャン", + "Scan customization every 1 minute.": "カスタマイズのスキャンを1分ごとに行う", + "Scan customization periodically": "定期的にカスタマイズをスキャン", + "Scan for Broken files": "破損ファイルをスキャン", + "Scan for hidden files before replication": "レプリケーション(複製)開始前に、隠しファイルのスキャンを行う", + "Scan hidden files periodically": "定期的に隠しファイルのスキャンを行う", + "Scan the QR code displayed on an active device using this device's camera.": "稼働中の端末に表示された QR コードを、この端末のカメラで読み取ってください。", + "Schedule and Restart": "予約して再起動", + "Scram Switches": "緊急対応スイッチ", + "Scram!": "緊急停止", + "Seconds, 0 to disable": "秒数、0で無効", + "Seconds. Saving to the local database will be delayed until this value after we stop typing or saving.": "秒。入力や保存を停止してからこの値の間、ローカルデータベースへの保存が遅延されます。", + "Secret Key": "シークレットキー", + "Select the database adapter to use.": "使用するデータベースアダプターを選択します。", + "Send": "送信", + "Send chunks": "チャンクを送信", + "Server URI": "URI", + "Setting.GenerateKeyPair.Desc": "キーペアを生成しました!\n\n注意: このキーペアは再度表示されません。安全な場所に保存してください。紛失した場合は、新しいキーペアを生成する必要があります。\n注意2: 公開鍵はspki形式、秘密鍵はpkcs8形式です。利便性のため、公開鍵の改行は`\\n`に変換されています。\n注意3: 公開鍵はリモートデータベースに、秘密鍵はローカルデバイスに設定してください。\n\n>[!FOR YOUR EYES ONLY]-\n>
\n>\n> ### 公開鍵\n> ```\n${public_key}\n> ```\n>\n> ### 秘密鍵\n> ```\n${private_key}\n> ```\n>\n>
\n\n>[!Both for copying]-\n>\n>
\n>\n> ```\n${public_key}\n${private_key}\n> ```\n>\n>
\n\n", + "Setting.GenerateKeyPair.Title": "新しいキーペアが生成されました!", + "Setting.TroubleShooting": "トラブルシューティング", + "Setting.TroubleShooting.Doctor": "設定診断ツール", + "Setting.TroubleShooting.Doctor.Desc": "最適でない設定を検出します。(マイグレーション時と同じ)", + "Setting.TroubleShooting.ScanBrokenFiles": "破損ファイルのスキャン", + "Setting.TroubleShooting.ScanBrokenFiles.Desc": "データベースに正しく保存されていないファイルをスキャンします。", + "SettingTab.Message.AskRebuild": "変更にはリモートデータベースからのフェッチが必要です。続行しますか?", + "Setup URI dialog cancelled.": "Setup URI ダイアログはキャンセルされました。", + "Setup.Apply.Buttons.ApplyAndFetch": "適用してフェッチ", + "Setup.Apply.Buttons.ApplyAndMerge": "適用してマージ", + "Setup.Apply.Buttons.ApplyAndRebuild": "適用して再構築", + "Setup.Apply.Buttons.Cancel": "破棄してキャンセル", + "Setup.Apply.Buttons.OnlyApply": "適用のみ", + "Setup.Apply.Message": "新しい設定の準備ができました。適用に進みましょう。\n適用方法はいくつかあります:\n\n- 適用してフェッチ\n このデバイスを新しいクライアントとして設定します。適用後、リモートサーバーから同期します。\n- 適用してマージ\n 既にファイルがあるデバイスで設定します。ローカルファイルを処理し、差分を転送します。競合が発生する場合があります。\n- 適用して再構築\n ローカルファイルを使用してリモートを再構築します。これは通常、サーバーが破損した場合や最初からやり直したい場合に行います。\n 他のデバイスはロックされ、再フェッチが必要になります。\n- 適用のみ\n 適用のみを行います。再構築が必要な場合、競合が発生する可能性があります。", + "Setup.Apply.Title": "${method}からの新しい設定を適用", + "Setup.Apply.WarningRebuildRecommended": "注意: 設定の調整後、再構築が必要と判断されました。インポートのみは推奨されません。", + "Setup.Doctor.Buttons.No": "いいえ、URIの設定をそのまま使用", + "Setup.Doctor.Buttons.Yes": "はい、診断ツールに相談する", + "Setup.Doctor.Message": "Self-hosted LiveSyncは徐々に歴史が長くなり、一部の推奨設定が変更されています。\n\nセットアップは、これを行う非常に良い機会です。\n\nインポートされた設定が最新の状態と比較して最適かどうかを確認するために、診断ツールを実行しますか?", + "Setup.Doctor.Title": "診断ツールに相談しますか?", + "Setup.FetchRemoteConf.Buttons.Fetch": "はい、設定を取得", + "Setup.FetchRemoteConf.Buttons.Skip": "いいえ、URIの設定を使用", + "Setup.FetchRemoteConf.Message": "既に他のデバイスと同期したことがある場合、リモートデータベースには同期されたデバイス間の適切な設定値が保存されています。プラグインは堅牢な設定のためにそれらを取得したいと考えています。\n\nただし、1つ確認が必要です。現在、ネットワークに安全にアクセスして設定を取得できる状況ですか?\n\n注意: リモートデータベースがSSL証明書でホストされており、ネットワークが侵害されていなければ、ほとんどの場合安全に実行できます。", + "Setup.FetchRemoteConf.Title": "リモートデータベースから設定を取得しますか?", + "Setup.QRCode": "設定を転送するためのQRコードを生成しました。スマートフォンや他のデバイスでQRコードをスキャンしてください。\n注意: QRコードは暗号化されていないため、開く際は注意してください。\n\n>[!FOR YOUR EYES ONLY]-\n>
${qr_image}
", + "Setup.RemoteE2EE.AdvancedTitle": "詳細設定", + "Setup.RemoteE2EE.AlgorithmWarning": "暗号化アルゴリズムを変更すると、別のアルゴリズムで暗号化された既存データにはアクセスできなくなります。すべての端末で同じアルゴリズムを使うよう設定し、データにアクセスできる状態を維持してください。", + "Setup.RemoteE2EE.ButtonCancel": "キャンセル", + "Setup.RemoteE2EE.ButtonProceed": "進む", + "Setup.RemoteE2EE.DefaultAlgorithmDesc": "ほとんどの場合は、既定のアルゴリズム(${algorithm})をそのまま使用してください。この設定が必要になるのは、既存の Vault が別の形式で暗号化されている場合のみです。", + "Setup.RemoteE2EE.Guidance": "エンドツーエンド暗号化の設定を行ってください。", + "Setup.RemoteE2EE.LabelEncrypt": "エンドツーエンド暗号化", + "Setup.RemoteE2EE.LabelEncryptionAlgorithm": "暗号化アルゴリズム", + "Setup.RemoteE2EE.LabelObfuscateProperties": "プロパティを難読化", + "Setup.RemoteE2EE.MultiDestinationWarning": "複数の同期先へ接続する場合でも、この設定は同一である必要があります。", + "Setup.RemoteE2EE.ObfuscatePropertiesDesc": "プロパティ(ファイルパス、サイズ、作成日時、更新日時など)を難読化すると、リモートサーバー上のファイルやフォルダーの構造や名前を特定しにくくできるため、追加の保護層になります。これによりプライバシーが守られ、権限のない第三者がデータに関する情報を推測しにくくなります。", + "Setup.RemoteE2EE.PassphraseValidationLine1": "エンドツーエンド暗号化のパスフレーズは、実際に同期処理が開始されるまで検証されない点にご注意ください。これはデータを保護するためのセキュリティ対策です。", + "Setup.RemoteE2EE.PassphraseValidationLine2": "そのため、サーバー情報を手動で設定する際は細心の注意を払ってください。誤ったパスフレーズを入力すると、サーバー上のデータが破損します。これは意図された動作ですので、あらかじめご理解ください。", + "Setup.RemoteE2EE.PlaceholderPassphrase": "パスフレーズを入力してください", + "Setup.RemoteE2EE.StronglyRecommendedLine1": "エンドツーエンド暗号化を有効にすると、データはリモートサーバーへ送信される前にこの端末上で暗号化されます。つまり、たとえ誰かがサーバーへアクセスできても、パスフレーズがなければデータを読むことはできません。他の端末でデータを復号する際にも必要になるため、パスフレーズは必ず覚えておいてください。", + "Setup.RemoteE2EE.StronglyRecommendedLine2": "また、Peer-to-Peer 同期を使用している場合でも、将来ほかの方式へ切り替えてリモートサーバーへ接続するときには、この設定が使われます。", + "Setup.RemoteE2EE.StronglyRecommendedTitle": "強く推奨", + "Setup.RemoteE2EE.Title": "エンドツーエンド暗号化", + "Setup.ScanQRCode.ButtonClose": "このダイアログを閉じる", + "Setup.ScanQRCode.Guidance": "既存の端末から設定を取り込むには、以下の手順に従ってください。", + "Setup.ScanQRCode.Step1": "この端末では、この Vault を開いたままにしてください。", + "Setup.ScanQRCode.Step2": "元の端末で Obsidian を開きます。", + "Setup.ScanQRCode.Step3": "元の端末でコマンドパレットから「設定を QR コードとして表示」を実行します。", + "Setup.ScanQRCode.Step4": "この端末でカメラアプリに切り替えるか QR コードスキャナーを使って、表示された QR コードを読み取ってください。", + "Setup.ScanQRCode.Title": "QRコードをスキャン", + "Setup.ShowQRCode": "QRコードを表示", + "Setup.ShowQRCode.Desc": "設定を転送するためのQRコードを表示します。", + "Setup.UseSetupURI.ButtonCancel": "キャンセル", + "Setup.UseSetupURI.ButtonProceed": "設定をテストして続行", + "Setup.UseSetupURI.ErrorFailedToParse": "Setup URI を解析できませんでした。URI とパスフレーズを確認してください。", + "Setup.UseSetupURI.ErrorPassphraseRequired": "Vault のパスフレーズを入力してください。", + "Setup.UseSetupURI.GuidanceLine1": "サーバーのセットアップ時または別の端末で生成された Setup URI と、Vault のパスフレーズを入力してください。", + "Setup.UseSetupURI.GuidanceLine2": "コマンドパレットで「設定を新しい Setup URI としてコピー」を実行すると、新しい Setup URI を生成できます。", + "Setup.UseSetupURI.InvalidInfo": "Setup URI が無効です。内容を確認して再試行してください。", + "Setup.UseSetupURI.LabelPassphrase": "Vault のパスフレーズ", + "Setup.UseSetupURI.LabelSetupURI": "Setup URI", + "Setup.UseSetupURI.PlaceholderPassphrase": "Vault のパスフレーズを入力してください", + "Setup.UseSetupURI.Title": "Setup URI を入力", + "Setup.UseSetupURI.ValidInfo": "Setup URI は有効で、使用できます。", + "Should we keep folders that don't have any files inside?": "中にファイルがないフォルダーを保持しますか?", + "Should we only check for conflicts when a file is opened?": "ファイルを開いたときのみ競合をチェックしますか?", + "Should we prompt you about conflicting files when a file is opened?": "ファイルを開いたときに競合ファイルについて確認を求めますか?", + "Should we prompt you for every single merge, even if we can safely merge automatcially?": "自動的に安全にマージできる場合でも、すべてのマージについて確認を求めますか?", + "Show full banner": "完全なバナーを表示", + "Show only notifications": "通知のみ表示", + "Show status as icons only": "ステータス表示をアイコンのみにする", + "Show status icon instead of file warnings banner": "ファイル警告バナーの代わりにステータスアイコンを表示", + "Show status inside the editor": "ステータスをエディタ内に表示", + "Show status on the status bar": "ステータスバーに、ステータスを表示", + "Show verbose log. Please enable if you report an issue.": "エラー以外の詳細ログ項目も表示する。問題が発生した場合は有効にしてください。", + "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.": "一部のデバイスで進捗値が異なっています(最大: ${maxProgress}、最小: ${minProgress})。\nこれは一部のデバイスで同期が完了していない可能性を示しており、競合の原因になることがあります。続行する前に、すべてのデバイスが同期済みであることを確認することを強くおすすめします。", + "Starts synchronisation when a file is saved.": "ファイルが保存されたときに同期を開始します。", + "Stop reflecting database changes to storage files.": "データベースの変更をストレージファイルに反映させない", + "Stop watching for file changes.": "監視の停止", + "Suppress notification of hidden files change": "隠しファイルの変更通知を抑制", + "Suspend database reflecting": "データベース反映の一時停止", + "Suspend file watching": "監視の一時停止", + "Switch to IDB": "IDB に切り替える", + "Switch to IndexedDB": "IndexedDB に切り替える", + "Sync after merging file": "ファイルがマージ(統合)された時に同期", + "Sync automatically after merging files": "ファイルのマージ後に自動的に同期", + "Sync Mode": "同期モード", + "Sync on Editor Save": "エディタでの保存時に、同期されます", + "Sync on File Open": "ファイルを開いた時に同期", + "Sync on Save": "保存時に同期", + "Sync on Startup": "起動時同期", + "Synchronisation utilising journal files. You must have set up an S3/MinIO/R2 compatible object storage.": "ジャーナルファイルを利用する同期方式です。S3/MinIO/R2 互換のオブジェクトストレージを事前に構成しておく必要があります。", + "Synchronising files": "同期するファイル", + "Syncing": "同期", + "Target patterns": "対象パターン", + "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 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.": "次の承認済みノードにはノード情報がありません:\n- ${missingNodes}\n\nこれは、それらがしばらく接続されていないか、古いバージョンのままになっていることを示しています。\n可能であれば、まずすべてのデバイスを更新することをおすすめします。すでに使用していないデバイスがある場合は、リモートを一度ロックすることで承認済みノードをすべてクリアできます。", + "The Hash algorithm for chunk IDs": "チャンクIDのハッシュアルゴリズム", + "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 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.": "イベント発生時の自動同期における最小間隔です。", + "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.": "URI を持っていない場合や、詳細設定を手動で行いたいユーザー向けの上級者オプションです。", + "This is the most suitable synchronisation method for the design. All functions are available. You must have set up a CouchDB instance.": "この設計に最も適した同期方式です。すべての機能が利用できます。CouchDB インスタンスを事前に構成しておく必要があります。", + "This passphrase will not be copied to another device. It will be set to `Default` until you configure it again.": "このパスフレーズは他のデバイスにコピーされません。再度設定するまで`Default`に設定されます。", + "This will recreate chunks for all files. If there were missing chunks, this may fix the errors.": "すべてのファイルについてチャンクを再作成します。欠損しているチャンクがあった場合、エラーが解消される可能性があります。", + "Transfer Tweak": "転送の調整", + "TweakMismatchResolve.Action.Dismiss": "無視", + "TweakMismatchResolve.Action.UseConfigured": "設定済みの設定を使用", + "TweakMismatchResolve.Action.UseMine": "リモートデータベースの設定を更新", + "TweakMismatchResolve.Action.UseMineAcceptIncompatible": "リモートデータベースの設定を更新するがそのまま維持", + "TweakMismatchResolve.Action.UseMineWithRebuild": "リモートデータベースの設定を更新して再構築", + "TweakMismatchResolve.Action.UseRemote": "このデバイスに設定を適用", + "TweakMismatchResolve.Action.UseRemoteAcceptIncompatible": "このデバイスに設定を適用し、非互換性を無視", + "TweakMismatchResolve.Action.UseRemoteWithRebuild": "このデバイスに設定を適用し、再フェッチ", + "TweakMismatchResolve.Message.Main": "\nリモートデータベースの設定は以下の通りです。これらの値は、このデバイスと少なくとも1回同期された他のデバイスによって設定されています。\n\nこれらの設定を使用する場合は、%{TweakMismatchResolve.Action.UseConfigured}を選択してください。\nこのデバイスの設定を維持する場合は、%{TweakMismatchResolve.Action.Dismiss}を選択してください。\n\n${table}\n\n>[!TIP]\n> すべての設定を同期したい場合は、この機能で最小限の設定を適用した後、`Sync settings via markdown`を使用してください。\n\n${additionalMessage}", + "TweakMismatchResolve.Message.MainTweakResolving": "設定がリモートサーバーの設定と一致しません。\n\n以下の設定が一致している必要があります:\n\n${table}\n\n判断をお知らせください。\n\n${additionalMessage}", + "TweakMismatchResolve.Message.UseRemote.WarningRebuildRecommended": "\n>[!NOTICE]\n> 一部の変更は互換性がありますが、追加のストレージと転送量を消費する可能性があります。再構築をお勧めします。ただし、再構築は現時点では実行されない場合がありますが、将来のメンテナンスで実装される可能性があります。\n> ***適用には時間と安定したネットワーク接続が必要です!***", + "TweakMismatchResolve.Message.UseRemote.WarningRebuildRequired": "\n>[!WARNING]\n> 一部のリモート設定はこのデバイスのローカルデータベースと互換性がありません。ローカルデータベースの再構築が必要です。\n> ***適用には時間と安定したネットワーク接続が必要です!***", + "TweakMismatchResolve.Message.WarningIncompatibleRebuildRecommended": "\n>[!NOTICE]\n> ローカルデータベースとリモートデータベースの非互換性を引き起こす値の違いが検出されました。\n> 一部の変更は互換性がありますが、追加のストレージと転送量を消費する可能性があります。再構築をお勧めします。ただし、再構築は現時点では実行されない場合がありますが、将来のメンテナンスで実装される可能性があります。\n> 再構築を行う場合は数分以上かかります。**今実行しても安全か確認してください。**", + "TweakMismatchResolve.Message.WarningIncompatibleRebuildRequired": "\n>[!WARNING]\n> ローカルデータベースとリモートデータベースの非互換性を引き起こす値の違いが検出されました。\n> ローカルまたはリモートの再構築が必要です。どちらも数分以上かかります。**今実行しても安全か確認してください。**", + "TweakMismatchResolve.Table": "| 値の名前 | このデバイス | リモート |\n|: --- |: ---- :|: ---- :|\n${rows}\n\n", + "TweakMismatchResolve.Table.Row": "| ${name} | ${self} | ${remote} |", + "TweakMismatchResolve.Title": "設定の不一致が検出されました", + "TweakMismatchResolve.Title.TweakResolving": "設定の不一致が検出されました", + "TweakMismatchResolve.Title.UseRemoteConfig": "リモート設定を使用", + "Unique name between all synchronized devices. To edit this setting, please disable customization sync once.": "同期するすべての端末間で重複しない(一意の)名前。この設定を変更する場合、カスタマイズ同期を無効にしてください。", + "Use a custom passphrase": "カスタムパスフレーズを使う", + "Use a Setup URI (Recommended)": "Setup URI を使う(推奨)", + "Use Custom HTTP Handler": "カスタムHTTPハンドラーの利用", + "Use dynamic iteration count": "動的な繰り返し回数", + "Use Segmented-splitter": "セグメント分割を使用", + "Use splitting-limit-capped chunk splitter": "分割制限付きチャンク分割を使用", + "Use the trash bin": "ゴミ箱を使用", + "Use timeouts instead of heartbeats": "ハートビートの代わりにタイムアウトを使用", + "username": "ユーザー名", + "Username": "ユーザー名", + "Verbose Log": "エラー以外のログ項目", + "Verify all": "すべて検証", + "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.": "警告!これはパフォーマンスに重大な影響を与えます。また、ログはデフォルト名では同期されません。ログには機密情報が含まれることが多いため、注意してください。", + "We cannot change the device name while this feature is enabled. Please disable this feature to change the device name.": "この機能が有効な間はデバイス名を変更できません。変更するにはこの機能を無効にしてください。", + "We will now guide you through a few questions to simplify the synchronisation setup.": "これからいくつかの質問に沿って、同期設定を簡単に進めます。", + "We will now proceed with the server configuration.": "次にサーバー設定を進めます。", + "Welcome to Self-hosted LiveSync": "Self-hosted LiveSync へようこそ", + "When you save a file in the editor, start a sync automatically": "エディタでファイルを保存すると、自動的に同期を開始します", + "Write credentials in the file": "認証情報のファイル内保存", + "Write logs into the file": "ファイルにログを記録", + "xxhash32 (Fast but less collision resistance)": "xxhash32 (高速ですが衝突耐性は低め)", + "xxhash64 (Fastest)": "xxhash64 (最速)", + "Yes, I want to add this device to my existing synchronisation": "はい、この端末を既存の同期に追加します", + "Yes, I want to set up a new synchronisation": "はい、新しい同期を設定します", + "You are adding this device to an existing synchronisation setup.": "この端末を既存の同期構成に追加しようとしています。" +} diff --git a/src/common/messagesJson/ko.json b/src/common/messagesJson/ko.json new file mode 100644 index 00000000..b498d203 --- /dev/null +++ b/src/common/messagesJson/ko.json @@ -0,0 +1,798 @@ +{ + "(Active)": "(활성)", + "(BETA) Always overwrite with a newer file": "(베타) 항상 새로운 파일로 덮어쓰기", + "(Beta) Use ignore files": "(베타) 제외 규칙 파일 사용", + "(Days passed, 0 to disable automatic-deletion)": "(지난 일수, 0으로 설정하면 자동 삭제 비활성화)", + "(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.": "(예: 청크를 원격에서 읽음) 이 옵션을 활성화하면, LiveSync는 청크를 로컬에 복제하지 않고 원격에서 직접 읽습니다. 커스텀 청크 크기를 키우는 것을 권장합니다.", + "(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) 이 값이 설정되면, 이보다 큰 로컬 및 원격 파일의 변경 사항은 건너뜁니다. 파일이 다시 작아지면 더 새로운 파일이 사용됩니다.", + "(Mega chars)": "(메가 문자)", + "(Not recommended) If set, credentials will be stored in the file.": "(권장하지 않음) 설정한 경우 자격 증명이 파일에 저장됩니다.", + "(Obsolete) Use an old adapter for compatibility": "(사용 중단) 호환성을 위해 이전 어댑터 사용", + "(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.": "(정규식) 설정하면 이 패턴과 일치하는 로컬 및 원격 파일 변경은 모두 건너뜁니다.", + "(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.": "(다른 컴퓨터나 스마트폰에서 이미 동기화를 사용 중인 경우 선택하세요.) 이 장치를 기존 LiveSync 구성에 추가하려는 경우에 적합합니다。", + "(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.": "(이 장치를 첫 번째 동기화 장치로 설정하는 경우 선택하세요.) LiveSync를 처음 사용하며 처음부터 설정하려는 경우에 적합합니다。", + "> [!INFO]- The connected devices have been detected as follows:\n${devices}": "> [!INFO]- 다음 연결된 기기가 감지되었습니다:\n${devices}", + "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.": "설정 URI는 서버 주소와 인증 정보를 포함한 단일 문자열입니다. 서버 설치 스크립트가 URI를 생성했다면 이를 사용하면 간단하고 안전하게 구성할 수 있습니다。", + "Access Key": "액세스 키", + "Activate": "활성화", + "Add default patterns": "기본 패턴 추가", + "Add new connection": "연결 추가", + "All devices have the same progress value (${progress}). Your devices seem to be synchronised. And be able to proceed with Garbage Collection.": "모든 기기의 진행 값이 동일합니다(${progress}). 기기들이 동기화된 것으로 보이므로 Garbage Collection을 진행할 수 있습니다.", + "Always prompt merge conflicts": "항상 병합 충돌 알림", + "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.": "데이터베이스 사용량을 분석하고 직접 진단할 수 있도록 TSV 보고서를 생성합니다. 생성된 보고서는 원하는 스프레드시트에 붙여 넣어 확인할 수 있습니다.", + "Apply Latest Change if Conflicting": "충돌 시 최신 변경 사항 적용", + "Apply preset configuration": "프리셋 구성 적용", + "Ask a passphrase at every launch": "시작할 때마다 암호문구 묻기", + "Automatically Sync all files when opening Obsidian.": "Obsidian을 열 때 모든 파일을 자동으로 동기화합니다.", + "Back": "뒤로", + "Back to non-configured": "미구성 상태로 되돌리기", + "Batch database update": "일괄 데이터베이스 업데이트", + "Batch limit": "일괄 제한", + "Batch size": "일괄 크기", + "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.": "v0.17.16 이전에는 로컬 데이터베이스에 이전 어댑터를 사용했습니다. 이제는 새로운 어댑터를 권장합니다. 하지만 로컬 데이터베이스 재구축이 필요합니다. 충분한 시간이 있을 때 이 토글을 비활성화해 주세요. 활성화된 상태로 두면 원격 데이터베이스에서 가져올 때도 이를 비활성화하라는 메시지가 나타납니다.", + "Bucket Name": "버킷 이름", + "Cancel": "취소", + "Cancel Garbage Collection": "Garbage Collection 취소", + "Check and convert non-path-obfuscated files": "경로 난독화되지 않은 파일 검사 및 변환", + "Check for documents that have not been converted to path-obfuscated IDs and convert them if necessary.": "아직 경로 난독화 ID로 변환되지 않은 문서를 확인하고 필요하면 변환합니다.", + "cmdConfigSync.showCustomizationSync": "사용자 설정 동기화 표시", + "Comma separated `.gitignore, .dockerignore`": "쉼표로 구분된 `.gitignore, .dockerignore`", + "Compaction in progress on remote database...": "원격 데이터베이스에서 압축을 진행 중입니다...", + "Compaction on remote database completed successfully.": "원격 데이터베이스 압축이 성공적으로 완료되었습니다.", + "Compaction on remote database failed.": "원격 데이터베이스 압축에 실패했습니다.", + "Compaction on remote database timed out.": "원격 데이터베이스 압축 시간이 초과되었습니다.", + "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 (Database structure)": "호환성 (데이터베이스 구조)", + "Compatibility (Internal API Usage)": "호환성 (내부 API 사용)", + "Compatibility (Metadata)": "호환성 (메타데이터)", + "Compatibility (Remote Database)": "호환성 (원격 데이터베이스)", + "Compatibility (Trouble addressed)": "호환성 (문제 대응)", + "Compute revisions for chunks": "청크에 대한 리비전 계산", + "Configuration Encryption": "구성 암호화", + "Configure": "설정", + "Configure And Change Remote": "원격 구성 및 변경", + "Configure E2EE": "E2EE 구성", + "Configure Remote": "원격 구성", + "Configure the same server information as your other devices again, manually, very advanced users only.": "다른 장치와 동일한 서버 정보를 다시 수동으로 입력합니다. 고급 사용자 전용입니다。", + "Connection Method": "연결 방법", + "Continue to CouchDB setup": "CouchDB 설정으로 계속", + "Continue to Peer-to-Peer only setup": "Peer-to-Peer 전용 설정으로 계속", + "Continue to S3/MinIO/R2 setup": "S3/MinIO/R2 설정으로 계속", + "Copy": "복사", + "Copy Report to clipboard": "보고서를 클립보드에 복사", + "CouchDB Connection Tweak": "CouchDB 연결 조정", + "Cross-platform": "크로스 플랫폼", + "Current adapter: {adapter}": "현재 어댑터: {adapter}", + "Customization Sync": "사용자 지정 동기화", + "Customization Sync (Beta3)": "사용자 지정 동기화 (Beta3)", + "Data Compression": "데이터 압축", + "Database Adapter": "데이터베이스 어댑터", + "Database Name": "데이터베이스 이름", + "Database suffix": "데이터베이스 접미사", + "Default": "기본값", + "Delay conflict resolution of inactive files": "비활성 파일의 충돌 해결 지연", + "Delay merge conflict prompt for inactive files.": "비활성 파일의 병합 충돌 프롬프트 지연.", + "Delete": "삭제", + "Delete all customization sync data": "모든 사용자 정의 동기화 데이터 삭제", + "Delete all data on the remote server.": "원격 서버의 모든 데이터를 삭제합니다.", + "Delete local database to reset or uninstall Self-hosted LiveSync": "Self-hosted LiveSync를 초기화하거나 제거하기 위해 로컬 데이터베이스를 삭제", + "Delete old metadata of deleted files on start-up": "시작 시 삭제된 파일의 오래된 메타데이터 삭제", + "Delete Remote Configuration": "원격 구성 삭제", + "Delete remote configuration '{name}'?": "'{name}' 원격 구성을 삭제할까요?", + "desktop": "데스크톱", + "Developer": "개발자", + "Device": "기기", + "Device name": "기기 이름", + "Device Setup Method": "장치 설정 방법", + "dialog.yourLanguageAvailable": "Self-hosted LiveSync에서 귀하의 언어로 번역을 제공하므로 %{Display language} 설정이 활성화되었습니다.\n\n참고: 모든 메시지가 번역되지는 않습니다. 귀하의 기여를 기다리고 있습니다!\n참고 2: 이슈를 생성하는 경우 **%{lang-def}로 되돌린 후** 스크린샷, 메시지, 로그를 가져와 주세요. 이는 설정 대화 상자에서 할 수 있습니다.\n간편하게 사용하실 수 있었으면 좋겠습니다!", + "dialog.yourLanguageAvailable.btnRevertToDefault": "%{lang-def} 유지", + "dialog.yourLanguageAvailable.Title": " 번역을 사용할 수 있습니다!", + "Disables all synchronization and restart.": "모든 동기화를 비활성화하고 재시작합니다.", + "Disables logging, only shows notifications. Please disable if you report an issue.": "로깅을 비활성화하고 알림만 표시합니다. 문제를 신고하는 경우 비활성화해 주세요.", + "Display Language": "표시 언어", + "Display name": "표시 이름", + "Do not check configuration mismatch before replication": "복제 전 구성 불일치 확인 안 함", + "Do not keep metadata of deleted files.": "삭제된 파일의 메타데이터를 보관하지 않습니다.", + "Do not split chunks in the background": "백그라운드에서 청크 분할 안 함", + "Do not use internal API": "내부 API 사용 안 함", + "Doctor.Button.DismissThisVersion": "아니요, 다음 릴리스까지 다시 묻지 않음", + "Doctor.Button.Fix": "수정", + "Doctor.Button.FixButNoRebuild": "수정하지만 재구축하지 않음", + "Doctor.Button.No": "아니요", + "Doctor.Button.Skip": "그대로 두기", + "Doctor.Button.Yes": "예", + "Doctor.Dialogue.Main": "안녕하세요! ${activateReason} 로 인해 구성 진단 마법사가 활성화되었습니다!\n그리고 일부 구성이 잠재적인 문제로 감지되었습니다.\n안심하세요. 하나씩 해결해 봅시다.\n\n대상 항목은 다음과 같습니다.\n\n${issues}\n\n시작하시겠습니까?", + "Doctor.Dialogue.MainFix": "**구성 이름:** `${name}`\n**현재 값:** `${current}`, **이상적인 값:** `${ideal}`\n**권장 수준:** ${level}\n**왜 이것이 감지되었나요?**\n${reason}\n\n\n${note}\n\n이상적인 값으로 수정하시겠습니까?", + "Doctor.Dialogue.Title": "Self-hosted LiveSync 구성 진단 마법사", + "Doctor.Dialogue.TitleAlmostDone": "거의 완료되었습니다!", + "Doctor.Dialogue.TitleFix": "문제 해결 ${current}/${total}", + "Doctor.Level.Must": "필수", + "Doctor.Level.Necessary": "필수", + "Doctor.Level.Optional": "선택사항", + "Doctor.Level.Recommended": "권장", + "Doctor.Message.NoIssues": "문제가 감지되지 않았습니다!", + "Doctor.Message.RebuildLocalRequired": "주의! 이를 적용하려면 로컬 데이터베이스 재구축이 필요합니다!", + "Doctor.Message.RebuildRequired": "주의! 이를 적용하려면 재구축이 필요합니다!", + "Doctor.Message.SomeSkipped": "일부 문제를 그대로 두었습니다. 다음 시작 시 다시 질문할까요?", + "Duplicate": "복제", + "Duplicate remote": "원격 구성 복제", + "E2EE Configuration": "E2EE 구성", + "Edge case addressing (Behaviour)": "특수 상황 처리 (동작)", + "Edge case addressing (Database)": "특수 상황 처리 (데이터베이스)", + "Edge case addressing (Processing)": "특수 상황 처리 (처리)", + "Emergency restart": "긴급 재시작", + "Enable advanced features": "고급 기능 활성화", + "Enable customization sync": "사용자 설정 동기화 활성화", + "Enable Developers' Debug Tools.": "개발자 디버그 도구 활성화", + "Enable edge case treatment features": "특수 사례 처리 기능 활성화", + "Enable poweruser features": "파워 유저 기능 활성화", + "Enable this if your Object Storage doesn't support CORS": "객체 스토리지가 CORS를 지원하지 않는 경우 활성화하세요", + "Enable this option to automatically apply the most recent change to documents even when it conflicts": "이 옵션을 활성화하면 충돌이 있어도 문서에 가장 최근 변경 사항을 자동으로 적용합니다", + "Encrypt contents on the remote database. If you use the plugin's synchronization feature, enabling this is recommended.": "원격 데이터베이스의 내용을 암호화합니다. 플러그인의 동기화 기능을 사용하는 경우 활성화를 권장합니다.", + "Encrypting sensitive configuration items": "민감한 구성 항목 암호화", + "Encryption phassphrase. If changed, you should overwrite the server's database with the new (encrypted) files.": "패스프레이즈는 암호화에 사용되는 긴 암호 문구입니다. 변경한 경우, 암호화된 새 파일로 서버의 데이터베이스를 덮어써야 합니다.", + "End-to-End Encryption": "종단간 암호화", + "Endpoint URL": "엔드포인트 URL", + "Enhance chunk size": "청크 크기 향상", + "Enter Server Information": "서버 정보 입력", + "Enter the server information manually": "서버 정보를 수동으로 입력", + "Export": "내보내기", + "Failed to connect to remote for compaction.": "압축을 위해 원격 데이터베이스에 연결하지 못했습니다.", + "Failed to connect to remote for compaction. ${reason}": "압축을 위해 원격 데이터베이스에 연결하지 못했습니다. ${reason}", + "Failed to start one-shot replication before Garbage Collection. Garbage Collection Cancelled.": "Garbage Collection 전에 일회성 복제를 시작하지 못했습니다. Garbage Collection을 취소합니다.", + "Failed to start replication after Garbage Collection.": "Garbage Collection 후 복제를 시작하지 못했습니다.", + "Fetch": "가져오기", + "Fetch chunks on demand": "필요 시 청크 원격 가져오기", + "Fetch database with previous behaviour": "이전 동작으로 데이터베이스 가져오기", + "Fetch remote settings": "원격 설정 가져오기", + "File to resolve conflict": "충돌을 해결할 파일", + "Filename": "파일명", + "First, please select the option that best describes your current situation.": "먼저 현재 상황에 가장 잘 맞는 항목을 선택해 주세요。", + "Flag and restart": "표시 후 재시작", + "Forces the file to be synced when opened.": "파일을 열 때 강제로 동기화합니다.", + "Fresh Start Wipe": "새로 시작 지우기", + "Garbage Collection cancelled by user.": "사용자가 Garbage Collection을 취소했습니다.", + "Garbage Collection completed. Deleted chunks: ${deletedChunks} / ${totalChunks}. Time taken: ${seconds} seconds.": "Garbage Collection이 완료되었습니다. 삭제된 청크: ${deletedChunks} / ${totalChunks}. 소요 시간: ${seconds}초.", + "Garbage Collection Confirmation": "Garbage Collection 확인", + "Garbage Collection V3 (Beta)": "가비지 컬렉션 V3 (Beta)", + "Garbage Collection: Found ${unusedChunks} unused chunks to delete.": "Garbage Collection: 삭제할 미사용 청크 ${unusedChunks}개를 찾았습니다.", + "Garbage Collection: Scanned ${scanned} / ~${docCount}": "Garbage Collection: ${scanned} / ~${docCount} 스캔됨", + "Garbage Collection: Scanning completed. Total chunks: ${totalChunks}, Used chunks: ${usedChunks}": "Garbage Collection: 스캔 완료. 전체 청크 수: ${totalChunks}, 사용 중인 청크 수: ${usedChunks}", + "Handle files as Case-Sensitive": "파일을 대소문자 구분으로 처리", + "Hidden Files": "숨김 파일", + "How to display network errors when the sync server is unreachable.": "동기화 서버에 연결할 수 없을 때 네트워크 오류를 어떻게 표시할지 설정합니다.", + "How would you like to configure the connection to your server?": "서버 연결을 어떻게 구성하시겠습니까?", + "I am adding a device to an existing synchronisation setup": "기존 동기화 구성에 장치를 추가합니다", + "I am setting this up for the first time": "처음으로 설정합니다", + "I know my server details, let me enter them": "서버 정보를 알고 있으니 직접 입력하겠습니다", + "If disabled(toggled), chunks will be split on the UI thread (Previous behaviour).": "비활성화(토글)되면 청크는 UI 스레드에서 분할됩니다 (이전 동작).", + "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.": "활성화하면 파일별 효율적인 사용자 설정 동기화가 사용됩니다. 이를 활성화할 때 소규모 데이터 구조 전환이 필요합니다. 모든 기기를 v0.23.18로 업데이트해야 합니다. 이를 활성화하면 이전 버전과의 호환성이 사라집니다.", + "If enabled, chunks will be split into no more than 100 items. However, dedupe is slightly weaker.": "활성화하면 청크는 최대 100개 항목으로 분할됩니다. 하지만 중복 제거 기능이 약간 약해집니다.", + "If enabled, newly created chunks are temporarily kept within the document, and graduated to become independent chunks once stabilised.": "활성화하면 새로 생성된 변경 기록(청크)은 문서 안에 임시로 보관되며, 일정 조건을 만족하면 자동으로 문서 밖으로 분리되어 저장됩니다.", + "If enabled, the ⛔ icon will be shown inside the status instead of the file warnings banner. No details will be shown.": "활성화하면 파일 경고 배너 대신 상태 영역에 ⛔ 아이콘만 표시됩니다. 자세한 내용은 표시되지 않습니다.", + "If enabled, the file under 1kb will be processed in the UI thread.": "활성화하면 1kb 미만의 파일은 UI 스레드에서 처리됩니다.", + "If enabled, the notification of hidden files change will be suppressed.": "활성화하면 숨겨진 파일 변경 알림이 억제됩니다.", + "If this enabled, all chunks will be stored with the revision made from its content. (Previous behaviour)": "이 옵션이 활성화되면 모든 청크는 콘텐츠에서 생성된 리비전과 함께 저장됩니다. (이전 동작)", + "If this enabled, All files are handled as case-Sensitive (Previous behaviour).": "이 옵션이 활성화되면 모든 파일이 대소문자를 구분하여 처리됩니다 (이전 동작).", + "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 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.": "이 옵션이 활성화되면 PouchDB는 연결을 더이상 무한히 열어두지 않고 60초 동안 유지합니다. 그 시간 내에 변경 사항이 없으면 소켓을 닫고 다시 엽니다. 프록시가 요청 지속 시간을 제한할 때 유용하지만 리소스 사용량이 증가할 수 있습니다.", + "Ignore and Proceed": "무시하고 계속", + "Ignore files": "제외 규칙 파일", + "Ignore patterns": "무시 패턴", + "Import connection": "연결 가져오기", + "Incubate Chunks in Document": "문서 내 변경 기록 임시 보관", + "Initialise all journal history, On the next sync, every item will be received and sent.": "모든 저널 기록을 초기화합니다. 다음 동기화 때 모든 항목을 다시 받고 다시 보냅니다.", + "Interval (sec)": "간격 (초)", + "K.exp": "실험 기능", + "K.long_p2p_sync": "%{title_p2p_sync} (%{exp})", + "K.P2P": "%{Peer}-to-%{Peer}", + "K.Peer": "피어", + "K.ScanCustomization": "사용자 설정 검색", + "K.short_p2p_sync": "P2P 동기화 (%{exp})", + "K.title_p2p_sync": "피어 투 피어(P2P) 동기화", + "Keep empty folder": "빈 폴더 유지", + "lang_def": "Default", + "lang-de": "Deutsche", + "lang-def": "%{lang_def}", + "lang-es": "Español", + "lang-fr": "Français", + "lang-ja": "日本語", + "lang-ko": "한국어", + "lang-ru": "Русский", + "lang-zh": "简体中文", + "lang-zh-tw": "繁體中文", + "Later": "나중에", + "Limit: {datetime} ({timestamp})": "제한: {datetime} ({timestamp})", + "LiveSync could not handle multiple vaults which have same name without different prefix, This should be automatically configured.": "LiveSync는 서로 다른 접두사 없이 동일한 이름을 가진 여러 볼트를 처리할 수 없습니다. 이는 자동으로 구성되어야 합니다.", + "liveSyncReplicator.beforeLiveSync": "LiveSync 전에 OneShot을 먼저 시작합니다...", + "liveSyncReplicator.cantReplicateLowerValue": "더 낮은 값으로 복제할 수 없습니다.", + "liveSyncReplicator.checkingLastSyncPoint": "마지막으로 동기화된 지점을 찾고 있습니다.", + "liveSyncReplicator.couldNotConnectTo": "${uri}에 연결할 수 없습니다: ${name} \n(${db})", + "liveSyncReplicator.couldNotConnectToRemoteDb": "원격 데이터베이스에 연결할 수 없습니다: ${d}", + "liveSyncReplicator.couldNotConnectToServer": "서버에 연결할 수 없습니다.", + "liveSyncReplicator.couldNotConnectToURI": "${uri}에 연결할 수 없습니다: ${dbRet}", + "liveSyncReplicator.couldNotMarkResolveRemoteDb": "원격 데이터베이스를 해결됨으로 표시할 수 없습니다.", + "liveSyncReplicator.liveSyncBegin": "LiveSync 시작...", + "liveSyncReplicator.lockRemoteDb": "데이터 손상을 방지하기 위해 원격 데이터베이스를 잠급니다", + "liveSyncReplicator.markDeviceResolved": "이 기기를 '해결됨'으로 표시합니다.", + "liveSyncReplicator.oneShotSyncBegin": "OneShot 동기화 시작... (${syncMode})", + "liveSyncReplicator.remoteDbCorrupted": "원격 데이터베이스가 더 최신이거나 손상되었습니다. 최신 버전의 self-hosted-livesync가 설치되어 있는지 확인하세요", + "liveSyncReplicator.remoteDbCreatedOrConnected": "원격 데이터베이스가 생성되거나 연결되었습니다", + "liveSyncReplicator.remoteDbDestroyed": "원격 데이터베이스가 삭제되었습니다", + "liveSyncReplicator.remoteDbDestroyError": "원격 데이터베이스 삭제 중 오류가 발생했습니다:", + "liveSyncReplicator.remoteDbMarkedResolved": "원격 데이터베이스가 해결됨으로 표시되었습니다.", + "liveSyncReplicator.replicationClosed": "복제가 종료되었습니다", + "liveSyncReplicator.replicationInProgress": "복제가 이미 진행 중입니다", + "liveSyncReplicator.retryLowerBatchSize": "더 낮은 일괄 크기로 재시도: ${batch_size}/${batches_limit}", + "liveSyncReplicator.unlockRemoteDb": "데이터 손상을 방지하기 위해 원격 데이터베이스를 잠금 해제합니다", + "liveSyncSetting.errorNoSuchSettingItem": "해당 설정 항목이 없습니다: ${key}", + "liveSyncSetting.originalValue": "원본: ${value}", + "liveSyncSetting.valueShouldBeInRange": "값은 ${min} < 값 < ${max} 범위에 있어야 합니다", + "liveSyncSettings.btnApply": "적용", + "Local Database Tweak": "로컬 데이터베이스 조정", + "Lock": "잠금", + "Lock Server": "서버 잠금", + "Lock the remote server to prevent synchronization with other devices.": "다른 기기와의 동기화를 방지하기 위해 원격 서버를 잠급니다.", + "logPane.autoScroll": "자동 스크롤", + "logPane.logWindowOpened": "로그 창이 열렸습니다", + "logPane.pause": "일시 중단", + "logPane.title": "Self-hosted LiveSync 로그", + "logPane.wrap": "줄 바꿈", + "Maximum delay for batch database updating": "일괄 데이터베이스 업데이트 최대 지연", + "Maximum file size": "최대 파일 크기", + "Maximum Incubating Chunk Size": "임시 보관 변경 기록의 최대 크기", + "Maximum Incubating Chunks": "임시 보관 중인 변경 기록 최대 수", + "Maximum Incubation Period": "변경 기록 임시 보관 최대 시간", + "MB (0 to disable).": "MB (0으로 설정하면 비활성화).", + "Memory cache": "메모리 캐시", + "Memory cache size (by total characters)": "메모리 캐시 크기 (총 문자 수)", + "Memory cache size (by total items)": "메모리 캐시 크기 (총 항목 수)", + "Merge": "병합", + "Minimum delay for batch database updating": "일괄 데이터베이스 업데이트 최소 지연", + "Minimum interval for syncing": "동기화 최소 간격", + "moduleCheckRemoteSize.logCheckingStorageSizes": "스토리지 크기 확인 중", + "moduleCheckRemoteSize.logCurrentStorageSize": "원격 스토리지 크기: ${measuredSize}", + "moduleCheckRemoteSize.logExceededWarning": "원격 스토리지 크기: ${measuredSize}가 ${notifySize}를 초과했습니다", + "moduleCheckRemoteSize.logThresholdEnlarged": "임계값이 ${size}MB로 증가되었습니다", + "moduleCheckRemoteSize.msgConfirmRebuild": "시간이 꽤 오래 걸릴 수 있습니다. 정말 지금 모든 것을 재구축하시겠습니까?", + "moduleCheckRemoteSize.msgDatabaseGrowing": "**데이터베이스 용량이 점점 커지고 있습니다!** 하지만 걱정하지 마세요. 아직 원격 스토리지 공간이 완전히 부족해진 건 아닙니다.\n\n| 측정된 크기 | 설정된 한도 |\n| --- | --- |\n| ${estimatedSize} | ${maxSize} |\n\n> [!MORE]-\n> 오랜 기간 사용했다면 참조되지 않는 청크, 즉 '쓰레기 데이터'가 쌓였을 수 있습니다. 이 경우 전체 재구성을 권장합니다. 용량이 훨씬 줄어들 수 있습니다.\n> \n> 단순히 볼트 자체 용량이 커지고 있는 것이라면, 먼저 파일을 정리한 후 전체를 재구성하는 것이 좋습니다. Self-hosted LiveSync는 처리 속도를 위해 삭제해도 실제 데이터를 바로 지우지 않습니다. 이 내용은 [기술 문서](https://github.com/vrtmrz/obsidian-livesync/blob/main/docs/tech_info.md)에 간략히 정리되어 있습니다.\n> \n> 용량 증가가 괜찮다면 알림 임계치를 100MB 단위로 높일 수 있습니다. 직접 서버를 운영하는 경우에 적합한 방법입니다. 다만, 가끔은 전체 재구성을 해주는 것이 바람직합니다.\n\n> [!WARNING]\n> 전체 재구성을 실행할 경우, 모든 기기가 반드시 동기화되어 있어야 합니다. 플러그인이 최대한 병합하려고 시도하긴 하지만 완전하지 않을 수 있습니다.", + "moduleCheckRemoteSize.msgSetDBCapacity": "**원격 스토리지 공간이 부족해지기 전에 미리 조치할 수 있도록** 데이터베이스 용량 경고를 설정할 수 있습니다.\n이 기능을 활성화하시겠습니까?\n\n> [!MORE]-\n> - 0: 스토리지 용량에 대한 경고 없음\n> 자체 서버를 사용하는 등 여유 공간이 충분한 경우에 권장됩니다. 스토리지 용량을 직접 확인하고 수동으로 재구성할 수 있습니다.\n> - 800: 원격 스토리지 용량이 800MB를 초과하면 경고\n> 1GB 제한이 있는 fly.io나 IBM Cloudant 사용 시 권장됩니다.\n> - 2000: 원격 스토리지 용량이 2GB를 초과하면 경고\n\n설정한 용량 한도에 도달하면, 단계적으로 경고 한도를 늘릴지 여부를 묻게 됩니다.\n", + "moduleCheckRemoteSize.option2GB": "2GB (표준)", + "moduleCheckRemoteSize.option800MB": "800MB (Cloudant, fly.io)", + "moduleCheckRemoteSize.optionAskMeLater": "나중에 물어보기", + "moduleCheckRemoteSize.optionDismiss": "무시", + "moduleCheckRemoteSize.optionIncreaseLimit": "${newMax}MB로 증가", + "moduleCheckRemoteSize.optionNoWarn": "아니요, 경고하지 마세요", + "moduleCheckRemoteSize.optionRebuildAll": "지금 모든 것 재구축", + "moduleCheckRemoteSize.titleDatabaseSizeLimitExceeded": "원격 스토리지 크기가 제한을 초과했습니다", + "moduleCheckRemoteSize.titleDatabaseSizeNotify": "데이터베이스 크기 알림 설정", + "moduleInputUIObsidian.defaultTitleConfirmation": "확인", + "moduleInputUIObsidian.defaultTitleSelect": "선택", + "moduleInputUIObsidian.optionNo": "아니요", + "moduleInputUIObsidian.optionYes": "예", + "moduleLiveSyncMain.logAdditionalSafetyScan": "추가 안전 검사 중...", + "moduleLiveSyncMain.logLoadingPlugin": "플러그인 로딩 중...", + "moduleLiveSyncMain.logPluginInitCancelled": "모듈에 의해 플러그인 초기화가 취소되었습니다", + "moduleLiveSyncMain.logPluginVersion": "Self-hosted LiveSync v${manifestVersion} ${packageVersion}", + "moduleLiveSyncMain.logReadChangelog": "LiveSync가 업데이트되었습니다. 변경사항을 읽어보세요!", + "moduleLiveSyncMain.logSafetyScanCompleted": "추가 안전 검사가 완료되었습니다", + "moduleLiveSyncMain.logSafetyScanFailed": "모듈에서 추가 안전 검사가 실패했습니다", + "moduleLiveSyncMain.logUnloadingPlugin": "플러그인 언로딩 중...", + "moduleLiveSyncMain.logVersionUpdate": "LiveSync가 업데이트되었습니다. 호환성 문제가 있는 업데이트의 경우 모든 자동 동기화가 일시적으로 비활성화되었습니다. 활성화하기 전에 모든 기기가 최신 상태인지 확인하세요.", + "moduleLiveSyncMain.msgScramEnabled": "Self-hosted LiveSync가 일부 이벤트를 무시하도록 설정되어 있습니다. 이 설정이 맞습니까?\n\n| 유형 | 상태 | 설명 |\n|:---:|:---:|---|\n| 스토리지 이벤트 | ${fileWatchingStatus} | 모든 수정 사항이 무시됩니다 |\n| 데이터베이스 이벤트 | ${parseReplicationStatus} | 모든 동기화 변경이 지연됩니다 |\n\n이벤트 감지를 다시 활성화하고 Obsidian을 재시작하시겠습니까?\n\n> [!DETAILS]-\n> 이러한 설정은 플러그인이 재구성 또는 데이터 가져오기 중에 자동으로 설정한 것입니다. 프로세스가 비정상적으로 종료되면 이 상태가 의도치 않게 유지될 수 있습니다.\n> 상태가 확실하지 않다면 이 과정을 다시 실행해 보세요. 재시작 전에 반드시 볼트를 백업해 주세요.", + "moduleLiveSyncMain.optionKeepLiveSyncDisabled": "LiveSync 비활성화 유지", + "moduleLiveSyncMain.optionResumeAndRestart": "재개 후 Obsidian 재시작", + "moduleLiveSyncMain.titleScramEnabled": "Scram 활성화됨", + "moduleLocalDatabase.logWaitingForReady": "준비 대기 중...", + "moduleLog.showLog": "로그 표시", + "moduleMigration.docUri": "https://github.com/vrtmrz/obsidian-livesync/blob/main/README.md#how-to-use", + "moduleMigration.logBulkSendCorrupted": "청크 일괄 전송이 활성화되었지만, 이 기능에 문제가 있었습니다. 불편을 드려 죄송합니다. 자동으로 비활성화되었습니다.", + "moduleMigration.logFetchRemoteTweakFailed": "원격 조정 값을 가져오는데 실패했습니다", + "moduleMigration.logLocalDatabaseNotReady": "문제가 발생했습니다! 로컬 데이터베이스가 준비되지 않았습니다", + "moduleMigration.logMigratedSameBehaviour": "이전과 같은 방식으로 동작하도록 db:${current}로 데이터 구조 전환이 완료되었습니다", + "moduleMigration.logMigrationFailed": "${old}에서 ${current}로의 데이터 구조 전환이 실패했거나 중단되었습니다", + "moduleMigration.logRedflag2CreationFail": "redflag2 생성에 실패했습니다", + "moduleMigration.logRemoteTweakUnavailable": "원격 조정 값을 가져올 수 없습니다", + "moduleMigration.logSetupCancelled": "설정이 취소되었습니다. Self-hosted LiveSync가 설정을 기다리고 있습니다!", + "moduleMigration.msgFetchRemoteAgain": "이미 알고 계시겠지만, Self-hosted LiveSync의 기본 동작 방식과 데이터베이스 구조가 변경되었습니다.\n\n다행히도 여러분의 노력 덕분에 원격 데이터베이스는 이미 성공적으로 데이터 구조 전환이 완료된 것으로 보입니다. 축하드립니다!\n\n하지만 아직 일부 추가 작업이 필요합니다. 이 기기의 설정이 원격 데이터베이스와 호환되지 않으므로, 원격 데이터를 다시 가져와야 합니다. 지금 원격 데이터베이스를 다시 가져오시겠습니까?\n\n___참고: 설정이 변경되고 데이터베이스를 다시 불러오기 전까지는 동기화가 불가능합니다.___\n___참고2: 청크는 변경이 불가능한 구조이므로, 메타데이터와 차이점만 가져올 수 있습니다.___", + "moduleMigration.msgInitialSetup": "이 기기는 **아직 초기 설정이 완료되지 않았습니다**. 지금부터 설정 과정을 안내해 드리겠습니다.\n\n모든 대화 내용은 클립보드에 복사할 수 있습니다. 나중에 참고하려면 Obsidian 노트에 붙여넣거나 번역 도구를 활용해 번역하셔도 됩니다.\n\n먼저, **Setup URI**를 가지고 계신가요?\n\n참고: Setup URI가 무엇인지 잘 모르시겠다면 [문서](${URI_DOC})를 참고해 주세요.", + "moduleMigration.msgRecommendSetupUri": "Setup URI를 생성해 사용하는 것을 강력히 권장합니다.\nSetup URI가 무엇인지 잘 모르시겠다면 [문서](${URI_DOC})를 참고해 주세요. 중요한 내용이니 꼭 확인하시기 바랍니다.\n\n직접 수동 설정을 진행하시겠습니까?", + "moduleMigration.msgSinceV02321": "v0.23.21부터 Self-hosted LiveSync의 기본 동작 방식과 데이터베이스 구조가 변경되었습니다. 주요 변경사항은 다음과 같습니다:\n\n1. **파일명 대소문자 구분 처리**\n 이제 파일명은 대소문자를 구분하지 않고 처리됩니다. 이는 파일명 구분을 제대로 지원하지 않는 Linux 및 iOS를 제외한 대부분의 플랫폼에서 유리한 변화입니다.\n (Linux나 iOS에서는 대소문자만 다른 파일이 존재할 경우 경고가 표시됩니다)\n\n2. **청크 리비전 관리 방식 개선**\n 청크는 변경 불가능한(immutable) 구조로 고정되며, 이를 통해 리비전 처리가 안정화되고 파일 저장 성능이 향상됩니다.\n\n___단, 위 기능을 활성화하려면 원격 및 로컬 데이터베이스를 모두 재구성해야 합니다. 이 과정은 수 분이 소요되므로 여유가 있을 때 실행하시는 것을 권장합니다.___\n\n- 기존 방식대로 유지하려면 `${KEEP}`을 선택해 이 과정을 건너뛸 수 있습니다.\n- 시간이 부족하다면 `${DISMISS}`를 눌러주시면 나중에 다시 안내드리겠습니다.\n- 이미 다른 기기에서 데이터베이스를 재구성하셨다면 `${DISMISS}`를 선택한 뒤 다시 동기화해 보세요. 차이점이 감지되면 다시 안내드리겠습니다.", + "moduleMigration.optionAdjustRemote": "원격에 맞추기", + "moduleMigration.optionDecideLater": "나중에 결정하기", + "moduleMigration.optionEnableBoth": "둘 다 활성화", + "moduleMigration.optionEnableFilenameCaseInsensitive": "#1만 활성화", + "moduleMigration.optionEnableFixedRevisionForChunks": "#2만 활성화", + "moduleMigration.optionHaveSetupUri": "예, 있습니다", + "moduleMigration.optionKeepPreviousBehaviour": "이전 동작 유지", + "moduleMigration.optionManualSetup": "모든 것을 수동으로 설정", + "moduleMigration.optionNoAskAgain": "아니요 (나중에 다시 물어보기)", + "moduleMigration.optionNoSetupUri": "아니요, 없습니다", + "moduleMigration.optionRemindNextLaunch": "다음 시작 시 알림", + "moduleMigration.optionSetupViaP2P": "%{short_p2p_sync}를 사용하여 설정", + "moduleMigration.optionSetupWizard": "설정 마법사로 안내", + "moduleMigration.optionYesFetchAgain": "예 (다시 가져오기)", + "moduleMigration.titleCaseSensitivity": "대소문자 구분", + "moduleMigration.titleRecommendSetupUri": "Setup URI 사용 권장", + "moduleMigration.titleWelcome": "Self-hosted LiveSync에 오신 것을 환영합니다", + "moduleObsidianMenu.replicate": "복제", + "More actions": "추가 작업", + "Move remotely deleted files to the trash, instead of deleting.": "원격에서 삭제된 파일을 삭제하는 대신 휴지통으로 이동합니다.", + "Network warning style": "네트워크 경고 표시 방식", + "New Remote": "새 원격", + "No connected device information found. Cancelling Garbage Collection.": "연결된 기기 정보를 찾을 수 없습니다. Garbage Collection을 취소합니다.", + "No limit configured": "제한이 설정되지 않음", + "No, please take me back": "아니요, 이전으로 돌아가겠습니다", + "Node ID": "노드 ID", + "Node Information Missing": "노드 정보 누락", + "Non-Synchronising files": "동기화하지 않는 파일", + "Normal Files": "일반 파일", + "Not all messages have been translated. And, please revert to \"Default\" when reporting errors.": "모든 메시지가 번역되지 않았습니다. 오류 신고 시 \"기본값\"으로 되돌려 주세요.", + "Notify all setting files": "모든 설정 파일 알림", + "Notify customized": "사용자 설정 알림", + "Notify when other device has newly customized.": "다른 기기에서 새로운 사용자 설정이 있을 때 알림을 받습니다.", + "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.": "한 번에 처리할 일괄 처리 수입니다. 기본값은 40입니다. 최소값은 2입니다. 이는 일괄 크기와 함께 메모리에 보관되는 문서 수를 제어합니다.", + "Number of changes to sync at a time. Defaults to 50. Minimum is 2.": "한 번에 동기화할 변경 사항의 수입니다. 기본값은 50입니다. 최소값은 2입니다.", + "Obsidian version": "Obsidian 버전", + "obsidianLiveSyncSettingTab.btnApply": "적용", + "obsidianLiveSyncSettingTab.btnCheck": "확인", + "obsidianLiveSyncSettingTab.btnCopy": "복사", + "obsidianLiveSyncSettingTab.btnDisable": "비활성화", + "obsidianLiveSyncSettingTab.btnDiscard": "삭제", + "obsidianLiveSyncSettingTab.btnEnable": "활성화", + "obsidianLiveSyncSettingTab.btnFix": "수정", + "obsidianLiveSyncSettingTab.btnGotItAndUpdated": "알겠습니다. 업데이트했습니다.", + "obsidianLiveSyncSettingTab.btnNext": "다음", + "obsidianLiveSyncSettingTab.btnStart": "시작", + "obsidianLiveSyncSettingTab.btnTest": "테스트", + "obsidianLiveSyncSettingTab.btnUse": "사용", + "obsidianLiveSyncSettingTab.buttonFetch": "가져오기", + "obsidianLiveSyncSettingTab.buttonNext": "다음", + "obsidianLiveSyncSettingTab.defaultLanguage": "기본값", + "obsidianLiveSyncSettingTab.descConnectSetupURI": "이것은 Setup URI로 Self-hosted LiveSync를 설정하는 권장 방법입니다.", + "obsidianLiveSyncSettingTab.descCopySetupURI": "새 기기 설정에 완벽합니다!", + "obsidianLiveSyncSettingTab.descEnableLiveSync": "위의 두 옵션 중 하나를 구성하거나 모든 구성을 수동으로 완료한 후에만 활성화하세요.", + "obsidianLiveSyncSettingTab.descFetchConfigFromRemote": "이미 구성된 원격 서버에서 필요한 설정을 가져옵니다.", + "obsidianLiveSyncSettingTab.descManualSetup": "권장하지 않지만 Setup URI가 없는 경우에 유용합니다", + "obsidianLiveSyncSettingTab.descTestDatabaseConnection": "데이터베이스 연결을 엽니다. 원격 데이터베이스를 찾을 수 없고 데이터베이스 생성 권한이 있는 경우, 데이터베이스가 생성됩니다.", + "obsidianLiveSyncSettingTab.descValidateDatabaseConfig": "데이터베이스 구성의 잠재적 문제를 확인하고 수정합니다.", + "obsidianLiveSyncSettingTab.errAccessForbidden": "❗ 액세스가 금지되었습니다.", + "obsidianLiveSyncSettingTab.errCannotContinueTest": "테스트를 계속할 수 없습니다.", + "obsidianLiveSyncSettingTab.errCorsCredentials": "❗ cors.credentials가 잘못되었습니다", + "obsidianLiveSyncSettingTab.errCorsNotAllowingCredentials": "❗ CORS에서 자격 증명을 허용하지 않습니다", + "obsidianLiveSyncSettingTab.errCorsOrigins": "❗ cors.origins가 잘못되었습니다", + "obsidianLiveSyncSettingTab.errEnableCors": "❗ httpd.enable_cors가 잘못되었습니다", + "obsidianLiveSyncSettingTab.errMaxDocumentSize": "❗ couchdb.max_document_size가 낮습니다)", + "obsidianLiveSyncSettingTab.errMaxRequestSize": "❗ chttpd.max_http_request_size가 낮습니다)", + "obsidianLiveSyncSettingTab.errMissingWwwAuth": "❗ httpd.WWW-Authenticate가 누락되었습니다", + "obsidianLiveSyncSettingTab.errRequireValidUser": "❗ chttpd.require_valid_user가 잘못되었습니다.", + "obsidianLiveSyncSettingTab.errRequireValidUserAuth": "❗ chttpd_auth.require_valid_user가 잘못되었습니다.", + "obsidianLiveSyncSettingTab.labelDisabled": "⏹️ : 비활성화됨", + "obsidianLiveSyncSettingTab.labelEnabled": "🔁 : 활성화됨", + "obsidianLiveSyncSettingTab.levelAdvanced": " (고급)", + "obsidianLiveSyncSettingTab.levelEdgeCase": " (특수 사례)", + "obsidianLiveSyncSettingTab.levelPowerUser": " (파워 유저)", + "obsidianLiveSyncSettingTab.linkOpenInBrowser": "브라우저에서 열기", + "obsidianLiveSyncSettingTab.linkPageTop": "페이지 상단", + "obsidianLiveSyncSettingTab.linkTipsAndTroubleshooting": "팁 및 문제 해결", + "obsidianLiveSyncSettingTab.linkTroubleshooting": "/docs/troubleshooting.md", + "obsidianLiveSyncSettingTab.logCannotUseCloudant": "이 기능은 IBM Cloudant와 함께 사용할 수 없습니다.", + "obsidianLiveSyncSettingTab.logCheckingConfigDone": "구성 확인 완료", + "obsidianLiveSyncSettingTab.logCheckingConfigFailed": "구성 확인 실패", + "obsidianLiveSyncSettingTab.logCheckingDbConfig": "데이터베이스 구성 확인 중", + "obsidianLiveSyncSettingTab.logCheckPassphraseFailed": "오류: 원격 서버와 패스프레이즈 확인에 실패했습니다: \n${db}.", + "obsidianLiveSyncSettingTab.logConfiguredDisabled": "구성된 동기화 모드: 비활성화됨", + "obsidianLiveSyncSettingTab.logConfiguredLiveSync": "구성된 동기화 모드: LiveSync", + "obsidianLiveSyncSettingTab.logConfiguredPeriodic": "구성된 동기화 모드: 주기적", + "obsidianLiveSyncSettingTab.logCouchDbConfigFail": "CouchDB 구성: ${title} 실패", + "obsidianLiveSyncSettingTab.logCouchDbConfigSet": "CouchDB 구성: ${title} -> ${key}를 ${value}로 설정", + "obsidianLiveSyncSettingTab.logCouchDbConfigUpdated": "CouchDB 구성: ${title} 성공적으로 업데이트됨", + "obsidianLiveSyncSettingTab.logDatabaseConnected": "데이터베이스 연결됨", + "obsidianLiveSyncSettingTab.logEncryptionNoPassphrase": "패스프레이즈 없이는 암호화를 활성화할 수 없습니다", + "obsidianLiveSyncSettingTab.logEncryptionNoSupport": "기기가 암호화를 지원하지 않습니다.", + "obsidianLiveSyncSettingTab.logErrorOccurred": "오류가 발생했습니다!", + "obsidianLiveSyncSettingTab.logEstimatedSize": "예상 크기: ${size}", + "obsidianLiveSyncSettingTab.logPassphraseInvalid": "패스프레이즈가 유효하지 않습니다. 수정해 주세요.", + "obsidianLiveSyncSettingTab.logPassphraseNotCompatible": "오류: 패스프레이즈가 원격 서버와 호환되지 않습니다! 다시 확인해 주세요!", + "obsidianLiveSyncSettingTab.logRebuildNote": "동기화가 비활성화되었습니다. 원하는 경우 가져오기 후 다시 활성화하세요.", + "obsidianLiveSyncSettingTab.logSelectAnyPreset": "프리셋을 선택하세요.", + "obsidianLiveSyncSettingTab.msgAreYouSureProceed": "정말로 진행하시겠습니까?", + "obsidianLiveSyncSettingTab.msgChangesNeedToBeApplied": "변경사항을 적용해야 합니다!", + "obsidianLiveSyncSettingTab.msgConfigCheck": "--구성 확인--", + "obsidianLiveSyncSettingTab.msgConfigCheckFailed": "구성 확인에 실패했습니다. 그래도 계속하시겠습니까?", + "obsidianLiveSyncSettingTab.msgConnectionCheck": "--연결 확인--", + "obsidianLiveSyncSettingTab.msgConnectionProxyNote": "구성 확인 후에도 연결 확인에 문제가 있는 경우, 리버스 프록시 구성을 확인해 주세요.", + "obsidianLiveSyncSettingTab.msgCurrentOrigin": "현재 원점: {origin}", + "obsidianLiveSyncSettingTab.msgDiscardConfirmation": "정말로 기존 설정과 데이터베이스를 삭제하시겠습니까?", + "obsidianLiveSyncSettingTab.msgDone": "--완료--", + "obsidianLiveSyncSettingTab.msgEnableCors": "httpd.enable_cors 설정", + "obsidianLiveSyncSettingTab.msgEnableEncryptionRecommendation": "종단간 암호화와 경로 난독화를 활성화하는 것을 권장합니다. 정말로 암호화 없이 계속하시겠습니까?", + "obsidianLiveSyncSettingTab.msgFetchConfigFromRemote": "원격 서버에서 구성을 가져오시겠습니까?", + "obsidianLiveSyncSettingTab.msgGenerateSetupURI": "모든 작업이 완료되었습니다! 다른 기기를 설정하기 위해 Setup URI를 생성하시겠습니까?", + "obsidianLiveSyncSettingTab.msgIfConfigNotPersistent": "서버 설정이 영구적으로 저장되지 않는 환경(예: Docker에서 실행 중)에서는 이곳의 값들이 변경될 수 있습니다. 연결이 가능해지면 서버의 local.ini 파일에서 설정을 수동으로 업데이트해 주세요.", + "obsidianLiveSyncSettingTab.msgInvalidPassphrase": "암호화 패스프레이즈가 유효하지 않을 수 있습니다. 정말로 계속하시겠습니까?", + "obsidianLiveSyncSettingTab.msgNewVersionNote": "업그레이드 알림으로 여기에 오셨나요? 버전 기록을 검토해 주세요. 만족하신다면 버튼을 클릭하세요. 새로운 업데이트 시 다시 안내됩니다.", + "obsidianLiveSyncSettingTab.msgNonHTTPSInfo": "비 HTTPS URI로 구성되었습니다. 모바일 기기에서는 작동하지 않을 수 있으니 주의하세요.", + "obsidianLiveSyncSettingTab.msgNonHTTPSWarning": "비 HTTPS URI에 연결할 수 없습니다. 구성을 업데이트하고 다시 시도해 주세요.", + "obsidianLiveSyncSettingTab.msgNotice": "---공지사항---", + "obsidianLiveSyncSettingTab.msgObjectStorageWarning": "⚠️ 주의: 이 기능은 아직 개발 중(WIP)입니다. 다음 사항을 유의해 주세요:\n- 추가 전용 구조(append-only)로 동작합니다. 저장 용량을 줄이려면 데이터 재구성이 필요합니다.\n- 기능이 다소 불안정할 수 있습니다.\n- 최초 동기화 시, 전체 히스토리가 원격 서버에서 전송됩니다. 데이터 용량 제한 및 느린 속도에 유의해 주세요.\n- 실시간 동기화는 변경된 부분만 처리됩니다.\n\n문제가 발생했거나 개선 아이디어가 있으시면 GitHub에 이슈를 등록해 주세요.\n기여에 깊이 감사드립니다.", + "obsidianLiveSyncSettingTab.msgOriginCheck": "원점 확인: {org}", + "obsidianLiveSyncSettingTab.msgRebuildRequired": "변경사항을 적용하려면 데이터베이스를 재구축해야 합니다. 아래 중 한 가지 방법을 선택해 주세요.\n\n
\n범례\n\n| 기호 | 의미 |\n|: ------ :| ------- |\n| ⇔ | 최신 상태 |\n| ⇄ | 동기화 균형 유지 |\n| ⇐,⇒ | 덮어쓰기 방식의 전송 |\n| ⇠,⇢ | 상대편에서 가져와 덮어쓰기 |\n\n
\n\n## ${OPTION_REBUILD_BOTH}\n개요: 📄 ⇒¹ 💻 ⇒² 🛰️ ⇢ⁿ 💻 ⇄ⁿ⁺¹ 📄\n이 기기의 기존 파일을 기반으로 로컬과 원격 데이터베이스를 모두 재구축합니다.\n이 과정에서 다른 기기는 일시적으로 접근이 제한되며, 가져오기 작업을 별도로 수행해야 합니다.\n\n## ${OPTION_FETCH}\n개요: 📄 ⇄² 💻 ⇐¹ 🛰️ ⇔ 💻 ⇔ 📄\n로컬 데이터베이스를 초기화한 후, 원격 데이터베이스에서 데이터를 가져와 재구축합니다.\n이는 원격 측에서 데이터베이스를 먼저 재구축한 경우에도 해당됩니다.\n\n## ${OPTION_ONLY_SETTING}\n설정만 저장합니다. **⚠️ 주의: 이 방법은 데이터 손상을 일으킬 수 있습니다.** 일반적으로는 전체 데이터베이스 재구축이 필요합니다.", + "obsidianLiveSyncSettingTab.msgSelectAndApplyPreset": "마법사를 완료하려면 프리셋 항목을 선택하고 적용해 주세요.", + "obsidianLiveSyncSettingTab.msgSetCorsCredentials": "cors.credentials 설정", + "obsidianLiveSyncSettingTab.msgSetCorsOrigins": "cors.origins 설정", + "obsidianLiveSyncSettingTab.msgSetMaxDocSize": "couchdb.max_document_size 설정", + "obsidianLiveSyncSettingTab.msgSetMaxRequestSize": "chttpd.max_http_request_size 설정", + "obsidianLiveSyncSettingTab.msgSetRequireValidUser": "chttpd.require_valid_user = true로 설정", + "obsidianLiveSyncSettingTab.msgSetRequireValidUserAuth": "chttpd_auth.require_valid_user = true로 설정", + "obsidianLiveSyncSettingTab.msgSettingModified": "\"${setting}\" 설정이 다른 기기에서 수정되었습니다. 설정을 다시 로드하려면 {HERE}를 클릭하세요. 변경사항을 무시하려면 다른 곳을 클릭하세요.", + "obsidianLiveSyncSettingTab.msgSettingsUnchangeableDuringSync": "동기화 중에는 이 설정들을 변경할 수 없습니다. 잠금을 해제하려면 \"동기화 설정\"에서 모든 동기화를 비활성화해 주세요.", + "obsidianLiveSyncSettingTab.msgSetWwwAuth": "httpd.WWW-Authenticate 설정", + "obsidianLiveSyncSettingTab.nameApplySettings": "설정 적용", + "obsidianLiveSyncSettingTab.nameConnectSetupURI": "Setup URI로 연결", + "obsidianLiveSyncSettingTab.nameCopySetupURI": "현재 설정을 Setup URI로 복사", + "obsidianLiveSyncSettingTab.nameDisableHiddenFileSync": "숨김 파일 동기화 비활성화", + "obsidianLiveSyncSettingTab.nameDiscardSettings": "기존 설정 및 데이터베이스 삭제", + "obsidianLiveSyncSettingTab.nameEnableHiddenFileSync": "숨김 파일 동기화 활성화", + "obsidianLiveSyncSettingTab.nameEnableLiveSync": "LiveSync 활성화", + "obsidianLiveSyncSettingTab.nameHiddenFileSynchronization": "숨김 파일 동기화", + "obsidianLiveSyncSettingTab.nameManualSetup": "수동 설정", + "obsidianLiveSyncSettingTab.nameTestConnection": "연결 테스트", + "obsidianLiveSyncSettingTab.nameTestDatabaseConnection": "데이터베이스 연결 테스트", + "obsidianLiveSyncSettingTab.nameValidateDatabaseConfig": "데이터베이스 구성 검증", + "obsidianLiveSyncSettingTab.okAdminPrivileges": "✔ 관리자 권한이 있습니다.", + "obsidianLiveSyncSettingTab.okCorsCredentials": "✔ cors.credentials가 정상입니다.", + "obsidianLiveSyncSettingTab.okCorsCredentialsForOrigin": "CORS 자격 증명 정상", + "obsidianLiveSyncSettingTab.okCorsOriginMatched": "✔ CORS 원점 정상", + "obsidianLiveSyncSettingTab.okCorsOrigins": "✔ cors.origins가 정상입니다.", + "obsidianLiveSyncSettingTab.okEnableCors": "✔ httpd.enable_cors가 정상입니다.", + "obsidianLiveSyncSettingTab.okMaxDocumentSize": "✔ couchdb.max_document_size가 정상입니다.", + "obsidianLiveSyncSettingTab.okMaxRequestSize": "✔ chttpd.max_http_request_size가 정상입니다.", + "obsidianLiveSyncSettingTab.okRequireValidUser": "✔ chttpd.require_valid_user가 정상입니다.", + "obsidianLiveSyncSettingTab.okRequireValidUserAuth": "✔ chttpd_auth.require_valid_user가 정상입니다.", + "obsidianLiveSyncSettingTab.okWwwAuth": "✔ httpd.WWW-Authenticate가 정상입니다.", + "obsidianLiveSyncSettingTab.optionApply": "적용", + "obsidianLiveSyncSettingTab.optionCancel": "취소", + "obsidianLiveSyncSettingTab.optionCouchDB": "CouchDB", + "obsidianLiveSyncSettingTab.optionDisableAllAutomatic": "모든 자동 비활성화", + "obsidianLiveSyncSettingTab.optionFetchFromRemote": "원격에서 가져오기", + "obsidianLiveSyncSettingTab.optionHere": "여기", + "obsidianLiveSyncSettingTab.optionLiveSync": "LiveSync 동기화", + "obsidianLiveSyncSettingTab.optionMinioS3R2": "Minio,S3,R2", + "obsidianLiveSyncSettingTab.optionOkReadEverything": "네, 모든 것을 읽었습니다.", + "obsidianLiveSyncSettingTab.optionOnEvents": "이벤트 시", + "obsidianLiveSyncSettingTab.optionPeriodicAndEvents": "주기적 및 이벤트 시", + "obsidianLiveSyncSettingTab.optionPeriodicWithBatch": "주기적 w/ 일괄", + "obsidianLiveSyncSettingTab.optionRebuildBoth": "이 기기에서 둘 다 재구축", + "obsidianLiveSyncSettingTab.optionSaveOnlySettings": "(위험) 설정만 저장", + "obsidianLiveSyncSettingTab.panelChangeLog": "변경 로그", + "obsidianLiveSyncSettingTab.panelGeneralSettings": "일반 설정", + "obsidianLiveSyncSettingTab.panelPrivacyEncryption": "개인정보 보호 및 암호화", + "obsidianLiveSyncSettingTab.panelRemoteConfiguration": "원격 구성", + "obsidianLiveSyncSettingTab.panelSetup": "설정", + "obsidianLiveSyncSettingTab.titleAppearance": "외관", + "obsidianLiveSyncSettingTab.titleConflictResolution": "충돌 해결", + "obsidianLiveSyncSettingTab.titleCongratulations": "축하합니다!", + "obsidianLiveSyncSettingTab.titleCouchDB": "CouchDB 서버", + "obsidianLiveSyncSettingTab.titleDeletionPropagation": "삭제 전파", + "obsidianLiveSyncSettingTab.titleEncryptionNotEnabled": "암호화가 활성화되지 않음", + "obsidianLiveSyncSettingTab.titleEncryptionPassphraseInvalid": "암호화 패스프레이즈 유효하지 않음", + "obsidianLiveSyncSettingTab.titleExtraFeatures": "추가 및 고급 기능 활성화", + "obsidianLiveSyncSettingTab.titleFetchConfig": "구성 가져오기", + "obsidianLiveSyncSettingTab.titleFetchConfigFromRemote": "원격 서버에서 구성 가져오기", + "obsidianLiveSyncSettingTab.titleFetchSettings": "설정 가져오기", + "obsidianLiveSyncSettingTab.titleHiddenFiles": "숨김 파일", + "obsidianLiveSyncSettingTab.titleLogging": "로깅", + "obsidianLiveSyncSettingTab.titleMinioS3R2": "MinIO, S3, R2", + "obsidianLiveSyncSettingTab.titleNotification": "알림", + "obsidianLiveSyncSettingTab.titleOnlineTips": "온라인 팁", + "obsidianLiveSyncSettingTab.titleQuickSetup": "빠른 설정", + "obsidianLiveSyncSettingTab.titleRebuildRequired": "재구축 필요", + "obsidianLiveSyncSettingTab.titleRemoteConfigCheckFailed": "원격 구성 확인 실패", + "obsidianLiveSyncSettingTab.titleRemoteServer": "원격 서버", + "obsidianLiveSyncSettingTab.titleReset": "리셋", + "obsidianLiveSyncSettingTab.titleSetupOtherDevices": "다른 기기 설정", + "obsidianLiveSyncSettingTab.titleSynchronizationMethod": "동기화 방법", + "obsidianLiveSyncSettingTab.titleSynchronizationPreset": "동기화 프리셋", + "obsidianLiveSyncSettingTab.titleSyncSettings": "동기화 설정", + "obsidianLiveSyncSettingTab.titleSyncSettingsViaMarkdown": "마크다운을 통한 동기화 설정", + "obsidianLiveSyncSettingTab.titleUpdateThinning": "업데이트 솎아내기", + "obsidianLiveSyncSettingTab.warnCorsOriginUnmatched": "⚠ CORS 원점이 일치하지 않습니다 {from}->{to}", + "obsidianLiveSyncSettingTab.warnNoAdmin": "⚠ 관리자 권한이 없습니다.", + "Ok": "확인", + "Old Algorithm": "이전 알고리즘", + "Older fallback (Slow, W/O WebAssembly)": "이전 대체 방식 (느림, WebAssembly 없음)", + "Open": "열기", + "Open the dialog": "대화상자 열기", + "Overwrite": "덮어쓰기", + "Overwrite patterns": "덮어쓰기 패턴", + "Overwrite remote": "원격 덮어쓰기", + "Overwrite remote with local DB and passphrase.": "로컬 DB와 암호문구로 원격을 덮어씁니다.", + "Overwrite Server Data with This Device's Files": "이 기기의 파일로 서버 데이터를 덮어쓰기", + "P2P.AskPassphraseForDecrypt": "원격 피어가 구성을 공유했습니다. 구성을 복호화하려면 패스프레이즈를 입력해 주세요.", + "P2P.AskPassphraseForShare": "원격 피어가 이 기기의 구성을 요청했습니다. 구성을 공유하려면 패스프레이즈를 입력해 주세요. 이 대화상자를 취소하여 요청을 무시할 수 있습니다.", + "P2P.DisabledButNeed": "%{title_p2p_sync}가 비활성화되어 있습니다. 정말로 활성화하시겠습니까?", + "P2P.FailedToOpen": "시그널링 서버에 P2P 연결을 열 수 없습니다.", + "P2P.NoAutoSyncPeers": "자동 동기화 피어를 찾을 수 없습니다. %{long_p2p_sync} 창에서 피어를 설정해 주세요.", + "P2P.NoKnownPeers": "피어가 감지되지 않았습니다. 다른 피어의 접속을 기다리고 있습니다...", + "P2P.Note.description": "이 복제기는 피어 투 피어(P2P) 연결을 통해 다른 기기들과 볼트를 동기화할 수 있도록 합니다. 클라우드 서비스를 거치지 않고도 기기간 동기화를 구현할 수 있습니다.\n\n이 복제기는 Trystero를 기반으로 하며, 기기 간 연결을 설정하기 위해 시그널링 서버를 사용합니다. 시그널링 서버는 단순히 연결 정보를 교환하는 용도로만 사용되며, 사용자 데이터를 저장하거나 접근하지 않습니다 (또는 그래야만 합니다).\n\n시그널링 서버는 누구나 운영할 수 있으며, 이는 단순한 Nostr 릴레이입니다. 편의성과 복제기의 작동 확인을 위해 `vrtmrz`가 자체적으로 시그널링 서버 인스턴스를 운영 중입니다. 사용자는 `vrtmrz`가 제공하는 실험용 서버를 사용할 수도 있고, 별도로 자신만의 서버를 설정할 수도 있습니다.\n\n참고로, 시그널링 서버는 사용자 데이터를 저장하지 않더라도 일부 기기의 연결 정보는 볼 수 있습니다. 이 점을 유의해 주세요. 특히 타인이 운영하는 서버를 사용할 경우 주의가 필요합니다.", + "P2P.Note.important_note": "피어 투 피어(P2P) 복제기의 실험적 구현입니다.", + "P2P.Note.important_note_sub": "이 기능은 아직 실험 단계에 있습니다. 이 기능이 예상대로 작동하지 않을 수 있음을 알아주세요. 또한 버그, 보안 문제 및 기타 문제가 있을 수 있습니다. 이 기능을 사용할 때는 본인의 책임 하에 사용하세요. 이 기능의 개발에 기여해 주세요.", + "P2P.Note.Summary": "이 기능은 무엇인가요? (설명과 참고사항이 적혀있습니다. 한 번 읽어보세요!)", + "P2P.NotEnabled": "%{title_p2p_sync}가 활성화되지 않았습니다. 새로운 연결을 열 수 없습니다.", + "P2P.P2PReplication": "%{P2P} 복제", + "P2P.PaneTitle": "%{long_p2p_sync}", + "P2P.ReplicatorInstanceMissing": "P2P 동기화 복제기를 찾을 수 없습니다. 구성되지 않았거나 활성화되지 않았을 수 있습니다.", + "P2P.SeemsOffline": "피어 ${name}이(가) 오프라인인 것 같습니다. 건너뜁니다.", + "P2P.SyncAlreadyRunning": "P2P 동기화가 이미 실행 중입니다.", + "P2P.SyncCompleted": "P2P 동기화가 완료되었습니다.", + "P2P.SyncStartedWith": "${name}과의 P2P 동기화가 시작되었습니다.", + "paneMaintenance.markDeviceResolvedAfterBackup": "백업 후 장치를 해결됨으로 표시", + "paneMaintenance.remoteLockedAndDeviceNotAccepted": "원격 데이터베이스가 잠겨 있으며 이 장치는 아직 승인되지 않았습니다.", + "paneMaintenance.remoteLockedResolvedDevice": "원격 데이터베이스가 잠겨 있지만 이 장치는 이미 승인되었습니다.", + "paneMaintenance.unlockDatabaseReady": "데이터베이스 잠금 해제", + "Passphrase": "패스프레이즈", + "Passphrase of sensitive configuration items": "민감한 구성 항목의 패스프레이즈", + "password": "비밀번호", + "Password": "비밀번호", + "Paste a connection string": "연결 문자열 붙여넣기", + "Paste the Setup URI generated from one of your active devices.": "현재 사용 중인 장치 중 하나에서 생성한 설정 URI를 붙여 넣으세요。", + "Path Obfuscation": "경로 난독화", + "Patterns to match files for overwriting instead of merging": "병합 대신 덮어쓸 파일을 판별하는 패턴", + "Patterns to match files for syncing": "동기화할 파일을 판별하는 패턴", + "Peer-to-Peer only": "Peer-to-Peer 전용", + "Peer-to-Peer Synchronisation": "피어 투 피어 동기화", + "Per-file-saved customization sync": "파일별 저장 사용자 설정 동기화", + "Perform": "실행", + "Perform cleanup": "정리 실행", + "Perform Garbage Collection": "가비지 컬렉션 실행", + "Perform Garbage Collection to remove unused chunks and reduce database size.": "사용하지 않는 청크를 제거하고 데이터베이스 크기를 줄이기 위해 가비지 컬렉션을 실행합니다.", + "Periodic Sync interval": "주기적 동기화 간격", + "Pick a file to resolve conflict": "충돌을 해결할 파일 선택", + "Please disable 'Read chunks online' in settings to use Garbage Collection.": "Garbage Collection을 사용하려면 설정에서 \"Read chunks online\"을 비활성화해 주세요.", + "Please enable 'Compute revisions for chunks' in settings to use Garbage Collection.": "Garbage Collection을 사용하려면 설정에서 \"Compute revisions for chunks\"를 활성화해 주세요.", + "Please select 'Cancel' explicitly to cancel this operation.": "이 작업을 취소하려면 반드시 \"취소\"를 명시적으로 선택해 주세요.", + "Please select a method to import the settings from another device.": "다른 장치에서 설정을 가져올 방법을 선택해 주세요。", + "Please select an option to proceed": "계속하려면 항목을 선택해 주세요", + "Please select the type of server to which you are connecting.": "연결할 서버 유형을 선택해 주세요。", + "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": "이 장치 이름을 설정해 주세요", + "Plug-in version": "플러그인 버전", + "Prepare the 'report' to create an issue": "이슈 생성을 위한 '보고서' 준비", + "Presets": "프리셋", + "Proceed Garbage Collection": "Garbage Collection 계속", + "Proceed with Setup URI": "설정 URI로 계속", + "Proceeding with Garbage Collection, ignoring missing nodes.": "누락된 노드를 무시하고 Garbage Collection을 계속 진행합니다.", + "Proceeding with Garbage Collection.": "Garbage Collection을 진행합니다.", + "Process small files in the foreground": "포그라운드에서 작은 파일 처리", + "Progress": "진행 상태", + "PureJS fallback (Fast, W/O WebAssembly)": "PureJS 대체 방식 (빠름, WebAssembly 없음)", + "Purge all download/upload cache.": "모든 다운로드/업로드 캐시를 제거합니다.", + "Purge all journal counter": "모든 저널 카운터 삭제", + "Rebuild local and remote database with local files.": "로컬 파일로 로컬 및 원격 데이터베이스를 다시 구축합니다.", + "Rebuilding Operations (Remote Only)": "재구축 작업 (원격 전용)", + "Recreate all": "모두 다시 생성", + "Recreate missing chunks for all files": "모든 파일의 누락된 청크 다시 생성", + "RedFlag.Fetch.Method.Desc": "어떻게 가져오시겠습니까?\n- %{RedFlag.Fetch.Method.FetchSafer}. (권장)\n **낮은 트래픽**, **높은 CPU**, **낮은 위험**\n- %{RedFlag.Fetch.Method.FetchSmoother}.\n **낮은 트래픽**, **보통 CPU**, **낮음에서 보통 위험**\n- %{RedFlag.Fetch.Method.FetchTraditional}.\n **높은 트래픽**, **낮은 CPU**, **낮음에서 보통 위험**\n\n>[!INFO]- 세부 사항\n> ## %{RedFlag.Fetch.Method.FetchSafer}. (권장)\n> **낮은 트래픽**, **높은 CPU**, **낮은 위험**\n> 이 옵션은 원격 소스에서 데이터를 가져오기 전에 기존 로컬 파일을 사용하여 로컬 데이터베이스를 먼저 생성합니다.\n> 로컬과 원격 모두에 일치하는 파일이 있으면 둘 사이의 차이점만 전송됩니다.\n> 하지만 두 위치 모두에 있는 파일은 초기에 충돌 파일로 처리됩니다. 실제로 충돌하지 않는다면 자동으로 해결되지만 이 과정은 시간이 걸릴 수 있습니다.\n> 이는 일반적으로 가장 안전한 방법으로 데이터 손실 위험을 최소화합니다.\n> ## %{RedFlag.Fetch.Method.FetchSmoother}.\n> **낮은 트래픽**, **보통 CPU**, **낮음에서 보통 위험** (작업에 따라)\n> 이 옵션은 먼저 로컬 파일에서 데이터베이스용 청크를 생성한 다음 데이터를 가져옵니다. 따라서 로컬에 없는 청크만 전송됩니다. 하지만 모든 메타데이터는 원격 소스에서 가져옵니다.\n> 그런 다음 로컬 파일이 시작 시 이 메타데이터와 비교됩니다. 더 새로운 것으로 간주되는 콘텐츠가 오래된 것을 덮어씁니다(수정 시간 기준). 이 결과는 원격 데이터베이스에 다시 동기화됩니다.\n> 로컬 파일이 실제로 최신 타임스탬프라면 일반적으로 안전합니다. 하지만 파일이 더 새로운 타임스탬프를 가지고 있지만 더 오래된 콘텐츠를 가지고 있다면(초기 `welcome.md`처럼) 문제가 발생할 수 있습니다.\n> 이는 \"%{RedFlag.Fetch.Method.FetchSafer}\"보다 CPU를 덜 사용하고 더 빠르지만 주의 깊게 사용하지 않으면 데이터 손실로 이어질 수 있습니다.\n> ## %{RedFlag.Fetch.Method.FetchTraditional}.\n> **높은 트래픽**, **낮은 CPU**, **낮음에서 보통 위험** (작업에 따라)\n> 모든 것이 원격에서 가져와집니다.\n> %{RedFlag.Fetch.Method.FetchSmoother}와 유사하지만 모든 청크가 원격 소스에서 가져와집니다.\n> 이는 가장 전통적인 가져오기 방법으로 일반적으로 가장 많은 네트워크 트래픽과 시간을 소모합니다. 또한 '%{RedFlag.Fetch.Method.FetchSmoother}' 옵션과 유사하게 원격 파일을 덮어쓸 위험이 있습니다.\n> 하지만 가장 오래되고 가장 직접적인 접근 방식이기 때문에 종종 가장 안정적인 방법으로 간주됩니다.", + "RedFlag.Fetch.Method.FetchSafer": "가져오기 전에 로컬 데이터베이스를 한 번 생성", + "RedFlag.Fetch.Method.FetchSmoother": "가져오기 전에 로컬 파일 청크 생성", + "RedFlag.Fetch.Method.FetchTraditional": "원격에서 모든 것 가져오기", + "RedFlag.Fetch.Method.Title": "어떻게 가져오시겠습니까?", + "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": "디스크 변경 사항이 데이터베이스에 반영되는 빈도를 줄입니다", + "Region": "지역", + "Remediation": "복구 조치", + "Remediation Setting Changed": "복구 설정이 변경됨", + "Remote Database Tweak (In sunset)": "원격 데이터베이스 조정 (폐기 예정)", + "Remote Databases": "원격 데이터베이스", + "Remote name": "원격 이름", + "Remote server type": "원격 서버 유형", + "Remote Type": "원격 유형", + "Rename": "이름 바꾸기", + "Replicator.Dialogue.Locked.Action.Dismiss": "재확인을 위해 취소", + "Replicator.Dialogue.Locked.Action.Fetch": "원격 데이터베이스에서 모든 것을 다시 가져오기", + "Replicator.Dialogue.Locked.Action.Unlock": "원격 데이터베이스 잠금 해제", + "Replicator.Dialogue.Locked.Message": "원격 데이터베이스가 잠겨 있습니다. 이는 일부 터미널에서 데이터베이스를 재구축했기 때문입니다.\n따라서 현재 기기는 데이터베이스 손상을 방지하기 위해 연결을 일시적으로 보류해야 합니다.\n\n선택할 수 있는 세 가지 방법이 있습니다:\n\n- %{Replicator.Dialogue.Locked.Action.Fetch}\n 가장 권장되고 신뢰할 수 있는 방법입니다. 로컬 데이터베이스를 초기화한 뒤, 원격 데이터베이스의 전체 데이터를 다시 가져옵니다. 대부분의 경우 안전하게 수행할 수 있으나, 시간이 다소 걸리며 안정적인 네트워크 환경에서 진행해야 합니다.\n- %{Replicator.Dialogue.Locked.Action.Unlock}\n 이 방법은 다른 동기화 방식으로 이미 완전하고 안정적으로 동기화된 경우에만 사용할 수 있습니다. 단순히 파일이 같다는 의미가 아니므로, 확신이 없다면 사용을 피하는 것이 좋습니다.\n- %{Replicator.Dialogue.Locked.Action.Dismiss}\n 이번 작업을 취소하고, 다음 요청 시 다시 안내받습니다.\n", + "Replicator.Dialogue.Locked.Message.Fetch": "모든 것 가져오기가 예약되었습니다. 이를 수행하기 위해 플러그인이 재시작됩니다.", + "Replicator.Dialogue.Locked.Message.Unlocked": "원격 데이터베이스 잠금이 해제되었습니다. 작업을 다시 시도해 주세요.", + "Replicator.Dialogue.Locked.Title": "잠김", + "Replicator.Message.Cleaned": "데이터베이스 정리가 진행 중입니다. 복제가 취소되었습니다", + "Replicator.Message.InitialiseFatalError": "사용 가능한 복제기가 없습니다. 치명적인 오류입니다.", + "Replicator.Message.Pending": "일부 파일 이벤트가 대기 중입니다. 복제가 취소되었습니다.", + "Replicator.Message.SomeModuleFailed": "일부 모듈 실패로 복제가 취소되었습니다", + "Replicator.Message.VersionUpFlash": "설정을 열고 메시지를 확인해 주세요. 복제가 취소되었습니다.", + "Requires restart of Obsidian": "Obsidian 재시작 필요", + "Requires restart of Obsidian.": "Obsidian 재시작이 필요합니다.", + "Rerun Onboarding Wizard": "온보딩 마법사 다시 실행", + "Rerun the onboarding wizard to set up Self-hosted LiveSync again.": "온보딩 마법사를 다시 실행하여 Self-hosted LiveSync를 다시 설정합니다.", + "Rerun Wizard": "마법사 다시 실행", + "Resend": "다시 보내기", + "Resend all chunks to the remote.": "모든 청크를 원격으로 다시 보냅니다.", + "Reset": "재설정", + "Reset all": "모두 재설정", + "Reset all journal counter": "모든 저널 카운터 재설정", + "Reset journal received history": "저널 수신 기록 재설정", + "Reset journal sent history": "저널 송신 기록 재설정", + "Reset notification threshold and check the remote database usage": "알림 임계값을 초기화하고 원격 데이터베이스 사용량 확인", + "Reset received": "수신 기록 재설정", + "Reset sent history": "송신 기록 재설정", + "Reset Synchronisation information": "동기화 정보 재설정", + "Reset Synchronisation on This Device": "이 장치의 동기화 상태 재설정", + "Reset the remote storage size threshold and check the remote storage size again.": "원격 저장소 크기 임계값을 초기화하고 원격 저장소 크기를 다시 확인합니다.", + "Resolve All": "모두 해결", + "Resolve all conflicted files": "충돌한 모든 파일 해결", + "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.": "충돌한 모든 파일을 더 최신 버전으로 해결합니다. 주의: 이전 버전은 덮어써지며 복원할 수 없습니다.", + "Restart Now": "지금 재시작", + "Restore or reconstruct local database from remote.": "원격에서 로컬 데이터베이스를 복원하거나 재구축합니다.", + "Run Doctor": "진단 실행", + "S3/MinIO/R2 Object Storage": "S3/MinIO/R2 객체 스토리지", + "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.": "이 시간(초) 후에 강제로 저장이 수행됩니다.", + "Scan a QR Code (Recommended for mobile)": "QR 코드 스캔(모바일 권장)", + "Scan changes on customization sync": "사용자 설정 동기화 시 변경 사항 검색", + "Scan customization automatically": "사용자 설정 자동 검색", + "Scan customization before replicating.": "복제하기 전에 사용자 설정을 검색합니다.", + "Scan customization every 1 minute.": "1분마다 사용자 설정을 검색합니다.", + "Scan customization periodically": "주기적으로 사용자 설정 검색", + "Scan for Broken files": "손상된 파일 검사", + "Scan for hidden files before replication": "복제 전 숨겨진 파일 검색", + "Scan hidden files periodically": "주기적으로 숨겨진 파일 검색", + "Scan the QR code displayed on an active device using this device's camera.": "이 장치의 카메라로 활성 장치에 표시된 QR 코드를 스캔하세요。", + "Schedule and Restart": "예약 후 재시작", + "Scram Switches": "긴급 전환 스위치", + "Scram!": "긴급 조치", + "Seconds, 0 to disable": "초 단위, 0으로 설정하면 비활성화", + "Seconds. Saving to the local database will be delayed until this value after we stop typing or saving.": "초 단위입니다. 타이핑이나 저장을 중단한 후 이 시간동안 로컬 데이터베이스 저장이 지연됩니다.", + "Secret Key": "시크릿 키", + "Select the database adapter to use.": "사용할 데이터베이스 어댑터를 선택합니다.", + "Send": "보내기", + "Send chunks": "청크 보내기", + "Server URI": "서버 URI", + "Setting.GenerateKeyPair.Desc": "키 페어를 생성했습니다!\n\n참고: 이 키 페어는 다시 표시되지 않습니다. 안전한 곳에 저장해 주세요. 분실하면 새 키 페어를 생성해야 합니다.\n참고 2: 공개 키는 spki 형식이고, 개인 키는 pkcs8 형식입니다. 편의상 공개 키의 줄 바꿈은 `\\n`으로 변환됩니다.\n참고 3: 공개 키는 원격 데이터베이스에서 구성되어야 하고, 개인 키는 로컬 기기에서 구성되어야 합니다.\n\n>[!FOR YOUR EYES ONLY]-\n>
\n>\n> ### 공개 키\n> ```\n${public_key}\n> ```\n>\n> ### 개인 키\n> ```\n${private_key}\n> ```\n>\n>
\n\n>[!Both for copying]-\n>\n>
\n>\n> ```\n${public_key}\n${private_key}\n> ```\n>\n>
\n\n\n", + "Setting.GenerateKeyPair.Title": "새 키 페어가 생성되었습니다!", + "Setting.TroubleShooting": "문제 해결", + "Setting.TroubleShooting.Doctor": "설정 진단 마법사", + "Setting.TroubleShooting.Doctor.Desc": "최적화되지 않은 설정을 감지합니다. (데이터 구조 전환 시와 동일)", + "Setting.TroubleShooting.ScanBrokenFiles": "손상된 파일 검사", + "Setting.TroubleShooting.ScanBrokenFiles.Desc": "데이터베이스에 올바르게 저장되지 않은 파일을 검사합니다.", + "SettingTab.Message.AskRebuild": "변경 사항을 적용하려면 원격 데이터베이스에서 가져와야 합니다. 계속 진행하시겠습니까?", + "Setup URI dialog cancelled.": "Setup URI 대화 상자가 취소되었습니다.", + "Setup.QRCode": "설정을 전송하기 위한 QR 코드를 생성했습니다. 휴대폰이나 다른 기기로 QR 코드를 스캔해 주세요.\n참고: QR 코드는 암호화되지 않았으므로 열 때 주의하세요.\n\n>[!FOR YOUR EYES ONLY]-\n>
${qr_image}
", + "Setup.RemoteE2EE.AdvancedTitle": "고급", + "Setup.RemoteE2EE.AlgorithmWarning": "암호화 알고리즘을 변경하면 다른 알고리즘으로 암호화된 기존 데이터에 접근할 수 없게 됩니다. 모든 기기에서 동일한 알고리즘을 사용하도록 설정해 데이터 접근성을 유지하세요.", + "Setup.RemoteE2EE.ButtonCancel": "취소", + "Setup.RemoteE2EE.ButtonProceed": "진행", + "Setup.RemoteE2EE.DefaultAlgorithmDesc": "대부분의 경우 기본 알고리즘(${algorithm})을 그대로 사용하는 것이 좋습니다. 이 설정은 기존 Vault가 다른 형식으로 암호화되어 있는 경우에만 필요합니다.", + "Setup.RemoteE2EE.Guidance": "엔드투엔드 암호화 설정을 구성해 주세요.", + "Setup.RemoteE2EE.LabelEncrypt": "엔드투엔드 암호화", + "Setup.RemoteE2EE.LabelEncryptionAlgorithm": "암호화 알고리즘", + "Setup.RemoteE2EE.LabelObfuscateProperties": "속성 난독화", + "Setup.RemoteE2EE.MultiDestinationWarning": "여러 동기화 대상에 연결하는 경우에도 이 설정은 동일해야 합니다.", + "Setup.RemoteE2EE.ObfuscatePropertiesDesc": "속성(예: 파일 경로, 크기, 생성일 및 수정일)을 난독화하면 원격 서버에서 파일과 폴더의 구조 및 이름을 식별하기 어렵게 만들어 보안을 한층 강화할 수 있습니다. 이는 개인 정보를 보호하고 권한 없는 사용자가 데이터에 관한 정보를 추론하기 어렵게 만듭니다.", + "Setup.RemoteE2EE.PassphraseValidationLine1": "엔드투엔드 암호화 패스프레이즈는 실제 동기화가 시작되기 전까지 검증되지 않는다는 점에 유의하세요. 이것은 데이터를 보호하기 위한 보안 조치입니다.", + "Setup.RemoteE2EE.PassphraseValidationLine2": "따라서 서버 정보를 수동으로 구성할 때는 각별히 주의해 주세요. 잘못된 패스프레이즈를 입력하면 서버의 데이터가 손상됩니다. 이는 의도된 동작이니 반드시 이해하고 진행해 주세요.", + "Setup.RemoteE2EE.PlaceholderPassphrase": "패스프레이즈를 입력하세요", + "Setup.RemoteE2EE.StronglyRecommendedLine1": "엔드투엔드 암호화를 활성화하면 데이터가 원격 서버로 전송되기 전에 이 기기에서 암호화됩니다. 즉, 누군가 서버에 접근하더라도 패스프레이즈 없이는 데이터를 읽을 수 없습니다. 다른 기기에서 데이터를 복호화할 때도 필요하므로 패스프레이즈를 반드시 기억해 두세요.", + "Setup.RemoteE2EE.StronglyRecommendedLine2": "또한 Peer-to-Peer 동기화를 사용 중이더라도, 나중에 다른 방식으로 전환하여 원격 서버에 연결하면 이 설정이 그대로 사용됩니다.", + "Setup.RemoteE2EE.StronglyRecommendedTitle": "강력 권장", + "Setup.RemoteE2EE.Title": "엔드투엔드 암호화", + "Setup.ScanQRCode.ButtonClose": "이 대화 상자 닫기", + "Setup.ScanQRCode.Guidance": "기존 기기에서 설정을 가져오려면 아래 단계를 따라 주세요.", + "Setup.ScanQRCode.Step1": "이 기기에서는 이 Vault를 계속 열어 두세요.", + "Setup.ScanQRCode.Step2": "원본 기기에서 Obsidian을 엽니다.", + "Setup.ScanQRCode.Step3": "원본 기기에서 명령 팔레트를 열고 \"설정을 QR 코드로 표시\" 명령을 실행합니다.", + "Setup.ScanQRCode.Step4": "이 기기에서 카메라 앱으로 전환하거나 QR 코드 스캐너를 사용해 표시된 QR 코드를 스캔하세요.", + "Setup.ScanQRCode.Title": "QR 코드 스캔", + "Setup.ShowQRCode": "QR 코드 표시", + "Setup.ShowQRCode.Desc": "설정을 전송하기 위한 QR 코드를 표시합니다.", + "Setup.UseSetupURI.ButtonCancel": "취소", + "Setup.UseSetupURI.ButtonProceed": "설정 테스트 후 계속", + "Setup.UseSetupURI.ErrorFailedToParse": "Setup URI를 해석하지 못했습니다. URI와 패스프레이즈를 확인해 주세요.", + "Setup.UseSetupURI.ErrorPassphraseRequired": "Vault 패스프레이즈를 입력해 주세요.", + "Setup.UseSetupURI.GuidanceLine1": "서버 설치 중 또는 다른 기기에서 생성된 Setup URI와 Vault 패스프레이즈를 입력해 주세요.", + "Setup.UseSetupURI.GuidanceLine2": "명령 팔레트에서 \"설정을 새 Setup URI로 복사\" 명령을 실행하면 새 Setup URI를 생성할 수 있습니다.", + "Setup.UseSetupURI.InvalidInfo": "Setup URI가 올바르지 않습니다. 확인한 뒤 다시 시도해 주세요.", + "Setup.UseSetupURI.LabelPassphrase": "Vault 패스프레이즈", + "Setup.UseSetupURI.LabelSetupURI": "Setup URI", + "Setup.UseSetupURI.PlaceholderPassphrase": "Vault 패스프레이즈를 입력하세요", + "Setup.UseSetupURI.Title": "Setup URI 입력", + "Setup.UseSetupURI.ValidInfo": "Setup URI가 유효하며 사용할 준비가 되었습니다.", + "Should we keep folders that don't have any files inside?": "내부에 파일이 없는 폴더를 유지하시겠습니까?", + "Should we only check for conflicts when a file is opened?": "파일을 열 때만 충돌을 확인하시겠습니까?", + "Should we prompt you about conflicting files when a file is opened?": "파일을 열 때 충돌하는 파일에 대해 알림을 표시하시겠습니까?", + "Should we prompt you for every single merge, even if we can safely merge automatcially?": "안전하게 자동 병합할 수 있는 경우에도 모든 병합에 대해 알림을 받으시겠습니까?", + "Show full banner": "전체 배너 표시", + "Show only notifications": "알림만 표시", + "Show status as icons only": "아이콘으로만 상태 표시", + "Show status icon instead of file warnings banner": "파일 경고 배너 대신 상태 아이콘 표시", + "Show status inside the editor": "편집기 내부에 상태 표시", + "Show status on the status bar": "상태 바에 상태 표시", + "Show verbose log. Please enable if you report an issue.": "자세한 로그를 표시합니다. 문제를 신고하는 경우 활성화해 주세요.", + "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.": "일부 기기의 진행 값이 다릅니다(최대: ${maxProgress}, 최소: ${minProgress}).\n이는 일부 기기가 동기화를 완료하지 않았음을 의미할 수 있으며, 충돌로 이어질 수 있습니다. 계속 진행하기 전에 모든 기기가 동기화되었는지 반드시 확인하는 것을 강력히 권장합니다.", + "Starts synchronisation when a file is saved.": "파일이 저장될 때 동기화를 시작합니다.", + "Stop reflecting database changes to storage files.": "데이터베이스 변경 사항을 스토리지 파일에 반영하는 것을 중단합니다.", + "Stop watching for file changes.": "파일 변경 사항 감시를 중단합니다.", + "Suppress notification of hidden files change": "숨겨진 파일 변경 알림 억제", + "Suspend database reflecting": "데이터베이스 반영 일시 중단", + "Suspend file watching": "파일 감시 일시 중단", + "Switch to IDB": "IDB로 전환", + "Switch to IndexedDB": "IndexedDB로 전환", + "Sync after merging file": "파일 병합 후 동기화", + "Sync automatically after merging files": "파일 병합 후 자동으로 동기화", + "Sync Mode": "동기화 모드", + "Sync on Editor Save": "편집기 저장 시 동기화", + "Sync on File Open": "파일 열기 시 동기화", + "Sync on Save": "저장 시 동기화", + "Sync on Startup": "시작 시 동기화", + "Synchronisation utilising journal files. You must have set up an S3/MinIO/R2 compatible object storage.": "저널 파일을 활용하는 동기화 방식입니다. S3/MinIO/R2 호환 객체 스토리지를 미리 구성해야 합니다。", + "Synchronising files": "동기화할 파일", + "Syncing": "동기화", + "Target patterns": "대상 패턴", + "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 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.": "다음 승인된 노드에는 노드 정보가 없습니다:\n- ${missingNodes}\n\n이는 해당 노드가 한동안 연결되지 않았거나 이전 버전에 머물러 있음을 의미합니다.\n가능하다면 먼저 모든 기기를 업데이트하는 것이 좋습니다. 더 이상 사용하지 않는 기기가 있다면 원격을 한 번 잠가 승인된 노드를 모두 정리할 수 있습니다.", + "The Hash algorithm for chunk IDs": "청크 ID용 해시 알고리즘", + "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 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.": "이벤트 발생 시 자동 동기화의 최소 간격입니다.", + "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.": "URI가 없거나 세부 설정을 직접 구성하려는 사용자를 위한 고급 옵션입니다。", + "This is the most suitable synchronisation method for the design. All functions are available. You must have set up a CouchDB instance.": "이 설계에 가장 적합한 동기화 방식입니다. 모든 기능을 사용할 수 있습니다. CouchDB 인스턴스를 미리 구성해야 합니다。", + "This passphrase will not be copied to another device. It will be set to `Default` until you configure it again.": "이 패스프레이즈는 다른 기기로 복사되지 않습니다. 다시 구성할 때까지 `기본값`으로 설정됩니다.", + "This will recreate chunks for all files. If there were missing chunks, this may fix the errors.": "모든 파일의 청크를 다시 생성합니다. 누락된 청크가 있었다면 이 작업으로 오류가 해결될 수 있습니다.", + "Transfer Tweak": "전송 조정", + "TweakMismatchResolve.Action.Dismiss": "무시", + "TweakMismatchResolve.Action.UseConfigured": "구성된 설정 사용", + "TweakMismatchResolve.Action.UseMine": "원격 데이터베이스 설정 업데이트", + "TweakMismatchResolve.Action.UseMineAcceptIncompatible": "원격 데이터베이스 설정 업데이트하지만 그대로 유지", + "TweakMismatchResolve.Action.UseMineWithRebuild": "원격 데이터베이스 설정 업데이트하고 다시 재구축", + "TweakMismatchResolve.Action.UseRemote": "이 기기에 설정 적용", + "TweakMismatchResolve.Action.UseRemoteAcceptIncompatible": "이 기기에 설정 적용하지만 호환성 문제 무시", + "TweakMismatchResolve.Action.UseRemoteWithRebuild": "이 기기에 설정 적용하고 다시 가져오기", + "TweakMismatchResolve.Message.Main": "\n원격 데이터베이스의 설정은 다음과 같습니다. 이 값들은 이 기기와 최소 한 번 동기화된 다른 기기에서 구성된 것입니다.\n\n이 설정을 사용하려면 %{TweakMismatchResolve.Action.UseConfigured}를 선택해 주세요.\n이 기기의 설정을 유지하려면 %{TweakMismatchResolve.Action.Dismiss}를 선택해 주세요.\n\n${table}\n\n>[!TIP]\n> 모든 설정을 동기화하려면 이 기능으로 최소 구성을 적용한 후 `마크다운을 통한 설정 동기화`를 사용해 주세요.\n\n${additionalMessage}", + "TweakMismatchResolve.Message.MainTweakResolving": "구성이 원격 서버의 것과 일치하지 않습니다.\n\n다음 구성이 일치해야 합니다:\n\n${table}\n\n결정을 알려주세요.\n\n${additionalMessage}", + "TweakMismatchResolve.Message.UseRemote.WarningRebuildRecommended": "\n>[!NOTICE]\n> 일부 변경사항은 호환 가능하지만 추가 스토리지 및 전송량을 소모할 수 있습니다. 재구축을 권장합니다. 하지만 현재 재구축을 수행하지 않더라도 향후 유지보수에서 구현될 수 있습니다.\n> ***시간적 여유가 있고 안정적인 네트워크에 연결된 상태에서 적용해 주세요!***", + "TweakMismatchResolve.Message.UseRemote.WarningRebuildRequired": "\n>[!WARNING]\n> 일부 원격 구성이 이 기기의 로컬 데이터베이스와 호환되지 않습니다. 로컬 데이터베이스 재구축이 필요합니다.\n> ***시간적 여유가 있고 안정적인 네트워크에 연결된 상태에서 적용해 주세요!***", + "TweakMismatchResolve.Message.WarningIncompatibleRebuildRecommended": "\n>[!NOTICE]\n> 로컬 데이터베이스와 원격 데이터베이스가 호환되지 않도록 만드는 값들이 다른 것을 감지했습니다.\n> 일부 변경사항은 호환 가능하지만 추가 스토리지 및 전송량을 소모할 수 있습니다. 재구축을 권장합니다. 하지만 현재 재구축을 수행하지 않더라도 향후 유지보수에서 구현될 수 있습니다.\n> 재구축을 원한다면 몇 분 이상 소요됩니다. **지금 수행해도 안전한지 확인해 주세요.**", + "TweakMismatchResolve.Message.WarningIncompatibleRebuildRequired": "\n>[!WARNING]\n> 로컬 데이터베이스와 원격 데이터베이스가 호환되지 않도록 만드는 값들이 다른 것을 감지했습니다.\n> 로컬 또는 원격 재구축이 필요합니다. 둘 다 몇 분 이상 소요됩니다. **지금 수행해도 안전한지 확인해 주세요.**", + "TweakMismatchResolve.Table": "| 값 이름 | 이 기기 | 원격 |\n|: --- |: ---- :|: ---- :|\n${rows}\n\n", + "TweakMismatchResolve.Table.Row": "| ${name} | ${self} | ${remote} |", + "TweakMismatchResolve.Title": "구성 불일치 감지", + "TweakMismatchResolve.Title.TweakResolving": "구성 불일치 감지", + "TweakMismatchResolve.Title.UseRemoteConfig": "원격 구성 사용", + "Unique name between all synchronized devices. To edit this setting, please disable customization sync once.": "모든 동기화된 기기 간 고유 이름입니다. 이 설정을 편집하려면 사용자 설정 동기화를 한 번 비활성화해 주세요.", + "Use a custom passphrase": "사용자 지정 암호문구 사용", + "Use a Setup URI (Recommended)": "설정 URI 사용(권장)", + "Use Custom HTTP Handler": "커스텀 HTTP 핸들러 사용", + "Use dynamic iteration count": "동적 반복 횟수 사용", + "Use Segmented-splitter": "의미 기반 분할 사용", + "Use splitting-limit-capped chunk splitter": "분할 제한 상한 청크 분할기 사용", + "Use the trash bin": "휴지통 사용", + "Use timeouts instead of heartbeats": "하트비트 대신 타임아웃 사용", + "username": "사용자명", + "Username": "사용자명", + "Verbose Log": "자세한 로그", + "Verify all": "모두 검증", + "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.": "경고! 이는 성능에 심각한 영향을 미칩니다. 로그는 기본 이름으로 동기화되지 않습니다. 로그에는 종종 기밀 정보가 포함되어 있으므로 주의해 주세요.", + "We cannot change the device name while this feature is enabled. Please disable this feature to change the device name.": "이 기능이 활성화되어 있는 동안에는 장치 이름을 변경할 수 없습니다. 장치 이름을 변경하려면 이 기능을 비활성화하세요.", + "We will now guide you through a few questions to simplify the synchronisation setup.": "동기화 설정을 더 쉽게 진행할 수 있도록 몇 가지 질문으로 안내해 드리겠습니다。", + "We will now proceed with the server configuration.": "이제 서버 구성을 진행하겠습니다。", + "Welcome to Self-hosted LiveSync": "Self-hosted LiveSync에 오신 것을 환영합니다", + "When you save a file in the editor, start a sync automatically": "편집기에서 파일을 저장할 때 자동으로 동기화를 시작합니다", + "Write credentials in the file": "파일에 자격 증명 저장", + "Write logs into the file": "파일에 로그 기록", + "xxhash32 (Fast but less collision resistance)": "xxhash32 (빠르지만 충돌 저항성은 낮음)", + "xxhash64 (Fastest)": "xxhash64 (가장 빠름)", + "Yes, I want to add this device to my existing synchronisation": "예, 이 장치를 기존 동기화에 추가하겠습니다", + "Yes, I want to set up a new synchronisation": "예, 새 동기화를 설정하겠습니다", + "You are adding this device to an existing synchronisation setup.": "이 장치를 기존 동기화 구성에 추가하려고 합니다。" +} diff --git a/src/common/messagesJson/ru.json b/src/common/messagesJson/ru.json new file mode 100644 index 00000000..6712d66d --- /dev/null +++ b/src/common/messagesJson/ru.json @@ -0,0 +1,856 @@ +{ + "(Active)": "(Активна)", + "(BETA) Always overwrite with a newer file": "(БЕТА) Всегда перезаписывать более новым файлом", + "(Beta) Use ignore files": "(Бета) Использовать файлы игнорирования", + "(Days passed, 0 to disable automatic-deletion)": "(Дней прошло, 0 для отключения автоматического удаления)", + "(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)": "(Мега символов)", + "(Not recommended) If set, credentials will be stored in the file": "(Не рекомендуется) Если установлено, учётные данные будут сохранены в файле", + "(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": "(Устарело) Использовать старый адаптер для совместимости", + "(RegExp) Empty to sync all files. Set filter as a regular expression to limit synchronising files.": "(RegExp) Оставьте пустым, чтобы синхронизировать все файлы. Укажите регулярное выражение, чтобы ограничить синхронизируемые файлы.", + "(RegExp) If this is set, any changes to local and remote files that match this will be skipped.": "(RegExp) Если задано, любые изменения локальных и удалённых файлов, соответствующих этому шаблону, будут пропускаться.", + "(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.": "(Выберите этот вариант, если вы уже используете синхронизацию на другом компьютере или смартфоне.) Он подходит, если вы хотите добавить это устройство к уже существующей конфигурации LiveSync。", + "(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.": "(Выберите этот вариант, если настраиваете это устройство как первое устройство синхронизации.) Он подходит, если вы впервые используете LiveSync и хотите настроить всё с нуля。", + "> [!INFO]- The connected devices have been detected as follows:\n${devices}": "> [!INFO]- Обнаружены следующие подключённые устройства:\n${devices}", + "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.": "Setup URI — это одна строка текста, содержащая адрес сервера и данные аутентификации. Если URI был создан скриптом установки сервера, его использование обеспечивает простую и безопасную настройку。", + "Access Key": "Ключ доступа", + "Activate": "Активировать", + "Active Remote Configuration": "Активная удалённая конфигурация", + "Add default patterns": "Добавить шаблоны по умолчанию", + "Add new connection": "Добавить подключение", + "All devices have the same progress value (${progress}). Your devices seem to be synchronised. And be able to proceed with Garbage Collection.": "У всех устройств одинаковое значение прогресса (${progress}). Похоже, ваши устройства синхронизированы, и можно продолжать Garbage Collection.", + "Always prompt merge conflicts": "Всегда запрашивать разрешение конфликтов слияния", + "Analyse": "Анализировать", + "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.": "Проанализируйте использование базы данных и создайте TSV-отчёт для самостоятельной диагностики. Полученный отчёт можно вставить в любую удобную для вас таблицу.", + "Apply Latest Change if Conflicting": "Применить последнее изменение при конфликте", + "Apply preset configuration": "Применить предустановленную конфигурацию", + "Ask a passphrase at every launch": "Запрашивать парольную фразу при каждом запуске", + "Automatically Sync all files when opening Obsidian.": "Автоматически синхронизировать все файлы при открытии Obsidian.", + "Back": "Назад", + "Back to non-configured": "Вернуть в состояние без настройки", + "Batch database update": "Пакетное обновление базы данных", + "Batch limit": "Пакетный лимит", + "Batch size": "Размер пакета", + "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.": "До v0.17.16 мы использовали старый адаптер для локальной базы данных. Теперь предпочтителен новый адаптер. Однако требуется перестроение локальной базы данных.", + "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.", + "Bucket Name": "Имя бакета", + "Cancel": "Отмена", + "Cancel Garbage Collection": "Отменить Garbage Collection", + "Check": "Проверить", + "Check and convert non-path-obfuscated files": "Проверить и преобразовать файлы без обфускации пути", + "Check for documents that have not been converted to path-obfuscated IDs and convert them if necessary.": "Проверяет документы, которые ещё не были преобразованы в path-obfuscated ID, и при необходимости преобразует их.", + "cmdConfigSync.showCustomizationSync": "Показать синхронизацию настроек", + "Comma separated `.gitignore, .dockerignore`": "Через запятую `.gitignore, .dockerignore`", + "Compaction in progress on remote database...": "Выполняется компакция удалённой базы данных...", + "Compaction on remote database completed successfully.": "Компакция удалённой базы данных успешно завершена.", + "Compaction on remote database failed.": "Компакция удалённой базы данных завершилась ошибкой.", + "Compaction on remote database timed out.": "Время ожидания компакции удалённой базы данных истекло.", + "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 (Database structure)": "Совместимость (структура базы данных)", + "Compatibility (Internal API Usage)": "Совместимость (использование внутреннего API)", + "Compatibility (Metadata)": "Совместимость (метаданные)", + "Compatibility (Remote Database)": "Совместимость (удалённая база данных)", + "Compatibility (Trouble addressed)": "Совместимость (исправленные проблемы)", + "Compute revisions for chunks": "Вычислять ревизии для чанков", + "Configuration Encryption": "Шифрование конфигурации", + "Configure": "Настроить", + "Configure And Change Remote": "Настроить и переключить удалённое хранилище", + "Configure E2EE": "Настроить сквозное шифрование", + "Configure Remote": "Настроить удалённое хранилище", + "Configure the same server information as your other devices again, manually, very advanced users only.": "Снова вручную укажите те же параметры сервера, что и на других устройствах. Только для очень опытных пользователей。", + "Connection Method": "Способ подключения", + "Continue to CouchDB setup": "Перейти к настройке CouchDB", + "Continue to Peer-to-Peer only setup": "Перейти к настройке только Peer-to-Peer", + "Continue to S3/MinIO/R2 setup": "Перейти к настройке S3/MinIO/R2", + "Copy": "Копировать", + "Copy Report to clipboard": "Копировать отчёт в буфер обмена", + "CouchDB Connection Tweak": "Настройки подключения CouchDB", + "Cross-platform": "Кроссплатформенные", + "Current adapter: {adapter}": "Текущий адаптер: {adapter}", + "Customization Sync": "Синхронизация настроек", + "Customization Sync (Beta3)": "Синхронизация настроек (Beta3)", + "Data Compression": "Сжатие данных", + "Database Adapter": "Адаптер базы данных", + "Database Name": "Имя базы данных", + "Database suffix": "Суффикс базы данных", + "Default": "По умолчанию", + "Delay conflict resolution of inactive files": "Отложить разрешение конфликтов для неактивных файлов", + "Delay merge conflict prompt for inactive files.": "Отложить запрос конфликта слияния для неактивных файлов.", + "Delete": "Удалить", + "Delete all customization sync data": "Удалить все данные синхронизации настроек", + "Delete all data on the remote server.": "Удалить все данные на удалённом сервере.", + "Delete local database to reset or uninstall Self-hosted LiveSync": "Удалить локальную базу данных, чтобы сбросить или удалить Self-hosted LiveSync", + "Delete old metadata of deleted files on start-up": "Удалять старые метаданные удалённых файлов при запуске", + "Delete Remote Configuration": "Удалить удалённую конфигурацию", + "Delete remote configuration '{name}'?": "Удалить удалённую конфигурацию '{name}'?", + "descConnectSetupURI": "Это рекомендуемый способ настройки Self-hosted LiveSync с помощью Setup URI.", + "descCopySetupURI": "Идеально для настройки нового устройства!", + "descEnableLiveSync": "Включайте это только после настройки одного из двух вариантов выше.", + "descFetchConfigFromRemote": "Загрузить необходимые настройки с уже настроенного удалённого сервера.", + "descManualSetup": "Не рекомендуется, но полезно, если у вас нет Setup URI", + "descTestDatabaseConnection": "Открыть подключение к базе данных.", + "descValidateDatabaseConfig": "Проверяет и исправляет потенциальные проблемы с конфигурацией базы данных.", + "desktop": "рабочий стол", + "Developer": "Разработчик", + "Device": "Устройство", + "Device name": "Имя устройства", + "Device Setup Method": "Способ настройки устройства", + "dialog.yourLanguageAvailable": "Self-hosted LiveSync имеет переводы для вашего языка, поэтому была включена настройка языка Display language.\n\nПримечание: Не все сообщения переведены. Мы ждём ваших предложений!\nПримечание 2: При создании Issue, пожалуйста, вернитесь к lang-def, затем сделайте скриншоты, сообщения и логи. Это можно сделать в настройках.\nНадеемся, вам будет удобно использовать!", + "dialog.yourLanguageAvailable.btnRevertToDefault": "Оставить lang-def", + "dialog.yourLanguageAvailable.Title": "Доступен перевод!", + "Disables all synchronization and restart.": "Отключает всю синхронизацию и перезапускает приложение.", + "Disables logging, only shows notifications. Please disable if you report an issue.": "Отключает логирование, показывает только уведомления. Пожалуйста, отключите при сообщении о проблеме.", + "Display Language": "Язык интерфейса", + "Display name": "Отображаемое имя", + "Do not check configuration mismatch before replication": "Не проверять несовпадение конфигурации перед репликацией", + "Do not keep metadata of deleted files.": "Не хранить метаданные удалённых файлов.", + "Do not split chunks in the background": "Не разделять чанки в фоновом режиме", + "Do not use internal API": "Не использовать внутренний API", + "Doctor.Button.DismissThisVersion": "Нет, и не спрашивать до следующего выпуска", + "Doctor.Button.Fix": "Исправить", + "Doctor.Button.FixButNoRebuild": "Исправить без перестроения", + "Doctor.Button.No": "Нет", + "Doctor.Button.Skip": "Оставить как есть", + "Doctor.Button.Yes": "Да", + "Doctor.Dialogue.Main": "Привет! Диагностика настроек активирована из-за activateReason!\nК сожалению, некоторые настройки были обнаружены как потенциальные проблемы.\nНе волнуйтесь. Давайте решим их по очереди.\n\nСообщаем вам заранее, мы спросим о следующих пунктах.\n\nissues\n\nНачнём?", + "Doctor.Dialogue.MainFix": "name\n\n| Текущее | Идеальное |\n|:---:|:---:|\n| current | ideal |\n\n**Уровень рекомендации:** level\n\n### Почему это было обнаружено?\n\nreason\n\nnote\n\nИсправить на идеальное значение?", + "Doctor.Dialogue.Title": "Диагностика Self-hosted LiveSync", + "Doctor.Dialogue.TitleAlmostDone": "Почти готово!", + "Doctor.Dialogue.TitleFix": "Исправление проблемы current/total", + "Doctor.Level.Must": "Обязательно", + "Doctor.Level.Necessary": "Необходимо", + "Doctor.Level.Optional": "Опционально", + "Doctor.Level.Recommended": "Рекомендуется", + "Doctor.Message.NoIssues": "Проблем не обнаружено!", + "Doctor.Message.RebuildLocalRequired": "Внимание! Для применения требуется перестроение локальной базы данных!", + "Doctor.Message.RebuildRequired": "Внимание! Для применения требуется перестроение!", + "Doctor.Message.SomeSkipped": "Некоторые проблемы оставлены как есть. Спросить снова при следующем запуске?", + "Doctor.RULES.E2EE_V02500.REASON": "Сквозное шифрование стало более надёжным и быстрым. Предыдущее E2EE было скомпрометировано. Следует применить как можно скорее.", + "Duplicate": "Дублировать", + "Duplicate remote": "Дублировать удалённую конфигурацию", + "E2EE Configuration": "Конфигурация сквозного шифрования", + "Edge case addressing (Behaviour)": "Обработка особых случаев (поведение)", + "Edge case addressing (Database)": "Обработка особых случаев (база данных)", + "Edge case addressing (Processing)": "Обработка особых случаев (обработка)", + "Emergency restart": "Аварийный перезапуск", + "Enable advanced features": "Включить расширенные функции", + "Enable customization sync": "Включить синхронизацию настроек", + "Enable Developers' Debug Tools.": "Включить инструменты разработчика.", + "Enable edge case treatment features": "Включить функции обработки граничных случаев", + "Enable poweruser features": "Включить функции для опытных пользователей", + "Enable this if your Object Storage doesn't support CORS": "Включите, если ваше объектное хранилище не поддерживает CORS", + "Enable this option to automatically apply the most recent change to documents even when it conflicts": "Включите эту опцию для автоматического применения последних изменений к документам даже при конфликте", + "Encrypt contents on the remote database. If you use the plugin's synchronization feature, enabling this is recommended.": "Шифровать содержимое на удалённой базе данных. Рекомендуется включить при использовании функции синхронизации плагина.", + "Encrypting sensitive configuration items": "Шифрование конфиденциальных настроек", + "Encryption phassphrase. If changed, you should overwrite the server's database with the new (encrypted) files.": "Парольная фраза шифрования. При изменении нужно перезаписать базу данных сервера новыми (зашифрованными) файлами.", + "End-to-End Encryption": "Сквозное шифрование", + "Endpoint URL": "URL конечной точки", + "Enhance chunk size": "Улучшить размер чанка", + "Enter Server Information": "Ввести данные сервера", + "Enter the server information manually": "Ввести данные сервера вручную", + "Export": "Экспорт", + "Failed to connect to remote for compaction.": "Не удалось подключиться к удалённой базе данных для компакции.", + "Failed to connect to remote for compaction. ${reason}": "Не удалось подключиться к удалённой базе данных для компакции. ${reason}", + "Failed to start one-shot replication before Garbage Collection. Garbage Collection Cancelled.": "Не удалось запустить одноразовую репликацию перед Garbage Collection. Garbage Collection отменена.", + "Failed to start replication after Garbage Collection.": "Не удалось запустить репликацию после Garbage Collection.", + "Fetch": "Получить", + "Fetch chunks on demand": "Загружать чанки по требованию", + "Fetch database with previous behaviour": "Загрузить базу данных с предыдущим поведением", + "Fetch remote settings": "Получить настройки с удалённого хранилища", + "File to resolve conflict": "Файл для разрешения конфликта", + "Filename": "Имя файла", + "First, please select the option that best describes your current situation.": "Сначала выберите вариант, который лучше всего описывает вашу текущую ситуацию。", + "Flag and restart": "Пометить и перезапустить", + "Forces the file to be synced when opened.": "Принудительно синхронизировать файл при открытии.", + "Fresh Start Wipe": "Полный сброс для чистого старта", + "Garbage Collection cancelled by user.": "Пользователь отменил Garbage Collection.", + "Garbage Collection completed. Deleted chunks: ${deletedChunks} / ${totalChunks}. Time taken: ${seconds} seconds.": "Garbage Collection завершена. Удалено чанков: ${deletedChunks} / ${totalChunks}. Затраченное время: ${seconds} сек.", + "Garbage Collection Confirmation": "Подтверждение Garbage Collection", + "Garbage Collection V3 (Beta)": "Сборка мусора V3 (Beta)", + "Garbage Collection: Found ${unusedChunks} unused chunks to delete.": "Garbage Collection: найдено ${unusedChunks} неиспользуемых чанков для удаления.", + "Garbage Collection: Scanned ${scanned} / ~${docCount}": "Garbage Collection: просканировано ${scanned} / ~${docCount}", + "Garbage Collection: Scanning completed. Total chunks: ${totalChunks}, Used chunks: ${usedChunks}": "Garbage Collection: сканирование завершено. Всего чанков: ${totalChunks}, используемых чанков: ${usedChunks}", + "Handle files as Case-Sensitive": "Обрабатывать файлы с учётом регистра", + "Hidden Files": "Скрытые файлы", + "How to display network errors when the sync server is unreachable.": "Определяет, как отображать сетевые ошибки, если сервер синхронизации недоступен.", + "How would you like to configure the connection to your server?": "Как вы хотите настроить подключение к серверу?", + "I am adding a device to an existing synchronisation setup": "Я добавляю устройство к существующей настройке синхронизации", + "I am setting this up for the first time": "Я настраиваю это впервые", + "I know my server details, let me enter them": "Я знаю параметры сервера, позвольте ввести их вручную", + "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.": "Если включено, будет использоваться эффективная синхронизация настроек для каждого файла.", + "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.": "Если включено, чанки будут разделены не более чем на 100 элементов.", + "If enabled, newly created chunks are temporarily kept within the document, and graduated to become independent chunks once stabilised.": "Если включено, вновь созданные чанки временно хранятся в документе.", + "If enabled, the ⛔ icon will be shown inside the status instead of the file warnings banner. No details will be shown.": "Если включено, значок будет показан внутри статуса.", + "If enabled, the file under 1kb will be processed in the UI thread.": "Если включено, файлы меньше 1КБ будут обрабатываться в основном потоке.", + "If enabled, the notification of hidden files change will be suppressed.": "Если включено, уведомление об изменении скрытых файлов будет подавлено.", + "If this enabled, all chunks will be stored with the revision made from its content. (Previous behaviour)": "Если включено, все чанки будут храниться с ревизией из содержимого.", + "If this enabled, All files are handled as case-Sensitive (Previous behaviour).": "Если включено, все файлы обрабатываются с учётом регистра.", + "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.": "Если установлено, изменения файлов из списка игнорирования будут пропущены.", + "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.": "Если эта опция включена, PouchDB будет держать соединение открытым 60 секунд.", + "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.", + "Ignore and Proceed": "Игнорировать и продолжить", + "Ignore files": "Файлы для игнорирования", + "Ignore patterns": "Шаблоны исключения", + "Import connection": "Импортировать подключение", + "Incubate Chunks in Document": "Инкубировать чанки в документе", + "Initialise all journal history, On the next sync, every item will be received and sent.": "Инициализирует всю историю журнала. При следующей синхронизации каждый элемент будет заново получен и отправлен.", + "Interval (sec)": "Интервал (сек)", + "K.exp": "Экспериментальная", + "K.long_p2p_sync": "title_p2p_sync", + "K.P2P": "Peer-к-Peer", + "K.Peer": "Устройство", + "K.ScanCustomization": "Scan customization", + "K.short_p2p_sync": "P2P Синхр.", + "K.title_p2p_sync": "Синхронизация между устройствами", + "Keep empty folder": "Сохранять пустые папки", + "lang_def": "По умолчанию", + "lang-de": "Deutsch", + "lang-def": "lang_def", + "lang-es": "Español", + "lang-fr": "Français", + "lang-ja": "日本語", + "lang-ko": "한국어", + "lang-ru": "Русский", + "lang-zh": "简体中文", + "lang-zh-tw": "繁體中文", + "Later": "Позже", + "Limit: {datetime} ({timestamp})": "Лимит: {datetime} ({timestamp})", + "LiveSync could not handle multiple vaults which have same name without different prefix, This should be automatically configured.": "LiveSync не может обработать несколько хранилищ с одинаковым именем без разных префиксов.", + "liveSyncReplicator.beforeLiveSync": "Перед LiveSync запускаем OneShot...", + "liveSyncReplicator.cantReplicateLowerValue": "Нельзя реплицировать с меньшим значением.", + "liveSyncReplicator.checkingLastSyncPoint": "Поиск последней точки синхронизации.", + "liveSyncReplicator.couldNotConnectTo": "Не удалось подключиться к uri : name\n(db)", + "liveSyncReplicator.couldNotConnectToRemoteDb": "Не удалось подключиться к удалённой базе данных: d", + "liveSyncReplicator.couldNotConnectToServer": "Не удалось подключиться к серверу.", + "liveSyncReplicator.couldNotConnectToURI": "Не удалось подключиться к uri:dbRet", + "liveSyncReplicator.couldNotMarkResolveRemoteDb": "Не удалось отметить удалённую базу данных как разрешённую.", + "liveSyncReplicator.liveSyncBegin": "Начало LiveSync...", + "liveSyncReplicator.lockRemoteDb": "Блокировка удалённой базы данных для предотвращения повреждения данных", + "liveSyncReplicator.markDeviceResolved": "Отметить это устройство как «разрешённое».", + "liveSyncReplicator.oneShotSyncBegin": "Начало OneShot синхронизации... (syncMode)", + "liveSyncReplicator.remoteDbCorrupted": "Удалённая база данных новее или повреждена, убедитесь, что установлена последняя версия self-hosted-livesync", + "liveSyncReplicator.remoteDbCreatedOrConnected": "Удалённая база данных создана или подключена", + "liveSyncReplicator.remoteDbDestroyed": "Удалённая база данных уничтожена", + "liveSyncReplicator.remoteDbDestroyError": "Произошла ошибка при уничтожении удалённой базы данных:", + "liveSyncReplicator.remoteDbMarkedResolved": "Удалённая база данных отмечена как разрешённая.", + "liveSyncReplicator.replicationClosed": "Репликация закрыта", + "liveSyncReplicator.replicationInProgress": "Репликация уже выполняется", + "liveSyncReplicator.retryLowerBatchSize": "Повтор с меньшим размером пакета: batch_size/batches_limit", + "liveSyncReplicator.unlockRemoteDb": "Разблокировка удалённой базы данных для предотвращения повреждения данных", + "liveSyncSetting.errorNoSuchSettingItem": "Такого параметра настройки не существует: key", + "liveSyncSetting.originalValue": "Оригинал: value", + "liveSyncSetting.valueShouldBeInRange": "Значение должно быть min < значение < max", + "liveSyncSettings.btnApply": "Применить", + "Local Database Tweak": "Настройки локальной базы данных", + "Lock": "Заблокировать", + "Lock Server": "Заблокировать сервер", + "Lock the remote server to prevent synchronization with other devices.": "Блокирует удалённый сервер, чтобы запретить синхронизацию с другими устройствами.", + "logPane.autoScroll": "Автопрокрутка", + "logPane.logWindowOpened": "Окно лога открыто", + "logPane.pause": "Пауза", + "logPane.title": "Лог Self-hosted LiveSync", + "logPane.wrap": "Перенос", + "Maximum delay for batch database updating": "Максимальная задержка пакетного обновления базы данных", + "Maximum file size": "Максимальный размер файла", + "Maximum Incubating Chunk Size": "Максимальный размер инкубируемого чанка", + "Maximum Incubating Chunks": "Максимальное количество инкубируемых чанков", + "Maximum Incubation Period": "Максимальный период инкубации", + "MB (0 to disable).": "МБ (0 для отключения).", + "Memory cache": "Кэш в памяти", + "Memory cache size (by total characters)": "Размер кэша памяти (по общему количеству символов)", + "Memory cache size (by total items)": "Размер кэша памяти (по общему количеству элементов)", + "Merge": "Объединить", + "Minimum delay for batch database updating": "Минимальная задержка пакетного обновления базы данных", + "Minimum interval for syncing": "Минимальный интервал синхронизации", + "moduleCheckRemoteSize.logCheckingStorageSizes": "Проверка размеров хранилища", + "moduleCheckRemoteSize.logCurrentStorageSize": "Размер удалённого хранилища: measuredSize", + "moduleCheckRemoteSize.logExceededWarning": "Размер удалённого хранилища: measuredSize превысил notifySize", + "moduleCheckRemoteSize.logThresholdEnlarged": "Порог увеличен до sizeМБ", + "moduleCheckRemoteSize.msgConfirmRebuild": "Это может занять некоторое время. Вы действительно хотите перестроить всё сейчас?", + "moduleCheckRemoteSize.msgDatabaseGrowing": "Ваша база данных увеличивается! Но не волнуйтесь, мы можем решить это сейчас.", + "moduleCheckRemoteSize.msgSetDBCapacity": "Можно установить предупреждение о максимальной ёмкости базы данных.", + "moduleCheckRemoteSize.option2GB": "2ГБ (Стандарт)", + "moduleCheckRemoteSize.option800MB": "800МБ (Cloudant, fly.io)", + "moduleCheckRemoteSize.optionAskMeLater": "Спросить позже", + "moduleCheckRemoteSize.optionDismiss": "Отклонить", + "moduleCheckRemoteSize.optionIncreaseLimit": "увеличить до newMaxМБ", + "moduleCheckRemoteSize.optionNoWarn": "Нет, не уведомлять", + "moduleCheckRemoteSize.optionRebuildAll": "Перестроить всё сейчас", + "moduleCheckRemoteSize.titleDatabaseSizeLimitExceeded": "Размер удалённого хранилища превысил лимит", + "moduleCheckRemoteSize.titleDatabaseSizeNotify": "Настройка уведомления о размере базы данных", + "moduleInputUIObsidian.defaultTitleConfirmation": "Подтверждение", + "moduleInputUIObsidian.defaultTitleSelect": "Выбор", + "moduleInputUIObsidian.optionNo": "Нет", + "moduleInputUIObsidian.optionYes": "Да", + "moduleLiveSyncMain.logAdditionalSafetyScan": "Дополнительная проверка безопасности...", + "moduleLiveSyncMain.logLoadingPlugin": "Загрузка плагина...", + "moduleLiveSyncMain.logPluginInitCancelled": "Инициализация плагина отменена модулем", + "moduleLiveSyncMain.logPluginVersion": "Self-hosted LiveSync vmanifestVersion packageVersion", + "moduleLiveSyncMain.logReadChangelog": "LiveSync обновлён, пожалуйста, прочитайте список изменений!", + "moduleLiveSyncMain.logSafetyScanCompleted": "Дополнительная проверка безопасности завершена", + "moduleLiveSyncMain.logSafetyScanFailed": "Дополнительная проверка безопасности не удалась в модуле", + "moduleLiveSyncMain.logUnloadingPlugin": "Выгрузка плагина...", + "moduleLiveSyncMain.logVersionUpdate": "LiveSync обновлён. В случае критических изменений автоматическая синхронизация временно отключена. Убедитесь, что все устройства обновлены перед включением.", + "moduleLiveSyncMain.msgScramEnabled": "Self-hosted LiveSync has been configured to ignore some events. Is this correct?\n\n| Type | Status | Note |\n|:---:|:---:|---|\n| Storage Events | ${fileWatchingStatus} | Every modification will be ignored |\n| Database Events | ${parseReplicationStatus} | Every synchronised change will be postponed |\n\nDo you want to resume them and restart Obsidian?\n\n> [!DETAILS]-\n> These flags are set by the plug-in while rebuilding, or fetching. If the process ends abnormally, it may be kept unintended.\n> If you are not sure, you can try to rerun these processes. Make sure to back your vault up.\n", + "moduleLiveSyncMain.optionKeepLiveSyncDisabled": "Оставить LiveSync отключённым", + "moduleLiveSyncMain.optionResumeAndRestart": "Продолжить и перезапустить Obsidian", + "moduleLiveSyncMain.titleScramEnabled": "Экстренная остановка включена", + "moduleLocalDatabase.logWaitingForReady": "Ожидание готовности...", + "moduleLog.showLog": "Показать лог", + "moduleMigration.docUri": "https://github.com/vrtmrz/obsidian-livesync/blob/main/README.md#how-to-use", + "moduleMigration.fix0256.buttons.checkItLater": "Проверить позже", + "moduleMigration.fix0256.buttons.DismissForever": "Исправлено, больше не спрашивать", + "moduleMigration.fix0256.buttons.fix": "Исправить", + "moduleMigration.fix0256.message": "Из-за недавней ошибки некоторые файлы могут быть неправильно сохранены.", + "moduleMigration.fix0256.messageUnrecoverable": "Файлы не могут быть исправлены на этом устройстве:", + "moduleMigration.fix0256.title": "Обнаружены повреждённые файлы", + "moduleMigration.insecureChunkExist.buttons.fetch": "Я уже перестроил удалённую. Загрузить с удалённой", + "moduleMigration.insecureChunkExist.buttons.later": "Сделаю позже", + "moduleMigration.insecureChunkExist.buttons.rebuild": "Перестроить всё", + "moduleMigration.insecureChunkExist.laterMessage": "Мы настоятельно рекомендуем обработать это как можно скорее!", + "moduleMigration.insecureChunkExist.message": "Некоторые чанки хранятся небезопасно. Пожалуйста, перестройте базу данных.", + "moduleMigration.insecureChunkExist.title": "Обнаружены небезопасные чанки!", + "moduleMigration.logBulkSendCorrupted": "Отправка чанков пакетами была включена, но эта функция была повреждена. Приносим извинения. Автоматически отключено.", + "moduleMigration.logFetchRemoteTweakFailed": "Не удалось загрузить удалённые настройки", + "moduleMigration.logLocalDatabaseNotReady": "Что-то пошло не так! Локальная база данных не готова", + "moduleMigration.logMigratedSameBehaviour": "Миграция на db:current с тем же поведением, что и раньше", + "moduleMigration.logMigrationFailed": "Миграция не удалась или отменена с old на current", + "moduleMigration.logRedflag2CreationFail": "Не удалось создать redflag2", + "moduleMigration.logRemoteTweakUnavailable": "Не удалось получить удалённые настройки", + "moduleMigration.logSetupCancelled": "Настройка отменена, Self-hosted LiveSync ожидает вашей настройки!", + "moduleMigration.msgFetchRemoteAgain": "Удалённая база данных, похоже, уже была мигрирована. Конфигурация этого устройства несовместима.", + "moduleMigration.msgInitialSetup": "Ваше устройство ещё не настроено. У вас есть Setup URI?", + "moduleMigration.msgRecommendSetupUri": "Мы рекомендуем сгенерировать Setup URI.", + "moduleMigration.msgSinceV02321": "Начиная с v0.23.21, self-hosted LiveSync изменил поведение и структуру базы данных.", + "moduleMigration.optionAdjustRemote": "Настроить под удалённую", + "moduleMigration.optionDecideLater": "Решить позже", + "moduleMigration.optionEnableBoth": "Включить оба", + "moduleMigration.optionEnableFilenameCaseInsensitive": "Включить только #1", + "moduleMigration.optionEnableFixedRevisionForChunks": "Включить только #2", + "moduleMigration.optionHaveSetupUri": "Да, есть", + "moduleMigration.optionKeepPreviousBehaviour": "Сохранить предыдущее поведение", + "moduleMigration.optionManualSetup": "Настроить всё вручную", + "moduleMigration.optionNoAskAgain": "Нет, спросить снова", + "moduleMigration.optionNoSetupUri": "Нет, нет", + "moduleMigration.optionRemindNextLaunch": "Напомнить при следующем запуске", + "moduleMigration.optionSetupViaP2P": "Использовать short_p2p_sync для настройки", + "moduleMigration.optionSetupWizard": "Перейти в мастер настройки", + "moduleMigration.optionYesFetchAgain": "Да, загрузить снова", + "moduleMigration.titleCaseSensitivity": "Чувствительность к регистру", + "moduleMigration.titleRecommendSetupUri": "Рекомендация использовать Setup URI", + "moduleMigration.titleWelcome": "Добро пожаловать в Self-hosted LiveSync", + "moduleObsidianMenu.replicate": "Реплицировать", + "More actions": "Другие действия", + "Move remotely deleted files to the trash, instead of deleting.": "Перемещать удалённые на удалённом сервере файлы в корзину вместо удаления.", + "Network warning style": "Стиль сетевого предупреждения", + "New Remote": "Новое удалённое хранилище", + "No connected device information found. Cancelling Garbage Collection.": "Не найдена информация о подключённых устройствах. Garbage Collection отменяется.", + "No limit configured": "Лимит не задан", + "No, please take me back": "Нет, верните меня назад", + "Node ID": "ID узла", + "Node Information Missing": "Отсутствует информация об узле", + "Non-Synchronising files": "Несинхронизируемые файлы", + "Normal Files": "Обычные файлы", + "Not all messages have been translated. And, please revert to \"Default\" when reporting errors.": "Не все сообщения переведены. И, пожалуйста, вернитесь к «По умолчанию» при сообщении об ошибках.", + "Notify all setting files": "Уведомлять обо всех файлах настроек", + "Notify customized": "Уведомлять о настройках", + "Notify when other device has newly customized.": "Уведомлять, когда другое устройство изменило настройки.", + "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.": "Количество пакетов для обработки за раз. По умолчанию 40. Минимум 2.", + "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.": "Количество изменений для синхронизации за раз. По умолчанию 50. Минимум 2.", + "Obsidian version": "Версия Obsidian", + "obsidianLiveSyncSettingTab.btnApply": "Применить", + "obsidianLiveSyncSettingTab.btnCheck": "Проверить", + "obsidianLiveSyncSettingTab.btnCopy": "Копировать", + "obsidianLiveSyncSettingTab.btnDisable": "Отключить", + "obsidianLiveSyncSettingTab.btnDiscard": "Отменить", + "obsidianLiveSyncSettingTab.btnEnable": "Включить", + "obsidianLiveSyncSettingTab.btnFix": "Исправить", + "obsidianLiveSyncSettingTab.btnGotItAndUpdated": "Понял и обновил.", + "obsidianLiveSyncSettingTab.btnNext": "Далее", + "obsidianLiveSyncSettingTab.btnStart": "Старт", + "obsidianLiveSyncSettingTab.btnTest": "Тест", + "obsidianLiveSyncSettingTab.btnUse": "Использовать", + "obsidianLiveSyncSettingTab.buttonFetch": "Загрузить", + "obsidianLiveSyncSettingTab.buttonNext": "Далее", + "obsidianLiveSyncSettingTab.defaultLanguage": "По умолчанию", + "obsidianLiveSyncSettingTab.descConnectSetupURI": "Это рекомендуемый способ настройки Self-hosted LiveSync с помощью Setup URI.", + "obsidianLiveSyncSettingTab.descCopySetupURI": "Идеально подходит для настройки нового устройства!", + "obsidianLiveSyncSettingTab.descEnableLiveSync": "Включайте это только после настройки одного из двух вариантов выше или после полного ручного завершения всей конфигурации.", + "obsidianLiveSyncSettingTab.descFetchConfigFromRemote": "Получить необходимые настройки с уже настроенного удалённого сервера.", + "obsidianLiveSyncSettingTab.descManualSetup": "Не рекомендуется, но полезно, если у вас нет Setup URI.", + "obsidianLiveSyncSettingTab.descTestDatabaseConnection": "Открыть подключение к базе данных. Если удалённая база данных не найдена и у вас есть право на её создание, база будет создана.", + "obsidianLiveSyncSettingTab.descValidateDatabaseConfig": "Проверяет и исправляет любые потенциальные проблемы в конфигурации базы данных.", + "obsidianLiveSyncSettingTab.errAccessForbidden": "❗ Доступ запрещён.", + "obsidianLiveSyncSettingTab.errCannotContinueTest": "Мы не можем продолжить тест.", + "obsidianLiveSyncSettingTab.errCorsCredentials": "❗ cors.credentials неверно", + "obsidianLiveSyncSettingTab.errCorsNotAllowingCredentials": "❗ CORS не разрешает учётные данные", + "obsidianLiveSyncSettingTab.errCorsOrigins": "❗ cors.origins неверно", + "obsidianLiveSyncSettingTab.errEnableCors": "❗ httpd.enable_cors неверно", + "obsidianLiveSyncSettingTab.errEnableCorsChttpd": "❗ chttpd.enable_cors неверно", + "obsidianLiveSyncSettingTab.errMaxDocumentSize": "❗ couchdb.max_document_size низкое", + "obsidianLiveSyncSettingTab.errMaxRequestSize": "❗ chttpd.max_http_request_size низкое", + "obsidianLiveSyncSettingTab.errMissingWwwAuth": "❗ httpd.WWW-Authenticate отсутствует", + "obsidianLiveSyncSettingTab.errRequireValidUser": "❗ chttpd.require_valid_user неверно.", + "obsidianLiveSyncSettingTab.errRequireValidUserAuth": "❗ chttpd_auth.require_valid_user неверно.", + "obsidianLiveSyncSettingTab.labelDisabled": "⏹️ : Отключено", + "obsidianLiveSyncSettingTab.labelEnabled": "🔁 : Включено", + "obsidianLiveSyncSettingTab.levelAdvanced": " (Расширенные)", + "obsidianLiveSyncSettingTab.levelEdgeCase": " (Граничные случаи)", + "obsidianLiveSyncSettingTab.levelPowerUser": " (Опытный пользователь)", + "obsidianLiveSyncSettingTab.linkOpenInBrowser": "Открыть в браузере", + "obsidianLiveSyncSettingTab.linkPageTop": "В начало страницы", + "obsidianLiveSyncSettingTab.linkTipsAndTroubleshooting": "Советы и устранение неполадок", + "obsidianLiveSyncSettingTab.linkTroubleshooting": "/docs/troubleshooting.md", + "obsidianLiveSyncSettingTab.logCannotUseCloudant": "Эта функция недоступна для IBM Cloudant.", + "obsidianLiveSyncSettingTab.logCheckingConfigDone": "Проверка конфигурации завершена", + "obsidianLiveSyncSettingTab.logCheckingConfigFailed": "Проверка конфигурации не удалась", + "obsidianLiveSyncSettingTab.logCheckingDbConfig": "Проверка конфигурации базы данных", + "obsidianLiveSyncSettingTab.logCheckPassphraseFailed": "ОШИБКА: Не удалось проверить пароль с удалённым сервером: db.", + "obsidianLiveSyncSettingTab.logConfiguredDisabled": "Настроенный режим синхронизации: ОТКЛЮЧЕН", + "obsidianLiveSyncSettingTab.logConfiguredLiveSync": "Настроенный режим синхронизации: LiveSync", + "obsidianLiveSyncSettingTab.logConfiguredPeriodic": "Настроенный режим синхронизации: Периодический", + "obsidianLiveSyncSettingTab.logCouchDbConfigFail": "Конфигурация CouchDB: title не удалась", + "obsidianLiveSyncSettingTab.logCouchDbConfigSet": "Конфигурация CouchDB: title -> Установить key в value", + "obsidianLiveSyncSettingTab.logCouchDbConfigUpdated": "Конфигурация CouchDB: title успешно обновлена", + "obsidianLiveSyncSettingTab.logDatabaseConnected": "База данных подключена", + "obsidianLiveSyncSettingTab.logEncryptionNoPassphrase": "Вы не можете включить шифрование без парольной фразы", + "obsidianLiveSyncSettingTab.logEncryptionNoSupport": "Ваше устройство не поддерживает шифрование.", + "obsidianLiveSyncSettingTab.logErrorOccurred": "Произошла ошибка!!", + "obsidianLiveSyncSettingTab.logEstimatedSize": "Примерный размер: size", + "obsidianLiveSyncSettingTab.logPassphraseInvalid": "Парольная фраза недействительна, пожалуйста, исправьте.", + "obsidianLiveSyncSettingTab.logPassphraseNotCompatible": "ОШИБКА: Парольная фраза несовместима с удалённым сервером!", + "obsidianLiveSyncSettingTab.logRebuildNote": "Синхронизация отключена, загрузите и включите снова при желании.", + "obsidianLiveSyncSettingTab.logSelectAnyPreset": "Выберите любой пресет.", + "obsidianLiveSyncSettingTab.msgAreYouSureProceed": "Вы уверены, что хотите продолжить?", + "obsidianLiveSyncSettingTab.msgChangesNeedToBeApplied": "Изменения нужно применить!", + "obsidianLiveSyncSettingTab.msgConfigCheck": "--Проверка конфигурации--", + "obsidianLiveSyncSettingTab.msgConfigCheckFailed": "Проверка конфигурации не удалась. Вы всё равно хотите продолжить?", + "obsidianLiveSyncSettingTab.msgConnectionCheck": "--Проверка подключения--", + "obsidianLiveSyncSettingTab.msgConnectionProxyNote": "Если у вас проблемы с проверкой подключения, проверьте конфигурацию обратного прокси.", + "obsidianLiveSyncSettingTab.msgCurrentOrigin": "Текущий origin: origin", + "obsidianLiveSyncSettingTab.msgDiscardConfirmation": "Вы действительно хотите отменить существующие настройки и базы данных?", + "obsidianLiveSyncSettingTab.msgDone": "--Готово--", + "obsidianLiveSyncSettingTab.msgEnableCors": "Установить httpd.enable_cors", + "obsidianLiveSyncSettingTab.msgEnableCorsChttpd": "Установить chttpd.enable_cors", + "obsidianLiveSyncSettingTab.msgEnableEncryptionRecommendation": "Мы рекомендуем включить сквозное шифрование. Вы уверены, что хотите продолжить без шифрования?", + "obsidianLiveSyncSettingTab.msgFetchConfigFromRemote": "Вы хотите загрузить конфигурацию с удалённого сервера?", + "obsidianLiveSyncSettingTab.msgGenerateSetupURI": "Всё готово! Вы хотите сгенерировать Setup URI для настройки других устройств?", + "obsidianLiveSyncSettingTab.msgIfConfigNotPersistent": "Если конфигурация сервера непостоянна, значения здесь могут измениться.", + "obsidianLiveSyncSettingTab.msgInvalidPassphrase": "Ваша парольная фраза шифрования может быть недействительна.", + "obsidianLiveSyncSettingTab.msgNewVersionNote": "Вы пришли из-за уведомления об обновлении? Просмотрите историю версий.", + "obsidianLiveSyncSettingTab.msgNonHTTPSInfo": "Настроено как не-HTTPS URI. Это может не работать на мобильных устройствах.", + "obsidianLiveSyncSettingTab.msgNonHTTPSWarning": "Не удаётся подключиться к не-HTTPS URI. Обновите конфигурацию.", + "obsidianLiveSyncSettingTab.msgNotice": "---Уведомление---", + "obsidianLiveSyncSettingTab.msgObjectStorageWarning": "ПРЕДУПРЕЖДЕНИЕ: Эта функция в разработке.", + "obsidianLiveSyncSettingTab.msgOriginCheck": "Проверка origin: org", + "obsidianLiveSyncSettingTab.msgRebuildRequired": "Требуется перестроение баз данных для применения изменений.", + "obsidianLiveSyncSettingTab.msgSelectAndApplyPreset": "Выберите и примените любой пресет для завершения мастера.", + "obsidianLiveSyncSettingTab.msgSetCorsCredentials": "Установить cors.credentials", + "obsidianLiveSyncSettingTab.msgSetCorsOrigins": "Установить cors.origins", + "obsidianLiveSyncSettingTab.msgSetMaxDocSize": "Установить couchdb.max_document_size", + "obsidianLiveSyncSettingTab.msgSetMaxRequestSize": "Установить chttpd.max_http_request_size", + "obsidianLiveSyncSettingTab.msgSetRequireValidUser": "Установить chttpd.require_valid_user = true", + "obsidianLiveSyncSettingTab.msgSetRequireValidUserAuth": "Установить chttpd_auth.require_valid_user = true", + "obsidianLiveSyncSettingTab.msgSettingModified": "Настройка setting была изменена с другого устройства.", + "obsidianLiveSyncSettingTab.msgSettingsUnchangeableDuringSync": "Эти настройки нельзя изменить во время синхронизации.", + "obsidianLiveSyncSettingTab.msgSetWwwAuth": "Установить httpd.WWW-Authenticate", + "obsidianLiveSyncSettingTab.nameApplySettings": "Применить настройки", + "obsidianLiveSyncSettingTab.nameConnectSetupURI": "Подключиться через Setup URI", + "obsidianLiveSyncSettingTab.nameCopySetupURI": "Копировать текущие настройки в Setup URI", + "obsidianLiveSyncSettingTab.nameDisableHiddenFileSync": "Отключить синхронизацию скрытых файлов", + "obsidianLiveSyncSettingTab.nameDiscardSettings": "Отменить существующие настройки и базы данных", + "obsidianLiveSyncSettingTab.nameEnableHiddenFileSync": "Включить синхронизацию скрытых файлов", + "obsidianLiveSyncSettingTab.nameEnableLiveSync": "Включить LiveSync", + "obsidianLiveSyncSettingTab.nameHiddenFileSynchronization": "Синхронизация скрытых файлов", + "obsidianLiveSyncSettingTab.nameManualSetup": "Ручная настройка", + "obsidianLiveSyncSettingTab.nameTestConnection": "Тест подключения", + "obsidianLiveSyncSettingTab.nameTestDatabaseConnection": "Тест подключения к базе данных", + "obsidianLiveSyncSettingTab.nameValidateDatabaseConfig": "Проверить конфигурацию базы данных", + "obsidianLiveSyncSettingTab.okAdminPrivileges": "✔ У вас есть права администратора.", + "obsidianLiveSyncSettingTab.okCorsCredentials": "✔ cors.credentials в порядке.", + "obsidianLiveSyncSettingTab.okCorsCredentialsForOrigin": "CORS учётные данные в порядке", + "obsidianLiveSyncSettingTab.okCorsOriginMatched": "✔ CORS origin в порядке", + "obsidianLiveSyncSettingTab.okCorsOrigins": "✔ cors.origins в порядке.", + "obsidianLiveSyncSettingTab.okEnableCors": "✔ httpd.enable_cors в порядке.", + "obsidianLiveSyncSettingTab.okEnableCorsChttpd": "✔ chttpd.enable_cors в порядке.", + "obsidianLiveSyncSettingTab.okMaxDocumentSize": "✔ couchdb.max_document_size в порядке.", + "obsidianLiveSyncSettingTab.okMaxRequestSize": "✔ chttpd.max_http_request_size в порядке.", + "obsidianLiveSyncSettingTab.okRequireValidUser": "✔ chttpd.require_valid_user в порядке.", + "obsidianLiveSyncSettingTab.okRequireValidUserAuth": "✔ chttpd_auth.require_valid_user в порядке.", + "obsidianLiveSyncSettingTab.okWwwAuth": "✔ httpd.WWW-Authenticate в порядке.", + "obsidianLiveSyncSettingTab.optionApply": "Применить", + "obsidianLiveSyncSettingTab.optionCancel": "Отмена", + "obsidianLiveSyncSettingTab.optionCouchDB": "CouchDB", + "obsidianLiveSyncSettingTab.optionDisableAllAutomatic": "Отключить всё автоматическое", + "obsidianLiveSyncSettingTab.optionFetchFromRemote": "Загрузить с удалённого", + "obsidianLiveSyncSettingTab.optionHere": "ЗДЕСЬ", + "obsidianLiveSyncSettingTab.optionLiveSync": "Синхронизация LiveSync", + "obsidianLiveSyncSettingTab.optionMinioS3R2": "Minio,S3,R2", + "obsidianLiveSyncSettingTab.optionOkReadEverything": "ОК, я всё прочитал.", + "obsidianLiveSyncSettingTab.optionOnEvents": "По событиям", + "obsidianLiveSyncSettingTab.optionPeriodicAndEvents": "Периодически и по событиям", + "obsidianLiveSyncSettingTab.optionPeriodicWithBatch": "Периодически с пакетами", + "obsidianLiveSyncSettingTab.optionRebuildBoth": "Перестроить оба с этого устройства", + "obsidianLiveSyncSettingTab.optionSaveOnlySettings": "(Опасно) Сохранить только настройки", + "obsidianLiveSyncSettingTab.panelChangeLog": "История изменений", + "obsidianLiveSyncSettingTab.panelGeneralSettings": "Основные настройки", + "obsidianLiveSyncSettingTab.panelPrivacyEncryption": "Конфиденциальность и шифрование", + "obsidianLiveSyncSettingTab.panelRemoteConfiguration": "Удалённая конфигурация", + "obsidianLiveSyncSettingTab.panelSetup": "Настройка", + "obsidianLiveSyncSettingTab.serverVersion": "Информация о сервере: info", + "obsidianLiveSyncSettingTab.titleActiveRemoteServer": "Активный удалённый сервер", + "obsidianLiveSyncSettingTab.titleAppearance": "Внешний вид", + "obsidianLiveSyncSettingTab.titleConflictResolution": "Разрешение конфликтов", + "obsidianLiveSyncSettingTab.titleCongratulations": "Поздравляем!", + "obsidianLiveSyncSettingTab.titleCouchDB": "Сервер CouchDB", + "obsidianLiveSyncSettingTab.titleDeletionPropagation": "Распространение удалений", + "obsidianLiveSyncSettingTab.titleEncryptionNotEnabled": "Шифрование не включено", + "obsidianLiveSyncSettingTab.titleEncryptionPassphraseInvalid": "Парольная фраза шифрования недействительна", + "obsidianLiveSyncSettingTab.titleExtraFeatures": "Включить дополнительные и расширенные функции", + "obsidianLiveSyncSettingTab.titleFetchConfig": "Загрузить конфигурацию", + "obsidianLiveSyncSettingTab.titleFetchConfigFromRemote": "Загрузить конфигурацию с удалённого сервера", + "obsidianLiveSyncSettingTab.titleFetchSettings": "Загрузить настройки", + "obsidianLiveSyncSettingTab.titleHiddenFiles": "Скрытые файлы", + "obsidianLiveSyncSettingTab.titleLogging": "Логирование", + "obsidianLiveSyncSettingTab.titleMinioS3R2": "MinIO, S3, R2", + "obsidianLiveSyncSettingTab.titleNotification": "Уведомления", + "obsidianLiveSyncSettingTab.titleOnlineTips": "Онлайн советы", + "obsidianLiveSyncSettingTab.titleQuickSetup": "Быстрая настройка", + "obsidianLiveSyncSettingTab.titleRebuildRequired": "Требуется перестроение", + "obsidianLiveSyncSettingTab.titleRemoteConfigCheckFailed": "Проверка удалённой конфигурации не удалась", + "obsidianLiveSyncSettingTab.titleRemoteServer": "Удалённый сервер", + "obsidianLiveSyncSettingTab.titleReset": "Сброс", + "obsidianLiveSyncSettingTab.titleSetupOtherDevices": "Для настройки других устройств", + "obsidianLiveSyncSettingTab.titleSynchronizationMethod": "Метод синхронизации", + "obsidianLiveSyncSettingTab.titleSynchronizationPreset": "Пресет синхронизации", + "obsidianLiveSyncSettingTab.titleSyncSettings": "Настройки синхронизации", + "obsidianLiveSyncSettingTab.titleSyncSettingsViaMarkdown": "Синхронизация настроек через Markdown", + "obsidianLiveSyncSettingTab.titleUpdateThinning": "Оптимизация обновлений", + "obsidianLiveSyncSettingTab.warnCorsOriginUnmatched": "⚠ CORS Origin не совпадает from->to", + "obsidianLiveSyncSettingTab.warnNoAdmin": "⚠ У вас нет прав администратора.", + "Ok": "ОК", + "Old Algorithm": "Старый алгоритм", + "Older fallback (Slow, W/O WebAssembly)": "Старый вариант fallback (медленный, без WebAssembly)", + "Open": "Открыть", + "Open the dialog": "Открыть диалог", + "Overwrite": "Перезаписать", + "Overwrite patterns": "Шаблоны перезаписи", + "Overwrite remote": "Перезаписать удалённое хранилище", + "Overwrite remote with local DB and passphrase.": "Перезаписать удалённое хранилище локальной БД и парольной фразой.", + "Overwrite Server Data with This Device's Files": "Перезаписать данные сервера файлами с этого устройства", + "P2P.AskPassphraseForDecrypt": "Удалённое устройство предоставило конфигурацию. Введите пароль для расшифровки.", + "P2P.AskPassphraseForShare": "Удалённое устройство запрашивает эту конфигурацию. Введите пароль для передачи.", + "P2P.DisabledButNeed": "title_p2p_sync отключён. Вы действительно хотите включить?", + "P2P.FailedToOpen": "Не удалось открыть P2P подключение к серверу сигнализации.", + "P2P.NoAutoSyncPeers": "Автосинхронизируемые устройства не найдены.", + "P2P.NoKnownPeers": "Устройства не обнаружены, ожидаем другие устройства...", + "P2P.Note.description": "Этот репликатор позволяет синхронизировать хранилище с другими устройствами с использованием однорангового соединения.", + "P2P.Note.important_note": "P2P репликатор.", + "P2P.Note.important_note_sub": "Эта функция всё ещё на стадии разработки. Пожалуйста, убедитесь, что ваши данные зарезервированы.", + "P2P.Note.Summary": "Что это за функция? (важные замечания)", + "P2P.NotEnabled": "title_p2p_sync не включён. Мы не можем открыть новое подключение.", + "P2P.P2PReplication": "P2P Репликация", + "P2P.PaneTitle": "long_p2p_sync", + "P2P.ReplicatorInstanceMissing": "P2P Sync репликатор не найден, возможно, не настроен.", + "P2P.SeemsOffline": "Устройство name офлайн, пропущено.", + "P2P.SyncAlreadyRunning": "P2P Sync уже запущен.", + "P2P.SyncCompleted": "P2P Sync завершён.", + "P2P.SyncStartedWith": "P2P Sync с name начат.", + "paneMaintenance.markDeviceResolvedAfterBackup": "Пометить устройство как обработанное после резервного копирования", + "paneMaintenance.remoteLockedAndDeviceNotAccepted": "Удалённая база данных заблокирована, и это устройство ещё не одобрено.", + "paneMaintenance.remoteLockedResolvedDevice": "Удалённая база данных заблокирована, но это устройство уже одобрено.", + "paneMaintenance.unlockDatabaseReady": "Разблокировать базу данных", + "Passphrase": "Парольная фраза", + "Passphrase of sensitive configuration items": "Парольная фраза для конфиденциальных настроек", + "password": "пароль", + "Password": "Пароль", + "Paste a connection string": "Вставить строку подключения", + "Paste the Setup URI generated from one of your active devices.": "Вставьте Setup URI, созданный на одном из ваших активных устройств。", + "Path Obfuscation": "Обфускация путей", + "Patterns to match files for overwriting instead of merging": "Шаблоны для файлов, которые нужно перезаписывать вместо объединения", + "Patterns to match files for syncing": "Шаблоны для файлов, которые нужно синхронизировать", + "Peer-to-Peer only": "Только Peer-to-Peer", + "Peer-to-Peer Synchronisation": "Одноранговая синхронизация", + "Per-file-saved customization sync": "Синхронизация настроек для каждого файла", + "Perform": "Выполнить", + "Perform cleanup": "Выполнить очистку", + "Perform Garbage Collection": "Выполнить сборку мусора", + "Perform Garbage Collection to remove unused chunks and reduce database size.": "Выполняет сборку мусора, чтобы удалить неиспользуемые чанки и уменьшить размер базы данных.", + "Periodic Sync interval": "Интервал периодической синхронизации", + "Pick a file to resolve conflict": "Выбрать файл для разрешения конфликта", + "Please disable 'Read chunks online' in settings to use Garbage Collection.": "Чтобы использовать Garbage Collection, отключите в настройках «Read chunks online».", + "Please enable 'Compute revisions for chunks' in settings to use Garbage Collection.": "Чтобы использовать Garbage Collection, включите в настройках «Compute revisions for chunks».", + "Please select 'Cancel' explicitly to cancel this operation.": "Чтобы отменить эту операцию, явно выберите «Отмена».", + "Please select a method to import the settings from another device.": "Выберите способ импорта настроек с другого устройства。", + "Please select an option to proceed": "Чтобы продолжить, выберите вариант", + "Please select the type of server to which you are connecting.": "Выберите тип сервера, к которому вы подключаетесь。", + "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": "Укажите имя этого устройства", + "Plug-in version": "Версия плагина", + "Prepare the 'report' to create an issue": "Подготовить «отчёт» для создания Issue", + "Presets": "Пресеты", + "Proceed Garbage Collection": "Продолжить Garbage Collection", + "Proceed with Setup URI": "Продолжить с Setup URI", + "Proceeding with Garbage Collection, ignoring missing nodes.": "Продолжаем Garbage Collection, игнорируя отсутствующие узлы.", + "Proceeding with Garbage Collection.": "Запускаем Garbage Collection.", + "Process small files in the foreground": "Обрабатывать маленькие файлы в основном потоке", + "Progress": "Прогресс", + "Property Encryption": "Шифрование свойств", + "PureJS fallback (Fast, W/O WebAssembly)": "Вариант PureJS (быстрый, без WebAssembly)", + "Purge all download/upload cache.": "Очистить весь кэш загрузки/выгрузки.", + "Purge all journal counter": "Очистить все счётчики журнала", + "Rebuild local and remote database with local files.": "Перестроить локальную и удалённую базы данных на основе локальных файлов.", + "Rebuilding Operations (Remote Only)": "Операции перестроения (только удалённое хранилище)", + "Recreate all": "Пересоздать всё", + "Recreate missing chunks for all files": "Пересоздать отсутствующие чанки для всех файлов", + "RedFlag.Fetch.Method.Desc": "Как вы хотите загрузить?", + "RedFlag.Fetch.Method.FetchSafer": "Создать локальную базу данных перед загрузкой", + "RedFlag.Fetch.Method.FetchSmoother": "Создать локальные чанки перед загрузкой", + "RedFlag.Fetch.Method.FetchTraditional": "Загрузить всё с удалённого", + "RedFlag.Fetch.Method.Title": "Как вы хотите загрузить?", + "RedFlag.FetchRemoteConfig.Buttons.Cancel": "Нет, использовать локальные настройки", + "RedFlag.FetchRemoteConfig.Buttons.Fetch": "Да, загрузить и применить удалённые настройки", + "RedFlag.FetchRemoteConfig.Message": "Вы хотите загрузить и применить удалённые настройки?", + "RedFlag.FetchRemoteConfig.Title": "Загрузить удалённую конфигурацию", + "Reducing the frequency with which on-disk changes are reflected into the DB": "Уменьшение частоты отражения изменений с диска в БД", + "Region": "Регион", + "Remediation": "Исправление", + "Remediation Setting Changed": "Настройки исправления изменены", + "Remote Database Tweak (In sunset)": "Настройки удалённой базы данных (устаревает)", + "Remote Databases": "Удалённые базы данных", + "Remote name": "Имя удалённого хранилища", + "Remote server type": "Тип удалённого сервера", + "Remote Type": "Удалённый тип", + "Rename": "Переименовать", + "Replicator.Dialogue.Locked.Action.Dismiss": "Отмена для подтверждения", + "Replicator.Dialogue.Locked.Action.Fetch": "Сбросить синхронизацию на этом устройстве", + "Replicator.Dialogue.Locked.Action.Unlock": "Разблокировать удалённую базу данных", + "Replicator.Dialogue.Locked.Message": "Удалённая база данных заблокирована. Это связано с перестроением на одном из устройств.", + "Replicator.Dialogue.Locked.Message.Fetch": "Загрузка всего запланирована. Плагин будет перезапущен.", + "Replicator.Dialogue.Locked.Message.Unlocked": "Удалённая база данных разблокирована. Повторите операцию.", + "Replicator.Dialogue.Locked.Title": "Заблокировано", + "Replicator.Message.Cleaned": "Очистка базы данных в процессе. Репликация отменена", + "Replicator.Message.InitialiseFatalError": "Репликатор недоступен, это фатальная ошибка.", + "Replicator.Message.Pending": "Некоторые события файлов ожидают. Репликация отменена.", + "Replicator.Message.SomeModuleFailed": "Репликация отменена из-за сбоя модуля", + "Replicator.Message.VersionUpFlash": "Обновление обнаружено. Откройте настройки и проверьте историю изменений.", + "Requires restart of Obsidian": "Требуется перезапуск Obsidian", + "Requires restart of Obsidian.": "Требуется перезапуск Obsidian.", + "Rerun Onboarding Wizard": "Перезапустить мастер настройки", + "Rerun the onboarding wizard to set up Self-hosted LiveSync again.": "Перезапустить мастер настройки для повторной настройки Self-hosted LiveSync.", + "Rerun Wizard": "Перезапустить мастер", + "Resend": "Повторно отправить", + "Resend all chunks to the remote.": "Повторно отправить все чанки в удалённое хранилище.", + "Reset": "Сброс", + "Reset all": "Сбросить всё", + "Reset all journal counter": "Сбросить все счётчики журнала", + "Reset journal received history": "Сбросить историю полученных записей журнала", + "Reset journal sent history": "Сбросить историю отправленных записей журнала", + "Reset notification threshold and check the remote database usage": "Сбросить порог уведомления и проверить использование удалённой базы данных", + "Reset received": "Сбросить полученные", + "Reset sent history": "Сбросить историю отправки", + "Reset Synchronisation information": "Сбросить информацию о синхронизации", + "Reset Synchronisation on This Device": "Сбросить синхронизацию на этом устройстве", + "Reset the remote storage size threshold and check the remote storage size again.": "Сбросить порог размера удалённого хранилища и проверить размер хранилища снова.", + "Resolve All": "Разрешить всё", + "Resolve all conflicted files": "Разрешить все конфликтующие файлы", + "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.": "Разрешает все конфликтующие файлы в пользу более новой версии. Внимание: старая версия будет перезаписана и её нельзя будет восстановить.", + "Restart Now": "Перезапустить сейчас", + "Restore or reconstruct local database from remote.": "Восстановить или перестроить локальную базу данных из удалённой.", + "Run Doctor": "Запустить диагностику", + "S3/MinIO/R2 Object Storage": "Объектное хранилище S3/MinIO/R2", + "Save settings to a markdown file.": "Сохранить настройки в файл markdown.", + "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.": "Сохранение будет принудительно выполнено после этого количества секунд.", + "Scan a QR Code (Recommended for mobile)": "Сканировать QR-код (рекомендуется для мобильных устройств)", + "Scan changes on customization sync": "Сканировать изменения при синхронизации настроек", + "Scan customization automatically": "Сканировать настройки автоматически", + "Scan customization before replicating.": "Сканировать настройки перед репликацией.", + "Scan customization every 1 minute.": "Сканировать настройки каждую минуту.", + "Scan customization periodically": "Сканировать настройки периодически", + "Scan for hidden files before replication": "Сканировать скрытые файлы перед репликацией", + "Scan hidden files periodically": "Сканировать скрытые файлы периодически", + "Scan the QR code displayed on an active device using this device's camera.": "Отсканируйте QR-код, показанный на активном устройстве, с помощью камеры этого устройства。", + "Schedule and Restart": "Запланировать и перезапустить", + "Scram!": "Экстренные меры", + "Seconds, 0 to disable": "Секунд, 0 для отключения", + "Seconds. Saving to the local database will be delayed until this value after we stop typing or saving.": "Секунды. Сохранение в локальную базу данных будет отложено.", + "Secret Key": "Секретный ключ", + "Select the database adapter to use.": "Выберите используемый адаптер базы данных.", + "Send": "Отправить", + "Send chunks": "Отправить чанки", + "Server URI": "URI сервера", + "Setting.GenerateKeyPair.Desc": "Мы сгенерировали пару ключей!", + "Setting.GenerateKeyPair.Title": "Новая пара ключей сгенерирована!", + "Setting.TroubleShooting": "Устранение неполадок", + "Setting.TroubleShooting.Doctor": "Диагностика настроек", + "Setting.TroubleShooting.Doctor.Desc": "Обнаруживает неоптимальные настройки.", + "Setting.TroubleShooting.ScanBrokenFiles": "Сканировать повреждённые файлы", + "Setting.TroubleShooting.ScanBrokenFiles.Desc": "Сканирует файлы, которые неправильно хранятся в базе данных.", + "SettingTab.Message.AskRebuild": "Ваши изменения требуют загрузки из удалённой базы данных. Хотите продолжить?", + "Setup URI dialog cancelled.": "Диалог Setup URI был отменён.", + "Setup.Apply.Buttons.ApplyAndFetch": "Применить и загрузить", + "Setup.Apply.Buttons.ApplyAndMerge": "Применить и объединить", + "Setup.Apply.Buttons.ApplyAndRebuild": "Применить и перестроить", + "Setup.Apply.Buttons.Cancel": "Отменить и отменить", + "Setup.Apply.Buttons.OnlyApply": "Только применить", + "Setup.Apply.Message": "Новая конфигурация готова. Есть несколько способов применить её.", + "Setup.Apply.Title": "Применить новую конфигурацию из method", + "Setup.Apply.WarningRebuildRecommended": "ПРИМЕЧАНИЕ: после настройки изменений определено, что требуется перестроение.", + "Setup.Doctor.Buttons.No": "Нет, использовать настройки из URI как есть", + "Setup.Doctor.Buttons.Yes": "Да, пожалуйста, запустить диагностику", + "Setup.Doctor.Message": "Self-hosted LiveSync постепенно набрал историю и некоторые рекомендуемые настройки изменились.", + "Setup.Doctor.Title": "Хотите запустить диагностику?", + "Setup.FetchRemoteConf.Buttons.Fetch": "Да, загрузить конфигурацию", + "Setup.FetchRemoteConf.Buttons.Skip": "Нет, использовать настройки из URI", + "Setup.FetchRemoteConf.Message": "Если мы уже синхронизировались с другим устройством, удалённая база данных хранит подходящие значения конфигурации.", + "Setup.FetchRemoteConf.Title": "Загрузить конфигурацию с удалённой базы данных?", + "Setup.QRCode": "Мы сгенерировали QR-код для передачи настроек. Отсканируйте QR-код телефоном.", + "Setup.RemoteE2EE.AdvancedTitle": "Дополнительно", + "Setup.RemoteE2EE.AlgorithmWarning": "Изменение алгоритма шифрования лишит доступа к данным, которые ранее были зашифрованы другим алгоритмом. Убедитесь, что все ваши устройства настроены на использование одного и того же алгоритма, чтобы сохранить доступ к данным.", + "Setup.RemoteE2EE.ButtonCancel": "Отмена", + "Setup.RemoteE2EE.ButtonProceed": "Продолжить", + "Setup.RemoteE2EE.DefaultAlgorithmDesc": "В большинстве случаев следует оставить алгоритм по умолчанию (${algorithm}). Этот параметр нужен только в том случае, если у вас уже есть Vault, зашифрованный в другом формате.", + "Setup.RemoteE2EE.Guidance": "Пожалуйста, настройте параметры сквозного шифрования.", + "Setup.RemoteE2EE.LabelEncrypt": "Сквозное шифрование", + "Setup.RemoteE2EE.LabelEncryptionAlgorithm": "Алгоритм шифрования", + "Setup.RemoteE2EE.LabelObfuscateProperties": "Обфусцировать свойства", + "Setup.RemoteE2EE.MultiDestinationWarning": "Этот параметр должен быть одинаковым даже при подключении к нескольким направлениям синхронизации.", + "Setup.RemoteE2EE.ObfuscatePropertiesDesc": "Обфускация свойств (например, пути к файлу, размера, дат создания и изменения) добавляет дополнительный уровень защиты, затрудняя определение структуры и названий ваших файлов и папок на удалённом сервере. Это помогает защитить вашу конфиденциальность и усложняет для посторонних вывод информации о ваших данных.", + "Setup.RemoteE2EE.PassphraseValidationLine1": "Обратите внимание: парольная фраза для сквозного шифрования не проверяется до фактического начала процесса синхронизации. Это сделано в целях безопасности ваших данных.", + "Setup.RemoteE2EE.PassphraseValidationLine2": "Поэтому при ручной настройке информации о сервере требуется предельная осторожность. Если будет введена неверная парольная фраза, данные на сервере будут повреждены. Пожалуйста, учтите, что это ожидаемое поведение.", + "Setup.RemoteE2EE.PlaceholderPassphrase": "Введите парольную фразу", + "Setup.RemoteE2EE.StronglyRecommendedLine1": "При включении сквозного шифрования ваши данные шифруются на устройстве до отправки на удалённый сервер. Это означает, что даже если кто-то получит доступ к серверу, он не сможет прочитать ваши данные без парольной фразы. Обязательно запомните парольную фразу, так как она потребуется для расшифровки данных на других устройствах.", + "Setup.RemoteE2EE.StronglyRecommendedLine2": "Также обратите внимание: если вы используете синхронизацию Peer-to-Peer, эта конфигурация будет использована, когда вы позже переключитесь на другие методы и подключитесь к удалённому серверу.", + "Setup.RemoteE2EE.StronglyRecommendedTitle": "Настоятельно рекомендуется", + "Setup.RemoteE2EE.Title": "Сквозное шифрование", + "Setup.ScanQRCode.ButtonClose": "Закрыть это окно", + "Setup.ScanQRCode.Guidance": "Чтобы импортировать настройки с существующего устройства, выполните следующие шаги.", + "Setup.ScanQRCode.Step1": "На этом устройстве оставьте данный Vault открытым.", + "Setup.ScanQRCode.Step2": "На исходном устройстве откройте Obsidian.", + "Setup.ScanQRCode.Step3": "На исходном устройстве в палитре команд выполните команду «Показать настройки как QR-код».", + "Setup.ScanQRCode.Step4": "На этом устройстве откройте приложение камеры или используйте сканер QR-кодов, чтобы считать показанный QR-код.", + "Setup.ScanQRCode.Title": "Сканировать QR-код", + "Setup.ShowQRCode": "Показать QR код", + "Setup.ShowQRCode.Desc": "Показать QR код для передачи настроек.", + "Setup.UseSetupURI.ButtonCancel": "Отмена", + "Setup.UseSetupURI.ButtonProceed": "Проверить настройки и продолжить", + "Setup.UseSetupURI.ErrorFailedToParse": "Не удалось обработать Setup URI. Проверьте URI и парольную фразу.", + "Setup.UseSetupURI.ErrorPassphraseRequired": "Пожалуйста, введите парольную фразу Vault.", + "Setup.UseSetupURI.GuidanceLine1": "Введите Setup URI, созданный во время установки сервера или на другом устройстве, а также парольную фразу Vault.", + "Setup.UseSetupURI.GuidanceLine2": "Новый Setup URI можно создать, выполнив в палитре команд команду «Скопировать настройки как новый Setup URI».", + "Setup.UseSetupURI.InvalidInfo": "Setup URI некорректен. Проверьте его и попробуйте снова.", + "Setup.UseSetupURI.LabelPassphrase": "Парольная фраза Vault", + "Setup.UseSetupURI.LabelSetupURI": "Setup URI", + "Setup.UseSetupURI.PlaceholderPassphrase": "Введите парольную фразу Vault", + "Setup.UseSetupURI.Title": "Ввести Setup URI", + "Setup.UseSetupURI.ValidInfo": "Setup URI корректен и готов к использованию.", + "Should we keep folders that don't have any files inside?": "Сохранять папки без файлов?", + "Should we only check for conflicts when a file is opened?": "Проверять конфликты только при открытии файла?", + "Should we prompt you about conflicting files when a file is opened?": "Спрашивать о конфликтующих файлах при открытии файла?", + "Should we prompt you for every single merge, even if we can safely merge automatcially?": "Спрашивать о каждом слиянии, даже если мы можем безопасно слить автоматически?", + "Show full banner": "Показывать полный баннер", + "Show only notifications": "Показывать только уведомления", + "Show status as icons only": "Показывать статус только иконками", + "Show status icon instead of file warnings banner": "Показывать иконку статуса вместо предупреждения о файлах", + "Show status inside the editor": "Показывать статус внутри редактора", + "Show status on the status bar": "Показывать статус в строке состояния", + "Show verbose log. Please enable if you report an issue.": "Показывать подробный лог. Пожалуйста, включите при сообщении о проблеме.", + "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.": "У некоторых устройств различаются значения прогресса (макс.: ${maxProgress}, мин.: ${minProgress}).\nЭто может означать, что некоторые устройства ещё не завершили синхронизацию, что может привести к конфликтам. Настоятельно рекомендуется перед продолжением убедиться, что все устройства синхронизированы.", + "Starts synchronisation when a file is saved.": "Запускать синхронизацию при сохранении файла.", + "Stop reflecting database changes to storage files.": "Остановить отражение изменений базы данных в файлы хранилища.", + "Stop watching for file changes.": "Остановить отслеживание изменений файлов.", + "Suppress notification of hidden files change": "Подавлять уведомления об изменении скрытых файлов", + "Suspend database reflecting": "Приостановить отражение базы данных", + "Suspend file watching": "Приостановить отслеживание файлов", + "Switch to IDB": "Переключиться на IDB", + "Switch to IndexedDB": "Переключиться на IndexedDB", + "Sync after merging file": "Синхронизировать после слияния файла", + "Sync automatically after merging files": "Синхронизировать автоматически после слияния файлов", + "Sync Mode": "Режим синхронизации", + "Sync on Editor Save": "Синхронизация при сохранении в редакторе", + "Sync on File Open": "Синхронизация при открытии файла", + "Sync on Save": "Синхронизация при сохранении", + "Sync on Startup": "Синхронизация при запуске", + "Synchronisation utilising journal files. You must have set up an S3/MinIO/R2 compatible object storage.": "Синхронизация с использованием файлов журнала. Необходимо заранее настроить объектное хранилище, совместимое с S3/MinIO/R2。", + "Synchronising files": "Синхронизируемые файлы", + "Syncing": "Синхронизация", + "Target patterns": "Целевые шаблоны", + "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 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.": "Для следующих принятых узлов отсутствует информация об узле:\n- ${missingNodes}\n\nЭто означает, что они давно не подключались или остались на старой версии.\nПо возможности рекомендуется сначала обновить все устройства. Если у вас есть устройства, которые больше не используются, вы можете очистить список всех принятых узлов, один раз заблокировав удалённую базу.", + "The Hash algorithm for chunk IDs": "Хэш-алгоритм для ID чанков", + "The maximum duration for which chunks can be incubated within the document.": "Максимальная продолжительность инкубации чанков в документе.", + "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.": "Максимальное количество инкубируемых чанков в документе.", + "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.": "Максимальный общий размер инкубируемых чанков в документе.", + "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.": "Минимальный интервал автоматической синхронизации по событию.", + "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.": "Это расширенный вариант для пользователей, у которых нет URI или которые хотят вручную задать подробные параметры。", + "This is the most suitable synchronisation method for the design. All functions are available. You must have set up a CouchDB instance.": "Это наиболее подходящий для данной архитектуры способ синхронизации. Доступны все функции. Необходимо заранее развернуть экземпляр CouchDB。", + "This passphrase will not be copied to another device. It will be set to 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 passphrase will not be copied to another device. It will be set to `Default` until you configure it again.", + "This will recreate chunks for all files. If there were missing chunks, this may fix the errors.": "Это пересоздаст чанки для всех файлов. Если какие-то чанки отсутствовали, это может исправить ошибки.", + "Transfer Tweak": "Настройки передачи", + "TweakMismatchResolve.Action.Dismiss": "Отмена", + "TweakMismatchResolve.Action.UseConfigured": "Использовать настроенные параметры", + "TweakMismatchResolve.Action.UseMine": "Обновить настройки удалённой базы данных", + "TweakMismatchResolve.Action.UseMineAcceptIncompatible": "Обновить настройки, но оставить как есть", + "TweakMismatchResolve.Action.UseMineWithRebuild": "Обновить настройки и перестроить снова", + "TweakMismatchResolve.Action.UseRemote": "Применить настройки к этому устройству", + "TweakMismatchResolve.Action.UseRemoteAcceptIncompatible": "Применить настройки, но игнорировать несовместимость", + "TweakMismatchResolve.Action.UseRemoteWithRebuild": "Применить настройки и загрузить снова", + "TweakMismatchResolve.Message.Main": "Настройки в удалённой базе данных следующие. Эти значения настроены другими устройствами.", + "TweakMismatchResolve.Message.MainTweakResolving": "Ваша конфигурация не совпадает с удалённым сервером.", + "TweakMismatchResolve.Message.UseRemote.WarningRebuildRecommended": "Некоторые изменения совместимы, но могут потребовать дополнительного хранилища. Рекомендуется перестроение.", + "TweakMismatchResolve.Message.UseRemote.WarningRebuildRequired": "Некоторые удалённые конфигурации несовместимы с локальной базой данных. Требуется перестроение.", + "TweakMismatchResolve.Message.WarningIncompatibleRebuildRecommended": "Обнаружены значения, несовместимые с удалённой базой данных. Рекомендуется перестроение.", + "TweakMismatchResolve.Message.WarningIncompatibleRebuildRequired": "Обнаружены значения, несовместимые с удалённой базой данных. Требуется перестроение.", + "TweakMismatchResolve.Table": "| Имя значения | Это устройство | На удалённом |\n|: --- |: ---- :|: ---- :|", + "TweakMismatchResolve.Table.Row": "| name | self | remote |", + "TweakMismatchResolve.Title": "Обнаружено несоответствие конфигурации", + "TweakMismatchResolve.Title.TweakResolving": "Обнаружено несоответствие конфигурации", + "TweakMismatchResolve.Title.UseRemoteConfig": "Использовать удалённую конфигурацию", + "Unique name between all synchronized devices. To edit this setting, please disable customization sync once.": "Уникальное имя между всеми синхронизируемыми устройствами.", + "Use a custom passphrase": "Использовать пользовательскую парольную фразу", + "Use a Setup URI (Recommended)": "Использовать Setup URI (рекомендуется)", + "Use Custom HTTP Handler": "Использовать пользовательский HTTP обработчик", + "Use dynamic iteration count": "Использовать динамическое количество итераций", + "Use Segmented-splitter": "Использовать сегментный разделитель", + "Use splitting-limit-capped chunk splitter": "Использовать разделитель чанков с ограничением", + "Use the trash bin": "Использовать корзину", + "Use timeouts instead of heartbeats": "Использовать таймауты вместо пульса", + "username": "имя пользователя", + "Username": "Имя пользователя", + "Verbose Log": "Подробный лог", + "Verify all": "Проверить всё", + "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.": "Внимание! Это серьёзно повлияет на производительность.", + "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.", + "We cannot change the device name while this feature is enabled. Please disable this feature to change the device name.": "Невозможно изменить имя устройства, пока эта функция включена. Отключите её, чтобы изменить имя устройства.", + "We will now guide you through a few questions to simplify the synchronisation setup.": "Сейчас мы зададим несколько вопросов, чтобы упростить настройку синхронизации。", + "We will now proceed with the server configuration.": "Теперь перейдём к настройке сервера。", + "Welcome to Self-hosted LiveSync": "Добро пожаловать в Self-hosted LiveSync", + "When you save a file in the editor, start a sync automatically": "Когда вы сохраняете файл в редакторе, автоматически запускать синхронизацию", + "Write credentials in the file": "Записывать учётные данные в файл", + "Write logs into the file": "Записывать логи в файл", + "xxhash32 (Fast but less collision resistance)": "xxhash32 (быстрый, но с меньшей устойчивостью к коллизиям)", + "xxhash64 (Fastest)": "xxhash64 (самый быстрый)", + "Yes, I want to add this device to my existing synchronisation": "Да, я хочу добавить это устройство к существующей синхронизации", + "Yes, I want to set up a new synchronisation": "Да, я хочу настроить новую синхронизацию", + "You are adding this device to an existing synchronisation setup.": "Вы добавляете это устройство к существующей настройке синхронизации。" +} diff --git a/src/common/messagesJson/zh-tw.json b/src/common/messagesJson/zh-tw.json new file mode 100644 index 00000000..d0c424e5 --- /dev/null +++ b/src/common/messagesJson/zh-tw.json @@ -0,0 +1,382 @@ +{ + "(Active)": "(已啟用)", + "(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.": "(正則表示式)若已設定,所有符合此模式的本機與遠端檔案變更都會被略過。", + "(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.": "(如果你已經在另一台電腦或手機上使用同步,請選擇此項。)此選項適合將目前裝置加入既有 LiveSync 設定的使用者。", + "(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.": "(如果你正在將此裝置設定為第一台同步裝置,請選擇此項。)此選項適合初次使用 LiveSync,並希望從頭開始設定的使用者。", + "> [!INFO]- The connected devices have been detected as follows:\n${devices}": "> [!INFO]- 已偵測到以下已連線裝置:\n${devices}", + "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.": "Setup URI 是一段包含伺服器位址與驗證資訊的文字。如果伺服器安裝腳本已經產生 URI,使用它可以更簡單且更安全地完成設定。", + "Activate": "啟用", + "Active Remote Configuration": "目前啟用的遠端設定", + "Add default patterns": "新增預設模式", + "Add new connection": "新增連線", + "All devices have the same progress value (${progress}). Your devices seem to be synchronised. And be able to proceed with Garbage Collection.": "所有裝置的進度值均相同(${progress})。看起來你的裝置已同步,可以繼續執行垃圾回收。", + "Always prompt merge conflicts": "總是提示合併衝突", + "Analyse": "分析", + "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.": "分析資料庫使用情況並產生 TSV 報告,方便你自行診斷。你可以將產生的報告貼到任何慣用的試算表中查看。", + "Apply Latest Change if Conflicting": "發生衝突時套用最新變更", + "Apply preset configuration": "套用預設配置", + "Ask a passphrase at every launch": "每次啟動時都詢問密語", + "Automatically Sync all files when opening Obsidian.": "開啟 Obsidian 時自動同步所有檔案。", + "Back": "返回", + "Back to non-configured": "恢復為未設定狀態", + "Batch database update": "批次更新資料庫", + "Batch limit": "批次上限", + "Batch size": "批次大小", + "Batch size of on-demand fetching": "按需抓取的批次大小", + "Bucket Name": "儲存桶名稱", + "Cancel": "取消", + "Cancel Garbage Collection": "取消垃圾回收", + "Check": "檢查", + "Check and convert non-path-obfuscated files": "檢查並轉換未進行路徑混淆的檔案", + "Check for documents that have not been converted to path-obfuscated IDs and convert them if necessary.": "檢查尚未轉換為路徑混淆 ID 的文件,並在需要時進行轉換。", + "cmdConfigSync.showCustomizationSync": "顯示自訂同步", + "Compaction in progress on remote database...": "正在遠端資料庫上執行壓縮...", + "Compaction on remote database completed successfully.": "遠端資料庫壓縮已成功完成。", + "Compaction on remote database failed.": "遠端資料庫壓縮失敗。", + "Compaction on remote database timed out.": "遠端資料庫壓縮逾時。", + "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 (Database structure)": "相容性(資料庫結構)", + "Compatibility (Internal API Usage)": "相容性(內部 API 使用)", + "Compatibility (Metadata)": "相容性(中繼資料)", + "Compatibility (Remote Database)": "相容性(遠端資料庫)", + "Compatibility (Trouble addressed)": "相容性(問題修復)", + "Configuration Encryption": "設定加密", + "Configure": "設定", + "Configure And Change Remote": "設定並切換遠端", + "Configure E2EE": "設定 E2EE", + "Configure Remote": "設定遠端", + "Configure the same server information as your other devices again, manually, very advanced users only.": "手動重新輸入與其他裝置相同的伺服器資訊。僅適合進階使用者。", + "Connection Method": "連線方式", + "Continue to CouchDB setup": "繼續進行 CouchDB 設定", + "Continue to Peer-to-Peer only setup": "繼續進行僅 Peer-to-Peer 設定", + "Continue to S3/MinIO/R2 setup": "繼續進行 S3/MinIO/R2 設定", + "Copy": "複製", + "Copy Report to clipboard": "將報告複製到剪貼簿", + "CouchDB Connection Tweak": "CouchDB 連線調校", + "Cross-platform": "跨平台", + "Current adapter: {adapter}": "目前的適配器:{adapter}", + "Customization Sync": "自訂同步", + "Customization Sync (Beta3)": "自訂同步(Beta3)", + "Data Compression": "資料壓縮", + "Database -> Storage": "資料庫 -> 儲存空間", + "Database Adapter": "資料庫適配器", + "Database Name": "資料庫名稱", + "Database suffix": "資料庫後綴", + "Default": "預設", + "Delay conflict resolution of inactive files": "延後處理非活動檔案的衝突", + "Delay merge conflict prompt for inactive files.": "延後顯示非活動檔案的合併衝突提示。", + "Delete": "刪除", + "Delete all customization sync data": "刪除所有自訂同步資料", + "Delete all data on the remote server.": "刪除遠端伺服器上的所有資料。", + "Delete local database to reset or uninstall Self-hosted LiveSync": "刪除本機資料庫以重設或解除安裝 Self-hosted LiveSync", + "Delete old metadata of deleted files on start-up": "啟動時刪除已刪除檔案的舊中繼資料", + "Delete Remote Configuration": "刪除遠端設定", + "Delete remote configuration '{name}'?": "要刪除遠端設定「{name}」嗎?", + "desktop": "桌面裝置", + "Developer": "開發者", + "Device": "裝置", + "Device name": "裝置名稱", + "Device Setup Method": "裝置設定方式", + "dialog.yourLanguageAvailable": "Self-hosted LiveSync 已提供你目前語言的翻譯,因此已啟用顯示語言設定。\n\n注意:並非所有訊息都已完成翻譯,歡迎協助補充!\n注意 2:如果你要回報問題,請先切回預設語言,再附上截圖、訊息與日誌。\n\n希望你使用愉快!", + "dialog.yourLanguageAvailable.btnRevertToDefault": "恢復為預設語言", + "dialog.yourLanguageAvailable.Title": "已提供你的語言翻譯!", + "Disables all synchronization and restart.": "停用所有同步並重新啟動。", + "Disables logging, only shows notifications. Please disable if you report an issue.": "停用日誌記錄,只顯示通知。如果你要回報問題,請關閉此選項。", + "Display Language": "顯示語言", + "Display name": "顯示名稱", + "Do not check configuration mismatch before replication": "複寫前不檢查設定是否不一致", + "Do not keep metadata of deleted files.": "不保留已刪除檔案的中繼資料。", + "Do not split chunks in the background": "不在背景分割 chunks", + "Do not use internal API": "不使用內部 API", + "Document History": "文件歷程", + "Duplicate": "複製", + "Duplicate remote": "複製遠端設定", + "E2EE Configuration": "E2EE 設定", + "Edge case addressing (Behaviour)": "邊緣情況處理(行為)", + "Edge case addressing (Database)": "邊緣情況處理(資料庫)", + "Edge case addressing (Processing)": "邊緣情況處理(處理)", + "Emergency restart": "緊急重新啟動", + "Enable advanced features": "啟用進階功能", + "Enable customization sync": "啟用自訂同步", + "Enable Developers' Debug Tools.": "啟用開發者除錯工具。", + "Enable edge case treatment features": "啟用邊緣情況處理功能", + "Enable poweruser features": "啟用進階使用者功能", + "Enable this if your Object Storage doesn't support CORS": "如果你的物件儲存不支援 CORS,請啟用此選項", + "Enable this option to automatically apply the most recent change to documents even when it conflicts": "啟用此選項後,即使發生衝突也會自動套用文件的最新變更", + "Encrypt contents on the remote database. If you use the plugin's synchronization feature, enabling this is recommended.": "加密遠端資料庫中的內容。如果你使用外掛的同步功能,建議啟用此選項。", + "Encrypting sensitive configuration items": "加密敏感設定項目", + "Encryption phassphrase. If changed, you should overwrite the server's database with the new (encrypted) files.": "加密密語。如果變更了它,你應以新的(已加密)檔案覆寫伺服器上的資料庫。", + "End-to-End Encryption": "端對端加密", + "Endpoint URL": "端點 URL", + "Enhance chunk size": "擴大 chunk 大小", + "Enter Server Information": "輸入伺服器資訊", + "Enter the server information manually": "手動輸入伺服器資訊", + "Export": "匯出", + "Failed to connect to remote for compaction.": "無法連線到遠端資料庫以執行壓縮。", + "Failed to connect to remote for compaction. ${reason}": "無法連線到遠端資料庫以執行壓縮。${reason}", + "Failed to start one-shot replication before Garbage Collection. Garbage Collection Cancelled.": "無法在垃圾回收前啟動一次性複寫。垃圾回收已取消。", + "Failed to start replication after Garbage Collection.": "垃圾回收後無法啟動複寫。", + "Fetch": "抓取", + "Fetch chunks on demand": "按需抓取 chunks", + "Fetch database with previous behaviour": "以前一種行為抓取資料庫", + "Fetch remote settings": "抓取遠端設定", + "File to resolve conflict": "要解決衝突的檔案", + "File to view History": "要檢視歷程的檔案", + "Filename": "檔名", + "First, please select the option that best describes your current situation.": "首先,請選擇最符合你目前情況的選項。", + "Flag and restart": "標記後重新啟動", + "Forces the file to be synced when opened.": "開啟檔案時強制同步該檔案。", + "Fresh Start Wipe": "全新開始清除", + "Garbage Collection cancelled by user.": "使用者已取消垃圾回收。", + "Garbage Collection completed. Deleted chunks: ${deletedChunks} / ${totalChunks}. Time taken: ${seconds} seconds.": "垃圾回收完成。已刪除 chunks:${deletedChunks} / ${totalChunks}。耗時:${seconds} 秒。", + "Garbage Collection Confirmation": "垃圾回收確認", + "Garbage Collection V3 (Beta)": "垃圾回收 V3(Beta)", + "Garbage Collection: Found ${unusedChunks} unused chunks to delete.": "垃圾回收:找到 ${unusedChunks} 個未使用的 chunks 可刪除。", + "Garbage Collection: Scanned ${scanned} / ~${docCount}": "垃圾回收:已掃描 ${scanned} / ~${docCount}", + "Garbage Collection: Scanning completed. Total chunks: ${totalChunks}, Used chunks: ${usedChunks}": "垃圾回收:掃描完成。總 chunks:${totalChunks},已使用 chunks:${usedChunks}", + "Handle files as Case-Sensitive": "將檔案視為區分大小寫", + "Hidden Files": "隱藏檔案", + "Hide completely": "完全隱藏", + "Highlight diff": "醒目顯示差異", + "How to display network errors when the sync server is unreachable.": "當同步伺服器無法連線時,如何顯示網路錯誤。", + "How would you like to configure the connection to your server?": "你希望如何設定與伺服器的連線?", + "I am adding a device to an existing synchronisation setup": "我要將裝置加入既有同步設定", + "I am setting this up for the first time": "我是第一次進行設定", + "I know my server details, let me enter them": "我知道伺服器資訊,讓我手動輸入", + "If disabled(toggled), chunks will be split on the UI thread (Previous behaviour).": "若停用(關閉)此選項,chunks 會在 UI 執行緒上分割(舊有行為)。", + "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.": "啟用後會使用以每個檔案為單位的高效率自訂同步。啟用時需要進行一次小型遷移,且所有裝置都應升級到 v0.23.18。啟用後將不再相容舊版本。", + "If enabled, chunks will be split into no more than 100 items. However, dedupe is slightly weaker.": "啟用後,chunks 最多會分成 100 個項目,但去重效果會稍微變弱。", + "If enabled, newly created chunks are temporarily kept within the document, and graduated to become independent chunks once stabilised.": "啟用後,新建立的 chunks 會暫時保留在文件中,待穩定後再獨立出去。", + "If enabled, the ⛔ icon will be shown inside the status instead of the file warnings banner. No details will be shown.": "啟用後,將在狀態列中顯示 ⛔ 圖示,而不是檔案警告橫幅,且不會顯示詳細資訊。", + "If enabled, the file under 1kb will be processed in the UI thread.": "啟用後,小於 1KB 的檔案會在 UI 執行緒中處理。", + "If enabled, the notification of hidden files change will be suppressed.": "啟用後,將不再通知隱藏檔案變更。", + "If this enabled, all chunks will be stored with the revision made from its content. (Previous behaviour)": "啟用後,所有 chunks 都會以其內容產生的修訂版本儲存(舊有行為)。", + "If this enabled, All files are handled as case-Sensitive (Previous behaviour).": "啟用後,所有檔案都會以區分大小寫方式處理(舊有行為)。", + "If this enabled, chunks will be split into semantically meaningful segments. Not all platforms support this feature.": "啟用後,chunks 會依語意切分成有意義的區段,並非所有平台都支援此功能。", + "If you reached the payload size limit when using IBM Cloudant, please decrease batch size and batch limit to a lower value.": "如果你在使用 IBM Cloudant 時遇到負載大小上限,請調低批次大小與批次上限。", + "Ignore and Proceed": "忽略並繼續", + "Ignore patterns": "忽略模式", + "Import connection": "匯入連線", + "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 sent history. On the next sync, every item except this device received will be sent again.": "初始化傳送日誌歷程。下次同步時,除了此裝置已接收的項目外,其他項目都會再次傳送。", + "Later": "稍後", + "Limit: {datetime} ({timestamp})": "限制:{datetime}({timestamp})", + "Lock": "鎖定", + "Lock Server": "鎖定伺服器", + "Lock the remote server to prevent synchronization with other devices.": "鎖定遠端伺服器,以防止其他裝置進行同步。", + "Minimum interval for syncing": "同步最小間隔", + "More actions": "更多操作", + "Network warning style": "網路警告樣式", + "New Remote": "新增遠端", + "No connected device information found. Cancelling Garbage Collection.": "找不到已連線裝置的資訊。正在取消垃圾回收。", + "No limit configured": "尚未設定限制", + "No, please take me back": "不,返回上一步", + "Node ID": "節點 ID", + "Node Information Missing": "節點資訊缺失", + "Non-Synchronising files": "不同步的檔案", + "Normal Files": "一般檔案", + "Obsidian version": "Obsidian 版本", + "obsidianLiveSyncSettingTab.btnApply": "套用", + "obsidianLiveSyncSettingTab.btnDisable": "停用", + "obsidianLiveSyncSettingTab.btnNext": "下一步", + "obsidianLiveSyncSettingTab.buttonNext": "下一步", + "obsidianLiveSyncSettingTab.defaultLanguage": "預設語言", + "obsidianLiveSyncSettingTab.labelDisabled": "⏹️ : 已停用", + "obsidianLiveSyncSettingTab.labelEnabled": "🔁 : 已啟用", + "obsidianLiveSyncSettingTab.logConfiguredDisabled": "已設定的同步模式:已停用", + "obsidianLiveSyncSettingTab.logConfiguredLiveSync": "已設定的同步模式:LiveSync", + "obsidianLiveSyncSettingTab.logConfiguredPeriodic": "已設定的同步模式:定期同步", + "obsidianLiveSyncSettingTab.logSelectAnyPreset": "請選擇任一預設項目。", + "obsidianLiveSyncSettingTab.msgConfigCheckFailed": "設定檢查失敗。仍要繼續嗎?", + "obsidianLiveSyncSettingTab.msgEnableEncryptionRecommendation": "我們建議啟用端對端加密與路徑混淆。你確定要在未加密的情況下繼續嗎?", + "obsidianLiveSyncSettingTab.msgFetchConfigFromRemote": "要從遠端伺服器抓取設定嗎?", + "obsidianLiveSyncSettingTab.msgGenerateSetupURI": "全部完成!要產生 Setup URI 以便設定其他裝置嗎?", + "obsidianLiveSyncSettingTab.msgInvalidPassphrase": "你的加密密語可能無效。你確定要繼續嗎?", + "obsidianLiveSyncSettingTab.msgSelectAndApplyPreset": "請選擇並套用任一預設項目以完成精靈。", + "obsidianLiveSyncSettingTab.nameDisableHiddenFileSync": "停用隱藏檔案同步", + "obsidianLiveSyncSettingTab.nameEnableHiddenFileSync": "啟用隱藏檔案同步", + "obsidianLiveSyncSettingTab.nameHiddenFileSynchronization": "隱藏檔案同步", + "obsidianLiveSyncSettingTab.optionDisableAllAutomatic": "停用所有自動同步", + "obsidianLiveSyncSettingTab.optionLiveSync": "LiveSync 同步", + "obsidianLiveSyncSettingTab.optionOnEvents": "事件觸發時", + "obsidianLiveSyncSettingTab.optionPeriodicAndEvents": "定期與事件觸發", + "obsidianLiveSyncSettingTab.optionPeriodicWithBatch": "定期(批次)", + "obsidianLiveSyncSettingTab.titleAppearance": "外觀", + "obsidianLiveSyncSettingTab.titleConflictResolution": "衝突處理", + "obsidianLiveSyncSettingTab.titleCongratulations": "恭喜!", + "obsidianLiveSyncSettingTab.titleCouchDB": "CouchDB 伺服器", + "obsidianLiveSyncSettingTab.titleDeletionPropagation": "刪除傳播", + "obsidianLiveSyncSettingTab.titleEncryptionNotEnabled": "尚未啟用加密", + "obsidianLiveSyncSettingTab.titleEncryptionPassphraseInvalid": "加密密語無效", + "obsidianLiveSyncSettingTab.titleFetchConfig": "抓取設定", + "obsidianLiveSyncSettingTab.titleHiddenFiles": "隱藏檔案", + "obsidianLiveSyncSettingTab.titleLogging": "記錄", + "obsidianLiveSyncSettingTab.titleMinioS3R2": "MinIO、S3、R2", + "obsidianLiveSyncSettingTab.titleNotification": "通知", + "obsidianLiveSyncSettingTab.titleRemoteConfigCheckFailed": "遠端設定檢查失敗", + "obsidianLiveSyncSettingTab.titleRemoteServer": "遠端伺服器", + "obsidianLiveSyncSettingTab.titleSynchronizationMethod": "同步方式", + "obsidianLiveSyncSettingTab.titleSynchronizationPreset": "同步預設", + "obsidianLiveSyncSettingTab.titleSyncSettingsViaMarkdown": "透過 Markdown 同步設定", + "obsidianLiveSyncSettingTab.titleUpdateThinning": "更新精簡", + "Ok": "確定", + "Old Algorithm": "舊演算法", + "Older fallback (Slow, W/O WebAssembly)": "舊版回退(較慢,無 WebAssembly)", + "Overwrite patterns": "覆寫模式", + "Overwrite remote": "覆寫遠端", + "Overwrite remote with local DB and passphrase.": "使用本機資料庫與密語覆寫遠端。", + "Overwrite Server Data with This Device's Files": "以此裝置的檔案覆寫伺服器資料", + "paneMaintenance.markDeviceResolvedAfterBackup": "請在完成備份後將此裝置標記為已處理。", + "paneMaintenance.remoteLockedAndDeviceNotAccepted": "遠端資料庫已鎖定,且此裝置尚未被接受。", + "paneMaintenance.remoteLockedResolvedDevice": "遠端資料庫已鎖定,但此裝置已被接受。", + "paneMaintenance.unlockDatabaseReady": "現在可以解鎖資料庫。", + "Paste a connection string": "貼上連線字串", + "Paste the Setup URI generated from one of your active devices.": "貼上從一台已在使用裝置上產生的 Setup URI。", + "Patterns to match files for overwriting instead of merging": "用於匹配需覆寫而非合併檔案的模式", + "Patterns to match files for syncing": "用於匹配同步檔案的模式", + "Peer-to-Peer only": "僅 Peer-to-Peer", + "Peer-to-Peer Synchronisation": "點對點同步", + "Perform": "執行", + "Perform cleanup": "執行清理", + "Perform Garbage Collection": "執行垃圾回收", + "Perform Garbage Collection to remove unused chunks and reduce database size.": "執行垃圾回收以移除未使用的 chunks 並減少資料庫大小。", + "Pick a file to resolve conflict": "選擇要解決衝突的檔案", + "Pick a file to show history": "選擇要顯示歷程的檔案", + "Please disable 'Read chunks online' in settings to use Garbage Collection.": "若要使用垃圾回收,請在設定中停用「Read chunks online」。", + "Please enable 'Compute revisions for chunks' in settings to use Garbage Collection.": "若要使用垃圾回收,請在設定中啟用「Compute revisions for chunks」。", + "Please select 'Cancel' explicitly to cancel this operation.": "若要取消此操作,請明確選擇「取消」。", + "Please select a method to import the settings from another device.": "請選擇一種從其他裝置匯入設定的方法。", + "Please select an option to proceed": "請選擇一個選項以繼續", + "Please select the type of server to which you are connecting.": "請選擇你要連線的伺服器類型。", + "Please set this device name": "請設定此裝置名稱", + "Plug-in version": "外掛版本", + "Prepare the 'report' to create an issue": "準備建立 Issue 用的「報告」", + "Proceed Garbage Collection": "繼續執行垃圾回收", + "Proceed with Setup URI": "繼續使用 Setup URI", + "Proceeding with Garbage Collection, ignoring missing nodes.": "正在繼續執行垃圾回收,並忽略缺失節點。", + "Proceeding with Garbage Collection.": "正在執行垃圾回收。", + "Progress": "進度", + "PureJS fallback (Fast, W/O WebAssembly)": "PureJS 回退(快速,無 WebAssembly)", + "Purge all download/upload cache.": "清除所有下載/上傳快取。", + "Purge all journal counter": "清除所有日誌計數器", + "Rebuild local and remote database with local files.": "以本機檔案重建本機與遠端資料庫。", + "Rebuilding Operations (Remote Only)": "重建作業(僅遠端)", + "Recovery and Repair": "修復與修補", + "Recreate all": "全部重建", + "Recreate missing chunks for all files": "為所有檔案重建遺失的 chunks", + "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.": "透過捨棄所有非最新版本來減少儲存空間占用。執行此操作時,遠端伺服器與本機用戶端都需要具備相同數量的可用空間。", + "Remediation": "修復設定", + "Remediation Setting Changed": "修復設定已變更", + "Remote Database Tweak (In sunset)": "遠端資料庫調校(即將淘汰)", + "Remote Databases": "遠端資料庫", + "Remote name": "遠端名稱", + "Rename": "重新命名", + "Rerun Onboarding Wizard": "重新執行導覽精靈", + "Rerun the onboarding wizard to set up Self-hosted LiveSync again.": "重新執行導覽精靈以再次設定 Self-hosted LiveSync。", + "Rerun Wizard": "重新執行精靈", + "Resend": "重新傳送", + "Resend all chunks to the remote.": "將所有 chunks 重新傳送到遠端。", + "Reset": "重設", + "Reset all": "全部重設", + "Reset all journal counter": "重設所有日誌計數器", + "Reset journal received history": "重設日誌接收歷史", + "Reset journal sent history": "重設日誌傳送歷史", + "Reset notification threshold and check the remote database usage": "重設通知閾值並檢查遠端資料庫使用情況", + "Reset received": "重設接收紀錄", + "Reset sent history": "重設傳送歷史", + "Reset Synchronisation information": "重設同步資訊", + "Reset Synchronisation on This Device": "重設此裝置上的同步", + "Reset the remote storage size threshold and check the remote storage size again.": "重設遠端儲存空間大小閾值,並再次檢查遠端儲存空間大小。", + "Resolve All": "全部處理", + "Resolve all conflicted files": "解決所有衝突檔案", + "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.": "將所有衝突檔案統一保留較新的版本。注意:這會覆寫較舊的版本,且被覆寫的內容無法復原。", + "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?": "強烈建議重新啟動 Obsidian。在重新啟動之前,部分變更可能尚未生效,顯示也可能不一致。你確定要現在重新啟動嗎?", + "Restore or reconstruct local database from remote.": "從遠端還原或重建本機資料庫。", + "Run Doctor": "執行診斷", + "S3/MinIO/R2 Object Storage": "S3/MinIO/R2 物件儲存", + "Scan a QR Code (Recommended for mobile)": "掃描 QR Code(行動裝置推薦)", + "Scan for Broken files": "掃描損壞檔案", + "Scan the QR code displayed on an active device using this device's camera.": "使用目前裝置的相機掃描另一台已在使用裝置上顯示的 QR Code。", + "Schedule and Restart": "排程後重新啟動", + "Scram Switches": "緊急處置開關", + "Scram!": "緊急處置", + "Select the database adapter to use.": "選擇要使用的資料庫適配器。", + "Send": "傳送", + "Send chunks": "傳送 chunks", + "Setting.GenerateKeyPair.Desc": "我們已產生新的金鑰對!\n\n注意:此金鑰對之後將不會再次顯示。請務必妥善保存;若遺失,必須重新產生新的金鑰對。\n注意 2:公鑰採用 spki 格式,私鑰採用 pkcs8 格式。為了方便複製,公鑰中的換行會轉換為 `\\n`。\n注意 3:公鑰應設定在遠端資料庫中,私鑰則應設定在本機裝置上。\n\n>[!僅供本人查看]-\n>
\n>\n> ### 公鑰\n> ```\n${public_key}\n> ```\n>\n> ### 私鑰\n> ```\n${private_key}\n> ```\n>\n>
\n\n>[!便於整段複製]-\n>\n>
\n>\n> ```\n${public_key}\n${private_key}\n> ```\n>\n>
", + "Setting.GenerateKeyPair.Title": "已產生新的金鑰對!", + "Setup URI dialog cancelled.": "Setup URI 對話框已取消。", + "Setup.RemoteE2EE.AdvancedTitle": "進階", + "Setup.RemoteE2EE.AlgorithmWarning": "變更加密演算法後,先前以其他演算法加密的資料將無法再存取。請確認所有裝置都設定為使用相同演算法,以維持對資料的存取能力。", + "Setup.RemoteE2EE.ButtonCancel": "取消", + "Setup.RemoteE2EE.ButtonProceed": "繼續", + "Setup.RemoteE2EE.DefaultAlgorithmDesc": "在大多數情況下,建議維持使用預設演算法(${algorithm})。只有當你現有的 Vault 是以不同格式加密時,才需要調整這項設定。", + "Setup.RemoteE2EE.Guidance": "請設定你的端對端加密選項。", + "Setup.RemoteE2EE.LabelEncrypt": "端對端加密", + "Setup.RemoteE2EE.LabelEncryptionAlgorithm": "加密演算法", + "Setup.RemoteE2EE.LabelObfuscateProperties": "混淆屬性", + "Setup.RemoteE2EE.MultiDestinationWarning": "即使連線到多個同步目標,這項設定也必須保持一致。", + "Setup.RemoteE2EE.ObfuscatePropertiesDesc": "混淆屬性(例如檔案路徑、大小、建立時間與修改時間)可以額外增加一層安全保護,讓遠端伺服器上的檔案與資料夾結構及名稱更難被辨識。這有助於保護你的隱私,也讓未授權使用者更難推測你的資料資訊。", + "Setup.RemoteE2EE.PassphraseValidationLine1": "請注意,端對端加密的密語要到同步程序實際開始時才會進行驗證。這是為了保護你資料而設計的安全措施。", + "Setup.RemoteE2EE.PassphraseValidationLine2": "因此,在手動設定伺服器資訊時請務必格外小心。如果輸入了錯誤的密語,伺服器上的資料將會損毀。請理解這是系統的預期行為。", + "Setup.RemoteE2EE.PlaceholderPassphrase": "輸入你的密語", + "Setup.RemoteE2EE.StronglyRecommendedLine1": "啟用端對端加密後,資料會先在你的裝置上完成加密,再傳送到遠端伺服器。這表示即使有人取得伺服器存取權,沒有密語也無法讀取你的資料。請務必記住你的密語,因為其他裝置在解密資料時也需要它。", + "Setup.RemoteE2EE.StronglyRecommendedLine2": "另外請注意,即使你目前使用的是 Peer-to-Peer 同步,日後若切換到其他方式並連線到遠端伺服器時,也會沿用這組設定。", + "Setup.RemoteE2EE.StronglyRecommendedTitle": "強烈建議", + "Setup.RemoteE2EE.Title": "端對端加密", + "Setup.ScanQRCode.ButtonClose": "關閉此對話框", + "Setup.ScanQRCode.Guidance": "請依照以下步驟,從現有裝置匯入設定。", + "Setup.ScanQRCode.Step1": "在這台裝置上,請保持此 Vault 開啟。", + "Setup.ScanQRCode.Step2": "在來源裝置上開啟 Obsidian。", + "Setup.ScanQRCode.Step3": "在來源裝置上,從命令面板執行「將設定顯示為 QR 碼」命令。", + "Setup.ScanQRCode.Step4": "在這台裝置上切換到相機 App,或使用 QR 碼掃描器掃描顯示出的 QR 碼。", + "Setup.ScanQRCode.Title": "掃描 QR 碼", + "Setup.UseSetupURI.ButtonCancel": "取消", + "Setup.UseSetupURI.ButtonProceed": "測試設定並繼續", + "Setup.UseSetupURI.ErrorFailedToParse": "無法解析 Setup URI,請檢查 URI 與密語。", + "Setup.UseSetupURI.ErrorPassphraseRequired": "請輸入 Vault 的密語。", + "Setup.UseSetupURI.GuidanceLine1": "請輸入在伺服器安裝期間或其他裝置上產生的 Setup URI,以及 Vault 的密語。", + "Setup.UseSetupURI.GuidanceLine2": "你可以在命令面板中執行「將設定複製為新的 Setup URI」命令來產生新的 Setup URI。", + "Setup.UseSetupURI.InvalidInfo": "Setup URI 無效,請檢查後再試一次。", + "Setup.UseSetupURI.LabelPassphrase": "Vault 密語", + "Setup.UseSetupURI.LabelSetupURI": "Setup URI", + "Setup.UseSetupURI.PlaceholderPassphrase": "輸入 Vault 密語", + "Setup.UseSetupURI.Title": "輸入 Setup URI", + "Setup.UseSetupURI.ValidInfo": "Setup URI 有效,可以使用。", + "Show full banner": "顯示完整橫幅", + "Show history": "顯示歷程", + "Show icon only": "僅顯示圖示", + "Show status icon instead of file warnings banner": "以狀態圖示取代檔案警告橫幅", + "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.": "某些裝置的進度值不同(最大:${maxProgress},最小:${minProgress})。\n這可能表示某些裝置尚未完成同步,進而可能導致衝突。強烈建議在繼續之前先確認所有裝置都已同步。", + "Storage -> Database": "儲存空間 -> 資料庫", + "Switch to IDB": "切換至 IDB", + "Switch to IndexedDB": "切換至 IndexedDB", + "Synchronisation utilising journal files. You must have set up an S3/MinIO/R2 compatible object storage.": "透過日誌檔進行同步。你需要事先部署好相容 S3/MinIO/R2 的物件儲存服務。", + "Synchronising files": "同步中的檔案", + "Syncing": "同步中", + "Target patterns": "目標模式", + "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.": "以下已接受節點缺少節點資訊:\n- ${missingNodes}\n\n這表示它們已有一段時間未連線,或仍停留在較舊版本。\n如有可能,建議先更新所有裝置。如果有已不再使用的裝置,可以先鎖定一次遠端端以清除全部已接受節點。", + "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.": "IndexedDB 適配器在某些情況下通常能提供較佳效能,但在 LiveSync 模式下已發現可能導致記憶體洩漏。使用 LiveSync 模式時,請改用 IDB 適配器。", + "The minimum interval for automatic synchronisation on event.": "事件觸發自動同步的最小間隔。", + "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.": "這是面向沒有 URI 或希望手動設定詳細參數的進階選項。", + "This is the most suitable synchronisation method for the design. All functions are available. You must have set up a CouchDB instance.": "這是最符合目前設計的同步方式,所有功能皆可使用。你需要事先部署好 CouchDB 實例。", + "This will recreate chunks for all files. If there were missing chunks, this may fix the errors.": "這會為所有檔案重新建立 chunks。若先前有遺失的 chunks,這可能修復相關錯誤。", + "Use a Setup URI (Recommended)": "使用 Setup URI(推薦)", + "Verify all": "全部驗證", + "Verify and repair all files": "驗證並修復所有檔案", + "We will now guide you through a few questions to simplify the synchronisation setup.": "接下來我們會透過幾個問題,引導你更輕鬆地完成同步設定。", + "We will now proceed with the server configuration.": "接下來將繼續進行伺服器設定。", + "Welcome to Self-hosted LiveSync": "歡迎使用 Self-hosted LiveSync", + "xxhash32 (Fast but less collision resistance)": "xxhash32(速度快,但抗碰撞能力較弱)", + "xxhash64 (Fastest)": "xxhash64(最快)", + "Yes, I want to add this device to my existing synchronisation": "是的,我要把這台裝置加入既有同步", + "Yes, I want to set up a new synchronisation": "是的,我要設定新的同步", + "You are adding this device to an existing synchronisation setup.": "你正在將此裝置加入既有同步設定中。" +} diff --git a/src/common/messagesJson/zh.json b/src/common/messagesJson/zh.json new file mode 100644 index 00000000..7203005c --- /dev/null +++ b/src/common/messagesJson/zh.json @@ -0,0 +1,1091 @@ +{ + "(Active)": "(已启用)", + "(BETA) Always overwrite with a newer file": "始终使用更新的文件覆盖(测试版)", + "(Beta) Use ignore files": "(测试版)使用忽略文件", + "(Days passed, 0 to disable automatic-deletion)": "(已过天数,0为禁用自动删除)", + "(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.": "(例如,在线读取块)如果启用此选项,LiveSync 将直接在线读取块,而不是在本地复制块。建议增加自定义块大小", + "(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)如果设置了此项,大于此大小的本地和远程文件的更改将被跳过。如果文件再次变小,将使用更新的文件", + "(Mega chars)": "(百万字符)", + "(Not recommended) If set, credentials will be stored in the file.": "(不建议)如果设置,凭据将存储在文件中", + "(Obsolete) Use an old adapter for compatibility": "(已弃用)为兼容性使用旧适配器", + "(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.": "(正则表达式)如果已设置,则所有匹配此模式的本地和远端文件变更都会被跳过。", + "(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.": "(如果你已经在另一台电脑或手机上使用同步,请选择此项。)此选项适合将当前设备加入现有 LiveSync 配置的用户。", + "(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.": "(如果你正在将此设备配置为第一台同步设备,请选择此项。)此选项适合初次使用 LiveSync,并希望从头开始配置的用户。", + "> [!INFO]- The connected devices have been detected as follows:\n${devices}": "> [!INFO]- 已检测到以下已连接设备:\n${devices}", + "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.": "Setup URI 是一段包含服务器地址与认证信息的文本。如果服务器安装脚本已经生成了 URI,使用它可以更简单且更安全地完成配置。", + "Access Key": "访问密钥", + "Activate": "启用", + "Active Remote Configuration": "生效中的远程配置", + "Add default patterns": "添加默认模式", + "Add new connection": "新增连接", + "All devices have the same progress value (${progress}). Your devices seem to be synchronised. And be able to proceed with Garbage Collection.": "所有设备的进度值均相同(${progress})。看起来你的设备已经同步,可以继续执行垃圾回收。", + "Always prompt merge conflicts": "始终提示合并冲突", + "Analyse": "立即分析", + "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.": "分析数据库使用情况并生成 TSV 报告以供您自行诊断。您可以将生成的报告粘贴到您喜欢的任何电子表格中。", + "Apply Latest Change if Conflicting": "如果冲突则应用最新更改", + "Apply preset configuration": "应用预设配置", + "Ask a passphrase at every launch": "每次启动时询问密码短语", + "Automatically Sync all files when opening Obsidian.": "打开 Obsidian 时自动同步所有文件", + "Back": "返回", + "Back to non-configured": "恢复为未配置状态", + "Batch database update": "批量数据库更新", + "Batch limit": "批量限制", + "Batch size": "批量大小", + "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.": "在 v0.17.16 之前,我们使用旧适配器作为本地数据库。现在首选新适配器。但是,它需要重建本地数据库。请在有足够时间时禁用此开关。如果保持启用状态,并且在从远程数据库获取时,系统将要求您禁用此开关。", + "Bucket Name": "存储桶名称", + "Cancel": "取消", + "Cancel Garbage Collection": "取消垃圾回收", + "Check": "立即检查", + "Check and convert non-path-obfuscated files": "检查并转换未进行路径混淆的文件", + "Check for documents that have not been converted to path-obfuscated IDs and convert them if necessary.": "检查尚未转换为路径混淆 ID 的文档,并在需要时将其转换。", + "cmdConfigSync.showCustomizationSync": "显示自定义同步", + "Comma separated `.gitignore, .dockerignore`": "用逗号分隔,例如 `.gitignore, .dockerignore`", + "Compaction in progress on remote database...": "正在远程数据库上执行压缩...", + "Compaction on remote database completed successfully.": "远程数据库压缩已成功完成。", + "Compaction on remote database failed.": "远程数据库压缩失败。", + "Compaction on remote database timed out.": "远程数据库压缩超时。", + "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 (Database structure)": "兼容性(数据库结构)", + "Compatibility (Internal API Usage)": "兼容性(内部 API 使用)", + "Compatibility (Metadata)": "兼容性(元数据)", + "Compatibility (Remote Database)": "兼容性(远端数据库)", + "Compatibility (Trouble addressed)": "兼容性(问题修复)", + "Compute revisions for chunks": "为 chunks 计算修订版本(以前的行为)", + "Configuration Encryption": "配置加密", + "Configure": "配置", + "Configure And Change Remote": "配置并切换远端", + "Configure E2EE": "配置 E2EE", + "Configure Remote": "配置远端", + "Configure the same server information as your other devices again, manually, very advanced users only.": "手动重新输入与你其他设备相同的服务器信息。仅适合高级用户。", + "Connection Method": "连接方式", + "Continue to CouchDB setup": "继续进行 CouchDB 设置", + "Continue to Peer-to-Peer only setup": "继续进行仅 Peer-to-Peer 设置", + "Continue to S3/MinIO/R2 setup": "继续进行 S3/MinIO/R2 设置", + "Copy": "复制", + "Copy Report to clipboard": "将报告复制到剪贴板", + "CouchDB Connection Tweak": "CouchDB 连接调优", + "Cross-platform": "跨平台", + "Current adapter: {adapter}": "当前适配器:{adapter}", + "Customization Sync": "自定义同步", + "Customization Sync (Beta3)": "自定义同步(Beta3)", + "Data Compression": "数据压缩", + "Database Adapter": "数据库适配器", + "Database Name": "数据库名称", + "Database suffix": "数据库后缀", + "Default": "默认", + "Delay conflict resolution of inactive files": "推迟解决不活动文件", + "Delay merge conflict prompt for inactive files.": "推迟手动解决不活动文件", + "Delete": "删除", + "Delete all customization sync data": "删除所有自定义同步数据", + "Delete all data on the remote server.": "删除远端服务器上的所有数据。", + "Delete local database to reset or uninstall Self-hosted LiveSync": "删除本地数据库以重置或卸载 Self-hosted LiveSync", + "Delete old metadata of deleted files on start-up": "启动时删除已删除文件的旧元数据", + "Delete Remote Configuration": "删除远端配置", + "Delete remote configuration '{name}'?": "要删除远端配置“{name}”吗?", + "desktop": "桌面设备", + "Developer": "开发者", + "Device": "设备", + "Device name": "设备名称", + "Device Setup Method": "设备设置方式", + "dialog.yourLanguageAvailable": "Self-hosted LiveSync已提供您语言的翻译,因此启用了%{Display language}\n\n注意:并非所有消息都已翻译。我们期待您的贡献!\n注意 2:若您创建问题报告, **请切换回%{lang-def}** ,然后截取屏幕截图、消息和日志,此操作可在设置对话框中完成\n愿您使用顺心!", + "dialog.yourLanguageAvailable.btnRevertToDefault": "保持%{lang-def}", + "dialog.yourLanguageAvailable.Title": " 翻译可用!", + "Disables all synchronization and restart.": "禁用所有同步并重新启动。", + "Disables logging, only shows notifications. Please disable if you report an issue.": "禁用日志记录,仅显示通知。如果您报告问题,请禁用此选项", + "Display Language": "显示语言", + "Display name": "显示名称", + "Do not check configuration mismatch before replication": "在复制前不检查配置不匹配", + "Do not keep metadata of deleted files.": "不保留已删除文件的元数据 ", + "Do not split chunks in the background": "不在后台分割 chunks", + "Do not use internal API": "不使用内部 API", + "Doctor.Button.DismissThisVersion": "拒绝,并且直到下个版本前不再询问", + "Doctor.Button.Fix": "修复", + "Doctor.Button.FixButNoRebuild": "修复但不重建", + "Doctor.Button.No": "拒绝", + "Doctor.Button.Skip": "保持不变", + "Doctor.Button.Yes": "确定", + "Doctor.Dialogue.Main": "您好!配置医生已根据您的要求启动(感谢您)!!遗憾的是,检测到部分配置存在潜在问题。请放心,我们将逐一解决这些问题。\n\n提前告知您,我们将就以下事项进行确认:\n\n为数据块计算修订版本(此前行为)\n增强块大小\n\n我们开始处理吗?", + "Doctor.Dialogue.MainFix": "\n## ${name}\n\n| Current | Ideal |\n|:---:|:---:|\n| ${current} | ${ideal} |\n\n**Recommendation Level:** ${level}\n\n### Why this has been detected?\n\n${reason}\n\n${note}\n\nFix this to the ideal value?", + "Doctor.Dialogue.Title": "Self-hosted LiveSync 配置诊断", + "Doctor.Dialogue.TitleAlmostDone": "全部完成!", + "Doctor.Dialogue.TitleFix": "修复问题 ${current}/${total}", + "Doctor.Level.Must": "必须", + "Doctor.Level.Necessary": "必要", + "Doctor.Level.Optional": "可选", + "Doctor.Level.Recommended": "推荐", + "Doctor.Message.NoIssues": "未发现问题!", + "Doctor.Message.RebuildLocalRequired": "注意!需要重建本地数据库以应用此项!", + "Doctor.Message.RebuildRequired": "注意!需要重建才能应用此项!", + "Doctor.Message.SomeSkipped": "我们将某些问题留给了以后处理。是否要在下次启动时再次询问您?", + "Doctor.RULES.E2EE_V02500.REASON": "The End-to-End Encryption has got now more robust and faster. Also because, the previous E2EE was found to be compromised in a re-conducted code review. It should be applied as soon as possible. Really apologises for your inconvenience. And, this setting is not forward compatible. All synchronised devices must be updated to v0.25.0 or higher. Rebuilds are not required and will be converted from the new transfer to the new format, However, it is recommended to rebuild whenever possible.", + "Duplicate": "复制", + "Duplicate remote": "复制远端配置", + "E2EE Configuration": "E2EE 配置", + "Edge case addressing (Behaviour)": "边缘情况处理(行为)", + "Edge case addressing (Database)": "边缘情况处理(数据库)", + "Edge case addressing (Processing)": "边缘情况处理(处理)", + "Emergency restart": "紧急重启", + "Enable advanced features": "启用高级功能", + "Enable customization sync": "启用自定义同步", + "Enable Developers' Debug Tools.": "启用开发者调试工具 ", + "Enable edge case treatment features": "启用边缘情况处理功能", + "Enable poweruser features": "启用高级用户功能", + "Enable this if your Object Storage doesn't support CORS": "如果您的对象存储不支持 CORS,请启用此功能 ", + "Enable this option to automatically apply the most recent change to documents even when it conflicts": "启用此选项可在文档冲突时自动应用最新的更改", + "Encrypt contents on the remote database. If you use the plugin's synchronization feature, enabling this is recommended.": "加密远程数据库中的内容。如果您使用插件的同步功能,则建议启用此功能 ", + "Encrypting sensitive configuration items": "加密敏感配置项", + "Encryption phassphrase. If changed, you should overwrite the server's database with the new (encrypted) files.": "加密密码。如果更改,您应该用新的(加密的)文件覆盖服务器的数据库 ", + "End-to-End Encryption": "端到端加密", + "Endpoint URL": "终端URL", + "Enhance chunk size": "增大块大小", + "Enter Server Information": "输入服务器信息", + "Enter the server information manually": "手动输入服务器信息", + "Export": "导出", + "Failed to connect to remote for compaction.": "无法连接到远程数据库以执行压缩。", + "Failed to connect to remote for compaction. ${reason}": "无法连接到远程数据库以执行压缩。${reason}", + "Failed to start one-shot replication before Garbage Collection. Garbage Collection Cancelled.": "无法在垃圾回收前启动一次性复制。垃圾回收已取消。", + "Failed to start replication after Garbage Collection.": "垃圾回收后无法启动复制。", + "Fetch": "获取", + "Fetch chunks on demand": "按需获取块", + "Fetch database with previous behaviour": "使用以前的行为获取数据库", + "Fetch remote settings": "获取远端设置", + "File to resolve conflict": "选择要解决冲突的文件", + "Filename": "文件名", + "First, please select the option that best describes your current situation.": "首先,请选择最符合你当前情况的选项。", + "Flag and restart": "标记后重启", + "Forces the file to be synced when opened.": "打开文件时强制同步该文件 ", + "Fresh Start Wipe": "全新开始清除", + "Garbage Collection cancelled by user.": "用户已取消垃圾回收。", + "Garbage Collection completed. Deleted chunks: ${deletedChunks} / ${totalChunks}. Time taken: ${seconds} seconds.": "垃圾回收完成。已删除 chunks:${deletedChunks} / ${totalChunks}。耗时:${seconds} 秒。", + "Garbage Collection Confirmation": "垃圾回收确认", + "Garbage Collection V3 (Beta)": "垃圾回收 V3(Beta)", + "Garbage Collection: Found ${unusedChunks} unused chunks to delete.": "垃圾回收:发现 ${unusedChunks} 个未使用的 chunks 待删除。", + "Garbage Collection: Scanned ${scanned} / ~${docCount}": "垃圾回收:已扫描 ${scanned} / ~${docCount}", + "Garbage Collection: Scanning completed. Total chunks: ${totalChunks}, Used chunks: ${usedChunks}": "垃圾回收:扫描完成。总 chunks:${totalChunks},已使用 chunks:${usedChunks}", + "Handle files as Case-Sensitive": "将文件视为区分大小写", + "Hidden Files": "隐藏文件", + "Hide completely": "完全隐藏", + "How to display network errors when the sync server is unreachable.": "当同步服务器不可达时,如何显示网络错误。", + "How would you like to configure the connection to your server?": "你希望如何配置与服务器的连接?", + "I am adding a device to an existing synchronisation setup": "我要将设备加入现有同步配置", + "I am setting this up for the first time": "我是第一次进行设置", + "I know my server details, let me enter them": "我知道服务器详情,让我手动输入", + "If disabled(toggled), chunks will be split on the UI thread (Previous behaviour).": "如果禁用(切换),chunks 将在 UI 线程上分割(以前的行为)", + "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.": "如果启用,将使用基于文件的、高效的自定义同步。启用此功能需要进行一次小的迁移。所有设备都应更新到 v0.23.18。一旦启用此功能,我们将失去与旧版本的兼容性", + "If enabled, chunks will be split into no more than 100 items. However, dedupe is slightly weaker.": "如果启用,数据块将被分割成不超过 100 项。但是,去重效果会稍弱", + "If enabled, newly created chunks are temporarily kept within the document, and graduated to become independent chunks once stabilised.": "如果启用,新创建的数据块将暂时保留在文档中,并在稳定后成为独立数据块", + "If enabled, the ⛔ icon will be shown inside the status instead of the file warnings banner. No details will be shown.": "如果启用,状态栏内将显示 ⛔ 图标,而非文件警告横幅,不会显示任何详细信息。", + "If enabled, the file under 1kb will be processed in the UI thread.": "如果启用,小于 1kb 的文件将在 UI 线程中处理", + "If enabled, the notification of hidden files change will be suppressed.": "如果启用,将不再通知隐藏文件被更改", + "If this enabled, all chunks will be stored with the revision made from its content. (Previous behaviour)": "如果启用,所有 chunks 将使用根据其内容生成的修订版本存储(以前的行为)", + "If this enabled, All files are handled as case-Sensitive (Previous behaviour).": "如果启用,所有文件都将视为区分大小写(以前的行为)", + "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 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.": "如果启用此选项,PouchDB 将保持连接打开 60 秒,如果在此时间内没有更改到达,则关闭并重新打开套接字,而不是无限期保持打开。当代理限制请求持续时间时有用,但可能会增加资源使用ß", + "Ignore and Proceed": "忽略并继续", + "Ignore files": "忽略文件", + "Ignore patterns": "忽略模式", + "Import connection": "导入连接", + "Incubate Chunks in Document": "在文档中孵化块", + "Initialise all journal history, On the next sync, every item will be received and sent.": "初始化所有日志历史。下次同步时,所有项目都会重新接收并发送。", + "Interval (sec)": "间隔(秒)", + "K.exp": "实验性", + "K.long_p2p_sync": "%{title_p2p_sync} (%{exp})", + "K.P2P": "%{Peer}-to-%{Peer}", + "K.Peer": "Peer", + "K.ScanCustomization": "扫描自定义", + "K.short_p2p_sync": "P2P同步(%{exp})", + "K.title_p2p_sync": "Peer-to-Peer同步", + "Keep empty folder": "保留空文件夹", + "lang_def": "Default", + "lang-de": "Deutsche", + "lang-def": "%{lang_def}", + "lang-es": "Español", + "lang-fr": "Français", + "lang-ja": "日本語", + "lang-ko": "한국어", + "lang-ru": "Русский", + "lang-zh": "简体中文", + "lang-zh-tw": "繁體中文", + "Later": "稍后", + "Limit: {datetime} ({timestamp})": "限制:{datetime}({timestamp})", + "LiveSync could not handle multiple vaults which have same name without different prefix, This should be automatically configured.": "LiveSync 无法处理具有相同名称但没有不同前缀的多个库。这应该自动配置", + "liveSyncReplicator.beforeLiveSync": "在LiveSync前,先启动OneShot一次...", + "liveSyncReplicator.cantReplicateLowerValue": "我们无法复制更小的值", + "liveSyncReplicator.checkingLastSyncPoint": "查找上次同步点", + "liveSyncReplicator.couldNotConnectTo": "无法连接到 ${uri} : ${name}\n(${db})", + "liveSyncReplicator.couldNotConnectToRemoteDb": "无法连接到远程数据库:${d}", + "liveSyncReplicator.couldNotConnectToServer": "无法连接到服务器", + "liveSyncReplicator.couldNotConnectToURI": "无法连接到 ${uri}:${dbRet}", + "liveSyncReplicator.couldNotMarkResolveRemoteDb": "无法标记并解决远程数据库", + "liveSyncReplicator.liveSyncBegin": "LiveSync 开始...", + "liveSyncReplicator.lockRemoteDb": "锁定远程数据库以防止数据损坏", + "liveSyncReplicator.markDeviceResolved": "将此设备标记为“已解决”", + "liveSyncReplicator.oneShotSyncBegin": "OneShot同步开始...(${syncMode})", + "liveSyncReplicator.remoteDbCorrupted": "远程数据库较新或已损坏,请确保已安装最新版本的self-hosted-livesync", + "liveSyncReplicator.remoteDbCreatedOrConnected": "远程数据库已创建或连接", + "liveSyncReplicator.remoteDbDestroyed": "远程数据库已销毁", + "liveSyncReplicator.remoteDbDestroyError": "远程数据库销毁时发生错误:", + "liveSyncReplicator.remoteDbMarkedResolved": "远程数据库已标记为已解决", + "liveSyncReplicator.replicationClosed": "同步已关闭", + "liveSyncReplicator.replicationInProgress": "同步正在进行中", + "liveSyncReplicator.retryLowerBatchSize": "使用更小的批量大小重试:${batch_size}/${batches_limit}", + "liveSyncReplicator.unlockRemoteDb": "解锁远程数据库以防止数据损坏", + "liveSyncSetting.errorNoSuchSettingItem": "没有此设置项:${key}", + "liveSyncSetting.originalValue": "原始值:${value}", + "liveSyncSetting.valueShouldBeInRange": "值应该在 ${min} < value < ${max} 之间", + "liveSyncSettings.btnApply": "应用", + "Lock": "锁定", + "Lock Server": "锁定服务器", + "Lock the remote server to prevent synchronization with other devices.": "锁定远端服务器,以阻止其他设备继续同步。", + "logPane.autoScroll": "自动滚动", + "logPane.logWindowOpened": "日志窗口已打开", + "logPane.pause": "暂停", + "logPane.title": "Self-hosted LiveSync 日志", + "logPane.wrap": "自动换行", + "Maximum delay for batch database updating": "批量数据库更新的最大延迟", + "Maximum file size": "最大文件大小", + "Maximum Incubating Chunk Size": "最大孵化块大小", + "Maximum Incubating Chunks": "最大孵化块数", + "Maximum Incubation Period": "最大孵化期", + "MB (0 to disable).": "MB(0为禁用)", + "Memory cache size (by total characters)": "内存缓存大小(按总字符数)", + "Memory cache size (by total items)": "内存缓存大小(按总项目数)", + "Merge": "合并", + "Minimum delay for batch database updating": "批量数据库更新的最小延迟", + "Minimum interval for syncing": "同步最小间隔", + "moduleCheckRemoteSize.logCheckingStorageSizes": "正在检查存储大小", + "moduleCheckRemoteSize.logCurrentStorageSize": "远程存储大小:${measuredSize}", + "moduleCheckRemoteSize.logExceededWarning": "远程存储大小:${measuredSize} 超过 ${notifySize}", + "moduleCheckRemoteSize.logThresholdEnlarged": "阈值已扩大到 ${size}MB", + "moduleCheckRemoteSize.msgConfirmRebuild": "这可能需要一些时间。您真的想现在重建所有内容吗?", + "moduleCheckRemoteSize.msgDatabaseGrowing": "**您的数据库正在变大!** 但别担心,我们现在可以解决它。在远程存储空间用完之前还有时间。\n\n| 测量大小 | 配置大小 |\n| --- | --- |\n| ${estimatedSize} | ${maxSize} |\n\n> [!MORE]-\n> 如果您已经使用了很多年,数据库中可能会积累未引用的 chunks——也就是垃圾。因此,我们建议重建所有内容。它可能会变得小得多。\n> \n> 如果您的库容量只是在增加,最好在整理文件后重建所有内容。即使您为了加速过程删除了文件,Self-hosted LiveSync 也不会删除实际数据。这大致[有文档记录](https://github.com/vrtmrz/obsidian-livesync/blob/main/docs/tech_info.md)。\n> \n> 如果您不介意增加,可以将通知限制增加 100MB。如果您在自己的服务器上运行,就是这种情况。但是,最好还是不时地重建所有内容。\n> \n\n> [!WARNING]\n> 如果您执行重建所有内容,请确保所有设备都已同步。尽管如此,插件会尽可能地合并\n", + "moduleCheckRemoteSize.msgSetDBCapacity": "我们可以设置一个最大数据库容量警告,**以便在远程存储空间耗尽前采取行动**。\n您想启用这个功能吗?\n\n> [!MORE]-\n> - 0: 不警告存储大小。\n> 如果您在远程存储(尤其是自托管)上有足够的空间,则推荐此选项。您可以手动检查存储大小并重建。\n> - 800: 如果远程存储大小超过 800MB 则发出警告。\n> 如果您使用的是 fly.io(1GB 限制) 或 IBM Cloudant,则推荐此选项。\n> - 2000: 如果远程存储大小超过 2GB 则发出警告。\n\n如果达到限制,系统会要求我们逐步增大限制\n", + "moduleCheckRemoteSize.option2GB": "2GB (标准)", + "moduleCheckRemoteSize.option800MB": "800MB (Cloudant, fly.io)", + "moduleCheckRemoteSize.optionAskMeLater": "稍后问我", + "moduleCheckRemoteSize.optionDismiss": "忽略", + "moduleCheckRemoteSize.optionIncreaseLimit": "增加到 ${newMax}MB", + "moduleCheckRemoteSize.optionNoWarn": "不,请永远不要警告", + "moduleCheckRemoteSize.optionRebuildAll": "立即重建所有内容", + "moduleCheckRemoteSize.titleDatabaseSizeLimitExceeded": "远程存储大小超出限制", + "moduleCheckRemoteSize.titleDatabaseSizeNotify": "设置数据库大小通知", + "moduleInputUIObsidian.defaultTitleConfirmation": "确认", + "moduleInputUIObsidian.defaultTitleSelect": "选择", + "moduleInputUIObsidian.optionNo": "否", + "moduleInputUIObsidian.optionYes": "是", + "moduleLiveSyncMain.logAdditionalSafetyScan": "额外的安全扫描...", + "moduleLiveSyncMain.logLoadingPlugin": "正在加载插件...", + "moduleLiveSyncMain.logPluginInitCancelled": "插件初始化被某个模块取消", + "moduleLiveSyncMain.logPluginVersion": "Self-hosted LiveSync v${manifestVersion} ${packageVersion}", + "moduleLiveSyncMain.logReadChangelog": "LiveSync 已更新,请阅读更新日志!", + "moduleLiveSyncMain.logSafetyScanCompleted": "额外的安全扫描完成", + "moduleLiveSyncMain.logSafetyScanFailed": "额外的安全扫描在某个模块上失败", + "moduleLiveSyncMain.logUnloadingPlugin": "正在卸载插件...", + "moduleLiveSyncMain.logVersionUpdate": "LiveSync 已更新,如果存在破坏性更新,所有自动同步已暂时禁用。请确保所有设备都更新到最新版本后再启用", + "moduleLiveSyncMain.msgScramEnabled": "Self-hosted LiveSync 已被配置为忽略某些事件。这样对吗?\n\n| 类型 | 状态 | 说明 |\n|:---:|:---:|---|\n| 存储事件 | ${fileWatchingStatus} | 所有修改都将被忽略 |\n| 数据库事件 | ${parseReplicationStatus} | 所有同步的更改都将被推迟 |\n\n您想恢复它们并重启 Obsidian 吗?\n\n> [!DETAILS]-\n> 这些标志是在重建或获取时由插件设置的。如果过程异常结束,它们可能会被无意中保留。\n> 如果您不确定,可以尝试重新运行这些过程。请确保备份您的库。\n", + "moduleLiveSyncMain.optionKeepLiveSyncDisabled": "保持 LiveSync 禁用", + "moduleLiveSyncMain.optionResumeAndRestart": "恢复并重启 Obsidian", + "moduleLiveSyncMain.titleScramEnabled": "紧急停止已启用", + "moduleLocalDatabase.logWaitingForReady": "等待就绪...", + "moduleLog.showLog": "显示日志", + "moduleMigration.docUri": "https://github.com/vrtmrz/obsidian-livesync/blob/main/docs/zh/README_zh.md#%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8", + "moduleMigration.fix0256.buttons.checkItLater": "稍后检查", + "moduleMigration.fix0256.buttons.DismissForever": "我已经修复了,不再询问", + "moduleMigration.fix0256.buttons.fix": "修复", + "moduleMigration.fix0256.message": "由于最近的一个 bug(在 v0.25.6 版本中),某些文件可能未正确保存到同步数据库中\n我们已经扫描了文件,并发现一些需要修复的文件\n\n**准备修复的文件:**\n\n${files}\n\n这些文件在存储中与原文件的大小匹配,可能是可恢复的\n我们可以使用它们修复数据库,请点击下方的“修复”按钮进行修复\n\n${messageUnrecoverable}\n\n\n如果你希望再次执行此操作,可以前往 Hatch 页面进行操作\n", + "moduleMigration.fix0256.messageUnrecoverable": "**无法在此设备上修复的文件:**\n\n${filesNotRecoverable}\n\n这些文件的元数据不一致,无法在此设备上修复(大多数情况下我们无法确定哪一个是正确的)\n要恢复它们,请检查你的其他设备(同样使用此功能),或从备份中手动恢复\n", + "moduleMigration.fix0256.title": "检测到损坏的文件", + "moduleMigration.insecureChunkExist.buttons.fetch": "我已经重建了远程数据库,将从远程获取", + "moduleMigration.insecureChunkExist.buttons.later": "我稍后再做", + "moduleMigration.insecureChunkExist.buttons.rebuild": "重建所有内容", + "moduleMigration.insecureChunkExist.laterMessage": "我们强烈建议尽快处理此问题!", + "moduleMigration.insecureChunkExist.message": "一些块未安全存储,并且在数据库中未加密\n**请重建数据库以修复此问题**.\n\n如果你的远程数据库未配置 SSL,或者使用了不安全的凭据 **你可能面临暴露敏感数据的风险**.\n\n注意:请在所有设备上将 Self-hosted LiveSync 升级到 v0.25.6 或更高版本,并确保备份你的保险库\n\n注意2:重建所有内容和获取操作会消耗一些时间和流量,请在非高峰时段进行,并确保网络连接稳定\n", + "moduleMigration.insecureChunkExist.title": "发现不安全的块!", + "moduleMigration.logBulkSendCorrupted": "已启用批量发送 chunks,但此功能已损坏。给您带来不便,我们深表歉意。已自动禁用", + "moduleMigration.logFetchRemoteTweakFailed": "获取远程调整值失败", + "moduleMigration.logLocalDatabaseNotReady": "出错了!本地数据库尚未准备好", + "moduleMigration.logMigratedSameBehaviour": "已迁移到 db:${current},行为与之前相同", + "moduleMigration.logMigrationFailed": "从 ${old} 到 ${current} 的迁移失败或已取消", + "moduleMigration.logRedflag2CreationFail": "创建 redflag2 失败", + "moduleMigration.logRemoteTweakUnavailable": "无法获取远程调整值", + "moduleMigration.logSetupCancelled": "设置已取消,Self-hosted LiveSync 正在等待您的设置!", + "moduleMigration.msgFetchRemoteAgain": "您可能已经知道,Self-hosted LiveSync 更改了其默认行为和数据库结构。\n\n值得庆幸的是,在您的时间和努力下,远程数据库似乎已经迁移完成。恭喜!\n\n但是,我们还需要一点点操作。此设备的配置与远程数据库不兼容。我们需要再次从远程数据库获取。我们现在应该再次从远程获取吗?\n\n___注意:在更改配置并再次获取数据库之前,我们无法进行同步。___\n___注意2:chunks 是完全不可变的,我们只能获取元数据和差异", + "moduleMigration.msgInitialSetup": "您的设备**尚未设置**。让我引导您完成设置过程。\n\n请记住,每个对话框内容都可以复制到剪贴板。如果以后需要参考,可以将其粘贴到 Obsidian 的笔记中。您也可以使用翻译工具将其翻译成您的语言。\n\n首先,您有**设置 URI** 吗?\n\n注意:如果您不知道这是什么,请参阅[文档](${URI_DOC})", + "moduleMigration.msgRecommendSetupUri": "我们强烈建议您生成一个设置 URI 并使用它。\n如果您对此不了解,请参阅[文档](${URI_DOC})(再次抱歉,但这很重要)。\n\n您想如何手动设置?", + "moduleMigration.msgSinceV02321": "自 v0.23.21 起,Self-hosted LiveSync 更改了默认行为和数据库结构。进行了以下更改:\n\n1. **文件名的区分大小写** \n现在处理文件名时不区分大小写。这对于大多数平台来说是一个有益的更改,除了 Linux 和 iOS,它们不能有效地管理文件名的大小写敏感性。\n(在这些平台上,对于名称相同但大小写不同的文件将显示警告)。\n\n2. **chunks 的版本处理** \nchunks 是不可变的,这使得它们的版本可以固定。此更改将提高文件保存的性能。\n\n___然而,要启用这些更改中的任何一个,都需要重建远程和本地数据库。这个过程需要几分钟,我们建议您在有充足时间时进行。___\n\n- 如果您希望保持以前的行为,可以使用 `${KEEP}` 跳过此过程。\n- 如果您没有足够的时间,请选择 `${DISMISS}`。稍后会再次提示您。\n- 如果您已在另一台设备上重建了数据库,请选择 `${DISMISS}` 并尝试再次同步。由于检测到差异,系统会再次提示您", + "moduleMigration.optionAdjustRemote": "调整到远程设置", + "moduleMigration.optionDecideLater": "稍后决定", + "moduleMigration.optionEnableBoth": "启用两者", + "moduleMigration.optionEnableFilenameCaseInsensitive": "仅启用 #1", + "moduleMigration.optionEnableFixedRevisionForChunks": "仅启用 #2", + "moduleMigration.optionHaveSetupUri": "是的,我有", + "moduleMigration.optionKeepPreviousBehaviour": "保持以前的行为", + "moduleMigration.optionManualSetup": "全部手动设置", + "moduleMigration.optionNoAskAgain": "不,请稍后再次询问", + "moduleMigration.optionNoSetupUri": "不,我没有", + "moduleMigration.optionRemindNextLaunch": "下次启动时提醒我", + "moduleMigration.optionSetupViaP2P": "Use %{short_p2p_sync} to set up", + "moduleMigration.optionSetupWizard": "带我进入设置向导", + "moduleMigration.optionYesFetchAgain": "是的,再次获取", + "moduleMigration.titleCaseSensitivity": "大小写敏感性", + "moduleMigration.titleRecommendSetupUri": "推荐使用设置 URI", + "moduleMigration.titleWelcome": "欢迎使用 Self-hosted LiveSync", + "moduleObsidianMenu.replicate": "复制", + "More actions": "更多操作", + "Move remotely deleted files to the trash, instead of deleting.": "将远程删除的文件移至回收站,而不是直接删除", + "Network warning style": "网络警告样式", + "New Remote": "新建远端", + "No connected device information found. Cancelling Garbage Collection.": "未找到已连接设备的信息。正在取消垃圾回收。", + "No limit configured": "未配置限制", + "No, please take me back": "不,返回上一步", + "Node ID": "节点 ID", + "Node Information Missing": "节点信息缺失", + "Non-Synchronising files": "不同步的文件", + "Normal Files": "普通文件", + "Not all messages have been translated. And, please revert to \"Default\" when reporting errors.": "并非所有消息都已翻译。请在报告错误时恢复为\"默认\"", + "Notify all setting files": "通知所有设置文件", + "Notify customized": "通知自定义设置", + "Notify when other device has newly customized.": "当其他设备有新的自定义设置时通知 ", + "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.": "一次处理的批量数量。默认为 40。最小为 2。此设置与批量大小一起控制一次在内存中保留多少文档", + "Number of changes to sync at a time. Defaults to 50. Minimum is 2.": "一次同步的更改数量。默认为 50。最小为 2。", + "Obsidian version": "Obsidian 版本", + "obsidianLiveSyncSettingTab.btnApply": "应用", + "obsidianLiveSyncSettingTab.btnCheck": "检查", + "obsidianLiveSyncSettingTab.btnCopy": "复制", + "obsidianLiveSyncSettingTab.btnDisable": "禁用", + "obsidianLiveSyncSettingTab.btnDiscard": "丢弃", + "obsidianLiveSyncSettingTab.btnEnable": "启用", + "obsidianLiveSyncSettingTab.btnFix": "修复", + "obsidianLiveSyncSettingTab.btnGotItAndUpdated": "我明白了并且已更新", + "obsidianLiveSyncSettingTab.btnNext": "下一步", + "obsidianLiveSyncSettingTab.btnStart": "开始", + "obsidianLiveSyncSettingTab.btnTest": "测试", + "obsidianLiveSyncSettingTab.btnUse": "使用", + "obsidianLiveSyncSettingTab.buttonFetch": "获取", + "obsidianLiveSyncSettingTab.buttonNext": "下一步", + "obsidianLiveSyncSettingTab.defaultLanguage": "默认语言", + "obsidianLiveSyncSettingTab.descConnectSetupURI": "这是使用设置 URI 设置 Self-hosted LiveSync 的推荐方法", + "obsidianLiveSyncSettingTab.descCopySetupURI": "非常适合设置新设备!", + "obsidianLiveSyncSettingTab.descEnableLiveSync": "仅在配置了上述两个选项之一或手动完成所有配置后启用此选项", + "obsidianLiveSyncSettingTab.descFetchConfigFromRemote": "从已配置的远程服务器获取必要的设置", + "obsidianLiveSyncSettingTab.descManualSetup": "不推荐,但如果您没有设置 URI 则很有用", + "obsidianLiveSyncSettingTab.descTestDatabaseConnection": "打开数据库连接。如果未找到远程数据库并且您有创建数据库的权限,则将创建数据库", + "obsidianLiveSyncSettingTab.descValidateDatabaseConfig": "检查并修复数据库配置中的任何潜在问题", + "obsidianLiveSyncSettingTab.errAccessForbidden": "❗ 访问被禁止", + "obsidianLiveSyncSettingTab.errCannotContinueTest": "我们无法继续测试。", + "obsidianLiveSyncSettingTab.errCorsCredentials": "❗ cors.credentials 设置错误", + "obsidianLiveSyncSettingTab.errCorsNotAllowingCredentials": "❗ CORS 不允许凭据", + "obsidianLiveSyncSettingTab.errCorsOrigins": "❗ cors.origins 设置错误", + "obsidianLiveSyncSettingTab.errEnableCors": "❗ httpd.enable_cors 设置错误", + "obsidianLiveSyncSettingTab.errEnableCorsChttpd": "❗ chttpd.enable_cors 设置错误", + "obsidianLiveSyncSettingTab.errMaxDocumentSize": "❗ couchdb.max_document_size 设置过低)", + "obsidianLiveSyncSettingTab.errMaxRequestSize": "❗ chttpd.max_http_request_size 设置过低)", + "obsidianLiveSyncSettingTab.errMissingWwwAuth": "❗ 缺少 httpd.WWW-Authenticate 设置", + "obsidianLiveSyncSettingTab.errRequireValidUser": "❗ chttpd.require_valid_user 设置错误", + "obsidianLiveSyncSettingTab.errRequireValidUserAuth": "❗ chttpd_auth.require_valid_user 设置错误", + "obsidianLiveSyncSettingTab.labelDisabled": "⏹️:已禁用", + "obsidianLiveSyncSettingTab.labelEnabled": "🔁:已启用", + "obsidianLiveSyncSettingTab.levelAdvanced": "(进阶)", + "obsidianLiveSyncSettingTab.levelEdgeCase": "(边缘情况)", + "obsidianLiveSyncSettingTab.levelPowerUser": "(高级用户)", + "obsidianLiveSyncSettingTab.linkOpenInBrowser": "在浏览器中打开", + "obsidianLiveSyncSettingTab.linkPageTop": "页面顶部", + "obsidianLiveSyncSettingTab.linkTipsAndTroubleshooting": "提示和故障排除", + "obsidianLiveSyncSettingTab.linkTroubleshooting": "/docs/troubleshooting.md", + "obsidianLiveSyncSettingTab.logCannotUseCloudant": "此功能不能与 IBM Cloudant 一起使用 ", + "obsidianLiveSyncSettingTab.logCheckingConfigDone": "配置检查完成", + "obsidianLiveSyncSettingTab.logCheckingConfigFailed": "配置检查失败", + "obsidianLiveSyncSettingTab.logCheckingDbConfig": "正在检查数据库配置", + "obsidianLiveSyncSettingTab.logCheckPassphraseFailed": "错误:无法使用远程服务器检查密码:\n${db} ", + "obsidianLiveSyncSettingTab.logConfiguredDisabled": "已配置的同步模式:已禁用", + "obsidianLiveSyncSettingTab.logConfiguredLiveSync": "已配置的同步模式:LiveSync", + "obsidianLiveSyncSettingTab.logConfiguredPeriodic": "已配置的同步模式:定期同步", + "obsidianLiveSyncSettingTab.logCouchDbConfigFail": "CouchDB 配置:${title} 失败", + "obsidianLiveSyncSettingTab.logCouchDbConfigSet": "CouchDB 配置:${title} -> 设置 ${key} 为 ${value}", + "obsidianLiveSyncSettingTab.logCouchDbConfigUpdated": "CouchDB 配置:${title} 成功更新", + "obsidianLiveSyncSettingTab.logDatabaseConnected": "数据库已连接", + "obsidianLiveSyncSettingTab.logEncryptionNoPassphrase": "没有密码无法启用加密", + "obsidianLiveSyncSettingTab.logEncryptionNoSupport": "您的设备不支持加密 ", + "obsidianLiveSyncSettingTab.logErrorOccurred": "发生错误!!", + "obsidianLiveSyncSettingTab.logEstimatedSize": "估计大小:${size}", + "obsidianLiveSyncSettingTab.logPassphraseInvalid": "密码无效,请修正", + "obsidianLiveSyncSettingTab.logPassphraseNotCompatible": "错误:密码与远程服务器不兼容!请再次检查!", + "obsidianLiveSyncSettingTab.logRebuildNote": "同步已禁用,如果需要,请获取并重新启用", + "obsidianLiveSyncSettingTab.logSelectAnyPreset": "请选择任一预设。", + "obsidianLiveSyncSettingTab.msgAreYouSureProceed": "您确定要继续吗?", + "obsidianLiveSyncSettingTab.msgChangesNeedToBeApplied": "需要应用更改!", + "obsidianLiveSyncSettingTab.msgConfigCheck": "--配置检查--", + "obsidianLiveSyncSettingTab.msgConfigCheckFailed": "配置检查失败。仍要继续吗?", + "obsidianLiveSyncSettingTab.msgConnectionCheck": "--连接检查--", + "obsidianLiveSyncSettingTab.msgConnectionProxyNote": "如果您在连接检查时遇到问题(即使检查了配置后),请检查您的反向代理配置", + "obsidianLiveSyncSettingTab.msgCurrentOrigin": "当前源: {origin}", + "obsidianLiveSyncSettingTab.msgDiscardConfirmation": "您真的要丢弃现有的设置和数据库吗?", + "obsidianLiveSyncSettingTab.msgDone": "--完成--", + "obsidianLiveSyncSettingTab.msgEnableCors": "设置 httpd.enable_cors", + "obsidianLiveSyncSettingTab.msgEnableCorsChttpd": "设置 chttpd.enable_cors", + "obsidianLiveSyncSettingTab.msgEnableEncryptionRecommendation": "建议启用端到端加密和路径混淆。你确定要在未加密的情况下继续吗?", + "obsidianLiveSyncSettingTab.msgFetchConfigFromRemote": "要从远端服务器获取配置吗?", + "obsidianLiveSyncSettingTab.msgGenerateSetupURI": "全部完成!要生成设置 URI 以便配置其他设备吗?", + "obsidianLiveSyncSettingTab.msgIfConfigNotPersistent": "如果服务器配置不是持久的(例如,在 docker 上运行),此处的值可能会更改。一旦能够连接,请更新服务器 local.ini 中的设置", + "obsidianLiveSyncSettingTab.msgInvalidPassphrase": "你的加密密码短语可能无效。你确定要继续吗?", + "obsidianLiveSyncSettingTab.msgNewVersionNote": "因为升级通知来到这里?请查看版本历史。如果您满意,请点击按钮。新的更新将再次提示此信息", + "obsidianLiveSyncSettingTab.msgNonHTTPSInfo": "配置为非 HTTPS URI。请注意,这可能在移动设备上无法工作", + "obsidianLiveSyncSettingTab.msgNonHTTPSWarning": "无法连接到非 HTTPS URI。请更新您的配置并重试", + "obsidianLiveSyncSettingTab.msgNotice": "---注意---", + "obsidianLiveSyncSettingTab.msgObjectStorageWarning": "警告:此功能仍在开发中,请注意以下几点:\n- 仅追加架构。需要重建才能缩小存储空间。\n- 有点脆弱。\n- 首次同步时,所有历史记录将从远程传输。注意数据上限和慢速。\n- 只有差异会实时同步。\n\n如果您遇到任何问题,或对此功能有任何想法,请在 GitHub 上创建 issue。\n感谢您的巨大贡献", + "obsidianLiveSyncSettingTab.msgOriginCheck": "源检查: {org}", + "obsidianLiveSyncSettingTab.msgRebuildRequired": "需要重建数据库以应用更改。请选择应用更改的方法。\n\n
\n图例\n\n| 符号 | 含义 |\n|: ------ :| ------- |\n| ⇔ | 最新 |\n| ⇄ | 同步以平衡 |\n| ⇐,⇒ | 传输以覆盖 |\n| ⇠,⇢ | 从另一侧传输以覆盖 |\n\n
\n\n## ${OPTION_REBUILD_BOTH}\n概览:📄 ⇒¹ 💻 ⇒² 🛰️ ⇢ⁿ 💻 ⇄ⁿ⁺¹ 📄\n使用此设备的现有文件重建本地和远程数据库。\n这将导致其他设备被锁定,并且它们需要执行获取操作。\n## ${OPTION_FETCH}\n概览:📄 ⇄² 💻 ⇐¹ 🛰️ ⇔ 💻 ⇔ 📄\n初始化本地数据库并使用从远程数据库获取的数据重建它。\n这种情况包括您已经重建了远程数据库的情况。\n## ${OPTION_ONLY_SETTING}\n仅存储设置。**注意:这可能导致数据损坏**;通常需要重建数据库", + "obsidianLiveSyncSettingTab.msgSelectAndApplyPreset": "请选择并应用任一预设项以完成向导。", + "obsidianLiveSyncSettingTab.msgSetCorsCredentials": "设置 cors.credentials", + "obsidianLiveSyncSettingTab.msgSetCorsOrigins": "设置 cors.origins", + "obsidianLiveSyncSettingTab.msgSetMaxDocSize": "设置 couchdb.max_document_size", + "obsidianLiveSyncSettingTab.msgSetMaxRequestSize": "设置 chttpd.max_http_request_size", + "obsidianLiveSyncSettingTab.msgSetRequireValidUser": "设置 chttpd.require_valid_user = true", + "obsidianLiveSyncSettingTab.msgSetRequireValidUserAuth": "设置 chttpd_auth.require_valid_user = true", + "obsidianLiveSyncSettingTab.msgSettingModified": "设置 \"${setting}\" 已从另一台设备修改。点击 {HERE} 重新加载设置。点击其他地方忽略更改", + "obsidianLiveSyncSettingTab.msgSettingsUnchangeableDuringSync": "这些设置在同步期间无法更改。请在“同步设置”中禁用所有同步以解锁", + "obsidianLiveSyncSettingTab.msgSetWwwAuth": "设置 httpd.WWW-Authenticate", + "obsidianLiveSyncSettingTab.nameApplySettings": "应用设置", + "obsidianLiveSyncSettingTab.nameConnectSetupURI": "使用设置 URI 连接", + "obsidianLiveSyncSettingTab.nameCopySetupURI": "将当前设置复制为设置 URI", + "obsidianLiveSyncSettingTab.nameDisableHiddenFileSync": "禁用隐藏文件同步", + "obsidianLiveSyncSettingTab.nameDiscardSettings": "丢弃现有设置和数据库", + "obsidianLiveSyncSettingTab.nameEnableHiddenFileSync": "启用隐藏文件同步", + "obsidianLiveSyncSettingTab.nameEnableLiveSync": "启用 LiveSync", + "obsidianLiveSyncSettingTab.nameHiddenFileSynchronization": "隐藏文件同步", + "obsidianLiveSyncSettingTab.nameManualSetup": "手动设置", + "obsidianLiveSyncSettingTab.nameTestConnection": "测试连接", + "obsidianLiveSyncSettingTab.nameTestDatabaseConnection": "测试数据库连接", + "obsidianLiveSyncSettingTab.nameValidateDatabaseConfig": "验证数据库配置", + "obsidianLiveSyncSettingTab.okAdminPrivileges": "✔ 您拥有管理员权限", + "obsidianLiveSyncSettingTab.okCorsCredentials": "✔ cors.credentials 设置正确", + "obsidianLiveSyncSettingTab.okCorsCredentialsForOrigin": "CORS 凭据正常", + "obsidianLiveSyncSettingTab.okCorsOriginMatched": "✔ CORS 源正常", + "obsidianLiveSyncSettingTab.okCorsOrigins": "✔ cors.origins 设置正确", + "obsidianLiveSyncSettingTab.okEnableCors": "✔ httpd.enable_cors 设置正确", + "obsidianLiveSyncSettingTab.okEnableCorsChttpd": "✔ chttpd.enable_cors is ok.", + "obsidianLiveSyncSettingTab.okMaxDocumentSize": "✔ couchdb.max_document_size 设置正确", + "obsidianLiveSyncSettingTab.okMaxRequestSize": "✔ chttpd.max_http_request_size 设置正确", + "obsidianLiveSyncSettingTab.okRequireValidUser": "✔ chttpd.require_valid_user 设置正确", + "obsidianLiveSyncSettingTab.okRequireValidUserAuth": "✔ chttpd_auth.require_valid_user 设置正确", + "obsidianLiveSyncSettingTab.okWwwAuth": "✔ httpd.WWW-Authenticate 设置正确", + "obsidianLiveSyncSettingTab.optionApply": "应用", + "obsidianLiveSyncSettingTab.optionCancel": "取消", + "obsidianLiveSyncSettingTab.optionCouchDB": "CouchDB", + "obsidianLiveSyncSettingTab.optionDisableAllAutomatic": "禁用所有自动同步", + "obsidianLiveSyncSettingTab.optionFetchFromRemote": "从远程获取", + "obsidianLiveSyncSettingTab.optionHere": "这里", + "obsidianLiveSyncSettingTab.optionLiveSync": "LiveSync 同步", + "obsidianLiveSyncSettingTab.optionMinioS3R2": "Minio, S3, R2", + "obsidianLiveSyncSettingTab.optionOkReadEverything": "好的,我已经阅读了所有内容 ", + "obsidianLiveSyncSettingTab.optionOnEvents": "事件触发时", + "obsidianLiveSyncSettingTab.optionPeriodicAndEvents": "定期与事件触发", + "obsidianLiveSyncSettingTab.optionPeriodicWithBatch": "定期(批处理)", + "obsidianLiveSyncSettingTab.optionRebuildBoth": "从此设备重建两者", + "obsidianLiveSyncSettingTab.optionSaveOnlySettings": "(危险)仅保存设置", + "obsidianLiveSyncSettingTab.panelChangeLog": "更新日志", + "obsidianLiveSyncSettingTab.panelGeneralSettings": "常规设置", + "obsidianLiveSyncSettingTab.panelPrivacyEncryption": "隐私与加密", + "obsidianLiveSyncSettingTab.panelRemoteConfiguration": "远程配置", + "obsidianLiveSyncSettingTab.panelSetup": "设置", + "obsidianLiveSyncSettingTab.serverVersion": "服务器信息: ${info}", + "obsidianLiveSyncSettingTab.titleActiveRemoteServer": "活动远程服务器", + "obsidianLiveSyncSettingTab.titleAppearance": "外观", + "obsidianLiveSyncSettingTab.titleConflictResolution": "冲突处理", + "obsidianLiveSyncSettingTab.titleCongratulations": "恭喜!", + "obsidianLiveSyncSettingTab.titleCouchDB": "CouchDB 服务器", + "obsidianLiveSyncSettingTab.titleDeletionPropagation": "删除传播", + "obsidianLiveSyncSettingTab.titleEncryptionNotEnabled": "尚未启用加密", + "obsidianLiveSyncSettingTab.titleEncryptionPassphraseInvalid": "加密密码短语无效", + "obsidianLiveSyncSettingTab.titleExtraFeatures": "启用额外和高级功能", + "obsidianLiveSyncSettingTab.titleFetchConfig": "获取配置", + "obsidianLiveSyncSettingTab.titleFetchConfigFromRemote": "从远程服务器获取配置", + "obsidianLiveSyncSettingTab.titleFetchSettings": "获取设置", + "obsidianLiveSyncSettingTab.titleHiddenFiles": "隐藏文件", + "obsidianLiveSyncSettingTab.titleLogging": "日志", + "obsidianLiveSyncSettingTab.titleMinioS3R2": "MinIO、S3、R2", + "obsidianLiveSyncSettingTab.titleNotification": "通知", + "obsidianLiveSyncSettingTab.titleOnlineTips": "在线提示", + "obsidianLiveSyncSettingTab.titleQuickSetup": "快速设置", + "obsidianLiveSyncSettingTab.titleRebuildRequired": "需要重建", + "obsidianLiveSyncSettingTab.titleRemoteConfigCheckFailed": "远端配置检查失败", + "obsidianLiveSyncSettingTab.titleRemoteServer": "远端服务器", + "obsidianLiveSyncSettingTab.titleReset": "重置", + "obsidianLiveSyncSettingTab.titleSetupOtherDevices": "设置其他设备", + "obsidianLiveSyncSettingTab.titleSynchronizationMethod": "同步方式", + "obsidianLiveSyncSettingTab.titleSynchronizationPreset": "同步预设", + "obsidianLiveSyncSettingTab.titleSyncSettings": "同步设置", + "obsidianLiveSyncSettingTab.titleSyncSettingsViaMarkdown": "通过 Markdown 同步设置", + "obsidianLiveSyncSettingTab.titleUpdateThinning": "更新精简", + "obsidianLiveSyncSettingTab.warnCorsOriginUnmatched": "⚠ CORS 源不匹配 {from}->{to}", + "obsidianLiveSyncSettingTab.warnNoAdmin": "⚠ 您没有管理员权限", + "Ok": "确定", + "Old Algorithm": "旧算法", + "Older fallback (Slow, W/O WebAssembly)": "旧版回退(较慢,无 WebAssembly)", + "Open": "打开", + "Open the dialog": "打开对话框", + "Overwrite": "覆盖", + "Overwrite patterns": "覆盖模式", + "Overwrite remote": "覆盖远端", + "Overwrite remote with local DB and passphrase.": "使用本地数据库和密码短语覆盖远端。", + "Overwrite Server Data with This Device's Files": "用本设备文件覆盖服务器数据", + "P2P.AskPassphraseForDecrypt": "远程对等方共享了配置,请输入密码短语以解密配置", + "P2P.AskPassphraseForShare": "远程对等方请求此设备配置,请输入密码短语以共享配置。你可以通过取消此对话框来忽略此请求", + "P2P.DisabledButNeed": "%{title_p2p_sync} 已禁用。你确定要启用它吗?", + "P2P.FailedToOpen": "无法打开 P2P 连接到信令服务器", + "P2P.NoAutoSyncPeers": "未找到自动同步的对等方,请在 %{long_p2p_sync} 面板中设置对等方", + "P2P.NoKnownPeers": "未检测到对等方,正在等待其他对等方的连接...", + "P2P.Note.description": " This replicator allows us to synchronise our vault with other devices\nusing a peer-to-peer connection. We can use this to synchronise our vault with our other devices without using a cloud service.\nThis replicator is based on Trystero. It also uses a signaling server to establish a connection between devices. The signaling server is used to exchange connection information between devices. It does (or,should) not know or store any of our data.\n\nThe signaling server can be hosted by anyone. This is just a Nostr relay. For the sake of simplicity and checking the behaviour of the replicator, an instance of the signaling server is hosted by vrtmrz. You can use the experimental server provided by vrtmrz, or you can use any other server.\n\nBy the way, even if the signaling server does not store our data, it can see the connection information of some of our devices. Please be aware of this. Also, be cautious when using the server provided by someone else.", + "P2P.Note.important_note": "The Experimental Implementation of the Peer-to-Peer Replicator.", + "P2P.Note.important_note_sub": "This feature is still in the experimental stage. Please be aware that this feature may not work as expected. Furthermore, it may have some bugs, security issues, and other issues. Please use this feature at your own risk. Please contribute to the development of this feature.", + "P2P.Note.Summary": "What is this feature? (and some important notes, please read once)", + "P2P.NotEnabled": "%{title_p2p_sync} is not enabled. We cannot open a new connection.", + "P2P.P2PReplication": "%{P2P} Replication", + "P2P.PaneTitle": "%{long_p2p_sync}", + "P2P.ReplicatorInstanceMissing": "P2P Sync replicator is not found, possibly not have been configured or enabled.", + "P2P.SeemsOffline": "Peer ${name} seems offline, skipped.", + "P2P.SyncAlreadyRunning": "P2P Sync is already running.", + "P2P.SyncCompleted": "P2P Sync completed.", + "P2P.SyncStartedWith": "P2P Sync with ${name} have been started.", + "paneMaintenance.markDeviceResolvedAfterBackup": "请在完成备份后将此设备标记为已处理。", + "paneMaintenance.remoteLockedAndDeviceNotAccepted": "远端数据库已锁定,且此设备尚未被接受。", + "paneMaintenance.remoteLockedResolvedDevice": "远端数据库已锁定,但此设备已被接受。", + "paneMaintenance.unlockDatabaseReady": "现在可以解锁数据库。", + "Passphrase": "密码", + "Passphrase of sensitive configuration items": "敏感配置项的密码", + "password": "密码", + "Password": "密码", + "Paste a connection string": "粘贴连接字符串", + "Paste the Setup URI generated from one of your active devices.": "粘贴从一台已在使用的设备上生成的 Setup URI。", + "Path Obfuscation": "路径混淆", + "Patterns to match files for overwriting instead of merging": "用于匹配需覆盖而非合并文件的模式", + "Patterns to match files for syncing": "用于匹配同步文件的模式", + "Peer-to-Peer only": "仅 Peer-to-Peer", + "Peer-to-Peer Synchronisation": "点对点同步", + "Per-file-saved customization sync": "按文件保存的自定义同步", + "Perform": "执行", + "Perform cleanup": "执行清理", + "Perform Garbage Collection": "执行垃圾回收", + "Perform Garbage Collection to remove unused chunks and reduce database size.": "执行垃圾回收以清理未使用的 chunks 并减小数据库体积。", + "Periodic Sync interval": "定期同步间隔", + "Pick a file to resolve conflict": "选择要解决冲突的文件", + "Please disable 'Read chunks online' in settings to use Garbage Collection.": "要使用垃圾回收,请在设置中禁用“Read chunks online”。", + "Please enable 'Compute revisions for chunks' in settings to use Garbage Collection.": "要使用垃圾回收,请在设置中启用“Compute revisions for chunks”。", + "Please select 'Cancel' explicitly to cancel this operation.": "如需取消此操作,请明确选择“取消”。", + "Please select a method to import the settings from another device.": "请选择一种从其他设备导入设置的方法。", + "Please select an option to proceed": "请选择一个选项以继续", + "Please select the type of server to which you are connecting.": "请选择你要连接的服务器类型。", + "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": "请设置此设备名称", + "Plug-in version": "插件版本", + "Prepare the 'report' to create an issue": "准备 '报告' 以创建问题单", + "Presets": "预设", + "Proceed Garbage Collection": "继续执行垃圾回收", + "Proceed with Setup URI": "继续使用 Setup URI", + "Proceeding with Garbage Collection, ignoring missing nodes.": "正在继续执行垃圾回收,并忽略缺失节点。", + "Proceeding with Garbage Collection.": "正在执行垃圾回收。", + "Process small files in the foreground": "在前台处理小文件", + "Progress": "进度", + "Property Encryption": "属性加密", + "PureJS fallback (Fast, W/O WebAssembly)": "PureJS 回退(快速,无 WebAssembly)", + "Purge all download/upload cache.": "清除所有下载/上传缓存。", + "Purge all journal counter": "清除所有日志计数器", + "Rebuild local and remote database with local files.": "使用本地文件重建本地和远端数据库。", + "Rebuilding Operations (Remote Only)": "重建操作(仅远端)", + "Recreate all": "全部重建", + "Recreate missing chunks for all files": "为所有文件重建缺失的 chunks", + "RedFlag.Fetch.Method.Desc": "How do you want to fetch?\n- %{RedFlag.Fetch.Method.FetchSafer}.\n **Low Traffic**, **High CPU**, **Low Risk**\n Recommended if ...\n - Files possibly inconsistent\n - Files were not so much\n- %{RedFlag.Fetch.Method.FetchSmoother}.\n **Low Traffic**, **Moderate CPU**, **Low to Moderate Risk**\n Recommended if ...\n - Files probably consistent\n - You have a lot of files.\n- %{RedFlag.Fetch.Method.FetchTraditional}.\n **High Traffic**, **Low CPU**, **Low to Moderate Risk**\n\n>[!INFO]- Details\n> ## %{RedFlag.Fetch.Method.FetchSafer}.\n> **Low Traffic**, **High CPU**, **Low Risk**\n> This option first creates a local database using existing local files before fetching data from the remote source.\n> If matching files exist both locally and remotely, only the differences between them will be transferred.\n> However, files present in both locations will initially be handled as conflicted files. They will be resolved automatically if they are not actually conflicted, but this process may take time.\n> This is generally the safest method, minimizing data loss risk.\n> ## %{RedFlag.Fetch.Method.FetchSmoother}.\n> **Low Traffic**, **Moderate CPU**, **Low to Moderate Risk** (depending operation)\n> This option first creates chunks from local files for the database, then fetches data. Consequently, only chunks missing locally are transferred. However, all metadata is taken from the remote source.\n> Local files are then compared against this metadata at launch. The content considered newer will overwrite the older one (by modified time). This outcome is then synchronised back to the remote database.\n> This is generally safe if local files are genuinely the latest timestamp. However, it can cause problems if a file has a newer timestamp but older content (like the initial `welcome.md`).\n> This uses less CPU and faster than \"%{RedFlag.Fetch.Method.FetchSafer}\", but it may lead to data loss if not used carefully.\n> ## %{RedFlag.Fetch.Method.FetchTraditional}.\n> **High Traffic**, **Low CPU**, **Low to Moderate Risk** (depending operation)\n> All things will be fetched from the remote.\n> Similar to the %{RedFlag.Fetch.Method.FetchSmoother}, but all chunks are fetched from the remote source.\n> This is the most traditional way to fetch, typically consuming the most network traffic and time. It also carries a similar risk of overwriting remote files to the '%{RedFlag.Fetch.Method.FetchSmoother}' option.\n> However, it is often considered the most stable method because it is the longest-established and most straightforward approach.", + "RedFlag.Fetch.Method.FetchSafer": "Create a local database once before fetching", + "RedFlag.Fetch.Method.FetchSmoother": "Create local file chunks before fetching", + "RedFlag.Fetch.Method.FetchTraditional": "Fetch everything from the remote", + "RedFlag.Fetch.Method.Title": "How do you want to fetch?", + "RedFlag.FetchRemoteConfig.Buttons.Cancel": "No, use local settings", + "RedFlag.FetchRemoteConfig.Buttons.Fetch": "Yes, fetch and apply remote settings", + "RedFlag.FetchRemoteConfig.Message": "Do you want to fetch and apply remotely stored preference settings to the device?", + "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.": "通过丢弃所有非最新版本来减少存储空间。这需要远程服务器和本地客户端具备相同数量的可用空间。", + "Reducing the frequency with which on-disk changes are reflected into the DB": "降低将磁盘上的更改反映到数据库中的频率", + "Region": "区域", + "Remediation": "修复设置", + "Remediation Setting Changed": "修复设置已更改", + "Remote Database Tweak (In sunset)": "远端数据库调优(逐步淘汰)", + "Remote Databases": "远端数据库", + "Remote name": "远端名称", + "Remote server type": "远程服务器类型", + "Remote Type": "远程类型", + "Rename": "重命名", + "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", + "Replicator.Dialogue.Locked.Message": "Remote database is locked. This is due to a rebuild on one of the terminals.\nThe device is therefore asked to withhold the connection to avoid database corruption.\n\nThere are three options that we can do:\n\n- %{Replicator.Dialogue.Locked.Action.Fetch}\n The most preferred and reliable way. This will dispose the local database once, and fetch all from the remote database again, In most case, we can perform this safely. However, it takes some time and should be done in stable network.\n- %{Replicator.Dialogue.Locked.Action.Unlock}\n This method can only be used if we are already reliably synchronised by other replication methods. This does not simply mean that we have the same files. If you are not sure, you should avoid it.\n- %{Replicator.Dialogue.Locked.Action.Dismiss}\n This will cancel the operation. And we will asked again on next request.\n", + "Replicator.Dialogue.Locked.Message.Fetch": "Fetch all has been scheduled. Plug-in will be restarted to perform it.", + "Replicator.Dialogue.Locked.Message.Unlocked": "The remote database has been unlocked. Please retry the operation.", + "Replicator.Dialogue.Locked.Title": "Locked", + "Replicator.Message.Cleaned": "Database cleaning up is in process. replication has been cancelled", + "Replicator.Message.InitialiseFatalError": "No replicator is available, this is the fatal error.", + "Replicator.Message.Pending": "Some file events are pending. Replication has been cancelled.", + "Replicator.Message.SomeModuleFailed": "Replication has been cancelled by some module failure", + "Replicator.Message.VersionUpFlash": "An update has been detected. Please open the Settings dialogue and check the Change Log. Replication has been cancelled.", + "Requires restart of Obsidian": "需要重启 Obsidian", + "Requires restart of Obsidian.": "需要重启 Obsidian ", + "Rerun Onboarding Wizard": "重新运行引导向导", + "Rerun the onboarding wizard to set up Self-hosted LiveSync again.": "重新运行引导向导以再次设置 Self-hosted LiveSync。", + "Rerun Wizard": "重新运行向导", + "Resend": "重新发送", + "Resend all chunks to the remote.": "将所有 chunks 重新发送到远端。", + "Reset": "重置", + "Reset all": "全部重置", + "Reset all journal counter": "重置所有日志计数器", + "Reset journal received history": "重置日志接收历史", + "Reset journal sent history": "重置日志发送历史", + "Reset notification threshold and check the remote database usage": "重置通知阈值并检查远程数据库使用情况", + "Reset received": "重置接收记录", + "Reset sent history": "重置发送历史", + "Reset Synchronisation information": "重置同步信息", + "Reset Synchronisation on This Device": "重置此设备上的同步", + "Reset the remote storage size threshold and check the remote storage size again.": "重置远程存储大小阈值并再次检查远程存储大小。", + "Resolve All": "全部处理", + "Resolve all conflicted files": "解决所有冲突文件", + "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.": "将所有冲突文件统一保留较新的版本。注意:这会覆盖较旧的版本,且被覆盖的内容无法恢复。", + "Restart Now": "立即重启", + "Restore or reconstruct local database from remote.": "从远端恢复或重建本地数据库。", + "Run Doctor": "立即诊断", + "S3/MinIO/R2 Object Storage": "S3/MinIO/R2 对象存储", + "Save settings to a markdown file. You will be notified when new settings arrive. You can set different files by the platform.": "将设置保存到一个 Markdown 文件中。当新设置到达时,您将收到通知。您可以根据平台设置不同的文件 ", + "Saving will be performed forcefully after this number of seconds.": "在此秒数后将强制执行保存 ", + "Scan a QR Code (Recommended for mobile)": "扫描二维码(移动端推荐)", + "Scan changes on customization sync": "在自定义同步时扫描更改", + "Scan customization automatically": "自动扫描自定义设置", + "Scan customization before replicating.": "在复制前扫描自定义设置 ", + "Scan customization every 1 minute.": "每1分钟扫描自定义设置 ", + "Scan customization periodically": "定期扫描自定义设置", + "Scan for Broken files": "扫描损坏文件", + "Scan for hidden files before replication": "复制前扫描隐藏文件", + "Scan hidden files periodically": "定期扫描隐藏文件", + "Scan the QR code displayed on an active device using this device's camera.": "使用当前设备的摄像头扫描另一台已在使用设备上显示的二维码。", + "Schedule and Restart": "安排并重启", + "Scram Switches": "紧急开关", + "Scram!": "紧急处置", + "Seconds, 0 to disable": "秒,0为禁用", + "Seconds. Saving to the local database will be delayed until this value after we stop typing or saving.": "秒。在我们停止输入或保存后,保存到本地数据库将延迟此值 ", + "Secret Key": "Secret Key", + "Select the database adapter to use.": "选择要使用的数据库适配器。", + "Send": "发送", + "Send chunks": "发送 chunks", + "Server URI": "服务器 URI", + "Setting.GenerateKeyPair.Desc": "我们已经生成了一组密钥对!\n\n注意:这组密钥对之后将不会再次显示。请务必妥善保管;如果丢失,你需要重新生成新的密钥对。\n注意 2:公钥采用 spki 格式,私钥采用 pkcs8 格式。为方便复制,公钥中的换行会被转换为 `\\n`。\n注意 3:公钥应配置在远端数据库中,私钥应配置在本地设备上。\n\n>[!仅限本人查看]-\n>
\n>\n> ### 公钥\n> ```\n${public_key}\n> ```\n>\n> ### 私钥\n> ```\n${private_key}\n> ```\n>\n>
\n\n>[!整段复制]-\n>\n>
\n>\n> ```\n${public_key}\n${private_key}\n> ```\n>\n>
", + "Setting.GenerateKeyPair.Title": "已生成新的密钥对!", + "Setting.TroubleShooting": "故障排除", + "Setting.TroubleShooting.Doctor": "设置诊断", + "Setting.TroubleShooting.Doctor.Desc": "检测系统中不合理的设置。(与迁移期间逻辑相同)", + "Setting.TroubleShooting.ScanBrokenFiles": "扫描损坏或异常的文件", + "Setting.TroubleShooting.ScanBrokenFiles.Desc": "扫描数据库中未正确存储的文件。", + "SettingTab.Message.AskRebuild": "Your changes require fetching from the remote database. Do you want to proceed?", + "Setup URI dialog cancelled.": "Setup URI 对话框已取消。", + "Setup.Apply.Buttons.ApplyAndFetch": "Apply and Fetch", + "Setup.Apply.Buttons.ApplyAndMerge": "Apply and Merge", + "Setup.Apply.Buttons.ApplyAndRebuild": "Apply and Rebuild", + "Setup.Apply.Buttons.Cancel": "Discard and Cancel", + "Setup.Apply.Buttons.OnlyApply": "Only Apply", + "Setup.Apply.Message": "The new configuration is ready. Let us proceed to apply it.\nThere are several ways to apply this:\n\n- Apply and Fetch\n Configure this device as a new client. After applying, synchronise from the remote server.\n- Apply and Merge\n Configure on a device that already has the file. It processes the local files and transfers the differences. Conflicts may arise.\n- Apply and Rebuild\n Rebuild the remote using local files. This is typically done if the server becomes corrupted or we wish to start from scratch.\n Other devices will be locked and required to re-fetch.\n- Only Apply\n Apply only. Conflicts may arise if a rebuild is required.", + "Setup.Apply.Title": "Apply new configuration from the ${method}", + "Setup.Apply.WarningRebuildRecommended": "NOTE: after adjusting the settings, it has been determined that a rebuild is required; Just Import is not recommended.", + "Setup.Doctor.Buttons.No": "No, please use the settings in the URI as is", + "Setup.Doctor.Buttons.Yes": "Yes, please consult the doctor", + "Setup.Doctor.Message": "Self-hosted LiveSync has gradually become longer in history and some recommended settings have changed.\n\nNow, setup is a very good time to do this.\n\nDo you want to run Doctor to check if the imported settings are optimal compared to the latest state?", + "Setup.Doctor.Title": "Do you want to consult the doctor?", + "Setup.FetchRemoteConf.Buttons.Fetch": "Yes, please fetch the configuration", + "Setup.FetchRemoteConf.Buttons.Skip": "No, please use the settings in the URI", + "Setup.FetchRemoteConf.Message": "If we have already synchronised once with another device, the remote database stores the suitable configuration values between the synchronised devices. The plug-in would like to retrieve them for robust configuration.\n\nHowever, we have to make sure the one thing. Are we currently in a situation where we can access the network safely and retrieve the settings?\n\nNote: Mostly, you are safe to do this, that your remote database is hosted with a SSL certificate, and your network is not compromised.", + "Setup.FetchRemoteConf.Title": "Fetch configuration from remote database?", + "Setup.QRCode": "We have generated a QR code to transfer the settings. Please scan the QR code with your phone or other device.\nNote: The QR code is not encrypted, so be careful to open this.\n\n>[!FOR YOUR EYES ONLY]-\n>
${qr_image}
", + "Setup.RemoteE2EE.AdvancedTitle": "高级", + "Setup.RemoteE2EE.AlgorithmWarning": "更改加密算法会导致之前使用其他算法加密的数据无法访问。请确保所有设备都配置为使用同一算法,以保持对数据的访问能力。", + "Setup.RemoteE2EE.ButtonCancel": "取消", + "Setup.RemoteE2EE.ButtonProceed": "继续", + "Setup.RemoteE2EE.DefaultAlgorithmDesc": "在大多数情况下,你应继续使用默认算法(${algorithm})。只有当你已有一个采用不同格式加密的 Vault 时,才需要调整此设置。", + "Setup.RemoteE2EE.Guidance": "请配置你的端到端加密设置。", + "Setup.RemoteE2EE.LabelEncrypt": "端到端加密", + "Setup.RemoteE2EE.LabelEncryptionAlgorithm": "加密算法", + "Setup.RemoteE2EE.LabelObfuscateProperties": "混淆属性", + "Setup.RemoteE2EE.MultiDestinationWarning": "即使连接到多个同步目标,此设置也必须保持一致。", + "Setup.RemoteE2EE.ObfuscatePropertiesDesc": "混淆属性(例如文件路径、大小、创建和修改日期)可以增加一层额外保护,使远程服务器上的文件与文件夹结构及名称更难被识别。这有助于保护你的隐私,也让未授权用户更难推断你的数据相关信息。", + "Setup.RemoteE2EE.PassphraseValidationLine1": "请注意,在同步过程真正开始之前,端到端加密密码短语不会被校验。这是一项用于保护你数据的安全措施。", + "Setup.RemoteE2EE.PassphraseValidationLine2": "因此,在手动配置服务器信息时请务必格外小心。如果输入了错误的密码短语,服务器上的数据将会损坏。请理解这属于预期行为。", + "Setup.RemoteE2EE.PlaceholderPassphrase": "输入你的密码短语", + "Setup.RemoteE2EE.StronglyRecommendedLine1": "启用端到端加密后,数据会先在你的设备上加密,再发送到远程服务器。这意味着即使有人获得了服务器访问权限,没有密码短语也无法读取你的数据。请务必记住你的密码短语,因为在其他设备上解密数据时也需要它。", + "Setup.RemoteE2EE.StronglyRecommendedLine2": "另外请注意,如果你正在使用 Peer-to-Peer 同步,当你以后切换到其他同步方式并连接远程服务器时,也会使用这组配置。", + "Setup.RemoteE2EE.StronglyRecommendedTitle": "强烈推荐", + "Setup.RemoteE2EE.Title": "端到端加密", + "Setup.ScanQRCode.ButtonClose": "关闭此对话框", + "Setup.ScanQRCode.Guidance": "请按照以下步骤从现有设备导入设置。", + "Setup.ScanQRCode.Step1": "在这台设备上,请保持此 Vault 处于打开状态。", + "Setup.ScanQRCode.Step2": "在源设备上打开 Obsidian。", + "Setup.ScanQRCode.Step3": "在源设备上,从命令面板运行“将设置显示为二维码”命令。", + "Setup.ScanQRCode.Step4": "在这台设备上,切换到相机应用或使用二维码扫描器扫描显示出的二维码。", + "Setup.ScanQRCode.Title": "扫描二维码", + "Setup.ShowQRCode": "使用QR码", + "Setup.ShowQRCode.Desc": "使用QR码来传递配置", + "Setup.UseSetupURI.ButtonCancel": "取消", + "Setup.UseSetupURI.ButtonProceed": "测试设置并继续", + "Setup.UseSetupURI.ErrorFailedToParse": "无法解析 Setup URI,请检查 URI 和密码短语。", + "Setup.UseSetupURI.ErrorPassphraseRequired": "请输入 Vault 密码短语。", + "Setup.UseSetupURI.GuidanceLine1": "请输入在服务器安装期间或另一台设备上生成的 Setup URI,以及 Vault 密码短语。", + "Setup.UseSetupURI.GuidanceLine2": "你可以在命令面板中运行“将设置复制为新的 Setup URI”命令来生成新的 Setup URI。", + "Setup.UseSetupURI.InvalidInfo": "Setup URI 无效,请检查后重试。", + "Setup.UseSetupURI.LabelPassphrase": "Vault 密码短语", + "Setup.UseSetupURI.LabelSetupURI": "Setup URI", + "Setup.UseSetupURI.PlaceholderPassphrase": "输入 Vault 密码短语", + "Setup.UseSetupURI.Title": "输入 Setup URI", + "Setup.UseSetupURI.ValidInfo": "Setup URI 有效,可以使用。", + "Should we keep folders that don't have any files inside?": "我们是否应该保留内部没有任何文件的文件夹?", + "Should we only check for conflicts when a file is opened?": "我们是否应该仅在文件打开时检查冲突?", + "Should we prompt you about conflicting files when a file is opened?": "当文件打开时,是否提示冲突文件?", + "Should we prompt you for every single merge, even if we can safely merge automatcially?": "即使我们可以安全地自动合并,是否也应该为每一次合并提示您?", + "Show full banner": "显示完整横幅", + "Show icon only": "仅显示图标", + "Show only notifications": "仅显示通知", + "Show status as icons only": "仅以图标显示状态", + "Show status icon instead of file warnings banner": "显示状态图标,而非文件警告横幅", + "Show status inside the editor": "在编辑器内显示状态", + "Show status on the status bar": "在状态栏上显示状态", + "Show verbose log. Please enable if you report an issue.": "显示详细日志。如果您报告问题,请启用此选项 ", + "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.": "某些设备的进度值不同(最大:${maxProgress},最小:${minProgress})。\n这可能表示某些设备尚未完成同步,从而可能引发冲突。强烈建议在继续之前先确认所有设备都已同步。", + "Starts synchronisation when a file is saved.": "当文件保存时启动同步 ", + "Stop reflecting database changes to storage files.": "停止将数据库更改反映到存储文件 ", + "Stop watching for file changes.": "停止监视文件更改 ", + "Suppress notification of hidden files change": "暂停隐藏文件更改的通知", + "Suspend database reflecting": "暂停数据库反映", + "Suspend file watching": "暂停文件监视", + "Switch to IDB": "切换到 IDB", + "Switch to IndexedDB": "切换到 IndexedDB", + "Sync after merging file": "合并文件后同步", + "Sync automatically after merging files": "合并文件后自动同步", + "Sync Mode": "同步模式", + "Sync on Editor Save": "编辑器保存时同步", + "Sync on File Open": "打开文件时同步", + "Sync on Save": "保存时同步", + "Sync on Startup": "启动时同步", + "Synchronisation utilising journal files. You must have set up an S3/MinIO/R2 compatible object storage.": "通过日志文件进行同步。你需要事先部署好兼容 S3/MinIO/R2 的对象存储服务。", + "Synchronising files": "同步文件", + "Syncing": "同步中", + "Target patterns": "目标模式", + "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 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.": "以下已接受节点缺少节点信息:\n- ${missingNodes}\n\n这表示它们已有一段时间未连接,或仍停留在较旧版本。\n如有可能,建议先更新所有设备。如果有已不再使用的设备,可以先锁定一次远程端以清除全部已接受节点。", + "The Hash algorithm for chunk IDs": "块 ID 的哈希算法(实验性)", + "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 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.": "基于事件自动同步的最小间隔。", + "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.": "这是面向没有 URI 或希望手动配置详细参数的高级选项。", + "This is the most suitable synchronisation method for the design. All functions are available. You must have set up a CouchDB instance.": "这是最符合当前设计的同步方式,所有功能均可用。你需要事先部署好 CouchDB 实例。", + "This passphrase will not be copied to another device. It will be set to `Default` until you configure it again.": "此密码不会复制到另一台设备。在您再次配置之前,它将设置为 `Default` ", + "This will recreate chunks for all files. If there were missing chunks, this may fix the errors.": "这会为所有文件重新生成 chunks。如果之前存在缺失的 chunks,这可能修复相关错误。", + "TweakMismatchResolve.Action.Dismiss": "Dismiss", + "TweakMismatchResolve.Action.UseConfigured": "Use configured settings", + "TweakMismatchResolve.Action.UseMine": "Update remote database settings", + "TweakMismatchResolve.Action.UseMineAcceptIncompatible": "Update remote database settings but keep as is", + "TweakMismatchResolve.Action.UseMineWithRebuild": "Update remote database settings and rebuild again", + "TweakMismatchResolve.Action.UseRemote": "Apply settings to this device", + "TweakMismatchResolve.Action.UseRemoteAcceptIncompatible": "Apply settings to this device, but and ignore incompatibility", + "TweakMismatchResolve.Action.UseRemoteWithRebuild": "Apply settings to this device, and fetch again", + "TweakMismatchResolve.Message.Main": "\nThe settings in the remote database are as follows. These values are configured by other devices, which are synchronised with this device at least once.\n\nIf you want to use these settings, please select %{TweakMismatchResolve.Action.UseConfigured}.\nIf you want to keep the settings of this device, please select %{TweakMismatchResolve.Action.Dismiss}.\n\n${table}\n\n>[!TIP]\n> If you want to synchronise all settings, please use `Sync settings via markdown` after applying minimal configuration with this feature.\n\n${additionalMessage}", + "TweakMismatchResolve.Message.MainTweakResolving": "Your configuration has not been matched with the one on the remote server.\n\nFollowing configuration should be matched:\n\n${table}\n\nLet us know your decision.\n\n${additionalMessage}", + "TweakMismatchResolve.Message.UseRemote.WarningRebuildRecommended": "\n>[!NOTICE]\n> Some changes are compatible but may consume extra storage and transfer volumes. A rebuild is recommended. However, a rebuild may not be performed at present, but may be implemented in future maintenance.\n> ***Please ensure that you have time and are connected to a stable network to apply!***", + "TweakMismatchResolve.Message.UseRemote.WarningRebuildRequired": "\n>[!WARNING]\n> Some remote configurations are not compatible with the local database of this device. Rebuilding the local database will be required.\n> ***Please ensure that you have time and are connected to a stable network to apply!***", + "TweakMismatchResolve.Message.WarningIncompatibleRebuildRecommended": "\n>[!NOTICE]\n> We have detected that some of the values are different to make incompatible the local database with the remote database.\n> Some changes are compatible but may consume extra storage and transfer volumes. A rebuild is recommended. However, a rebuild may not be performed at present, but may be implemented in future maintenance.\n> If you want to rebuild, it takes a few minutes or more. **Make sure it is safe to perform it now.**", + "TweakMismatchResolve.Message.WarningIncompatibleRebuildRequired": "\n>[!WARNING]\n> We have detected that some of the values are different to make incompatible the local database with the remote database.\n> Either local or remote rebuilds are required. Both of them takes a few minutes or more. **Make sure it is safe to perform it now.**", + "TweakMismatchResolve.Table": "| Value name | This device | On Remote |\n|: --- |: ---- :|: ---- :|\n${rows}\n\n", + "TweakMismatchResolve.Table.Row": "| ${name} | ${self} | ${remote} |", + "TweakMismatchResolve.Title": "Configuration Mismatch Detected", + "TweakMismatchResolve.Title.TweakResolving": "Configuration Mismatch Detected", + "TweakMismatchResolve.Title.UseRemoteConfig": "Use Remote Configuration", + "Ui.Common.Signal.Caution": "注意", + "Ui.Common.Signal.Danger": "危险", + "Ui.Common.Signal.Notice": "提示", + "Ui.Common.Signal.Warning": "警告", + "Ui.Settings.Advanced.LocalDatabaseTweak": "本地数据库调整", + "Ui.Settings.Advanced.MemoryCache": "内存缓存", + "Ui.Settings.Advanced.TransferTweak": "传输调整", + "Ui.Settings.Common.Analyse": "分析", + "Ui.Settings.Common.Back": "返回", + "Ui.Settings.Common.Check": "检查", + "Ui.Settings.Common.Configure": "配置", + "Ui.Settings.Common.Continue": "继续", + "Ui.Settings.Common.Delete": "删除", + "Ui.Settings.Common.Fetch": "获取", + "Ui.Settings.Common.Lock": "锁定", + "Ui.Settings.Common.Merge": "合并", + "Ui.Settings.Common.Open": "打开", + "Ui.Settings.Common.Overwrite": "覆盖", + "Ui.Settings.Common.Perform": "执行", + "Ui.Settings.Common.ResetAll": "全部重置", + "Ui.Settings.Common.ResolveAll": "全部解决", + "Ui.Settings.Common.Scan": "扫描", + "Ui.Settings.Common.Send": "发送", + "Ui.Settings.Common.Use": "使用", + "Ui.Settings.Common.VerifyAll": "全部校验", + "Ui.Settings.CustomizationSync.OpenDesc": "打开此对话框", + "Ui.Settings.CustomizationSync.Panel": "自定义同步", + "Ui.Settings.CustomizationSync.WarnChangeDeviceName": "启用此功能时无法修改设备名称。请先关闭此功能,再修改设备名称。", + "Ui.Settings.CustomizationSync.WarnSetDeviceName": "请先设置用于标识此设备的设备名称。该名称应在你的设备之间保持唯一。未设置前无法启用此功能。", + "Ui.Settings.Hatch.AnalyseDatabaseUsage": "分析数据库使用情况", + "Ui.Settings.Hatch.AnalyseDatabaseUsageDesc": "分析数据库使用情况,并生成 TSV 报告供你自行诊断。你可以将生成的报告粘贴到任意电子表格工具中查看。", + "Ui.Settings.Hatch.BackToNonConfigured": "返回未配置状态", + "Ui.Settings.Hatch.ConvertNonObfuscated": "检查并转换未进行路径混淆的文件", + "Ui.Settings.Hatch.ConvertNonObfuscatedDesc": "检查本地数据库中未按路径混淆方式存储的文件,并在需要时将其转换为正确格式。", + "Ui.Settings.Hatch.CopyIssueReport": "复制报告到剪贴板", + "Ui.Settings.Hatch.DatabaseLabel": "数据库:${details}", + "Ui.Settings.Hatch.DatabaseToStorage": "数据库 -> 存储", + "Ui.Settings.Hatch.DeleteCustomizationSyncData": "删除所有自定义同步数据", + "Ui.Settings.Hatch.GeneratedReport": "已生成的报告", + "Ui.Settings.Hatch.Missing": "缺失", + "Ui.Settings.Hatch.ModifiedSize": "修改时间:${modified},大小:${size}", + "Ui.Settings.Hatch.ModifiedSizeActual": "修改时间:${modified},大小:${size}(实际大小:${actualSize})", + "Ui.Settings.Hatch.PrepareIssueReport": "准备用于提交问题的报告", + "Ui.Settings.Hatch.RecoveryAndRepair": "恢复与修复", + "Ui.Settings.Hatch.RecreateAll": "全部重建", + "Ui.Settings.Hatch.RecreateMissingChunks": "为所有文件重新创建缺失的数据块", + "Ui.Settings.Hatch.RecreateMissingChunksDesc": "此操作会为所有文件重新创建数据块。如果存在缺失的数据块,可能会修复相关错误。", + "Ui.Settings.Hatch.ResetPanel": "重置", + "Ui.Settings.Hatch.ResetRemoteUsage": "重置通知阈值并检查远程数据库使用情况", + "Ui.Settings.Hatch.ResetRemoteUsageDesc": "重置远程存储大小阈值,并再次检查远程存储大小。", + "Ui.Settings.Hatch.ResolveAllConflictedFiles": "使用较新的版本解决所有冲突文件", + "Ui.Settings.Hatch.ResolveAllConflictedFilesDesc": "使用较新的版本解决所有冲突文件。注意:此操作会覆盖较旧版本,且无法恢复被覆盖的内容。", + "Ui.Settings.Hatch.RunDoctor": "运行诊断", + "Ui.Settings.Hatch.ScanBrokenFiles": "扫描损坏文件", + "Ui.Settings.Hatch.ScramSwitches": "紧急开关", + "Ui.Settings.Hatch.ShowHistory": "查看历史", + "Ui.Settings.Hatch.StorageLabel": "存储:${details}", + "Ui.Settings.Hatch.StorageToDatabase": "存储 -> 数据库", + "Ui.Settings.Hatch.VerifyAndRepairAllFiles": "校验并修复所有文件", + "Ui.Settings.Hatch.VerifyAndRepairAllFilesDesc": "比较本地数据库与存储中的文件内容。如果内容不一致,系统会询问你保留哪一份。", + "Ui.Settings.Maintenance.Cleanup": "执行清理", + "Ui.Settings.Maintenance.CleanupDesc": "丢弃所有非最新修订版本,以减少存储空间占用。此操作要求远程服务器和本地客户端都具备同等大小的可用空间。", + "Ui.Settings.Maintenance.DeleteLocalDatabase": "删除本地数据库以重置或卸载 Self-hosted LiveSync", + "Ui.Settings.Maintenance.EmergencyRestart": "紧急重启", + "Ui.Settings.Maintenance.EmergencyRestartDesc": "禁用所有同步并重新启动。", + "Ui.Settings.Maintenance.FreshStartWipe": "全新开始清空", + "Ui.Settings.Maintenance.FreshStartWipeDesc": "删除远程服务器上的所有数据。", + "Ui.Settings.Maintenance.GarbageCollection": "垃圾回收 V3(测试版)", + "Ui.Settings.Maintenance.GarbageCollectionAction": "执行垃圾回收", + "Ui.Settings.Maintenance.GarbageCollectionDesc": "执行垃圾回收以移除未使用的数据块并减少数据库大小。", + "Ui.Settings.Maintenance.LockServer": "锁定服务器", + "Ui.Settings.Maintenance.LockServerDesc": "锁定远程服务器,防止与其他设备继续同步。", + "Ui.Settings.Maintenance.OverwriteRemote": "覆盖远程端", + "Ui.Settings.Maintenance.OverwriteRemoteDesc": "使用本地数据库和密码短语覆盖远程端数据。", + "Ui.Settings.Maintenance.OverwriteServerData": "用此设备的文件覆盖服务器数据", + "Ui.Settings.Maintenance.OverwriteServerDataDesc": "使用此设备上的文件重建本地和远程数据库。", + "Ui.Settings.Maintenance.PurgeAllJournalCounter": "清空全部日志计数器", + "Ui.Settings.Maintenance.PurgeAllJournalCounterDesc": "清空所有下载与上传缓存。", + "Ui.Settings.Maintenance.RebuildingOperations": "重建操作(仅远程端)", + "Ui.Settings.Maintenance.Resend": "重新发送", + "Ui.Settings.Maintenance.ResendDesc": "将所有数据块重新发送到远程端。", + "Ui.Settings.Maintenance.Reset": "重置", + "Ui.Settings.Maintenance.ResetAllJournalCounter": "重置全部日志计数器", + "Ui.Settings.Maintenance.ResetAllJournalCounterDesc": "初始化全部日志历史。下次同步时,所有项目都会重新接收并重新发送。", + "Ui.Settings.Maintenance.ResetJournalReceived": "重置日志接收历史", + "Ui.Settings.Maintenance.ResetJournalReceivedDesc": "初始化日志接收历史。下次同步时,除当前设备发送的项目外,其余项目都会重新下载。", + "Ui.Settings.Maintenance.ResetJournalSent": "重置日志发送历史", + "Ui.Settings.Maintenance.ResetJournalSentDesc": "初始化日志发送历史。下次同步时,除当前设备已接收的项目外,其余项目都会重新发送。", + "Ui.Settings.Maintenance.ResetLocalSyncInfo": "重置同步信息", + "Ui.Settings.Maintenance.ResetLocalSyncInfoDesc": "从远程端恢复或重建本地数据库。", + "Ui.Settings.Maintenance.ResetReceived": "重置接收记录", + "Ui.Settings.Maintenance.ResetSentHistory": "重置发送记录", + "Ui.Settings.Maintenance.ResetThisDevice": "重置此设备上的同步状态", + "Ui.Settings.Maintenance.ScheduleAndRestart": "计划执行并重启", + "Ui.Settings.Maintenance.Scram": "紧急处理", + "Ui.Settings.Maintenance.SendChunks": "发送数据块", + "Ui.Settings.Maintenance.Syncing": "同步", + "Ui.Settings.Maintenance.WarningLockedReadyAction": "我已准备好,立即解锁数据库", + "Ui.Settings.Maintenance.WarningLockedReadyText": "为防止意外的数据仓库损坏,远程数据库已被锁定,暂停同步。(此设备已被标记为“已确认”)当你的所有设备都标记为“已确认”后,再解锁数据库。在复制过程确认此设备已完成确认之前,此警告会持续显示。", + "Ui.Settings.Maintenance.WarningLockedResolveAction": "我已完成备份,将此设备标记为“已确认”", + "Ui.Settings.Maintenance.WarningLockedResolveText": "为防止数据仓库损坏,由于此设备尚未标记为“已确认”,远程数据库已被锁定,暂停同步。请先备份你的仓库、重置本地数据库,然后选择“将此设备标记为已确认”。在复制过程确认此设备已完成确认之前,此警告会持续显示。", + "Ui.Settings.Maintenance.WriteRedFlagAndRestart": "标记并重启", + "Ui.Settings.Patches.CompatibilityConflict": "兼容性(冲突行为)", + "Ui.Settings.Patches.CompatibilityDatabase": "兼容性(数据库结构)", + "Ui.Settings.Patches.CompatibilityInternalApi": "兼容性(内部 API 使用)", + "Ui.Settings.Patches.CompatibilityMetadata": "兼容性(元数据)", + "Ui.Settings.Patches.CompatibilityRemote": "兼容性(远程数据库)", + "Ui.Settings.Patches.CompatibilityTrouble": "兼容性(已处理问题)", + "Ui.Settings.Patches.CurrentAdapter": "当前适配器:${adapter}", + "Ui.Settings.Patches.DatabaseAdapter": "数据库适配器", + "Ui.Settings.Patches.DatabaseAdapterDesc": "选择要使用的数据库适配器。", + "Ui.Settings.Patches.EdgeCaseBehaviour": "边界情况处理(行为)", + "Ui.Settings.Patches.EdgeCaseDatabase": "边界情况处理(数据库)", + "Ui.Settings.Patches.EdgeCaseProcessing": "边界情况处理(处理流程)", + "Ui.Settings.Patches.IndexedDbWarning": "IndexedDB 适配器在某些场景下通常具有更好的性能,但在 LiveSync 模式下已发现可能导致内存泄漏。使用 LiveSync 模式时,请改用 IDB 适配器。", + "Ui.Settings.Patches.MigratingToIdb": "正在将所有数据迁移到 IDB...", + "Ui.Settings.Patches.MigratingToIndexedDb": "正在将所有数据迁移到 IndexedDB...", + "Ui.Settings.Patches.MigrationIdbCompleted": "已完成迁移到 IDB。Obsidian 将立即使用新配置重新启动。", + "Ui.Settings.Patches.MigrationIdbCompletedFollowUp": "已完成迁移到 IDB。请切换适配器并重新启动 Obsidian。", + "Ui.Settings.Patches.MigrationIndexedDbCompleted": "已完成迁移到 IndexedDB。Obsidian 将立即使用新配置重新启动。", + "Ui.Settings.Patches.MigrationIndexedDbCompletedFollowUp": "已完成迁移到 IndexedDB。请切换适配器并重新启动 Obsidian。", + "Ui.Settings.Patches.MigrationWarning": "修改此设置需要迁移现有数据(可能需要一些时间)并重新启动 Obsidian。请先备份你的数据后再继续。", + "Ui.Settings.Patches.OperationToIdb": "迁移到 IDB", + "Ui.Settings.Patches.OperationToIndexedDb": "迁移到 IndexedDB", + "Ui.Settings.Patches.Remediation": "修正", + "Ui.Settings.Patches.RemediationChanged": "修正设置已更改", + "Ui.Settings.Patches.RemediationNoLimit": "未设置限制", + "Ui.Settings.Patches.RemediationRestarting": "修正设置已更改,正在重新启动 Obsidian...", + "Ui.Settings.Patches.RemediationRestartLater": "稍后", + "Ui.Settings.Patches.RemediationRestartMessage": "强烈建议重新启动 Obsidian。在重启之前,部分更改可能不会生效,界面显示也可能不一致。确定要现在重启吗?", + "Ui.Settings.Patches.RemediationRestartNow": "立即重启", + "Ui.Settings.Patches.RemediationSuffixChanged": "后缀已更改,正在重新打开数据库...", + "Ui.Settings.Patches.RemediationWithValue": "限制:${date}(${timestamp})", + "Ui.Settings.Patches.RemoteDatabaseSunset": "远程数据库调整(即将弃用)", + "Ui.Settings.Patches.SwitchToIDB": "切换到 IDB", + "Ui.Settings.Patches.SwitchToIndexedDb": "切换到 IndexedDB", + "Ui.Settings.PowerUsers.ConfigurationEncryption": "配置加密", + "Ui.Settings.PowerUsers.ConnectionTweak": "CouchDB 连接调整", + "Ui.Settings.PowerUsers.ConnectionTweakDesc": "如果你在使用 IBM Cloudant 时遇到负载大小限制,请将 batch size 和 batch limit 调低。", + "Ui.Settings.PowerUsers.Default": "默认", + "Ui.Settings.PowerUsers.Developer": "开发者", + "Ui.Settings.PowerUsers.EncryptSensitiveConfig": "加密敏感配置项", + "Ui.Settings.PowerUsers.PromptPassphraseEveryLaunch": "每次启动时询问密码短语", + "Ui.Settings.PowerUsers.UseCustomPassphrase": "使用自定义密码短语", + "Ui.Settings.Remote.Activate": "启用", + "Ui.Settings.Remote.ActiveSuffix": "(当前启用)", + "Ui.Settings.Remote.AddConnection": "新增连接", + "Ui.Settings.Remote.AddRemoteDefaultName": "新远程端", + "Ui.Settings.Remote.ConfigureAndChangeRemote": "配置并切换远程端", + "Ui.Settings.Remote.ConfigureE2EE": "配置端到端加密", + "Ui.Settings.Remote.ConfigureRemote": "配置远程端", + "Ui.Settings.Remote.DeleteRemoteConfirm": "确定要删除远程配置“${name}”吗?", + "Ui.Settings.Remote.DeleteRemoteTitle": "删除远程配置", + "Ui.Settings.Remote.DisplayName": "显示名称", + "Ui.Settings.Remote.DuplicateRemote": "复制远程配置", + "Ui.Settings.Remote.DuplicateRemoteSuffix": "${name}(副本)", + "Ui.Settings.Remote.E2EEConfiguration": "端到端加密配置", + "Ui.Settings.Remote.Export": "导出", + "Ui.Settings.Remote.FetchRemoteSettings": "获取远程设置", + "Ui.Settings.Remote.ImportConnection": "导入连接", + "Ui.Settings.Remote.ImportConnectionPrompt": "粘贴连接字符串", + "Ui.Settings.Remote.ImportedCouchDb": "已导入的 CouchDB", + "Ui.Settings.Remote.ImportedRemote": "远程端", + "Ui.Settings.Remote.MoreActions": "更多操作", + "Ui.Settings.Remote.PeerToPeerPanel": "点对点同步", + "Ui.Settings.Remote.RemoteConfigurationPrefix": "远程配置", + "Ui.Settings.Remote.RemoteDatabases": "远程数据库", + "Ui.Settings.Remote.RemoteName": "远程名称", + "Ui.Settings.Remote.RemoteNameCouchDb": "CouchDB ${host}", + "Ui.Settings.Remote.RemoteNameP2P": "P2P ${room}", + "Ui.Settings.Remote.RemoteNameS3": "S3 ${bucket}", + "Ui.Settings.Remote.Rename": "重命名", + "Ui.Settings.Selector.AddDefaultPatterns": "添加默认模式", + "Ui.Settings.Selector.CrossPlatform": "跨平台", + "Ui.Settings.Selector.Default": "默认", + "Ui.Settings.Selector.HiddenFiles": "隐藏文件", + "Ui.Settings.Selector.IgnorePatterns": "忽略模式", + "Ui.Settings.Selector.NonSynchronisingFiles": "不同步文件", + "Ui.Settings.Selector.NonSynchronisingFilesDesc": "(RegExp)如果设置了该项,则本地和远程中匹配这些规则的文件变更将被跳过。", + "Ui.Settings.Selector.NormalFiles": "普通文件", + "Ui.Settings.Selector.OverwritePatterns": "覆盖模式", + "Ui.Settings.Selector.OverwritePatternsDesc": "匹配后将执行覆盖而非合并的文件模式", + "Ui.Settings.Selector.SynchronisingFiles": "同步文件", + "Ui.Settings.Selector.SynchronisingFilesDesc": "(RegExp)留空则同步所有文件。可设置正则表达式以限制需要同步的文件。", + "Ui.Settings.Selector.TargetPatterns": "目标模式", + "Ui.Settings.Selector.TargetPatternsDesc": "用于匹配需要同步文件的模式", + "Ui.Settings.Setup.RerunWizardButton": "重新运行向导", + "Ui.Settings.Setup.RerunWizardDesc": "重新运行引导向导,再次设置 Self-hosted LiveSync。", + "Ui.Settings.Setup.RerunWizardName": "重新运行引导向导", + "Ui.Settings.SyncSettings.Fetch": "获取", + "Ui.Settings.SyncSettings.Merge": "合并", + "Ui.Settings.SyncSettings.Overwrite": "覆盖", + "Ui.SetupWizard.Common.Back": "不,带我返回", + "Ui.SetupWizard.Common.Cancel": "取消", + "Ui.SetupWizard.Common.ProceedSelectOption": "请选择一个选项后继续", + "Ui.SetupWizard.Intro.ExistingOption": "将此设备加入已有同步配置", + "Ui.SetupWizard.Intro.ExistingOptionDesc": "如果你已经在另一台电脑或手机上使用同步,请选择此项。此选项用于将当前设备连接到既有同步配置。", + "Ui.SetupWizard.Intro.Guidance": "接下来我们会通过几个问题,帮助你更轻松地完成同步配置。", + "Ui.SetupWizard.Intro.NewOption": "首次设置同步", + "Ui.SetupWizard.Intro.NewOptionDesc": "如果你正把这台设备作为第一台同步设备进行配置,请选择此项。", + "Ui.SetupWizard.Intro.ProceedExisting": "是的,我要将此设备加入现有同步", + "Ui.SetupWizard.Intro.ProceedNew": "是的,我要开始新的同步配置", + "Ui.SetupWizard.Intro.Question": "首先,请选择最符合你当前情况的选项。", + "Ui.SetupWizard.Intro.Title": "欢迎使用 Self-hosted LiveSync", + "Ui.SetupWizard.OutroAskUserMode.CompatibleOption": "远程端已配置完成,且当前配置兼容(或已通过本次操作变为兼容)。", + "Ui.SetupWizard.OutroAskUserMode.CompatibleOptionDesc": "除非你非常确定,否则选择此项存在风险。它假定服务器配置与当前设备兼容。如果事实并非如此,可能会导致数据丢失。请确认你了解后果。", + "Ui.SetupWizard.OutroAskUserMode.ExistingOption": "远程服务器已经配置完成,我想让此设备加入同步。", + "Ui.SetupWizard.OutroAskUserMode.ExistingOptionDesc": "选择此项后,此设备会加入已有服务器。你需要将服务器上的现有同步数据获取到此设备。", + "Ui.SetupWizard.OutroAskUserMode.Guidance": "服务器连接已成功配置。下一步需要重建本地数据库,也就是同步状态信息。", + "Ui.SetupWizard.OutroAskUserMode.NewOption": "我是第一次配置新服务器 / 我想重置现有服务器。", + "Ui.SetupWizard.OutroAskUserMode.NewOptionDesc": "选择此项后,服务器会使用当前设备上的数据进行初始化。服务器上的现有数据将被完全覆盖。", + "Ui.SetupWizard.OutroAskUserMode.ProceedApplySettings": "应用这些设置", + "Ui.SetupWizard.OutroAskUserMode.ProceedNext": "继续下一步", + "Ui.SetupWizard.OutroAskUserMode.Question": "请选择你的当前情况。", + "Ui.SetupWizard.OutroAskUserMode.Title": "即将完成:还需要做出选择", + "Ui.SetupWizard.OutroNewUser.GuidancePrimary": "服务器连接已成功配置。下一步将根据当前设备上的数据,在服务器端建立同步数据。", + "Ui.SetupWizard.OutroNewUser.GuidanceWarning": "重启后,当前设备上的数据会作为主副本上传到服务器。请注意,服务器上现有的非预期数据将被完全覆盖。", + "Ui.SetupWizard.OutroNewUser.Important": "重要", + "Ui.SetupWizard.OutroNewUser.Proceed": "重启并初始化服务器", + "Ui.SetupWizard.OutroNewUser.Question": "请选择下方按钮,重启并进入最终确认步骤。", + "Ui.SetupWizard.OutroNewUser.Title": "设置完成:准备初始化服务器", + "Ui.SetupWizard.SelectExisting.Guidance": "你正在将此设备加入已有同步配置。", + "Ui.SetupWizard.SelectExisting.ManualOption": "手动输入服务器信息", + "Ui.SetupWizard.SelectExisting.ManualOptionDesc": "手动重新配置与你其他设备相同的服务器信息。此方式仅适用于高级用户。", + "Ui.SetupWizard.SelectExisting.ProceedManual": "我知道服务器信息,让我手动输入", + "Ui.SetupWizard.SelectExisting.ProceedQr": "使用本设备摄像头扫描活动设备上显示的二维码", + "Ui.SetupWizard.SelectExisting.ProceedSetupUri": "使用 Setup URI 继续", + "Ui.SetupWizard.SelectExisting.QrOption": "扫描二维码(移动端推荐)", + "Ui.SetupWizard.SelectExisting.QrOptionDesc": "使用本设备摄像头扫描活动设备上显示的二维码。", + "Ui.SetupWizard.SelectExisting.Question": "请选择一种从其他设备导入设置的方法。", + "Ui.SetupWizard.SelectExisting.SetupUriOption": "使用 Setup URI(推荐)", + "Ui.SetupWizard.SelectExisting.SetupUriOptionDesc": "粘贴从某台已启用设备生成的 Setup URI。", + "Ui.SetupWizard.SelectExisting.Title": "设备设置方式", + "Ui.SetupWizard.SelectNew.Guidance": "接下来将继续配置服务器连接信息。", + "Ui.SetupWizard.SelectNew.ManualOption": "手动输入服务器信息", + "Ui.SetupWizard.SelectNew.ManualOptionDesc": "如果你没有 Setup URI,或希望自行配置更详细的参数,可选择此高级选项。", + "Ui.SetupWizard.SelectNew.ProceedManual": "我知道服务器信息,让我手动输入", + "Ui.SetupWizard.SelectNew.ProceedSetupUri": "使用 Setup URI 继续", + "Ui.SetupWizard.SelectNew.Question": "你希望如何配置服务器连接?", + "Ui.SetupWizard.SelectNew.SetupUriOption": "使用 Setup URI(推荐)", + "Ui.SetupWizard.SelectNew.SetupUriOptionDesc": "Setup URI 是一段包含服务器地址和认证信息的文本。如果你的服务器安装脚本已经生成了它,这是最简单且安全的配置方式。", + "Ui.SetupWizard.SelectNew.Title": "连接方式", + "Ui.SetupWizard.SetupRemote.BucketOption": "S3/MinIO/R2 对象存储", + "Ui.SetupWizard.SetupRemote.BucketOptionDesc": "使用日志文件进行同步。你需要先准备好兼容 S3/MinIO/R2 的对象存储服务。", + "Ui.SetupWizard.SetupRemote.CouchDbOptionDesc": "这是当前设计下最适合的同步方式,所有功能都可用。你需要先准备好 CouchDB 实例。", + "Ui.SetupWizard.SetupRemote.Guidance": "请选择你要连接的服务器类型。", + "Ui.SetupWizard.SetupRemote.P2POption": "仅点对点", + "Ui.SetupWizard.SetupRemote.P2POptionDesc": "启用设备之间的直接同步。无需服务器,但两台设备必须同时在线,且部分功能可能受限。互联网连接仅用于信令,不用于传输数据。", + "Ui.SetupWizard.SetupRemote.ProceedBucket": "继续配置 S3/MinIO/R2", + "Ui.SetupWizard.SetupRemote.ProceedCouchDb": "继续配置 CouchDB", + "Ui.SetupWizard.SetupRemote.ProceedP2P": "继续配置仅点对点模式", + "Ui.SetupWizard.SetupRemote.Title": "输入服务器信息", + "Unique name between all synchronized devices. To edit this setting, please disable customization sync once.": "所有同步设备之间的唯一名称。要编辑此设置,请首先禁用自定义同步", + "Use a custom passphrase": "使用自定义密码短语", + "Use a Setup URI (Recommended)": "使用 Setup URI(推荐)", + "Use Custom HTTP Handler": "使用自定义 HTTP 处理程序", + "Use dynamic iteration count": "使用动态迭代次数", + "Use Segmented-splitter": "使用分段分割器", + "Use splitting-limit-capped chunk splitter": "使用分割限制上限的块分割器", + "Use the trash bin": "使用回收站", + "Use timeouts instead of heartbeats": "使用超时而不是心跳", + "username": "用户名", + "Username": "用户名", + "Verbose Log": "详细日志", + "Verify all": "全部校验", + "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.": "警告!这将严重影响性能。并且日志不会以默认名称同步。请小心处理日志;它们通常包含您的敏感信息 ", + "We cannot change the device name while this feature is enabled. Please disable this feature to change the device name.": "启用此功能时无法更改设备名称。如需修改设备名称,请先禁用此功能。", + "We will now guide you through a few questions to simplify the synchronisation setup.": "接下来我们会通过几个问题,引导你更轻松地完成同步设置。", + "We will now proceed with the server configuration.": "接下来将继续进行服务器配置。", + "Welcome to Self-hosted LiveSync": "欢迎使用 Self-hosted LiveSync", + "When you save a file in the editor, start a sync automatically": "当您在编辑器中保存文件时,自动开始同步", + "Write credentials in the file": "将凭据写入文件", + "Write logs into the file": "将日志写入文件", + "xxhash32 (Fast but less collision resistance)": "xxhash32(速度快,但抗碰撞能力较弱)", + "xxhash64 (Fastest)": "xxhash64(最快)", + "Yes, I want to add this device to my existing synchronisation": "是的,我要把这台设备加入现有同步", + "Yes, I want to set up a new synchronisation": "是的,我要配置新的同步", + "You are adding this device to an existing synchronisation setup.": "你正在将此设备加入到现有同步配置中。" +} diff --git a/src/common/messagesYAML/de.yaml b/src/common/messagesYAML/de.yaml new file mode 100644 index 00000000..5472df4b --- /dev/null +++ b/src/common/messagesYAML/de.yaml @@ -0,0 +1,412 @@ +(Active): (Aktiv) +(RegExp) Empty to sync all files. Set filter as a regular expression to limit synchronising files.: + (RegExp) Leer lassen, um alle Dateien zu synchronisieren. Legen Sie einen + Filter als regulären Ausdruck fest, um die zu synchronisierenden Dateien + einzuschränken. +(RegExp) If this is set, any changes to local and remote files that match this will be skipped.: + (RegExp) Wenn dies gesetzt ist, werden alle Änderungen an lokalen und + Remote-Dateien übersprungen, die diesem Muster entsprechen. +Activate: Aktivieren +Add default patterns: Standardmuster hinzufügen +Add new connection: Neue Verbindung hinzufügen +Back: Zurück +Back to non-configured: Zurück auf nicht konfiguriert +Cancel: Abbrechen +Check and convert non-path-obfuscated files: Nicht pfadverschleierte Dateien prüfen und konvertieren +Check for documents that have not been converted to path-obfuscated IDs and convert them if necessary.: + Prüft Dokumente, die noch nicht in pfadverschleierte IDs umgewandelt wurden, + und konvertiert sie bei Bedarf. +cmdConfigSync: + showCustomizationSync: Anpassungssynchronisation anzeigen +Compare the content of files between on local database and storage. If not matched, you will be asked which one you want to keep.: + Vergleicht den Inhalt der Dateien zwischen lokaler Datenbank und Speicher. Bei + Abweichungen werden Sie gefragt, welche Version behalten werden soll. +Compatibility (Conflict Behaviour): Kompatibilität (Konfliktverhalten) +Compatibility (Database structure): Kompatibilität (Datenbankstruktur) +Compatibility (Internal API Usage): Kompatibilität (interne API-Nutzung) +Compatibility (Metadata): Kompatibilität (Metadaten) +Compatibility (Remote Database): Kompatibilität (Remote-Datenbank) +Compatibility (Trouble addressed): Kompatibilität (Problembehebung) +Configure: Konfigurieren +Configure And Change Remote: Remote konfigurieren und wechseln +Configure E2EE: E2EE konfigurieren +Configure Remote: Remote konfigurieren +Copy: Kopieren +Cross-platform: Plattformübergreifend +"Current adapter: {adapter}": "Aktueller Adapter: {adapter}" +Customization Sync (Beta3): Anpassungssynchronisation (Beta3) +Database Adapter: Datenbankadapter +Default: Standard +Delete: Löschen +Delete all customization sync data: Alle Anpassungssynchronisationsdaten löschen +Delete all data on the remote server.: Alle Daten auf dem Remote-Server löschen. +Delete local database to reset or uninstall Self-hosted LiveSync: + Lokale Datenbank löschen, um Self-hosted LiveSync zurückzusetzen oder zu + deinstallieren +Delete Remote Configuration: Remote-Konfiguration löschen +Delete remote configuration '{name}'?: Remote-Konfiguration „{name}“ löschen? +desktop: Desktop +Device name: Gerätename +Disables all synchronization and restart.: Deaktiviert die gesamte Synchronisation und startet neu. +Display name: Anzeigename +Duplicate: Duplizieren +Duplicate remote: Remote duplizieren +E2EE Configuration: E2EE-Konfiguration +Edge case addressing (Behaviour): Behandlung von Randfällen (Verhalten) +Edge case addressing (Database): Behandlung von Randfällen (Datenbank) +Edge case addressing (Processing): Behandlung von Randfällen (Verarbeitung) +Emergency restart: Notfallneustart +Encrypting sensitive configuration items: Sensible Konfigurationseinträge verschlüsseln +Export: Exportieren +Fetch remote settings: Remote-Einstellungen abrufen +File to resolve conflict: Datei zur Konfliktlösung +Flag and restart: Markieren und neu starten +Fresh Start Wipe: Für Neustart vollständig bereinigen +Garbage Collection V3 (Beta): Datenbereinigung V3 (Beta) +Hidden Files: Versteckte Dateien +Hide completely: Vollständig ausblenden +How to display network errors when the sync server is unreachable.: + Legt fest, wie Netzwerkfehler angezeigt werden, wenn der + Synchronisationsserver nicht erreichbar ist. +If enabled, the ⛔ icon will be shown inside the status instead of the file warnings banner. No details will be shown.: + Wenn aktiviert, wird das Symbol ⛔ im Status statt im Dateiwarnungsbanner + angezeigt. Es werden keine Details angezeigt. +Ignore patterns: Ausschlussmuster +Import connection: Verbindung importieren +Initialise all journal history, On the next sync, every item will be received and sent.: + Gesamte Journal-Historie initialisieren. Beim nächsten Sync werden alle + Elemente empfangen und gesendet. +Later: Später +"Limit: {datetime} ({timestamp})": "Grenze: {datetime} ({timestamp})" +Lock: Sperren +Lock Server: Server sperren +Lock the remote server to prevent synchronization with other devices.: + Sperrt den Remote-Server, um die Synchronisation mit anderen Geräten zu + verhindern. +More actions: Weitere Aktionen +Network warning style: Stil der Netzwerkwarnung +New Remote: Neues Remote +No limit configured: Kein Limit konfiguriert +Non-Synchronising files: Nicht zu synchronisierende Dateien +Normal Files: Normale Dateien +obsidianLiveSyncSettingTab: + btnApply: Anwenden + btnDisable: Deaktivieren + btnNext: Weiter + buttonNext: Weiter + defaultLanguage: Standardsprache + labelDisabled: "⏹️ : Deaktiviert" + labelEnabled: "🔁 : Aktiviert" + logConfiguredDisabled: "Konfigurierter Synchronisationsmodus: DEAKTIVIERT" + logConfiguredLiveSync: "Konfigurierter Synchronisationsmodus: LiveSync" + logConfiguredPeriodic: "Konfigurierter Synchronisationsmodus: Periodisch" + logSelectAnyPreset: Wählen Sie eine beliebige Voreinstellung aus. + msgConfigCheckFailed: Die Konfigurationsprüfung ist fehlgeschlagen. Trotzdem fortfahren? + msgEnableEncryptionRecommendation: Wir empfehlen, Ende-zu-Ende-Verschlüsselung + und Pfadverschleierung zu aktivieren. Möchten Sie wirklich ohne + Verschlüsselung fortfahren? + msgFetchConfigFromRemote: Möchten Sie die Konfiguration vom Remote-Server abrufen? + msgGenerateSetupURI: Alles fertig! Möchten Sie eine Setup-URI erzeugen, um + andere Geräte einzurichten? + msgInvalidPassphrase: Ihre Verschlüsselungs-Passphrase könnte ungültig sein. + Möchten Sie wirklich fortfahren? + msgSelectAndApplyPreset: Bitte wählen und übernehmen Sie eine beliebige + Voreinstellung, um den Assistenten abzuschließen. + nameDisableHiddenFileSync: Synchronisation versteckter Dateien deaktivieren + nameEnableHiddenFileSync: Synchronisation versteckter Dateien aktivieren + nameHiddenFileSynchronization: Synchronisation versteckter Dateien + optionDisableAllAutomatic: Alle automatischen Vorgänge deaktivieren + optionLiveSync: LiveSync-Modus + optionOnEvents: Bei Ereignissen + optionPeriodicAndEvents: Periodisch und bei Ereignissen + optionPeriodicWithBatch: Periodisch mit Stapelverarbeitung + titleAppearance: Darstellung + titleConflictResolution: Konfliktbehandlung + titleCongratulations: Glückwunsch! + titleCouchDB: CouchDB-Server + titleDeletionPropagation: Weitergabe von Löschungen + titleEncryptionNotEnabled: Verschlüsselung ist nicht aktiviert + titleEncryptionPassphraseInvalid: Ungültige Verschlüsselungs-Passphrase + titleFetchConfig: Konfiguration abrufen + titleHiddenFiles: Versteckte Dateien + titleLogging: Protokollierung + titleMinioS3R2: MinIO / S3 / R2 + titleNotification: Benachrichtigungen + titleRemoteConfigCheckFailed: Prüfung der Remote-Konfiguration fehlgeschlagen + titleRemoteServer: Remote-Server + titleSynchronizationMethod: Synchronisationsmethode + titleSynchronizationPreset: Synchronisationsvorgabe + titleSyncSettingsViaMarkdown: Synchronisationseinstellungen per Markdown + titleUpdateThinning: Update-Ausdünnung +Ok: OK +Old Algorithm: Alter Algorithmus +Older fallback (Slow, W/O WebAssembly): Älterer Fallback (langsam, ohne WebAssembly) +Overwrite patterns: Überschreibungsmuster +Overwrite remote: Remote überschreiben +Overwrite remote with local DB and passphrase.: Remote mit lokaler Datenbank und Passphrase überschreiben. +Overwrite Server Data with This Device's Files: Serverdaten mit den Dateien dieses Geräts überschreiben +paneMaintenance: + markDeviceResolvedAfterBackup: Markieren Sie das Gerät nach der Sicherung als gelöst. + remoteLockedAndDeviceNotAccepted: Die Remote-Datenbank ist gesperrt und dieses + Gerät wurde noch nicht akzeptiert. + remoteLockedResolvedDevice: Die Remote-Datenbank ist gesperrt. Dieses Gerät wurde bereits akzeptiert. + unlockDatabaseReady: Die Datenbank kann jetzt entsperrt werden. +Paste a connection string: Verbindungszeichenfolge einfügen +Patterns to match files for overwriting instead of merging: Muster zum Erkennen + von Dateien, die überschrieben statt zusammengeführt werden sollen +Patterns to match files for syncing: Muster zum Erkennen von Dateien für die Synchronisation +Peer-to-Peer Synchronisation: Peer-to-Peer-Synchronisation +Perform: Ausführen +Perform cleanup: Bereinigung ausführen +Perform Garbage Collection: Garbage Collection ausführen +Perform Garbage Collection to remove unused chunks and reduce database size.: + Führt Garbage Collection aus, um ungenutzte Chunks zu entfernen und die + Datenbankgröße zu reduzieren. +Pick a file to resolve conflict: Datei zur Konfliktlösung auswählen +Please set this device name: Bitte legen Sie den Namen dieses Geräts fest +PureJS fallback (Fast, W/O WebAssembly): PureJS-Fallback (schnell, ohne WebAssembly) +Purge all download/upload cache.: Gesamten Download-/Upload-Cache leeren. +Purge all journal counter: Alle Journal-Zähler leeren +Rebuild local and remote database with local files.: Lokale und Remote-Datenbank anhand der lokalen Dateien neu aufbauen. +Rebuilding Operations (Remote Only): Neuaufbau-Vorgänge (nur Remote) +Recreate all: Alle neu erstellen +Recreate missing chunks for all files: Fehlende Chunks für alle Dateien neu erstellen +Remediation: Problembehebung +Remediation Setting Changed: Problembehebungs-Einstellung geändert +Remote Database Tweak (In sunset): Remote-Datenbank-Optimierung (wird eingestellt) +Remote Databases: Remote-Datenbanken +Remote name: Remote-Name +Rename: Umbenennen +Resend: Erneut senden +Resend all chunks to the remote.: Alle Chunks erneut an das Remote senden. +Reset: Zurücksetzen +Reset all: Alles zurücksetzen +Reset all journal counter: Alle Journal-Zähler zurücksetzen +Reset journal received history: Empfangsverlauf des Journals zurücksetzen +Reset journal sent history: Sendeverlauf des Journals zurücksetzen +Reset received: Empfang zurücksetzen +Reset sent history: Sendeverlauf zurücksetzen +Reset Synchronisation information: Synchronisationsinformationen zurücksetzen +Reset Synchronisation on This Device: Synchronisation auf diesem Gerät zurücksetzen +Resolve All: Alle auflösen +Resolve all conflicted files: Alle Konfliktdateien auflösen +Resolve All conflicted files by the newer one: Alle Konfliktdateien mit der neueren Version auflösen +"Resolve all conflicted files by the newer one. Caution: This will overwrite the older one, and cannot resurrect the overwritten one.": + "Löst alle Konfliktdateien zugunsten der neueren Version auf. Achtung: Dadurch + wird die ältere Version überschrieben und kann nicht wiederhergestellt + werden." +Restart Now: Jetzt neu starten +Restore or reconstruct local database from remote.: Lokale Datenbank aus dem Remote wiederherstellen oder neu aufbauen. +Schedule and Restart: Planen und neu starten +Scram!: Notfallmaßnahmen +Select the database adapter to use.: Wählen Sie den zu verwendenden Datenbankadapter aus. +Send: Senden +Send chunks: Chunks senden +Setting: + GenerateKeyPair: + Desc: >- + Wir haben ein Schlüsselpaar erzeugt! + + + Hinweis: Dieses Schlüsselpaar wird nie wieder angezeigt. Bitte bewahren + Sie es an einem sicheren Ort auf. Wenn Sie es verlieren, müssen Sie ein + neues Schlüsselpaar erzeugen. + + Hinweis 2: Der öffentliche Schlüssel liegt im SPKI-Format vor, der private + Schlüssel im PKCS8-Format. Zur besseren Handhabung werden Zeilenumbrüche + im öffentlichen Schlüssel zu `\n` umgewandelt. + + Hinweis 3: Der öffentliche Schlüssel sollte in der Remote-Datenbank + hinterlegt werden, der private Schlüssel auf den lokalen Geräten. + + + >[!NUR FÜR IHRE AUGEN]- + + >
+ + > + + > ### Öffentlicher Schlüssel + + > ``` + + ${public_key} + + > ``` + + > + + > ### Privater Schlüssel + + > ``` + + ${private_key} + + > ``` + + > + + >
+ + + >[!Beides zum Kopieren]- + + > + + >
+ + > + + > ``` + + ${public_key} + + ${private_key} + + > ``` + + > + + >
+ Title: Neues Schlüsselpaar wurde erzeugt! +Show full banner: Vollständiges Banner anzeigen +Show icon only: Nur Symbol anzeigen +Show status icon instead of file warnings banner: Statussymbol statt Dateiwarnungsbanner anzeigen +Switch to IDB: Zu IDB wechseln +Switch to IndexedDB: Zu IndexedDB wechseln +Synchronising files: Zu synchronisierende Dateien +Syncing: Synchronisierung +Target patterns: Zielmuster +This will recreate chunks for all files. If there were missing chunks, this may fix the errors.: + Dadurch werden die Chunks für alle Dateien neu erstellt. Falls Chunks fehlen, + können die Fehler dadurch behoben werden. +Verify all: Alle prüfen +Verify and repair all files: Alle Dateien prüfen und reparieren +xxhash32 (Fast but less collision resistance): xxhash32 (schnell, aber geringere Kollisionsresistenz) +xxhash64 (Fastest): xxhash64 (am schnellsten) +"Welcome to Self-hosted LiveSync": "Willkommen bei Self-hosted LiveSync" +"We will now guide you through a few questions to simplify the synchronisation setup.": "Wir führen Sie nun durch einige Fragen, um die Synchronisationseinrichtung zu vereinfachen." +"First, please select the option that best describes your current situation.": "Wählen Sie bitte zuerst die Option aus, die Ihre aktuelle Situation am besten beschreibt." +"I am setting this up for the first time": "Ich richte dies zum ersten Mal ein" +"(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.": "(Wählen Sie dies, wenn Sie dieses Gerät als erstes Synchronisationsgerät einrichten.) Diese Option ist geeignet, wenn Sie LiveSync neu verwenden und von Grund auf einrichten möchten." +"I am adding a device to an existing synchronisation setup": "Ich füge ein Gerät zu einer bestehenden Synchronisationseinrichtung hinzu" +"(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.": "(Wählen Sie dies, wenn Sie die Synchronisation bereits auf einem anderen Computer oder Smartphone verwenden.) Diese Option ist geeignet, wenn Sie dieses Gerät zu einer bestehenden LiveSync-Einrichtung hinzufügen möchten." +"Yes, I want to set up a new synchronisation": "Ja, ich möchte eine neue Synchronisation einrichten" +"Yes, I want to add this device to my existing synchronisation": "Ja, ich möchte dieses Gerät zu meiner bestehenden Synchronisation hinzufügen" +"No, please take me back": "Nein, bitte zurück" +"Device Setup Method": "Einrichtungsmethode für das Gerät" +"You are adding this device to an existing synchronisation setup.": "Sie fügen dieses Gerät zu einer bestehenden Synchronisationseinrichtung hinzu." +"Please select a method to import the settings from another device.": "Bitte wählen Sie eine Methode, um die Einstellungen von einem anderen Gerät zu importieren." +"Use a Setup URI (Recommended)": "Setup-URI verwenden (empfohlen)" +"Paste the Setup URI generated from one of your active devices.": "Fügen Sie die Setup-URI ein, die auf einem Ihrer aktiven Geräte erzeugt wurde。" +"Scan a QR Code (Recommended for mobile)": "QR-Code scannen (für Mobilgeräte empfohlen)" +"Scan the QR code displayed on an active device using this device's camera.": "Scannen Sie den auf einem aktiven Gerät angezeigten QR-Code mit der Kamera dieses Geräts。" +"Enter the server information manually": "Serverinformationen manuell eingeben" +"Configure the same server information as your other devices again, manually, very advanced users only.": "Geben Sie dieselben Serverinformationen wie auf Ihren anderen Geräten erneut manuell ein. Nur für sehr erfahrene Benutzer。" +"Proceed with Setup URI": "Mit Setup-URI fortfahren" +"I know my server details, let me enter them": "Ich kenne meine Serverdaten, ich gebe sie selbst ein" +"Please select an option to proceed": "Bitte wählen Sie eine Option, um fortzufahren" +"Connection Method": "Verbindungsmethode" +"We will now proceed with the server configuration.": "Wir fahren nun mit der Serverkonfiguration fort。" +"How would you like to configure the connection to your server?": "Wie möchten Sie die Verbindung zu Ihrem Server konfigurieren?" +"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.": "Eine Setup-URI ist eine einzelne Zeichenfolge, die Ihre Serveradresse und Authentifizierungsdaten enthält. Wenn Ihre Serverinstallation eine URI erzeugt hat, bietet deren Verwendung eine einfache und sichere Konfiguration。" +"This is an advanced option for users who do not have a URI or who wish to configure detailed settings.": "Dies ist eine erweiterte Option für Benutzer, die keine URI haben oder detaillierte Einstellungen manuell konfigurieren möchten。" +"Enter Server Information": "Serverinformationen eingeben" +"Please select the type of server to which you are connecting.": "Bitte wählen Sie den Servertyp aus, mit dem Sie sich verbinden。" +"Continue to CouchDB setup": "Weiter zur CouchDB-Einrichtung" +"Continue to S3/MinIO/R2 setup": "Weiter zur S3/MinIO/R2-Einrichtung" +"Continue to Peer-to-Peer only setup": "Weiter zur reinen Peer-to-Peer-Einrichtung" +"This is the most suitable synchronisation method for the design. All functions are available. You must have set up a CouchDB instance.": "Dies ist die für das Design am besten geeignete Synchronisationsmethode. Alle Funktionen sind verfügbar. Sie müssen eine CouchDB-Instanz eingerichtet haben。" +"S3/MinIO/R2 Object Storage": "S3-/MinIO-/R2-Objektspeicher" +"Synchronisation utilising journal files. You must have set up an S3/MinIO/R2 compatible object storage.": "Synchronisation über Journaldateien. Sie müssen einen S3/MinIO/R2-kompatiblen Objektspeicher eingerichtet haben。" +"Peer-to-Peer only": "Nur 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.": "Diese Funktion ermöglicht die direkte Synchronisation zwischen Geräten. Es wird kein Server benötigt, aber beide Geräte müssen gleichzeitig online sein, damit synchronisiert werden kann, und einige Funktionen können eingeschränkt sein. Eine Internetverbindung wird nur für das Signalling (Erkennen von Peers) benötigt, nicht für die Datenübertragung。" +Setup: + RemoteE2EE: + Title: Ende-zu-Ende-Verschlüsselung + Guidance: Bitte konfigurieren Sie Ihre Einstellungen für die Ende-zu-Ende-Verschlüsselung. + LabelEncrypt: Ende-zu-Ende-Verschlüsselung + PlaceholderPassphrase: Geben Sie Ihre Passphrase ein + StronglyRecommendedTitle: Dringend empfohlen + StronglyRecommendedLine1: Wenn Sie die Ende-zu-Ende-Verschlüsselung aktivieren, werden Ihre Daten auf Ihrem Gerät verschlüsselt, bevor sie an den Remote-Server gesendet werden. Das bedeutet, dass selbst bei Zugriff auf den Server niemand Ihre Daten ohne die Passphrase lesen kann. Merken Sie sich Ihre Passphrase unbedingt, da sie auch auf anderen Geräten zum Entschlüsseln Ihrer Daten benötigt wird. + StronglyRecommendedLine2: >- + Bitte beachten Sie außerdem: Wenn Sie Peer-to-Peer-Synchronisation verwenden, wird diese Konfiguration auch dann genutzt, wenn Sie künftig zu anderen Methoden wechseln und sich mit einem Remote-Server verbinden. + MultiDestinationWarning: Diese Einstellung muss auch dann identisch sein, wenn Sie sich mit mehreren Synchronisationszielen verbinden. + LabelObfuscateProperties: Eigenschaften verschleiern + ObfuscatePropertiesDesc: Das Verschleiern von Eigenschaften (z. B. Dateipfad, Größe sowie Erstellungs- und Änderungsdatum) fügt eine zusätzliche Sicherheitsebene hinzu, da die Struktur und die Namen Ihrer Dateien und Ordner auf dem Remote-Server schwerer erkennbar sind. Das schützt Ihre Privatsphäre und erschwert es unbefugten Personen, Informationen über Ihre Daten abzuleiten. + AdvancedTitle: Erweitert + LabelEncryptionAlgorithm: Verschlüsselungsalgorithmus + DefaultAlgorithmDesc: In den meisten Fällen sollten Sie beim Standardalgorithmus (${algorithm}) bleiben. Diese Einstellung ist nur erforderlich, wenn Sie bereits einen Vault haben, der in einem anderen Format verschlüsselt wurde. + AlgorithmWarning: Wenn Sie den Verschlüsselungsalgorithmus ändern, können Sie nicht mehr auf Daten zugreifen, die zuvor mit einem anderen Algorithmus verschlüsselt wurden. Stellen Sie sicher, dass alle Ihre Geräte denselben Algorithmus verwenden, damit der Zugriff auf Ihre Daten erhalten bleibt. + PassphraseValidationLine1: Bitte beachten Sie, dass die Passphrase für die Ende-zu-Ende-Verschlüsselung erst geprüft wird, wenn der Synchronisationsvorgang tatsächlich beginnt. Dies ist eine Sicherheitsmaßnahme zum Schutz Ihrer Daten. + PassphraseValidationLine2: Daher bitten wir Sie, beim manuellen Konfigurieren der Serverinformationen äußerst vorsichtig zu sein. Wenn eine falsche Passphrase eingegeben wird, werden die Daten auf dem Server beschädigt. Bitte haben Sie Verständnis dafür, dass dies beabsichtigtes Verhalten ist. + ButtonProceed: Fortfahren + ButtonCancel: Abbrechen + UseSetupURI: + Title: Setup-URI eingeben + GuidanceLine1: Bitte geben Sie die Setup-URI ein, die während der Servereinrichtung oder auf einem anderen Gerät erzeugt wurde, zusammen mit der Passphrase des Vaults. + GuidanceLine2: Sie können eine neue Setup-URI erzeugen, indem Sie im Befehlsmenü den Befehl „Einstellungen als neue Setup-URI kopieren“ ausführen. + LabelSetupURI: Setup-URI + ValidInfo: Die Setup-URI ist gültig und kann verwendet werden. + InvalidInfo: Die Setup-URI ist ungültig. Bitte prüfen Sie sie und versuchen Sie es erneut. + LabelPassphrase: Vault-Passphrase + PlaceholderPassphrase: Geben Sie die Passphrase Ihres Vaults ein + ErrorPassphraseRequired: Bitte geben Sie die Passphrase des Vaults ein. + ErrorFailedToParse: Die Setup-URI konnte nicht verarbeitet werden. Bitte prüfen Sie URI und Passphrase. + ButtonProceed: Einstellungen testen und fortfahren + ButtonCancel: Abbrechen + ScanQRCode: + Title: QR-Code scannen + Guidance: Bitte folgen Sie den untenstehenden Schritten, um die Einstellungen von Ihrem vorhandenen Gerät zu importieren. + Step1: Lassen Sie auf diesem Gerät bitte diesen Vault geöffnet. + Step2: Öffnen Sie auf dem Quellgerät Obsidian. + Step3: Führen Sie auf dem Quellgerät im Befehlsmenü den Befehl „Einstellungen als QR-Code anzeigen“ aus. + Step4: Wechseln Sie auf diesem Gerät zur Kamera-App oder verwenden Sie einen QR-Code-Scanner, um den angezeigten QR-Code zu scannen. + ButtonClose: Diesen Dialog schließen +"Please enable 'Compute revisions for chunks' in settings to use Garbage Collection.": Bitte aktivieren Sie „Compute revisions for chunks“ in den Einstellungen, um die Garbage Collection zu verwenden. +"Please disable 'Read chunks online' in settings to use Garbage Collection.": Bitte deaktivieren Sie „Read chunks online“ in den Einstellungen, um die Garbage Collection zu verwenden. +"Setup URI dialog cancelled.": Setup-URI-Dialog abgebrochen. +"Please select 'Cancel' explicitly to cancel this operation.": Bitte wählen Sie ausdrücklich „Abbrechen“, um diesen Vorgang abzubrechen. +"Failed to connect to remote for compaction.": Verbindung zur Remote-Datenbank für die Komprimierung fehlgeschlagen. +"Failed to connect to remote for compaction. ${reason}": Verbindung zur Remote-Datenbank für die Komprimierung fehlgeschlagen. ${reason} +"Compaction in progress on remote database...": Komprimierung auf der Remote-Datenbank läuft... +"Compaction on remote database timed out.": Die Komprimierung auf der Remote-Datenbank hat eine Zeitüberschreitung erreicht. +"Compaction on remote database completed successfully.": Die Komprimierung auf der Remote-Datenbank wurde erfolgreich abgeschlossen. +"Compaction on remote database failed.": Die Komprimierung auf der Remote-Datenbank ist fehlgeschlagen. +"Failed to start one-shot replication before Garbage Collection. Garbage Collection Cancelled.": Die Einmal-Replikation vor der Garbage Collection konnte nicht gestartet werden. Die Garbage Collection wurde abgebrochen. +"Cancel Garbage Collection": Garbage Collection abbrechen +"No connected device information found. Cancelling Garbage Collection.": Keine Informationen zu verbundenen Geräten gefunden. Garbage Collection wird abgebrochen. +"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.": |- + Für die folgenden akzeptierten Knoten fehlen die Knoteninformationen: + - ${missingNodes} + + Das deutet darauf hin, dass sie seit einiger Zeit nicht verbunden waren oder noch eine ältere Version verwenden. + Es ist nach Möglichkeit besser, zunächst alle Geräte zu aktualisieren. Wenn Sie Geräte haben, die nicht mehr verwendet werden, können Sie alle akzeptierten Knoten löschen, indem Sie die Remote-Datenbank einmal sperren. +"Ignore and Proceed": Ignorieren und fortfahren +"Node Information Missing": Knoteninformationen fehlen +"Garbage Collection cancelled by user.": Garbage Collection wurde vom Benutzer abgebrochen. +"Proceeding with Garbage Collection, ignoring missing nodes.": Garbage Collection wird fortgesetzt, fehlende Knoten werden ignoriert. +"Proceed Garbage Collection": Garbage Collection fortsetzen +"> [!INFO]- The connected devices have been detected as follows:\n${devices}": |- + > [!INFO]- Die folgenden verbundenen Geräte wurden erkannt: + ${devices} +"Device": Gerät +"Node ID": Knoten-ID +"Obsidian version": Obsidian-Version +"Plug-in version": Plugin-Version +"Progress": Fortschritt +"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.": |- + Einige Geräte haben unterschiedliche Fortschrittswerte (max: ${maxProgress}, min: ${minProgress}). + Das kann darauf hindeuten, dass einige Geräte die Synchronisation noch nicht abgeschlossen haben, was zu Konflikten führen könnte. Es wird dringend empfohlen, vor dem Fortfahren zu bestätigen, dass alle Geräte synchronisiert sind. +"All devices have the same progress value (${progress}). Your devices seem to be synchronised. And be able to proceed with Garbage Collection.": Alle Geräte haben denselben Fortschrittswert (${progress}). Ihre Geräte scheinen synchronisiert zu sein. Die Garbage Collection kann fortgesetzt werden. +"Garbage Collection Confirmation": Bestätigung der Garbage Collection +"Proceeding with Garbage Collection.": Garbage Collection wird ausgeführt. +"Garbage Collection: Scanned ${scanned} / ~${docCount}": |- + Garbage Collection: ${scanned} / ~${docCount} gescannt +"Garbage Collection: Scanning completed. Total chunks: ${totalChunks}, Used chunks: ${usedChunks}": |- + Garbage Collection: Scan abgeschlossen. Gesamtzahl der Chunks: ${totalChunks}, verwendete Chunks: ${usedChunks} +"Garbage Collection: Found ${unusedChunks} unused chunks to delete.": |- + Garbage Collection: ${unusedChunks} ungenutzte Chunks zum Löschen gefunden. +"Garbage Collection completed. Deleted chunks: ${deletedChunks} / ${totalChunks}. Time taken: ${seconds} seconds.": |- + Garbage Collection abgeschlossen. Gelöschte Chunks: ${deletedChunks} / ${totalChunks}. Benötigte Zeit: ${seconds} Sekunden. +"Failed to start replication after Garbage Collection.": Die Replikation nach der Garbage Collection konnte nicht gestartet werden. diff --git a/src/common/messagesYAML/en.yaml b/src/common/messagesYAML/en.yaml new file mode 100644 index 00000000..78b8d04f --- /dev/null +++ b/src/common/messagesYAML/en.yaml @@ -0,0 +1,1963 @@ +(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) +(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) +(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. +Access Key: Access Key +Activate: Activate +Active Remote Configuration: Active Remote Configuration +Add default patterns: Add default patterns +Add new connection: Add new connection +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 Latest Change if Conflicting: Apply Latest Change if Conflicting +Apply preset configuration: Apply preset configuration +Ask a passphrase at every launch: Ask a passphrase at every launch +Automatically Sync all files when opening Obsidian.: Automatically Sync all files when opening Obsidian. +Back: Back +Back to non-configured: Back to non-configured +Batch database update: Batch database update +Batch limit: Batch limit +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. +Bucket Name: Bucket Name +Cancel: Cancel +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. +cmdConfigSync: + showCustomizationSync: Show Customization sync +Comma separated `.gitignore, .dockerignore`: Comma separated `.gitignore, .dockerignore` +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) +Compatibility (Internal API Usage): Compatibility (Internal API Usage) +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 Encryption: Configuration Encryption +Configure: Configure +Configure And Change Remote: Configure And Change Remote +Configure E2EE: Configure E2EE +Configure Remote: Configure Remote +Copy: Copy +Copy Report to clipboard: Copy Report to clipboard +CouchDB Connection Tweak: CouchDB Connection Tweak +Cross-platform: Cross-platform +"Current adapter: {adapter}": "Current adapter: {adapter}" +Customization Sync: Customization Sync +Customization Sync (Beta3): Customization Sync (Beta3) +Data Compression: Data Compression +Database -> Storage: Database -> Storage +Database Adapter: Database Adapter +Database Name: Database Name +Database suffix: Database suffix +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 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}'? +desktop: desktop +Developer: Developer +Device name: Device name +dialog: + yourLanguageAvailable: + _value: >- + Self-hosted LiveSync had translations for your language, so the %{Display + language} setting was enabled. + + + Note: Not all messages are translated. We are waiting for your + contributions! + + Note 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. + + May you find it easy to use! + btnRevertToDefault: Keep %{lang-def} + Title: " Translation is available!" +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. +Display Language: Display Language +Display name: Display name +Do not check configuration mismatch before replication: Do not check configuration mismatch before replication +Do not keep metadata of deleted files.: Do not keep metadata of deleted files. +Do not split chunks in the background: Do not split chunks in the background +Do not use internal API: Do not use internal API +Doctor: + Button: + DismissThisVersion: No, and do not ask again until the next release + Fix: Fix it + FixButNoRebuild: Fix it but no rebuild + No: No + Skip: Leave it as is + Yes: Yes + Dialogue: + Main: >- + Hi! Config Doctor has been activated because of ${activateReason}! + + And, unfortunately some configurations were detected as potential + problems. + + Please be assured. Let's solve them one by one. + + + To let you know ahead of time, we will ask you about the following items. + + + ${issues} + + + Shall we get started? + MainFix: |- + + ## ${name} + + | Current | Ideal | + |:---:|:---:| + | ${current} | ${ideal} | + + **Recommendation Level:** ${level} + + ### Why this has been detected? + + ${reason} + + ${note} + + Fix this to the ideal value? + Title: Self-hosted LiveSync Config Doctor + TitleAlmostDone: Almost done! + TitleFix: Fix issue ${current}/${total} + Level: + Must: Must + Necessary: Necessary + Optional: Optional + Recommended: Recommended + Message: + NoIssues: No issues detected! + RebuildLocalRequired: Attention! A local database rebuild is required to apply this! + RebuildRequired: Attention! A rebuild is required to apply this! + SomeSkipped: We left some issues as is. Shall I ask you again on next startup? + RULES: + E2EE_V02500: + REASON: The End-to-End Encryption has got now more robust and faster. Also + because, the previous E2EE was found to be compromised in a re-conducted + code review. It should be applied as soon as possible. Really apologises + for your inconvenience. And, this setting is not forward compatible. All + synchronised devices must be updated to v0.25.0 or higher. Rebuilds are + not required and will be converted from the new transfer to the new + format, However, it is recommended to rebuild whenever possible. +Document History: Document History +Duplicate: Duplicate +Duplicate remote: Duplicate remote +E2EE Configuration: E2EE Configuration +Edge case addressing (Behaviour): Edge case addressing (Behaviour) +Edge case addressing (Database): Edge case addressing (Database) +Edge case addressing (Processing): Edge case addressing (Processing) +Emergency restart: Emergency restart +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 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 +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 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 +Export: Export +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 +File to resolve conflict: File to resolve conflict +File to view History: File to view History +Filename: Filename +Flag and restart: Flag and restart +Forces the file to be synced when opened.: Forces the file to be synced when opened. +Fresh Start Wipe: Fresh Start Wipe +Garbage Collection V3 (Beta): Garbage Collection V3 (Beta) +Handle files as Case-Sensitive: Handle files as Case-Sensitive +Hidden Files: Hidden Files +Hide completely: Hide completely +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. +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. +If enabled, newly created chunks are temporarily kept within the document, and graduated to become independent chunks once stabilised.: + If enabled, newly created chunks are temporarily kept within the document, and + graduated to become independent chunks once stabilised. +If enabled, the ⛔ icon will be shown inside the status instead of the file warnings banner. No details will be shown.: + If enabled, the ⛔ icon will be shown inside the status instead of the file + warnings banner. No details will be shown. +If enabled, the file under 1kb will be processed in the UI thread.: If enabled, the file under 1kb will be processed in the UI thread. +If enabled, the notification of hidden files change will be suppressed.: If enabled, the notification of hidden files change will be suppressed. +If this enabled, all chunks will be stored with the revision made from its content. (Previous behaviour): + If this enabled, all chunks will be stored with the revision made from its + content. (Previous behaviour) +If this enabled, All files are handled as case-Sensitive (Previous behaviour).: If this enabled, All files are handled as case-Sensitive (Previous behaviour). +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 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. +Ignore files: Ignore files +Ignore patterns: Ignore patterns +Import connection: Import connection +Incubate Chunks in Document: Incubate Chunks in Document +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) +K: + exp: Experimental + long_p2p_sync: "%{title_p2p_sync}" + P2P: "%{Peer}-to-%{Peer}" + Peer: Peer + ScanCustomization: Scan customization + short_p2p_sync: P2P Sync + title_p2p_sync: Peer-to-Peer Sync +Keep empty folder: Keep empty folder +lang_def: Default +lang-de: Deutsche +lang-def: "%{lang_def}" +lang-es: Español +lang-fr: Français +lang-he: Hebrew +lang-ja: 日本語 +lang-ko: 한국어 +lang-ru: Русский +lang-zh: 简体中文 +lang-zh-tw: 繁體中文 +Later: Later +"Limit: {datetime} ({timestamp})": "Limit: {datetime} ({timestamp})" +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... + cantReplicateLowerValue: We can't replicate more lower value. + checkingLastSyncPoint: Looking for the point last synchronized point. + couldNotConnectTo: |- + Could not connect to ${uri} : ${name} + (${db}) + couldNotConnectToRemoteDb: "Could not connect to remote database: ${d}" + couldNotConnectToServer: The connection to the remote has been prevented, or failed. + couldNotConnectToURI: Could not connect to ${uri}:${dbRet} + couldNotMarkResolveRemoteDb: Could not mark resolve remote database. + liveSyncBegin: LiveSync begin... + lockRemoteDb: Lock remote database to prevent data corruption + markDeviceResolved: Mark this device as 'resolved'. + oneShotSyncBegin: OneShot Sync begin... (${syncMode}) + remoteDbCorrupted: Remote database is newer or corrupted, make sure to latest + version of self-hosted-livesync installed + remoteDbCreatedOrConnected: Remote Database Created or Connected + remoteDbDestroyed: Remote Database Destroyed + remoteDbDestroyError: "Something happened on Remote Database Destroy:" + remoteDbMarkedResolved: Remote database has been marked resolved. + replicationClosed: Replication closed + replicationInProgress: Replication is already in progress + retryLowerBatchSize: Retry with lower batch size:${batch_size}/${batches_limit} + unlockRemoteDb: Unlock remote database to prevent data corruption + mismatchedTweakDetected: Some mismatches have been detected in the configuration between devices. Running a manual replication will attempt to resolve this issue. +liveSyncSetting: + errorNoSuchSettingItem: "No such setting item: ${key}" + originalValue: "Original: ${value}" + valueShouldBeInRange: The value should ${min} < value < ${max} +liveSyncSettings: + btnApply: Apply +Local Database Tweak: Local Database Tweak +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. +logPane: + autoScroll: Auto scroll + logWindowOpened: Log window opened + pause: Pause + title: Self-hosted LiveSync Log + wrap: Wrap +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 +Maximum Incubating Chunks: Maximum Incubating Chunks +Maximum Incubation Period: Maximum Incubation Period +MB (0 to disable).: MB (0 to disable). +Memory cache: Memory cache +Memory cache size (by total characters): Memory cache size (by total characters) +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 +moduleCheckRemoteSize: + logCheckingStorageSizes: Checking storage sizes + logCurrentStorageSize: "Remote storage size: ${measuredSize}" + logExceededWarning: "Remote storage size: ${measuredSize} exceeded ${notifySize}" + logThresholdEnlarged: Threshold has been enlarged to ${size}MB + msgConfirmRebuild: This may take a bit of a long time. Do you really want to + rebuild everything now? + msgDatabaseGrowing: | + **Your database is getting larger!** But do not worry, we can address it now. The time before running out of space on the remote storage. + + | Measured size | Configured size | + | --- | --- | + | ${estimatedSize} | ${maxSize} | + + > [!MORE]- + > If you have been using it for many years, there may be unreferenced chunks - that is, garbage - accumulating in the database. Therefore, we recommend rebuilding everything. It will probably become much smaller. + > + > If the volume of your vault is simply increasing, it is better to rebuild everything after organizing the files. Self-hosted LiveSync does not delete the actual data even if you delete it to speed up the process. It is roughly [documented](https://github.com/vrtmrz/obsidian-livesync/blob/main/docs/tech_info.md). + > + > If you don't mind the increase, you can increase the notification limit by 100MB. This is the case if you are running it on your own server. However, it is better to rebuild everything from time to time. + > + + > [!WARNING] + > If you perform rebuild everything, make sure all devices are synchronised. The plug-in will merge as much as possible, though. + msgSetDBCapacity: > + We can set a maximum database capacity warning, **to take action before + running out of space on the remote storage**. + + Do you want to enable this? + + + > [!MORE]- + + > - 0: Do not warn about storage size. + + > This is recommended if you have enough space on the remote storage + especially you have self-hosted. And you can check the storage size and + rebuild manually. + + > - 800: Warn if the remote storage size exceeds 800MB. + + > This is recommended if you are using fly.io with 1GB limit or IBM + Cloudant. + + > - 2000: Warn if the remote storage size exceeds 2GB. + + + If we have reached the limit, we will be asked to enlarge the limit step by + step. + noticeExceeded: Remote storage size is ${measuredSize}, above the configured + ${notifySize} notification threshold. {HERE} + noticeNotConfigured: Remote storage size notifications are not configured. + {HERE} + option2GB: 2GB (Standard) + option800MB: 800MB (Cloudant, fly.io) + optionAskMeLater: Ask me later + optionDismiss: Dismiss + optionIncreaseLimit: increase to ${newMax}MB + optionNoWarn: No, never warn please + optionReview: Review options + optionRebuildAll: Rebuild Everything Now + titleDatabaseSizeLimitExceeded: Remote storage size exceeded the limit + titleDatabaseSizeNotify: Setting up database size notification +moduleInputUIObsidian: + defaultTitleConfirmation: Confirmation + defaultTitleSelect: Select + optionNo: No + optionYes: Yes +moduleLiveSyncMain: + logAdditionalSafetyScan: Additional safety scan... + logLoadingPlugin: Loading plugin... + logPluginInitCancelled: Plugin initialisation was cancelled by a module + logPluginVersion: Self-hosted LiveSync v${manifestVersion} ${packageVersion} + logReadChangelog: LiveSync has updated, please read the changelog! + logSafetyScanCompleted: Additional safety scan completed + logSafetyScanFailed: Additional safety scan has failed on a module + logUnloadingPlugin: Unloading plugin... + logVersionUpdate: LiveSync has been updated, In case of breaking updates, all + automatic synchronization has been temporarily disabled. Ensure that all + devices are up to date before enabling. + msgScramEnabled: > + Self-hosted LiveSync has been configured to ignore some events. Is this + correct? + + + | Type | Status | Note | + + |:---:|:---:|---| + + | Storage Events | ${fileWatchingStatus} | Every modification will be + ignored | + + | Database Events | ${parseReplicationStatus} | Every synchronised change + will be postponed | + + + Do you want to resume them and restart Obsidian? + + + > [!DETAILS]- + + > These flags are set by the plug-in while rebuilding, or fetching. If the + process ends abnormally, it may be kept unintended. + + > If you are not sure, you can try to rerun these processes. Make sure to + back your vault up. + optionKeepLiveSyncDisabled: Keep LiveSync disabled + optionResumeAndRestart: Resume and restart Obsidian + titleScramEnabled: Scram Enabled +moduleLocalDatabase: + logWaitingForReady: Waiting for ready... +moduleLog: + showLog: Show Log +moduleMigration: + docUri: https://github.com/vrtmrz/obsidian-livesync/blob/main/README.md#how-to-use + fix0256: + buttons: + checkItLater: Check it later + DismissForever: I have fixed it, and do not ask again + fix: Fix + message: > + Due to a recent bug (in v0.25.6), some files may not have been saved + correctly in the sync database. + + We have scanned our files and found some that need to be fixed. + + + **Files ready to be fixed:** + + + ${files} + + + These files have size-matched original file on the storage, and are likely + to be recoverable. + + We can use them to fix the database, please click the "Fix" button below + to fix them. + + + ${messageUnrecoverable} + + + If you want to run it again, you can do so from Hatch. + messageUnrecoverable: > + **Files cannot be fixed on this device:** + + + ${filesNotRecoverable} + + + These files have inconsistent metadata, and cannot be fixed on this device + (mostly we cannot determine which is correct). + + To restore them, please check your other devices (also by this feature) or + restore them manually from a backup. + title: Broken files has been detected + insecureChunkExist: + buttons: + fetch: I already rebuilt the remote. Fetch from the remote + later: I will do it later + rebuild: Rebuild Everything + laterMessage: We strongly recommend to treat this as soon as possible! + message: > + Some chunks are not securely stored and are not encrypted in databases. + + **Please rebuild the database to fix this issue**. + + + If your Remote Database is not configured with SSL, or using less-secure + credentials, **you are at risk of exposing sensitive data**. + + + Note: Please upgrade your Self-hosted LiveSync v0.25.6 or higher on all + your devices, and back your vault up surely. + + Note2: Rebuild Everything and Fetch consumes a bit of time and traffic, + please do it in off-peak hours and ensure a stable network connection. + title: Insecure chunks found! + logBulkSendCorrupted: Send chunks in bulk has been enabled, however, this + feature had been corrupted. Sorry for your inconvenience. Automatically + disabled. + logFetchRemoteTweakFailed: Failed to fetch remote tweak values + logLocalDatabaseNotReady: Something went wrong! The local database is not ready + logMigratedSameBehaviour: Migrated to db:${current} with the same behaviour as before + logMigrationFailed: Migration failed or cancelled from ${old} to ${current} + logRedflag2CreationFail: Failed to create redflag2 + logRemoteTweakUnavailable: Could not get remote tweak values + logSetupCancelled: The setup has been cancelled, Self-hosted LiveSync waiting for your setup! + msgFetchRemoteAgain: >- + As you may already know, the self-hosted LiveSync has changed its default + behaviour and database structure. + + + And thankfully, with your time and efforts, the remote database appears to + have already been migrated. Congratulations! + + + However, we need a bit more. The configuration of this device is not + compatible with the remote database. We will need to fetch the remote + database again. Should we fetch from the remote again now? + + + ___Note: We cannot synchronise until the configuration has been changed and + the database has been fetched again.___ + + ___Note2: The chunks are completely immutable, we can fetch only the + metadata and difference.___ + msgInitialSetup: >- + Your device has **not been set up yet**. Let me guide you through the setup + process. + + + Please keep in mind that every dialogue content can be copied to the + clipboard. If you need to refer to it later, you can paste it into a note in + Obsidian. You can also translate it into your language using a translation + tool. + + + First, do you have **Setup URI**? + + + Note: If you do not know what it is, please refer to the + [documentation](${URI_DOC}). + msgRecommendSetupUri: >- + We strongly recommend that you generate a set-up URI and use it. + + If you do not have knowledge about it, please refer to the + [documentation](${URI_DOC}) (Sorry again, but it is important). + + + How do you want to set it up manually? + msgSinceV02321: >- + Since v0.23.21, the self-hosted LiveSync has changed the default behaviour + and database structure. The following changes have been made: + + + 1. **Case sensitivity of filenames** + The handling of filenames is now case-insensitive. This is a beneficial change for most platforms, other than Linux and iOS, which do not manage filename case sensitivity effectively. + (On These, a warning will be displayed for files with the same name but different cases). + + 2. **Revision handling of the chunks** + Chunks are immutable, which allows their revisions to be fixed. This change will enhance the performance of file saving. + + ___However, to enable either of these changes, both remote and local + databases need to be rebuilt. This process takes a few minutes, and we + recommend doing it when you have ample time.___ + + + - If you wish to maintain the previous behaviour, you can skip this process + by using `${KEEP}`. + + - If you do not have enough time, please choose `${DISMISS}`. You will be + prompted again later. + + - If you have rebuilt the database on another device, please select + `${DISMISS}` and try synchronizing again. Since a difference has been + detected, you will be prompted again. + optionAdjustRemote: Adjust to remote + optionDecideLater: Decide it later + optionEnableBoth: Enable both + optionEnableFilenameCaseInsensitive: "Enable only #1" + optionEnableFixedRevisionForChunks: "Enable only #2" + optionHaveSetupUri: Yes, I have + optionKeepPreviousBehaviour: Keep previous behaviour + optionManualSetup: Set it up all manually + optionNoAskAgain: No, please ask again + optionNoSetupUri: No, I do not have + optionRemindNextLaunch: Remind me at the next launch + optionSetupViaP2P: Use %{short_p2p_sync} to set up + optionSetupWizard: Take me into the setup wizard + optionYesFetchAgain: Yes, fetch again + titleCaseSensitivity: Case Sensitivity + titleRecommendSetupUri: Recommendation to use Setup URI + titleWelcome: Welcome to Self-hosted LiveSync +moduleObsidianMenu: + replicate: Replicate +More actions: More actions +Move remotely deleted files to the trash, instead of deleting.: Move remotely deleted files to the trash, instead of deleting. +Network warning style: Network warning style +New Remote: New Remote +No limit configured: No limit configured +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. +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. +obsidianLiveSyncSettingTab: + btnApply: Apply + btnCheck: Check + btnCopy: Copy + btnDisable: Disable + btnDiscard: Discard + btnEnable: Enable + btnFix: Fix + btnGotItAndUpdated: I got it and updated. + btnNext: Next + btnStart: Start + btnTest: Test + btnUse: Use + buttonFetch: Fetch + buttonNext: Next + defaultLanguage: Default + descConnectSetupURI: This is the recommended method to set up Self-hosted + LiveSync with a Setup URI. + descCopySetupURI: Perfect for setting up a new device! + descEnableLiveSync: Only enable this after configuring either of the above two + options or completing all configuration manually. + descFetchConfigFromRemote: Fetch necessary settings from already configured remote server. + descManualSetup: Not recommended, but useful if you don't have a Setup URI + descTestDatabaseConnection: Open database connection. If the remote database is + not found and you have permission to create a database, the database will be + created. + descValidateDatabaseConfig: Checks and fixes any potential issues with the database config. + errAccessForbidden: ❗ Access forbidden. + errCannotContinueTest: We could not continue the test. + errCorsCredentials: ❗ cors.credentials is wrong + errCorsNotAllowingCredentials: ❗ CORS is not allowing credentials + errCorsOrigins: ❗ cors.origins is wrong + errEnableCors: ❗ httpd.enable_cors is wrong + errEnableCorsChttpd: ❗ chttpd.enable_cors is wrong + errMaxDocumentSize: ❗ couchdb.max_document_size is low) + errMaxRequestSize: ❗ chttpd.max_http_request_size is low) + errMissingWwwAuth: ❗ httpd.WWW-Authenticate is missing + errRequireValidUser: ❗ chttpd.require_valid_user is wrong. + errRequireValidUserAuth: ❗ chttpd_auth.require_valid_user is wrong. + labelDisabled: "⏹️ : Disabled" + labelEnabled: "🔁 : Enabled" + levelAdvanced: " (Advanced)" + levelEdgeCase: " (Edge Case)" + levelPowerUser: " (Power User)" + linkOpenInBrowser: Open in browser + linkPageTop: Page Top + linkTipsAndTroubleshooting: Tips and Troubleshooting + linkTroubleshooting: /docs/troubleshooting.md + logCannotUseCloudant: This feature cannot be used with IBM Cloudant. + logCheckingConfigDone: Checking configuration done + logCheckingConfigFailed: Checking configuration failed + logCheckingDbConfig: Checking database configuration + logCheckPassphraseFailed: |- + ERROR: Failed to check passphrase with the remote server: + ${db}. + logConfiguredDisabled: "Configured synchronization mode: DISABLED" + logConfiguredLiveSync: "Configured synchronization mode: LiveSync" + logConfiguredPeriodic: "Configured synchronization mode: Periodic" + logCouchDbConfigFail: "CouchDB Configuration: ${title} failed" + logCouchDbConfigSet: "CouchDB Configuration: ${title} -> Set ${key} to ${value}" + logCouchDbConfigUpdated: "CouchDB Configuration: ${title} successfully updated" + logDatabaseConnected: Database connected + logEncryptionNoPassphrase: You cannot enable encryption without a passphrase + logEncryptionNoSupport: Your device does not support encryption. + logErrorOccurred: An error occurred!! + logEstimatedSize: "Estimated size: ${size}" + logPassphraseInvalid: Passphrase is not valid, please fix it. + logPassphraseNotCompatible: "ERROR: Passphrase is not compatible with the remote + server! Please check it again!" + logRebuildNote: Syncing has been disabled, fetch and re-enabled if desired. + logSelectAnyPreset: Select any preset. + logServerConfigurationCheck: obsidianLiveSyncSettingTab.logServerConfigurationCheck + msgAreYouSureProceed: Are you sure to proceed? + msgChangesNeedToBeApplied: Changes need to be applied! + msgConfigCheck: --Config check-- + msgConfigCheckFailed: The configuration check has failed. Do you want to continue anyway? + msgConnectionCheck: --Connection check-- + msgConnectionProxyNote: If you're having trouble with the Connection-check (even + after checking config), please check your reverse proxy configuration. + msgCurrentOrigin: "Current origin: ${origin}" + msgDiscardConfirmation: Do you really want to discard existing settings and databases? + msgDone: --Done-- + msgEnableCors: Set httpd.enable_cors + msgEnableCorsChttpd: Set chttpd.enable_cors + msgEnableEncryptionRecommendation: We recommend enabling End-To-End Encryption, + and Path Obfuscation. Are you sure you want to continue without encryption? + msgFetchConfigFromRemote: Do you want to fetch the config from the remote server? + msgGenerateSetupURI: All done! Do you want to generate a setup URI to set up other devices? + msgIfConfigNotPersistent: If the server configuration is not persistent (e.g., + running on docker), the values here may change. Once you are able to + connect, please update the settings in the server's local.ini. + msgInvalidPassphrase: Your encryption passphrase might be invalid. Are you sure + you want to continue? + msgNewVersionNote: Here due to an upgrade notification? Please review the + version history. If you're satisfied, click the button. A new update will + prompt this again. + msgNonHTTPSInfo: Configured as non-HTTPS URI. Be warned that this may not work + on mobile devices. + msgNonHTTPSWarning: Cannot connect to non-HTTPS URI. Please update your config and try again. + msgNotice: ---Notice--- + msgObjectStorageWarning: >- + WARNING: This feature is a Work In Progress, so please keep in mind the + following: + + - Append only architecture. A rebuild is required to shrink the storage. + + - A bit fragile. + + - When first syncing, all history will be transferred from the remote. Be + mindful of data caps and slow speeds. + + - Only differences are synced live. + + + If you run into any issues, or have ideas about this feature, please create + a issue on GitHub. + + I appreciate you for your great dedication. + msgOriginCheck: "Origin check: ${org}" + msgRebuildRequired: >- + Rebuilding Databases are required to apply the changes.. Please select the + method to apply the changes. + + +
+ + Legends + + + | Symbol | Meaning | + + |: ------ :| ------- | + + | ⇔ | Up to Date | + + | ⇄ | Synchronise to balance | + + | ⇐,⇒ | Transfer to overwrite | + + | ⇠,⇢ | Transfer to overwrite from other side | + + +
+ + + ## ${OPTION_REBUILD_BOTH} + + At a glance: 📄 ⇒¹ 💻 ⇒² 🛰️ ⇢ⁿ 💻 ⇄ⁿ⁺¹ 📄 + + Reconstruct both the local and remote databases using existing files from + this device. + + This causes a lockout other devices, and they need to perform fetching. + + ## ${OPTION_FETCH} + + At a glance: 📄 ⇄² 💻 ⇐¹ 🛰️ ⇔ 💻 ⇔ 📄 + + Initialise the local database and reconstruct it using data fetched from the + remote database. + + This case includes the case which you have rebuilt the remote database. + + ## ${OPTION_ONLY_SETTING} + + Store only the settings. **Caution: This may lead to data corruption**; + database reconstruction is generally necessary. + msgSelectAndApplyPreset: Please select and apply any preset item to complete the wizard. + msgSetCorsCredentials: Set cors.credentials + msgSetCorsOrigins: Set cors.origins + msgSetMaxDocSize: Set couchdb.max_document_size + msgSetMaxRequestSize: Set chttpd.max_http_request_size + msgSetRequireValidUser: Set chttpd.require_valid_user = true + msgSetRequireValidUserAuth: Set chttpd_auth.require_valid_user = true + msgSettingModified: The setting "${setting}" was modified from another device. + Click {HERE} to reload settings. Click elsewhere to ignore changes. + msgSettingsUnchangeableDuringSync: These settings are unable to be changed + during synchronization. Please disable all syncing in the "Sync Settings" to + unlock. + msgSetWwwAuth: Set httpd.WWW-Authenticate + nameApplySettings: Apply Settings + nameConnectSetupURI: Connect with Setup URI + nameCopySetupURI: Copy the current settings to a Setup URI + nameDisableHiddenFileSync: Disable Hidden files sync + nameDiscardSettings: Discard existing settings and databases + nameEnableHiddenFileSync: Enable Hidden files sync + nameEnableLiveSync: Enable LiveSync + nameHiddenFileSynchronization: Hidden file synchronization + nameManualSetup: Manual Setup + nameTestConnection: Test Connection + nameTestDatabaseConnection: Test Database Connection + nameValidateDatabaseConfig: Validate Database Configuration + okAdminPrivileges: ✔ You have administrator privileges. + okCorsCredentials: ✔ cors.credentials is ok. + okCorsCredentialsForOrigin: CORS credentials OK + okCorsOriginMatched: ✔ CORS origin OK + okCorsOrigins: ✔ cors.origins is ok. + okEnableCors: ✔ httpd.enable_cors is ok. + okEnableCorsChttpd: ✔ chttpd.enable_cors is ok. + okMaxDocumentSize: ✔ couchdb.max_document_size is ok. + okMaxRequestSize: ✔ chttpd.max_http_request_size is ok. + okRequireValidUser: ✔ chttpd.require_valid_user is ok. + okRequireValidUserAuth: ✔ chttpd_auth.require_valid_user is ok. + okWwwAuth: ✔ httpd.WWW-Authenticate is ok. + optionApply: Apply + optionCancel: Cancel + optionCouchDB: CouchDB + optionDisableAllAutomatic: Disable all automatic + optionFetchFromRemote: Fetch from Remote + optionHere: HERE + optionLiveSync: LiveSync + optionMinioS3R2: Minio,S3,R2 + optionOkReadEverything: OK, I have read everything. + optionOnEvents: On events + optionPeriodicAndEvents: Periodic and on events + optionPeriodicWithBatch: Periodic w/ batch + optionRebuildBoth: Rebuild Both from This Device + optionSaveOnlySettings: (Danger) Save Only Settings + panelChangeLog: Change Log + panelGeneralSettings: General Settings + panelPrivacyEncryption: Privacy & Encryption + panelRemoteConfiguration: Remote Configuration + panelSetup: Setup + serverVersion: "Server info: ${info}" + titleActiveRemoteServer: Active Remote Server + titleAppearance: Appearance + titleConflictResolution: Conflict resolution + titleCongratulations: Congratulations! + titleCouchDB: CouchDB + titleDeletionPropagation: Deletion Propagation + titleEncryptionNotEnabled: Encryption is not enabled + titleEncryptionPassphraseInvalid: Encryption Passphrase Invalid + titleExtraFeatures: Enable extra and advanced features + titleFetchConfig: Fetch Config + titleFetchConfigFromRemote: Fetch config from remote server + titleFetchSettings: Fetch Settings + titleHiddenFiles: Hidden Files + titleLogging: Logging + titleMinioS3R2: Minio,S3,R2 + titleNotification: Notification + titleOnlineTips: Online Tips + titleQuickSetup: Quick Setup + titleRebuildRequired: Rebuild Required + titleRemoteConfigCheckFailed: Remote Configuration Check Failed + titleRemoteServer: Remote Server + titleReset: Reset + titleSetupOtherDevices: To setup other devices + titleSynchronizationMethod: Synchronization Method + titleSynchronizationPreset: Synchronization Preset + titleSyncSettings: Sync Settings + titleSyncSettingsViaMarkdown: Sync Settings via Markdown + titleUpdateThinning: Update Thinning + warnCorsOriginUnmatched: ⚠ CORS Origin is unmatched ${from}->${to} + warnNoAdmin: ⚠ You do not have administrator privileges. +Ok: Ok +Old Algorithm: Old Algorithm +Older fallback (Slow, W/O WebAssembly): Older fallback (Slow, W/O WebAssembly) +Open: Open +Open the dialog: Open the dialog +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: + AskPassphraseForDecrypt: The remote peer shared the configuration. Please input + the passphrase to decrypt the configuration. + 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. + DisabledButNeed: "%{title_p2p_sync} is disabled. Do you really want to enable it?" + FailedToOpen: Failed to open P2P connection to the signalling server. + NoAutoSyncPeers: No auto-sync peers found. Please set peers on the %{long_p2p_sync} pane. + NoKnownPeers: No peers has been detected, waiting incoming other peers... + Note: + description: >2- + This replicator allows us to synchronise our vault with other devices + using a peer-to-peer connection. We can use this to synchronise our vault + with our other devices without using a cloud service. + + This replicator is based on Trystero. It also uses a signalling server to + establish a connection between devices. The signalling server is used to + exchange connection information between devices. It does (or,should) not + know or store any of our data. + + + The signalling server can be hosted by anyone. This is just a Nostr relay. + For the sake of simplicity and checking the behaviour of the replicator, + an instance of the signalling server is hosted by vrtmrz. You can use the + experimental server provided by vrtmrz, or you can use any other server. + + + By the way, even if the signalling server does not store our data, it can + see the connection information of some of our devices. Please be aware of + this. Also, be cautious when using the server provided by someone else. + important_note: Peer-to-Peer Replicator. + important_note_sub: This feature is still on the bleeding edge. Please be aware + that ensure your data is backed up before using this feature. And, we + would be so happy if you could contribute to the development of this + feature. + Summary: What is this feature? (and some important notes, please read once) + NotEnabled: "%{title_p2p_sync} is not enabled. We cannot open a new connection." + P2PReplication: "%{P2P} Replication" + PaneTitle: "%{long_p2p_sync}" + ReplicatorInstanceMissing: P2P Sync replicator is not found, possibly not have + been configured or enabled. + SeemsOffline: Peer ${name} seems offline, skipped. + SyncAlreadyRunning: P2P Sync is already running. + SyncCompleted: P2P Sync completed. + SyncStartedWith: P2P Sync with ${name} have been started. +paneMaintenance: + markDeviceResolvedAfterBackup: paneMaintenance.markDeviceResolvedAfterBackup + remoteLockedAndDeviceNotAccepted: paneMaintenance.remoteLockedAndDeviceNotAccepted + remoteLockedResolvedDevice: paneMaintenance.remoteLockedResolvedDevice + unlockDatabaseReady: paneMaintenance.unlockDatabaseReady +Passphrase: Passphrase +Passphrase of sensitive configuration items: Passphrase of sensitive configuration items +password: password +Password: Password +Paste a connection string: Paste a connection string +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-to-Peer Synchronisation: Peer-to-Peer Synchronisation +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 +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 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 +Prepare the 'report' to create an issue: Prepare the 'report' to create an issue +Presets: Presets +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) +Purge all download/upload cache.: Purge all download/upload cache. +Purge all journal counter: Purge all journal counter +Rebuild local and remote database with local files.: Rebuild local and remote database with local files. +Rebuilding Operations (Remote Only): Rebuilding Operations (Remote Only) +Recovery and Repair: Recovery and Repair +Recreate all: Recreate all +Recreate missing chunks for all files: Recreate missing chunks for all files +RedFlag: + Fetch: + Method: + Desc: >- + How do you want to fetch? + + - %{RedFlag.Fetch.Method.FetchSafer}. + **Low Traffic**, **High CPU**, **Low Risk** + Recommended if ... + - Files possibly inconsistent + - Files were not so much + - %{RedFlag.Fetch.Method.FetchSmoother}. + **Low Traffic**, **Moderate CPU**, **Low to Moderate Risk** + Recommended if ... + - Files probably consistent + - You have a lot of files. + - %{RedFlag.Fetch.Method.FetchTraditional}. + **High Traffic**, **Low CPU**, **Low to Moderate Risk** + + >[!INFO]- Details + + > ## %{RedFlag.Fetch.Method.FetchSafer}. + + > **Low Traffic**, **High CPU**, **Low Risk** + + > This option first creates a local database using existing local files + before fetching data from the remote source. + + > If matching files exist both locally and remotely, only the + differences between them will be transferred. + + > However, files present in both locations will initially be handled as + conflicted files. They will be resolved automatically if they are not + actually conflicted, but this process may take time. + + > This is generally the safest method, minimizing data loss risk. + + > ## %{RedFlag.Fetch.Method.FetchSmoother}. + + > **Low Traffic**, **Moderate CPU**, **Low to Moderate Risk** (depending + operation) + + > This option first creates chunks from local files for the database, + then fetches data. Consequently, only chunks missing locally are + transferred. However, all metadata is taken from the remote source. + + > Local files are then compared against this metadata at launch. The + content considered newer will overwrite the older one (by modified + time). This outcome is then synchronised back to the remote database. + + > This is generally safe if local files are genuinely the latest + timestamp. However, it can cause problems if a file has a newer + timestamp but older content (like the initial `welcome.md`). + + > This uses less CPU and faster than + "%{RedFlag.Fetch.Method.FetchSafer}", but it may lead to data loss if + not used carefully. + + > ## %{RedFlag.Fetch.Method.FetchTraditional}. + + > **High Traffic**, **Low CPU**, **Low to Moderate Risk** (depending + operation) + + > All things will be fetched from the remote. + + > Similar to the %{RedFlag.Fetch.Method.FetchSmoother}, but all chunks + are fetched from the remote source. + + > This is the most traditional way to fetch, typically consuming the + most network traffic and time. It also carries a similar risk of + overwriting remote files to the '%{RedFlag.Fetch.Method.FetchSmoother}' + option. + + > However, it is often considered the most stable method because it is + the longest-established and most straightforward approach. + FetchSafer: Create a local database once before fetching + FetchSmoother: Create local file chunks before fetching + FetchTraditional: Fetch everything from the remote + Title: How do you want to fetch? + FetchRemoteConfig: + Buttons: + Cancel: No, use local settings + Fetch: Yes, fetch and apply remote settings + Message: Do you want to fetch and apply remotely stored preference settings to + the device? + 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 +Region: Region +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 server type: Remote server type +Remote Type: Remote Type +Rename: Rename +Replicator: + Dialogue: + Locked: + Action: + Dismiss: Cancel for reconfirmation + Fetch: Reset Synchronisation on This Device + Unlock: Unlock the remote database + Message: + _value: > + Remote database is locked. This is due to a rebuild on one of the + terminals. + + The device is therefore asked to withhold the connection to avoid + database corruption. + + + There are three options that we can do: + + + - %{Replicator.Dialogue.Locked.Action.Fetch} + The most preferred and reliable way. This will dispose the local database once, and reset all synchronisation information from the remote database again, In most case, we can perform this safely. However, it takes some time and should be done in stable network. + - %{Replicator.Dialogue.Locked.Action.Unlock} + This method can only be used if we are already reliably synchronised by other replication methods. This does not simply mean that we have the same files. If you are not sure, you should avoid it. + - %{Replicator.Dialogue.Locked.Action.Dismiss} + This will cancel the operation. And we will asked again on next request. + Fetch: Fetch all has been scheduled. Plug-in will be restarted to perform it. + Unlocked: The remote database has been unlocked. Please retry the operation. + Title: Locked + Message: + Cleaned: Database cleaning up is in process. replication has been cancelled + InitialiseFatalError: No replicator is available, this is the fatal error. + Pending: Some file events are pending. Replication has been cancelled. + SomeModuleFailed: Replication has been cancelled by some module failure + VersionUpFlash: An update has been detected. Please open the Settings dialogue + and check the Change Log. Replication has been cancelled. +Requires restart of Obsidian: Requires restart of Obsidian +Requires restart of Obsidian.: Requires restart of Obsidian. +Rerun Onboarding Wizard: Rerun Onboarding Wizard +Rerun the onboarding wizard to set up Self-hosted LiveSync again.: Rerun the onboarding wizard to set up Self-hosted LiveSync again. +Rerun Wizard: Rerun Wizard +Resend: Resend +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 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 +Reset received: Reset received +Reset sent history: Reset sent history +Reset Synchronisation information: Reset Synchronisation information +Reset Synchronisation on This Device: Reset Synchronisation on This Device +Reset the remote storage size threshold and check the remote storage size again.: + Reset the remote storage size threshold and check the remote storage size + again. +Resolve All: Resolve All +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 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. +Run Doctor: Run Doctor +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 on customization sync: Scan changes on customization sync +Scan customization automatically: Scan customization automatically +Scan customization before replicating.: Scan customization before replicating. +Scan customization every 1 minute.: Scan customization every 1 minute. +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 +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 Key: Secret Key +Select the database adapter to use.: Select the database adapter to use. +Send: Send +Send chunks: Send chunks +Server URI: Server URI +Setting: + GenerateKeyPair: + Desc: >+ + We have generated a key pair! + + + Note: 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. + + Note 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. + + Note 3: The public key should be configured in the remote database, and + the private key should be configured in local devices. + + + >[!FOR YOUR EYES ONLY]- + + >
+ + > + + > ### Public Key + + > ``` + + ${public_key} + + > ``` + + > + + > ### Private Key + + > ``` + + ${private_key} + + > ``` + + > + + >
+ + + >[!Both for copying]- + + > + + >
+ + > + + > ``` + + ${public_key} + + ${private_key} + + > ``` + + > + + >
+ + Title: New key pair has been generated! + TroubleShooting: + _value: TroubleShooting + Doctor: + _value: Setting Doctor + Desc: Detects non optimal settings. (Same as during migration) + ScanBrokenFiles: + _value: Scan for broken files + 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: + Apply: + Buttons: + ApplyAndFetch: Apply and Fetch + ApplyAndMerge: Apply and Merge + ApplyAndRebuild: Apply and Rebuild + Cancel: Discard and Cancel + OnlyApply: Only Apply + Message: >- + The new configuration is ready. Let us proceed to apply it. + + There are several ways to apply this: + + + - Apply and Fetch + Configure this device as a new client. After applying, synchronise from the remote server. + - Apply and Merge + Configure on a device that already has the file. It processes the local files and transfers the differences. Conflicts may arise. + - Apply and Rebuild + Rebuild the remote using local files. This is typically done if the server becomes corrupted or we wish to start from scratch. + Other devices will be locked and required to re-fetch. + - Only Apply + Apply only. Conflicts may arise if a rebuild is required. + Title: Apply new configuration from the ${method} + WarningRebuildRecommended: "NOTE: after adjusting the settings, it has been + determined that a rebuild is required; Just Import is not recommended." + Doctor: + Buttons: + No: No, please use the settings in the URI as is + Yes: Yes, please consult the doctor + Message: >- + Self-hosted LiveSync has gradually become longer in history and some + recommended settings have changed. + + + Now, setup is a very good time to do this. + + + Do you want to run Doctor to check if the imported settings are optimal + compared to the latest state? + Title: Do you want to consult the doctor? + FetchRemoteConf: + Buttons: + Fetch: Yes, please fetch the configuration + Skip: No, please use the settings in the URI + Message: >- + If we have already synchronised once with another device, the remote + database stores the suitable configuration values between the synchronised + devices. The plug-in would like to retrieve them for robust configuration. + + + However, we have to make sure the one thing. Are we currently in a + situation where we can access the network safely and retrieve the + settings? + + + Note: Mostly, you are safe to do this, that your remote database is hosted + with a SSL certificate, and your network is not compromised. + Title: Fetch configuration from remote database? + QRCode: >- + We have generated a QR code to transfer the settings. Please scan the QR + code with your phone or other device. + + Note: The QR code is not encrypted, so be careful to open this. + + + >[!FOR YOUR EYES ONLY]- + + >
${qr_image}
+ ShowQRCode: + _value: Show QR code + Desc: Show QR code to transfer the settings. + RemoteE2EE: + Title: End-to-End Encryption + Guidance: Please configure your end-to-end encryption settings. + LabelEncrypt: End-to-End Encryption + PlaceholderPassphrase: Enter your passphrase + StronglyRecommendedTitle: Strongly Recommended + StronglyRecommendedLine1: 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. + StronglyRecommendedLine2: 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. + MultiDestinationWarning: This setting must be the same even when connecting to multiple synchronisation destinations. + LabelObfuscateProperties: Obfuscate Properties + ObfuscatePropertiesDesc: 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. + AdvancedTitle: Advanced + LabelEncryptionAlgorithm: Encryption Algorithm + DefaultAlgorithmDesc: 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. + AlgorithmWarning: 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. + PassphraseValidationLine1: 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. + PassphraseValidationLine2: 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. Please understand that this is intended behaviour. + ButtonProceed: Proceed + ButtonCancel: Cancel + UseSetupURI: + Title: Enter Setup URI + GuidanceLine1: Please enter the Setup URI that was generated during server installation or on another device, along with the vault passphrase. + GuidanceLine2: Note that you can generate a new Setup URI by running the "Copy settings as a new Setup URI" command in the command palette. + LabelSetupURI: Setup URI + ValidInfo: The Setup URI is valid and ready to use. + InvalidInfo: The Setup URI is invalid. Please check it and try again. + LabelPassphrase: Vault passphrase + PlaceholderPassphrase: Enter your vault passphrase + ErrorPassphraseRequired: Please enter the vault passphrase. + ErrorFailedToParse: Failed to parse the Setup URI. Please check the URI and passphrase. + ButtonProceed: Test Settings and Continue + ButtonCancel: Cancel + ScanQRCode: + Title: Scan QR Code + Guidance: Please follow the steps below to import settings from your existing device. + Step1: On this device, please keep this Vault open. + Step2: On the source device, open Obsidian. + Step3: On the source device, from the command palette, run the 'Show settings as a QR code' command. + Step4: On this device, switch to the camera app or use a QR code scanner to scan the displayed QR code. + 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 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. +"Failed to connect to remote for compaction. ${reason}": Failed to connect to remote for compaction. ${reason} +"Compaction in progress on remote database...": Compaction in progress on remote database... +"Compaction on remote database timed out.": Compaction on remote database timed out. +"Compaction on remote database completed successfully.": Compaction on remote database completed successfully. +"Compaction on remote database failed.": Compaction on remote database failed. +"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. +"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: + - ${missingNodes} + + This indicates that they have not been connected for some time or have been left on an older version. + It 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. +"Ignore and Proceed": Ignore and Proceed +"Node Information Missing": Node Information Missing +"Garbage Collection cancelled by user.": Garbage Collection cancelled by user. +"Proceeding with Garbage Collection, ignoring missing nodes.": Proceeding with Garbage Collection, ignoring missing nodes. +"Proceed Garbage Collection": Proceed Garbage Collection +"> [!INFO]- The connected devices have been detected as follows:\n${devices}": |- + > [!INFO]- The connected devices have been detected as follows: + ${devices} +"Device": Device +"Node ID": Node ID +"Obsidian version": Obsidian version +"Plug-in version": Plug-in version +"Progress": Progress +"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}). + This may indicate that some devices have not completed synchronisation, which could lead to conflicts. Strongly recommend confirming that all devices are synchronised before proceeding. +"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. +"Garbage Collection Confirmation": Garbage Collection Confirmation +"Proceeding with Garbage Collection.": Proceeding with Garbage Collection. +"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} +"Garbage Collection: Found ${unusedChunks} unused chunks to delete.": |- + Garbage Collection: Found ${unusedChunks} unused chunks to delete. +"Garbage Collection completed. Deleted chunks: ${deletedChunks} / ${totalChunks}. Time taken: ${seconds} seconds.": |- + Garbage Collection completed. Deleted chunks: ${deletedChunks} / ${totalChunks}. Time taken: ${seconds} seconds. +"Failed to start replication after Garbage Collection.": Failed to start replication after Garbage Collection. +Should we keep folders that don't have any files inside?: Should we keep folders that don't have any files inside? +Should we only check for conflicts when a file is opened?: Should we only check for conflicts when a file is opened? +Should we prompt you about conflicting files when a file is opened?: Should we prompt you about conflicting files when a file is opened? +Should we prompt you for every single merge, even if we can safely merge automatcially?: + Should we prompt you for every single merge, even if we can safely merge + automatcially? +Show full banner: Show full banner +Show history: Show history +Show icon only: Show icon only +Show only notifications: Show only notifications +Show status as icons only: Show status as icons only +Show status icon instead of file warnings banner: Show status icon instead of file warnings banner +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. +Starts synchronisation when a file is saved.: Starts synchronisation when a file is saved. +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 +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 after merging file: Sync after merging file +Sync automatically after merging files: Sync automatically after merging files +Sync Mode: Sync Mode +Sync on Editor Save: Sync on Editor Save +Sync on File Open: Sync on File Open +Sync on Save: Sync on Save +Sync on Startup: Sync on Startup +Synchronising files: Synchronising files +Syncing: Syncing +Target patterns: Target patterns +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 delay for consecutive on-demand fetches: The delay for consecutive on-demand fetches +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 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. +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 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. +Transfer Tweak: Transfer Tweak +TweakMismatchResolve: + Action: + Dismiss: Dismiss + UseConfigured: Use configured settings + UseMine: Update remote database settings + UseMineAcceptIncompatible: Update remote database settings but keep as is + UseMineWithRebuild: Update remote database settings and rebuild again + UseRemote: Apply settings to this device + UseRemoteAcceptIncompatible: Apply settings to this device, but and ignore incompatibility + UseRemoteWithRebuild: Apply settings to this device, and fetch again + EnableAutoAcceptCompatible: Enable auto-accept + DisableAutoAcceptCompatible: Disable auto-accept + Message: + AutoAcceptCompatibleUndefined: >- + + It appears that the settings differ for each device. + You can now automatically apply compatible changes to these configurations. + + Would you like to enable this `auto-accept` setting? + Main: >- + + The settings in the remote database are as follows. These values are + configured by other devices, which are synchronised with this device at + least once. + + + If you want to use these settings, please select + %{TweakMismatchResolve.Action.UseConfigured}. + + If you want to keep the settings of this device, please select + %{TweakMismatchResolve.Action.Dismiss}. + + + ${table} + + + >[!TIP] + + > If you want to synchronise all settings, please use `Sync settings via + markdown` after applying minimal configuration with this feature. + + + ${additionalMessage} + MainTweakResolving: |- + Your configuration has not been matched with the one on the remote server. + + Following configuration should be matched: + + ${table} + + Let us know your decision. + + ${additionalMessage} + UseRemote: + WarningRebuildRecommended: >- + + >[!NOTICE] + + > Some changes are compatible but may consume extra storage and transfer + volumes. A rebuild is recommended. However, a rebuild may not be + performed at present, but may be implemented in future maintenance. + + > ***Please ensure that you have time and are connected to a stable + network to apply!*** + WarningRebuildRequired: >- + + >[!WARNING] + + > Some remote configurations are not compatible with the local database + of this device. Rebuilding the local database will be required. + + > ***Please ensure that you have time and are connected to a stable + network to apply!*** + WarningIncompatibleRebuildRecommended: >- + + >[!NOTICE] + + > We have detected that some of the values are different to make + incompatible the local database with the remote database. + + > Some changes are compatible but may consume extra storage and transfer + volumes. A rebuild is recommended. However, a rebuild may not be performed + at present, but may be implemented in future maintenance. + + > If you want to rebuild, it takes a few minutes or more. **Make sure it + is safe to perform it now.** + WarningIncompatibleRebuildRequired: >- + + >[!WARNING] + + > We have detected that some of the values are different to make + incompatible the local database with the remote database. + + > Either local or remote rebuilds are required. Both of them takes a few + minutes or more. **Make sure it is safe to perform it now.** + remoteUpdated: The configuration stored remotely has been updated. + mineUpdated: The device configuration have been adjusted. + Table: + _value: |+ + | Value name | This device | On Remote | + |: --- |: ---- :|: ---- :| + ${rows} + + Row: "| ${name} | ${self} | ${remote} |" + Title: + _value: Configuration Mismatch Detected + TweakResolving: Configuration Mismatch Detected + UseRemoteConfig: Use Remote Configuration + AutoAcceptCompatible: Auto-Accept Available +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. +Use a custom passphrase: Use a custom passphrase +Use Custom HTTP Handler: Use Custom HTTP Handler +Use dynamic iteration count: Use dynamic iteration count +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 +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. +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. +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 +xxhash32 (Fast but less collision resistance): xxhash32 (Fast but less collision resistance) +xxhash64 (Fastest): xxhash64 (Fastest) +"Welcome to Self-hosted LiveSync": "Welcome to Self-hosted LiveSync" +"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." +"First, please select the option that best describes your current situation.": "First, please select the option that best describes your current situation." +"I am setting this up for the first time": "I am setting this up for the first time" +"(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." +"I am adding a device to an existing synchronisation setup": "I am adding a device to an existing synchronisation setup" +"(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." +"Yes, I want to set up a new synchronisation": "Yes, I want to set up a new synchronisation" +"Yes, I want to add this device to my existing synchronisation": "Yes, I want to add this device to my existing synchronisation" +"No, please take me back": "No, please take me back" +"Device Setup Method": "Device Setup Method" +"You are adding this device to an existing synchronisation setup.": "You are adding this device to an existing synchronisation setup." +"Please select a method to import the settings from another device.": "Please select a method to import the settings from another device." +"Use a Setup URI (Recommended)": "Use a Setup URI (Recommended)" +"Paste the Setup URI generated from one of your active devices.": "Paste the Setup URI generated from one of your active devices." +"Scan a QR Code (Recommended for mobile)": "Scan a QR Code (Recommended for mobile)" +"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." +"Enter the server information manually": "Enter the server information manually" +"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." +"Proceed with Setup URI": "Proceed with Setup URI" +"I know my server details, let me enter them": "I know my server details, let me enter them" +"Please select an option to proceed": "Please select an option to proceed" +"Connection Method": "Connection Method" +"We will now proceed with the server configuration.": "We will now proceed with the server configuration." +"How would you like to configure the connection to your server?": "How would you like to configure the connection to your server?" +"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." +"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." +"Enter Server Information": "Enter Server Information" +"Please select the type of server to which you are connecting.": "Please select the type of server to which you are connecting." +"Continue to CouchDB setup": "Continue to CouchDB setup" +"Continue to S3/MinIO/R2 setup": "Continue to S3/MinIO/R2 setup" +"Continue to Peer-to-Peer only setup": "Continue to Peer-to-Peer only setup" +"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." +"S3/MinIO/R2 Object Storage": "S3/MinIO/R2 Object Storage" +"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." +"Peer-to-Peer only": "Peer-to-Peer only" +"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." +Ui: + Common: + Signal: + Caution: CAUTION + Danger: DANGER + Notice: NOTICE + Warning: WARNING + Settings: + Advanced: + LocalDatabaseTweak: Local Database Tweak + MemoryCache: Memory Cache + TransferTweak: Transfer Tweak + Common: + Analyse: Analyse + Back: Back + Check: Check + Configure: Configure + Continue: Continue + Delete: Delete + Fetch: Fetch + Lock: Lock + Merge: Merge + Open: Open + Overwrite: Overwrite + Perform: Perform + ResetAll: Reset all + ResolveAll: Resolve All + Scan: Scan + Send: Send + Use: Use + VerifyAll: Verify all + CustomizationSync: + OpenDesc: Open the dialog + Panel: Customization Sync + WarnChangeDeviceName: We cannot change the device name while this feature is enabled. Please disable this feature to change the device name. + WarnSetDeviceName: Please set device name to identify this device. This name should be unique among your devices. While not configured, we cannot enable this feature. + Hatch: + AnalyseDatabaseUsage: Analyse database usage + AnalyseDatabaseUsageDesc: Analyse database usage and generate a TSV report for diagnosis yourself. You can paste the generated report with any spreadsheet you like. + BackToNonConfigured: Back to non-configured + ConvertNonObfuscated: Check and convert non-path-obfuscated files + ConvertNonObfuscatedDesc: Check the local database for files that were stored without path obfuscation and convert them when needed. + CopyIssueReport: Copy Report to clipboard + DatabaseLabel: "Database: ${details}" + DatabaseToStorage: Database -> Storage + DeleteCustomizationSyncData: Delete all customization sync data + GeneratedReport: Generated report + Missing: Missing + ModifiedSize: "Modified: ${modified}, Size: ${size}" + ModifiedSizeActual: "Modified: ${modified}, Size: ${size} (actual size: ${actualSize})" + PrepareIssueReport: Prepare the 'report' to create an issue + RecreateAll: Recreate all + RecreateMissingChunks: Recreate missing chunks for all files + RecreateMissingChunksDesc: This will recreate chunks for all files. If there were missing chunks, this may fix the errors. + RecoveryAndRepair: Recovery and Repair + ResetPanel: Reset + ResetRemoteUsage: Reset notification threshold and check the remote database usage + ResetRemoteUsageDesc: Reset the remote storage size threshold and check the remote storage size again. + ResolveAllConflictedFiles: Resolve all conflicted files by the newer one + ResolveAllConflictedFilesDesc: "Resolve all conflicted files by the newer one. Caution: This will overwrite the older one, and cannot resurrect the overwritten one." + RunDoctor: Run Doctor + ScanBrokenFiles: Scan for broken files + ScramSwitches: Scram Switches + ShowHistory: Show history + StorageLabel: "Storage: ${details}" + StorageToDatabase: Storage -> Database + VerifyAndRepairAllFiles: Verify and repair all files + VerifyAndRepairAllFilesDesc: Compare the content of files between the local database and storage. If they do not match, you will be asked which one to keep. + Maintenance: + Cleanup: Perform cleanup + CleanupDesc: 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. + DeleteLocalDatabase: Delete local database to reset or uninstall Self-hosted LiveSync + EmergencyRestart: Emergency restart + EmergencyRestartDesc: Disable all synchronisation and restart. + FreshStartWipe: Fresh Start Wipe + FreshStartWipeDesc: Delete all data on the remote server. + GarbageCollection: Garbage Collection V3 (Beta) + GarbageCollectionAction: Perform Garbage Collection + GarbageCollectionDesc: Perform Garbage Collection to remove unused chunks and reduce database size. + LockServer: Lock Server + LockServerDesc: Lock the remote server to prevent synchronisation with other devices. + OverwriteServerData: Overwrite Server Data with This Device's Files + OverwriteServerDataDesc: Rebuild the local and remote database with files from this device. + OverwriteRemote: Overwrite remote + OverwriteRemoteDesc: Overwrite remote with local DB and passphrase. + PurgeAllJournalCounter: Purge all journal counter + PurgeAllJournalCounterDesc: Purge all download and upload caches. + RebuildingOperations: Rebuilding Operations (Remote Only) + Reset: Reset + ResetAllJournalCounter: Reset all journal counter + ResetAllJournalCounterDesc: Initialise all journal history. On the next sync, every item will be received and sent again. + ResetJournalReceived: Reset journal received history + ResetJournalReceivedDesc: Initialise journal received history. On the next sync, every item except those sent by this device will be downloaded again. + ResetReceived: Reset received + ResetJournalSent: Reset journal sent history + ResetJournalSentDesc: Initialise journal sent history. On the next sync, every item except those received by this device will be sent again. + ResetLocalSyncInfo: Reset Synchronisation information + ResetLocalSyncInfoDesc: Restore or reconstruct local database from remote. + ResetSentHistory: Reset sent history + ResetThisDevice: Reset Synchronisation on This Device + Resend: Resend + ResendDesc: Resend all chunks to the remote. + ScheduleAndRestart: Schedule and Restart + Scram: Scram! + SendChunks: Send chunks + Syncing: Syncing + WarningLockedReadyAction: I am ready, unlock the database + WarningLockedReadyText: To prevent unwanted vault corruption, the remote database has been locked for synchronisation. (This device is marked as 'resolved'.) When all your devices are marked as 'resolved', unlock the database. This warning will continue to appear until replication confirms the device is resolved. + WarningLockedResolveAction: I have made a backup, mark this device as resolved + WarningLockedResolveText: The remote database is locked for synchronisation to prevent vault corruption because this device is not marked as 'resolved'. Please back up your vault, reset the local database, and select 'Mark this device as resolved'. This warning will persist until replication confirms the device is resolved. + WriteRedFlagAndRestart: Flag and restart + Patches: + CompatibilityConflict: Compatibility (Conflict Behaviour) + CompatibilityDatabase: Compatibility (Database structure) + CompatibilityInternalApi: Compatibility (Internal API Usage) + CompatibilityMetadata: Compatibility (Metadata) + CompatibilityRemote: Compatibility (Remote Database) + CompatibilityTrouble: Compatibility (Trouble addressed) + CurrentAdapter: "Current adapter: ${adapter}" + DatabaseAdapter: Database Adapter + DatabaseAdapterDesc: Select the database adapter to use. + EdgeCaseBehaviour: Edge case addressing (Behaviour) + EdgeCaseDatabase: Edge case addressing (Database) + EdgeCaseProcessing: Edge case addressing (Processing) + IndexedDbWarning: 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 the IDB adapter instead. + MigrationWarning: Changing this setting requires migrating existing data, which may take some time, and restarting Obsidian. Please make sure to back up your data before proceeding. + MigratingToIdb: Migrating all data to IDB... + MigratingToIndexedDb: Migrating all data to IndexedDB... + MigrationIdbCompleted: Migration to IDB completed. Obsidian will be restarted with the new configuration immediately. + MigrationIdbCompletedFollowUp: Migration to IDB completed. Please switch the adapter and restart Obsidian. + MigrationIndexedDbCompleted: Migration to IndexedDB completed. Obsidian will be restarted with the new configuration immediately. + MigrationIndexedDbCompletedFollowUp: Migration to IndexedDB completed. Please switch the adapter and restart Obsidian. + OperationToIdb: to IDB + OperationToIndexedDb: to IndexedDB + Remediation: Remediation + RemediationChanged: Remediation Setting Changed + RemediationNoLimit: No limit configured + RemediationRestartLater: Later + RemediationRestartMessage: Restarting Obsidian is strongly recommended. Until restart, some changes may not take effect, and the display may be inconsistent. Are you sure you want to restart now? + RemediationRestartNow: Restart Now + RemediationRestarting: Remediation setting changed. Restarting Obsidian... + RemediationSuffixChanged: Suffix has been changed. Reopening database... + RemediationWithValue: "Limit: ${date} (${timestamp})" + RemoteDatabaseSunset: Remote Database Tweak (In sunset) + SwitchToIDB: Switch to IDB + SwitchToIndexedDb: Switch to IndexedDB + PowerUsers: + ConfigurationEncryption: Configuration Encryption + ConnectionTweak: CouchDB Connection Tweak + ConnectionTweakDesc: If you reached the payload size limit when using IBM Cloudant, please decrease batch size and batch limit to a lower value. + Default: Default + Developer: Developer + EncryptSensitiveConfig: Encrypt sensitive configuration items + PromptPassphraseEveryLaunch: Ask for a passphrase at every launch + UseCustomPassphrase: Use a custom passphrase + Remote: + Activate: Activate + ActiveSuffix: " (Active)" + AddConnection: Add new connection + AddRemoteDefaultName: New Remote + ConfigureAndChangeRemote: Configure and change remote + ConfigureE2EE: Configure E2EE + ConfigureRemote: Configure Remote + DeleteRemoteConfirm: "Delete remote configuration '${name}'?" + DeleteRemoteTitle: Delete Remote Configuration + DisplayName: Display name + DuplicateRemote: Duplicate remote + DuplicateRemoteSuffix: "${name} (Copy)" + E2EEConfiguration: E2EE Configuration + Export: Export + FetchRemoteSettings: Fetch remote settings + ImportConnection: Import connection + ImportConnectionPrompt: Paste a connection string + ImportedCouchDb: Imported CouchDB + ImportedRemote: Remote + MoreActions: More actions + PeerToPeerPanel: Peer-to-Peer Synchronisation + RemoteConfigurationPrefix: Remote configuration + RemoteDatabases: Remote Databases + RemoteName: Remote name + RemoteNameCouchDb: "CouchDB ${host}" + RemoteNameP2P: "P2P ${room}" + RemoteNameS3: "S3 ${bucket}" + Rename: Rename + Selector: + AddDefaultPatterns: Add default patterns + CrossPlatform: Cross-platform + Default: Default + HiddenFiles: Hidden Files + IgnorePatterns: Ignore patterns + NonSynchronisingFiles: Non-Synchronising files + NonSynchronisingFilesDesc: (RegExp) If this is set, any changes to local and remote files that match this will be skipped. + NormalFiles: Normal Files + OverwritePatterns: Overwrite patterns + OverwritePatternsDesc: Patterns to match files for overwriting instead of merging + SynchronisingFiles: Synchronising files + SynchronisingFilesDesc: (RegExp) Empty to sync all files. Set a regular expression filter to limit synchronised files. + TargetPatterns: Target patterns + TargetPatternsDesc: Patterns to match files for syncing + Setup: + RerunWizardButton: Rerun Wizard + RerunWizardDesc: Rerun the onboarding wizard to set up Self-hosted LiveSync again. + RerunWizardName: Rerun Onboarding Wizard + SyncSettings: + Merge: Merge + Fetch: Fetch + Overwrite: Overwrite + SetupWizard: + Common: + Back: No, please take me back + Cancel: Cancel + ProceedSelectOption: Please select an option to proceed + Invitation: + Start: Start setup + Intro: + ExistingOption: I am adding a device to an existing synchronisation setup + ExistingOptionDesc: Select this if you are already using synchronisation on another computer or smartphone. Use this option to connect this device to that existing setup. + NewOption: I am setting this up for the first time + NewOptionDesc: Select this if you are configuring this device as the first synchronisation device. + ProceedExisting: Yes, I want to add this device to my existing synchronisation + ProceedNew: Yes, I want to set up a new synchronisation + Question: First, please select the option that best describes your current situation. + Title: Welcome to Self-hosted LiveSync + Guidance: We will now guide you through a few questions to simplify the synchronisation setup. + SelectExisting: + Guidance: You are adding this device to an existing synchronisation setup. + ManualOption: Enter the server information manually + ManualOptionDesc: Configure the same server information as your other devices again manually. This is intended only for advanced users. + ProceedManual: I know my server details, let me enter them + ProceedQr: Scan the QR code displayed on an active device using this device's camera. + ProceedSetupUri: Proceed with Setup URI + Question: Please select a method to import the settings from another device. + QrOption: Scan a QR Code (Recommended for mobile) + QrOptionDesc: Scan the QR code displayed on an active device using this device's camera. + SetupUriOption: Use a Setup URI (Recommended) + SetupUriOptionDesc: Paste the Setup URI generated from one of your active devices. + Title: Device Setup Method + SelectNew: + Guidance: We will now proceed with the server configuration. + ManualOption: Enter the server information manually + ManualOptionDesc: This is an advanced option for users who do not have a Setup URI or who want to configure detailed settings. + ProceedManual: I know my server details, let me enter them + ProceedSetupUri: Proceed with Setup URI + Question: How would you like to configure the connection to your server? + SetupUriOption: Use a Setup URI (Recommended) + SetupUriOptionDesc: A Setup URI is a single string containing your server address and authentication details. If one was generated by your server installation script, it provides a simple and secure configuration method. + Title: Connection Method + OutroAskUserMode: + CompatibleOption: The remote is already set up, and the configuration is compatible (or became compatible through this operation). + CompatibleOptionDesc: Unless you are certain, selecting this option is risky. It assumes the server configuration is compatible with this device. If that is not the case, data loss may occur. Please make sure you understand the consequences. + ExistingOption: My remote server is already set up. I want to join this device. + ExistingOptionDesc: Selecting this option will make this device join the existing server. You need to fetch the existing synchronisation data from the server to this device. + Guidance: The connection to the server has been configured successfully. As the next step, the local database, in other words the synchronisation information, must be rebuilt. + NewOption: I am setting up a new server for the first time / I want to reset my existing server. + NewOptionDesc: Selecting this option will initialise the server using the current data on this device. Any existing data on the server will be completely overwritten. + ProceedApplySettings: Apply the settings + ProceedNext: Proceed to the next step. + Question: Please select your situation. + Title: "Mostly Complete: Decision Required" + OutroNewUser: + GuidancePrimary: The connection to the server has been configured successfully. As the next step, the synchronisation data on the server will be built from the current data on this device. + GuidanceWarning: After restarting, the data on this device will be uploaded to the server as the master copy. Please note that any unintended data currently on the server will be completely overwritten. + Important: IMPORTANT + Proceed: Restart and Initialise Server + Question: Please select the button below to restart and proceed to the final confirmation. + Title: "Setup Complete: Preparing to Initialise Server" + OutroNewP2PUser: + GuidanceNotice: P2P has no central server copy to overwrite. This step prepares only this device; keep it online when another device fetches its initial data. + GuidancePrimary: The peer-to-peer connection has been configured successfully. Next, the local LiveSync database will be built from the current files in this Vault. + Important: PLEASE NOTE + Proceed: Restart and Prepare This Device + Question: Please select the button below to restart and proceed to the local initialisation confirmation. + Title: "Setup Complete: Preparing This P2P Device" + RebuildEverythingP2P: + ConfirmLocalReset: I understand that this resets only this device's local synchronisation database. + ConfirmLocalResetNote: The files currently in this Vault are used to rebuild it. + ConfirmTitle: "⚠️ Please Confirm the Following" + Guidance: This procedure will discard the local LiveSync database on this device and rebuild it from the current files in this Vault. It does not delete or overwrite data on another device. + Note: Keep this device online after initialisation so that another device can fetch the Vault from it. + Proceed: I Understand, Prepare This Device + Title: "Final Confirmation: Prepare This Device for P2P" + SetupRemote: + BucketOption: S3/MinIO/R2 Object Storage + BucketOptionDesc: Synchronisation using journal files. You must already have an S3/MinIO/R2 compatible object storage service set up. + CouchDbOptionDesc: This is the most suitable synchronisation method for the current design. All features are available. You must already have a CouchDB instance set up. + Guidance: Please select the type of server you are connecting to. + P2POption: Peer-to-Peer only + P2POptionDesc: This enables direct synchronisation between devices. No server is required, but both devices must be online at the same time and some features may be limited. Internet connectivity is required only for signalling, not for data transfer. + ProceedBucket: Continue to S3/MinIO/R2 setup + ProceedCouchDb: Continue to CouchDB setup + ProceedP2P: Continue to Peer-to-Peer only setup + Title: Enter Server Information diff --git a/src/common/messagesYAML/es.yaml b/src/common/messagesYAML/es.yaml new file mode 100644 index 00000000..7b686322 --- /dev/null +++ b/src/common/messagesYAML/es.yaml @@ -0,0 +1,1087 @@ +(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) +(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) +(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. +Access Key: Clave de acceso +Activate: Activar +Add default patterns: Añadir patrones predeterminados +Add new connection: Añadir conexión +Always prompt merge conflicts: Siempre preguntar en conflictos +Apply Latest Change if Conflicting: Aplicar último cambio en conflictos +Apply preset configuration: Aplicar configuración predefinida +Ask a passphrase at every launch: Solicitar la frase de contraseña en cada inicio +Automatically Sync all files when opening Obsidian.: Sincronizar automáticamente todos los archivos al abrir Obsidian +Back: Volver +Back to non-configured: Volver a no configurado +Batch database update: Actualización por lotes de BD +Batch limit: Límite de lotes +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 +Bucket Name: Nombre del bucket +Cancel: Cancelar +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. +cmdConfigSync: + showCustomizationSync: Mostrar sincronización de personalización +Comma separated `.gitignore, .dockerignore`: "Separados por comas: `.gitignore, .dockerignore`" +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) +Compatibility (Internal API Usage): Compatibilidad (uso de la API interna) +Compatibility (Metadata): Compatibilidad (metadatos) +Compatibility (Remote Database): Compatibilidad (base de datos remota) +Compatibility (Trouble addressed): Compatibilidad (problemas corregidos) +Compute revisions for chunks (Previous behaviour): Calcular revisiones para chunks (comportamiento anterior) +Configuration Encryption: Cifrado de configuración +Configure: Configurar +Configure And Change Remote: Configurar y cambiar remoto +Configure E2EE: Configurar E2EE +Configure Remote: Configurar remoto +Copy: Copiar +CouchDB Connection Tweak: Ajustes de conexión de CouchDB +Cross-platform: Multiplataforma +"Current adapter: {adapter}": "Adaptador actual: {adapter}" +Customization Sync: Sincronización de personalización +Customization Sync (Beta3): Sincronización de personalización (Beta3) +Data Compression: Compresión de datos +Database Adapter: Adaptador de base de datos +Database Name: Nombre de la base de datos +Database suffix: Sufijo de base de datos +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 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}'? +desktop: equipo de escritorio +Developer: Desarrollador +Device name: Nombre del dispositivo +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. +Display Language: Idioma de visualización +Display name: Nombre para mostrar +Do not check configuration mismatch before replication: No verificar incompatibilidades antes de replicar +Do not keep metadata of deleted files.: No conservar metadatos de archivos borrados +Do not split chunks in the background: No dividir chunks en segundo plano +Do not use internal API: No usar API interna +Duplicate: Duplicar +Duplicate remote: Duplicar remoto +E2EE Configuration: Configuración de E2EE +Edge case addressing (Behaviour): Tratamiento de casos límite (comportamiento) +Edge case addressing (Database): Tratamiento de casos límite (base de datos) +Edge case addressing (Processing): Tratamiento de casos límite (procesamiento) +Emergency restart: Reinicio de emergencia +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 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 +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 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 +Export: Exportar +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 +File to resolve conflict: Archivo para resolver el conflicto +Filename: Nombre de archivo +Flag and restart: Marcar y reiniciar +Forces the file to be synced when opened.: Forzar sincronización al abrir archivo +Fresh Start Wipe: Borrado para reinicio completo +Garbage Collection V3 (Beta): Recolección de basura V3 (Beta) +Handle files as Case-Sensitive: Manejar archivos como sensibles a mayúsculas +Hidden Files: Archivos ocultos +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. +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 +If enabled, newly created chunks are temporarily kept within the document, and graduated to become independent chunks once stabilised.: Chunks nuevos se mantienen temporalmente en el documento hasta estabilizarse +If enabled, the ⛔ icon will be shown inside the status instead of the file warnings banner. No details will be shown.: + Si se activa, se mostrará el icono ⛔ en el estado en lugar del banner de + advertencia de archivos. No se mostrarán detalles. +If enabled, the file under 1kb will be processed in the UI thread.: Archivos <1kb se procesan en hilo UI +If enabled, the notification of hidden files change will be suppressed.: Si se habilita, se suprimirá la notificación de cambios en archivos ocultos. +If this enabled, all chunks will be stored with the revision made from its content. (Previous behaviour): + Si se habilita, todos los chunks se almacenan con la revisión hecha desde su + contenido. (comportamiento anterior) +If this enabled, All files are handled as case-Sensitive (Previous behaviour).: + Si se habilita, todos los archivos se manejan como sensibles a mayúsculas + (comportamiento anterior) +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 +Ignore files: Archivos a ignorar +Ignore patterns: Patrones de exclusión +Import connection: Importar conexión +Incubate Chunks in Document: Incubar chunks en documento +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. +Interval (sec): Intervalo (segundos) +Keep empty folder: Mantener carpetas vacías +lang-de: Alemán +lang-es: Español +lang-fr: Français +lang-ja: Japonés +lang-ru: Ruso +lang-zh: Chino simplificado +lang-zh-tw: Chino tradicional +Later: Más tarde +"Limit: {datetime} ({timestamp})": "Límite: {datetime} ({timestamp})" +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... + cantReplicateLowerValue: No podemos replicar un valor más bajo. + checkingLastSyncPoint: Buscando el último punto sincronizado. + couldNotConnectTo: |- + No se pudo conectar a ${uri} : ${name} + (${db}) + couldNotConnectToRemoteDb: "No se pudo conectar a base de datos remota: ${d}" + couldNotConnectToServer: No se pudo conectar al servidor. + couldNotConnectToURI: No se pudo conectar a ${uri}:${dbRet} + couldNotMarkResolveRemoteDb: No se pudo marcar como resuelta la base de datos remota. + liveSyncBegin: Inicio de LiveSync... + lockRemoteDb: Bloquear base de datos remota para prevenir corrupción de datos + markDeviceResolved: Marcar este dispositivo como 'resuelto'. + oneShotSyncBegin: Inicio de sincronización OneShot... (${syncMode}) + remoteDbCorrupted: La base de datos remota es más nueva o está dañada, asegúrese + de tener la última versión de self-hosted-livesync instalada + remoteDbCreatedOrConnected: Base de datos remota creada o conectada + remoteDbDestroyed: Base de datos remota destruida + remoteDbDestroyError: "Algo ocurrió al destruir base de datos remota:" + remoteDbMarkedResolved: Base de datos remota marcada como resuelta. + replicationClosed: Replicación cerrada + replicationInProgress: Replicación en curso + retryLowerBatchSize: Reintentar con tamaño de lote más bajo:${batch_size}/${batches_limit} + unlockRemoteDb: Desbloquear base de datos remota para prevenir corrupción de datos +liveSyncSetting: + errorNoSuchSettingItem: "No existe el ajuste: ${key}" + originalValue: "Original: ${value}" + valueShouldBeInRange: El valor debe estar entre ${min} y ${max} +liveSyncSettings: + btnApply: Aplicar +Local Database Tweak: Ajustes de la base de datos 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. +logPane: + autoScroll: Autodesplazamiento + logWindowOpened: Ventana de registro abierta + pause: Pausar + title: Registro de Self-hosted LiveSync + wrap: Ajustar +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 +Maximum Incubating Chunks: Máximo de chunks incubados +Maximum Incubation Period: Periodo máximo de incubación +MB (0 to disable).: MB (0 para desactivar) +Memory cache: Caché en memoria +Memory cache size (by total characters): Tamaño caché memoria (por caracteres) +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 +moduleCheckRemoteSize: + logCheckingStorageSizes: Comprobando tamaños de almacenamiento + logCurrentStorageSize: "Tamaño del almacenamiento remoto: ${measuredSize}" + logExceededWarning: "Tamaño del almacenamiento remoto: ${measuredSize} superó ${notifySize}" + logThresholdEnlarged: El umbral se ha ampliado a ${size}MB + msgConfirmRebuild: Esto puede llevar un poco de tiempo. ¿Realmente quieres + reconstruir todo ahora? + msgDatabaseGrowing: | + **¡Tu base de datos está creciendo!** Pero no te preocupes, podemos abordarlo ahora. El tiempo antes de quedarse sin espacio en el almacenamiento remoto. + + | Tamaño medido | Tamaño configurado | + | --- | --- | + | ${estimatedSize} | ${maxSize} | + + > [!MORE]- + > Si lo has estado utilizando durante muchos años, puede haber fragmentos no referenciados - es decir, basura - acumulándose en la base de datos. Por lo tanto, recomendamos reconstruir todo. Probablemente se volverá mucho más pequeño. + > + > Si el volumen de tu bóveda simplemente está aumentando, es mejor reconstruir todo después de organizar los archivos. Self-hosted LiveSync no elimina los datos reales incluso si los eliminas para acelerar el proceso. Está aproximadamente [documentado](https://github.com/vrtmrz/obsidian-livesync/blob/main/docs/tech_info.md). + > + > Si no te importa el aumento, puedes aumentar el límite de notificación en 100 MB. Este es el caso si lo estás ejecutando en tu propio servidor. Sin embargo, es mejor reconstruir todo de vez en cuando. + > + + > [!WARNING] + > Si realizas la reconstrucción completa, asegúrate de que todos los dispositivos estén sincronizados. El complemento fusionará tanto como sea posible, sin embargo. + msgSetDBCapacity: > + Podemos configurar una advertencia de capacidad máxima de base de datos, + **para tomar medidas antes de quedarse sin espacio en el almacenamiento + remoto**. + + ¿Quieres habilitar esto? + + + > [!MORE]- + + > - 0: No advertir sobre el tamaño del almacenamiento. + + > Esto es recomendado si tienes suficiente espacio en el almacenamiento + remoto, especialmente si lo tienes autoalojado. Y puedes comprobar el tamaño + del almacenamiento y reconstruir manualmente. + + > - 800: Advertir si el tamaño del almacenamiento remoto supera los 800 MB. + + > Esto es recomendado si estás usando fly.io con un límite de 1 GB o IBM + Cloudant. + + > - 2000: Advertir si el tamaño del almacenamiento remoto supera los 2 GB. + + + Si hemos alcanzado el límite, se nos pedirá que aumentemos el límite paso a + paso. + option2GB: 2GB (Estándar) + option800MB: 800MB (Cloudant, fly.io) + optionAskMeLater: Pregúntame más tarde + optionDismiss: Descartar + optionIncreaseLimit: aumentar a ${newMax}MB + optionNoWarn: No, nunca advertir por favor + optionRebuildAll: Reconstruir todo ahora + titleDatabaseSizeLimitExceeded: El tamaño del almacenamiento remoto superó el límite + titleDatabaseSizeNotify: Configuración de notificación de tamaño de base de datos +moduleInputUIObsidian: + defaultTitleConfirmation: Confirmación + defaultTitleSelect: Seleccionar + optionNo: No + optionYes: Sí +moduleLiveSyncMain: + logAdditionalSafetyScan: Escanéo de seguridad adicional... + logLoadingPlugin: Cargando complemento... + logPluginInitCancelled: La inicialización del complemento fue cancelada por un módulo + logPluginVersion: Self-hosted LiveSync v${manifestVersion} ${packageVersion} + logReadChangelog: LiveSync se ha actualizado, ¡por favor lee el registro de cambios! + logSafetyScanCompleted: Escanéo de seguridad adicional completado + logSafetyScanFailed: El escaneo de seguridad adicional ha fallado en un módulo + logUnloadingPlugin: Descargando complemento... + logVersionUpdate: LiveSync se ha actualizado, en caso de actualizaciones que + rompan, toda la sincronización automática se ha desactivado temporalmente. + Asegúrate de que todos los dispositivos estén actualizados antes de + habilitar. + msgScramEnabled: > + Self-hosted LiveSync se ha configurado para ignorar algunos eventos. ¿Es + esto correcto? + + + | Tipo | Estado | Nota | + + |:---:|:---:|---| + + | Eventos de almacenamiento | ${fileWatchingStatus} | Se ignorará cada + modificación | + + | Eventos de base de datos | ${parseReplicationStatus} | Cada cambio + sincronizado se pospondrá | + + + ¿Quieres reanudarlos y reiniciar Obsidian? + + + > [!DETAILS]- + + > Estas banderas son establecidas por el complemento mientras se reconstruye + o se obtiene. Si el proceso termina de forma anormal, puede mantenerse sin + querer. + + > Si no estás seguro, puedes intentar volver a ejecutar estos procesos. + Asegúrate de hacer una copia de seguridad de tu bóveda. + optionKeepLiveSyncDisabled: Mantener LiveSync desactivado + optionResumeAndRestart: Reanudar y reiniciar Obsidian + titleScramEnabled: Scram habilitado +moduleLocalDatabase: + logWaitingForReady: Esperando a que la base de datos esté lista... +moduleLog: + showLog: Mostrar registro +moduleMigration: + docUri: https://github.com/vrtmrz/obsidian-livesync/blob/main/README_ES.md#how-to-use + logBulkSendCorrupted: El envío de fragmentos en bloque se ha habilitado, sin + embargo, esta función se ha corrompido. Disculpe las molestias. + Deshabilitado automáticamente. + logFetchRemoteTweakFailed: Error al obtener los valores de ajuste remoto + logLocalDatabaseNotReady: ¡Algo salió mal! La base de datos local no está lista + logMigratedSameBehaviour: Migrado a db:${current} con el mismo comportamiento que antes + logMigrationFailed: La migración falló o se canceló de ${old} a ${current} + logRedflag2CreationFail: Error al crear redflag2 + logRemoteTweakUnavailable: No se pudieron obtener los valores de ajuste remoto + logSetupCancelled: La configuración ha sido cancelada, ¡Self-hosted LiveSync + está esperando tu configuración! + msgFetchRemoteAgain: >- + Como ya sabrás, Self-hosted LiveSync ha cambiado su comportamiento + predeterminado y la estructura de la base de datos. + + + Afortunadamente, con tu tiempo y esfuerzo, la base de datos remota parece + haber sido ya migrada. ¡Felicidades! + + + Sin embargo, necesitamos un poco más. La configuración de este dispositivo + no es compatible con la base de datos remota. Necesitaremos volver a obtener + la base de datos remota. ¿Debemos obtenerla nuevamente ahora? + + + ___Nota: No podemos sincronizar hasta que la configuración haya sido + cambiada y la base de datos haya sido obtenida nuevamente.___ + + ___Nota2: Los fragmentos son completamente inmutables, solo podemos obtener + los metadatos y diferencias.___ + msgInitialSetup: >- + Tu dispositivo **aún no ha sido configurado**. Permíteme guiarte a través + del proceso de configuración. + + + Ten en cuenta que todo el contenido del diálogo se puede copiar al + portapapeles. Si necesitas consultarlo más tarde, puedes pegarlo en una nota + en Obsidian. También puedes traducirlo a tu idioma utilizando una + herramienta de traducción. + + + Primero, ¿tienes **URI de configuración**? + + + Nota: Si no sabes qué es, consulta la [documentación](${URI_DOC}). + msgRecommendSetupUri: >- + Te recomendamos encarecidamente que generes una URI de configuración y la + utilices. + + Si no tienes conocimientos al respecto, consulta la + [documentación](${URI_DOC}) (Lo siento de nuevo, pero es importante). + + + ¿Cómo quieres configurarlo manualmente? + msgSinceV02321: >- + Desde la versión v0.23.21, Self-hosted LiveSync ha cambiado el + comportamiento predeterminado y la estructura de la base de datos. Se han + realizado los siguientes cambios: + + + 1. **Sensibilidad a mayúsculas de los nombres de archivo** + El manejo de los nombres de archivo ahora no distingue entre mayúsculas y minúsculas. Este cambio es beneficioso para la mayoría de las plataformas, excepto Linux y iOS, que no gestionan efectivamente la sensibilidad a mayúsculas de los nombres de archivo. + (En estos, se mostrará una advertencia para archivos con el mismo nombre pero diferentes mayúsculas). + + 2. **Manejo de revisiones de los fragmentos** + Los fragmentos son inmutables, lo que permite que sus revisiones sean fijas. Este cambio mejorará el rendimiento al guardar archivos. + + ___Sin embargo, para habilitar cualquiera de estos cambios, es necesario + reconstruir tanto las bases de datos remota como la local. Este proceso toma + unos minutos, y recomendamos hacerlo cuando tengas tiempo suficiente.___ + + + - Si deseas mantener el comportamiento anterior, puedes omitir este proceso + usando `${KEEP}`. + + - Si no tienes suficiente tiempo, por favor elige `${DISMISS}`. Se te pedirá + nuevamente más tarde. + + - Si has reconstruido la base de datos en otro dispositivo, selecciona + `${DISMISS}` e intenta sincronizar nuevamente. Dado que se ha detectado una + diferencia, se te solicitará nuevamente. + optionAdjustRemote: Ajustar al remoto + optionDecideLater: Decidirlo más tarde + optionEnableBoth: Habilitar ambos + optionEnableFilenameCaseInsensitive: "Habilitar solo #1" + optionEnableFixedRevisionForChunks: "Habilitar solo #2" + optionHaveSetupUri: Sí, tengo + optionKeepPreviousBehaviour: Mantener comportamiento anterior + optionManualSetup: Configurarlo todo manualmente + optionNoAskAgain: No, por favor pregúntame de nuevo +Setup: + RemoteE2EE: + Title: Cifrado de extremo a extremo + Guidance: Configura tus ajustes de cifrado de extremo a extremo. + LabelEncrypt: Cifrado de extremo a extremo + PlaceholderPassphrase: Introduce tu frase de contraseña + StronglyRecommendedTitle: Muy recomendable + StronglyRecommendedLine1: Al habilitar el cifrado de extremo a extremo, tus datos se cifran en tu dispositivo antes de enviarse al servidor remoto. Esto significa que, incluso si alguien obtiene acceso al servidor, no podrá leer tus datos sin la frase de contraseña. Asegúrate de recordarla, ya que también será necesaria para descifrar tus datos en otros dispositivos. + StronglyRecommendedLine2: Además, ten en cuenta que si estás usando sincronización Peer-to-Peer, esta configuración se utilizará cuando más adelante cambies a otros métodos y te conectes a un servidor remoto. + MultiDestinationWarning: Este ajuste debe ser el mismo incluso cuando te conectes a varios destinos de sincronización. + LabelObfuscateProperties: Ofuscar propiedades + ObfuscatePropertiesDesc: Ofuscar propiedades (por ejemplo, la ruta del archivo, el tamaño y las fechas de creación y modificación) añade una capa adicional de seguridad al dificultar la identificación de la estructura y los nombres de tus archivos y carpetas en el servidor remoto. Esto ayuda a proteger tu privacidad y dificulta que usuarios no autorizados deduzcan información sobre tus datos. + AdvancedTitle: Avanzado + LabelEncryptionAlgorithm: Algoritmo de cifrado + DefaultAlgorithmDesc: En la mayoría de los casos, debes mantener el algoritmo predeterminado (${algorithm}). Este ajuste solo es necesario si ya tienes un Vault cifrado con un formato diferente. + AlgorithmWarning: Cambiar el algoritmo de cifrado impedirá el acceso a cualquier dato cifrado anteriormente con otro algoritmo. Asegúrate de que todos tus dispositivos estén configurados para usar el mismo algoritmo y así mantener el acceso a tus datos. + PassphraseValidationLine1: Ten en cuenta que la frase de contraseña del cifrado de extremo a extremo no se valida hasta que el proceso de sincronización comienza realmente. Esta es una medida de seguridad diseñada para proteger tus datos. + PassphraseValidationLine2: Por lo tanto, te pedimos que tengas muchísimo cuidado al configurar manualmente la información del servidor. Si introduces una frase de contraseña incorrecta, los datos del servidor se corromperán. Ten en cuenta que este comportamiento es intencionado. + ButtonProceed: Continuar + ButtonCancel: Cancelar + UseSetupURI: + Title: Introducir URI de configuración + GuidanceLine1: Introduce la URI de configuración que se generó durante la instalación del servidor o en otro dispositivo, junto con la frase de contraseña del Vault. + GuidanceLine2: Ten en cuenta que puedes generar una nueva URI de configuración ejecutando el comando "Copiar ajustes como nueva URI de configuración" desde la paleta de comandos. + LabelSetupURI: URI de configuración + ValidInfo: La URI de configuración es válida y está lista para usarse. + InvalidInfo: La URI de configuración no es válida. Revísala e inténtalo de nuevo. + LabelPassphrase: Frase de contraseña del Vault + PlaceholderPassphrase: Introduce la frase de contraseña del Vault + ErrorPassphraseRequired: Introduce la frase de contraseña del Vault. + ErrorFailedToParse: No se pudo procesar la URI de configuración. Revisa la URI y la frase de contraseña. + ButtonProceed: Probar ajustes y continuar + ButtonCancel: Cancelar + ScanQRCode: + Title: Escanear código QR + Guidance: Sigue los pasos de abajo para importar los ajustes desde tu dispositivo actual. + Step1: En este dispositivo, mantén este Vault abierto. + Step2: En el dispositivo de origen, abre Obsidian. + Step3: En el dispositivo de origen, ejecuta desde la paleta de comandos la orden "Mostrar ajustes como código QR". + Step4: En este dispositivo, cambia a la cámara o usa un escáner QR para escanear el código mostrado. + ButtonClose: Cerrar este diálogo + "Please enable 'Compute revisions for chunks' in settings to use Garbage Collection.": Activa "Compute revisions for chunks" en los ajustes para usar la recolección de basura. + "Please disable 'Read chunks online' in settings to use Garbage Collection.": Desactiva "Read chunks online" en los ajustes para usar la recolección de basura. + "Setup URI dialog cancelled.": Se canceló el diálogo de Setup URI. + "Please select 'Cancel' explicitly to cancel this operation.": Selecciona explícitamente "Cancelar" para cancelar esta operación. + "Failed to connect to remote for compaction.": No se pudo conectar a la base de datos remota para la compactación. + "Failed to connect to remote for compaction. ${reason}": No se pudo conectar a la base de datos remota para la compactación. ${reason} + "Compaction in progress on remote database...": La compactación está en curso en la base de datos remota... + "Compaction on remote database timed out.": La compactación en la base de datos remota agotó el tiempo de espera. + "Compaction on remote database completed successfully.": La compactación en la base de datos remota se completó correctamente. + "Compaction on remote database failed.": La compactación en la base de datos remota falló. + "Failed to start one-shot replication before Garbage Collection. Garbage Collection Cancelled.": No se pudo iniciar la replicación de una sola vez antes de la recolección de basura. La recolección de basura se canceló. + "Cancel Garbage Collection": Cancelar la recolección de basura + "No connected device information found. Cancelling Garbage Collection.": No se encontró información de dispositivos conectados. Cancelando la recolección de basura. + "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.": |- + Los siguientes nodos aceptados no tienen información del nodo: + - ${missingNodes} + + Esto indica que no se han conectado desde hace algún tiempo o que se han quedado en una versión anterior. + Si es posible, es preferible actualizar todos los dispositivos. Si tienes dispositivos que ya no se usan, puedes borrar todos los nodos aceptados bloqueando el remoto una vez. + "Ignore and Proceed": Ignorar y continuar + "Node Information Missing": Falta información del nodo + "Garbage Collection cancelled by user.": El usuario canceló la recolección de basura. + "Proceeding with Garbage Collection, ignoring missing nodes.": Continuando con la recolección de basura e ignorando los nodos faltantes. + "Proceed Garbage Collection": Continuar con la recolección de basura + "> [!INFO]- The connected devices have been detected as follows:\n${devices}": |- + > [!INFO]- Se detectaron los siguientes dispositivos conectados: + ${devices} + "Device": Dispositivo + "Node ID": ID del nodo + "Obsidian version": Versión de Obsidian + "Plug-in version": Versión del complemento + "Progress": Progreso + "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 diferentes (máx.: ${maxProgress}, mín.: ${minProgress}). + Esto puede indicar que algunos dispositivos no han completado la sincronización, lo que podría causar conflictos. Se recomienda encarecidamente confirmar que todos los dispositivos estén sincronizados antes de continuar. + "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. + "Garbage Collection Confirmation": Confirmación de recolección de basura + "Proceeding with Garbage Collection.": Continuando con la recolección de basura. + "Garbage Collection: Scanned ${scanned} / ~${docCount}": |- + Recolección de basura: escaneados ${scanned} / ~${docCount} + "Garbage Collection: Scanning completed. Total chunks: ${totalChunks}, Used chunks: ${usedChunks}": |- + Recolección de basura: escaneo completado. Chunks totales: ${totalChunks}, chunks usados: ${usedChunks} + "Garbage Collection: Found ${unusedChunks} unused chunks to delete.": |- + Recolección de basura: se encontraron ${unusedChunks} chunks no usados para eliminar. + "Garbage Collection completed. Deleted chunks: ${deletedChunks} / ${totalChunks}. Time taken: ${seconds} seconds.": |- + Recolección de basura completada. Chunks eliminados: ${deletedChunks} / ${totalChunks}. Tiempo empleado: ${seconds} segundos. + "Failed to start replication after Garbage Collection.": No se pudo iniciar la replicación después de la recolección de basura. + optionNoSetupUri: No, no tengo + optionRemindNextLaunch: Recordármelo en el próximo inicio + optionSetupWizard: Llévame al asistente de configuración + optionYesFetchAgain: Sí, obtener nuevamente + titleCaseSensitivity: Sensibilidad a mayúsculas + titleRecommendSetupUri: Recomendación de uso de URI de configuración + titleWelcome: Bienvenido a Self-hosted LiveSync +moduleObsidianMenu: + replicate: Replicar +More actions: Más acciones +Move remotely deleted files to the trash, instead of deleting.: Mover archivos borrados remotos a papelera en lugar de eliminarlos +Network warning style: Estilo de advertencia de red +New Remote: Nuevo remoto +No limit configured: Sin límite configurado +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. +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 +obsidianLiveSyncSettingTab: + btnApply: Aplicar + btnCheck: Verificar + btnCopy: Copiar + btnDisable: Desactivar + btnDiscard: Descartar + btnEnable: Activar + btnFix: Corregir + btnGotItAndUpdated: Lo entendí y actualicé. + btnNext: Siguiente + btnStart: Iniciar + btnTest: Probar + btnUse: Usar + buttonFetch: Obtener + buttonNext: Siguiente + defaultLanguage: Predeterminado + descConnectSetupURI: Este es el método recomendado para configurar Self-hosted + LiveSync con una URI de configuración. + descCopySetupURI: ¡Perfecto para configurar un nuevo dispositivo! + descEnableLiveSync: Solo habilita esto después de configurar cualquiera de las + dos opciones anteriores o completar toda la configuración manualmente. + descFetchConfigFromRemote: Obtener las configuraciones necesarias del servidor remoto ya configurado. + descManualSetup: No recomendado, pero útil si no tienes una URI de configuración + descTestDatabaseConnection: Abrir conexión a la base de datos. Si no se + encuentra la base de datos remota y tienes permiso para crear una base de + datos, se creará la base de datos. + descValidateDatabaseConfig: Verifica y soluciona cualquier problema potencial + con la configuración de la base de datos. + errAccessForbidden: Acceso prohibido. + errCannotContinueTest: No se pudo continuar con la prueba. + errCorsCredentials: ❗ cors.credentials es incorrecto + errCorsNotAllowingCredentials: CORS no permite credenciales + errCorsOrigins: ❗ cors.origins es incorrecto + errEnableCors: ❗ httpd.enable_cors es incorrecto + errMaxDocumentSize: ❗ couchdb.max_document_size es bajo) + errMaxRequestSize: ❗ chttpd.max_http_request_size es bajo) + errMissingWwwAuth: ❗ httpd.WWW-Authenticate falta + errRequireValidUser: ❗ chttpd.require_valid_user es incorrecto. + errRequireValidUserAuth: ❗ chttpd_auth.require_valid_user es incorrecto. + labelDisabled: "⏹️ : Desactivado" + labelEnabled: "🔁 : Activado" + levelAdvanced: " (avanzado)" + levelEdgeCase: " (excepción)" + levelPowerUser: " (experto)" + linkOpenInBrowser: Abrir en el navegador + linkPageTop: Ir arriba + linkTipsAndTroubleshooting: Consejos y solución de problemas + linkTroubleshooting: /docs/es/troubleshooting.md + logCannotUseCloudant: Esta función no se puede utilizar con IBM Cloudant. + logCheckingConfigDone: Verificación de configuración completada + logCheckingConfigFailed: La verificación de configuración falló + logCheckingDbConfig: Verificando la configuración de la base de datos + logCheckPassphraseFailed: |- + ERROR: Error al comprobar la frase de contraseña con el servidor remoto: + ${db}. + logConfiguredDisabled: "Modo de sincronización configurado: DESACTIVADO" + logConfiguredLiveSync: "Modo de sincronización configurado: Sincronización en Vivo" + logConfiguredPeriodic: "Modo de sincronización configurado: Periódico" + logCouchDbConfigFail: "Configuración de CouchDB: ${title} falló" + logCouchDbConfigSet: "Configuración de CouchDB: ${title} -> Establecer ${key} en ${value}" + logCouchDbConfigUpdated: "Configuración de CouchDB: ${title} actualizado correctamente" + logDatabaseConnected: Base de datos conectada + logEncryptionNoPassphrase: No puedes habilitar el cifrado sin una frase de contraseña + logEncryptionNoSupport: Tu dispositivo no admite el cifrado. + logErrorOccurred: ¡Ocurrió un error! + logEstimatedSize: "Tamaño estimado: ${size}" + logPassphraseInvalid: La frase de contraseña no es válida, por favor corrígela. + logPassphraseNotCompatible: "ERROR: ¡La frase de contraseña no es compatible con + el servidor remoto! ¡Por favor, revísala de nuevo!" + logRebuildNote: La sincronización ha sido desactivada, obtén y vuelve a activar si lo deseas. + logSelectAnyPreset: Selecciona cualquier preestablecido. + msgAreYouSureProceed: ¿Estás seguro de proceder? + msgChangesNeedToBeApplied: ¡Los cambios deben aplicarse! + msgConfigCheck: --Verificación de configuración-- + msgConfigCheckFailed: La verificación de configuración ha fallado. ¿Quieres + continuar de todos modos? + msgConnectionCheck: --Verificación de conexión-- + msgConnectionProxyNote: Si tienes problemas con la verificación de conexión + (incluso después de verificar la configuración), por favor verifica la + configuración de tu proxy reverso. + msgCurrentOrigin: "Origen actual: {origin}" + msgDiscardConfirmation: ¿Realmente deseas descartar las configuraciones y bases de datos existentes? + msgDone: --Hecho-- + msgEnableCors: Configurar httpd.enable_cors + msgEnableEncryptionRecommendation: Recomendamos habilitar el cifrado de extremo + a extremo y la obfuscación de ruta. ¿Estás seguro de querer continuar sin + cifrado? + msgFetchConfigFromRemote: ¿Quieres obtener la configuración del servidor remoto? + msgGenerateSetupURI: ¡Todo listo! ¿Quieres generar un URI de configuración para + configurar otros dispositivos? + msgIfConfigNotPersistent: Si la configuración del servidor no es persistente + (por ejemplo, ejecutándose en docker), los valores aquí pueden cambiar. Una + vez que puedas conectarte, por favor actualiza las configuraciones en el + local.ini del servidor. + msgInvalidPassphrase: Tu frase de contraseña de cifrado podría ser inválida. + ¿Estás seguro de querer continuar? + msgNewVersionNote: ¿Aquí debido a una notificación de actualización? Por favor, + revise el historial de versiones. Si está satisfecho, haga clic en el botón. + Una nueva actualización volverá a mostrar esto. + msgNonHTTPSInfo: Configurado como URI que no es HTTPS. Ten en cuenta que esto + puede no funcionar en dispositivos móviles. + msgNonHTTPSWarning: No se puede conectar a URI que no sean HTTPS. Por favor, + actualiza tu configuración y vuelve a intentarlo. + msgNotice: ---Aviso--- + msgObjectStorageWarning: >- + ADVERTENCIA: Esta característica está en desarrollo, así que por favor ten + en cuenta lo siguiente: + + - Arquitectura de solo anexado. Se requiere una reconstrucción para reducir + el almacenamiento. + + - Un poco frágil. + + - Al sincronizar por primera vez, todo el historial será transferido desde + el remoto. Ten en cuenta los límites de datos y las velocidades lentas. + + - Solo las diferencias se sincronizan en vivo. + + + Si encuentras algún problema o tienes ideas sobre esta característica, por + favor crea un issue en GitHub. + + Aprecio mucho tu gran dedicación. + msgOriginCheck: "Verificación de origen: {org}" + msgRebuildRequired: >- + Es necesario reconstruir las bases de datos para aplicar los cambios. Por + favor selecciona el método para aplicar los cambios. + + +
+ + Legendas + + + | Símbolo | Significado | + + |: ------ :| ------- | + + | ⇔ | Actualizado | + + | ⇄ | Sincronizar para equilibrar | + + | ⇐,⇒ | Transferir para sobrescribir | + + | ⇠,⇢ | Transferir para sobrescribir desde otro lado | + + +
+ + + ## ${OPTION_REBUILD_BOTH} + + A simple vista: 📄 ⇒¹ 💻 ⇒² 🛰️ ⇢ⁿ 💻 ⇄ⁿ⁺¹ 📄 + + Reconstruir tanto la base de datos local como la remota utilizando los + archivos existentes de este dispositivo. + + Esto bloquea a otros dispositivos, y necesitan realizar la obtención. + + ## ${OPTION_FETCH} + + A simple vista: 📄 ⇄² 💻 ⇐¹ 🛰️ ⇔ 💻 ⇔ 📄 + + Inicializa la base de datos local y la reconstruye utilizando los datos + obtenidos de la base de datos remota. + + Este caso incluye el caso en el que has reconstruido la base de datos + remota. + + ## ${OPTION_ONLY_SETTING} + + Almacena solo la configuración. **Precaución: esto puede provocar corrupción + de datos**; generalmente es necesario reconstruir la base de datos. + msgSelectAndApplyPreset: Por favor, selecciona y aplica cualquier elemento + preestablecido para completar el asistente. + msgSetCorsCredentials: Configurar cors.credentials + msgSetCorsOrigins: Configurar cors.origins + msgSetMaxDocSize: Configurar couchdb.max_document_size + msgSetMaxRequestSize: Configurar chttpd.max_http_request_size + msgSetRequireValidUser: Configurar chttpd.require_valid_user = true + msgSetRequireValidUserAuth: Configurar chttpd_auth.require_valid_user = true + msgSettingModified: La configuración "${setting}" fue modificada desde otro + dispositivo. Haz clic {HERE} para recargar la configuración. Haz clic en + otro lugar para ignorar los cambios. + msgSettingsUnchangeableDuringSync: Estas configuraciones no se pueden cambiar + durante la sincronización. Por favor, deshabilita toda la sincronización en + las "Configuraciones de Sincronización" para desbloquear. + msgSetWwwAuth: Configurar httpd.WWW-Authenticate + nameApplySettings: Aplicar configuraciones + nameConnectSetupURI: Conectar con URI de configuración + nameCopySetupURI: Copiar la configuración actual a una URI de configuración + nameDisableHiddenFileSync: Desactivar sincronización de archivos ocultos + nameDiscardSettings: Descartar configuraciones y bases de datos existentes + nameEnableHiddenFileSync: Activar sincronización de archivos ocultos + nameEnableLiveSync: Activar LiveSync + nameHiddenFileSynchronization: Sincronización de archivos ocultos + nameManualSetup: Configuración manual + nameTestConnection: Probar conexión + nameTestDatabaseConnection: Probar Conexión de Base de Datos + nameValidateDatabaseConfig: Validar Configuración de la Base de Datos + okAdminPrivileges: ✔ Tienes privilegios de administrador. + okCorsCredentials: ✔ cors.credentials está correcto. + okCorsCredentialsForOrigin: CORS credenciales OK + okCorsOriginMatched: ✔ Origen de CORS correcto + okCorsOrigins: ✔ cors.origins está correcto. + okEnableCors: ✔ httpd.enable_cors está correcto. + okMaxDocumentSize: ✔ couchdb.max_document_size está correcto. + okMaxRequestSize: ✔ chttpd.max_http_request_size está correcto. + okRequireValidUser: ✔ chttpd.require_valid_user está correcto. + okRequireValidUserAuth: ✔ chttpd_auth.require_valid_user está correcto. + okWwwAuth: ✔ httpd.WWW-Authenticate está correcto. + optionApply: Aplicar + optionCancel: Cancelar + optionCouchDB: CouchDB + optionDisableAllAutomatic: Desactivar lo automático + optionFetchFromRemote: Obtener del remoto + optionHere: AQUÍ + optionLiveSync: Sincronización LiveSync + optionMinioS3R2: Minio,S3,R2 + optionOkReadEverything: OK, he leído todo. + optionOnEvents: En eventos + optionPeriodicAndEvents: Periódico y en eventos + optionPeriodicWithBatch: Periódico con lote + optionRebuildBoth: Reconstructuir ambos desde este dispositivo + optionSaveOnlySettings: (Peligro) Guardar solo configuración + panelChangeLog: Registro de cambios + panelGeneralSettings: Configuraciones Generales + panelPrivacyEncryption: Privacidad y Cifrado + panelRemoteConfiguration: Configuración remota + panelSetup: Configuración + titleAppearance: Apariencia + titleConflictResolution: Resolución de conflictos + titleCongratulations: ¡Felicidades! + titleCouchDB: Servidor CouchDB + titleDeletionPropagation: Propagación de eliminación + titleEncryptionNotEnabled: El cifrado no está habilitado + titleEncryptionPassphraseInvalid: La frase de contraseña de cifrado es inválida + titleExtraFeatures: Habilitar funciones extras y avanzadas + titleFetchConfig: Obtener configuración + titleFetchConfigFromRemote: Obtener configuración del servidor remoto + titleFetchSettings: Obtener configuraciones + titleHiddenFiles: Archivos ocultos + titleLogging: Registro + titleMinioS3R2: MinIO, S3, R2 + titleNotification: Notificación + titleOnlineTips: Consejos en línea + titleQuickSetup: Configuración rápida + titleRebuildRequired: Reconstrucción necesaria + titleRemoteConfigCheckFailed: La verificación de configuración remota falló + titleRemoteServer: Servidor remoto + titleReset: Reiniciar + titleSetupOtherDevices: Para configurar otros dispositivos + titleSynchronizationMethod: Método de sincronización + titleSynchronizationPreset: Preestablecimiento de sincronización + titleSyncSettings: Configuraciones de Sincronización + titleSyncSettingsViaMarkdown: Configuración de sincronización a través de Markdown + titleUpdateThinning: Actualización de adelgazamiento + warnCorsOriginUnmatched: "⚠ El origen de CORS no coincide: {from}->{to}" + warnNoAdmin: ⚠ No tienes privilegios de administrador. +Ok: Aceptar +Old Algorithm: Algoritmo antiguo +Older fallback (Slow, W/O WebAssembly): Alternativa anterior (lenta, sin WebAssembly) +Open: Abrir +Open the dialog: Abrir el diálogo +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 +paneMaintenance: + markDeviceResolvedAfterBackup: Marcar el dispositivo como resuelto después de hacer una copia de seguridad + remoteLockedAndDeviceNotAccepted: La base de datos remota está bloqueada y este + dispositivo aún no ha sido aceptado. + remoteLockedResolvedDevice: La base de datos remota está bloqueada, pero este + dispositivo ya fue aceptado. + unlockDatabaseReady: Desbloquear la base de datos +Passphrase: 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 +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-to-Peer Synchronisation: Sincronización entre 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 +Pick a file to resolve conflict: Elegir un archivo para resolver el conflicto +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 +Presets: Preconfiguraciones +Process small files in the foreground: Procesar archivos pequeños en primer plano +PureJS fallback (Fast, W/O WebAssembly): Alternativa PureJS (rápida, sin WebAssembly) +Purge all download/upload cache.: Purga toda la caché de descarga y carga. +Purge all journal counter: Purgar todos los contadores del diario +Rebuild local and remote database with local files.: Reconstruye la base de datos local y remota usando los archivos locales. +Rebuilding Operations (Remote Only): Operaciones de reconstrucción (solo remoto) +Recreate all: Recrear todo +Recreate missing chunks for all files: Recrear fragmentos faltantes para todos los archivos +Reducing the frequency with which on-disk changes are reflected into the DB: Reducir frecuencia de actualizaciones de disco a BD +Region: Región +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 server type: Tipo de servidor remoto +Remote Type: Tipo de remoto +Rename: Renombrar +Requires restart of Obsidian: Requiere reiniciar Obsidian +Requires restart of Obsidian.: Requiere reiniciar Obsidian +Resend: Reenviar +Resend all chunks to the remote.: Reenvía todos los chunks al remoto. +Reset: Restablecer +Reset all: Restablecer todo +Reset all journal counter: Restablecer todos los contadores del diario +Reset journal received history: Restablecer historial de recepción del diario +Reset journal sent history: Restablecer historial de envío del diario +Reset received: Restablecer recepción +Reset sent history: Restablecer historial de envío +Reset Synchronisation information: Restablecer información de sincronización +Reset Synchronisation on This Device: Restablecer sincronización en este dispositivo +Resolve All: Resolver todo +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 Now: Reiniciar ahora +Restore or reconstruct local database from remote.: Restaura o reconstruye la base de datos local desde el remoto. +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 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 +Scan customization every 1 minute.: Escanear personalización cada 1 minuto +Scan customization periodically: Escanear personalización periódicamente +Scan for hidden files before replication: Escanear archivos ocultos antes de replicar +Scan hidden files periodically: Escanear archivos ocultos periódicamente +Schedule and Restart: Programar y reiniciar +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 Key: Clave secreta +Select the database adapter to use.: Selecciona el adaptador de base de datos que se usará. +Send: Enviar +Send chunks: Enviar chunks +Server URI: URI del servidor +Setting: + GenerateKeyPair: + Desc: >- + Hemos generado un par de claves. + + + Nota: Este par de claves no volverá a mostrarse. Guárdalo en un lugar + seguro. Si lo pierdes, tendrás que generar uno nuevo. + + Nota 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`. + + Nota 3: La clave pública debe configurarse en la base de datos remota y la + clave privada en los dispositivos locales. + + + >[!SOLO PARA TUS OJOS]- + + >
+ + > + + > ### Clave pública + + > ``` + + ${public_key} + + > ``` + + > + + > ### Clave privada + + > ``` + + ${private_key} + + > ``` + + > + + >
+ + + >[!Ambas para copiar]- + + > + + >
+ + > + + > ``` + + ${public_key} + + ${private_key} + + > ``` + + > + + >
+ Title: ¡Se ha generado un nuevo par de claves! +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? +Should we prompt you for every single merge, even if we can safely merge automatcially?: ¿Preguntar en cada fusión aunque sea automática? +Show full banner: Mostrar banner completo +Show only notifications: Mostrar solo notificaciones +Show status as icons only: Mostrar estado solo con íconos +Show status icon instead of file warnings banner: Mostrar icono de estado en lugar del banner de advertencia de archivos +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. +Starts synchronisation when a file is saved.: Inicia sincronización al guardar un archivo +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 +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 after merging file: Sincronizar tras fusionar archivo +Sync automatically after merging files: Sincronizar automáticamente tras fusionar archivos +Sync Mode: Modo de sincronización +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 +Synchronising files: Archivos sincronizados +Syncing: Sincronización +Target patterns: Patrones objetivo +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 delay for consecutive on-demand fetches: Retraso entre obtenciones consecutivas +The Hash algorithm for chunk IDs: Algoritmo hash para IDs de chunks +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 +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 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. +Transfer Tweak: Ajustes de transferencia +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 +Use a custom passphrase: Usar una frase de contraseña personalizada +Use Custom HTTP Handler: Usar manejador HTTP personalizado +Use dynamic iteration count: Usar conteo de iteraciones dinámico +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 +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 +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. +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。" +"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。" +"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。" +"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。" +"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。" +"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。" +"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。" +"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。" +"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。" diff --git a/src/common/messagesYAML/fr.yaml b/src/common/messagesYAML/fr.yaml new file mode 100644 index 00000000..09d5b990 --- /dev/null +++ b/src/common/messagesYAML/fr.yaml @@ -0,0 +1,1369 @@ +(BETA) Always overwrite with a newer file: (BÊTA) Toujours écraser avec un fichier plus récent +(Beta) Use ignore files: (Bêta) Utiliser les fichiers d'exclusion +(Days passed, 0 to disable automatic-deletion): (Jours écoulés, 0 pour désactiver la suppression automatique) +(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. Lire les fragments en ligne) Si cette option est activée, LiveSync lit les + fragments directement en ligne au lieu de les répliquer localement. + L'augmentation de la taille personnalisée des fragments est recommandée. +(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.: + (Mo) Si cette valeur est définie, les modifications des fichiers locaux et + distants plus grands que cette taille seront ignorées. Si le fichier redevient + plus petit, une version plus récente sera utilisée. +(Mega chars): (Méga caractères) +(Not recommended) If set, credentials will be stored in the file.: (Non recommandé) Si activé, les identifiants seront stockés dans le fichier. +(Obsolete) Use an old adapter for compatibility: (Obsolète) Utiliser un ancien adaptateur pour la compatibilité +Access Key: Clé d'accès +Active Remote Configuration: Configuration distante active +Always prompt merge conflicts: Toujours demander pour les conflits de fusion +Analyse: Analyser +Analyse database usage: Analyser l'utilisation de la base de données +Analyse database usage and generate a TSV report for diagnosis yourself. You can paste the generated report with any spreadsheet you like.: + Analyser l'utilisation de la base de données et générer un rapport TSV pour un + diagnostic personnel. Vous pouvez coller le rapport généré dans le tableur de + votre choix. +Apply Latest Change if Conflicting: Appliquer la dernière modification en cas de conflit +Apply preset configuration: Appliquer une configuration prédéfinie +Automatically Sync all files when opening Obsidian.: Synchroniser automatiquement tous les fichiers à l'ouverture d'Obsidian. +Batch database update: Mise à jour groupée de la base de données +Batch limit: Limite de lot +Batch size: Taille de lot +Batch size of on-demand fetching: Taille de lot pour la récupération à la demande +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.: + Avant la version v0.17.16, nous utilisions un ancien adaptateur pour la base + de données locale. Le nouvel adaptateur est désormais recommandé. Cependant, + il nécessite une reconstruction de la base locale. Veuillez désactiver cette + option lorsque vous aurez suffisamment de temps. Si elle reste activée, il + vous sera également demandé de la désactiver lors de la récupération depuis + la base distante. +Bucket Name: Nom du bucket +Check: Vérifier +cmdConfigSync: + showCustomizationSync: Afficher la synchronisation de personnalisation +Comma separated `.gitignore, .dockerignore`: Séparés par des virgules `.gitignore, .dockerignore` +Compute revisions for chunks: Calculer les révisions pour les fragments +Copy Report to clipboard: Copier le rapport dans le presse-papiers +Data Compression: Compression des données +Database Name: Nom de la base de données +Database suffix: Suffixe de la base de données +Delay conflict resolution of inactive files: Différer la résolution des conflits pour les fichiers inactifs +Delay merge conflict prompt for inactive files.: Différer l'invite de conflit de fusion pour les fichiers inactifs. +Delete old metadata of deleted files on start-up: Supprimer les anciennes métadonnées des fichiers effacés au démarrage +Device name: Nom de l'appareil +dialog: + yourLanguageAvailable: + _value: >- + Self-hosted LiveSync dispose d'une traduction pour votre langue, le + paramètre %{Display language} a donc été activé. + + + Note : Tous les messages ne sont pas traduits. Nous attendons vos + contributions ! + + Note 2 : Si vous créez un ticket, **veuillez revenir à %{lang-def}** puis + prendre des captures d'écran, messages et journaux. Cela peut être fait + dans la boîte de dialogue des paramètres. + + Bonne utilisation ! + btnRevertToDefault: Conserver %{lang-def} + Title: " Une traduction est disponible !" +Disables logging, only shows notifications. Please disable if you report an issue.: + Désactive la journalisation, n'affiche que les notifications. Veuillez + désactiver si vous signalez un problème. +Display Language: Langue d'affichage +Do not check configuration mismatch before replication: Ne pas vérifier les incohérences de configuration avant la réplication +Do not keep metadata of deleted files.: Ne pas conserver les métadonnées des fichiers supprimés. +Do not split chunks in the background: Ne pas fragmenter en arrière-plan +Do not use internal API: Ne pas utiliser l'API interne +Doctor: + Button: + DismissThisVersion: Non, et ne plus demander jusqu'à la prochaine version + Fix: Corriger + FixButNoRebuild: Corriger mais sans reconstruction + No: Non + Skip: Laisser tel quel + Yes: Oui + Dialogue: + Main: >- + Bonjour ! Config Doctor a été activé en raison de ${activateReason} ! + + Et, malheureusement, certaines configurations ont été détectées comme des + problèmes potentiels. + + Pas d'inquiétude. Résolvons-les un par un. + + + Pour information, nous allons vous interroger sur les éléments suivants. + + + ${issues} + + + Voulez-vous commencer ? + MainFix: |- + + ## ${name} + + | Actuel | Idéal | + |:---:|:---:| + | ${current} | ${ideal} | + + **Niveau de recommandation :** ${level} + + ### Pourquoi ceci a-t-il été détecté ? + + ${reason} + + ${note} + + Corriger à la valeur idéale ? + Title: Docteur Config Self-hosted LiveSync + TitleAlmostDone: Presque terminé ! + TitleFix: Corriger le problème ${current}/${total} + Level: + Must: Obligatoire + Necessary: Nécessaire + Optional: Optionnel + Recommended: Recommandé + Message: + NoIssues: Aucun problème détecté ! + RebuildLocalRequired: Attention ! Une reconstruction de la base locale est requise pour appliquer ceci ! + RebuildRequired: Attention ! Une reconstruction est requise pour appliquer ceci ! + SomeSkipped: Nous avons laissé certains problèmes en l'état. Dois-je vous demander à nouveau au prochain démarrage ? + RULES: + E2EE_V02500: + REASON: Le chiffrement de bout en bout est désormais plus robuste et plus + rapide. Aussi parce que le précédent E2EE s'est révélé compromis lors + d'une nouvelle revue de code. Il doit être appliqué dès que possible. + Nous nous excusons sincèrement pour la gêne occasionnée. Ce paramètre + n'est pas compatible avec les versions antérieures. Tous les appareils + synchronisés doivent être mis à jour en v0.25.0 ou supérieur. Les + reconstructions ne sont pas requises et seront converties du nouveau + transfert vers le nouveau format. Il est toutefois recommandé de + reconstruire dans la mesure du possible. +Enable advanced features: Activer les fonctionnalités avancées +Enable customization sync: Activer la synchronisation de personnalisation +Enable Developers' Debug Tools.: Activer les outils de débogage pour développeurs. +Enable edge case treatment features: Activer les fonctionnalités pour cas particuliers +Enable poweruser features: Activer les fonctionnalités pour utilisateurs avancés +Enable this if your Object Storage doesn't support CORS: Activer ceci si votre stockage objet ne prend pas en charge CORS +Enable this option to automatically apply the most recent change to documents even when it conflicts: + Activer cette option pour appliquer automatiquement la modification la plus + récente aux documents même en cas de conflit +Encrypt contents on the remote database. If you use the plugin's synchronization feature, enabling this is recommended.: + Chiffrer le contenu sur la base de données distante. Si vous utilisez la + fonction de synchronisation du plugin, l'activation est recommandée. +Encrypting sensitive configuration items: Chiffrement des éléments de configuration sensibles +Encryption phassphrase. If changed, you should overwrite the server's database with the new (encrypted) files.: + Phrase secrète de chiffrement. Si modifiée, vous devriez écraser la base de + données du serveur avec les nouveaux fichiers (chiffrés). +End-to-End Encryption: Chiffrement de bout en bout +Endpoint URL: URL du point de terminaison +Enhance chunk size: Améliorer la taille des fragments +Fetch chunks on demand: Récupérer les fragments à la demande +Fetch database with previous behaviour: Récupérer la base de données avec le comportement précédent +Filename: Nom de fichier +Forces the file to be synced when opened.: Force la synchronisation du fichier à son ouverture. +Handle files as Case-Sensitive: Gérer les fichiers en respectant la casse +If disabled(toggled), chunks will be split on the UI thread (Previous behaviour).: + Si désactivé, les fragments seront découpés sur le thread UI (comportement + précédent). +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.: + Si activée, la synchronisation de personnalisation efficace par fichier sera + utilisée. Une petite migration est nécessaire lors de l'activation. Tous les + appareils doivent être à jour en v0.23.18. Une fois cette option activée, + la compatibilité avec les anciennes versions est perdue. +If enabled, chunks will be split into no more than 100 items. However, dedupe is slightly weaker.: + Si activée, les fragments seront découpés en 100 éléments au maximum. + Cependant, la déduplication est légèrement moins efficace. +If enabled, newly created chunks are temporarily kept within the document, and graduated to become independent chunks once stabilised.: + Si activée, les fragments nouvellement créés sont temporairement conservés + dans le document et promus en fragments indépendants une fois stabilisés. +If enabled, the ⛔ icon will be shown inside the status instead of the file warnings banner. No details will be shown.: + Si activée, l'icône ⛔ s'affichera dans le statut à la place de la bannière + d'avertissements de fichiers. Aucun détail ne sera affiché. +If enabled, the file under 1kb will be processed in the UI thread.: Si activée, les fichiers de moins de 1 Ko seront traités sur le thread UI. +If enabled, the notification of hidden files change will be suppressed.: Si activée, les notifications de modifications des fichiers cachés seront supprimées. +If this enabled, all chunks will be stored with the revision made from its content. (Previous behaviour): + Si activée, tous les fragments seront stockés avec la révision issue de leur + contenu. (Comportement précédent) +If this enabled, All files are handled as case-Sensitive (Previous behaviour).: Si activée, tous les fichiers sont gérés en respectant la casse (comportement précédent). +If this enabled, chunks will be split into semantically meaningful segments. Not all platforms support this feature.: + Si activée, les fragments seront découpés en segments sémantiquement + signifiants. Toutes les plateformes ne prennent pas en charge cette + fonctionnalité. +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.: + Si défini, les modifications des fichiers locaux correspondant aux fichiers + d'exclusion seront ignorées. Les changements distants sont déterminés à + l'aide des fichiers d'exclusion locaux. +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.: + Si cette option est activée, PouchDB maintiendra la connexion ouverte pendant + 60 secondes, et si aucun changement n'arrive durant cette période, fermera + et rouvrira la socket au lieu de la garder ouverte indéfiniment. Utile + lorsqu'un proxy limite la durée des requêtes, mais peut augmenter + l'utilisation des ressources. +Ignore files: Fichiers d'exclusion +Incubate Chunks in Document: Incuber les fragments dans le document +Interval (sec): Intervalle (sec) +K: + exp: Expérimental + long_p2p_sync: "%{title_p2p_sync}" + P2P: "%{Peer}-à-%{Peer}" + Peer: Pair + ScanCustomization: Analyser la personnalisation + short_p2p_sync: Sync P2P + title_p2p_sync: Synchronisation pair-à-pair +Keep empty folder: Conserver les dossiers vides +lang_def: Par défaut +lang-de: Deutsche +lang-def: "%{lang_def}" +lang-es: Español +lang-fr: Français +lang-ja: 日本語 +lang-ko: 한국어 +lang-ru: Русский +lang-zh: 简体中文 +lang-zh-tw: 繁體中文 +LiveSync could not handle multiple vaults which have same name without different prefix, This should be automatically configured.: + LiveSync ne peut pas gérer plusieurs coffres portant le même nom sans préfixe + distinct. Ceci devrait être configuré automatiquement. +liveSyncReplicator: + beforeLiveSync: Avant LiveSync, lancement d'un OneShot initial... + cantReplicateLowerValue: Impossible de répliquer une valeur inférieure. + checkingLastSyncPoint: Recherche du dernier point de synchronisation. + couldNotConnectTo: |- + Connexion impossible à ${uri} : ${name} + (${db}) + couldNotConnectToRemoteDb: "Connexion à la base distante impossible : ${d}" + couldNotConnectToServer: Connexion au serveur impossible. + couldNotConnectToURI: Connexion impossible à ${uri}:${dbRet} + couldNotMarkResolveRemoteDb: Impossible de marquer la résolution de la base distante. + liveSyncBegin: Démarrage de LiveSync... + lockRemoteDb: Verrouillage de la base distante pour éviter la corruption des données + markDeviceResolved: Marquer cet appareil comme « résolu ». + oneShotSyncBegin: Démarrage de la synchronisation OneShot... (${syncMode}) + remoteDbCorrupted: La base distante est plus récente ou corrompue, assurez-vous + d'avoir installé la dernière version de self-hosted-livesync + remoteDbCreatedOrConnected: Base distante créée ou connectée + remoteDbDestroyed: Base distante détruite + remoteDbDestroyError: "Un problème est survenu lors de la destruction de la base distante :" + remoteDbMarkedResolved: La base distante a été marquée comme résolue. + replicationClosed: Réplication fermée + replicationInProgress: Une réplication est déjà en cours + retryLowerBatchSize: Nouvelle tentative avec une taille de lot réduite :${batch_size}/${batches_limit} + unlockRemoteDb: Déverrouillage de la base distante pour éviter la corruption des données +liveSyncSetting: + errorNoSuchSettingItem: "Élément de paramètre inexistant : ${key}" + originalValue: "Original : ${value}" + valueShouldBeInRange: La valeur doit être ${min} < valeur < ${max} +liveSyncSettings: + btnApply: Appliquer +logPane: + autoScroll: Défilement automatique + logWindowOpened: Fenêtre des journaux ouverte + pause: Pause + title: Journaux Self-hosted LiveSync + wrap: Retour à la ligne +Maximum delay for batch database updating: Délai maximum pour la mise à jour groupée de la base +Maximum file size: Taille maximale de fichier +Maximum Incubating Chunk Size: Taille maximale des fragments en incubation +Maximum Incubating Chunks: Nombre maximum de fragments en incubation +Maximum Incubation Period: Période maximale d'incubation +MB (0 to disable).: Mo (0 pour désactiver). +Memory cache size (by total characters): Taille du cache mémoire (par nombre total de caractères) +Memory cache size (by total items): Taille du cache mémoire (par nombre total d'éléments) +Minimum delay for batch database updating: Délai minimum pour la mise à jour groupée de la base +Minimum interval for syncing: Intervalle minimum pour la synchronisation +moduleCheckRemoteSize: + logCheckingStorageSizes: Vérification des tailles de stockage + logCurrentStorageSize: "Taille du stockage distant : ${measuredSize}" + logExceededWarning: "Taille du stockage distant : ${measuredSize} a dépassé ${notifySize}" + logThresholdEnlarged: Le seuil a été augmenté à ${size} Mo + msgConfirmRebuild: Cela peut prendre un certain temps. Voulez-vous vraiment + tout reconstruire maintenant ? + msgDatabaseGrowing: | + **Votre base de données grossit !** Pas d'inquiétude, nous pouvons y remédier dès maintenant, avant de manquer d'espace sur le stockage distant. + + | Taille mesurée | Taille configurée | + | --- | --- | + | ${estimatedSize} | ${maxSize} | + + > [!MORE]- + > Si vous l'utilisez depuis de nombreuses années, il peut y avoir des fragments non référencés — des déchets, en somme — accumulés dans la base. Nous recommandons donc de tout reconstruire. Cela réduira probablement beaucoup la taille. + > + > Si le volume de votre coffre augmente simplement, il est préférable de tout reconstruire après avoir organisé les fichiers. Self-hosted LiveSync ne supprime pas réellement les données même si vous les effacez, afin d'accélérer le processus. Ceci est documenté grossièrement [ici](https://github.com/vrtmrz/obsidian-livesync/blob/main/docs/tech_info.md). + > + > Si cela ne vous dérange pas, vous pouvez augmenter la limite de notification de 100 Mo. C'est le cas si vous l'exécutez sur votre propre serveur. Il reste toutefois préférable de tout reconstruire de temps en temps. + > + + > [!WARNING] + > Si vous tout reconstruisez, assurez-vous que tous les appareils sont synchronisés. Le plug-in fusionnera autant que possible cependant. + msgSetDBCapacity: > + Nous pouvons définir un avertissement de capacité maximale de la base de + données, **afin d'agir avant de manquer d'espace sur le stockage distant**. + + Voulez-vous activer ceci ? + + + > [!MORE]- + + > - 0 : Ne pas avertir sur la taille de stockage. + + > Recommandé si vous avez suffisamment d'espace sur le stockage distant, + surtout en auto-hébergement. Vous pouvez vérifier la taille et reconstruire + manuellement. + + > - 800 : Avertir si la taille du stockage distant dépasse 800 Mo. + + > Recommandé si vous utilisez fly.io avec une limite de 1 Go ou IBM + Cloudant. + + > - 2000 : Avertir si la taille du stockage distant dépasse 2 Go. + + + Si la limite est atteinte, il nous sera proposé de l'augmenter étape par + étape. + option2GB: 2 Go (Standard) + option800MB: 800 Mo (Cloudant, fly.io) + optionAskMeLater: Me demander plus tard + optionDismiss: Ignorer + optionIncreaseLimit: augmenter à ${newMax} Mo + optionNoWarn: Non, ne jamais avertir + optionRebuildAll: Tout reconstruire maintenant + titleDatabaseSizeLimitExceeded: Taille du stockage distant au-delà de la limite + titleDatabaseSizeNotify: Configuration de la notification de taille de base +moduleInputUIObsidian: + defaultTitleConfirmation: Confirmation + defaultTitleSelect: Sélection + optionNo: Non + optionYes: Oui +moduleLiveSyncMain: + logAdditionalSafetyScan: Analyse de sécurité supplémentaire... + logLoadingPlugin: Chargement du plugin... + logPluginInitCancelled: L'initialisation du plugin a été annulée par un module + logPluginVersion: Self-hosted LiveSync v${manifestVersion} ${packageVersion} + logReadChangelog: LiveSync a été mis à jour, veuillez lire le journal des modifications ! + logSafetyScanCompleted: Analyse de sécurité supplémentaire terminée + logSafetyScanFailed: L'analyse de sécurité supplémentaire a échoué sur un module + logUnloadingPlugin: Déchargement du plugin... + logVersionUpdate: LiveSync a été mis à jour. En cas de mises à jour non + rétrocompatibles, toute synchronisation automatique a été temporairement + désactivée. Assurez-vous que tous les appareils sont à jour avant + d'activer. + msgScramEnabled: > + Self-hosted LiveSync a été configuré pour ignorer certains événements. + Est-ce correct ? + + + | Type | Statut | Note | + + |:---:|:---:|---| + + | Événements de stockage | ${fileWatchingStatus} | Toute modification sera + ignorée | + + | Événements de base | ${parseReplicationStatus} | Tout changement + synchronisé sera reporté | + + + Voulez-vous les reprendre et redémarrer Obsidian ? + + + > [!DETAILS]- + + > Ces indicateurs sont définis par le plug-in lors d'une reconstruction ou + d'une récupération. Si le processus se termine anormalement, ils peuvent + rester activés involontairement. + + > Si vous n'êtes pas certain, vous pouvez relancer ces processus. Veillez + à sauvegarder votre coffre. + optionKeepLiveSyncDisabled: Garder LiveSync désactivé + optionResumeAndRestart: Reprendre et redémarrer Obsidian + titleScramEnabled: Mode Scram activé +moduleLocalDatabase: + logWaitingForReady: En attente de disponibilité... +moduleLog: + showLog: Afficher le journal +moduleMigration: + docUri: https://github.com/vrtmrz/obsidian-livesync/blob/main/README.md#how-to-use + fix0256: + buttons: + checkItLater: Vérifier plus tard + DismissForever: J'ai corrigé, et ne plus demander + fix: Corriger + message: > + En raison d'un bug récent (en v0.25.6), certains fichiers peuvent ne pas + avoir été enregistrés correctement dans la base de synchronisation. + + Nous avons analysé vos fichiers et trouvé ceux à corriger. + + + **Fichiers prêts à être corrigés :** + + + ${files} + + + Ces fichiers ont un original de taille correspondante sur le stockage, + et sont probablement récupérables. + + Nous pouvons les utiliser pour corriger la base, veuillez cliquer sur + le bouton « Corriger » ci-dessous pour les réparer. + + + ${messageUnrecoverable} + + + Si vous voulez relancer l'opération, vous pouvez le faire depuis Hatch. + messageUnrecoverable: > + **Fichiers non réparables sur cet appareil :** + + + ${filesNotRecoverable} + + + Ces fichiers ont des métadonnées incohérentes et ne peuvent être + corrigés sur cet appareil (le plus souvent, nous ne pouvons déterminer + lequel est correct). + + Pour les restaurer, vérifiez vos autres appareils (par cette même + fonction) ou restaurez-les manuellement depuis une sauvegarde. + title: Fichiers corrompus détectés + insecureChunkExist: + buttons: + fetch: J'ai déjà reconstruit le distant. Récupérer depuis le distant + later: Je le ferai plus tard + rebuild: Tout reconstruire + laterMessage: Nous recommandons fortement de traiter ceci dès que possible ! + message: > + Certains fragments ne sont pas stockés de façon sécurisée et ne sont pas + chiffrés dans les bases. + + **Veuillez reconstruire la base pour corriger ce problème.** + + + Si votre base distante n'est pas configurée avec SSL, ou utilise des + identifiants peu sûrs, **vous risquez d'exposer des données sensibles**. + + + Note : Veuillez mettre à jour Self-hosted LiveSync en v0.25.6 ou + supérieur sur tous vos appareils, et sauvegardez votre coffre avec soin. + + Note 2 : Tout reconstruire et Récupérer consomme un peu de temps et de + bande passante, veuillez le faire hors des heures de pointe et avec une + connexion réseau stable. + title: Fragments non sécurisés détectés ! + logBulkSendCorrupted: L'envoi groupé de fragments a été activé, mais cette + fonctionnalité était corrompue. Désolé pour la gêne. Désactivée + automatiquement. + logFetchRemoteTweakFailed: Échec de la récupération des valeurs d'ajustement distantes + logLocalDatabaseNotReady: Un problème est survenu ! La base locale n'est pas prête + logMigratedSameBehaviour: Migration vers db:${current} avec le même comportement qu'auparavant + logMigrationFailed: Migration échouée ou annulée de ${old} vers ${current} + logRedflag2CreationFail: Échec de création de redflag2 + logRemoteTweakUnavailable: Impossible d'obtenir les valeurs d'ajustement distantes + logSetupCancelled: La configuration a été annulée, Self-hosted LiveSync attend votre configuration ! + msgFetchRemoteAgain: >- + Comme vous le savez peut-être déjà, Self-hosted LiveSync a modifié son + comportement par défaut et la structure de sa base de données. + + + Et, grâce à votre temps et vos efforts, la base distante semble déjà + avoir été migrée. Félicitations ! + + + Cependant, il faut encore un peu plus. La configuration de cet appareil + n'est pas compatible avec la base distante. Nous devrons récupérer à + nouveau la base distante. Devons-nous récupérer depuis le distant + maintenant ? + + + ___Note : Nous ne pouvons pas synchroniser tant que la configuration n'a + pas été modifiée et que la base n'a pas été récupérée à nouveau.___ + + ___Note 2 : Les fragments sont complètement immuables, nous ne pouvons + récupérer que les métadonnées et les différences.___ + msgInitialSetup: >- + Votre appareil n'a **pas encore été configuré**. Laissez-moi vous guider + dans le processus de configuration. + + + Veuillez noter que chaque contenu de boîte de dialogue peut être copié + dans le presse-papiers. Si vous souhaitez vous y référer plus tard, vous + pouvez le coller dans une note d'Obsidian. Vous pouvez également le + traduire dans votre langue via un outil de traduction. + + + Tout d'abord, disposez-vous d'une **URI de configuration** ? + + + Note : Si vous ne savez pas ce que c'est, consultez la + [documentation](${URI_DOC}). + msgRecommendSetupUri: >- + Nous recommandons vivement de générer une URI de configuration et de + l'utiliser. + + Si vous ne connaissez pas, veuillez consulter la + [documentation](${URI_DOC}) (Désolé encore, mais c'est important). + + + Comment souhaitez-vous effectuer la configuration manuellement ? + msgSinceV02321: >- + Depuis la v0.23.21, Self-hosted LiveSync a modifié son comportement par + défaut et la structure de sa base. Les changements suivants ont été + effectués : + + + 1. **Sensibilité à la casse des noms de fichiers** + La gestion des noms de fichiers est désormais insensible à la casse. C'est un changement bénéfique pour la plupart des plateformes, hormis Linux et iOS, qui ne gèrent pas efficacement la casse des noms de fichiers. + (Sur celles-ci, un avertissement s'affichera pour les fichiers portant le même nom avec une casse différente). + + 2. **Gestion des révisions des fragments** + Les fragments sont immuables, ce qui permet de fixer leurs révisions. Ce changement améliore les performances d'enregistrement des fichiers. + + ___Cependant, pour activer l'un ou l'autre de ces changements, les bases + locale et distante doivent être reconstruites. Ce processus prend quelques + minutes, et nous recommandons de le faire quand vous avez le temps.___ + + + - Si vous souhaitez conserver le comportement précédent, vous pouvez + ignorer ce processus via `${KEEP}`. + + - Si vous n'avez pas le temps, choisissez `${DISMISS}`. Vous serez invité + à nouveau plus tard. + + - Si vous avez reconstruit la base sur un autre appareil, sélectionnez + `${DISMISS}` et réessayez la synchronisation. Une différence étant + détectée, vous serez invité à nouveau. + optionAdjustRemote: Ajuster au distant + optionDecideLater: Décider plus tard + optionEnableBoth: Activer les deux + optionEnableFilenameCaseInsensitive: "Activer seulement #1" + optionEnableFixedRevisionForChunks: "Activer seulement #2" + optionHaveSetupUri: Oui, j'en ai une + optionKeepPreviousBehaviour: Conserver le comportement précédent + optionManualSetup: Tout configurer manuellement + optionNoAskAgain: Non, demandez à nouveau + optionNoSetupUri: Non, je n'en ai pas + optionRemindNextLaunch: Me rappeler au prochain lancement + optionSetupViaP2P: Utiliser %{short_p2p_sync} pour configurer + optionSetupWizard: Ouvrir l'assistant de configuration + optionYesFetchAgain: Oui, récupérer à nouveau + titleCaseSensitivity: Sensibilité à la casse + titleRecommendSetupUri: Recommandation d'utilisation de l'URI de configuration + titleWelcome: Bienvenue dans Self-hosted LiveSync +moduleObsidianMenu: + replicate: Répliquer +Move remotely deleted files to the trash, instead of deleting.: Déplacer les fichiers supprimés à distance vers la corbeille, au lieu de les supprimer. +Not all messages have been translated. And, please revert to "Default" when reporting errors.: + Tous les messages n'ont pas été traduits. Et veuillez revenir à « Par + défaut » lorsque vous signalez des erreurs. +Notify all setting files: Notifier tous les fichiers de paramètres +Notify customized: Notifier les personnalisations +Notify when other device has newly customized.: Notifier lorsqu'un autre appareil a une nouvelle personnalisation. +Notify when the estimated remote storage size exceeds on start up: Notifier quand la taille estimée du stockage distant est dépassée au démarrage +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.: + Nombre de lots à traiter à la fois. Par défaut 40. Minimum 2. Ceci, avec la + taille de lot, contrôle le nombre de documents conservés en mémoire à la fois. +Number of changes to sync at a time. Defaults to 50. Minimum is 2.: Nombre de modifications à synchroniser à la fois. Par défaut 50. Minimum 2. +obsidianLiveSyncSettingTab: + btnApply: Appliquer + btnCheck: Vérifier + btnCopy: Copier + btnDisable: Désactiver + btnDiscard: Abandonner + btnEnable: Activer + btnFix: Corriger + btnGotItAndUpdated: J'ai compris et mis à jour. + btnNext: Suivant + btnStart: Démarrer + btnTest: Tester + btnUse: Utiliser + buttonFetch: Récupérer + buttonNext: Suivant + defaultLanguage: Par défaut + descConnectSetupURI: Méthode recommandée pour configurer Self-hosted LiveSync + avec une URI de configuration. + descCopySetupURI: Parfait pour configurer un nouvel appareil ! + descEnableLiveSync: N'activez ceci qu'après avoir configuré l'une des deux + options ci-dessus ou terminé toute la configuration manuellement. + descFetchConfigFromRemote: Récupérer les paramètres nécessaires depuis un serveur distant déjà configuré. + descManualSetup: Non recommandé, mais utile si vous n'avez pas d'URI de configuration + descTestDatabaseConnection: Ouvrir la connexion à la base de données. Si la base + distante est introuvable et que vous avez l'autorisation de créer une base, + elle sera créée. + descValidateDatabaseConfig: Vérifie et corrige les problèmes potentiels de la configuration de la base. + errAccessForbidden: ❗ Accès interdit. + errCannotContinueTest: Impossible de poursuivre le test. + errCorsCredentials: ❗ cors.credentials est incorrect + errCorsNotAllowingCredentials: ❗ CORS n'autorise pas les identifiants + errCorsOrigins: ❗ cors.origins est incorrect + errEnableCors: ❗ httpd.enable_cors est incorrect + errEnableCorsChttpd: ❗ chttpd.enable_cors est incorrect + errMaxDocumentSize: ❗ couchdb.max_document_size est trop bas) + errMaxRequestSize: ❗ chttpd.max_http_request_size est trop bas) + errMissingWwwAuth: ❗ httpd.WWW-Authenticate est manquant + errRequireValidUser: ❗ chttpd.require_valid_user est incorrect. + errRequireValidUserAuth: ❗ chttpd_auth.require_valid_user est incorrect. + labelDisabled: "⏹️ : Désactivé" + labelEnabled: "🔁 : Activé" + levelAdvanced: " (Avancé)" + levelEdgeCase: " (Cas particulier)" + levelPowerUser: " (Utilisateur avancé)" + linkOpenInBrowser: Ouvrir dans le navigateur + linkPageTop: Haut de la page + linkTipsAndTroubleshooting: Conseils et dépannage + linkTroubleshooting: /docs/troubleshooting.md + logCannotUseCloudant: Cette fonctionnalité ne peut pas être utilisée avec IBM Cloudant. + logCheckingConfigDone: Vérification de la configuration terminée + logCheckingConfigFailed: Échec de la vérification de la configuration + logCheckingDbConfig: Vérification de la configuration de la base + logCheckPassphraseFailed: |- + ERREUR : Échec de la vérification de la phrase secrète avec le serveur distant : + ${db}. + logConfiguredDisabled: "Mode de synchronisation configuré : DÉSACTIVÉ" + logConfiguredLiveSync: "Mode de synchronisation configuré : LiveSync" + logConfiguredPeriodic: "Mode de synchronisation configuré : Périodique" + logCouchDbConfigFail: "Configuration CouchDB : échec de ${title}" + logCouchDbConfigSet: "Configuration CouchDB : ${title} -> ${key} défini à ${value}" + logCouchDbConfigUpdated: "Configuration CouchDB : ${title} mise à jour avec succès" + logDatabaseConnected: Base de données connectée + logEncryptionNoPassphrase: Impossible d'activer le chiffrement sans phrase secrète + logEncryptionNoSupport: Votre appareil ne prend pas en charge le chiffrement. + logErrorOccurred: Une erreur s'est produite !! + logEstimatedSize: "Taille estimée : ${size}" + logPassphraseInvalid: La phrase secrète est invalide, veuillez la corriger. + logPassphraseNotCompatible: "ERREUR : la phrase secrète n'est pas compatible + avec le serveur distant ! Veuillez vérifier à nouveau !" + logRebuildNote: La synchronisation a été désactivée, récupérez et réactivez si souhaité. + logSelectAnyPreset: Sélectionnez un préréglage. + msgAreYouSureProceed: Êtes-vous sûr de vouloir continuer ? + msgChangesNeedToBeApplied: Des modifications doivent être appliquées ! + msgConfigCheck: --Vérification de la configuration-- + msgConfigCheckFailed: La vérification de la configuration a échoué. Voulez-vous continuer malgré tout ? + msgConnectionCheck: --Vérification de la connexion-- + msgConnectionProxyNote: Si vous rencontrez des problèmes de vérification de + connexion (même après avoir vérifié la configuration), veuillez vérifier + votre configuration de reverse proxy. + msgCurrentOrigin: "Origine actuelle : ${origin}" + msgDiscardConfirmation: Voulez-vous vraiment abandonner les paramètres et bases existants ? + msgDone: --Terminé-- + msgEnableCors: Définir httpd.enable_cors + msgEnableCorsChttpd: Définir chttpd.enable_cors + msgEnableEncryptionRecommendation: Nous recommandons d'activer le chiffrement + de bout en bout et l'obfuscation des chemins. Êtes-vous sûr de vouloir + continuer sans chiffrement ? + msgFetchConfigFromRemote: Voulez-vous récupérer la configuration depuis le serveur distant ? + msgGenerateSetupURI: Tout est prêt ! Voulez-vous générer une URI de configuration pour configurer d'autres appareils ? + msgIfConfigNotPersistent: Si la configuration du serveur n'est pas persistante + (par ex. fonctionnant sur Docker), les valeurs peuvent changer. Une fois la + connexion établie, mettez à jour les paramètres dans le local.ini du + serveur. + msgInvalidPassphrase: Votre phrase secrète de chiffrement peut être invalide. + Êtes-vous sûr de vouloir continuer ? + msgNewVersionNote: Arrivé ici suite à une notification de mise à jour ? Consultez + l'historique des versions. Si vous êtes satisfait, cliquez sur le bouton. + Une nouvelle mise à jour reproposera ceci. + msgNonHTTPSInfo: Configuré avec une URI non HTTPS. Attention, ceci peut ne pas fonctionner sur les appareils mobiles. + msgNonHTTPSWarning: Connexion impossible à une URI non HTTPS. Mettez à jour votre configuration et réessayez. + msgNotice: ---Avis--- + msgObjectStorageWarning: >- + AVERTISSEMENT : cette fonctionnalité est en cours de développement, gardez + à l'esprit ce qui suit : + + - Architecture en ajout seul. Une reconstruction est nécessaire pour + réduire le stockage. + + - Un peu fragile. + + - Lors de la première synchronisation, tout l'historique sera transféré + depuis le distant. Attention aux limites de données et aux débits lents. + + - Seules les différences sont synchronisées en direct. + + + Si vous rencontrez des problèmes ou avez des idées sur cette + fonctionnalité, merci d'ouvrir un ticket sur GitHub. + + Merci pour votre grand dévouement. + msgOriginCheck: "Vérification d'origine : ${org}" + msgRebuildRequired: >- + La reconstruction des bases de données est nécessaire pour appliquer les + changements. Veuillez sélectionner la méthode d'application. + + +
+ + Légende + + + | Symbole | Signification | + + |: ------ :| ------- | + + | ⇔ | À jour | + + | ⇄ | Synchroniser pour équilibrer | + + | ⇐,⇒ | Transférer pour écraser | + + | ⇠,⇢ | Transférer pour écraser depuis l'autre côté | + + +
+ + + ## ${OPTION_REBUILD_BOTH} + + En bref : 📄 ⇒¹ 💻 ⇒² 🛰️ ⇢ⁿ 💻 ⇄ⁿ⁺¹ 📄 + + Reconstruit les bases locale et distante à partir des fichiers existants de + cet appareil. + + Ceci provoque un verrouillage des autres appareils, qui devront effectuer + une récupération. + + ## ${OPTION_FETCH} + + En bref : 📄 ⇄² 💻 ⇐¹ 🛰️ ⇔ 💻 ⇔ 📄 + + Initialise la base locale et la reconstruit à partir des données récupérées + depuis la base distante. + + Ce cas inclut également celui où vous avez reconstruit la base distante. + + ## ${OPTION_ONLY_SETTING} + + Ne stocker que les paramètres. **Attention : cela peut entraîner une + corruption des données** ; une reconstruction de la base est généralement + nécessaire. + msgSelectAndApplyPreset: Veuillez sélectionner et appliquer un préréglage pour terminer l'assistant. + msgSetCorsCredentials: Définir cors.credentials + msgSetCorsOrigins: Définir cors.origins + msgSetMaxDocSize: Définir couchdb.max_document_size + msgSetMaxRequestSize: Définir chttpd.max_http_request_size + msgSetRequireValidUser: Définir chttpd.require_valid_user = true + msgSetRequireValidUserAuth: Définir chttpd_auth.require_valid_user = true + msgSettingModified: Le paramètre « ${setting} » a été modifié depuis un autre + appareil. Cliquez sur {HERE} pour recharger les paramètres. Cliquez + ailleurs pour ignorer les modifications. + msgSettingsUnchangeableDuringSync: Ces paramètres ne peuvent pas être modifiés + durant la synchronisation. Désactivez toute synchronisation dans + « Paramètres de synchronisation » pour déverrouiller. + msgSetWwwAuth: Définir httpd.WWW-Authenticate + nameApplySettings: Appliquer les paramètres + nameConnectSetupURI: Se connecter avec une URI de configuration + nameCopySetupURI: Copier les paramètres actuels vers une URI de configuration + nameDisableHiddenFileSync: Désactiver la synchronisation des fichiers cachés + nameDiscardSettings: Abandonner les paramètres et bases existants + nameEnableHiddenFileSync: Activer la synchronisation des fichiers cachés + nameEnableLiveSync: Activer LiveSync + nameHiddenFileSynchronization: Synchronisation des fichiers cachés + nameManualSetup: Configuration manuelle + nameTestConnection: Tester la connexion + nameTestDatabaseConnection: Tester la connexion à la base de données + nameValidateDatabaseConfig: Valider la configuration de la base de données + okAdminPrivileges: ✔ Vous disposez des privilèges administrateur. + okCorsCredentials: ✔ cors.credentials est correct. + okCorsCredentialsForOrigin: Identifiants CORS OK + okCorsOriginMatched: ✔ Origine CORS OK + okCorsOrigins: ✔ cors.origins est correct. + okEnableCors: ✔ httpd.enable_cors est correct. + okEnableCorsChttpd: ✔ chttpd.enable_cors est correct. + okMaxDocumentSize: ✔ couchdb.max_document_size est correct. + okMaxRequestSize: ✔ chttpd.max_http_request_size est correct. + okRequireValidUser: ✔ chttpd.require_valid_user est correct. + okRequireValidUserAuth: ✔ chttpd_auth.require_valid_user est correct. + okWwwAuth: ✔ httpd.WWW-Authenticate est correct. + optionApply: Appliquer + optionCancel: Annuler + optionCouchDB: CouchDB + optionDisableAllAutomatic: Désactiver toute automatisation + optionFetchFromRemote: Récupérer depuis le distant + optionHere: ICI + optionLiveSync: LiveSync + optionMinioS3R2: Minio, S3, R2 + optionOkReadEverything: OK, j'ai tout lu. + optionOnEvents: Sur événements + optionPeriodicAndEvents: Périodique et sur événements + optionPeriodicWithBatch: Périodique avec lot + optionRebuildBoth: Tout reconstruire depuis cet appareil + optionSaveOnlySettings: (Danger) N'enregistrer que les paramètres + panelChangeLog: Journal des modifications + panelGeneralSettings: Paramètres généraux + panelPrivacyEncryption: Confidentialité et chiffrement + panelRemoteConfiguration: Configuration distante + panelSetup: Configuration + serverVersion: "Infos serveur : ${info}" + titleActiveRemoteServer: Serveur distant actif + titleAppearance: Apparence + titleConflictResolution: Résolution des conflits + titleCongratulations: Félicitations ! + titleCouchDB: CouchDB + titleDeletionPropagation: Propagation des suppressions + titleEncryptionNotEnabled: Le chiffrement n'est pas activé + titleEncryptionPassphraseInvalid: Phrase secrète de chiffrement invalide + titleExtraFeatures: Activer les fonctionnalités supplémentaires et avancées + titleFetchConfig: Récupérer la configuration + titleFetchConfigFromRemote: Récupérer la configuration depuis le serveur distant + titleFetchSettings: Récupérer les paramètres + titleHiddenFiles: Fichiers cachés + titleLogging: Journalisation + titleMinioS3R2: Minio, S3, R2 + titleNotification: Notification + titleOnlineTips: Conseils en ligne + titleQuickSetup: Configuration rapide + titleRebuildRequired: Reconstruction requise + titleRemoteConfigCheckFailed: Échec de la vérification de la configuration distante + titleRemoteServer: Serveur distant + titleReset: Réinitialiser + titleSetupOtherDevices: Pour configurer d'autres appareils + titleSynchronizationMethod: Méthode de synchronisation + titleSynchronizationPreset: Préréglage de synchronisation + titleSyncSettings: Paramètres de synchronisation + titleSyncSettingsViaMarkdown: Synchroniser les paramètres via Markdown + titleUpdateThinning: Lissage des mises à jour + warnCorsOriginUnmatched: ⚠ L'origine CORS ne correspond pas ${from}->${to} + warnNoAdmin: ⚠ Vous n'avez pas les privilèges administrateur. +P2P: + AskPassphraseForDecrypt: Le pair distant a partagé la configuration. Veuillez + saisir la phrase secrète pour déchiffrer la configuration. + AskPassphraseForShare: Le pair distant a demandé la configuration de cet + appareil. Veuillez saisir la phrase secrète pour partager la configuration. + Vous pouvez ignorer la demande en annulant cette boîte de dialogue. + DisabledButNeed: "%{title_p2p_sync} est désactivé. Voulez-vous vraiment l'activer ?" + FailedToOpen: Échec d'ouverture de la connexion P2P vers le serveur de signalisation. + NoAutoSyncPeers: Aucun pair de synchronisation automatique trouvé. Veuillez définir des pairs dans le panneau %{long_p2p_sync}. + NoKnownPeers: Aucun pair détecté, en attente d'autres pairs entrants... + Note: + description: >2- + Ce réplicateur permet de synchroniser notre coffre avec d'autres + appareils via une connexion pair-à-pair. Nous pouvons l'utiliser pour + synchroniser notre coffre avec nos autres appareils sans recourir à un + service cloud. + + Ce réplicateur est basé sur Trystero. Il utilise également un serveur de + signalisation pour établir une connexion entre les appareils. Le serveur + de signalisation sert à échanger les informations de connexion entre + appareils. Il ne connaît (ou ne devrait connaître) ni ne stocke aucune + de nos données. + + + Le serveur de signalisation peut être hébergé par n'importe qui. Il + s'agit simplement d'un relais Nostr. Par souci de simplicité et pour + vérifier le comportement du réplicateur, une instance du serveur de + signalisation est hébergée par vrtmrz. Vous pouvez utiliser le serveur + expérimental fourni par vrtmrz, ou tout autre serveur. + + + Au passage, même si le serveur de signalisation ne stocke pas nos + données, il peut voir les informations de connexion de certains de nos + appareils. Soyez-en conscient. Soyez également prudent avec un serveur + fourni par quelqu'un d'autre. + important_note: Réplicateur pair-à-pair. + important_note_sub: Cette fonctionnalité est encore en tout début de + développement. Veillez à sauvegarder vos données avant de l'utiliser. + Nous serions très heureux si vous contribuiez au développement de cette + fonctionnalité. + + Summary: Qu'est-ce que cette fonctionnalité ? (et quelques notes importantes, à lire) + NotEnabled: "%{title_p2p_sync} n'est pas activé. Nous ne pouvons pas ouvrir de nouvelle connexion." + P2PReplication: "Réplication %{P2P}" + PaneTitle: "%{long_p2p_sync}" + ReplicatorInstanceMissing: Le réplicateur Sync P2P est introuvable, peut-être + non configuré ou non activé. + SeemsOffline: Le pair ${name} semble hors ligne, ignoré. + SyncAlreadyRunning: La Sync P2P est déjà en cours. + SyncCompleted: Sync P2P terminée. + SyncStartedWith: La Sync P2P avec ${name} a démarré. +Passphrase: Phrase secrète +Passphrase of sensitive configuration items: Phrase secrète des éléments de configuration sensibles +password: mot de passe +Password: Mot de passe +Path Obfuscation: Obfuscation des chemins +Per-file-saved customization sync: Synchronisation de personnalisation enregistrée par fichier +Periodic Sync interval: Intervalle de synchronisation périodique +Prepare the 'report' to create an issue: Préparer le « rapport » pour créer un ticket +Presets: Préréglages +Process small files in the foreground: Traiter les petits fichiers au premier plan +Property Encryption: Chiffrement des propriétés +RedFlag: + Fetch: + Method: + Desc: >- + Comment voulez-vous récupérer ? + + - %{RedFlag.Fetch.Method.FetchSafer}. + **Trafic faible**, **CPU élevé**, **Risque faible** + Recommandé si ... + - Fichiers possiblement incohérents + - Fichiers peu nombreux + - %{RedFlag.Fetch.Method.FetchSmoother}. + **Trafic faible**, **CPU modéré**, **Risque faible à modéré** + Recommandé si ... + - Fichiers probablement cohérents + - Vous avez beaucoup de fichiers. + - %{RedFlag.Fetch.Method.FetchTraditional}. + **Trafic élevé**, **CPU faible**, **Risque faible à modéré** + + >[!INFO]- Détails + + > ## %{RedFlag.Fetch.Method.FetchSafer}. + + > **Trafic faible**, **CPU élevé**, **Risque faible** + + > Cette option crée d'abord une base locale à partir des fichiers + locaux existants avant de récupérer les données depuis la source + distante. + + > Si des fichiers correspondants existent à la fois localement et à + distance, seules les différences entre eux seront transférées. + + > Toutefois, les fichiers présents aux deux emplacements seront + initialement traités comme en conflit. Ils seront résolus + automatiquement s'ils ne le sont pas réellement, mais ce processus + peut prendre du temps. + + > C'est généralement la méthode la plus sûre, minimisant le risque de + perte de données. + + > ## %{RedFlag.Fetch.Method.FetchSmoother}. + + > **Trafic faible**, **CPU modéré**, **Risque faible à modéré** + (selon l'opération) + + > Cette option crée d'abord des fragments à partir des fichiers locaux + pour la base, puis récupère les données. Par conséquent, seuls les + fragments manquants localement sont transférés. Cependant, toutes les + métadonnées sont prises de la source distante. + + > Les fichiers locaux sont ensuite comparés à ces métadonnées au + lancement. Le contenu considéré comme plus récent écrasera le plus + ancien (selon la date de modification). Le résultat est ensuite + synchronisé vers la base distante. + + > C'est généralement sûr si les fichiers locaux ont bien l'horodatage + le plus récent. Cela peut toutefois poser problème si un fichier a un + horodatage plus récent mais un contenu plus ancien (comme le + `welcome.md` initial). + + > Cette méthode utilise moins de CPU et est plus rapide que + « %{RedFlag.Fetch.Method.FetchSafer} », mais peut entraîner une perte + de données si elle n'est pas utilisée avec précaution. + + > ## %{RedFlag.Fetch.Method.FetchTraditional}. + + > **Trafic élevé**, **CPU faible**, **Risque faible à modéré** + (selon l'opération) + + > Tout sera récupéré depuis le distant. + + > Similaire à %{RedFlag.Fetch.Method.FetchSmoother}, mais tous les + fragments sont récupérés depuis la source distante. + + > C'est la façon la plus traditionnelle de récupérer, consommant + généralement le plus de trafic réseau et de temps. Elle comporte + également un risque similaire d'écraser les fichiers distants à + l'option « %{RedFlag.Fetch.Method.FetchSmoother} ». + + > Elle est toutefois souvent considérée comme la méthode la plus + stable car c'est la plus ancienne et la plus directe. + FetchSafer: Créer une base locale avant de récupérer + FetchSmoother: Créer des fragments de fichiers locaux avant de récupérer + FetchTraditional: Tout récupérer depuis le distant + Title: Comment voulez-vous récupérer ? + FetchRemoteConfig: + Buttons: + Cancel: Non, utiliser les paramètres locaux + Fetch: Oui, récupérer et appliquer les paramètres distants + Message: Voulez-vous récupérer et appliquer les préférences stockées à + distance sur cet appareil ? + Title: Récupérer la configuration distante +Reducing the frequency with which on-disk changes are reflected into the DB: Réduire la fréquence à laquelle les modifications sur disque sont reflétées dans la base +Region: Région +Remote server type: Type de serveur distant +Remote Type: Type de distant +Replicator: + Dialogue: + Locked: + Action: + Dismiss: Annuler pour reconfirmer + Fetch: Réinitialiser la synchronisation sur cet appareil + Unlock: Déverrouiller la base distante + Message: + _value: > + La base distante est verrouillée. Ceci est dû à une reconstruction + sur l'un des terminaux. + + L'appareil est donc prié de suspendre la connexion pour éviter la + corruption de la base. + + + Trois options sont possibles : + + + - %{Replicator.Dialogue.Locked.Action.Fetch} + La méthode la plus recommandée et fiable. Elle supprime la base locale puis réinitialise toutes les informations de synchronisation depuis la base distante. Dans la plupart des cas, c'est sûr. Cela prend cependant du temps et devrait se faire sur un réseau stable. + - %{Replicator.Dialogue.Locked.Action.Unlock} + Cette méthode ne peut être utilisée que si nous sommes déjà synchronisés de manière fiable par d'autres méthodes de réplication. Cela ne signifie pas simplement que nous avons les mêmes fichiers. Dans le doute, évitez. + - %{Replicator.Dialogue.Locked.Action.Dismiss} + Ceci annule l'opération. Vous serez à nouveau interrogé à la prochaine requête. + Fetch: Tout récupérer a été planifié. Le plug-in sera redémarré pour l'exécuter. + Unlocked: La base distante a été déverrouillée. Veuillez réessayer l'opération. + Title: Verrouillée + Message: + Cleaned: Nettoyage de la base en cours. La réplication a été annulée + InitialiseFatalError: Aucun réplicateur disponible, il s'agit d'une erreur fatale. + Pending: Des événements de fichier sont en attente. La réplication a été annulée. + SomeModuleFailed: La réplication a été annulée suite à l'échec d'un module + VersionUpFlash: Une mise à jour a été détectée. Veuillez ouvrir la boîte de + dialogue des paramètres et consulter le journal des modifications. La + réplication a été annulée. +Requires restart of Obsidian: Nécessite un redémarrage d'Obsidian +Requires restart of Obsidian.: Nécessite un redémarrage d'Obsidian. +Rerun Onboarding Wizard: Relancer l'assistant d'intégration +Rerun the onboarding wizard to set up Self-hosted LiveSync again.: Relancer l'assistant d'intégration pour reconfigurer Self-hosted LiveSync. +Rerun Wizard: Relancer l'assistant +Reset notification threshold and check the remote database usage: Réinitialiser le seuil de notification et vérifier l'utilisation de la base distante +Reset the remote storage size threshold and check the remote storage size again.: + Réinitialiser le seuil de taille du stockage distant et vérifier à nouveau + la taille du stockage distant. +Run Doctor: Lancer le Docteur +Save settings to a markdown file. You will be notified when new settings arrive. You can set different files by the platform.: + Enregistrer les paramètres dans un fichier markdown. Vous serez notifié à + l'arrivée de nouveaux paramètres. Vous pouvez définir des fichiers + différents selon la plateforme. +Saving will be performed forcefully after this number of seconds.: L'enregistrement sera forcé au bout de ce nombre de secondes. +Scan changes on customization sync: Analyser les modifications de synchronisation de personnalisation +Scan customization automatically: Analyser automatiquement la personnalisation +Scan customization before replicating.: Analyser la personnalisation avant de répliquer. +Scan customization every 1 minute.: Analyser la personnalisation toutes les 1 minute. +Scan customization periodically: Analyser la personnalisation périodiquement +Scan for hidden files before replication: Analyser les fichiers cachés avant réplication +Scan hidden files periodically: Analyser les fichiers cachés périodiquement +Seconds, 0 to disable: Secondes, 0 pour désactiver +Seconds. Saving to the local database will be delayed until this value after we stop typing or saving.: + Secondes. L'enregistrement dans la base locale sera différé de cette valeur + après l'arrêt de la frappe ou de l'enregistrement. +Secret Key: Clé secrète +Server URI: URI du serveur +Setting: + GenerateKeyPair: + Desc: >+ + Nous avons généré une paire de clés ! + + + Note : cette paire de clés ne sera plus jamais affichée. Veuillez la + conserver dans un endroit sûr. Si vous la perdez, vous devrez générer + une nouvelle paire. + + Note 2 : la clé publique est au format spki, et la clé privée au format + pkcs8. Pour plus de commodité, les retours à la ligne sont convertis en + `\n` dans la clé publique. + + Note 3 : la clé publique doit être configurée dans la base distante, et + la clé privée sur les appareils locaux. + + + >[!POUR VOS YEUX SEULEMENT]- + + >
+ + > + + > ### Clé publique + + > ``` + + ${public_key} + + > ``` + + > + + > ### Clé privée + + > ``` + + ${private_key} + + > ``` + + > + + >
+ + + >[!Les deux pour copier]- + + > + + >
+ + > + + > ``` + + ${public_key} + + ${private_key} + + > ``` + + > + + >
+ + Title: Une nouvelle paire de clés a été générée ! + TroubleShooting: + _value: Dépannage + Doctor: + _value: Docteur des paramètres + Desc: Détecte les paramètres non optimaux. (Identique à la migration) + ScanBrokenFiles: + _value: Analyser les fichiers corrompus + Desc: Analyse les fichiers qui ne sont pas stockés correctement dans la base. +SettingTab: + Message: + AskRebuild: Vos modifications nécessitent une récupération depuis la base distante. Voulez-vous continuer ? +Setup: + Apply: + Buttons: + ApplyAndFetch: Appliquer et récupérer + ApplyAndMerge: Appliquer et fusionner + ApplyAndRebuild: Appliquer et reconstruire + Cancel: Abandonner et annuler + OnlyApply: Appliquer seulement + Message: >- + La nouvelle configuration est prête. Procédons à son application. + + Plusieurs manières de l'appliquer : + + + - Appliquer et récupérer + Configurer cet appareil comme nouveau client. Après application, synchroniser depuis le serveur distant. + - Appliquer et fusionner + Configurer sur un appareil qui possède déjà les fichiers. Traite les fichiers locaux et transfère les différences. Des conflits peuvent apparaître. + - Appliquer et reconstruire + Reconstruire le distant à partir des fichiers locaux. Typiquement effectué si le serveur est corrompu ou si l'on souhaite repartir de zéro. + Les autres appareils seront verrouillés et devront refaire une récupération. + - Appliquer seulement + Appliquer uniquement. Des conflits peuvent apparaître si une reconstruction est nécessaire. + Title: Appliquer la nouvelle configuration depuis ${method} + WarningRebuildRecommended: "NOTE : après ajustement des paramètres, il a été + déterminé qu'une reconstruction est requise ; un simple import n'est pas + recommandé." + Doctor: + Buttons: + No: Non, utiliser les paramètres de l'URI tels quels + Yes: Oui, consulter le docteur + Message: >- + Self-hosted LiveSync s'est progressivement étoffé et certains paramètres + recommandés ont évolué. + + + La configuration est un bon moment pour le faire. + + + Voulez-vous lancer le Docteur pour vérifier si les paramètres importés + sont optimaux par rapport au dernier état ? + Title: Voulez-vous consulter le docteur ? + FetchRemoteConf: + Buttons: + Fetch: Oui, récupérer la configuration + Skip: Non, utiliser les paramètres de l'URI + Message: >- + Si nous avons déjà synchronisé une fois avec un autre appareil, la base + distante stocke les valeurs de configuration adaptées entre les + appareils synchronisés. Le plug-in souhaiterait les récupérer pour une + configuration robuste. + + + Mais il faut s'assurer d'une chose. Sommes-nous actuellement dans une + situation où nous pouvons accéder au réseau en toute sécurité et + récupérer les paramètres ? + + + Note : le plus souvent, c'est sûr si votre base distante est hébergée + avec un certificat SSL et si votre réseau n'est pas compromis. + Title: Récupérer la configuration depuis la base distante ? + QRCode: >- + Nous avons généré un QR code pour transférer les paramètres. Scannez-le + avec votre téléphone ou un autre appareil. + + Note : le QR code n'est pas chiffré, soyez prudent en l'affichant. + + + >[!POUR VOS YEUX SEULEMENT]- + + >
${qr_image}
+ ShowQRCode: + _value: Afficher le QR code + Desc: Afficher le QR code pour transférer les paramètres. +Should we keep folders that don't have any files inside?: Conserver les dossiers ne contenant aucun fichier ? +Should we only check for conflicts when a file is opened?: Ne vérifier les conflits qu'à l'ouverture d'un fichier ? +Should we prompt you about conflicting files when a file is opened?: Vous demander au sujet des fichiers en conflit à l'ouverture d'un fichier ? +Should we prompt you for every single merge, even if we can safely merge automatcially?: + Vous demander pour chaque fusion, même si nous pouvons fusionner + automatiquement en toute sécurité ? +Show only notifications: N'afficher que les notifications +Show status as icons only: N'afficher le statut que sous forme d'icônes +Show status icon instead of file warnings banner: Afficher l'icône de statut au lieu de la bannière d'avertissements +Show status inside the editor: Afficher le statut dans l'éditeur +Show status on the status bar: Afficher le statut dans la barre d'état +Show verbose log. Please enable if you report an issue.: Afficher un journal verbeux. À activer si vous signalez un problème. +Starts synchronisation when a file is saved.: Démarre la synchronisation à l'enregistrement d'un fichier. +Stop reflecting database changes to storage files.: Arrêter de répercuter les modifications de la base vers les fichiers de stockage. +Stop watching for file changes.: Arrêter la surveillance des modifications de fichiers. +Suppress notification of hidden files change: Supprimer les notifications de modification des fichiers cachés +Suspend database reflecting: Suspendre la répercussion dans la base +Suspend file watching: Suspendre la surveillance des fichiers +Sync after merging file: Synchroniser après fusion d'un fichier +Sync automatically after merging files: Synchroniser automatiquement après fusion des fichiers +Sync Mode: Mode de synchronisation +Sync on Editor Save: Synchroniser à l'enregistrement dans l'éditeur +Sync on File Open: Synchroniser à l'ouverture d'un fichier +Sync on Save: Synchroniser à l'enregistrement +Sync on Startup: Synchroniser au démarrage +Testing only - Resolve file conflicts by syncing newer copies of the file, this can overwrite modified files. Be Warned.: + Test uniquement - Résout les conflits de fichiers en synchronisant les + copies plus récentes, ce qui peut écraser des fichiers modifiés. Prudence. +The delay for consecutive on-demand fetches: Le délai entre récupérations consécutives à la demande +The Hash algorithm for chunk IDs: L'algorithme de hachage pour les identifiants de fragments +The maximum duration for which chunks can be incubated within the document. Chunks exceeding this period will graduate to independent chunks.: + La durée maximale pendant laquelle les fragments peuvent être incubés dans + le document. Les fragments dépassant cette période seront promus en + fragments indépendants. +The maximum number of chunks that can be incubated within the document. Chunks exceeding this number will immediately graduate to independent chunks.: + Le nombre maximum de fragments pouvant être incubés dans le document. Les + fragments dépassant ce nombre seront immédiatement promus en fragments + indépendants. +The maximum total size of chunks that can be incubated within the document. Chunks exceeding this size will immediately graduate to independent chunks.: + La taille totale maximale des fragments pouvant être incubés dans le + document. Les fragments dépassant cette taille seront immédiatement promus + en fragments indépendants. +The minimum interval for automatic synchronisation on event.: L'intervalle minimum pour la synchronisation automatique sur événement. +This passphrase will not be copied to another device. It will be set to `Default` until you configure it again.: + Cette phrase secrète ne sera pas copiée vers un autre appareil. Elle sera + définie à `Default` jusqu'à ce que vous la configuriez à nouveau. +TweakMismatchResolve: + Action: + Dismiss: Ignorer + UseConfigured: Utiliser les paramètres configurés + UseMine: Mettre à jour les paramètres de la base distante + UseMineAcceptIncompatible: Mettre à jour la base distante mais garder en l'état + UseMineWithRebuild: Mettre à jour la base distante et reconstruire + UseRemote: Appliquer les paramètres à cet appareil + UseRemoteAcceptIncompatible: Appliquer à cet appareil, mais ignorer l'incompatibilité + UseRemoteWithRebuild: Appliquer à cet appareil et récupérer à nouveau + Message: + Main: >- + + Les paramètres de la base distante sont les suivants. Ces valeurs sont + configurées par d'autres appareils, synchronisés au moins une fois avec + celui-ci. + + + Pour utiliser ces paramètres, sélectionnez + %{TweakMismatchResolve.Action.UseConfigured}. + + Pour conserver les paramètres de cet appareil, sélectionnez + %{TweakMismatchResolve.Action.Dismiss}. + + + ${table} + + + >[!ASTUCE] + + > Pour synchroniser tous les paramètres, utilisez « Synchroniser les + paramètres via markdown » après application de la configuration + minimale avec cette fonctionnalité. + + + ${additionalMessage} + MainTweakResolving: |- + Votre configuration ne correspond pas à celle du serveur distant. + + La configuration suivante devrait correspondre : + + ${table} + + Faites-nous part de votre décision. + + ${additionalMessage} + UseRemote: + WarningRebuildRecommended: >- + + >[!AVIS] + + > Certains changements sont compatibles mais peuvent consommer du + stockage et du trafic supplémentaires. Une reconstruction est + recommandée. Cependant, elle peut ne pas être effectuée maintenant, + mais pourra l'être lors d'une maintenance future. + + > ***Assurez-vous d'avoir du temps et une connexion stable pour + appliquer !*** + WarningRebuildRequired: >- + + >[!AVERTISSEMENT] + + > Certaines configurations distantes ne sont pas compatibles avec la + base locale de cet appareil. Une reconstruction de la base locale + sera requise. + + > ***Assurez-vous d'avoir du temps et une connexion stable pour + appliquer !*** + WarningIncompatibleRebuildRecommended: >- + + >[!AVIS] + + > Nous avons détecté que certaines valeurs diffèrent et rendent la base + locale incompatible avec la base distante. + + > Certains changements sont compatibles mais peuvent consommer du + stockage et du trafic supplémentaires. Une reconstruction est + recommandée. Cependant, elle peut ne pas être effectuée maintenant, mais + pourra l'être lors d'une maintenance future. + + > Si vous souhaitez reconstruire, cela prend quelques minutes ou plus. + **Assurez-vous qu'il est sûr de le faire maintenant.** + WarningIncompatibleRebuildRequired: >- + + >[!AVERTISSEMENT] + + > Nous avons détecté que certaines valeurs diffèrent et rendent la base + locale incompatible avec la base distante. + + > Une reconstruction locale ou distante est nécessaire. L'une comme + l'autre prend quelques minutes ou plus. **Assurez-vous qu'il est sûr de + le faire maintenant.** + Table: + _value: |+ + | Nom de la valeur | Cet appareil | Sur le distant | + |: --- |: ---- :|: ---- :| + ${rows} + + Row: "| ${name} | ${self} | ${remote} |" + Title: + _value: Incohérence de configuration détectée + TweakResolving: Incohérence de configuration détectée + UseRemoteConfig: Utiliser la configuration distante +Unique name between all synchronized devices. To edit this setting, please disable customization sync once.: + Nom unique parmi tous les appareils synchronisés. Pour modifier ce + paramètre, désactivez d'abord la synchronisation de personnalisation. +Use Custom HTTP Handler: Utiliser un gestionnaire HTTP personnalisé +Use dynamic iteration count: Utiliser un compteur d'itérations dynamique +Use Segmented-splitter: Utiliser le découpeur segmenté +Use splitting-limit-capped chunk splitter: Utiliser le découpeur de fragments plafonné +Use the trash bin: Utiliser la corbeille +Use timeouts instead of heartbeats: Utiliser des délais d'attente au lieu de battements +username: nom d'utilisateur +Username: Nom d'utilisateur +Verbose Log: Journal verbeux +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.: + Attention ! Ceci aura un impact important sur les performances. De plus, les + journaux ne seront pas synchronisés sous le nom par défaut. Soyez prudent + avec les journaux ; ils contiennent souvent des informations confidentielles. +When you save a file in the editor, start a sync automatically: À l'enregistrement d'un fichier dans l'éditeur, démarrer automatiquement une synchronisation +Write credentials in the file: Écrire les identifiants dans le fichier +Write logs into the file: Écrire les journaux dans le fichier diff --git a/src/common/messagesYAML/he.yaml b/src/common/messagesYAML/he.yaml new file mode 100644 index 00000000..e25cdd2b --- /dev/null +++ b/src/common/messagesYAML/he.yaml @@ -0,0 +1,1230 @@ +(BETA) Always overwrite with a newer file: (BETA) תמיד לדרוס עם קובץ חדש יותר +(Beta) Use ignore files: (בטא) שימוש בקבצי התעלמות +(Days passed, 0 to disable automatic-deletion): (ימים שעברו; 0 לביטול מחיקה אוטומטית) +(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.: >- + (לדוגמה: קריאת נתחים אונליין) אם אפשרות זו מופעלת, LiveSync קורא נתחים ישירות + מהשרת מבלי לשכפל אותם מקומית. מומלץ להגדיל את גודל הנתח המותאם אישית. +(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) אם ערך זה מוגדר, שינויים בקבצים מקומיים ומרוחקים הגדולים מגודל זה יידלגו. + אם הקובץ יקטן שוב, ייעשה שימוש בגרסה החדשה יותר. +(Mega chars): (מגה תווים) +(Not recommended) If set, credentials will be stored in the file.: (לא מומלץ) אם מוגדר, פרטי הגישה יישמרו בקובץ. +(Obsolete) Use an old adapter for compatibility: (מיושן) שימוש במתאם ישן לתאימות לאחור +Access Key: מפתח גישה +Active Remote Configuration: תצורת שרת מרוחק פעיל +Always prompt merge conflicts: תמיד להציג בקשת אישור לקונפליקטי מיזוג +Analyse: ניתוח +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.: + נתח שימוש במסד הנתונים וצור דו"ח TSV לאבחון עצמי. ניתן להדביק את הדו"ח שנוצר + בכל גיליון אלקטרוני. +Apply Latest Change if Conflicting: החל שינוי אחרון בעת קונפליקט +Apply preset configuration: החל תצורה קבועה מראש +Automatically Sync all files when opening Obsidian.: סנכרן את כל הקבצים אוטומטית עם פתיחת Obsidian. +Batch database update: עדכון אצווה למסד נתונים +Batch limit: מגבלת אצווה +Batch size: גודל אצווה +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.: + לפני גרסה 0.17.16, השתמשנו במתאם ישן למסד הנתונים המקומי. כעת המתאם החדש מועדף. + עם זאת, הדבר מצריך בנייה מחדש של מסד הנתונים המקומי. אנא כבה אפשרות זו כשיש לך + זמן פנוי. אם תשאיר אותה מופעלת, גם בעת משיכה ממסד הנתונים המרוחק, תתבקש לכבות אותה. +Bucket Name: שם דלי (Bucket) +Check: בדוק +cmdConfigSync: + showCustomizationSync: הצג סנכרון התאמה אישית +Comma separated `.gitignore, .dockerignore`: רשימה מופרדת בפסיקים `.gitignore, .dockerignore` +Compute revisions for chunks: חשב גרסאות לנתחים +Copy Report to clipboard: העתק דו"ח ללוח +Data Compression: דחיסת נתונים +Database Name: שם מסד נתונים +Database suffix: סיומת מסד נתונים +Delay conflict resolution of inactive files: עכב פתרון קונפליקטים לקבצים לא פעילים +Delay merge conflict prompt for inactive files.: עכב הצגת בקשת מיזוג לקבצים לא פעילים. +Delete old metadata of deleted files on start-up: מחק מטה-נתונים ישנים של קבצים שנמחקו בעת הפעלה +Device name: שם מכשיר +dialog: + yourLanguageAvailable: + _value: >- + ל-Self-hosted LiveSync יש תרגום לשפתך, ולכן הגדרת %{Display language} הופעלה. + + + הערה: לא כל ההודעות מתורגמות. אנחנו ממתינים לתרומותיך! + + הערה 2: אם אתה פותח Issue, **אנא חזור ל-%{lang-def}** ואז צלם צילומי מסך, + הודעות ויומנים. ניתן לעשות זאת בדיאלוג ההגדרות. + + נקווה שתמצא/י את הפלאגין נוח לשימוש! + btnRevertToDefault: השאר %{lang-def} + Title: " תרגום זמין!" +Disables logging, only shows notifications. Please disable if you report an issue.: + מכבה רישום יומן, מציג התראות בלבד. אנא כבה אם אתה מדווח על בעיה. +Display Language: שפת תצוגה +Do not check configuration mismatch before replication: אל תבדוק אי-התאמה בתצורה לפני שכפול +Do not keep metadata of deleted files.: אל תשמור מטה-נתונים של קבצים שנמחקו. +Do not split chunks in the background: אל תפצל נתחים ברקע +Do not use internal API: אל תשתמש ב-API פנימי +Doctor: + Button: + DismissThisVersion: לא, ואל תשאל שוב עד לגרסה הבאה + Fix: תקן + FixButNoRebuild: תקן ללא בנייה מחדש + No: לא + Skip: השאר כפי שהוא + Yes: כן + Dialogue: + Main: >- + שלום! רופא התצורה הופעל בגלל ${activateReason}! + + ולמרבה הצער, זוהו תצורות שעשויות להיות בעייתיות. + + היה רגוע/ה. בואו נפתור אותן אחת אחת. + + + לידיעתך מראש, נשאל אותך על הפריטים הבאים. + + + ${issues} + + + האם להתחיל? + MainFix: |- + + ## ${name} + + | נוכחי | אידאלי | + |:---:|:---:| + | ${current} | ${ideal} | + + **רמת המלצה:** ${level} + + ### מדוע זה זוהה? + + ${reason} + + ${note} + + לתקן לערך האידאלי? + Title: Self-hosted LiveSync Config Doctor + TitleAlmostDone: כמעט סיימנו! + TitleFix: תקן בעיה ${current}/${total} + Level: + Must: חובה + Necessary: נדרש + Optional: אופציונלי + Recommended: מומלץ + Message: + NoIssues: לא זוהו בעיות! + RebuildLocalRequired: שים לב! נדרשת בנייה מחדש של מסד הנתונים המקומי כדי להחיל זאת! + RebuildRequired: שים לב! נדרשת בנייה מחדש כדי להחיל זאת! + SomeSkipped: השארנו כמה בעיות כפי שהן. האם לשאול שוב בהפעלה הבאה? + RULES: + E2EE_V02500: + REASON: ההצפנה מקצה לקצה עודכנה לגרסה חזקה ומהירה יותר. בנוסף, בסקירת קוד + שנערכה מחדש הוסבר שההצפנה הקודמת נפרצת. יש להחיל זאת בהקדם האפשרי. מתנצלים + על אי הנוחות. שים לב שהגדרה זו אינה תואמת לאחור. כל המכשירים המסונכרנים + חייבים להיות מעודכנים לגרסה 0.25.0 ומעלה. אין צורך בבנייה מחדש והנתונים + יומרו בהדרגה לפורמט החדש, אך מומלץ לבנות מחדש בהזדמנות הראשונה. +Enable advanced features: הפעל תכונות מתקדמות +Enable customization sync: הפעל סנכרון התאמה אישית +Enable Developers' Debug Tools.: הפעל כלי ניפוי באגים למפתחים. +Enable edge case treatment features: הפעל תכונות לטיפול במקרי קצה +Enable poweruser features: הפעל תכונות למשתמש מתקדם +Enable this if your Object Storage doesn't support CORS: הפעל אם אחסון האובייקטים שלך לא תומך ב-CORS +Enable this option to automatically apply the most recent change to documents even when it conflicts: + הפעל אפשרות זו כדי להחיל אוטומטית את השינוי האחרון במסמכים גם כשיש קונפליקט +Encrypt contents on the remote database. If you use the plugin's synchronization feature, enabling this is recommended.: + הצפן תוכן במסד הנתונים המרוחק. אם אתה משתמש בתכונת הסנכרון של התוסף, מומלץ להפעיל זאת. +Encrypting sensitive configuration items: הצפן פריטי תצורה רגישים +Encryption phassphrase. If changed, you should overwrite the server's database with the new (encrypted) files.: + ביטוי סיסמה להצפנה. אם שונה, יש לדרוס את מסד הנתונים של השרת בקבצים החדשים (המוצפנים). +End-to-End Encryption: הצפנה מקצה לקצה +Endpoint URL: כתובת נקודת קצה (Endpoint URL) +Enhance chunk size: הגדל גודל נתח +Fetch chunks on demand: משוך נתחים לפי דרישה +Fetch database with previous behaviour: משוך מסד נתונים עם התנהגות קודמת +Filename: שם קובץ +Forces the file to be synced when opened.: מכריח סנכרון הקובץ בעת פתיחתו. +Handle files as Case-Sensitive: טפל בקבצים כתלויי רישיות +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.: + אם מופעל, ייעשה שימוש בסנכרון התאמה אישית יעיל לפי קובץ. נדרשת הגירה קטנה בעת ההפעלה. + כל המכשירים צריכים להיות מעודכנים לגרסה 0.23.18. לאחר ההפעלה, התאימות לגרסאות ישנות תיפגע. +If enabled, chunks will be split into no more than 100 items. However, dedupe is slightly weaker.: + אם מופעל, נתחים יפוצלו לא ליותר מ-100 פריטים. עם זאת, ביטול כפילויות יהיה חלש מעט יותר. +If enabled, newly created chunks are temporarily kept within the document, and graduated to become independent chunks once stabilised.: + אם מופעל, נתחים שנוצרו לאחרונה נשמרים זמנית בתוך המסמך, ומוסמכים לנתחים עצמאיים לאחר יציבות. +If enabled, the ⛔ icon will be shown inside the status instead of the file warnings banner. No details will be shown.: + אם מופעל, אייקון ⛔ יוצג בסטטוס במקום פס האזהרות. לא יוצגו פרטים. +If enabled, the file under 1kb will be processed in the UI thread.: אם מופעל, קבצים קטנים מ-1KB יעובדו בשרשור ממשק המשתמש. +If enabled, the notification of hidden files change will be suppressed.: אם מופעל, התראות על שינוי בקבצים נסתרים יודחקו. +If this enabled, all chunks will be stored with the revision made from its content. (Previous behaviour): + אם מופעל, כל הנתחים יישמרו עם גרסה המבוססת על תוכנם. (התנהגות קודמת) +If this enabled, All files are handled as case-Sensitive (Previous behaviour).: אם מופעל, כל הקבצים מטופלים כתלויי רישיות (התנהגות קודמת). +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 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.: + אם אפשרות זו מופעלת, PouchDB ישמור את החיבור פתוח ל-60 שניות, ואם אין שינוי בפרק + זמן זה, יסגור ויפתח מחדש את השקע, במקום להחזיק אותו פתוח ללא הגבלה. שימושי כשפרוקסי + מגביל משך בקשות, אך עשוי להגביר שימוש במשאבים. +Ignore files: קבצי התעלמות +Incubate Chunks in Document: בשל נתחים בתוך המסמך +Interval (sec): מרווח (שניות) +K: + exp: ניסיוני + long_p2p_sync: "%{title_p2p_sync}" + P2P: "%{Peer}-ל-%{Peer}" + Peer: עמית + ScanCustomization: סרוק התאמה אישית + short_p2p_sync: סנכרון P2P + title_p2p_sync: סנכרון עמית-לעמית +Keep empty folder: שמור תיקייה ריקה +lang_def: ברירת מחדל +lang-de: Deutsche +lang-def: "%{lang_def}" +lang-es: Español +lang-fr: Français +lang-he: עברית +lang-ja: 日本語 +lang-ko: 한국어 +lang-ru: Русский +lang-zh: 简体中文 +lang-zh-tw: 繁體中文 +LiveSync could not handle multiple vaults which have same name without different prefix, This should be automatically configured.: + LiveSync אינו יכול לטפל במספר כספות עם אותו שם ללא קידומת שונה. הדבר אמור להיות + מוגדר אוטומטית. +liveSyncReplicator: + beforeLiveSync: לפני LiveSync, התחל OneShot פעם אחת... + cantReplicateLowerValue: לא ניתן לשכפל ערך נמוך יותר. + checkingLastSyncPoint: מחפש נקודת הסנכרון האחרונה. + couldNotConnectTo: |- + לא ניתן להתחבר אל ${uri} : ${name} + (${db}) + couldNotConnectToRemoteDb: "לא ניתן להתחבר למסד הנתונים המרוחק: ${d}" + couldNotConnectToServer: לא ניתן להתחבר לשרת. + couldNotConnectToURI: לא ניתן להתחבר אל ${uri}:${dbRet} + couldNotMarkResolveRemoteDb: לא ניתן לסמן פתרון למסד הנתונים המרוחק. + liveSyncBegin: LiveSync מתחיל... + lockRemoteDb: נועל מסד נתונים מרוחק למניעת פגיעה בנתונים + markDeviceResolved: סמן מכשיר זה כ'נפתר'. + oneShotSyncBegin: סנכרון OneShot מתחיל... (${syncMode}) + remoteDbCorrupted: מסד הנתונים המרוחק חדש יותר או פגום, ודא שגרסת self-hosted-livesync + המותקנת היא העדכנית ביותר + remoteDbCreatedOrConnected: מסד הנתונים המרוחק נוצר או חובר + remoteDbDestroyed: מסד הנתונים המרוחק נהרס + remoteDbDestroyError: "אירעה שגיאה בהריסת מסד הנתונים המרוחק:" + remoteDbMarkedResolved: מסד הנתונים המרוחק סומן כנפתר. + replicationClosed: השכפול נסגר + replicationInProgress: שכפול כבר מתבצע + retryLowerBatchSize: מנסה שוב עם גודל אצווה קטן יותר:${batch_size}/${batches_limit} + unlockRemoteDb: מבטל נעילת מסד הנתונים המרוחק למניעת פגיעה בנתונים +liveSyncSetting: + errorNoSuchSettingItem: "פריט הגדרה לא קיים: ${key}" + originalValue: "ערך מקורי: ${value}" + valueShouldBeInRange: הערך צריך להיות ${min} < ערך < ${max} +liveSyncSettings: + btnApply: החל +logPane: + autoScroll: גלילה אוטומטית + logWindowOpened: חלון יומן נפתח + pause: השהה + title: יומן Self-hosted LiveSync + wrap: גלישת שורות +Maximum delay for batch database updating: עיכוב מקסימלי לעדכון אצווה של מסד נתונים +Maximum file size: גודל קובץ מקסימלי +Maximum Incubating Chunk Size: גודל מקסימלי לנתח בבישול +Maximum Incubating Chunks: מספר מקסימלי של נתחים בבישול +Maximum Incubation Period: תקופת בישול מקסימלית +MB (0 to disable).: MB (0 לביטול). +Memory cache size (by total characters): גודל מטמון זיכרון (לפי סה"כ תווים) +Memory cache size (by total items): גודל מטמון זיכרון (לפי סה"כ פריטים) +Minimum delay for batch database updating: עיכוב מינימלי לעדכון אצווה של מסד נתונים +Minimum interval for syncing: מרווח מינימלי לסנכרון +moduleCheckRemoteSize: + logCheckingStorageSizes: בודק גדלי אחסון + logCurrentStorageSize: "גודל אחסון מרוחק: ${measuredSize}" + logExceededWarning: "גודל אחסון מרוחק: ${measuredSize} עלה על ${notifySize}" + logThresholdEnlarged: הסף הורחב ל-${size}MB + msgConfirmRebuild: פעולה זו עשויה לקחת זמן מה. האם אתה בטוח שברצונך לבנות מחדש עכשיו? + msgDatabaseGrowing: | + **מסד הנתונים שלך הולך וגדל!** אל תדאג, אנחנו יכולים לטפל בזה עכשיו. הזמן שנשאר עד לאזול המקום באחסון המרוחק. + + | גודל נמדד | גודל מוגדר | + | --- | --- | + | ${estimatedSize} | ${maxSize} | + + > [!MORE]- + > אם אתה משתמש בפלאגין כבר שנים רבות, ייתכן שנצברו נתחים לא מקושרים — כלומר, זבל — במסד הנתונים. לכן, אנו ממליצים לבנות הכל מחדש. ככל הנראה מסד הנתונים יהיה קטן בהרבה לאחר מכן. + > + > אם נפח הכספת שלך פשוט גדל, עדיף לבנות מחדש לאחר ארגון הקבצים. Self-hosted LiveSync אינו מוחק נתונים בפועל גם כאשר אתה מוחק קבצים כדי להאיץ את התהליך. הדבר [מתועד בפירוט](https://github.com/vrtmrz/obsidian-livesync/blob/main/docs/tech_info.md). + > + > אם אינך מוטרד מהגידול, ניתן להגדיל את סף ההתראה ב-100MB. הדבר מתאים אם השרת הוא שלך. עם זאת, מומלץ לבנות מחדש מעת לעת. + > + + > [!WARNING] + > אם תבנה מחדש, ודא שכל המכשירים מסונכרנים. הפלאגין ינסה למזג כמה שניתן. + msgSetDBCapacity: > + ניתן להגדיר אזהרת קיבולת מקסימלית של מסד הנתונים, **כדי לנקוט פעולה לפני שנגמר המקום + באחסון המרוחד**. + + האם להפעיל זאת? + + + > [!MORE]- + + > - 0: אל תזהיר על גודל האחסון. + + > מומלץ אם יש לך מספיק מקום באחסון המרוחד, בעיקר אם השרת הוא שלך. ניתן לבדוק את + גודל האחסון ולבנות מחדש ידנית. + + > - 800: הזהר אם גודל האחסון המרוחד עולה על 800MB. + + > מומלץ אם אתה משתמש ב-fly.io עם מגבלת 1GB או ב-IBM Cloudant. + + > - 2000: הזהר אם גודל האחסון המרוחד עולה על 2GB. + + + אם הגענו למגבלה, תתבקש להרחיב את הסף בהדרגה. + option2GB: 2GB (סטנדרטי) + option800MB: 800MB (Cloudant, fly.io) + optionAskMeLater: שאל מאוחר יותר + optionDismiss: דחה + optionIncreaseLimit: הגדל ל-${newMax}MB + optionNoWarn: לא, אל תזהיר בכלל + optionRebuildAll: בנה הכל מחדש עכשיו + titleDatabaseSizeLimitExceeded: גודל האחסון המרוחד חרג מהמגבלה + titleDatabaseSizeNotify: הגדרת התראה על גודל מסד נתונים +moduleInputUIObsidian: + defaultTitleConfirmation: אישור + defaultTitleSelect: בחר + optionNo: לא + optionYes: כן +moduleLiveSyncMain: + logAdditionalSafetyScan: סריקת בטיחות נוספת... + logLoadingPlugin: טוען תוסף... + logPluginInitCancelled: אתחול התוסף בוטל על ידי מודול + logPluginVersion: Self-hosted LiveSync גרסה ${manifestVersion} ${packageVersion} + logReadChangelog: LiveSync עודכן, אנא קרא את יומן השינויים! + logSafetyScanCompleted: סריקת הבטיחות הנוספת הושלמה + logSafetyScanFailed: סריקת הבטיחות הנוספת נכשלה במודול + logUnloadingPlugin: מסיר תוסף... + logVersionUpdate: LiveSync עודכן. במקרה של עדכונים משמעותיים, כל הסנכרון האוטומטי + הושבת זמנית. ודא שכל המכשירים מעודכנים לפני ההפעלה. + msgScramEnabled: > + Self-hosted LiveSync הוגדר להתעלם מאירועים מסוימים. האם זה נכון? + + + | סוג | סטטוס | הערה | + + |:---:|:---:|---| + + | אירועי אחסון | ${fileWatchingStatus} | כל שינוי יתעלם | + + | אירועי מסד נתונים | ${parseReplicationStatus} | כל שינוי מסונכרן יידחה | + + + האם לחדש אותם ולהפעיל מחדש את Obsidian? + + + > [!DETAILS]- + + > דגלים אלה מוגדרים על ידי הפלאגין במהלך בנייה מחדש או משיכה. אם התהליך הסתיים + בצורה לא תקינה, ייתכן שהם נשארו כלא מכוון. + + > אם אינך בטוח, ניתן לנסות להריץ מחדש את התהליכים. ודא שיש לך גיבוי של הכספת. + optionKeepLiveSyncDisabled: השאר LiveSync מנוטרל + optionResumeAndRestart: חדש והפעל מחדש את Obsidian + titleScramEnabled: מצב בלימה פעיל +moduleLocalDatabase: + logWaitingForReady: ממתין לכשירות... +moduleLog: + showLog: הצג יומן +moduleMigration: + docUri: https://github.com/vrtmrz/obsidian-livesync/blob/main/README.md#how-to-use + fix0256: + buttons: + checkItLater: בדוק מאוחר יותר + DismissForever: תיקנתי, ואל תשאל שוב + fix: תקן + message: > + בשל באג אחרון (בגרסה 0.25.6), ייתכן שחלק מהקבצים לא נשמרו + כהלכה במסד הנתונים לסנכרון. + + סרקנו את הקבצים ומצאנו כאלה שיש לתקן. + + + **קבצים מוכנים לתיקון:** + + + ${files} + + + לקבצים אלה יש קובץ מקורי תואם גודל באחסון, וסביר שניתן לשחזרם. + + ניתן להשתמש בהם לתיקון מסד הנתונים. לחץ על כפתור "תקן" למטה לתיקון. + + + ${messageUnrecoverable} + + + אם ברצונך להריץ שוב, ניתן לעשות זאת מ-Hatch. + messageUnrecoverable: > + **קבצים שלא ניתן לתקן במכשיר זה:** + + + ${filesNotRecoverable} + + + לקבצים אלה יש מטה-נתונים לא עקביים, ולא ניתן לתקנם במכשיר זה + (לרוב לא ניתן לקבוע מה נכון). לשחזורם, אנא בדוק מכשירים אחרים שלך + (גם בתכונה זו) או שחזר ידנית מגיבוי. + title: זוהו קבצים פגומים + insecureChunkExist: + buttons: + fetch: כבר בניתי מחדש את השרת המרוחק. משוך מהשרת המרוחד + later: אטפל בזה מאוחר יותר + rebuild: בנה הכל מחדש + laterMessage: אנו ממליצים בחום לטפל בזה בהקדם האפשרי! + message: > + חלק מהנתחים לא מאוחסנים בצורה מאובטחת ואינם מוצפנים במסד הנתונים. + + **אנא בנה מחדש את מסד הנתונים כדי לתקן בעיה זו**. + + + אם מסד הנתונים המרוחד אינו מוגדר עם SSL, או משתמש בפרטי גישה פחות מאובטחים, + **אתה בסיכון של חשיפת מידע רגיש**. + + + הערה: אנא שדרג את Self-hosted LiveSync לגרסה 0.25.6 ומעלה על כל מכשיריך, + וגבה את הכספת שלך. + + הערה 2: בנייה מחדש ומשיכה דורשות זמן ותעבורת רשת. אנא עשה זאת בשעות שיא נמוך + וודא חיבור רשת יציב. + title: נמצאו נתחים לא מאובטחים! + logBulkSendCorrupted: שליחת נתחים באצווה הופעלה, אך תכונה זו הייתה פגועה. מתנצלים + על אי הנוחות. נוטרלה אוטומטית. + logFetchRemoteTweakFailed: נכשל במשיכת ערכי כיוונון מרוחקים + logLocalDatabaseNotReady: משהו השתבש! מסד הנתונים המקומי אינו מוכן + logMigratedSameBehaviour: הוגר ל-db:${current} עם אותה התנהגות כמקודם + logMigrationFailed: הגירה נכשלה או בוטלה מ-${old} ל-${current} + logRedflag2CreationFail: יצירת redflag2 נכשלה + logRemoteTweakUnavailable: לא ניתן לקבל ערכי כיוונון מרוחקים + logSetupCancelled: ההגדרה בוטלה, Self-hosted LiveSync ממתין להגדרתך! + msgFetchRemoteAgain: >- + כפי שייתכן שכבר ידוע לך, Self-hosted LiveSync שינה את התנהגות ברירת המחדל ומבנה + מסד הנתונים. + + + ובזכות זמנך ומאמציך, מסד הנתונים המרוחד נראה כבר הוגר. ברכות! + + + עם זאת, נדרש עוד קצת. תצורת מכשיר זה אינה תואמת למסד הנתונים המרוחד. + נצטרך למשוך את מסד הנתונים המרוחד שוב. האם למשוך מהשרת המרוחד עכשיו? + + + ___הערה: לא ניתן לסנכרן עד שהתצורה תשתנה ומסד הנתונים יימשך שוב.___ + + ___הערה 2: הנתחים הם בלתי-ניתנים לשינוי לחלוטין, ניתן למשוך רק את המטה-נתונים + וההפרש.___ + msgInitialSetup: >- + המכשיר שלך **טרם הוגדר**. אנחנו כאן לעזור לך בתהליך ההגדרה. + + + שים לב שניתן להעתיק את תוכן כל דיאלוג ללוח. אם צריך לחזור אליו מאוחר יותר, + ניתן להדביק אותו כפתק ב-Obsidian. ניתן גם לתרגם לשפתך בעזרת כלי תרגום. + + + ראשית, האם יש לך **Setup URI**? + + + הערה: אם אינך יודע מהו, אנא עיין ב[תיעוד](${URI_DOC}). + msgRecommendSetupUri: >- + אנו ממליצים בחום לייצר Setup URI ולהשתמש בו. + + אם אין לך ידע בנושא, אנא עיין ב[תיעוד](${URI_DOC}) (מתנצלים שוב, אך זה חשוב). + + + כיצד ברצונך להגדיר ידנית? + msgSinceV02321: >- + מאז גרסה 0.23.21, Self-hosted LiveSync שינה את התנהגות ברירת המחדל ומבנה מסד + הנתונים. השינויים הבאים בוצעו: + + + 1. **תלות רישיות בשמות קבצים** + הטיפול בשמות קבצים הוא כעת ללא תלות רישיות. זהו שינוי מועיל לרוב הפלטפורמות, + פרט ל-Linux ו-iOS שאינן מנהלות תלות רישיות בקבצים ביעילות. + (בפלטפורמות אלה, תוצג אזהרה עבור קבצים עם אותו שם אך רישיות שונה). + + 2. **טיפול בגרסאות של נתחים** + נתחים הם בלתי-ניתנים לשינוי, מה שמאפשר גרסאות קבועות. שינוי זה ישפר את + ביצועי שמירת הקבצים. + + ___עם זאת, כדי להפעיל אחד מהשינויים הללו, יש לבנות מחדש גם את מסד הנתונים המרוחד + וגם את המקומי. תהליך זה לוקח כמה דקות, ואנו ממליצים לעשות זאת כשיש לך זמן פנוי.___ + + + - אם ברצונך לשמור את ההתנהגות הקודמת, ניתן לדלג על תהליך זה באמצעות `${KEEP}`. + + - אם אין לך מספיק זמן, אנא בחר `${DISMISS}`. תקבל תזכורת בהמשך. + + - אם בנית מחדש את מסד הנתונים במכשיר אחר, אנא בחר `${DISMISS}` ונסה לסנכרן שוב. + מאחר שזוהה הפרש, תקבל תזכורת שוב. + optionAdjustRemote: התאם לשרת המרוחד + optionDecideLater: החלט מאוחר יותר + optionEnableBoth: הפעל את שניהם + optionEnableFilenameCaseInsensitive: "הפעל רק #1" + optionEnableFixedRevisionForChunks: "הפעל רק #2" + optionHaveSetupUri: כן, יש לי + optionKeepPreviousBehaviour: שמור על התנהגות קודמת + optionManualSetup: הגדר הכל ידנית + optionNoAskAgain: לא, אנא שאל שוב + optionNoSetupUri: לא, אין לי + optionRemindNextLaunch: הזכר לי בהפעלה הבאה + optionSetupViaP2P: השתמש ב-%{short_p2p_sync} להגדרה + optionSetupWizard: קח אותי לאשף ההגדרה + optionYesFetchAgain: כן, משוך שוב + titleCaseSensitivity: תלות רישיות + titleRecommendSetupUri: המלצה לשימוש ב-Setup URI + titleWelcome: ברוך הבא ל-Self-hosted LiveSync +moduleObsidianMenu: + replicate: שכפל +Move remotely deleted files to the trash, instead of deleting.: העבר קבצים שנמחקו מרחוק לאשפה, במקום למחוק. +Not all messages have been translated. And, please revert to "Default" when reporting errors.: + לא כל ההודעות תורגמו. בנוסף, אנא חזור ל"ברירת מחדל" בעת דיווח על שגיאות. +Notify all setting files: הודע על כל קבצי ההגדרות +Notify customized: הודע על התאמות אישיות +Notify when other device has newly customized.: הודע כאשר מכשיר אחר הוסיף התאמה אישית חדשה. +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.: + מספר האצוות לעיבוד בכל פעם. ברירת מחדל 40, מינימום 2. יחד עם גודל האצווה קובע + כמה מסמכים נשמרים בזיכרון בו-זמנית. +Number of changes to sync at a time. Defaults to 50. Minimum is 2.: מספר השינויים לסנכרון בכל פעם. ברירת מחדל 50, מינימום 2. +obsidianLiveSyncSettingTab: + btnApply: החל + btnCheck: בדוק + btnCopy: העתק + btnDisable: נטרל + btnDiscard: ביטול שינויים + btnEnable: הפעל + btnFix: תקן + btnGotItAndUpdated: הבנתי ועדכנתי. + btnNext: הבא + btnStart: התחל + btnTest: בדוק + btnUse: השתמש + buttonFetch: משוך + buttonNext: הבא + defaultLanguage: ברירת מחדל + descConnectSetupURI: זוהי השיטה המומלצת להגדרת Self-hosted LiveSync עם Setup URI. + descCopySetupURI: מושלם להגדרת מכשיר חדש! + descEnableLiveSync: הפעל רק לאחר הגדרת אחת משתי האפשרויות לעיל, או לאחר השלמת כל + ההגדרות ידנית. + descFetchConfigFromRemote: משוך הגדרות נדרשות מהשרת המרוחד שהוגדר כבר. + descManualSetup: לא מומלץ, אך שימושי אם אין לך Setup URI + descTestDatabaseConnection: פתח חיבור למסד נתונים. אם מסד הנתונים המרוחד לא נמצא + ויש לך הרשאה ליצור אחד, הוא ייצור. + descValidateDatabaseConfig: בודק ומתקן בעיות אפשריות בתצורת מסד הנתונים. + errAccessForbidden: ❗ גישה נדחתה. + errCannotContinueTest: לא ניתן להמשיך בבדיקה. + errCorsCredentials: ❗ cors.credentials שגוי + errCorsNotAllowingCredentials: ❗ CORS אינו מאפשר פרטי גישה + errCorsOrigins: ❗ cors.origins שגוי + errEnableCors: ❗ httpd.enable_cors שגוי + errEnableCorsChttpd: ❗ chttpd.enable_cors שגוי + errMaxDocumentSize: ❗ couchdb.max_document_size נמוך) + errMaxRequestSize: ❗ chttpd.max_http_request_size נמוך) + errMissingWwwAuth: ❗ httpd.WWW-Authenticate חסר + errRequireValidUser: ❗ chttpd.require_valid_user שגוי. + errRequireValidUserAuth: ❗ chttpd_auth.require_valid_user שגוי. + labelDisabled: "⏹️ : מנוטרל" + labelEnabled: "🔁 : מופעל" + levelAdvanced: " (מתקדם)" + levelEdgeCase: " (מקרה קצה)" + levelPowerUser: " (משתמש מתקדם)" + linkOpenInBrowser: פתח בדפדפן + linkPageTop: ראש העמוד + linkTipsAndTroubleshooting: טיפים ופתרון בעיות + linkTroubleshooting: /docs/troubleshooting.md + logCannotUseCloudant: לא ניתן להשתמש בתכונה זו עם IBM Cloudant. + logCheckingConfigDone: בדיקת התצורה הושלמה + logCheckingConfigFailed: בדיקת התצורה נכשלה + logCheckingDbConfig: בודק תצורת מסד נתונים + logCheckPassphraseFailed: |- + שגיאה: בדיקת ביטוי הסיסמה עם השרת המרוחד נכשלה: + ${db}. + logConfiguredDisabled: "מצב סנכרון שהוגדר: מנוטרל" + logConfiguredLiveSync: "מצב סנכרון שהוגדר: LiveSync" + logConfiguredPeriodic: "מצב סנכרון שהוגדר: תקופתי" + logCouchDbConfigFail: "תצורת CouchDB: ${title} נכשלה" + logCouchDbConfigSet: "תצורת CouchDB: ${title} -> הגדר ${key} ל-${value}" + logCouchDbConfigUpdated: "תצורת CouchDB: ${title} עודכנה בהצלחה" + logDatabaseConnected: מסד הנתונים מחובר + logEncryptionNoPassphrase: לא ניתן להפעיל הצפנה ללא ביטוי סיסמה + logEncryptionNoSupport: המכשיר שלך אינו תומך בהצפנה. + logErrorOccurred: אירעה שגיאה!! + logEstimatedSize: "גודל משוער: ${size}" + logPassphraseInvalid: ביטוי הסיסמה אינו תקין, אנא תקן אותו. + logPassphraseNotCompatible: "שגיאה: ביטוי הסיסמה אינו תואם לשרת המרוחד! אנא בדוק שוב!" + logRebuildNote: הסנכרון הושבת, משוך והפעל מחדש אם רצוי. + logSelectAnyPreset: בחר קביעה מראש כלשהי. + msgAreYouSureProceed: האם אתה בטוח שברצונך להמשיך? + msgChangesNeedToBeApplied: יש להחיל שינויים! + msgConfigCheck: --בדיקת תצורה-- + msgConfigCheckFailed: בדיקת התצורה נכשלה. האם ברצונך להמשיך בכל זאת? + msgConnectionCheck: --בדיקת חיבור-- + msgConnectionProxyNote: אם אתה נתקל בבעיות עם בדיקת החיבור (גם לאחר בדיקת התצורה), + אנא בדוק את הגדרות ה-reverse proxy שלך. + msgCurrentOrigin: "מקור נוכחי: ${origin}" + msgDiscardConfirmation: האם אתה בטוח שברצונך לבטל הגדרות ומסדי נתונים קיימים? + msgDone: --הסתיים-- + msgEnableCors: הגדר httpd.enable_cors + msgEnableCorsChttpd: הגדר chttpd.enable_cors + msgEnableEncryptionRecommendation: אנו ממליצים להפעיל הצפנה מקצה לקצה ואת ערפול + הנתיב. האם אתה בטוח שברצונך להמשיך ללא הצפנה? + msgFetchConfigFromRemote: האם ברצונך למשוך את התצורה מהשרת המרוחד? + msgGenerateSetupURI: הכל מוכן! האם ברצונך לייצר Setup URI להגדרת מכשירים אחרים? + msgIfConfigNotPersistent: אם תצורת השרת אינה קבועה (למשל, פועלת ב-docker), הערכים + כאן עשויים להשתנות. לאחר שתצליח להתחבר, אנא עדכן את ההגדרות ב-local.ini של השרת. + msgInvalidPassphrase: ביטוי הסיסמה להצפנה שלך עשוי להיות לא תקין. האם אתה בטוח + שברצונך להמשיך? + msgNewVersionNote: הגעת כאן בשל הודעת שדרוג? אנא עיין בהיסטוריית הגרסאות. אם אתה + מרוצה, לחץ על הכפתור. עדכון חדש יציג זאת שוב. + msgNonHTTPSInfo: מוגדר כ-URI שאינו HTTPS. שים לב שהדבר עשוי שלא לפעול על מכשירים + ניידים. + msgNonHTTPSWarning: לא ניתן להתחבר ל-URI שאינו HTTPS. אנא עדכן את התצורה ונסה שוב. + msgNotice: ---הודעה--- + msgObjectStorageWarning: >- + אזהרה: תכונה זו בשלב פיתוח, לכן שים לב לנקודות הבאות: + + - ארכיטקטורת הוספה בלבד. נדרשת בנייה מחדש לצמצום האחסון. + + - קצת רגיש. + + - בסנכרון הראשון, כל ההיסטוריה תועבר מהשרת המרוחד. שים לב למגבלות נתונים ומהירות. + + - רק הפרשים מסונכרנים בזמן אמת. + + + אם נתקלת בבעיות, או שיש לך רעיונות לגבי תכונה זו, אנא פתח Issue ב-GitHub. + + אנחנו מעריכים את ההקדשה הגדולה שלך. + msgOriginCheck: "בדיקת מקור: ${org}" + msgRebuildRequired: >- + נדרשת בנייה מחדש של מסדי הנתונים כדי להחיל את השינויים. אנא בחר את השיטה. + + +
+ + מקרא + + + | סמל | משמעות | + + |: ------ :| ------- | + + | ⇔ | מעודכן | + + | ⇄ | סנכרן לאיזון | + + | ⇐,⇒ | העבר לדריסה | + + | ⇠,⇢ | העבר לדריסה מהצד השני | + + +
+ + + ## ${OPTION_REBUILD_BOTH} + + במבט: 📄 ⇒¹ 💻 ⇒² 🛰️ ⇢ⁿ 💻 ⇄ⁿ⁺¹ 📄 + + בנה מחדש גם את מסד הנתונים המקומי וגם המרוחד תוך שימוש בקבצים קיימים ממכשיר זה. + + פעולה זו תנעל מכשירים אחרים שיצטרכו לבצע משיכה. + + ## ${OPTION_FETCH} + + במבט: 📄 ⇄² 💻 ⇐¹ 🛰️ ⇔ 💻 ⇔ 📄 + + אתחל את מסד הנתונים המקומי ובנה אותו מחדש תוך שימוש בנתונים שנמשכו ממסד הנתונים + המרוחד. + + כולל את המקרה שבו בנית מחדש את מסד הנתונים המרוחד. + + ## ${OPTION_ONLY_SETTING} + + שמור רק את ההגדרות. **זהירות: עלול לגרום לפגיעה בנתונים**; בנייה מחדש של מסד + הנתונים נדרשת בדרך כלל. + msgSelectAndApplyPreset: אנא בחר והחל פריט קבוע מראש כלשהו להשלמת האשף. + msgSetCorsCredentials: הגדר cors.credentials + msgSetCorsOrigins: הגדר cors.origins + msgSetMaxDocSize: הגדר couchdb.max_document_size + msgSetMaxRequestSize: הגדר chttpd.max_http_request_size + msgSetRequireValidUser: הגדר chttpd.require_valid_user = true + msgSetRequireValidUserAuth: הגדר chttpd_auth.require_valid_user = true + msgSettingModified: ההגדרה "${setting}" שונתה ממכשיר אחר. לחץ על {HERE} לטעינה + מחדש של ההגדרות. לחץ במקום אחר להתעלמות מהשינויים. + msgSettingsUnchangeableDuringSync: הגדרות אלה אינן ניתנות לשינוי במהלך סנכרון. אנא + נטרל את כל הסנכרון ב"הגדרות סנכרון" כדי לבטל נעילה. + msgSetWwwAuth: הגדר httpd.WWW-Authenticate + nameApplySettings: החל הגדרות + nameConnectSetupURI: התחבר עם Setup URI + nameCopySetupURI: העתק הגדרות נוכחיות ל-Setup URI + nameDisableHiddenFileSync: נטרל סנכרון קבצים נסתרים + nameDiscardSettings: בטל הגדרות ומסדי נתונים קיימים + nameEnableHiddenFileSync: הפעל סנכרון קבצים נסתרים + nameEnableLiveSync: הפעל LiveSync + nameHiddenFileSynchronization: סנכרון קבצים נסתרים + nameManualSetup: הגדרה ידנית + nameTestConnection: בדוק חיבור + nameTestDatabaseConnection: בדוק חיבור למסד נתונים + nameValidateDatabaseConfig: אמת תצורת מסד נתונים + okAdminPrivileges: ✔ יש לך הרשאות מנהל. + okCorsCredentials: ✔ cors.credentials תקין. + okCorsCredentialsForOrigin: CORS credentials תקין + okCorsOriginMatched: ✔ CORS origin תקין + okCorsOrigins: ✔ cors.origins תקין. + okEnableCors: ✔ httpd.enable_cors תקין. + okEnableCorsChttpd: ✔ chttpd.enable_cors תקין. + okMaxDocumentSize: ✔ couchdb.max_document_size תקין. + okMaxRequestSize: ✔ chttpd.max_http_request_size תקין. + okRequireValidUser: ✔ chttpd.require_valid_user תקין. + okRequireValidUserAuth: ✔ chttpd_auth.require_valid_user תקין. + okWwwAuth: ✔ httpd.WWW-Authenticate תקין. + optionApply: החל + optionCancel: ביטול + optionCouchDB: CouchDB + optionDisableAllAutomatic: נטרל את כל האוטומטי + optionFetchFromRemote: משוך מהשרת המרוחד + optionHere: כאן + optionLiveSync: LiveSync + optionMinioS3R2: Minio,S3,R2 + optionOkReadEverything: בסדר, קראתי הכל. + optionOnEvents: על אירועים + optionPeriodicAndEvents: תקופתי ועל אירועים + optionPeriodicWithBatch: תקופתי עם אצווה + optionRebuildBoth: בנה שניהם מחדש ממכשיר זה + optionSaveOnlySettings: (סכנה) שמור הגדרות בלבד + panelChangeLog: יומן שינויים + panelGeneralSettings: הגדרות כלליות + panelPrivacyEncryption: פרטיות והצפנה + panelRemoteConfiguration: תצורת שרת מרוחד + panelSetup: הגדרה + serverVersion: "פרטי שרת: ${info}" + titleActiveRemoteServer: שרת מרוחד פעיל + titleAppearance: מראה + titleConflictResolution: פתרון קונפליקטים + titleCongratulations: מזל טוב! + titleCouchDB: CouchDB + titleDeletionPropagation: הפצת מחיקות + titleEncryptionNotEnabled: ההצפנה אינה מופעלת + titleEncryptionPassphraseInvalid: ביטוי סיסמה להצפנה לא תקין + titleExtraFeatures: הפעל תכונות נוספות ומתקדמות + titleFetchConfig: משוך תצורה + titleFetchConfigFromRemote: משוך תצורה מהשרת המרוחד + titleFetchSettings: משוך הגדרות + titleHiddenFiles: קבצים נסתרים + titleLogging: רישום יומן + titleMinioS3R2: Minio,S3,R2 + titleNotification: התראה + titleOnlineTips: טיפים אונליין + titleQuickSetup: הגדרה מהירה + titleRebuildRequired: נדרשת בנייה מחדש + titleRemoteConfigCheckFailed: בדיקת תצורת שרת מרוחד נכשלה + titleRemoteServer: שרת מרוחד + titleReset: אתחול + titleSetupOtherDevices: להגדרת מכשירים אחרים + titleSynchronizationMethod: שיטת סנכרון + titleSynchronizationPreset: קבוע מראש לסנכרון + titleSyncSettings: הגדרות סנכרון + titleSyncSettingsViaMarkdown: סנכרון הגדרות דרך Markdown + titleUpdateThinning: דילול עדכונים + warnCorsOriginUnmatched: ⚠ CORS Origin אינו תואם ${from}->${to} + warnNoAdmin: ⚠ אין לך הרשאות מנהל. +P2P: + AskPassphraseForDecrypt: העמית המרוחד שיתף את התצורה. אנא הזן את ביטוי הסיסמה + לפענוח התצורה. + AskPassphraseForShare: העמית המרוחד ביקש את תצורת מכשיר זה. אנא הזן את ביטוי + הסיסמה לשיתוף התצורה. ניתן להתעלם מהבקשה על ידי ביטול הדיאלוג. + DisabledButNeed: "%{title_p2p_sync} מנוטרל. האם אתה בטוח שברצונך להפעיל?" + FailedToOpen: לא ניתן לפתוח חיבור P2P לשרת האותות. + NoAutoSyncPeers: לא נמצאו עמיתים לסנכרון אוטומטי. אנא הגדר עמיתים בלוח %{long_p2p_sync}. + NoKnownPeers: לא זוהו עמיתים, ממתין לעמיתים נכנסים... + Note: + description: >2- + רפליקטור זה מאפשר לסנכרן את הכספת עם מכשירים אחרים באמצעות חיבור עמית-לעמית. + ניתן להשתמש בזה לסנכרון הכספת עם מכשירים אחרים ללא שירות ענן. + + רפליקטור זה מבוסס על Trystero. הוא משתמש גם בשרת אותות לביסוס חיבור בין מכשירים. + שרת האותות משמש להחלפת מידע חיבור בין מכשירים. הוא אינו (ולא אמור) לדעת או + לאחסן את הנתונים שלנו. + + + שרת האותות יכול להיות מאוחסן על ידי כל אחד. זהו ממסר Nostr בלבד. + לצורך פשטות ובדיקת התנהגות הרפליקטור, vrtmrz מאחסן עותק של שרת האותות. + ניתן להשתמש בשרת הניסיוני של vrtmrz, או בכל שרת אחר. + + + אגב, גם אם שרת האותות אינו מאחסן נתונים, הוא יכול לראות מידע חיבור של חלק + ממכשיריך. אנא שים לב לכך. כמו כן, היה זהיר בשימוש בשרת של מישהו אחר. + important_note: רפליקטור עמית-לעמית. + important_note_sub: תכונה זו עדיין בשלב מתקדם. ודא שהנתונים שלך מגובים לפני + השימוש. ונשמח אם תוכל לתרום לפיתוח תכונה זו. + + Summary: מהי תכונה זו? (ועוד הערות חשובות, נא לקרוא פעם אחת) + NotEnabled: "%{title_p2p_sync} אינו מופעל. לא ניתן לפתוח חיבור חדש." + P2PReplication: "שכפול %{P2P}" + PaneTitle: "%{long_p2p_sync}" + ReplicatorInstanceMissing: רפליקטור סנכרון P2P לא נמצא, ייתכן שלא הוגדר או הופעל. + SeemsOffline: העמית ${name} נראה לא מחובר, מדלג. + SyncAlreadyRunning: סנכרון P2P כבר פועל. + SyncCompleted: סנכרון P2P הושלם. + SyncStartedWith: סנכרון P2P עם ${name} התחיל. +Passphrase: ביטוי סיסמה +Passphrase of sensitive configuration items: ביטוי סיסמה לפריטי תצורה רגישים +password: סיסמה +Password: סיסמה +Path Obfuscation: ערפול נתיב +Per-file-saved customization sync: סנכרון התאמה אישית שנשמר לפי קובץ +Periodic Sync interval: מרווח סנכרון תקופתי +Prepare the 'report' to create an issue: הכן 'דו"ח' ליצירת Issue +Presets: קביעות מראש +Process small files in the foreground: עבד קבצים קטנים בחזית +Property Encryption: הצפנת מאפיינים +RedFlag: + Fetch: + Method: + Desc: >- + כיצד ברצונך למשוך? + + - %{RedFlag.Fetch.Method.FetchSafer}. + **תעבורה נמוכה**, **מעבד גבוה**, **סיכון נמוך** + מומלץ אם... + - קבצים עשויים להיות לא עקביים + - אין הרבה קבצים + - %{RedFlag.Fetch.Method.FetchSmoother}. + **תעבורה נמוכה**, **מעבד בינוני**, **סיכון נמוך עד בינוני** + מומלץ אם... + - הקבצים ככל הנראה עקביים + - יש לך הרבה קבצים. + - %{RedFlag.Fetch.Method.FetchTraditional}. + **תעבורה גבוהה**, **מעבד נמוך**, **סיכון נמוך עד בינוני** + + >[!INFO]- פרטים + + > ## %{RedFlag.Fetch.Method.FetchSafer}. + + > **תעבורה נמוכה**, **מעבד גבוה**, **סיכון נמוך** + + > אפשרות זו יוצרת תחילה מסד נתונים מקומי תוך שימוש בקבצים מקומיים קיימים + לפני משיכת נתונים מהמקור המרוחד. + + > אם קיימים קבצים תואמים גם מקומית וגם מרחוק, רק ההפרשים ביניהם יועברו. + + > עם זאת, קבצים הקיימים בשני המקומות יטופלו תחילה כקבצים מתנגשים. הם ייפתרו + אוטומטית אם לא מתנגשים בפועל, אך תהליך זה עשוי לקחת זמן. + + > זוהי בדרך כלל השיטה הבטוחה ביותר, ממזערת סיכון לאובדן נתונים. + + > ## %{RedFlag.Fetch.Method.FetchSmoother}. + + > **תעבורה נמוכה**, **מעבד בינוני**, **סיכון נמוך עד בינוני** (תלוי בפעולה) + + > אפשרות זו יוצרת תחילה נתחים מקבצים מקומיים למסד הנתונים, ואז מושכת נתונים. + כתוצאה מכך, רק נתחים חסרים מקומית מועברים. עם זאת, כל המטה-נתונים נלקחים + מהמקור המרוחד. + + > קבצים מקומיים נבדקים לאחר מכן מול מטה-נתונים אלה בעת ההפעלה. התוכן שנחשב + חדש יותר ידרוס את הישן יותר (לפי זמן שינוי). + + > בדרך כלל בטוח אם הקבצים המקומיים הם אכן חדשים ביותר. עם זאת, עלול לגרום + לבעיות אם לקובץ יש חותמת זמן חדשה יותר אך תוכן ישן יותר (כמו `welcome.md` ראשוני). + + > שיטה זו משתמשת בפחות מעבד ומהירה יותר מ-"%{RedFlag.Fetch.Method.FetchSafer}", + אך עלולה להוביל לאובדן נתונים אם לא משתמשים בה בזהירות. + + > ## %{RedFlag.Fetch.Method.FetchTraditional}. + + > **תעבורה גבוהה**, **מעבד נמוך**, **סיכון נמוך עד בינוני** (תלוי בפעולה) + + > הכל יימשך מהשרת המרוחד. + + > דומה ל-%{RedFlag.Fetch.Method.FetchSmoother}, אך כל הנתחים נמשכים מהמקור המרוחד. + + > זוהי הדרך המסורתית ביותר למשיכה, צורכת בדרך כלל את רוב תעבורת הרשת והזמן. + + > עם זאת, היא נחשבת לעתים קרובות לשיטה היציבה ביותר מכיוון שהיא הוותיקה + והישירה ביותר. + FetchSafer: צור מסד נתונים מקומי לפני המשיכה + FetchSmoother: צור נתחי קבצים מקומיים לפני המשיכה + FetchTraditional: משוך הכל מהשרת המרוחד + Title: כיצד ברצונך למשוך? + FetchRemoteConfig: + Buttons: + Cancel: לא, השתמש בהגדרות המקומיות + Fetch: כן, משוך והחל הגדרות מרוחקות + Message: האם ברצונך למשוך ולהחיל הגדרות שמורות מרחוק על מכשיר זה? + Title: משוך תצורה מרוחקת +Reducing the frequency with which on-disk changes are reflected into the DB: הפחת את תדירות השתקפות שינויים בדיסק למסד הנתונים +Region: אזור +Remote server type: סוג שרת מרוחד +Remote Type: סוג מרוחד +Replicator: + Dialogue: + Locked: + Action: + Dismiss: ביטול לאישור מחדש + Fetch: אפס סנכרון במכשיר זה + Unlock: בטל נעילת מסד הנתונים המרוחד + Message: + _value: > + מסד הנתונים המרוחד נעול. הסיבה היא בנייה מחדש באחד הטרמינלים. + + לכן המכשיר מתבקש להמנע מחיבור כדי למנוע פגיעה במסד הנתונים. + + + קיימות שלוש אפשרויות: + + + - %{Replicator.Dialogue.Locked.Action.Fetch} + הדרך המועדפת והאמינה ביותר. פעולה זו תמחק את מסד הנתונים המקומי פעם, + ותאפס את כל מידע הסנכרון ממסד הנתונים המרוחד מחדש. ברוב המקרים ניתן + לעשות זאת בבטחה. עם זאת, דורשת זמן ויש לבצע ברשת יציבה. + - %{Replicator.Dialogue.Locked.Action.Unlock} + ניתן להשתמש בשיטה זו רק אם כבר מסונכרנים באופן אמין בשיטות שכפול + אחרות. פשוט לא מספיק שיש אותם קבצים. אם אינך בטוח, הימנע מכך. + - %{Replicator.Dialogue.Locked.Action.Dismiss} + פעולה זו תבטל את הפעולה. תתבקש שוב בבקשה הבאה. + Fetch: משיכה מלאה תוזמנה. הפלאגין יופעל מחדש לביצועה. + Unlocked: מסד הנתונים המרוחד בוטל נעילתו. אנא נסה שוב את הפעולה. + Title: נעול + Message: + Cleaned: ניקוי מסד הנתונים בתהליך. השכפול בוטל + InitialiseFatalError: אין רפליקטור זמין, זוהי שגיאה קריטית. + Pending: חלק מאירועי הקבצים ממתינים. השכפול בוטל. + SomeModuleFailed: השכפול בוטל בשל כשל במודול + VersionUpFlash: זוהה עדכון. אנא פתח את דיאלוג ההגדרות ובדוק את יומן השינויים. + השכפול בוטל. +Requires restart of Obsidian: דורש הפעלה מחדש של Obsidian +Requires restart of Obsidian.: דורש הפעלה מחדש של Obsidian. +Rerun Onboarding Wizard: הרץ שוב את אשף ההכוונה +Rerun the onboarding wizard to set up Self-hosted LiveSync again.: הרץ שוב את אשף ההכוונה להגדרת Self-hosted LiveSync מחדש. +Rerun Wizard: הרץ שוב את האשף +Reset notification threshold and check the remote database usage: אפס סף התראה ובדוק שימוש במסד הנתונים המרוחד +Reset the remote storage size threshold and check the remote storage size again.: + אפס את סף גודל האחסון המרוחד ובדוק שוב את גודל האחסון המרוחד. +Run Doctor: הפעל Doctor +Save settings to a markdown file. You will be notified when new settings arrive. You can set different files by the platform.: + שמור הגדרות לקובץ Markdown. תיודע כשהגדרות חדשות יגיעו. ניתן להגדיר קבצים + שונים לפי פלטפורמה. +Saving will be performed forcefully after this number of seconds.: השמירה תתבצע בכפייה לאחר מספר שניות זה. +Scan changes on customization sync: סרוק שינויים בסנכרון התאמה אישית +Scan customization automatically: סרוק התאמה אישית אוטומטית +Scan customization before replicating.: סרוק התאמה אישית לפני שכפול. +Scan customization every 1 minute.: סרוק התאמה אישית כל דקה. +Scan customization periodically: סרוק התאמה אישית תקופתית +Scan for hidden files before replication: סרוק קבצים נסתרים לפני שכפול +Scan hidden files periodically: סרוק קבצים נסתרים תקופתית +Seconds, 0 to disable: שניות, 0 לביטול +Seconds. Saving to the local database will be delayed until this value after we stop typing or saving.: + שניות. השמירה למסד הנתונים המקומי תתעכב בערך זה לאחר הפסקת הקלדה או שמירה. +Secret Key: מפתח סודי +Server URI: כתובת שרת (URI) +Setting: + GenerateKeyPair: + Desc: >+ + יצרנו זוג מפתחות! + + + הערה: זוג מפתחות זה לא יוצג שוב. אנא שמור אותו במקום בטוח. אם אבד לך, יהיה + צורך לייצר זוג מפתחות חדש. + + הערה 2: המפתח הציבורי הוא בפורמט spki, והמפתח הפרטי הוא בפורמט pkcs8. לנוחות, + שורות חדשות ממוירות ל-`\n` במפתח הציבורי. + + הערה 3: יש להגדיר את המפתח הציבורי במסד הנתונים המרוחד, ואת המפתח הפרטי + במכשירים המקומיים. + + + >[!FOR YOUR EYES ONLY]- + + >
+ + > + + > ### מפתח ציבורי + + > ``` + + ${public_key} + + > ``` + + > + + > ### מפתח פרטי + + > ``` + + ${private_key} + + > ``` + + > + + >
+ + + >[!Both for copying]- + + > + + >
+ + > + + > ``` + + ${public_key} + + ${private_key} + + > ``` + + > + + >
+ + Title: זוג מפתחות חדש נוצר! + TroubleShooting: + _value: פתרון בעיות + Doctor: + _value: Doctor הגדרות + Desc: מזהה הגדרות לא אופטימליות. (זהה לפעולה במהלך הגירה) + ScanBrokenFiles: + _value: סרוק קבצים פגומים + Desc: סורק קבצים שלא נשמרו כהלכה במסד הנתונים. +SettingTab: + Message: + AskRebuild: השינויים שלך מצריכים משיכה ממסד הנתונים המרוחד. האם להמשיך? +Setup: + Apply: + Buttons: + ApplyAndFetch: החל ומשוך + ApplyAndMerge: החל ומזג + ApplyAndRebuild: החל ובנה מחדש + Cancel: בטל ובטל + OnlyApply: החל בלבד + Message: >- + התצורה החדשה מוכנה. בואו נמשיך להחיל אותה. + + ישנן מספר דרכים להחיל זאת: + + + - החל ומשוך + הגדר מכשיר זה כלקוח חדש. לאחר ההחלה, סנכרן מהשרת המרוחד. + - החל ומזג + הגדר על מכשיר שכבר יש בו קבצים. מעבד קבצים מקומיים ומעביר הפרשים. עלולים + לקום קונפליקטים. + - החל ובנה מחדש + בנה את השרת המרוחד מחדש תוך שימוש בקבצים מקומיים. נעשה בדרך כלל אם השרת + מושחת או אם רוצים להתחיל מאפס. מכשירים אחרים יינעלו ויצטרכו למשוך מחדש. + - החל בלבד + החל בלבד. עלולים לקום קונפליקטים אם נדרשת בנייה מחדש. + Title: החל תצורה חדשה מה-${method} + WarningRebuildRecommended: "שים לב: לאחר כוונון ההגדרות, נקבע שנדרשת בנייה מחדש; + ייבוא בלבד אינו מומלץ." + Doctor: + Buttons: + No: לא, אנא השתמש בהגדרות ה-URI כפי שהן + Yes: כן, אנא יעץ ל-Doctor + Message: >- + Self-hosted LiveSync הפך ארוך יותר בהיסטוריה שלו וחלק מההגדרות המומלצות השתנו. + + + עכשיו, הגדרה היא זמן מצוין לכך. + + + האם ברצונך להפעיל את Doctor כדי לבדוק אם ההגדרות המיובאות אופטימליות + בהשוואה למצב הנוכחי? + Title: האם ברצונך להתייעץ עם ה-Doctor? + FetchRemoteConf: + Buttons: + Fetch: כן, אנא משוך את התצורה + Skip: לא, אנא השתמש בהגדרות ב-URI + Message: >- + אם סנכרנו כבר פעם עם מכשיר אחר, מסד הנתונים המרוחד מאחסן ערכי תצורה + מתאימים בין המכשירים המסונכרנים. הפלאגין ירצה לאחזר אותם לתצורה חזקה יותר. + + + עם זאת, עלינו לוודא דבר אחד. האם אנחנו כרגע במצב שבו ניתן לגשת לרשת + בבטחה ולאחזר את ההגדרות? + + הערה: ברוב המקרים, אתה בטוח לעשות זאת, כל עוד מסד הנתונים המרוחד שלך מאוחסן + עם תעודת SSL, ורשתך אינה פגומה. + Title: אחזר תצורה ממסד הנתונים המרוחד? + QRCode: >- + יצרנו קוד QR להעברת ההגדרות. אנא סרוק את קוד ה-QR עם הטלפון או מכשיר אחר. + + הערה: קוד ה-QR אינו מוצפן, אז היה זהיר בפתיחתו. + + + >[!FOR YOUR EYES ONLY]- + + >
${qr_image}
+ ShowQRCode: + _value: הצג קוד QR + Desc: הצג קוד QR להעברת ההגדרות. +Should we keep folders that don't have any files inside?: האם לשמור תיקיות שאין בהן קבצים? +Should we only check for conflicts when a file is opened?: האם לבדוק קונפליקטים רק בעת פתיחת קובץ? +Should we prompt you about conflicting files when a file is opened?: האם להציג בקשה לגבי קבצים מתנגשים בעת פתיחת קובץ? +Should we prompt you for every single merge, even if we can safely merge automatcially?: + האם להציג בקשת אישור לכל מיזוג יחיד, גם אם ניתן למזג בבטחה אוטומטית? +Show only notifications: הצג התראות בלבד +Show status as icons only: הצג סטטוס כאייקונים בלבד +Show status icon instead of file warnings banner: הצג אייקון סטטוס במקום פס אזהרות הקובץ +Show status inside the editor: הצג סטטוס בתוך העורך +Show status on the status bar: הצג סטטוס בשורת המצב +Show verbose log. Please enable if you report an issue.: הצג יומן מפורט. אנא הפעל אם אתה מדווח על בעיה. +Starts synchronisation when a file is saved.: מתחיל סנכרון כאשר קובץ נשמר. +Stop reflecting database changes to storage files.: הפסק לשקף שינויי מסד נתונים לקבצי אחסון. +Stop watching for file changes.: הפסק לעקוב אחר שינויי קבצים. +Suppress notification of hidden files change: דחוק התראת שינוי קבצים נסתרים +Suspend database reflecting: השהה שיקוף מסד נתונים +Suspend file watching: השהה מעקב קבצים +Sync after merging file: סנכרן לאחר מיזוג קובץ +Sync automatically after merging files: סנכרן אוטומטית לאחר מיזוג קבצים +Sync Mode: מצב סנכרון +Sync on Editor Save: סנכרן בשמירת עורך +Sync on File Open: סנכרן בפתיחת קובץ +Sync on Save: סנכרן בשמירה +Sync on Startup: סנכרן בהפעלה +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 Hash algorithm for chunk IDs: אלגוריתם Hash עבור מזהי נתחים +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 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.: מרווח הזמן המינימלי לסנכרון אוטומטי על אירוע. +This passphrase will not be copied to another device. It will be set to `Default` until you configure it again.: + ביטוי סיסמה זה לא יועתק למכשיר אחר. הוא יוגדר ל-`Default` עד שתגדיר אותו שוב. +TweakMismatchResolve: + Action: + Dismiss: דחה + UseConfigured: השתמש בהגדרות המוגדרות + UseMine: עדכן הגדרות מסד הנתונים המרוחד + UseMineAcceptIncompatible: עדכן הגדרות מסד הנתונים המרוחד אך השאר כפי שהוא + UseMineWithRebuild: עדכן הגדרות מסד הנתונים המרוחד ובנה מחדש + UseRemote: החל הגדרות על מכשיר זה + UseRemoteAcceptIncompatible: החל הגדרות על מכשיר זה, אך התעלם מאי-תאימות + UseRemoteWithRebuild: החל הגדרות על מכשיר זה ומשוך שוב + Message: + Main: >- + + ההגדרות במסד הנתונים המרוחד הן כדלקמן. ערכים אלה הוגדרו על ידי מכשירים אחרים, + אשר סונכרנו עם מכשיר זה לפחות פעם אחת. + + + אם ברצונך להשתמש בהגדרות אלה, אנא בחר + %{TweakMismatchResolve.Action.UseConfigured}. + + אם ברצונך לשמור את הגדרות מכשיר זה, אנא בחר + %{TweakMismatchResolve.Action.Dismiss}. + + + ${table} + + + >[!TIP] + + > אם ברצונך לסנכרן את כל ההגדרות, אנא השתמש ב-`סנכרון הגדרות דרך Markdown` + לאחר החלת תצורה מינימלית עם תכונה זו. + + + ${additionalMessage} + MainTweakResolving: |- + התצורה שלך אינה תואמת לזו שבשרת המרוחד. + + יש להתאים את התצורות הבאות: + + ${table} + + אנא הודע לנו על החלטתך. + + ${additionalMessage} + UseRemote: + WarningRebuildRecommended: >- + + >[!NOTICE] + + > חלק מהשינויים תואמים אך עלולים לצרוך אחסון ותעבורה נוספים. מומלצת בנייה + מחדש. עם זאת, ייתכן שבנייה מחדש לא תתבצע כעת, אך תיושם בתחזוקה עתידית. + + > ***ודא שיש לך זמן ושאתה מחובר לרשת יציבה לפני ההחלה!*** + WarningRebuildRequired: >- + + >[!WARNING] + + > חלק מהתצורות המרוחקות אינן תואמות למסד הנתונים המקומי של מכשיר זה. נדרשת + בנייה מחדש של מסד הנתונים המקומי. + + > ***ודא שיש לך זמן ושאתה מחובר לרשת יציבה לפני ההחלה!*** + WarningIncompatibleRebuildRecommended: >- + + >[!NOTICE] + + > זיהינו שחלק מהערכים שונים, מה שגורם לאי-תאימות בין מסד הנתונים המקומי למרוחד. + + > חלק מהשינויים תואמים אך עלולים לצרוך אחסון ותעבורה נוספים. מומלצת בנייה מחדש. + עם זאת, ייתכן שבנייה מחדש לא תתבצע כעת, אך תיושם בתחזוקה עתידית. + + > אם ברצונך לבנות מחדש, הדבר ייקח כמה דקות או יותר. **ודא שבטוח לבצע זאת עכשיו.** + WarningIncompatibleRebuildRequired: >- + + >[!WARNING] + + > זיהינו שחלק מהערכים שונים, מה שגורם לאי-תאימות בין מסד הנתונים המקומי למרוחד. + + > נדרשת בנייה מחדש של המסד המקומי או המרוחד. שניהם ייקחו כמה דקות או יותר. + **ודא שבטוח לבצע זאת עכשיו.** + Table: + _value: |+ + | שם ערך | מכשיר זה | מרוחד | + |: --- |: ---- :|: ---- :| + ${rows} + + Row: "| ${name} | ${self} | ${remote} |" + Title: + _value: זוהתה אי-התאמה בתצורה + TweakResolving: זוהתה אי-התאמה בתצורה + UseRemoteConfig: השתמש בתצורה המרוחקת +Unique name between all synchronized devices. To edit this setting, please disable customization sync once.: + שם ייחודי בין כל המכשירים המסונכרנים. כדי לערוך הגדרה זו, אנא נטרל את + סנכרון ההתאמה האישית פעם אחת. +Use Custom HTTP Handler: השתמש ב-HTTP Handler מותאם אישית +Use dynamic iteration count: השתמש בספירת איטרציות דינמית +Use Segmented-splitter: השתמש ב-Segmented-splitter +Use splitting-limit-capped chunk splitter: השתמש ב-chunk splitter עם מגבלת פיצול +Use the trash bin: השתמש בסל האשפה +Use timeouts instead of heartbeats: השתמש בפסק זמן במקום פעימות לב +username: שם משתמש +Username: שם משתמש +Verbose Log: יומן מפורט +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.: + אזהרה! לכך תהיה השפעה רצינית על הביצועים. בנוסף, היומנים לא יסונכרנו תחת השם + ברירת המחדל. אנא היה זהיר עם יומנים; הם לרוב מכילים מידע סודי שלך. +When you save a file in the editor, start a sync automatically: כאשר אתה שומר קובץ בעורך, התחל סנכרון אוטומטית +Write credentials in the file: כתוב פרטי גישה בקובץ +Write logs into the file: כתוב יומנים לקובץ diff --git a/src/common/messagesYAML/ja.yaml b/src/common/messagesYAML/ja.yaml new file mode 100644 index 00000000..fb6eb738 --- /dev/null +++ b/src/common/messagesYAML/ja.yaml @@ -0,0 +1,1246 @@ +(Active): (有効) +(BETA) Always overwrite with a newer file: (ベータ機能) 常に新しいファイルで上書きする +(Beta) Use ignore files: (ベータ機能) 除外ファイル(ignore)の使用 +(Days passed, 0 to disable automatic-deletion): (経過日数、0で自動削除を無効化) +(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.: + "(例: チャンクをオンラインで読む) + このオプションを有効にすると、LiveSyncはチャンクをローカルに複製せず、直接オンラインで読み込みます。カスタムチャンクサイズを増やすことをお勧めしま\ + す。" +(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) + この値を設定すると、これより大きいサイズのローカルファイルやリモートファイルの変更はスキップされます。ファイルが再び小さくなった場合は、新しいものが使用されます。 +(Mega chars): (メガ文字) +(Not recommended) If set, credentials will be stored in the file.: (非推奨) 設定した場合、認証情報がファイルに保存されます。 +(Obsolete) Use an old adapter for compatibility: (廃止済み)古いアダプターを互換性のために利用 +(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.: (正規表現)設定すると、これに一致するローカル/リモートファイルの変更はすべてスキップされます。 +Access Key: アクセスキー +Activate: 有効化 +Add default patterns: デフォルトパターンを追加 +Add new connection: 接続を追加 +Always prompt merge conflicts: 常に競合は手動で解決する +Apply Latest Change if Conflicting: 競合がある場合は最新の変更を適用する +Apply preset configuration: プリセットを適用する +Ask a passphrase at every launch: 起動のたびにパスフレーズを確認 +Automatically Sync all files when opening Obsidian.: Obsidian起動時にすべてのファイルを自動同期します。 +Back: 戻る +Back to non-configured: 未設定状態に戻す +Batch database update: データベースのバッチ更新 +Batch limit: バッチの上限 +Batch size: バッチ容量 +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.: + v0.17.6までは古いアダプターをローカル用のデータベースに使用していましたが、現在は新しいアダプターを推奨しています。しかし、新しいアダプターに変更するにはローカルデータベースの再構築が必要です。有効のままにしておくと、リモートデータベースからフェッチする場合に、この設定を無効にするかの質問が表示されます。 +Bucket Name: バケット名 +Cancel: キャンセル +Check and convert non-path-obfuscated files: パス難読化されていないファイルを確認して変換 +Check for documents that have not been converted to path-obfuscated IDs and convert them if necessary.: まだパス難読化 ID に変換されていないドキュメントを確認し、必要に応じて変換します。 +cmdConfigSync: + showCustomizationSync: カスタマイズ同期を表示 +Comma separated `.gitignore, .dockerignore`: カンマ区切り `.gitignore, .dockerignore` +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 (Database structure): 互換性(データベース構造) +Compatibility (Internal API Usage): 互換性(内部 API の利用) +Compatibility (Metadata): 互換性(メタデータ) +Compatibility (Remote Database): 互換性(リモートデータベース) +Compatibility (Trouble addressed): 互換性(対処済みの問題) +Compute revisions for chunks: チャンクの修正(リビジョン)を計算 +Configuration Encryption: 設定の暗号化 +Configure: 設定 +Configure And Change Remote: リモートを設定して切り替える +Configure E2EE: E2EE を設定 +Configure Remote: リモートを設定 +Copy: コピー +CouchDB Connection Tweak: CouchDB 接続の調整 +Cross-platform: クロスプラットフォーム +"Current adapter: {adapter}": "現在のアダプター: {adapter}" +Customization Sync: カスタマイズ同期 +Customization Sync (Beta3): カスタマイズ同期 (Beta3) +Data Compression: データ圧縮 +Database Adapter: データベースアダプター +Database Name: データベース名 +Database suffix: データベースの接尾辞(suffix) +Default: デフォルト +Delay conflict resolution of inactive files: 非アクティブなファイルは、競合解決を先送りする +Delay merge conflict prompt for inactive files.: 非アクティブなファイルの競合解決のプロンプトの表示を遅延させる +Delete: 削除 +Delete all customization sync data: カスタマイズ同期データをすべて削除 +Delete all data on the remote server.: リモートサーバー上のすべてのデータを削除します。 +Delete local database to reset or uninstall Self-hosted LiveSync: Self-hosted LiveSync をリセットまたはアンインストールするため、ローカルデータベースを削除 +Delete old metadata of deleted files on start-up: 削除済みデータのメタデータをクリーンナップする +Delete Remote Configuration: リモート設定を削除 +Delete remote configuration '{name}'?: リモート設定 '{name}' を削除しますか? +desktop: デスクトップ +Developer: 開発者 +Device name: デバイス名 +dialog: + yourLanguageAvailable: + _value: >- + Self-hosted LiveSync に設定されている言語の翻訳がありましたので、%{Display Language}が適用されました。 + + + 注意: 全てのメッセージは翻訳されていません。あなたの貢献をお待ちしています! + + GithubにIssueを作成する際には、 %{Display Language} を一旦 %{lang-def} + に戻してから、スクショやメッセージ、ログを収集してください。これは設定から変更できます。 + + + 便利に使用できれば幸いです。 + btnRevertToDefault: Keep %{lang-def} + Title: 翻訳が利用可能です! +Disables all synchronization and restart.: すべての同期を無効にして再起動します。 +Disables logging, only shows notifications. Please disable if you report an issue.: ログを無効にし、通知のみを表示します。Issueを報告する場合は無効にしてください。 +Display Language: インターフェースの表示言語 +Display name: 表示名 +Do not check configuration mismatch before replication: サーバーから同期する前に設定の不一致を確認しない +Do not keep metadata of deleted files.: 削除済みファイルのメタデータを保持しない +Do not split chunks in the background: バックグラウンドでチャンクを分割しない +Do not use internal API: 内部APIを使用しない +Doctor: + Button: + DismissThisVersion: いいえ、次のリリースまで再度確認しない + Fix: 修正する + FixButNoRebuild: 修正するが再構築はしない + No: いいえ + Skip: そのままにする + Yes: はい + Dialogue: + Main: |- + こんにちは!${activateReason}のため、設定診断ツールが起動しました! + 残念ながら、いくつかの設定が潜在的な問題として検出されました。 + ご安心ください。一つずつ解決していきましょう。 + + 事前にお知らせしますと、以下の項目についてお尋ねします。 + + ${issues} + + 始めていいですか? + MainFix: |- + + ## ${name} + + | 現在の値 | 理想値 | + |:---:|:---:| + | ${current} | ${ideal} | + + **推奨レベル:** ${level} + + ### 診断理由? + + ${reason} + + ${note} + + これを理想値に修正しますか? + Title: Self-hosted LiveSync 設定診断ツール + TitleAlmostDone: あと少しです! + TitleFix: 問題の修正 ${current}/${total} + Level: + Must: 必須 + Necessary: 必要 + Optional: 任意 + Recommended: 推奨 + Message: + NoIssues: 問題は検出されませんでした! + RebuildLocalRequired: 注意!これを適用するにはローカルデータベースの再構築が必要です! + RebuildRequired: 注意!これを適用するには再構築が必要です! + SomeSkipped: いくつかの問題をそのままにしました。次回起動時に再度確認しますか? + RULES: + E2EE_V02500: + REASON: エンドツーエンド暗号化がより堅牢で高速になりました。また、以前のE2EEは再コードレビューにより脆弱性が発見されました。できるだけ早く適用することをお勧めします。ご不便をおかけして申し訳ありません。また、この設定は下位互換性がありません。すべての同期デバイスをv0.25.0以降にアップデートする必要があります。再構築は必須ではなく、新しい転送から新しいフォーマットに変換されますが、可能な限り再構築をお勧めします。 +Duplicate: 複製 +Duplicate remote: リモート設定を複製 +E2EE Configuration: E2EE 設定 +Edge case addressing (Behaviour): 特殊なケースへの対応(動作) +Edge case addressing (Database): 特殊なケースへの対応(データベース) +Edge case addressing (Processing): 特殊なケースへの対応(処理) +Emergency restart: 緊急再起動 +Enable advanced features: 高度な機能を有効にする +Enable customization sync: カスタマイズ同期を有効 +Enable Developers' Debug Tools.: 開発者用デバッグツールを有効にする +Enable edge case treatment features: エッジケース対応機能を有効にする +Enable poweruser features: エキスパート機能を有効にする +Enable this if your Object Storage doesn't support CORS: オブジェクトストレージがCORSをサポートしていない場合は有効にしてください +Enable this option to automatically apply the most recent change to documents even when it conflicts: このオプションを有効にすると、競合があっても最新の変更を自動的にドキュメントに適用します +Encrypt contents on the remote database. If you use the plugin's synchronization feature, enabling this is recommended.: リモートデータベースの暗号化(オンにすることを推奨) +Encrypting sensitive configuration items: 機密性の高い設定項目の暗号化 +Encryption phassphrase. If changed, you should overwrite the server's database with the new (encrypted) files.: 暗号化パスフレーズ。変更した場合、新しい(暗号化された)ファイルでサーバーのデータベースを上書きする必要があります。 +End-to-End Encryption: E2E暗号化 +Endpoint URL: エンドポイントURL +Enhance chunk size: チャンクサイズを最適化する +Export: エクスポート +Fetch: 取得 +Fetch chunks on demand: ユーザーのタイミングでチャンクの更新を確認する +Fetch database with previous behaviour: 以前の動作でデータベースを取得 +Fetch remote settings: リモート設定を取得 +File to resolve conflict: 競合を解決するファイル +Filename: ファイル名 +Flag and restart: フラグを立てて再起動 +Forces the file to be synced when opened.: ファイルを開いたときに強制的に同期します。 +Fresh Start Wipe: 初期化ワイプ +Garbage Collection V3 (Beta): ガーベジコレクション V3 (Beta) +Handle files as Case-Sensitive: ファイルの大文字・小文字を区別する +Hidden Files: 隠しファイル +How to display network errors when the sync server is unreachable.: 同期サーバーに到達できない場合のネットワークエラーの表示方法を設定します。 +If disabled(toggled), chunks will be split on the UI thread (Previous behaviour).: 無効(トグル)にすると、チャンクはUIスレッドで分割されます(以前の動作)。 +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.: + 有効にすると、ファイルごとの効率的なカスタマイズ同期が使用されます。有効化時に小規模な移行が必要です。また、すべてのデバイスをv0.23.18にアップデートする必要があります。一度有効にすると、古いバージョンとの互換性がなくなります。 +If enabled, chunks will be split into no more than 100 items. However, dedupe is slightly weaker.: 有効にすると、チャンクは最大100項目に分割されます。ただし、重複除去の精度は落ちます。 +If enabled, newly created chunks are temporarily kept within the document, and graduated to become independent chunks once stabilised.: 有効にすると、新しく作成されたチャンクはドキュメント内に一時的に保持され、安定したら独立したチャンクになります。 +If enabled, the ⛔ icon will be shown inside the status instead of the file warnings banner. No details will be shown.: 有効にすると、ファイル警告バナーの代わりにステータス内へ ⛔ アイコンのみを表示します。詳細は表示されません。 +If enabled, the file under 1kb will be processed in the UI thread.: 有効にすると、1kb未満のファイルはUIスレッドで処理されます。 +If enabled, the notification of hidden files change will be suppressed.: 有効にすると、隠しファイルの変更通知が抑制されます。 +If this enabled, all chunks will be stored with the revision made from its content. (Previous behaviour): 有効にすると、すべてのチャンクはコンテンツから作成されたリビジョンと共に保存されます(以前の動作)。 +If this enabled, All files are handled as case-Sensitive (Previous behaviour).: 有効にすると、すべてのファイルは大文字小文字を区別して処理されます(以前の動作)。 +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 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.: + このオプションを有効にすると、PouchDBは接続を60秒間保持し、その間に通信がない場合、一度接続を閉じて再接続します。接続を無期限に保持する代わりにこの動作を行います。プロキシ(Cloudflareなど)がリクエストの持続時間を制限している場合に有用ですが、リソース使用量が増加する可能性があります。 +Ignore files: 除外ファイル +Ignore patterns: 除外パターン +Import connection: 接続をインポート +Incubate Chunks in Document: ドキュメント内でチャンクを一時保管する +Initialise all journal history, On the next sync, every item will be received and sent.: すべてのジャーナル履歴を初期化します。次回の同期時に、すべての項目が再受信・再送信されます。 +Interval (sec): 秒 +K: + exp: 試験機能 + long_p2p_sync: "%{title_p2p_sync} (%{exp})" + P2P: "%{Peer}-to-%{Peer}" + Peer: Peer + ScanCustomization: Scan customization + short_p2p_sync: P2P Sync (%{exp}) + title_p2p_sync: Peer-to-Peer Sync +Keep empty folder: 空フォルダの維持 +lang_def: Default +lang-de: Deutsche +lang-def: "%{lang_def}" +lang-es: Español +lang-fr: Français +lang-ja: 日本語 +lang-ko: 한국어 +lang-ru: Русский +lang-zh: 简体中文 +lang-zh-tw: 繁體中文 +Later: 後で +"Limit: {datetime} ({timestamp})": "制限: {datetime} ({timestamp})" +LiveSync could not handle multiple vaults which have same name without different prefix, This should be automatically configured.: LiveSyncは、接頭辞(プレフィックス)のない同名の保管庫(Vault)を扱うことができません。これは自動的に設定されます。 +liveSyncReplicator: + beforeLiveSync: LiveSyncの前に、まずOneShotを開始します... + cantReplicateLowerValue: これ以上低い値ではレプリケーション(複製)できません。 + checkingLastSyncPoint: 最後に同期したポイントを探しています。 + couldNotConnectTo: |- + ${uri} : ${name}に接続できませんでした + (${db}) + couldNotConnectToRemoteDb: "リモートデータベースに接続できませんでした: ${d}" + couldNotConnectToServer: サーバーに接続できませんでした。 + couldNotConnectToURI: "${uri}に接続できませんでした: ${dbRet}" + couldNotMarkResolveRemoteDb: リモートデータベースを解決済みとしてマークできませんでした。 + liveSyncBegin: LiveSyncを開始... + lockRemoteDb: データ破損を防ぐためリモートデータベースをロック + markDeviceResolved: このデバイスを『解決済み』としてマーク。 + oneShotSyncBegin: OneShot同期を開始... (${syncMode}) + remoteDbCorrupted: リモートデータベースが新しいか破損しています。self-hosted-livesyncの最新バージョンがインストールされていることを確認してください + remoteDbCreatedOrConnected: リモートデータベースが作成または接続されました + remoteDbDestroyed: リモートデータベースが削除されました + remoteDbDestroyError: "リモートデータベースの削除中に問題が発生しました:" + remoteDbMarkedResolved: リモートデータベースが解決済みとしてマークされました。 + replicationClosed: レプリケーション(複製)が終了しました + replicationInProgress: レプリケーション(複製)は既に進行中です + retryLowerBatchSize: "より小さいバッチサイズで再試行: ${batch_size}/${batches_limit}" + unlockRemoteDb: データ破損を防ぐためリモートデータベースをアンロック +liveSyncSetting: + errorNoSuchSettingItem: "その設定項目は存在しません: ${key}" + originalValue: "元の値: ${value}" + valueShouldBeInRange: 値は ${min} < 値 < ${max} の範囲である必要があります +liveSyncSettings: + btnApply: 適用 +Local Database Tweak: ローカルデータベースの調整 +Lock: ロック +Lock Server: サーバーをロック +Lock the remote server to prevent synchronization with other devices.: 他のデバイスとの同期を防ぐため、リモートサーバーをロックします。 +logPane: + autoScroll: 自動スクロール + logWindowOpened: ログウィンドウが開かれました + pause: 一時停止 + title: Self-hosted LiveSync ログ + wrap: 折り返し +Maximum delay for batch database updating: バッチデータベース更新の最大遅延 +Maximum file size: 最大ファイル容量 +Maximum Incubating Chunk Size: 保持するチャンクの最大サイズ +Maximum Incubating Chunks: 一時保管する最大チャンク数 +Maximum Incubation Period: 最大保持期限 +MB (0 to disable).: MB (0で無効化)。 +Memory cache: メモリキャッシュ +Memory cache size (by total characters): 全体でキャッシュする文字数 +Memory cache size (by total items): 全体のキャッシュサイズ +Merge: マージ +Minimum delay for batch database updating: バッチデータベース更新の最小遅延 +moduleCheckRemoteSize: + logCheckingStorageSizes: ストレージサイズを確認中 + logCurrentStorageSize: "リモートストレージサイズ: ${measuredSize}" + logExceededWarning: "リモートストレージサイズ: ${measuredSize} が ${notifySize} を超過しました" + logThresholdEnlarged: しきい値が ${size}MB に設定されました + msgConfirmRebuild: これは少し時間がかかる場合があります。本当に今すべてを再構築しますか? + msgDatabaseGrowing: | + **データベースが大きくなっています!** でも心配しないでください。リモートストレージの容量が不足する前に対応できます。 + + | 測定サイズ | 設定サイズ | + | --- | --- | + | ${estimatedSize} | ${maxSize} | + + > [!MORE]- + > 長年使用している場合、参照されていないチャンク(つまりゴミ)がデータベースに蓄積している可能性があります。そのため、すべてを再構築することをお勧めします。おそらくかなり小さくなるでしょう。 + > + > 単純に保管庫の容量が増えている場合は、事前にファイルを整理してからすべてを再構築するのが良いでしょう。Self-hosted LiveSyncは処理速度を上げるため、削除しても実際のデータを削除しません。これはおおまかに[documentation](https://github.com/vrtmrz/obsidian-livesync/blob/main/docs/tech_info.md)に記載されています。 + > + > 増加を気にしない場合は、通知制限を100MB単位で増やすことができます。これは自分のサーバーで実行している場合に適しています。ただし、定期的にすべてを再構築する方が良いでしょう。 + > + + > [!WARNING] + > すべてを再構築する場合は、すべてのデバイスが同期されていることを確認してください。もちろん、プラグインは可能な限り解決しようと努力はしますけど... + msgSetDBCapacity: | + リモートストレージの容量が不足する前に対策を講じるため、**最大データベース容量の警告**を設定できます。 + これを有効にしますか? + + > [!MORE]- + > - 0: ストレージサイズについて警告しない。 + > 自宅サーバーなど、リモートストレージに十分な容量がある場合に推奨されます。ストレージサイズを確認し、手動で再構築できます。 + > - 800: リモートストレージサイズが800MBを超えたら警告。 + > 1GB制限のfly.ioやIBM Cloudantを使用している場合に推奨されます。 + > - 2000: リモートストレージサイズが2GBを超えたら警告。 + + 制限に達した場合、段階的に制限を増やすよう求められます。 + option2GB: 2GB (標準) + option800MB: 800MB (Cloudant, fly.io) + optionAskMeLater: 後で確認する + optionDismiss: 無視 + optionIncreaseLimit: ${newMax}MBに設定 + optionNoWarn: いいえ、警告しないでください + optionRebuildAll: 今すべてを再構築 + titleDatabaseSizeLimitExceeded: リモートストレージサイズが制限を超過しました + titleDatabaseSizeNotify: データベースサイズ通知の設定 +moduleInputUIObsidian: + defaultTitleConfirmation: 確認 + defaultTitleSelect: 選択 + optionNo: いいえ + optionYes: はい +moduleLiveSyncMain: + logAdditionalSafetyScan: 追加の安全スキャン中... + logLoadingPlugin: プラグインをロード中... + logPluginInitCancelled: プラグインの初期化がモジュールによってキャンセルされました + logPluginVersion: Self-hosted LiveSync v${manifestVersion} ${packageVersion} + logReadChangelog: LiveSyncが更新されました。変更履歴をお読みください! + logSafetyScanCompleted: 追加の安全スキャンが完了しました + logSafetyScanFailed: モジュールで追加の安全スキャンが失敗しました + logUnloadingPlugin: プラグインをアンロード中... + logVersionUpdate: LiveSyncが更新されました。互換性のない更新の場合、すべての自動同期が一時的に無効化されています。有効にする前に、すべてのデバイスが最新の状態であることを確認してください。 + msgScramEnabled: | + Self-hosted LiveSyncは一部のイベントを無視するように設定されています。これは正しいですか? + + | タイプ | ステータス | メモ | + |:---:|:---:|---| + | ストレージイベント | ${fileWatchingStatus} | すべての変更が無視されます | + | データベースイベント | ${parseReplicationStatus} | すべての同期された変更が延期されます | + + これらを再開してObsidianを再起動しますか? + + > [!DETAILS]- + > これらのフラグは、プラグインが再構築またはフェッチ中に設定されます。プロセスが異常終了した場合、意図せず保持されることがあります。 + > 不明な場合は、これらのプロセスを再実行してみてください。必ず保管庫をバックアップしてください。 + optionKeepLiveSyncDisabled: LiveSyncを無効のままにする + optionResumeAndRestart: 再開してObsidianを再起動 + titleScramEnabled: 緊急停止(Scram)が有効 +moduleLocalDatabase: + logWaitingForReady: しばらくお待ちください... +moduleLog: + showLog: ログを表示 +moduleMigration: + docUri: https://github.com/vrtmrz/obsidian-livesync/blob/main/README.md#how-to-use + fix0256: + buttons: + checkItLater: 後で確認する + DismissForever: 修正済み、今後確認しない + fix: 修正 + message: | + 最近のバグ(v0.25.6)により、一部のファイルが同期データベースに正しく保存されていない可能性があります。 + ファイルをスキャンし、修正が必要なものが見つかりました。 + + **修正準備ができたファイル:** + + ${files} + + これらのファイルはストレージ上の元ファイルとサイズが一致しており、復元可能です。 + 「修正」ボタンをクリックしてデータベースを修正できます。 + + ${messageUnrecoverable} + + 再実行したい場合は、Hatchから実行できます。 + messageUnrecoverable: | + **このデバイスで修正できないファイル:** + + ${filesNotRecoverable} + + これらのファイルはメタデータに不整合があり、このデバイスでは修正できません(ほとんどの場合、どちらが正しいか判定できません)。 + 復元するには、他のデバイスで確認するか、バックアップから手動で復元してください。 + title: 破損ファイルが検出されました + insecureChunkExist: + buttons: + fetch: リモートを既に再構築した。リモートからフェッチ + later: 後で行う + rebuild: すべてを再構築 + laterMessage: できるだけ早く対処することを強くお勧めします! + message: | + 一部のチャンクが安全に保存されておらず、データベースで暗号化されていません。 + **この問題を修正するにはデータベースを再構築してください**。 + + リモートデータベースがSSLで設定されていない、または安全性の低い認証情報を使用している場合、**機密データが漏洩するリスクがあります**。 + + 注意: すべてのデバイスでSelf-hosted LiveSync v0.25.6以降にアップグレードし、必ず保管庫をバックアップしてください。 + 注意2: すべてを再構築とフェッチは時間とトラフィックを消費します。オフピーク時間に安定したネットワークで実行してください。 + title: 安全でないチャンクが見つかりました! + logBulkSendCorrupted: チャンクの一括送信が有効にされていましたが、この機能に問題がありました。ご不便をおかけして申し訳ありません。自動的に無効化されました。 + logFetchRemoteTweakFailed: リモートの調整値の取得に失敗しました + logLocalDatabaseNotReady: 何か問題が発生しました!ローカルデータベースが準備できていません + logMigratedSameBehaviour: 以前と同じ動作でdb:${current}に移行しました + logMigrationFailed: ${old}から${current}への移行が失敗またはキャンセルされました + logRedflag2CreationFail: redflag2の作成に失敗しました + logRemoteTweakUnavailable: リモートの調整値を取得できませんでした + logSetupCancelled: セットアップがキャンセルされました。Self-hosted LiveSyncはセットアップを待っています! + msgFetchRemoteAgain: |- + ご存知のとおり、self-hosted LiveSyncはデフォルトの動作とデータベース構造を変更しました。 + + ご協力のおかげで、リモートデータベースはすでに移行されているようです。おめでとうございます! + + しかし、もう少し必要です。このデバイスの設定はリモートデータベースと互換性がありません。リモートデータベースを再度フェッチする必要があります。今すぐリモートから再フェッチしますか? + + ___注意: 設定が変更され、データベースが再フェッチされるまで同期できません。___ + ___注意2: チャンクは完全に不変なので、メタデータと差分のみフェッチできます。___ + msgInitialSetup: |- + このデバイスは**まだセットアップされていません**。セットアッププロセスをご案内します。 + + すべてのダイアログの内容はクリップボードにコピーできます。後で参照する必要があれば、Obsidianのノートに貼り付けてください。翻訳ツールを使ってお使いの言語に翻訳することもできます。 + + まず、**セットアップURI**をお持ちですか? + + 注意: それが何か分からない場合は、[documentation](${URI_DOC})を参照してください。 + msgRecommendSetupUri: |- + セットアップURIを生成して使用することを強くお勧めします。 + これについて知識がない場合は、[documentation](${URI_DOC})を参照してください(重要です)。 + + 手動でセットアップしますか? + msgSinceV02321: |- + v0.23.21以降、self-hosted LiveSyncはデフォルトの動作とデータベース構造を変更しました。以下の変更が行われました: + + 1. **ファイル名の大文字小文字の区別** + ファイル名の処理が大文字小文字を区別しなくなりました。これは、ファイル名の大文字小文字を効果的に管理しないLinuxとiOS以外のほとんどのプラットフォームにとって有益な変更です。 + (これらの環境では、同じ名前で大文字小文字が異なるファイルに対して警告が表示されます)。 + + 2. **チャンクのリビジョン処理** + チャンクは不変であり、リビジョンを固定できます。この変更により、ファイル保存のパフォーマンスが向上します。 + + ___しかし、これらの変更を有効にするには、リモートとローカルの両方のデータベースを再構築する必要があります。このプロセスは数分かかります。時間に余裕があるときに行うことをお勧めします。___ + + - 以前の動作を維持したい場合は、`${KEEP}`を使用してこのプロセスをスキップできます。 + - 時間がない場合は、`${DISMISS}`を選択してください。後で再度確認されます。 + - 別のデバイスでデータベースを再構築した場合は、`${DISMISS}`を選択して再度同期してみてください。差異が検出されたため、再度確認されます。 + optionAdjustRemote: リモートに合わせる + optionDecideLater: 後で決める + optionEnableBoth: 両方を有効にする + optionEnableFilenameCaseInsensitive: "#1のみ有効にする" + optionEnableFixedRevisionForChunks: "#2のみ有効にする" + optionHaveSetupUri: はい、持っています + optionKeepPreviousBehaviour: 以前の動作を維持 + optionManualSetup: すべて手動でセットアップ + optionNoAskAgain: いいえ、後で確認する + optionNoSetupUri: いいえ、持っていません + optionRemindNextLaunch: 次回起動時にリマインド + optionSetupViaP2P: "%{short_p2p_sync}を使ってセットアップ" + optionSetupWizard: セットアップウィザードへ + optionYesFetchAgain: はい、再フェッチする + titleCaseSensitivity: 大文字小文字の区別 + titleRecommendSetupUri: セットアップURIの使用を推奨 + titleWelcome: Self-hosted LiveSyncへようこそ +moduleObsidianMenu: + replicate: レプリケート +More actions: その他の操作 +Move remotely deleted files to the trash, instead of deleting.: リモートで削除されたファイルを削除せずにゴミ箱に移動する。 +Network warning style: ネットワーク警告の表示方式 +New Remote: 新しいリモート +No limit configured: 制限は設定されていません +Non-Synchronising files: 同期しないファイル +Normal Files: 通常ファイル +Not all messages have been translated. And, please revert to "Default" when reporting errors.: すべてのメッセージが翻訳されているわけではありません。また、Issue報告の際にはいったん"Default"に戻してください +Notify all setting files: すべての設定を通知 +Notify customized: カスタマイズが行われたら通知する +Notify when other device has newly customized.: 別の端末がカスタマイズを行なったら通知する +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.: 1度に処理するバッチの数。デフォルトは40、最小は2。この数値は、どれだけの容量の書類がメモリに保存されるかも定義します。 +Number of changes to sync at a time. Defaults to 50. Minimum is 2.: 一度に同期する変更の数。デフォルトは50、最小は2。 +obsidianLiveSyncSettingTab: + btnApply: 適用 + btnCheck: 確認 + btnCopy: コピー + btnDisable: 無効化 + btnDiscard: 破棄 + btnEnable: 有効化 + btnFix: 修正 + btnGotItAndUpdated: 理解しました、更新しました。 + btnNext: 次へ + btnStart: 開始 + btnTest: テスト + btnUse: 使用 + buttonFetch: フェッチ + buttonNext: 次へ + defaultLanguage: デフォルト + descConnectSetupURI: セットアップURIを使用してSelf-hosted LiveSyncをセットアップする推奨方法です。 + descCopySetupURI: 新しいデバイスのセットアップにおすすめ! + descEnableLiveSync: 上記の2つのオプションのいずれかを設定するか、すべての設定を手動で完了した後にのみ有効にしてください。 + descFetchConfigFromRemote: 既に設定済みのリモートサーバーから必要な設定を取得します。 + descManualSetup: 推奨しませんが、セットアップURIがない場合に便利です + descTestDatabaseConnection: データベース接続を開きます。リモートデータベースが見つからず、データベースを作成する権限がある場合は、データベースが作成されます。 + descValidateDatabaseConfig: データベース設定の潜在的な問題を確認し、修正します。 + errAccessForbidden: ❗ アクセスが禁止されています。 + errCannotContinueTest: テストを続行できませんでした。 + errCorsCredentials: ❗ cors.credentialsが不正です + errCorsNotAllowingCredentials: ❗ CORSが認証情報を許可していません + errCorsOrigins: ❗ cors.originsが不正です + errEnableCors: ❗ httpd.enable_corsが不正です + errEnableCorsChttpd: ❗ chttpd.enable_corsが不正です + errMaxDocumentSize: ❗ couchdb.max_document_sizeが低すぎます + errMaxRequestSize: ❗ chttpd.max_http_request_sizeが低すぎます + errMissingWwwAuth: ❗ httpd.WWW-Authenticateが不足しています + errRequireValidUser: ❗ chttpd.require_valid_userが不正です。 + errRequireValidUserAuth: ❗ chttpd_auth.require_valid_userが不正です。 + labelDisabled: "⏹️ : 無効" + labelEnabled: "🔁 : 有効" + levelAdvanced: " (上級)" + levelEdgeCase: " (エッジケース)" + levelPowerUser: " (エキスパート)" + linkOpenInBrowser: ブラウザで開く + linkPageTop: ページトップ + linkTipsAndTroubleshooting: ヒントとトラブルシューティング + linkTroubleshooting: /docs/troubleshooting.md + logCannotUseCloudant: この機能はIBM Cloudantでは使用できません。 + logCheckingConfigDone: 設定の確認が完了しました + logCheckingConfigFailed: 設定の確認に失敗しました + logCheckingDbConfig: データベース設定を確認中 + logCheckPassphraseFailed: |- + エラー: リモートサーバーとのパスフレーズ確認に失敗しました: + ${db}。 + logConfiguredDisabled: "設定された同期モード: 無効" + logConfiguredLiveSync: "設定された同期モード: LiveSync" + logConfiguredPeriodic: "設定された同期モード: 定期" + logCouchDbConfigFail: "CouchDB設定: ${title} 失敗" + logCouchDbConfigSet: "CouchDB設定: ${title} -> ${key}を${value}に設定" + logCouchDbConfigUpdated: "CouchDB設定: ${title} 正常に更新されました" + logDatabaseConnected: データベースに接続しました + logEncryptionNoPassphrase: パスフレーズなしでは暗号化を有効にできません + logEncryptionNoSupport: お使いのデバイスは暗号化をサポートしていません。 + logErrorOccurred: エラーが発生しました!! + logEstimatedSize: "推定サイズ: ${size}" + logPassphraseInvalid: パスフレーズが無効です、修正してください。 + logPassphraseNotCompatible: "エラー: パスフレーズがリモートサーバーと適合しません!再度確認してください!" + logRebuildNote: 同期が無効になりました。必要に応じてフェッチして再有効化してください。 + logSelectAnyPreset: プリセットを選択してください。 + msgAreYouSureProceed: 本当に続行しますか? + msgChangesNeedToBeApplied: 変更を適用する必要があります! + msgConfigCheck: --設定確認-- + msgConfigCheckFailed: 設定確認に失敗しました。それでも続行しますか? + msgConnectionCheck: --接続確認-- + msgConnectionProxyNote: 設定確認後も接続確認に問題がある場合は、リバースプロキシの設定を確認してください。 + msgCurrentOrigin: "現在のオリジン: ${origin}" + msgDiscardConfirmation: 本当に既存の設定とデータベースを破棄しますか? + msgDone: --完了-- + msgEnableCors: httpd.enable_corsを設定 + msgEnableCorsChttpd: chttpd.enable_corsを設定 + msgEnableEncryptionRecommendation: エンドツーエンド暗号化とパス難読化を有効にすることをお勧めします。暗号化なしで続行してもよろしいですか? + msgFetchConfigFromRemote: リモートサーバーから設定を取得しますか? + msgGenerateSetupURI: 完了!他のデバイスをセットアップするためのセットアップURIを生成しますか? + msgIfConfigNotPersistent: "サーバー設定が永続的でない場合(例: + Dockerで実行中)、ここの値は変更される可能性があります。接続できるようになったら、サーバーのlocal.iniの設定を更新してください。" + msgInvalidPassphrase: 暗号化パスフレーズが無効かもしれません。続行してもよろしいですか? + msgNewVersionNote: アップグレード通知でここに来ましたか?バージョン履歴を確認してください。納得したらボタンをクリックしてください。新しい更新があると再度確認されます。 + msgNonHTTPSInfo: 非HTTPS URIとして設定されています。モバイルデバイスでは動作しない可能性があります。 + msgNonHTTPSWarning: 非HTTPS URIに接続できません。設定を更新して再試行してください。 + msgNotice: ---お知らせ--- + msgObjectStorageWarning: |- + 警告: この機能は開発中です。以下の点にご注意ください: + - 追記専用アーキテクチャ。ストレージを縮小するには再構築が必要です。 + - やや不安定です。 + - 初回同期時、すべての履歴がリモートから転送されます。データ制限と速度に注意してください。 + - ライブ同期は差分のみです。 + + 問題があれば、またはこの機能についてアイデアがあれば、GitHubにIssueを作成してください。 + ご協力に感謝します。 + msgOriginCheck: "オリジン確認: ${org}" + msgRebuildRequired: |- + 変更を適用するにはデータベースの再構築が必要です。変更を適用する方法を選択してください。 + +
+ 凡例 + + | 記号 | 意味 | + |: ------ :| ------- | + | ⇔ | 最新 | + | ⇄ | 同期してバランスを取る | + | ⇐,⇒ | 上書きするため転送 | + | ⇠,⇢ | 反対側から上書きするため転送 | + +
+ + ## ${OPTION_REBUILD_BOTH} + 概要: 📄 ⇒¹ 💻 ⇒² 🛰️ ⇢ⁿ 💻 ⇄ⁿ⁺¹ 📄 + このデバイスの既存ファイルを使用してローカルとリモートの両方のデータベースを再構築します。 + 他のデバイスはロックアウトされ、フェッチが必要です。 + ## ${OPTION_FETCH} + 概要: 📄 ⇄² 💻 ⇐¹ 🛰️ ⇔ 💻 ⇔ 📄 + ローカルデータベースを初期化し、リモートデータベースから取得したデータを使用して再構築します。 + リモートデータベースを再構築した場合も含まれます。 + ## ${OPTION_ONLY_SETTING} + 設定のみを保存します。**注意: データ破損につながる可能性があります**。通常、データベースの再構築が必要です。 + msgSelectAndApplyPreset: ウィザードを完了するには、プリセット項目を選択して適用してください。 + msgSetCorsCredentials: cors.credentialsを設定 + msgSetCorsOrigins: cors.originsを設定 + msgSetMaxDocSize: couchdb.max_document_sizeを設定 + msgSetMaxRequestSize: chttpd.max_http_request_sizeを設定 + msgSetRequireValidUser: chttpd.require_valid_user = trueを設定 + msgSetRequireValidUserAuth: chttpd_auth.require_valid_user = trueを設定 + msgSettingModified: 設定"${setting}"が別のデバイスから変更されました。{HERE}をクリックして設定を再読み込みしてください。変更を無視するには他の場所をクリックしてください。 + msgSettingsUnchangeableDuringSync: これらの設定は同期中に変更できません。ロックを解除するには、"同期設定"ですべての同期を無効にしてください。 + msgSetWwwAuth: httpd.WWW-Authenticateを設定 + nameApplySettings: 設定を適用 + nameConnectSetupURI: セットアップURIで接続 + nameCopySetupURI: 現在の設定をセットアップURIにコピー + nameDisableHiddenFileSync: 隠しファイル同期を無効化 + nameDiscardSettings: 既存の設定とデータベースを破棄 + nameEnableHiddenFileSync: 隠しファイル同期を有効化 + nameEnableLiveSync: LiveSyncを有効化 + nameHiddenFileSynchronization: 隠しファイル同期 + nameManualSetup: 手動セットアップ + nameTestConnection: 接続テスト + nameTestDatabaseConnection: データベース接続テスト + nameValidateDatabaseConfig: データベース設定を検証 + okAdminPrivileges: ✔ 管理者権限があります。 + okCorsCredentials: ✔ cors.credentialsは正常です。 + okCorsCredentialsForOrigin: CORS認証情報OK + okCorsOriginMatched: ✔ CORSオリジンOK + okCorsOrigins: ✔ cors.originsは正常です。 + okEnableCors: ✔ httpd.enable_corsは正常です。 + okEnableCorsChttpd: ✔ chttpd.enable_corsは正常です。 + okMaxDocumentSize: ✔ couchdb.max_document_sizeは正常です。 + okMaxRequestSize: ✔ chttpd.max_http_request_sizeは正常です。 + okRequireValidUser: ✔ chttpd.require_valid_userは正常です。 + okRequireValidUserAuth: ✔ chttpd_auth.require_valid_userは正常です。 + okWwwAuth: ✔ httpd.WWW-Authenticateは正常です。 + optionApply: 適用 + optionCancel: キャンセル + optionCouchDB: CouchDB + optionDisableAllAutomatic: すべての自動を無効化 + optionFetchFromRemote: リモートからフェッチ + optionHere: ここ + optionLiveSync: LiveSync 同期 + optionMinioS3R2: Minio,S3,R2 + optionOkReadEverything: OK、すべて読みました。 + optionOnEvents: イベント時 + optionPeriodicAndEvents: 定期およびイベント時 + optionPeriodicWithBatch: バッチ付き定期 + optionRebuildBoth: このデバイスから両方を再構築 + optionSaveOnlySettings: (危険) 設定のみ保存 + panelChangeLog: 変更履歴 + panelGeneralSettings: 一般設定 + panelPrivacyEncryption: プライバシーと暗号化 + panelRemoteConfiguration: リモート設定 + panelSetup: セットアップ + serverVersion: "サーバー情報: ${info}" + titleActiveRemoteServer: アクティブなリモートサーバー + titleAppearance: 外観 + titleConflictResolution: 競合解決 + titleCongratulations: おめでとうございます! + titleCouchDB: CouchDB サーバー + titleDeletionPropagation: 削除の伝播 + titleEncryptionNotEnabled: 暗号化が有効になっていません + titleEncryptionPassphraseInvalid: 暗号化パスフレーズが無効です + titleExtraFeatures: 追加および上級機能を有効化 + titleFetchConfig: 設定を取得 + titleFetchConfigFromRemote: リモートサーバーから設定を取得 + titleFetchSettings: 設定の取得 + titleHiddenFiles: 隠しファイル + titleLogging: ログ + titleMinioS3R2: MinIO、S3、R2 + titleNotification: 通知 + titleOnlineTips: オンラインヒント + titleQuickSetup: クイックセットアップ + titleRebuildRequired: 再構築が必要 + titleRemoteConfigCheckFailed: リモート設定の確認に失敗 + titleRemoteServer: リモートサーバー + titleReset: リセット + titleSetupOtherDevices: 他のデバイスのセットアップ + titleSynchronizationMethod: 同期方法 + titleSynchronizationPreset: 同期プリセット + titleSyncSettings: 同期設定 + titleSyncSettingsViaMarkdown: Markdown経由で設定を同期 + titleUpdateThinning: 更新の間引き + warnCorsOriginUnmatched: ⚠ CORS Originが一致しません ${from}->${to} + warnNoAdmin: ⚠ 管理者権限がありません。 +Ok: OK +Old Algorithm: 旧アルゴリズム +Older fallback (Slow, W/O WebAssembly): 旧フォールバック (低速、WebAssembly なし) +Open: 開く +Open the dialog: ダイアログを開く +Overwrite: 上書き +Overwrite patterns: 上書きパターン +Overwrite remote: リモートを上書き +Overwrite remote with local DB and passphrase.: ローカル DB とパスフレーズでリモートを上書きします。 +Overwrite Server Data with This Device's Files: このデバイスのファイルでサーバーデータを上書き +P2P: + AskPassphraseForDecrypt: リモートピアから設定が共有されました。設定を復号するためのパスフレーズを入力してください。 + AskPassphraseForShare: リモートピアからこのデバイスの設定が要求されました。設定を共有するためのパスフレーズを入力してください。このダイアログをキャンセルすることでリクエストを無視できます。 + DisabledButNeed: "%{title_p2p_sync}は無効になっています。本当に有効にしますか?" + FailedToOpen: シグナリングサーバーへのP2P接続を開けませんでした。 + NoAutoSyncPeers: 自動同期ピアが見つかりません。%{long_p2p_sync}ペインでピアを設定してください。 + NoKnownPeers: ピアが検出されていません。他のピアからの接続を待機中... + Note: + description: |- + このレプリケーターは、ピアツーピア接続を使用して、Vaultを他のデバイスと同期することができます。クラウドサービスを使用せずに、他のデバイスとVaultを同期することができます。 + このレプリケーターはTrysteroをベースにしています。デバイス間の接続を確立するためにシグナリングサーバーを使用します。シグナリングサーバーはデバイス間で接続情報を交換するために使用されます。私たちのデータを知ったり保存したりすることはありません(または、そうあるべきではありません)。 + + シグナリングサーバーは誰でもホストできます。これは単なるNostrリレーです。簡便さとレプリケーターの動作確認のために、vrtmrzがシグナリングサーバーのインスタンスをホストしています。vrtmrzが提供する実験用サーバーを使用することも、他のサーバーを使用することもできます。 + + なお、シグナリングサーバーが私たちのデータを保存しなくても、一部のデバイスの接続情報を見ることができます。これにご注意ください。また、他の人が提供するサーバーを使用する場合は注意してください。 + important_note: ピアツーピアレプリケーターの実験的実装 + important_note_sub: この機能はまだ実験段階です。期待通りに動作しない可能性があることにご注意ください。さらに、バグ、セキュリティの問題、その他の問題がある可能性があります。この機能は自己責任でご使用ください。この機能の開発にご協力ください。 + Summary: この機能について(重要な注意事項を含む、一度お読みください) + NotEnabled: "%{title_p2p_sync}が有効になっていません。新しい接続を開くことができません。" + P2PReplication: "%{P2P}レプリケーション(複製)" + PaneTitle: "%{long_p2p_sync}" + ReplicatorInstanceMissing: P2P同期レプリケーターが見つかりません。設定または有効化されていない可能性があります。 + SeemsOffline: ピア${name}はオフラインのようです。スキップしました。 + SyncAlreadyRunning: P2P同期はすでに実行中です。 + SyncCompleted: P2P同期が完了しました。 + SyncStartedWith: ${name}とのP2P同期を開始しました。 +paneMaintenance: + markDeviceResolvedAfterBackup: バックアップ後にこのデバイスを解決済みにする + remoteLockedAndDeviceNotAccepted: リモートデータベースはロックされており、このデバイスはまだ承認されていません。 + remoteLockedResolvedDevice: リモートデータベースはロックされていますが、このデバイスはすでに承認されています。 + unlockDatabaseReady: データベースのロックを解除 +Passphrase: パスフレーズ +Passphrase of sensitive configuration items: 機密性の高い設定項目にパスフレーズを使用 +password: パスワード +Password: パスワード +Paste a connection string: 接続文字列を貼り付ける +Path Obfuscation: パスの難読化 +Patterns to match files for overwriting instead of merging: マージではなく上書きするファイルを判定するパターン +Patterns to match files for syncing: 同期対象ファイルを判定するパターン +Peer-to-Peer Synchronisation: ピアツーピア同期 +Per-file-saved customization sync: ファイルごとのカスタマイズ同期 +Perform: 実行 +Perform cleanup: クリーンアップを実行 +Perform Garbage Collection: ガーベジコレクションを実行 +Perform Garbage Collection to remove unused chunks and reduce database size.: 未使用のチャンクを削除し、データベースサイズを削減するためにガーベジコレクションを実行します。 +Periodic Sync interval: 定時同期の感覚 +Pick a file to resolve conflict: 競合を解決するファイルを選択 +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: このデバイス名を設定してください +Presets: プリセット +Process small files in the foreground: 小さいファイルを最前面で処理 +PureJS fallback (Fast, W/O WebAssembly): PureJS フォールバック (高速、WebAssembly なし) +Purge all download/upload cache.: ダウンロード/アップロードキャッシュをすべて削除します。 +Purge all journal counter: すべてのジャーナルカウンターを削除 +Rebuild local and remote database with local files.: ローカルファイルを使ってローカルとリモートのデータベースを再構築します。 +Rebuilding Operations (Remote Only): 再構築操作 (リモートのみ) +Recreate all: すべて再作成 +Recreate missing chunks for all files: すべてのファイルの不足チャンクを再作成 +RedFlag: + Fetch: + Method: + Desc: |- + どのようにフェッチしますか? + - %{RedFlag.Fetch.Method.FetchSafer} + **低トラフィック**, **高CPU負荷**, **低リスク** + 推奨条件... + - ファイルの整合性に不安がある + - ファイル数がそれほど多くない + - %{RedFlag.Fetch.Method.FetchSmoother} + **低トラフィック**, **中程CPU負荷**, **低~中リスク** + 推奨条件... + - ファイルがおそらく整合している + - ファイル数が多い + - %{RedFlag.Fetch.Method.FetchTraditional} + **高トラフィック**, **低CPU負荷**, **低~中リスク** + + >[!INFO]- 詳細 + > ## %{RedFlag.Fetch.Method.FetchSafer} + > **低トラフィック**, **高CPU負荷**, **低リスク** + > このオプションは、リモートからデータをフェッチする前に、既存のローカルファイルを使用してローカルデータベースを作成します。 + > ローカルとリモートの両方に一致するファイルがある場合、差分のみが転送されます。 + > ただし、両方の場所に存在するファイルは最初は競合ファイルとして処理されます。実際に競合していなければ自動的に解決されますが、この処理には時間がかかる場合があります。 + > これは一般的に最も安全な方法で、データ損失のリスクを最小限に抑えます。 + > ## %{RedFlag.Fetch.Method.FetchSmoother} + > **低トラフィック**, **中程CPU負荷**, **低~中リスク**(操作による) + > このオプションは、最初にローカルファイルからデータベース用のチャンクを作成し、その後データをフェッチします。そのため、ローカルにないチャンクのみが転送されます。ただし、すべてのメタデータはリモートから取得されます。 + > ローカルファイルは起動時にこのメタデータと比較されます。新しいと判断されたコンテンツ(更新日時による)が古いものを上書きします。この結果はリモートデータベースに同期されます。 + > ローカルファイルが本当に最新のタイムスタンプであれば一般的に安全です。ただし、ファイルのタイムスタンプが新しくてもコンテンツが古い場合(初期の`welcome.md`など)は問題が発生する可能性があります。 + > これは"%{RedFlag.Fetch.Method.FetchSafer}"よりCPU使用量が少なく高速ですが、注意しないとデータ損失につながる可能性があります。 + > ## %{RedFlag.Fetch.Method.FetchTraditional} + > **高トラフィック**, **低CPU負荷**, **低~中リスク**(操作による) + > すべてのデータがリモートからフェッチされます。 + > %{RedFlag.Fetch.Method.FetchSmoother}と似ていますが、すべてのチャンクがリモートからフェッチされます。 + > これは最も従来のフェッチ方法で、通常最もネットワークトラフィックと時間を消費します。'%{RedFlag.Fetch.Method.FetchSmoother}'オプションと同様のリモートファイル上書きのリスクがあります。 + > ただし、最も歴史があり簡単なアプローチであるため、最も安定した方法と見なされることが多いです。 + FetchSafer: フェッチ前にローカルデータベースを作成 + FetchSmoother: フェッチ前にローカルファイルチャンクを作成 + FetchTraditional: リモートからすべてをフェッチ + Title: どのようにフェッチしますか? + FetchRemoteConfig: + Buttons: + Cancel: いいえ、ローカル設定を使用 + Fetch: はい、リモート設定を取得して適用 + Message: リモートに保存された設定を取得して、このデバイスに適用しますか? + Title: リモート設定の取得 +Reducing the frequency with which on-disk changes are reflected into the DB: ローカルでの変更がデータベースに反映される頻度を下げる(所定の回数まとめて同期する、逐一反映しない) +Region: リージョン +Remediation: 是正 +Remediation Setting Changed: 是正設定が変更されました +Remote Database Tweak (In sunset): リモートデータベースの調整 (廃止予定) +Remote Databases: リモートデータベース +Remote name: リモート名 +Remote server type: リモートの種別 +Remote Type: 同期方式 +Rename: 名前を変更 +Replicator: + Dialogue: + Locked: + Action: + Dismiss: 再確認のためキャンセル + Fetch: このデバイスの同期をリセット + Unlock: リモートデータベースのロックを解除 + Message: + _value: > + リモートデータベースがロックされています。これはいずれかの端末での再構築が原因です。 + + データベースの破損を避けるため、このデバイスは接続を保留するよう求められています。 + + + 3つのオプションがあります: + + + - %{Replicator.Dialogue.Locked.Action.Fetch} + 最も推奨される信頼性の高い方法です。ローカルデータベースを一度破棄し、リモートデータベースからすべての同期情報を再取得します。ほとんどの場合、これは安全に実行できます。ただし、時間がかかり、安定したネットワークで実行する必要があります。 + - %{Replicator.Dialogue.Locked.Action.Unlock} + この方法は、他のレプリケーション(複製)方法ですでに確実に同期されている場合のみ使用できます。単に同じファイルがあるという意味ではありません。確信がない場合は避けてください。 + - %{Replicator.Dialogue.Locked.Action.Dismiss} + 操作をキャンセルします。次回のリクエスト時に再度確認されます。 + Fetch: 全フェッチがスケジュールされました。プラグインは実行のために再起動されます。 + Unlocked: リモートデータベースのロックが解除されました。操作を再試行してください。 + Title: ロック中 + Message: + Cleaned: データベースのクリーナップ中です。レプリケーション(複製)はキャンセルされました。 + InitialiseFatalError: レプリケーターが利用できません。これは致命的なエラーです。 + Pending: ファイルイベントが保留中です。レプリケーション(複製)はキャンセルされました。 + SomeModuleFailed: 一部のモジュールの失敗によりレプリケーション(複製)がキャンセルされました。 + VersionUpFlash: 更新が検出されました。設定ダイアログを開いて変更ログを確認してください。レプリケーション(複製)はキャンセルされました。 +Requires restart of Obsidian: Obsidianの再起動が必要です +Requires restart of Obsidian.: Obsidianの再起動が必要です。 +Resend: 再送信 +Resend all chunks to the remote.: すべてのチャンクをリモートへ再送信します。 +Reset: リセット +Reset all: すべてリセット +Reset all journal counter: すべてのジャーナルカウンターをリセット +Reset journal received history: ジャーナル受信履歴をリセット +Reset journal sent history: ジャーナル送信履歴をリセット +Reset received: 受信履歴をリセット +Reset sent history: 送信履歴をリセット +Reset Synchronisation information: 同期情報をリセット +Reset Synchronisation on This Device: このデバイスの同期状態をリセット +Resolve All: すべて解決 +Resolve all conflicted files: 競合しているすべてのファイルを解決 +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.": 競合しているすべてのファイルを新しい方の内容で解決します。注意:古い方は上書きされ、復元できません。 +Restart Now: 今すぐ再起動 +Restore or reconstruct local database from remote.: リモートからローカルデータベースを復元または再構築します。 +Save settings to a markdown file. You will be notified when new settings arrive. You can set different files by the platform.: Markdownファイルに設定を保存します。新しい設定が到着すると通知されます。プラットフォームごとに異なるファイルを設定できます。 +Saving will be performed forcefully after this number of seconds.: この秒数後に強制的に保存されます。 +Scan changes on customization sync: カスタマイズされた同期時に、変更をスキャンする +Scan customization automatically: 自動的にカスタマイズをスキャン +Scan customization before replicating.: レプリケーション(複製)前に、カスタマイズをスキャン +Scan customization every 1 minute.: カスタマイズのスキャンを1分ごとに行う +Scan customization periodically: 定期的にカスタマイズをスキャン +Scan for hidden files before replication: レプリケーション(複製)開始前に、隠しファイルのスキャンを行う +Scan hidden files periodically: 定期的に隠しファイルのスキャンを行う +Schedule and Restart: 予約して再起動 +Scram!: 緊急停止 +Seconds, 0 to disable: 秒数、0で無効 +Seconds. Saving to the local database will be delayed until this value after we stop typing or saving.: 秒。入力や保存を停止してからこの値の間、ローカルデータベースへの保存が遅延されます。 +Secret Key: シークレットキー +Select the database adapter to use.: 使用するデータベースアダプターを選択します。 +Send: 送信 +Send chunks: チャンクを送信 +Server URI: URI +Setting: + GenerateKeyPair: + Desc: |+ + キーペアを生成しました! + + 注意: このキーペアは再度表示されません。安全な場所に保存してください。紛失した場合は、新しいキーペアを生成する必要があります。 + 注意2: 公開鍵はspki形式、秘密鍵はpkcs8形式です。利便性のため、公開鍵の改行は`\n`に変換されています。 + 注意3: 公開鍵はリモートデータベースに、秘密鍵はローカルデバイスに設定してください。 + + >[!FOR YOUR EYES ONLY]- + >
+ > + > ### 公開鍵 + > ``` + ${public_key} + > ``` + > + > ### 秘密鍵 + > ``` + ${private_key} + > ``` + > + >
+ + >[!Both for copying]- + > + >
+ > + > ``` + ${public_key} + ${private_key} + > ``` + > + >
+ + Title: 新しいキーペアが生成されました! + TroubleShooting: + _value: トラブルシューティング + Doctor: + _value: 設定診断ツール + Desc: 最適でない設定を検出します。(マイグレーション時と同じ) + ScanBrokenFiles: + _value: 破損ファイルのスキャン + Desc: データベースに正しく保存されていないファイルをスキャンします。 +SettingTab: + Message: + AskRebuild: 変更にはリモートデータベースからのフェッチが必要です。続行しますか? +Setup: + Apply: + Buttons: + ApplyAndFetch: 適用してフェッチ + ApplyAndMerge: 適用してマージ + ApplyAndRebuild: 適用して再構築 + Cancel: 破棄してキャンセル + OnlyApply: 適用のみ + Message: |- + 新しい設定の準備ができました。適用に進みましょう。 + 適用方法はいくつかあります: + + - 適用してフェッチ + このデバイスを新しいクライアントとして設定します。適用後、リモートサーバーから同期します。 + - 適用してマージ + 既にファイルがあるデバイスで設定します。ローカルファイルを処理し、差分を転送します。競合が発生する場合があります。 + - 適用して再構築 + ローカルファイルを使用してリモートを再構築します。これは通常、サーバーが破損した場合や最初からやり直したい場合に行います。 + 他のデバイスはロックされ、再フェッチが必要になります。 + - 適用のみ + 適用のみを行います。再構築が必要な場合、競合が発生する可能性があります。 + Title: ${method}からの新しい設定を適用 + WarningRebuildRecommended: "注意: 設定の調整後、再構築が必要と判断されました。インポートのみは推奨されません。" + Doctor: + Buttons: + No: いいえ、URIの設定をそのまま使用 + Yes: はい、診断ツールに相談する + Message: |- + Self-hosted LiveSyncは徐々に歴史が長くなり、一部の推奨設定が変更されています。 + + セットアップは、これを行う非常に良い機会です。 + + インポートされた設定が最新の状態と比較して最適かどうかを確認するために、診断ツールを実行しますか? + Title: 診断ツールに相談しますか? + FetchRemoteConf: + Buttons: + Fetch: はい、設定を取得 + Skip: いいえ、URIの設定を使用 + Message: |- + 既に他のデバイスと同期したことがある場合、リモートデータベースには同期されたデバイス間の適切な設定値が保存されています。プラグインは堅牢な設定のためにそれらを取得したいと考えています。 + + ただし、1つ確認が必要です。現在、ネットワークに安全にアクセスして設定を取得できる状況ですか? + + 注意: リモートデータベースがSSL証明書でホストされており、ネットワークが侵害されていなければ、ほとんどの場合安全に実行できます。 + Title: リモートデータベースから設定を取得しますか? + QRCode: |- + 設定を転送するためのQRコードを生成しました。スマートフォンや他のデバイスでQRコードをスキャンしてください。 + 注意: QRコードは暗号化されていないため、開く際は注意してください。 + + >[!FOR YOUR EYES ONLY]- + >
${qr_image}
+ ShowQRCode: + _value: QRコードを表示 + Desc: 設定を転送するためのQRコードを表示します。 + RemoteE2EE: + Title: エンドツーエンド暗号化 + Guidance: エンドツーエンド暗号化の設定を行ってください。 + LabelEncrypt: エンドツーエンド暗号化 + PlaceholderPassphrase: パスフレーズを入力してください + StronglyRecommendedTitle: 強く推奨 + StronglyRecommendedLine1: エンドツーエンド暗号化を有効にすると、データはリモートサーバーへ送信される前にこの端末上で暗号化されます。つまり、たとえ誰かがサーバーへアクセスできても、パスフレーズがなければデータを読むことはできません。他の端末でデータを復号する際にも必要になるため、パスフレーズは必ず覚えておいてください。 + StronglyRecommendedLine2: また、Peer-to-Peer 同期を使用している場合でも、将来ほかの方式へ切り替えてリモートサーバーへ接続するときには、この設定が使われます。 + MultiDestinationWarning: 複数の同期先へ接続する場合でも、この設定は同一である必要があります。 + LabelObfuscateProperties: プロパティを難読化 + ObfuscatePropertiesDesc: プロパティ(ファイルパス、サイズ、作成日時、更新日時など)を難読化すると、リモートサーバー上のファイルやフォルダーの構造や名前を特定しにくくできるため、追加の保護層になります。これによりプライバシーが守られ、権限のない第三者がデータに関する情報を推測しにくくなります。 + AdvancedTitle: 詳細設定 + LabelEncryptionAlgorithm: 暗号化アルゴリズム + DefaultAlgorithmDesc: ほとんどの場合は、既定のアルゴリズム(${algorithm})をそのまま使用してください。この設定が必要になるのは、既存の Vault が別の形式で暗号化されている場合のみです。 + AlgorithmWarning: 暗号化アルゴリズムを変更すると、別のアルゴリズムで暗号化された既存データにはアクセスできなくなります。すべての端末で同じアルゴリズムを使うよう設定し、データにアクセスできる状態を維持してください。 + PassphraseValidationLine1: エンドツーエンド暗号化のパスフレーズは、実際に同期処理が開始されるまで検証されない点にご注意ください。これはデータを保護するためのセキュリティ対策です。 + PassphraseValidationLine2: そのため、サーバー情報を手動で設定する際は細心の注意を払ってください。誤ったパスフレーズを入力すると、サーバー上のデータが破損します。これは意図された動作ですので、あらかじめご理解ください。 + ButtonProceed: 進む + ButtonCancel: キャンセル + UseSetupURI: + Title: Setup URI を入力 + GuidanceLine1: サーバーのセットアップ時または別の端末で生成された Setup URI と、Vault のパスフレーズを入力してください。 + GuidanceLine2: コマンドパレットで「設定を新しい Setup URI としてコピー」を実行すると、新しい Setup URI を生成できます。 + LabelSetupURI: Setup URI + ValidInfo: Setup URI は有効で、使用できます。 + InvalidInfo: Setup URI が無効です。内容を確認して再試行してください。 + LabelPassphrase: Vault のパスフレーズ + PlaceholderPassphrase: Vault のパスフレーズを入力してください + ErrorPassphraseRequired: Vault のパスフレーズを入力してください。 + ErrorFailedToParse: Setup URI を解析できませんでした。URI とパスフレーズを確認してください。 + ButtonProceed: 設定をテストして続行 + ButtonCancel: キャンセル + ScanQRCode: + Title: QRコードをスキャン + Guidance: 既存の端末から設定を取り込むには、以下の手順に従ってください。 + Step1: この端末では、この Vault を開いたままにしてください。 + Step2: 元の端末で Obsidian を開きます。 + Step3: 元の端末でコマンドパレットから「設定を QR コードとして表示」を実行します。 + Step4: この端末でカメラアプリに切り替えるか QR コードスキャナーを使って、表示された QR コードを読み取ってください。 + ButtonClose: このダイアログを閉じる +"Please enable 'Compute revisions for chunks' in settings to use Garbage Collection.": Garbage Collection を使うには、設定で「Compute revisions for chunks」を有効にしてください。 +"Please disable 'Read chunks online' in settings to use Garbage Collection.": Garbage Collection を使うには、設定で「Read chunks online」を無効にしてください。 +"Setup URI dialog cancelled.": Setup URI ダイアログはキャンセルされました。 +"Please select 'Cancel' explicitly to cancel this operation.": この操作を中止するには、明示的に「キャンセル」を選択してください。 +"Failed to connect to remote for compaction.": リモートデータベースに接続できず、コンパクションを実行できませんでした。 +"Failed to connect to remote for compaction. ${reason}": リモートデータベースに接続できず、コンパクションを実行できませんでした。${reason} +"Compaction in progress on remote database...": リモートデータベースでコンパクションを実行中です... +"Compaction on remote database timed out.": リモートデータベースでのコンパクションがタイムアウトしました。 +"Compaction on remote database completed successfully.": リモートデータベースでのコンパクションが正常に完了しました。 +"Compaction on remote database failed.": リモートデータベースでのコンパクションに失敗しました。 +"Failed to start one-shot replication before Garbage Collection. Garbage Collection Cancelled.": Garbage Collection 前にワンショットレプリケーションを開始できませんでした。Garbage Collection はキャンセルされました。 +"Cancel Garbage Collection": Garbage Collection をキャンセル +"No connected device information found. Cancelling Garbage Collection.": 接続済みデバイスの情報が見つかりませんでした。Garbage Collection をキャンセルします。 +"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.": |- + 次の承認済みノードにはノード情報がありません: + - ${missingNodes} + + これは、それらがしばらく接続されていないか、古いバージョンのままになっていることを示しています。 + 可能であれば、まずすべてのデバイスを更新することをおすすめします。すでに使用していないデバイスがある場合は、リモートを一度ロックすることで承認済みノードをすべてクリアできます。 +"Ignore and Proceed": 無視して続行 +"Node Information Missing": ノード情報がありません +"Garbage Collection cancelled by user.": ユーザーによって Garbage Collection がキャンセルされました。 +"Proceeding with Garbage Collection, ignoring missing nodes.": 不足しているノードを無視して Garbage Collection を続行します。 +"Proceed Garbage Collection": Garbage Collection を続行 +"> [!INFO]- The connected devices have been detected as follows:\n${devices}": |- + > [!INFO]- 次の接続済みデバイスが検出されました: + ${devices} +"Device": デバイス +"Node ID": ノード ID +"Obsidian version": Obsidian バージョン +"Plug-in version": プラグインバージョン +"Progress": 進捗 +"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.": |- + 一部のデバイスで進捗値が異なっています(最大: ${maxProgress}、最小: ${minProgress})。 + これは一部のデバイスで同期が完了していない可能性を示しており、競合の原因になることがあります。続行する前に、すべてのデバイスが同期済みであることを確認することを強くおすすめします。 +"All devices have the same progress value (${progress}). Your devices seem to be synchronised. And be able to proceed with Garbage Collection.": すべてのデバイスで進捗値が同じです(${progress})。デバイスは同期されているようなので、Garbage Collection を続行できます。 +"Garbage Collection Confirmation": Garbage Collection の確認 +"Proceeding with Garbage Collection.": Garbage Collection を実行します。 +"Garbage Collection: Scanned ${scanned} / ~${docCount}": |- + Garbage Collection: ${scanned} / ~${docCount} をスキャン済み +"Garbage Collection: Scanning completed. Total chunks: ${totalChunks}, Used chunks: ${usedChunks}": |- + Garbage Collection: スキャン完了。総チャンク数: ${totalChunks}、使用中チャンク数: ${usedChunks} +"Garbage Collection: Found ${unusedChunks} unused chunks to delete.": |- + Garbage Collection: 削除対象の未使用チャンクが ${unusedChunks} 件見つかりました。 +"Garbage Collection completed. Deleted chunks: ${deletedChunks} / ${totalChunks}. Time taken: ${seconds} seconds.": |- + Garbage Collection が完了しました。削除したチャンク: ${deletedChunks} / ${totalChunks}。所要時間: ${seconds} 秒。 +"Failed to start replication after Garbage Collection.": Garbage Collection 後にレプリケーションを開始できませんでした。 +Should we keep folders that don't have any files inside?: 中にファイルがないフォルダーを保持しますか? +Should we only check for conflicts when a file is opened?: ファイルを開いたときのみ競合をチェックしますか? +Should we prompt you about conflicting files when a file is opened?: ファイルを開いたときに競合ファイルについて確認を求めますか? +Should we prompt you for every single merge, even if we can safely merge automatcially?: 自動的に安全にマージできる場合でも、すべてのマージについて確認を求めますか? +Show full banner: 完全なバナーを表示 +Show only notifications: 通知のみ表示 +Show status as icons only: ステータス表示をアイコンのみにする +Show status icon instead of file warnings banner: ファイル警告バナーの代わりにステータスアイコンを表示 +Show status inside the editor: ステータスをエディタ内に表示 +Show status on the status bar: ステータスバーに、ステータスを表示 +Show verbose log. Please enable if you report an issue.: エラー以外の詳細ログ項目も表示する。問題が発生した場合は有効にしてください。 +Starts synchronisation when a file is saved.: ファイルが保存されたときに同期を開始します。 +Stop reflecting database changes to storage files.: データベースの変更をストレージファイルに反映させない +Stop watching for file changes.: 監視の停止 +Suppress notification of hidden files change: 隠しファイルの変更通知を抑制 +Suspend database reflecting: データベース反映の一時停止 +Suspend file watching: 監視の一時停止 +Switch to IDB: IDB に切り替える +Switch to IndexedDB: IndexedDB に切り替える +Sync after merging file: ファイルがマージ(統合)された時に同期 +Sync automatically after merging files: ファイルのマージ後に自動的に同期 +Sync Mode: 同期モード +Sync on Editor Save: エディタでの保存時に、同期されます +Sync on File Open: ファイルを開いた時に同期 +Sync on Save: 保存時に同期 +Sync on Startup: 起動時同期 +Synchronising files: 同期するファイル +Syncing: 同期 +Target patterns: 対象パターン +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 Hash algorithm for chunk IDs: チャンクIDのハッシュアルゴリズム +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 total size of chunks that can be incubated within the document. Chunks exceeding this size will immediately graduate to independent chunks.: ドキュメント内で保持できるチャンクの最大合計サイズ。このサイズを超えたチャンクは即座に独立したチャンクに昇格します。 +This passphrase will not be copied to another device. It will be set to `Default` until you configure it again.: このパスフレーズは他のデバイスにコピーされません。再度設定するまで`Default`に設定されます。 +This will recreate chunks for all files. If there were missing chunks, this may fix the errors.: すべてのファイルについてチャンクを再作成します。欠損しているチャンクがあった場合、エラーが解消される可能性があります。 +Transfer Tweak: 転送の調整 +TweakMismatchResolve: + Action: + Dismiss: 無視 + UseConfigured: 設定済みの設定を使用 + UseMine: リモートデータベースの設定を更新 + UseMineAcceptIncompatible: リモートデータベースの設定を更新するがそのまま維持 + UseMineWithRebuild: リモートデータベースの設定を更新して再構築 + UseRemote: このデバイスに設定を適用 + UseRemoteAcceptIncompatible: このデバイスに設定を適用し、非互換性を無視 + UseRemoteWithRebuild: このデバイスに設定を適用し、再フェッチ + Message: + Main: |- + + リモートデータベースの設定は以下の通りです。これらの値は、このデバイスと少なくとも1回同期された他のデバイスによって設定されています。 + + これらの設定を使用する場合は、%{TweakMismatchResolve.Action.UseConfigured}を選択してください。 + このデバイスの設定を維持する場合は、%{TweakMismatchResolve.Action.Dismiss}を選択してください。 + + ${table} + + >[!TIP] + > すべての設定を同期したい場合は、この機能で最小限の設定を適用した後、`Sync settings via markdown`を使用してください。 + + ${additionalMessage} + MainTweakResolving: |- + 設定がリモートサーバーの設定と一致しません。 + + 以下の設定が一致している必要があります: + + ${table} + + 判断をお知らせください。 + + ${additionalMessage} + UseRemote: + WarningRebuildRecommended: |- + + >[!NOTICE] + > 一部の変更は互換性がありますが、追加のストレージと転送量を消費する可能性があります。再構築をお勧めします。ただし、再構築は現時点では実行されない場合がありますが、将来のメンテナンスで実装される可能性があります。 + > ***適用には時間と安定したネットワーク接続が必要です!*** + WarningRebuildRequired: |- + + >[!WARNING] + > 一部のリモート設定はこのデバイスのローカルデータベースと互換性がありません。ローカルデータベースの再構築が必要です。 + > ***適用には時間と安定したネットワーク接続が必要です!*** + WarningIncompatibleRebuildRecommended: |- + + >[!NOTICE] + > ローカルデータベースとリモートデータベースの非互換性を引き起こす値の違いが検出されました。 + > 一部の変更は互換性がありますが、追加のストレージと転送量を消費する可能性があります。再構築をお勧めします。ただし、再構築は現時点では実行されない場合がありますが、将来のメンテナンスで実装される可能性があります。 + > 再構築を行う場合は数分以上かかります。**今実行しても安全か確認してください。** + WarningIncompatibleRebuildRequired: |- + + >[!WARNING] + > ローカルデータベースとリモートデータベースの非互換性を引き起こす値の違いが検出されました。 + > ローカルまたはリモートの再構築が必要です。どちらも数分以上かかります。**今実行しても安全か確認してください。** + Table: + _value: |+ + | 値の名前 | このデバイス | リモート | + |: --- |: ---- :|: ---- :| + ${rows} + + Row: "| ${name} | ${self} | ${remote} |" + Title: + _value: 設定の不一致が検出されました + TweakResolving: 設定の不一致が検出されました + UseRemoteConfig: リモート設定を使用 +Unique name between all synchronized devices. To edit this setting, please disable customization sync once.: 同期するすべての端末間で重複しない(一意の)名前。この設定を変更する場合、カスタマイズ同期を無効にしてください。 +Use a custom passphrase: カスタムパスフレーズを使う +Use Custom HTTP Handler: カスタムHTTPハンドラーの利用 +Use dynamic iteration count: 動的な繰り返し回数 +Use Segmented-splitter: セグメント分割を使用 +Use splitting-limit-capped chunk splitter: 分割制限付きチャンク分割を使用 +Use the trash bin: ゴミ箱を使用 +Use timeouts instead of heartbeats: ハートビートの代わりにタイムアウトを使用 +username: ユーザー名 +Username: ユーザー名 +Verbose Log: エラー以外のログ項目 +Verify all: すべて検証 +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.: 警告!これはパフォーマンスに重大な影響を与えます。また、ログはデフォルト名では同期されません。ログには機密情報が含まれることが多いため、注意してください。 +We cannot change the device name while this feature is enabled. Please disable this feature to change the device name.: この機能が有効な間はデバイス名を変更できません。変更するにはこの機能を無効にしてください。 +When you save a file in the editor, start a sync automatically: エディタでファイルを保存すると、自動的に同期を開始します +Write credentials in the file: 認証情報のファイル内保存 +Write logs into the file: ファイルにログを記録 +xxhash32 (Fast but less collision resistance): xxhash32 (高速ですが衝突耐性は低め) +xxhash64 (Fastest): xxhash64 (最速) +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.: + 最新版以外のすべてのリビジョンを破棄して、使用容量を削減します。実行には、リモートサーバーとローカルクライアントの両方に同程度の空き容量が必要です。 +Rerun Onboarding Wizard: オンボーディングウィザードを再実行 +Rerun the onboarding wizard to set up Self-hosted LiveSync again.: オンボーディングウィザードを再実行して、Self-hosted LiveSync をもう一度設定します。 +Rerun Wizard: ウィザードを再実行 +Run Doctor: 診断を実行 +Scan for Broken files: 破損ファイルをスキャン +Prepare the 'report' to create an issue: Issue 作成用の「レポート」を準備 +Copy Report to clipboard: レポートをクリップボードにコピー +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.: + データベース使用状況を分析し、自分で診断できるよう TSV レポートを生成します。生成したレポートは任意のスプレッドシートに貼り付けて確認できます。 +Reset notification threshold and check the remote database usage: 通知しきい値をリセットしてリモートデータベース使用量を確認 +Reset the remote storage size threshold and check the remote storage size again.: リモートストレージ容量のしきい値をリセットし、リモートストレージ容量を再確認します。 +Scram Switches: 緊急対応スイッチ +Minimum interval for syncing: 同期間隔の最小値 +The minimum interval for automatic synchronisation on event.: イベント発生時の自動同期における最小間隔です。 +"Welcome to Self-hosted LiveSync": "Self-hosted LiveSync へようこそ" +"We will now guide you through a few questions to simplify the synchronisation setup.": "これからいくつかの質問に沿って、同期設定を簡単に進めます。" +"First, please select the option that best describes your current situation.": "まず、現在の状況に最も近い項目を選択してください。" +"I am setting this up for the first time": "はじめて設定します" +"(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.": "(この端末を最初の同期端末として設定する場合に選択してください。)LiveSync を初めて利用し、最初から設定したい場合に適しています。" +"I am adding a device to an existing synchronisation setup": "既存の同期構成に端末を追加します" +"(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.": "(別の PC やスマートフォンですでに同期を利用している場合に選択してください。)この端末を既存の LiveSync 構成に追加する場合に適しています。" +"Yes, I want to set up a new synchronisation": "はい、新しい同期を設定します" +"Yes, I want to add this device to my existing synchronisation": "はい、この端末を既存の同期に追加します" +"No, please take me back": "いいえ、前に戻ります" +"Device Setup Method": "端末の設定方法" +"You are adding this device to an existing synchronisation setup.": "この端末を既存の同期構成に追加しようとしています。" +"Please select a method to import the settings from another device.": "別の端末から設定を取り込む方法を選択してください。" +"Use a Setup URI (Recommended)": "Setup URI を使う(推奨)" +"Paste the Setup URI generated from one of your active devices.": "稼働中の端末で生成した Setup URI を貼り付けてください。" +"Scan a QR Code (Recommended for mobile)": "QR コードをスキャンする(モバイル推奨)" +"Scan the QR code displayed on an active device using this device's camera.": "稼働中の端末に表示された QR コードを、この端末のカメラで読み取ってください。" +"Enter the server information manually": "サーバー情報を手動で入力する" +"Configure the same server information as your other devices again, manually, very advanced users only.": "他の端末と同じサーバー情報を手動で再入力します。上級者向けの方法です。" +"Proceed with Setup URI": "Setup URI で続行" +"I know my server details, let me enter them": "サーバー情報を把握しているので、自分で入力します" +"Please select an option to proceed": "続行するには項目を選択してください" +"Connection Method": "接続方法" +"We will now proceed with the server configuration.": "次にサーバー設定を進めます。" +"How would you like to configure the connection to your server?": "サーバー接続をどのように設定しますか?" +"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.": "Setup URI は、サーバーアドレスと認証情報を含む 1 本の文字列です。サーバーのインストールスクリプトで生成された URI がある場合は、それを使うと簡単かつ安全に設定できます。" +"This is an advanced option for users who do not have a URI or who wish to configure detailed settings.": "URI を持っていない場合や、詳細設定を手動で行いたいユーザー向けの上級者オプションです。" +"Enter Server Information": "サーバー情報の入力" +"Please select the type of server to which you are connecting.": "接続するサーバーの種類を選択してください。" +"Continue to CouchDB setup": "CouchDB 設定へ進む" +"Continue to S3/MinIO/R2 setup": "S3/MinIO/R2 設定へ進む" +"Continue to Peer-to-Peer only setup": "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.": "この設計に最も適した同期方式です。すべての機能が利用できます。CouchDB インスタンスを事前に構成しておく必要があります。" +"S3/MinIO/R2 Object Storage": "S3/MinIO/R2 オブジェクトストレージ" +"Synchronisation utilising journal files. You must have set up an S3/MinIO/R2 compatible object storage.": "ジャーナルファイルを利用する同期方式です。S3/MinIO/R2 互換のオブジェクトストレージを事前に構成しておく必要があります。" +"Peer-to-Peer only": "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.": "この機能では端末同士を直接同期できます。サーバーは不要ですが、同期を行うには両端末が同時にオンラインである必要があり、一部機能は制限されます。インターネット接続はシグナリング(ピア検出)にのみ必要で、データ転送自体には使われません。" diff --git a/src/common/messagesYAML/ko.yaml b/src/common/messagesYAML/ko.yaml new file mode 100644 index 00000000..3167321f --- /dev/null +++ b/src/common/messagesYAML/ko.yaml @@ -0,0 +1,1211 @@ +(Active): (활성) +(BETA) Always overwrite with a newer file: (베타) 항상 새로운 파일로 덮어쓰기 +(Beta) Use ignore files: (베타) 제외 규칙 파일 사용 +(Days passed, 0 to disable automatic-deletion): (지난 일수, 0으로 설정하면 자동 삭제 비활성화) +(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.: + "(예: 청크를 원격에서 읽음) 이 옵션을 활성화하면, LiveSync는 청크를 로컬에 복제하지 않고 원격에서 직접 읽습니다. 커스텀 청크 + 크기를 키우는 것을 권장합니다." +(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) 이 값이 설정되면, 이보다 큰 로컬 및 원격 파일의 변경 사항은 건너뜁니다. 파일이 다시 작아지면 더 새로운 파일이 사용됩니다. +(Mega chars): (메가 문자) +(Not recommended) If set, credentials will be stored in the file.: (권장하지 않음) 설정한 경우 자격 증명이 파일에 저장됩니다. +(Obsolete) Use an old adapter for compatibility: (사용 중단) 호환성을 위해 이전 어댑터 사용 +(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.: (정규식) 설정하면 이 패턴과 일치하는 로컬 및 원격 파일 변경은 모두 건너뜁니다. +Access Key: 액세스 키 +Activate: 활성화 +Add default patterns: 기본 패턴 추가 +Add new connection: 연결 추가 +Always prompt merge conflicts: 항상 병합 충돌 알림 +Apply Latest Change if Conflicting: 충돌 시 최신 변경 사항 적용 +Apply preset configuration: 프리셋 구성 적용 +Ask a passphrase at every launch: 시작할 때마다 암호문구 묻기 +Automatically Sync all files when opening Obsidian.: Obsidian을 열 때 모든 파일을 자동으로 동기화합니다. +Back: 뒤로 +Back to non-configured: 미구성 상태로 되돌리기 +Batch database update: 일괄 데이터베이스 업데이트 +Batch limit: 일괄 제한 +Batch size: 일괄 크기 +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.: + v0.17.16 이전에는 로컬 데이터베이스에 이전 어댑터를 사용했습니다. 이제는 새로운 어댑터를 권장합니다. 하지만 로컬 데이터베이스 + 재구축이 필요합니다. 충분한 시간이 있을 때 이 토글을 비활성화해 주세요. 활성화된 상태로 두면 원격 데이터베이스에서 가져올 때도 이를 + 비활성화하라는 메시지가 나타납니다. +Bucket Name: 버킷 이름 +Cancel: 취소 +Check and convert non-path-obfuscated files: 경로 난독화되지 않은 파일 검사 및 변환 +Check for documents that have not been converted to path-obfuscated IDs and convert them if necessary.: 아직 경로 난독화 ID로 변환되지 않은 문서를 확인하고 필요하면 변환합니다. +cmdConfigSync: + showCustomizationSync: 사용자 설정 동기화 표시 +Comma separated `.gitignore, .dockerignore`: 쉼표로 구분된 `.gitignore, .dockerignore` +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 (Database structure): 호환성 (데이터베이스 구조) +Compatibility (Internal API Usage): 호환성 (내부 API 사용) +Compatibility (Metadata): 호환성 (메타데이터) +Compatibility (Remote Database): 호환성 (원격 데이터베이스) +Compatibility (Trouble addressed): 호환성 (문제 대응) +Compute revisions for chunks: 청크에 대한 리비전 계산 +Configuration Encryption: 구성 암호화 +Configure: 설정 +Configure And Change Remote: 원격 구성 및 변경 +Configure E2EE: E2EE 구성 +Configure Remote: 원격 구성 +Copy: 복사 +CouchDB Connection Tweak: CouchDB 연결 조정 +Cross-platform: 크로스 플랫폼 +"Current adapter: {adapter}": "현재 어댑터: {adapter}" +Customization Sync: 사용자 지정 동기화 +Customization Sync (Beta3): 사용자 지정 동기화 (Beta3) +Data Compression: 데이터 압축 +Database Adapter: 데이터베이스 어댑터 +Database Name: 데이터베이스 이름 +Database suffix: 데이터베이스 접미사 +Default: 기본값 +Delay conflict resolution of inactive files: 비활성 파일의 충돌 해결 지연 +Delay merge conflict prompt for inactive files.: 비활성 파일의 병합 충돌 프롬프트 지연. +Delete: 삭제 +Delete all customization sync data: 모든 사용자 정의 동기화 데이터 삭제 +Delete all data on the remote server.: 원격 서버의 모든 데이터를 삭제합니다. +Delete local database to reset or uninstall Self-hosted LiveSync: Self-hosted LiveSync를 초기화하거나 제거하기 위해 로컬 데이터베이스를 삭제 +Delete old metadata of deleted files on start-up: 시작 시 삭제된 파일의 오래된 메타데이터 삭제 +Delete Remote Configuration: 원격 구성 삭제 +Delete remote configuration '{name}'?: "'{name}' 원격 구성을 삭제할까요?" +desktop: 데스크톱 +Developer: 개발자 +Device name: 기기 이름 +dialog: + yourLanguageAvailable: + _value: >- + Self-hosted LiveSync에서 귀하의 언어로 번역을 제공하므로 %{Display language} 설정이 활성화되었습니다. + + + 참고: 모든 메시지가 번역되지는 않습니다. 귀하의 기여를 기다리고 있습니다! + + 참고 2: 이슈를 생성하는 경우 **%{lang-def}로 되돌린 후** 스크린샷, 메시지, 로그를 가져와 주세요. 이는 설정 대화 + 상자에서 할 수 있습니다. + + 간편하게 사용하실 수 있었으면 좋겠습니다! + btnRevertToDefault: "%{lang-def} 유지" + Title: " 번역을 사용할 수 있습니다!" +Disables all synchronization and restart.: 모든 동기화를 비활성화하고 재시작합니다. +Disables logging, only shows notifications. Please disable if you report an issue.: 로깅을 비활성화하고 알림만 표시합니다. 문제를 신고하는 경우 비활성화해 주세요. +Display Language: 표시 언어 +Display name: 표시 이름 +Do not check configuration mismatch before replication: 복제 전 구성 불일치 확인 안 함 +Do not keep metadata of deleted files.: 삭제된 파일의 메타데이터를 보관하지 않습니다. +Do not split chunks in the background: 백그라운드에서 청크 분할 안 함 +Do not use internal API: 내부 API 사용 안 함 +Doctor: + Button: + DismissThisVersion: 아니요, 다음 릴리스까지 다시 묻지 않음 + Fix: 수정 + FixButNoRebuild: 수정하지만 재구축하지 않음 + No: 아니요 + Skip: 그대로 두기 + Yes: 예 + Dialogue: + Main: |- + 안녕하세요! ${activateReason} 로 인해 구성 진단 마법사가 활성화되었습니다! + 그리고 일부 구성이 잠재적인 문제로 감지되었습니다. + 안심하세요. 하나씩 해결해 봅시다. + + 대상 항목은 다음과 같습니다. + + ${issues} + + 시작하시겠습니까? + MainFix: |- + **구성 이름:** `${name}` + **현재 값:** `${current}`, **이상적인 값:** `${ideal}` + **권장 수준:** ${level} + **왜 이것이 감지되었나요?** + ${reason} + + + ${note} + + 이상적인 값으로 수정하시겠습니까? + Title: Self-hosted LiveSync 구성 진단 마법사 + TitleAlmostDone: 거의 완료되었습니다! + TitleFix: 문제 해결 ${current}/${total} + Level: + Must: 필수 + Necessary: 필수 + Optional: 선택사항 + Recommended: 권장 + Message: + NoIssues: 문제가 감지되지 않았습니다! + RebuildLocalRequired: 주의! 이를 적용하려면 로컬 데이터베이스 재구축이 필요합니다! + RebuildRequired: 주의! 이를 적용하려면 재구축이 필요합니다! + SomeSkipped: 일부 문제를 그대로 두었습니다. 다음 시작 시 다시 질문할까요? +Duplicate: 복제 +Duplicate remote: 원격 구성 복제 +E2EE Configuration: E2EE 구성 +Edge case addressing (Behaviour): 특수 상황 처리 (동작) +Edge case addressing (Database): 특수 상황 처리 (데이터베이스) +Edge case addressing (Processing): 특수 상황 처리 (처리) +Emergency restart: 긴급 재시작 +Enable advanced features: 고급 기능 활성화 +Enable customization sync: 사용자 설정 동기화 활성화 +Enable Developers' Debug Tools.: 개발자 디버그 도구 활성화 +Enable edge case treatment features: 특수 사례 처리 기능 활성화 +Enable poweruser features: 파워 유저 기능 활성화 +Enable this if your Object Storage doesn't support CORS: 객체 스토리지가 CORS를 지원하지 않는 경우 활성화하세요 +Enable this option to automatically apply the most recent change to documents even when it conflicts: 이 옵션을 활성화하면 충돌이 있어도 문서에 가장 최근 변경 사항을 자동으로 적용합니다 +Encrypt contents on the remote database. If you use the plugin's synchronization feature, enabling this is recommended.: 원격 데이터베이스의 내용을 암호화합니다. 플러그인의 동기화 기능을 사용하는 경우 활성화를 권장합니다. +Encrypting sensitive configuration items: 민감한 구성 항목 암호화 +Encryption phassphrase. If changed, you should overwrite the server's database with the new (encrypted) files.: 패스프레이즈는 암호화에 사용되는 긴 암호 문구입니다. 변경한 경우, 암호화된 새 파일로 서버의 데이터베이스를 덮어써야 합니다. +End-to-End Encryption: 종단간 암호화 +Endpoint URL: 엔드포인트 URL +Enhance chunk size: 청크 크기 향상 +Export: 내보내기 +Fetch: 가져오기 +Fetch chunks on demand: 필요 시 청크 원격 가져오기 +Fetch database with previous behaviour: 이전 동작으로 데이터베이스 가져오기 +Fetch remote settings: 원격 설정 가져오기 +File to resolve conflict: 충돌을 해결할 파일 +Filename: 파일명 +Flag and restart: 표시 후 재시작 +Forces the file to be synced when opened.: 파일을 열 때 강제로 동기화합니다. +Fresh Start Wipe: 새로 시작 지우기 +Garbage Collection V3 (Beta): 가비지 컬렉션 V3 (Beta) +Handle files as Case-Sensitive: 파일을 대소문자 구분으로 처리 +Hidden Files: 숨김 파일 +How to display network errors when the sync server is unreachable.: 동기화 서버에 연결할 수 없을 때 네트워크 오류를 어떻게 표시할지 설정합니다. +If disabled(toggled), chunks will be split on the UI thread (Previous behaviour).: 비활성화(토글)되면 청크는 UI 스레드에서 분할됩니다 (이전 동작). +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.: + 활성화하면 파일별 효율적인 사용자 설정 동기화가 사용됩니다. 이를 활성화할 때 소규모 데이터 구조 전환이 필요합니다. 모든 기기를 + v0.23.18로 업데이트해야 합니다. 이를 활성화하면 이전 버전과의 호환성이 사라집니다. +If enabled, chunks will be split into no more than 100 items. However, dedupe is slightly weaker.: 활성화하면 청크는 최대 100개 항목으로 분할됩니다. 하지만 중복 제거 기능이 약간 약해집니다. +If enabled, newly created chunks are temporarily kept within the document, and graduated to become independent chunks once stabilised.: 활성화하면 새로 생성된 변경 기록(청크)은 문서 안에 임시로 보관되며, 일정 조건을 만족하면 자동으로 문서 밖으로 분리되어 저장됩니다. +If enabled, the ⛔ icon will be shown inside the status instead of the file warnings banner. No details will be shown.: 활성화하면 파일 경고 배너 대신 상태 영역에 ⛔ 아이콘만 표시됩니다. 자세한 내용은 표시되지 않습니다. +If enabled, the file under 1kb will be processed in the UI thread.: 활성화하면 1kb 미만의 파일은 UI 스레드에서 처리됩니다. +If enabled, the notification of hidden files change will be suppressed.: 활성화하면 숨겨진 파일 변경 알림이 억제됩니다. +If this enabled, all chunks will be stored with the revision made from its content. (Previous behaviour): 이 옵션이 활성화되면 모든 청크는 콘텐츠에서 생성된 리비전과 함께 저장됩니다. (이전 동작) +If this enabled, All files are handled as case-Sensitive (Previous behaviour).: 이 옵션이 활성화되면 모든 파일이 대소문자를 구분하여 처리됩니다 (이전 동작). +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 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.: + 이 옵션이 활성화되면 PouchDB는 연결을 더이상 무한히 열어두지 않고 60초 동안 유지합니다. 그 시간 내에 변경 사항이 없으면 소켓을 + 닫고 다시 엽니다. 프록시가 요청 지속 시간을 제한할 때 유용하지만 리소스 사용량이 증가할 수 있습니다. +Ignore files: 제외 규칙 파일 +Ignore patterns: 무시 패턴 +Import connection: 연결 가져오기 +Incubate Chunks in Document: 문서 내 변경 기록 임시 보관 +Initialise all journal history, On the next sync, every item will be received and sent.: 모든 저널 기록을 초기화합니다. 다음 동기화 때 모든 항목을 다시 받고 다시 보냅니다. +Interval (sec): 간격 (초) +K: + exp: 실험 기능 + long_p2p_sync: "%{title_p2p_sync} (%{exp})" + P2P: "%{Peer}-to-%{Peer}" + Peer: 피어 + ScanCustomization: 사용자 설정 검색 + short_p2p_sync: P2P 동기화 (%{exp}) + title_p2p_sync: 피어 투 피어(P2P) 동기화 +Keep empty folder: 빈 폴더 유지 +lang_def: Default +lang-de: Deutsche +lang-def: "%{lang_def}" +lang-es: Español +lang-fr: Français +lang-ja: 日本語 +lang-ko: 한국어 +lang-ru: Русский +lang-zh: 简体中文 +lang-zh-tw: 繁體中文 +Later: 나중에 +"Limit: {datetime} ({timestamp})": "제한: {datetime} ({timestamp})" +LiveSync could not handle multiple vaults which have same name without different prefix, This should be automatically configured.: LiveSync는 서로 다른 접두사 없이 동일한 이름을 가진 여러 볼트를 처리할 수 없습니다. 이는 자동으로 구성되어야 합니다. +liveSyncReplicator: + beforeLiveSync: LiveSync 전에 OneShot을 먼저 시작합니다... + cantReplicateLowerValue: 더 낮은 값으로 복제할 수 없습니다. + checkingLastSyncPoint: 마지막으로 동기화된 지점을 찾고 있습니다. + couldNotConnectTo: |- + ${uri}에 연결할 수 없습니다: ${name} + (${db}) + couldNotConnectToRemoteDb: "원격 데이터베이스에 연결할 수 없습니다: ${d}" + couldNotConnectToServer: 서버에 연결할 수 없습니다. + couldNotConnectToURI: "${uri}에 연결할 수 없습니다: ${dbRet}" + couldNotMarkResolveRemoteDb: 원격 데이터베이스를 해결됨으로 표시할 수 없습니다. + liveSyncBegin: LiveSync 시작... + lockRemoteDb: 데이터 손상을 방지하기 위해 원격 데이터베이스를 잠급니다 + markDeviceResolved: 이 기기를 '해결됨'으로 표시합니다. + oneShotSyncBegin: OneShot 동기화 시작... (${syncMode}) + remoteDbCorrupted: 원격 데이터베이스가 더 최신이거나 손상되었습니다. 최신 버전의 self-hosted-livesync가 설치되어 있는지 확인하세요 + remoteDbCreatedOrConnected: 원격 데이터베이스가 생성되거나 연결되었습니다 + remoteDbDestroyed: 원격 데이터베이스가 삭제되었습니다 + remoteDbDestroyError: "원격 데이터베이스 삭제 중 오류가 발생했습니다:" + remoteDbMarkedResolved: 원격 데이터베이스가 해결됨으로 표시되었습니다. + replicationClosed: 복제가 종료되었습니다 + replicationInProgress: 복제가 이미 진행 중입니다 + retryLowerBatchSize: "더 낮은 일괄 크기로 재시도: ${batch_size}/${batches_limit}" + unlockRemoteDb: 데이터 손상을 방지하기 위해 원격 데이터베이스를 잠금 해제합니다 +liveSyncSetting: + errorNoSuchSettingItem: "해당 설정 항목이 없습니다: ${key}" + originalValue: "원본: ${value}" + valueShouldBeInRange: 값은 ${min} < 값 < ${max} 범위에 있어야 합니다 +liveSyncSettings: + btnApply: 적용 +Local Database Tweak: 로컬 데이터베이스 조정 +Lock: 잠금 +Lock Server: 서버 잠금 +Lock the remote server to prevent synchronization with other devices.: 다른 기기와의 동기화를 방지하기 위해 원격 서버를 잠급니다. +logPane: + autoScroll: 자동 스크롤 + logWindowOpened: 로그 창이 열렸습니다 + pause: 일시 중단 + title: Self-hosted LiveSync 로그 + wrap: 줄 바꿈 +Maximum delay for batch database updating: 일괄 데이터베이스 업데이트 최대 지연 +Maximum file size: 최대 파일 크기 +Maximum Incubating Chunk Size: 임시 보관 변경 기록의 최대 크기 +Maximum Incubating Chunks: 임시 보관 중인 변경 기록 최대 수 +Maximum Incubation Period: 변경 기록 임시 보관 최대 시간 +MB (0 to disable).: MB (0으로 설정하면 비활성화). +Memory cache: 메모리 캐시 +Memory cache size (by total characters): 메모리 캐시 크기 (총 문자 수) +Memory cache size (by total items): 메모리 캐시 크기 (총 항목 수) +Merge: 병합 +Minimum delay for batch database updating: 일괄 데이터베이스 업데이트 최소 지연 +moduleCheckRemoteSize: + logCheckingStorageSizes: 스토리지 크기 확인 중 + logCurrentStorageSize: "원격 스토리지 크기: ${measuredSize}" + logExceededWarning: "원격 스토리지 크기: ${measuredSize}가 ${notifySize}를 초과했습니다" + logThresholdEnlarged: 임계값이 ${size}MB로 증가되었습니다 + msgConfirmRebuild: 시간이 꽤 오래 걸릴 수 있습니다. 정말 지금 모든 것을 재구축하시겠습니까? + msgDatabaseGrowing: |- + **데이터베이스 용량이 점점 커지고 있습니다!** 하지만 걱정하지 마세요. 아직 원격 스토리지 공간이 완전히 부족해진 건 아닙니다. + + | 측정된 크기 | 설정된 한도 | + | --- | --- | + | ${estimatedSize} | ${maxSize} | + + > [!MORE]- + > 오랜 기간 사용했다면 참조되지 않는 청크, 즉 '쓰레기 데이터'가 쌓였을 수 있습니다. 이 경우 전체 재구성을 권장합니다. 용량이 훨씬 줄어들 수 있습니다. + > + > 단순히 볼트 자체 용량이 커지고 있는 것이라면, 먼저 파일을 정리한 후 전체를 재구성하는 것이 좋습니다. Self-hosted LiveSync는 처리 속도를 위해 삭제해도 실제 데이터를 바로 지우지 않습니다. 이 내용은 [기술 문서](https://github.com/vrtmrz/obsidian-livesync/blob/main/docs/tech_info.md)에 간략히 정리되어 있습니다. + > + > 용량 증가가 괜찮다면 알림 임계치를 100MB 단위로 높일 수 있습니다. 직접 서버를 운영하는 경우에 적합한 방법입니다. 다만, 가끔은 전체 재구성을 해주는 것이 바람직합니다. + + > [!WARNING] + > 전체 재구성을 실행할 경우, 모든 기기가 반드시 동기화되어 있어야 합니다. 플러그인이 최대한 병합하려고 시도하긴 하지만 완전하지 않을 수 있습니다. + msgSetDBCapacity: | + **원격 스토리지 공간이 부족해지기 전에 미리 조치할 수 있도록** 데이터베이스 용량 경고를 설정할 수 있습니다. + 이 기능을 활성화하시겠습니까? + + > [!MORE]- + > - 0: 스토리지 용량에 대한 경고 없음 + > 자체 서버를 사용하는 등 여유 공간이 충분한 경우에 권장됩니다. 스토리지 용량을 직접 확인하고 수동으로 재구성할 수 있습니다. + > - 800: 원격 스토리지 용량이 800MB를 초과하면 경고 + > 1GB 제한이 있는 fly.io나 IBM Cloudant 사용 시 권장됩니다. + > - 2000: 원격 스토리지 용량이 2GB를 초과하면 경고 + + 설정한 용량 한도에 도달하면, 단계적으로 경고 한도를 늘릴지 여부를 묻게 됩니다. + option2GB: 2GB (표준) + option800MB: 800MB (Cloudant, fly.io) + optionAskMeLater: 나중에 물어보기 + optionDismiss: 무시 + optionIncreaseLimit: ${newMax}MB로 증가 + optionNoWarn: 아니요, 경고하지 마세요 + optionRebuildAll: 지금 모든 것 재구축 + titleDatabaseSizeLimitExceeded: 원격 스토리지 크기가 제한을 초과했습니다 + titleDatabaseSizeNotify: 데이터베이스 크기 알림 설정 +moduleInputUIObsidian: + defaultTitleConfirmation: 확인 + defaultTitleSelect: 선택 + optionNo: 아니요 + optionYes: 예 +moduleLiveSyncMain: + logAdditionalSafetyScan: 추가 안전 검사 중... + logLoadingPlugin: 플러그인 로딩 중... + logPluginInitCancelled: 모듈에 의해 플러그인 초기화가 취소되었습니다 + logPluginVersion: Self-hosted LiveSync v${manifestVersion} ${packageVersion} + logReadChangelog: LiveSync가 업데이트되었습니다. 변경사항을 읽어보세요! + logSafetyScanCompleted: 추가 안전 검사가 완료되었습니다 + logSafetyScanFailed: 모듈에서 추가 안전 검사가 실패했습니다 + logUnloadingPlugin: 플러그인 언로딩 중... + logVersionUpdate: LiveSync가 업데이트되었습니다. 호환성 문제가 있는 업데이트의 경우 모든 자동 동기화가 일시적으로 + 비활성화되었습니다. 활성화하기 전에 모든 기기가 최신 상태인지 확인하세요. + msgScramEnabled: >- + Self-hosted LiveSync가 일부 이벤트를 무시하도록 설정되어 있습니다. 이 설정이 맞습니까? + + + | 유형 | 상태 | 설명 | + + |:---:|:---:|---| + + | 스토리지 이벤트 | ${fileWatchingStatus} | 모든 수정 사항이 무시됩니다 | + + | 데이터베이스 이벤트 | ${parseReplicationStatus} | 모든 동기화 변경이 지연됩니다 | + + + 이벤트 감지를 다시 활성화하고 Obsidian을 재시작하시겠습니까? + + + > [!DETAILS]- + + > 이러한 설정은 플러그인이 재구성 또는 데이터 가져오기 중에 자동으로 설정한 것입니다. 프로세스가 비정상적으로 종료되면 이 상태가 + 의도치 않게 유지될 수 있습니다. + + > 상태가 확실하지 않다면 이 과정을 다시 실행해 보세요. 재시작 전에 반드시 볼트를 백업해 주세요. + optionKeepLiveSyncDisabled: LiveSync 비활성화 유지 + optionResumeAndRestart: 재개 후 Obsidian 재시작 + titleScramEnabled: Scram 활성화됨 +moduleLocalDatabase: + logWaitingForReady: 준비 대기 중... +moduleLog: + showLog: 로그 표시 +moduleMigration: + docUri: https://github.com/vrtmrz/obsidian-livesync/blob/main/README.md#how-to-use + logBulkSendCorrupted: 청크 일괄 전송이 활성화되었지만, 이 기능에 문제가 있었습니다. 불편을 드려 죄송합니다. 자동으로 비활성화되었습니다. + logFetchRemoteTweakFailed: 원격 조정 값을 가져오는데 실패했습니다 + logLocalDatabaseNotReady: 문제가 발생했습니다! 로컬 데이터베이스가 준비되지 않았습니다 + logMigratedSameBehaviour: 이전과 같은 방식으로 동작하도록 db:${current}로 데이터 구조 전환이 완료되었습니다 + logMigrationFailed: ${old}에서 ${current}로의 데이터 구조 전환이 실패했거나 중단되었습니다 + logRedflag2CreationFail: redflag2 생성에 실패했습니다 + logRemoteTweakUnavailable: 원격 조정 값을 가져올 수 없습니다 + logSetupCancelled: 설정이 취소되었습니다. Self-hosted LiveSync가 설정을 기다리고 있습니다! + msgFetchRemoteAgain: >- + 이미 알고 계시겠지만, Self-hosted LiveSync의 기본 동작 방식과 데이터베이스 구조가 변경되었습니다. + + + 다행히도 여러분의 노력 덕분에 원격 데이터베이스는 이미 성공적으로 데이터 구조 전환이 완료된 것으로 보입니다. 축하드립니다! + + + 하지만 아직 일부 추가 작업이 필요합니다. 이 기기의 설정이 원격 데이터베이스와 호환되지 않으므로, 원격 데이터를 다시 가져와야 합니다. + 지금 원격 데이터베이스를 다시 가져오시겠습니까? + + + ___참고: 설정이 변경되고 데이터베이스를 다시 불러오기 전까지는 동기화가 불가능합니다.___ + + ___참고2: 청크는 변경이 불가능한 구조이므로, 메타데이터와 차이점만 가져올 수 있습니다.___ + msgInitialSetup: >- + 이 기기는 **아직 초기 설정이 완료되지 않았습니다**. 지금부터 설정 과정을 안내해 드리겠습니다. + + + 모든 대화 내용은 클립보드에 복사할 수 있습니다. 나중에 참고하려면 Obsidian 노트에 붙여넣거나 번역 도구를 활용해 번역하셔도 + 됩니다. + + + 먼저, **Setup URI**를 가지고 계신가요? + + + 참고: Setup URI가 무엇인지 잘 모르시겠다면 [문서](${URI_DOC})를 참고해 주세요. + msgRecommendSetupUri: |- + Setup URI를 생성해 사용하는 것을 강력히 권장합니다. + Setup URI가 무엇인지 잘 모르시겠다면 [문서](${URI_DOC})를 참고해 주세요. 중요한 내용이니 꼭 확인하시기 바랍니다. + + 직접 수동 설정을 진행하시겠습니까? + msgSinceV02321: >- + v0.23.21부터 Self-hosted LiveSync의 기본 동작 방식과 데이터베이스 구조가 변경되었습니다. 주요 변경사항은 다음과 + 같습니다: + + + 1. **파일명 대소문자 구분 처리** + 이제 파일명은 대소문자를 구분하지 않고 처리됩니다. 이는 파일명 구분을 제대로 지원하지 않는 Linux 및 iOS를 제외한 대부분의 플랫폼에서 유리한 변화입니다. + (Linux나 iOS에서는 대소문자만 다른 파일이 존재할 경우 경고가 표시됩니다) + + 2. **청크 리비전 관리 방식 개선** + 청크는 변경 불가능한(immutable) 구조로 고정되며, 이를 통해 리비전 처리가 안정화되고 파일 저장 성능이 향상됩니다. + + ___단, 위 기능을 활성화하려면 원격 및 로컬 데이터베이스를 모두 재구성해야 합니다. 이 과정은 수 분이 소요되므로 여유가 있을 때 + 실행하시는 것을 권장합니다.___ + + + - 기존 방식대로 유지하려면 `${KEEP}`을 선택해 이 과정을 건너뛸 수 있습니다. + + - 시간이 부족하다면 `${DISMISS}`를 눌러주시면 나중에 다시 안내드리겠습니다. + + - 이미 다른 기기에서 데이터베이스를 재구성하셨다면 `${DISMISS}`를 선택한 뒤 다시 동기화해 보세요. 차이점이 감지되면 다시 + 안내드리겠습니다. + optionAdjustRemote: 원격에 맞추기 + optionDecideLater: 나중에 결정하기 + optionEnableBoth: 둘 다 활성화 + optionEnableFilenameCaseInsensitive: "#1만 활성화" + optionEnableFixedRevisionForChunks: "#2만 활성화" + optionHaveSetupUri: 예, 있습니다 + optionKeepPreviousBehaviour: 이전 동작 유지 + optionManualSetup: 모든 것을 수동으로 설정 + optionNoAskAgain: 아니요 (나중에 다시 물어보기) + optionNoSetupUri: 아니요, 없습니다 + optionRemindNextLaunch: 다음 시작 시 알림 + optionSetupViaP2P: "%{short_p2p_sync}를 사용하여 설정" + optionSetupWizard: 설정 마법사로 안내 + optionYesFetchAgain: 예 (다시 가져오기) + titleCaseSensitivity: 대소문자 구분 + titleRecommendSetupUri: Setup URI 사용 권장 + titleWelcome: Self-hosted LiveSync에 오신 것을 환영합니다 +moduleObsidianMenu: + replicate: 복제 +More actions: 추가 작업 +Move remotely deleted files to the trash, instead of deleting.: 원격에서 삭제된 파일을 삭제하는 대신 휴지통으로 이동합니다. +Network warning style: 네트워크 경고 표시 방식 +New Remote: 새 원격 +No limit configured: 제한이 설정되지 않음 +Non-Synchronising files: 동기화하지 않는 파일 +Normal Files: 일반 파일 +Not all messages have been translated. And, please revert to "Default" when reporting errors.: 모든 메시지가 번역되지 않았습니다. 오류 신고 시 "기본값"으로 되돌려 주세요. +Notify all setting files: 모든 설정 파일 알림 +Notify customized: 사용자 설정 알림 +Notify when other device has newly customized.: 다른 기기에서 새로운 사용자 설정이 있을 때 알림을 받습니다. +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.: 한 번에 처리할 일괄 처리 수입니다. 기본값은 40입니다. 최소값은 2입니다. 이는 일괄 크기와 함께 메모리에 보관되는 문서 수를 제어합니다. +Number of changes to sync at a time. Defaults to 50. Minimum is 2.: 한 번에 동기화할 변경 사항의 수입니다. 기본값은 50입니다. 최소값은 2입니다. +obsidianLiveSyncSettingTab: + btnApply: 적용 + btnCheck: 확인 + btnCopy: 복사 + btnDisable: 비활성화 + btnDiscard: 삭제 + btnEnable: 활성화 + btnFix: 수정 + btnGotItAndUpdated: 알겠습니다. 업데이트했습니다. + btnNext: 다음 + btnStart: 시작 + btnTest: 테스트 + btnUse: 사용 + buttonFetch: 가져오기 + buttonNext: 다음 + defaultLanguage: 기본값 + descConnectSetupURI: 이것은 Setup URI로 Self-hosted LiveSync를 설정하는 권장 방법입니다. + descCopySetupURI: 새 기기 설정에 완벽합니다! + descEnableLiveSync: 위의 두 옵션 중 하나를 구성하거나 모든 구성을 수동으로 완료한 후에만 활성화하세요. + descFetchConfigFromRemote: 이미 구성된 원격 서버에서 필요한 설정을 가져옵니다. + descManualSetup: 권장하지 않지만 Setup URI가 없는 경우에 유용합니다 + descTestDatabaseConnection: 데이터베이스 연결을 엽니다. 원격 데이터베이스를 찾을 수 없고 데이터베이스 생성 권한이 있는 경우, 데이터베이스가 생성됩니다. + descValidateDatabaseConfig: 데이터베이스 구성의 잠재적 문제를 확인하고 수정합니다. + errAccessForbidden: ❗ 액세스가 금지되었습니다. + errCannotContinueTest: 테스트를 계속할 수 없습니다. + errCorsCredentials: ❗ cors.credentials가 잘못되었습니다 + errCorsNotAllowingCredentials: ❗ CORS에서 자격 증명을 허용하지 않습니다 + errCorsOrigins: ❗ cors.origins가 잘못되었습니다 + errEnableCors: ❗ httpd.enable_cors가 잘못되었습니다 + errMaxDocumentSize: ❗ couchdb.max_document_size가 낮습니다) + errMaxRequestSize: ❗ chttpd.max_http_request_size가 낮습니다) + errMissingWwwAuth: ❗ httpd.WWW-Authenticate가 누락되었습니다 + errRequireValidUser: ❗ chttpd.require_valid_user가 잘못되었습니다. + errRequireValidUserAuth: ❗ chttpd_auth.require_valid_user가 잘못되었습니다. + labelDisabled: "⏹️ : 비활성화됨" + labelEnabled: "🔁 : 활성화됨" + levelAdvanced: " (고급)" + levelEdgeCase: " (특수 사례)" + levelPowerUser: " (파워 유저)" + linkOpenInBrowser: 브라우저에서 열기 + linkPageTop: 페이지 상단 + linkTipsAndTroubleshooting: 팁 및 문제 해결 + linkTroubleshooting: /docs/troubleshooting.md + logCannotUseCloudant: 이 기능은 IBM Cloudant와 함께 사용할 수 없습니다. + logCheckingConfigDone: 구성 확인 완료 + logCheckingConfigFailed: 구성 확인 실패 + logCheckingDbConfig: 데이터베이스 구성 확인 중 + logCheckPassphraseFailed: |- + 오류: 원격 서버와 패스프레이즈 확인에 실패했습니다: + ${db}. + logConfiguredDisabled: "구성된 동기화 모드: 비활성화됨" + logConfiguredLiveSync: "구성된 동기화 모드: LiveSync" + logConfiguredPeriodic: "구성된 동기화 모드: 주기적" + logCouchDbConfigFail: "CouchDB 구성: ${title} 실패" + logCouchDbConfigSet: "CouchDB 구성: ${title} -> ${key}를 ${value}로 설정" + logCouchDbConfigUpdated: "CouchDB 구성: ${title} 성공적으로 업데이트됨" + logDatabaseConnected: 데이터베이스 연결됨 + logEncryptionNoPassphrase: 패스프레이즈 없이는 암호화를 활성화할 수 없습니다 + logEncryptionNoSupport: 기기가 암호화를 지원하지 않습니다. + logErrorOccurred: 오류가 발생했습니다! + logEstimatedSize: "예상 크기: ${size}" + logPassphraseInvalid: 패스프레이즈가 유효하지 않습니다. 수정해 주세요. + logPassphraseNotCompatible: "오류: 패스프레이즈가 원격 서버와 호환되지 않습니다! 다시 확인해 주세요!" + logRebuildNote: 동기화가 비활성화되었습니다. 원하는 경우 가져오기 후 다시 활성화하세요. + logSelectAnyPreset: 프리셋을 선택하세요. + msgAreYouSureProceed: 정말로 진행하시겠습니까? + msgChangesNeedToBeApplied: 변경사항을 적용해야 합니다! + msgConfigCheck: --구성 확인-- + msgConfigCheckFailed: 구성 확인에 실패했습니다. 그래도 계속하시겠습니까? + msgConnectionCheck: --연결 확인-- + msgConnectionProxyNote: 구성 확인 후에도 연결 확인에 문제가 있는 경우, 리버스 프록시 구성을 확인해 주세요. + msgCurrentOrigin: "현재 원점: {origin}" + msgDiscardConfirmation: 정말로 기존 설정과 데이터베이스를 삭제하시겠습니까? + msgDone: --완료-- + msgEnableCors: httpd.enable_cors 설정 + msgEnableEncryptionRecommendation: 종단간 암호화와 경로 난독화를 활성화하는 것을 권장합니다. 정말로 암호화 없이 계속하시겠습니까? + msgFetchConfigFromRemote: 원격 서버에서 구성을 가져오시겠습니까? + msgGenerateSetupURI: 모든 작업이 완료되었습니다! 다른 기기를 설정하기 위해 Setup URI를 생성하시겠습니까? + msgIfConfigNotPersistent: "서버 설정이 영구적으로 저장되지 않는 환경(예: Docker에서 실행 중)에서는 이곳의 값들이 + 변경될 수 있습니다. 연결이 가능해지면 서버의 local.ini 파일에서 설정을 수동으로 업데이트해 주세요." + msgInvalidPassphrase: 암호화 패스프레이즈가 유효하지 않을 수 있습니다. 정말로 계속하시겠습니까? + msgNewVersionNote: 업그레이드 알림으로 여기에 오셨나요? 버전 기록을 검토해 주세요. 만족하신다면 버튼을 클릭하세요. 새로운 업데이트 시 다시 안내됩니다. + msgNonHTTPSInfo: 비 HTTPS URI로 구성되었습니다. 모바일 기기에서는 작동하지 않을 수 있으니 주의하세요. + msgNonHTTPSWarning: 비 HTTPS URI에 연결할 수 없습니다. 구성을 업데이트하고 다시 시도해 주세요. + msgNotice: ---공지사항--- + msgObjectStorageWarning: |- + ⚠️ 주의: 이 기능은 아직 개발 중(WIP)입니다. 다음 사항을 유의해 주세요: + - 추가 전용 구조(append-only)로 동작합니다. 저장 용량을 줄이려면 데이터 재구성이 필요합니다. + - 기능이 다소 불안정할 수 있습니다. + - 최초 동기화 시, 전체 히스토리가 원격 서버에서 전송됩니다. 데이터 용량 제한 및 느린 속도에 유의해 주세요. + - 실시간 동기화는 변경된 부분만 처리됩니다. + + 문제가 발생했거나 개선 아이디어가 있으시면 GitHub에 이슈를 등록해 주세요. + 기여에 깊이 감사드립니다. + msgOriginCheck: "원점 확인: {org}" + msgRebuildRequired: |- + 변경사항을 적용하려면 데이터베이스를 재구축해야 합니다. 아래 중 한 가지 방법을 선택해 주세요. + +
+ 범례 + + | 기호 | 의미 | + |: ------ :| ------- | + | ⇔ | 최신 상태 | + | ⇄ | 동기화 균형 유지 | + | ⇐,⇒ | 덮어쓰기 방식의 전송 | + | ⇠,⇢ | 상대편에서 가져와 덮어쓰기 | + +
+ + ## ${OPTION_REBUILD_BOTH} + 개요: 📄 ⇒¹ 💻 ⇒² 🛰️ ⇢ⁿ 💻 ⇄ⁿ⁺¹ 📄 + 이 기기의 기존 파일을 기반으로 로컬과 원격 데이터베이스를 모두 재구축합니다. + 이 과정에서 다른 기기는 일시적으로 접근이 제한되며, 가져오기 작업을 별도로 수행해야 합니다. + + ## ${OPTION_FETCH} + 개요: 📄 ⇄² 💻 ⇐¹ 🛰️ ⇔ 💻 ⇔ 📄 + 로컬 데이터베이스를 초기화한 후, 원격 데이터베이스에서 데이터를 가져와 재구축합니다. + 이는 원격 측에서 데이터베이스를 먼저 재구축한 경우에도 해당됩니다. + + ## ${OPTION_ONLY_SETTING} + 설정만 저장합니다. **⚠️ 주의: 이 방법은 데이터 손상을 일으킬 수 있습니다.** 일반적으로는 전체 데이터베이스 재구축이 필요합니다. + msgSelectAndApplyPreset: 마법사를 완료하려면 프리셋 항목을 선택하고 적용해 주세요. + msgSetCorsCredentials: cors.credentials 설정 + msgSetCorsOrigins: cors.origins 설정 + msgSetMaxDocSize: couchdb.max_document_size 설정 + msgSetMaxRequestSize: chttpd.max_http_request_size 설정 + msgSetRequireValidUser: chttpd.require_valid_user = true로 설정 + msgSetRequireValidUserAuth: chttpd_auth.require_valid_user = true로 설정 + msgSettingModified: '"${setting}" 설정이 다른 기기에서 수정되었습니다. 설정을 다시 로드하려면 {HERE}를 + 클릭하세요. 변경사항을 무시하려면 다른 곳을 클릭하세요.' + msgSettingsUnchangeableDuringSync: 동기화 중에는 이 설정들을 변경할 수 없습니다. 잠금을 해제하려면 "동기화 설정"에서 모든 동기화를 비활성화해 주세요. + msgSetWwwAuth: httpd.WWW-Authenticate 설정 + nameApplySettings: 설정 적용 + nameConnectSetupURI: Setup URI로 연결 + nameCopySetupURI: 현재 설정을 Setup URI로 복사 + nameDisableHiddenFileSync: 숨김 파일 동기화 비활성화 + nameDiscardSettings: 기존 설정 및 데이터베이스 삭제 + nameEnableHiddenFileSync: 숨김 파일 동기화 활성화 + nameEnableLiveSync: LiveSync 활성화 + nameHiddenFileSynchronization: 숨김 파일 동기화 + nameManualSetup: 수동 설정 + nameTestConnection: 연결 테스트 + nameTestDatabaseConnection: 데이터베이스 연결 테스트 + nameValidateDatabaseConfig: 데이터베이스 구성 검증 + okAdminPrivileges: ✔ 관리자 권한이 있습니다. + okCorsCredentials: ✔ cors.credentials가 정상입니다. + okCorsCredentialsForOrigin: CORS 자격 증명 정상 + okCorsOriginMatched: ✔ CORS 원점 정상 + okCorsOrigins: ✔ cors.origins가 정상입니다. + okEnableCors: ✔ httpd.enable_cors가 정상입니다. + okMaxDocumentSize: ✔ couchdb.max_document_size가 정상입니다. + okMaxRequestSize: ✔ chttpd.max_http_request_size가 정상입니다. + okRequireValidUser: ✔ chttpd.require_valid_user가 정상입니다. + okRequireValidUserAuth: ✔ chttpd_auth.require_valid_user가 정상입니다. + okWwwAuth: ✔ httpd.WWW-Authenticate가 정상입니다. + optionApply: 적용 + optionCancel: 취소 + optionCouchDB: CouchDB + optionDisableAllAutomatic: 모든 자동 비활성화 + optionFetchFromRemote: 원격에서 가져오기 + optionHere: 여기 + optionLiveSync: LiveSync 동기화 + optionMinioS3R2: Minio,S3,R2 + optionOkReadEverything: 네, 모든 것을 읽었습니다. + optionOnEvents: 이벤트 시 + optionPeriodicAndEvents: 주기적 및 이벤트 시 + optionPeriodicWithBatch: 주기적 w/ 일괄 + optionRebuildBoth: 이 기기에서 둘 다 재구축 + optionSaveOnlySettings: (위험) 설정만 저장 + panelChangeLog: 변경 로그 + panelGeneralSettings: 일반 설정 + panelPrivacyEncryption: 개인정보 보호 및 암호화 + panelRemoteConfiguration: 원격 구성 + panelSetup: 설정 + titleAppearance: 외관 + titleConflictResolution: 충돌 해결 + titleCongratulations: 축하합니다! + titleCouchDB: CouchDB 서버 + titleDeletionPropagation: 삭제 전파 + titleEncryptionNotEnabled: 암호화가 활성화되지 않음 + titleEncryptionPassphraseInvalid: 암호화 패스프레이즈 유효하지 않음 + titleExtraFeatures: 추가 및 고급 기능 활성화 + titleFetchConfig: 구성 가져오기 + titleFetchConfigFromRemote: 원격 서버에서 구성 가져오기 + titleFetchSettings: 설정 가져오기 + titleHiddenFiles: 숨김 파일 + titleLogging: 로깅 + titleMinioS3R2: MinIO, S3, R2 + titleNotification: 알림 + titleOnlineTips: 온라인 팁 + titleQuickSetup: 빠른 설정 + titleRebuildRequired: 재구축 필요 + titleRemoteConfigCheckFailed: 원격 구성 확인 실패 + titleRemoteServer: 원격 서버 + titleReset: 리셋 + titleSetupOtherDevices: 다른 기기 설정 + titleSynchronizationMethod: 동기화 방법 + titleSynchronizationPreset: 동기화 프리셋 + titleSyncSettings: 동기화 설정 + titleSyncSettingsViaMarkdown: 마크다운을 통한 동기화 설정 + titleUpdateThinning: 업데이트 솎아내기 + warnCorsOriginUnmatched: ⚠ CORS 원점이 일치하지 않습니다 {from}->{to} + warnNoAdmin: ⚠ 관리자 권한이 없습니다. +Ok: 확인 +Old Algorithm: 이전 알고리즘 +Older fallback (Slow, W/O WebAssembly): 이전 대체 방식 (느림, WebAssembly 없음) +Open: 열기 +Open the dialog: 대화상자 열기 +Overwrite: 덮어쓰기 +Overwrite patterns: 덮어쓰기 패턴 +Overwrite remote: 원격 덮어쓰기 +Overwrite remote with local DB and passphrase.: 로컬 DB와 암호문구로 원격을 덮어씁니다. +Overwrite Server Data with This Device's Files: 이 기기의 파일로 서버 데이터를 덮어쓰기 +P2P: + AskPassphraseForDecrypt: 원격 피어가 구성을 공유했습니다. 구성을 복호화하려면 패스프레이즈를 입력해 주세요. + AskPassphraseForShare: 원격 피어가 이 기기의 구성을 요청했습니다. 구성을 공유하려면 패스프레이즈를 입력해 주세요. 이 + 대화상자를 취소하여 요청을 무시할 수 있습니다. + DisabledButNeed: "%{title_p2p_sync}가 비활성화되어 있습니다. 정말로 활성화하시겠습니까?" + FailedToOpen: 시그널링 서버에 P2P 연결을 열 수 없습니다. + NoAutoSyncPeers: 자동 동기화 피어를 찾을 수 없습니다. %{long_p2p_sync} 창에서 피어를 설정해 주세요. + NoKnownPeers: 피어가 감지되지 않았습니다. 다른 피어의 접속을 기다리고 있습니다... + Note: + description: >- + 이 복제기는 피어 투 피어(P2P) 연결을 통해 다른 기기들과 볼트를 동기화할 수 있도록 합니다. 클라우드 서비스를 거치지 않고도 + 기기간 동기화를 구현할 수 있습니다. + + + 이 복제기는 Trystero를 기반으로 하며, 기기 간 연결을 설정하기 위해 시그널링 서버를 사용합니다. 시그널링 서버는 단순히 연결 + 정보를 교환하는 용도로만 사용되며, 사용자 데이터를 저장하거나 접근하지 않습니다 (또는 그래야만 합니다). + + + 시그널링 서버는 누구나 운영할 수 있으며, 이는 단순한 Nostr 릴레이입니다. 편의성과 복제기의 작동 확인을 위해 `vrtmrz`가 + 자체적으로 시그널링 서버 인스턴스를 운영 중입니다. 사용자는 `vrtmrz`가 제공하는 실험용 서버를 사용할 수도 있고, 별도로 + 자신만의 서버를 설정할 수도 있습니다. + + + 참고로, 시그널링 서버는 사용자 데이터를 저장하지 않더라도 일부 기기의 연결 정보는 볼 수 있습니다. 이 점을 유의해 주세요. 특히 + 타인이 운영하는 서버를 사용할 경우 주의가 필요합니다. + important_note: 피어 투 피어(P2P) 복제기의 실험적 구현입니다. + important_note_sub: 이 기능은 아직 실험 단계에 있습니다. 이 기능이 예상대로 작동하지 않을 수 있음을 알아주세요. 또한 버그, + 보안 문제 및 기타 문제가 있을 수 있습니다. 이 기능을 사용할 때는 본인의 책임 하에 사용하세요. 이 기능의 개발에 기여해 주세요. + Summary: 이 기능은 무엇인가요? (설명과 참고사항이 적혀있습니다. 한 번 읽어보세요!) + NotEnabled: "%{title_p2p_sync}가 활성화되지 않았습니다. 새로운 연결을 열 수 없습니다." + P2PReplication: "%{P2P} 복제" + PaneTitle: "%{long_p2p_sync}" + ReplicatorInstanceMissing: P2P 동기화 복제기를 찾을 수 없습니다. 구성되지 않았거나 활성화되지 않았을 수 있습니다. + SeemsOffline: 피어 ${name}이(가) 오프라인인 것 같습니다. 건너뜁니다. + SyncAlreadyRunning: P2P 동기화가 이미 실행 중입니다. + SyncCompleted: P2P 동기화가 완료되었습니다. + SyncStartedWith: ${name}과의 P2P 동기화가 시작되었습니다. +paneMaintenance: + markDeviceResolvedAfterBackup: 백업 후 장치를 해결됨으로 표시 + remoteLockedAndDeviceNotAccepted: 원격 데이터베이스가 잠겨 있으며 이 장치는 아직 승인되지 않았습니다. + remoteLockedResolvedDevice: 원격 데이터베이스가 잠겨 있지만 이 장치는 이미 승인되었습니다. + unlockDatabaseReady: 데이터베이스 잠금 해제 +Passphrase: 패스프레이즈 +Passphrase of sensitive configuration items: 민감한 구성 항목의 패스프레이즈 +password: 비밀번호 +Password: 비밀번호 +Paste a connection string: 연결 문자열 붙여넣기 +Path Obfuscation: 경로 난독화 +Patterns to match files for overwriting instead of merging: 병합 대신 덮어쓸 파일을 판별하는 패턴 +Patterns to match files for syncing: 동기화할 파일을 판별하는 패턴 +Peer-to-Peer Synchronisation: 피어 투 피어 동기화 +Per-file-saved customization sync: 파일별 저장 사용자 설정 동기화 +Perform: 실행 +Perform cleanup: 정리 실행 +Perform Garbage Collection: 가비지 컬렉션 실행 +Perform Garbage Collection to remove unused chunks and reduce database size.: 사용하지 않는 청크를 제거하고 데이터베이스 크기를 줄이기 위해 가비지 컬렉션을 실행합니다. +Periodic Sync interval: 주기적 동기화 간격 +Pick a file to resolve conflict: 충돌을 해결할 파일 선택 +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: 이 장치 이름을 설정해 주세요 +Presets: 프리셋 +Process small files in the foreground: 포그라운드에서 작은 파일 처리 +PureJS fallback (Fast, W/O WebAssembly): PureJS 대체 방식 (빠름, WebAssembly 없음) +Purge all download/upload cache.: 모든 다운로드/업로드 캐시를 제거합니다. +Purge all journal counter: 모든 저널 카운터 삭제 +Rebuild local and remote database with local files.: 로컬 파일로 로컬 및 원격 데이터베이스를 다시 구축합니다. +Rebuilding Operations (Remote Only): 재구축 작업 (원격 전용) +Recreate all: 모두 다시 생성 +Recreate missing chunks for all files: 모든 파일의 누락된 청크 다시 생성 +RedFlag: + Fetch: + Method: + Desc: >- + 어떻게 가져오시겠습니까? + + - %{RedFlag.Fetch.Method.FetchSafer}. (권장) + **낮은 트래픽**, **높은 CPU**, **낮은 위험** + - %{RedFlag.Fetch.Method.FetchSmoother}. + **낮은 트래픽**, **보통 CPU**, **낮음에서 보통 위험** + - %{RedFlag.Fetch.Method.FetchTraditional}. + **높은 트래픽**, **낮은 CPU**, **낮음에서 보통 위험** + + >[!INFO]- 세부 사항 + + > ## %{RedFlag.Fetch.Method.FetchSafer}. (권장) + + > **낮은 트래픽**, **높은 CPU**, **낮은 위험** + + > 이 옵션은 원격 소스에서 데이터를 가져오기 전에 기존 로컬 파일을 사용하여 로컬 데이터베이스를 먼저 생성합니다. + + > 로컬과 원격 모두에 일치하는 파일이 있으면 둘 사이의 차이점만 전송됩니다. + + > 하지만 두 위치 모두에 있는 파일은 초기에 충돌 파일로 처리됩니다. 실제로 충돌하지 않는다면 자동으로 해결되지만 이 과정은 + 시간이 걸릴 수 있습니다. + + > 이는 일반적으로 가장 안전한 방법으로 데이터 손실 위험을 최소화합니다. + + > ## %{RedFlag.Fetch.Method.FetchSmoother}. + + > **낮은 트래픽**, **보통 CPU**, **낮음에서 보통 위험** (작업에 따라) + + > 이 옵션은 먼저 로컬 파일에서 데이터베이스용 청크를 생성한 다음 데이터를 가져옵니다. 따라서 로컬에 없는 청크만 전송됩니다. + 하지만 모든 메타데이터는 원격 소스에서 가져옵니다. + + > 그런 다음 로컬 파일이 시작 시 이 메타데이터와 비교됩니다. 더 새로운 것으로 간주되는 콘텐츠가 오래된 것을 덮어씁니다(수정 + 시간 기준). 이 결과는 원격 데이터베이스에 다시 동기화됩니다. + + > 로컬 파일이 실제로 최신 타임스탬프라면 일반적으로 안전합니다. 하지만 파일이 더 새로운 타임스탬프를 가지고 있지만 더 오래된 + 콘텐츠를 가지고 있다면(초기 `welcome.md`처럼) 문제가 발생할 수 있습니다. + + > 이는 "%{RedFlag.Fetch.Method.FetchSafer}"보다 CPU를 덜 사용하고 더 빠르지만 주의 깊게 + 사용하지 않으면 데이터 손실로 이어질 수 있습니다. + + > ## %{RedFlag.Fetch.Method.FetchTraditional}. + + > **높은 트래픽**, **낮은 CPU**, **낮음에서 보통 위험** (작업에 따라) + + > 모든 것이 원격에서 가져와집니다. + + > %{RedFlag.Fetch.Method.FetchSmoother}와 유사하지만 모든 청크가 원격 소스에서 가져와집니다. + + > 이는 가장 전통적인 가져오기 방법으로 일반적으로 가장 많은 네트워크 트래픽과 시간을 소모합니다. 또한 + '%{RedFlag.Fetch.Method.FetchSmoother}' 옵션과 유사하게 원격 파일을 덮어쓸 위험이 있습니다. + + > 하지만 가장 오래되고 가장 직접적인 접근 방식이기 때문에 종종 가장 안정적인 방법으로 간주됩니다. + FetchSafer: 가져오기 전에 로컬 데이터베이스를 한 번 생성 + FetchSmoother: 가져오기 전에 로컬 파일 청크 생성 + FetchTraditional: 원격에서 모든 것 가져오기 + Title: 어떻게 가져오시겠습니까? +Reducing the frequency with which on-disk changes are reflected into the DB: 디스크 변경 사항이 데이터베이스에 반영되는 빈도를 줄입니다 +Region: 지역 +Remediation: 복구 조치 +Remediation Setting Changed: 복구 설정이 변경됨 +Remote Database Tweak (In sunset): 원격 데이터베이스 조정 (폐기 예정) +Remote Databases: 원격 데이터베이스 +Remote name: 원격 이름 +Remote server type: 원격 서버 유형 +Remote Type: 원격 유형 +Rename: 이름 바꾸기 +Replicator: + Dialogue: + Locked: + Action: + Dismiss: 재확인을 위해 취소 + Fetch: 원격 데이터베이스에서 모든 것을 다시 가져오기 + Unlock: 원격 데이터베이스 잠금 해제 + Message: + _value: > + 원격 데이터베이스가 잠겨 있습니다. 이는 일부 터미널에서 데이터베이스를 재구축했기 때문입니다. + + 따라서 현재 기기는 데이터베이스 손상을 방지하기 위해 연결을 일시적으로 보류해야 합니다. + + + 선택할 수 있는 세 가지 방법이 있습니다: + + + - %{Replicator.Dialogue.Locked.Action.Fetch} + 가장 권장되고 신뢰할 수 있는 방법입니다. 로컬 데이터베이스를 초기화한 뒤, 원격 데이터베이스의 전체 데이터를 다시 가져옵니다. 대부분의 경우 안전하게 수행할 수 있으나, 시간이 다소 걸리며 안정적인 네트워크 환경에서 진행해야 합니다. + - %{Replicator.Dialogue.Locked.Action.Unlock} + 이 방법은 다른 동기화 방식으로 이미 완전하고 안정적으로 동기화된 경우에만 사용할 수 있습니다. 단순히 파일이 같다는 의미가 아니므로, 확신이 없다면 사용을 피하는 것이 좋습니다. + - %{Replicator.Dialogue.Locked.Action.Dismiss} + 이번 작업을 취소하고, 다음 요청 시 다시 안내받습니다. + Fetch: 모든 것 가져오기가 예약되었습니다. 이를 수행하기 위해 플러그인이 재시작됩니다. + Unlocked: 원격 데이터베이스 잠금이 해제되었습니다. 작업을 다시 시도해 주세요. + Title: 잠김 + Message: + Cleaned: 데이터베이스 정리가 진행 중입니다. 복제가 취소되었습니다 + InitialiseFatalError: 사용 가능한 복제기가 없습니다. 치명적인 오류입니다. + Pending: 일부 파일 이벤트가 대기 중입니다. 복제가 취소되었습니다. + SomeModuleFailed: 일부 모듈 실패로 복제가 취소되었습니다 + VersionUpFlash: 설정을 열고 메시지를 확인해 주세요. 복제가 취소되었습니다. +Requires restart of Obsidian: Obsidian 재시작 필요 +Requires restart of Obsidian.: Obsidian 재시작이 필요합니다. +Resend: 다시 보내기 +Resend all chunks to the remote.: 모든 청크를 원격으로 다시 보냅니다. +Reset: 재설정 +Reset all: 모두 재설정 +Reset all journal counter: 모든 저널 카운터 재설정 +Reset journal received history: 저널 수신 기록 재설정 +Reset journal sent history: 저널 송신 기록 재설정 +Reset received: 수신 기록 재설정 +Reset sent history: 송신 기록 재설정 +Reset Synchronisation information: 동기화 정보 재설정 +Reset Synchronisation on This Device: 이 장치의 동기화 상태 재설정 +Resolve All: 모두 해결 +Resolve all conflicted files: 충돌한 모든 파일 해결 +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.": "충돌한 모든 파일을 더 최신 버전으로 해결합니다. 주의: 이전 버전은 덮어써지며 복원할 수 없습니다." +Restart Now: 지금 재시작 +Restore or reconstruct local database from remote.: 원격에서 로컬 데이터베이스를 복원하거나 재구축합니다. +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.: 이 시간(초) 후에 강제로 저장이 수행됩니다. +Scan changes on customization sync: 사용자 설정 동기화 시 변경 사항 검색 +Scan customization automatically: 사용자 설정 자동 검색 +Scan customization before replicating.: 복제하기 전에 사용자 설정을 검색합니다. +Scan customization every 1 minute.: 1분마다 사용자 설정을 검색합니다. +Scan customization periodically: 주기적으로 사용자 설정 검색 +Scan for hidden files before replication: 복제 전 숨겨진 파일 검색 +Scan hidden files periodically: 주기적으로 숨겨진 파일 검색 +Schedule and Restart: 예약 후 재시작 +Scram!: 긴급 조치 +Seconds, 0 to disable: 초 단위, 0으로 설정하면 비활성화 +Seconds. Saving to the local database will be delayed until this value after we stop typing or saving.: 초 단위입니다. 타이핑이나 저장을 중단한 후 이 시간동안 로컬 데이터베이스 저장이 지연됩니다. +Secret Key: 시크릿 키 +Select the database adapter to use.: 사용할 데이터베이스 어댑터를 선택합니다. +Send: 보내기 +Send chunks: 청크 보내기 +Server URI: 서버 URI +Setting: + GenerateKeyPair: + Desc: |+ + 키 페어를 생성했습니다! + + 참고: 이 키 페어는 다시 표시되지 않습니다. 안전한 곳에 저장해 주세요. 분실하면 새 키 페어를 생성해야 합니다. + 참고 2: 공개 키는 spki 형식이고, 개인 키는 pkcs8 형식입니다. 편의상 공개 키의 줄 바꿈은 `\n`으로 변환됩니다. + 참고 3: 공개 키는 원격 데이터베이스에서 구성되어야 하고, 개인 키는 로컬 기기에서 구성되어야 합니다. + + >[!FOR YOUR EYES ONLY]- + >
+ > + > ### 공개 키 + > ``` + ${public_key} + > ``` + > + > ### 개인 키 + > ``` + ${private_key} + > ``` + > + >
+ + >[!Both for copying]- + > + >
+ > + > ``` + ${public_key} + ${private_key} + > ``` + > + >
+ + + Title: 새 키 페어가 생성되었습니다! + TroubleShooting: + _value: 문제 해결 + Doctor: + _value: 설정 진단 마법사 + Desc: 최적화되지 않은 설정을 감지합니다. (데이터 구조 전환 시와 동일) + ScanBrokenFiles: + _value: 손상된 파일 검사 + Desc: 데이터베이스에 올바르게 저장되지 않은 파일을 검사합니다. +SettingTab: + Message: + AskRebuild: 변경 사항을 적용하려면 원격 데이터베이스에서 가져와야 합니다. 계속 진행하시겠습니까? +Setup: + QRCode: |- + 설정을 전송하기 위한 QR 코드를 생성했습니다. 휴대폰이나 다른 기기로 QR 코드를 스캔해 주세요. + 참고: QR 코드는 암호화되지 않았으므로 열 때 주의하세요. + + >[!FOR YOUR EYES ONLY]- + >
${qr_image}
+ ShowQRCode: + _value: QR 코드 표시 + Desc: 설정을 전송하기 위한 QR 코드를 표시합니다. + RemoteE2EE: + Title: 엔드투엔드 암호화 + Guidance: 엔드투엔드 암호화 설정을 구성해 주세요. + LabelEncrypt: 엔드투엔드 암호화 + PlaceholderPassphrase: 패스프레이즈를 입력하세요 + StronglyRecommendedTitle: 강력 권장 + StronglyRecommendedLine1: 엔드투엔드 암호화를 활성화하면 데이터가 원격 서버로 전송되기 전에 이 기기에서 암호화됩니다. 즉, 누군가 서버에 접근하더라도 패스프레이즈 없이는 데이터를 읽을 수 없습니다. 다른 기기에서 데이터를 복호화할 때도 필요하므로 패스프레이즈를 반드시 기억해 두세요. + StronglyRecommendedLine2: 또한 Peer-to-Peer 동기화를 사용 중이더라도, 나중에 다른 방식으로 전환하여 원격 서버에 연결하면 이 설정이 그대로 사용됩니다. + MultiDestinationWarning: 여러 동기화 대상에 연결하는 경우에도 이 설정은 동일해야 합니다. + LabelObfuscateProperties: 속성 난독화 + ObfuscatePropertiesDesc: >- + 속성(예: 파일 경로, 크기, 생성일 및 수정일)을 난독화하면 원격 서버에서 파일과 폴더의 구조 및 이름을 식별하기 어렵게 만들어 보안을 한층 강화할 수 있습니다. 이는 개인 정보를 보호하고 권한 없는 사용자가 데이터에 관한 정보를 추론하기 어렵게 만듭니다. + AdvancedTitle: 고급 + LabelEncryptionAlgorithm: 암호화 알고리즘 + DefaultAlgorithmDesc: 대부분의 경우 기본 알고리즘(${algorithm})을 그대로 사용하는 것이 좋습니다. 이 설정은 기존 Vault가 다른 형식으로 암호화되어 있는 경우에만 필요합니다. + AlgorithmWarning: 암호화 알고리즘을 변경하면 다른 알고리즘으로 암호화된 기존 데이터에 접근할 수 없게 됩니다. 모든 기기에서 동일한 알고리즘을 사용하도록 설정해 데이터 접근성을 유지하세요. + PassphraseValidationLine1: 엔드투엔드 암호화 패스프레이즈는 실제 동기화가 시작되기 전까지 검증되지 않는다는 점에 유의하세요. 이것은 데이터를 보호하기 위한 보안 조치입니다. + PassphraseValidationLine2: 따라서 서버 정보를 수동으로 구성할 때는 각별히 주의해 주세요. 잘못된 패스프레이즈를 입력하면 서버의 데이터가 손상됩니다. 이는 의도된 동작이니 반드시 이해하고 진행해 주세요. + ButtonProceed: 진행 + ButtonCancel: 취소 + UseSetupURI: + Title: Setup URI 입력 + GuidanceLine1: 서버 설치 중 또는 다른 기기에서 생성된 Setup URI와 Vault 패스프레이즈를 입력해 주세요. + GuidanceLine2: 명령 팔레트에서 "설정을 새 Setup URI로 복사" 명령을 실행하면 새 Setup URI를 생성할 수 있습니다. + LabelSetupURI: Setup URI + ValidInfo: Setup URI가 유효하며 사용할 준비가 되었습니다. + InvalidInfo: Setup URI가 올바르지 않습니다. 확인한 뒤 다시 시도해 주세요. + LabelPassphrase: Vault 패스프레이즈 + PlaceholderPassphrase: Vault 패스프레이즈를 입력하세요 + ErrorPassphraseRequired: Vault 패스프레이즈를 입력해 주세요. + ErrorFailedToParse: Setup URI를 해석하지 못했습니다. URI와 패스프레이즈를 확인해 주세요. + ButtonProceed: 설정 테스트 후 계속 + ButtonCancel: 취소 + ScanQRCode: + Title: QR 코드 스캔 + Guidance: 기존 기기에서 설정을 가져오려면 아래 단계를 따라 주세요. + Step1: 이 기기에서는 이 Vault를 계속 열어 두세요. + Step2: 원본 기기에서 Obsidian을 엽니다. + Step3: 원본 기기에서 명령 팔레트를 열고 "설정을 QR 코드로 표시" 명령을 실행합니다. + Step4: 이 기기에서 카메라 앱으로 전환하거나 QR 코드 스캐너를 사용해 표시된 QR 코드를 스캔하세요. + ButtonClose: 이 대화 상자 닫기 +"Please enable 'Compute revisions for chunks' in settings to use Garbage Collection.": Garbage Collection을 사용하려면 설정에서 "Compute revisions for chunks"를 활성화해 주세요. +"Please disable 'Read chunks online' in settings to use Garbage Collection.": Garbage Collection을 사용하려면 설정에서 "Read chunks online"을 비활성화해 주세요. +"Setup URI dialog cancelled.": Setup URI 대화 상자가 취소되었습니다. +"Please select 'Cancel' explicitly to cancel this operation.": 이 작업을 취소하려면 반드시 "취소"를 명시적으로 선택해 주세요. +"Failed to connect to remote for compaction.": 압축을 위해 원격 데이터베이스에 연결하지 못했습니다. +"Failed to connect to remote for compaction. ${reason}": 압축을 위해 원격 데이터베이스에 연결하지 못했습니다. ${reason} +"Compaction in progress on remote database...": 원격 데이터베이스에서 압축을 진행 중입니다... +"Compaction on remote database timed out.": 원격 데이터베이스 압축 시간이 초과되었습니다. +"Compaction on remote database completed successfully.": 원격 데이터베이스 압축이 성공적으로 완료되었습니다. +"Compaction on remote database failed.": 원격 데이터베이스 압축에 실패했습니다. +"Failed to start one-shot replication before Garbage Collection. Garbage Collection Cancelled.": Garbage Collection 전에 일회성 복제를 시작하지 못했습니다. Garbage Collection을 취소합니다. +"Cancel Garbage Collection": Garbage Collection 취소 +"No connected device information found. Cancelling Garbage Collection.": 연결된 기기 정보를 찾을 수 없습니다. Garbage Collection을 취소합니다. +"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.": |- + 다음 승인된 노드에는 노드 정보가 없습니다: + - ${missingNodes} + + 이는 해당 노드가 한동안 연결되지 않았거나 이전 버전에 머물러 있음을 의미합니다. + 가능하다면 먼저 모든 기기를 업데이트하는 것이 좋습니다. 더 이상 사용하지 않는 기기가 있다면 원격을 한 번 잠가 승인된 노드를 모두 정리할 수 있습니다. +"Ignore and Proceed": 무시하고 계속 +"Node Information Missing": 노드 정보 누락 +"Garbage Collection cancelled by user.": 사용자가 Garbage Collection을 취소했습니다. +"Proceeding with Garbage Collection, ignoring missing nodes.": 누락된 노드를 무시하고 Garbage Collection을 계속 진행합니다. +"Proceed Garbage Collection": Garbage Collection 계속 +"> [!INFO]- The connected devices have been detected as follows:\n${devices}": |- + > [!INFO]- 다음 연결된 기기가 감지되었습니다: + ${devices} +"Device": 기기 +"Node ID": 노드 ID +"Obsidian version": Obsidian 버전 +"Plug-in version": 플러그인 버전 +"Progress": 진행 상태 +"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.": |- + 일부 기기의 진행 값이 다릅니다(최대: ${maxProgress}, 최소: ${minProgress}). + 이는 일부 기기가 동기화를 완료하지 않았음을 의미할 수 있으며, 충돌로 이어질 수 있습니다. 계속 진행하기 전에 모든 기기가 동기화되었는지 반드시 확인하는 것을 강력히 권장합니다. +"All devices have the same progress value (${progress}). Your devices seem to be synchronised. And be able to proceed with Garbage Collection.": 모든 기기의 진행 값이 동일합니다(${progress}). 기기들이 동기화된 것으로 보이므로 Garbage Collection을 진행할 수 있습니다. +"Garbage Collection Confirmation": Garbage Collection 확인 +"Proceeding with Garbage Collection.": Garbage Collection을 진행합니다. +"Garbage Collection: Scanned ${scanned} / ~${docCount}": |- + Garbage Collection: ${scanned} / ~${docCount} 스캔됨 +"Garbage Collection: Scanning completed. Total chunks: ${totalChunks}, Used chunks: ${usedChunks}": |- + Garbage Collection: 스캔 완료. 전체 청크 수: ${totalChunks}, 사용 중인 청크 수: ${usedChunks} +"Garbage Collection: Found ${unusedChunks} unused chunks to delete.": |- + Garbage Collection: 삭제할 미사용 청크 ${unusedChunks}개를 찾았습니다. +"Garbage Collection completed. Deleted chunks: ${deletedChunks} / ${totalChunks}. Time taken: ${seconds} seconds.": |- + Garbage Collection이 완료되었습니다. 삭제된 청크: ${deletedChunks} / ${totalChunks}. 소요 시간: ${seconds}초. +"Failed to start replication after Garbage Collection.": Garbage Collection 후 복제를 시작하지 못했습니다. +Should we keep folders that don't have any files inside?: 내부에 파일이 없는 폴더를 유지하시겠습니까? +Should we only check for conflicts when a file is opened?: 파일을 열 때만 충돌을 확인하시겠습니까? +Should we prompt you about conflicting files when a file is opened?: 파일을 열 때 충돌하는 파일에 대해 알림을 표시하시겠습니까? +Should we prompt you for every single merge, even if we can safely merge automatcially?: 안전하게 자동 병합할 수 있는 경우에도 모든 병합에 대해 알림을 받으시겠습니까? +Show full banner: 전체 배너 표시 +Show only notifications: 알림만 표시 +Show status as icons only: 아이콘으로만 상태 표시 +Show status icon instead of file warnings banner: 파일 경고 배너 대신 상태 아이콘 표시 +Show status inside the editor: 편집기 내부에 상태 표시 +Show status on the status bar: 상태 바에 상태 표시 +Show verbose log. Please enable if you report an issue.: 자세한 로그를 표시합니다. 문제를 신고하는 경우 활성화해 주세요. +Starts synchronisation when a file is saved.: 파일이 저장될 때 동기화를 시작합니다. +Stop reflecting database changes to storage files.: 데이터베이스 변경 사항을 스토리지 파일에 반영하는 것을 중단합니다. +Stop watching for file changes.: 파일 변경 사항 감시를 중단합니다. +Suppress notification of hidden files change: 숨겨진 파일 변경 알림 억제 +Suspend database reflecting: 데이터베이스 반영 일시 중단 +Suspend file watching: 파일 감시 일시 중단 +Switch to IDB: IDB로 전환 +Switch to IndexedDB: IndexedDB로 전환 +Sync after merging file: 파일 병합 후 동기화 +Sync automatically after merging files: 파일 병합 후 자동으로 동기화 +Sync Mode: 동기화 모드 +Sync on Editor Save: 편집기 저장 시 동기화 +Sync on File Open: 파일 열기 시 동기화 +Sync on Save: 저장 시 동기화 +Sync on Startup: 시작 시 동기화 +Synchronising files: 동기화할 파일 +Syncing: 동기화 +Target patterns: 대상 패턴 +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 Hash algorithm for chunk IDs: 청크 ID용 해시 알고리즘 +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 total size of chunks that can be incubated within the document. Chunks exceeding this size will immediately graduate to independent chunks.: 문서 안에 임시로 보관할 수 있는 변경 기록의 전체 크기 제한입니다. 초과 시 자동으로 분리됩니다. +This passphrase will not be copied to another device. It will be set to `Default` until you configure it again.: 이 패스프레이즈는 다른 기기로 복사되지 않습니다. 다시 구성할 때까지 `기본값`으로 설정됩니다. +This will recreate chunks for all files. If there were missing chunks, this may fix the errors.: 모든 파일의 청크를 다시 생성합니다. 누락된 청크가 있었다면 이 작업으로 오류가 해결될 수 있습니다. +Transfer Tweak: 전송 조정 +TweakMismatchResolve: + Action: + Dismiss: 무시 + UseConfigured: 구성된 설정 사용 + UseMine: 원격 데이터베이스 설정 업데이트 + UseMineAcceptIncompatible: 원격 데이터베이스 설정 업데이트하지만 그대로 유지 + UseMineWithRebuild: 원격 데이터베이스 설정 업데이트하고 다시 재구축 + UseRemote: 이 기기에 설정 적용 + UseRemoteAcceptIncompatible: 이 기기에 설정 적용하지만 호환성 문제 무시 + UseRemoteWithRebuild: 이 기기에 설정 적용하고 다시 가져오기 + Message: + Main: |- + + 원격 데이터베이스의 설정은 다음과 같습니다. 이 값들은 이 기기와 최소 한 번 동기화된 다른 기기에서 구성된 것입니다. + + 이 설정을 사용하려면 %{TweakMismatchResolve.Action.UseConfigured}를 선택해 주세요. + 이 기기의 설정을 유지하려면 %{TweakMismatchResolve.Action.Dismiss}를 선택해 주세요. + + ${table} + + >[!TIP] + > 모든 설정을 동기화하려면 이 기능으로 최소 구성을 적용한 후 `마크다운을 통한 설정 동기화`를 사용해 주세요. + + ${additionalMessage} + MainTweakResolving: |- + 구성이 원격 서버의 것과 일치하지 않습니다. + + 다음 구성이 일치해야 합니다: + + ${table} + + 결정을 알려주세요. + + ${additionalMessage} + UseRemote: + WarningRebuildRecommended: >- + + >[!NOTICE] + + > 일부 변경사항은 호환 가능하지만 추가 스토리지 및 전송량을 소모할 수 있습니다. 재구축을 권장합니다. 하지만 현재 재구축을 + 수행하지 않더라도 향후 유지보수에서 구현될 수 있습니다. + + > ***시간적 여유가 있고 안정적인 네트워크에 연결된 상태에서 적용해 주세요!*** + WarningRebuildRequired: |- + + >[!WARNING] + > 일부 원격 구성이 이 기기의 로컬 데이터베이스와 호환되지 않습니다. 로컬 데이터베이스 재구축이 필요합니다. + > ***시간적 여유가 있고 안정적인 네트워크에 연결된 상태에서 적용해 주세요!*** + WarningIncompatibleRebuildRecommended: >- + + >[!NOTICE] + + > 로컬 데이터베이스와 원격 데이터베이스가 호환되지 않도록 만드는 값들이 다른 것을 감지했습니다. + + > 일부 변경사항은 호환 가능하지만 추가 스토리지 및 전송량을 소모할 수 있습니다. 재구축을 권장합니다. 하지만 현재 재구축을 + 수행하지 않더라도 향후 유지보수에서 구현될 수 있습니다. + + > 재구축을 원한다면 몇 분 이상 소요됩니다. **지금 수행해도 안전한지 확인해 주세요.** + WarningIncompatibleRebuildRequired: |- + + >[!WARNING] + > 로컬 데이터베이스와 원격 데이터베이스가 호환되지 않도록 만드는 값들이 다른 것을 감지했습니다. + > 로컬 또는 원격 재구축이 필요합니다. 둘 다 몇 분 이상 소요됩니다. **지금 수행해도 안전한지 확인해 주세요.** + Table: + _value: |+ + | 값 이름 | 이 기기 | 원격 | + |: --- |: ---- :|: ---- :| + ${rows} + + Row: "| ${name} | ${self} | ${remote} |" + Title: + _value: 구성 불일치 감지 + TweakResolving: 구성 불일치 감지 + UseRemoteConfig: 원격 구성 사용 +Unique name between all synchronized devices. To edit this setting, please disable customization sync once.: 모든 동기화된 기기 간 고유 이름입니다. 이 설정을 편집하려면 사용자 설정 동기화를 한 번 비활성화해 주세요. +Use a custom passphrase: 사용자 지정 암호문구 사용 +Use Custom HTTP Handler: 커스텀 HTTP 핸들러 사용 +Use dynamic iteration count: 동적 반복 횟수 사용 +Use Segmented-splitter: 의미 기반 분할 사용 +Use splitting-limit-capped chunk splitter: 분할 제한 상한 청크 분할기 사용 +Use the trash bin: 휴지통 사용 +Use timeouts instead of heartbeats: 하트비트 대신 타임아웃 사용 +username: 사용자명 +Username: 사용자명 +Verbose Log: 자세한 로그 +Verify all: 모두 검증 +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.: + 경고! 이는 성능에 심각한 영향을 미칩니다. 로그는 기본 이름으로 동기화되지 않습니다. 로그에는 종종 기밀 정보가 포함되어 있으므로 주의해 + 주세요. +We cannot change the device name while this feature is enabled. Please disable this feature to change the device name.: 이 기능이 활성화되어 있는 동안에는 장치 이름을 변경할 수 없습니다. 장치 이름을 변경하려면 이 기능을 비활성화하세요. +When you save a file in the editor, start a sync automatically: 편집기에서 파일을 저장할 때 자동으로 동기화를 시작합니다 +Write credentials in the file: 파일에 자격 증명 저장 +Write logs into the file: 파일에 로그 기록 +xxhash32 (Fast but less collision resistance): xxhash32 (빠르지만 충돌 저항성은 낮음) +xxhash64 (Fastest): xxhash64 (가장 빠름) +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.: + 최신 버전이 아닌 모든 리비전을 제거하여 저장 공간을 줄입니다. 이 작업을 수행하려면 원격 서버와 로컬 클라이언트에 동일한 양의 여유 공간이 필요합니다. +Rerun Onboarding Wizard: 온보딩 마법사 다시 실행 +Rerun the onboarding wizard to set up Self-hosted LiveSync again.: 온보딩 마법사를 다시 실행하여 Self-hosted LiveSync를 다시 설정합니다. +Rerun Wizard: 마법사 다시 실행 +Run Doctor: 진단 실행 +Scan for Broken files: 손상된 파일 검사 +Prepare the 'report' to create an issue: 이슈 생성을 위한 '보고서' 준비 +Copy Report to clipboard: 보고서를 클립보드에 복사 +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.: + 데이터베이스 사용량을 분석하고 직접 진단할 수 있도록 TSV 보고서를 생성합니다. 생성된 보고서는 원하는 스프레드시트에 붙여 넣어 확인할 수 있습니다. +Reset notification threshold and check the remote database usage: 알림 임계값을 초기화하고 원격 데이터베이스 사용량 확인 +Reset the remote storage size threshold and check the remote storage size again.: 원격 저장소 크기 임계값을 초기화하고 원격 저장소 크기를 다시 확인합니다. +Scram Switches: 긴급 전환 스위치 +Minimum interval for syncing: 동기화 최소 간격 +The minimum interval for automatic synchronisation on event.: 이벤트 발생 시 자동 동기화의 최소 간격입니다. +"Welcome to Self-hosted LiveSync": "Self-hosted LiveSync에 오신 것을 환영합니다" +"We will now guide you through a few questions to simplify the synchronisation setup.": "동기화 설정을 더 쉽게 진행할 수 있도록 몇 가지 질문으로 안내해 드리겠습니다。" +"First, please select the option that best describes your current situation.": "먼저 현재 상황에 가장 잘 맞는 항목을 선택해 주세요。" +"I am setting this up for the first time": "처음으로 설정합니다" +"(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.": "(이 장치를 첫 번째 동기화 장치로 설정하는 경우 선택하세요.) LiveSync를 처음 사용하며 처음부터 설정하려는 경우에 적합합니다。" +"I am adding a device to an existing synchronisation setup": "기존 동기화 구성에 장치를 추가합니다" +"(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.": "(다른 컴퓨터나 스마트폰에서 이미 동기화를 사용 중인 경우 선택하세요.) 이 장치를 기존 LiveSync 구성에 추가하려는 경우에 적합합니다。" +"Yes, I want to set up a new synchronisation": "예, 새 동기화를 설정하겠습니다" +"Yes, I want to add this device to my existing synchronisation": "예, 이 장치를 기존 동기화에 추가하겠습니다" +"No, please take me back": "아니요, 이전으로 돌아가겠습니다" +"Device Setup Method": "장치 설정 방법" +"You are adding this device to an existing synchronisation setup.": "이 장치를 기존 동기화 구성에 추가하려고 합니다。" +"Please select a method to import the settings from another device.": "다른 장치에서 설정을 가져올 방법을 선택해 주세요。" +"Use a Setup URI (Recommended)": "설정 URI 사용(권장)" +"Paste the Setup URI generated from one of your active devices.": "현재 사용 중인 장치 중 하나에서 생성한 설정 URI를 붙여 넣으세요。" +"Scan a QR Code (Recommended for mobile)": "QR 코드 스캔(모바일 권장)" +"Scan the QR code displayed on an active device using this device's camera.": "이 장치의 카메라로 활성 장치에 표시된 QR 코드를 스캔하세요。" +"Enter the server information manually": "서버 정보를 수동으로 입력" +"Configure the same server information as your other devices again, manually, very advanced users only.": "다른 장치와 동일한 서버 정보를 다시 수동으로 입력합니다. 고급 사용자 전용입니다。" +"Proceed with Setup URI": "설정 URI로 계속" +"I know my server details, let me enter them": "서버 정보를 알고 있으니 직접 입력하겠습니다" +"Please select an option to proceed": "계속하려면 항목을 선택해 주세요" +"Connection Method": "연결 방법" +"We will now proceed with the server configuration.": "이제 서버 구성을 진행하겠습니다。" +"How would you like to configure the connection to your server?": "서버 연결을 어떻게 구성하시겠습니까?" +"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.": "설정 URI는 서버 주소와 인증 정보를 포함한 단일 문자열입니다. 서버 설치 스크립트가 URI를 생성했다면 이를 사용하면 간단하고 안전하게 구성할 수 있습니다。" +"This is an advanced option for users who do not have a URI or who wish to configure detailed settings.": "URI가 없거나 세부 설정을 직접 구성하려는 사용자를 위한 고급 옵션입니다。" +"Enter Server Information": "서버 정보 입력" +"Please select the type of server to which you are connecting.": "연결할 서버 유형을 선택해 주세요。" +"Continue to CouchDB setup": "CouchDB 설정으로 계속" +"Continue to S3/MinIO/R2 setup": "S3/MinIO/R2 설정으로 계속" +"Continue to Peer-to-Peer only setup": "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.": "이 설계에 가장 적합한 동기화 방식입니다. 모든 기능을 사용할 수 있습니다. CouchDB 인스턴스를 미리 구성해야 합니다。" +"S3/MinIO/R2 Object Storage": "S3/MinIO/R2 객체 스토리지" +"Synchronisation utilising journal files. You must have set up an S3/MinIO/R2 compatible object storage.": "저널 파일을 활용하는 동기화 방식입니다. S3/MinIO/R2 호환 객체 스토리지를 미리 구성해야 합니다。" +"Peer-to-Peer only": "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.": "이 기능은 장치 간 직접 동기화를 제공합니다. 서버는 필요 없지만 동기화가 이루어지려면 두 장치가 동시에 온라인 상태여야 하며 일부 기능은 제한될 수 있습니다. 인터넷 연결은 시그널링(피어 감지)에만 필요하며 데이터 전송 자체에는 필요하지 않습니다。" diff --git a/src/common/messagesYAML/ru.yaml b/src/common/messagesYAML/ru.yaml new file mode 100644 index 00000000..665f84b9 --- /dev/null +++ b/src/common/messagesYAML/ru.yaml @@ -0,0 +1,1107 @@ +(Active): (Активна) +(BETA) Always overwrite with a newer file: (БЕТА) Всегда перезаписывать более новым файлом +(Beta) Use ignore files: (Бета) Использовать файлы игнорирования +(Days passed, 0 to disable automatic-deletion): (Дней прошло, 0 для отключения автоматического удаления) +(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): (Мега символов) +(Not recommended) If set, credentials will be stored in the file: (Не рекомендуется) Если установлено, учётные данные будут сохранены в файле +(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: (Устарело) Использовать старый адаптер для совместимости +(RegExp) Empty to sync all files. Set filter as a regular expression to limit synchronising files.: + (RegExp) Оставьте пустым, чтобы синхронизировать все файлы. Укажите регулярное + выражение, чтобы ограничить синхронизируемые файлы. +(RegExp) If this is set, any changes to local and remote files that match this will be skipped.: + (RegExp) Если задано, любые изменения локальных и удалённых файлов, + соответствующих этому шаблону, будут пропускаться. +Access Key: Ключ доступа +Activate: Активировать +Active Remote Configuration: Активная удалённая конфигурация +Add default patterns: Добавить шаблоны по умолчанию +Add new connection: Добавить подключение +Always prompt merge conflicts: Всегда запрашивать разрешение конфликтов слияния +Analyse: Анализировать +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.: + Проанализируйте использование базы данных и создайте TSV-отчёт для самостоятельной диагностики. Полученный отчёт можно вставить в любую удобную для вас таблицу. +Apply Latest Change if Conflicting: Применить последнее изменение при конфликте +Apply preset configuration: Применить предустановленную конфигурацию +Ask a passphrase at every launch: Запрашивать парольную фразу при каждом запуске +Automatically Sync all files when opening Obsidian.: Автоматически синхронизировать все файлы при открытии Obsidian. +Back: Назад +Back to non-configured: Вернуть в состояние без настройки +Batch database update: Пакетное обновление базы данных +Batch limit: Пакетный лимит +Batch size: Размер пакета +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.: + До v0.17.16 мы использовали старый адаптер для локальной базы данных. Теперь + предпочтителен новый адаптер. Однако требуется перестроение локальной базы + данных. +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. +Bucket Name: Имя бакета +Cancel: Отмена +Check: Проверить +Check and convert non-path-obfuscated files: Проверить и преобразовать файлы без обфускации пути +Check for documents that have not been converted to path-obfuscated IDs and convert them if necessary.: + Проверяет документы, которые ещё не были преобразованы в path-obfuscated ID, и + при необходимости преобразует их. +cmdConfigSync: + showCustomizationSync: Показать синхронизацию настроек +Comma separated `.gitignore, .dockerignore`: Через запятую `.gitignore, .dockerignore` +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 (Database structure): Совместимость (структура базы данных) +Compatibility (Internal API Usage): Совместимость (использование внутреннего API) +Compatibility (Metadata): Совместимость (метаданные) +Compatibility (Remote Database): Совместимость (удалённая база данных) +Compatibility (Trouble addressed): Совместимость (исправленные проблемы) +Compute revisions for chunks: Вычислять ревизии для чанков +Configuration Encryption: Шифрование конфигурации +Configure: Настроить +Configure And Change Remote: Настроить и переключить удалённое хранилище +Configure E2EE: Настроить сквозное шифрование +Configure Remote: Настроить удалённое хранилище +Copy: Копировать +Copy Report to clipboard: Копировать отчёт в буфер обмена +CouchDB Connection Tweak: Настройки подключения CouchDB +Cross-platform: Кроссплатформенные +"Current adapter: {adapter}": "Текущий адаптер: {adapter}" +Customization Sync: Синхронизация настроек +Customization Sync (Beta3): Синхронизация настроек (Beta3) +Data Compression: Сжатие данных +Database Adapter: Адаптер базы данных +Database Name: Имя базы данных +Database suffix: Суффикс базы данных +Default: По умолчанию +Delay conflict resolution of inactive files: Отложить разрешение конфликтов для неактивных файлов +Delay merge conflict prompt for inactive files.: Отложить запрос конфликта слияния для неактивных файлов. +Delete: Удалить +Delete all customization sync data: Удалить все данные синхронизации настроек +Delete all data on the remote server.: Удалить все данные на удалённом сервере. +Delete local database to reset or uninstall Self-hosted LiveSync: Удалить локальную базу данных, чтобы сбросить или удалить Self-hosted LiveSync +Delete old metadata of deleted files on start-up: Удалять старые метаданные удалённых файлов при запуске +Delete Remote Configuration: Удалить удалённую конфигурацию +Delete remote configuration '{name}'?: Удалить удалённую конфигурацию '{name}'? +descConnectSetupURI: Это рекомендуемый способ настройки Self-hosted LiveSync с помощью Setup URI. +descCopySetupURI: Идеально для настройки нового устройства! +descEnableLiveSync: Включайте это только после настройки одного из двух вариантов выше. +descFetchConfigFromRemote: Загрузить необходимые настройки с уже настроенного удалённого сервера. +descManualSetup: Не рекомендуется, но полезно, если у вас нет Setup URI +descTestDatabaseConnection: Открыть подключение к базе данных. +descValidateDatabaseConfig: Проверяет и исправляет потенциальные проблемы с конфигурацией базы данных. +desktop: рабочий стол +Developer: Разработчик +Device name: Имя устройства +dialog: + yourLanguageAvailable: + _value: >- + Self-hosted LiveSync имеет переводы для вашего языка, поэтому была + включена настройка языка Display language. + + + Примечание: Не все сообщения переведены. Мы ждём ваших предложений! + + Примечание 2: При создании Issue, пожалуйста, вернитесь к lang-def, затем + сделайте скриншоты, сообщения и логи. Это можно сделать в настройках. + + Надеемся, вам будет удобно использовать! + btnRevertToDefault: Оставить lang-def + Title: Доступен перевод! +Disables all synchronization and restart.: Отключает всю синхронизацию и перезапускает приложение. +Disables logging, only shows notifications. Please disable if you report an issue.: + Отключает логирование, показывает только уведомления. Пожалуйста, отключите + при сообщении о проблеме. +Display Language: Язык интерфейса +Display name: Отображаемое имя +Do not check configuration mismatch before replication: Не проверять несовпадение конфигурации перед репликацией +Do not keep metadata of deleted files.: Не хранить метаданные удалённых файлов. +Do not split chunks in the background: Не разделять чанки в фоновом режиме +Do not use internal API: Не использовать внутренний API +Doctor: + Button: + DismissThisVersion: Нет, и не спрашивать до следующего выпуска + Fix: Исправить + FixButNoRebuild: Исправить без перестроения + No: Нет + Skip: Оставить как есть + Yes: Да + Dialogue: + Main: >- + Привет! Диагностика настроек активирована из-за activateReason! + + К сожалению, некоторые настройки были обнаружены как потенциальные + проблемы. + + Не волнуйтесь. Давайте решим их по очереди. + + + Сообщаем вам заранее, мы спросим о следующих пунктах. + + + issues + + + Начнём? + MainFix: |- + name + + | Текущее | Идеальное | + |:---:|:---:| + | current | ideal | + + **Уровень рекомендации:** level + + ### Почему это было обнаружено? + + reason + + note + + Исправить на идеальное значение? + Title: Диагностика Self-hosted LiveSync + TitleAlmostDone: Почти готово! + TitleFix: Исправление проблемы current/total + Level: + Must: Обязательно + Necessary: Необходимо + Optional: Опционально + Recommended: Рекомендуется + Message: + NoIssues: Проблем не обнаружено! + RebuildLocalRequired: Внимание! Для применения требуется перестроение локальной базы данных! + RebuildRequired: Внимание! Для применения требуется перестроение! + SomeSkipped: Некоторые проблемы оставлены как есть. Спросить снова при следующем + запуске? + RULES: + E2EE_V02500: + REASON: Сквозное шифрование стало более надёжным и быстрым. Предыдущее E2EE было + скомпрометировано. Следует применить как можно скорее. +Duplicate: Дублировать +Duplicate remote: Дублировать удалённую конфигурацию +E2EE Configuration: Конфигурация сквозного шифрования +Edge case addressing (Behaviour): Обработка особых случаев (поведение) +Edge case addressing (Database): Обработка особых случаев (база данных) +Edge case addressing (Processing): Обработка особых случаев (обработка) +Emergency restart: Аварийный перезапуск +Enable advanced features: Включить расширенные функции +Enable customization sync: Включить синхронизацию настроек +Enable Developers' Debug Tools.: Включить инструменты разработчика. +Enable edge case treatment features: Включить функции обработки граничных случаев +Enable poweruser features: Включить функции для опытных пользователей +Enable this if your Object Storage doesn't support CORS: Включите, если ваше объектное хранилище не поддерживает CORS +Enable this option to automatically apply the most recent change to documents even when it conflicts: + Включите эту опцию для автоматического применения последних изменений к + документам даже при конфликте +Encrypt contents on the remote database. If you use the plugin's synchronization feature, enabling this is recommended.: + Шифровать содержимое на удалённой базе данных. Рекомендуется включить при + использовании функции синхронизации плагина. +Encrypting sensitive configuration items: Шифрование конфиденциальных настроек +Encryption phassphrase. If changed, you should overwrite the server's database with the new (encrypted) files.: + Парольная фраза шифрования. При изменении нужно перезаписать базу данных + сервера новыми (зашифрованными) файлами. +End-to-End Encryption: Сквозное шифрование +Endpoint URL: URL конечной точки +Enhance chunk size: Улучшить размер чанка +Export: Экспорт +Fetch: Получить +Fetch chunks on demand: Загружать чанки по требованию +Fetch database with previous behaviour: Загрузить базу данных с предыдущим поведением +Fetch remote settings: Получить настройки с удалённого хранилища +File to resolve conflict: Файл для разрешения конфликта +Filename: Имя файла +Flag and restart: Пометить и перезапустить +Forces the file to be synced when opened.: Принудительно синхронизировать файл при открытии. +Fresh Start Wipe: Полный сброс для чистого старта +Garbage Collection V3 (Beta): Сборка мусора V3 (Beta) +Handle files as Case-Sensitive: Обрабатывать файлы с учётом регистра +Hidden Files: Скрытые файлы +How to display network errors when the sync server is unreachable.: + Определяет, как отображать сетевые ошибки, если сервер синхронизации + недоступен. +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.: + Если включено, будет использоваться эффективная синхронизация настроек для + каждого файла. +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.: Если включено, чанки будут разделены не более чем на 100 элементов. +If enabled, newly created chunks are temporarily kept within the document, and graduated to become independent chunks once stabilised.: Если включено, вновь созданные чанки временно хранятся в документе. +If enabled, the ⛔ icon will be shown inside the status instead of the file warnings banner. No details will be shown.: Если включено, значок будет показан внутри статуса. +If enabled, the file under 1kb will be processed in the UI thread.: Если включено, файлы меньше 1КБ будут обрабатываться в основном потоке. +If enabled, the notification of hidden files change will be suppressed.: Если включено, уведомление об изменении скрытых файлов будет подавлено. +If this enabled, all chunks will be stored with the revision made from its content. (Previous behaviour): Если включено, все чанки будут храниться с ревизией из содержимого. +If this enabled, All files are handled as case-Sensitive (Previous behaviour).: Если включено, все файлы обрабатываются с учётом регистра. +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.: Если установлено, изменения файлов из списка игнорирования будут пропущены. +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.: Если эта опция включена, PouchDB будет держать соединение открытым 60 секунд. +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. +Ignore files: Файлы для игнорирования +Ignore patterns: Шаблоны исключения +Import connection: Импортировать подключение +Incubate Chunks in Document: Инкубировать чанки в документе +Initialise all journal history, On the next sync, every item will be received and sent.: + Инициализирует всю историю журнала. При следующей синхронизации каждый элемент + будет заново получен и отправлен. +Interval (sec): Интервал (сек) +K: + exp: Экспериментальная + long_p2p_sync: title_p2p_sync + P2P: Peer-к-Peer + Peer: Устройство + ScanCustomization: Scan customization + short_p2p_sync: P2P Синхр. + title_p2p_sync: Синхронизация между устройствами +Keep empty folder: Сохранять пустые папки +lang_def: По умолчанию +lang-de: Deutsch +lang-def: lang_def +lang-es: Español +lang-fr: Français +lang-ja: 日本語 +lang-ko: 한국어 +lang-ru: Русский +lang-zh: 简体中文 +lang-zh-tw: 繁體中文 +Later: Позже +"Limit: {datetime} ({timestamp})": "Лимит: {datetime} ({timestamp})" +LiveSync could not handle multiple vaults which have same name without different prefix, This should be automatically configured.: + LiveSync не может обработать несколько хранилищ с одинаковым именем без разных + префиксов. +liveSyncReplicator: + beforeLiveSync: Перед LiveSync запускаем OneShot... + cantReplicateLowerValue: Нельзя реплицировать с меньшим значением. + checkingLastSyncPoint: Поиск последней точки синхронизации. + couldNotConnectTo: |- + Не удалось подключиться к uri : name + (db) + couldNotConnectToRemoteDb: "Не удалось подключиться к удалённой базе данных: d" + couldNotConnectToServer: Не удалось подключиться к серверу. + couldNotConnectToURI: Не удалось подключиться к uri:dbRet + couldNotMarkResolveRemoteDb: Не удалось отметить удалённую базу данных как разрешённую. + liveSyncBegin: Начало LiveSync... + lockRemoteDb: Блокировка удалённой базы данных для предотвращения повреждения данных + markDeviceResolved: Отметить это устройство как «разрешённое». + oneShotSyncBegin: Начало OneShot синхронизации... (syncMode) + remoteDbCorrupted: Удалённая база данных новее или повреждена, убедитесь, что + установлена последняя версия self-hosted-livesync + remoteDbCreatedOrConnected: Удалённая база данных создана или подключена + remoteDbDestroyed: Удалённая база данных уничтожена + remoteDbDestroyError: "Произошла ошибка при уничтожении удалённой базы данных:" + remoteDbMarkedResolved: Удалённая база данных отмечена как разрешённая. + replicationClosed: Репликация закрыта + replicationInProgress: Репликация уже выполняется + retryLowerBatchSize: "Повтор с меньшим размером пакета: batch_size/batches_limit" + unlockRemoteDb: Разблокировка удалённой базы данных для предотвращения повреждения данных +liveSyncSetting: + errorNoSuchSettingItem: "Такого параметра настройки не существует: key" + originalValue: "Оригинал: value" + valueShouldBeInRange: Значение должно быть min < значение < max +liveSyncSettings: + btnApply: Применить +Local Database Tweak: Настройки локальной базы данных +Lock: Заблокировать +Lock Server: Заблокировать сервер +Lock the remote server to prevent synchronization with other devices.: + Блокирует удалённый сервер, чтобы запретить синхронизацию с другими + устройствами. +logPane: + autoScroll: Автопрокрутка + logWindowOpened: Окно лога открыто + pause: Пауза + title: Лог Self-hosted LiveSync + wrap: Перенос +Maximum delay for batch database updating: Максимальная задержка пакетного обновления базы данных +Maximum file size: Максимальный размер файла +Maximum Incubating Chunk Size: Максимальный размер инкубируемого чанка +Maximum Incubating Chunks: Максимальное количество инкубируемых чанков +Maximum Incubation Period: Максимальный период инкубации +MB (0 to disable).: МБ (0 для отключения). +Memory cache: Кэш в памяти +Memory cache size (by total characters): Размер кэша памяти (по общему количеству символов) +Memory cache size (by total items): Размер кэша памяти (по общему количеству элементов) +Merge: Объединить +Minimum delay for batch database updating: Минимальная задержка пакетного обновления базы данных +Minimum interval for syncing: Минимальный интервал синхронизации +moduleCheckRemoteSize: + logCheckingStorageSizes: Проверка размеров хранилища + logCurrentStorageSize: "Размер удалённого хранилища: measuredSize" + logExceededWarning: "Размер удалённого хранилища: measuredSize превысил notifySize" + logThresholdEnlarged: Порог увеличен до sizeМБ + msgConfirmRebuild: Это может занять некоторое время. Вы действительно хотите + перестроить всё сейчас? + msgDatabaseGrowing: Ваша база данных увеличивается! Но не волнуйтесь, мы можем решить это сейчас. + msgSetDBCapacity: Можно установить предупреждение о максимальной ёмкости базы данных. + option2GB: 2ГБ (Стандарт) + option800MB: 800МБ (Cloudant, fly.io) + optionAskMeLater: Спросить позже + optionDismiss: Отклонить + optionIncreaseLimit: увеличить до newMaxМБ + optionNoWarn: Нет, не уведомлять + optionRebuildAll: Перестроить всё сейчас + titleDatabaseSizeLimitExceeded: Размер удалённого хранилища превысил лимит + titleDatabaseSizeNotify: Настройка уведомления о размере базы данных +moduleInputUIObsidian: + defaultTitleConfirmation: Подтверждение + defaultTitleSelect: Выбор + optionNo: Нет + optionYes: Да +moduleLiveSyncMain: + logAdditionalSafetyScan: Дополнительная проверка безопасности... + logLoadingPlugin: Загрузка плагина... + logPluginInitCancelled: Инициализация плагина отменена модулем + logPluginVersion: Self-hosted LiveSync vmanifestVersion packageVersion + logReadChangelog: LiveSync обновлён, пожалуйста, прочитайте список изменений! + logSafetyScanCompleted: Дополнительная проверка безопасности завершена + logSafetyScanFailed: Дополнительная проверка безопасности не удалась в модуле + logUnloadingPlugin: Выгрузка плагина... + logVersionUpdate: LiveSync обновлён. В случае критических изменений + автоматическая синхронизация временно отключена. Убедитесь, что все + устройства обновлены перед включением. + msgScramEnabled: > + Self-hosted LiveSync has been configured to ignore some events. Is this + correct? + + + | Type | Status | Note | + + |:---:|:---:|---| + + | Storage Events | ${fileWatchingStatus} | Every modification will be + ignored | + + | Database Events | ${parseReplicationStatus} | Every synchronised change + will be postponed | + + + Do you want to resume them and restart Obsidian? + + + > [!DETAILS]- + + > These flags are set by the plug-in while rebuilding, or fetching. If the + process ends abnormally, it may be kept unintended. + + > If you are not sure, you can try to rerun these processes. Make sure to + back your vault up. + optionKeepLiveSyncDisabled: Оставить LiveSync отключённым + optionResumeAndRestart: Продолжить и перезапустить Obsidian + titleScramEnabled: Экстренная остановка включена +moduleLocalDatabase: + logWaitingForReady: Ожидание готовности... +moduleLog: + showLog: Показать лог +moduleMigration: + docUri: https://github.com/vrtmrz/obsidian-livesync/blob/main/README.md#how-to-use + fix0256: + buttons: + checkItLater: Проверить позже + DismissForever: Исправлено, больше не спрашивать + fix: Исправить + message: Из-за недавней ошибки некоторые файлы могут быть неправильно сохранены. + messageUnrecoverable: "Файлы не могут быть исправлены на этом устройстве:" + title: Обнаружены повреждённые файлы + insecureChunkExist: + buttons: + fetch: Я уже перестроил удалённую. Загрузить с удалённой + later: Сделаю позже + rebuild: Перестроить всё + laterMessage: Мы настоятельно рекомендуем обработать это как можно скорее! + message: Некоторые чанки хранятся небезопасно. Пожалуйста, перестройте базу данных. + title: Обнаружены небезопасные чанки! + logBulkSendCorrupted: Отправка чанков пакетами была включена, но эта функция + была повреждена. Приносим извинения. Автоматически отключено. + logFetchRemoteTweakFailed: Не удалось загрузить удалённые настройки + logLocalDatabaseNotReady: Что-то пошло не так! Локальная база данных не готова + logMigratedSameBehaviour: Миграция на db:current с тем же поведением, что и раньше + logMigrationFailed: Миграция не удалась или отменена с old на current + logRedflag2CreationFail: Не удалось создать redflag2 + logRemoteTweakUnavailable: Не удалось получить удалённые настройки + logSetupCancelled: Настройка отменена, Self-hosted LiveSync ожидает вашей настройки! + msgFetchRemoteAgain: Удалённая база данных, похоже, уже была мигрирована. + Конфигурация этого устройства несовместима. + msgInitialSetup: Ваше устройство ещё не настроено. У вас есть Setup URI? + msgRecommendSetupUri: Мы рекомендуем сгенерировать Setup URI. + msgSinceV02321: Начиная с v0.23.21, self-hosted LiveSync изменил поведение и + структуру базы данных. + optionAdjustRemote: Настроить под удалённую + optionDecideLater: Решить позже + optionEnableBoth: Включить оба + optionEnableFilenameCaseInsensitive: "Включить только #1" + optionEnableFixedRevisionForChunks: "Включить только #2" + optionHaveSetupUri: Да, есть + optionKeepPreviousBehaviour: Сохранить предыдущее поведение + optionManualSetup: Настроить всё вручную + optionNoAskAgain: Нет, спросить снова + optionNoSetupUri: Нет, нет + optionRemindNextLaunch: Напомнить при следующем запуске + optionSetupViaP2P: Использовать short_p2p_sync для настройки + optionSetupWizard: Перейти в мастер настройки + optionYesFetchAgain: Да, загрузить снова + titleCaseSensitivity: Чувствительность к регистру + titleRecommendSetupUri: Рекомендация использовать Setup URI + titleWelcome: Добро пожаловать в Self-hosted LiveSync +moduleObsidianMenu: + replicate: Реплицировать +More actions: Другие действия +Move remotely deleted files to the trash, instead of deleting.: Перемещать удалённые на удалённом сервере файлы в корзину вместо удаления. +Network warning style: Стиль сетевого предупреждения +New Remote: Новое удалённое хранилище +No limit configured: Лимит не задан +Non-Synchronising files: Несинхронизируемые файлы +Normal Files: Обычные файлы +Not all messages have been translated. And, please revert to "Default" when reporting errors.: + Не все сообщения переведены. И, пожалуйста, вернитесь к «По умолчанию» при + сообщении об ошибках. +Notify all setting files: Уведомлять обо всех файлах настроек +Notify customized: Уведомлять о настройках +Notify when other device has newly customized.: Уведомлять, когда другое устройство изменило настройки. +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.: Количество пакетов для обработки за раз. По умолчанию 40. Минимум 2. +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.: Количество изменений для синхронизации за раз. По умолчанию 50. Минимум 2. +obsidianLiveSyncSettingTab: + btnApply: Применить + btnCheck: Проверить + btnCopy: Копировать + btnDisable: Отключить + btnDiscard: Отменить + btnEnable: Включить + btnFix: Исправить + btnGotItAndUpdated: Понял и обновил. + btnNext: Далее + btnStart: Старт + btnTest: Тест + btnUse: Использовать + buttonFetch: Загрузить + buttonNext: Далее + defaultLanguage: По умолчанию + descConnectSetupURI: Это рекомендуемый способ настройки Self-hosted LiveSync с помощью Setup URI. + descCopySetupURI: Идеально подходит для настройки нового устройства! + descEnableLiveSync: Включайте это только после настройки одного из двух вариантов выше или после полного ручного завершения всей конфигурации. + descFetchConfigFromRemote: Получить необходимые настройки с уже настроенного удалённого сервера. + descManualSetup: Не рекомендуется, но полезно, если у вас нет Setup URI. + descTestDatabaseConnection: Открыть подключение к базе данных. Если удалённая база данных не найдена и у вас есть право на её создание, база будет создана. + descValidateDatabaseConfig: Проверяет и исправляет любые потенциальные проблемы в конфигурации базы данных. + errAccessForbidden: ❗ Доступ запрещён. + errCannotContinueTest: Мы не можем продолжить тест. + errCorsCredentials: ❗ cors.credentials неверно + errCorsNotAllowingCredentials: ❗ CORS не разрешает учётные данные + errCorsOrigins: ❗ cors.origins неверно + errEnableCors: ❗ httpd.enable_cors неверно + errEnableCorsChttpd: ❗ chttpd.enable_cors неверно + errMaxDocumentSize: ❗ couchdb.max_document_size низкое + errMaxRequestSize: ❗ chttpd.max_http_request_size низкое + errMissingWwwAuth: ❗ httpd.WWW-Authenticate отсутствует + errRequireValidUser: ❗ chttpd.require_valid_user неверно. + errRequireValidUserAuth: ❗ chttpd_auth.require_valid_user неверно. + labelDisabled: "⏹️ : Отключено" + labelEnabled: "🔁 : Включено" + levelAdvanced: " (Расширенные)" + levelEdgeCase: " (Граничные случаи)" + levelPowerUser: " (Опытный пользователь)" + linkOpenInBrowser: Открыть в браузере + linkPageTop: В начало страницы + linkTipsAndTroubleshooting: Советы и устранение неполадок + linkTroubleshooting: /docs/troubleshooting.md + logCannotUseCloudant: Эта функция недоступна для IBM Cloudant. + logCheckingConfigDone: Проверка конфигурации завершена + logCheckingConfigFailed: Проверка конфигурации не удалась + logCheckingDbConfig: Проверка конфигурации базы данных + logCheckPassphraseFailed: "ОШИБКА: Не удалось проверить пароль с удалённым сервером: db." + logConfiguredDisabled: "Настроенный режим синхронизации: ОТКЛЮЧЕН" + logConfiguredLiveSync: "Настроенный режим синхронизации: LiveSync" + logConfiguredPeriodic: "Настроенный режим синхронизации: Периодический" + logCouchDbConfigFail: "Конфигурация CouchDB: title не удалась" + logCouchDbConfigSet: "Конфигурация CouchDB: title -> Установить key в value" + logCouchDbConfigUpdated: "Конфигурация CouchDB: title успешно обновлена" + logDatabaseConnected: База данных подключена + logEncryptionNoPassphrase: Вы не можете включить шифрование без парольной фразы + logEncryptionNoSupport: Ваше устройство не поддерживает шифрование. + logErrorOccurred: Произошла ошибка!! + logEstimatedSize: "Примерный размер: size" + logPassphraseInvalid: Парольная фраза недействительна, пожалуйста, исправьте. + logPassphraseNotCompatible: "ОШИБКА: Парольная фраза несовместима с удалённым сервером!" + logRebuildNote: Синхронизация отключена, загрузите и включите снова при желании. + logSelectAnyPreset: Выберите любой пресет. + msgAreYouSureProceed: Вы уверены, что хотите продолжить? + msgChangesNeedToBeApplied: Изменения нужно применить! + msgConfigCheck: --Проверка конфигурации-- + msgConfigCheckFailed: Проверка конфигурации не удалась. Вы всё равно хотите продолжить? + msgConnectionCheck: --Проверка подключения-- + msgConnectionProxyNote: Если у вас проблемы с проверкой подключения, проверьте + конфигурацию обратного прокси. + msgCurrentOrigin: "Текущий origin: origin" + msgDiscardConfirmation: Вы действительно хотите отменить существующие настройки и базы данных? + msgDone: --Готово-- + msgEnableCors: Установить httpd.enable_cors + msgEnableCorsChttpd: Установить chttpd.enable_cors + msgEnableEncryptionRecommendation: Мы рекомендуем включить сквозное шифрование. + Вы уверены, что хотите продолжить без шифрования? + msgFetchConfigFromRemote: Вы хотите загрузить конфигурацию с удалённого сервера? + msgGenerateSetupURI: Всё готово! Вы хотите сгенерировать Setup URI для настройки других устройств? + msgIfConfigNotPersistent: Если конфигурация сервера непостоянна, значения здесь могут измениться. + msgInvalidPassphrase: Ваша парольная фраза шифрования может быть недействительна. + msgNewVersionNote: Вы пришли из-за уведомления об обновлении? Просмотрите историю версий. + msgNonHTTPSInfo: Настроено как не-HTTPS URI. Это может не работать на мобильных устройствах. + msgNonHTTPSWarning: Не удаётся подключиться к не-HTTPS URI. Обновите конфигурацию. + msgNotice: ---Уведомление--- + msgObjectStorageWarning: "ПРЕДУПРЕЖДЕНИЕ: Эта функция в разработке." + msgOriginCheck: "Проверка origin: org" + msgRebuildRequired: Требуется перестроение баз данных для применения изменений. + msgSelectAndApplyPreset: Выберите и примените любой пресет для завершения мастера. + msgSetCorsCredentials: Установить cors.credentials + msgSetCorsOrigins: Установить cors.origins + msgSetMaxDocSize: Установить couchdb.max_document_size + msgSetMaxRequestSize: Установить chttpd.max_http_request_size + msgSetRequireValidUser: Установить chttpd.require_valid_user = true + msgSetRequireValidUserAuth: Установить chttpd_auth.require_valid_user = true + msgSettingModified: Настройка setting была изменена с другого устройства. + msgSettingsUnchangeableDuringSync: Эти настройки нельзя изменить во время синхронизации. + msgSetWwwAuth: Установить httpd.WWW-Authenticate + nameApplySettings: Применить настройки + nameConnectSetupURI: Подключиться через Setup URI + nameCopySetupURI: Копировать текущие настройки в Setup URI + nameDisableHiddenFileSync: Отключить синхронизацию скрытых файлов + nameDiscardSettings: Отменить существующие настройки и базы данных + nameEnableHiddenFileSync: Включить синхронизацию скрытых файлов + nameEnableLiveSync: Включить LiveSync + nameHiddenFileSynchronization: Синхронизация скрытых файлов + nameManualSetup: Ручная настройка + nameTestConnection: Тест подключения + nameTestDatabaseConnection: Тест подключения к базе данных + nameValidateDatabaseConfig: Проверить конфигурацию базы данных + okAdminPrivileges: ✔ У вас есть права администратора. + okCorsCredentials: ✔ cors.credentials в порядке. + okCorsCredentialsForOrigin: CORS учётные данные в порядке + okCorsOriginMatched: ✔ CORS origin в порядке + okCorsOrigins: ✔ cors.origins в порядке. + okEnableCors: ✔ httpd.enable_cors в порядке. + okEnableCorsChttpd: ✔ chttpd.enable_cors в порядке. + okMaxDocumentSize: ✔ couchdb.max_document_size в порядке. + okMaxRequestSize: ✔ chttpd.max_http_request_size в порядке. + okRequireValidUser: ✔ chttpd.require_valid_user в порядке. + okRequireValidUserAuth: ✔ chttpd_auth.require_valid_user в порядке. + okWwwAuth: ✔ httpd.WWW-Authenticate в порядке. + optionApply: Применить + optionCancel: Отмена + optionCouchDB: CouchDB + optionDisableAllAutomatic: Отключить всё автоматическое + optionFetchFromRemote: Загрузить с удалённого + optionHere: ЗДЕСЬ + optionLiveSync: Синхронизация LiveSync + optionMinioS3R2: Minio,S3,R2 + optionOkReadEverything: ОК, я всё прочитал. + optionOnEvents: По событиям + optionPeriodicAndEvents: Периодически и по событиям + optionPeriodicWithBatch: Периодически с пакетами + optionRebuildBoth: Перестроить оба с этого устройства + optionSaveOnlySettings: (Опасно) Сохранить только настройки + panelChangeLog: История изменений + panelGeneralSettings: Основные настройки + panelPrivacyEncryption: Конфиденциальность и шифрование + panelRemoteConfiguration: Удалённая конфигурация + panelSetup: Настройка + serverVersion: "Информация о сервере: info" + titleActiveRemoteServer: Активный удалённый сервер + titleAppearance: Внешний вид + titleConflictResolution: Разрешение конфликтов + titleCongratulations: Поздравляем! + titleCouchDB: Сервер CouchDB + titleDeletionPropagation: Распространение удалений + titleEncryptionNotEnabled: Шифрование не включено + titleEncryptionPassphraseInvalid: Парольная фраза шифрования недействительна + titleExtraFeatures: Включить дополнительные и расширенные функции + titleFetchConfig: Загрузить конфигурацию + titleFetchConfigFromRemote: Загрузить конфигурацию с удалённого сервера + titleFetchSettings: Загрузить настройки + titleHiddenFiles: Скрытые файлы + titleLogging: Логирование + titleMinioS3R2: MinIO, S3, R2 + titleNotification: Уведомления + titleOnlineTips: Онлайн советы + titleQuickSetup: Быстрая настройка + titleRebuildRequired: Требуется перестроение + titleRemoteConfigCheckFailed: Проверка удалённой конфигурации не удалась + titleRemoteServer: Удалённый сервер + titleReset: Сброс + titleSetupOtherDevices: Для настройки других устройств + titleSynchronizationMethod: Метод синхронизации + titleSynchronizationPreset: Пресет синхронизации + titleSyncSettings: Настройки синхронизации + titleSyncSettingsViaMarkdown: Синхронизация настроек через Markdown + titleUpdateThinning: Оптимизация обновлений + warnCorsOriginUnmatched: ⚠ CORS Origin не совпадает from->to + warnNoAdmin: ⚠ У вас нет прав администратора. +Ok: ОК +Old Algorithm: Старый алгоритм +Older fallback (Slow, W/O WebAssembly): Старый вариант fallback (медленный, без WebAssembly) +Open: Открыть +Open the dialog: Открыть диалог +Overwrite: Перезаписать +Overwrite patterns: Шаблоны перезаписи +Overwrite remote: Перезаписать удалённое хранилище +Overwrite remote with local DB and passphrase.: Перезаписать удалённое хранилище локальной БД и парольной фразой. +Overwrite Server Data with This Device's Files: Перезаписать данные сервера файлами с этого устройства +P2P: + AskPassphraseForDecrypt: Удалённое устройство предоставило конфигурацию. Введите + пароль для расшифровки. + AskPassphraseForShare: Удалённое устройство запрашивает эту конфигурацию. + Введите пароль для передачи. + DisabledButNeed: title_p2p_sync отключён. Вы действительно хотите включить? + FailedToOpen: Не удалось открыть P2P подключение к серверу сигнализации. + NoAutoSyncPeers: Автосинхронизируемые устройства не найдены. + NoKnownPeers: Устройства не обнаружены, ожидаем другие устройства... + Note: + description: Этот репликатор позволяет синхронизировать хранилище с другими + устройствами с использованием однорангового соединения. + important_note: P2P репликатор. + important_note_sub: Эта функция всё ещё на стадии разработки. Пожалуйста, + убедитесь, что ваши данные зарезервированы. + Summary: Что это за функция? (важные замечания) + NotEnabled: title_p2p_sync не включён. Мы не можем открыть новое подключение. + P2PReplication: P2P Репликация + PaneTitle: long_p2p_sync + ReplicatorInstanceMissing: P2P Sync репликатор не найден, возможно, не настроен. + SeemsOffline: Устройство name офлайн, пропущено. + SyncAlreadyRunning: P2P Sync уже запущен. + SyncCompleted: P2P Sync завершён. + SyncStartedWith: P2P Sync с name начат. +paneMaintenance: + markDeviceResolvedAfterBackup: Пометить устройство как обработанное после резервного копирования + remoteLockedAndDeviceNotAccepted: Удалённая база данных заблокирована, и это устройство ещё не одобрено. + remoteLockedResolvedDevice: Удалённая база данных заблокирована, но это устройство уже одобрено. + unlockDatabaseReady: Разблокировать базу данных +Passphrase: Парольная фраза +Passphrase of sensitive configuration items: Парольная фраза для конфиденциальных настроек +password: пароль +Password: Пароль +Paste a connection string: Вставить строку подключения +Path Obfuscation: Обфускация путей +Patterns to match files for overwriting instead of merging: Шаблоны для файлов, которые нужно перезаписывать вместо объединения +Patterns to match files for syncing: Шаблоны для файлов, которые нужно синхронизировать +Peer-to-Peer Synchronisation: Одноранговая синхронизация +Per-file-saved customization sync: Синхронизация настроек для каждого файла +Perform: Выполнить +Perform cleanup: Выполнить очистку +Perform Garbage Collection: Выполнить сборку мусора +Perform Garbage Collection to remove unused chunks and reduce database size.: + Выполняет сборку мусора, чтобы удалить неиспользуемые чанки и уменьшить размер + базы данных. +Periodic Sync interval: Интервал периодической синхронизации +Pick a file to resolve conflict: Выбрать файл для разрешения конфликта +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: Укажите имя этого устройства +Prepare the 'report' to create an issue: Подготовить «отчёт» для создания Issue +Presets: Пресеты +Process small files in the foreground: Обрабатывать маленькие файлы в основном потоке +Property Encryption: Шифрование свойств +PureJS fallback (Fast, W/O WebAssembly): Вариант PureJS (быстрый, без WebAssembly) +Purge all download/upload cache.: Очистить весь кэш загрузки/выгрузки. +Purge all journal counter: Очистить все счётчики журнала +Rebuild local and remote database with local files.: Перестроить локальную и удалённую базы данных на основе локальных файлов. +Rebuilding Operations (Remote Only): Операции перестроения (только удалённое хранилище) +Recreate all: Пересоздать всё +Recreate missing chunks for all files: Пересоздать отсутствующие чанки для всех файлов +RedFlag: + Fetch: + Method: + Desc: Как вы хотите загрузить? + FetchSafer: Создать локальную базу данных перед загрузкой + FetchSmoother: Создать локальные чанки перед загрузкой + FetchTraditional: Загрузить всё с удалённого + Title: Как вы хотите загрузить? + FetchRemoteConfig: + Buttons: + Cancel: Нет, использовать локальные настройки + Fetch: Да, загрузить и применить удалённые настройки + Message: Вы хотите загрузить и применить удалённые настройки? + Title: Загрузить удалённую конфигурацию +Reducing the frequency with which on-disk changes are reflected into the DB: Уменьшение частоты отражения изменений с диска в БД +Region: Регион +Remediation: Исправление +Remediation Setting Changed: Настройки исправления изменены +Remote Database Tweak (In sunset): Настройки удалённой базы данных (устаревает) +Remote Databases: Удалённые базы данных +Remote name: Имя удалённого хранилища +Remote server type: Тип удалённого сервера +Remote Type: Удалённый тип +Rename: Переименовать +Replicator: + Dialogue: + Locked: + Action: + Dismiss: Отмена для подтверждения + Fetch: Сбросить синхронизацию на этом устройстве + Unlock: Разблокировать удалённую базу данных + Message: + _value: Удалённая база данных заблокирована. Это связано с перестроением на + одном из устройств. + Fetch: Загрузка всего запланирована. Плагин будет перезапущен. + Unlocked: Удалённая база данных разблокирована. Повторите операцию. + Title: Заблокировано + Message: + Cleaned: Очистка базы данных в процессе. Репликация отменена + InitialiseFatalError: Репликатор недоступен, это фатальная ошибка. + Pending: Некоторые события файлов ожидают. Репликация отменена. + SomeModuleFailed: Репликация отменена из-за сбоя модуля + VersionUpFlash: Обновление обнаружено. Откройте настройки и проверьте историю изменений. +Requires restart of Obsidian: Требуется перезапуск Obsidian +Requires restart of Obsidian.: Требуется перезапуск Obsidian. +Rerun Onboarding Wizard: Перезапустить мастер настройки +Rerun the onboarding wizard to set up Self-hosted LiveSync again.: Перезапустить мастер настройки для повторной настройки Self-hosted LiveSync. +Rerun Wizard: Перезапустить мастер +Resend: Повторно отправить +Resend all chunks to the remote.: Повторно отправить все чанки в удалённое хранилище. +Reset: Сброс +Reset all: Сбросить всё +Reset all journal counter: Сбросить все счётчики журнала +Reset journal received history: Сбросить историю полученных записей журнала +Reset journal sent history: Сбросить историю отправленных записей журнала +Reset notification threshold and check the remote database usage: Сбросить порог уведомления и проверить использование удалённой базы данных +Reset received: Сбросить полученные +Reset sent history: Сбросить историю отправки +Reset Synchronisation information: Сбросить информацию о синхронизации +Reset Synchronisation on This Device: Сбросить синхронизацию на этом устройстве +Reset the remote storage size threshold and check the remote storage size again.: Сбросить порог размера удалённого хранилища и проверить размер хранилища снова. +Resolve All: Разрешить всё +Resolve all conflicted files: Разрешить все конфликтующие файлы +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.": + "Разрешает все конфликтующие файлы в пользу более новой версии. Внимание: + старая версия будет перезаписана и её нельзя будет восстановить." +Restart Now: Перезапустить сейчас +Restore or reconstruct local database from remote.: Восстановить или перестроить локальную базу данных из удалённой. +Run Doctor: Запустить диагностику +Save settings to a markdown file.: Сохранить настройки в файл markdown. +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.: Сохранение будет принудительно выполнено после этого количества секунд. +Scan changes on customization sync: Сканировать изменения при синхронизации настроек +Scan customization automatically: Сканировать настройки автоматически +Scan customization before replicating.: Сканировать настройки перед репликацией. +Scan customization every 1 minute.: Сканировать настройки каждую минуту. +Scan customization periodically: Сканировать настройки периодически +Scan for hidden files before replication: Сканировать скрытые файлы перед репликацией +Scan hidden files periodically: Сканировать скрытые файлы периодически +Schedule and Restart: Запланировать и перезапустить +Scram!: Экстренные меры +Seconds, 0 to disable: Секунд, 0 для отключения +Seconds. Saving to the local database will be delayed until this value after we stop typing or saving.: Секунды. Сохранение в локальную базу данных будет отложено. +Secret Key: Секретный ключ +Select the database adapter to use.: Выберите используемый адаптер базы данных. +Send: Отправить +Send chunks: Отправить чанки +Server URI: URI сервера +Setting: + GenerateKeyPair: + Desc: Мы сгенерировали пару ключей! + Title: Новая пара ключей сгенерирована! + TroubleShooting: + _value: Устранение неполадок + Doctor: + _value: Диагностика настроек + Desc: Обнаруживает неоптимальные настройки. + ScanBrokenFiles: + _value: Сканировать повреждённые файлы + Desc: Сканирует файлы, которые неправильно хранятся в базе данных. +SettingTab: + Message: + AskRebuild: Ваши изменения требуют загрузки из удалённой базы данных. Хотите + продолжить? +Setup: + Apply: + Buttons: + ApplyAndFetch: Применить и загрузить + ApplyAndMerge: Применить и объединить + ApplyAndRebuild: Применить и перестроить + Cancel: Отменить и отменить + OnlyApply: Только применить + Message: Новая конфигурация готова. Есть несколько способов применить её. + Title: Применить новую конфигурацию из method + WarningRebuildRecommended: "ПРИМЕЧАНИЕ: после настройки изменений определено, + что требуется перестроение." + Doctor: + Buttons: + No: Нет, использовать настройки из URI как есть + Yes: Да, пожалуйста, запустить диагностику + Message: Self-hosted LiveSync постепенно набрал историю и некоторые + рекомендуемые настройки изменились. + Title: Хотите запустить диагностику? + FetchRemoteConf: + Buttons: + Fetch: Да, загрузить конфигурацию + Skip: Нет, использовать настройки из URI + Message: Если мы уже синхронизировались с другим устройством, удалённая база + данных хранит подходящие значения конфигурации. + Title: Загрузить конфигурацию с удалённой базы данных? + QRCode: Мы сгенерировали QR-код для передачи настроек. Отсканируйте QR-код телефоном. + ShowQRCode: + _value: Показать QR код + Desc: Показать QR код для передачи настроек. + RemoteE2EE: + Title: Сквозное шифрование + Guidance: Пожалуйста, настройте параметры сквозного шифрования. + LabelEncrypt: Сквозное шифрование + PlaceholderPassphrase: Введите парольную фразу + StronglyRecommendedTitle: Настоятельно рекомендуется + StronglyRecommendedLine1: При включении сквозного шифрования ваши данные шифруются на устройстве до отправки на удалённый сервер. Это означает, что даже если кто-то получит доступ к серверу, он не сможет прочитать ваши данные без парольной фразы. Обязательно запомните парольную фразу, так как она потребуется для расшифровки данных на других устройствах. + StronglyRecommendedLine2: >- + Также обратите внимание: если вы используете синхронизацию Peer-to-Peer, эта конфигурация будет использована, когда вы позже переключитесь на другие методы и подключитесь к удалённому серверу. + MultiDestinationWarning: Этот параметр должен быть одинаковым даже при подключении к нескольким направлениям синхронизации. + LabelObfuscateProperties: Обфусцировать свойства + ObfuscatePropertiesDesc: Обфускация свойств (например, пути к файлу, размера, дат создания и изменения) добавляет дополнительный уровень защиты, затрудняя определение структуры и названий ваших файлов и папок на удалённом сервере. Это помогает защитить вашу конфиденциальность и усложняет для посторонних вывод информации о ваших данных. + AdvancedTitle: Дополнительно + LabelEncryptionAlgorithm: Алгоритм шифрования + DefaultAlgorithmDesc: В большинстве случаев следует оставить алгоритм по умолчанию (${algorithm}). Этот параметр нужен только в том случае, если у вас уже есть Vault, зашифрованный в другом формате. + AlgorithmWarning: Изменение алгоритма шифрования лишит доступа к данным, которые ранее были зашифрованы другим алгоритмом. Убедитесь, что все ваши устройства настроены на использование одного и того же алгоритма, чтобы сохранить доступ к данным. + PassphraseValidationLine1: >- + Обратите внимание: парольная фраза для сквозного шифрования не проверяется до фактического начала процесса синхронизации. Это сделано в целях безопасности ваших данных. + PassphraseValidationLine2: Поэтому при ручной настройке информации о сервере требуется предельная осторожность. Если будет введена неверная парольная фраза, данные на сервере будут повреждены. Пожалуйста, учтите, что это ожидаемое поведение. + ButtonProceed: Продолжить + ButtonCancel: Отмена + UseSetupURI: + Title: Ввести Setup URI + GuidanceLine1: Введите Setup URI, созданный во время установки сервера или на другом устройстве, а также парольную фразу Vault. + GuidanceLine2: Новый Setup URI можно создать, выполнив в палитре команд команду «Скопировать настройки как новый Setup URI». + LabelSetupURI: Setup URI + ValidInfo: Setup URI корректен и готов к использованию. + InvalidInfo: Setup URI некорректен. Проверьте его и попробуйте снова. + LabelPassphrase: Парольная фраза Vault + PlaceholderPassphrase: Введите парольную фразу Vault + ErrorPassphraseRequired: Пожалуйста, введите парольную фразу Vault. + ErrorFailedToParse: Не удалось обработать Setup URI. Проверьте URI и парольную фразу. + ButtonProceed: Проверить настройки и продолжить + ButtonCancel: Отмена + ScanQRCode: + Title: Сканировать QR-код + Guidance: Чтобы импортировать настройки с существующего устройства, выполните следующие шаги. + Step1: На этом устройстве оставьте данный Vault открытым. + Step2: На исходном устройстве откройте Obsidian. + Step3: На исходном устройстве в палитре команд выполните команду «Показать настройки как QR-код». + Step4: На этом устройстве откройте приложение камеры или используйте сканер QR-кодов, чтобы считать показанный QR-код. + ButtonClose: Закрыть это окно +"Please enable 'Compute revisions for chunks' in settings to use Garbage Collection.": Чтобы использовать Garbage Collection, включите в настройках «Compute revisions for chunks». +"Please disable 'Read chunks online' in settings to use Garbage Collection.": Чтобы использовать Garbage Collection, отключите в настройках «Read chunks online». +"Setup URI dialog cancelled.": Диалог Setup URI был отменён. +"Please select 'Cancel' explicitly to cancel this operation.": Чтобы отменить эту операцию, явно выберите «Отмена». +"Failed to connect to remote for compaction.": Не удалось подключиться к удалённой базе данных для компакции. +"Failed to connect to remote for compaction. ${reason}": Не удалось подключиться к удалённой базе данных для компакции. ${reason} +"Compaction in progress on remote database...": Выполняется компакция удалённой базы данных... +"Compaction on remote database timed out.": Время ожидания компакции удалённой базы данных истекло. +"Compaction on remote database completed successfully.": Компакция удалённой базы данных успешно завершена. +"Compaction on remote database failed.": Компакция удалённой базы данных завершилась ошибкой. +"Failed to start one-shot replication before Garbage Collection. Garbage Collection Cancelled.": Не удалось запустить одноразовую репликацию перед Garbage Collection. Garbage Collection отменена. +"Cancel Garbage Collection": Отменить Garbage Collection +"No connected device information found. Cancelling Garbage Collection.": Не найдена информация о подключённых устройствах. Garbage Collection отменяется. +"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.": |- + Для следующих принятых узлов отсутствует информация об узле: + - ${missingNodes} + + Это означает, что они давно не подключались или остались на старой версии. + По возможности рекомендуется сначала обновить все устройства. Если у вас есть устройства, которые больше не используются, вы можете очистить список всех принятых узлов, один раз заблокировав удалённую базу. +"Ignore and Proceed": Игнорировать и продолжить +"Node Information Missing": Отсутствует информация об узле +"Garbage Collection cancelled by user.": Пользователь отменил Garbage Collection. +"Proceeding with Garbage Collection, ignoring missing nodes.": Продолжаем Garbage Collection, игнорируя отсутствующие узлы. +"Proceed Garbage Collection": Продолжить Garbage Collection +"> [!INFO]- The connected devices have been detected as follows:\n${devices}": |- + > [!INFO]- Обнаружены следующие подключённые устройства: + ${devices} +"Device": Устройство +"Node ID": ID узла +"Obsidian version": Версия Obsidian +"Plug-in version": Версия плагина +"Progress": Прогресс +"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.": |- + У некоторых устройств различаются значения прогресса (макс.: ${maxProgress}, мин.: ${minProgress}). + Это может означать, что некоторые устройства ещё не завершили синхронизацию, что может привести к конфликтам. Настоятельно рекомендуется перед продолжением убедиться, что все устройства синхронизированы. +"All devices have the same progress value (${progress}). Your devices seem to be synchronised. And be able to proceed with Garbage Collection.": У всех устройств одинаковое значение прогресса (${progress}). Похоже, ваши устройства синхронизированы, и можно продолжать Garbage Collection. +"Garbage Collection Confirmation": Подтверждение Garbage Collection +"Proceeding with Garbage Collection.": Запускаем Garbage Collection. +"Garbage Collection: Scanned ${scanned} / ~${docCount}": |- + Garbage Collection: просканировано ${scanned} / ~${docCount} +"Garbage Collection: Scanning completed. Total chunks: ${totalChunks}, Used chunks: ${usedChunks}": |- + Garbage Collection: сканирование завершено. Всего чанков: ${totalChunks}, используемых чанков: ${usedChunks} +"Garbage Collection: Found ${unusedChunks} unused chunks to delete.": |- + Garbage Collection: найдено ${unusedChunks} неиспользуемых чанков для удаления. +"Garbage Collection completed. Deleted chunks: ${deletedChunks} / ${totalChunks}. Time taken: ${seconds} seconds.": |- + Garbage Collection завершена. Удалено чанков: ${deletedChunks} / ${totalChunks}. Затраченное время: ${seconds} сек. +"Failed to start replication after Garbage Collection.": Не удалось запустить репликацию после Garbage Collection. +Should we keep folders that don't have any files inside?: Сохранять папки без файлов? +Should we only check for conflicts when a file is opened?: Проверять конфликты только при открытии файла? +Should we prompt you about conflicting files when a file is opened?: Спрашивать о конфликтующих файлах при открытии файла? +Should we prompt you for every single merge, even if we can safely merge automatcially?: Спрашивать о каждом слиянии, даже если мы можем безопасно слить автоматически? +Show full banner: Показывать полный баннер +Show only notifications: Показывать только уведомления +Show status as icons only: Показывать статус только иконками +Show status icon instead of file warnings banner: Показывать иконку статуса вместо предупреждения о файлах +Show status inside the editor: Показывать статус внутри редактора +Show status on the status bar: Показывать статус в строке состояния +Show verbose log. Please enable if you report an issue.: Показывать подробный лог. Пожалуйста, включите при сообщении о проблеме. +Starts synchronisation when a file is saved.: Запускать синхронизацию при сохранении файла. +Stop reflecting database changes to storage files.: Остановить отражение изменений базы данных в файлы хранилища. +Stop watching for file changes.: Остановить отслеживание изменений файлов. +Suppress notification of hidden files change: Подавлять уведомления об изменении скрытых файлов +Suspend database reflecting: Приостановить отражение базы данных +Suspend file watching: Приостановить отслеживание файлов +Switch to IDB: Переключиться на IDB +Switch to IndexedDB: Переключиться на IndexedDB +Sync after merging file: Синхронизировать после слияния файла +Sync automatically after merging files: Синхронизировать автоматически после слияния файлов +Sync Mode: Режим синхронизации +Sync on Editor Save: Синхронизация при сохранении в редакторе +Sync on File Open: Синхронизация при открытии файла +Sync on Save: Синхронизация при сохранении +Sync on Startup: Синхронизация при запуске +Synchronising files: Синхронизируемые файлы +Syncing: Синхронизация +Target patterns: Целевые шаблоны +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 Hash algorithm for chunk IDs: Хэш-алгоритм для ID чанков +The maximum duration for which chunks can be incubated within the document.: Максимальная продолжительность инкубации чанков в документе. +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.: Максимальное количество инкубируемых чанков в документе. +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.: Максимальный общий размер инкубируемых чанков в документе. +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.: Минимальный интервал автоматической синхронизации по событию. +This passphrase will not be copied to another device. It will be set to 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 passphrase will not be copied to another device. It will be set to + `Default` until you configure it again. +This will recreate chunks for all files. If there were missing chunks, this may fix the errors.: + Это пересоздаст чанки для всех файлов. Если какие-то чанки отсутствовали, это + может исправить ошибки. +Transfer Tweak: Настройки передачи +TweakMismatchResolve: + Action: + Dismiss: Отмена + UseConfigured: Использовать настроенные параметры + UseMine: Обновить настройки удалённой базы данных + UseMineAcceptIncompatible: Обновить настройки, но оставить как есть + UseMineWithRebuild: Обновить настройки и перестроить снова + UseRemote: Применить настройки к этому устройству + UseRemoteAcceptIncompatible: Применить настройки, но игнорировать несовместимость + UseRemoteWithRebuild: Применить настройки и загрузить снова + Message: + Main: Настройки в удалённой базе данных следующие. Эти значения настроены + другими устройствами. + MainTweakResolving: Ваша конфигурация не совпадает с удалённым сервером. + UseRemote: + WarningRebuildRecommended: Некоторые изменения совместимы, но могут потребовать + дополнительного хранилища. Рекомендуется перестроение. + WarningRebuildRequired: Некоторые удалённые конфигурации несовместимы с + локальной базой данных. Требуется перестроение. + WarningIncompatibleRebuildRecommended: Обнаружены значения, несовместимые с + удалённой базой данных. Рекомендуется перестроение. + WarningIncompatibleRebuildRequired: Обнаружены значения, несовместимые с + удалённой базой данных. Требуется перестроение. + Table: + _value: |- + | Имя значения | Это устройство | На удалённом | + |: --- |: ---- :|: ---- :| + Row: "| name | self | remote |" + Title: + _value: Обнаружено несоответствие конфигурации + TweakResolving: Обнаружено несоответствие конфигурации + UseRemoteConfig: Использовать удалённую конфигурацию +Unique name between all synchronized devices. To edit this setting, please disable customization sync once.: Уникальное имя между всеми синхронизируемыми устройствами. +Use a custom passphrase: Использовать пользовательскую парольную фразу +Use Custom HTTP Handler: Использовать пользовательский HTTP обработчик +Use dynamic iteration count: Использовать динамическое количество итераций +Use Segmented-splitter: Использовать сегментный разделитель +Use splitting-limit-capped chunk splitter: Использовать разделитель чанков с ограничением +Use the trash bin: Использовать корзину +Use timeouts instead of heartbeats: Использовать таймауты вместо пульса +username: имя пользователя +Username: Имя пользователя +Verbose Log: Подробный лог +Verify all: Проверить всё +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.: Внимание! Это серьёзно повлияет на производительность. +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. +We cannot change the device name while this feature is enabled. Please disable this feature to change the device name.: + Невозможно изменить имя устройства, пока эта функция включена. Отключите её, + чтобы изменить имя устройства. +When you save a file in the editor, start a sync automatically: Когда вы сохраняете файл в редакторе, автоматически запускать синхронизацию +Write credentials in the file: Записывать учётные данные в файл +Write logs into the file: Записывать логи в файл +xxhash32 (Fast but less collision resistance): xxhash32 (быстрый, но с меньшей устойчивостью к коллизиям) +xxhash64 (Fastest): xxhash64 (самый быстрый) +"Welcome to Self-hosted LiveSync": "Добро пожаловать в Self-hosted LiveSync" +"We will now guide you through a few questions to simplify the synchronisation setup.": "Сейчас мы зададим несколько вопросов, чтобы упростить настройку синхронизации。" +"First, please select the option that best describes your current situation.": "Сначала выберите вариант, который лучше всего описывает вашу текущую ситуацию。" +"I am setting this up for the first time": "Я настраиваю это впервые" +"(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.": "(Выберите этот вариант, если настраиваете это устройство как первое устройство синхронизации.) Он подходит, если вы впервые используете LiveSync и хотите настроить всё с нуля。" +"I am adding a device to an existing synchronisation setup": "Я добавляю устройство к существующей настройке синхронизации" +"(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.": "(Выберите этот вариант, если вы уже используете синхронизацию на другом компьютере или смартфоне.) Он подходит, если вы хотите добавить это устройство к уже существующей конфигурации LiveSync。" +"Yes, I want to set up a new synchronisation": "Да, я хочу настроить новую синхронизацию" +"Yes, I want to add this device to my existing synchronisation": "Да, я хочу добавить это устройство к существующей синхронизации" +"No, please take me back": "Нет, верните меня назад" +"Device Setup Method": "Способ настройки устройства" +"You are adding this device to an existing synchronisation setup.": "Вы добавляете это устройство к существующей настройке синхронизации。" +"Please select a method to import the settings from another device.": "Выберите способ импорта настроек с другого устройства。" +"Use a Setup URI (Recommended)": "Использовать Setup URI (рекомендуется)" +"Paste the Setup URI generated from one of your active devices.": "Вставьте Setup URI, созданный на одном из ваших активных устройств。" +"Scan a QR Code (Recommended for mobile)": "Сканировать QR-код (рекомендуется для мобильных устройств)" +"Scan the QR code displayed on an active device using this device's camera.": "Отсканируйте QR-код, показанный на активном устройстве, с помощью камеры этого устройства。" +"Enter the server information manually": "Ввести данные сервера вручную" +"Configure the same server information as your other devices again, manually, very advanced users only.": "Снова вручную укажите те же параметры сервера, что и на других устройствах. Только для очень опытных пользователей。" +"Proceed with Setup URI": "Продолжить с Setup URI" +"I know my server details, let me enter them": "Я знаю параметры сервера, позвольте ввести их вручную" +"Please select an option to proceed": "Чтобы продолжить, выберите вариант" +"Connection Method": "Способ подключения" +"We will now proceed with the server configuration.": "Теперь перейдём к настройке сервера。" +"How would you like to configure the connection to your server?": "Как вы хотите настроить подключение к серверу?" +"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.": "Setup URI — это одна строка текста, содержащая адрес сервера и данные аутентификации. Если URI был создан скриптом установки сервера, его использование обеспечивает простую и безопасную настройку。" +"This is an advanced option for users who do not have a URI or who wish to configure detailed settings.": "Это расширенный вариант для пользователей, у которых нет URI или которые хотят вручную задать подробные параметры。" +"Enter Server Information": "Ввести данные сервера" +"Please select the type of server to which you are connecting.": "Выберите тип сервера, к которому вы подключаетесь。" +"Continue to CouchDB setup": "Перейти к настройке CouchDB" +"Continue to S3/MinIO/R2 setup": "Перейти к настройке S3/MinIO/R2" +"Continue to Peer-to-Peer only setup": "Перейти к настройке только 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.": "Это наиболее подходящий для данной архитектуры способ синхронизации. Доступны все функции. Необходимо заранее развернуть экземпляр CouchDB。" +"S3/MinIO/R2 Object Storage": "Объектное хранилище S3/MinIO/R2" +"Synchronisation utilising journal files. You must have set up an S3/MinIO/R2 compatible object storage.": "Синхронизация с использованием файлов журнала. Необходимо заранее настроить объектное хранилище, совместимое с S3/MinIO/R2。" +"Peer-to-Peer only": "Только 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.": "Эта функция обеспечивает прямую синхронизацию между устройствами. Сервер не требуется, но для синхронизации оба устройства должны быть одновременно в сети, а некоторые функции могут быть ограничены. Подключение к Интернету нужно только для сигнализации (обнаружения пиров), а не для передачи данных。" diff --git a/src/common/messagesYAML/zh-tw.yaml b/src/common/messagesYAML/zh-tw.yaml new file mode 100644 index 00000000..78424a22 --- /dev/null +++ b/src/common/messagesYAML/zh-tw.yaml @@ -0,0 +1,443 @@ +(Active): (已啟用) +(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.: (正則表示式)若已設定,所有符合此模式的本機與遠端檔案變更都會被略過。 +Activate: 啟用 +Active Remote Configuration: 目前啟用的遠端設定 +Add default patterns: 新增預設模式 +Always prompt merge conflicts: 總是提示合併衝突 +Analyse: 分析 +Apply Latest Change if Conflicting: 發生衝突時套用最新變更 +Apply preset configuration: 套用預設配置 +Ask a passphrase at every launch: 每次啟動時都詢問密語 +Automatically Sync all files when opening Obsidian.: 開啟 Obsidian 時自動同步所有檔案。 +Batch database update: 批次更新資料庫 +Batch limit: 批次上限 +Batch size: 批次大小 +Batch size of on-demand fetching: 按需抓取的批次大小 +Bucket Name: 儲存桶名稱 +Check: 檢查 +Configuration Encryption: 設定加密 +CouchDB Connection Tweak: CouchDB 連線調校 +Customization Sync: 自訂同步 +Data Compression: 資料壓縮 +Database Name: 資料庫名稱 +Database suffix: 資料庫後綴 +Delay conflict resolution of inactive files: 延後處理非活動檔案的衝突 +Delay merge conflict prompt for inactive files.: 延後顯示非活動檔案的合併衝突提示。 +Delete old metadata of deleted files on start-up: 啟動時刪除已刪除檔案的舊中繼資料 +Developer: 開發者 +Disables logging, only shows notifications. Please disable if you report an issue.: 停用日誌記錄,只顯示通知。如果你要回報問題,請關閉此選項。 +Display Language: 顯示語言 +Do not check configuration mismatch before replication: 複寫前不檢查設定是否不一致 +Do not keep metadata of deleted files.: 不保留已刪除檔案的中繼資料。 +Do not split chunks in the background: 不在背景分割 chunks +Do not use internal API: 不使用內部 API +Add new connection: 新增連線 +Back: 返回 +Back to non-configured: 恢復為未設定狀態 +Cancel: 取消 +Check and convert non-path-obfuscated files: 檢查並轉換未進行路徑混淆的檔案 +Check for documents that have not been converted to path-obfuscated IDs and convert them if necessary.: 檢查尚未轉換為路徑混淆 ID 的文件,並在需要時進行轉換。 +cmdConfigSync: + showCustomizationSync: 顯示自訂同步 +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 (Database structure): 相容性(資料庫結構) +Compatibility (Internal API Usage): 相容性(內部 API 使用) +Compatibility (Metadata): 相容性(中繼資料) +Compatibility (Remote Database): 相容性(遠端資料庫) +Compatibility (Trouble addressed): 相容性(問題修復) +Configure: 設定 +Configure And Change Remote: 設定並切換遠端 +Configure E2EE: 設定 E2EE +Configure Remote: 設定遠端 +Copy: 複製 +Cross-platform: 跨平台 +"Current adapter: {adapter}": 目前的適配器:{adapter} +Customization Sync (Beta3): 自訂同步(Beta3) +Database Adapter: 資料庫適配器 +Default: 預設 +Delete: 刪除 +Delete all customization sync data: 刪除所有自訂同步資料 +Delete all data on the remote server.: 刪除遠端伺服器上的所有資料。 +Delete local database to reset or uninstall Self-hosted LiveSync: 刪除本機資料庫以重設或解除安裝 Self-hosted LiveSync +Delete Remote Configuration: 刪除遠端設定 +Delete remote configuration '{name}'?: 要刪除遠端設定「{name}」嗎? +desktop: 桌面裝置 +Device name: 裝置名稱 +Disables all synchronization and restart.: 停用所有同步並重新啟動。 +Display name: 顯示名稱 +Duplicate: 複製 +Duplicate remote: 複製遠端設定 +dialog: + yourLanguageAvailable: + _value: |- + Self-hosted LiveSync 已提供你目前語言的翻譯,因此已啟用顯示語言設定。 + + 注意:並非所有訊息都已完成翻譯,歡迎協助補充! + 注意 2:如果你要回報問題,請先切回預設語言,再附上截圖、訊息與日誌。 + + 希望你使用愉快! + btnRevertToDefault: 恢復為預設語言 + Title: 已提供你的語言翻譯! +E2EE Configuration: E2EE 設定 +Enable advanced features: 啟用進階功能 +Enable customization sync: 啟用自訂同步 +Enable Developers' Debug Tools.: 啟用開發者除錯工具。 +Enable edge case treatment features: 啟用邊緣情況處理功能 +Enable poweruser features: 啟用進階使用者功能 +Enable this if your Object Storage doesn't support CORS: 如果你的物件儲存不支援 CORS,請啟用此選項 +Enable this option to automatically apply the most recent change to documents even when it conflicts: 啟用此選項後,即使發生衝突也會自動套用文件的最新變更 +Encrypt contents on the remote database. If you use the plugin's synchronization feature, enabling this is recommended.: 加密遠端資料庫中的內容。如果你使用外掛的同步功能,建議啟用此選項。 +Encryption phassphrase. If changed, you should overwrite the server's database with the new (encrypted) files.: 加密密語。如果變更了它,你應以新的(已加密)檔案覆寫伺服器上的資料庫。 +End-to-End Encryption: 端對端加密 +Endpoint URL: 端點 URL +Enhance chunk size: 擴大 chunk 大小 +Fetch: 抓取 +Fetch chunks on demand: 按需抓取 chunks +Fetch database with previous behaviour: 以前一種行為抓取資料庫 +Filename: 檔名 +Forces the file to be synced when opened.: 開啟檔案時強制同步該檔案。 +Handle files as Case-Sensitive: 將檔案視為區分大小寫 +Highlight diff: 醒目顯示差異 +If disabled(toggled), chunks will be split on the UI thread (Previous behaviour).: 若停用(關閉)此選項,chunks 會在 UI 執行緒上分割(舊有行為)。 +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.: 啟用後會使用以每個檔案為單位的高效率自訂同步。啟用時需要進行一次小型遷移,且所有裝置都應升級到 v0.23.18。啟用後將不再相容舊版本。 +If enabled, chunks will be split into no more than 100 items. However, dedupe is slightly weaker.: 啟用後,chunks 最多會分成 100 個項目,但去重效果會稍微變弱。 +If enabled, newly created chunks are temporarily kept within the document, and graduated to become independent chunks once stabilised.: 啟用後,新建立的 chunks 會暫時保留在文件中,待穩定後再獨立出去。 +If enabled, the file under 1kb will be processed in the UI thread.: 啟用後,小於 1KB 的檔案會在 UI 執行緒中處理。 +If enabled, the notification of hidden files change will be suppressed.: 啟用後,將不再通知隱藏檔案變更。 +If this enabled, all chunks will be stored with the revision made from its content. (Previous behaviour): 啟用後,所有 chunks 都會以其內容產生的修訂版本儲存(舊有行為)。 +If this enabled, All files are handled as case-Sensitive (Previous behaviour).: 啟用後,所有檔案都會以區分大小寫方式處理(舊有行為)。 +If this enabled, chunks will be split into semantically meaningful segments. Not all platforms support this feature.: 啟用後,chunks 會依語意切分成有意義的區段,並非所有平台都支援此功能。 +If you reached the payload size limit when using IBM Cloudant, please decrease batch size and batch limit to a lower value.: 如果你在使用 IBM Cloudant 時遇到負載大小上限,請調低批次大小與批次上限。 +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.: 初始化傳送日誌歷程。下次同步時,除了此裝置已接收的項目外,其他項目都會再次傳送。 +Edge case addressing (Behaviour): 邊緣情況處理(行為) +Edge case addressing (Database): 邊緣情況處理(資料庫) +Edge case addressing (Processing): 邊緣情況處理(處理) +Emergency restart: 緊急重新啟動 +Encrypting sensitive configuration items: 加密敏感設定項目 +Export: 匯出 +Fetch remote settings: 抓取遠端設定 +File to resolve conflict: 要解決衝突的檔案 +Flag and restart: 標記後重新啟動 +Fresh Start Wipe: 全新開始清除 +Garbage Collection V3 (Beta): 垃圾回收 V3(Beta) +Hidden Files: 隱藏檔案 +Hide completely: 完全隱藏 +How to display network errors when the sync server is unreachable.: 當同步伺服器無法連線時,如何顯示網路錯誤。 +If enabled, the ⛔ icon will be shown inside the status instead of the file warnings banner. No details will be shown.: 啟用後,將在狀態列中顯示 ⛔ 圖示,而不是檔案警告橫幅,且不會顯示詳細資訊。 +Ignore patterns: 忽略模式 +Import connection: 匯入連線 +Initialise all journal history, On the next sync, every item will be received and sent.: 初始化所有日誌歷史。下次同步時,每個項目都會重新接收與傳送。 +Later: 稍後 +"Limit: {datetime} ({timestamp})": 限制:{datetime}({timestamp}) +Lock: 鎖定 +Lock Server: 鎖定伺服器 +Lock the remote server to prevent synchronization with other devices.: 鎖定遠端伺服器,以防止其他裝置進行同步。 +More actions: 更多操作 +Network warning style: 網路警告樣式 +New Remote: 新增遠端 +No limit configured: 尚未設定限制 +Non-Synchronising files: 不同步的檔案 +Normal Files: 一般檔案 +obsidianLiveSyncSettingTab: + btnApply: 套用 + btnDisable: 停用 + btnNext: 下一步 + buttonNext: 下一步 + defaultLanguage: 預設語言 + labelDisabled: "⏹️ : 已停用" + labelEnabled: "🔁 : 已啟用" + logConfiguredDisabled: 已設定的同步模式:已停用 + logConfiguredLiveSync: 已設定的同步模式:LiveSync + logConfiguredPeriodic: 已設定的同步模式:定期同步 + logSelectAnyPreset: 請選擇任一預設項目。 + msgConfigCheckFailed: 設定檢查失敗。仍要繼續嗎? + msgEnableEncryptionRecommendation: 我們建議啟用端對端加密與路徑混淆。你確定要在未加密的情況下繼續嗎? + msgFetchConfigFromRemote: 要從遠端伺服器抓取設定嗎? + msgGenerateSetupURI: 全部完成!要產生 Setup URI 以便設定其他裝置嗎? + msgInvalidPassphrase: 你的加密密語可能無效。你確定要繼續嗎? + msgSelectAndApplyPreset: 請選擇並套用任一預設項目以完成精靈。 + nameDisableHiddenFileSync: 停用隱藏檔案同步 + nameEnableHiddenFileSync: 啟用隱藏檔案同步 + nameHiddenFileSynchronization: 隱藏檔案同步 + optionDisableAllAutomatic: 停用所有自動同步 + optionLiveSync: LiveSync 同步 + optionOnEvents: 事件觸發時 + optionPeriodicAndEvents: 定期與事件觸發 + optionPeriodicWithBatch: 定期(批次) + titleAppearance: 外觀 + titleConflictResolution: 衝突處理 + titleCongratulations: 恭喜! + titleCouchDB: CouchDB 伺服器 + titleDeletionPropagation: 刪除傳播 + titleEncryptionNotEnabled: 尚未啟用加密 + titleEncryptionPassphraseInvalid: 加密密語無效 + titleFetchConfig: 抓取設定 + titleHiddenFiles: 隱藏檔案 + titleLogging: 記錄 + titleMinioS3R2: MinIO、S3、R2 + titleNotification: 通知 + titleRemoteConfigCheckFailed: 遠端設定檢查失敗 + titleRemoteServer: 遠端伺服器 + titleSynchronizationMethod: 同步方式 + titleSynchronizationPreset: 同步預設 + titleSyncSettingsViaMarkdown: 透過 Markdown 同步設定 + titleUpdateThinning: 更新精簡 +Ok: 確定 +Old Algorithm: 舊演算法 +Older fallback (Slow, W/O WebAssembly): 舊版回退(較慢,無 WebAssembly) +Overwrite patterns: 覆寫模式 +Overwrite remote: 覆寫遠端 +Overwrite remote with local DB and passphrase.: 使用本機資料庫與密語覆寫遠端。 +Overwrite Server Data with This Device's Files: 以此裝置的檔案覆寫伺服器資料 +paneMaintenance: + markDeviceResolvedAfterBackup: 請在完成備份後將此裝置標記為已處理。 + remoteLockedAndDeviceNotAccepted: 遠端資料庫已鎖定,且此裝置尚未被接受。 + remoteLockedResolvedDevice: 遠端資料庫已鎖定,但此裝置已被接受。 + unlockDatabaseReady: 現在可以解鎖資料庫。 +Paste a connection string: 貼上連線字串 +Patterns to match files for overwriting instead of merging: 用於匹配需覆寫而非合併檔案的模式 +Patterns to match files for syncing: 用於匹配同步檔案的模式 +Peer-to-Peer Synchronisation: 點對點同步 +Perform: 執行 +Perform cleanup: 執行清理 +Perform Garbage Collection: 執行垃圾回收 +Perform Garbage Collection to remove unused chunks and reduce database size.: 執行垃圾回收以移除未使用的 chunks 並減少資料庫大小。 +Pick a file to resolve conflict: 選擇要解決衝突的檔案 +Please set this device name: 請設定此裝置名稱 +PureJS fallback (Fast, W/O WebAssembly): PureJS 回退(快速,無 WebAssembly) +Purge all download/upload cache.: 清除所有下載/上傳快取。 +Purge all journal counter: 清除所有日誌計數器 +Rebuild local and remote database with local files.: 以本機檔案重建本機與遠端資料庫。 +Rebuilding Operations (Remote Only): 重建作業(僅遠端) +Recreate all: 全部重建 +Recreate missing chunks for all files: 為所有檔案重建遺失的 chunks +Remediation: 修復設定 +Remediation Setting Changed: 修復設定已變更 +Remote Database Tweak (In sunset): 遠端資料庫調校(即將淘汰) +Remote Databases: 遠端資料庫 +Remote name: 遠端名稱 +Rename: 重新命名 +Resend: 重新傳送 +Resend all chunks to the remote.: 將所有 chunks 重新傳送到遠端。 +Reset: 重設 +Reset all: 全部重設 +Reset all journal counter: 重設所有日誌計數器 +Reset journal received history: 重設日誌接收歷史 +Reset journal sent history: 重設日誌傳送歷史 +Reset received: 重設接收紀錄 +Reset sent history: 重設傳送歷史 +Reset Synchronisation information: 重設同步資訊 +Reset Synchronisation on This Device: 重設此裝置上的同步 +Resolve All: 全部處理 +Resolve all conflicted files: 解決所有衝突檔案 +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.": 將所有衝突檔案統一保留較新的版本。注意:這會覆寫較舊的版本,且被覆寫的內容無法復原。 +Restart Now: 立即重新啟動 +Restore or reconstruct local database from remote.: 從遠端還原或重建本機資料庫。 +Schedule and Restart: 排程後重新啟動 +Scram!: 緊急處置 +Select the database adapter to use.: 選擇要使用的資料庫適配器。 +Send: 傳送 +Send chunks: 傳送 chunks +Setting: + GenerateKeyPair: + Desc: |- + 我們已產生新的金鑰對! + + 注意:此金鑰對之後將不會再次顯示。請務必妥善保存;若遺失,必須重新產生新的金鑰對。 + 注意 2:公鑰採用 spki 格式,私鑰採用 pkcs8 格式。為了方便複製,公鑰中的換行會轉換為 `\n`。 + 注意 3:公鑰應設定在遠端資料庫中,私鑰則應設定在本機裝置上。 + + >[!僅供本人查看]- + >
+ > + > ### 公鑰 + > ``` + ${public_key} + > ``` + > + > ### 私鑰 + > ``` + ${private_key} + > ``` + > + >
+ + >[!便於整段複製]- + > + >
+ > + > ``` + ${public_key} + ${private_key} + > ``` + > + >
+ Title: 已產生新的金鑰對! +Show full banner: 顯示完整橫幅 +Show icon only: 僅顯示圖示 +Show status icon instead of file warnings banner: 以狀態圖示取代檔案警告橫幅 +Switch to IDB: 切換至 IDB +Switch to IndexedDB: 切換至 IndexedDB +Synchronising files: 同步中的檔案 +Syncing: 同步中 +Target patterns: 目標模式 +This will recreate chunks for all files. If there were missing chunks, this may fix the errors.: 這會為所有檔案重新建立 chunks。若先前有遺失的 chunks,這可能修復相關錯誤。 +Verify all: 全部驗證 +Verify and repair all files: 驗證並修復所有檔案 +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.: + 透過捨棄所有非最新版本來減少儲存空間占用。執行此操作時,遠端伺服器與本機用戶端都需要具備相同數量的可用空間。 +Run Doctor: 執行診斷 +Scan for Broken files: 掃描損壞檔案 +Prepare the 'report' to create an issue: 準備建立 Issue 用的「報告」 +Copy Report to clipboard: 將報告複製到剪貼簿 +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.: + 分析資料庫使用情況並產生 TSV 報告,方便你自行診斷。你可以將產生的報告貼到任何慣用的試算表中查看。 +Rerun Onboarding Wizard: 重新執行導覽精靈 +Rerun the onboarding wizard to set up Self-hosted LiveSync again.: 重新執行導覽精靈以再次設定 Self-hosted LiveSync。 +Rerun Wizard: 重新執行精靈 +Reset notification threshold and check the remote database usage: 重設通知閾值並檢查遠端資料庫使用情況 +Reset the remote storage size threshold and check the remote storage size again.: 重設遠端儲存空間大小閾值,並再次檢查遠端儲存空間大小。 +Document History: 文件歷程 +File to view History: 要檢視歷程的檔案 +Pick a file to show history: 選擇要顯示歷程的檔案 +Recovery and Repair: 修復與修補 +Database -> Storage: 資料庫 -> 儲存空間 +Storage -> Database: 儲存空間 -> 資料庫 +Show history: 顯示歷程 +Restarting Obsidian is strongly recommended. Until restart, some changes may not take effect, and display may be inconsistent. Are you sure to restart now?: 強烈建議重新啟動 Obsidian。在重新啟動之前,部分變更可能尚未生效,顯示也可能不一致。你確定要現在重新啟動嗎? +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.: IndexedDB 適配器在某些情況下通常能提供較佳效能,但在 LiveSync 模式下已發現可能導致記憶體洩漏。使用 LiveSync 模式時,請改用 IDB 適配器。 +Scram Switches: 緊急處置開關 +Minimum interval for syncing: 同步最小間隔 +The minimum interval for automatic synchronisation on event.: 事件觸發自動同步的最小間隔。 +xxhash32 (Fast but less collision resistance): xxhash32(速度快,但抗碰撞能力較弱) +xxhash64 (Fastest): xxhash64(最快) +"Welcome to Self-hosted LiveSync": "歡迎使用 Self-hosted LiveSync" +"We will now guide you through a few questions to simplify the synchronisation setup.": "接下來我們會透過幾個問題,引導你更輕鬆地完成同步設定。" +"First, please select the option that best describes your current situation.": "首先,請選擇最符合你目前情況的選項。" +"I am setting this up for the first time": "我是第一次進行設定" +"(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.": "(如果你正在將此裝置設定為第一台同步裝置,請選擇此項。)此選項適合初次使用 LiveSync,並希望從頭開始設定的使用者。" +"I am adding a device to an existing synchronisation setup": "我要將裝置加入既有同步設定" +"(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.": "(如果你已經在另一台電腦或手機上使用同步,請選擇此項。)此選項適合將目前裝置加入既有 LiveSync 設定的使用者。" +"Yes, I want to set up a new synchronisation": "是的,我要設定新的同步" +"Yes, I want to add this device to my existing synchronisation": "是的,我要把這台裝置加入既有同步" +"No, please take me back": "不,返回上一步" +"Device Setup Method": "裝置設定方式" +"You are adding this device to an existing synchronisation setup.": "你正在將此裝置加入既有同步設定中。" +"Please select a method to import the settings from another device.": "請選擇一種從其他裝置匯入設定的方法。" +"Use a Setup URI (Recommended)": "使用 Setup URI(推薦)" +"Paste the Setup URI generated from one of your active devices.": "貼上從一台已在使用裝置上產生的 Setup URI。" +"Scan a QR Code (Recommended for mobile)": "掃描 QR Code(行動裝置推薦)" +"Scan the QR code displayed on an active device using this device's camera.": "使用目前裝置的相機掃描另一台已在使用裝置上顯示的 QR Code。" +"Enter the server information manually": "手動輸入伺服器資訊" +"Configure the same server information as your other devices again, manually, very advanced users only.": "手動重新輸入與其他裝置相同的伺服器資訊。僅適合進階使用者。" +"Proceed with Setup URI": "繼續使用 Setup URI" +"I know my server details, let me enter them": "我知道伺服器資訊,讓我手動輸入" +"Please select an option to proceed": "請選擇一個選項以繼續" +"Connection Method": "連線方式" +"We will now proceed with the server configuration.": "接下來將繼續進行伺服器設定。" +"How would you like to configure the connection to your server?": "你希望如何設定與伺服器的連線?" +"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.": "Setup URI 是一段包含伺服器位址與驗證資訊的文字。如果伺服器安裝腳本已經產生 URI,使用它可以更簡單且更安全地完成設定。" +"This is an advanced option for users who do not have a URI or who wish to configure detailed settings.": "這是面向沒有 URI 或希望手動設定詳細參數的進階選項。" +"Enter Server Information": "輸入伺服器資訊" +"Please select the type of server to which you are connecting.": "請選擇你要連線的伺服器類型。" +"Continue to CouchDB setup": "繼續進行 CouchDB 設定" +"Continue to S3/MinIO/R2 setup": "繼續進行 S3/MinIO/R2 設定" +"Continue to Peer-to-Peer only setup": "繼續進行僅 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.": "這是最符合目前設計的同步方式,所有功能皆可使用。你需要事先部署好 CouchDB 實例。" +"S3/MinIO/R2 Object Storage": "S3/MinIO/R2 物件儲存" +"Synchronisation utilising journal files. You must have set up an S3/MinIO/R2 compatible object storage.": "透過日誌檔進行同步。你需要事先部署好相容 S3/MinIO/R2 的物件儲存服務。" +"Peer-to-Peer only": "僅 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.": "此功能可在裝置之間直接同步,無需伺服器;但同步時兩台裝置必須同時在線,且部分功能可能受限。網際網路連線僅用於訊號交換(偵測對端),不用於資料傳輸。" +Setup: + RemoteE2EE: + Title: 端對端加密 + Guidance: 請設定你的端對端加密選項。 + LabelEncrypt: 端對端加密 + PlaceholderPassphrase: 輸入你的密語 + StronglyRecommendedTitle: 強烈建議 + StronglyRecommendedLine1: 啟用端對端加密後,資料會先在你的裝置上完成加密,再傳送到遠端伺服器。這表示即使有人取得伺服器存取權,沒有密語也無法讀取你的資料。請務必記住你的密語,因為其他裝置在解密資料時也需要它。 + StronglyRecommendedLine2: 另外請注意,即使你目前使用的是 Peer-to-Peer 同步,日後若切換到其他方式並連線到遠端伺服器時,也會沿用這組設定。 + MultiDestinationWarning: 即使連線到多個同步目標,這項設定也必須保持一致。 + LabelObfuscateProperties: 混淆屬性 + ObfuscatePropertiesDesc: 混淆屬性(例如檔案路徑、大小、建立時間與修改時間)可以額外增加一層安全保護,讓遠端伺服器上的檔案與資料夾結構及名稱更難被辨識。這有助於保護你的隱私,也讓未授權使用者更難推測你的資料資訊。 + AdvancedTitle: 進階 + LabelEncryptionAlgorithm: 加密演算法 + DefaultAlgorithmDesc: 在大多數情況下,建議維持使用預設演算法(${algorithm})。只有當你現有的 Vault 是以不同格式加密時,才需要調整這項設定。 + AlgorithmWarning: 變更加密演算法後,先前以其他演算法加密的資料將無法再存取。請確認所有裝置都設定為使用相同演算法,以維持對資料的存取能力。 + PassphraseValidationLine1: 請注意,端對端加密的密語要到同步程序實際開始時才會進行驗證。這是為了保護你資料而設計的安全措施。 + PassphraseValidationLine2: 因此,在手動設定伺服器資訊時請務必格外小心。如果輸入了錯誤的密語,伺服器上的資料將會損毀。請理解這是系統的預期行為。 + ButtonProceed: 繼續 + ButtonCancel: 取消 + UseSetupURI: + Title: 輸入 Setup URI + GuidanceLine1: 請輸入在伺服器安裝期間或其他裝置上產生的 Setup URI,以及 Vault 的密語。 + GuidanceLine2: 你可以在命令面板中執行「將設定複製為新的 Setup URI」命令來產生新的 Setup URI。 + LabelSetupURI: Setup URI + ValidInfo: Setup URI 有效,可以使用。 + InvalidInfo: Setup URI 無效,請檢查後再試一次。 + LabelPassphrase: Vault 密語 + PlaceholderPassphrase: 輸入 Vault 密語 + ErrorPassphraseRequired: 請輸入 Vault 的密語。 + ErrorFailedToParse: 無法解析 Setup URI,請檢查 URI 與密語。 + ButtonProceed: 測試設定並繼續 + ButtonCancel: 取消 + ScanQRCode: + Title: 掃描 QR 碼 + Guidance: 請依照以下步驟,從現有裝置匯入設定。 + Step1: 在這台裝置上,請保持此 Vault 開啟。 + Step2: 在來源裝置上開啟 Obsidian。 + Step3: 在來源裝置上,從命令面板執行「將設定顯示為 QR 碼」命令。 + Step4: 在這台裝置上切換到相機 App,或使用 QR 碼掃描器掃描顯示出的 QR 碼。 + ButtonClose: 關閉此對話框 +"Please enable 'Compute revisions for chunks' in settings to use Garbage Collection.": 若要使用垃圾回收,請在設定中啟用「Compute revisions for chunks」。 +"Please disable 'Read chunks online' in settings to use Garbage Collection.": 若要使用垃圾回收,請在設定中停用「Read chunks online」。 +"Setup URI dialog cancelled.": Setup URI 對話框已取消。 +"Please select 'Cancel' explicitly to cancel this operation.": 若要取消此操作,請明確選擇「取消」。 +"Failed to connect to remote for compaction.": 無法連線到遠端資料庫以執行壓縮。 +"Failed to connect to remote for compaction. ${reason}": 無法連線到遠端資料庫以執行壓縮。${reason} +"Compaction in progress on remote database...": 正在遠端資料庫上執行壓縮... +"Compaction on remote database timed out.": 遠端資料庫壓縮逾時。 +"Compaction on remote database completed successfully.": 遠端資料庫壓縮已成功完成。 +"Compaction on remote database failed.": 遠端資料庫壓縮失敗。 +"Failed to start one-shot replication before Garbage Collection. Garbage Collection Cancelled.": 無法在垃圾回收前啟動一次性複寫。垃圾回收已取消。 +"Cancel Garbage Collection": 取消垃圾回收 +"No connected device information found. Cancelling Garbage Collection.": 找不到已連線裝置的資訊。正在取消垃圾回收。 +"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.": |- + 以下已接受節點缺少節點資訊: + - ${missingNodes} + + 這表示它們已有一段時間未連線,或仍停留在較舊版本。 + 如有可能,建議先更新所有裝置。如果有已不再使用的裝置,可以先鎖定一次遠端端以清除全部已接受節點。 +"Ignore and Proceed": 忽略並繼續 +"Node Information Missing": 節點資訊缺失 +"Garbage Collection cancelled by user.": 使用者已取消垃圾回收。 +"Proceeding with Garbage Collection, ignoring missing nodes.": 正在繼續執行垃圾回收,並忽略缺失節點。 +"Proceed Garbage Collection": 繼續執行垃圾回收 +"> [!INFO]- The connected devices have been detected as follows:\n${devices}": |- + > [!INFO]- 已偵測到以下已連線裝置: + ${devices} +"Device": 裝置 +"Node ID": 節點 ID +"Obsidian version": Obsidian 版本 +"Plug-in version": 外掛版本 +"Progress": 進度 +"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.": |- + 某些裝置的進度值不同(最大:${maxProgress},最小:${minProgress})。 + 這可能表示某些裝置尚未完成同步,進而可能導致衝突。強烈建議在繼續之前先確認所有裝置都已同步。 +"All devices have the same progress value (${progress}). Your devices seem to be synchronised. And be able to proceed with Garbage Collection.": 所有裝置的進度值均相同(${progress})。看起來你的裝置已同步,可以繼續執行垃圾回收。 +"Garbage Collection Confirmation": 垃圾回收確認 +"Proceeding with Garbage Collection.": 正在執行垃圾回收。 +"Garbage Collection: Scanned ${scanned} / ~${docCount}": |- + 垃圾回收:已掃描 ${scanned} / ~${docCount} +"Garbage Collection: Scanning completed. Total chunks: ${totalChunks}, Used chunks: ${usedChunks}": |- + 垃圾回收:掃描完成。總 chunks:${totalChunks},已使用 chunks:${usedChunks} +"Garbage Collection: Found ${unusedChunks} unused chunks to delete.": |- + 垃圾回收:找到 ${unusedChunks} 個未使用的 chunks 可刪除。 +"Garbage Collection completed. Deleted chunks: ${deletedChunks} / ${totalChunks}. Time taken: ${seconds} seconds.": |- + 垃圾回收完成。已刪除 chunks:${deletedChunks} / ${totalChunks}。耗時:${seconds} 秒。 +"Failed to start replication after Garbage Collection.": 垃圾回收後無法啟動複寫。 diff --git a/src/common/messagesYAML/zh.yaml b/src/common/messagesYAML/zh.yaml new file mode 100644 index 00000000..8510a62b --- /dev/null +++ b/src/common/messagesYAML/zh.yaml @@ -0,0 +1,1628 @@ +(Active): (已启用) +(BETA) Always overwrite with a newer file: 始终使用更新的文件覆盖(测试版) +(Beta) Use ignore files: (测试版)使用忽略文件 +(Days passed, 0 to disable automatic-deletion): (已过天数,0为禁用自动删除) +(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.: (例如,在线读取块)如果启用此选项,LiveSync 将直接在线读取块,而不是在本地复制块。建议增加自定义块大小 +(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)如果设置了此项,大于此大小的本地和远程文件的更改将被跳过。如果文件再次变小,将使用更新的文件 +(Mega chars): (百万字符) +(Not recommended) If set, credentials will be stored in the file.: (不建议)如果设置,凭据将存储在文件中 +(Obsolete) Use an old adapter for compatibility: (已弃用)为兼容性使用旧适配器 +(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.: (正则表达式)如果已设置,则所有匹配此模式的本地和远端文件变更都会被跳过。 +Access Key: 访问密钥 +Activate: 启用 +Active Remote Configuration: 生效中的远程配置 +Add default patterns: 添加默认模式 +Add new connection: 新增连接 +Always prompt merge conflicts: 始终提示合并冲突 +Analyse: 立即分析 +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.: 分析数据库使用情况并生成 TSV 报告以供您自行诊断。您可以将生成的报告粘贴到您喜欢的任何电子表格中。 +Apply Latest Change if Conflicting: 如果冲突则应用最新更改 +Apply preset configuration: 应用预设配置 +Ask a passphrase at every launch: 每次启动时询问密码短语 +Automatically Sync all files when opening Obsidian.: 打开 Obsidian 时自动同步所有文件 +Back: 返回 +Back to non-configured: 恢复为未配置状态 +Batch database update: 批量数据库更新 +Batch limit: 批量限制 +Batch size: 批量大小 +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.: + 在 v0.17.16 + 之前,我们使用旧适配器作为本地数据库。现在首选新适配器。但是,它需要重建本地数据库。请在有足够时间时禁用此开关。如果保持启用状态,并且在从远程数据库获取时,系统将要求您禁用此开关。 +Bucket Name: 存储桶名称 +Cancel: 取消 +Check: 立即检查 +Check and convert non-path-obfuscated files: 检查并转换未进行路径混淆的文件 +Check for documents that have not been converted to path-obfuscated IDs and convert them if necessary.: 检查尚未转换为路径混淆 ID 的文档,并在需要时将其转换。 +cmdConfigSync: + showCustomizationSync: 显示自定义同步 +Comma separated `.gitignore, .dockerignore`: 用逗号分隔,例如 `.gitignore, .dockerignore` +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 (Database structure): 兼容性(数据库结构) +Compatibility (Internal API Usage): 兼容性(内部 API 使用) +Compatibility (Metadata): 兼容性(元数据) +Compatibility (Remote Database): 兼容性(远端数据库) +Compatibility (Trouble addressed): 兼容性(问题修复) +Compute revisions for chunks: 为 chunks 计算修订版本(以前的行为) +Configuration Encryption: 配置加密 +Configure: 配置 +Configure And Change Remote: 配置并切换远端 +Configure E2EE: 配置 E2EE +Configure Remote: 配置远端 +Copy: 复制 +Copy Report to clipboard: 将报告复制到剪贴板 +CouchDB Connection Tweak: CouchDB 连接调优 +Cross-platform: 跨平台 +"Current adapter: {adapter}": 当前适配器:{adapter} +Customization Sync: 自定义同步 +Customization Sync (Beta3): 自定义同步(Beta3) +Data Compression: 数据压缩 +Database Adapter: 数据库适配器 +Database Name: 数据库名称 +Database suffix: 数据库后缀 +Default: 默认 +Delay conflict resolution of inactive files: 推迟解决不活动文件 +Delay merge conflict prompt for inactive files.: 推迟手动解决不活动文件 +Delete: 删除 +Delete all customization sync data: 删除所有自定义同步数据 +Delete all data on the remote server.: 删除远端服务器上的所有数据。 +Delete local database to reset or uninstall Self-hosted LiveSync: 删除本地数据库以重置或卸载 Self-hosted LiveSync +Delete old metadata of deleted files on start-up: 启动时删除已删除文件的旧元数据 +Delete Remote Configuration: 删除远端配置 +Delete remote configuration '{name}'?: 要删除远端配置“{name}”吗? +desktop: 桌面设备 +Developer: 开发者 +Device name: 设备名称 +dialog: + yourLanguageAvailable: + _value: |- + Self-hosted LiveSync已提供您语言的翻译,因此启用了%{Display language} + + 注意:并非所有消息都已翻译。我们期待您的贡献! + 注意 2:若您创建问题报告, **请切换回%{lang-def}** ,然后截取屏幕截图、消息和日志,此操作可在设置对话框中完成 + 愿您使用顺心! + btnRevertToDefault: 保持%{lang-def} + Title: " 翻译可用!" +Disables all synchronization and restart.: 禁用所有同步并重新启动。 +Disables logging, only shows notifications. Please disable if you report an issue.: 禁用日志记录,仅显示通知。如果您报告问题,请禁用此选项 +Display Language: 显示语言 +Display name: 显示名称 +Do not check configuration mismatch before replication: 在复制前不检查配置不匹配 +Do not keep metadata of deleted files.: "不保留已删除文件的元数据 " +Do not split chunks in the background: 不在后台分割 chunks +Do not use internal API: 不使用内部 API +Doctor: + Button: + DismissThisVersion: 拒绝,并且直到下个版本前不再询问 + Fix: 修复 + FixButNoRebuild: 修复但不重建 + No: 拒绝 + Skip: 保持不变 + Yes: 确定 + Dialogue: + Main: |- + 您好!配置医生已根据您的要求启动(感谢您)!!遗憾的是,检测到部分配置存在潜在问题。请放心,我们将逐一解决这些问题。 + + 提前告知您,我们将就以下事项进行确认: + + 为数据块计算修订版本(此前行为) + 增强块大小 + + 我们开始处理吗? + MainFix: |- + + ## ${name} + + | Current | Ideal | + |:---:|:---:| + | ${current} | ${ideal} | + + **Recommendation Level:** ${level} + + ### Why this has been detected? + + ${reason} + + ${note} + + Fix this to the ideal value? + Title: Self-hosted LiveSync 配置诊断 + TitleAlmostDone: 全部完成! + TitleFix: 修复问题 ${current}/${total} + Level: + Must: 必须 + Necessary: 必要 + Optional: 可选 + Recommended: 推荐 + Message: + NoIssues: 未发现问题! + RebuildLocalRequired: 注意!需要重建本地数据库以应用此项! + RebuildRequired: 注意!需要重建才能应用此项! + SomeSkipped: 我们将某些问题留给了以后处理。是否要在下次启动时再次询问您? + RULES: + E2EE_V02500: + REASON: The End-to-End Encryption has got now more robust and faster. Also + because, the previous E2EE was found to be compromised in a re-conducted + code review. It should be applied as soon as possible. Really apologises + for your inconvenience. And, this setting is not forward compatible. All + synchronised devices must be updated to v0.25.0 or higher. Rebuilds are + not required and will be converted from the new transfer to the new + format, However, it is recommended to rebuild whenever possible. +Duplicate: 复制 +Duplicate remote: 复制远端配置 +E2EE Configuration: E2EE 配置 +Edge case addressing (Behaviour): 边缘情况处理(行为) +Edge case addressing (Database): 边缘情况处理(数据库) +Edge case addressing (Processing): 边缘情况处理(处理) +Emergency restart: 紧急重启 +Enable advanced features: 启用高级功能 +Enable customization sync: 启用自定义同步 +Enable Developers' Debug Tools.: "启用开发者调试工具 " +Enable edge case treatment features: 启用边缘情况处理功能 +Enable poweruser features: 启用高级用户功能 +Enable this if your Object Storage doesn't support CORS: "如果您的对象存储不支持 CORS,请启用此功能 " +Enable this option to automatically apply the most recent change to documents even when it conflicts: 启用此选项可在文档冲突时自动应用最新的更改 +Encrypt contents on the remote database. If you use the plugin's synchronization feature, enabling this is recommended.: "加密远程数据库中的内容。如果您使用插件的同步功能,则建议启用此功能 " +Encrypting sensitive configuration items: 加密敏感配置项 +Encryption phassphrase. If changed, you should overwrite the server's database with the new (encrypted) files.: "加密密码。如果更改,您应该用新的(加密的)文件覆盖服务器的数据库 " +End-to-End Encryption: 端到端加密 +Endpoint URL: 终端URL +Enhance chunk size: 增大块大小 +Export: 导出 +Fetch: 获取 +Fetch chunks on demand: 按需获取块 +Fetch database with previous behaviour: 使用以前的行为获取数据库 +Fetch remote settings: 获取远端设置 +File to resolve conflict: 选择要解决冲突的文件 +Filename: 文件名 +Flag and restart: 标记后重启 +Forces the file to be synced when opened.: "打开文件时强制同步该文件 " +Fresh Start Wipe: 全新开始清除 +Garbage Collection V3 (Beta): 垃圾回收 V3(Beta) +Handle files as Case-Sensitive: 将文件视为区分大小写 +Hidden Files: 隐藏文件 +Hide completely: 完全隐藏 +How to display network errors when the sync server is unreachable.: 当同步服务器不可达时,如何显示网络错误。 +If disabled(toggled), chunks will be split on the UI thread (Previous behaviour).: 如果禁用(切换),chunks 将在 UI 线程上分割(以前的行为) +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.: 如果启用,将使用基于文件的、高效的自定义同步。启用此功能需要进行一次小的迁移。所有设备都应更新到 v0.23.18。一旦启用此功能,我们将失去与旧版本的兼容性 +If enabled, chunks will be split into no more than 100 items. However, dedupe is slightly weaker.: 如果启用,数据块将被分割成不超过 100 项。但是,去重效果会稍弱 +If enabled, newly created chunks are temporarily kept within the document, and graduated to become independent chunks once stabilised.: 如果启用,新创建的数据块将暂时保留在文档中,并在稳定后成为独立数据块 +If enabled, the ⛔ icon will be shown inside the status instead of the file warnings banner. No details will be shown.: 如果启用,状态栏内将显示 ⛔ 图标,而非文件警告横幅,不会显示任何详细信息。 +If enabled, the file under 1kb will be processed in the UI thread.: 如果启用,小于 1kb 的文件将在 UI 线程中处理 +If enabled, the notification of hidden files change will be suppressed.: 如果启用,将不再通知隐藏文件被更改 +If this enabled, all chunks will be stored with the revision made from its content. (Previous behaviour): 如果启用,所有 chunks 将使用根据其内容生成的修订版本存储(以前的行为) +If this enabled, All files are handled as case-Sensitive (Previous behaviour).: 如果启用,所有文件都将视为区分大小写(以前的行为) +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 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.: + 如果启用此选项,PouchDB 将保持连接打开 60 + 秒,如果在此时间内没有更改到达,则关闭并重新打开套接字,而不是无限期保持打开。当代理限制请求持续时间时有用,但可能会增加资源使用ß +Ignore files: 忽略文件 +Ignore patterns: 忽略模式 +Import connection: 导入连接 +Incubate Chunks in Document: 在文档中孵化块 +Initialise all journal history, On the next sync, every item will be received and sent.: 初始化所有日志历史。下次同步时,所有项目都会重新接收并发送。 +Interval (sec): 间隔(秒) +K: + exp: 实验性 + long_p2p_sync: "%{title_p2p_sync} (%{exp})" + P2P: "%{Peer}-to-%{Peer}" + Peer: Peer + ScanCustomization: 扫描自定义 + short_p2p_sync: P2P同步(%{exp}) + title_p2p_sync: Peer-to-Peer同步 +Keep empty folder: 保留空文件夹 +lang_def: Default +lang-de: Deutsche +lang-def: "%{lang_def}" +lang-es: Español +lang-fr: Français +lang-ja: 日本語 +lang-ko: 한국어 +lang-ru: Русский +lang-zh: 简体中文 +lang-zh-tw: 繁體中文 +Later: 稍后 +"Limit: {datetime} ({timestamp})": 限制:{datetime}({timestamp}) +LiveSync could not handle multiple vaults which have same name without different prefix, This should be automatically configured.: LiveSync 无法处理具有相同名称但没有不同前缀的多个库。这应该自动配置 +liveSyncReplicator: + beforeLiveSync: 在LiveSync前,先启动OneShot一次... + cantReplicateLowerValue: 我们无法复制更小的值 + checkingLastSyncPoint: 查找上次同步点 + couldNotConnectTo: |- + 无法连接到 ${uri} : ${name} + (${db}) + couldNotConnectToRemoteDb: 无法连接到远程数据库:${d} + couldNotConnectToServer: 无法连接到服务器 + couldNotConnectToURI: 无法连接到 ${uri}:${dbRet} + couldNotMarkResolveRemoteDb: 无法标记并解决远程数据库 + liveSyncBegin: LiveSync 开始... + lockRemoteDb: 锁定远程数据库以防止数据损坏 + markDeviceResolved: 将此设备标记为“已解决” + oneShotSyncBegin: OneShot同步开始...(${syncMode}) + remoteDbCorrupted: 远程数据库较新或已损坏,请确保已安装最新版本的self-hosted-livesync + remoteDbCreatedOrConnected: 远程数据库已创建或连接 + remoteDbDestroyed: 远程数据库已销毁 + remoteDbDestroyError: 远程数据库销毁时发生错误: + remoteDbMarkedResolved: 远程数据库已标记为已解决 + replicationClosed: 同步已关闭 + replicationInProgress: 同步正在进行中 + retryLowerBatchSize: 使用更小的批量大小重试:${batch_size}/${batches_limit} + unlockRemoteDb: 解锁远程数据库以防止数据损坏 +liveSyncSetting: + errorNoSuchSettingItem: 没有此设置项:${key} + originalValue: 原始值:${value} + valueShouldBeInRange: 值应该在 ${min} < value < ${max} 之间 +liveSyncSettings: + btnApply: 应用 +Lock: 锁定 +Lock Server: 锁定服务器 +Lock the remote server to prevent synchronization with other devices.: 锁定远端服务器,以阻止其他设备继续同步。 +logPane: + autoScroll: 自动滚动 + logWindowOpened: 日志窗口已打开 + pause: 暂停 + title: Self-hosted LiveSync 日志 + wrap: 自动换行 +Maximum delay for batch database updating: 批量数据库更新的最大延迟 +Maximum file size: 最大文件大小 +Maximum Incubating Chunk Size: 最大孵化块大小 +Maximum Incubating Chunks: 最大孵化块数 +Maximum Incubation Period: 最大孵化期 +MB (0 to disable).: MB(0为禁用) +Memory cache size (by total characters): 内存缓存大小(按总字符数) +Memory cache size (by total items): 内存缓存大小(按总项目数) +Merge: 合并 +Minimum delay for batch database updating: 批量数据库更新的最小延迟 +Minimum interval for syncing: 同步最小间隔 +moduleCheckRemoteSize: + logCheckingStorageSizes: 正在检查存储大小 + logCurrentStorageSize: 远程存储大小:${measuredSize} + logExceededWarning: 远程存储大小:${measuredSize} 超过 ${notifySize} + logThresholdEnlarged: 阈值已扩大到 ${size}MB + msgConfirmRebuild: 这可能需要一些时间。您真的想现在重建所有内容吗? + msgDatabaseGrowing: | + **您的数据库正在变大!** 但别担心,我们现在可以解决它。在远程存储空间用完之前还有时间。 + + | 测量大小 | 配置大小 | + | --- | --- | + | ${estimatedSize} | ${maxSize} | + + > [!MORE]- + > 如果您已经使用了很多年,数据库中可能会积累未引用的 chunks——也就是垃圾。因此,我们建议重建所有内容。它可能会变得小得多。 + > + > 如果您的库容量只是在增加,最好在整理文件后重建所有内容。即使您为了加速过程删除了文件,Self-hosted LiveSync 也不会删除实际数据。这大致[有文档记录](https://github.com/vrtmrz/obsidian-livesync/blob/main/docs/tech_info.md)。 + > + > 如果您不介意增加,可以将通知限制增加 100MB。如果您在自己的服务器上运行,就是这种情况。但是,最好还是不时地重建所有内容。 + > + + > [!WARNING] + > 如果您执行重建所有内容,请确保所有设备都已同步。尽管如此,插件会尽可能地合并 + msgSetDBCapacity: | + 我们可以设置一个最大数据库容量警告,**以便在远程存储空间耗尽前采取行动**。 + 您想启用这个功能吗? + + > [!MORE]- + > - 0: 不警告存储大小。 + > 如果您在远程存储(尤其是自托管)上有足够的空间,则推荐此选项。您可以手动检查存储大小并重建。 + > - 800: 如果远程存储大小超过 800MB 则发出警告。 + > 如果您使用的是 fly.io(1GB 限制) 或 IBM Cloudant,则推荐此选项。 + > - 2000: 如果远程存储大小超过 2GB 则发出警告。 + + 如果达到限制,系统会要求我们逐步增大限制 + option2GB: 2GB (标准) + option800MB: 800MB (Cloudant, fly.io) + optionAskMeLater: 稍后问我 + optionDismiss: 忽略 + optionIncreaseLimit: 增加到 ${newMax}MB + optionNoWarn: 不,请永远不要警告 + optionRebuildAll: 立即重建所有内容 + titleDatabaseSizeLimitExceeded: 远程存储大小超出限制 + titleDatabaseSizeNotify: 设置数据库大小通知 +moduleInputUIObsidian: + defaultTitleConfirmation: 确认 + defaultTitleSelect: 选择 + optionNo: 否 + optionYes: 是 +moduleLiveSyncMain: + logAdditionalSafetyScan: 额外的安全扫描... + logLoadingPlugin: 正在加载插件... + logPluginInitCancelled: 插件初始化被某个模块取消 + logPluginVersion: Self-hosted LiveSync v${manifestVersion} ${packageVersion} + logReadChangelog: LiveSync 已更新,请阅读更新日志! + logSafetyScanCompleted: 额外的安全扫描完成 + logSafetyScanFailed: 额外的安全扫描在某个模块上失败 + logUnloadingPlugin: 正在卸载插件... + logVersionUpdate: LiveSync 已更新,如果存在破坏性更新,所有自动同步已暂时禁用。请确保所有设备都更新到最新版本后再启用 + msgScramEnabled: | + Self-hosted LiveSync 已被配置为忽略某些事件。这样对吗? + + | 类型 | 状态 | 说明 | + |:---:|:---:|---| + | 存储事件 | ${fileWatchingStatus} | 所有修改都将被忽略 | + | 数据库事件 | ${parseReplicationStatus} | 所有同步的更改都将被推迟 | + + 您想恢复它们并重启 Obsidian 吗? + + > [!DETAILS]- + > 这些标志是在重建或获取时由插件设置的。如果过程异常结束,它们可能会被无意中保留。 + > 如果您不确定,可以尝试重新运行这些过程。请确保备份您的库。 + optionKeepLiveSyncDisabled: 保持 LiveSync 禁用 + optionResumeAndRestart: 恢复并重启 Obsidian + titleScramEnabled: 紧急停止已启用 +moduleLocalDatabase: + logWaitingForReady: 等待就绪... +moduleLog: + showLog: 显示日志 +moduleMigration: + docUri: https://github.com/vrtmrz/obsidian-livesync/blob/main/docs/zh/README_zh.md#%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8 + fix0256: + buttons: + checkItLater: 稍后检查 + DismissForever: 我已经修复了,不再询问 + fix: 修复 + message: | + 由于最近的一个 bug(在 v0.25.6 版本中),某些文件可能未正确保存到同步数据库中 + 我们已经扫描了文件,并发现一些需要修复的文件 + + **准备修复的文件:** + + ${files} + + 这些文件在存储中与原文件的大小匹配,可能是可恢复的 + 我们可以使用它们修复数据库,请点击下方的“修复”按钮进行修复 + + ${messageUnrecoverable} + + + 如果你希望再次执行此操作,可以前往 Hatch 页面进行操作 + messageUnrecoverable: | + **无法在此设备上修复的文件:** + + ${filesNotRecoverable} + + 这些文件的元数据不一致,无法在此设备上修复(大多数情况下我们无法确定哪一个是正确的) + 要恢复它们,请检查你的其他设备(同样使用此功能),或从备份中手动恢复 + title: 检测到损坏的文件 + insecureChunkExist: + buttons: + fetch: 我已经重建了远程数据库,将从远程获取 + later: 我稍后再做 + rebuild: 重建所有内容 + laterMessage: 我们强烈建议尽快处理此问题! + message: | + 一些块未安全存储,并且在数据库中未加密 + **请重建数据库以修复此问题**. + + 如果你的远程数据库未配置 SSL,或者使用了不安全的凭据 **你可能面临暴露敏感数据的风险**. + + 注意:请在所有设备上将 Self-hosted LiveSync 升级到 v0.25.6 或更高版本,并确保备份你的保险库 + + 注意2:重建所有内容和获取操作会消耗一些时间和流量,请在非高峰时段进行,并确保网络连接稳定 + title: 发现不安全的块! + logBulkSendCorrupted: 已启用批量发送 chunks,但此功能已损坏。给您带来不便,我们深表歉意。已自动禁用 + logFetchRemoteTweakFailed: 获取远程调整值失败 + logLocalDatabaseNotReady: 出错了!本地数据库尚未准备好 + logMigratedSameBehaviour: 已迁移到 db:${current},行为与之前相同 + logMigrationFailed: 从 ${old} 到 ${current} 的迁移失败或已取消 + logRedflag2CreationFail: 创建 redflag2 失败 + logRemoteTweakUnavailable: 无法获取远程调整值 + logSetupCancelled: 设置已取消,Self-hosted LiveSync 正在等待您的设置! + msgFetchRemoteAgain: |- + 您可能已经知道,Self-hosted LiveSync 更改了其默认行为和数据库结构。 + + 值得庆幸的是,在您的时间和努力下,远程数据库似乎已经迁移完成。恭喜! + + 但是,我们还需要一点点操作。此设备的配置与远程数据库不兼容。我们需要再次从远程数据库获取。我们现在应该再次从远程获取吗? + + ___注意:在更改配置并再次获取数据库之前,我们无法进行同步。___ + ___注意2:chunks 是完全不可变的,我们只能获取元数据和差异 + msgInitialSetup: |- + 您的设备**尚未设置**。让我引导您完成设置过程。 + + 请记住,每个对话框内容都可以复制到剪贴板。如果以后需要参考,可以将其粘贴到 Obsidian 的笔记中。您也可以使用翻译工具将其翻译成您的语言。 + + 首先,您有**设置 URI** 吗? + + 注意:如果您不知道这是什么,请参阅[文档](${URI_DOC}) + msgRecommendSetupUri: |- + 我们强烈建议您生成一个设置 URI 并使用它。 + 如果您对此不了解,请参阅[文档](${URI_DOC})(再次抱歉,但这很重要)。 + + 您想如何手动设置? + msgSinceV02321: |- + 自 v0.23.21 起,Self-hosted LiveSync 更改了默认行为和数据库结构。进行了以下更改: + + 1. **文件名的区分大小写** + 现在处理文件名时不区分大小写。这对于大多数平台来说是一个有益的更改,除了 Linux 和 iOS,它们不能有效地管理文件名的大小写敏感性。 + (在这些平台上,对于名称相同但大小写不同的文件将显示警告)。 + + 2. **chunks 的版本处理** + chunks 是不可变的,这使得它们的版本可以固定。此更改将提高文件保存的性能。 + + ___然而,要启用这些更改中的任何一个,都需要重建远程和本地数据库。这个过程需要几分钟,我们建议您在有充足时间时进行。___ + + - 如果您希望保持以前的行为,可以使用 `${KEEP}` 跳过此过程。 + - 如果您没有足够的时间,请选择 `${DISMISS}`。稍后会再次提示您。 + - 如果您已在另一台设备上重建了数据库,请选择 `${DISMISS}` 并尝试再次同步。由于检测到差异,系统会再次提示您 + optionAdjustRemote: 调整到远程设置 + optionDecideLater: 稍后决定 + optionEnableBoth: 启用两者 + optionEnableFilenameCaseInsensitive: "仅启用 #1" + optionEnableFixedRevisionForChunks: "仅启用 #2" + optionHaveSetupUri: 是的,我有 + optionKeepPreviousBehaviour: 保持以前的行为 + optionManualSetup: 全部手动设置 + optionNoAskAgain: 不,请稍后再次询问 + optionNoSetupUri: 不,我没有 + optionRemindNextLaunch: 下次启动时提醒我 + optionSetupViaP2P: Use %{short_p2p_sync} to set up + optionSetupWizard: 带我进入设置向导 + optionYesFetchAgain: 是的,再次获取 + titleCaseSensitivity: 大小写敏感性 + titleRecommendSetupUri: 推荐使用设置 URI + titleWelcome: 欢迎使用 Self-hosted LiveSync +moduleObsidianMenu: + replicate: 复制 +More actions: 更多操作 +Move remotely deleted files to the trash, instead of deleting.: 将远程删除的文件移至回收站,而不是直接删除 +Network warning style: 网络警告样式 +New Remote: 新建远端 +No limit configured: 未配置限制 +Non-Synchronising files: 不同步的文件 +Normal Files: 普通文件 +Not all messages have been translated. And, please revert to "Default" when reporting errors.: 并非所有消息都已翻译。请在报告错误时恢复为"默认" +Notify all setting files: 通知所有设置文件 +Notify customized: 通知自定义设置 +Notify when other device has newly customized.: "当其他设备有新的自定义设置时通知 " +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.: 一次处理的批量数量。默认为 40。最小为 2。此设置与批量大小一起控制一次在内存中保留多少文档 +Number of changes to sync at a time. Defaults to 50. Minimum is 2.: 一次同步的更改数量。默认为 50。最小为 2。 +obsidianLiveSyncSettingTab: + btnApply: 应用 + btnCheck: 检查 + btnCopy: 复制 + btnDisable: 禁用 + btnDiscard: 丢弃 + btnEnable: 启用 + btnFix: 修复 + btnGotItAndUpdated: 我明白了并且已更新 + btnNext: 下一步 + btnStart: 开始 + btnTest: 测试 + btnUse: 使用 + buttonFetch: 获取 + buttonNext: 下一步 + defaultLanguage: 默认语言 + descConnectSetupURI: 这是使用设置 URI 设置 Self-hosted LiveSync 的推荐方法 + descCopySetupURI: 非常适合设置新设备! + descEnableLiveSync: 仅在配置了上述两个选项之一或手动完成所有配置后启用此选项 + descFetchConfigFromRemote: 从已配置的远程服务器获取必要的设置 + descManualSetup: 不推荐,但如果您没有设置 URI 则很有用 + descTestDatabaseConnection: 打开数据库连接。如果未找到远程数据库并且您有创建数据库的权限,则将创建数据库 + descValidateDatabaseConfig: 检查并修复数据库配置中的任何潜在问题 + errAccessForbidden: ❗ 访问被禁止 + errCannotContinueTest: 我们无法继续测试。 + errCorsCredentials: ❗ cors.credentials 设置错误 + errCorsNotAllowingCredentials: ❗ CORS 不允许凭据 + errCorsOrigins: ❗ cors.origins 设置错误 + errEnableCors: ❗ httpd.enable_cors 设置错误 + errEnableCorsChttpd: ❗ chttpd.enable_cors 设置错误 + errMaxDocumentSize: ❗ couchdb.max_document_size 设置过低) + errMaxRequestSize: ❗ chttpd.max_http_request_size 设置过低) + errMissingWwwAuth: ❗ 缺少 httpd.WWW-Authenticate 设置 + errRequireValidUser: ❗ chttpd.require_valid_user 设置错误 + errRequireValidUserAuth: ❗ chttpd_auth.require_valid_user 设置错误 + labelDisabled: ⏹️:已禁用 + labelEnabled: 🔁:已启用 + levelAdvanced: (进阶) + levelEdgeCase: (边缘情况) + levelPowerUser: (高级用户) + linkOpenInBrowser: 在浏览器中打开 + linkPageTop: 页面顶部 + linkTipsAndTroubleshooting: 提示和故障排除 + linkTroubleshooting: /docs/troubleshooting.md + logCannotUseCloudant: "此功能不能与 IBM Cloudant 一起使用 " + logCheckingConfigDone: 配置检查完成 + logCheckingConfigFailed: 配置检查失败 + logCheckingDbConfig: 正在检查数据库配置 + logCheckPassphraseFailed: |- + 错误:无法使用远程服务器检查密码: + ${db} + logConfiguredDisabled: 已配置的同步模式:已禁用 + logConfiguredLiveSync: 已配置的同步模式:LiveSync + logConfiguredPeriodic: 已配置的同步模式:定期同步 + logCouchDbConfigFail: CouchDB 配置:${title} 失败 + logCouchDbConfigSet: CouchDB 配置:${title} -> 设置 ${key} 为 ${value} + logCouchDbConfigUpdated: CouchDB 配置:${title} 成功更新 + logDatabaseConnected: 数据库已连接 + logEncryptionNoPassphrase: 没有密码无法启用加密 + logEncryptionNoSupport: "您的设备不支持加密 " + logErrorOccurred: 发生错误!! + logEstimatedSize: 估计大小:${size} + logPassphraseInvalid: 密码无效,请修正 + logPassphraseNotCompatible: 错误:密码与远程服务器不兼容!请再次检查! + logRebuildNote: 同步已禁用,如果需要,请获取并重新启用 + logSelectAnyPreset: 请选择任一预设。 + msgAreYouSureProceed: 您确定要继续吗? + msgChangesNeedToBeApplied: 需要应用更改! + msgConfigCheck: --配置检查-- + msgConfigCheckFailed: 配置检查失败。仍要继续吗? + msgConnectionCheck: --连接检查-- + msgConnectionProxyNote: 如果您在连接检查时遇到问题(即使检查了配置后),请检查您的反向代理配置 + msgCurrentOrigin: "当前源: {origin}" + msgDiscardConfirmation: 您真的要丢弃现有的设置和数据库吗? + msgDone: --完成-- + msgEnableCors: 设置 httpd.enable_cors + msgEnableCorsChttpd: 设置 chttpd.enable_cors + msgEnableEncryptionRecommendation: 建议启用端到端加密和路径混淆。你确定要在未加密的情况下继续吗? + msgFetchConfigFromRemote: 要从远端服务器获取配置吗? + msgGenerateSetupURI: 全部完成!要生成设置 URI 以便配置其他设备吗? + msgIfConfigNotPersistent: 如果服务器配置不是持久的(例如,在 docker 上运行),此处的值可能会更改。一旦能够连接,请更新服务器 local.ini 中的设置 + msgInvalidPassphrase: 你的加密密码短语可能无效。你确定要继续吗? + msgNewVersionNote: 因为升级通知来到这里?请查看版本历史。如果您满意,请点击按钮。新的更新将再次提示此信息 + msgNonHTTPSInfo: 配置为非 HTTPS URI。请注意,这可能在移动设备上无法工作 + msgNonHTTPSWarning: 无法连接到非 HTTPS URI。请更新您的配置并重试 + msgNotice: ---注意--- + msgObjectStorageWarning: |- + 警告:此功能仍在开发中,请注意以下几点: + - 仅追加架构。需要重建才能缩小存储空间。 + - 有点脆弱。 + - 首次同步时,所有历史记录将从远程传输。注意数据上限和慢速。 + - 只有差异会实时同步。 + + 如果您遇到任何问题,或对此功能有任何想法,请在 GitHub 上创建 issue。 + 感谢您的巨大贡献 + msgOriginCheck: "源检查: {org}" + msgRebuildRequired: |- + 需要重建数据库以应用更改。请选择应用更改的方法。 + +
+ 图例 + + | 符号 | 含义 | + |: ------ :| ------- | + | ⇔ | 最新 | + | ⇄ | 同步以平衡 | + | ⇐,⇒ | 传输以覆盖 | + | ⇠,⇢ | 从另一侧传输以覆盖 | + +
+ + ## ${OPTION_REBUILD_BOTH} + 概览:📄 ⇒¹ 💻 ⇒² 🛰️ ⇢ⁿ 💻 ⇄ⁿ⁺¹ 📄 + 使用此设备的现有文件重建本地和远程数据库。 + 这将导致其他设备被锁定,并且它们需要执行获取操作。 + ## ${OPTION_FETCH} + 概览:📄 ⇄² 💻 ⇐¹ 🛰️ ⇔ 💻 ⇔ 📄 + 初始化本地数据库并使用从远程数据库获取的数据重建它。 + 这种情况包括您已经重建了远程数据库的情况。 + ## ${OPTION_ONLY_SETTING} + 仅存储设置。**注意:这可能导致数据损坏**;通常需要重建数据库 + msgSelectAndApplyPreset: 请选择并应用任一预设项以完成向导。 + msgSetCorsCredentials: 设置 cors.credentials + msgSetCorsOrigins: 设置 cors.origins + msgSetMaxDocSize: 设置 couchdb.max_document_size + msgSetMaxRequestSize: 设置 chttpd.max_http_request_size + msgSetRequireValidUser: 设置 chttpd.require_valid_user = true + msgSetRequireValidUserAuth: 设置 chttpd_auth.require_valid_user = true + msgSettingModified: 设置 "${setting}" 已从另一台设备修改。点击 {HERE} 重新加载设置。点击其他地方忽略更改 + msgSettingsUnchangeableDuringSync: 这些设置在同步期间无法更改。请在“同步设置”中禁用所有同步以解锁 + msgSetWwwAuth: 设置 httpd.WWW-Authenticate + nameApplySettings: 应用设置 + nameConnectSetupURI: 使用设置 URI 连接 + nameCopySetupURI: 将当前设置复制为设置 URI + nameDisableHiddenFileSync: 禁用隐藏文件同步 + nameDiscardSettings: 丢弃现有设置和数据库 + nameEnableHiddenFileSync: 启用隐藏文件同步 + nameEnableLiveSync: 启用 LiveSync + nameHiddenFileSynchronization: 隐藏文件同步 + nameManualSetup: 手动设置 + nameTestConnection: 测试连接 + nameTestDatabaseConnection: 测试数据库连接 + nameValidateDatabaseConfig: 验证数据库配置 + okAdminPrivileges: ✔ 您拥有管理员权限 + okCorsCredentials: ✔ cors.credentials 设置正确 + okCorsCredentialsForOrigin: CORS 凭据正常 + okCorsOriginMatched: ✔ CORS 源正常 + okCorsOrigins: ✔ cors.origins 设置正确 + okEnableCors: ✔ httpd.enable_cors 设置正确 + okEnableCorsChttpd: ✔ chttpd.enable_cors is ok. + okMaxDocumentSize: ✔ couchdb.max_document_size 设置正确 + okMaxRequestSize: ✔ chttpd.max_http_request_size 设置正确 + okRequireValidUser: ✔ chttpd.require_valid_user 设置正确 + okRequireValidUserAuth: ✔ chttpd_auth.require_valid_user 设置正确 + okWwwAuth: ✔ httpd.WWW-Authenticate 设置正确 + optionApply: 应用 + optionCancel: 取消 + optionCouchDB: CouchDB + optionDisableAllAutomatic: 禁用所有自动同步 + optionFetchFromRemote: 从远程获取 + optionHere: 这里 + optionLiveSync: LiveSync 同步 + optionMinioS3R2: Minio, S3, R2 + optionOkReadEverything: "好的,我已经阅读了所有内容 " + optionOnEvents: 事件触发时 + optionPeriodicAndEvents: 定期与事件触发 + optionPeriodicWithBatch: 定期(批处理) + optionRebuildBoth: 从此设备重建两者 + optionSaveOnlySettings: (危险)仅保存设置 + panelChangeLog: 更新日志 + panelGeneralSettings: 常规设置 + panelPrivacyEncryption: 隐私与加密 + panelRemoteConfiguration: 远程配置 + panelSetup: 设置 + serverVersion: "服务器信息: ${info}" + titleActiveRemoteServer: 活动远程服务器 + titleAppearance: 外观 + titleConflictResolution: 冲突处理 + titleCongratulations: 恭喜! + titleCouchDB: CouchDB 服务器 + titleDeletionPropagation: 删除传播 + titleEncryptionNotEnabled: 尚未启用加密 + titleEncryptionPassphraseInvalid: 加密密码短语无效 + titleExtraFeatures: 启用额外和高级功能 + titleFetchConfig: 获取配置 + titleFetchConfigFromRemote: 从远程服务器获取配置 + titleFetchSettings: 获取设置 + titleHiddenFiles: 隐藏文件 + titleLogging: 日志 + titleMinioS3R2: MinIO、S3、R2 + titleNotification: 通知 + titleOnlineTips: 在线提示 + titleQuickSetup: 快速设置 + titleRebuildRequired: 需要重建 + titleRemoteConfigCheckFailed: 远端配置检查失败 + titleRemoteServer: 远端服务器 + titleReset: 重置 + titleSetupOtherDevices: 设置其他设备 + titleSynchronizationMethod: 同步方式 + titleSynchronizationPreset: 同步预设 + titleSyncSettings: 同步设置 + titleSyncSettingsViaMarkdown: 通过 Markdown 同步设置 + titleUpdateThinning: 更新精简 + warnCorsOriginUnmatched: ⚠ CORS 源不匹配 {from}->{to} + warnNoAdmin: ⚠ 您没有管理员权限 +Ok: 确定 +Old Algorithm: 旧算法 +Older fallback (Slow, W/O WebAssembly): 旧版回退(较慢,无 WebAssembly) +Open: 打开 +Open the dialog: 打开对话框 +Overwrite: 覆盖 +Overwrite patterns: 覆盖模式 +Overwrite remote: 覆盖远端 +Overwrite remote with local DB and passphrase.: 使用本地数据库和密码短语覆盖远端。 +Overwrite Server Data with This Device's Files: 用本设备文件覆盖服务器数据 +P2P: + AskPassphraseForDecrypt: 远程对等方共享了配置,请输入密码短语以解密配置 + AskPassphraseForShare: 远程对等方请求此设备配置,请输入密码短语以共享配置。你可以通过取消此对话框来忽略此请求 + DisabledButNeed: "%{title_p2p_sync} 已禁用。你确定要启用它吗?" + FailedToOpen: 无法打开 P2P 连接到信令服务器 + NoAutoSyncPeers: 未找到自动同步的对等方,请在 %{long_p2p_sync} 面板中设置对等方 + NoKnownPeers: 未检测到对等方,正在等待其他对等方的连接... + Note: + description: >2- + This replicator allows us to synchronise our vault with other devices + using a peer-to-peer connection. We can use this to synchronise our + vault with our other devices without using a cloud service. + + This replicator is based on Trystero. It also uses a signaling server to + establish a connection between devices. The signaling server is used to + exchange connection information between devices. It does (or,should) not + know or store any of our data. + + + The signaling server can be hosted by anyone. This is just a Nostr relay. + For the sake of simplicity and checking the behaviour of the replicator, + an instance of the signaling server is hosted by vrtmrz. You can use the + experimental server provided by vrtmrz, or you can use any other server. + + + By the way, even if the signaling server does not store our data, it can + see the connection information of some of our devices. Please be aware of + this. Also, be cautious when using the server provided by someone else. + important_note: The Experimental Implementation of the Peer-to-Peer Replicator. + important_note_sub: This feature is still in the experimental stage. Please be + aware that this feature may not work as expected. Furthermore, it may have + some bugs, security issues, and other issues. Please use this feature at + your own risk. Please contribute to the development of this feature. + Summary: What is this feature? (and some important notes, please read once) + NotEnabled: "%{title_p2p_sync} is not enabled. We cannot open a new connection." + P2PReplication: "%{P2P} Replication" + PaneTitle: "%{long_p2p_sync}" + ReplicatorInstanceMissing: P2P Sync replicator is not found, possibly not have + been configured or enabled. + SeemsOffline: Peer ${name} seems offline, skipped. + SyncAlreadyRunning: P2P Sync is already running. + SyncCompleted: P2P Sync completed. + SyncStartedWith: P2P Sync with ${name} have been started. +paneMaintenance: + markDeviceResolvedAfterBackup: 请在完成备份后将此设备标记为已处理。 + remoteLockedAndDeviceNotAccepted: 远端数据库已锁定,且此设备尚未被接受。 + remoteLockedResolvedDevice: 远端数据库已锁定,但此设备已被接受。 + unlockDatabaseReady: 现在可以解锁数据库。 +Passphrase: 密码 +Passphrase of sensitive configuration items: 敏感配置项的密码 +password: 密码 +Password: 密码 +Paste a connection string: 粘贴连接字符串 +Path Obfuscation: 路径混淆 +Patterns to match files for overwriting instead of merging: 用于匹配需覆盖而非合并文件的模式 +Patterns to match files for syncing: 用于匹配同步文件的模式 +Peer-to-Peer Synchronisation: 点对点同步 +Per-file-saved customization sync: 按文件保存的自定义同步 +Perform: 执行 +Perform cleanup: 执行清理 +Perform Garbage Collection: 执行垃圾回收 +Perform Garbage Collection to remove unused chunks and reduce database size.: 执行垃圾回收以清理未使用的 chunks 并减小数据库体积。 +Periodic Sync interval: 定期同步间隔 +Pick a file to resolve conflict: 选择要解决冲突的文件 +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: 请设置此设备名称 +Prepare the 'report' to create an issue: 准备 '报告' 以创建问题单 +Presets: 预设 +Process small files in the foreground: 在前台处理小文件 +Property Encryption: 属性加密 +PureJS fallback (Fast, W/O WebAssembly): PureJS 回退(快速,无 WebAssembly) +Purge all download/upload cache.: 清除所有下载/上传缓存。 +Purge all journal counter: 清除所有日志计数器 +Rebuild local and remote database with local files.: 使用本地文件重建本地和远端数据库。 +Rebuilding Operations (Remote Only): 重建操作(仅远端) +Recreate all: 全部重建 +Recreate missing chunks for all files: 为所有文件重建缺失的 chunks +RedFlag: + Fetch: + Method: + Desc: >- + How do you want to fetch? + + - %{RedFlag.Fetch.Method.FetchSafer}. + **Low Traffic**, **High CPU**, **Low Risk** + Recommended if ... + - Files possibly inconsistent + - Files were not so much + - %{RedFlag.Fetch.Method.FetchSmoother}. + **Low Traffic**, **Moderate CPU**, **Low to Moderate Risk** + Recommended if ... + - Files probably consistent + - You have a lot of files. + - %{RedFlag.Fetch.Method.FetchTraditional}. + **High Traffic**, **Low CPU**, **Low to Moderate Risk** + + >[!INFO]- Details + + > ## %{RedFlag.Fetch.Method.FetchSafer}. + + > **Low Traffic**, **High CPU**, **Low Risk** + + > This option first creates a local database using existing local files + before fetching data from the remote source. + + > If matching files exist both locally and remotely, only the + differences between them will be transferred. + + > However, files present in both locations will initially be handled as + conflicted files. They will be resolved automatically if they are not + actually conflicted, but this process may take time. + + > This is generally the safest method, minimizing data loss risk. + + > ## %{RedFlag.Fetch.Method.FetchSmoother}. + + > **Low Traffic**, **Moderate CPU**, **Low to Moderate Risk** (depending + operation) + + > This option first creates chunks from local files for the database, + then fetches data. Consequently, only chunks missing locally are + transferred. However, all metadata is taken from the remote source. + + > Local files are then compared against this metadata at launch. The + content considered newer will overwrite the older one (by modified + time). This outcome is then synchronised back to the remote database. + + > This is generally safe if local files are genuinely the latest + timestamp. However, it can cause problems if a file has a newer + timestamp but older content (like the initial `welcome.md`). + + > This uses less CPU and faster than + "%{RedFlag.Fetch.Method.FetchSafer}", but it may lead to data loss if + not used carefully. + + > ## %{RedFlag.Fetch.Method.FetchTraditional}. + + > **High Traffic**, **Low CPU**, **Low to Moderate Risk** (depending + operation) + + > All things will be fetched from the remote. + + > Similar to the %{RedFlag.Fetch.Method.FetchSmoother}, but all chunks + are fetched from the remote source. + + > This is the most traditional way to fetch, typically consuming the + most network traffic and time. It also carries a similar risk of + overwriting remote files to the '%{RedFlag.Fetch.Method.FetchSmoother}' + option. + + > However, it is often considered the most stable method because it is + the longest-established and most straightforward approach. + FetchSafer: Create a local database once before fetching + FetchSmoother: Create local file chunks before fetching + FetchTraditional: Fetch everything from the remote + Title: How do you want to fetch? + FetchRemoteConfig: + Buttons: + Cancel: No, use local settings + Fetch: Yes, fetch and apply remote settings + Message: Do you want to fetch and apply remotely stored preference settings to + the device? + Title: Fetch Remote Configuration +Reducing the frequency with which on-disk changes are reflected into the DB: 降低将磁盘上的更改反映到数据库中的频率 +Region: 区域 +Remediation: 修复设置 +Remediation Setting Changed: 修复设置已更改 +Remote Database Tweak (In sunset): 远端数据库调优(逐步淘汰) +Remote Databases: 远端数据库 +Remote name: 远端名称 +Remote server type: 远程服务器类型 +Remote Type: 远程类型 +Rename: 重命名 +Replicator: + Dialogue: + Locked: + Action: + Dismiss: Cancel for reconfirmation + Fetch: Reset Synchronisation on This Device + Unlock: Unlock the remote database + Message: + _value: > + Remote database is locked. This is due to a rebuild on one of the + terminals. + + The device is therefore asked to withhold the connection to avoid + database corruption. + + + There are three options that we can do: + + + - %{Replicator.Dialogue.Locked.Action.Fetch} + The most preferred and reliable way. This will dispose the local database once, and fetch all from the remote database again, In most case, we can perform this safely. However, it takes some time and should be done in stable network. + - %{Replicator.Dialogue.Locked.Action.Unlock} + This method can only be used if we are already reliably synchronised by other replication methods. This does not simply mean that we have the same files. If you are not sure, you should avoid it. + - %{Replicator.Dialogue.Locked.Action.Dismiss} + This will cancel the operation. And we will asked again on next request. + Fetch: Fetch all has been scheduled. Plug-in will be restarted to perform it. + Unlocked: The remote database has been unlocked. Please retry the operation. + Title: Locked + Message: + Cleaned: Database cleaning up is in process. replication has been cancelled + InitialiseFatalError: No replicator is available, this is the fatal error. + Pending: Some file events are pending. Replication has been cancelled. + SomeModuleFailed: Replication has been cancelled by some module failure + VersionUpFlash: An update has been detected. Please open the Settings dialogue + and check the Change Log. Replication has been cancelled. +Requires restart of Obsidian: 需要重启 Obsidian +Requires restart of Obsidian.: "需要重启 Obsidian " +Rerun Onboarding Wizard: 重新运行引导向导 +Rerun the onboarding wizard to set up Self-hosted LiveSync again.: 重新运行引导向导以再次设置 Self-hosted LiveSync。 +Rerun Wizard: 重新运行向导 +Resend: 重新发送 +Resend all chunks to the remote.: 将所有 chunks 重新发送到远端。 +Reset: 重置 +Reset all: 全部重置 +Reset all journal counter: 重置所有日志计数器 +Reset journal received history: 重置日志接收历史 +Reset journal sent history: 重置日志发送历史 +Reset notification threshold and check the remote database usage: 重置通知阈值并检查远程数据库使用情况 +Reset received: 重置接收记录 +Reset sent history: 重置发送历史 +Reset Synchronisation information: 重置同步信息 +Reset Synchronisation on This Device: 重置此设备上的同步 +Reset the remote storage size threshold and check the remote storage size again.: 重置远程存储大小阈值并再次检查远程存储大小。 +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.: + 通过丢弃所有非最新版本来减少存储空间。这需要远程服务器和本地客户端具备相同数量的可用空间。 +Resolve All: 全部处理 +Resolve all conflicted files: 解决所有冲突文件 +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.": 将所有冲突文件统一保留较新的版本。注意:这会覆盖较旧的版本,且被覆盖的内容无法恢复。 +Restart Now: 立即重启 +Restore or reconstruct local database from remote.: 从远端恢复或重建本地数据库。 +Run Doctor: 立即诊断 +Scan for Broken files: 扫描损坏文件 +Scram Switches: 紧急开关 +Save settings to a markdown file. You will be notified when new settings arrive. You can set different files by the platform.: "将设置保存到一个 Markdown 文件中。当新设置到达时,您将收到通知。您可以根据平台设置不同的文件 " +Saving will be performed forcefully after this number of seconds.: "在此秒数后将强制执行保存 " +Scan changes on customization sync: 在自定义同步时扫描更改 +Scan customization automatically: 自动扫描自定义设置 +Scan customization before replicating.: "在复制前扫描自定义设置 " +Scan customization every 1 minute.: "每1分钟扫描自定义设置 " +Scan customization periodically: 定期扫描自定义设置 +Scan for hidden files before replication: 复制前扫描隐藏文件 +Scan hidden files periodically: 定期扫描隐藏文件 +Schedule and Restart: 安排并重启 +Scram!: 紧急处置 +Seconds, 0 to disable: 秒,0为禁用 +Seconds. Saving to the local database will be delayed until this value after we stop typing or saving.: "秒。在我们停止输入或保存后,保存到本地数据库将延迟此值 " +Secret Key: Secret Key +Select the database adapter to use.: 选择要使用的数据库适配器。 +Send: 发送 +Send chunks: 发送 chunks +Server URI: 服务器 URI +Setting: + GenerateKeyPair: + Desc: |- + 我们已经生成了一组密钥对! + + 注意:这组密钥对之后将不会再次显示。请务必妥善保管;如果丢失,你需要重新生成新的密钥对。 + 注意 2:公钥采用 spki 格式,私钥采用 pkcs8 格式。为方便复制,公钥中的换行会被转换为 `\n`。 + 注意 3:公钥应配置在远端数据库中,私钥应配置在本地设备上。 + + >[!仅限本人查看]- + >
+ > + > ### 公钥 + > ``` + ${public_key} + > ``` + > + > ### 私钥 + > ``` + ${private_key} + > ``` + > + >
+ + >[!整段复制]- + > + >
+ > + > ``` + ${public_key} + ${private_key} + > ``` + > + >
+ Title: 已生成新的密钥对! + TroubleShooting: + _value: 故障排除 + Doctor: + _value: 设置诊断 + Desc: 检测系统中不合理的设置。(与迁移期间逻辑相同) + ScanBrokenFiles: + _value: 扫描损坏或异常的文件 + Desc: 扫描数据库中未正确存储的文件。 +SettingTab: + Message: + AskRebuild: Your changes require fetching from the remote database. Do you want + to proceed? +Setup: + Apply: + Buttons: + ApplyAndFetch: Apply and Fetch + ApplyAndMerge: Apply and Merge + ApplyAndRebuild: Apply and Rebuild + Cancel: Discard and Cancel + OnlyApply: Only Apply + Message: >- + The new configuration is ready. Let us proceed to apply it. + + There are several ways to apply this: + + + - Apply and Fetch + Configure this device as a new client. After applying, synchronise from the remote server. + - Apply and Merge + Configure on a device that already has the file. It processes the local files and transfers the differences. Conflicts may arise. + - Apply and Rebuild + Rebuild the remote using local files. This is typically done if the server becomes corrupted or we wish to start from scratch. + Other devices will be locked and required to re-fetch. + - Only Apply + Apply only. Conflicts may arise if a rebuild is required. + Title: Apply new configuration from the ${method} + WarningRebuildRecommended: "NOTE: after adjusting the settings, it has been + determined that a rebuild is required; Just Import is not recommended." + Doctor: + Buttons: + No: No, please use the settings in the URI as is + Yes: Yes, please consult the doctor + Message: >- + Self-hosted LiveSync has gradually become longer in history and some + recommended settings have changed. + + + Now, setup is a very good time to do this. + + + Do you want to run Doctor to check if the imported settings are optimal + compared to the latest state? + Title: Do you want to consult the doctor? + FetchRemoteConf: + Buttons: + Fetch: Yes, please fetch the configuration + Skip: No, please use the settings in the URI + Message: >- + If we have already synchronised once with another device, the remote + database stores the suitable configuration values between the synchronised + devices. The plug-in would like to retrieve them for robust configuration. + + + However, we have to make sure the one thing. Are we currently in a + situation where we can access the network safely and retrieve the + settings? + + + Note: Mostly, you are safe to do this, that your remote database is hosted + with a SSL certificate, and your network is not compromised. + Title: Fetch configuration from remote database? + QRCode: >- + We have generated a QR code to transfer the settings. Please scan the QR + code with your phone or other device. + + Note: The QR code is not encrypted, so be careful to open this. + + + >[!FOR YOUR EYES ONLY]- + + >
${qr_image}
+ ShowQRCode: + _value: 使用QR码 + Desc: 使用QR码来传递配置 + RemoteE2EE: + Title: 端到端加密 + Guidance: 请配置你的端到端加密设置。 + LabelEncrypt: 端到端加密 + PlaceholderPassphrase: 输入你的密码短语 + StronglyRecommendedTitle: 强烈推荐 + StronglyRecommendedLine1: 启用端到端加密后,数据会先在你的设备上加密,再发送到远程服务器。这意味着即使有人获得了服务器访问权限,没有密码短语也无法读取你的数据。请务必记住你的密码短语,因为在其他设备上解密数据时也需要它。 + StronglyRecommendedLine2: 另外请注意,如果你正在使用 Peer-to-Peer 同步,当你以后切换到其他同步方式并连接远程服务器时,也会使用这组配置。 + MultiDestinationWarning: 即使连接到多个同步目标,此设置也必须保持一致。 + LabelObfuscateProperties: 混淆属性 + ObfuscatePropertiesDesc: 混淆属性(例如文件路径、大小、创建和修改日期)可以增加一层额外保护,使远程服务器上的文件与文件夹结构及名称更难被识别。这有助于保护你的隐私,也让未授权用户更难推断你的数据相关信息。 + AdvancedTitle: 高级 + LabelEncryptionAlgorithm: 加密算法 + DefaultAlgorithmDesc: 在大多数情况下,你应继续使用默认算法(${algorithm})。只有当你已有一个采用不同格式加密的 Vault 时,才需要调整此设置。 + AlgorithmWarning: 更改加密算法会导致之前使用其他算法加密的数据无法访问。请确保所有设备都配置为使用同一算法,以保持对数据的访问能力。 + PassphraseValidationLine1: 请注意,在同步过程真正开始之前,端到端加密密码短语不会被校验。这是一项用于保护你数据的安全措施。 + PassphraseValidationLine2: 因此,在手动配置服务器信息时请务必格外小心。如果输入了错误的密码短语,服务器上的数据将会损坏。请理解这属于预期行为。 + ButtonProceed: 继续 + ButtonCancel: 取消 + UseSetupURI: + Title: 输入 Setup URI + GuidanceLine1: 请输入在服务器安装期间或另一台设备上生成的 Setup URI,以及 Vault 密码短语。 + GuidanceLine2: 你可以在命令面板中运行“将设置复制为新的 Setup URI”命令来生成新的 Setup URI。 + LabelSetupURI: Setup URI + ValidInfo: Setup URI 有效,可以使用。 + InvalidInfo: Setup URI 无效,请检查后重试。 + LabelPassphrase: Vault 密码短语 + PlaceholderPassphrase: 输入 Vault 密码短语 + ErrorPassphraseRequired: 请输入 Vault 密码短语。 + ErrorFailedToParse: 无法解析 Setup URI,请检查 URI 和密码短语。 + ButtonProceed: 测试设置并继续 + ButtonCancel: 取消 + ScanQRCode: + Title: 扫描二维码 + Guidance: 请按照以下步骤从现有设备导入设置。 + Step1: 在这台设备上,请保持此 Vault 处于打开状态。 + Step2: 在源设备上打开 Obsidian。 + Step3: 在源设备上,从命令面板运行“将设置显示为二维码”命令。 + Step4: 在这台设备上,切换到相机应用或使用二维码扫描器扫描显示出的二维码。 + ButtonClose: 关闭此对话框 +"Please enable 'Compute revisions for chunks' in settings to use Garbage Collection.": 要使用垃圾回收,请在设置中启用“Compute revisions for chunks”。 +"Please disable 'Read chunks online' in settings to use Garbage Collection.": 要使用垃圾回收,请在设置中禁用“Read chunks online”。 +"Setup URI dialog cancelled.": Setup URI 对话框已取消。 +"Please select 'Cancel' explicitly to cancel this operation.": 如需取消此操作,请明确选择“取消”。 +"Failed to connect to remote for compaction.": 无法连接到远程数据库以执行压缩。 +"Failed to connect to remote for compaction. ${reason}": 无法连接到远程数据库以执行压缩。${reason} +"Compaction in progress on remote database...": 正在远程数据库上执行压缩... +"Compaction on remote database timed out.": 远程数据库压缩超时。 +"Compaction on remote database completed successfully.": 远程数据库压缩已成功完成。 +"Compaction on remote database failed.": 远程数据库压缩失败。 +"Failed to start one-shot replication before Garbage Collection. Garbage Collection Cancelled.": 无法在垃圾回收前启动一次性复制。垃圾回收已取消。 +"Cancel Garbage Collection": 取消垃圾回收 +"No connected device information found. Cancelling Garbage Collection.": 未找到已连接设备的信息。正在取消垃圾回收。 +"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.": |- + 以下已接受节点缺少节点信息: + - ${missingNodes} + + 这表示它们已有一段时间未连接,或仍停留在较旧版本。 + 如有可能,建议先更新所有设备。如果有已不再使用的设备,可以先锁定一次远程端以清除全部已接受节点。 +"Ignore and Proceed": 忽略并继续 +"Node Information Missing": 节点信息缺失 +"Garbage Collection cancelled by user.": 用户已取消垃圾回收。 +"Proceeding with Garbage Collection, ignoring missing nodes.": 正在继续执行垃圾回收,并忽略缺失节点。 +"Proceed Garbage Collection": 继续执行垃圾回收 +"> [!INFO]- The connected devices have been detected as follows:\n${devices}": |- + > [!INFO]- 已检测到以下已连接设备: + ${devices} +"Device": 设备 +"Node ID": 节点 ID +"Obsidian version": Obsidian 版本 +"Plug-in version": 插件版本 +"Progress": 进度 +"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.": |- + 某些设备的进度值不同(最大:${maxProgress},最小:${minProgress})。 + 这可能表示某些设备尚未完成同步,从而可能引发冲突。强烈建议在继续之前先确认所有设备都已同步。 +"All devices have the same progress value (${progress}). Your devices seem to be synchronised. And be able to proceed with Garbage Collection.": 所有设备的进度值均相同(${progress})。看起来你的设备已经同步,可以继续执行垃圾回收。 +"Garbage Collection Confirmation": 垃圾回收确认 +"Proceeding with Garbage Collection.": 正在执行垃圾回收。 +"Garbage Collection: Scanned ${scanned} / ~${docCount}": |- + 垃圾回收:已扫描 ${scanned} / ~${docCount} +"Garbage Collection: Scanning completed. Total chunks: ${totalChunks}, Used chunks: ${usedChunks}": |- + 垃圾回收:扫描完成。总 chunks:${totalChunks},已使用 chunks:${usedChunks} +"Garbage Collection: Found ${unusedChunks} unused chunks to delete.": |- + 垃圾回收:发现 ${unusedChunks} 个未使用的 chunks 待删除。 +"Garbage Collection completed. Deleted chunks: ${deletedChunks} / ${totalChunks}. Time taken: ${seconds} seconds.": |- + 垃圾回收完成。已删除 chunks:${deletedChunks} / ${totalChunks}。耗时:${seconds} 秒。 +"Failed to start replication after Garbage Collection.": 垃圾回收后无法启动复制。 +Should we keep folders that don't have any files inside?: 我们是否应该保留内部没有任何文件的文件夹? +Should we only check for conflicts when a file is opened?: 我们是否应该仅在文件打开时检查冲突? +Should we prompt you about conflicting files when a file is opened?: 当文件打开时,是否提示冲突文件? +Should we prompt you for every single merge, even if we can safely merge automatcially?: 即使我们可以安全地自动合并,是否也应该为每一次合并提示您? +Show full banner: 显示完整横幅 +Show icon only: 仅显示图标 +Show only notifications: 仅显示通知 +Show status as icons only: 仅以图标显示状态 +Show status icon instead of file warnings banner: 显示状态图标,而非文件警告横幅 +Show status inside the editor: 在编辑器内显示状态 +Show status on the status bar: 在状态栏上显示状态 +Show verbose log. Please enable if you report an issue.: "显示详细日志。如果您报告问题,请启用此选项 " +Starts synchronisation when a file is saved.: "当文件保存时启动同步 " +Stop reflecting database changes to storage files.: "停止将数据库更改反映到存储文件 " +Stop watching for file changes.: "停止监视文件更改 " +Suppress notification of hidden files change: 暂停隐藏文件更改的通知 +Suspend database reflecting: 暂停数据库反映 +Suspend file watching: 暂停文件监视 +Switch to IDB: 切换到 IDB +Switch to IndexedDB: 切换到 IndexedDB +Sync after merging file: 合并文件后同步 +Sync automatically after merging files: 合并文件后自动同步 +Sync Mode: 同步模式 +Sync on Editor Save: 编辑器保存时同步 +Sync on File Open: 打开文件时同步 +Sync on Save: 保存时同步 +Sync on Startup: 启动时同步 +Synchronising files: 同步文件 +Syncing: 同步中 +Target patterns: 目标模式 +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 Hash algorithm for chunk IDs: 块 ID 的哈希算法(实验性) +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 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.: 基于事件自动同步的最小间隔。 +This passphrase will not be copied to another device. It will be set to `Default` until you configure it again.: "此密码不会复制到另一台设备。在您再次配置之前,它将设置为 `Default` " +This will recreate chunks for all files. If there were missing chunks, this may fix the errors.: 这会为所有文件重新生成 chunks。如果之前存在缺失的 chunks,这可能修复相关错误。 +TweakMismatchResolve: + Action: + Dismiss: Dismiss + UseConfigured: Use configured settings + UseMine: Update remote database settings + UseMineAcceptIncompatible: Update remote database settings but keep as is + UseMineWithRebuild: Update remote database settings and rebuild again + UseRemote: Apply settings to this device + UseRemoteAcceptIncompatible: Apply settings to this device, but and ignore incompatibility + UseRemoteWithRebuild: Apply settings to this device, and fetch again + Message: + Main: >- + + The settings in the remote database are as follows. These values are + configured by other devices, which are synchronised with this device at + least once. + + + If you want to use these settings, please select + %{TweakMismatchResolve.Action.UseConfigured}. + + If you want to keep the settings of this device, please select + %{TweakMismatchResolve.Action.Dismiss}. + + + ${table} + + + >[!TIP] + + > If you want to synchronise all settings, please use `Sync settings via + markdown` after applying minimal configuration with this feature. + + + ${additionalMessage} + MainTweakResolving: |- + Your configuration has not been matched with the one on the remote server. + + Following configuration should be matched: + + ${table} + + Let us know your decision. + + ${additionalMessage} + UseRemote: + WarningRebuildRecommended: >- + + >[!NOTICE] + + > Some changes are compatible but may consume extra storage and transfer + volumes. A rebuild is recommended. However, a rebuild may not be + performed at present, but may be implemented in future maintenance. + + > ***Please ensure that you have time and are connected to a stable + network to apply!*** + WarningRebuildRequired: >- + + >[!WARNING] + + > Some remote configurations are not compatible with the local database + of this device. Rebuilding the local database will be required. + + > ***Please ensure that you have time and are connected to a stable + network to apply!*** + WarningIncompatibleRebuildRecommended: >- + + >[!NOTICE] + + > We have detected that some of the values are different to make + incompatible the local database with the remote database. + + > Some changes are compatible but may consume extra storage and transfer + volumes. A rebuild is recommended. However, a rebuild may not be performed + at present, but may be implemented in future maintenance. + + > If you want to rebuild, it takes a few minutes or more. **Make sure it + is safe to perform it now.** + WarningIncompatibleRebuildRequired: >- + + >[!WARNING] + + > We have detected that some of the values are different to make + incompatible the local database with the remote database. + + > Either local or remote rebuilds are required. Both of them takes a few + minutes or more. **Make sure it is safe to perform it now.** + Table: + _value: |+ + | Value name | This device | On Remote | + |: --- |: ---- :|: ---- :| + ${rows} + + Row: "| ${name} | ${self} | ${remote} |" + Title: + _value: Configuration Mismatch Detected + TweakResolving: Configuration Mismatch Detected + UseRemoteConfig: Use Remote Configuration +Ui: + Common: + Signal: + Caution: 注意 + Danger: 危险 + Notice: 提示 + Warning: 警告 + Settings: + Common: + Analyse: 分析 + Back: 返回 + Check: 检查 + Configure: 配置 + Continue: 继续 + Delete: 删除 + Fetch: 获取 + Lock: 锁定 + Merge: 合并 + Open: 打开 + Overwrite: 覆盖 + Perform: 执行 + ResetAll: 全部重置 + ResolveAll: 全部解决 + Scan: 扫描 + Send: 发送 + Use: 使用 + VerifyAll: 全部校验 + Advanced: + LocalDatabaseTweak: 本地数据库调整 + MemoryCache: 内存缓存 + TransferTweak: 传输调整 + CustomizationSync: + OpenDesc: 打开此对话框 + Panel: 自定义同步 + WarnChangeDeviceName: 启用此功能时无法修改设备名称。请先关闭此功能,再修改设备名称。 + WarnSetDeviceName: 请先设置用于标识此设备的设备名称。该名称应在你的设备之间保持唯一。未设置前无法启用此功能。 + Hatch: + AnalyseDatabaseUsage: 分析数据库使用情况 + AnalyseDatabaseUsageDesc: 分析数据库使用情况,并生成 TSV 报告供你自行诊断。你可以将生成的报告粘贴到任意电子表格工具中查看。 + BackToNonConfigured: 返回未配置状态 + ConvertNonObfuscated: 检查并转换未进行路径混淆的文件 + ConvertNonObfuscatedDesc: 检查本地数据库中未按路径混淆方式存储的文件,并在需要时将其转换为正确格式。 + CopyIssueReport: 复制报告到剪贴板 + DatabaseLabel: 数据库:${details} + DatabaseToStorage: 数据库 -> 存储 + DeleteCustomizationSyncData: 删除所有自定义同步数据 + GeneratedReport: 已生成的报告 + Missing: 缺失 + ModifiedSize: 修改时间:${modified},大小:${size} + ModifiedSizeActual: 修改时间:${modified},大小:${size}(实际大小:${actualSize}) + PrepareIssueReport: 准备用于提交问题的报告 + RecreateAll: 全部重建 + RecreateMissingChunks: 为所有文件重新创建缺失的数据块 + RecreateMissingChunksDesc: 此操作会为所有文件重新创建数据块。如果存在缺失的数据块,可能会修复相关错误。 + RecoveryAndRepair: 恢复与修复 + ResetPanel: 重置 + ResetRemoteUsage: 重置通知阈值并检查远程数据库使用情况 + ResetRemoteUsageDesc: 重置远程存储大小阈值,并再次检查远程存储大小。 + ResolveAllConflictedFiles: 使用较新的版本解决所有冲突文件 + ResolveAllConflictedFilesDesc: 使用较新的版本解决所有冲突文件。注意:此操作会覆盖较旧版本,且无法恢复被覆盖的内容。 + RunDoctor: 运行诊断 + ScanBrokenFiles: 扫描损坏文件 + ScramSwitches: 紧急开关 + ShowHistory: 查看历史 + StorageLabel: 存储:${details} + StorageToDatabase: 存储 -> 数据库 + VerifyAndRepairAllFiles: 校验并修复所有文件 + VerifyAndRepairAllFilesDesc: 比较本地数据库与存储中的文件内容。如果内容不一致,系统会询问你保留哪一份。 + Maintenance: + Cleanup: 执行清理 + CleanupDesc: 丢弃所有非最新修订版本,以减少存储空间占用。此操作要求远程服务器和本地客户端都具备同等大小的可用空间。 + DeleteLocalDatabase: 删除本地数据库以重置或卸载 Self-hosted LiveSync + EmergencyRestart: 紧急重启 + EmergencyRestartDesc: 禁用所有同步并重新启动。 + FreshStartWipe: 全新开始清空 + FreshStartWipeDesc: 删除远程服务器上的所有数据。 + GarbageCollection: 垃圾回收 V3(测试版) + GarbageCollectionAction: 执行垃圾回收 + GarbageCollectionDesc: 执行垃圾回收以移除未使用的数据块并减少数据库大小。 + LockServer: 锁定服务器 + LockServerDesc: 锁定远程服务器,防止与其他设备继续同步。 + OverwriteServerData: 用此设备的文件覆盖服务器数据 + OverwriteServerDataDesc: 使用此设备上的文件重建本地和远程数据库。 + OverwriteRemote: 覆盖远程端 + OverwriteRemoteDesc: 使用本地数据库和密码短语覆盖远程端数据。 + PurgeAllJournalCounter: 清空全部日志计数器 + PurgeAllJournalCounterDesc: 清空所有下载与上传缓存。 + RebuildingOperations: 重建操作(仅远程端) + Reset: 重置 + ResetAllJournalCounter: 重置全部日志计数器 + ResetAllJournalCounterDesc: 初始化全部日志历史。下次同步时,所有项目都会重新接收并重新发送。 + ResetJournalReceived: 重置日志接收历史 + ResetJournalReceivedDesc: 初始化日志接收历史。下次同步时,除当前设备发送的项目外,其余项目都会重新下载。 + ResetReceived: 重置接收记录 + ResetJournalSent: 重置日志发送历史 + ResetJournalSentDesc: 初始化日志发送历史。下次同步时,除当前设备已接收的项目外,其余项目都会重新发送。 + ResetLocalSyncInfo: 重置同步信息 + ResetLocalSyncInfoDesc: 从远程端恢复或重建本地数据库。 + ResetSentHistory: 重置发送记录 + ResetThisDevice: 重置此设备上的同步状态 + Resend: 重新发送 + ResendDesc: 将所有数据块重新发送到远程端。 + ScheduleAndRestart: 计划执行并重启 + Scram: 紧急处理 + SendChunks: 发送数据块 + Syncing: 同步 + WarningLockedReadyAction: 我已准备好,立即解锁数据库 + WarningLockedReadyText: 为防止意外的数据仓库损坏,远程数据库已被锁定,暂停同步。(此设备已被标记为“已确认”)当你的所有设备都标记为“已确认”后,再解锁数据库。在复制过程确认此设备已完成确认之前,此警告会持续显示。 + WarningLockedResolveAction: 我已完成备份,将此设备标记为“已确认” + WarningLockedResolveText: 为防止数据仓库损坏,由于此设备尚未标记为“已确认”,远程数据库已被锁定,暂停同步。请先备份你的仓库、重置本地数据库,然后选择“将此设备标记为已确认”。在复制过程确认此设备已完成确认之前,此警告会持续显示。 + WriteRedFlagAndRestart: 标记并重启 + Patches: + CompatibilityConflict: 兼容性(冲突行为) + CompatibilityDatabase: 兼容性(数据库结构) + CompatibilityInternalApi: 兼容性(内部 API 使用) + CompatibilityMetadata: 兼容性(元数据) + CompatibilityRemote: 兼容性(远程数据库) + CompatibilityTrouble: 兼容性(已处理问题) + CurrentAdapter: 当前适配器:${adapter} + DatabaseAdapter: 数据库适配器 + DatabaseAdapterDesc: 选择要使用的数据库适配器。 + EdgeCaseBehaviour: 边界情况处理(行为) + EdgeCaseDatabase: 边界情况处理(数据库) + EdgeCaseProcessing: 边界情况处理(处理流程) + IndexedDbWarning: IndexedDB 适配器在某些场景下通常具有更好的性能,但在 LiveSync 模式下已发现可能导致内存泄漏。使用 LiveSync 模式时,请改用 IDB 适配器。 + MigrationWarning: 修改此设置需要迁移现有数据(可能需要一些时间)并重新启动 Obsidian。请先备份你的数据后再继续。 + MigratingToIdb: 正在将所有数据迁移到 IDB... + MigratingToIndexedDb: 正在将所有数据迁移到 IndexedDB... + MigrationIdbCompleted: 已完成迁移到 IDB。Obsidian 将立即使用新配置重新启动。 + MigrationIdbCompletedFollowUp: 已完成迁移到 IDB。请切换适配器并重新启动 Obsidian。 + MigrationIndexedDbCompleted: 已完成迁移到 IndexedDB。Obsidian 将立即使用新配置重新启动。 + MigrationIndexedDbCompletedFollowUp: 已完成迁移到 IndexedDB。请切换适配器并重新启动 Obsidian。 + OperationToIdb: 迁移到 IDB + OperationToIndexedDb: 迁移到 IndexedDB + Remediation: 修正 + RemediationChanged: 修正设置已更改 + RemediationNoLimit: 未设置限制 + RemediationRestartLater: 稍后 + RemediationRestartMessage: 强烈建议重新启动 Obsidian。在重启之前,部分更改可能不会生效,界面显示也可能不一致。确定要现在重启吗? + RemediationRestartNow: 立即重启 + RemediationRestarting: 修正设置已更改,正在重新启动 Obsidian... + RemediationSuffixChanged: 后缀已更改,正在重新打开数据库... + RemediationWithValue: 限制:${date}(${timestamp}) + RemoteDatabaseSunset: 远程数据库调整(即将弃用) + SwitchToIDB: 切换到 IDB + SwitchToIndexedDb: 切换到 IndexedDB + PowerUsers: + ConfigurationEncryption: 配置加密 + ConnectionTweak: CouchDB 连接调整 + ConnectionTweakDesc: 如果你在使用 IBM Cloudant 时遇到负载大小限制,请将 batch size 和 batch limit 调低。 + Default: 默认 + Developer: 开发者 + EncryptSensitiveConfig: 加密敏感配置项 + PromptPassphraseEveryLaunch: 每次启动时询问密码短语 + UseCustomPassphrase: 使用自定义密码短语 + Remote: + Activate: 启用 + ActiveSuffix: (当前启用) + AddConnection: 新增连接 + AddRemoteDefaultName: 新远程端 + ConfigureAndChangeRemote: 配置并切换远程端 + ConfigureE2EE: 配置端到端加密 + ConfigureRemote: 配置远程端 + DeleteRemoteConfirm: 确定要删除远程配置“${name}”吗? + DeleteRemoteTitle: 删除远程配置 + DisplayName: 显示名称 + DuplicateRemote: 复制远程配置 + DuplicateRemoteSuffix: ${name}(副本) + E2EEConfiguration: 端到端加密配置 + Export: 导出 + FetchRemoteSettings: 获取远程设置 + ImportConnection: 导入连接 + ImportConnectionPrompt: 粘贴连接字符串 + ImportedCouchDb: 已导入的 CouchDB + ImportedRemote: 远程端 + MoreActions: 更多操作 + PeerToPeerPanel: 点对点同步 + RemoteConfigurationPrefix: 远程配置 + RemoteDatabases: 远程数据库 + RemoteName: 远程名称 + RemoteNameCouchDb: CouchDB ${host} + RemoteNameP2P: P2P ${room} + RemoteNameS3: S3 ${bucket} + Rename: 重命名 + Selector: + AddDefaultPatterns: 添加默认模式 + CrossPlatform: 跨平台 + Default: 默认 + HiddenFiles: 隐藏文件 + IgnorePatterns: 忽略模式 + NonSynchronisingFiles: 不同步文件 + NonSynchronisingFilesDesc: (RegExp)如果设置了该项,则本地和远程中匹配这些规则的文件变更将被跳过。 + NormalFiles: 普通文件 + OverwritePatterns: 覆盖模式 + OverwritePatternsDesc: 匹配后将执行覆盖而非合并的文件模式 + SynchronisingFiles: 同步文件 + SynchronisingFilesDesc: (RegExp)留空则同步所有文件。可设置正则表达式以限制需要同步的文件。 + TargetPatterns: 目标模式 + TargetPatternsDesc: 用于匹配需要同步文件的模式 + Setup: + RerunWizardButton: 重新运行向导 + RerunWizardDesc: 重新运行引导向导,再次设置 Self-hosted LiveSync。 + RerunWizardName: 重新运行引导向导 + SyncSettings: + Merge: 合并 + Fetch: 获取 + Overwrite: 覆盖 + SetupWizard: + Common: + Back: 不,带我返回 + Cancel: 取消 + ProceedSelectOption: 请选择一个选项后继续 + Intro: + ExistingOption: 将此设备加入已有同步配置 + ExistingOptionDesc: 如果你已经在另一台电脑或手机上使用同步,请选择此项。此选项用于将当前设备连接到既有同步配置。 + NewOption: 首次设置同步 + NewOptionDesc: 如果你正把这台设备作为第一台同步设备进行配置,请选择此项。 + ProceedExisting: 是的,我要将此设备加入现有同步 + ProceedNew: 是的,我要开始新的同步配置 + Question: 首先,请选择最符合你当前情况的选项。 + Title: 欢迎使用 Self-hosted LiveSync + Guidance: 接下来我们会通过几个问题,帮助你更轻松地完成同步配置。 + SelectExisting: + Guidance: 你正在将此设备加入已有同步配置。 + ManualOption: 手动输入服务器信息 + ManualOptionDesc: 手动重新配置与你其他设备相同的服务器信息。此方式仅适用于高级用户。 + ProceedManual: 我知道服务器信息,让我手动输入 + ProceedQr: 使用本设备摄像头扫描活动设备上显示的二维码 + ProceedSetupUri: 使用 Setup URI 继续 + Question: 请选择一种从其他设备导入设置的方法。 + QrOption: 扫描二维码(移动端推荐) + QrOptionDesc: 使用本设备摄像头扫描活动设备上显示的二维码。 + SetupUriOption: 使用 Setup URI(推荐) + SetupUriOptionDesc: 粘贴从某台已启用设备生成的 Setup URI。 + Title: 设备设置方式 + SelectNew: + Guidance: 接下来将继续配置服务器连接信息。 + ManualOption: 手动输入服务器信息 + ManualOptionDesc: 如果你没有 Setup URI,或希望自行配置更详细的参数,可选择此高级选项。 + ProceedManual: 我知道服务器信息,让我手动输入 + ProceedSetupUri: 使用 Setup URI 继续 + Question: 你希望如何配置服务器连接? + SetupUriOption: 使用 Setup URI(推荐) + SetupUriOptionDesc: Setup URI 是一段包含服务器地址和认证信息的文本。如果你的服务器安装脚本已经生成了它,这是最简单且安全的配置方式。 + Title: 连接方式 + OutroAskUserMode: + CompatibleOption: 远程端已配置完成,且当前配置兼容(或已通过本次操作变为兼容)。 + CompatibleOptionDesc: 除非你非常确定,否则选择此项存在风险。它假定服务器配置与当前设备兼容。如果事实并非如此,可能会导致数据丢失。请确认你了解后果。 + ExistingOption: 远程服务器已经配置完成,我想让此设备加入同步。 + ExistingOptionDesc: 选择此项后,此设备会加入已有服务器。你需要将服务器上的现有同步数据获取到此设备。 + Guidance: 服务器连接已成功配置。下一步需要重建本地数据库,也就是同步状态信息。 + NewOption: 我是第一次配置新服务器 / 我想重置现有服务器。 + NewOptionDesc: 选择此项后,服务器会使用当前设备上的数据进行初始化。服务器上的现有数据将被完全覆盖。 + ProceedApplySettings: 应用这些设置 + ProceedNext: 继续下一步 + Question: 请选择你的当前情况。 + Title: 即将完成:还需要做出选择 + OutroNewUser: + GuidancePrimary: 服务器连接已成功配置。下一步将根据当前设备上的数据,在服务器端建立同步数据。 + GuidanceWarning: 重启后,当前设备上的数据会作为主副本上传到服务器。请注意,服务器上现有的非预期数据将被完全覆盖。 + Important: 重要 + Proceed: 重启并初始化服务器 + Question: 请选择下方按钮,重启并进入最终确认步骤。 + Title: 设置完成:准备初始化服务器 + SetupRemote: + BucketOption: S3/MinIO/R2 对象存储 + BucketOptionDesc: 使用日志文件进行同步。你需要先准备好兼容 S3/MinIO/R2 的对象存储服务。 + CouchDbOptionDesc: 这是当前设计下最适合的同步方式,所有功能都可用。你需要先准备好 CouchDB 实例。 + Guidance: 请选择你要连接的服务器类型。 + P2POption: 仅点对点 + P2POptionDesc: 启用设备之间的直接同步。无需服务器,但两台设备必须同时在线,且部分功能可能受限。互联网连接仅用于信令,不用于传输数据。 + ProceedBucket: 继续配置 S3/MinIO/R2 + ProceedCouchDb: 继续配置 CouchDB + ProceedP2P: 继续配置仅点对点模式 + Title: 输入服务器信息 +Unique name between all synchronized devices. To edit this setting, please disable customization sync once.: 所有同步设备之间的唯一名称。要编辑此设置,请首先禁用自定义同步 +Use a custom passphrase: 使用自定义密码短语 +Use Custom HTTP Handler: 使用自定义 HTTP 处理程序 +Use dynamic iteration count: 使用动态迭代次数 +Use Segmented-splitter: 使用分段分割器 +Use splitting-limit-capped chunk splitter: 使用分割限制上限的块分割器 +Use the trash bin: 使用回收站 +Use timeouts instead of heartbeats: 使用超时而不是心跳 +username: 用户名 +Username: 用户名 +Verbose Log: 详细日志 +Verify all: 全部校验 +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.: "警告!这将严重影响性能。并且日志不会以默认名称同步。请小心处理日志;它们通常包含您的敏感信息 " +We cannot change the device name while this feature is enabled. Please disable this feature to change the device name.: 启用此功能时无法更改设备名称。如需修改设备名称,请先禁用此功能。 +When you save a file in the editor, start a sync automatically: 当您在编辑器中保存文件时,自动开始同步 +Write credentials in the file: 将凭据写入文件 +Write logs into the file: 将日志写入文件 +xxhash32 (Fast but less collision resistance): xxhash32(速度快,但抗碰撞能力较弱) +xxhash64 (Fastest): xxhash64(最快) +"Welcome to Self-hosted LiveSync": "欢迎使用 Self-hosted LiveSync" +"We will now guide you through a few questions to simplify the synchronisation setup.": "接下来我们会通过几个问题,引导你更轻松地完成同步设置。" +"First, please select the option that best describes your current situation.": "首先,请选择最符合你当前情况的选项。" +"I am setting this up for the first time": "我是第一次进行设置" +"(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.": "(如果你正在将此设备配置为第一台同步设备,请选择此项。)此选项适合初次使用 LiveSync,并希望从头开始配置的用户。" +"I am adding a device to an existing synchronisation setup": "我要将设备加入现有同步配置" +"(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.": "(如果你已经在另一台电脑或手机上使用同步,请选择此项。)此选项适合将当前设备加入现有 LiveSync 配置的用户。" +"Yes, I want to set up a new synchronisation": "是的,我要配置新的同步" +"Yes, I want to add this device to my existing synchronisation": "是的,我要把这台设备加入现有同步" +"No, please take me back": "不,返回上一步" +"Device Setup Method": "设备设置方式" +"You are adding this device to an existing synchronisation setup.": "你正在将此设备加入到现有同步配置中。" +"Please select a method to import the settings from another device.": "请选择一种从其他设备导入设置的方法。" +"Use a Setup URI (Recommended)": "使用 Setup URI(推荐)" +"Paste the Setup URI generated from one of your active devices.": "粘贴从一台已在使用的设备上生成的 Setup URI。" +"Scan a QR Code (Recommended for mobile)": "扫描二维码(移动端推荐)" +"Scan the QR code displayed on an active device using this device's camera.": "使用当前设备的摄像头扫描另一台已在使用设备上显示的二维码。" +"Enter the server information manually": "手动输入服务器信息" +"Configure the same server information as your other devices again, manually, very advanced users only.": "手动重新输入与你其他设备相同的服务器信息。仅适合高级用户。" +"Proceed with Setup URI": "继续使用 Setup URI" +"I know my server details, let me enter them": "我知道服务器详情,让我手动输入" +"Please select an option to proceed": "请选择一个选项以继续" +"Connection Method": "连接方式" +"We will now proceed with the server configuration.": "接下来将继续进行服务器配置。" +"How would you like to configure the connection to your server?": "你希望如何配置与服务器的连接?" +"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.": "Setup URI 是一段包含服务器地址与认证信息的文本。如果服务器安装脚本已经生成了 URI,使用它可以更简单且更安全地完成配置。" +"This is an advanced option for users who do not have a URI or who wish to configure detailed settings.": "这是面向没有 URI 或希望手动配置详细参数的高级选项。" +"Enter Server Information": "输入服务器信息" +"Please select the type of server to which you are connecting.": "请选择你要连接的服务器类型。" +"Continue to CouchDB setup": "继续进行 CouchDB 设置" +"Continue to S3/MinIO/R2 setup": "继续进行 S3/MinIO/R2 设置" +"Continue to Peer-to-Peer only setup": "继续进行仅 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.": "这是最符合当前设计的同步方式,所有功能均可用。你需要事先部署好 CouchDB 实例。" +"S3/MinIO/R2 Object Storage": "S3/MinIO/R2 对象存储" +"Synchronisation utilising journal files. You must have set up an S3/MinIO/R2 compatible object storage.": "通过日志文件进行同步。你需要事先部署好兼容 S3/MinIO/R2 的对象存储服务。" +"Peer-to-Peer only": "仅 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.": "此功能可在设备之间直接同步,无需服务器;但同步时两台设备必须同时在线,且部分功能可能受限。互联网连接仅用于信令(发现对端),不用于数据传输。" diff --git a/src/common/remoteConfiguration.ts b/src/common/remoteConfiguration.ts new file mode 100644 index 00000000..c0b444c3 --- /dev/null +++ b/src/common/remoteConfiguration.ts @@ -0,0 +1,20 @@ +import { ConnectionStringParser } from "@vrtmrz/livesync-commonlib/compat/common/ConnectionString"; +import { + REMOTE_P2P, + type ObsidianLiveSyncSettings, +} from "@vrtmrz/livesync-commonlib/compat/common/types"; + +/** Returns whether the selected main remote represents the P2P-only setup. */ +export function isP2PMainRemote(settings: ObsidianLiveSyncSettings): boolean { + if (settings.remoteType === REMOTE_P2P) return true; + + const activeId = settings.activeConfigurationId?.trim(); + const activeConfiguration = activeId ? settings.remoteConfigurations?.[activeId] : undefined; + if (!activeConfiguration) return false; + + try { + return ConnectionStringParser.parse(activeConfiguration.uri).type === "p2p"; + } catch { + return false; + } +} diff --git a/src/common/rosetta.ts b/src/common/rosetta.ts new file mode 100644 index 00000000..fb7624db --- /dev/null +++ b/src/common/rosetta.ts @@ -0,0 +1,117 @@ +/** +# Rosetta stone +- To localise messages to your language, please write a translation to this file and submit a PR. +- Please order languages in alphabetic order, if you write multiple items. + +## Notice to ensure that your favours are not wasted. + +If you plan to utilise machine translation engines to contribute translated resources, +please ensure the engine's terms of service are compatible with our project's license. +Your diligence in this matter helps maintain compliance and avoid potential licensing issues. +Thank you for your consideration. + +Usually, our projects (Self-hosted LiveSync and its families) are licensed under MIT License. +To see details, please refer to the LICENSES file on each repository. + +## How to internationalise untranslated items? +1. Change the message literal to use `$msg` + "Could not parse YAML" -> $msg('anyKey') +2. Create `ls-debug` folder under the `.obsidian` folder of your vault. +3. Run Self-hosted LiveSync in dev mode (npm run dev). +4. You will get the `missing-translation-YYYY-MM-DD.jsonl` under `ls-debug`. Please copy and paste inside `allMessages` and write the translations. +5. Send me the PR! +*/ + +const LANG_DE = "de"; +const LANG_ES = "es"; +const LANG_FR = "fr"; +const LANG_HE = "he"; +const LANG_JA = "ja"; +const LANG_RU = "ru"; +const LANG_ZH = "zh"; +const LANG_KO = "ko"; +const LANG_ZH_TW = "zh-tw"; +const LANG_DEF = "def"; // Default language: English + +// Also please order in alphabetic order except for the default language. + +export const SUPPORTED_I18N_LANGS = [ + LANG_DEF, + LANG_DE, + LANG_ES, + LANG_FR, + LANG_HE, + LANG_JA, + LANG_KO, + LANG_RU, + LANG_ZH, + LANG_ZH_TW, +]; + +// Also this. +export type I18N_LANGS = + | typeof LANG_DEF // Default language: English + | typeof LANG_DE + | typeof LANG_ES + | typeof LANG_FR + | typeof LANG_HE + | typeof LANG_JA + | typeof LANG_KO + | typeof LANG_RU + | typeof LANG_ZH + | typeof LANG_ZH_TW + | ""; + +export type MESSAGE = { [key in I18N_LANGS]?: string }; + +import { Logger } from "octagonal-wheels/common/logger"; +import type { MessageKeys } from "./messages/combinedMessages.dev.ts"; + +export function expandKeywords, U extends Record>( + message: T, + lang: I18N_LANGS, + recurseLimit = 10 +): T { + if (recurseLimit <= 0) { + Logger( + `ExpandKeywords hit the recursion limit, returning the current state. but this is not expected. May recursive referenced.` + ); + return message; + } + // const DEFAULT_ENGLISH = "en-GB"; //This is to balance the books with existing messages. + // const langCode = (lang == "def" || lang == "") ? DEFAULT_ENGLISH : lang; + + // Generate keywords from all messages + // This can handles the case where the message itself contains a keyword: + // - task:`Some procedure` + // - check: `%{task} checking` + // - checkfailed: `%{check} failed` + // If in this case `checkfailed` may `Some procedure checking failed`. + // And, it can compress the rosetta stone: the message table. + const keywordMap = new Map(); + for (const [key, value] of Object.entries(message)) { + const messageValue = value[lang]; + if (typeof messageValue !== "string") continue; + const normalizedKey = key.startsWith("K.") ? key.substring("K.".length) : key; + keywordMap.set(`%{${normalizedKey}}`, messageValue); + } + + const ret = { + ...message, + } as Record>; + let isChanged = false; + for (const key of Object.keys(message)) { + if (!(lang in ret[key])) continue; + if (!ret[key][lang].includes("%{")) continue; + const replaced = ret[key][lang].replace(/%\{[^}]+\}/g, (token) => keywordMap.get(token) ?? token); + if (replaced !== ret[key][lang]) { + ret[key][lang] = replaced; + isChanged = true; + } + } + if (isChanged) return expandKeywords(ret, lang, recurseLimit--) as T; + + return ret as T; +} + +export type AllMessageKeys = MessageKeys; diff --git a/src/common/translation.ts b/src/common/translation.ts index 301972ea..a979f537 100644 --- a/src/common/translation.ts +++ b/src/common/translation.ts @@ -1,6 +1,130 @@ -import { $msg } from "@vrtmrz/livesync-commonlib/compat/common/i18n"; -import type { MessageTranslator } from "@vrtmrz/livesync-commonlib/context"; +// Avoid using Obsidian's native function for CLIs. +import { getLanguage } from "@vrtmrz/livesync-commonlib/compat/common/coreEnvFunctions"; +import { englishMessageTranslator, type MessageTranslator } from "@vrtmrz/livesync-commonlib/context"; +import { LOG_KIND_WARNING, notice } from "octagonal-wheels/common/logger"; +import type { TaggedType } from "octagonal-wheels/common/types"; +import type { AllMessageKeys, I18N_LANGS } from "./rosetta"; +import { allMessages } from "./messages/combinedMessages.prod.ts"; -/** Supplies the LiveSync language catalogue through the Commonlib host boundary. */ -export const translateLiveSyncMessage: MessageTranslator = (key, params) => - $msg(key as Parameters[0], params === undefined ? undefined : { ...params }); +const obsidianLangMap: Record = { + de: "de", + es: "es", + ja: "ja", + ko: "ko", + ru: "ru", + zh: "zh", + "zh-cn": "zh", + "zh-hans": "zh", + "zh-tw": "zh-tw", + "zh-hk": "zh-tw", + "zh-mo": "zh-tw", + "zh-hant": "zh-tw", +}; + +function resolveLanguage(lang: I18N_LANGS): I18N_LANGS { + if (lang !== "") return lang; + const obsidianLanguage = getLanguage().toLowerCase(); + return obsidianLangMap[obsidianLanguage] ?? "def"; +} + +export let currentLang: I18N_LANGS = resolveLanguage(""); +const missingTranslations = [] as string[]; +let __onMissingTranslations = (key: string) => notice(key, LOG_KIND_WARNING); +const msgCache = new Map(); + +export function getResolvedLang(lang: I18N_LANGS = currentLang): I18N_LANGS { + return resolveLanguage(lang); +} + +export function isAutoDisplayLanguage(lang: I18N_LANGS): boolean { + return lang === ""; +} + +export function __getMissingTranslations() { + return missingTranslations; +} + +export function __onMissingTranslation(callback: (key: string) => void) { + __onMissingTranslations = callback; +} + +export function setLang(lang: I18N_LANGS) { + const resolvedLang = resolveLanguage(lang); + if (resolvedLang === currentLang) return; + currentLang = resolvedLang; + msgCache.clear(); +} + +function _getMessage(key: string, lang: I18N_LANGS) { + if (key.trim() == "") return key; + + const msgs = allMessages[key] ?? undefined; + const resolvedLang = resolveLanguage(lang); + let msg = msgs?.[resolvedLang]; + + if (!msg) { + if (missingTranslations.indexOf(key) === -1) { + __onMissingTranslations(key); + missingTranslations.push(key); + } + msg = msgs?.def; + } + return msg ?? key; +} + +function getMessage(key: string) { + if (msgCache.has(key)) return msgCache.get(key) as string; + const msg = _getMessage(key, currentLang); + msgCache.set(key, msg); + return msg; +} + +export function $t(message: string, lang?: I18N_LANGS) { + if (lang !== undefined) { + return _getMessage(message, lang); + } + return getMessage(message); +} + +export function translateIfAvailable(message: string, lang?: I18N_LANGS) { + if (message.trim() == "" || allMessages[message] === undefined) return message; + return $t(message, lang); +} + +function isLiveSyncMessageKey(key: string): key is AllMessageKeys { + return key in allMessages; +} + +/** + * TagFunction to Automatically translate. + * @param strings + * @param values + * @returns + */ +export function $f(strings: TemplateStringsArray, ...values: string[]) { + let result = ""; + for (let i = 0; i < values.length; i++) { + result += getMessage(strings[i]) + values[i]; + } + result += getMessage(strings[strings.length - 1]); + return result; +} + +export function $msg( + key: T, + params: Record = {}, + lang?: I18N_LANGS +): TaggedType { + let msg = $t(key, lang); + for (const [placeholder, value] of Object.entries(params)) { + const regex = new RegExp(`\\\${${placeholder}}`, "g"); + msg = msg.replace(regex, value); + } + return msg as TaggedType; +} + +/** Supplies the LiveSync-owned language catalogue through the Commonlib host boundary. */ +export const translateLiveSyncMessage: MessageTranslator = (key, params) => { + if (!isLiveSyncMessageKey(key)) return englishMessageTranslator(key, params); + return $msg(key, params === undefined ? undefined : { ...params }); +}; diff --git a/src/common/translation.unit.spec.ts b/src/common/translation.unit.spec.ts new file mode 100644 index 00000000..14b4d68c --- /dev/null +++ b/src/common/translation.unit.spec.ts @@ -0,0 +1,28 @@ +import { afterEach, describe, expect, it } from "vitest"; + +import { englishMessageTranslator } from "@vrtmrz/livesync-commonlib/context"; +import { $msg, setLang, translateLiveSyncMessage } from "@/common/translation"; +import { SUPPORTED_I18N_LANGS } from "@/common/rosetta"; + +describe("LiveSync-owned translation catalogue", () => { + afterEach(() => setLang("def")); + + it("selects a translated language without delegating catalogue ownership to Commonlib", () => { + setLang("es"); + + expect(translateLiveSyncMessage("moduleCheckRemoteSize.optionIncreaseLimit", { newMax: "800" })).toBe( + "aumentar a 800MB" + ); + expect(SUPPORTED_I18N_LANGS).toContain("es"); + }); + + it("retains typed placeholder substitution", () => { + expect($msg("moduleCheckRemoteSize.optionIncreaseLimit", { newMax: "800" }, "def")).toBe("increase to 800MB"); + }); + + it("uses Commonlib's canonical English when the application catalogue has no translation", () => { + setLang("es"); + + expect(translateLiveSyncMessage("Active Remote Type")).toBe(englishMessageTranslator("Active Remote Type")); + }); +}); diff --git a/src/features/ConfigSync/CmdConfigSync.ts b/src/features/ConfigSync/CmdConfigSync.ts index 035bf245..f5ef2c80 100644 --- a/src/features/ConfigSync/CmdConfigSync.ts +++ b/src/features/ConfigSync/CmdConfigSync.ts @@ -73,7 +73,7 @@ import { ConflictResolveModal } from "@/modules/features/InteractiveConflictReso import { Semaphore } from "octagonal-wheels/concurrency/semaphore"; import { EVENT_REQUEST_OPEN_PLUGIN_SYNC_DIALOG, eventHub } from "@/common/events.ts"; import { PluginDialogModal } from "./PluginDialogModal.ts"; -import { $msg } from "@vrtmrz/livesync-commonlib/compat/common/i18n"; +import { $msg } from "@/common/translation"; import type { InjectableServiceHub } from "@vrtmrz/livesync-commonlib/compat/services/implements/injectable/InjectableServiceHub"; import type { LiveSyncCore } from "@/main.ts"; import { LiveSyncError } from "@vrtmrz/livesync-commonlib/compat/common/LSError"; diff --git a/src/features/P2PSync/P2PReplicator/P2PReplicatorPane.svelte b/src/features/P2PSync/P2PReplicator/P2PReplicatorPane.svelte index f2660cb7..a89eded8 100644 --- a/src/features/P2PSync/P2PReplicator/P2PReplicatorPane.svelte +++ b/src/features/P2PSync/P2PReplicator/P2PReplicatorPane.svelte @@ -17,7 +17,7 @@ EVENT_P2P_REPLICATOR_STATUS, } from "@vrtmrz/livesync-commonlib/compat/replication/trystero/TrysteroReplicatorP2PServer"; import type { P2PReplicatorStatus } from "@vrtmrz/livesync-commonlib/compat/replication/trystero/TrysteroReplicator"; - import { $msg as _msg } from "@vrtmrz/livesync-commonlib/compat/common/i18n"; + import { $msg as _msg } from "@/common/translation"; import { SETTING_KEY_P2P_DEVICE_NAME } from "@vrtmrz/livesync-commonlib/compat/common/types"; import { generateP2PRoomId } from "@vrtmrz/livesync-commonlib/compat/common/utils"; import type { LiveSyncBaseCore } from "@/LiveSyncBaseCore"; diff --git a/src/modules/core/ModuleReplicator.ts b/src/modules/core/ModuleReplicator.ts index 23725b76..442cf24a 100644 --- a/src/modules/core/ModuleReplicator.ts +++ b/src/modules/core/ModuleReplicator.ts @@ -11,7 +11,7 @@ import { type EntryDoc, type RemoteType } from "@vrtmrz/livesync-commonlib/compa import { scheduleTask } from "octagonal-wheels/concurrency/task"; import { EVENT_FILE_SAVED, EVENT_SETTING_SAVED, eventHub } from "@/common/events"; -import { $msg } from "@vrtmrz/livesync-commonlib/compat/common/i18n"; +import { $msg } from "@/common/translation"; import type { LiveSyncCore } from "@/main"; import { ReplicateResultProcessor } from "./ReplicateResultProcessor"; import { UnresolvedErrorManager } from "@vrtmrz/livesync-commonlib/compat/services/base/UnresolvedErrorManager"; diff --git a/src/modules/coreFeatures/ModuleResolveMismatchedTweaks.ts b/src/modules/coreFeatures/ModuleResolveMismatchedTweaks.ts index 9367d595..4dae4f09 100644 --- a/src/modules/coreFeatures/ModuleResolveMismatchedTweaks.ts +++ b/src/modules/coreFeatures/ModuleResolveMismatchedTweaks.ts @@ -13,7 +13,7 @@ import { } from "@vrtmrz/livesync-commonlib/compat/common/types"; import { escapeMarkdownValue } from "@vrtmrz/livesync-commonlib/compat/common/utils"; import { AbstractModule } from "@/modules/AbstractModule.ts"; -import { $msg } from "@vrtmrz/livesync-commonlib/compat/common/i18n"; +import { $msg } from "@/common/translation"; import type { InjectableServiceHub } from "@vrtmrz/livesync-commonlib/compat/services/implements/injectable/InjectableServiceHub"; import type { LiveSyncCore } from "@/main.ts"; import { REMOTE_P2P } from "@vrtmrz/livesync-commonlib/compat/common/models/setting.const"; diff --git a/src/modules/essential/ModuleMigration.ts b/src/modules/essential/ModuleMigration.ts index cf233d4c..280140ef 100644 --- a/src/modules/essential/ModuleMigration.ts +++ b/src/modules/essential/ModuleMigration.ts @@ -13,7 +13,7 @@ import { eventHub, } from "@/common/events.ts"; import { AbstractModule } from "@/modules/AbstractModule.ts"; -import { $msg } from "@vrtmrz/livesync-commonlib/compat/common/i18n"; +import { $msg } from "@/common/translation"; import { performDoctorConsultation, RebuildOptions } from "@vrtmrz/livesync-commonlib/compat/common/configForDoc"; import { isValidPath } from "@/common/utils.ts"; import { isMetaEntry } from "@vrtmrz/livesync-commonlib/compat/common/types"; diff --git a/src/modules/essentialObsidian/ModuleObsidianMenu.ts b/src/modules/essentialObsidian/ModuleObsidianMenu.ts index fa61014b..ab340f67 100644 --- a/src/modules/essentialObsidian/ModuleObsidianMenu.ts +++ b/src/modules/essentialObsidian/ModuleObsidianMenu.ts @@ -1,7 +1,7 @@ import { type Editor, type MarkdownFileInfo, type MarkdownView } from "@/deps.ts"; import { addIcon } from "@/deps.ts"; import { type FilePathWithPrefix } from "@vrtmrz/livesync-commonlib/compat/common/types"; -import { $msg } from "@vrtmrz/livesync-commonlib/compat/common/i18n"; +import { $msg } from "@/common/translation"; import type { LiveSyncCore } from "@/main.ts"; import { AbstractModule } from "@/modules/AbstractModule.ts"; // Obsidian specific menu commands. diff --git a/src/modules/extras/ModuleDev.ts b/src/modules/extras/ModuleDev.ts index 50426b34..b74b94ec 100644 --- a/src/modules/extras/ModuleDev.ts +++ b/src/modules/extras/ModuleDev.ts @@ -1,5 +1,5 @@ import { delay } from "octagonal-wheels/promises"; -import { __onMissingTranslation } from "@vrtmrz/livesync-commonlib/compat/common/i18n"; +import { __onMissingTranslation } from "@/common/translation"; import { AbstractObsidianModule } from "@/modules/AbstractObsidianModule.ts"; import { LOG_LEVEL_VERBOSE } from "octagonal-wheels/common/logger"; // import { enableTestFunction } from "./devUtil/testUtils.ts"; diff --git a/src/modules/features/Log/LogPane.svelte b/src/modules/features/Log/LogPane.svelte index 3e090d8b..c92090c7 100644 --- a/src/modules/features/Log/LogPane.svelte +++ b/src/modules/features/Log/LogPane.svelte @@ -3,7 +3,7 @@ import { logMessages } from "@vrtmrz/livesync-commonlib/compat/mock_and_interop/stores"; import { reactive, type ReactiveInstance } from "octagonal-wheels/dataobject/reactive"; import { Logger } from "@vrtmrz/livesync-commonlib/compat/common/logger"; - import { $msg as msg, currentLang as lang } from "@vrtmrz/livesync-commonlib/compat/common/i18n"; + import { $msg as msg, currentLang as lang } from "@/common/translation"; import { compatGlobal } from "@vrtmrz/livesync-commonlib/compat/common/coreEnvFunctions"; let unsubscribe: () => void; diff --git a/src/modules/features/Log/LogPaneView.ts b/src/modules/features/Log/LogPaneView.ts index 5131e393..0e7b8bb2 100644 --- a/src/modules/features/Log/LogPaneView.ts +++ b/src/modules/features/Log/LogPaneView.ts @@ -2,7 +2,7 @@ import { WorkspaceLeaf } from "@/deps.ts"; import LogPaneComponent from "./LogPane.svelte"; import type ObsidianLiveSyncPlugin from "@/main.ts"; import { SvelteItemView } from "@/common/SvelteItemView.ts"; -import { $msg } from "@vrtmrz/livesync-commonlib/compat/common/i18n"; +import { $msg } from "@/common/translation"; import { mount } from "svelte"; export const VIEW_TYPE_LOG = "log-log"; //Log view diff --git a/src/modules/features/ModuleLog.ts b/src/modules/features/ModuleLog.ts index 55adaf15..b44334ba 100644 --- a/src/modules/features/ModuleLog.ts +++ b/src/modules/features/ModuleLog.ts @@ -29,7 +29,7 @@ import { addIcon, debounce, normalizePath, Notice, stringifyYaml, type Workspace import { LOG_LEVEL_NOTICE, setGlobalLogFunction } from "octagonal-wheels/common/logger"; import { LogPaneView, VIEW_TYPE_LOG } from "./Log/LogPaneView.ts"; import { serialized } from "octagonal-wheels/concurrency/lock"; -import { $msg } from "@vrtmrz/livesync-commonlib/compat/common/i18n"; +import { $msg } from "@/common/translation"; import { P2PLogCollector } from "@vrtmrz/livesync-commonlib/compat/replication/trystero/P2PLogCollector"; import { REMOTE_REQUEST_ACTIVITY_MINIMUM_VISIBLE_MS, diff --git a/src/modules/features/SettingDialogue/LiveSyncSetting.ts b/src/modules/features/SettingDialogue/LiveSyncSetting.ts index 36c25b09..96ee66ef 100644 --- a/src/modules/features/SettingDialogue/LiveSyncSetting.ts +++ b/src/modules/features/SettingDialogue/LiveSyncSetting.ts @@ -18,7 +18,7 @@ import { type AllNumericItemKey, type AllBooleanItemKey, } from "./settingConstants.ts"; -import { $msg } from "@vrtmrz/livesync-commonlib/compat/common/i18n"; +import { $msg } from "@/common/translation"; import { wrapMemo, type AutoWireOption, type OnUpdateResult } from "./SettingPane.ts"; export class LiveSyncSetting extends Setting { diff --git a/src/modules/features/SettingDialogue/ObsidianLiveSyncSettingTab.ts b/src/modules/features/SettingDialogue/ObsidianLiveSyncSettingTab.ts index 9da92c18..8e6e04c0 100644 --- a/src/modules/features/SettingDialogue/ObsidianLiveSyncSettingTab.ts +++ b/src/modules/features/SettingDialogue/ObsidianLiveSyncSettingTab.ts @@ -30,7 +30,7 @@ import { type OnDialogSettings, getConfName, } from "./settingConstants.ts"; -import { $msg } from "@vrtmrz/livesync-commonlib/compat/common/i18n"; +import { $msg } from "@/common/translation"; import { LiveSyncSetting as Setting } from "./LiveSyncSetting.ts"; import { fireAndForget, yieldNextAnimationFrame } from "octagonal-wheels/promises"; import { EVENT_REQUEST_RELOAD_SETTING_TAB, eventHub } from "@/common/events.ts"; diff --git a/src/modules/features/SettingDialogue/PaneGeneral.ts b/src/modules/features/SettingDialogue/PaneGeneral.ts index 5c18de94..cb826100 100644 --- a/src/modules/features/SettingDialogue/PaneGeneral.ts +++ b/src/modules/features/SettingDialogue/PaneGeneral.ts @@ -1,5 +1,5 @@ -import { $msg, $t } from "@vrtmrz/livesync-commonlib/compat/common/i18n"; -import { SUPPORTED_I18N_LANGS, type I18N_LANGS } from "@vrtmrz/livesync-commonlib/compat/common/rosetta"; +import { $msg, $t } from "@/common/translation"; +import { SUPPORTED_I18N_LANGS, type I18N_LANGS } from "@/common/rosetta"; import { LiveSyncSetting as Setting } from "./LiveSyncSetting.ts"; import type { ObsidianLiveSyncSettingTab } from "./ObsidianLiveSyncSettingTab.ts"; import type { PageFunctions } from "./SettingPane.ts"; diff --git a/src/modules/features/SettingDialogue/PaneHatch.ts b/src/modules/features/SettingDialogue/PaneHatch.ts index 83d66dcd..3897046c 100644 --- a/src/modules/features/SettingDialogue/PaneHatch.ts +++ b/src/modules/features/SettingDialogue/PaneHatch.ts @@ -11,7 +11,7 @@ import { import { createBlob, getFileRegExp, isDocContentSame, readAsBlob } from "@vrtmrz/livesync-commonlib/compat/common/utils"; import { Logger } from "@vrtmrz/livesync-commonlib/compat/common/logger"; import { addPrefix, shouldBeIgnored, stripAllPrefixes } from "@vrtmrz/livesync-commonlib/compat/string_and_binary/path"; -import { $msg } from "@vrtmrz/livesync-commonlib/compat/common/i18n"; +import { $msg } from "@/common/translation"; import { Semaphore } from "octagonal-wheels/concurrency/semaphore"; import { LiveSyncSetting as Setting } from "./LiveSyncSetting.ts"; import { diff --git a/src/modules/features/SettingDialogue/PaneRemoteConfig.ts b/src/modules/features/SettingDialogue/PaneRemoteConfig.ts index fa4b20bf..11f08416 100644 --- a/src/modules/features/SettingDialogue/PaneRemoteConfig.ts +++ b/src/modules/features/SettingDialogue/PaneRemoteConfig.ts @@ -8,7 +8,7 @@ import { LOG_LEVEL_VERBOSE, } from "@vrtmrz/livesync-commonlib/compat/common/types"; import { Menu, type ButtonComponent } from "@/deps.ts"; -import { $msg } from "@vrtmrz/livesync-commonlib/compat/common/i18n"; +import { $msg } from "@/common/translation"; import { LiveSyncSetting as Setting } from "./LiveSyncSetting.ts"; import type { ObsidianLiveSyncSettingTab } from "./ObsidianLiveSyncSettingTab.ts"; import type { PageFunctions } from "./SettingPane.ts"; diff --git a/src/modules/features/SettingDialogue/PaneSetup.ts b/src/modules/features/SettingDialogue/PaneSetup.ts index d9605ba2..866d403b 100644 --- a/src/modules/features/SettingDialogue/PaneSetup.ts +++ b/src/modules/features/SettingDialogue/PaneSetup.ts @@ -1,5 +1,5 @@ import { MarkdownRenderer } from "@/deps.ts"; -import { $msg } from "@vrtmrz/livesync-commonlib/compat/common/i18n"; +import { $msg } from "@/common/translation"; import { LiveSyncSetting as Setting } from "./LiveSyncSetting.ts"; import { fireAndForget } from "octagonal-wheels/promises"; import { diff --git a/src/modules/features/SettingDialogue/PaneSyncSettings.ts b/src/modules/features/SettingDialogue/PaneSyncSettings.ts index 6a2c03f9..64c2a930 100644 --- a/src/modules/features/SettingDialogue/PaneSyncSettings.ts +++ b/src/modules/features/SettingDialogue/PaneSyncSettings.ts @@ -1,6 +1,6 @@ import { type ObsidianLiveSyncSettings, LOG_LEVEL_NOTICE, REMOTE_COUCHDB, LEVEL_ADVANCED } from "@vrtmrz/livesync-commonlib/compat/common/types"; import { Logger } from "@vrtmrz/livesync-commonlib/compat/common/logger"; -import { $msg } from "@vrtmrz/livesync-commonlib/compat/common/i18n"; +import { $msg } from "@/common/translation"; import { LiveSyncSetting as Setting } from "./LiveSyncSetting.ts"; import { EVENT_REQUEST_COPY_SETUP_URI, eventHub } from "@/common/events.ts"; import type { ObsidianLiveSyncSettingTab } from "./ObsidianLiveSyncSettingTab.ts"; diff --git a/src/modules/features/SettingDialogue/SettingPane.ts b/src/modules/features/SettingDialogue/SettingPane.ts index 34dac726..e34fdfbe 100644 --- a/src/modules/features/SettingDialogue/SettingPane.ts +++ b/src/modules/features/SettingDialogue/SettingPane.ts @@ -1,4 +1,4 @@ -import { $msg } from "@vrtmrz/livesync-commonlib/compat/common/i18n"; +import { $msg } from "@/common/translation"; import { LEVEL_ADVANCED, LEVEL_EDGE_CASE, LEVEL_POWER_USER, type ConfigLevel } from "@vrtmrz/livesync-commonlib/compat/common/types"; import type { AllSettingItemKey, AllSettings } from "./settingConstants"; diff --git a/src/modules/features/SettingDialogue/utilFixCouchDBSetting.ts b/src/modules/features/SettingDialogue/utilFixCouchDBSetting.ts index 12a7ef36..4a72be8e 100644 --- a/src/modules/features/SettingDialogue/utilFixCouchDBSetting.ts +++ b/src/modules/features/SettingDialogue/utilFixCouchDBSetting.ts @@ -1,5 +1,5 @@ import { requestToCouchDBWithCredentials } from "@/common/utils"; -import { $msg } from "@vrtmrz/livesync-commonlib/compat/common/i18n"; +import { $msg } from "@/common/translation"; import { LOG_LEVEL_INFO, LOG_LEVEL_NOTICE, diff --git a/src/modules/features/SetupManager.ts b/src/modules/features/SetupManager.ts index 1164dfe0..e461745a 100644 --- a/src/modules/features/SetupManager.ts +++ b/src/modules/features/SetupManager.ts @@ -43,6 +43,7 @@ import { applySettingsAndFetchOnActivation, applySettingsWithScheduledInitialisation, } from "@/serviceFeatures/setupObsidian/setupActivationLifecycle.ts"; +import { isP2PMainRemote } from "@/common/remoteConfiguration.ts"; function copySettingsForRemoteProfileUpdate(settings: ObsidianLiveSyncSettings): ObsidianLiveSyncSettings { return { @@ -368,10 +369,7 @@ export class SetupManager extends AbstractModule { userMode = UserMode.ExistingUser; } else if (userModeResult === "compatible-existing-user") { extra(); - const applied = await this.applySettingAndScheduleFetchOnActivation( - newConf, - UserMode.ExistingUser - ); + const applied = await this.applySettingAndScheduleFetchOnActivation(newConf, UserMode.ExistingUser); if (applied) this._log("Settings from wizard applied.", LOG_LEVEL_NOTICE); return applied; } else if (userModeResult === "cancelled") { @@ -382,8 +380,9 @@ export class SetupManager extends AbstractModule { } const component = userMode === UserMode.NewUser ? OutroNewUser : OutroExistingUser; const confirm = await this.dialogManager.openWithExplicitCancel< - OutroNewUserResultType | OutroExistingUserResultType - >(component); + OutroNewUserResultType | OutroExistingUserResultType, + { isP2P: boolean } + >(component, { isP2P: isP2PMainRemote(newConf) }); if (confirm === "cancelled") { this._log("User cancelled applying settings from wizard..", LOG_LEVEL_NOTICE); return false; diff --git a/src/modules/features/SetupManager.unit.spec.ts b/src/modules/features/SetupManager.unit.spec.ts index 0bd1d647..75c52909 100644 --- a/src/modules/features/SetupManager.unit.spec.ts +++ b/src/modules/features/SetupManager.unit.spec.ts @@ -2,6 +2,7 @@ import { beforeEach, describe, expect, it, vi } from "vitest"; import { DEFAULT_SETTINGS, REMOTE_COUCHDB, + REMOTE_P2P, type ObsidianLiveSyncSettings, } from "@vrtmrz/livesync-commonlib/compat/common/types"; import { SettingService } from "@vrtmrz/livesync-commonlib/compat/services/base/SettingService"; @@ -194,6 +195,37 @@ describe("SetupManager", () => { expect(setting.currentSettings().isConfigured).toBe(true); }); + it("identifies P2P when opening the new-user initialisation confirmation", async () => { + const { manager, setting, dialogManager } = createSetupManager(); + setting.settings = { ...setting.currentSettings(), isConfigured: false }; + dialogManager.openWithExplicitCancel.mockResolvedValueOnce(true); + const p2pProfileId = "p2p-profile"; + + await manager.onConfirmApplySettingsFromWizard( + { + ...setting.currentSettings(), + isConfigured: true, + // Imported profile settings can still carry the previous compatibility field + // until the selected profile is projected by the setting lifecycle. + remoteType: REMOTE_COUCHDB, + activeConfigurationId: p2pProfileId, + remoteConfigurations: { + [p2pProfileId]: { + id: p2pProfileId, + name: "P2P room", + uri: "sls+p2p://:secret@team-room?relays=wss%3A%2F%2Frelay.example", + isEncrypted: false, + }, + }, + }, + UserMode.NewUser + ); + + expect(dialogManager.openWithExplicitCancel).toHaveBeenCalledWith(expect.anything(), { + isP2P: true, + }); + }); + it("reserves Fetch when compatible imported settings activate an unconfigured device", async () => { const { manager, setting, dialogManager, core } = createSetupManager(); setting.settings = { ...setting.currentSettings(), isConfigured: false }; diff --git a/src/modules/features/SetupWizard/dialogs/OutroNewUser.svelte b/src/modules/features/SetupWizard/dialogs/OutroNewUser.svelte index 8b0ce692..6df6f571 100644 --- a/src/modules/features/SetupWizard/dialogs/OutroNewUser.svelte +++ b/src/modules/features/SetupWizard/dialogs/OutroNewUser.svelte @@ -5,33 +5,59 @@ import Question from "@/modules/services/LiveSyncUI/components/Question.svelte"; import Instruction from "@/modules/services/LiveSyncUI/components/Instruction.svelte"; import UserDecisions from "@/modules/services/LiveSyncUI/components/UserDecisions.svelte"; + import { $msg as msg } from "@/common/translation"; import { TYPE_APPLY, TYPE_CANCELLED, type OutroNewUserResultType } from "./setupDialogTypes"; type Props = { setResult: (result: OutroNewUserResultType) => void; + getInitialData?: () => { isP2P?: boolean } | undefined; }; - const { setResult }: Props = $props(); + const { setResult, getInitialData }: Props = $props(); + const isP2P = $derived(getInitialData?.()?.isP2P === true); // let userType = $state(TYPE_CANCELLED); - - -

- The connection to the server has been configured successfully. As the next step, the synchronisation data on the server will be built based on the current data on this device. -

-

- IMPORTANT -
- 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. -

-
- - Please select the button below to restart and proceed to the final confirmation. - - - setResult(TYPE_APPLY)} /> - setResult(TYPE_CANCELLED)} /> - +{#if isP2P} + + +

{msg("Ui.SetupWizard.OutroNewP2PUser.GuidancePrimary")}

+

+ {msg("Ui.SetupWizard.OutroNewP2PUser.Important")} +
+ {msg("Ui.SetupWizard.OutroNewP2PUser.GuidanceNotice")} +

+
+ + {msg("Ui.SetupWizard.OutroNewP2PUser.Question")} + + + setResult(TYPE_APPLY)} + /> + setResult(TYPE_CANCELLED)} /> + +{:else} + + +

+ The connection to the server has been configured successfully. As the next step, the synchronisation data on the server will be built based on the current data on this device. +

+

+ IMPORTANT +
+ 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. +

+
+ + Please select the button below to restart and proceed to the final confirmation. + + + setResult(TYPE_APPLY)} /> + setResult(TYPE_CANCELLED)} /> + +{/if} diff --git a/src/modules/features/SetupWizard/dialogs/RebuildEverything.svelte b/src/modules/features/SetupWizard/dialogs/RebuildEverything.svelte index 2253e6a8..be4c3e78 100644 --- a/src/modules/features/SetupWizard/dialogs/RebuildEverything.svelte +++ b/src/modules/features/SetupWizard/dialogs/RebuildEverything.svelte @@ -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 msg } from "@/common/translation"; import { TYPE_CANCEL, TYPE_BACKUP_DONE, @@ -21,20 +22,19 @@ type Props = { setResult: (result: RebuildEverythingResult) => void; + getInitialData?: () => { isP2P?: boolean } | undefined; }; - const { setResult }: Props = $props(); + const { setResult, getInitialData }: Props = $props(); + const isP2P = $derived(getInitialData?.()?.isP2P === true); let backupType = $state(TYPE_CANCEL); let confirmationCheck1 = $state(false); let confirmationCheck2 = $state(false); let confirmationCheck3 = $state(false); const canProceed = $derived.by(() => { - return ( - (backupType === TYPE_BACKUP_DONE || backupType === TYPE_BACKUP_SKIPPED) && - confirmationCheck1 && - confirmationCheck2 && - confirmationCheck3 - ); + const backupConfirmed = backupType === TYPE_BACKUP_DONE || backupType === TYPE_BACKUP_SKIPPED; + if (isP2P) return backupConfirmed && confirmationCheck1; + return backupConfirmed && confirmationCheck1 && confirmationCheck2 && confirmationCheck3; }); let preventFetchingConfig = $state(false); @@ -48,33 +48,44 @@ } - -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 - the single, authoritative master copy. - - 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("Ui.SetupWizard.RebuildEverythingP2P.Guidance")} + {msg("Ui.SetupWizard.RebuildEverythingP2P.Note")} + + + {msg("Ui.SetupWizard.RebuildEverythingP2P.ConfirmLocalResetNote")} + + +{:else} + + 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 the single, authoritative master copy. - There is a way to resolve this on other devices. - Of course, we can back up the data before proceeding. - - - by resetting the remote, you will be informed on other devices. - - - + + 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. + + + + There is a way to resolve this on other devices. + Of course, we can back up the data before proceeding. + + + by resetting the remote, you will be informed on other devices. + + + +{/if}
Have you created a backup before proceeding? @@ -103,12 +114,19 @@ - - - - - +{#if !isP2P} + + + + + +{/if} - commit()} /> + commit()} + /> setResult(TYPE_CANCEL)} /> diff --git a/src/modules/features/SetupWizard/dialogs/utilCheckCouchDB.ts b/src/modules/features/SetupWizard/dialogs/utilCheckCouchDB.ts index ed6be090..a7f56f0d 100644 --- a/src/modules/features/SetupWizard/dialogs/utilCheckCouchDB.ts +++ b/src/modules/features/SetupWizard/dialogs/utilCheckCouchDB.ts @@ -1,5 +1,5 @@ import { requestToCouchDBWithCredentials } from "@/common/utils"; -import { $msg } from "@vrtmrz/livesync-commonlib/compat/common/i18n"; +import { $msg } from "@/common/translation"; import { Logger } from "@vrtmrz/livesync-commonlib/compat/common/logger"; import type { ObsidianLiveSyncSettings } from "@vrtmrz/livesync-commonlib/compat/common/types"; import { parseHeaderValues } from "@vrtmrz/livesync-commonlib/compat/common/utils"; diff --git a/src/modules/main/ModuleLiveSyncMain.ts b/src/modules/main/ModuleLiveSyncMain.ts index 18bb072b..2dc32c2f 100644 --- a/src/modules/main/ModuleLiveSyncMain.ts +++ b/src/modules/main/ModuleLiveSyncMain.ts @@ -11,7 +11,7 @@ import { EVENT_SETTING_SAVED, eventHub, } from "@/common/events.ts"; -import { $msg, setLang } from "@vrtmrz/livesync-commonlib/compat/common/i18n"; +import { $msg, setLang } from "@/common/translation"; import { AbstractModule } from "@/modules/AbstractModule.ts"; import type { InjectableServiceHub } from "@vrtmrz/livesync-commonlib/compat/services/implements/injectable/InjectableServiceHub"; import type { LiveSyncCore } from "@/main.ts"; diff --git a/src/modules/services/LiveSyncUI/components/Check.svelte b/src/modules/services/LiveSyncUI/components/Check.svelte index aa5e8862..5b33a9f1 100644 --- a/src/modules/services/LiveSyncUI/components/Check.svelte +++ b/src/modules/services/LiveSyncUI/components/Check.svelte @@ -1,5 +1,5 @@