summaryrefslogtreecommitdiff
path: root/resources
diff options
context:
space:
mode:
Diffstat (limited to 'resources')
-rw-r--r--resources/images/Header.pngbin0 -> 1669 bytes
-rw-r--r--resources/images/Header_Large.pngbin0 -> 7995 bytes
-rw-r--r--resources/images/Yizi.icobin0 -> 270622 bytes
-rw-r--r--resources/locales/en.yml1303
-rw-r--r--resources/locales/zh-CN.yml1292
5 files changed, 2595 insertions, 0 deletions
diff --git a/resources/images/Header.png b/resources/images/Header.png
new file mode 100644
index 0000000..ad9e156
--- /dev/null
+++ b/resources/images/Header.png
Binary files differ
diff --git a/resources/images/Header_Large.png b/resources/images/Header_Large.png
new file mode 100644
index 0000000..4c39fc5
--- /dev/null
+++ b/resources/images/Header_Large.png
Binary files differ
diff --git a/resources/images/Yizi.ico b/resources/images/Yizi.ico
new file mode 100644
index 0000000..24a2d00
--- /dev/null
+++ b/resources/images/Yizi.ico
Binary files differ
diff --git a/resources/locales/en.yml b/resources/locales/en.yml
new file mode 100644
index 0000000..be88c60
--- /dev/null
+++ b/resources/locales/en.yml
@@ -0,0 +1,1303 @@
+# l10n file - en
+
+# The following syntax can be used in text
+# 1. **Bold**
+# 2. *Italic*
+# 3. [[red]]Color[[/]]
+# 4. `text` (auto colored green)
+# 5. <文本> (auto colored cyan)
+#
+# For color usage, please refer to:
+# RED = Emergency, Error
+# YELLOW = Warning
+#
+# CYAN = Emphasis
+# GREEN = Text Content
+#
+# GRAY = De-emphasis, Ignore
+# GREY = Same as above
+#
+# For Analyzer results:
+# YELLOW = Move operation = ">" symbol
+# GREEN = Create operation = "+" symbol
+# RED = Lost operation = "-" symbol
+# MAGENTA = Erase operation = "&" symbol
+# CYAN = Modify operation = "*" symbol
+
+common:
+ confirm: |
+ Confirm to perform the above operation? (Y/n):
+
+ word:
+ version: Version
+ cli_version: CLI Version
+ vcs_version: VCS Version
+
+jvv:
+ version:
+ header: |
+ JVCS Upstream Manager - %{version} (Core: [[cyan]]%{vcs_version}[[/]])
+
+ compile_info: |
+ Compile Info
+ Compile Date - [[cyan]]%{build_time}[[/]]
+ Target - [[cyan]]%{build_target}[[/]]
+ Platform - [[cyan]]%{build_platform} - %{build_toolchain}[[/]]
+
+ Core - [[cyan]]%{core_build_branch}[[/]] (Commit: %{core_build_commit})
+ CLI - [[cyan]]%{cli_build_branch}[[/]] (Commit: %{cli_build_commit})
+
+ help: |
+ **JustEnoughVCS Upstream Vault Commands**
+ This program directly creates, manages, and runs JustEnoughVCS upstream vaults.
+ **Warning**: It directly operates on vault data - please operate with caution!
+ * With great power comes great responsibility *
+
+ **VAULT**:
+ create <NAME> - Create a vault in the given directory name
+ init - Create a vault in the current directory
+
+ **QUERY**:
+ here - Query information about the current vault
+
+ **MEMBERS**:
+ member [list|register|remove]
+ list - List members
+ register <MEMBER_NAME> - Register a member
+ remove <MEMBER_NAME> - Remove a member
+
+ **SERVICES**:
+ service listen - Run the server
+
+ Additionally, you can use jvv <CMD_NAME> --help to query more detailed help!
+
+ here: |
+ **Display Vault Information Here**
+ **Example**: cd ./target_dir/ && jvv here
+
+ create: |
+ **Create a new vault with the given name**
+ **Usage**: jvv create <VAULT_NAME>
+
+ **Example**: jvv create MyVault
+ Creates a directory named 'MyVault' and initializes a vault inside it.
+
+ init: |
+ **Initialize a vault in the current directory**
+ **Usage**: jvv init
+
+ Uses the current directory's name as the vault name.
+
+ member: |
+ **Member Management**
+ **Usage**: jvv member <register/remove> <MEMBER_NAME>
+
+ Register or remove members based on the given member name.
+
+ It is recommended to use the "snake_case" naming format,
+ as it will be stored in this format in the configuration file
+ **Example**: jvv member register vault_member
+
+ **Query**: jvv member list
+ Equivalent to running `jvv here` in the members directory.
+
+ **Tip**: Does not manage private keys automatically. Keys must be handled manually.
+
+ service: |
+ **Service Management**
+ **Usage**:
+ jvv service listen - Start the server in the current vault
+ You can use --port to set the listening port,
+ use --no-log to disable log output
+
+ info:
+ here:
+ analyzing_size: Analyzing vault storage size...
+
+ fail:
+ jvcs: "JustEnoughVCS Error: %{err}"
+ no_vault_here: No vault found here
+
+ tokio:
+ fs:
+ create_dir: Failed to create directory %{dir}
+ create_dir_all: Failed to create directory %{dir}
+
+ std:
+ current_dir: Failed to get current directory
+ current_dir_name: Failed to get current directory name
+ set_current_dir: Failed to set current directory to %{dir}
+
+ here:
+ cfg_not_found: Could not find vault configuration!
+ If you wish to use this directory as a vault, please use jvv init --help to view related help
+
+ vault_init_failed: Failed to initialize vault!
+ size_calc_error: Failed to calculate vault storage size!
+ member_ids_failed: Failed to get member IDs!
+ ref_sheet_not_found: Reference sheet `ref` not found, but it should exist!
+
+ create:
+ not_empty: Operation denied! The specified directory already exists.
+
+ init:
+ not_empty: Operation denied! The directory is not empty.
+
+ member:
+ register: Failed to create member! Please check if a member with the same name already exists
+ list: Failed to get member ID!
+
+ service:
+ listen_done: |
+ Server forced to close due to error!
+ Error message: %{error}
+
+ wtf_show_log_and_no_log: |
+ You cannot both show and hide log output at the same time!
+
+ "
+ This reminds me of the old saying: 'You can't have your cake and eat it too.'
+ Or perhaps the classic logical puzzle: 'This statement is false.'
+ "
+
+ Your command is a paradox: show the logs, and do not show the logs. Which contradictory order should I follow?
+
+ **Tip**: Use `jvv listen --no-log` or `jvv listen --show-log` to override the default Logger setting.
+
+ success:
+ here:
+ info: |
+ Found vault *`%{name}`*! (%{num_mem} Members, %{num_pk} registered PubKeys)
+ Managing %{num_sheets} Sheets, %{num_vf} VirtualFiles, total %{total_size}
+
+ **Tip**: To start the server, run jvv service listen
+
+ create: Successfully created vault at `%{name}`!
+
+ init: Successfully initialized vault here!
+
+ member:
+ register: Successfully created member `%{member}`!
+ remove: |
+ Successfully removed `%{member}` from the vault!
+ (or they were never here?)
+ list:
+ header: |
+ **There are %{num} member(s) in the current vault:**
+
+ footer: |
+ **Among them, %{num} members have registered PubKeys.**
+
+ status_key_registered: (REGISTERED)
+
+ service:
+ listen_start: Listening for client connections in vault `%{path}` ...
+ listen_done: Server shutdown!
+
+jv:
+ version:
+ header: |
+ JVCS CommandLine - [[cyan]]%{version}[[/]] (Core: [[cyan]]%{vcs_version}[[/]])
+
+ compile_info: |
+ Compile Info
+ Compile Date - [[cyan]]%{build_time}[[/]]
+ Target - [[cyan]]%{build_target}[[/]]
+ Platform - [[cyan]]%{build_platform} - %{build_toolchain}[[/]]
+
+ Core - [[cyan]]%{core_build_branch}[[/]] (Commit: %{core_build_commit})
+ CLI - [[cyan]]%{cli_build_branch}[[/]] (Commit: %{cli_build_commit})
+
+ tip:
+ not_workspace: |
+ Not in workspace directory.
+ Use `jv create <name>` or `jv init` to create workspace
+
+ no_account: |
+ No accounts registered on this computer.
+ Use `jv account add <account_name>` to create account
+
+ no_account_set: |
+ Current workspace account is `unknown`, meaning no account is set
+ Use `jv as <account_name>` to set account for workspace
+ or use `jv login <account_name> <upstream_address>` to directly login to the upstream vault
+
+ account_not_exist: |
+ The account `%{account}` set for the current workspace is not registered on your computer
+
+ outdated: |
+ Workspace info has not been updated for %{hour} hours %{minutes} minutes
+ Use `jv update` to get the latest information
+
+ help: |
+ **JustEnoughVCS**
+ This program connects to upstream vaults to synchronize and commit changes to local workspace files for collaborative work.
+
+ **ALIASES**:
+ jv u - Download latest information [[cyan]][REMOTE][[/]]
+ jv t - Track files [[cyan]][REMOTE][[/]]
+ jv a - Align files to sheet
+ jv [in|out] - Import or export files [[cyan]][REMOTE][[/]]
+
+ **UPSTREAM VAULT**:
+ login <ACCOUNT> <UPSTREAM> - Login to upstream vault [[cyan]][REMOTE][[/]]
+ direct <UPSTREAM> - Direct workspace to upstream vault [[cyan]][REMOTE][[/]]
+ unstain - Unstain workspace, clear association
+ update - Download latest information [[cyan]][REMOTE][[/]]
+
+ **ACCOUNTS**:
+ account [list|as|add|remove|movekey|genpub]
+ list - List accounts
+ as <ACCOUNT_NAME> - Switch account in workspace
+ add <ACCOUNT_NAME> - Add account to this computer
+ remove <ACCOUNT_NAME> - Remove account from computer
+ movekey <NAME> <KEY_FILE> - Move private key file to specified account
+ genpub <NAME> <DIRECTORY> - Output public key file to specified directory
+
+ **SHEETS**:
+ sheet [list|use|exit|make|drop|align]
+ list - List all sheets
+ use - Use sheet, start work
+ exit - Exit sheet, clear current modifications
+ make - Create a new sheet for yourself [[cyan]][REMOTE][[/]]
+ drop - Drop the sheet for others to use [[cyan]][REMOTE][[/]]
+ align - Align files to sheet [[cyan]][REMOTE][[/]]
+
+ **CONTEXT**:
+ here - Display path information
+ status - Display current sheet status information
+ info <FILE_PATH> - Display individual file status
+
+ **FILE TRANSFER**:
+ share <FILE> <SHEET> <DESC> - Share mapping to other sheets [[cyan]][REMOTE][[/]]
+ share <SHARE_ID> - Import share to current sheet [[cyan]][REMOTE][[/]]
+ share <REF_SHEET> <FILE> - Import mapping from other ref sheet [[cyan]][REMOTE][[/]]
+
+ **FILE OPERATIONS**:
+ move <FILE> <TO> - Safely rename files [[cyan]][REMOTE][[/]]
+ track <FILE> - Track files to latest version [[cyan]][REMOTE][[/]]
+ hold <FILE> - Hold, sync and lock file [[cyan]][REMOTE][[/]]
+ throw <FILE> - Throw, sync and unlock file [[cyan]][REMOTE][[/]]
+ jump <FILE> <VERSION> - Jump file to other version [[cyan]][REMOTE][[/]]
+
+ **DOCUMENTATION**:
+ docs list - List all available documentation
+ docs <DOC_NAME> - View content of specified documentation
+
+ You can use jv <COMMAND_NAME> --help to query more detailed help!
+
+ **Tip**: If you need to understand JustEnoughVCS collaboration paradigms, use jv docs get_started
+
+ account: |
+ **Manage Local Accounts**
+ **Usage**:
+ jv account list - List all accounts on this computer and whether private keys are registered
+ jv account as <ACCOUNT_NAME> - Switch current account
+ jv account as host/<ACCOUNT_NAME> - Switch to account in Host mode
+ jv account add <ACCOUNT_NAME> - Add an account to this computer
+ jv account remove <ACCOUNT_NAME> - Delete this account
+ jv account movekey <ACCOUNT_NAME> <PRIVATE_KEY_FILE> - Move private key to specified account
+ jv account genpub <ACCOUNT_NAME> <OUTPUT_DIR> - Output public key to specified directory, leave empty for current directory
+
+ **Tip**: Use jv account add <ACCOUNT_NAME> --keygen to automatically generate ED25519 private key for your account
+ **Note**: Both `--keygen` and `genpub` require your computer to be able to directly call OpenSSL command-line tools
+
+ Accounts are identity identifiers on the local computer, each account can be associated with different private keys.
+ You need to set up accounts before interacting with upstream vaults.
+
+ sheet: |
+ **Manage Sheets**
+ **Usage**:
+ jv sheet list - List all sheets in the upstream workspace
+
+ jv sheet use <SHEET_NAME> - Use the specified sheet to start current work (automatically created if it doesn't exist)
+ jv sheet exit - Exit current work
+
+ jv sheet make <SHEET_NAME> - Create a new sheet for yourself
+ jv sheet drop <SHEET_NAME> - Drop the sheet for others to use
+
+ **Align**:
+ jv sheet align - View all items that need alignment
+
+ For moved items:
+ jv sheet align <ITEM> [local/remote] - Align specified moved item
+ jv sheet align moved [local/remote] - Align all moved items
+ jv sheet align moved break - Break all move items
+
+ For lost items:
+ jv sheet align <ITEM> <CREATED_ITEM> - Point to created item to confirm move
+ jv sheet align <ITEM> confirm - Confirm this file is lost
+ jv sheet align lost confirm - Confirm all lost items
+
+ For erased items:
+ jv sheet align <ITEM> confirm - Confirm this file is erased
+ jv sheet align erased confirm - Confirm all erased items
+
+ jv sheet align --work - Use editor mode to align files
+
+ Sheets are core concepts in JustEnoughVCS, each sheet represents an independent file collection.
+ You can switch work between different sheets, or export files from one sheet to another.
+
+ create: |
+ **Create Workspace with Specified Name**
+ **Usage**: jv create <WORKSPACE_NAME>
+
+ **Example**: jv create my_workspace
+ Creates a directory named 'my_workspace' in the current directory and initializes a workspace inside it.
+
+ Workspace is your local working environment for file synchronization and version control with upstream vaults.
+
+ init: |
+ **Create Workspace in Current Directory**
+ **Usage**: jv init
+
+ This command creates a workspace in the current directory, with the workspace name determined by the current directory name.
+
+ If the current directory is not empty, this operation will fail. Please ensure you execute this command in an empty directory.
+
+ here: |
+ **Query Directory Information Here**
+ **Usage**: jv here
+
+ Displays detailed information about current directory files, including:
+ - File name, size, version number
+ - Current file holder
+ - Latest version update description
+
+ **Tip**: Use `jv here --desc` to view the last update description for local files
+
+ status: |
+ **Display Current Sheet Status Information**
+ **Usage**: jv status
+
+ Displays the file modification status of the current sheet:
+ - Added, deleted files
+ - Moved files
+ - Modified files
+
+ This is a quick way to understand the current file status of the sheet.
+
+ info: |
+ **Display File Details**
+ **Usage**: jv info <FILE_PATH>
+ Use `--full` to view the full update history
+
+ Display detailed information about the specified file, including:
+ - File's change history
+ - File's mapping in `ref`
+ - File's version in `ref`
+
+ track: |
+ **Track Files to Latest Fact**
+ **Usage**: jv track <FILE_PATH>
+
+ It is not uploading, nor downloading,
+ but a declaration of the result regarding [[cyan]]"which version should be considered fact"[[/]].
+
+ **Creation**
+ When there is an untracked file in the workspace, that file does not yet exist in the recognized fact.
+ Executing track will create the factual version of this file, write it to your sheet, and grant you editing rights.
+ At this point, you are **the author of this fact**.
+
+ **Update**
+ When you hold a file and edit based on the current latest fact,
+ the version in your workspace will be considered the new latest fact.
+ Executing track will **update this fact to the upstream**.
+
+ **Synchronization**
+ When you do not hold the file, edit based on outdated facts, or the file does not exist locally,
+ your modifications do not have factual validity; everything follows the upstream latest version.
+ Executing track will **synchronize the upstream fact to local**.
+ To overwrite local modifications, you must explicitly specify `--overwrite`.
+
+ hold: |
+ **Hold Files: Obtain File Edit Rights from Upstream Vault**
+ **Usage**: jv hold <FILE_PATH>
+
+ **Example**: jv hold src/lib.rs
+ When you need to edit a file, you must first hold the file's edit rights.
+ After holding a file, other collaborators will not be able to edit the same file simultaneously, avoiding conflicts.
+
+ After editing, remember to track the file to save changes.
+
+ throw: |
+ **Throw Files: Release File Edit Rights from Upstream Vault**
+ **Usage**: jv throw <FILE_PATH>
+
+ **Example**: jv throw src/config.rs
+ When you no longer need to edit a file, you can throw the file's edit rights.
+ After throwing, other collaborators can hold and edit the file.
+
+ If you have made changes to the file but haven't tracked them, throwing will lose those changes.
+
+ move: |
+ **Move Mapping**
+ **Usage**:
+ jv move <MAPPING> <TARGET_MAPPING> - Modify upstream mapping
+ jv move <MAPPING> --erase - Erase upstream mapping
+
+ **Examples**:
+ jv move draft/character.png done/character.png - Move mapping
+ jv move character.png player.png - Rename
+ jv move . ../publish/ - Batch move
+ jv move temp/ --erase - Erase mapping
+
+ The move mapping operation modifies the upstream mapping and synchronizes the local structure (use `--only-remote` to cancel local modification)
+ After moving, you usually need `jv align moved remote` to synchronize the local structure to the upstream
+
+ share: |
+ **Share File Visibility**
+ **Usage**:
+ jv share <FILE> <SHEET> <DESCRIPTION> - Share mapping to other sheets
+ jv share <SHARE_ID> - Import share to current sheet
+
+ jv share list - View incoming shares
+ jv share see - View share details
+
+ **Tip**: The import command can use the following parameters
+ --safe - Safe import, reject all conflicts, this is the default scheme
+ --skip - Skip all conflicting items
+ --overwrite - Force overwrite conflicting mappings, dangerous operation
+ --reject - Reject this share
+
+ **Sharing** is the simplest way to give file visibility to others
+
+ direct: |
+ **Direct to Specified Upstream Vault and Stain This Workspace**
+ **Usage**: jv direct <UPSTREAM_VAULT_ADDRESS>
+
+ **Example**: jv direct your_vault.org
+ This operation connects the current workspace to the specified upstream vault and adds a stain identifier to the workspace.
+
+ After staining, the workspace will only be able to interact with vaults of the specified identifier, ensuring data consistency.
+
+ unstain: |
+ **Unstain This Workspace**
+ **Usage**: jv unstain
+
+ **DANGER ZONE**: This operation removes the workspace's stain identifier, after which the workspace will be disconnected from the upstream vault.
+
+ After unstaining, the workspace will no longer be associated with any specific vault and can be reconnected to other vaults.
+ However, please note that this may cause data synchronization issues, use with caution.
+
+ update: |
+ **Download Latest Information from Upstream Vault**
+ **Usage**: jv update
+
+ This operation synchronizes the latest file status, sheet information, and member information from the upstream vault.
+
+ It is recommended to perform an update operation before starting work to ensure you have the latest working environment.
+
+ docs: |
+ **Query Built-in Documentation**
+ **Usage**:
+ jv docs list - List all available documentation
+ jv docs <DOC_NAME> - View content of specified documentation
+ jv docs <DOC_NAME> -d - Print content directly
+
+ **Example**:
+ jv docs get_started
+ jv docs collaboration -d
+
+ Built-in documentation includes JustEnoughVCS usage guides, collaboration paradigms, and best practices.
+
+ confirm:
+ login: |
+ You are logging into upstream vault %{upstream} as %{account}, please confirm
+
+ unstain: |
+ This operation will disconnect the current workspace from the upstream vault `%{upstream}`
+ If you reconnect to a vault with a mismatched identifier, it will cause serious problems, please operate with caution!
+
+ direct: |
+ Do you want to direct the current local workspace to the upstream vault %{upstream}?
+
+ sheet:
+ make:
+ restore: |
+ Sheet `%{sheet_name}` is no holder. Take ownership?
+ If not, use a different name to create a sheet.
+
+ drop: |
+ Are you sure you want to drop sheet `%{sheet_name}`?
+ After this, you will not be able to work in the sheet!
+
+ track:
+ prepare: |
+ You are tracking %{file_counts} file(s), these files will follow the following rules
+ 1. New files will be uploaded and added to your sheet for management
+ 2. For files you held, unless they don't exist locally or versions don't match, upload logic will always be executed
+ 3. For files not held unless the version is frozen, download logic will always be executed to get the latest version
+
+ **CURRENT**:
+ **DOWN**: %{old_files} to sync, %{download_files} to download
+ **UP** : %{new_files} to track, %{modified_files} to update
+
+ fail:
+ std:
+ current_dir: Failed to get current directory
+ current_dir_name: Failed to get current directory name
+ set_current_dir: Failed to set current directory to %{dir}
+
+ not_root_dir: This command needs to be execute in the workspace root directory!
+
+ move:
+ rename_failed: |
+ **Warning**: Failed to move local file `%{from}` to `%{to}`: %{error}
+
+ has_rename_failed: |
+ **Tip**: Because the file move was skipped, a deviation will occur.
+ After moving the file, be sure to use `jv align` to resolve the deviation.
+
+ no_target_dir: |
+ You did not specify a target directory to move to!
+ Please use `jv move <mapping> <target_address>` to move the mapping
+ or use `jv move <mapping> --erase` to erase the mapping
+
+ count_doesnt_match: |
+ You specified multiple mappings, but the target address is a single mapping.
+ Please use `jv move multiple_mappings directory/` to move multiple mappings
+ or use `jv move single_mapping mapping_name` to rename that mapping.
+
+ format_path: |
+ Failed to format directory %{path}: %{error}.
+
+ path_not_found: |
+ The directory `%{path}` cannot be found!
+
+ parse:
+ parser_failed: |
+ Incorrect command input!
+ Please use `jv -h` to view help
+
+ str_to_sockaddr: |
+ Error: %{err}
+ Cannot recognize *`%{str}`* as a valid address, please check your input!
+
+ from_core: |
+ **Error**: `%{err}` (This error is from core call)
+
+ share:
+ share_id_not_exist: |
+ The share `%{id}` does not exist.
+
+ invalid_target_sheet: |
+ The sheet `%{sheet}` you specified does not exist in your context.
+ If you are sure it exists, please use `jv update` to update the workspace.
+
+ sheet:
+ align:
+ no_direction: |
+ Unable to confirm alignment method!
+
+ align_item_not_found: |
+ Cannot find this alignment item!
+ **Tip**: Use `jv align` to view available alignment items
+
+ unknown_moved_direction: |
+ Unknown alignment direction!
+ Please use `local` or `remote` to indicate whether the path is based on local location or remote location
+
+ target_exists: |
+ Cannot align local file `%{local}` to remote address `%{remote}`
+ because another file already exists here. Please move that file away and align again!
+
+ move_failed: |
+ Failed to move local file: %{err}
+ **Tip**: Please check file permissions or if the path is correct
+
+ remove_mapping_failed: |
+ Failed to remove local mapping: %{err}
+
+ delete_mapping_failed: |
+ Failed to delete mapping from local table: %{err}
+ **Tip**: Please check the local table configuration file
+
+ no_lost_matched: |
+ No matching lost item found!
+
+ no_created_matched: |
+ No matching created item found!
+
+ too_many_lost: |
+ Found multiple lost items!
+
+ too_many_created: |
+ Found multiple created items!
+
+ calc_hash_failed: |
+ Failed to calculate hash for file `%{file}`
+
+ account:
+ no_user_dir: Cannot find user directory!
+ add: Failed to add account `%{account}`, please check if the account already exists.
+ remove: Failed to remove account `%{account}`, please check if the account exists.
+ list: Failed to get account list!
+ not_found: Cannot find account `%{account}`!
+ no_key_registered: Account `%{account}` has no registered private key!
+ as: Failed to set current account, please ensure the current sheet has been exited
+ keygen: Failed to generate private key! Please try generating private key manually
+ keygen_exec: |
+ Failed to run OpenSSL!
+ Please check if OpenSSL is installed on your computer
+ generate_pub_key: |
+ Failed to generate public key!
+ Please check if OpenSSL is installed, or manually generate the public key
+
+ init_create_dir_not_empty: |
+ The current directory is not empty!
+ If you are certain you want to create here, please use --force to force execution!
+
+ create: Failed to create local workspace!
+ init: Failed to create workspace here!
+ get_current_dir: Failed to get current directory!
+
+ workspace_not_found: |
+ Local workspace not found! Please use this command within a local workspace
+ If you wish to use this directory as a local workspace, please use jv init
+
+ read_cfg: Failed to read local workspace configuration file!
+ write_cfg: |
+ Failed to write modifications to the local workspace configuration file!
+ This is usually a disk issue. Here is the error message:
+ %{error}
+
+ cfg_not_found:
+ local_config: |
+ Unable to find or read local workspace information!
+ Please confirm you are in the workspace directory.
+
+ latest_info: |
+ Unable to find or read the latest upstream information from the perspective of account `%{account}`!
+ Please use `jv update` to update the workspace!
+
+ latest_file_data: |
+ Unable to find or read the latest file information from the perspective of account `%{account}`!
+ Please use `jv update` to update the workspace!
+
+ local_sheet: |
+ Unable to read or find the local mapping `%{account}/%{sheet}`!
+
+ cached_sheet: |
+ Unable to read or find the cached information for sheet `%{sheet}`
+ Please use `jv update` to update the workspace!
+
+ create_socket: Failed to create TCP socket!
+ connection_failed: Failed to connect to target server!
+
+ unstain: |
+ The current workspace is not stained, no need to unstain
+
+ not_stained: |
+ The current workspace is not stained, cannot perform the next operation!
+ **Tip**: Please first use `jv direct <upstream_address>` to direct to an upstream vault
+
+ change_edit_right:
+ no_selection: No files selected!
+
+ check_failed: |
+ In the %{num} selected files, there are items that failed pre-check!
+ Add `--details` after the command to view specific details
+
+ **Tip**:
+ Add `--skip-failed` after the command to skip the current failed items and proceed with the operation
+ Add `--force` to ignore checks and proceed (UNSAFE)
+
+ check_failed_details:
+ In the %{num} selected files, %{failed} files failed pre-check!
+ %{items}
+
+ check_fail_item: |
+ %{path} (%{reason})
+
+ check_fail_reason:
+ not_found_in_sheet: Mapping Not Found In Sheet
+ not_a_tracked_file: File Not Tracked
+ base_version_unmatch: Version Mismatch
+ not_holder: Not Holder
+ has_holder: Held by %{holder}
+ already_held: Already Held
+ already_modified: Already Modified
+
+ docs:
+ not_found: Doc `%{docs_name}` not found!
+ no_doc_dir: |
+ Cannot find staging directory!
+ **Tip**: You can also use `jv docs %{docs_name} -d` to print directly
+ open_editor: |
+ Failed to open text editor preview: `%{err}!
+ **Tip**: You can also use `jv docs %{docs_name} -d` to print directly
+
+ track:
+ no_selection: |
+ You did not select any files in this operation!
+
+ **Tip**: If you entered content and still see this,
+ it may be because the directory you passed is outside the workspace directory, paths outside the workspace will be ignored
+
+ status:
+ no_sheet_in_use: |
+ You are not using any sheet! Cannot analyze workspace status in this situation
+ **Tip**: You can use `jv use <sheet_name>` to select and use a sheet
+
+ analyze: |
+ Failed to analyze local workspace status!
+
+ use:
+ sheet_not_exists: |
+ Sheet `%{name}` does not exist!
+ **Tip**: Please use `jv update` to update workspace status
+
+ directory_not_empty: |
+ When no sheet is in use, the workspace should not contain any files!
+ **Tip**: Please ensure the workspace is clean before using `jv use <sheet_name>` to select and use a sheet
+
+ success:
+ account:
+ as: Successfully switched this workspace's account to `%{account}`
+ as_host: |
+ Switched to account: `host/%{account}`
+ If the Host identity is recognized by the upstream vault, you can control all sheets and mappings.
+ Please remember: "*With great power comes great responsibility*"
+ add: Successfully added account `%{account}`!
+ remove: Successfully removed account `%{account}`!
+ list:
+ header: |
+ **There are %{num} account(s) on this computer:**
+
+ status_has_key: (REGISTERED)
+ move_key: Successfully moved the private key to the account directory!
+ generate_pub_key: Successfully generated public key at `%{export}`, please give it to the upstream vault administrator!
+ create: Successfully created local workspace!
+ init: Successfully created workspace here!
+ unstain: |
+ Successfully unstained!
+ The current workspace no longer belongs to any upstream vault, please direct to a new upstream vault before working
+ **Tip**: Use `jv direct <upstream_vault_address>` to redirect to a new upstream vault
+
+ sheet:
+ list:
+ your_sheet: |
+ **VISIBLE TO YOU**:
+ your_sheet_item: |
+ %{number}. %{name}
+ your_sheet_item_use: |
+ %{number}. %{name} [Current]
+ reference_sheet_suffix: |
+ [REF]
+ other_sheet: |
+ **OTHERS**:
+ other_sheet_item: |
+ %{number}. %{name} (AT `%{holder}`)
+ other_sheet_item_no_holder: |
+ %{number}. %{name} (NO HOLDER)
+ tip_has_sheet: |
+ You are not on any sheet, you can use `jv use <SHEET_NAME>` to use a sheet
+ tip_no_sheet: |
+ You don't have any sheets, you can use `jv make <SHEET_NAME>` to create a new sheet
+
+ align:
+ list: |
+ Your local workspace has the following alignment tasks pending:
+ %{tasks}
+
+ task_name: TASK
+ local_path: LOCAL_FILE
+ remote_path: REMOTE_FILE
+
+ no_changes: |
+ Great, no structural deviations in the local workspace, no alignment needed!
+
+ suggestion_1: |
+ **Suggestion**: Confirm [[magenta]]Erased Items[[/]]
+ **Example**: Use `jv align %{example_erased} confirm` to confirm this [[magenta]]Erased Item[[/]]!
+
+ [[yellow]]**Note**: After confirmation, the local mapping will be erased, and the file at that location will be moved away.[[/]]
+
+ suggestion_2: |
+ **Suggestion**: Confirm [[red]]Lost Items[[/]]
+ Cannot determine if the intent of the file loss is [[red]]Deletion[[/]] or [[yellow]]Move[[/]]!
+ **Example**: Use `jv align %{example_lost} <action>` to handle this [[red]]Lost Item[[/]]
+
+ **Confirm Deletion**: Enter `confirm` to confirm your operation is a [[red]]Deletion[[/]]
+ **Declare Move**: Enter a [[green]]Created Item[[/]] to form a [[yellow]]Move[[/]] relationship with it
+
+ suggestion_3: |
+ **Suggestion**: Align [[yellow]]Moved Items[[/]], confirm the move is based on Local or Remote
+ **Example**: Use `jv align moved [local|remote]` to batch align
+ or use `jv align %{example_moved} [local|remote]` to precisely align a move
+ If this move is not what you expected,
+ use `jv align %{example_moved} break` to break them
+
+ **Align to Local**: Online , modify the upstream mapping to the local location
+ **Align to Remote**: Offline, move the local file to the upstream location
+
+ docs:
+ list:
+ header: |
+ **DOCUMENTS**:
+
+ item: |
+ %{num}. %{docs_name}
+
+ footer: |
+ **Tip**: Use `jv docs <doc_name>` to view doc, use -d for direct output
+
+ here:
+ items:
+ name: NAME
+ version: VERSION
+ holder: HOLDER
+ size: SIZE
+ editing: STATUS
+ description: DESC
+
+ path_info: |
+ CURRENT: %{upstream}/%{account}/%{sheet_name}/%{path} (%{minutes} min ago)
+
+ ghost_directory_item_info: |
+ ? %{directory_name}/
+
+ ghost_file_item_info: |
+ ? %{file_name}
+
+ directory_item_info: |
+ %{directory_name}/
+
+ file_item_info: |
+ %{file_name}
+
+ append_info:
+ holder:
+ yourself: |
+ You
+
+ others: |
+ %{holder}
+
+ size: |
+ %{size}
+
+ name: |
+ %{name}
+
+ version:
+ unmatch: |
+ %{remote_version}*
+
+ match: |
+ %{version}
+
+ editing:
+ cant_edit: |
+ R
+
+ cant_edit_but_modified: |
+ R*
+
+ can_edit: |
+ R/W
+
+ modified: |
+ R/W *
+
+ not_local: |
+ Remote
+
+ description: |
+ @%{creator}: %{description}
+
+ count_info: |
+ %{dir_count} dir(s), %{file_count} file(s). Total %{size}.
+
+ info:
+ oneline:
+ table_headers:
+ prefix: _
+ version: VERSION
+ creator: CREATOR
+ description: DESCRIPTION
+ description_current: Editing ...
+
+ share:
+ list:
+ headers:
+ id: ID
+ sharer: SHARER
+ description: DESCRIPTION
+ file_count: COUNT
+ footer: Use `jv share see <ID>` to view the specific content of the share
+
+ content: |
+ %{share_id}
+ FROM: %{sharer}
+ %{description}
+ MAPPINGS:
+ %{mappings}
+
+ status:
+ struct_changes_display: |
+ Viewing sheet %{sheet_name} (%{h}h %{m}min %{s}secs ago).
+
+ Now in structural change mode:
+ %{moved_items}%{lost_items}%{erased_items}%{created_items}
+ **Tip**: Use `jv align` to align moved, lost, and erased changes,
+ Use `jv track` to track created changes
+
+ content_modifies_display: |
+ Viewing sheet %{sheet_name} (%{h}h %{m}min %{s}secs ago).
+
+ Now in content change mode:
+ %{modified_items}
+
+ **Tip**: Use `jv track` to track your changes
+
+ no_changes: |
+ In sheet %{sheet_name}, status based on %{h} hours %{m} minutes %{s} seconds ago
+ Your workspace is synchronized with upstream, you can proceed with structural and content editing based on this state!
+
+ no_changes_in_reference_sheet: |
+ In sheet %{sheet_name}, status based on %{h} hours %{m} minutes %{s} seconds ago
+
+ created_item: |
+ + Created: %{path}
+
+ lost_item: |
+ - Lost: %{path}
+
+ moved_item: |
+ \> Moved: Remote %{from}
+ Local %{to}
+
+ erased_item: |
+ & Erased: %{path}
+
+ modified_item: |
+ \* Modified: %{path}
+
+ invalid_modified_item: |
+ x Modified: %{path} (%{reason})
+
+ invalid_modified_reasons:
+ not_holder: Modified without holding
+ base_version_mismatch: Base version mismatch for editing
+
+ no_structure_changes: |
+ No struct changes
+
+ no_file_modifications: |
+ No modifications
+
+ hint_in_reference_sheet: |
+ You are accessing the **reference sheet** in **read-only** mode
+ You can view file content, share visibility, and modify holding rights
+ But you cannot modify the structure or submit content
+
+ hint_as_host: |
+ You are in Host mode.
+ In this mode, you are the final interpreter of vault structure and version progression.
+ Your operations will directly affect others' work status, and may not be reversible.
+
+ **Structure Maintenance**
+ 1. You can use `jv align` or `jv move` to edit the reference sheet structure
+ 2. You can use `jv make` to create new reference sheets,
+ or convert an unheld sheet into a reference sheet
+
+ **Status Arbitration**
+ 3. You can use `jv throw` to forcibly discard everyone's edit rights
+ 4. You can use `jv drop` to forcibly discard others' sheets
+
+ **Fact Advancement**
+ 5. You can directly use `jv track` in any sheet to advance file versions
+
+ [[red]]**Please remember**: Host is not administrator mode,
+ but the ultimate bearer of others' structure, history, and interpretive rights.
+ Every operation you perform will become a fact that others must accept.[[/]]
+
+ result:
+ common:
+ not_allowed_in_reference_sheet: |
+ This operation is not allowed in the reference sheet!
+ You cannot make any structural changes to the reference sheet
+ because you are not the maintainer of the reference sheet.
+
+ **Tip**: If you have local moves that need to be aligned,
+ use `jv align moved remote` to revert the moves.
+ authroize_failed: |
+ Authentication failed: %{err}!
+ unknown: |
+ Unknown result!
+
+ direct:
+ redirected: |
+ Successfully redirected to upstream vault `%{upstream}`!
+
+ redirect_failed: |
+ Redirection failed: %{err}!
+
+ directed_and_stained: |
+ Successfully directed to upstream vault `%{upstream}`!
+ Workspace has been **stained**, ready to start working!
+
+ already_stained: |
+ Current workspace is already stained and cannot be directed to other upstream vaults with different identifiers
+ Please use `jv unstain` to remove the stain first
+
+ same_upstream: |
+ Current upstream is the same as given, no need to redirect
+
+ update:
+ success: |
+ Synchronized to latest information!
+
+ fail:
+ sync_cached_sheet_fail:
+ path_already_exist: |
+ Error syncing upstream information to local: Local path %{path} already exists, but a move operation needs to move an item here.
+ Please try moving the item to a different path, then run `jv update` again
+
+ share:
+ share_mapping:
+ success: |
+ Successfully shared visibility of %{file_nums} files to `%{to_sheet}`
+ The holder of that sheet, `%{to_sheet_holder}`, will see your share after performing an update
+
+ target_sheet_not_found: |
+ The sheet `%{to_sheet}` you specified does not exist.
+ You can use `jv sheet list --all` to list all sheets
+
+ target_is_self: |
+ You cannot share your own mapping to yourself
+
+ mapping_not_found: |
+ In your share, a mapping was found that is not recognized by the upstream!
+ Mapping: %{mapping}
+
+ Please confirm your local mapping is aligned with the upstream. You can use `jv align` to check the status
+
+ unknown: |
+ Unknown result!
+
+ merge_shares:
+ success: |
+ Successfully merged share `%{share_id}` into your sheet `%{sheet}`
+ Upstream information has changed, please use `jv update` to sync to the latest information
+
+ success_reject:
+ Rejected share `%{share_id}`
+
+ has_conflicts: |
+ Conflicts occurred when merging structure from share `%{share_id}` into your sheet!
+ Because the share contains mappings that overlap with your sheet!
+ You can use `jv share %{share_id} --skip`
+ or use `jv share %{share_id} --overwrite`
+ to select the merge mode
+
+ edit_not_allowed: |
+ Upstream prevented you from modifying this sheet!
+ Because you do not have edit rights for this sheet
+
+ share_id_not_found: |
+ Cannot find the share `%{share_id}` you provided in the upstream
+ You can use `jv share list` to list all shares after `jv update`
+
+ merge_failed: |
+ Merge failed: %{error}
+
+ sheet:
+ make:
+ success: |
+ Successfully created sheet `%{name}`!
+ Upstream changed, use `jv update` to get the latest information
+
+ success_restore: |
+ Successfully restored sheet `%{name}`!
+ Upstream changed, use `jv update` to get the latest information
+
+ sheet_already_exists: |
+ Sheet `%{name}` already exists and is held by other members!
+
+ sheet_creation_failed: |
+ Sheet creation failed: `%{error}`
+
+ drop:
+ success: |
+ Successfully dropped sheet `%{name}`!
+ Upstream changed, use `jv update` to sync to latest information
+ **Tip**: You can use `jv make %{name}` to restore this sheet
+
+ sheet_in_use: |
+ Sheet `%{name}` is in use, cannot drop!
+ **Tip**: Please use `jv exit` to exit current sheet first
+
+ sheet_not_exists: |
+ Sheet `%{name}` does not exist!
+
+ sheet_drop_failed: |
+ Failed to drop sheet: %{err}
+
+ no_holder: |
+ Sheet `%{name}` has no holder!
+
+ not_owner: |
+ You are not the holder of sheet `%{name}`, cannot drop it!
+
+ change_edit_right:
+ failed:
+ none: |
+ Do nothing!
+
+ success:
+ hold: |
+ Held %{num} files!
+
+ throw: |
+ Threw %{num} files!
+
+ mixed: |
+ Successfully modified edit rights for %{num} files!
+ Held %{num_hold}, Threw %{num_throw}
+
+ track:
+ done: |
+ Tracked %{count} files to latest!
+ **Total**: %{created} Created, %{updated} Updated, %{synced} Synced
+
+ tip_has_skipped: |
+ **Note**: Skipped %{skipped_num} sync tasks
+ %{skipped}
+ Because local modifications exist, the sync task will forcibly overwrite your changes.
+ Please confirm you really want to overwrite these files.
+ Use `jv track . --overwrite` to confirm overwriting them
+
+ structure_changes_not_solved: |
+ There are unresolved local lost and moved items!
+ **Tip**: Use `jv align` to view items that need to be resolved
+
+ create_failed:
+ sheet_not_found: |
+ Sheet `%{name}` does not exist in the upstream vault!
+ This means the sheet has been deleted in the upstream vault, or the sheet does not belong to you
+
+ create_file_on_exist_path: |
+ Failed to track and create file!
+ The file path `%{path}` you want to track already exists in the remote sheet, please use a different path for tracking
+
+ update_failed:
+ verify:
+ sheet_not_found: Sheet %{sheet_name} does not exist!
+ mapping_not_found: |
+ Cannot get mapping for path %{path} from the sheet!
+ This means the file does not exist in the sheet. If it exists locally, it may have been deleted
+ Please use `jv update` to update the workspace and try again
+
+ virtual_file_not_found: |
+ Cannot read virtual file ID %{vfid} from the mapping!
+ This means the mapping exists in the sheet, but the actual file information is missing!
+ Please contact the upstream vault administrator for assistance
+
+ virtual_file_read_failed: |
+ Cannot read metadata for virtual file %{vfid} from the mapping!
+ This means the file exists, but the mapping information is corrupted!
+ Please contact the upstream vault administrator for assistance
+
+ not_held: |
+ You are not holding file %{path}!
+ This means you modified the file without holding it, and the upstream vault blocked your update attempt
+ (Sorry, JustEnoughVCS collaboration is based on serial editing - parallel editing and merging is not allowed)
+
+ **Tip**: If you really need to update this file, you can follow these steps:
+ 1. First move the file outside the workspace and update the correct version here
+ 2. Use `jv info <this_file> --holder` to query the member currently editing it
+ 3. Try to contact them, describe your situation, and wait for them to release editing rights
+ 4. After editing rights are released, use `jv track <this_file>` to get the latest version from that member
+ 5. Manually merge your backed-up version into the latest version
+ 6. Update your modified latest version, then release editing rights
+
+ Finally: You can use `jv here` to check file status in the directory before editing files to ensure you can edit
+
+ version_dismatch: |
+ The base version of the file you edited does not match the version in the upstream vault!
+ Your version is %{version_current} while the upstream version is %{version_latest}, the upstream vault blocked your update
+
+ **Tip**:
+ You can use `jv jump <file> %{version_current}` to jump the version to your local version and update again
+ If you don't want to force override the version, you can backup the file version, update your local version to the latest, then manually merge the files and update
+
+ Finally: You can use `jv here` to check file status in the directory before editing files to ensure you can edit
+
+ update_but_no_description: |
+ There are update items in the files you specified, but no information provided
+ You can use `jv track <file> --desc <description> -v <version>` to update files
+ or use `jv track . --work` to enter the editor environment for updating
+
+ version_already_exist: |
+ The version %{version} of file %{path} you are updating already exists in the upstream vault, please use a different version number!
+
+ move:
+ success: |
+ Successfully modified mapping!
+ Upstream information has changed, please use `jv update` to sync to latest information
+
+ mapping_not_found: |
+ Mapping `%{path}` does not exist!
+ Please check if the path you entered is correct, or use `jv update` to update workspace status
+
+ invalid_move:
+ no_target: |
+ You did not specify a target address for the mapping `%{path}` to move to!
+ Please use `jv move <mapping> <target_mapping>` to move the mapping
+ or use `jv move <mapping> --erase` to erase the mapping
+
+ duplicate_mapping: |
+ Move operation failed because target path `%{path}` already has a mapping!
+ Please change to another path, or erase the existing mapping first
+
+ unknown: |
+ Unknown move operation result!
+
+jvii:
+ hints: |
+ [^S WRITE] [ESC EXIT]
+
+ errors:
+ no_file_path: "Error: No file path provided"
+ editor_error: "Editor error: %{error}"
+ file_error: "File error: %{error}"
+ file_not_found: "File does not exist: %{path}"
+ not_a_file: "Path is not a file: %{path}"
+ init_error: "Failed to initialize editor: %{error}"
+ raw_mode_error: "Failed to enable raw mode: %{error}"
+ alternate_screen_error: "Failed to enter alternate screen: %{error}"
+ save_error: "Failed to save file: %{error}"
+ render_error: "Render error: %{error}"
+
+ messages:
+ file_saved: "File saved successfully"
+ unsaved_changes: "Unsaved changes! Press Ctrl+S to save or Esc again to exit"
+ modified: " *"
+
+ status:
+ lines: " lines"
+
+editor:
+ update_editor: |
+ # You are using editor mode to track and update files
+ # The following files will be updated:
+ # - Adding `#` at the beginning of a line will skip the update,
+ # - Fill in the version after the arrow
+
+ %{modified_lines}
+ ----------------------------------------------------------------
+ # Fill description here, tell others about the changes you made
+ %{description}
+
+ modified_line:
+ header:
+ file_path: |
+ # PATH
+
+ old_version: OLD
+ new_version: NEW
+ content:
+ arrow: ->
diff --git a/resources/locales/zh-CN.yml b/resources/locales/zh-CN.yml
new file mode 100644
index 0000000..50441ff
--- /dev/null
+++ b/resources/locales/zh-CN.yml
@@ -0,0 +1,1292 @@
+# l10n file - zh-CN - 简体中文
+
+# 文本中可使用以下语法
+# 1. **粗体**
+# 2. *斜体*
+# 3. [[red]]颜色[[/]]
+# 4. `文本`(自动着色绿色)
+# 5. <文本>(自动着色青色)
+#
+# 对于颜色的使用,请参考:
+# RED = 紧急情况,错误
+# YELLOW = 警告
+#
+# CYAN = 强调
+# GREEN = 文本内容
+#
+# GRAY = 不强调,忽略
+# GREY = 同上
+#
+# 对于 分析器 结果:
+# YELLOW = 移动操作 = ">" 符号
+# GREEN = 创建操作 = "+" 符号
+# RED = 丢失操作 = "-" 符号
+# MAGENTA = 擦除操作 = "&" 符号
+# CYAN = 修改操作 = "*" 符号
+
+common:
+ confirm: |
+ 是否执行上述操作?(Y/n):
+
+ word:
+ version: 版本
+ cli_version: 命令行版本
+ vcs_version: 核心库版本
+
+jvv:
+ version:
+ header: |
+ JVCS 上游管理工具 - %{version}(核心:[[cyan]]%{vcs_version}[[/]])
+
+ compile_info: |
+ 编译信息:
+ 时间:[[cyan]]%{build_time}[[/]]
+ 目标:[[cyan]]%{build_target}[[/]]
+ 平台:[[cyan]]%{build_platform} - %{build_toolchain}[[/]]
+
+ 核心库:[[cyan]]%{core_build_branch}[[/]] (Commit: %{core_build_commit})
+ 命令行:[[cyan]]%{cli_build_branch}[[/]] (Commit: %{cli_build_commit})
+
+ help: |
+ **JustEnoughVCS 上游库命令**
+ 该程序直接创建、管理、运行 JustEnoughVCS 的上游库
+ **注意**:它能直接操作库的数据,请谨慎使用!*(能力越大,责任越大)*
+
+ **创建库**:
+ create <名称> - 在给定的目录名称中创建库
+ init - 在当前目录中创建库
+
+ **查询**:
+ here - 查询当前库的信息
+
+ **成员管理**:
+ member [list|register|remove]
+ list - 列出成员
+ register <成员名称> - 注册成员
+ remove <成员名称> - 移除成员
+
+ **服务**:
+ service listen - 运行服务端
+
+ 另外,您可以使用 jvv <命令名称> --help 来查询更详细的帮助!
+
+ here: |
+ **显示此处库的信息**
+ **例如**:cd ./您需要查询的库/ && jvv here
+
+ create: |
+ **在给定的目录名称中创建库**
+ **用法**:jvv create **<库名称>**
+
+ **例如**:jvv create MyVault
+ 上述操作会在当前目录创建目录 MyVault,然后在该目录内初始化库
+
+ init: |
+ **在当前目录创建库**
+ **用法**:jvv init
+
+ 该命令会在当前所在的目录创建库,库名称由当前所在目录名称决定
+
+ member: |
+ **成员管理**
+ **用法**:jvv member <register/remove> <成员名称>
+
+ 根据给定的 成员名称,注册(若不存在)或移除(若存在)指定成员
+
+ 推荐使用 "snake_case" 命名格式,因为在配置文件中将以该格式存储
+ **例如**:jvv member register vault_member
+
+ **查询**:jvv member list
+ 该命令的效果和在库的成员目录中执行 jvv here 命令等效
+
+ **注意**:该命令不会影响到库中私钥目录,请手动添加或删除私钥!
+
+ service: |
+ **服务设置相关**
+ **用法**:
+ jvv service listen - 在当前库中启动服务器,以接受客户端连接
+ 您可以使用 --port 来设定监听的端口,使用 --no-log 禁用日志输出
+
+ info:
+ here:
+ analyzing_size: 正在分析库存储大小...
+
+ fail:
+ jvcs: JustEnoughVCS 错误:%{err}
+ no_vault_here: 此处并没有找到库文件
+
+ tokio:
+ fs:
+ create_dir: 无法创建目录 %{dir}
+ create_dir_all: 无法创建目录 %{dir}
+
+ std:
+ current_dir: 无法获得当前目录
+ current_dir_name: 无法获得当前目录的名称
+ set_current_dir: 无法设置到目录 %{dir}
+
+ here:
+ cfg_not_found: |
+ 无法找到库的配置!
+ 若您希望将该目录作为库,请使用 jvv init --help 查看相关帮助
+
+ vault_init_failed: 初始化库失败!
+ size_calc_error: 计算库存储大小失败!
+ member_ids_failed: 获得成员 ID 失败!
+ ref_sheet_not_found: 未找到参考表 `ref`,该参考表理应存在!
+
+ create:
+ not_empty: 禁止的操作!指定的目录已经存在
+
+ init:
+ not_empty: 禁止的操作!该目录不为空
+
+ member:
+ register: 创建成员失败!请检查是否存在同名的成员
+ list: 获取成员 ID 失败!
+
+ service:
+ listen_done: |
+ 服务端被错误强制关闭!
+ 错误信息:%{error}
+
+ wtf_show_log_and_no_log: |
+ 您无法同时选择显示和不显示输出信息!
+
+ “
+ 这让我想起那个古老的寓言:一位卖矛和盾的商人,先是夸口他的盾‘任何矛都刺不穿’,
+ 接着又宣称他的矛 ‘能刺穿任何盾’。当被问到 ’用你的矛刺你的盾会怎样’ 时,他哑口无言。
+ ”
+
+ 您的指令就像这则故事,既要显示日志,又要不显示日志。我该遵循哪个矛盾的命令呢?
+
+ **提示**:使用 `jvv listen --no-log` 或 `jvv listen --show-log` 覆盖默认 Logger 设置运行
+
+ success:
+ here:
+ info: |
+ 找到库 *`%{name}`*!(%{num_mem} 成员,%{num_pk} 位已注册公钥)
+ 其中,管理着 %{num_sheets} 张表,%{num_vf} 个虚拟文件,总共 %{total_size}
+
+ **提示**:若要启动服务端,请运行 jvv service listen
+
+ create: 成功在 `%{name}` 创建库!
+ init: 在此处初始化库成功!
+
+ member:
+ register: 创建成员 `%{member}` 成功!
+ remove: 好的, `%{member}` 已不再存在于库中(或本就不在?)!
+ list:
+ header: |
+ **当前库中有 %{num} 名成员:**
+
+ footer: |
+ **其中,有 %{num} 名成员注册了公钥**
+
+ status_key_registered: (公钥存在)
+
+ service:
+ listen_start: 正在库 `%{path}` 监听来自客户端的连接 ...
+ listen_done: 服务端运行结束!
+
+jv:
+ version:
+ header: |
+ JVCS 命令行工具 - [[cyan]]%{version}[[/]](核心:[[cyan]]%{vcs_version}[[/]])
+
+ compile_info: |
+ 编译信息:
+ 时间:[[cyan]]%{build_time}[[/]]
+ 目标:[[cyan]]%{build_target}[[/]]
+ 平台:[[cyan]]%{build_platform} - %{build_toolchain}[[/]]
+
+ 核心库:[[cyan]]%{core_build_branch}[[/]] (Commit: %{core_build_commit})
+ 命令行:[[cyan]]%{cli_build_branch}[[/]] (Commit: %{cli_build_commit})
+
+ tip:
+ not_workspace: |
+ 当前不在工作区目录,您可使用 `jv create <名称>` 或 `jv init` 创建工作区
+
+ no_account: |
+ 您的计算机没有任何账户注册,可使用 `jv account add <账户名称>` 以创建账户
+
+ no_account_set: |
+ 当前工作区的账户为 `unknown`,这意味着您并未设置账户
+ 使用 `jv as <账户名称>` 来为工作区指定账户
+ 或使用 `jv login <账户名称> <上游地址>` 来关联至上游库
+
+ account_not_exist: |
+ 当前工作区设置的账户 `%{account}` 并未注册至您的计算机
+
+ outdated: |
+ 工作区内信息已经 %{hour} 小时 %{minutes} 分钟没有更新了
+ 请使用 `jv update` 拿到最新信息
+
+ help: |
+ **JustEnoughVCS 本地工作区命令**
+ 该程序将连接至上游库,用以同步、更新本地工作区文件的变化,以供协同创作
+
+ **常用别名**:
+ jv u 下载最新信息,jv t 追踪文件,jv a 对齐文件结构到表,jv in/out 导入或导出文件
+
+ **上游库**:
+ login <账户> <地址> - 设置账户、定向并获得上游信息 [[cyan]][远程][[/]]
+ direct <地址> - 定向到工作区到上游库 [[cyan]][远程][[/]]
+ unstain - 祛色工作区,清除关联
+ update - 同步最新的信息 [[cyan]][远程][[/]]
+
+ **账户**:
+ account [list|as|add|remove|movekey|genpub]
+ list - 列出所有账户
+ as <账户名称> - 设置该工作区使用的账户
+
+ add <账户名称> - 为当前计算机添加账户
+ remove <账户名称> - 从计算机删除账户
+
+ movekey <账户> <私钥> - 移动私钥文件到指定账户
+ genpub <账户> <目录> - 输出公钥文件到指定目录
+
+ **表操作**:
+ sheet [list|use|exit|make|drop|align]
+ list - 列出所有表
+ use - 使用表,并开始工作
+ exit - 退出表,清除当前修改
+ make - 创建新表以供自己使用 [[cyan]][远程][[/]]
+ drop - 抛弃表以供他人使用 [[cyan]][远程][[/]]
+ align - 对齐文件结构到表 [[cyan]][远程][[/]]
+
+ **上下文查询**:
+ here - 显示当前路径的相关信息
+ status - 显示当前表的状态信息
+ info <文件> - 显示单个文件的状态
+
+ **文件传递**:
+ share <文件> <表> <描述> - 分享映射到其他表 [[cyan]][远程][[/]]
+ share <分享ID> - 将分享导入到当前表 [[cyan]][远程][[/]]
+ share <REF表> <文件> - 从其他参考表中导入映射 [[cyan]][远程][[/]]
+
+ **文件操作**:
+ move <文件> <到> - 安全地重命名文件 [[cyan]][远程][[/]]
+ track <文件> - 追踪文件内容到最新版本 [[cyan]][远程][[/]]
+ hold <文件> - 拿取文件,同步版本并获得编辑权 [[cyan]][远程][[/]]
+ throw <文件> - 丢弃文件,同步版本并放弃编辑权 [[cyan]][远程][[/]]
+ jump <文件> <版本> - 将文件的版本跳转至其他版本 [[cyan]][远程][[/]]
+
+ **内建文档**:
+ docs list - 列出所有可用的文档
+ docs <文档名称> - 查看指定文档的内容
+
+ 您可以使用 jv <命令名称> --help 来查询更详细的帮助!
+
+ **提示**:若您需要了解 JustEnoughVCS 的协作范式,请使用 jv docs get_started
+
+ account: |
+ **管理本地账户**
+ **用法**:
+ jv account list - 列出该计算机所有的账户,以及是否注册私钥
+ jv account as <账户名称> - 切换当前账户
+ jv account as host/<账户名称> - 以 Host 模式切换账户
+ jv account add <账户名称> - 为当前计算机添加账户
+ jv account remove <账户名称> - 删除该账户
+ jv account movekey <账户名称> <私钥文件> - 移动私钥到指定账户
+ jv account genpub <账户名称> <输出目录> - 将公钥输出至某个目录,留空为当前
+
+ **提示**:使用 jv account add <账户名称> --keygen 可以自动为您的账户生成 ED25519 私钥
+ **注意**:`--keygen` 和 `genpub` 都需要您的计算机能够直接调用 OpenSSL 命令行工具
+
+ 账户是本地计算机上的身份标识,每个账户可以关联不同的私钥
+ 您需要先设置账户才能与上游库进行交互
+
+ sheet: |
+ **管理表**
+ **用法**:
+ jv sheet list - 列出上游工作区的所有表
+
+ jv sheet use <表名称> - 使用指定的表开始当前工作(不存在则自动创建)
+ jv sheet exit - 退出当前工作
+
+ jv sheet make <表名称> - 为自己创建一张新的表
+ jv sheet drop <表名称> - 将表抛弃,以供其他人使用
+
+ **对齐**:
+ jv sheet align - 查看所有需要对齐的项
+
+ 对于移动项:
+ jv sheet align <项> [local/remote] - 对齐指定移动项
+ jv sheet align moved [local/remote] - 对齐所有移动项
+ jv sheet align moved break - 断开所有移动项
+
+ 对于丢失项:
+ jv sheet align <项> <创建项> - 指向创建项,以确认移动
+ jv sheet align <项> confirm - 确认该文件已丢失
+ jv sheet align lost confirm - 确认所有丢失项
+
+ 对于擦除项:
+ jv sheet align <项> confirm - 确认该文件已擦除
+ jv sheet align erased confirm - 确认所有擦除项
+
+ jv sheet align --work - 使用编辑器模式对齐文件
+
+ 表是 JustEnoughVCS 中的核心概念,每张表代表一块独立的文件结构
+ 您可以在不同的表之间切换工作,或者将文件从一张表导出到另一张表
+
+ create: |
+ **创建指定名称的工作区**
+ **用法**:jv create <工作区名称>
+
+ **例如**:jv create my_workspace
+ 上述操作会在当前目录创建名为 my_workspace 的目录,并在其中初始化工作区
+
+ 工作区是您本地的工作环境,用于与上游库进行文件同步和版本控制
+
+ init: |
+ **在此目录创建工作区**
+ **用法**:jv init
+
+ 该命令会在当前所在的目录创建工作区,工作区名称由当前所在目录名称决定
+
+ 如果当前目录不为空,该操作将会失败,请确保在空目录中执行此命令
+
+ here: |
+ **查询此处目录信息**
+ **用法**:jv here
+
+ 显示当前目录文件的详细信息,包括:
+ - 文件名称、大小、版本号
+ - 文件当前的持有人
+ - 文件最新版本的更新信息
+
+ **提示**:使用 `jv here --desc` 查看本地文件最后一次的更新信息
+
+ status: |
+ **显示当前表的状态信息**
+ **用法**:jv status
+
+ 显示当前表的文件修改状态:
+ - 新增、删除的文件
+ - 移动的文件
+ - 修改的文件
+
+ 这是了解当前表文件状态的快速方式
+
+ info: |
+ **显示文件详细信息**
+ **用法**:jv info <文件路径>
+ 使用 `--full` 查看完整的更新记录
+
+ 显示指定文件的详细信息,包括:
+ - 文件的历史变更
+ - 文件在 `ref` 中的位置
+ - 文件在 `ref` 中的版本
+
+ track: |
+ **追踪文件至最新事实**
+ **用法**:jv track <文件路径>
+
+ 它不是上传,也不是下载,而是对 [[cyan]]“哪一个版本应被视为事实”[[/]] 的结果声明。
+
+ **创建**
+ 当工作区存在未被追踪的文件时,该文件尚不存在于公认事实中
+ 执行追踪将创建该文件的事实版本,写入您的表,并授予您编辑权
+ 此时,您是 **该事实的撰写者**
+
+ **更新**
+ 当您持有文件,且基于当前最新事实进行编辑时,
+ 您工作区中的版本将被视为新的最新事实
+ 执行追踪将 **更新该事实到上游**
+
+ **同步**
+ 当您不持有文件、基于过期事实编辑,或本地不存在该文件时,
+ 您的修改不具备事实效力,一切以上游最新版为准
+ 执行追踪将 **同步上游事实到本地**
+ 若需覆盖本地修改,必须显式指定 `--overwrite`
+
+ hold: |
+ **拿取文件:从上游库获得该文件的编辑权**
+ **用法**:jv hold <文件路径>
+
+ **例如**:jv hold src/lib.rs
+ 当您需要编辑某个文件时,必须先持有该文件的编辑权
+ 持有文件后,其他协作者将无法同时编辑该文件,避免冲突
+
+ 编辑完成后,请记得追踪文件以保存更改
+
+ throw: |
+ **丢弃文件:从上游库放弃该文件的编辑权**
+ **用法**:jv throw <文件路径>
+
+ **例如**:jv throw src/config.rs
+ 当您不再需要编辑某个文件时,可以丢弃该文件的编辑权
+ 丢弃后,其他协作者就可以持有并编辑该文件
+
+ 如果您对文件进行了更改但尚未追踪,丢弃操作会丢失这些更改
+
+ move: |
+ **移动映射**
+ **用法**:
+ jv move <映射> <目标映射> - 修改上游映射
+ jv move <映射> --erase - 擦除上游映射
+
+ **例如**:
+ jv move draft/character.png done/character.png - 移动映射
+ jv move character.png player.png - 重命名
+ jv move . ../publish/ - 批量移动
+ jv move temp/ --erase - 擦除映射
+
+ 移动映射操作会修改上游的映射,并同步修改本地结构(使用 `--only-remote` 取消同步修改)
+ 在移动完成后,通常需要 `jv align moved remote` 将本地结构同步至上游
+
+ share: |
+ **分享文件的可见性**
+ **用法**:
+ jv share <文件> <表> <描述> - 分享映射到其他表
+ jv share <分享ID> - 将分享导入到当前表
+
+ jv share list - 查看传入的分享
+ jv share see - 查看分享的详情
+
+ **提示**:import 命令可使用如下参数
+ --safe - 安全导入,拒绝所有冲突,这是默认的方案
+ --skip - 跳过所有冲突项
+ --overwrite - 强制覆盖冲突的映射,危险的操作
+ --reject - 拒绝该分享
+
+ **分享** 是将文件可见性交由其他人的最简途径
+
+ direct: |
+ **定向到指定上游库,并染色该工作区**
+ **用法**:jv direct <上游库地址>
+
+ **例如**:jv direct your_vault.org
+ 该操作会将当前工作区连接到指定的上游库,并为工作区添加染色标识
+
+ 染色后,该工作区将只能与指定标识的库进行交互,确保数据一致性
+
+ unstain: |
+ **为工作区祛色**
+ **用法**:jv unstain
+
+ **危险操作**:该操作会移除工作区的染色标识,此后该工作区将与上游库断开连接
+
+ 祛色后,工作区将不再与任何特定库关联,可以重新连接到其他库
+ 但请注意,这可能会导致数据同步问题,请谨慎使用
+
+ update: |
+ **从上游库下载最新的信息**
+ **用法**:jv update
+
+ 该操作会从上游库同步最新的文件状态、表信息和成员信息
+
+ 建议在开始工作前先执行更新操作,确保您拥有最新的工作环境
+
+ docs: |
+ **查询内建文档**
+ **用法**:
+ jv docs list - 列出所有可用的文档
+ jv docs <文档名称> - 查看指定文档的内容
+ jv docs <文档名称> -d - 直接打印内容
+
+ **例如**:
+ jv docs get_started
+ jv docs collaboration -d
+
+ 内建文档包含 JustEnoughVCS 的使用指南、协作范式和最佳实践
+
+ confirm:
+ login: |
+ 您正在以 %{account} 身份登陆上游库 %{upstream},请确认
+
+ unstain: |
+ 此操作将会断开当前工作区与上游库 `%{upstream}` 的关联
+ 若重新连接至标识不匹配的库,会导致严重的问题,请谨慎操作!
+
+ direct: |
+ 是否需要将当前本地工作区定向到上游库 %{upstream}?
+
+ sheet:
+ make:
+ restore: |
+ 似乎 `%{sheet_name}` 是一张无人认领的表,是否拿到它的所有权?
+ 如果您不想拿到该表,请使用别的名称建立表
+
+ drop: |
+ 是否要放弃表 `%{sheet_name}` 的所有权,此后,您将无法在表中工作!
+
+ track:
+ prepare: |
+ 您正在准备追踪 %{file_counts} 个文件的变更,这些文件将遵循如下规则:
+ 1. 新文件,将被上传并加入您的表中管理
+ 2. 已持有文件,除非本地不存在或版本不匹配,否则永远执行上传操作
+ 3. 未持有文件,除非冻结版本,否则永远执行下载和更新最新版本
+
+ **当前**:
+ **下行**:%{old_files} 个待同步,%{download_files} 个待下载
+ **上行**:%{new_files} 个待追踪,%{modified_files} 个待更新
+
+ fail:
+ std:
+ current_dir: 无法获得当前目录
+ current_dir_name: 无法获得当前目录的名称
+ set_current_dir: 无法设置到目录 %{dir}
+
+ not_root_dir: 该命令需要在工作区根目录运行!
+
+ move:
+ rename_failed: |
+ **警告**:移动本地文件 `%{from}` 至 `%{to}` 失败:%{error}
+
+ has_rename_failed: |
+ **提示**:因为已跳过文件的移动,所以会产生偏差,
+ 在可移动文件后,请务必使用 `jv align` 解决偏差
+
+ no_target_dir: |
+ 您未指定需要移动的目录!
+ 请使用 `jv move <映射> <目标映射名>` 的方式移动映射
+ 或使用 `jv move <映射> --erase` 将映射擦除
+
+ count_doesnt_match: |
+ 您指定了多个映射,但目标地址为单个映射
+ 请使用 `jv move 多个映射 目录/` 来移动多个映射
+ 或使用 `jv move 单个映射 映射名称` 来重命名该映射
+
+ format_path: |
+ 格式化目录 %{path} 失败:%{error}.
+
+ path_not_found: |
+ 您给出的目录 `%{path}` 无法找到!
+
+ parse:
+ parser_failed: |
+ 错误的命令输入!
+ 请使用 `jv -h` 查看帮助
+
+ str_to_sockaddr: |
+ 错误:%{err}
+ 无法将 *`%{str}`* 识别为有效地址,请检查您的输入!
+
+ from_core: |
+ **错误**:`%{err}`(该错误来自核心调用)
+
+ share:
+ share_id_not_exist: |
+ 您给出的分享 `%{id}` 不存在
+
+ invalid_target_sheet: |
+ 您所给出的表 `%{sheet}` 在您的上下文中并不存在
+ 若您确定它存在,请使用 `jv update` 更新工作区
+
+ sheet:
+ align:
+ no_direction: |
+ 无法确认对齐的方式!
+
+ align_item_not_found: |
+ 无法找到该对齐项!
+
+ unknown_moved_direction: |
+ 未知的对齐方向!
+ 请使用 `local` 或 `remote` 来表示路径基于本地位置或远程位置
+
+ target_exists: |
+ 无法对齐本地文件 `%{local}` 至远程地址 `%{remote}`
+ 因为此处已存在其他文件,请移走该文件,并再次对齐!
+
+ move_failed: |
+ 移动本地文件失败:%{err}
+ **提示**:请检查文件权限或路径是否正确
+
+ remove_mapping_failed: |
+ 移除本地映射失败:%{err}
+
+ delete_mapping_failed: |
+ 从本地表中删除映射失败:%{err}
+ **提示**:请检查本地表配置文件
+
+ no_lost_matched: |
+ 未找到匹配的丢失项!
+
+ no_created_matched: |
+ 未找到匹配的创建项!
+
+ too_many_lost: |
+ 匹配到多个丢失项!
+
+ too_many_created: |
+ 匹配到多个创建项!
+
+ calc_hash_failed: |
+ 无法计算文件 `%{file}` 的哈希值
+
+ mapping_not_found: |
+ 未找到本地映射 `%{mapping}`!
+
+ account:
+ no_user_dir: 无法找到用户目录!
+ add: 添加账户 `%{account}` 失败,请检查账户是否已存在。
+ remove: 删除账户 `%{account}` 失败,请检查账户是否存在。
+ list: 获取账户列表失败!
+ move_key: 将该私钥移动至账户目录失败!
+ not_found: 无法找到账户 `%{account}`!
+ no_key_registered: 账户 `%{account}` 没有注册私钥!
+ as: 设置当前账户失败,请确保当前表已退出
+ keygen: 生成私钥失败!请尝试手动生成私钥
+ keygen_exec: |
+ 运行 OpenSSL 失败!
+ 请检查您的计算机中是否安装 OpenSSL
+ generate_pub_key: |
+ 生成公钥失败!
+ 请检查 OpenSSL 是否安装,或手动生成公钥
+
+ init_create_dir_not_empty: |
+ 当前目录并不是空的!
+ 若您确实确定在此处创建,请使用 --force 来强制执行!
+
+ create: 创建本地工作区失败!
+ init: 在此处创建本地工作区失败!
+ get_current_dir: 无法获得当前目录!
+
+ workspace_not_found: |
+ 无法找到本地工作区!请在本地工作区内使用该命令
+ 若您希望将该目录作为本地工作区,请使用 jv init
+
+ read_cfg: 无法读取本地工作区的配置文件!
+ write_cfg: |
+ 无法将修改写入本地工作区的配置文件!
+ 这一般是磁盘问题,以下是错误信息:
+ %{error}
+
+ cfg_not_found:
+ local_config: |
+ 无法找到或读取本地工作区信息!
+ 请确认您是否在工作区目录下
+
+ latest_info: |
+ 无法找到或读取 账户 `%{account}` 视角下的最新上游信息!
+ 请使用 `jv update` 更新工作区!
+
+ latest_file_data: |
+ 无法找到或读取 账户 `%{account}` 视角下的最新文件信息!
+ 请使用 `jv update` 更新工作区!
+
+ local_sheet: |
+ 无法读取或找到本地映射 `%{account}/%{sheet}`!
+
+ cached_sheet: |
+ 无法读取或找到表 `%{sheet}` 的缓存信息
+ 请使用 `jv update` 更新工作区!
+
+ create_socket: 无法创建 TCP 套接字!
+ connection_failed: 无法连接至目标服务器!
+
+ unstain: |
+ 当前工作区并未被染色,无需祛色
+
+ not_stained: |
+ 当前工作区并未被染色,无法执行下一步操作!
+ **提示**:请先使用 `jv direct <上游地址>` 定向到上游库
+
+ change_edit_right:
+ no_selection: 您未选中任何文件!
+ check_failed: |
+ 在您选中的 %{num} 个文件中,存在预检查失败的项!
+ 在命令后添加 `--details` 查看具体事项
+
+ **提示**:
+ 添加 `--skip-failed` 可跳过当前检查失败的项进行操作
+ 添加 `--force` 可无视检查进行操作 (不安全的操作)
+
+ check_failed_details: |
+ 在您选中的 %{num} 个文件中,有 %{failed} 个文件预先检查未通过!
+ %{items}
+
+ check_fail_item: |
+ %{path}(%{reason})
+
+ check_fail_reason:
+ not_found_in_sheet: 表中不存在
+ not_a_tracked_file: 文件未被跟踪
+ base_version_unmatch: 基准版本不匹配
+ not_holder: 期望丢弃,但不是持有者
+ has_holder: 期望持有,但被 %{holder} 持有
+ already_held: 文件已持有
+ already_modified: 文件已修改
+
+ docs:
+ not_found: 文档 `%{docs_name}` 未找到!
+ no_doc_dir: |
+ 无法找到暂存目录!
+ **提示**:您也可以使用 `jv docs %{docs_name} -d` 直接打印
+ open_editor: |
+ 无法打开文本编辑器预览:`%{err}`!
+ **提示**:您也可以使用 `jv docs %{docs_name} -d` 直接打印
+
+ track:
+ no_selection: |
+ 您未在此次操作中选中任何文件!
+
+ **提示**:如果您输入了内容依旧如此,
+ 可能因为您传入的目录在工作区目录以外,工作区之外的路径会被忽略
+
+ status:
+ no_sheet_in_use: |
+ 您并没有使用任何一张表!无法在此情况下分析工作区状态
+ **提示**:您可以使用 `jv use <表名>` 选择并使用一张表
+
+ analyze: |
+ 分析本地工作区的状态失败!
+
+ use:
+ sheet_not_exists: |
+ 表 `%{name}` 不存在!
+ **提示**:请使用 `jv update` 更新工作区状态
+
+ directory_not_empty: |
+ 在没有使用表的时候,工作区不应该存在任何文件!
+ **提示**:请保证工作区是干净的,再使用 `jv use <表名>` 选择并使用一张表
+
+ success:
+ account:
+ as: 成功将此工作区的账户切换至 `%{account}`
+ as_host: |
+ 切换到账户:`host/%{account}`
+ 若 Host 身份受上游库认可,便可控制所有的表、映射
+ 请牢记:"*能力越大,责任越大*"
+ add: 成功添加账户 `%{account}`!
+ remove: 成功删除账户 `%{account}`!
+ list:
+ header: |
+ **当前计算机上有 %{num} 个账户:**
+
+ status_has_key: (已注册私钥)
+ move_key: 成功将该私钥移动至账户目录!
+ generate_pub_key: 成功在 `%{export}` 生成公钥,请将它交给上游库管理员!
+ create: 成功创建本地工作区!
+ init: 成功在此处创建工作区!
+ unstain: |
+ 成功祛色!
+ 当前工作区不再属于任何上游库,请工作前定向至新的上游库
+ **提示**:使用 `jv direct <上游库地址>` 重新定向至新的上游库
+
+ sheet:
+ list:
+ your_sheet: |
+ **您可见的表**:
+ your_sheet_item: |
+ %{number}. %{name}
+ your_sheet_item_use: |
+ %{number}. %{name} [[green]][当前][[/]]
+ reference_sheet_suffix: |
+ [参考]
+ other_sheet: |
+ **其他表**:
+ other_sheet_item: |
+ %{number}. %{name}(属于 `%{holder}`)
+ other_sheet_item_no_holder: |
+ %{number}. %{name}(无人认领)
+ tip_has_sheet: |
+ 您不在任何一张表,可使用 `jv use <表名>` 使用一张表
+ tip_no_sheet: |
+ **没有可以编辑的表!**
+ 您没有任何一张表,可使用 `jv make <表名>` 创建一张新表
+
+ align:
+ list: |
+ 您的本地工作区有如下变更待处理:
+ %{tasks}
+
+ task_name: 项名称
+ local_path: 本地文件
+ remote_path: 远程文件
+
+ no_changes: |
+ 很好,本地工作区未产生结构偏差,无需对齐!
+
+ suggestion_1: |
+ **建议**:确认 [[magenta]]擦除项[[/]]
+ **例如**:使用 `jv align %{example_erased} confirm` 来确认该 [[magenta]]擦除项[[/]]!
+
+ [[yellow]]**注意**:确认后,本地映射将被擦除,同时,该位置的文件将被移走[[/]]
+
+ suggestion_2: |
+ **建议**:确认 [[red]]丢失项[[/]]
+ 无法确认文件丢失意图为 [[red]]删除[[/]] 或 [[yellow]]移动[[/]]!
+ **例如**:使用 `jv align %{example_lost} <行为>` 来处理该 [[red]]丢失项[[/]]
+
+ **确认删除**:填写 `confirm` 来确认您的操作是一次 [[red]]删除[[/]]
+ **声明移动**:填写 [[green]]创建项[[/]] 与其形成 [[yellow]]移动[[/]] 关系
+
+ suggestion_3: |
+ **建议**:对齐 [[yellow]]移动项[[/]],确认移动基于 本地 或 远程
+ **例如**:使用 `jv align moved [local|remote]` 批量对齐
+ 或使用 `jv align %{example_moved} [local|remote]` 精确对齐移动
+ 若该移动并非您期望的,
+ 使用 `jv align %{example_moved} break` 断开它们
+
+ **对齐至本地**:联网,修改上游映射至本地位置
+ **对齐至远程**:脱机,将本地文件移至上游位置
+
+ docs:
+ list:
+ header: |
+ 您可以查阅以下文档:
+
+ item: |
+ %{num}. %{docs_name}
+
+ footer: |
+ **提示**:使用 `jv docs <文档名称>` 查看文档,使用 -d 直接输出
+
+ here:
+ items:
+ name: 名称
+ version: 版本
+ holder: 持有者
+ size: 大小
+ editing: 状态
+ description: 描述
+
+ path_info: |
+ 所在:%{upstream}/%{account}/%{sheet_name}/%{path}(%{minutes} 分钟前)
+
+ ghost_directory_item_info: |
+ ? %{directory_name}/
+
+ ghost_file_item_info: |
+ ? %{file_name}
+
+ directory_item_info: |
+ %{directory_name}/
+
+ file_item_info: |
+ %{file_name}
+
+ append_info:
+ holder:
+ yourself: |
+ 你
+
+ others: |
+ %{holder}
+
+ size: |
+ %{size}
+
+ name: |
+ %{name}
+
+ version:
+ unmatch: |
+ %{remote_version}*
+
+ match: |
+ %{version}
+
+ editing:
+ cant_edit: |
+ 只读
+
+ cant_edit_but_modified: |
+ 只读*
+
+ can_edit: |
+ 读写
+
+ modified: |
+ 读写*
+
+ not_local: |
+ 远程
+
+ description: |
+ @%{creator}: %{description}
+
+ count_info: |
+ %{dir_count} 目录、%{file_count} 文件,共计 %{size}
+
+ info:
+ oneline:
+ table_headers:
+ prefix: _
+ version: 版本
+ creator: 作者
+ description: 描述
+ description_current: 正在编辑中 ...
+
+ share:
+ list:
+ headers:
+ id: 分享ID
+ sharer: 分享者
+ description: 描述
+ file_count: 文件数
+ footer: 使用 `jv share see <ID>` 查看分享的具体内容
+
+ content: |
+ %{share_id}
+ 来自: %{sharer}
+ %{description}
+ 映射:
+ %{mappings}
+
+ status:
+ struct_changes_display: |
+ 表 %{sheet_name} 的状态基于 %{h} 小时 %{m} 分钟 %{s} 秒前
+
+ 您的工作区处于结构变更状态:
+ %{moved_items}%{lost_items}%{erased_items}%{created_items}
+ **提示**:使用 `jv align` 对齐移动、丢失和擦除变更,
+ 使用 `jv track` 追踪创建变更
+
+ content_modifies_display: |
+ 表 %{sheet_name} 的状态基于 %{h} 小时 %{m} 分钟 %{s} 秒前
+
+ 您的工作区处于内容变更状态:
+ %{modified_items}
+
+ **提示**:使用 `jv track` 追踪您的变更
+
+ no_changes: |
+ 所在表 %{sheet_name},状态基于 %{h} 小时 %{m} 分钟 %{s} 秒前
+ 您的工作区与上游保持同步,可基于该状态进行结构、内容的编辑!
+
+ no_changes_in_reference_sheet: |
+ 所在表 %{sheet_name},状态基于 %{h} 小时 %{m} 分钟 %{s} 秒前
+
+ created_item: |
+ + 创建: %{path}
+
+ lost_item: |
+ - 丢失: %{path}
+
+ moved_item: |
+ \> 移动:远程 %{from}
+ 本地 %{to}
+
+ erased_item: |
+ & 擦除: %{path}
+
+ modified_item: |
+ \* 修改: %{path}
+
+ invalid_modified_item: |
+ x 修改: %{path}(%{reason})
+
+ invalid_modified_reasons:
+ not_holder: 不持有但被修改
+ base_version_mismatch: 基于的编辑版本不匹配
+
+ no_structure_changes: |
+ 无文件结构变更
+
+ no_file_modifications: |
+ 本地无内容修改
+
+ hint_in_reference_sheet: |
+ 您正在以**只读模式**访问**参考表**
+ 您可以查看文件内容、分享可见性、修改持有权
+ 但无法修改结构或提交内容
+
+ hint_as_host: |
+ [[yellow]]您正处于 Host 模式。[[/]]
+ 在此模式下,您将作为仓库结构与版本推进的最终解释者,
+ 您的操作将直接影响他人的工作状态,且不一定可逆。
+
+ **结构维护**
+ 1. 您可以使用 `jv align` 或 `jv move` 编辑参考表结构
+ 2. 您可以使用 `jv make` 创建新的参考表,
+ 或将某张无人持有的表转换为参考表
+
+ **状态裁决**
+ 3. 您可以使用 `jv throw` 强制收回所有人的编辑权
+ 4. 您可以使用 `jv drop` 强制丢弃其他人的表
+
+ **事实推进**
+ 5. 您可以在任何表中使用 `jv track` 推进文件版本
+
+ [[red]]**请牢记**:Host 并非 管理员模式,
+ 而是对他人结构、历史与解释权的最终承担者。
+ 您的每一次操作,都会成为他人必须接受的事实。[[/]]
+
+ result:
+ common:
+ not_allowed_in_reference_sheet: |
+ 不允许在参考表中执行此操作!
+ 您不能对参考表进行任何结构更改,因为您并非参考表的维护者
+
+ **提示**:若您在本地产生了移动需要对齐,
+ 使用 `jv align moved remote` 还原移动
+ authroize_failed: 身份认证失败:%{err}!
+ unknown: |
+ 未知结果!
+
+ direct:
+ redirected: |
+ 成功重定向到上游库 `%{upstream}`!
+
+ redirect_failed: |
+ 重定向失败:%{err}!
+
+ directed_and_stained: |
+ 成功定向到上游库 `%{upstream}`!
+ 工作区已被 **染色**,现可开始工作!
+
+ already_stained: |
+ 当前工作区已被染色,无法定向其他不同标识的上游库
+ 请先使用 jv unstain 祛色
+
+ same_upstream: |
+ 当前上游和给出的一致,无需重定向
+
+ update:
+ success: |
+ 已同步至最新信息!
+
+ fail:
+ sync_cached_sheet_fail:
+ path_already_exist: |
+ 在同步上游信息至本地时发生了错误:本地已存在 %{path},但是某个移动项需要移动到此处。
+ 请尝试移动该项至其他路径,再重新输入 `jv update`
+
+ share:
+ share_mapping:
+ success: |
+ 成功将 %{file_nums} 个文件的可见性分享至 `%{to_sheet}`
+ 该表的持有者 `%{to_sheet_holder}` 在执行更新后即可看到您的分享
+
+ target_sheet_not_found: |
+ 您所指定的 `%{to_sheet}` 不存在,
+ 您可以使用 `jv sheet list --all` 列出所有的表
+
+ target_is_self: |
+ 您不能将自己的映射分享给自己
+
+ mapping_not_found: |
+ 在您的分享中,找到并未被上游所承认的映射!
+ 映射:%{mapping}
+
+ 请确认您的本地映射和上游是否对齐,您可以使用 `jv align` 查看状态
+
+ unknown: |
+ 未知的结果!
+
+ merge_shares:
+ success: |
+ 成功将分享 `%{share_id}` 合入您的表 `%{sheet}`
+ 上游信息已变更,请使用 `jv update` 同步至最新信息
+
+ success_reject:
+ 已拒绝接受分享 `%{share_id}`
+
+ has_conflicts: |
+ 从分享 `%{share_id}` 合并结构到您的表时发生冲突!
+ 因为分享中存在和您表中重合的映射!
+ 您可以使用 `jv share %{share_id} --skip`
+ 或使用 `jv share %{share_id} --overwrite`
+ 来选择合并模式
+
+ edit_not_allowed: |
+ 上游阻止了您修改此表!
+ 因为您没有该表的编辑权
+
+ share_id_not_found: |
+ 在上游中无法找到您给出的分享 `%{share_id}`
+ 您可以在 `jv update` 后使用
+ `jv share list` 来列出所有的分享
+
+ merge_failed: |
+ 合并失败:%{error}
+
+ sheet:
+ make:
+ success: |
+ 成功创建表 `%{name}`!
+ 上游信息已变更,请使用 `jv update` 同步至最新信息
+
+ success_restore: |
+ 成功恢复表 `%{name}` 的所有权!
+ 上游信息已变更,请使用 `jv update` 同步至最新信息
+
+ sheet_already_exists: |
+ 表 `%{name}` 已存在,并由其他成员所持有!
+
+ sheet_creation_failed: |
+ 表创建失败:`%{err}`
+
+ drop:
+ success: |
+ 成功放弃表 `%{name}` 的所有权!
+ 上游信息已变更,请使用 `jv update` 同步至最新信息
+ **提示**:您可以使用 `jv make %{name}` 赎回该表
+
+ sheet_in_use: |
+ 表 `%{name}` 正在被使用中,无法放弃!
+ **提示**:请先 `jv exit` 退出当前表,再尝试该操作!
+
+ sheet_not_exists: |
+ 表 `%{name}` 不存在!
+
+ sheet_drop_failed: |
+ 放弃表失败:%{err}
+
+ no_holder: |
+ 表 `%{name}` 没有持有人!
+
+ not_owner: |
+ 您不是表 `%{name}` 的持有人,无法放弃该表!
+
+ change_edit_right:
+ failed:
+ none: |
+ 没有处理任何文件!
+
+ success:
+ hold: |
+ 成功持有 %{num} 个文件!
+
+ throw: |
+ 成功丢弃 %{num} 个文件!
+
+ mixed: |
+ 成功修改 %{num} 个文件的编辑权!
+ 持有 %{num_hold},丢弃 %{num_throw}
+
+ track:
+ done: |
+ 追踪 %{count} 个文件至最新!
+ 其中,创建 %{created},更新 %{updated},同步 %{synced}
+
+ tip_has_skipped: |
+ **注意**:忽略 %{skipped_num} 个同步任务
+ %{skipped}
+ 因本地存在修改,同步任务会强制覆盖您的修改,请确认您确实要覆盖这些文件
+ 使用 `jv track . --overwrite` 确认覆盖它们
+
+ structure_changes_not_solved: |
+ 本地存在丢失项和移动项未解决!
+ **提示**:使用 `jv align` 查看需要解决的项
+
+ create_failed:
+ sheet_not_found: |
+ 在上游库中不存在表 `%{name}`!
+ 这意味着该表在上游库中已被删除,或该表不属于您
+
+ create_file_on_exist_path: |
+ 创建文件失败!
+ 您要创建的文件路径 `%{path}` 在远程表中已存在,请更换至其他路径创建
+
+ update_failed:
+ verify:
+ sheet_not_found: 表 %{sheet_name} 不存在!
+ mapping_not_found: |
+ 无法从表中获得路径 %{path} 的映射!
+ 这说明文件在表中不存在,如果您本地存在该路径,可能说明文件被删除了
+ 请使用 `jv update` 更新工作区后再尝试
+
+ virtual_file_not_found: |
+ 无法从映射中读取虚拟文件ID %{vfid}
+ 这说明映射存在于表中,但实际的文件信息丢失!
+ 请联系上游库管理员了解情况
+
+ virtual_file_read_failed: |
+ 无法从映射中读取虚拟文件 %{vfid} 的元数据
+ 这说明虽然文件存在,但是映射信息损坏了!
+ 请联系上游库管理员了解情况
+
+ not_held: |
+ 您并未持有文件 %{path}!
+ 这说明,您在未持有文件的时修改了它,并在尝试更新时被上游库阻拦
+ (非常抱歉,JustEnoughVCS 协作基于串行编辑,并行编辑后合并是不允许的)
+
+ **提示**:如果您确实需要更新该文件,可以参考以下步骤:
+ 1. 首先将文件移动到工作区以外的地方,并重新在此处更新正确的版本
+ 2. 使用 `jv info <该文件> --holder` 查询正在编辑的成员
+ 3. 尝试联系他,并描述您的情况,并等待该成员释放编辑权
+ 4. 释放编辑权后,使用 `jv track <该文件>` 拿到该成员的最新版本
+ 5. 手动地将您备份的版本合并至最新版本中
+ 6. 将您修改的最新版更新,然后释放编辑权
+
+ 最后:您可以在编辑文件前,使用 `jv here` 查看所在目录的文件状态,以确保自己可以编辑
+
+ version_dismatch: |
+ 您编辑的文件基准版本和上游库中的版本不匹配!
+ 您的版本是 %{version_current} 而上游版本是 %{version_latest},上游库禁止了您的更新
+
+ **提示**:
+ 您可以使用 `jv jump <文件> %{version_current}` 将版本跳转至您的本地版本,并再次更新
+ 若您不期望强制覆盖版本,可以选择将文件版本备份,并更新本地版本至最新后,再手动地合并文件并更新
+
+ 最后:您可以在编辑文件前,使用 `jv here` 查看所在目录的文件状态,以确保自己可以编辑
+
+ update_but_no_description: |
+ 您指定的文件中存在更新项,但是您并未指定更新信息
+ 使用 `jv track <文件> --desc <描述> -v <版本>` 更新文件
+ 或使用 `jv track . --work` 进入编辑器环境更新
+
+ version_already_exist: |
+ 您正在更新的文件 %{path} 的版本 %{version} 在上游库中已存在,请使用其他版本号!
+
+ move:
+ success: |
+ 成功修改映射!
+ 上游信息已变更,请使用 `jv update` 同步至最新信息
+
+ mapping_not_found: |
+ 映射 `%{path}` 不存在!
+ 请检查您输入的路径是否正确,或使用 `jv update` 更新工作区状态
+
+ invalid_move:
+ no_target: |
+ 您未指定需要移动的映射 `%{path}` 的目标地址!
+ 请使用 `jv move <映射> <目标映射名>` 的方式移动映射
+ 或使用 `jv move <映射> --erase` 将映射擦除
+
+ duplicate_mapping: |
+ 移动操作失败,因为目标路径 `%{path}` 已存在映射!
+ 请更换至其他路径,或先擦除已存在的映射
+
+ unknown: |
+ 未知的移动操作结果!
+
+jvii:
+ hints: |
+ [^S 保存] [ESC 退出]
+
+ errors:
+ no_file_path: "错误:未提供文件路径"
+ editor_error: "编辑器错误:%{error}"
+ file_error: "文件错误:%{error}"
+ file_not_found: "文件不存在:%{path}"
+ not_a_file: "路径不是文件:%{path}"
+ init_error: "初始化编辑器失败:%{error}"
+ raw_mode_error: "启用原始模式失败:%{error}"
+ alternate_screen_error: "进入备用屏幕失败:%{error}"
+ save_error: "保存文件失败:%{error}"
+ render_error: "渲染错误:%{error}"
+
+ messages:
+ file_saved: "文件保存成功"
+ unsaved_changes: "有未保存的修改!按 Ctrl+S 保存或再次按 Esc 退出"
+ modified: " *"
+
+ status:
+ lines: " 行"
+
+editor:
+ update_editor: |
+ # 您正在使用编辑器模式追踪和更新文件
+ # 以下文件将被更新:(行首添加 `#` 视为放弃更新,尾部箭头后请填写版本)
+
+ %{modified_lines}
+ ----------------------------------------------------------------------
+ # 此处填写更新描述,告诉其他成员您做了什么
+ %{description}
+
+ modified_line:
+ header:
+ file_path: |
+ # 文件
+
+ old_version: 旧
+ new_version: 新
+ content:
+ arrow: ->