diff --git a/l10n/bundle.l10n.de.json b/l10n/bundle.l10n.de.json index e166a47e..da5390b0 100644 --- a/l10n/bundle.l10n.de.json +++ b/l10n/bundle.l10n.de.json @@ -21,51 +21,37 @@ "common.support": "Support", "common.remove.value": "{0} entfernen", "common.error.message": "Entschuldigung, etwas ist schiefgelaufen.", - "developer.title": "Entwicklermodus", "developer.reload.title": "Dashboard neu laden", "developer.reload.label": "Neu laden", "developer.devTools.title": "Entwicklertools öffnen", "developer.devTools.label": "DevTools", - "field.required": "Pflichtfeld", "field.unknown": "Unbekanntes Feld", - "dashboard.chatbot.answer.answer": "Antwort", "dashboard.chatbot.answer.resources": "Ressourcen", "dashboard.chatbot.answer.warning": "Warnung: Antworten können falsch sein. Im Zweifelsfall konsultieren Sie bitte die Dokumentation.", - "dashboard.chatbot.chatbot.loading": "Assistent wird vorbereitet", "dashboard.chatbot.chatbot.ready": "Ich bin bereit, was möchtest du wissen?", - "dashboard.chatbot.chatbox.placeholder": "Wie kann ich Front Matter konfigurieren?", - "dashboard.chatbot.header.heading": "Frag den Front Matter AI", "dashboard.chatbot.header.description": "Unser KI-System, powered by mendable.ai, hat die Dokumentation verarbeitet und kann Ihnen bei Fragen zu Front Matter behilflich sein. Legen Sie los und fragen Sie!", - "dashboard.common.choiceButton.open": "Optionen öffnen", - "dashboard.contents.contentActions.actionMenuButton.title": "Menü", "dashboard.contents.contentActions.menuItem.view": "Anzeigen", "dashboard.contents.contentActions.alert.title": "Löschen: {0}", "dashboard.contents.contentActions.alert.description": "Möchten Sie den Inhalt \"{0}\" wirklich löschen?", - "dashboard.contents.item.invalidTitle": "", "dashboard.contents.item.invalidDescription": "", - "dashboard.contents.list.title": "Titel", "dashboard.contents.list.date": "Datum", "dashboard.contents.list.status": "Status", - "dashboard.contents.overview.noMarkdown": "Kein Markdown vorhanden", "dashboard.contents.overview.noFolders": "Stellen Sie sicher, dass Sie einen Inhaltsordner in Ihrem Projekt registriert haben, damit Front Matter die Inhalte finden kann.", - "dashboard.contents.status.draft": "Entwurf", "dashboard.contents.status.published": "Veröffentlicht", - "dashboard.dataView.dataForm.modify": "Daten bearbeiten", "dashboard.dataView.dataForm.add": "Neue Daten hinzufügen", - "dashboard.dataView.dataView.select": "Wählen Sie Ihren Datentyp", "dashboard.dataView.dataView.title": "Ihre {0} Dateneinträge", "dashboard.dataView.dataView.add": "Neuen Eintrag hinzufügen", @@ -74,49 +60,34 @@ "dashboard.dataView.dataView.getStarted": "Wählen Sie einen Datentyp, um zu beginnen", "dashboard.dataView.dataView.noDataFiles": "Keine Datendateien gefunden", "dashboard.dataView.dataView.getStarted.link": "Lesen Sie mehr, um zu erfahren, wie Sie Datenfiles verwenden können", - "dashboard.dataView.emptyView.heading": "Wählen Sie zuerst Ihren Datentyp aus", - "dashboard.dataView.sortableItem.editButton.title": "\"{0}\" bearbeiten", "dashboard.dataView.sortableItem.deleteButton.title": "\"{0}\" löschen", "dashboard.dataView.sortableItem.alert.title": "Daten-Eintrag löschen", "dashboard.dataView.sortableItem.alert.description": "Sind Sie sicher, dass Sie den Daten-Eintrag löschen möchten?", - "dashboard.errorView.description": "Bitte schließen Sie das Dashboard und versuchen Sie es erneut.", - "dashboard.header.breadcrumb.home": "Startseite", - "dashboard.header.clearFilters.title": "Filter, Gruppierung und Sortierung zurücksetzen", - "dashboard.header.filter.default": "Kein Filter", - "dashboard.header.folders.default": "Alle Typen", "dashboard.header.folders.menuButton.showing": "Anzeige", - "dashboard.header.grouping.option.none": "Keine", "dashboard.header.grouping.option.year": "Jahr", "dashboard.header.grouping.option.draft": "Entwurf/Veröffentlicht", "dashboard.header.grouping.menuButton.label": "Gruppieren nach", - "dashboard.header.navigation.allArticles": "Alle Artikel", "dashboard.header.navigation.published": "Veröffentlicht", "dashboard.header.navigation.draft": "Im Entwurf", - "dashboard.header.header.createContent": "Inhalt erstellen", "dashboard.header.header.createByContentType": "Nach Inhaltstyp erstellen", "dashboard.header.header.createByTemplate": "Nach Vorlage erstellen", - "dashboard.header.pagination.first": "Erste", "dashboard.header.pagination.previous": "Vorherige", "dashboard.header.pagination.next": "Nächste", "dashboard.header.pagination.last": "Letzte", - "dashboard.header.paginationStatus.text": "Zeige {0} bis {1} von {2} Ergebnissen", - "dashboard.header.projectSwitcher.label": "Projekt", - "dashboard.header.refreshDashboard.label": "Dashboard aktualisieren", - "dashboard.header.sorting.lastModified.asc": "Zuletzt geändert (aufsteigend)", "dashboard.header.sorting.lastModified.desc": "Zuletzt geändert (absteigend)", "dashboard.header.sorting.filename.asc": "Nach Dateiname (aufsteigend)", @@ -130,27 +101,21 @@ "dashboard.header.sorting.alt.asc": "Alt-Text (aufsteigend)", "dashboard.header.sorting.alt.desc": "Alt-Text (absteigend)", "dashboard.header.sorting.label": "Sortieren nach", - "dashboard.header.startup.label": "Beim Start öffnen?", - "dashboard.header.tabs.contents": "Inhalte", "dashboard.header.tabs.media": "Medien", "dashboard.header.tabs.snippets": "Snippets", "dashboard.header.tabs.data": "Daten", "dashboard.header.tabs.taxonomies": "Taxonomien", - "dashboard.header.viewSwitch.toGrid": "Zur Rasteransicht wechseln", "dashboard.header.viewSwitch.toList": "Zur Listenansicht wechseln", - "dashboard.layout.sponsor.support.msg": "Unterstützen Sie Front Matter", "dashboard.layout.sponsor.review.label": "Bewerten", "dashboard.layout.sponsor.review.msg": "Bewerten Sie Front Matter", - "dashboard.media.common.title": "Titel", "dashboard.media.common.caption": "Beschriftung", "dashboard.media.common.alt": "Alternativer Text", "dashboard.media.common.size": "Größe", - "dashboard.media.dialog.title": "Details anzeigen", "dashboard.media.panel.close": "Panel schließen", "dashboard.media.metadata.panel.title": "Metadaten aktualisieren", @@ -162,10 +127,8 @@ "dashboard.media.metadata.panel.form.information.modifiedDate": "Zuletzt geändert", "dashboard.media.metadata.panel.form.information.dimensions": "Abmessungen", "dashboard.media.metadata.panel.form.information.folder": "Ordner", - "dashboard.media.folderCreation.hexo.create": "Post-Asset-Ordner erstellen", "dashboard.media.folderCreation.folder.create": "Neuen Ordner erstellen", - "dashboard.media.item.quickAction.insert.field": "Bild in Ihrem Feld \"{0}\" einfügen", "dashboard.media.item.quickAction.insert.markdown": "Bild mit Markdown-Markup einfügen", "dashboard.media.item.quickAction.copy.path": "Medienpfad kopieren", @@ -175,7 +138,6 @@ "dashboard.media.item.menuItem.reveal.media": "Medien anzeigen", "dashboard.media.item.infoDialog.snippet.description": "Wählen Sie das Media-Snippet aus, das für die aktuelle Mediendatei verwendet werden soll.", "dashboard.media.item.alert.delete.description": "Sind Sie sicher, dass Sie die Datei aus dem Ordner {0} löschen möchten?", - "dashboard.media.media.description": "Wählen Sie die Medien-Datei aus, die Sie Ihrem Inhalt hinzufügen möchten.", "dashboard.media.media.dragAndDrop": "Sie können Bilder auch per Drag & Drop von Ihrem Desktop auswählen, nachdem sie hochgeladen wurden.", "dashboard.media.media.folder.upload": "Zu {0} hochladen", @@ -183,17 +145,13 @@ "dashboard.media.media.placeholder": "Keine Medien-Dateien vorhanden. Sie können neue Dateien per Drag & Drop unter Verwendung der [Shift]-Taste hinzufügen.", "dashboard.media.media.contentFolder": "Inhaltsordner", "dashboard.media.media.publicFolder": "Öffentlicher Ordner", - "dashboard.media.mediaHeaderTop.searchbox.placeholder": "In Ordner suchen", - "dashboard.media.mediaSnippetForm.formDialog.title": "Medien einfügen: {0}", "dashboard.media.mediaSnippetForm.formDialog.description": "Fügen Sie die {0}-Mediendatei in den aktuellen Artikel ein", - "dashboard.preview.input.placeholder": "Geben Sie eine URL ein", "dashboard.preview.button.navigate.title": "Navigieren", "dashboard.preview.button.refresh.title": "Aktualisieren", "dashboard.preview.button.open.title": "Öffnen", - "dashboard.snippetsView.item.quickAction.editSnippet": "Snippet bearbeiten", "dashboard.snippetsView.item.quickAction.deleteSnippet": "Snippet löschen", "dashboard.snippetsView.item.quickAction.viewSnippet": "Snippet-Datei anzeigen", @@ -203,7 +161,6 @@ "dashboard.snippetsView.item.edit.formDialog.description": "Bearbeiten Sie das {0}-Snippet", "dashboard.snippetsView.item.alert.title": "Snippet löschen: {0}", "dashboard.snippetsView.item.alert.description": "Sind Sie sicher, dass Sie das {0}-Snippet löschen möchten?", - "dashboard.snippetsView.newForm.snippetInput.title.placeholder": "Titel des Schnipsels", "dashboard.snippetsView.newForm.snippetInput.description.label": "Beschreibung", "dashboard.snippetsView.newForm.snippetInput.description.placeholder": "Beschreibung des Schnipsels", @@ -214,14 +171,12 @@ "dashboard.snippetsView.newForm.snippetInput.isMediaSnippet.checkbox.description": "Verwende diesen Schnipsel, um Medieninhalte in deine Seiten einzufügen.", "dashboard.snippetsView.newForm.snippetInput.docsButton.title": "Erfahre mehr über die Verwendung von Platzhaltern für Medienschnipsel", "dashboard.snippetsView.newForm.snippetInput.docsButton.description": "In unserer Dokumentation zu Medienschnipsel-Platzhaltern erfährst du, welche Platzhalter du verwenden kannst.", - "dashboard.snippetsView.snippets.ariaLabel": "Überschrift der Schnipsel", "dashboard.snippetsView.snippets.button.create": "Neuen Schnipsel erstellen", "dashboard.snippetsView.snippets.select.description": "Wähle den Schnipsel aus, den du deinem Inhalt hinzufügen möchtest.", "dashboard.snippetsView.snippets.empty.message": "Keine Schnipsel gefunden", "dashboard.snippetsView.snippets.readMore": "Erfahre mehr über die Verwendung von Schnipseln", "dashboard.snippetsView.snippets.formDialog.title": "Einen Schnipsel erstellen", - "dashboard.steps.stepsToGetStarted.button.addFolder.title": "Als Inhaltsordner zu Front Matter hinzufügen", "dashboard.steps.stepsToGetStarted.initializeProject.name": "Projekt initialisieren", "dashboard.steps.stepsToGetStarted.initializeProject.description": "Mit der Projektinitialisierung werden die erforderlichen Dateien und Ordner für die Verwendung des Front Matter CMS erstellt. Starte mit einem Klick auf diese Aktion.", @@ -237,15 +192,12 @@ "dashboard.steps.stepsToGetStarted.tags.description": "Jetzt, da Front Matter alle Inhaltsordner kennt, möchtest du alle Tags und Kategorien aus den verfügbaren Inhalten importieren?", "dashboard.steps.stepsToGetStarted.showDashboard.name": "Dashboard anzeigen", "dashboard.steps.stepsToGetStarted.showDashboard.description": "Sobald alle Aktionen abgeschlossen sind, kann das Dashboard geladen werden.", - "dashboard.taxonomyView.button.add.title": "{0} zur Taxonomie hinzufügen", "dashboard.taxonomyView.button.edit.title": "{0} bearbeiten", "dashboard.taxonomyView.button.merge.title": "{0} zusammenführen", "dashboard.taxonomyView.button.move.title": "In eine andere Taxonomie verschieben", "dashboard.taxonomyView.button.delete.title": "{0} löschen", - "dashboard.taxonomyView.taxonomyLookup.button.title": "Inhalte mit {0} in {1} anzeigen", - "dashboard.taxonomyView.taxonomyManager.description": "{0} deiner Website erstellen, bearbeiten und verwalten", "dashboard.taxonomyView.taxonomyManager.button.create": "Neuen {0}-Wert erstellen", "dashboard.taxonomyView.taxonomyManager.table.heading.name": "Name", @@ -253,15 +205,12 @@ "dashboard.taxonomyView.taxonomyManager.table.heading.action": "Aktion", "dashboard.taxonomyView.taxonomyManager.table.row.empty": "Keine {0} gefunden", "dashboard.taxonomyView.taxonomyManager.table.unmapped.title": "In den Einstellungen nicht gefunden", - "dashboard.taxonomyView.taxonomyView.navigationBar.title": "Taxonomie auswählen", "dashboard.taxonomyView.taxonomyView.button.import": "Taxonomie importieren", "dashboard.taxonomyView.taxonomyView.navigationItem.tags": "Tags", "dashboard.taxonomyView.taxonomyView.navigationItem.categories": "Kategorien", - "dashboard.unkownView.title": "Ansicht existiert nicht", "dashboard.unkownView.description": "Du hast anscheinend eine Ansicht geöffnet, die nicht existiert. Bitte öffne das Dashboard erneut.", - "dashboard.welcomeScreen.title": "Verwalte deine statische Website mit Front Matter", "dashboard.welcomeScreen.thanks": "Vielen Dank, dass du Front Matter verwendest!", "dashboard.welcomeScreen.description": "Wir bemühen uns, Front Matter so benutzerfreundlich wie möglich zu gestalten, aber wenn du Fragen oder Vorschläge hast, zögere bitte nicht, uns auf GitHub zu kontaktieren.", @@ -274,61 +223,41 @@ "dashboard.welcomeScreen.actions.heading": "Führe die nächsten Schritte aus, um mit der Erweiterung zu beginnen", "dashboard.welcomeScreen.actions.description": "Du kannst die Erweiterung auch über das Front Matter-Seitenpanel verwenden. Dort findest du die Aktionen, die speziell für deine Seiten ausgeführt werden können.", "dashboard.welcomeScreen.actions.thanks": "Wir hoffen, dass du Freude an Front Matter hast!", - "panel.contentType.contentTypeValidator.title": "Inhaltstyp", "panel.contentType.contentTypeValidator.hint": "Wir haben Unterschiede zwischen dem Inhaltstyp und den Front-Matter-Daten festgestellt. Möchtest du den Inhaltstyp für diesen Inhalt erstellen, aktualisieren oder festlegen?", "panel.contentType.contentTypeValidator.button.create": "Inhaltstyp erstellen", "panel.contentType.contentTypeValidator.button.add": "Fehlende Felder zum Inhaltstyp hinzufügen", "panel.contentType.contentTypeValidator.button.change": "Inhaltstyp der Datei ändern", - "panel.dataBlock.dataBlockField.group.selected.edit": "Bearbeiten: {0}", "panel.dataBlock.dataBlockField.group.selected.create": "Neuen {0} erstellen", "panel.dataBlock.dataBlockField.group.select": "Gruppe auswählen", "panel.dataBlock.dataBlockField.add": "{0} hinzufügen", - "panel.dataBlock.dataBlockRecord.edit": "Datensatz bearbeiten", "panel.dataBlock.dataBlockRecord.delete": "Datensatz löschen", - "panel.dataBlock.dataBlockRecords.label": "Datensätze", - "panel.dataBlock.dataBlockSelector.label": "Blocktyp", - "panel.errorBoundary.fieldBoundary.label": "Fehler beim Anzeigen des Felds", - "panel.fields.choiceField.select": "{0} auswählen", "panel.fields.choiceField.clear": "Wert löschen", - "panel.fields.contentTypeRelationshipField.loading": "Lade mögliche Werte...", - "panel.fields.dateTimeField.button.pick": "Wähle dein Datum", "panel.fields.dateTimeField.time": "Uhrzeit", - "panel.fields.fieldMessage.required": "Das Feld {0} ist erforderlich", - "panel.fields.fileField.delete": "Datei löschen", "panel.fields.fileField.add": "Ihre {0} hinzufügen", - "panel.fields.imageFallback.label": "Das Bild konnte nicht geladen werden", - "panel.fields.listField.edit": "Eintrag bearbeiten", "panel.fields.listField.delete": "Eintrag löschen", - "panel.fields.previewImage.remove": "Bild entfernen", - "panel.fields.previewImageField.add": "Ihre {0} hinzufügen", - "panel.fields.slugField.update": "Aktualisierung verfügbar", "panel.fields.slugField.generate": "Slug generieren", - "panel.fields.textField.ai.message": "Verwenden Sie Front Matter AI, um {0} vorzuschlagen", "panel.fields.textField.ai.generate": "Vorschlag wird generiert...", "panel.fields.textField.loading": "Feld wird geladen", "panel.fields.textField.limit": "Feldgrenze erreicht {0}", - "panel.fields.wrapperField.unknown": "Unbekannter Feldtyp: {0}", - "panel.actions.title": "Aktionen", - "panel.articleDetails.title": "Weitere Details", "panel.articleDetails.type": "Typ", "panel.articleDetails.total": "Gesamt", @@ -337,19 +266,15 @@ "panel.articleDetails.internalLinks": "Interne Links", "panel.articleDetails.externalLinks": "Externe Links", "panel.articleDetails.images": "Bilder", - "panel.baseView.initialize": "Projekt initialisieren", "panel.baseView.actions.title": "Aktionen", "panel.baseView.action.openDashboard": "Dashboard öffnen", "panel.baseView.action.openPreview": "Vorschau öffnen", "panel.baseView.action.createContent": "Inhalt erstellen", "panel.baseView.empty": "Öffnen Sie eine Datei, um weitere Aktionen anzuzeigen", - "panel.fileList.label.singular": "Datei", "panel.fileList.label.plural": "Dateien", - "panel.folderAndFiles.title": "Zuletzt geändert", - "panel.globalSettings.title": " Globale Einstellungen", "panel.globalSettings.action.modifiedDate.label": "Änderungsdatum", "panel.globalSettings.action.modifiedDate.description": "Änderungsdatum automatisch aktualisieren", @@ -359,9 +284,7 @@ "panel.globalSettings.action.preview.placeholder": "Beispiel: {0}", "panel.globalSettings.action.server.label": "Lokaler Serverbefehl", "panel.globalSettings.action.server.placeholder": "Beispiel: {0}", - "panel.metadata.title": "Metadaten", - "panel.otherActions.title": "Weitere Aktionen", "panel.otherActions.writingSettings.enabled": "Schreib-Einstellungen aktiviert", "panel.otherActions.writingSettings.disabled": "Schreib-Einstellungen aktivieren", @@ -372,23 +295,17 @@ "panel.otherActions.documentation": "Dokumentation öffnen", "panel.otherActions.settings": "Einstellungen anzeigen", "panel.otherActions.issue": "Problem melden", - "panel.preview.title": "Vorschau öffnen", - "panel.publishAction.publish": "Veröffentlichen", "panel.publishAction.unpublish": "Zurück zu Entwurf", - "panel.seoDetails.recommended": "Empfohlen", - "panel.seoKeywordInfo.density": "Stichwortdichte {0} *", "panel.seoKeywordInfo.validInfo.label": "Verwendet in Überschrift(en)", "panel.seoKeywordInfo.validInfo.content": "Inhalt", - "panel.seoKeywords.title": "Stichwörter", "panel.seoKeywords.header.keyword": "Stichwort", "panel.seoKeywords.header.details": "Details", "panel.seoKeywords.density": "* Eine Stichwortdichte von 1-1,5 % ist in den meisten Fällen ausreichend.", - "panel.seoStatus.title": "Empfehlungen", "panel.seoStatus.header.property": "Eigenschaft", "panel.seoStatus.header.length": "Länge", @@ -398,24 +315,23 @@ "panel.seoStatus.seoFieldInfo.article": "Artikellänge", "panel.seoStatus.collapsible.title": "SEO-Status", "panel.seoStatus.required": "{0} oder {1} ist erforderlich.", - "panel.slugAction.title": "Slug optimieren", - "panel.spinner.loading": "Laden...", - "panel.startServerbutton.start": "Server starten", "panel.startServerbutton.stop": "Server stoppen", - "panel.tag.add": "{0} zu Ihren Einstellungen hinzufügen", - "panel.tagPicker.inputPlaceholder.empty": "{0} auswählen", "panel.tagPicker.inputPlaceholder.disabled": "Sie haben das Limit von {0} erreicht", "panel.tagPicker.ai.suggest": "Front Matter AI verwenden, um {0} vorzuschlagen", "panel.tagPicker.ai.generating": "Vorschläge werden generiert...", "panel.tagPicker.limit": "Max.: {0}", "panel.tagPicker.unkown": "Unbekanntes Tag hinzufügen", - "panel.tags.tag.warning": "Achtung, dieses Tag \"{0}\" wird nicht in Ihren Einstellungen gespeichert. Sobald es entfernt ist, wird es unwiederbringlich verloren sein.", + "panel.viewPanel.mediaInsert": "Fahren Sie mit dem Medien-Dashboard fort, um das Bild auszuwählen, das Sie einfügen möchten.", + "dashboard.steps.stepsToGetStarted.assetsFolder.name": "Wo befindet sich Ihr Assets-Ordner?", + "dashboard.steps.stepsToGetStarted.assetsFolder.description": "Wählen Sie den Ordner aus, der Ihre Assets enthält. In diesem Ordner werden alle Ihre Mediendateien für Ihre Artikel gespeichert.", + "dashboard.steps.stepsToGetStarted.assetsFolder.public.title": "Verwende den 'public'-Ordner", + "dashboard.steps.stepsToGetStarted.assetsFolder.assets.title": "Verwende den Astro-Assets-Ordner (src/assets)", + "dashboard.steps.stepsToGetStarted.assetsFolder.other.description": "Wenn Sie einen anderen Ordner konfigurieren möchten, können Sie dies manuell in der frontmatter.json-Datei tun." - "panel.viewPanel.mediaInsert": "Fahren Sie mit dem Medien-Dashboard fort, um das Bild auszuwählen, das Sie einfügen möchten." } \ No newline at end of file diff --git a/l10n/bundle.l10n.ja.json b/l10n/bundle.l10n.ja.json index 678f38d8..5df56a6d 100644 --- a/l10n/bundle.l10n.ja.json +++ b/l10n/bundle.l10n.ja.json @@ -21,51 +21,37 @@ "common.support": "サポート", "common.remove.value": "{0}を削除", "common.error.message": "申し訳ありません。エラーが発生しました。", - "developer.title": "開発モード", "developer.reload.title": "ダッシュボードを再読み込み", "developer.reload.label": "再読み込み", "developer.devTools.title": "開発ツールを開く", "developer.devTools.label": "開発ツール", - "field.required": "必須フィールド", "field.unknown": "不明なフィールド", - "dashboard.chatbot.answer.answer": "回答", "dashboard.chatbot.answer.resources": "参考", "dashboard.chatbot.answer.warning": "回答が正しくない場合もあります。内容がおかしいと思われる場合には、公式ドキュメントを確認してください。", - "dashboard.chatbot.chatbot.loading": "アシスタントを起動中", "dashboard.chatbot.chatbot.ready": "準備ができました。何について知りたいですか?", - "dashboard.chatbot.chatbox.placeholder": "Front Matterの設定方法は?", - "dashboard.chatbot.header.heading": "Front Matter AIに質問する", "dashboard.chatbot.header.description": "このAIはmendable.aiをベースに公式ドキュメントがチューニングされており、Front Matter関連のクエリを理解してあなたをアシストします。何でも聞いてください!", - "dashboard.common.choiceButton.open": "オプションを開く", - "dashboard.contents.contentActions.actionMenuButton.title": "メニュー", "dashboard.contents.contentActions.menuItem.view": "開く", "dashboard.contents.contentActions.alert.title": "削除: {0}", "dashboard.contents.contentActions.alert.description": "本当に\"{0}\"を削除しますか?", - "dashboard.contents.item.invalidTitle": "<無効なタイトル>", "dashboard.contents.item.invalidDescription": "<無効なディスクリプション>", - "dashboard.contents.list.title": "タイトル", "dashboard.contents.list.date": "日付", "dashboard.contents.list.status": "ステータス", - "dashboard.contents.overview.noMarkdown": "Markdownファイルはありません", "dashboard.contents.overview.noFolders": "プロジェクト内の記事用フォルダーを登録して、Front Matterが記事を見つけられるようにしてください。", - "dashboard.contents.status.draft": "下書き", "dashboard.contents.status.published": "公開済み", - "dashboard.dataView.dataForm.modify": "エントリーを編集", "dashboard.dataView.dataForm.add": "エントリーを作成", - "dashboard.dataView.dataView.select": "データタイプを選択", "dashboard.dataView.dataView.title": "\"{0}\"のエントリー", "dashboard.dataView.dataView.add": "新規エントリーを追加", @@ -74,49 +60,34 @@ "dashboard.dataView.dataView.getStarted": "データタイプを選択して開始する", "dashboard.dataView.dataView.noDataFiles": "データファイルが見つかりませんでした", "dashboard.dataView.dataView.getStarted.link": "データファイルの利用方法について確認する", - "dashboard.dataView.emptyView.heading": "最初にデータタイプを選んでください", - "dashboard.dataView.sortableItem.editButton.title": "\"{0}\"を編集する", "dashboard.dataView.sortableItem.deleteButton.title": "\"{0}\"を削除する", "dashboard.dataView.sortableItem.alert.title": "データアイテムを削除", "dashboard.dataView.sortableItem.alert.description": "本当にこのデータアイテムを削除しますか?", - "dashboard.errorView.description": "ダッシュボードを一旦閉じてからやり直してください。", - "dashboard.header.breadcrumb.home": "ホーム", - "dashboard.header.clearFilters.title": "フィルター・グループ・並べ替えを解除", - "dashboard.header.filter.default": "なし", - "dashboard.header.folders.default": "全ての記事タイプ", "dashboard.header.folders.menuButton.showing": "表示", - "dashboard.header.grouping.option.none": "なし", "dashboard.header.grouping.option.year": "公開年", "dashboard.header.grouping.option.draft": "下書き/公開済み", "dashboard.header.grouping.menuButton.label": "グループ", - "dashboard.header.navigation.allArticles": "全ての記事", "dashboard.header.navigation.published": "公開済み", "dashboard.header.navigation.draft": "下書き", - "dashboard.header.header.createContent": "新しい記事を作成", "dashboard.header.header.createByContentType": "記事タイプから作成", "dashboard.header.header.createByTemplate": "テンプレートから作成", - "dashboard.header.pagination.first": "最初", "dashboard.header.pagination.previous": "前へ", "dashboard.header.pagination.next": "次へ", "dashboard.header.pagination.last": "最後", - "dashboard.header.paginationStatus.text": "{0}~{1}件目(全{2}件中)を表示中", - "dashboard.header.projectSwitcher.label": "プロジェクト", - "dashboard.header.refreshDashboard.label": "ダッシュボードを再読み込み", - "dashboard.header.sorting.lastModified.asc": "最終更新日(昇順)", "dashboard.header.sorting.lastModified.desc": "最終更新日(降順)", "dashboard.header.sorting.filename.asc": "ファイル名(昇順)", @@ -130,27 +101,21 @@ "dashboard.header.sorting.alt.asc": "代替テキスト(昇順)", "dashboard.header.sorting.alt.desc": "代替テキスト(降順)", "dashboard.header.sorting.label": "並べ替え", - "dashboard.header.startup.label": "起動時に表示", - "dashboard.header.tabs.contents": "記事", "dashboard.header.tabs.media": "メディア", "dashboard.header.tabs.snippets": "スニペット", "dashboard.header.tabs.data": "データ", "dashboard.header.tabs.taxonomies": "タクソノミー", - "dashboard.header.viewSwitch.toGrid": "グリッド表示", "dashboard.header.viewSwitch.toList": "リスト表示", - "dashboard.layout.sponsor.support.msg": "Front Matterをサポートする", "dashboard.layout.sponsor.review.label": "評価する", "dashboard.layout.sponsor.review.msg": "Front Matterを評価する", - "dashboard.media.common.title": "タイトル", "dashboard.media.common.caption": "キャプション", "dashboard.media.common.alt": "代替テキスト", "dashboard.media.common.size": "サイズ", - "dashboard.media.dialog.title": "ファイルの詳細", "dashboard.media.panel.close": "パネルを閉じる", "dashboard.media.metadata.panel.title": "メタデータを編集", @@ -162,10 +127,8 @@ "dashboard.media.metadata.panel.form.information.modifiedDate": "最終更新日", "dashboard.media.metadata.panel.form.information.dimensions": "ディメンション", "dashboard.media.metadata.panel.form.information.folder": "フォルダー", - "dashboard.media.folderCreation.hexo.create": "Assetフォルダーを作成", "dashboard.media.folderCreation.folder.create": "新規フォルダーを作成", - "dashboard.media.item.quickAction.insert.field": "この画像を\"{0}\"フィールドに追加", "dashboard.media.item.quickAction.insert.markdown": "画像をMarkdown記法で挿入", "dashboard.media.item.quickAction.copy.path": "ファイルパスをコピー", @@ -175,7 +138,6 @@ "dashboard.media.item.menuItem.reveal.media": "メディアの場所を表示", "dashboard.media.item.infoDialog.snippet.description": "このメディアに適用するメディア用スニペットを選択してください。", "dashboard.media.item.alert.delete.description": "本当にこのファイルを {0} から削除しますか?", - "dashboard.media.media.description": "記事に挿入するメディアファイルを選択してください。", "dashboard.media.media.dragAndDrop": "デスクトップから画像をドラッグ&ドロップして、アップロード後に選択することもできます。", "dashboard.media.media.folder.upload": "{0}にアップロードする", @@ -183,17 +145,13 @@ "dashboard.media.media.placeholder": "メディアファイルはありません。Shiftキーを押しながら、新規ファイルをドラック&ドロップで追加することができます。", "dashboard.media.media.contentFolder": "記事フォルダー", "dashboard.media.media.publicFolder": "Publicフォルダー", - "dashboard.media.mediaHeaderTop.searchbox.placeholder": "フォルダー内を検索", - "dashboard.media.mediaSnippetForm.formDialog.title": "メディアを挿入: {0}", "dashboard.media.mediaSnippetForm.formDialog.description": "メディアファイル\"{0}\"を現在の記事に挿入する", - "dashboard.preview.input.placeholder": "URLを入力", "dashboard.preview.button.navigate.title": "ナビゲーション", "dashboard.preview.button.refresh.title": "更新", "dashboard.preview.button.open.title": "開く", - "dashboard.snippetsView.item.quickAction.editSnippet": "スニペットを編集", "dashboard.snippetsView.item.quickAction.deleteSnippet": "スニペットを削除", "dashboard.snippetsView.item.quickAction.viewSnippet": "スニペットファイルの表示", @@ -203,7 +161,6 @@ "dashboard.snippetsView.item.edit.formDialog.description": "\"{0}\"スニペットの編集", "dashboard.snippetsView.item.alert.title": "\"{0}\"スニペットを削除", "dashboard.snippetsView.item.alert.description": "本当に\"{0}\"スニペットを削除しますか?", - "dashboard.snippetsView.newForm.snippetInput.title.placeholder": "スニペットのタイトル", "dashboard.snippetsView.newForm.snippetInput.description.label": "概要", "dashboard.snippetsView.newForm.snippetInput.description.placeholder": "スニペットの概要", @@ -214,14 +171,12 @@ "dashboard.snippetsView.newForm.snippetInput.isMediaSnippet.checkbox.description": "このスニペットをメディアファイル挿入時に利用", "dashboard.snippetsView.newForm.snippetInput.docsButton.title": "メディア用スニペットのプレースホルダーについて読む", "dashboard.snippetsView.newForm.snippetInput.docsButton.description": "スニペットに設定可能なプレースホルダーをドキュメントで確認", - "dashboard.snippetsView.snippets.ariaLabel": "スニペット ヘッダー", "dashboard.snippetsView.snippets.button.create": "新規スニペットを作成", "dashboard.snippetsView.snippets.select.description": "挿入するスニペットを選択してください。", "dashboard.snippetsView.snippets.empty.message": "スニペットはありません", "dashboard.snippetsView.snippets.readMore": "スニペットの使い方を読む", "dashboard.snippetsView.snippets.formDialog.title": "新規スニペットを作成", - "dashboard.steps.stepsToGetStarted.button.addFolder.title": "Front Matterに記事フォルダーとして登録", "dashboard.steps.stepsToGetStarted.initializeProject.name": "プロジェクトの初期設定", "dashboard.steps.stepsToGetStarted.initializeProject.description": "Front Matter CMSに必要な設定ファイルを作成します。クリックして開始してください。", @@ -237,15 +192,12 @@ "dashboard.steps.stepsToGetStarted.tags.description": "Front Matterに記事用フォルダーが登録されました。記事から全てのタグとカテゴリーをインポートしますか?", "dashboard.steps.stepsToGetStarted.showDashboard.name": "ダッシュボードを開く", "dashboard.steps.stepsToGetStarted.showDashboard.description": "全ての設定が終わると、ダッシュボードが表示できるようになります。", - "dashboard.taxonomyView.button.add.title": "\"{0}\"をタクソノミーに追加", "dashboard.taxonomyView.button.edit.title": "\"{0}\"を編集", "dashboard.taxonomyView.button.merge.title": "\"{0}\"をマージ", "dashboard.taxonomyView.button.move.title": "他のタクソノミーへ移行", "dashboard.taxonomyView.button.delete.title": "\"{0}\"を削除", - "dashboard.taxonomyView.taxonomyLookup.button.title": "{1}\"{0}\"の記事一覧を表示", - "dashboard.taxonomyView.taxonomyManager.description": "サイト内{0}の新規作成・編集・コマンド", "dashboard.taxonomyView.taxonomyManager.button.create": "新規{0}を作成", "dashboard.taxonomyView.taxonomyManager.table.heading.name": "名前", @@ -253,15 +205,12 @@ "dashboard.taxonomyView.taxonomyManager.table.heading.action": "コマンド", "dashboard.taxonomyView.taxonomyManager.table.row.empty": "{0}はありません", "dashboard.taxonomyView.taxonomyManager.table.unmapped.title": "設定ファイルに見つかりません", - "dashboard.taxonomyView.taxonomyView.navigationBar.title": "タクソノミーを選択", "dashboard.taxonomyView.taxonomyView.button.import": "タクソノミーをインポート", "dashboard.taxonomyView.taxonomyView.navigationItem.tags": "タグ", "dashboard.taxonomyView.taxonomyView.navigationItem.categories": "カテゴリー", - "dashboard.unkownView.title": "表示出来る画面がありません", "dashboard.unkownView.description": "存在しない画面で終了してしまったようです。ダッシュボードを再度開きなおしてください。", - "dashboard.welcomeScreen.title": "Front Matterで静的サイトを管理しよう", "dashboard.welcomeScreen.thanks": "Front Matterをお使いいただきありがとうございます!", "dashboard.welcomeScreen.description": "私たちはFront Matterをより使いやすくするため、日々努力しています。ご質問やご提案など、GitHubまでお気軽にお問い合わせください。", @@ -274,61 +223,41 @@ "dashboard.welcomeScreen.actions.heading": "以下の手順に従って、この拡張機能をスタートさせてください。", "dashboard.welcomeScreen.actions.description": "サイドパネルからもFront Matterを利用できます。サイドパネルでは、各コンテンツに合った具体的なコマンドが実行可能です。", "dashboard.welcomeScreen.actions.thanks": "Front Matterをお楽しみください!", - "panel.contentType.contentTypeValidator.title": "記事タイプ", "panel.contentType.contentTypeValidator.hint": "記事タイプのフィールドは設定と異なります。この記事の記事タイプを、作成・更新または設定しますか?", "panel.contentType.contentTypeValidator.button.create": "新しい記事タイプを作成", "panel.contentType.contentTypeValidator.button.add": "この記事タイプの設定にないフィールドを追加", "panel.contentType.contentTypeValidator.button.change": "このファイルの記事タイプを変更", - "panel.dataBlock.dataBlockField.group.selected.edit": "編集: {0}", "panel.dataBlock.dataBlockField.group.selected.create": "新規{0}を作成", "panel.dataBlock.dataBlockField.group.select": "グループを選択", "panel.dataBlock.dataBlockField.add": "{0}を追加", - "panel.dataBlock.dataBlockRecord.edit": "レコードを編集", "panel.dataBlock.dataBlockRecord.delete": "レコードを削除", - "panel.dataBlock.dataBlockRecords.label": "レコード", - "panel.dataBlock.dataBlockSelector.label": "ブロックタイプ", - "panel.errorBoundary.fieldBoundary.label": "フィールドの表示に失敗しました", - "panel.fields.choiceField.select": "{0}を選択", "panel.fields.choiceField.clear": "値をクリア", - "panel.fields.contentTypeRelationshipField.loading": "読み込み中...", - "panel.fields.dateTimeField.button.pick": "日付を選択", "panel.fields.dateTimeField.time": "時刻", - "panel.fields.fieldMessage.required": "{0}は必須フィールドです", - "panel.fields.fileField.delete": "ファイルを削除", "panel.fields.fileField.add": "{0}を追加", - "panel.fields.imageFallback.label": "画像を読み込めませんでした。", - "panel.fields.listField.edit": "レコードを編集", "panel.fields.listField.delete": "レコードを削除", - "panel.fields.previewImage.remove": "画像を削除", - "panel.fields.previewImageField.add": "{0}を追加", - "panel.fields.slugField.update": "更新が可能", "panel.fields.slugField.generate": "スラッグを生成", - "panel.fields.textField.ai.message": "Front Matter AIに{0}を提案してもらう", "panel.fields.textField.ai.generate": "提案を生成中...", "panel.fields.textField.loading": "読み込み中", "panel.fields.textField.limit": "値が上限を超えています。{0}", - "panel.fields.wrapperField.unknown": "不明なフィールド: {0}", - "panel.actions.title": "コマンド", - "panel.articleDetails.title": "詳細", "panel.articleDetails.type": "項目", "panel.articleDetails.total": "数", @@ -337,19 +266,15 @@ "panel.articleDetails.internalLinks": "内部リンク", "panel.articleDetails.externalLinks": "外部リンク", "panel.articleDetails.images": "画像", - "panel.baseView.initialize": "プロジェクトの初期設定", "panel.baseView.actions.title": "コマンド", "panel.baseView.action.openDashboard": "ダッシュボードを開く", "panel.baseView.action.openPreview": "プレビューを開く", "panel.baseView.action.createContent": "新しい記事を作成", "panel.baseView.empty": "他の操作を見るには、ファイルを開いてください。", - "panel.fileList.label.singular": "ファイル", "panel.fileList.label.plural": "ファイル", - "panel.folderAndFiles.title": "最近の更新", - "panel.globalSettings.title": "一般設定", "panel.globalSettings.action.modifiedDate.label": "最終更新日", "panel.globalSettings.action.modifiedDate.description": "最終更新日を自動で更新", @@ -359,9 +284,7 @@ "panel.globalSettings.action.preview.placeholder": "例: {0}", "panel.globalSettings.action.server.label": "ローカルサーバーのコマンド", "panel.globalSettings.action.server.placeholder": "例: {0}", - "panel.metadata.title": "メタデータ", - "panel.otherActions.title": "他のコマンド", "panel.otherActions.writingSettings.enabled": "ライティング設定が有効", "panel.otherActions.writingSettings.disabled": "ライティング設定を有効化", @@ -372,23 +295,17 @@ "panel.otherActions.documentation": "ドキュメントを開く", "panel.otherActions.settings": "設定方法の概要", "panel.otherActions.issue": "問題を報告", - "panel.preview.title": "プレビューを表示", - "panel.publishAction.publish": "公開", "panel.publishAction.unpublish": "下書きに戻す", - "panel.seoDetails.recommended": "🚧: Recommended", - "panel.seoKeywordInfo.density": "キーワード出現率 {0} *", "panel.seoKeywordInfo.validInfo.label": "見出しへの利用", "panel.seoKeywordInfo.validInfo.content": "本文", - "panel.seoKeywords.title": "キーワード", "panel.seoKeywords.header.keyword": "キーワード", "panel.seoKeywords.header.details": "詳細", "panel.seoKeywords.density": "* キーワード出現率は通常1~1.5%で十分です。", - "panel.seoStatus.title": "推奨項目", "panel.seoStatus.header.property": "項目", "panel.seoStatus.header.length": "長さ", @@ -398,24 +315,22 @@ "panel.seoStatus.seoFieldInfo.article": "記事の長さ", "panel.seoStatus.collapsible.title": "SEO対策", "panel.seoStatus.required": "{0}か{1}は必須です。", - "panel.slugAction.title": "スラッグを最適化", - "panel.spinner.loading": "読み込み中...", - "panel.startServerbutton.start": "サーバーを起動", "panel.startServerbutton.stop": "サーバーを停止", - "panel.tag.add": "\"{0}\"を設定に追加", - "panel.tagPicker.inputPlaceholder.empty": "{0}を選択", "panel.tagPicker.inputPlaceholder.disabled": "{0}の上限数に達しました", "panel.tagPicker.ai.suggest": "Front Matter AIに{0}を提案してもらう", "panel.tagPicker.ai.generating": "提案を生成中...", "panel.tagPicker.limit": "上限数: {0}", "panel.tagPicker.unkown": "不明なタグを追加", - "panel.tags.tag.warning": "\"{0}\"は設定に保存されていません。削除すると復元できませんのでご注意ください。", - - "panel.viewPanel.mediaInsert": "ダッシュボードのメディア管理画面から、利用したい画像を選択してください。" + "panel.viewPanel.mediaInsert": "ダッシュボードのメディア管理画面から、利用したい画像を選択してください。", + "dashboard.steps.stepsToGetStarted.assetsFolder.name": "アセットフォルダーの場所はどこですか?", + "dashboard.steps.stepsToGetStarted.assetsFolder.description": "記事のメディアファイルを保存するためのフォルダーを選択してください。", + "dashboard.steps.stepsToGetStarted.assetsFolder.public.title": "'public'フォルダーを使用する", + "dashboard.steps.stepsToGetStarted.assetsFolder.assets.title": "Astroアセットフォルダー(src/assets)を使用する", + "dashboard.steps.stepsToGetStarted.assetsFolder.other.description": "別のフォルダを設定する場合は、frontmatter.jsonファイルで手動で行うことができます。" } \ No newline at end of file diff --git a/l10n/bundle.l10n.json b/l10n/bundle.l10n.json index 1505d6b8..80226bea 100644 --- a/l10n/bundle.l10n.json +++ b/l10n/bundle.l10n.json @@ -229,6 +229,11 @@ "dashboard.steps.stepsToGetStarted.framework.description": "Select your site-generator or framework to prefill some of the recommended settings.", "dashboard.steps.stepsToGetStarted.framework.select": "Select your framework", "dashboard.steps.stepsToGetStarted.framework.select.other": "other", + "dashboard.steps.stepsToGetStarted.assetsFolder.name": "What is your assets folder?", + "dashboard.steps.stepsToGetStarted.assetsFolder.description": "Select the folder containing your assets. This folder will be used to store all your media files for your articles.", + "dashboard.steps.stepsToGetStarted.assetsFolder.public.title": "Use the 'public' folder", + "dashboard.steps.stepsToGetStarted.assetsFolder.assets.title": "Use the Astro assets folder (src/assets)", + "dashboard.steps.stepsToGetStarted.assetsFolder.other.description": "In case you want to configure another folder, you can do this manually in the frontmatter.json file.", "dashboard.steps.stepsToGetStarted.contentFolders.name": "Register content folder(s)", "dashboard.steps.stepsToGetStarted.contentFolders.description": "Add one of the folders we found in your project as a content folder. Once a folder is set, Front Matter can be used to list all contents and allow you to create content.", "dashboard.steps.stepsToGetStarted.contentFolders.label": "Folders containing content:", diff --git a/package.json b/package.json index fdf6f80e..fc6432e5 100644 --- a/package.json +++ b/package.json @@ -335,7 +335,18 @@ "scope": "Content" }, "frontMatter.content.publicFolder": { - "type": "string", + "type": ["string", "object"], + "properties": { + "path": { + "type": "string", + "description": "%setting.frontMatter.content.publicFolder.properties.path.description%" + }, + "relative": { + "type": "boolean", + "description": "%setting.frontMatter.content.publicFolder.properties.relative.description%", + "default": false + } + }, "default": "", "markdownDescription": "%setting.frontMatter.content.publicFolder.markdownDescription%", "scope": "Content" diff --git a/package.nls.de.json b/package.nls.de.json index 9f7e30c3..58ee7953 100644 --- a/package.nls.de.json +++ b/package.nls.de.json @@ -81,6 +81,8 @@ "setting.frontMatter.content.placeholders.items.properties.value.description": "Der Wert des Platzhalters", "setting.frontMatter.content.placeholders.items.properties.script.description": "Das Skript, das ausgeführt wird, um den Wert des Platzhalters zu erhalten", "setting.frontMatter.content.publicFolder.markdownDescription": "Geben Sie den Ordnernamen an, in dem sich alle Ihre Ressourcen befinden. Beispielsweise ist dies im Falle von Hugo der Ordner `static`. [Dokumentation prüfen](https://frontmatter.codes/docs/settings/overview#frontmatter.content.publicfolder)", + "setting.frontMatter.content.publicFolder.properties.path.description": "Geben Sie den Pfad des Assets-Ordners an.", + "setting.frontMatter.content.publicFolder.properties.relative.description": "Definiert, ob der Pfad zu Ihren Medien-Dateien relativ zur Inhaltsdatei sein soll.", "setting.frontMatter.snippets.wrapper.enabled.markdownDescription": "Geben Sie an, ob Sie die Snippets umschließen möchten. [Dokumentation prüfen](https://frontmatter.codes/docs/settings/overview#frontMatter.snippets.wrapper.enabled)", "setting.frontMatter.content.snippets.markdownDescription": "Definieren Sie die Snippets, die Sie in Ihrem Inhalt verwenden möchten. [Dokumentation prüfen](https://frontmatter.codes/docs/settings/overview#frontmatter.content.snippets)", "setting.frontMatter.content.sorting.markdownDescription": "Definieren Sie die Sortieroptionen für Ihren Dashboard-Inhalt. [Dokumentation prüfen](https://frontmatter.codes/docs/settings/overview#frontmatter.content.sorting)", diff --git a/package.nls.ja.json b/package.nls.ja.json index 103c0db9..ae339a93 100644 --- a/package.nls.ja.json +++ b/package.nls.ja.json @@ -79,6 +79,8 @@ "setting.frontMatter.content.placeholders.items.properties.value.description": "🚧: The placeholder its value", "setting.frontMatter.content.placeholders.items.properties.script.description": "🚧: The script to execute to get the value of the placeholder", "setting.frontMatter.content.publicFolder.markdownDescription": "アセットが保存されているフォルダーを設定します。例えば、Hugoでは`static`フォルダーです。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.content.publicfolder)", + "setting.frontMatter.content.publicFolder.properties.path.description": "アセットフォルダーのパスを指定します。", + "setting.frontMatter.content.publicFolder.properties.relative.description": "メディアファイルへのパスがコンテンツファイルに対して相対的であるかを定義します。", "setting.frontMatter.snippets.wrapper.enabled.markdownDescription": "スニペット挿入時にコメントでラップします。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontMatter.snippets.wrapper.enabled)", "setting.frontMatter.content.snippets.markdownDescription": "記事中に使用するスニペットを設定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.content.snippets)", "setting.frontMatter.content.sorting.markdownDescription": "ダッシュボード上での記事の並べ替えオプションを追加します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.content.sorting)", diff --git a/package.nls.json b/package.nls.json index 516f69d1..966902ee 100644 --- a/package.nls.json +++ b/package.nls.json @@ -79,6 +79,8 @@ "setting.frontMatter.content.placeholders.items.properties.value.description": "The placeholder its value", "setting.frontMatter.content.placeholders.items.properties.script.description": "The script to execute to get the value of the placeholder", "setting.frontMatter.content.publicFolder.markdownDescription": "Specify the folder name where all your assets are located. For instance in Hugo this is the `static` folder. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.content.publicfolder)", + "setting.frontMatter.content.publicFolder.properties.path.description": "Specify the path of the assets folder", + "setting.frontMatter.content.publicFolder.properties.relative.description": "Defines if the path to your media files be relative to the content file?", "setting.frontMatter.snippets.wrapper.enabled.markdownDescription": "Specify if you want to wrap the snippets. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontMatter.snippets.wrapper.enabled)", "setting.frontMatter.content.snippets.markdownDescription": "Define the snippets you want to use in your content. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.content.snippets)", "setting.frontMatter.content.sorting.markdownDescription": "Define the sorting options for your dashboard content. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.content.sorting)", diff --git a/src/commands/Folders.ts b/src/commands/Folders.ts index 0778b112..c5ebc98b 100644 --- a/src/commands/Folders.ts +++ b/src/commands/Folders.ts @@ -9,7 +9,7 @@ import { } from './../constants'; import { commands, Uri, workspace, window } from 'vscode'; import { basename, dirname, join, relative, sep } from 'path'; -import { ContentFolder, FileInfo, FolderInfo } from '../models'; +import { ContentFolder, FileInfo, FolderInfo, StaticFolder } from '../models'; import uniqBy = require('lodash.uniqby'); import { Template } from './Template'; import { Notifications } from '../helpers/Notifications'; @@ -56,13 +56,6 @@ export class Folders { ); } - if (startPath.includes(STATIC_FOLDER_PLACEHOLDER.astro.placeholder)) { - startPath = startPath.replace( - STATIC_FOLDER_PLACEHOLDER.astro.placeholder, - STATIC_FOLDER_PLACEHOLDER.astro.assetsFolder - ); - } - const folderName = await window.showInputBox({ title: `Add media folder`, prompt: `Which name would you like to give to your folder (use "/" to create multi-level folders)?`, @@ -179,26 +172,32 @@ export class Folders { * @returns */ public static getStaticFolderRelativePath(): string | undefined { - let staticFolder = Settings.get(SETTING_CONTENT_STATIC_FOLDER); + const staticFolder = Settings.get(SETTING_CONTENT_STATIC_FOLDER); + + let assetFolder: string | undefined; + + if (staticFolder && typeof staticFolder !== 'string' && staticFolder.path) { + assetFolder = staticFolder.path; + } else if (staticFolder && typeof staticFolder === 'string') { + assetFolder = staticFolder; + } if ( - staticFolder && - (staticFolder.includes(WORKSPACE_PLACEHOLDER) || - staticFolder === '/' || - staticFolder === './') + assetFolder && + (assetFolder.includes(WORKSPACE_PLACEHOLDER) || assetFolder === '/' || assetFolder === './') ) { - staticFolder = - staticFolder === '/' || staticFolder === './' + assetFolder = + assetFolder === '/' || assetFolder === './' ? Folders.getAbsFilePath(WORKSPACE_PLACEHOLDER) - : Folders.getAbsFilePath(staticFolder); + : Folders.getAbsFilePath(assetFolder); const wsFolder = Folders.getWorkspaceFolder(); if (wsFolder) { - const relativePath = relative(parseWinPath(wsFolder.fsPath), parseWinPath(staticFolder)); + const relativePath = relative(parseWinPath(wsFolder.fsPath), parseWinPath(assetFolder)); return relativePath === '' ? '/' : relativePath; } } - return staticFolder; + return assetFolder; } /** diff --git a/src/constants/FrameworkDetectors.ts b/src/constants/FrameworkDetectors.ts index ba3cccc9..b8913e30 100644 --- a/src/constants/FrameworkDetectors.ts +++ b/src/constants/FrameworkDetectors.ts @@ -3,7 +3,7 @@ export const FrameworkDetectors = [ framework: { name: 'astro', dist: 'dist', - static: 'public', + static: ['public', 'src/assets'], build: 'npm run build', server: 'http://localhost:3000' }, diff --git a/src/constants/StaticFolderPlaceholder.ts b/src/constants/StaticFolderPlaceholder.ts index 129c0a3e..14c965c0 100644 --- a/src/constants/StaticFolderPlaceholder.ts +++ b/src/constants/StaticFolderPlaceholder.ts @@ -2,9 +2,5 @@ export const STATIC_FOLDER_PLACEHOLDER = { hexo: { postsFolder: 'source/_posts', placeholder: 'hexo:post_asset_folder' - }, - astro: { - placeholder: 'astro:assets', - assetsFolder: 'src/assets' } }; diff --git a/src/dashboardWebView/DashboardMessage.ts b/src/dashboardWebView/DashboardMessage.ts index a1427074..5f3018f6 100644 --- a/src/dashboardWebView/DashboardMessage.ts +++ b/src/dashboardWebView/DashboardMessage.ts @@ -12,6 +12,7 @@ export enum DashboardMessage { initializeProject = 'initializeProject', setFramework = 'setFramework', addFolder = 'addFolder', + addAssetsFolder = 'addAssetsFolder', // Content dashboard getData = 'getData', diff --git a/src/dashboardWebView/components/Header/Breadcrumb.tsx b/src/dashboardWebView/components/Header/Breadcrumb.tsx index 6ab98499..ba3a5245 100644 --- a/src/dashboardWebView/components/Header/Breadcrumb.tsx +++ b/src/dashboardWebView/components/Header/Breadcrumb.tsx @@ -33,12 +33,8 @@ export const Breadcrumb: React.FunctionComponent = ( const { wsFolder, staticFolder, contentFolders } = settings; const isValid = (folderPath: string) => { - let crntStaticFolder = staticFolder; - if (staticFolder === STATIC_FOLDER_PLACEHOLDER.astro.placeholder) { - crntStaticFolder = STATIC_FOLDER_PLACEHOLDER.astro.assetsFolder; - } - if (crntStaticFolder) { - const staticPath = parseWinPath(join(wsFolder, crntStaticFolder)) as string; + if (staticFolder) { + const staticPath = parseWinPath(join(wsFolder, staticFolder)) as string; const relPath = folderPath.replace(staticPath, '') as string; if (relPath.length > 1 && folderPath.startsWith(staticPath)) { diff --git a/src/dashboardWebView/components/Media/Media.tsx b/src/dashboardWebView/components/Media/Media.tsx index 7adc8538..8eace8e2 100644 --- a/src/dashboardWebView/components/Media/Media.tsx +++ b/src/dashboardWebView/components/Media/Media.tsx @@ -47,8 +47,6 @@ export const Media: React.FunctionComponent = ( let staticFolderPath = join('/', settings?.staticFolder || '', '/'); if (settings?.staticFolder === STATIC_FOLDER_PLACEHOLDER.hexo.placeholder) { staticFolderPath = join('/', STATIC_FOLDER_PLACEHOLDER.hexo.postsFolder, '/'); - } else if (settings?.staticFolder === STATIC_FOLDER_PLACEHOLDER.astro.placeholder) { - staticFolderPath = join('/', STATIC_FOLDER_PLACEHOLDER.astro.assetsFolder, '/'); } return staticFolderPath; } @@ -62,8 +60,7 @@ export const Media: React.FunctionComponent = ( viewData.data && typeof viewData.data.pageBundle !== 'undefined' && !viewData.data.pageBundle && - settings?.staticFolder !== STATIC_FOLDER_PLACEHOLDER.hexo.placeholder && - settings?.staticFolder !== STATIC_FOLDER_PLACEHOLDER.astro.placeholder + settings?.staticFolder !== STATIC_FOLDER_PLACEHOLDER.hexo.placeholder ) { return []; } diff --git a/src/dashboardWebView/components/Steps/SelectItem.tsx b/src/dashboardWebView/components/Steps/SelectItem.tsx new file mode 100644 index 00000000..a0891424 --- /dev/null +++ b/src/dashboardWebView/components/Steps/SelectItem.tsx @@ -0,0 +1,36 @@ +import * as React from 'react'; +import { CheckCircleIcon } from '@heroicons/react/outline'; +import { CheckCircleIcon as CheckCircleIconSolid } from '@heroicons/react/solid'; + +export interface ISelectItemProps { + title: string; + buttonTitle: string; + isSelected: boolean; + onClick: () => void; +} + +export const SelectItem: React.FunctionComponent = ({ + title, + buttonTitle, + isSelected, + onClick +}: React.PropsWithChildren) => { + return ( +
+ +
+ ); +}; \ No newline at end of file diff --git a/src/dashboardWebView/components/Steps/StepsToGetStarted.tsx b/src/dashboardWebView/components/Steps/StepsToGetStarted.tsx index 895067d4..f78be071 100644 --- a/src/dashboardWebView/components/Steps/StepsToGetStarted.tsx +++ b/src/dashboardWebView/components/Steps/StepsToGetStarted.tsx @@ -7,14 +7,14 @@ import { Step } from './Step'; import { useMemo, useState } from 'react'; import { Menu } from '@headlessui/react'; import { MenuItem } from '../Menu'; -import { ContentFolder, Framework } from '../../../models'; -import { CheckCircleIcon, ChevronDownIcon } from '@heroicons/react/outline'; -import { CheckCircleIcon as CheckCircleIconSolid } from '@heroicons/react/solid'; +import { ContentFolder, Framework, StaticFolder } from '../../../models'; +import { ChevronDownIcon } from '@heroicons/react/outline'; import { FrameworkDetectors } from '../../../constants/FrameworkDetectors'; import { join } from 'path'; import useThemeColors from '../../hooks/useThemeColors'; import * as l10n from '@vscode/l10n'; import { LocalizationKey } from '../../../localization'; +import { SelectItem } from './SelectItem'; export interface IStepsToGetStartedProps { settings: Settings; @@ -31,7 +31,6 @@ const Folder = ({ folders: ContentFolder[]; addFolder: (folder: string) => void; }) => { - const { getColors } = useThemeColors(); const isAdded = useMemo( () => folders.find((f) => f.path.toLowerCase() === join(wsFolder, folder).toLowerCase()), @@ -39,23 +38,11 @@ const Folder = ({ ); return ( -
- -
+ addFolder(folder)} /> ); }; @@ -77,6 +64,10 @@ export const StepsToGetStarted: React.FunctionComponent Messenger.send(DashboardMessage.addFolder, folder); }; + const addAssetFolder = (folder: string | StaticFolder) => { + Messenger.send(DashboardMessage.addAssetsFolder, folder); + } + const reload = () => { const crntState: any = Messenger.getState() || {}; @@ -98,6 +89,7 @@ export const StepsToGetStarted: React.FunctionComponent id: `welcome-init`, name: l10n.t(LocalizationKey.dashboardStepsStepsToGetStartedInitializeProjectName), description: <>{l10n.t(LocalizationKey.dashboardStepsStepsToGetStartedInitializeProjectDescription)}, + show: true, status: settings.initialized ? Status.Completed : Status.NotStarted, onClick: settings.initialized ? undefined @@ -164,9 +156,40 @@ export const StepsToGetStarted: React.FunctionComponent ), + show: true, status: settings.crntFramework ? Status.Completed : Status.NotStarted, onClick: undefined }, + { + id: `welcome-assets`, + name: l10n.t(LocalizationKey.dashboardStepsStepsToGetStartedAssetsFolderName), + description: ( +
+
{l10n.t(LocalizationKey.dashboardStepsStepsToGetStartedAssetsFolderDescription)}
+
+ addAssetFolder(`public`)} /> + + addAssetFolder({ + "path": "src/assets", + "relative": true + })} /> + +

+ {l10n.t(LocalizationKey.commonInformation)}: {l10n.t(LocalizationKey.dashboardStepsStepsToGetStartedAssetsFolderOtherDescription)}

+
+
+ ), + show: settings.crntFramework === 'astro' || framework === 'astro', + status: !settings.staticFolder ? Status.NotStarted : Status.Completed, + }, { id: `welcome-content-folders`, name: l10n.t(LocalizationKey.dashboardStepsStepsToGetStartedContentFoldersName), @@ -198,6 +221,7 @@ export const StepsToGetStarted: React.FunctionComponent

), + show: true, status: settings.contentFolders && settings.contentFolders.length > 0 ? Status.Completed @@ -207,6 +231,7 @@ export const StepsToGetStarted: React.FunctionComponent id: `welcome-import`, name: l10n.t(LocalizationKey.dashboardStepsStepsToGetStartedTagsName), description: <>{l10n.t(LocalizationKey.dashboardStepsStepsToGetStartedTagsDescription)}, + show: true, status: taxImported ? Status.Completed : Status.NotStarted, onClick: settings.contentFolders && settings.contentFolders.length > 0 ? importTaxonomy : undefined @@ -215,6 +240,7 @@ export const StepsToGetStarted: React.FunctionComponent id: `welcome-show-dashboard`, name: l10n.t(LocalizationKey.dashboardStepsStepsToGetStartedShowDashboardName), description: <>{l10n.t(LocalizationKey.dashboardStepsStepsToGetStartedShowDashboardDescription)}, + show: true, status: settings.initialized && settings.contentFolders && settings.contentFolders.length > 0 ? Status.Active @@ -236,19 +262,21 @@ export const StepsToGetStarted: React.FunctionComponent diff --git a/src/helpers/FrameworkDetector.ts b/src/helpers/FrameworkDetector.ts index c1a1f559..708f8a3e 100644 --- a/src/helpers/FrameworkDetector.ts +++ b/src/helpers/FrameworkDetector.ts @@ -11,7 +11,7 @@ import { STATIC_FOLDER_PLACEHOLDER } from '../constants'; import { FrameworkDetectors } from '../constants/FrameworkDetectors'; -import { Framework } from '../models'; +import { Framework, StaticFolder } from '../models'; import { Logger } from './Logger'; import { existsAsync, readFileAsync } from '../utils'; import { Settings } from '.'; @@ -102,6 +102,7 @@ export class FrameworkDetector { * @param filePath */ public static relAssetPathUpdate(relAssetPath: string, filePath: string): string { + const staticFolderValue = Settings.get(SETTING_CONTENT_STATIC_FOLDER); const staticFolder = Folders.getStaticFolderRelativePath(); const frameworkId = Settings.get(SETTING_FRAMEWORK_ID); @@ -129,9 +130,14 @@ export class FrameworkDetector { } } // Support for the Astro assets folder - else if (staticFolder === STATIC_FOLDER_PLACEHOLDER.astro.placeholder) { + else if ( + staticFolder && + staticFolderValue && + typeof staticFolderValue !== 'string' && + staticFolderValue.relative + ) { const absAssetPath = parseWinPath( - join(Folders.getWorkspaceFolder()?.fsPath || '', relAssetPath) + join(Folders.getWorkspaceFolder()?.fsPath || '', staticFolder, relAssetPath) ); const fileDir = dirname(filePath); diff --git a/src/helpers/MediaHelpers.ts b/src/helpers/MediaHelpers.ts index 16afa863..6548dbf5 100644 --- a/src/helpers/MediaHelpers.ts +++ b/src/helpers/MediaHelpers.ts @@ -109,11 +109,7 @@ export class MediaHelpers { allMedia = [...media]; } else { - if ( - staticFolder && - staticFolder !== STATIC_FOLDER_PLACEHOLDER.hexo.placeholder && - staticFolder !== STATIC_FOLDER_PLACEHOLDER.astro.placeholder - ) { + if (staticFolder && staticFolder !== STATIC_FOLDER_PLACEHOLDER.hexo.placeholder) { const folderSearch = join(staticFolder || '', '/*'); const files = await workspace.findFiles(folderSearch); const media = await MediaHelpers.updateMediaData(MediaHelpers.filterMedia(files)); @@ -124,12 +120,6 @@ export class MediaHelpers { const files = await workspace.findFiles(folderSearch); const media = await MediaHelpers.updateMediaData(MediaHelpers.filterMedia(files)); - allMedia = [...media]; - } else if (staticFolder && staticFolder === STATIC_FOLDER_PLACEHOLDER.astro.placeholder) { - const folderSearch = join(STATIC_FOLDER_PLACEHOLDER.astro.assetsFolder, '/*'); - const files = await workspace.findFiles(folderSearch); - const media = await MediaHelpers.updateMediaData(MediaHelpers.filterMedia(files)); - allMedia = [...media]; } @@ -235,11 +225,6 @@ export class MediaHelpers { parseWinPath(wsFolder?.fsPath || ''), STATIC_FOLDER_PLACEHOLDER.hexo.postsFolder ); - } else if (staticFolder === STATIC_FOLDER_PLACEHOLDER.astro.placeholder) { - staticPath = join( - parseWinPath(wsFolder?.fsPath || ''), - STATIC_FOLDER_PLACEHOLDER.astro.assetsFolder - ); } if (staticPath && (await existsAsync(staticPath))) { diff --git a/src/listeners/dashboard/SettingsListener.ts b/src/listeners/dashboard/SettingsListener.ts index 93d5a9a4..f26d2204 100644 --- a/src/listeners/dashboard/SettingsListener.ts +++ b/src/listeners/dashboard/SettingsListener.ts @@ -12,7 +12,7 @@ import { DashboardCommand } from '../../dashboardWebView/DashboardCommand'; import { DashboardMessage } from '../../dashboardWebView/DashboardMessage'; import { DashboardSettings, Extension, Settings } from '../../helpers'; import { FrameworkDetector } from '../../helpers/FrameworkDetector'; -import { Framework, PostMessageData } from '../../models'; +import { Framework, PostMessageData, StaticFolder } from '../../models'; import { BaseListener } from './BaseListener'; import { Cache } from '../../commands/Cache'; import { Preview } from '../../commands'; @@ -43,6 +43,9 @@ export class SettingsListener extends BaseListener { case DashboardMessage.addFolder: this.addFolder(msg?.payload); break; + case DashboardMessage.addAssetsFolder: + this.addAssetsFolder(msg?.payload); + break; case DashboardMessage.switchProject: this.switchProject(msg.payload); break; @@ -109,7 +112,7 @@ export class SettingsListener extends BaseListener { (f: Framework) => f.name === frameworkId ); if (framework) { - if (framework.static) { + if (framework.static && typeof framework.static === 'string') { await Settings.update(SETTING_CONTENT_STATIC_FOLDER, framework.static, true); } @@ -126,6 +129,11 @@ export class SettingsListener extends BaseListener { SettingsListener.getSettings(true); } + public static async addAssetsFolder(assetFolder: string | StaticFolder) { + await Settings.update(SETTING_CONTENT_STATIC_FOLDER, assetFolder, true); + SettingsListener.getSettings(true); + } + private static addFolder(folder: string) { if (folder) { const wsFolder = Folders.getWorkspaceFolder(); diff --git a/src/localization/localization.enum.ts b/src/localization/localization.enum.ts index 6983aa8e..10e76fcb 100644 --- a/src/localization/localization.enum.ts +++ b/src/localization/localization.enum.ts @@ -739,6 +739,26 @@ export enum LocalizationKey { * other */ dashboardStepsStepsToGetStartedFrameworkSelectOther = 'dashboard.steps.stepsToGetStarted.framework.select.other', + /** + * What is your assets folder? + */ + dashboardStepsStepsToGetStartedAssetsFolderName = 'dashboard.steps.stepsToGetStarted.assetsFolder.name', + /** + * Select the folder containing your assets. This folder will be used to store all your media files for your articles. + */ + dashboardStepsStepsToGetStartedAssetsFolderDescription = 'dashboard.steps.stepsToGetStarted.assetsFolder.description', + /** + * Use the 'public' folder + */ + dashboardStepsStepsToGetStartedAssetsFolderPublicTitle = 'dashboard.steps.stepsToGetStarted.assetsFolder.public.title', + /** + * Use the Astro assets folder (src/assets) + */ + dashboardStepsStepsToGetStartedAssetsFolderAssetsTitle = 'dashboard.steps.stepsToGetStarted.assetsFolder.assets.title', + /** + * In case you want to configure another folder, you can do this manually in the frontmatter.json file. + */ + dashboardStepsStepsToGetStartedAssetsFolderOtherDescription = 'dashboard.steps.stepsToGetStarted.assetsFolder.other.description', /** * Register content folder(s) */ diff --git a/src/models/Framework.ts b/src/models/Framework.ts index 111c5c26..c990947e 100644 --- a/src/models/Framework.ts +++ b/src/models/Framework.ts @@ -1,7 +1,7 @@ export interface Framework { name: string; dist: string; - static: string; + static: string | string[]; build: string; server?: string; } diff --git a/src/models/StaticFolder.ts b/src/models/StaticFolder.ts new file mode 100644 index 00000000..f987745e --- /dev/null +++ b/src/models/StaticFolder.ts @@ -0,0 +1,4 @@ +export interface StaticFolder { + path: string; + relative?: boolean; +} diff --git a/src/models/index.ts b/src/models/index.ts index e066fc88..70f2b857 100644 --- a/src/models/index.ts +++ b/src/models/index.ts @@ -21,6 +21,7 @@ export * from './Snippets'; export * from './SortOrder'; export * from './SortType'; export * from './SortingSetting'; +export * from './StaticFolder'; export * from './TaxonomyData'; export * from './TaxonomyType'; export * from './VersionInfo'; diff --git a/src/panelWebView/components/ContentType/ContentTypeValidator.tsx b/src/panelWebView/components/ContentType/ContentTypeValidator.tsx index 23bd889e..74baac3b 100644 --- a/src/panelWebView/components/ContentType/ContentTypeValidator.tsx +++ b/src/panelWebView/components/ContentType/ContentTypeValidator.tsx @@ -73,7 +73,7 @@ export const ContentTypeValidator: React.FunctionComponent - {l10n.t(LocalizationKey.panelContentTypeContentTypeValidatorHint).split(`\n`).map(s => (

{s}

))} + {l10n.t(LocalizationKey.panelContentTypeContentTypeValidatorHint).split(`\n`).map(s => (

{s}

))}
diff --git a/webpack/panel.config.js b/webpack/panel.config.js index 73842121..2169d349 100644 --- a/webpack/panel.config.js +++ b/webpack/panel.config.js @@ -52,6 +52,17 @@ const config = [{ allowedHosts: "all", headers: { "Access-Control-Allow-Origin": "*", + }, + client: { + overlay: { + runtimeErrors: (error) => { + if (error.message === "ResizeObserver loop limit exceeded") { + return false; + } + + return true; + } + } } } }];