diff --git a/src/commands/callback.ts b/src/commands/callback.ts index fb2c2b6b..48324f3e 100644 --- a/src/commands/callback.ts +++ b/src/commands/callback.ts @@ -59,6 +59,7 @@ export async function deleteCommandsOnRepo(plugin: GithubPublisher, repo: Reposi publisher.octokit, branchName, getRepoFrontmatter(plugin.settings, repo) as RepoFrontmatter, + repo ); } return true; diff --git a/src/commands/commands.ts b/src/commands/commands.ts index 88b2b0aa..1c8c73d4 100644 --- a/src/commands/commands.ts +++ b/src/commands/commands.ts @@ -83,7 +83,8 @@ export async function shareAllMarkedNotes( octokit, branchName, PublisherManager, - repoFrontmatter + repoFrontmatter, + shortRepo ); if ( @@ -143,7 +144,8 @@ export async function deleteUnsharedDeletedNotes( settings: GitHubPublisherSettings, octokit: Octokit, branchName: string, - repoFrontmatter: RepoFrontmatter + repoFrontmatter: RepoFrontmatter, + otherRepo: Repository | null ) { try { new Notice( @@ -158,7 +160,8 @@ export async function deleteUnsharedDeletedNotes( octokit, branchName, PublisherManager, - repoFrontmatter + repoFrontmatter, + otherRepo ); await PublisherManager.updateRepository(branchName, repoFrontmatter); if (settings.plugin.displayModalRepoEditing) new ListChangedFiles(app, deleted).open(); @@ -279,7 +282,7 @@ export async function shareNewNote( ) { const settings = plugin.settings; new Notice(i18next.t("informations.scanningRepo") ); - const sharedFilesWithPaths = PublisherManager.getAllFileWithPath(); + const sharedFilesWithPaths = PublisherManager.getAllFileWithPath(shortRepo); // Get all file in the repo before the creation of the branch const githubSharedNotes = await PublisherManager.getAllFileFromRepo( repoFrontmatter.branch, // we need to take the master branch because the branch to create doesn't exist yet @@ -340,7 +343,7 @@ export async function shareAllEditedNotes( ) { const settings = plugin.settings; new Notice(i18next.t("informations.scanningRepo") ); - const sharedFilesWithPaths = PublisherManager.getAllFileWithPath(); + const sharedFilesWithPaths = PublisherManager.getAllFileWithPath(shortRepo); const githubSharedNotes = await PublisherManager.getAllFileFromRepo( repoFrontmatter.branch, octokit, @@ -407,7 +410,7 @@ export async function shareOnlyEdited( ) { const settings = plugin.settings; new Notice(i18next.t("informations.scanningRepo") ); - const sharedFilesWithPaths = PublisherManager.getAllFileWithPath(); + const sharedFilesWithPaths = PublisherManager.getAllFileWithPath(shortRepo); const githubSharedNotes = await PublisherManager.getAllFileFromRepo( repoFrontmatter.branch, octokit, diff --git a/src/commands/plugin_commands.ts b/src/commands/plugin_commands.ts index bf0820ac..29afc4c5 100644 --- a/src/commands/plugin_commands.ts +++ b/src/commands/plugin_commands.ts @@ -1,5 +1,5 @@ import i18next from "i18next"; -import {FolderSettings, RepoFrontmatter, Repository} from "../settings/interface"; +import {RepoFrontmatter, Repository} from "../settings/interface"; import {checkRepositoryValidity, isShared} from "../src/data_validation_test"; import {createLink, getRepoFrontmatter} from "../src/utils"; import GithubPublisher from "../main"; @@ -56,7 +56,8 @@ export async function deleteCommands(plugin : GithubPublisher, repo: Repository, plugin.settings, publisher.octokit, branchName, - repoFrontmatter as RepoFrontmatter, + repoFrontmatter as RepoFrontmatter, + repo ); } diff --git a/src/conversion/convertText.ts b/src/conversion/convertText.ts index 0f031207..d6a9514e 100644 --- a/src/conversion/convertText.ts +++ b/src/conversion/convertText.ts @@ -2,7 +2,7 @@ import { FrontmatterConvert, GitHubPublisherSettings, LinkedNotes, - RepoFrontmatter, + RepoFrontmatter, Repository, } from "../settings/interface"; import { App, @@ -225,6 +225,7 @@ export async function convertInlineDataview( * @param {FrontMatterCache} frontmatter the frontmatter cache * @param {TFile} sourceFile the file to process * @param {RepoFrontmatter|RepoFrontmatter[]} sourceFrontmatter the frontmatter of the repo + * @param shortRepo * @return {Promise} the converted text * @credits Ole Eskid Steensen */ @@ -238,7 +239,8 @@ export async function convertDataviewQueries( frontmatterSettings: FrontmatterConvert, frontmatter: FrontMatterCache, sourceFile: TFile, - sourceFrontmatter: RepoFrontmatter | RepoFrontmatter[] + sourceFrontmatter: RepoFrontmatter | RepoFrontmatter[], + shortRepo: Repository | null ): Promise { // @ts-ignore if (!app.plugins.enabledPlugins.has("dataview")) { @@ -268,7 +270,8 @@ export async function convertDataviewQueries( vault, frontmatter, sourceFrontmatter, - frontmatterSettings + frontmatterSettings, + shortRepo ); md = convertWikilinks( md, @@ -299,6 +302,7 @@ export async function convertDataviewQueries( * @param {GitHubPublisherSettings} plugin GithubPublisher plugin * @param {RepoFrontmatter|RepoFrontmatter[]} sourceRepo the frontmatter of the repo * @param {Vault} vault app.vault + * @param shortRepo * @return {Promise} the converted text */ @@ -313,7 +317,8 @@ export async function mainConverting( linkedFiles: LinkedNotes[], plugin: GithubPublisher, vault: Vault, - sourceRepo: RepoFrontmatter | RepoFrontmatter[] + sourceRepo: RepoFrontmatter | RepoFrontmatter[], + shortRepo: Repository | null ): Promise { text = findAndReplaceText(text, settings, false); text = await addInlineTags( @@ -333,7 +338,8 @@ export async function mainConverting( frontmatterSettings, frontmatter, file, - sourceRepo + sourceRepo, + shortRepo ); text = await convertInlineDataview(text, settings, file, plugin.app); text = addHardLineBreak(text, settings, frontmatterSettings); @@ -346,7 +352,8 @@ export async function mainConverting( vault, frontmatter, sourceRepo, - frontmatterSettings + frontmatterSettings, + shortRepo ); text = convertWikilinks(text, frontmatterSettings, linkedFiles, settings); text = findAndReplaceText(text, settings, true); diff --git a/src/conversion/filePath.ts b/src/conversion/filePath.ts index c8071e18..c6090d89 100644 --- a/src/conversion/filePath.ts +++ b/src/conversion/filePath.ts @@ -10,7 +10,7 @@ import { LinkedNotes, GitHubPublisherSettings, FrontmatterConvert, - RepoFrontmatter, + RepoFrontmatter, Repository, } from "../settings/interface"; import { getCategory, @@ -71,6 +71,7 @@ export function getDataviewPath( * @param {FrontMatterCache | null} frontmatter FrontmatterCache or null * @param {RepoFrontmatter[] | RepoFrontmatter} sourceRepo The repoFrontmatter from the original file * @param {FrontmatterConvert} frontmatterSettings FrontmatterConvert + * @param shortRepo * @return {string} relative path */ @@ -82,12 +83,13 @@ export async function createRelativePath( vault: Vault, frontmatter: FrontMatterCache | null, sourceRepo: RepoFrontmatter[] | RepoFrontmatter, - frontmatterSettings: FrontmatterConvert + frontmatterSettings: FrontmatterConvert, + shortRepo: Repository | null ): Promise { const sourcePath = getReceiptFolder(sourceFile, settings, metadata, vault); const frontmatterTarget = await metadata.getFileCache(targetFile.linked) .frontmatter; - const targetRepo = await getRepoFrontmatter(settings, frontmatterTarget); + const targetRepo = await getRepoFrontmatter(settings, shortRepo, frontmatterTarget); const isFromAnotherRepo = checkIfRepoIsInAnother(sourceRepo, targetRepo); const shared = isInternalShared( settings.plugin.shareKey, diff --git a/src/conversion/links.ts b/src/conversion/links.ts index feae188f..5beb2eb4 100644 --- a/src/conversion/links.ts +++ b/src/conversion/links.ts @@ -3,7 +3,7 @@ import { FrontmatterConvert, GitHubPublisherSettings, LinkedNotes, - RepoFrontmatter, + RepoFrontmatter, Repository, } from "../settings/interface"; import { createRelativePath } from "./filePath"; import {isAttachment, noTextConversion} from "../src/data_validation_test"; @@ -203,6 +203,7 @@ function escapeRegex(filepath: string): string { * @param {FrontMatterCache} frontmatter The frontmatter cache * @param {RepoFrontmatter} sourceRepoFrontmatter The frontmatter of the source file * @param {FrontmatterConvert} frontmatterSettings The frontmatter settings + * @param shortRepo * @return {string} the file contents with converted internal links */ @@ -215,7 +216,8 @@ export async function convertLinkCitation( vault: Vault, frontmatter: FrontMatterCache, sourceRepoFrontmatter: RepoFrontmatter | RepoFrontmatter[], - frontmatterSettings: FrontmatterConvert + frontmatterSettings: FrontmatterConvert, + shortRepo: Repository | null ): Promise { if (!frontmatterSettings.convertInternalLinks) { return fileContent; @@ -229,7 +231,8 @@ export async function convertLinkCitation( vault, frontmatter, sourceRepoFrontmatter, - frontmatterSettings + frontmatterSettings, + shortRepo ); pathInGithub = pathInGithub.replace(".md", ""); let anchor = linkedFile.anchor ? linkedFile.anchor : ""; diff --git a/src/i18n/locales/en.json b/src/i18n/locales/en.json index d1748b77..1ea93c2f 100644 --- a/src/i18n/locales/en.json +++ b/src/i18n/locales/en.json @@ -1,416 +1,425 @@ { - "commands": { - "checkValidity": { - "inBranch": { - "error403": "Error 403: {{- repo.owner}}/{{- repo.repo}} was moved permanently (from {{- branchInfo}}).", - "error404": "Error 404: The branch {{- branchInfo}} was not found in {{- repo.owner}}/{{- repo.repo}}." - }, - "inRepo": { - "error301": "Error 301: {{- repo.owner}}/{{- repo.repo}} was moved permanently.", - "error403": "Error 403: this action is forbidden for {{- repo.owner}}/{{- repo.repo}}.", - "error404": "Error 404: {{- repo.owner}}/{{- repo.repo}}: is not found." - }, - "repoExistsTestBranch": "Repository {{- repo.owner}}/{{- repo.repo}} exists. Now testing the {{- main}} branch.", - "success": "{{- repo.owner}}/{{- repo.repo}} seems to be valid!", - "title": "Test the connection to the configured repository", - "rateLimit" : { - "command" : "Check the rate limit of the GitHub API", - "limited": "You have reached the rate limit of the GitHub API. The limit will be reset at {{- resetTime}}.", - "notLimited": "You are not rate limited. You can make {{- remaining}} requests before the limit is reset at {{- resetTime}}." - } - }, - "copyLink": "Create a link to this note", - "publisherDeleteClean": "Purge depublished and deleted files", - "shareActiveFile": "Upload single current active note", - "shareViewFiles": "Upload {{- viewFile}} with Github Publisher", - "uploadAllEditedNote": "Refresh all published notes", - "uploadAllNewEditedNote": "Refresh published and upload new notes", - "uploadAllNotes": "Upload all shared notes", - "uploadNewNotes": "Upload unpublished notes" - }, - "common": { - "add": "Add {{- things}}", - "after": "After", - "attachments": "attachments", - "before": "Before", - "cancel": "Cancel", - "close": "Close", - "delete": "Delete {{- things}}", - "edit": "Edit {{- things}}", - "error": "Error", - "files": "files", - "here": "here", - "or": "or", - "path": { - "file": "File name", - "folder": "Folder path", - "full": "Filepath" - }, - "published": "Published", - "regex": "regex", - "save": "Save", - "shared": "Shared", - "text": "text", - "warning": "Warning", - "repository": "repository" - }, - "deletion": { - "defaultFolder": "You need a default folder name in the settings to use this command.", - "failed": "Failed to delete {{- nb}} files.", - "noFile": "No files have been deleted.", - "rootFolder": "You need to configure a root folder in the settings to use this command.", - "success": "Successfully deleted {{- nb}} files." - }, - "error": { - "dataview": "Unable to render dataview query. Please update the dataview plugin to the last version.", - "errorConfig": "Error configuring {{- repo.owner}}/{{- repo.repo}}. Please check your settings.", - "errorPublish": "Error during upload to {{- repo.owner}}/{{- repo.repo}}", - "isEmpty": "{{- what}} is empty.", - "mergeconflic": "Pull-request is not mergeable, you need to do it manually.", - "unablePublishMultiNotes": "Unable to upload multiple notes, something went wrong.", - "unablePublishNote": "Unable to upload note {{- file}}, skipping it", - "whatEmpty": { - "branch": "Branch", - "ghToken": "GitHub Token", - "owner": "Owner", - "repo": "Repository" - } - }, - "informations": { - "foundNoteToSend": "Found {{- nbNotes}} new notes to send", - "migrating": { - "fileReplace": "Migration of filename replace to the new format...", - "oldSettings": "Migration of old settings to new settings format...", - "subFolder": "Adding replacing subfolder to the folderpath replacement...", - "normalFormat" : "Migrating settings..." - }, - "noNewNote": "No new notes to upload.", - "scanningRepo": "Scanning the repository, may take a while...", - "sendMessage": "Upload {{- nbNotes}} notes to {{- repo.owner}}/{{- repo.repo}}", - "startingClean": "Starting cleaning {{- repo.owner}}/{{- repo.repo}}", - "successPublishOneNote": "Successfully uploaded {{- file}} to {{- repo.owner}}/{{- repo.repo}}", - "successfullPublish": "Successfully uploaded {{- nbNotes}} to {{- repo.owner}}/{{- repo.repo}}", - "waitingWorkflow": "Now, waiting for the workflow to be completed..." - }, - "modals": { - "export": { - "copy": "Copy to clipboard", - "desc": "Export settings to clipboard or a file.", - "download": "Download", - "title": "Export settings" - }, - "import": { - "desc": "Import settings from text or a file. Note : this will overwrite your current settings (except for username, repo name and token).", - "error": { - "isEmpty": "the configuration is empty.", - "span": "Error importing configuration: " - }, - "importFromFile": "Import from file", - "paste": "Paste configuration here...", - "title": "Import settings" - }, - "listChangedFiles": { - "added": "Added", - "deleted": "Deleted", - "edited": "Edited", - "error": "Errors", - "notDeleted": "Cannot be deleted", - "title": "List of files edited in the repository", - "unpublished": "Cannot be published" - } - }, - "publish": { - "branch": { - "alreadyExists": "Branch already exists ({{- branchName}} on {{- repo.owner}}/{{- repo.repo}} - Using it.", - "error": "Error with {{- repo.owner}}/{{- repo.repo}}: {{- error}}", - "prMessage": "Pull-Request [{{- branchName}}] from Obsidian", - "success": "Branch successfully created (status: {{- branchStatus}}) on {{- repo.owner}}/{{- repo.repo}}" - } - }, - "regex": { - "entry": "Value to replace", - "replace": "Replacement" - }, - "settings": { - "conversion": { - "dataview": { - "desc": "Convert dataview to markdown.", - "title": "Dataview" - }, - "desc": "Theses option won't change the content of the file in your Obsidian Vault, but will change the content of the file in Github.", - "hardBreak": { - "desc": "Add a markdown hard line break (double whitespace) after each line.", - "title": "Markdown hard line break" - }, - "links": { - "desc": "You can prevent links to be converted and keep the alt text (or filename) by using the frontmatter key \"links\" with the value \"false\".", - "folderNote": { - "desc": "Rename files to a specified name (default: index.md) if it has the same name as their parent folder/category (also works if the note is outside of the folder).", - "title": "Folder note" - }, - "internals": { - "desc": "Convert internal links to their counterpart in the repository, with relative path.", - "title": "Internals Links" - }, - "nonShared": { - "desc": "Same option as internals, but for notes that are not yet published. Disabled, only the filename will be conserved.", - "title": "Convert internal links pointing to unpublished notes" - }, - "slugify": { - "title": "Sluglify anchor in markdown links", - "desc": "Standardize the slug of anchor links (pointing to heading title). Transform the slug into all lower case. Replace space with hyphen. Applicable only for anchor links in markdown link syntax." - }, - "title": "Links", - "wikilinks": { - "desc": "Convert Wikilinks to MDlinks, without changing the contents.", - "title": "[[Wikilinks]] to [MDlinks](links)" - } - }, - "sectionTitle": "Main text", - "tags": { - "desc": "This will convert any frontmatter or dataview inline field into frontmatter tags. Separate fields with a comma.", - "exclude": { - "desc": "This will exclude value from being converted. Separate fields with a comma.", - "title": "Exclude value from conversion" - }, - "inlineTags": { - "desc": "Add your inline tags in your frontmatter tags field and converting nested tags with replacing \"/\" with \"_\"", - "title": "Inline tags" - }, - "title": "Convert frontmatter/dataview field into tags" - }, - "title": "Content's conversion" - }, - "embed": { - "defaultImageFolder": { - "desc": "To use a folder different from default", - "title": "Default attachment folder" - }, - "title": "Embed", - "transferImage": { - "desc": "Send attachments embedded in a file to GitHub.", - "title": "Transfer attachments" - }, - "transferMetaFile": { - "desc": "Set the names of the metadata field you want to use to send files. Separate fields with a comma. Dataview inline field are supported.", - "title": "Send files using a metadata field" - }, - "transferNotes": { - "desc": "Send embedded notes in a shared file to GitHub. Only shared files will be send!", - "title": "Transfer embedded notes" - } - }, - "github": { - "apiType": { - "desc": "Choose between the Github API or the Github Enterprise API (only Github Enterprise users — Advanced user!).", - "dropdown": { - "enterprise": "Enterprise", - "free": "Free/Pro/Team (default)" - }, - "hostname": { - "desc": "The hostname of your Github Enterprise instance.", - "title": "Github Enterprise Hostname" - }, - "title": "API Type" - }, - "automaticallyMergePR": "Automatically merge pull requests", - "branch": { - "desc": "If you use a different branch than \"main\"", - "title": "Main branch" - }, - "ghToken": { - "desc": "A GitHub token with repository permission. You can generate it ", - "title": "Github Token" - }, - "repoName": { - "desc": "The name of the repository where you store your blog.", - "placeholder": "mkdocs-template", - "title": "Repository Name" - }, - "testConnection": "Test connection", - "title": "GitHub Configuration", - "username": { - "desc": "The username or organization hosting the repo in GitHub", - "title": "GitHub Username" - } - }, - "githubWorkflow": { - "autoCleanUp": { - "desc": "If the plugin must remove from GitHub the depublished files (stop share or deleted)", - "title": "Auto clean up" - }, - "excludedFiles": { - "desc": "If you want to exclude some folder or file from the autoclean, add them here. You can use regex by surrounding the string with \"/\". Separate files with a comma.", - "title": "Excluded files and folder" - }, - "githubAction": { - "desc": "If you want to activate a GitHub action when the plugin push the file, set the name of the file (in your .github/worfklows folder). Only workflow with the \"workflow_dispatch\" event will be triggered.", - "title": "Github action name" - }, - "prRequest": { - "desc": "The message send when the pull-request is merged. Will always followed by the pull-request number.", - "error": "You can't use an empty string here!", - "title": "Commit message" - }, - "useMetadataExtractor": { - "desc": "Send the files generated by the metadata-extractor plugin in this folder.", - "title": "Metadata-extractor files" - } - }, - "help": { - "frontmatter": { - "attachment": { - "folder": "Change the default folder for the attachments", - "send": "Send all attachments to GitHub" - }, - "autoclean": "Disable or enable autocleaning", - "baselink": { - "base": "Base link", - "desc": "Change the base link for the copy link command. Also disable the link replacer part. Can be used as an YAML object with the name ", - "remove": "Remove part of the link. It must be a list!" - }, - "convert": { - "enableOrDisable": "Enable or disable the conversion of links. Disabling this will remove the", - "syntax": "syntax, while keeping the file name or the alternative text." - }, - "dataview": "Convert dataview queries to markdown.", - "desc": "Moreover, there are some frontmatter YAML keys that can be usefull for your workflow. The YAML code below show the default settings, but feel free to change it to your needs in each notes!", - "embed": { - "remove": "Remove the embed from the note, leaving empty line.", - "send": "Send embedded note to GitHub" - }, - "hardBreak": "Convert all linebreaks to markdown «hard break».", - "internals": "Convert internals links to their counterpart in the website, with relative path. Disabled, the plugin will keep the internal link as is.", - "mdlinks": "Convert all [[wikilinks]] to [markdown](links)", - "nonShared": "Convert internal links pointing to a unshared file to their counterpart in the website, with relative path. Disabled, the plugin will keep the filename.", - "path": "You can override all path settings using this key. The path will be relative to the root of your repository.", - "repo": { - "branch": "Branch of the repo", - "desc": "Change the default repo for the note.", - "owner": "Owner of the repo", - "repo": "Name of the repo" - }, - "share": "This key is used to share a note with the plugin.", - "title": "Frontmatter keys cheatsheet", - "titleKey": "Change the title of the note." - }, - "multiRepoHelp": { - "desc": "If you want to send your notes to multiple repository, you can use the ", - "desc2": "key in your frontmatter. The value of this key must be a list of repository. Each repository must have the following keys ", - "exampleDesc": "The YAML code below show an example based on your settings.", - "title": "Send to multiple repository" - }, - "title": "Help", - "usefulLinks": { - "discussion": "Discussion", - "documentation": "Documentation", - "issue": "Issue", - "links": "https://obsidian-publisher.netlify.app/", - "repository": "Repository", - "title": "Useful links" - } - }, - "plugin": { - "copyLink": { - "baselink": { - "desc": "The base link of your website. By default : https://username.github.io/repo/", - "title": "Base link" - }, - "command": { - "desc": "Add a command to copy the link of the note (need reloading the plugin to take effect)", - "onActivation": "Link copied to your clipboard" - }, - "desc": "Send a link to your note in your clipboard", - "linkpathremover": { - "desc": "Remove this part from the created links. Separate by comma if multiple value must be removed.", - "title": "Remove link part" - }, - "title": "Copy link" - }, - "editorMenu": { - "desc": "Add a sharing commands in the right-click menu", - "title": "Editor Menu" - }, - "embedEditRepo": { - "desc": "Display the editions on the repository", - "title": "Allows to display the list of edited, added, deleted files... From the main repository (in a modal)." - }, - "excludedFolder": { - "desc": "Never publish file in these folder, regardless of the share key. Separate folder name by comma.", - "title": "Excluded Folder" - }, - "fileMenu": { - "desc": "Add an sharing commands in the file menu", - "title": "File Menu" - }, - "logNoticeHeader": { - "desc": "On mobile, it can be hard to debug the plugin. Enable this option to log every error in a Notice.", - "title": "Notice every error" - }, - "shareExternalModified": { - }, - "shareKey": { - "desc": "The frontmatter key to publish your file on the website.", - "title": "Share Key" - }, - "title": "Plugin Settings" - }, - "regexReplacing": { - "empty": "Replacement can be empty to remove the whole string.", - "forbiddenValue": "The {{- what}} cannont contain the character: {{- forbiddenChar}}", - "modal": { - "desc": "Replace text in the file with the given value. Enclose the text with \"//\" to use regex.", - "title": { - "all": "Folder path & filename replacer", - "only": "Replace filename", - "text": "Text replacer" - } - }, - "momentReplaceRegex": "Run replacement {{- moment}} the other plugin conversion (dataview, internals links...)", - "warningPath": "Warning! Using the character \"/\" will edit the path, be careful with this option." - }, - "upload": { - "defaultFolder": { - "desc": "Set the default reception folder. Let it empty to use the root of the repository.", - "placeholder": "docs", - "title": "Default Folder" - }, - "filepathRegex": { - }, - "folderBehavior": { - "desc": "Choose the file tree in the repository, with using a frontmatter key, a fixed folder or your Obsidian file tree.", - "fixedFolder": "Fixed Folder", - "obsidianPath": "Obsidian Path", - "title": "File tree in repository", - "yaml": "YAML frontmatter" - }, - "frontmatterKey": { - "desc": "Set the key where to get the folder's value.", - "placeholder": "category", - "title": "Frontmatter key" - }, - "regexFilePathTitle": { - "desc": "If the text is between \"//\", it will be used as a regex. Otherwise, it will be used as a string.", - "title": { - "FolderPathTitle": "Apply edit on the folder path or the filename (automatically)", - "titleOnly": "Apply edit on the filename (automatically)" - } - }, - "rootFolder": { - "desc": "Append this path to the folder set by the frontmatter key", - "title": "Root folder" - }, - "title": "Upload configuration", - "useFrontmatterTitle": { - "desc": "Use a frontmatter value to generate the filename. By default, \"title\" is used. ", - "title": "Set the key where to get the value of the filename" - } - } - }, - "statusBar": { - "counter": "{{- msg}}: {{- counter}}/{{- nb}}", - "markedForSharing": "{{- nb}} {{- type}} marked for sharing", - "sharing": "⌛Sharing {{- type}}", - "success": "✅ {{- action}} {{- type}}" - } + "commands": { + "checkValidity": { + "inBranch": { + "error403": "Error 403: {{- repo.owner}}/{{- repo.repo}} was moved permanently (from {{- branchInfo}}).", + "error404": "Error 404: The branch {{- branchInfo}} was not found in {{- repo.owner}}/{{- repo.repo}}." + }, + "inRepo": { + "error301": "Error 301: {{- repo.owner}}/{{- repo.repo}} was moved permanently.", + "error403": "Error 403: this action is forbidden for {{- repo.owner}}/{{- repo.repo}}.", + "error404": "Error 404: {{- repo.owner}}/{{- repo.repo}}: is not found." + }, + "rateLimit": { + "command": "Check the rate limit of the GitHub API", + "limited": "You have reached the rate limit of the GitHub API. The limit will be reset at {{- resetTime}}.", + "notLimited": "You are not rate limited. You can make {{- remaining}} requests before the limit is reset at {{- resetTime}}." + }, + "repoExistsTestBranch": "Repository {{- repo.owner}}/{{- repo.repo}} exists. Now testing the {{- main}} branch.", + "success": "{{- repo.owner}}/{{- repo.repo}} seems to be valid!", + "title": "Test the connection to the configured repository" + }, + "copyLink": "Create a link to this note", + "publisherDeleteClean": "Purge depublished and deleted files", + "shareActiveFile": "Upload single current active note", + "shareViewFiles": "Upload {{- viewFile}} with Github Publisher", + "uploadAllEditedNote": "Refresh all published notes", + "uploadAllNewEditedNote": "Refresh published and upload new notes", + "uploadAllNotes": "Upload all shared notes", + "uploadNewNotes": "Upload unpublished notes" + }, + "common": { + "add": "Add {{- things}}", + "after": "After", + "attachments": "attachments", + "before": "Before", + "cancel": "Cancel", + "close": "Close", + "delete": "Delete {{- things}}", + "edit": "Edit {{- things}}", + "error": "Error", + "files": "files", + "here": "here", + "or": "or", + "path": { + "file": "File name", + "folder": "Folder path", + "full": "Filepath" + }, + "published": "Published", + "regex": "regex", + "repository": "Repository", + "save": "Save", + "shared": "Shared", + "text": "text", + "warning": "Warning" + }, + "deletion": { + "defaultFolder": "You need a default folder name in the settings to use this command.", + "failed": "Failed to delete {{- nb}} files.", + "noFile": "No files have been deleted.", + "rootFolder": "You need to configure a root folder in the settings to use this command.", + "success": "Successfully deleted {{- nb}} files." + }, + "error": { + "dataview": "Unable to render dataview query. Please update the dataview plugin to the last version.", + "errorConfig": "Error configuring {{- repo.owner}}/{{- repo.repo}}. Please check your settings.", + "errorPublish": "Error during upload to {{- repo.owner}}/{{- repo.repo}}", + "isEmpty": "{{- what}} is empty.", + "mergeconflic": "Pull-request is not mergeable, you need to do it manually.", + "unablePublishMultiNotes": "Unable to upload multiple notes, something went wrong.", + "unablePublishNote": "Unable to upload note {{- file}}, skipping it", + "whatEmpty": { + "branch": "Branch", + "ghToken": "GitHub Token", + "owner": "Owner", + "repo": "Repository" + } + }, + "informations": { + "foundNoteToSend": "Found {{- nbNotes}} new notes to send", + "migrating": { + "fileReplace": "Migration of filename replace to the new format...", + "normalFormat": "Migrating settings...", + "oldSettings": "Migration of old settings to new settings format...", + "subFolder": "Adding replacing subfolder to the folderpath replacement..." + }, + "noNewNote": "No new notes to upload.", + "scanningRepo": "Scanning the repository, may take a while...", + "sendMessage": "Upload {{- nbNotes}} notes to {{- repo.owner}}/{{- repo.repo}}", + "startingClean": "Starting cleaning {{- repo.owner}}/{{- repo.repo}}", + "successfullPublish": "Successfully uploaded {{- nbNotes}} to {{- repo.owner}}/{{- repo.repo}}", + "successPublishOneNote": "Successfully uploaded {{- file}} to {{- repo.owner}}/{{- repo.repo}}", + "waitingWorkflow": "Now, waiting for the workflow to be completed..." + }, + "modals": { + "export": { + "copy": "Copy to clipboard", + "desc": "Export settings to clipboard or a file.", + "download": "Download", + "title": "Export settings" + }, + "import": { + "desc": "Import settings from text or a file. Note : this will overwrite your current settings (except for username, repo name and token).", + "error": { + "isEmpty": "the configuration is empty.", + "span": "Error importing configuration: " + }, + "importFromFile": "Import from file", + "paste": "Paste configuration here...", + "title": "Import settings" + }, + "listChangedFiles": { + "added": "Added", + "deleted": "Deleted", + "edited": "Edited", + "error": "Errors", + "notDeleted": "Cannot be deleted", + "title": "List of files edited in the repository", + "unpublished": "Cannot be published" + } + }, + "publish": { + "branch": { + "alreadyExists": "Branch already exists ({{- branchName}} on {{- repo.owner}}/{{- repo.repo}} - Using it.", + "error": "Error with {{- repo.owner}}/{{- repo.repo}}: {{- error}}", + "prMessage": "Pull-Request [{{- branchName}}] from Obsidian", + "success": "Branch successfully created (status: {{- branchStatus}}) on {{- repo.owner}}/{{- repo.repo}}" + } + }, + "regex": { + "entry": "Value to replace", + "replace": "Replacement" + }, + "settings": { + "conversion": { + "dataview": { + "desc": "Convert dataview to markdown.", + "title": "Dataview" + }, + "desc": "Theses option won't change the content of the file in your Obsidian Vault, but will change the content of the file in Github.", + "hardBreak": { + "desc": "Add a markdown hard line break (double whitespace) after each line.", + "title": "Markdown hard line break" + }, + "links": { + "desc": "You can prevent links to be converted and keep the alt text (or filename) by using the frontmatter key \"links\" with the value \"false\".", + "folderNote": { + "desc": "Rename files to a specified name (default: index.md) if it has the same name as their parent folder/category (also works if the note is outside of the folder).", + "title": "Folder note" + }, + "internals": { + "desc": "Convert internal links to their counterpart in the repository, with relative path.", + "title": "Internals Links" + }, + "nonShared": { + "desc": "Same option as internals, but for notes that are not yet published. Disabled, only the filename will be conserved.", + "title": "Convert internal links pointing to unpublished notes" + }, + "slugify": { + "desc": "Standardize the slug of anchor links (pointing to heading title). Transform the slug into all lower case. Replace space with hyphen. Applicable only for anchor links in markdown link syntax.", + "title": "Sluglify anchor in markdown links" + }, + "title": "Links", + "wikilinks": { + "desc": "Convert Wikilinks to MDlinks, without changing the contents.", + "title": "[[Wikilinks]] to [MDlinks](links)" + } + }, + "sectionTitle": "Main text", + "tags": { + "desc": "This will convert any frontmatter or dataview inline field into frontmatter tags. Separate fields with a comma.", + "exclude": { + "desc": "This will exclude value from being converted. Separate fields with a comma.", + "title": "Exclude value from conversion" + }, + "inlineTags": { + "desc": "Add your inline tags in your frontmatter tags field and converting nested tags with replacing \"/\" with \"_\"", + "title": "Inline tags" + }, + "title": "Convert frontmatter/dataview field into tags" + }, + "title": "Content's conversion" + }, + "embed": { + "defaultImageFolder": { + "desc": "To use a folder different from default", + "title": "Default attachment folder" + }, + "title": "Embed", + "transferImage": { + "desc": "Send attachments embedded in a file to GitHub.", + "title": "Transfer attachments" + }, + "transferMetaFile": { + "desc": "Set the names of the metadata field you want to use to send files. Separate fields with a comma. Dataview inline field are supported.", + "title": "Send files using a metadata field" + }, + "transferNotes": { + "desc": "Send embedded notes in a shared file to GitHub. Only shared files will be send!", + "title": "Transfer embedded notes" + } + }, + "github": { + "apiType": { + "desc": "Choose between the Github API or the Github Enterprise API (only Github Enterprise users — Advanced user!).", + "dropdown": { + "enterprise": "Enterprise", + "free": "Free/Pro/Team (default)" + }, + "hostname": { + "desc": "The hostname of your Github Enterprise instance.", + "title": "Github Enterprise Hostname" + }, + "title": "API Type" + }, + "automaticallyMergePR": "Automatically merge pull requests", + "branch": { + "desc": "If you use a different branch than \"main\"", + "title": "Main branch" + }, + "ghToken": { + "desc": "A GitHub token with repository permission. You can generate it ", + "title": "Github Token" + }, + "repoName": { + "desc": "The name of the repository where you store your blog.", + "placeholder": "mkdocs-template", + "title": "Repository Name" + }, + "smartRepo": { + "button": "Manage more repository", + "modals": { + "desc": "These \"other repositories\" allow you to use all the commands on the repositories added below.", + "frontmatterInfo": "Using the \"shortKey\" frontmatter key with the \"smartKey\" also allows you to use this repository in a file without having to write its path.", + "newRepo": "a new repository", + "shortcuts": { + "desc": "Add all commands for this repository in the command palette", + "title": "Shortcuts" + }, + "title": "Manage others repositories" + } + }, + "testConnection": "Test connection", + "title": "GitHub Configuration", + "username": { + "desc": "The username or organization hosting the repo in GitHub", + "title": "GitHub Username" + } + }, + "githubWorkflow": { + "autoCleanUp": { + "desc": "If the plugin must remove from GitHub the depublished files (stop share or deleted)", + "title": "Auto clean up" + }, + "excludedFiles": { + "desc": "If you want to exclude some folder or file from the autoclean, add them here. You can use regex by surrounding the string with \"/\". Separate files with a comma.", + "title": "Excluded files and folder" + }, + "githubAction": { + "desc": "If you want to activate a GitHub action when the plugin push the file, set the name of the file (in your .github/worfklows folder). Only workflow with the \"workflow_dispatch\" event will be triggered.", + "title": "Github action name" + }, + "prRequest": { + "desc": "The message send when the pull-request is merged. Will always followed by the pull-request number.", + "error": "You can't use an empty string here!", + "title": "Commit message" + }, + "useMetadataExtractor": { + "desc": "Send the files generated by the metadata-extractor plugin in this folder.", + "title": "Metadata-extractor files" + } + }, + "help": { + "frontmatter": { + "attachment": { + "folder": "Change the default folder for the attachments", + "send": "Send all attachments to GitHub" + }, + "autoclean": "Disable or enable autocleaning", + "baselink": { + "base": "Base link", + "desc": "Change the base link for the copy link command. Also disable the link replacer part. Can be used as an YAML object with the name ", + "remove": "Remove part of the link. It must be a list!" + }, + "convert": { + "enableOrDisable": "Enable or disable the conversion of links. Disabling this will remove the", + "syntax": "syntax, while keeping the file name or the alternative text." + }, + "dataview": "Convert dataview queries to markdown.", + "desc": "Moreover, there are some frontmatter YAML keys that can be usefull for your workflow. The YAML code below show the default settings, but feel free to change it to your needs in each notes!", + "embed": { + "remove": "Remove the embed from the note, leaving empty line.", + "send": "Send embedded note to GitHub" + }, + "hardBreak": "Convert all linebreaks to markdown «hard break».", + "internals": "Convert internals links to their counterpart in the website, with relative path. Disabled, the plugin will keep the internal link as is.", + "mdlinks": "Convert all [[wikilinks]] to [markdown](links)", + "nonShared": "Convert internal links pointing to a unshared file to their counterpart in the website, with relative path. Disabled, the plugin will keep the filename.", + "path": "You can override all path settings using this key. The path will be relative to the root of your repository.", + "repo": { + "branch": "Branch of the repo", + "desc": "Change the default repo for the note.", + "owner": "Owner of the repo", + "repo": "Name of the repo" + }, + "share": "This key is used to share a note with the plugin.", + "title": "Frontmatter keys cheatsheet", + "titleKey": "Change the title of the note." + }, + "multiRepoHelp": { + "desc": "If you want to send your notes to multiple repository, you can use the ", + "desc2": "key in your frontmatter. The value of this key must be a list of repository. Each repository must have the following keys ", + "exampleDesc": "The YAML code below show an example based on your settings.", + "title": "Send to multiple repository" + }, + "title": "Help", + "usefulLinks": { + "discussion": "Discussion", + "documentation": "Documentation", + "issue": "Issue", + "links": "https://obsidian-publisher.netlify.app/", + "repository": "Repository", + "title": "Useful links" + } + }, + "plugin": { + "copyLink": { + "baselink": { + "desc": "The base link of your website. By default : https://username.github.io/repo/", + "title": "Base link" + }, + "command": { + "desc": "Add a command to copy the link of the note (need reloading the plugin to take effect)", + "onActivation": "Link copied to your clipboard" + }, + "desc": "Send a link to your note in your clipboard", + "linkpathremover": { + "desc": "Remove this part from the created links. Separate by comma if multiple value must be removed.", + "title": "Remove link part" + }, + "title": "Copy link" + }, + "editorMenu": { + "desc": "Add a sharing commands in the right-click menu", + "title": "Editor Menu" + }, + "embedEditRepo": { + "desc": "Display the editions on the repository", + "title": "Allows to display the list of edited, added, deleted files... From the main repository (in a modal)." + }, + "excludedFolder": { + "desc": "Never publish file in these folder, regardless of the share key. Separate folder name by comma.", + "title": "Excluded Folder" + }, + "fileMenu": { + "desc": "Add an sharing commands in the file menu", + "title": "File Menu" + }, + "logNoticeHeader": { + "desc": "On mobile, it can be hard to debug the plugin. Enable this option to log every error in a Notice.", + "title": "Notice every error" + }, + "shareKey": { + "desc": "The frontmatter key to publish your file on the website.", + "title": "Share Key" + }, + "title": "Plugin Settings" + }, + "regexReplacing": { + "empty": "Replacement can be empty to remove the whole string.", + "forbiddenValue": "The {{- what}} cannont contain the character: {{- forbiddenChar}}", + "modal": { + "desc": "Replace text in the file with the given value. Enclose the text with \"//\" to use regex.", + "title": { + "all": "Folder path & filename replacer", + "only": "Replace filename", + "text": "Text replacer" + } + }, + "momentReplaceRegex": "Run replacement {{- moment}} the other plugin conversion (dataview, internals links...)", + "warningPath": "Warning! Using the character \"/\" will edit the path, be careful with this option." + }, + "upload": { + "defaultFolder": { + "desc": "Set the default reception folder. Let it empty to use the root of the repository.", + "placeholder": "docs", + "title": "Default Folder" + }, + "folderBehavior": { + "desc": "Choose the file tree in the repository, with using a frontmatter key, a fixed folder or your Obsidian file tree.", + "fixedFolder": "Fixed Folder", + "obsidianPath": "Obsidian Path", + "title": "File tree in repository", + "yaml": "YAML frontmatter" + }, + "frontmatterKey": { + "desc": "Set the key where to get the folder's value.", + "placeholder": "category", + "title": "Frontmatter key" + }, + "regexFilePathTitle": { + "desc": "If the text is between \"//\", it will be used as a regex. Otherwise, it will be used as a string.", + "title": { + "FolderPathTitle": "Apply edit on the folder path or the filename (automatically)", + "titleOnly": "Apply edit on the filename (automatically)" + } + }, + "rootFolder": { + "desc": "Append this path to the folder set by the frontmatter key", + "title": "Root folder" + }, + "title": "Upload configuration", + "useFrontmatterTitle": { + "desc": "Use a frontmatter value to generate the filename. By default, \"title\" is used. ", + "title": "Set the key where to get the value of the filename" + } + } + }, + "statusBar": { + "counter": "{{- msg}}: {{- counter}}/{{- nb}}", + "markedForSharing": "{{- nb}} {{- type}} marked for sharing", + "sharing": "⌛Sharing {{- type}}", + "success": "✅ {{- action}} {{- type}}" + } } diff --git a/src/i18n/locales/fr.json b/src/i18n/locales/fr.json index ca9a3d8b..acbcdc88 100644 --- a/src/i18n/locales/fr.json +++ b/src/i18n/locales/fr.json @@ -1,418 +1,425 @@ { - "commands": { - "checkValidity": { - "inBranch": { - "error403": "Erreur 403: {{- repo.owner}}/{{- repo.repo}} a été déplacé de manière permanente (depuis {{- branchInfo}}", - "error404": "Erreur 404 : La branche {{- repo.branch}} est introuvable depuis {{- repo.owner}}/{{- repo.repo}}" - }, - "inRepo": { - "error301": "Erreur 301 : {{- repo.owner}}/{{- repo.repo}} a été déplacé de manière permanente", - "error403": "Erreur 403 : Cette action est interdite pour {{- repo.owner}}/{{- repo.repo}}", - "error404": "Erreur 404 : {{- repo.owner}}/{{- repo.repo}} est introuvable" - }, - "repoExistsTestBranch": "Le dépôt {{- repo.owner}}/{{- repo.repo}} existe. Maintenant, nous allons tester la branche {{- repo.branch}}", - "success": "{{- repo.owner}}/{{- repo.repo}} semble valide !", - "title": "Tester la connexion au dépôt configuré", - "rateLimit" : { - "command" : "Vérifier la limite de requêtes de l'API GitHub", - "limited" : "Vous avez atteint la limite de requêtes Github. La limite sera réinitialisée à {{- resetTime}}. minutes.", - "notLimited": "Vous n'êtes pas limité par Github. Vous pouvez encore faire {{- remaining}} requêtes, et la limite sera réinitialisée à {{- resetTime}}." - } - - }, - "copyLink": "Créer un lien vers cette note", - "publisherDeleteClean": "Purger les fichiers dépubliés et supprimés", - "shareActiveFile": "Transférer la note active", - "shareViewFiles": "Transférer {{- viewFile}} avec Github Publisher", - "uploadAllEditedNote": "Rafraîchir toutes les notes publiées", - "uploadAllNewEditedNote": "Rafraîchir les notes publiées et transférer les nouvelles notes", - "uploadAllNotes": "Transférer toutes les notes", - "uploadNewNotes": "Transférer les nouvelles notes" - }, - "common": { - "add": "Ajouter {{- things}}", - "after": "Après", - "attachments": "pièces-jointes", - "before": "Avant", - "cancel": "Annuler", - "close": "Fermer", - "delete": "Supprimer {{- things}}", - "edit": "Éditer {{- things}}", - "error": "Erreur", - "files": "fichiers", - "here": "ici", - "or": "ou", - "path": { - "file": "Nom du fichier", - "folder": "Chemin du dossier", - "full": "Chemin du fichier" - }, - "published": "publiés", - "regex": "regex", - "save": "Sauvegarder", - "shared": "partagés", - "text": "texte", - "warning": "Attention", - "repository": "Dépôt" - }, - "deletion": { - "defaultFolder": "Vous avez besoin d'un dossier par défaut dans les paramètres pour utiliser cette commande.", - "failed": "Échec de la suppression de {{- nb}} notes.", - "noFile": "Aucun fichier n'a été supprimé.", - "rootFolder": "Vous devez configurer un dossier racine dans les paramètres pour utiliser cette commande.", - "success": "Suppression réussie de {{- nb}} fichiers." - }, - "error": { - "dataview": "Impossible de convertir la requête Dataview. Veuillez mettre à jour le module Dataview à la dernière version;", - "errorConfig": "Erreur de configuration pour {{- repo.owner}}/{{- repo.repo}}:{{- repo.branch}}. Merci de vérifier vos paramètres.", - "errorPublish": "Erreur lors de la publication sur {{- repo.owner}}/{{- repo.repo}}:{{- repo.branch}}", - "isEmpty": "{{- what}} est vide.", - "mergeconflic": "La Pull-Request n'est pas fusionnale, vous avez besoin de le faire manuellement.", - "unablePublishMultiNotes": "Impossible de transférer plusieurs notes, quelque chose s'est mal passé.", - "unablePublishNote": "Impossible de transférer {{- file}}, le fichier a été ignoré.", - "whatEmpty": { - "branch": "Branch", - "ghToken": "Github Token", - "owner": "Propriétaire", - "repo": "Dépôt" - } - }, - "informations": { - "foundNoteToSend": "Trouvé {{- nbNotes}} nouvelles notes à transférer.", - "migrating": { - "fileReplace": "Migration du remplacement du nom du fichier au nouveau format...", - "oldSettings": "Migration des anciens paramètres au nouveau format...", - "subFolder": "Ajout du remplacement du sous-dossier au remplacement de chemin de fichier...", - "normalFormat" : "Migration des paramètres..." - }, - "noNewNote": "Aucune note à transférer.", - "scanningRepo": "Scan du dépôt, veuillez patienter...", - "sendMessage": "Transfert de {{- nbNotes}} notes vers {{- repo.owner}}/{{- repo.repo}}", - "startingClean": "Début du nettoyage de {{- repo.owner}}/{{- repo.repo}}", - "successPublishOneNote": "Transfert réussi de {{- file}} vers {{- repo.owner}}/{{- repo.repo}}", - "successfullPublish": "Transfert réussi de {{- nbNotes}} notes vers {{- repo.owner}}/{{- repo.repo}}", - "waitingWorkflow": "Maintenant, attente de la fin du workflow..." - }, - "modals": { - "export": { - "copy": "Copier vers le presse-papier", - "desc": "Exporter les paramètres vers un fichier ou dans le presse-papier.", - "download": "Télécharger", - "title": "Exporter les paramètres" - }, - "import": { - "desc": "Importer des paramètres depuis un fichier ou un texte. Cela écrasera vos paramètres actuels (sauf le nom du dépôt, le nom d'utilisateur et votre token)", - "error": { - "isEmpty": "la configuration est vide", - "span": "Erreur lors de l'importation de la configuration :" - }, - "importFromFile": "Import depuis le fichier", - "paste": "Coller la configuration ici...", - "title": "Importer des paramètres" - }, - "listChangedFiles": { - "added": "Ajouté", - "deleted": "Supprimé", - "edited": "Modifié", - "error": "Erreurs", - "notDeleted": "Impossible à supprimer", - "title": "Liste des fichiers édités sur le dépôt", - "unpublished": "Impossible à publier" - } - }, - "publish": { - "branch": { - "alreadyExists": "La branche {{- branchName}} sur {{- repo.owner}}/{{- repo.repo}} existe déjà - Utilisation de celle-ci.", - "error": "Erreur avec {{- repo.owner}}/{{- repo.repo}} : {{- error}}", - "prMessage": "Pull-Request [{{- branchName}}] depuis Obsidian", - "success": "La branche a été crée avec succès (status: {{- branchStatus}} sur {{- repo.owner}}/{{- repo.repo}})" - } - }, - "regex": { - "entry": "Valeur à remplacer", - "replace": "Remplacement" - }, - "settings": { - "conversion": { - "dataview": { - "desc": "Convertir les requêtes Dataview en markdown.", - "title": "Dataview" - }, - "desc": "Ces options ne changent pas le contenu du fichier dans votre coffre Obsidian, mais changeront le contenu du fichier publié sur GitHub.", - "hardBreak": { - "desc": "Ajoutez un retour à la ligne Markdown (double espace) après chaque ligne.", - "title": "Saut de ligne strict" - }, - "links": { - "desc": "Vous pouvez empêcher la conversion des liens et conserver le texte alt (ou le nom du fichier) en utilisant la clé frontmatter \"links\" avec la valeur \"false\".", - "folderNote": { - "desc": "Renommer les fichiers en un nom spécifique (défaut : \"index.md\") s'il porte le même nom que leur dossier/catégorie parent (fonctionne aussi si la note est à l'extérieur du dossier).", - "title": "Folder Note" - }, - "internals": { - "desc": "Convertir les liens internes pointant vers les notes publiées vers leur homologue dans le dépôt, sous forme de chemin relatif.", - "title": "Liens internes" - }, - "nonShared": { - "desc": "L'option précédente, mais appliquées aux liens internes pointant vers des notes non-publiées. Désactivé, seul le nom du fichier sera conservé.", - "title": "Conversion des liens internes pointant vers des notes non-publiées" - }, - "slugify": { - "title": "Slugifier l'ancre des liens markdown", - "desc": "Normaliser le lien (slug) des liens d'ancrage (pointant vers le titre de la rubrique). Transforme le texte en minuscules. Remplace l'espace par un tiret. Applicable uniquement aux liens d'ancrage dans la syntaxe de lien markdown." - - }, - "title": "Liens", - "wikilinks": { - "desc": "Conversion des liens wikilinks en liens Markdown, sans en modifier le contenu.", - "title": "Convertir [[WikiLinks]] en [liens](Markdown)" - } - }, - "sectionTitle": "Texte principal", - "tags": { - "desc": "Ceci convertira tous les champs du frontmatter/dataview en tags. Séparez les champs par une virgule.", - "exclude": { - "desc": "Exclusion de champs de la conversion. Séparer les valeurs par une virgule.", - "title": "Exclusion de tags" - }, - "inlineTags": { - "desc": "Ajoute vos inlines tags dans votre bloc frontmatter et converti les tags imbriqués en remplaçant \"/\" par \"_\".", - "title": "Inlines tags" - }, - "title": "Convertir des champs dataview ou frontmatter en tags" - }, - "title": "Conversion du contenu" - }, - "embed": { - "defaultImageFolder": { - "desc": "Pour utiliser un dossier différent de celui par défaut pour les pièces-jointes.", - "title": "Dossier de pièces-jointes par défaut" - }, - "title": "Embed", - "transferImage": { - "desc": "Transférer les pièces-jointes", - "title": "Envoyer les pièces-jointes intégrées dans un fichier dans le dépôt." - }, - "transferMetaFile": { - "desc": "Permet d'envoyer des fichiers en utilisant une clé frontmatter/dataview. Séparer les champs par une virgule.", - "title": "Envoyer des fichiers en utilisant une clé frontmatter/dataview" - }, - "transferNotes": { - "desc": "Envoyer les notes intégrées dans un fichier publié dans le dépôt. Seul les fichiers publiés seront envoyés !", - "title": "Transférer les notes intégrées" - } - }, - "github": { - "apiType": { - "desc": "Choisir entre l'API GitHub ou l'API pour GitHub Entreprise (uniquement pour les utilisateurs de GitHub Enterprise — Utilisateur avancé !).", - "dropdown": { - "enterprise": "Entreprise", - "free": "Free/Pro/Team (défaut)" - }, - "hostname": { - "desc": "Le nom de l'instance Github de votre entreprise.", - "title": "Instance Github Entreprise" - }, - "title": "Type d'API" - }, - "automaticallyMergePR": "Fusionner automatiquement les pull-request", - "branch": { - "desc": "Dans le cas où vous souhaitez utiliser une branche différente de \"main\".", - "title": "Branche principale" - }, - "ghToken": { - "desc": "Un token GitHub avec autorisation de dépôt. Vous pouvez le générer ", - "title": "Token Github" - }, - "repoName": { - "desc": "Le nom du dépôt dans lequel vos fichiers seront transférés.", - "placeholder": "mkdocs-template", - "title": "Nom du dépôt" - }, - "testConnection": "Tester la connexion", - "title": "Configuration GitHub", - "username": { - "desc": "Votre username sur GitHub.", - "title": "Nom d'utilisateur GitHub" - } - }, - "githubWorkflow": { - "autoCleanUp": { - "desc": "Si le plugin doit supprimer de votre dépôt les fichiers dépubliés (arrêt du partage ou suppression).", - "title": "Auto-nettoyage" - }, - "excludedFiles": { - "desc": "Si vous voulez exclure certains dossier ou fichier du nettoyage automatique, définissez leur chemin. Les regex sont acceptées en les encadrant par des slashs. Séparer les valeurs par une virgule.", - "title": "fichiers et dossier exclus" - }, - "githubAction": { - "desc": "Si vous souhaitez activer une action GitHub lorsque le plugin push les fichiers dans le dépôt, il vous faut indiquer le nom du fichier issus du dossier .github/workflows/. Seules les actions activées par un workflow_dispatch sont activées.", - "title": "Nom de l'action GitHub" - }, - "prRequest": { - "desc": "Le message envoyé lorsque la pull-request est fusionnée. Sera toujours suivi par le numéro de la pull-request.", - "error": "Vous ne pouvez pas utiliser une valeur vide pour le message de commit.", - "title": "Message de commit" - }, - "useMetadataExtractor": { - "desc": "Envoyer les fichiers générés par metadata-extractor dans ce dossier.", - "title": "Fichier de metadata-extractor" - } - }, - "help": { - "frontmatter": { - "attachment": { - "folder": "Change le dossier par défaut pour les pièces-jointes.", - "send": "Envoie toutes les pièces-jointes dans le dépôt GitHub." - }, - "autoclean": "Désactive ou active le nettoyage automatique du dépôt GitHub.", - "baselink": { - "base": "Lien de base", - "desc": "Change le lien de base pour la commande de copie de lien. Désactive aussi la suppression de partie de lien. Peut être utilisée en tant qu'objet sous le nom de ", - "remove": "Supprime les parties de lien. À mettre sous forme de liste !" - }, - "convert": { - "enableOrDisable": "Active ou désactive la conversion des liens. En désactivant cette option, vous supprimez les", - "syntax": "syntaxes, tout en gardant le nom du fichier ou son text alternatif." - }, - "dataview": "Convertit les requêtes dataview en markdown.", - "desc": "Il existe quelques clés YAML qui peuvent vous êtes utile. Le code ci-dessous montre les paramètres par défaut, mais n'hésitez pas à le modifier selon vos besoins pour chaque note !", - "embed": { - "remove": "Supprime les notes intégrées du fichier partagés en ne laissant qu'une ligne vide.", - "send": "Envoie les notes intégrées de la note publiées dans le dépôt. Seules les notes partagées seront envoyées !" - }, - "hardBreak": "Convertit tous les sauts de lignes en \"hard break\" markdown.", - "internals": "Convertit les liens internes vers leur homologue du dépôt, sous forme de liens relatifs. Désactivés, les liens seront conservés tels quels.", - "mdlinks": "Convertir tous les liens [[wikilinks]] en [liens](Markdown)", - "nonShared": "Convertit les liens internes pointat vers une notes non publiées vers son futur homologue. Désactivé, le plugin conservera le nom du fichier ou son texte alternatif.", - "path": "Vous pouvez écraser tous les paramètres de chemins en utilisant cette clé. Le chemin sera créée à partir de la racine du dépôt.", - "repo": { - "branch": "Nom de la branche", - "desc": "Changer le dépôt GitHub pour cette note", - "owner": "Pseudo GitHub du propriétaire du dépôt", - "repo": "Nom du dépôt" - }, - "share": "La clé utilisée pour partager une note", - "title": "Aide-mémoire frontmatter", - "titleKey": "Change le titre de la note" - }, - "multiRepoHelp": { - "desc": "Si vous souhaitez envoyer vos notes dans plusieurs dépôt en même temps, vous pouvez utiliser la clé ", - "desc2": "dans votre frontmatter. La valeur de cette clé doit être une liste. Chaque dépôt doit avoir les clés suivantes :", - "exampleDesc": "Le code YAML ci-dessous montre un exemple basé sur vos paramètres.", - "title": "Envoie dans plusieurs dépôt" - }, - "title": "Aide", - "usefulLinks": { - "discussion": "Discussion", - "documentation": "Documentation (en anglais)", - "issue": "Issue", - "links": "https://obsidian-publisher.netlify.app", - "repository": "Dépôt", - "title": "Liens utiles" - } - }, - "plugin": { - "copyLink": { - "baselink": { - "desc": "Permet de créer un lien dans le presse-papier avec cette base. Par défaut : \"https://username.github.io/repo/\"", - "title": "Lien du dépôt/blog" - }, - "command": { - "desc": "Ajouter une commande permettant de copier le lien de la note publiée dans le presse-papier (nécessite de recharger le plugin pour prendre effet)", - "onActivation": "Lien copié dans le presse-papier !" - }, - "desc": "Envoie d'un lien vers la note publiées dans votre presse-papier.", - "linkpathremover": { - "desc": "Supprimer cette partie des liens créés. Séparer par une virgule si plusieurs valeurs doivent être supprimées.", - "title": "Suppression d'une partie du lien" - }, - "title": "Copie de lien" - }, - "editorMenu": { - "desc": "Ajouter une commande de partage dans le menu du clic droit.", - "title": "Menu \"Edition\"" - }, - "embedEditRepo": { - "desc": "Permet d'afficher la liste des fichiers éditer, ajouté, supprimé... Du dépôt principal (dans un modal).", - "title": "Afficher les éditions sur le dépôt" - }, - "excludedFolder": { - "desc": "Les fichiers dans ses dossiers ne seront jamais publiés, quelle que soit l'état de la clé de partage. Séparez les noms de dossier par une virgule.", - "title": "Dossiers exclus" - }, - "fileMenu": { - "desc": "Ajouter une commande de partage dans le menu \"Fichier\"", - "title": "Menu \"Fichier\"" - }, - "logNoticeHeader": { - "desc": "Sur mobile, il peut être difficile de debug le module. Activer cette option pour notifier toutes les erreurs via une notification Obsidian.", - "title": "Notifier toutes les erreurs" - }, - "shareExternalModified": { - }, - "shareKey": { - "desc": "Clé de partage", - "title": "La clé frontmatter pour publier la note sur le dépôt." - }, - "title": "Paramètres du plugin" - }, - "regexReplacing": { - "empty": "Le remplacement peut être vide pour supprimer l'ensemble de la chaîne de caractère.", - "forbiddenValue": "Le {{- what}} ne peut contenir le caractère : {{- forbiddenChar}}.", - "modal": { - "desc": "Replace des textes dans le fichier par la valeur donnée. Vous pouvez encadrer le texte à remplacer avec \"//\" pour utiliser un regex.", - "title": { - "all": "Remplacement du nom ou du chemin du fichier", - "only": "Remplacement du titre uniquement", - "text": "Remplacement de texte" - } - }, - "momentReplaceRegex": "Éxécuter le remplacement {{- moment}} les autres conversions (dataview, liens internes...)", - "warningPath": "Attention ! Utiliser le caractère \"/\" modifiera le chemin du fichier. Veuillez faire attention avec cette option." - }, - "upload": { - "defaultFolder": { - "desc": "Définir le dossier de réception par défaut. Laisser vide pour utiliser la racine du dépôt.", - "placeholder": "docs", - "title": "Dossier par défaut" - }, - "filepathRegex": { - }, - "folderBehavior": { - "desc": "Choisir la hierarchie des dossiers dans le dépôt, en se basant sur une clé frontmatter, un dossier fixe ou la hierarchie des dossiers dans Obsidian.", - "fixedFolder": "Dossier fixé", - "obsidianPath": "Chemin Obsidian", - "title": "Hierarchie des dossiers", - "yaml": "Valeur d'une clé frontmatter" - }, - "frontmatterKey": { - "desc": "Définir le nom de la clé où obtenir le dossier", - "placeholder": "category", - "title": "Clé frontmatter" - }, - "regexFilePathTitle": { - "desc": "Si le texte est entre \"//\", il sera interprété comme une expression régulière. Sinon, il sera interprété comme du texte brut.", - "title": { - "FolderPathTitle": "Éditer le titre et le chemin du dossier (automatiquement)", - "titleOnly": "Éditer le titre (automatiquement)" - } - }, - "rootFolder": { - "desc": "Ajouter ce chemin au dossier définit par la clé frontmatter.", - "title": "Dossier racine" - }, - "title": "Configuration du transfert", - "useFrontmatterTitle": { - "desc": "Utiliser un champ du frontmatter pour générer le nom du fichier. Par défaut, \"title\" est utilisé.", - "title": "Utiliser une clé frontmatter pour définir le titre" - } - } - }, - "statusBar": { - "counter": "{{- msg}} : {{- counter}}/{{- nb}}", - "markedForSharing": "{{- nb}} {{- type}} à partager", - "sharing": "⌛Partage de {{- type}}", - "success": "✅{{- action}} {{- type}}" - } + "commands": { + "checkValidity": { + "inBranch": { + "error403": "Erreur 403: {{- repo.owner}}/{{- repo.repo}} a été déplacé de manière permanente (depuis {{- branchInfo}}", + "error404": "Erreur 404 : La branche {{- repo.branch}} est introuvable depuis {{- repo.owner}}/{{- repo.repo}}" + }, + "inRepo": { + "error301": "Erreur 301 : {{- repo.owner}}/{{- repo.repo}} a été déplacé de manière permanente", + "error403": "Erreur 403 : Cette action est interdite pour {{- repo.owner}}/{{- repo.repo}}", + "error404": "Erreur 404 : {{- repo.owner}}/{{- repo.repo}} est introuvable" + }, + "rateLimit": { + "command": "Vérifier la limite de requêtes de l'API GitHub", + "limited": "Vous avez atteint la limite de requêtes Github. La limite sera réinitialisée à {{- resetTime}}. minutes.", + "notLimited": "Vous n'êtes pas limité par Github. Vous pouvez encore faire {{- remaining}} requêtes, et la limite sera réinitialisée à {{- resetTime}}." + }, + "repoExistsTestBranch": "Le dépôt {{- repo.owner}}/{{- repo.repo}} existe. Maintenant, nous allons tester la branche {{- repo.branch}}", + "success": "{{- repo.owner}}/{{- repo.repo}} semble valide !", + "title": "Tester la connexion au dépôt configuré" + }, + "copyLink": "Créer un lien vers cette note", + "publisherDeleteClean": "Purger les fichiers dépubliés et supprimés", + "shareActiveFile": "Transférer la note active", + "shareViewFiles": "Transférer {{- viewFile}} avec Github Publisher", + "uploadAllEditedNote": "Rafraîchir toutes les notes publiées", + "uploadAllNewEditedNote": "Rafraîchir les notes publiées et transférer les nouvelles notes", + "uploadAllNotes": "Transférer toutes les notes", + "uploadNewNotes": "Transférer les nouvelles notes" + }, + "common": { + "add": "Ajouter {{- things}}", + "after": "Après", + "attachments": "pièces-jointes", + "before": "Avant", + "cancel": "Annuler", + "close": "Fermer", + "delete": "Supprimer {{- things}}", + "edit": "Éditer {{- things}}", + "error": "Erreur", + "files": "fichiers", + "here": "ici", + "or": "ou", + "path": { + "file": "Nom du fichier", + "folder": "Chemin du dossier", + "full": "Chemin du fichier" + }, + "published": "publiés", + "regex": "regex", + "repository": "Dépôt", + "save": "Sauvegarder", + "shared": "partagés", + "text": "texte", + "warning": "Attention" + }, + "deletion": { + "defaultFolder": "Vous avez besoin d'un dossier par défaut dans les paramètres pour utiliser cette commande.", + "failed": "Échec de la suppression de {{- nb}} notes.", + "noFile": "Aucun fichier n'a été supprimé.", + "rootFolder": "Vous devez configurer un dossier racine dans les paramètres pour utiliser cette commande.", + "success": "Suppression réussie de {{- nb}} fichiers." + }, + "error": { + "dataview": "Impossible de convertir la requête Dataview. Veuillez mettre à jour le module Dataview à la dernière version;", + "errorConfig": "Erreur de configuration pour {{- repo.owner}}/{{- repo.repo}}:{{- repo.branch}}. Merci de vérifier vos paramètres.", + "errorPublish": "Erreur lors de la publication sur {{- repo.owner}}/{{- repo.repo}}:{{- repo.branch}}", + "isEmpty": "{{- what}} est vide.", + "mergeconflic": "La Pull-Request n'est pas fusionnale, vous avez besoin de le faire manuellement.", + "unablePublishMultiNotes": "Impossible de transférer plusieurs notes, quelque chose s'est mal passé.", + "unablePublishNote": "Impossible de transférer {{- file}}, le fichier a été ignoré.", + "whatEmpty": { + "branch": "Branch", + "ghToken": "Github Token", + "owner": "Propriétaire", + "repo": "Dépôt" + } + }, + "informations": { + "foundNoteToSend": "Trouvé {{- nbNotes}} nouvelles notes à transférer.", + "migrating": { + "fileReplace": "Migration du remplacement du nom du fichier au nouveau format...", + "normalFormat": "Migration des paramètres...", + "oldSettings": "Migration des anciens paramètres au nouveau format...", + "subFolder": "Ajout du remplacement du sous-dossier au remplacement de chemin de fichier..." + }, + "noNewNote": "Aucune note à transférer.", + "scanningRepo": "Scan du dépôt, veuillez patienter...", + "sendMessage": "Transfert de {{- nbNotes}} notes vers {{- repo.owner}}/{{- repo.repo}}", + "startingClean": "Début du nettoyage de {{- repo.owner}}/{{- repo.repo}}", + "successfullPublish": "Transfert réussi de {{- nbNotes}} notes vers {{- repo.owner}}/{{- repo.repo}}", + "successPublishOneNote": "Transfert réussi de {{- file}} vers {{- repo.owner}}/{{- repo.repo}}", + "waitingWorkflow": "Maintenant, attente de la fin du workflow..." + }, + "modals": { + "export": { + "copy": "Copier vers le presse-papier", + "desc": "Exporter les paramètres vers un fichier ou dans le presse-papier.", + "download": "Télécharger", + "title": "Exporter les paramètres" + }, + "import": { + "desc": "Importer des paramètres depuis un fichier ou un texte. Cela écrasera vos paramètres actuels (sauf le nom du dépôt, le nom d'utilisateur et votre token)", + "error": { + "isEmpty": "la configuration est vide", + "span": "Erreur lors de l'importation de la configuration :" + }, + "importFromFile": "Import depuis le fichier", + "paste": "Coller la configuration ici...", + "title": "Importer des paramètres" + }, + "listChangedFiles": { + "added": "Ajouté", + "deleted": "Supprimé", + "edited": "Modifié", + "error": "Erreurs", + "notDeleted": "Impossible à supprimer", + "title": "Liste des fichiers édités sur le dépôt", + "unpublished": "Impossible à publier" + } + }, + "publish": { + "branch": { + "alreadyExists": "La branche {{- branchName}} sur {{- repo.owner}}/{{- repo.repo}} existe déjà - Utilisation de celle-ci.", + "error": "Erreur avec {{- repo.owner}}/{{- repo.repo}} : {{- error}}", + "prMessage": "Pull-Request [{{- branchName}}] depuis Obsidian", + "success": "La branche a été crée avec succès (status: {{- branchStatus}} sur {{- repo.owner}}/{{- repo.repo}})" + } + }, + "regex": { + "entry": "Valeur à remplacer", + "replace": "Remplacement" + }, + "settings": { + "conversion": { + "dataview": { + "desc": "Convertir les requêtes Dataview en markdown.", + "title": "Dataview" + }, + "desc": "Ces options ne changent pas le contenu du fichier dans votre coffre Obsidian, mais changeront le contenu du fichier publié sur GitHub.", + "hardBreak": { + "desc": "Ajoutez un retour à la ligne Markdown (double espace) après chaque ligne.", + "title": "Saut de ligne strict" + }, + "links": { + "desc": "Vous pouvez empêcher la conversion des liens et conserver le texte alt (ou le nom du fichier) en utilisant la clé frontmatter \"links\" avec la valeur \"false\".", + "folderNote": { + "desc": "Renommer les fichiers en un nom spécifique (défaut : \"index.md\") s'il porte le même nom que leur dossier/catégorie parent (fonctionne aussi si la note est à l'extérieur du dossier).", + "title": "Folder Note" + }, + "internals": { + "desc": "Convertir les liens internes pointant vers les notes publiées vers leur homologue dans le dépôt, sous forme de chemin relatif.", + "title": "Liens internes" + }, + "nonShared": { + "desc": "L'option précédente, mais appliquées aux liens internes pointant vers des notes non-publiées. Désactivé, seul le nom du fichier sera conservé.", + "title": "Conversion des liens internes pointant vers des notes non-publiées" + }, + "slugify": { + "desc": "Normaliser le lien (slug) des liens d'ancrage (pointant vers le titre de la rubrique). Transforme le texte en minuscules. Remplace l'espace par un tiret. Applicable uniquement aux liens d'ancrage dans la syntaxe de lien markdown.", + "title": "Slugifier l'ancre des liens markdown" + }, + "title": "Liens", + "wikilinks": { + "desc": "Conversion des liens wikilinks en liens Markdown, sans en modifier le contenu.", + "title": "Convertir [[WikiLinks]] en [liens](Markdown)" + } + }, + "sectionTitle": "Texte principal", + "tags": { + "desc": "Ceci convertira tous les champs du frontmatter/dataview en tags. Séparez les champs par une virgule.", + "exclude": { + "desc": "Exclusion de champs de la conversion. Séparer les valeurs par une virgule.", + "title": "Exclusion de tags" + }, + "inlineTags": { + "desc": "Ajoute vos inlines tags dans votre bloc frontmatter et converti les tags imbriqués en remplaçant \"/\" par \"_\".", + "title": "Inlines tags" + }, + "title": "Convertir des champs dataview ou frontmatter en tags" + }, + "title": "Conversion du contenu" + }, + "embed": { + "defaultImageFolder": { + "desc": "Pour utiliser un dossier différent de celui par défaut pour les pièces-jointes.", + "title": "Dossier de pièces-jointes par défaut" + }, + "title": "Embed", + "transferImage": { + "desc": "Transférer les pièces-jointes", + "title": "Envoyer les pièces-jointes intégrées dans un fichier dans le dépôt." + }, + "transferMetaFile": { + "desc": "Permet d'envoyer des fichiers en utilisant une clé frontmatter/dataview. Séparer les champs par une virgule.", + "title": "Envoyer des fichiers en utilisant une clé frontmatter/dataview" + }, + "transferNotes": { + "desc": "Envoyer les notes intégrées dans un fichier publié dans le dépôt. Seul les fichiers publiés seront envoyés !", + "title": "Transférer les notes intégrées" + } + }, + "github": { + "apiType": { + "desc": "Choisir entre l'API GitHub ou l'API pour GitHub Entreprise (uniquement pour les utilisateurs de GitHub Enterprise — Utilisateur avancé !).", + "dropdown": { + "enterprise": "Entreprise", + "free": "Free/Pro/Team (défaut)" + }, + "hostname": { + "desc": "Le nom de l'instance Github de votre entreprise.", + "title": "Instance Github Entreprise" + }, + "title": "Type d'API" + }, + "automaticallyMergePR": "Fusionner automatiquement les pull-request", + "branch": { + "desc": "Dans le cas où vous souhaitez utiliser une branche différente de \"main\".", + "title": "Branche principale" + }, + "ghToken": { + "desc": "Un token GitHub avec autorisation de dépôt. Vous pouvez le générer ", + "title": "Token Github" + }, + "repoName": { + "desc": "Le nom du dépôt dans lequel vos fichiers seront transférés.", + "placeholder": "mkdocs-template", + "title": "Nom du dépôt" + }, + "smartRepo": { + "button": "Gérer plus de dépôt", + "modals": { + "desc": "Ces \"autres dépôts\" vous permettent d'utiliser toutes les commandes sur les dépôts ajoutés ci-dessous.", + "frontmatterInfo": "L'utilisation de la clé frontmatter \"shortKey\" avec la \"smartKey\" permet également d'utiliser ce dépôt dans un fichier sans avoir à écrire son chemin.", + "newRepo": "un nouveau dépôt", + "shortcuts": { + "desc": "Ajoute toutes les commandes de ce dépôt dans la palette de commandes", + "title": "Raccourci" + }, + "title": "Gérer d'autres dépôts" + } + }, + "testConnection": "Tester la connexion", + "title": "Configuration GitHub", + "username": { + "desc": "Votre username sur GitHub.", + "title": "Nom d'utilisateur GitHub" + } + }, + "githubWorkflow": { + "autoCleanUp": { + "desc": "Si le plugin doit supprimer de votre dépôt les fichiers dépubliés (arrêt du partage ou suppression).", + "title": "Auto-nettoyage" + }, + "excludedFiles": { + "desc": "Si vous voulez exclure certains dossier ou fichier du nettoyage automatique, définissez leur chemin. Les regex sont acceptées en les encadrant par des slashs. Séparer les valeurs par une virgule.", + "title": "fichiers et dossier exclus" + }, + "githubAction": { + "desc": "Si vous souhaitez activer une action GitHub lorsque le plugin push les fichiers dans le dépôt, il vous faut indiquer le nom du fichier issus du dossier .github/workflows/. Seules les actions activées par un workflow_dispatch sont activées.", + "title": "Nom de l'action GitHub" + }, + "prRequest": { + "desc": "Le message envoyé lorsque la pull-request est fusionnée. Sera toujours suivi par le numéro de la pull-request.", + "error": "Vous ne pouvez pas utiliser une valeur vide pour le message de commit.", + "title": "Message de commit" + }, + "useMetadataExtractor": { + "desc": "Envoyer les fichiers générés par metadata-extractor dans ce dossier.", + "title": "Fichier de metadata-extractor" + } + }, + "help": { + "frontmatter": { + "attachment": { + "folder": "Change le dossier par défaut pour les pièces-jointes.", + "send": "Envoie toutes les pièces-jointes dans le dépôt GitHub." + }, + "autoclean": "Désactive ou active le nettoyage automatique du dépôt GitHub.", + "baselink": { + "base": "Lien de base", + "desc": "Change le lien de base pour la commande de copie de lien. Désactive aussi la suppression de partie de lien. Peut être utilisée en tant qu'objet sous le nom de ", + "remove": "Supprime les parties de lien. À mettre sous forme de liste !" + }, + "convert": { + "enableOrDisable": "Active ou désactive la conversion des liens. En désactivant cette option, vous supprimez les", + "syntax": "syntaxes, tout en gardant le nom du fichier ou son text alternatif." + }, + "dataview": "Convertit les requêtes dataview en markdown.", + "desc": "Il existe quelques clés YAML qui peuvent vous êtes utile. Le code ci-dessous montre les paramètres par défaut, mais n'hésitez pas à le modifier selon vos besoins pour chaque note !", + "embed": { + "remove": "Supprime les notes intégrées du fichier partagés en ne laissant qu'une ligne vide.", + "send": "Envoie les notes intégrées de la note publiées dans le dépôt. Seules les notes partagées seront envoyées !" + }, + "hardBreak": "Convertit tous les sauts de lignes en \"hard break\" markdown.", + "internals": "Convertit les liens internes vers leur homologue du dépôt, sous forme de liens relatifs. Désactivés, les liens seront conservés tels quels.", + "mdlinks": "Convertir tous les liens [[wikilinks]] en [liens](Markdown)", + "nonShared": "Convertit les liens internes pointat vers une notes non publiées vers son futur homologue. Désactivé, le plugin conservera le nom du fichier ou son texte alternatif.", + "path": "Vous pouvez écraser tous les paramètres de chemins en utilisant cette clé. Le chemin sera créée à partir de la racine du dépôt.", + "repo": { + "branch": "Nom de la branche", + "desc": "Changer le dépôt GitHub pour cette note", + "owner": "Pseudo GitHub du propriétaire du dépôt", + "repo": "Nom du dépôt" + }, + "share": "La clé utilisée pour partager une note", + "title": "Aide-mémoire frontmatter", + "titleKey": "Change le titre de la note" + }, + "multiRepoHelp": { + "desc": "Si vous souhaitez envoyer vos notes dans plusieurs dépôt en même temps, vous pouvez utiliser la clé ", + "desc2": "dans votre frontmatter. La valeur de cette clé doit être une liste. Chaque dépôt doit avoir les clés suivantes :", + "exampleDesc": "Le code YAML ci-dessous montre un exemple basé sur vos paramètres.", + "title": "Envoie dans plusieurs dépôt" + }, + "title": "Aide", + "usefulLinks": { + "discussion": "Discussion", + "documentation": "Documentation (en anglais)", + "issue": "Issue", + "links": "https://obsidian-publisher.netlify.app", + "repository": "Dépôt", + "title": "Liens utiles" + } + }, + "plugin": { + "copyLink": { + "baselink": { + "desc": "Permet de créer un lien dans le presse-papier avec cette base. Par défaut : \"https://username.github.io/repo/\"", + "title": "Lien du dépôt/blog" + }, + "command": { + "desc": "Ajouter une commande permettant de copier le lien de la note publiée dans le presse-papier (nécessite de recharger le plugin pour prendre effet)", + "onActivation": "Lien copié dans le presse-papier !" + }, + "desc": "Envoie d'un lien vers la note publiées dans votre presse-papier.", + "linkpathremover": { + "desc": "Supprimer cette partie des liens créés. Séparer par une virgule si plusieurs valeurs doivent être supprimées.", + "title": "Suppression d'une partie du lien" + }, + "title": "Copie de lien" + }, + "editorMenu": { + "desc": "Ajouter une commande de partage dans le menu du clic droit.", + "title": "Menu \"Edition\"" + }, + "embedEditRepo": { + "desc": "Permet d'afficher la liste des fichiers éditer, ajouté, supprimé... Du dépôt principal (dans un modal).", + "title": "Afficher les éditions sur le dépôt" + }, + "excludedFolder": { + "desc": "Les fichiers dans ses dossiers ne seront jamais publiés, quelle que soit l'état de la clé de partage. Séparez les noms de dossier par une virgule.", + "title": "Dossiers exclus" + }, + "fileMenu": { + "desc": "Ajouter une commande de partage dans le menu \"Fichier\"", + "title": "Menu \"Fichier\"" + }, + "logNoticeHeader": { + "desc": "Sur mobile, il peut être difficile de debug le module. Activer cette option pour notifier toutes les erreurs via une notification Obsidian.", + "title": "Notifier toutes les erreurs" + }, + "shareKey": { + "desc": "Clé de partage", + "title": "La clé frontmatter pour publier la note sur le dépôt." + }, + "title": "Paramètres du plugin" + }, + "regexReplacing": { + "empty": "Le remplacement peut être vide pour supprimer l'ensemble de la chaîne de caractère.", + "forbiddenValue": "Le {{- what}} ne peut contenir le caractère : {{- forbiddenChar}}.", + "modal": { + "desc": "Replace des textes dans le fichier par la valeur donnée. Vous pouvez encadrer le texte à remplacer avec \"//\" pour utiliser un regex.", + "title": { + "all": "Remplacement du nom ou du chemin du fichier", + "only": "Remplacement du titre uniquement", + "text": "Remplacement de texte" + } + }, + "momentReplaceRegex": "Éxécuter le remplacement {{- moment}} les autres conversions (dataview, liens internes...)", + "warningPath": "Attention ! Utiliser le caractère \"/\" modifiera le chemin du fichier. Veuillez faire attention avec cette option." + }, + "upload": { + "defaultFolder": { + "desc": "Définir le dossier de réception par défaut. Laisser vide pour utiliser la racine du dépôt.", + "placeholder": "docs", + "title": "Dossier par défaut" + }, + "folderBehavior": { + "desc": "Choisir la hierarchie des dossiers dans le dépôt, en se basant sur une clé frontmatter, un dossier fixe ou la hierarchie des dossiers dans Obsidian.", + "fixedFolder": "Dossier fixé", + "obsidianPath": "Chemin Obsidian", + "title": "Hierarchie des dossiers", + "yaml": "Valeur d'une clé frontmatter" + }, + "frontmatterKey": { + "desc": "Définir le nom de la clé où obtenir le dossier", + "placeholder": "category", + "title": "Clé frontmatter" + }, + "regexFilePathTitle": { + "desc": "Si le texte est entre \"//\", il sera interprété comme une expression régulière. Sinon, il sera interprété comme du texte brut.", + "title": { + "FolderPathTitle": "Éditer le titre et le chemin du dossier (automatiquement)", + "titleOnly": "Éditer le titre (automatiquement)" + } + }, + "rootFolder": { + "desc": "Ajouter ce chemin au dossier définit par la clé frontmatter.", + "title": "Dossier racine" + }, + "title": "Configuration du transfert", + "useFrontmatterTitle": { + "desc": "Utiliser un champ du frontmatter pour générer le nom du fichier. Par défaut, \"title\" est utilisé.", + "title": "Utiliser une clé frontmatter pour définir le titre" + } + } + }, + "statusBar": { + "counter": "{{- msg}} : {{- counter}}/{{- nb}}", + "markedForSharing": "{{- nb}} {{- type}} à partager", + "sharing": "⌛Partage de {{- type}}", + "success": "✅{{- action}} {{- type}}" + } } diff --git a/src/publish/delete.ts b/src/publish/delete.ts index f476701c..63567be8 100644 --- a/src/publish/delete.ts +++ b/src/publish/delete.ts @@ -5,7 +5,7 @@ import { FolderSettings, GitHubPublisherSettings, GithubRepo, - RepoFrontmatter, + RepoFrontmatter, Repository, } from "../settings/interface"; import { FilesManagement } from "./files"; import { Base64 } from "js-base64"; @@ -21,6 +21,7 @@ import i18next from "i18next"; * @param {string} branchName The name of the branch created by the plugin * @param {FilesManagement} filesManagement * @param {RepoFrontmatter[] | RepoFrontmatter} repoFrontmatter + * @param otherRepo * @return {Promise} */ export async function deleteFromGithub( @@ -30,6 +31,7 @@ export async function deleteFromGithub( branchName: string, filesManagement: FilesManagement, repoFrontmatter: RepoFrontmatter[] | RepoFrontmatter, + otherRepo: Repository | null ): Promise { repoFrontmatter = Array.isArray(repoFrontmatter) ? repoFrontmatter @@ -43,6 +45,7 @@ export async function deleteFromGithub( branchName, filesManagement, repo, + otherRepo )); } return deleted[0]; //needed only for main repo (not for repo in frontmatter) @@ -56,6 +59,7 @@ export async function deleteFromGithub( * @param {string} branchName The branch where the file will be deleted * @param {FilesManagement} filesManagement * @param {RepoFrontmatter} repo + * @param otherRepo * @return {Promise} : true if success */ @@ -65,7 +69,8 @@ async function deleteFromGithubOneRepo( octokit: Octokit, branchName: string, filesManagement: FilesManagement, - repo: RepoFrontmatter + repo: RepoFrontmatter, + otherRepo: Repository | null ): Promise { if (!repo.autoclean) return; const getAllFile = await filesManagement.getAllFileFromRepo( @@ -97,7 +102,7 @@ async function deleteFromGithubOneRepo( } return {success: false, deleted: [], undeleted: []}; } - const allSharedFiles = filesManagement.getAllFileWithPath(); + const allSharedFiles = filesManagement.getAllFileWithPath(otherRepo); const allSharedConverted = allSharedFiles.map((file) => { return { converted: file.converted, repo: file.repoFrontmatter }; }); diff --git a/src/publish/files.ts b/src/publish/files.ts index 7f9c4d5e..5a73893d 100644 --- a/src/publish/files.ts +++ b/src/publish/files.ts @@ -5,7 +5,7 @@ import { LinkedNotes, GitHubPublisherSettings, FrontmatterConvert, - RepoFrontmatter, + RepoFrontmatter, Repository, } from "../settings/interface"; import { Octokit } from "@octokit/core"; import { @@ -92,7 +92,7 @@ export class FilesManagement extends Publisher { * @return {ConvertedLink[]} The shared files */ - getAllFileWithPath(): ConvertedLink[] { + getAllFileWithPath(repo: Repository | null): ConvertedLink[] { const files = this.vault.getFiles(); const allFileWithPath: ConvertedLink[] = []; const shareKey = this.settings.plugin.shareKey; @@ -119,6 +119,7 @@ export class FilesManagement extends Publisher { real: file.path, repoFrontmatter: getRepoFrontmatter( this.settings, + repo, frontMatter ), }); diff --git a/src/publish/upload.ts b/src/publish/upload.ts index 0c7a7849..9bbc2595 100644 --- a/src/publish/upload.ts +++ b/src/publish/upload.ts @@ -264,7 +264,8 @@ export default class Publisher { linkedFiles, this.plugin, this.vault, - repoFrontmatter + repoFrontmatter, + shortRepo ); const path = getReceiptFolder( file, @@ -325,6 +326,7 @@ export default class Publisher { * @param {boolean} deepScan if the plugin must check the embed notes too. * @param {FilesManagement} shareFiles FilesManagement class * @param {boolean} autoclean If the autoclean must be done right after the file upload + * @param shortRepo */ async uploadOnMultipleRepo( @@ -365,7 +367,8 @@ export default class Publisher { this.octokit, branchName, shareFiles, - repo + repo, + shortRepo ); } return { diff --git a/src/settings.ts b/src/settings.ts index 48e84771..371f2b6f 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -259,7 +259,7 @@ export class GithubPublisherSettingsTab extends PluginSettingTab { ) .addButton((button) => button - .setButtonText("Add new repository") + .setButtonText(i18next.t("settings.github.smartRepo.button")) .onClick(async () => { this.plugin.settings.github.otherRepo ??= []; new ModalAddingNewRepository(this.app, this.plugin.settings, this.branchName, this.plugin, (result => { diff --git a/src/settings/modals/addNewRepo.ts b/src/settings/modals/addNewRepo.ts index bf5947f7..67b336b1 100644 --- a/src/settings/modals/addNewRepo.ts +++ b/src/settings/modals/addNewRepo.ts @@ -29,8 +29,9 @@ export class ModalAddingNewRepository extends Modal { const {contentEl} = this; contentEl.empty(); - contentEl.createEl("h2", {text:"Add more repository"}); - contentEl.createEl("p", {text: "With these, you can create commands to send files to other repositories. Without configured them in a file. You can also use them with \"shortRepo: smartkey\", in the frontmatter."}); + contentEl.createEl("h2", {text: i18next.t("settings.github.smartRepo.modals.title")}); + contentEl.createEl("p", {text: i18next.t("settings.github.smartRepo.modals.desc")}); + contentEl.createEl("p", {text: i18next.t("settings.github.smartRepo.modals.frontmatterInfo")}); const repository: Repository[] = this.settings.github.otherRepo ? this.settings.github.otherRepo : []; @@ -55,7 +56,7 @@ export class ModalAddingNewRepository extends Modal { .addButton((button) => { button - .setButtonText(i18next.t("common.add", {things: i18next.t("common.repository").toLowerCase()})) + .setButtonText(i18next.t("common.add", {things: i18next.t("settings.github.smartRepo.modals.newRepo").toLowerCase()})) .onClick(() => { repository.push(defaultRepository); this.onOpen(); @@ -136,7 +137,7 @@ class ModalEditingRepository extends Modal { onOpen() { const {contentEl} = this; contentEl.empty(); - contentEl.createEl("h2", {text: `Editing ${this.repository.smartKey}`}); + contentEl.createEl("h2", {text: i18next.t("common.edit", {things: this.repository.smartKey})}); new Setting(contentEl) .setName(i18next.t("settings.github.apiType.title") ) @@ -219,8 +220,8 @@ class ModalEditingRepository extends Modal { }) ); new Setting(contentEl) - .setName("Shortcuts") - .setDesc("Create commands for this repository") + .setName(i18next.t("settings.github.smartRepo.modals.shortcuts.title")) + .setDesc(i18next.t("settings.github.smartRepo.modals.shortcuts.desc")) .addToggle((toggle) => toggle .setValue(this.repository.createShortcuts) diff --git a/src/settings/modals/commandsModals.ts b/src/settings/modals/commandsModals.ts index 85ef85c9..87674b43 100644 --- a/src/settings/modals/commandsModals.ts +++ b/src/settings/modals/commandsModals.ts @@ -2,6 +2,14 @@ import {App, FuzzySuggestModal } from "obsidian"; import {FolderSettings, Repository} from "../interface"; import GithubPublisherPlugin from "../../main"; import i18next from "i18next"; +import { + createLinkOnActiveFile, + deleteCommands, repositoryValidityActiveFile, shareActiveFile, + shareEditedOnly, + uploadAllEditedNotes, + uploadAllNotes, + uploadNewNotes +} from "../../commands/plugin_commands"; interface GithubPublisherCommands { commands: string; @@ -92,28 +100,28 @@ export class CommandsModals extends FuzzySuggestModal { onChooseItem(item: GithubPublisherCommands, evt: MouseEvent | KeyboardEvent): void { switch (item.commands) { case "shareAllMarkedNotes": - this.plugin.uploadAllNotes(this.repo, this.branchName); + uploadAllNotes(this.plugin, this.repo, this.branchName); break; case "deleteUnsharedDeletedNotes": - this.plugin.deleteCommands(this.repo, this.branchName); + deleteCommands(this.plugin, this.repo, this.branchName); break; case "shareNewNote": - this.plugin.uploadNewNotes(this.branchName, this.repo); + uploadNewNotes(this.plugin, this.branchName, this.repo); break; case "shareAllEditedNotes": - this.plugin.uploadAllEditedNotes(this.branchName, this.repo); + uploadAllEditedNotes(this.plugin, this.branchName, this.repo); break; case "shareOnlyEdited": - this.plugin.shareEditedOnly(this.branchName, this.repo); + shareEditedOnly(this.branchName, this.repo, this.plugin); break; case "shareOneNote": - this.plugin.shareActiveFile(this.repo, this.branchName); + shareActiveFile(this.plugin, this.repo, this.branchName); break; case "createLink": - this.plugin.createLinkOnActiveFile(this.branchName, this.repo); + createLinkOnActiveFile(this.branchName, this.repo, this.plugin); break; case "checkRepositoryValidity": - this.plugin.repositoryValidityActiveFile(this.branchName, this.repo); + repositoryValidityActiveFile(this.plugin, this.branchName, this.repo); break; } console.log(`run command ${item.commands}`); diff --git a/tests/fixtures/githubPublisherSettings.ts b/tests/fixtures/githubPublisherSettings.ts index 0e506f1a..71cec4df 100644 --- a/tests/fixtures/githubPublisherSettings.ts +++ b/tests/fixtures/githubPublisherSettings.ts @@ -1,4 +1,4 @@ -import {FolderSettings, GitHubPublisherSettings, GithubTiersVersion} from "../../plugin/settings/interface"; +import {FolderSettings, GitHubPublisherSettings, GithubTiersVersion} from "../../src/settings/interface"; const settings: GitHubPublisherSettings = { github: { @@ -15,6 +15,7 @@ const settings: GitHubPublisherSettings = { customCommitMsg: "", workflowName: "", }, + otherRepo: [], }, upload: { behavior: FolderSettings.fixed,