Compare commits

...

487 Commits

Author SHA1 Message Date
Elio Struyf
3a4e9fd8ff #823 - Support titles and taxonomy 2024-06-26 11:35:02 +02:00
Elio Struyf
e77de75333 Updated dependencies 2024-06-26 09:27:43 +02:00
Elio Struyf
b00d7a077d #823 - First steps into integrating GH Copilot 2024-06-25 22:25:16 +02:00
Elio Struyf
582c09875e Add docs #822 2024-06-20 11:39:26 +02:00
Elio Struyf
0c9b4a31ac Added doc links for vscode 2024-06-17 09:28:56 +02:00
Elio Struyf
e8fc53804c Update 2024-06-17 09:15:05 +02:00
Elio Struyf
5b7486a355 Update readme 2024-06-16 12:14:35 +02:00
Elio Struyf
d23e0833dc Update readme 2024-06-16 12:14:12 +02:00
Elio Struyf
dacc6214b6 Updated readme 2024-06-16 12:13:38 +02:00
Elio Struyf
314cadb81e Merge branch 'hotfix/10.2.1' into dev 2024-06-14 13:40:42 +02:00
Elio Struyf
1e1c0cedb0 #812 - Support for case 2 2024-06-14 13:40:02 +02:00
Elio Struyf
013324b3f0 Merge branch 'main' into hotfix/10.2.1 2024-06-14 12:14:14 +02:00
Elio Struyf
62056753e4 10.3.0 2024-06-13 16:35:24 +02:00
Elio Struyf
6b018c0b65 #819 - Added new extensibility support for media scripts 2024-06-13 16:35:10 +02:00
Elio Struyf
ef9510d92d Merge pull request #818 from mayumih387/dev
Added new translations (Japanese)
2024-06-13 14:30:31 +02:00
mayumih387
6d4cd4b0c2 Revised translations 2024-06-13 12:37:53 +09:00
mayumih387
e529f30a40 Added translations for new lines 2024-06-13 12:33:08 +09:00
mayumihara
8b92a3306f Merge branch 'estruyf:dev' into dev 2024-06-13 11:35:52 +09:00
Elio Struyf
5353d07fcb Merge pull request #817 from estruyf/dev
Merge for release 10.2.0
2024-06-12 12:16:23 +02:00
Elio Struyf
1f94ae165c Update changelog 2024-06-12 12:12:52 +02:00
Elio Struyf
dbd42ac1f9 Merge branch 'dev' of github.com:estruyf/vscode-front-matter into dev 2024-06-12 11:52:38 +02:00
Elio Struyf
1031088f85 Added disable stable ext on debug 2024-06-12 11:52:26 +02:00
Elio Struyf
fcbbe7f834 Updated changelog 2024-06-10 15:18:26 +02:00
Elio Struyf
c58d0573c6 #811 - Update default feature flags 2024-06-10 15:07:07 +02:00
Elio Struyf
ba7a0225c1 Update changelog 2024-06-10 11:48:48 +02:00
Elio Struyf
65fd8b4a78 #806 - Small fixes 2024-06-10 11:32:20 +02:00
Elio Struyf
46af17eac2 Update logging 2024-06-07 10:05:11 +02:00
Elio Struyf
2eb0b775a3 Extra logging 2024-06-07 09:52:44 +02:00
Elio Struyf
bf07f29698 Extra logging 2024-06-07 09:42:06 +02:00
Elio Struyf
a22219c1b4 #802 - Remove async update by retrieving folders from cache 2024-06-06 14:35:41 +02:00
Elio Struyf
ec326a74ca Updated issue template 2024-06-06 11:43:59 +02:00
Elio Struyf
2246fbb933 Added extra diagnostic info 2024-06-06 11:41:52 +02:00
Elio Struyf
fa6f7dcfe6 Fix on article update 2024-06-06 11:24:20 +02:00
Elio Struyf
f83ed9b970 #812 - Fix date formatting with date placeholder 2024-06-06 10:51:24 +02:00
Elio Struyf
9ce70fe722 #812 - Locale check for index.md files 2024-06-06 10:13:45 +02:00
Elio Struyf
4a1b37ba88 Fix extend i18n config 2024-06-06 10:07:55 +02:00
mayumih387
5882853f28 Added new descriptions 2024-06-03 14:32:05 +09:00
Elio Struyf
0b8155a75f Added extra logging for placeholder and metadata updates 2024-05-25 17:25:05 +02:00
Elio Struyf
19a0f4b53f #812 - Added {{locale}} placeholder 2024-05-23 22:02:15 +02:00
Elio Struyf
0bde5610c5 #806 - Added trailingSlash option 2024-05-23 21:32:04 +02:00
Elio Struyf
b90f2adb18 #788 - Added localization 2024-05-23 20:13:54 +02:00
Elio Struyf
a70b4316f8 #788 - Safe setting update 2024-05-23 18:30:14 +02:00
Elio Struyf
16453cbb21 #442 - Hide sidebar 2024-05-23 16:44:15 +02:00
Elio Struyf
46e90df501 Fix feature flag 2024-05-23 16:12:55 +02:00
Elio Struyf
d8d72980ea #811 - Added panel.gitActions view mode option 2024-05-23 12:35:10 +02:00
Elio Struyf
7a5e452602 #441 - Show description on fields 2024-05-23 11:49:05 +02:00
Elio Struyf
beee186d72 Add support for field groups + block fields #808 2024-05-23 11:00:00 +02:00
Elio Struyf
64fc1e4b76 Refactoring of command registration 2024-05-23 10:40:38 +02:00
Elio Struyf
5c4a716367 #810 - Update tab title 2024-05-22 20:51:12 +02:00
Elio Struyf
31873bc2d2 #809 - Fix retrieving the filePrefix when updating the file name on slug change 2024-05-22 20:24:22 +02:00
Elio Struyf
0e92834517 #806 - Prefix and suffix update 2024-05-21 10:59:08 +02:00
Elio Struyf
d262518023 #806 - Fix preview URL 2024-05-17 16:13:23 +02:00
Elio Struyf
da2cf68f5c Small css fix 2024-05-17 15:25:29 +02:00
Elio Struyf
2e7ece44e2 #802 - Fix Windows paths 2024-05-07 09:26:26 +02:00
Elio Struyf
c039d260dc Updated localization key 2024-05-06 12:28:46 +02:00
Elio Struyf
2fc543f0dd Merge branch 'dev' of github.com:estruyf/vscode-front-matter into dev 2024-05-06 12:24:52 +02:00
Elio Struyf
48314b3f3f #804 - Fix blinking 2024-05-06 12:24:42 +02:00
Elio Struyf
a43b581e1b Update changelog 2024-05-02 21:48:34 +02:00
Elio Struyf
1ad55cdbbb #798 - snippet slide-over 2024-05-02 21:48:27 +02:00
Elio Struyf
ffa70050eb Merge pull request #803 from estruyf/issue/802
#802 - Update glob
2024-05-02 09:31:06 +02:00
Elio Struyf
e8f70c78fd Adding logging + version info 2024-04-29 16:17:43 +02:00
Elio Struyf
504774a4c8 Optimized diagnostics 2024-04-29 15:49:42 +02:00
Elio Struyf
a764c2fea7 Removed glob types 2024-04-29 15:04:43 +02:00
Elio Struyf
5f623689cc #802 - Update glob 2024-04-29 14:53:09 +02:00
Elio Struyf
54bf408c76 #801 - Single file update on save for recently modified 2024-04-29 12:09:00 +02:00
Elio Struyf
03f2284dd2 Merge branch 'dev' of github.com:estruyf/vscode-front-matter into dev 2024-04-29 11:40:46 +02:00
Elio Struyf
f637def278 #801 - Faster folder processing 2024-04-29 11:39:41 +02:00
Elio Struyf
da46374fb4 #799 - Added logging setting 2024-04-25 21:31:55 +02:00
Elio Struyf
dee732f3ee #800 - Add colors for the Front Matter CMS output 2024-04-25 18:20:00 +02:00
Elio Struyf
d3b93424d1 #796 - Extra logging 2024-04-25 17:46:17 +02:00
Elio Struyf
a467791eaf #796 - More logging 2024-04-25 17:22:31 +02:00
Elio Struyf
70a5de960f #796 - Settings logging 2024-04-25 16:24:52 +02:00
Elio Struyf
31e27f63c1 #796 - Webview logging 2024-04-25 15:50:02 +02:00
Elio Struyf
a50f567fbb #796 - extra logging 2024-04-25 14:53:11 +02:00
Elio Struyf
bdafd25cfe Update logger 2024-04-25 13:44:01 +02:00
Elio Struyf
18b7708367 #797 - Enhancing the card menu and type 2024-04-25 11:06:00 +02:00
Elio Struyf
3fedaf7d5f Update snippets list 2024-04-24 15:38:25 +02:00
Elio Struyf
75a3fc21a3 10.2.0 2024-04-24 15:24:05 +02:00
Elio Struyf
82b894c35b #797 - Adding common actions at the bottom of the snippet cards 2024-04-24 15:23:55 +02:00
Elio Struyf
60952a05ac #796 - Return error in output 2024-04-23 19:50:27 +02:00
Elio Struyf
a571b34724 Merge pull request #795 from estruyf/dev
v10.1.0 release
2024-04-11 17:20:16 +02:00
Elio Struyf
f46e4999a1 Update changelog 2024-04-11 17:17:09 +02:00
Elio Struyf
f9138cb3c3 Release time 2024-04-11 17:13:36 +02:00
Elio Struyf
893c46362e revert change 2024-04-10 17:53:27 +02:00
Elio Struyf
9136841b30 #716 - Missing class 2024-04-08 14:01:04 +02:00
Elio Struyf
0e21093f92 Move taxonomy picker 2024-04-08 13:45:16 +02:00
Elio Struyf
3abd9589f1 Merge branch 'dev' of github.com:estruyf/vscode-front-matter into dev 2024-04-04 16:57:47 +02:00
Elio Struyf
81265e3c49 #671 - Fix on metadata update 2024-04-04 16:57:40 +02:00
Elio Struyf
f6fd57e126 Merge pull request #790 from mayumih387/dev
Added and updated Japanese translations
2024-04-04 10:24:57 +02:00
mayumih387
20d613452f Added and updated Japanese translations 2024-04-04 15:13:18 +09:00
Elio Struyf
35a6c8bada Tab colors 2024-04-01 17:06:48 +02:00
Elio Struyf
0b7f58d0ab #785 - Added custom script actions to the bottom of the cards 2024-04-01 16:39:05 +02:00
Elio Struyf
c859874470 Merge branch 'dev' of github.com:estruyf/vscode-front-matter into dev 2024-04-01 15:11:17 +02:00
Elio Struyf
d70d2284b4 #787 - Support for glob patterns in the page folder paths 2024-04-01 15:11:07 +02:00
Elio Struyf
03236da793 Small design tweaks 2024-03-30 12:41:07 +01:00
Elio Struyf
07935aec73 Update changelog 2024-03-30 10:33:29 +01:00
Elio Struyf
f64c8c5958 #786 - Remove on startup as VSCode now triggers on known commands 2024-03-30 10:33:10 +01:00
Elio Struyf
c4267a69fa #785 - Media actions 2024-03-29 17:34:28 +01:00
Elio Struyf
34b331b0ee #785 - Added content actions at the bottom of the card 2024-03-29 14:10:46 +01:00
Elio Struyf
5d0fc4f605 Update localization 2024-03-28 15:19:26 +01:00
Elio Struyf
169f4ef14a Fix localization 2024-03-28 15:19:05 +01:00
Elio Struyf
7ea386328c Added keybinding to refresh dashboard 2024-03-27 12:12:57 +01:00
Elio Struyf
c17400ce6d #783 - Always show custom panel views 2024-03-27 10:57:30 +01:00
Elio Struyf
7b20d9f23d #782 - Setting the correct view 2024-03-26 09:54:34 +01:00
Elio Struyf
449bb110c2 Small refactoring 2024-03-22 09:13:00 +01:00
Elio Struyf
0d3a99abe6 #777 - Fix for untitled files 2024-03-19 13:01:29 +01:00
Elio Struyf
d2b9307a65 #777 - Extra states for invalid files 2024-03-19 12:34:00 +01:00
Elio Struyf
3842777f71 #778 - Open file or webpage 2024-03-19 12:24:08 +01:00
Elio Struyf
3a74c14ba6 Update localization 2024-03-19 10:06:07 +01:00
Elio Struyf
a5ac7379bc #777 - Show error when front matter parsing failed 2024-03-18 14:31:29 +01:00
Elio Struyf
c245e1474c Icon updates 2024-03-15 14:48:15 +01:00
Elio Struyf
c82c081fce #773 - Rename files 2024-03-14 16:38:17 +01:00
Elio Struyf
31e344f358 Retry to check if external script is binded 2024-03-13 17:43:38 +01:00
Elio Struyf
366ae82318 Added count 2024-03-13 16:22:19 +01:00
Elio Struyf
c1a0609216 Update changelog 2024-03-13 15:02:23 +01:00
Elio Struyf
87bdabf515 Merge pull request #772 from estruyf/issue/671
#671 - Implement checkbox on media card
2024-03-13 15:00:46 +01:00
Elio Struyf
0ae7cb27ce Added localization 2024-03-13 14:58:58 +01:00
Elio Struyf
15870bcc99 #771 - Fix lowercased data label 2024-03-13 14:54:35 +01:00
Elio Struyf
5e77419f5a New table implementation 2024-03-13 14:52:06 +01:00
Elio Struyf
ec9f55b982 Localization actions 2024-03-13 11:32:42 +01:00
Elio Struyf
fdcfdc971d Multi-select hook 2024-03-12 20:40:05 +01:00
Elio Struyf
2bc103026b Editor panel + content action bar 2024-03-12 13:53:43 +01:00
Elio Struyf
e0cdc5cf65 Update sponsor 2024-03-11 17:17:56 +01:00
Elio Struyf
f39b707e30 Updated readme 2024-03-11 17:06:46 +01:00
Elio Struyf
23b1efec55 Multi-select actions 2024-03-11 16:52:14 +01:00
Elio Struyf
dd13d8779c Merge branch 'main' into dev 2024-03-01 10:47:38 +01:00
Elio Struyf
6f6015cf83 Merge branch 'main' of github.com:estruyf/vscode-front-matter 2024-03-01 10:33:18 +01:00
Elio Struyf
afd2878428 #769 - Fix settings on install 2024-03-01 10:33:13 +01:00
Elio Struyf
c66deb032c Merge pull request #770 from estruyf/patch-10.0.2
Patch 10.0.2
2024-03-01 10:05:04 +01:00
Elio Struyf
4c079b3e9d 10.0.2 2024-03-01 09:01:46 +01:00
Elio Struyf
03c2cd31d7 Update changelog 2024-03-01 09:01:38 +01:00
Elio Struyf
d1dba01923 #769 - Fix folder update 2024-03-01 09:00:42 +01:00
Elio Struyf
2a8d7b0ebe #671 - Implement checkbox on media card 2024-03-01 08:40:05 +01:00
Elio Struyf
3b26944a4a Update changelog 2024-02-29 08:40:01 +01:00
Elio Struyf
78cac94dd6 10.1.0 2024-02-29 08:38:46 +01:00
Elio Struyf
9c6845ed8a #768 - Update data view link 2024-02-29 08:38:31 +01:00
Elio Struyf
286ac4adfe Merge pull request #767 from estruyf/dev
#766 - Fix snippet placeholder retrieval
2024-02-28 21:13:56 +01:00
Elio Struyf
7633ac91be Update changelog 2024-02-28 21:12:17 +01:00
Elio Struyf
282527c90d 10.0.1 2024-02-28 21:11:27 +01:00
Elio Struyf
07fbf8bdb9 #766 - Fix snippet placeholder retrieval 2024-02-28 21:11:24 +01:00
Elio Struyf
6e2633572a Merge pull request #763 from estruyf/dev
Release v10.0.0
2024-02-28 16:34:35 +01:00
Elio Struyf
2e35da3d91 #746 - Fix in path placeholders on content creation 2024-02-28 15:54:11 +01:00
Elio Struyf
2bd607b13c Added a support.md file 2024-02-28 14:58:54 +01:00
Elio Struyf
106f1e6c94 Update script 2024-02-28 14:34:57 +01:00
Elio Struyf
54cd3ead64 Remove checkout 2024-02-28 14:32:07 +01:00
Elio Struyf
7e9bd5b0ce Add missing checkout 2024-02-28 14:29:35 +01:00
Elio Struyf
9086868817 Update action 2024-02-28 14:28:37 +01:00
Elio Struyf
4bff53299e Update action name 2024-02-28 14:26:41 +01:00
Elio Struyf
ee101cfe4d Update gh actions 2024-02-28 14:25:24 +01:00
Elio Struyf
247051f592 Updated GH action dependency 2024-02-28 14:10:44 +01:00
Elio Struyf
e6b6bba7df Updated beta release 2024-02-28 14:09:32 +01:00
Elio Struyf
be5d15d2f8 Updated changelog + date field default value 2024-02-28 11:43:36 +01:00
Elio Struyf
65364b8486 Update changelog for v10 release 2024-02-28 11:30:42 +01:00
Elio Struyf
6dd82bd4fe Merge branch 'dev' of github.com:estruyf/vscode-front-matter into dev 2024-02-27 09:43:51 +01:00
Elio Struyf
e0b18465dc Updated command palette commands 2024-02-27 09:43:16 +01:00
Elio Struyf
661efcf23f Update commands 2024-02-26 20:40:37 +01:00
Elio Struyf
152f36e352 Merge branch 'i18n' of github.com:estruyf/vscode-front-matter into i18n 2024-02-26 20:18:44 +01:00
Elio Struyf
08697abba4 Update commands 2024-02-26 20:18:32 +01:00
Elio Struyf
0a530dce27 Update readme 2024-02-26 15:51:40 +01:00
Elio Struyf
63e296d62f Sentry updates 2024-02-26 15:49:14 +01:00
Elio Struyf
003d93b0f2 Added telemetry information 2024-02-26 15:13:08 +01:00
Elio Struyf
59528a3db0 #746 - Slug handling when none is defined 2024-02-24 14:10:14 +01:00
Elio Struyf
c298f2fd69 #760 - Windows file path fixes in multilingual 2024-02-24 13:46:26 +01:00
Elio Struyf
b02a80c28e #760 - Add locale to recently modified panel section 2024-02-24 13:14:45 +01:00
Elio Struyf
f19bd07359 Support for using the fieldCollection field in a block field 2024-02-23 19:13:34 +01:00
Elio Struyf
83b9f2380e Date format fix 2024-02-23 16:37:15 +01:00
Elio Struyf
3f88b05a1c i10n provider for generic config 2024-02-23 09:26:41 +01:00
Elio Struyf
48ada1c352 #760 - Return locales from settings 2024-02-23 08:58:43 +01:00
Elio Struyf
a8777c4032 #760 - Type filter fix 2024-02-23 08:39:43 +01:00
Elio Struyf
fe5df3779b Merge branch 'azure-translator' into dev 2024-02-22 15:28:36 +01:00
Elio Struyf
91ec23e77c HTML text type 2024-02-22 15:28:23 +01:00
Elio Struyf
1b0a99b8fb Azure translations 2024-02-22 15:25:05 +01:00
Elio Struyf
4a0c1a4059 Update changelog 2024-02-22 13:35:14 +01:00
Elio Struyf
40c722e380 Update changelog 2024-02-22 13:30:40 +01:00
Elio Struyf
41a5e9ab7a Remove deprecated settings 2024-02-22 13:09:36 +01:00
Elio Struyf
a641aabc2a #749 - Support in extended configs 2024-02-22 11:44:23 +01:00
Elio Struyf
bc3b2c403d Update default 2024-02-22 11:15:15 +01:00
Elio Struyf
b4d2e4ea8b #749 - update name 2024-02-22 11:14:30 +01:00
Elio Struyf
b1e87d4f57 #760 - Fix to keep locale filter 2024-02-22 10:29:51 +01:00
Elio Struyf
241e660694 #756: Support for creating translation from any page + change path logic 2024-02-22 09:52:59 +01:00
Elio Struyf
03bc7e72fd Update version 2024-02-21 16:57:53 +01:00
Elio Struyf
0aca8fed16 10.0.0 2024-02-21 16:50:55 +01:00
Elio Struyf
60b5d7d759 Merge branch 'dev' of github.com:estruyf/vscode-front-matter into dev 2024-02-21 16:50:18 +01:00
Elio Struyf
e12db5ec74 Merge pull request #759 from estruyf/i18n
New i18n feature
2024-02-21 16:49:16 +01:00
Elio Struyf
f1d345ebc2 Update localization 2024-02-21 10:49:39 +01:00
Elio Struyf
e9af7e1793 #756 - Move deepl key to secret storage 2024-02-21 10:00:48 +01:00
Elio Struyf
49e7fe6377 #756 - Support the ability to use Deepl 2024-02-20 21:59:36 +01:00
Elio Struyf
cc375801c2 #756 - Faster translation checks 2024-02-19 20:33:19 +01:00
Elio Struyf
4a53a180a7 #756 - Page bundle support added 2024-02-19 18:17:08 +01:00
Elio Struyf
51ece235f8 #756 - Language filter + card actions + submenu 2024-02-19 16:04:41 +01:00
Elio Struyf
36ac891c00 #756 - Language dropdown 2024-02-18 21:20:07 +01:00
Elio Struyf
5f0fd29cca #756 - i18n content creation 2024-02-18 16:12:01 +01:00
Elio Struyf
0428e561a8 #756 - first steps 2024-02-16 17:23:08 +01:00
Elio Struyf
bcba947c1d Fix menu in welcome view 2024-02-16 11:33:38 +01:00
Elio Struyf
c2d3496152 Small fix in git 2024-02-15 13:49:57 +01:00
Elio Struyf
7f1dc88bd4 Updated localization 2024-02-15 13:47:13 +01:00
Elio Struyf
83f4711103 Merge pull request #758 from estruyf/shadcn
Use dropdown of shadcn
2024-02-15 13:34:35 +01:00
Elio Struyf
0a8723c544 New dropdown implementation 2024-02-15 13:00:45 +01:00
Elio Struyf
bdce486a24 Use dropdown of shadcn 2024-02-14 18:14:58 +01:00
Elio Struyf
6d6a53047a #666 - Added enum to type 2024-02-13 10:10:50 +01:00
Elio Struyf
afb241ad6a #666 - Update schema 2024-02-13 09:51:20 +01:00
Elio Struyf
4229d262ae #666 - localization added 2024-02-13 09:40:27 +01:00
Elio Struyf
6b92a6f8b4 Merge pull request #753 from estruyf/issue/666
Issue/666
2024-02-13 09:29:21 +01:00
Elio Struyf
183e77b77b #666 - Support config splitting 2024-02-13 09:28:19 +01:00
Elio Struyf
da7d5e6854 Merge branch 'dev' into issue/666 2024-02-13 09:13:50 +01:00
Elio Struyf
8a08f54340 Added slug default value 2024-02-12 17:55:36 +01:00
Elio Struyf
be54b6286f #752 - use new field processing 2024-02-12 17:53:47 +01:00
Elio Struyf
1315602bcc #752 - Support placeholders in list field 2024-02-12 14:59:25 +01:00
Elio Struyf
0ad0179a4b Clean dashboard commands 2024-02-12 14:31:56 +01:00
Elio Struyf
9d68797c95 Update GH actions 2024-02-12 14:23:28 +01:00
Elio Struyf
ffaea3b55d #745 - Fix double date formatting 2024-02-12 14:02:13 +01:00
Elio Struyf
4565ea75ae Reverse spin 2024-02-12 13:51:24 +01:00
Elio Struyf
c4d3f76510 Fix menu positioning 2024-02-12 13:43:26 +01:00
Elio Struyf
ce2bd06f6d Merge pull request #740 from estruyf/poc/git-branching
New git actions
2024-02-12 13:05:38 +01:00
Elio Struyf
a29a6600ab Update welcome view 2024-02-12 13:05:26 +01:00
Elio Struyf
6cbf86f822 Add is repo 2024-02-12 13:02:39 +01:00
Elio Struyf
514272835a Merge branch 'dev' of github.com:estruyf/vscode-front-matter into poc/git-branching 2024-02-12 13:02:36 +01:00
Elio Struyf
3c29df54c1 Updated changelog 2024-02-12 12:36:08 +01:00
Elio Struyf
d06be0efa1 Merge branch 'dev' into poc/git-branching 2024-02-12 12:36:02 +01:00
Elio Struyf
2375be9211 Merge pull request #748 from estruyf/issue/747
Added placeholder support in slug field
2024-02-12 10:57:25 +01:00
Elio Struyf
b5b7dcf6b5 Merge branch 'dev' into issue/747 2024-02-12 10:57:19 +01:00
Elio Struyf
c81d5240f4 Merge pull request #750 from estruyf/issue/673
Git settings on welcome view and settings
2024-02-12 10:56:47 +01:00
Elio Struyf
06b8a579a8 #745 - Fix double date formatting 2024-02-08 11:45:15 +01:00
Elio Struyf
460c4964f6 #666 - First steps to implement media content types 2024-02-07 11:49:03 +01:00
Elio Struyf
62b9f12494 #673 - git settings 2024-02-05 19:28:16 +01:00
Elio Struyf
accb069bab #673 - git enablement 2024-02-05 17:11:17 +01:00
Elio Struyf
d869d15694 Fix loading 2024-02-05 16:25:37 +01:00
Elio Struyf
e54907daaf Remove node-fetch dependency 2024-02-04 17:11:04 +01:00
Elio Struyf
7b689326e3 Cleanup 2024-02-03 13:08:15 +02:00
Elio Struyf
4a4db839ab #749 - Filter setting 2024-02-02 18:01:36 +02:00
Elio Struyf
cc2c878c5c #747 - Add select options 2024-01-31 18:36:34 +02:00
Elio Struyf
273af6d80f Remove of useThemeColors hook 2024-01-31 18:09:58 +02:00
Elio Struyf
d59d9a98d5 #746 - placeholder support for slug field 2024-01-30 21:45:01 +01:00
Elio Struyf
11233ba449 Fix localization string 2024-01-30 20:12:45 +01:00
Elio Struyf
83cf0eb8f5 #746 - Placeholder support in slug 2024-01-29 16:58:25 +01:00
Elio Struyf
bb2ba5dbe8 #745 - Fix date field 2024-01-29 12:05:56 +01:00
Elio Struyf
128644eade Merge branch 'dev' of github.com:estruyf/vscode-front-matter into dev 2024-01-29 11:27:06 +01:00
Elio Struyf
aced5c550f #731 - Fix in sorting 2024-01-29 11:26:58 +01:00
Elio Struyf
93b096ab3d Only use recently modified when activated 2024-01-26 20:08:09 +01:00
Elio Struyf
4dd27ad98f Added missing localization key + remove getColors 2024-01-26 19:48:13 +01:00
Elio Struyf
01ae0b49cc Reverse spin 2024-01-26 19:37:57 +01:00
Elio Struyf
313533d74d Style updates in data view 2024-01-26 16:52:28 +01:00
Elio Struyf
5f92ad33ff #743 - Fix for storing yaml 2024-01-26 16:42:57 +01:00
Elio Struyf
7240747e86 Add backer link 2024-01-26 10:23:37 +01:00
Elio Struyf
fbbfaa572e #741 - content processing message 2024-01-24 15:44:33 +01:00
Elio Struyf
7c4aa1d63d Update changlog 2024-01-24 09:57:08 +01:00
Elio Struyf
6e84217458 #739 - localization keys + action button 2024-01-24 09:53:09 +01:00
Elio Struyf
b981ed6c4f Issue: Open Preview button stops working #738 2024-01-23 20:25:53 +01:00
Elio Struyf
b1380388b6 Issue: Open Preview button stops working #738 2024-01-23 20:10:48 +01:00
Elio Struyf
d70f983694 Optimizations 2024-01-23 15:21:04 +01:00
Elio Struyf
3eb23d7501 Enhancement: configurable dashboard grid #737 2024-01-22 11:52:11 +01:00
Elio Struyf
d22ebfa6ce Commit message input 2024-01-22 11:45:11 +01:00
Elio Struyf
cf96923d96 Faster loading for panel 2024-01-21 17:33:58 +01:00
Elio Struyf
6150a34547 Update git API 2024-01-21 17:27:56 +01:00
Elio Struyf
d45cd0d015 Git branching 2024-01-19 18:11:53 +01:00
Elio Struyf
965fac68c9 workbench color update 2024-01-19 14:32:29 +01:00
Elio Struyf
e2837794f3 Folder optimizations 2024-01-19 13:35:06 +01:00
Elio Struyf
ae436e1a0e Reuse text field component 2024-01-19 13:26:42 +01:00
Elio Struyf
0d19abfa8f Updated home icon 2024-01-19 09:30:51 +01:00
Elio Struyf
58d3c8e211 Add website URL info 2024-01-19 09:29:18 +01:00
Elio Struyf
2117dab03e Move functions 2024-01-18 09:01:12 +01:00
Elio Struyf
20ff578c3f Remove useThemeColors 2024-01-18 08:42:26 +01:00
Elio Struyf
3c29526d88 Merge pull request #733 from mayumih387/dev
Added and updated Japanese translations
2024-01-17 14:49:04 +01:00
Elio Struyf
a9fb507b28 Opimizations 2024-01-17 14:48:34 +01:00
Elio Struyf
d5adc348a2 Internal optimizations 2024-01-17 14:18:23 +01:00
Elio Struyf
71ecca3b85 #734 - fix for file updates 2024-01-17 13:33:13 +01:00
mayumih387
bb29fa344c Added and updated Japanese translations 2024-01-17 15:45:54 +09:00
Elio Struyf
c67a1f9870 View action added 2024-01-16 21:12:28 +01:00
Elio Struyf
c972325eff Merge branch 'poc/content-tagging' into dev 2024-01-16 14:22:30 +01:00
Elio Struyf
60c8dd6185 Multiple taxonomy management #731 2024-01-16 14:22:17 +01:00
Elio Struyf
033baea418 Insert taxonomy mappings 2024-01-15 22:23:10 +01:00
Elio Struyf
72f830e474 #730 - Verify if update is done after debounce update 2024-01-15 15:49:44 +01:00
Elio Struyf
624afe9029 Content tagging 2024-01-15 14:41:10 +01:00
Elio Struyf
e161fe23d5 Updated icons 2024-01-15 13:48:21 +01:00
Elio Struyf
51517c6a43 #730 - Added debounce 2024-01-15 10:12:22 +01:00
Elio Struyf
e7de1209c3 Merge branch 'dev' of github.com:estruyf/vscode-front-matter into dev 2024-01-11 14:11:15 +01:00
Elio Struyf
9fcdf75c89 Remove reference 2024-01-11 14:11:10 +01:00
Elio Struyf
430ce8940c Issue: keyword usage not works for Cyrillic keywords/content #721 2024-01-11 14:11:02 +01:00
Elio Struyf
5c8228bd17 Updated changelog 2024-01-09 16:57:07 +01:00
Elio Struyf
577ff2f13a Remove obsolete keys 2024-01-09 16:52:41 +01:00
Elio Struyf
f9134f1167 Merge pull request #727 from mayumih387/dev
Added Japanese Translation
2024-01-09 16:51:25 +01:00
Elio Struyf
42b5a4ac9e Remove obsolete translation strings 2024-01-09 16:49:55 +01:00
mayumih387
0657c6307f Added Japanese translation 2024-01-09 16:21:45 +09:00
mayumihara
d4bef8a4e5 Merge branch 'estruyf:dev' into dev 2024-01-07 22:48:34 +09:00
mayumih387
c3f51c6764 Added Japanese translation (still working) 2023-12-27 16:03:59 +09:00
Elio Struyf
91f127ef94 #725 - fix menu of pinned items 2023-12-21 14:05:27 +01:00
Elio Struyf
6158971fd8 Hide frontMatter.config.reload from command palette 2023-12-21 09:47:05 +01:00
Elio Struyf
9d2cc7cd9f Make sure settings listeners are intialized 2023-12-20 12:29:22 +01:00
mayumih387
964c943e88 Added Japanese translation (still working) 2023-12-19 20:40:59 +09:00
Elio Struyf
0a6e2fac36 9.5.0 2023-12-15 14:25:33 +01:00
Elio Struyf
2a8c3abac6 Ignore node_modules on startup 2023-12-15 14:25:20 +01:00
Elio Struyf
36ae7081d1 Merge pull request #723 from estruyf/dev
Version 9.4.0
2023-12-12 16:29:45 +01:00
Elio Struyf
7e4c5b0469 Merge branch 'main' into dev 2023-12-12 16:24:43 +01:00
Elio Struyf
5fcd8d6fe7 Enhancement: In data, provide extra space between objects #719 2023-12-12 09:30:07 +01:00
Elio Struyf
0f07be3e3b Issue: DataFileHelper::process: Function yaml.safeLoad is removed in js-yaml 4. #717 2023-12-08 10:26:42 +01:00
Elio Struyf
5444925cf4 Fix ct - boolean field 2023-12-08 09:33:15 +01:00
Elio Struyf
2b89dda08c Added release notes 2023-12-07 17:41:53 +01:00
Elio Struyf
c4feb205fc New localization files 2023-12-07 16:12:21 +01:00
Elio Struyf
78bfa62ed4 #722 - sub-content support 2023-12-07 11:04:18 +01:00
Elio Struyf
f350d4af91 #718 - Fix JSON schema 2023-12-01 10:34:26 +01:00
Elio Struyf
d15f2554a1 Add ability to always use quotes around string
values in front matter #713
2023-11-23 15:24:40 +01:00
Elio Struyf
ab603d9419 Merge branch 'dev' of github.com:estruyf/vscode-front-matter into dev 2023-11-22 10:44:32 +01:00
Elio Struyf
1acf85c6da Fix taxonomy filtering from taxonomy view to content view #714 2023-11-22 10:44:11 +01:00
Elio Struyf
3383a770b4 Merge branch 'dev' of github.com:estruyf/vscode-front-matter into dev 2023-11-17 18:44:29 +01:00
Elio Struyf
a6d2fffeb9 Update media 2023-11-17 18:43:35 +01:00
Elio Struyf
3d530f7929 #712 - Add fix for media file deletion search context 2023-11-17 18:42:54 +01:00
Elio Struyf
f02f994174 Update changelog 2023-11-16 15:27:30 +01:00
Elio Struyf
343dfb2d5d #711 - Fix character mapping 2023-11-16 15:26:32 +01:00
Elio Struyf
9ddaedaaf2 #710 - Remove the fields from FM when the when clause is not met 2023-11-15 15:09:42 +01:00
Elio Struyf
32c6b4c5ea Unused reference 2023-11-15 13:34:15 +01:00
Elio Struyf
90f4d92741 Merge branch 'dev' of github.com:estruyf/vscode-front-matter into dev 2023-11-15 10:07:12 +01:00
Elio Struyf
580b1dca6d Array check in taxonomy picker 2023-11-15 10:07:05 +01:00
Elio Struyf
520bdf2be3 #709 - Where clause on content creation 2023-11-15 09:44:22 +01:00
Elio Struyf
9724168c3f Updated docs 2023-11-14 19:46:59 +01:00
Elio Struyf
ab02e64708 Remove pnpm lock 2023-11-14 19:45:38 +01:00
Elio Struyf
f857b0eaa8 #707 - Fix clearempty 2023-11-13 20:29:49 +00:00
Elio Struyf
03aee57221 Fix style of divider 2023-11-13 20:11:34 +00:00
Elio Struyf
07db685666 #706 - Error handling 2023-11-13 17:57:45 +01:00
Elio Struyf
8684f32d98 Merge branch 'dev' of github.com:estruyf/vscode-front-matter into dev 2023-11-13 16:35:22 +01:00
Elio Struyf
2e536a4de7 Update sponsor check 2023-11-13 16:34:58 +01:00
Elio Struyf
739dffe274 Enhancement: Better content type creation for Astro #704 2023-11-11 13:27:07 -08:00
Elio Struyf
41d2f3f22b Enhancement: Better content type creation for Astro #704 2023-11-11 13:10:41 -08:00
Elio Struyf
e285e8d775 Enhancement: Better content type creation for Astro #704 2023-11-11 12:47:41 -08:00
Elio Struyf
9cf4ae46dd Update changelog 2023-11-11 12:36:20 -08:00
Elio Struyf
72c9d1e25f Merge branch 'localization' into dev 2023-11-11 12:35:52 -08:00
Elio Struyf
5f13d318c2 Enhancement: Better content type creation for Astro #704 2023-11-11 12:35:32 -08:00
Elio Struyf
ffdf8262d7 Localization updates 2023-11-11 12:33:55 -08:00
Elio Struyf
7fcbdb4ade Merge branch 'dev' into localization 2023-11-11 11:25:15 -08:00
Elio Struyf
a8407920bc Enhancement: Better content type creation for Astro #704 2023-11-11 11:19:11 -08:00
Elio Struyf
e1f6c90fc0 Enhancement: Better content type creation for Astro #704 2023-11-11 10:38:31 -08:00
Elio Struyf
11354ad8e5 #704 - Fix in zod optional check 2023-11-11 10:12:21 -08:00
Elio Struyf
af3e63046c empty commit 2023-11-09 15:39:38 -08:00
Elio Struyf
cee4621964 Merge branch 'dev' into localization 2023-11-09 14:16:14 -08:00
Elio Struyf
8db76abf51 #703 - fix pnpm support in astro script 2023-11-09 14:15:43 -08:00
Elio Struyf
3ca50bbe58 Remove reference 2023-11-09 13:52:51 -08:00
Elio Struyf
e4cb93274b Localization updates 2023-11-06 14:57:03 -08:00
Elio Struyf
39ad0e034e Localization updates 2023-11-06 13:26:45 -08:00
Elio Struyf
cef607ffc8 #701 - Fix content creation 2023-11-06 15:19:46 +01:00
Elio Struyf
258c5fe670 Updates to localization 2023-11-06 15:11:00 +01:00
Elio Struyf
046b24337d Merge branch 'dev' into localization 2023-11-05 08:55:13 +01:00
Elio Struyf
24fb1347df Merge branch 'dev' of github.com:estruyf/vscode-front-matter into dev 2023-11-02 18:31:53 +01:00
Elio Struyf
3665823803 #700 - added relative path token 2023-11-02 18:31:40 +01:00
Elio Struyf
a020b9ad8c Merge branch 'dev' of github.com:estruyf/vscode-front-matter into dev 2023-11-02 17:23:56 +01:00
Elio Struyf
2c026ff5e5 Started localizing the backend 2023-11-02 17:17:40 +01:00
Elio Struyf
966d0107d9 Enhancement: Allow the contentRelationship field to have a quick search feature #690 2023-11-01 14:44:59 +01:00
Elio Struyf
c770a9035f Merge branch 'combobox' into dev 2023-11-01 14:42:39 +01:00
Elio Struyf
731212264c New content type relationship field implementation 2023-11-01 14:41:04 +01:00
Elio Struyf
3a8dcbe22f New combobox implementation 2023-11-01 12:55:28 +01:00
Elio Struyf
6cbe76096b Fix css name spaces 2023-11-01 12:19:46 +01:00
Elio Struyf
039170eae5 Clear cache on new version 2023-10-31 15:05:18 +01:00
Elio Struyf
14ddd8b53c Added the path to the parsed article 2023-10-31 11:44:02 +01:00
Elio Struyf
b60aadc4a3 Status optimizations 2023-10-31 10:24:34 +01:00
Elio Struyf
79ee6607ca Filter out empty folder settings + added the content type name 2023-10-30 11:06:38 +01:00
Elio Struyf
fe9fbe899d #699 - Change border color 2023-10-27 13:08:57 +02:00
Elio Struyf
f4816afa65 Merge pull request #698 from estruyf/issue/697 2023-10-27 09:25:26 +02:00
Elio Struyf
a196c4192a Merge localization fix 2023-10-27 09:25:09 +02:00
Elio Struyf
6d43ff11a4 9.3.1 2023-10-27 09:20:45 +02:00
Elio Struyf
1c5e98d40c #697 - Fix missing localization key 2023-10-27 09:20:29 +02:00
Elio Struyf
0f1085756c #694 - Start terminal session from the folder where the frontmatter.json file is located 2023-10-26 09:28:27 +02:00
Elio Struyf
83f103b991 Merge branch 'dev' of github.com:estruyf/vscode-front-matter into dev 2023-10-26 09:15:04 +02:00
Elio Struyf
13f5446163 #696 - Close the local server terminal on restart 2023-10-26 09:14:59 +02:00
Elio Struyf
96c496caba #273 - Allow single value arrays to be set as a string 2023-10-24 15:14:39 +02:00
Elio Struyf
7c2a59615f #691 - Silent authentication retrieval for GitHub sponsors 2023-10-23 11:23:15 +02:00
Elio Struyf
0ea972e4f3 Grid optimizations 2023-10-23 11:13:03 +02:00
Elio Struyf
d1eb252380 #688 - Add scheduled articles 2023-10-19 16:08:37 +02:00
Elio Struyf
3e038c58a3 Fix answers 2023-10-11 11:18:11 +02:00
Elio Struyf
2cb72a607b Enhancement: Extend the scripting feature to allow users to ask questions #686 2023-10-09 20:19:25 +02:00
Elio Struyf
2f7d8e5816 9.4.0 2023-10-09 09:12:41 +02:00
Elio Struyf
1337b21789 #685 - Fix when using non-string values in the tag picker 2023-10-09 09:12:37 +02:00
Elio Struyf
ff1c00167c Merge pull request #682 from estruyf/dev 2023-10-06 17:26:09 +02:00
Elio Struyf
35f1b38c1b Update changelog 2023-10-06 17:11:40 +02:00
Elio Struyf
f1d613274d #653 - Update Astro script 2023-10-06 16:38:57 +02:00
Elio Struyf
2423b7351d Abs path 2023-10-06 14:29:06 +02:00
Elio Struyf
36b3b338ea update changelog 2023-10-06 14:09:23 +02:00
Elio Struyf
103c10890e #676 - Extra check 2023-10-06 13:42:24 +02:00
Elio Struyf
f182403a4e Update fm icons to font 2023-10-06 10:58:59 +02:00
Elio Struyf
15b187f3f7 #681 - Fix icons 2023-10-06 10:47:07 +02:00
Elio Struyf
ed00f8f60e #517 - Added frontMatter.panel.actions.disabled setting to define which actions should be hidden 2023-10-04 13:37:30 +02:00
Elio Struyf
93a6df85dd Merge branch 'dev' of github.com:estruyf/vscode-front-matter into dev 2023-10-04 12:00:02 +02:00
Elio Struyf
e26028c5fb #517 - Add contentTypes property to custom scripts 2023-10-04 11:59:56 +02:00
Elio Struyf
90bfa87995 #678 - Check field type of tags fields for tags rendering on item cards 2023-09-30 11:25:06 +02:00
Elio Struyf
414e980647 Update pin icon 2023-09-30 10:49:41 +02:00
Elio Struyf
78bb85350a Small style fix for pinned items 2023-09-29 16:18:27 +02:00
Elio Struyf
5a9ef1add8 #677 - Support for Browse Lite 2023-09-28 11:33:08 +02:00
Elio Struyf
e573e3d964 Updated translations 2023-09-27 11:42:47 +02:00
Elio Struyf
2d4848bdee Added locale sync 2023-09-27 11:34:44 +02:00
Elio Struyf
43eb5a78e7 Improve slug retrieval 2023-09-25 10:29:57 +02:00
Elio Struyf
03a0260b46 remove console 2023-09-25 10:07:50 +02:00
Elio Struyf
cb9c081a52 Fix extensibility 2023-09-25 09:50:03 +02:00
Elio Struyf
fd652042c5 #80 - Updated settings view 2023-09-24 14:14:30 +02:00
Elio Struyf
2c8316288d #675 - Pin content 2023-09-23 14:11:00 +02:00
Elio Struyf
2a763ab384 Ensure array 2023-09-23 09:51:45 +02:00
Elio Struyf
44ec37a518 Fix in collections 2023-09-23 09:49:24 +02:00
Elio Struyf
3ab726d7fb Update changelog 2023-09-22 16:52:08 +02:00
Elio Struyf
8ba2e15db0 Enhancement: Add property to page folder setting to disable content creation #674 2023-09-22 16:51:59 +02:00
Elio Struyf
c506ab75c1 #676 - Allow the frontmatter.json file to be placed in a sub-directory 2023-09-22 16:18:23 +02:00
Elio Struyf
1c088d2605 Update logo color on welcome view 2023-09-22 08:47:18 +02:00
Elio Struyf
0e4be12a9f Merge branch 'dev' of github.com:estruyf/vscode-front-matter into dev 2023-09-22 08:42:26 +02:00
Elio Struyf
2002410e08 Added documentation link 2023-09-22 08:42:11 +02:00
Elio Struyf
f4e1f06662 Style fix + Astro check 2023-09-21 21:11:48 +02:00
Elio Struyf
f2eef85206 #653 - Auto-register content folders 2023-09-21 18:14:10 +02:00
Elio Struyf
4a701dd323 #80 #653 - settings view + Astro Content Collections 2023-09-21 16:53:51 +02:00
Elio Struyf
1128e230c6 #653 - Read Astro Content Collections 2023-09-21 16:51:08 +02:00
Elio Struyf
48ee263c27 Update location refresh command 2023-09-21 08:10:15 +02:00
Elio Struyf
1a71848acd Remove console 2023-09-18 16:51:59 +02:00
Elio Struyf
c79d0ee603 #553 - Dynamic settings update 2023-09-18 16:51:21 +02:00
Elio Struyf
ac3b4a012b #669 - video preview + caption field 2023-09-18 11:21:30 +02:00
Elio Struyf
08b8fa6fdb #668 - Reset pagination on media search 2023-09-18 10:33:49 +02:00
Elio Struyf
9244af0ac4 #665 - Added dev param to nuxt 2023-09-18 08:59:18 +02:00
Elio Struyf
c1f426c85c Merge branch 'issue/563' into dev 2023-09-15 18:00:17 +02:00
Elio Struyf
6b9402d593 #563 - Implementation of the fieldCollection 2023-09-15 17:59:53 +02:00
Elio Struyf
9c252d0931 #623 - Check mimetype 2023-09-15 14:03:34 +02:00
Elio Struyf
240211c769 Fix button style 2023-09-15 13:46:57 +02:00
Elio Struyf
dff78d9e0a Improved template layout 2023-09-15 13:42:37 +02:00
Elio Struyf
0bcf23d18e class cleanup 2023-09-15 12:59:10 +02:00
Elio Struyf
1907771e73 #563 - fieldCollection field 2023-09-15 11:55:46 +02:00
Elio Struyf
3974dc7a97 Merge branch 'dev' of github.com:estruyf/vscode-front-matter into dev 2023-09-15 11:31:54 +02:00
Elio Struyf
a624881791 Update spinners 2023-09-15 09:50:18 +02:00
Elio Struyf
9df668a054 Move clear empty 2023-09-14 20:20:09 +02:00
Elio Struyf
180ea7880b #623 - Fix update metadata on move 2023-09-14 17:31:57 +02:00
Elio Struyf
c952cf4057 #629 - Fix array indent to the new property 2023-09-14 13:59:58 +02:00
Elio Struyf
73ce0d23ae #664 - Draft status parsing fix 2023-09-14 10:32:53 +02:00
Elio Struyf
fdb4a0892c #638 - Hexo draft folder support 2023-09-13 14:38:28 +02:00
Elio Struyf
57960120a4 #663 - Allow filtering by clicking on tags 2023-09-13 14:13:59 +02:00
Elio Struyf
d74611e04f #662 - Always show the all articles tab 2023-09-13 11:26:50 +02:00
Elio Struyf
acc0a9ad19 #661 - Fix dropdowns 2023-09-13 10:50:20 +02:00
Elio Struyf
f809fb2fe7 #660 - Allow only to select unique content relationship values 2023-09-12 21:04:20 +02:00
Elio Struyf
feebdadaa5 #659 - Implement a filter for the taxonomy dashboard 2023-09-12 10:17:15 +02:00
Elio Struyf
8967d236fe 9.3.0 2023-09-12 09:52:00 +02:00
Elio Struyf
6afcaec446 Image card style updates 2023-09-11 13:27:30 +02:00
Elio Struyf
599d43b254 Merge pull request #658 from estruyf/dev 2023-09-11 10:05:26 +02:00
Elio Struyf
48890be4dc Updated changelog 2023-09-11 09:59:20 +02:00
Elio Struyf
0ed93977bc #650 - Use the templates repo 2023-09-09 16:56:58 +02:00
Elio Struyf
a2d1100123 #657 - Windows script outcome fix 2023-09-08 13:29:41 +02:00
Elio Struyf
160d901358 Removed draft toggle + Added fm action 2023-09-07 21:57:40 +02:00
Elio Struyf
0c613187bf Added environment 2023-09-07 16:56:05 +02:00
Elio Struyf
1128b5ac65 #655 - Refresh settings 2023-09-07 16:40:59 +02:00
Elio Struyf
c6ec07fa17 #654 - Add the open on website action 2023-09-07 16:25:52 +02:00
Elio Struyf
3f578fdfa9 Grouping and status tabs enhancements 2023-09-07 14:50:13 +02:00
Elio Struyf
c5cb1bbb06 #652 - start/stop server enhancements 2023-09-07 12:11:14 +02:00
Elio Struyf
3001e9f3cc #651 - fix setting listeners 2023-09-07 11:52:34 +02:00
Elio Struyf
eb5bdd6119 #650 - add max level 2023-09-06 18:08:37 +02:00
Elio Struyf
802e34890a Update color 2023-09-06 16:17:39 +02:00
Elio Struyf
1041429e84 Update framework reference #650 2023-09-06 16:01:28 +02:00
Elio Struyf
5139453ae9 #650 - Add template support 2023-09-06 15:59:30 +02:00
Elio Struyf
7b6be79bb0 #649 - Update snippet parser 2023-09-06 13:42:33 +02:00
Elio Struyf
3469771a02 Align button text 2023-09-06 12:21:36 +02:00
Elio Struyf
65f15c54f4 Fix chatbot 2023-09-06 12:09:24 +02:00
Elio Struyf
e7478aecc6 Merge branch 'dev' of github.com:estruyf/vscode-front-matter into dev 2023-09-06 12:06:25 +02:00
Elio Struyf
69a18bdcea #570 - Clear empty values 2023-09-06 12:06:19 +02:00
Elio Struyf
83f15b65a4 #648 - update schema reference 2023-09-05 11:46:32 +02:00
Elio Struyf
b16fc4dfbb Merge branch 'dev' of github.com:estruyf/vscode-front-matter into dev 2023-09-05 10:58:31 +02:00
Elio Struyf
40f7ca5a2f Return empty array on empty project 2023-09-05 10:58:20 +02:00
Elio Struyf
ab3988e253 #647 - Fix open in browser 2023-09-04 17:18:18 +02:00
Elio Struyf
c6cfc02e5d #646 - Update Astro port 2023-09-04 16:56:45 +02:00
Elio Struyf
f93b6bae3e Updated changelog 2023-09-04 16:55:25 +02:00
Elio Struyf
1b88ff9932 Merge branch 'cba85-main' into dev 2023-08-31 17:01:49 +02:00
Elio Struyf
6e964a58c1 Merge branch 'main' of github.com:cba85/vscode-front-matter into cba85-main 2023-08-31 17:01:32 +02:00
Elio Struyf
01b45e43b8 9.2.0 2023-08-31 17:00:08 +02:00
Elio Struyf
4f11c8347a Merge branch 'dev' of github.com:estruyf/vscode-front-matter into dev 2023-08-31 16:59:57 +02:00
Clément Barbaza
e4530ee5ca add french translation 2023-08-31 15:48:50 +02:00
Elio Struyf
8e197ab865 Merge pull request #644 from estruyf/dev 2023-08-31 09:36:30 +02:00
Elio Struyf
db3e12cc56 Update changelog 2023-08-31 09:36:13 +02:00
Elio Struyf
959aa5a03c Audit fixes 2023-08-31 09:28:53 +02:00
Elio Struyf
ad58ed2967 Update changelog 2023-08-31 09:22:21 +02:00
Elio Struyf
e6d93bbf5d Update changelog 2023-08-30 17:07:55 +02:00
Elio Struyf
13eede26ce Merge branch 'dev' of github.com:estruyf/vscode-front-matter into dev 2023-08-30 15:51:13 +02:00
Elio Struyf
00b3e195a8 #641 - file parse 2023-08-30 15:51:05 +02:00
Elio Struyf
dc590e53d8 #642 - Store the search index in a storage file 2023-08-30 15:27:11 +02:00
Elio Struyf
becdec6bc2 Updated ignore 2023-08-30 14:28:45 +02:00
Elio Struyf
3af8b62b7d Remove files 2023-08-30 14:27:25 +02:00
Elio Struyf
06f65c3627 #639 - Add check for content type in page folders 2023-08-30 13:57:38 +02:00
Elio Struyf
e3bbcf252c Remove logging 2023-08-25 13:24:41 +02:00
Elio Struyf
0ac04d2247 #636 - Fix lightbox theme issues 2023-08-25 13:24:10 +02:00
Elio Struyf
4c7d5bacea #635 - Fix navigation theming issues 2023-08-25 13:23:58 +02:00
Elio Struyf
16762a5fa5 #634 - Process relative public folders 2023-08-25 11:41:06 +02:00
Elio Struyf
a6c0685184 #633 - Fix custom taxonomy used as single value 2023-08-25 10:53:42 +02:00
Elio Struyf
38e485584f Fix on empty path 2023-08-22 14:08:02 +02:00
Elio Struyf
faf8e66cdb Merge branch 'dev' of github.com:estruyf/vscode-front-matter into dev 2023-08-22 11:52:36 +02:00
Elio Struyf
dc5a48ea89 #628 - Fix path and data argument 2023-08-22 11:52:00 +02:00
Elio Struyf
5435a6c42a Update fm 2023-08-22 09:54:01 +02:00
Elio Struyf
0b722e3dba Update changelog 2023-08-22 09:50:33 +02:00
Elio Struyf
f1130aaf96 9.1.0 2023-08-22 09:48:52 +02:00
Elio Struyf
26c9033299 Merge pull request #630 from kasuken/dev 2023-08-22 09:48:38 +02:00
Emanuele Bartolesi
a8909fadc2 italian translations fix 2023-08-21 14:52:55 +02:00
Emanuele Bartolesi
cda6d8ddaa italian translations 2023-08-21 14:52:01 +02:00
Emanuele Bartolesi
8fd7355878 Create bundlel10n.it.json 2023-08-21 13:13:09 +02:00
455 changed files with 24860 additions and 29047 deletions

View File

@@ -0,0 +1 @@
{}

View File

@@ -12,6 +12,7 @@ A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
@@ -23,16 +24,11 @@ A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Desktop (please complete the following information):**
- OS: [e.g. iOS]
- Browser [e.g. chrome, safari]
- Version [e.g. 22]
**Device:**
**Smartphone (please complete the following information):**
- Device: [e.g. iPhone6]
- OS: [e.g. iOS8.1]
- Browser [e.g. stock browser, safari]
- Version [e.g. 22]
- OS: [e.g. iOS]
- Front Matter CMS Version [e.g. 10.2.0]
- Browser [e.g. chrome, safari]
**Additional context**
Add any other context about the problem here.

46
.github/actions/localization/action.yml vendored Normal file
View File

@@ -0,0 +1,46 @@
name: Localization sync
description: Syncs the localization values from English to the other supported languages
inputs:
TRANSLATION_API_KEY:
description: 'The API key for the translation service'
required: true
TRANSLATION_API_LOCATION:
description: 'The location of the translation service'
required: true
TRANSLATION_API_URL:
description: 'The URL of the translation service'
required: true
PACKAGE_NAME:
description: 'The name of the package to be uploaded'
required: true
runs:
using: "composite"
steps:
- uses: actions/setup-node@v4
with:
node-version: 18
registry-url: https://registry.npmjs.org/
cache: 'npm'
- name: Install the dependencies
shell: bash
run: npm ci
- name: Sync localization
shell: bash
run: npm run localization:sync
env:
TRANSLATION_API_KEY: ${{ inputs.TRANSLATION_API_KEY }}
TRANSLATION_API_LOCATION: ${{ inputs.TRANSLATION_API_LOCATION }}
TRANSLATION_API_URL: ${{ inputs.TRANSLATION_API_URL }}
- name: Remove the node_modules
shell: bash
run: rm -rf node_modules
- uses: actions/upload-artifact@v4
with:
name: ${{ inputs.PACKAGE_NAME }}
path: .

View File

@@ -5,27 +5,79 @@ on:
- dev
workflow_dispatch:
env:
PACKAGE_NAME: 'fm-localized'
MS_URL: 'https://marketplace.visualstudio.com/items?itemName=eliostruyf.vscode-front-matter-beta'
VSX_URL: 'https://open-vsx.org/extension/eliostruyf/vscode-front-matter-beta'
jobs:
build:
name: "Build and release"
localization:
name: 'Localization'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
- uses: actions/checkout@v4
- name: Localize the solution
uses: ./.github/actions/localization
with:
node-version: 16
TRANSLATION_API_KEY: ${{ secrets.TRANSLATION_API_KEY }}
TRANSLATION_API_LOCATION: ${{ secrets.TRANSLATION_API_LOCATION }}
TRANSLATION_API_URL: ${{ secrets.TRANSLATION_API_URL }}
PACKAGE_NAME: ${{ env.PACKAGE_NAME }}
release-ms:
name: 'Release to VSCode Marketplace'
runs-on: ubuntu-latest
needs: localization
environment:
name: 'MS - BETA'
url: ${{ env.MS_URL }}
steps:
- uses: actions/download-artifact@v4
with:
name: ${{ env.PACKAGE_NAME }}
- uses: actions/setup-node@v4
with:
node-version: 18
registry-url: https://registry.npmjs.org/
cache: 'npm'
- name: Install the dependencies
run: npm i
run: npm ci
- name: Prepare BETA
run: node scripts/beta-release.js $GITHUB_RUN_ID
- name: Publish
run: npx @vscode/vsce publish -p ${{ secrets.VSCE_PAT }} --baseImagesUrl https://raw.githubusercontent.com/estruyf/vscode-front-matter/dev
release-vsx:
name: 'Release to Open VSX'
runs-on: ubuntu-latest
needs: localization
environment:
name: 'Open VSX - BETA'
url: ${{ env.VSX_URL }}
steps:
- uses: actions/download-artifact@v4
with:
name: ${{ env.PACKAGE_NAME }}
- uses: actions/setup-node@v4
with:
node-version: 18
registry-url: https://registry.npmjs.org/
cache: 'npm'
- name: Install the dependencies
run: npm ci
- name: Prepare BETA
run: node scripts/beta-release.js $GITHUB_RUN_ID
- name: Publish to open-vsx.org
run: npx ovsx publish -p ${{ secrets.OPEN_VSX_PAT }}

View File

@@ -5,26 +5,79 @@ on:
- published
workflow_dispatch:
env:
PACKAGE_NAME: 'fm-localized'
MS_URL: 'https://marketplace.visualstudio.com/items?itemName=eliostruyf.vscode-front-matter'
VSX_URL: 'https://open-vsx.org/extension/eliostruyf/vscode-front-matter'
jobs:
build:
name: "Build and release"
localization:
name: 'Localization'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
- uses: actions/checkout@v4
- name: Localize the solution
uses: ./.github/actions/localization
with:
node-version: 16
TRANSLATION_API_KEY: ${{ secrets.TRANSLATION_API_KEY }}
TRANSLATION_API_LOCATION: ${{ secrets.TRANSLATION_API_LOCATION }}
TRANSLATION_API_URL: ${{ secrets.TRANSLATION_API_URL }}
PACKAGE_NAME: ${{ env.PACKAGE_NAME }}
release-ms:
name: 'Release to VSCode Marketplace'
runs-on: ubuntu-latest
needs: localization
environment:
name: 'MS - Stable'
url: ${{ env.MS_URL }}
steps:
- uses: actions/download-artifact@v4
with:
name: ${{ env.PACKAGE_NAME }}
- uses: actions/setup-node@v4
with:
node-version: 18
registry-url: https://registry.npmjs.org/
cache: 'npm'
- name: Install the dependencies
run: npm i
run: npm ci
- name: Prepare MAIN release
run: node scripts/main-release.js
- name: Publish
run: npx @vscode/vsce publish -p ${{ secrets.VSCE_PAT }}
release-vsx:
name: 'Release to Open VSX'
runs-on: ubuntu-latest
needs: localization
environment:
name: 'Open VSX - Stable'
url: ${{ env.VSX_URL }}
steps:
- uses: actions/download-artifact@v4
with:
name: ${{ env.PACKAGE_NAME }}
- uses: actions/setup-node@v4
with:
node-version: 18
registry-url: https://registry.npmjs.org/
cache: 'npm'
- name: Install the dependencies
run: npm ci
- name: Prepare MAIN release
run: node scripts/main-release.js
- name: Publish to open-vsx.org
run: npx ovsx publish -p ${{ secrets.OPEN_VSX_PAT }}
run: npx ovsx publish -p ${{ secrets.OPEN_VSX_PAT }}

3
.gitignore vendored
View File

@@ -11,4 +11,5 @@ e2e/extensions
e2e/sample
localization.log
localization.md
localization.md
.env

8
.vscode/launch.json vendored
View File

@@ -10,7 +10,9 @@
"type": "extensionHost",
"request": "launch",
"runtimeExecutable": "${execPath}",
"args": ["--extensionDevelopmentPath=${workspaceFolder}"],
"args": [
"--extensionDevelopmentPath=${workspaceFolder}", "--disable-extension=eliostruyf.vscode-front-matter"
],
"outFiles": ["${workspaceFolder}/dist/**/*.js"],
"preLaunchTask": "npm: build:ext"
},
@@ -19,7 +21,9 @@
"type": "extensionHost",
"request": "launch",
"runtimeExecutable": "${execPath}",
"args": ["--extensionDevelopmentPath=${workspaceFolder}"],
"args": [
"--extensionDevelopmentPath=${workspaceFolder}", "--disable-extension=eliostruyf.vscode-front-matter"
],
"outFiles": ["${workspaceFolder}/dist/**/*.js"]
}
]

18
.vscode/settings.json vendored
View File

@@ -1,5 +1,21 @@
// Place your settings in this file to overwrite default and user settings.
{
"commitHelper.messages": [
{
"type": "👨‍💻 apps",
"values": ["#search", "#profile"]
},
{
"type": "⚙️ tasks",
"values": ["#build", "#deploy", "#skip"]
}
],
"workbench.colorCustomizations": {
"titleBar.activeBackground": "#15c2cb",
"titleBar.inactiveBackground": "#44ffd299",
"titleBar.activeForeground": "#0E131F",
"titleBar.inactiveForeground": "#0E131F99"
},
"files.exclude": {
"out": false // set this to true to hide the "out" folder with the compiled JS files
},
@@ -8,8 +24,6 @@
},
// Turn off tsc task auto detection since we have the necessary tasks as npm scripts
"typescript.tsc.autoDetect": "off",
"eliostruyf.writingstyleguide.terms.isDisabled": true,
"eliostruyf.writingstyleguide.biasFree.isDisabled": true,
"squarl.groups": [
{
"id": "dashboard",

View File

@@ -5,6 +5,7 @@ src/**
.gitignore
vsc-extension-quickstart.md
**/tsconfig.json
**/tsconfig.e2e.json
**/*.map
**/*.ts
webpack.config.js
@@ -28,3 +29,4 @@ webpack
README.beta.md
e2e
storage
pnpm-lock.yaml

View File

@@ -1,5 +1,242 @@
# Change Log
## [10.3.0] - 2024-xx-xx
### ✨ New features
### 🎨 Enhancements
- [#819](https://github.com/estruyf/vscode-front-matter/issues/819): Added new extensibility support for media scripts
- [#822](https://github.com/estruyf/vscode-front-matter/issues/822): Added docs to the panel & dashboard views
### 🐞 Fixes
## [10.2.0] - 2024-06-12 - [Release notes](https://beta.frontmatter.codes/updates/v10.2.0)
### ✨ New features
- [#797](https://github.com/estruyf/vscode-front-matter/issues/797): Adding common actions at the bottom of the snippet cards
### 🎨 Enhancements
- [#441](https://github.com/estruyf/vscode-front-matter/issues/441): Show input descriptions for snippet and data forms
- [#442](https://github.com/estruyf/vscode-front-matter/issues/442): Hide sidebar on data view when data file is selected + show dropdown of data files
- [#788](https://github.com/estruyf/vscode-front-matter/issues/788): Show a warning on setting update when it exists in an extended configuration
- [#798](https://github.com/estruyf/vscode-front-matter/issues/798): Changed dialog to slide-over for the snippet forms
- [#799](https://github.com/estruyf/vscode-front-matter/issues/799): Added `frontMatter.logging` setting to define the logging output. Options are `info`, `warn`, `error`, and `verbose`. The default is `info`.
- [#800](https://github.com/estruyf/vscode-front-matter/issues/800): Add colors for the Front Matter CMS output
- [#808](https://github.com/estruyf/vscode-front-matter/issues/808): Add support to generate field groups and `block` fields in content type generation
- [#810](https://github.com/estruyf/vscode-front-matter/issues/810): Update the tab title based on the view
- [#811](https://github.com/estruyf/vscode-front-matter/issues/811): Added `panel.gitActions` view mode option to hide the Git actions in the panel
- [#812](https://github.com/estruyf/vscode-front-matter/issues/812): Added the `{{locale}}` placeholder, which can be used in the `previewPath` property
### ⚡️ Optimizations
- [#802](https://github.com/estruyf/vscode-front-matter/issues/802): Update `glob` to the latest version and remove the sync method
### 🐞 Fixes
- [#796](https://github.com/estruyf/vscode-front-matter/issues/796): Fix issue in retrieving folders/files on dashboard load
- [#801](https://github.com/estruyf/vscode-front-matter/issues/801): Faster folder processing on updates
- [#804](https://github.com/estruyf/vscode-front-matter/issues/804): Fix blinking of the front matter content area
- [#806](https://github.com/estruyf/vscode-front-matter/issues/804): Fix preview URL for `index.md` files in root of the page folder path
- [#809](https://github.com/estruyf/vscode-front-matter/issues/809): Fix retrieving the `filePrefix` when updating the file name on slug change
## [10.1.0] - 2024-04-11 - [Release notes](https://beta.frontmatter.codes/updates/v10.1.0)
### ✨ New features
- [#671](https://github.com/estruyf/vscode-front-matter/issues/671): Command bar for contents and media dashboard
### 🎨 Enhancements
- [#773](https://github.com/estruyf/vscode-front-matter/issues/773): Added the ability to rename content files
- [#777](https://github.com/estruyf/vscode-front-matter/issues/777): Show an error in the metadata panel if something went wrong while parsing the front matter
- [#778](https://github.com/estruyf/vscode-front-matter/issues/778): Added the ability to open a file or webpage when custom scripts is completed
- [#783](https://github.com/estruyf/vscode-front-matter/issues/783): Always show the custom panel view
- [#785](https://github.com/estruyf/vscode-front-matter/issues/785): Adding common actions at the bottom of the content and media cards
- [#787](https://github.com/estruyf/vscode-front-matter/issues/787): Support for glob patterns in the page folder paths
- [#790](https://github.com/estruyf/vscode-front-matter/pull/790): Updated Japanese translations thanks to [mayumihara](https://github.com/mayumih387)
### 🐞 Fixes
- [#716](https://github.com/estruyf/vscode-front-matter/issues/716): Fix `dataFile` dropdown class
- [#768](https://github.com/estruyf/vscode-front-matter/issues/768): Update broken link to the documentation
- [#771](https://github.com/estruyf/vscode-front-matter/issues/771): Fix lowercase `data` tab label
- [#782](https://github.com/estruyf/vscode-front-matter/issues/782): Fix for setting the correct view when inserting media or snippets
- [#786](https://github.com/estruyf/vscode-front-matter/issues/786): Remove on startup as VSCode now triggers on known commands
## [10.0.2] - 2024-03-01
### 🐞 Fixes
- [#769](https://github.com/estruyf/vscode-front-matter/issues/769): Fix to remove internal properties for content folders
## [10.0.1] - 2024-02-28
### 🐞 Fixes
- [#766](https://github.com/estruyf/vscode-front-matter/issues/766): Fix for snippet placeholder retrieval
## [10.0.0] - 2024-02-28 - [Release notes](https://beta.frontmatter.codes/updates/v10.0.0)
### ✨ New features
- [#731](https://github.com/estruyf/vscode-front-matter/issues/731): Added the ability to map/unmap taxonomy to multiple pages at once
- [#746](https://github.com/estruyf/vscode-front-matter/issues/746): Placeholder support added to to the `slug` field
- [#749](https://github.com/estruyf/vscode-front-matter/issues/749): Ability to set your own filters on the content dashboard with the `frontMatter.content.filters` setting
- [#756](https://github.com/estruyf/vscode-front-matter/issues/756): i18n/multilingual content support
### 🎨 Enhancements
- [#673](https://github.com/estruyf/vscode-front-matter/pull/673): Added git settings to the welcome view and settings view
- [#727](https://github.com/estruyf/vscode-front-matter/pull/727): Updated Japanese translations thanks to [mayumihara](https://github.com/mayumih387)
- [#737](https://github.com/estruyf/vscode-front-matter/issues/737): Optimize the grid layout of the content and media dashboards
- [#739](https://github.com/estruyf/vscode-front-matter/pull/739): New Git settings to disable and require a commit message
- [#741](https://github.com/estruyf/vscode-front-matter/issues/741): Added message on the content dashboard when content is processed
- [#747](https://github.com/estruyf/vscode-front-matter/issues/747): The `@frontmatter/extensibility` dependency now supports scripts for placeholders
- [#752](https://github.com/estruyf/vscode-front-matter/issues/752): Placeholder support in default `list` field values
- Support for using the `fieldCollection` field in a `block` field
- Updated the list of commands which are available in the command palette
### 🐞 Fixes
- [#721](https://github.com/estruyf/vscode-front-matter/issues/721): Fix keywords regex to support unicode characters
- [#725](https://github.com/estruyf/vscode-front-matter/issues/725): Fix for opening menu of pinned items
- [#730](https://github.com/estruyf/vscode-front-matter/issues/730): Add debounce to the input fields
- [#738](https://github.com/estruyf/vscode-front-matter/issues/738): Fix when re-opening the preview after closing it
- [#743](https://github.com/estruyf/vscode-front-matter/issues/743): Fix for storing data in YAML data files
- [#745](https://github.com/estruyf/vscode-front-matter/issues/745): Fix for date field values in `block` field type
## [9.4.0] - 2023-12-12 - [Release notes](https://beta.frontmatter.codes/updates/v9.4.0)
### ✨ New features
- Localization implemented for the whole extension
### 🎨 Enhancements
- [#273](https://github.com/estruyf/vscode-front-matter/issues/273): Allow single value arrays to be set as a string with the `singleValueAsString` field property
- [#686](https://github.com/estruyf/vscode-front-matter/issues/686): Allow script authors to ask questions during script execution
- [#688](https://github.com/estruyf/vscode-front-matter/issues/688): Allow to show the scheduled articles in the content dashboard (filter and group)
- [#690](https://github.com/estruyf/vscode-front-matter/issues/690): Added the ability to filter values in the `contentRelationship` field
- [#700](https://github.com/estruyf/vscode-front-matter/issues/700): Added the `{{pathToken.relPath}}` placeholder for the `previewPath` property
- [#706](https://github.com/estruyf/vscode-front-matter/issues/706): Show the error of scripts failing in the Front Matter output panel
- [#709](https://github.com/estruyf/vscode-front-matter/issues/709): Take "where clause" into account on content creation
- [#710](https://github.com/estruyf/vscode-front-matter/issues/710): Hide child field when parent field its "when clause" is not met, also remove the fields from the content
- [#713](https://github.com/estruyf/vscode-front-matter/issues/713): Add the ability to always use quotes around string values in front matter
- [#722](https://github.com/estruyf/vscode-front-matter/issues/722): Allow to create sub-content which shows a dialog to select the parent folder
### ⚡️ Optimizations
- Dashboard layout grid optimizations
- Added the content-type name to the metadata section in the panel
- New implementation of the combobox for the `contentRelationship` field
### 🐞 Fixes
- [#685](https://github.com/estruyf/vscode-front-matter/issues/685): Fix when using non-string values in the tag picker
- [#691](https://github.com/estruyf/vscode-front-matter/issues/691): Silent authentication retrieval for GitHub sponsors
- [#694](https://github.com/estruyf/vscode-front-matter/issues/694): Start terminal session from the folder where the `frontmatter.json` file is located
- [#696](https://github.com/estruyf/vscode-front-matter/issues/696): Close the local server terminal on restart
- [#699](https://github.com/estruyf/vscode-front-matter/issues/699): Changing border theme variable for the dashboard header
- [#703](https://github.com/estruyf/vscode-front-matter/issues/703): Fix retrieval of Astro Collections for `pnpm` projects
- [#704](https://github.com/estruyf/vscode-front-matter/issues/704): Fix `zod` schema script for optional fields
- [#707](https://github.com/estruyf/vscode-front-matter/issues/707): Fix `clearEmpty` issue with `draft` and `boolean` fields which are by default set to `true`
- [#711](https://github.com/estruyf/vscode-front-matter/issues/711): Fix in character mapping in the slug field
- [#712](https://github.com/estruyf/vscode-front-matter/issues/712): Keep the search context when deleting media files
- [#714](https://github.com/estruyf/vscode-front-matter/issues/714): Fix for taxonomy filtering from taxonomy view to content view
- [#717](https://github.com/estruyf/vscode-front-matter/issues/717): Fix in loading yaml data files
- [#718](https://github.com/estruyf/vscode-front-matter/issues/718): Fix JSON schema for the `frontMatter.panel.actions.disabled` setting
- [#719](https://github.com/estruyf/vscode-front-matter/issues/719): Fix styling on data view with objects views
## [9.3.1] - 2023-10-27
### 🐞 Fixes
- [#697](https://github.com/estruyf/vscode-front-matter/issues/697): Fix missing localization key
## [9.3.0] - 2023-10-06 - [Release notes](https://beta.frontmatter.codes/updates/v9.3.0)
### ✨ New features
- [#80](https://github.com/estruyf/vscode-front-matter/issues/80): Minimal settings view for the Front Matter CMS
- [#553](https://github.com/estruyf/vscode-front-matter/issues/553): New `frontMatter.config.dynamicFilePath` setting which allows you to dynamically update the settings from a custom JS file
- [#563](https://github.com/estruyf/vscode-front-matter/issues/563): New `fieldCollection` to inherit/reuse fields in multiple content-types
- [#653](https://github.com/estruyf/vscode-front-matter/issues/653): Retrieve the Astro Content Collections to allow content type generation
- [#675](https://github.com/estruyf/vscode-front-matter/issues/675): Pinning content to the top of the content dashboard
### 🎨 Enhancements
- [#517](https://github.com/estruyf/vscode-front-matter/issues/517): Add `contentTypes` property to custom scripts to show/hide custom actions
- [#517](https://github.com/estruyf/vscode-front-matter/issues/517): Added `frontMatter.panel.actions.disabled` setting to define which actions should be hidden
- [#638](https://github.com/estruyf/vscode-front-matter/issues/638): Add Hexo support for the `_drafts` folder
- [#659](https://github.com/estruyf/vscode-front-matter/issues/659): Implement a filter for the taxonomy dashboard
- [#662](https://github.com/estruyf/vscode-front-matter/issues/662): Always show the `all articles` tab with the page counter
- [#663](https://github.com/estruyf/vscode-front-matter/issues/663): Make card tags clickable to filter the view
- [#669](https://github.com/estruyf/vscode-front-matter/issues/669): Add the video preview to the details panel + caption field
- [#674](https://github.com/estruyf/vscode-front-matter/issues/674): Specify to disable content creation for a specific page folder
- [#676](https://github.com/estruyf/vscode-front-matter/issues/676): Allow the `frontmatter.json` file to be placed in a sub-directory
- [#677](https://github.com/estruyf/vscode-front-matter/issues/677): Added support for [Browse Lite](https://marketplace.visualstudio.com/items?itemName=antfu.browse-lite) extension to open preview when installed
### 🐞 Fixes
- [#623](https://github.com/estruyf/vscode-front-matter/issues/623): Fix issue where metadata is not maintained on file move
- [#629](https://github.com/estruyf/vscode-front-matter/issues/629): Fix array indent to the new property
- [#660](https://github.com/estruyf/vscode-front-matter/issues/660): Allow only to select unique content relationship values
- [#661](https://github.com/estruyf/vscode-front-matter/issues/661): Fixing the dropdowns when used at the bottom of a collapsible group
- [#664](https://github.com/estruyf/vscode-front-matter/issues/664): Fix for parsing draft status in Hexo and Jekyll
- [#665](https://github.com/estruyf/vscode-front-matter/issues/665): Added `dev` parameter to Nuxt script
- [#668](https://github.com/estruyf/vscode-front-matter/issues/668): Reset pagination on media search
- [#678](https://github.com/estruyf/vscode-front-matter/issues/678): Check field type of `tags` fields for tags rendering on item cards
- [#681](https://github.com/estruyf/vscode-front-matter/issues/681): Fix SVG icons which are used in the VSCode UI
## [9.2.0] - 2023-09-11
### ✨ New features
- [#650](https://github.com/estruyf/vscode-front-matter/issues/650): Added template support for [Astro Starlight](https://starlight.astro.build/)
- [#655](https://github.com/estruyf/vscode-front-matter/issues/655): Added a new command to manually refresh the settings of the Front Matter CMS
### 🎨 Enhancements
- Grouping and status tabs enhancements
- Removed the status bar item to toggle the draft field
- Added a FM status bar item to open the dashboard
- [#570](https://github.com/estruyf/vscode-front-matter/issues/570): Clear empty values on content creation and editing
- [#645](https://github.com/estruyf/vscode-front-matter/issues/645): French localization added (thanks to [Clément Barbaza](https://github.com/cba85))
- [#649](https://github.com/estruyf/vscode-front-matter/issues/649): Parse optional variables from snippets
- [#652](https://github.com/estruyf/vscode-front-matter/issues/652): Show the start/stop server buttons depending on the local terminal session
- [#654](https://github.com/estruyf/vscode-front-matter/issues/654): Added a new action to open the content in the browser
### 🐞 Fixes
- [#646](https://github.com/estruyf/vscode-front-matter/issues/646): Update the Astro `3000` port to `4321`
- [#647](https://github.com/estruyf/vscode-front-matter/issues/647): Fix the open in browser action on the preview
- [#648](https://github.com/estruyf/vscode-front-matter/issues/648): Fix the global configuration reference to the URL of the schema file
- [#651](https://github.com/estruyf/vscode-front-matter/issues/651): Fix settings listeners which did not push updates to the webviews
- [#657](https://github.com/estruyf/vscode-front-matter/issues/657): Fix correctly updating front matter with scripts outcome on Windows
## [9.1.0] - 2023-08-31
### ✨ New features
- [#630](https://github.com/estruyf/vscode-front-matter/issues/630): Italian localization added (thanks to [Emanuele Bartolesi](https://github.com/kasuken))
### ⚡️ Optimizations
- [#639](https://github.com/estruyf/vscode-front-matter/issues/639): Add check for content type in page folders setting
- [#642](https://github.com/estruyf/vscode-front-matter/issues/642): Store the search index in a storage file
### 🐞 Fixes
- [#628](https://github.com/estruyf/vscode-front-matter/issues/628): Fix path argument and JSON data on custom scripts
- [#633](https://github.com/estruyf/vscode-front-matter/issues/633): Fix custom taxonomy used as single value
- [#634](https://github.com/estruyf/vscode-front-matter/issues/634): Fix public folder processing in case of Hexo
- [#635](https://github.com/estruyf/vscode-front-matter/issues/635): Fix UI themes make some links hard to discover or see
- [#636](https://github.com/estruyf/vscode-front-matter/issues/636): Fix media browser lightbox background color
- [#641](https://github.com/estruyf/vscode-front-matter/issues/641): Fix file parsing of the localization file
## [9.0.0] - 2023-08-21 - [Release notes](https://beta.frontmatter.codes/updates/v9.0.0)
### 🌎 Multilingual support

View File

@@ -25,9 +25,9 @@ Eager to start contributing? Great 🤩, you can contribute to the following pro
- Start by forking this project;
- Clone your fork to your local machine;
- Run `pnpm i`;
- Run `npm i`;
- Open the project in VS Code;
- To start developing, run `pnpm dev:ext` and press `f5` to start the debugging session.
- To start developing, run `npm run dev:ext` and press `f5` to start the debugging session.
### Tips

View File

@@ -54,6 +54,12 @@ A couple of our extension highlights that hopefully get you interested in giving
> If you see something missing in your article creation flow, please feel free to reach out.
**Version 10**
In version 10, we introduced the new i18n/multilingual support for your content. You can now manage your content in multiple languages, more information can be found in the [multilingual](https://frontmatter.codes/docs/content-creation/multilingual) section of our documentation.
![Multilingual support](https://beta.frontmatter.codes/releases/v10.0.0/multilingual-content.png)
**Version 9**
The extension is now available in multiple languages: English, German, and Japanese. Want to add your language? Check out the [localization the extension](https://frontmatter.codes/docs/contributing#translating-the-extension).
@@ -173,20 +179,49 @@ You can open showcase issues for the following things:
</a>
</p>
## 🖤 Backers & Sponsors 👇 🤘
## 💚 Backers & Sponsors 👇 🤘
<p align="center">
<img src="https://frontmatter.codes/api/img-sponsors" />
<img src="https://frontmatter.codes/api/img-sponsors" alt="Front Matter sponsors" />
</p>
<br />
<p align="center" title="Powered by Netlify">
<a href="https://www.netlify.com?utm_source=vscode-frontmatter&utm_campaign=oss">
<img src="https://frontmatter.codes/assets/sponsors/netlify-dark.png" alt="Deploys by Netlify" height="51px" />
</a>
</p>
<br />
<p align="center">
<a href="https://vercel.com/?utm_source=vscode-frontmatter&utm_campaign=oss">
<img src="https://frontmatter.codes/assets/sponsors/powered-by-vercel.png" />
</a>
<a href="http://bejs.io/" title="Supported by the BEJS Community">
<img src="https://frontmatter.codes/assets/sponsors/bejs-community.png" alt="Supported by the BEJS Community" height="50px"/>
</a>
</p>
## 📊 Telemetry
The Front Matter CMS extension collects telemetry data to help us build a better understand which features from the CMS are used. The extension respects the `telemetry.enableTelemetry` setting which you can learn more about in the [Visual Studio Code FAQ](https://aka.ms/vscode-remote/telemetry), or you can only disable it for the extension by configuring the `frontMatter.telemetry.disable` setting.
We only collect the following data:
- Type of event
- Extension title (main or beta)
- Extension version
No user-specific data is collected, you can check the telemetry implementation in the following files:
- [Telemetry class](https://github.com/estruyf/vscode-front-matter/blob/59528a3db01be8d34dc40638e6cf827090e31986/src/helpers/Telemetry.ts)
- [Metrics API](https://github.com/FrontMatter/web-documentation-nextjs/blob/main/pages/api/metrics.ts)
For crash reports in the webviews, we make use of Sentry to help us understand what went wrong. This data is only used to fix issues and improve the extension. You can find more information about the Sentry implementation in the following files:
- [Sentry config](https://github.com/estruyf/vscode-front-matter/blob/63e296d62f11be73ac86d9e823084247952a7ddc/src/utils/sentryInit.ts)
> The user ip address is not collected.
## 🔑 License
[MIT](./LICENSE)

View File

@@ -52,6 +52,12 @@ A couple of our extension highlights that hopefully get you interested in giving
> If you see something missing in your article creation flow, please feel free to reach out.
**Version 10**
In version 10, we introduced the new i18n/multilingual support for your content. You can now manage your content in multiple languages, more information can be found in the [multilingual](https://frontmatter.codes/docs/content-creation/multilingual) section of our documentation.
![Multilingual support](https://beta.frontmatter.codes/releases/v10.0.0/multilingual-content.png)
**Version 9**
The extension is now available in multiple languages: English, German, and Japanese. Want to add your language? Check out the [localization the extension](https://frontmatter.codes/docs/contributing#translating-the-extension).
@@ -171,7 +177,7 @@ You can open showcase issues for the following things:
</a>
</p>
## 🖤 Backers & Sponsors 👇 🤘
## 💚 Backers & Sponsors 👇 🤘
<p align="center">
<img src="https://frontmatter.codes/api/img-sponsors" alt="Front Matter sponsors" />
@@ -179,9 +185,17 @@ You can open showcase issues for the following things:
<br />
<p align="center" title="Powered by Vercel">
<a href="https://vercel.com/?utm_source=vscode-frontmatter&utm_campaign=oss">
<img src="https://frontmatter.codes/assets/sponsors/powered-by-vercel.png" alt="Powered by Vercel" />
<p align="center" title="Support by run.events">
<a href="https://run.events/?utm_source=frontmatter&utm_campaign=oss">
<img src="https://frontmatter.codes/assets/sponsors/runevents-purple.webp" alt="run.events - Event Management Platform" height="50px" />
</a>
</p>
<br />
<p align="center" title="Powered by Netlify">
<a href="https://www.netlify.com?utm_source=vscode-frontmatter&utm_campaign=oss">
<img src="https://frontmatter.codes/assets/sponsors/netlify-dark.png" alt="Deploys by Netlify" height="51px" />
</a>
</p>
@@ -193,6 +207,27 @@ You can open showcase issues for the following things:
</a>
</p>
## 📊 Telemetry
The Front Matter CMS extension collects telemetry data to help us build a better understand which features from the CMS are used. The extension respects the `telemetry.enableTelemetry` setting which you can learn more about in the [Visual Studio Code FAQ](https://aka.ms/vscode-remote/telemetry), or you can only disable it for the extension by configuring the `frontMatter.telemetry.disable` setting.
We only collect the following data:
- Type of event
- Extension title (main or beta)
- Extension version
No user-specific data is collected, you can check the telemetry implementation in the following files:
- [Telemetry class](https://github.com/estruyf/vscode-front-matter/blob/59528a3db01be8d34dc40638e6cf827090e31986/src/helpers/Telemetry.ts)
- [Metrics API](https://github.com/FrontMatter/web-documentation-nextjs/blob/main/pages/api/metrics.ts)
For crash reports in the webviews, we make use of Sentry to help us understand what went wrong. This data is only used to fix issues and improve the extension. You can find more information about the Sentry implementation in the following files:
- [Sentry config](https://github.com/estruyf/vscode-front-matter/blob/63e296d62f11be73ac86d9e823084247952a7ddc/src/utils/sentryInit.ts)
> The user ip address is not collected.
## 🔑 License
[MIT](./LICENSE)

17
SUPPORT.md Normal file
View File

@@ -0,0 +1,17 @@
# Support
This article provides information on how to get support for Front Matter CMS.
> 👉 Note: before participating in our community, please read our [code of conduct](./CODE_OF_CONDUCT.md). By interacting with this repository, organization, or community you agree to abide by its terms.
## Asking for help
There are a few different ways to ask for help with Front Matter CMS:
1. **GitHub Discussions**: You can ask questions and share your experiences in the [Discussions](https://github.com/estruyf/vscode-front-matter/discussions) section of this repository.
2. **GitHub Issues**: If you encounter a bug or have a feature request, you can open an issue in the [Issues](https://github.com/estruyf/vscode-front-matter/issues) section of this repository.
3. **Discord**: You can join our [Discord](https://discord.gg/JBVtNMsJFB) server and ask your questions there.
## Contributing
If you would like to contribute to Front Matter CMS, please read our [contributing guide](./CONTRIBUTING.md).

BIN
assets/frontmatter.woff Normal file

Binary file not shown.

View File

@@ -1,4 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="44" height="44" viewBox="0 0 24 24" stroke-width="2" stroke="#C5C5C5" fill="none" stroke-linecap="round" stroke-linejoin="round">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" stroke-width="2" stroke="#C5C5C5" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
<path d="M6 15h15" />
<path d="M21 19h-15" />

Before

Width:  |  Height:  |  Size: 449 B

After

Width:  |  Height:  |  Size: 449 B

View File

@@ -1,4 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="44" height="44" viewBox="0 0 24 24" stroke-width="2" stroke="#424242" fill="none" stroke-linecap="round" stroke-linejoin="round">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" stroke-width="2" stroke="#424242" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
<path d="M6 15h15" />
<path d="M21 19h-15" />

Before

Width:  |  Height:  |  Size: 449 B

After

Width:  |  Height:  |  Size: 449 B

View File

@@ -1,4 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="44" height="44" viewBox="0 0 24 24" stroke-width="2" stroke="#C5C5C5" fill="none" stroke-linecap="round" stroke-linejoin="round">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" stroke-width="2" stroke="#C5C5C5" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
<path d="M7 5h6a3.5 3.5 0 0 1 0 7h-6z" />
<path d="M13 12h1a3.5 3.5 0 0 1 0 7h-7v-7" />

Before

Width:  |  Height:  |  Size: 329 B

After

Width:  |  Height:  |  Size: 329 B

View File

@@ -1,4 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="44" height="44" viewBox="0 0 24 24" stroke-width="2" stroke="#424242" fill="none" stroke-linecap="round" stroke-linejoin="round">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" stroke-width="2" stroke="#424242" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
<path d="M7 5h6a3.5 3.5 0 0 1 0 7h-6z" />
<path d="M13 12h1a3.5 3.5 0 0 1 0 7h-7v-7" />

Before

Width:  |  Height:  |  Size: 329 B

After

Width:  |  Height:  |  Size: 329 B

View File

@@ -1,4 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 32 32">
<path fill="#C5C5C5" d="M16 19a6.99 6.99 0 0 1-5.833-3.129l1.666-1.107a5 5 0 0 0 8.334 0l1.666 1.107A6.99 6.99 0 0 1 16 19zm4-11a2 2 0 1 0 2 2a1.98 1.98 0 0 0-2-2zm-8 0a2 2 0 1 0 2 2a1.98 1.98 0 0 0-2-2z"/>
<path fill="#C5C5C5" d="M17.736 30L16 29l4-7h6a1.997 1.997 0 0 0 2-2V6a1.997 1.997 0 0 0-2-2H6a1.997 1.997 0 0 0-2 2v14a1.997 1.997 0 0 0 2 2h9v2H6a4 4 0 0 1-4-4V6a3.999 3.999 0 0 1 4-4h20a3.999 3.999 0 0 1 4 4v14a4 4 0 0 1-4 4h-4.835Z"/>
</svg>

Before

Width:  |  Height:  |  Size: 540 B

After

Width:  |  Height:  |  Size: 540 B

View File

@@ -1,4 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 32 32">
<path fill="#424242" d="M16 19a6.99 6.99 0 0 1-5.833-3.129l1.666-1.107a5 5 0 0 0 8.334 0l1.666 1.107A6.99 6.99 0 0 1 16 19zm4-11a2 2 0 1 0 2 2a1.98 1.98 0 0 0-2-2zm-8 0a2 2 0 1 0 2 2a1.98 1.98 0 0 0-2-2z"/>
<path fill="#424242" d="M17.736 30L16 29l4-7h6a1.997 1.997 0 0 0 2-2V6a1.997 1.997 0 0 0-2-2H6a1.997 1.997 0 0 0-2 2v14a1.997 1.997 0 0 0 2 2h9v2H6a4 4 0 0 1-4-4V6a3.999 3.999 0 0 1 4-4h20a3.999 3.999 0 0 1 4 4v14a4 4 0 0 1-4 4h-4.835Z"/>
</svg>

Before

Width:  |  Height:  |  Size: 540 B

After

Width:  |  Height:  |  Size: 540 B

View File

@@ -1,4 +1,4 @@
<svg width="32px" height="32px" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="#C5C5C5">
<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="#C5C5C5">
<path d="M9 9H4v1h5V9z" />
<path fill-rule="evenodd" clip-rule="evenodd" d="M5 3l1-1h7l1 1v7l-1 1h-2v2l-1 1H3l-1-1V6l1-1h2V3zm1 2h4l1 1v4h2V3H6v2zm4 1H3v7h7V6z" />
</svg>

Before

Width:  |  Height:  |  Size: 277 B

After

Width:  |  Height:  |  Size: 273 B

View File

@@ -1,4 +1,4 @@
<svg width="32px" height="32px" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="#424242">
<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="#424242">
<path d="M9 9H4v1h5V9z" />
<path fill-rule="evenodd" clip-rule="evenodd" d="M5 3l1-1h7l1 1v7l-1 1h-2v2l-1 1H3l-1-1V6l1-1h2V3zm1 2h4l1 1v4h2V3H6v2zm4 1H3v7h7V6z" />
</svg>

Before

Width:  |  Height:  |  Size: 277 B

After

Width:  |  Height:  |  Size: 273 B

View File

@@ -1,4 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="44" height="44" viewBox="0 0 24 24" stroke-width="2" stroke="#C5C5C5" fill="none" stroke-linecap="round" stroke-linejoin="round">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" stroke-width="2" stroke="#C5C5C5" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
<polyline points="7 8 3 12 7 16" />
<polyline points="17 8 21 12 17 16" />

Before

Width:  |  Height:  |  Size: 358 B

After

Width:  |  Height:  |  Size: 358 B

View File

@@ -1,4 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="44" height="44" viewBox="0 0 24 24" stroke-width="2" stroke="#424242" fill="none" stroke-linecap="round" stroke-linejoin="round">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" stroke-width="2" stroke="#424242" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
<polyline points="7 8 3 12 7 16" />
<polyline points="17 8 21 12 17 16" />

Before

Width:  |  Height:  |  Size: 358 B

After

Width:  |  Height:  |  Size: 358 B

View File

@@ -1,4 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="44" height="44" viewBox="0 0 24 24" stroke-width="2" stroke="#C5C5C5" fill="none" stroke-linecap="round" stroke-linejoin="round">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" stroke-width="2" stroke="#C5C5C5" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
<path d="M9 12h6" />
<path d="M12 9v6" />

Before

Width:  |  Height:  |  Size: 422 B

After

Width:  |  Height:  |  Size: 422 B

View File

@@ -1,4 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="44" height="44" viewBox="0 0 24 24" stroke-width="2" stroke="#424242" fill="none" stroke-linecap="round" stroke-linejoin="round">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" stroke-width="2" stroke="#424242" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
<path d="M9 12h6" />
<path d="M12 9v6" />

Before

Width:  |  Height:  |  Size: 422 B

After

Width:  |  Height:  |  Size: 422 B

View File

@@ -1,4 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="44" height="44" viewBox="0 0 24 24" stroke-width="2" stroke="#C5C5C5" fill="none" stroke-linecap="round" stroke-linejoin="round">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" stroke-width="2" stroke="#C5C5C5" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
<path d="M7 12h10" />
<path d="M7 4v16" />

Before

Width:  |  Height:  |  Size: 400 B

After

Width:  |  Height:  |  Size: 400 B

View File

@@ -1,4 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="44" height="44" viewBox="0 0 24 24" stroke-width="2" stroke="#424242" fill="none" stroke-linecap="round" stroke-linejoin="round">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" stroke-width="2" stroke="#424242" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
<path d="M7 12h10" />
<path d="M7 4v16" />

Before

Width:  |  Height:  |  Size: 400 B

After

Width:  |  Height:  |  Size: 400 B

View File

@@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="none" width="16" height="16" viewBox="0 0 24 24" stroke-width="2" stroke="#C5C5C5">
<path stroke-linecap="round" stroke-linejoin="round" d="m10.5 21 5.25-11.25L21 21m-9-3h7.5M3 5.621a48.474 48.474 0 0 1 6-.371m0 0c1.12 0 2.233.038 3.334.114M9 5.25V3m3.334 2.364C11.176 10.658 7.69 15.08 3 17.502m9.334-12.138c.896.061 1.785.147 2.666.257m-4.589 8.495a18.023 18.023 0 0 1-3.827-5.802" />
</svg>

After

Width:  |  Height:  |  Size: 442 B

View File

@@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="none" width="16" height="16" viewBox="0 0 24 24" stroke-width="2" stroke="#424242">
<path stroke-linecap="round" stroke-linejoin="round" d="m10.5 21 5.25-11.25L21 21m-9-3h7.5M3 5.621a48.474 48.474 0 0 1 6-.371m0 0c1.12 0 2.233.038 3.334.114M9 5.25V3m3.334 2.364C11.176 10.658 7.69 15.08 3 17.502m9.334-12.138c.896.061 1.785.147 2.666.257m-4.589 8.495a18.023 18.023 0 0 1-3.827-5.802" />
</svg>

After

Width:  |  Height:  |  Size: 442 B

View File

@@ -1,4 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="44" height="44" viewBox="0 0 24 24" stroke-width="2" stroke="#C5C5C5" fill="none" stroke-linecap="round" stroke-linejoin="round">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" stroke-width="2" stroke="#C5C5C5" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
<line x1="11" y1="5" x2="17" y2="5" />
<line x1="7" y1="19" x2="13" y2="19" />

Before

Width:  |  Height:  |  Size: 362 B

After

Width:  |  Height:  |  Size: 362 B

View File

@@ -1,4 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="44" height="44" viewBox="0 0 24 24" stroke-width="2" stroke="#424242" fill="none" stroke-linecap="round" stroke-linejoin="round">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" stroke-width="2" stroke="#424242" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
<line x1="11" y1="5" x2="17" y2="5" />
<line x1="7" y1="19" x2="13" y2="19" />

Before

Width:  |  Height:  |  Size: 362 B

After

Width:  |  Height:  |  Size: 362 B

View File

@@ -1,3 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" className="h-5 w-5" viewBox="0 0 20 20" fill="#C5C5C5" width="24" height="24">
<path fillRule="evenodd" d="M4 3a2 2 0 00-2 2v10a2 2 0 002 2h12a2 2 0 002-2V5a2 2 0 00-2-2H4zm12 12H4l4-8 3 6 2-4 3 6z" clipRule="evenodd" />
</svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" stroke-width="1.5" fill="#C5C5C5" width="16" height="16" class="w-6 h-6">
<path fill-rule="evenodd" d="M1.5 6a2.25 2.25 0 0 1 2.25-2.25h16.5A2.25 2.25 0 0 1 22.5 6v12a2.25 2.25 0 0 1-2.25 2.25H3.75A2.25 2.25 0 0 1 1.5 18V6ZM3 16.06V18c0 .414.336.75.75.75h16.5A.75.75 0 0 0 21 18v-1.94l-2.69-2.689a1.5 1.5 0 0 0-2.12 0l-.88.879.97.97a.75.75 0 1 1-1.06 1.06l-5.16-5.159a1.5 1.5 0 0 0-2.12 0L3 16.061Zm10.125-7.81a1.125 1.125 0 1 1 2.25 0 1.125 1.125 0 0 1-2.25 0Z" clip-rule="evenodd" />
</svg>

Before

Width:  |  Height:  |  Size: 269 B

After

Width:  |  Height:  |  Size: 555 B

View File

@@ -1,3 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" className="h-5 w-5" viewBox="0 0 20 20" fill="#424242" width="24" height="24">
<path fillRule="evenodd" d="M4 3a2 2 0 00-2 2v10a2 2 0 002 2h12a2 2 0 002-2V5a2 2 0 00-2-2H4zm12 12H4l4-8 3 6 2-4 3 6z" clipRule="evenodd" />
</svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" stroke-width="1.5" fill="#424242" width="16" height="16" class="w-6 h-6">
<path fill-rule="evenodd" d="M1.5 6a2.25 2.25 0 0 1 2.25-2.25h16.5A2.25 2.25 0 0 1 22.5 6v12a2.25 2.25 0 0 1-2.25 2.25H3.75A2.25 2.25 0 0 1 1.5 18V6ZM3 16.06V18c0 .414.336.75.75.75h16.5A.75.75 0 0 0 21 18v-1.94l-2.69-2.689a1.5 1.5 0 0 0-2.12 0l-.88.879.97.97a.75.75 0 1 1-1.06 1.06l-5.16-5.159a1.5 1.5 0 0 0-2.12 0L3 16.061Zm10.125-7.81a1.125 1.125 0 1 1 2.25 0 1.125 1.125 0 0 1-2.25 0Z" clip-rule="evenodd" />
</svg>

Before

Width:  |  Height:  |  Size: 269 B

After

Width:  |  Height:  |  Size: 555 B

View File

@@ -1,4 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="44" height="44" viewBox="0 0 24 24" stroke-width="2" stroke="#C5C5C5" fill="none" stroke-linecap="round" stroke-linejoin="round">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" stroke-width="2" stroke="#C5C5C5" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
<circle cx="12" cy="12" r="9" />
<line x1="8" y1="12" x2="8" y2="12.01" />

Before

Width:  |  Height:  |  Size: 408 B

After

Width:  |  Height:  |  Size: 408 B

View File

@@ -1,4 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="44" height="44" viewBox="0 0 24 24" stroke-width="2" stroke="#424242" fill="none" stroke-linecap="round" stroke-linejoin="round">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" stroke-width="2" stroke="#424242" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
<circle cx="12" cy="12" r="9" />
<line x1="8" y1="12" x2="8" y2="12.01" />

Before

Width:  |  Height:  |  Size: 408 B

After

Width:  |  Height:  |  Size: 408 B

View File

@@ -1,4 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-list-numbers" width="44" height="44" viewBox="0 0 24 24" stroke-width="2" stroke="#C5C5C5" fill="none" stroke-linecap="round" stroke-linejoin="round">
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-list-numbers" width="16" height="16" viewBox="0 0 24 24" stroke-width="2" stroke="#C5C5C5" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
<path d="M11 6h9" />
<path d="M11 12h9" />

Before

Width:  |  Height:  |  Size: 451 B

After

Width:  |  Height:  |  Size: 451 B

View File

@@ -1,4 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-list-numbers" width="44" height="44" viewBox="0 0 24 24" stroke-width="2" stroke="#424242" fill="none" stroke-linecap="round" stroke-linejoin="round">
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-list-numbers" width="16" height="16" viewBox="0 0 24 24" stroke-width="2" stroke="#424242" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
<path d="M11 6h9" />
<path d="M11 12h9" />

Before

Width:  |  Height:  |  Size: 451 B

After

Width:  |  Height:  |  Size: 451 B

View File

@@ -1,3 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="#C5C5C5" stroke-width="2">
<path stroke-linecap="round" stroke-linejoin="round" d="M14.121 14.121L19 19m-7-7l7-7m-7 7l-2.879 2.879M12 12L9.121 9.121m0 5.758a3 3 0 10-4.243 4.243 3 3 0 004.243-4.243zm0-5.758a3 3 0 10-4.243-4.243 3 3 0 004.243 4.243z" />
</svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" stroke-width="1.5" fill="#C5C5C5" width="16" height="16" class="w-6 h-6">
<path fill-rule="evenodd" d="M8.128 9.155a3.751 3.751 0 1 1 .713-1.321l1.136.656a.75.75 0 0 1 .222 1.104l-.006.007a.75.75 0 0 1-1.032.157 1.421 1.421 0 0 0-.113-.072l-.92-.531Zm-4.827-3.53a2.25 2.25 0 0 1 3.994 2.063.756.756 0 0 0-.122.23 2.25 2.25 0 0 1-3.872-2.293ZM13.348 8.272a5.073 5.073 0 0 0-3.428 3.57 5.08 5.08 0 0 0-.165 1.202 1.415 1.415 0 0 1-.707 1.201l-.96.554a3.751 3.751 0 1 0 .734 1.309l13.729-7.926a.75.75 0 0 0-.181-1.374l-.803-.215a5.25 5.25 0 0 0-2.894.05l-5.325 1.629Zm-9.223 7.03a2.25 2.25 0 1 0 2.25 3.897 2.25 2.25 0 0 0-2.25-3.897ZM12 12.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Z" clip-rule="evenodd" />
<path d="M16.372 12.615a.75.75 0 0 1 .75 0l5.43 3.135a.75.75 0 0 1-.182 1.374l-.802.215a5.25 5.25 0 0 1-2.894-.051l-5.147-1.574a.75.75 0 0 1-.156-1.367l3-1.732Z" />
</svg>

Before

Width:  |  Height:  |  Size: 357 B

After

Width:  |  Height:  |  Size: 939 B

View File

@@ -1,3 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="#424242" stroke-width="2">
<path stroke-linecap="round" stroke-linejoin="round" d="M14.121 14.121L19 19m-7-7l7-7m-7 7l-2.879 2.879M12 12L9.121 9.121m0 5.758a3 3 0 10-4.243 4.243 3 3 0 004.243-4.243zm0-5.758a3 3 0 10-4.243-4.243 3 3 0 004.243 4.243z" />
</svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" stroke-width="1.5" fill="#424242" width="16" height="16" class="w-6 h-6">
<path fill-rule="evenodd" d="M8.128 9.155a3.751 3.751 0 1 1 .713-1.321l1.136.656a.75.75 0 0 1 .222 1.104l-.006.007a.75.75 0 0 1-1.032.157 1.421 1.421 0 0 0-.113-.072l-.92-.531Zm-4.827-3.53a2.25 2.25 0 0 1 3.994 2.063.756.756 0 0 0-.122.23 2.25 2.25 0 0 1-3.872-2.293ZM13.348 8.272a5.073 5.073 0 0 0-3.428 3.57 5.08 5.08 0 0 0-.165 1.202 1.415 1.415 0 0 1-.707 1.201l-.96.554a3.751 3.751 0 1 0 .734 1.309l13.729-7.926a.75.75 0 0 0-.181-1.374l-.803-.215a5.25 5.25 0 0 0-2.894.05l-5.325 1.629Zm-9.223 7.03a2.25 2.25 0 1 0 2.25 3.897 2.25 2.25 0 0 0-2.25-3.897ZM12 12.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Z" clip-rule="evenodd" />
<path d="M16.372 12.615a.75.75 0 0 1 .75 0l5.43 3.135a.75.75 0 0 1-.182 1.374l-.802.215a5.25 5.25 0 0 1-2.894-.051l-5.147-1.574a.75.75 0 0 1-.156-1.367l3-1.732Z" />
</svg>

Before

Width:  |  Height:  |  Size: 357 B

After

Width:  |  Height:  |  Size: 939 B

View File

@@ -1,4 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="44" height="44" viewBox="0 0 24 24" stroke-width="2" stroke="#C5C5C5" fill="none" stroke-linecap="round" stroke-linejoin="round">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" stroke-width="2" stroke="#C5C5C5" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
<path d="M7 5v9a5 5 0 0 0 10 0v-9" />
<path d="M4 12h16" />

Before

Width:  |  Height:  |  Size: 301 B

After

Width:  |  Height:  |  Size: 301 B

View File

@@ -1,4 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="44" height="44" viewBox="0 0 24 24" stroke-width="2" stroke="#424242" fill="none" stroke-linecap="round" stroke-linejoin="round">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" stroke-width="2" stroke="#424242" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
<path d="M7 5v9a5 5 0 0 0 10 0v-9" />
<path d="M4 12h16" />

Before

Width:  |  Height:  |  Size: 301 B

After

Width:  |  Height:  |  Size: 301 B

View File

@@ -1,4 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-list" width="44" height="44" viewBox="0 0 24 24" stroke-width="2" stroke="#C5C5C5" fill="none" stroke-linecap="round" stroke-linejoin="round">
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-list" width="16" height="16" viewBox="0 0 24 24" stroke-width="2" stroke="#C5C5C5" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
<line x1="9" y1="6" x2="20" y2="6" />
<line x1="9" y1="12" x2="20" y2="12" />

Before

Width:  |  Height:  |  Size: 533 B

After

Width:  |  Height:  |  Size: 533 B

View File

@@ -1,4 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-list" width="44" height="44" viewBox="0 0 24 24" stroke-width="2" stroke="#424242" fill="none" stroke-linecap="round" stroke-linejoin="round">
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-list" width="16" height="16" viewBox="0 0 24 24" stroke-width="2" stroke="#424242" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
<line x1="9" y1="6" x2="20" y2="6" />
<line x1="9" y1="12" x2="20" y2="12" />

Before

Width:  |  Height:  |  Size: 533 B

After

Width:  |  Height:  |  Size: 533 B

View File

@@ -66,43 +66,6 @@
padding: 1rem 1.25rem;
}
.spinner,
.spinner:before,
.spinner:after {
border-radius: 50%;
width: 2em;
height: 2em;
animation-fill-mode: both;
animation: load7 1.8s infinite ease-in-out;
}
.spinner {
color: var(--vscode-panelSectionHeader-foreground);
font-size: 10px;
margin: 80px auto;
position: relative;
text-indent: -9999em;
transform: translateZ(0);
animation-delay: -0.16s;
}
.spinner:before,
.spinner:after {
content: '';
position: absolute;
top: 0;
}
.spinner:before {
left: -3.5em;
-webkit-animation-delay: -0.32s;
animation-delay: -0.32s;
}
.spinner:after {
left: 3.5em;
}
.frontmatter {
padding-top: 0;
padding-bottom: var(--input-margin-vertical);
@@ -284,14 +247,6 @@
background-color: var(--vscode-button-secondaryHoverBackground);
}
.table__cell {
overflow: hidden;
}
.table__title {
text-transform: capitalize;
}
.table__cell__seo_details {
padding: 10px;
}
@@ -318,11 +273,6 @@
margin-left: 0.5rem;
}
.seo__status__note {
font-size: 10px;
padding: 3px 0;
}
/* Fields */
.field__toggle {
position: relative;
@@ -401,7 +351,7 @@ input:checked + .field__toggle__slider:before {
}
/* File list */
.file_list vscode-label {
.file_list label {
border-bottom: 1px solid var(--vscode-foreground);
}

View File

@@ -1,78 +0,0 @@
import { By, VSBrowser, EditorView, WebView, Workbench, Notification, StatusBar, NotificationType } from "vscode-extension-tester";
import { expect } from "chai";
import { sleep } from "./utils";
import { join } from "path";
// https://github.com/microsoft/vscode-java-dependency/blob/4256fa6adcaff5ec24dbdbb8d9a516fad21431c5/test/ui/index.ts
// https://github.com/microsoft/vscode-java-dependency/blob/4256fa6adcaff5ec24dbdbb8d9a516fad21431c5/test/ui/command.test.ts
describe("Initialization testing", function() {
this.timeout(2 * 60 * 1000 /*ms*/);
let workbench: Workbench;
let view: WebView;
before(async function() {
await VSBrowser.instance.openResources(join(__dirname, '../sample'));
await sleep(3000);
workbench = new Workbench();
await workbench.executeCommand("frontMatter.dashboard");
await sleep(3000);
await new EditorView().openEditor(`FrontMatter Dashboard`);
view = new WebView();
await view.switchToFrame();
});
it("1. Open welcome dashboard", async function() {
const element = await view.findWebElement(By.css('h1'));
const title = await element.getText();
expect(title).has.string(`Front Matter`);
});
it("2. Initialize project", async function() {
const btn = await view.findWebElement(By.css('[data-test="welcome-init"] button'));
expect(btn).to.exist;
await btn.click();
await sleep(1000);
await VSBrowser.instance.driver.wait(() => {
return notificationExists(workbench, 'Front Matter:');
}, 2000) as Notification;
const notifications = await workbench.getNotifications();
let notification!: Notification;
for (const not of notifications) {
console.log(not);
// const message = await not.get;
// console.log(message);
// if (message.includes('Front Matter:')) {
// notification = not;
// }
}
expect(await notification.getMessage()).has.string(`Project initialized successfully.`);
});
it("3. Check if project file is created", async function() {});
});
async function notificationExists(workbench: Workbench, text: string): Promise<Notification | undefined> {
const notifications = await (await (new StatusBar()).openNotificationsCenter()).getNotifications(NotificationType.Info);
for (const notification of notifications) {
const message = await notification.getMessage();
if (message.indexOf(text) >= 0) {
return notification;
}
}
}

View File

@@ -1,33 +0,0 @@
import * as path from 'path'
import * as semver from 'semver'
import { ExTester, ReleaseQuality } from 'vscode-extension-tester'
async function main(): Promise<void> {
const vsCodeVersion: semver.SemVer = new semver.SemVer(`1.66.0`)
const version = vsCodeVersion.version
const storageFolder = path.join(__dirname, '..', 'storage')
const extFolder = path.join(__dirname, '..', 'extensions')
try {
const testPath = path.join(__dirname, 'command.test.js')
const exTester = new ExTester(storageFolder, ReleaseQuality.Stable, extFolder)
await exTester.downloadCode(version)
await exTester.installVsix({ useYarn: false })
// await exTester.installFromMarketplace("eliostruyf.vscode-front-matter");
await exTester.downloadChromeDriver(version)
// await exTester.setupRequirements({vscodeVersion: version});
const result = await exTester.runTests(testPath, {
vscodeVersion: version,
resources: [storageFolder],
})
process.exit(result)
} catch (err) {
console.log(err)
process.exit(1)
}
}
main()

View File

@@ -1 +0,0 @@
export * from './sleep';

View File

@@ -1,3 +0,0 @@
export async function sleep(time: number) {
await new Promise((resolve) => setTimeout(resolve, time));
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 218 KiB

BIN
fixes.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 201 KiB

View File

@@ -1,5 +1,6 @@
{
"$schema": "https://beta.frontmatter.codes/frontmatter.schema.json",
"frontMatter.snippets.wrapper.enabled": false,
"frontMatter.framework.id": "other",
"frontMatter.content.publicFolder": "",
"frontMatter.content.pageFolders": [

View File

@@ -332,5 +332,33 @@
"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."
"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.",
"dashboard.steps.stepsToGetStarted.template.name": "Verwende eine Konfigurationsvorlage",
"dashboard.steps.stepsToGetStarted.template.description": "Wählen Sie eine Vorlage aus, um die Datei frontmatter.json mit den empfohlenen Einstellungen vorzufüllen.",
"listeners.dashboard.settingsListener.triggerTemplate.notification": "Vorlagendateien kopiert.",
"common.openOnWebsite": "Auf der Website öffnen",
"common.filter.value": "Filtern nach {0}",
"dashboard.media.detailsSlideOver.unmapped.description": "Möchten Sie die Metadaten von nicht zugeordneten Dateien neu zuordnen?",
"common.settings": "Einstellungen",
"common.refreshSettings": "Einstellungen aktualisieren",
"common.pin": "Stecknadel",
"common.unpin": "Losheften",
"settings.view.common": "Gemeinsam",
"settings.view.contentFolders": "Inhaltsordner",
"settings.view.astro": "Astro",
"settings.openOnStartup": "Öffnen Sie das Dashboard beim Start",
"settings.contentTypes": "Inhaltstypen",
"settings.contentFolders": "Inhaltsordner",
"settings.diagnostic": "Diagnostisch",
"settings.diagnostic.description": "Sie können die Diagnose ausführen, um die gesamte Front Matter CMS-Konfiguration zu überprüfen.",
"settings.diagnostic.link": "Führen Sie eine vollständige Diagnose durch",
"settings.commonSettings.website.title": "Website- und SSG-Einstellungen",
"settings.commonSettings.previewUrl": "Vorschau-URL",
"settings.commonSettings.websiteUrl": "Website-URL",
"settings.commonSettings.startCommand": "SSG/Framework-Startbefehl",
"dashboard.contents.overview.pinned": "Angeheftet",
"dashboard.steps.stepsToGetStarted.astroContentTypes.name": "Erstellen Sie Content-Typen für Ihre Astro Content Collections",
"dashboard.welcomeScreen.link.documentation.label": "Dokumentation",
"dashboard.configuration.astro.astroContentTypes.empty": "Es wurden keine Astro Content Collections gefunden.",
"dashboard.configuration.astro.astroContentTypes.description": "Die folgenden Astro Content Collections und können verwendet werden, um einen Inhaltstyp zu generieren."
}

1
l10n/bundle.l10n.es.json Normal file
View File

@@ -0,0 +1 @@
{}

364
l10n/bundle.l10n.fr.json Normal file
View File

@@ -0,0 +1,364 @@
{
"common.add": "Ajouter",
"common.edit": "Modifier",
"common.delete": "Supprimer",
"common.cancel": "Annuler",
"common.clear": "Réinitialiser",
"common.clear.value": "Réinitialiser la valeur",
"common.search": "Rechercher",
"common.save": "Sauvegarder",
"common.menu": "Menu",
"common.insert": "Insérer",
"common.insert.snippet": "Insérer snippet",
"common.title": "Titre",
"common.description": "Description",
"common.retry": "Réessayer",
"common.update": "Mettre à jour",
"common.information": "Information",
"common.important": "Important",
"common.sync": "Synchroniser",
"common.slug": "Slug",
"common.support": "Support",
"common.remove.value": "Supprimer {0}",
"common.error.message": "Désolé, une erreur s'est produite.",
"developer.title": "Mode développeur",
"developer.reload.title": "Recharger le tableau de bord",
"developer.reload.label": "Recharger",
"developer.devTools.title": "Ouvrir les options pour les développeurs",
"developer.devTools.label": "Options pour les développeurs",
"field.required": "Champ obligatoire",
"field.unknown": "Champ inconnu",
"dashboard.chatbot.answer.answer": "Réponse",
"dashboard.chatbot.answer.resources": "Ressources",
"dashboard.chatbot.answer.warning": "Attention : les réponses peuvent être fausses. En cas de doute, consultez la documentation.",
"dashboard.chatbot.chatbot.loading": "L'assistant se charge",
"dashboard.chatbot.chatbot.ready": "Je suis prêt, que voulez-vous savoir ?",
"dashboard.chatbot.chatbox.placeholder": "Comment configurer Front Matter ?",
"dashboard.chatbot.header.heading": "Demander à Front Matter AI",
"dashboard.chatbot.header.description": "Notre IA, propulsée par mendable.ai, a élaboré la documentation et peut maintenant vous aider concernant n'importe quelle demande sur Front Matter. Allez-y, demandez lui quelque chose!",
"dashboard.common.choiceButton.open": "Ouvrir les options",
"dashboard.contents.contentActions.actionMenuButton.title": "Menu",
"dashboard.contents.contentActions.menuItem.view": "Vue",
"dashboard.contents.contentActions.alert.title": "Supprimer : {0}",
"dashboard.contents.contentActions.alert.description": "Etes-vous sûr de vouloir supprimer le contenu \"{0}\" ?",
"dashboard.contents.item.invalidTitle": "<titre invalide>",
"dashboard.contents.item.invalidDescription": "<description invalide>",
"dashboard.contents.list.title": "Titre",
"dashboard.contents.list.date": "Date",
"dashboard.contents.list.status": "Statut",
"dashboard.contents.overview.noMarkdown": "Aucun Markdown à afficher",
"dashboard.contents.overview.noFolders": "Enregistez un dossier de contenu dans votre projet pour que Front Matter puisse trouver vos contenus.",
"dashboard.contents.status.draft": "Brouillon",
"dashboard.contents.status.published": "En-ligne",
"dashboard.dataView.dataForm.modify": "Modifier les données",
"dashboard.dataView.dataForm.add": "Ajouter une nouvelle donnée",
"dashboard.dataView.dataView.select": "Sélectionnez votre type de donnée",
"dashboard.dataView.dataView.title": "Votre entrée de donnée {0}",
"dashboard.dataView.dataView.add": "Ajouter une nouvelle entrée",
"dashboard.dataView.dataView.empty": "Aucune entrée trouvée pour {0}",
"dashboard.dataView.dataView.createOrModify": "Créer ou modifier votre donnée {0}",
"dashboard.dataView.dataView.getStarted": "Sélectionnez un type de données pour commencer",
"dashboard.dataView.dataView.noDataFiles": "Aucun fichier de données trouvé",
"dashboard.dataView.dataView.getStarted.link": "En savoir plus sur l'utilisation des données",
"dashboard.dataView.emptyView.heading": "Sélectionnez d'abord votre type de données",
"dashboard.dataView.sortableItem.editButton.title": "Modifier \"{0}\"",
"dashboard.dataView.sortableItem.deleteButton.title": "Supprimer \"{0}\"",
"dashboard.dataView.sortableItem.alert.title": "Supprimer la valeur",
"dashboard.dataView.sortableItem.alert.description": "Etes-vous sûr de vouloir supprimer cette valeur?",
"dashboard.errorView.description": "Merci de fermer le tableau de bord et de réessayer.",
"dashboard.header.breadcrumb.home": "Accueil",
"dashboard.header.clearFilters.title": "Réinitialiser les filtres, les groupes et le tri",
"dashboard.header.filter.default": "Aucun filtre",
"dashboard.header.folders.default": "Tous les types",
"dashboard.header.folders.menuButton.showing": "Afficher",
"dashboard.header.grouping.option.none": "Aucun",
"dashboard.header.grouping.option.year": "Année",
"dashboard.header.grouping.option.draft": "Brouillon/En-ligne",
"dashboard.header.grouping.menuButton.label": "Groupé par",
"dashboard.header.navigation.allArticles": "Tous les articles",
"dashboard.header.navigation.published": "En-ligne",
"dashboard.header.navigation.draft": "Brouillon",
"dashboard.header.header.createContent": "Créer contenu",
"dashboard.header.header.createByContentType": "Créer par type de contenu",
"dashboard.header.header.createByTemplate": "Créer par modèle",
"dashboard.header.pagination.first": "Premier",
"dashboard.header.pagination.previous": "Précédent",
"dashboard.header.pagination.next": "suivant",
"dashboard.header.pagination.last": "Dernier",
"dashboard.header.paginationStatus.text": "Afficher {0} de {1} des {2} résultats",
"dashboard.header.projectSwitcher.label": "projet",
"dashboard.header.refreshDashboard.label": "Actualiser le dashboard",
"dashboard.header.sorting.lastModified.asc": "Dernière modification (croissant)",
"dashboard.header.sorting.lastModified.desc": "Dernière modification (décroissant)",
"dashboard.header.sorting.filename.asc": "Par nom de fichier (croissant)",
"dashboard.header.sorting.filename.desc": "Par nom de fichier (décroissant)",
"dashboard.header.sorting.published.asc": "En-ligne (croissant)",
"dashboard.header.sorting.published.desc": "En-ligne (décroissant)",
"dashboard.header.sorting.size.asc": "Taille (croissant)",
"dashboard.header.sorting.size.desc": "Taille (décroissant)",
"dashboard.header.sorting.caption.asc": "Légende (croissant)",
"dashboard.header.sorting.caption.desc": "Légende (décroissant)",
"dashboard.header.sorting.alt.asc": "Alt (croissant)",
"dashboard.header.sorting.alt.desc": "Alt (décroissant)",
"dashboard.header.sorting.label": "Trier par",
"dashboard.header.startup.label": "Ouvrir au démarrage?",
"dashboard.header.tabs.contents": "Contenus",
"dashboard.header.tabs.media": "Médias",
"dashboard.header.tabs.snippets": "Snippets",
"dashboard.header.tabs.data": "Données",
"dashboard.header.tabs.taxonomies": "Taxonomies",
"dashboard.header.viewSwitch.toGrid": "Afficher en grille",
"dashboard.header.viewSwitch.toList": "Afficher en liste",
"dashboard.layout.sponsor.support.msg": "Soutenir Front Matter",
"dashboard.layout.sponsor.review.label": "Donnez votre avis",
"dashboard.layout.sponsor.review.msg": "Donnez votre avis sur Front Matter",
"dashboard.media.common.title": "Titre",
"dashboard.media.common.caption": "Légende",
"dashboard.media.common.alt": "Texte alternatif",
"dashboard.media.common.size": "Taille",
"dashboard.media.dialog.title": "Voir les détails",
"dashboard.media.panel.close": "Fermer le panneau",
"dashboard.media.metadata.panel.title": "Mettre à jour les métadonnées",
"dashboard.media.metadata.panel.description": "Spécifiez les métadonnées que vous voulez utiliser pour ce fichier.",
"dashboard.media.metadata.panel.field.fileName": "Nom de fichier",
"dashboard.media.metadata.panel.form.metadata.title": "Métadonnées",
"dashboard.media.metadata.panel.form.information.title": "Information",
"dashboard.media.metadata.panel.form.information.createdDate": "Créé",
"dashboard.media.metadata.panel.form.information.modifiedDate": "Dernières modifications",
"dashboard.media.metadata.panel.form.information.dimensions": "Dimensions",
"dashboard.media.metadata.panel.form.information.folder": "Dossier",
"dashboard.media.folderCreation.hexo.create": "Créer un dossier de ressource de l'article",
"dashboard.media.folderCreation.folder.create": "Créer un nouveau dossier",
"dashboard.media.item.quickAction.insert.field": "Insérer une image pour le champ \"{0}\"",
"dashboard.media.item.quickAction.insert.markdown": "Insérer une image avec le markup markdown",
"dashboard.media.item.quickAction.copy.path": "Copier le chemin du média",
"dashboard.media.item.quickAction.delete": "Supprimer le fichier du média",
"dashboard.media.item.menuItem.edit.metadata": "Modifier les métadonnées",
"dashboard.media.item.menuItem.insert.image": "Insérer une image",
"dashboard.media.item.menuItem.reveal.media": "Afficher le média",
"dashboard.media.item.infoDialog.snippet.description": "Sélectionnez le snippet de média à utiliser pour le fichier de média courant.",
"dashboard.media.item.alert.delete.description": "Etes-vous sûr de vouloir supprimer le fichier du dossier {0} ?",
"dashboard.media.media.description": "Sélectionnez le fichier média à ajouter à votre contenu.",
"dashboard.media.media.dragAndDrop": "Vous pouvez aussi glisser-déposer des images depuis votre bureau et les sélectionner une fois envoyés.",
"dashboard.media.media.folder.upload": "Envoyer dans {0}",
"dashboard.media.media.folder.default": "Aucun dossier sélectionné, les fichiers que vous envoyez seront ajoutés au dossier {0}",
"dashboard.media.media.placeholder": "Aucun fichier de média à afficher. Vous pouvez glisser-déposer de nouveaux fichiers en maintenant la touche [shift] appuyée.",
"dashboard.media.media.contentFolder": "Dossier de contenu",
"dashboard.media.media.publicFolder": "Dossier public",
"dashboard.media.mediaHeaderTop.searchbox.placeholder": "Rechercher dans le dossier",
"dashboard.media.mediaSnippetForm.formDialog.title": "Insérer un média: {0}",
"dashboard.media.mediaSnippetForm.formDialog.description": "Insérer le fichier de média {0} dans l'article courant",
"dashboard.preview.input.placeholder": "Entrer une URL",
"dashboard.preview.button.navigate.title": "Naviguer",
"dashboard.preview.button.refresh.title": "Rafraichir",
"dashboard.preview.button.open.title": "Ouvrir",
"dashboard.snippetsView.item.quickAction.editSnippet": "Modifier le snippet",
"dashboard.snippetsView.item.quickAction.deleteSnippet": "Supprimer le snippet",
"dashboard.snippetsView.item.quickAction.viewSnippet": "Voir le fichier de snippet",
"dashboard.snippetsView.item.insert.formDialog.title": "Insérer le snippet: {0}",
"dashboard.snippetsView.item.insert.formDialog.description": "Insérer le snippet {0} dans l'article courant",
"dashboard.snippetsView.item.edit.formDialog.title": "Modifier le snippet: {0}",
"dashboard.snippetsView.item.edit.formDialog.description": "Modifier le snippet {0}",
"dashboard.snippetsView.item.alert.title": "Supprimer le snippet : {0}",
"dashboard.snippetsView.item.alert.description": "Etes-vous sûr de vouloir supprimer le snippet {0} ?",
"dashboard.snippetsView.newForm.snippetInput.title.placeholder": "Titre ",
"dashboard.snippetsView.newForm.snippetInput.description.label": "Description",
"dashboard.snippetsView.newForm.snippetInput.description.placeholder": "Description du snippet",
"dashboard.snippetsView.newForm.snippetInput.snippet.label": "Snippet",
"dashboard.snippetsView.newForm.snippetInput.snippet.placeholder": "Contenu du snippet",
"dashboard.snippetsView.newForm.snippetInput.isMediaSnippet.label": "Snippet média ?",
"dashboard.snippetsView.newForm.snippetInput.isMediaSnippet.checkbox.label": "Snippet média",
"dashboard.snippetsView.newForm.snippetInput.isMediaSnippet.checkbox.description": "Utiliser le snippet actuel pour insérer des fichiers médias dans votre contenu.",
"dashboard.snippetsView.newForm.snippetInput.docsButton.title": "En savoir plus sur l'utilisation des substituts de snippet médias",
"dashboard.snippetsView.newForm.snippetInput.docsButton.description": "Vérifier la documentation des substituts de snippet média pour savoir quel substitut utiliser.",
"dashboard.snippetsView.snippets.ariaLabel": "En-tête de snippet",
"dashboard.snippetsView.snippets.button.create": "Créer un nouveau snippet",
"dashboard.snippetsView.snippets.select.description": "Sélectionnez le snippet à ajouter à votre contenu.",
"dashboard.snippetsView.snippets.empty.message": "Aucun snippet trouvé",
"dashboard.snippetsView.snippets.readMore": "En savoir plus sur l'utilisation des snippets",
"dashboard.snippetsView.snippets.formDialog.title": "Créer un snippet",
"dashboard.steps.stepsToGetStarted.button.addFolder.title": "Ajouter un dossier de contenu à Front Matter",
"dashboard.steps.stepsToGetStarted.initializeProject.name": "Initialiser le projet",
"dashboard.steps.stepsToGetStarted.initializeProject.description": "Initialiser le projet crée les fichiers et dossiers nécéssaire au bon fonctionnement du CMS Front Matter. Commencez par cliquer sur cette action.",
"dashboard.steps.stepsToGetStarted.framework.name": "Réglages framework",
"dashboard.steps.stepsToGetStarted.framework.description": "Sélectionnez votre générateur de site ou votre framework pour pré-remplir les paramètres recommandés.",
"dashboard.steps.stepsToGetStarted.framework.select": "Sélectionnez votre framework",
"dashboard.steps.stepsToGetStarted.framework.select.other": "autre",
"dashboard.steps.stepsToGetStarted.assetsFolder.name": "Quel est votre dossier de ressources ?",
"dashboard.steps.stepsToGetStarted.assetsFolder.description": "Sélectionner le dossier contenant vos ressources. Ce dossier sera utilisé pour stocker tous les fichiers médias de vos articles.",
"dashboard.steps.stepsToGetStarted.assetsFolder.public.title": "Utiliser le dossier 'public'",
"dashboard.steps.stepsToGetStarted.assetsFolder.assets.title": "Utiliser le dossier de ressources d'Astro (src/assets)",
"dashboard.steps.stepsToGetStarted.assetsFolder.other.description": "Si vous voulez configurer un autre dossier, vous pouvez le faire manuellement dans le fichier frontmatter.json.",
"dashboard.steps.stepsToGetStarted.contentFolders.name": "Enregistrer le ou less dossiers de contenus ?",
"dashboard.steps.stepsToGetStarted.contentFolders.description": "Ajouter un des dossiers que nous avons trouvé dans votre projet en tant que dossier de contenus. Une fois ce dossier sélectionné, Front Matter pourra lister tous les contenus et vous permettra de créer vos contenus.",
"dashboard.steps.stepsToGetStarted.contentFolders.label": "Dossiers contenant des contenus :",
"dashboard.steps.stepsToGetStarted.contentFolders.information.description": "Vous pouvez aussi effectuer cette action en faisant un clic droit sur le dossier dans la vue d'exploration, et sélectionner le dossier à enregister.",
"dashboard.steps.stepsToGetStarted.tags.name": "Importer tous les tags et toutes les catégories (optionnel)",
"dashboard.steps.stepsToGetStarted.tags.description": "Maintenant que Front Matter connaît tous vos dossiers de contenus, voulez-vous importer tous les tags et toutes les catégories de ces contenus ?",
"dashboard.steps.stepsToGetStarted.showDashboard.name": "Afficher le tableau de bord",
"dashboard.steps.stepsToGetStarted.showDashboard.description": "Une fois que toutes ces actions sont effectuées, le tableau de bord pourra être chargé.",
"dashboard.taxonomyView.button.add.title": "Ajouter {0} aux paramètres de taxonomie",
"dashboard.taxonomyView.button.edit.title": "Modifier {0}",
"dashboard.taxonomyView.button.merge.title": "Fusionner {0}",
"dashboard.taxonomyView.button.move.title": "Déplacer dans un autre type de taxonomie",
"dashboard.taxonomyView.button.delete.title": "Supprimer {0}",
"dashboard.taxonomyView.taxonomyLookup.button.title": "Afficher les contenus contenants {0} dans {1}",
"dashboard.taxonomyView.taxonomyManager.description": "Créer, modifier, et gérer le {0} de votre site",
"dashboard.taxonomyView.taxonomyManager.button.create": "Créer une nouvelle valeur pour {0}",
"dashboard.taxonomyView.taxonomyManager.table.heading.name": "Nom",
"dashboard.taxonomyView.taxonomyManager.table.heading.count": "Compteur",
"dashboard.taxonomyView.taxonomyManager.table.heading.action": "Action",
"dashboard.taxonomyView.taxonomyManager.table.row.empty": "Aucun {0} trouvé",
"dashboard.taxonomyView.taxonomyManager.table.unmapped.title": "Paramètre manquant",
"dashboard.taxonomyView.taxonomyView.navigationBar.title": "Sélectionnez la taxonomie",
"dashboard.taxonomyView.taxonomyView.button.import": "Importer la taxonomie",
"dashboard.taxonomyView.taxonomyView.navigationItem.tags": "Tags",
"dashboard.taxonomyView.taxonomyView.navigationItem.categories": "Catégories",
"dashboard.unkownView.title": "La vue n'existe pas",
"dashboard.unkownView.description": "Il semble que vous ayez fermé une vue qui n'existe plus. Merci de réouvrir votre tableau de bord.",
"dashboard.welcomeScreen.title": "Gérer votre site statique avec Front Matter",
"dashboard.welcomeScreen.thanks": "Merci d'utiliser Front Matter !",
"dashboard.welcomeScreen.description": "Nous faisons de notre mieux pour faire de Front Maker un CMS facile à utiliser. Si vous avez des questions ou des suggestions, n'hésitez pas à nous contacter sur Github.",
"dashboard.welcomeScreen.link.github.title": "GitHub",
"dashboard.welcomeScreen.link.github.label": "GitHub / Documentation",
"dashboard.welcomeScreen.link.sponsor.title": "Devenez contributeur",
"dashboard.welcomeScreen.link.sponsor.label": "Contributeur",
"dashboard.welcomeScreen.link.review.title": "Donnez votre avis",
"dashboard.welcomeScreen.link.review.label": "Avis",
"dashboard.welcomeScreen.actions.heading": "Effectuez les étapes suivants pour commencer à utiliser l'extension",
"dashboard.welcomeScreen.actions.description": "Vous pouvez aussi utiliser l'extension depuis la barre latérale Front Matter. Vous trouverez les actions à effectuer spécifiquement pour vos pages.",
"dashboard.welcomeScreen.actions.thanks": "Nous espérons que vous aimez Front Matter !",
"panel.contentType.contentTypeValidator.title": "Type de contenu",
"panel.contentType.contentTypeValidator.hint": "Nous avons remarqué des différences entre le type de contenu et les données front matter.\n Voulez vous créer, mettre à jour ou définir le type de contenu pour ce contenu ?",
"panel.contentType.contentTypeValidator.button.create": "Créer un type de contenu",
"panel.contentType.contentTypeValidator.button.add": "Ajouter les champs manquants au type de contenu",
"panel.contentType.contentTypeValidator.button.change": "Changer le type de contenu du fichier",
"panel.dataBlock.dataBlockField.group.selected.edit": "Modification: {0}",
"panel.dataBlock.dataBlockField.group.selected.create": "Créer un nouveau {0}",
"panel.dataBlock.dataBlockField.group.select": "Sélectionner un groupe",
"panel.dataBlock.dataBlockField.add": "Ajouter {0}",
"panel.dataBlock.dataBlockRecord.edit": "Modifier l'enregistrement",
"panel.dataBlock.dataBlockRecord.delete": "Supprimer l'enregistrement",
"panel.dataBlock.dataBlockRecords.label": "Enregistrements",
"panel.dataBlock.dataBlockSelector.label": "Type de bloc",
"panel.errorBoundary.fieldBoundary.label": "Echec d'affichage du champ",
"panel.fields.choiceField.select": "Sélectionner {0}",
"panel.fields.choiceField.clear": "Réinitialiser la valeur",
"panel.fields.contentTypeRelationshipField.loading": "Récupération des valeurs possible...",
"panel.fields.dateTimeField.button.pick": "Choisissez votre date",
"panel.fields.dateTimeField.time": "Heure :",
"panel.fields.fieldMessage.required": "Le champ {0} est obligatoire",
"panel.fields.fileField.delete": "Supprimer le fichier",
"panel.fields.fileField.add": "Ajouter votre {0}",
"panel.fields.imageFallback.label": "L'image ne peut pas être chargée",
"panel.fields.listField.edit": "Modifier l'enregistrement",
"panel.fields.listField.delete": "Supprimer l'enregistrement",
"panel.fields.previewImage.remove": "Supprimer l'image",
"panel.fields.previewImageField.add": "Ajouter votre {0}",
"panel.fields.slugField.update": "Mise à jour disponible",
"panel.fields.slugField.generate": "Générer le slug",
"panel.fields.textField.ai.message": "Utiliser Front Matter AI pour suggérer {0}",
"panel.fields.textField.ai.generate": "Génération de la suggestion...",
"panel.fields.textField.loading": "Chargement",
"panel.fields.textField.limit": "Limite de champ atteinte {0}",
"panel.fields.wrapperField.unknown": "Type de champ inconnu : {0}",
"panel.actions.title": "Actions",
"panel.articleDetails.title": "Plus de détails",
"panel.articleDetails.type": "Type",
"panel.articleDetails.total": "Total",
"panel.articleDetails.headings": "En-têtes",
"panel.articleDetails.paragraphs": "Paragraphes",
"panel.articleDetails.internalLinks": "Liens internes",
"panel.articleDetails.externalLinks": "Liens externes",
"panel.articleDetails.images": "Images",
"panel.baseView.initialize": "Initialiser le projet",
"panel.baseView.actions.title": "Actions",
"panel.baseView.action.openDashboard": "Ouvrir le tableau de bord",
"panel.baseView.action.openPreview": "Ouvrir la prévisualisation",
"panel.baseView.action.createContent": "Créer le contenu",
"panel.baseView.empty": "Ouvrir un fichier pour afficher plus d'actions",
"panel.fileList.label.singular": "fichier",
"panel.fileList.label.plural": "fichiers",
"panel.folderAndFiles.title": "Récemment modifié",
"panel.globalSettings.title": "Paramètres globaux",
"panel.globalSettings.action.modifiedDate.label": "Date de modification",
"panel.globalSettings.action.modifiedDate.description": "Mettre à jour automatiquement la date de modification",
"panel.globalSettings.action.frontMatter.label": "Front Matter highlight",
"panel.globalSettings.action.frontMatter.description": "Highlight Front Matter",
"panel.globalSettings.action.preview.label": "Prévisualisation locale",
"panel.globalSettings.action.preview.placeholder": "Exemple : {0}",
"panel.globalSettings.action.server.label": "Commande de server local",
"panel.globalSettings.action.server.placeholder": "Exemple : {0}",
"panel.metadata.title": "Métadonnées",
"panel.otherActions.title": "Autres actions",
"panel.otherActions.writingSettings.enabled": "Paramètres d'écriture activés",
"panel.otherActions.writingSettings.disabled": "Activer les paramètres d'écriture",
"panel.otherActions.centerMode": "Basculer le mode central",
"panel.otherActions.createTemplate": "Créer modèle",
"panel.otherActions.revealFile": "Afficher le fichier dans le dossier",
"panel.otherActions.openProject": "Afficher le dossier du projet",
"panel.otherActions.documentation": "Ouvrir la documentation",
"panel.otherActions.settings": "Paramètres globaux",
"panel.otherActions.issue": "Signaler un problème",
"panel.preview.title": "Ouvrir la prévisualisation",
"panel.publishAction.publish": "Publié",
"panel.publishAction.unpublish": "Retourner au brouillon",
"panel.seoDetails.recommended": "Recommandé",
"panel.seoKeywordInfo.density": "Utilisation du mot clé {0} *",
"panel.seoKeywordInfo.validInfo.label": "Utilisé dans le ou les en-tête(s)",
"panel.seoKeywordInfo.validInfo.content": "Contenu",
"panel.seoKeywords.title": "Mot-clés",
"panel.seoKeywords.header.keyword": "Mot-clé",
"panel.seoKeywords.header.details": "Détails",
"panel.seoKeywords.density": "* Une densité de mot-clé de 1-1.5% est suffisante dans la plupart des cas",
"panel.seoStatus.title": "Recommandations",
"panel.seoStatus.header.property": "Propriété",
"panel.seoStatus.header.length": "Longueur",
"panel.seoStatus.header.valid": "Valide",
"panel.seoStatus.seoFieldInfo.characters": "{0} caractères",
"panel.seoStatus.seoFieldInfo.words": "{0} mots",
"panel.seoStatus.seoFieldInfo.article": "Longueur de l'article",
"panel.seoStatus.collapsible.title": "Statut SEO",
"panel.seoStatus.required": "{0} ou {1} est requis.",
"panel.slugAction.title": "Optimisation du slug",
"panel.spinner.loading": "Chargement...",
"panel.startServerbutton.start": "Démarrer le serveur",
"panel.startServerbutton.stop": "Arrêter le serveur",
"panel.tag.add": "Ajouter {0} à vos paramètres",
"panel.tagPicker.inputPlaceholder.empty": "Choisissez votre {0}",
"panel.tagPicker.inputPlaceholder.disabled": "Vous avez atteint la limite de {0}",
"panel.tagPicker.ai.suggest": "Utiliser Front Matter AI pour suggérer {0}",
"panel.tagPicker.ai.generating": "Génération des suggestions...",
"panel.tagPicker.limit": "Max : {0}",
"panel.tagPicker.unkown": "Ajouter le tag non-classé",
"panel.tags.tag.warning": "Attention, ce tag \"{0}\" n'est pas enregistré dans vos paramètres. Une fois supprimé, il sera définitivement supprimé.",
"panel.viewPanel.mediaInsert": "Continuer dans le tableau de bord des médias pour sélectionner l'image que vous voulez insérer.",
"dashboard.steps.stepsToGetStarted.template.name": "Utiliser un modèle de configuration",
"dashboard.steps.stepsToGetStarted.template.description": "Sélectionnez un modèle pour préremplir le fichier frontmatter.json avec les paramètres recommandés.",
"listeners.dashboard.settingsListener.triggerTemplate.notification": "Fichiers de modèle copiés.",
"common.openOnWebsite": "Ouvrir sur le site web",
"common.filter.value": "Filtrer par {0}",
"dashboard.media.detailsSlideOver.unmapped.description": "Voulez-vous remapper les métadonnées des fichiers non mappés?",
"common.settings": "Paramètres",
"common.refreshSettings": "Actualiser les paramètres",
"common.pin": "Épingler",
"common.unpin": "Détacher",
"settings.view.common": "Commun",
"settings.view.contentFolders": "Dossiers de contenu",
"settings.view.astro": "Astro",
"settings.openOnStartup": "Ouvrir le tableau de bord au démarrage",
"settings.contentTypes": "Types de contenu",
"settings.contentFolders": "Dossiers de contenu",
"settings.diagnostic": "Diagnostique",
"settings.diagnostic.description": "Vous pouvez exécuter les diagnostics pour vérifier lensemble de la configuration de Front Matter CMS.",
"settings.diagnostic.link": "Exécuter des diagnostics complets",
"settings.commonSettings.website.title": "Paramètres du site Web et SSG",
"settings.commonSettings.previewUrl": "URL daperçu",
"settings.commonSettings.websiteUrl": "URL du site Web",
"settings.commonSettings.startCommand": "Commande de démarrage SSG/Framework",
"dashboard.contents.overview.pinned": "Épinglé",
"dashboard.steps.stepsToGetStarted.astroContentTypes.name": "Créer des types de contenu pour vos collections de contenu Astro",
"dashboard.welcomeScreen.link.documentation.label": "Documentation",
"dashboard.configuration.astro.astroContentTypes.empty": "Aucune collection de contenu Astro trouvée.",
"dashboard.configuration.astro.astroContentTypes.description": "Les collections de contenu Astro suivantes peuvent être utilisées pour générer un type de contenu."
}

364
l10n/bundle.l10n.it.json Normal file
View File

@@ -0,0 +1,364 @@
{
"common.add": "Aggiungi",
"common.edit": "Modifica",
"common.delete": "Elimina",
"common.cancel": "Annulla",
"common.clear": "Pulisci",
"common.clear.value": "Pulisci valore",
"common.search": "Ricerca",
"common.save": "Salva",
"common.menu": "Menu",
"common.insert": "Inserisci",
"common.insert.snippet": "Inserisci snippet",
"common.title": "Titolo",
"common.description": "Descrizione",
"common.retry": "Riprova",
"common.update": "Aggiorna",
"common.information": "Informazioni",
"common.important": "Importante",
"common.sync": "Sincronizza",
"common.slug": "Slug",
"common.support": "Supporto",
"common.remove.value": "Rimuovi {0}",
"common.error.message": "Siamo spiacenti, qualcosa è andato storto.",
"developer.title": "Modalità sviluppatore",
"developer.reload.title": "Ricarica la dashboard",
"developer.reload.label": "Ricarica",
"developer.devTools.title": "Apri DevTools",
"developer.devTools.label": "DevTools",
"field.required": "Campo obbligatorio",
"field.unknown": "Campo sconosciuto",
"dashboard.chatbot.answer.answer": "Risposta",
"dashboard.chatbot.answer.resources": "Risorse",
"dashboard.chatbot.answer.warning": "Attenzione: Answers potrebbe sbagliarsi. In caso di dubbio, si prega di consultare la documentazione.",
"dashboard.chatbot.chatbot.loading": "L'assistente si sta preparando",
"dashboard.chatbot.chatbot.ready": "Sono pronto, cosa vuoi sapere?",
"dashboard.chatbot.chatbox.placeholder": "Come posso configurare Front Matter?",
"dashboard.chatbot.header.heading": "Chiedi a Front Matter AI",
"dashboard.chatbot.header.description": "La nostra intelligenza artificiale, alimentata da mendable.ai, ha elaborato la documentazione e può assisterti con qualsiasi domanda relativa a Front Matter. Vai avanti e chiedi!",
"dashboard.common.choiceButton.open": "Apri opzioni",
"dashboard.contents.contentActions.actionMenuButton.title": "Menu",
"dashboard.contents.contentActions.menuItem.view": "Vista",
"dashboard.contents.contentActions.alert.title": "Elimina: {0}",
"dashboard.contents.contentActions.alert.description": "Sei sicuro di voler eliminare il contenuto \"{0}\"?",
"dashboard.contents.item.invalidTitle": "<titolo non valido>",
"dashboard.contents.item.invalidDescription": "<Descrizione non valida>",
"dashboard.contents.list.title": "Titolo",
"dashboard.contents.list.date": "Data",
"dashboard.contents.list.status": "Stato",
"dashboard.contents.overview.noMarkdown": "Nessun markdown da mostrare",
"dashboard.contents.overview.noFolders": "Assicurati di aver registrato una cartella di contenuti nel tuo progetto per consentire a Front Matter di trovare il contenuto.",
"dashboard.contents.status.draft": "Bozza",
"dashboard.contents.status.published": "Pubblicato",
"dashboard.dataView.dataForm.modify": "Modificare i dati",
"dashboard.dataView.dataForm.add": "Aggiungere nuovi dati",
"dashboard.dataView.dataView.select": "Seleziona il tuo tipo di dati",
"dashboard.dataView.dataView.title": "I tuoi {0} elementi di dati",
"dashboard.dataView.dataView.add": "Aggiungere una nuova voce",
"dashboard.dataView.dataView.empty": "Nessuna voce di dati {0} trovata",
"dashboard.dataView.dataView.createOrModify": "Creare o modificare i dati {0}",
"dashboard.dataView.dataView.getStarted": "Seleziona un tipo di dati per iniziare",
"dashboard.dataView.dataView.noDataFiles": "Nessun file di dati trovato",
"dashboard.dataView.dataView.getStarted.link": "Ulteriori informazioni per iniziare a utilizzare i file di dati",
"dashboard.dataView.emptyView.heading": "Seleziona prima il tipo di data",
"dashboard.dataView.sortableItem.editButton.title": "Modifica \"{0}\"",
"dashboard.dataView.sortableItem.deleteButton.title": "Elimina \"{0}\"",
"dashboard.dataView.sortableItem.alert.title": "Eliminare l'immissione dei dati",
"dashboard.dataView.sortableItem.alert.description": "Sei sicuro di voler cancellare l'inserimento dei dati?",
"dashboard.errorView.description": "Chiudere la dashboard e riprovare.",
"dashboard.header.breadcrumb.home": "Home",
"dashboard.header.clearFilters.title": "Rimuovi filtri, raggruppamento e ordinamento",
"dashboard.header.filter.default": "Nessun filtro",
"dashboard.header.folders.default": "Tutti i tipi",
"dashboard.header.folders.menuButton.showing": "Risultati",
"dashboard.header.grouping.option.none": "Nessuno",
"dashboard.header.grouping.option.year": "Anno",
"dashboard.header.grouping.option.draft": "Bozza/Pubblicato",
"dashboard.header.grouping.menuButton.label": "Raggruppa per",
"dashboard.header.navigation.allArticles": "Tutti gli articoli",
"dashboard.header.navigation.published": "Pubblicato",
"dashboard.header.navigation.draft": "In bozza",
"dashboard.header.header.createContent": "Creare contenuti",
"dashboard.header.header.createByContentType": "Crea per tipo di contenuto",
"dashboard.header.header.createByTemplate": "Crea da modello",
"dashboard.header.pagination.first": "Primo",
"dashboard.header.pagination.previous": "Precedente",
"dashboard.header.pagination.next": "Prossimo",
"dashboard.header.pagination.last": "Ultimo",
"dashboard.header.paginationStatus.text": "Visualizzazione {0} a {1} di {2} risultati",
"dashboard.header.projectSwitcher.label": "progetto",
"dashboard.header.refreshDashboard.label": "Aggiorna dashboard",
"dashboard.header.sorting.lastModified.asc": "Ultima modifica (asc)",
"dashboard.header.sorting.lastModified.desc": "Ultima modifica (desc)",
"dashboard.header.sorting.filename.asc": "Per nome file (asc)",
"dashboard.header.sorting.filename.desc": "Per nome file (desc)",
"dashboard.header.sorting.published.asc": "Pubblicato (asc)",
"dashboard.header.sorting.published.desc": "Pubblicato (desc)",
"dashboard.header.sorting.size.asc": "Dimensione (asc)",
"dashboard.header.sorting.size.desc": "Dimensioni (desc)",
"dashboard.header.sorting.caption.asc": "Didascalia (asc)",
"dashboard.header.sorting.caption.desc": "Didascalia (desc)",
"dashboard.header.sorting.alt.asc": "Alt (asc)",
"dashboard.header.sorting.alt.desc": "Alt (desc)",
"dashboard.header.sorting.label": "Ordina per",
"dashboard.header.startup.label": "Aprire all'avvio?",
"dashboard.header.tabs.contents": "Contenuto",
"dashboard.header.tabs.media": "Media",
"dashboard.header.tabs.snippets": "Snippets",
"dashboard.header.tabs.data": "Dati",
"dashboard.header.tabs.taxonomies": "Tassonomie",
"dashboard.header.viewSwitch.toGrid": "Passa alla griglia",
"dashboard.header.viewSwitch.toList": "Passa all'elenco",
"dashboard.layout.sponsor.support.msg": "Supporto Front Matter",
"dashboard.layout.sponsor.review.label": "Recensisci",
"dashboard.layout.sponsor.review.msg": "Recensisci Front Matter",
"dashboard.media.common.title": "Titolo",
"dashboard.media.common.caption": "Didascalia",
"dashboard.media.common.alt": "Testo alternativo",
"dashboard.media.common.size": "Dimensioni",
"dashboard.media.dialog.title": "Visualizza dettagli",
"dashboard.media.panel.close": "Chiudi pannello",
"dashboard.media.metadata.panel.title": "Aggiornare i metadati",
"dashboard.media.metadata.panel.description": "Specificare i metadati che si desidera impostare per il file.",
"dashboard.media.metadata.panel.field.fileName": "Filename",
"dashboard.media.metadata.panel.form.metadata.title": "Metadati",
"dashboard.media.metadata.panel.form.information.title": "Informazione",
"dashboard.media.metadata.panel.form.information.createdDate": "Creato",
"dashboard.media.metadata.panel.form.information.modifiedDate": "Ultima modifica",
"dashboard.media.metadata.panel.form.information.dimensions": "Dimensioni",
"dashboard.media.metadata.panel.form.information.folder": "Cartella",
"dashboard.media.folderCreation.hexo.create": "Creare una cartella di risorse",
"dashboard.media.folderCreation.folder.create": "Crea nuova cartella",
"dashboard.media.item.quickAction.insert.field": "Inserisci immagine per il campo \"{0}\"",
"dashboard.media.item.quickAction.insert.markdown": "Inserisci immagine con markup markdown",
"dashboard.media.item.quickAction.copy.path": "Copia percorso",
"dashboard.media.item.quickAction.delete": "Elimina file multimediale",
"dashboard.media.item.menuItem.edit.metadata": "Modificare i metadati",
"dashboard.media.item.menuItem.insert.image": "Inserisci immagine",
"dashboard.media.item.menuItem.reveal.media": "Rivela i media",
"dashboard.media.item.infoDialog.snippet.description": "Seleziona lo snippet del file multimediale da utilizzare per il file multimediale corrente.",
"dashboard.media.item.alert.delete.description": "Eliminare il file dalla cartella {0}?",
"dashboard.media.media.description": "Selezionare il file multimediale da aggiungere al contenuto.",
"dashboard.media.media.dragAndDrop": "Puoi anche trascinare e rilasciare le immagini dal desktop e selezionarle una volta caricate.",
"dashboard.media.media.folder.upload": "Carica su {0}",
"dashboard.media.media.folder.default": "Nessuna cartella selezionata, i file eliminati verranno aggiunti alla cartella {0}",
"dashboard.media.media.placeholder": "Nessun file multimediale da mostrare. Puoi trascinare e rilasciare nuovi file tenendo premuto il tasto [Maiusc].",
"dashboard.media.media.contentFolder": "Cartella dei contenuti",
"dashboard.media.media.publicFolder": "Cartella pubblica",
"dashboard.media.mediaHeaderTop.searchbox.placeholder": "Cerca nella cartella",
"dashboard.media.mediaSnippetForm.formDialog.title": "Inserisci supporto: {0}",
"dashboard.media.mediaSnippetForm.formDialog.description": "Inserire il file multimediale {0} nell'articolo corrente",
"dashboard.preview.input.placeholder": "Inserisci un URL",
"dashboard.preview.button.navigate.title": "Navigare",
"dashboard.preview.button.refresh.title": "Aggiorna",
"dashboard.preview.button.open.title": "Apri",
"dashboard.snippetsView.item.quickAction.editSnippet": "Modifica snippet",
"dashboard.snippetsView.item.quickAction.deleteSnippet": "Eliminare snippet",
"dashboard.snippetsView.item.quickAction.viewSnippet": "Visualizza file di frammento",
"dashboard.snippetsView.item.insert.formDialog.title": "Inserisci frammento: {0}",
"dashboard.snippetsView.item.insert.formDialog.description": "Inserisci il frammento di {0} nell'articolo corrente",
"dashboard.snippetsView.item.edit.formDialog.title": "Modifica Snippet: {0}",
"dashboard.snippetsView.item.edit.formDialog.description": "Modificare lo snippet {0}",
"dashboard.snippetsView.item.alert.title": "Elimina snippet: {0}",
"dashboard.snippetsView.item.alert.description": "Sei sicuro di voler eliminare lo snippet {0}?",
"dashboard.snippetsView.newForm.snippetInput.title.placeholder": "Titolo dello snippet",
"dashboard.snippetsView.newForm.snippetInput.description.label": "Descrizione",
"dashboard.snippetsView.newForm.snippetInput.description.placeholder": "Descrizione dello snippet",
"dashboard.snippetsView.newForm.snippetInput.snippet.label": "Snippet",
"dashboard.snippetsView.newForm.snippetInput.snippet.placeholder": "Contenuto dello snippet",
"dashboard.snippetsView.newForm.snippetInput.isMediaSnippet.label": "È uno snippet multimediale?",
"dashboard.snippetsView.newForm.snippetInput.isMediaSnippet.checkbox.label": "Snippet multimediale",
"dashboard.snippetsView.newForm.snippetInput.isMediaSnippet.checkbox.description": "Utilizzare lo snippet corrente per inserire file multimediali nel contenuto.",
"dashboard.snippetsView.newForm.snippetInput.docsButton.title": "Ulteriori informazioni sull'uso dei segnaposto degli snippet multimediali",
"dashboard.snippetsView.newForm.snippetInput.docsButton.description": "Consulta la nostra documentazione dei segnaposto degli snippet multimediali per sapere quali segnaposto puoi usare.",
"dashboard.snippetsView.snippets.ariaLabel": "Intestazione Snippets",
"dashboard.snippetsView.snippets.button.create": "Creare un nuovo snippet",
"dashboard.snippetsView.snippets.select.description": "Seleziona lo snippet da aggiungere ai tuoi contenuti.",
"dashboard.snippetsView.snippets.empty.message": "Nessun Snippet trovato",
"dashboard.snippetsView.snippets.readMore": "Scopri di più per iniziare a usare gli snippet",
"dashboard.snippetsView.snippets.formDialog.title": "Creare uno snippet",
"dashboard.steps.stepsToGetStarted.button.addFolder.title": "Aggiungi come cartella di contenuti a Front Matter",
"dashboard.steps.stepsToGetStarted.initializeProject.name": "Inizializzare il progetto",
"dashboard.steps.stepsToGetStarted.initializeProject.description": "Inizializzare il progetto creerà i file e le cartelle necessari per l'utilizzo del CMS Front Matter. Inizia facendo clic su questa azione.",
"dashboard.steps.stepsToGetStarted.framework.name": "Predefiniti del framework",
"dashboard.steps.stepsToGetStarted.framework.description": "Seleziona il generatore di siti o il framework per precompilare alcune delle impostazioni consigliate.",
"dashboard.steps.stepsToGetStarted.framework.select": "Seleziona il tuo framework",
"dashboard.steps.stepsToGetStarted.framework.select.other": "Altro",
"dashboard.steps.stepsToGetStarted.assetsFolder.name": "Qual è la cartella delle risorse?",
"dashboard.steps.stepsToGetStarted.assetsFolder.description": "Seleziona la cartella contenente le tue risorse. Questa cartella verrà utilizzata per archiviare tutti i file multimediali per i tuoi articoli.",
"dashboard.steps.stepsToGetStarted.assetsFolder.public.title": "Utilizzare la cartella 'pubblica'",
"dashboard.steps.stepsToGetStarted.assetsFolder.assets.title": "Utilizzare la cartella Astro assets (src/assets)",
"dashboard.steps.stepsToGetStarted.assetsFolder.other.description": "Nel caso in cui si desideri configurare un'altra cartella, è possibile farlo manualmente nel file frontmatter.json.",
"dashboard.steps.stepsToGetStarted.contentFolders.name": "Registrare le cartelle dei contenuti",
"dashboard.steps.stepsToGetStarted.contentFolders.description": "Aggiungi una delle cartelle che abbiamo trovato nel tuo progetto come cartella di contenuti. Una volta impostata una cartella, Front Matter può essere utilizzato per elencare tutti i contenuti e consentire di creare contenuti.",
"dashboard.steps.stepsToGetStarted.contentFolders.label": "Cartelle contenenti contenuto:",
"dashboard.steps.stepsToGetStarted.contentFolders.information.description": "È inoltre possibile eseguire questa azione facendo clic con il pulsante destro del mouse sulla cartella nella visualizzazione Esplora risorse e selezionando Registra cartella",
"dashboard.steps.stepsToGetStarted.tags.name": "Importa tutti i tag e le categorie (facoltativo)",
"dashboard.steps.stepsToGetStarted.tags.description": "Ora che Front Matter conosce tutte le cartelle dei contenuti. Desideri importare tutti i tag e le categorie dai contenuti disponibili?",
"dashboard.steps.stepsToGetStarted.showDashboard.name": "Mostra il dashboard",
"dashboard.steps.stepsToGetStarted.showDashboard.description": "Una volta completate tutte le azioni, è possibile caricare la dashboard.",
"dashboard.taxonomyView.button.add.title": "Aggiungere {0} alle impostazioni della tassonomia",
"dashboard.taxonomyView.button.edit.title": "Modifica {0}",
"dashboard.taxonomyView.button.merge.title": "Unisci {0}",
"dashboard.taxonomyView.button.move.title": "Passare a un altro tipo di tassonomia",
"dashboard.taxonomyView.button.delete.title": "Elimina {0}",
"dashboard.taxonomyView.taxonomyLookup.button.title": "Mostra contenuti con {0} in {1}",
"dashboard.taxonomyView.taxonomyManager.description": "Crea, modifica e gestisci le {0} del tuo sito",
"dashboard.taxonomyView.taxonomyManager.button.create": "Creare un nuovo valore {0}",
"dashboard.taxonomyView.taxonomyManager.table.heading.name": "Nome",
"dashboard.taxonomyView.taxonomyManager.table.heading.count": "Conteggio",
"dashboard.taxonomyView.taxonomyManager.table.heading.action": "Azione",
"dashboard.taxonomyView.taxonomyManager.table.row.empty": "Nessun {0} trovato",
"dashboard.taxonomyView.taxonomyManager.table.unmapped.title": "Manca nelle impostazioni",
"dashboard.taxonomyView.taxonomyView.navigationBar.title": "Selezionare la tassonomia",
"dashboard.taxonomyView.taxonomyView.button.import": "Tassonomia delle importazioni",
"dashboard.taxonomyView.taxonomyView.navigationItem.tags": "Tag",
"dashboard.taxonomyView.taxonomyView.navigationItem.categories": "Categorie",
"dashboard.unkownView.title": "La vista non esiste",
"dashboard.unkownView.description": "Sembra che tu sia finito su una vista che non esiste. Riapri la dashboard.",
"dashboard.welcomeScreen.title": "Gestisci il tuo sito statico con Front Matter",
"dashboard.welcomeScreen.thanks": "Grazie per aver scelto Front Matter!",
"dashboard.welcomeScreen.description": "Cerchiamo di mirare a rendere Front Matter il più facile da usare possibile, ma se avete domande o suggerimenti. Non esitare a contattarci su GitHub.",
"dashboard.welcomeScreen.link.github.title": "GitHub",
"dashboard.welcomeScreen.link.github.label": "GitHub / Documentazione",
"dashboard.welcomeScreen.link.sponsor.title": "Diventa sponsor",
"dashboard.welcomeScreen.link.sponsor.label": "Sponsor",
"dashboard.welcomeScreen.link.review.title": "Scrivi una recensione",
"dashboard.welcomeScreen.link.review.label": "Recensione",
"dashboard.welcomeScreen.actions.heading": "Esegui i passaggi successivi per iniziare con l'estensione",
"dashboard.welcomeScreen.actions.description": "È inoltre possibile utilizzare l'estensione dal pannello laterale Front Matter. Lì troverai le azioni che puoi eseguire specificamente per le tue pagine.",
"dashboard.welcomeScreen.actions.thanks": "Ci auguriamo che Front Matter vi piaccia!",
"panel.contentType.contentTypeValidator.title": "Tipo di contenuto",
"panel.contentType.contentTypeValidator.hint": "Abbiamo notato differenze di campo tra il tipo di contenuto e i dati della prima questione. \n Si desidera creare, aggiornare o impostare il tipo di contenuto per questo contenuto?",
"panel.contentType.contentTypeValidator.button.create": "Crea tipo di contenuto",
"panel.contentType.contentTypeValidator.button.add": "Aggiungere campi mancanti a content-type",
"panel.contentType.contentTypeValidator.button.change": "Modificare il tipo di contenuto del file",
"panel.dataBlock.dataBlockField.group.selected.edit": "Modifica: {0}",
"panel.dataBlock.dataBlockField.group.selected.create": "Creare una nuova {0}",
"panel.dataBlock.dataBlockField.group.select": "Seleziona un gruppo",
"panel.dataBlock.dataBlockField.add": "Aggiungi {0}",
"panel.dataBlock.dataBlockRecord.edit": "Modifica record",
"panel.dataBlock.dataBlockRecord.delete": "Elimina record",
"panel.dataBlock.dataBlockRecords.label": "Archivio",
"panel.dataBlock.dataBlockSelector.label": "Tipo di blocco",
"panel.errorBoundary.fieldBoundary.label": "Visualizzazione del campo non riuscita",
"panel.fields.choiceField.select": "Seleziona {0}",
"panel.fields.choiceField.clear": "Pulisci valore",
"panel.fields.contentTypeRelationshipField.loading": "Recupero di possibili valori...",
"panel.fields.dateTimeField.button.pick": "Scegli la tua data",
"panel.fields.dateTimeField.time": "Ore:",
"panel.fields.fieldMessage.required": "Il campo {0} è obbligatorio",
"panel.fields.fileField.delete": "Elimina file",
"panel.fields.fileField.add": "Aggiungi il tuo {0}",
"panel.fields.imageFallback.label": "L'immagine non deve essere caricata",
"panel.fields.listField.edit": "Modifica record",
"panel.fields.listField.delete": "Elimina record",
"panel.fields.previewImage.remove": "Rimuovi immagine",
"panel.fields.previewImageField.add": "Aggiungi il tuo {0}",
"panel.fields.slugField.update": "Aggiornamento disponibile",
"panel.fields.slugField.generate": "Genera slug",
"panel.fields.textField.ai.message": "Usa Front Matter AI per suggerire {0}",
"panel.fields.textField.ai.generate": "Genera suggerimenti...",
"panel.fields.textField.loading": "caricamento",
"panel.fields.textField.limit": "Limite di campi raggiunto {0}",
"panel.fields.wrapperField.unknown": "Tipo di campo sconosciuto: {0}",
"panel.actions.title": "Azioni",
"panel.articleDetails.title": "Più dettagli",
"panel.articleDetails.type": "Digitare",
"panel.articleDetails.total": "Totale",
"panel.articleDetails.headings": "Intestazioni",
"panel.articleDetails.paragraphs": "Paragrafi",
"panel.articleDetails.internalLinks": "Collegamenti esterni",
"panel.articleDetails.externalLinks": "Collegamenti esterni",
"panel.articleDetails.images": "Immagini",
"panel.baseView.initialize": "Inizializzare il progetto",
"panel.baseView.actions.title": "Azioni",
"panel.baseView.action.openDashboard": "Apri dashboard",
"panel.baseView.action.openPreview": "Apri anteprima",
"panel.baseView.action.createContent": "Creare contenuti",
"panel.baseView.empty": "Apri un file per visualizzare altre azioni",
"panel.fileList.label.singular": "file",
"panel.fileList.label.plural": "file",
"panel.folderAndFiles.title": "Modifiche recenti",
"panel.globalSettings.title": "Impostazioni globali",
"panel.globalSettings.action.modifiedDate.label": "Data di modifica",
"panel.globalSettings.action.modifiedDate.description": "Aggiornamento automatico della data di modifica",
"panel.globalSettings.action.frontMatter.label": "Evidenziazione di Front Matter",
"panel.globalSettings.action.frontMatter.description": "Highlight Front Matter",
"panel.globalSettings.action.preview.label": "Anteprima locale",
"panel.globalSettings.action.preview.placeholder": "Esempio: {0}",
"panel.globalSettings.action.server.label": "Comando server locale",
"panel.globalSettings.action.server.placeholder": "Esempio: {0}",
"panel.metadata.title": "Metadati",
"panel.otherActions.title": "Altre azioni",
"panel.otherActions.writingSettings.enabled": "Impostazioni di scrittura abilitate",
"panel.otherActions.writingSettings.disabled": "Abilitare le impostazioni di scrittura",
"panel.otherActions.centerMode": "Attiva/disattiva la modalità centrale",
"panel.otherActions.createTemplate": "Crea modello",
"panel.otherActions.revealFile": "Rivela il file nella cartella",
"panel.otherActions.openProject": "Rivela cartella del progetto",
"panel.otherActions.documentation": "Apri la documentazione",
"panel.otherActions.settings": "Panoramica delle impostazioni",
"panel.otherActions.issue": "Segnala un problema",
"panel.preview.title": "Apri anteprima",
"panel.publishAction.publish": "Pubblica",
"panel.publishAction.unpublish": "Tornare alla bozza",
"panel.seoDetails.recommended": "Raccomandato",
"panel.seoKeywordInfo.density": "Utilizzo delle parole chiave {0} *",
"panel.seoKeywordInfo.validInfo.label": "Utilizzato nelle rubriche",
"panel.seoKeywordInfo.validInfo.content": "Contenuto",
"panel.seoKeywords.title": "Parole chiavi",
"panel.seoKeywords.header.keyword": "Parola chiave",
"panel.seoKeywords.header.details": "Dettagli",
"panel.seoKeywords.density": "* Una densità di parole chiave dell'1-1,5% è sufficiente nella maggior parte dei casi.",
"panel.seoStatus.title": "Consigli",
"panel.seoStatus.header.property": "Proprietà",
"panel.seoStatus.header.length": "Lunghezza",
"panel.seoStatus.header.valid": "Valido",
"panel.seoStatus.seoFieldInfo.characters": "{0} caratteri",
"panel.seoStatus.seoFieldInfo.words": "{0} parole",
"panel.seoStatus.seoFieldInfo.article": "Lunghezza dell'articolo",
"panel.seoStatus.collapsible.title": "Stato SEO",
"panel.seoStatus.required": "{0} o {1} è obbligatorio.",
"panel.slugAction.title": "Ottimizza slug",
"panel.spinner.loading": "Caricamento...",
"panel.startServerbutton.start": "Avvia Server",
"panel.startServerbutton.stop": "Arrestare il Server",
"panel.tag.add": "Aggiungi {0} alle tue impostazioni",
"panel.tagPicker.inputPlaceholder.empty": "Scegli il tuo {0}",
"panel.tagPicker.inputPlaceholder.disabled": "Hai raggiunto il limite di {0}",
"panel.tagPicker.ai.suggest": "Usa Front Matter AI per suggerire {0}",
"panel.tagPicker.ai.generating": "Genera suggerimenti...",
"panel.tagPicker.limit": "Max.: {0}",
"panel.tagPicker.unkown": "Aggiungi il tag sconosciuto",
"panel.tags.tag.warning": "Tieni presente che questo tag \"{0}\" non viene salvato nelle tue impostazioni. Una volta rimosso, sarà eliminato per sempre.",
"panel.viewPanel.mediaInsert": "Continuare nella dashboard multimediale per selezionare l'immagine che si desidera inserire.",
"dashboard.steps.stepsToGetStarted.template.name": "Usa un modello di configurazione",
"dashboard.steps.stepsToGetStarted.template.description": "Seleziona un modello per riempire in anticipo il file frontmatter.json con le impostazioni consigliate.",
"listeners.dashboard.settingsListener.triggerTemplate.notification": "File del modello copiati.",
"common.openOnWebsite": "Apri sul sito web",
"common.filter.value": "Filtra per {0}",
"dashboard.media.detailsSlideOver.unmapped.description": "Vuoi riassegnare i metadati dei file non mappati?",
"common.settings": "Impostazioni",
"common.refreshSettings": "Aggiorna impostazioni",
"common.pin": "Spilla",
"common.unpin": "Rimuovere",
"settings.view.common": "Comune",
"settings.view.contentFolders": "Cartelle di contenuto",
"settings.view.astro": "Astro",
"settings.openOnStartup": "Apri dashboard all'avvio",
"settings.contentTypes": "Tipi di contenuto",
"settings.contentFolders": "Cartelle di contenuto",
"settings.diagnostic": "Diagnostico",
"settings.diagnostic.description": "È possibile eseguire la diagnostica per verificare l'intera configurazione CMS di Front Matter.",
"settings.diagnostic.link": "Eseguire la diagnostica completa",
"settings.commonSettings.website.title": "Impostazioni del sito Web e del SSG",
"settings.commonSettings.previewUrl": "URL di anteprima",
"settings.commonSettings.websiteUrl": "URL del sito web",
"settings.commonSettings.startCommand": "Comando di avvio SSG/Framework",
"dashboard.contents.overview.pinned": "Appuntato",
"dashboard.steps.stepsToGetStarted.astroContentTypes.name": "Crea tipi di contenuto per le tue raccolte di contenuti Astro",
"dashboard.welcomeScreen.link.documentation.label": "Documentazione",
"dashboard.configuration.astro.astroContentTypes.empty": "Nessuna raccolta di contenuti Astro trovata.",
"dashboard.configuration.astro.astroContentTypes.description": "Le seguenti raccolte di contenuti Astro e possono essere utilizzate per generare un tipo di contenuto."
}

View File

@@ -3,6 +3,7 @@
"common.edit": "編集",
"common.delete": "削除",
"common.cancel": "キャンセル",
"common.apply": "適用",
"common.clear": "クリア",
"common.clear.value": "値をクリア",
"common.search": "検索",
@@ -20,38 +21,115 @@
"common.slug": "スラッグ",
"common.support": "サポート",
"common.remove.value": "{0}を削除",
"common.filter": "絞り込み",
"common.filter.value": "{0}で絞り込み",
"common.error.message": "申し訳ありません。エラーが発生しました。",
"common.openOnWebsite": "ウェブサイトで開く",
"common.settings": "設定",
"common.refreshSettings": "設定の再読み込み",
"common.pin": "ピン留めする",
"common.unpin": "ピン留めを外す",
"common.noResults": "結果なし",
"common.error": "申し訳ありません。エラーが発生しました。",
"common.yes": "はい",
"common.no": "いいえ",
"common.openSettings": "設定を開く",
"common.back": "戻る",
"common.open": "開く",
"common.openWithValue": "開く: {0}",
"common.openCustomActions": "カスタムコマンドを開く",
"common.view": "表示",
"common.translate": "翻訳する",
"common.languages": "言語",
"common.scripts": "スクリプト",
"common.rename": "ファイル名を変更する",
"loading.initPages": "記事を読み込んでいます",
"notifications.outputChannel.link": "出力ウィンドウ",
"notifications.outputChannel.description": "詳細は{0}を確認してください。",
"settings.view.common": "一般",
"settings.view.contentFolders": "記事フォルダー",
"settings.view.astro": "Astro",
"settings.view.integration": "統合機能",
"settings.openOnStartup": "起動時にダッシュボードを開く",
"settings.contentTypes": "記事タイプ",
"settings.contentFolders": "記事フォルダー",
"settings.diagnostic": "診断",
"settings.diagnostic.description": "診断プログラムを実行して、Front Matter CMS構成全体を確認できます。",
"settings.diagnostic.link": "完全診断を実行する",
"settings.git": "Git同期",
"settings.git.enabled": "Git同期を有効にして、変更内容をリポジトリと簡単に同期させます。",
"settings.git.commitMessage": "コミットメッセージ",
"settings.git.submoduleInfo": "Gitサブモジュールを使用している場合は、サブモジュールの設定についてドキュメントを参照してください。",
"settings.git.submoduleLink": "Gitサブモジュールについて確認する",
"settings.integration.title": "統合機能",
"settings.commonSettings.website.title": "ウェブサイトとSSGの設定",
"settings.commonSettings.previewUrl": "プレビュー用URL",
"settings.commonSettings.websiteUrl": "ウェブサイトのURL",
"settings.commonSettings.startCommand": "SSG/フレームワーク起動コマンド",
"settings.integrationsView.deepl.title": "DeepL",
"settings.integrationsView.deepl.intput.label": "API key",
"settings.integrationsView.deepl.intput.placeholder": "DeepL API keyを入力",
"settings.integrationsView.azure.title": "Azure AI Translator",
"settings.integrationsView.azure.intput.label": "サブスクリプションキー",
"settings.integrationsView.azure.intput.placeholder": "Azure AI Translatorのサブスクリプションキーを入力",
"settings.integrationsView.azure.region.label": "リージョン",
"settings.integrationsView.azure.region.placeholder": "Azure AI Translatorのリージョンを入力 例: westeurope",
"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.contentActions.translations.create": "翻訳する",
"dashboard.contents.contentActions.translations.menu": "翻訳版",
"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.overview.pinned": "ピン留めアイテム",
"dashboard.contents.status.draft": "下書き",
"dashboard.contents.status.published": "公開済み",
"dashboard.contents.status.scheduled": "予約済み",
"dashboard.dataView.dataForm.modify": "エントリーを編集",
"dashboard.dataView.dataForm.add": "エントリーを作成",
"dashboard.dataView.dataView.select": "データタイプを選択",
"dashboard.dataView.dataView.title": "\"{0}\"のエントリー",
"dashboard.dataView.dataView.add": "新規エントリーを追加",
@@ -60,34 +138,58 @@
"dashboard.dataView.dataView.getStarted": "データタイプを選択して開始する",
"dashboard.dataView.dataView.noDataFiles": "データファイルが見つかりませんでした",
"dashboard.dataView.dataView.getStarted.link": "データファイルの利用方法について確認する",
"dashboard.dataView.dataView.update.message": "データエントリーを更新しました。",
"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.filters.languageFilter.label": "ロケール",
"dashboard.filters.languageFilter.all": "全て",
"dashboard.header.actionsBar.itemsSelected": "{0}件を選択中",
"dashboard.header.actionsBar.alertDelete.title": "選択ファイルを削除",
"dashboard.header.actionsBar.alertDelete.description": "選択したファイルを本当に削除しますか?",
"dashboard.header.breadcrumb.home": "ホーム",
"dashboard.header.clearFilters.title": "フィルター・グループ・並べ替えを解除",
"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.scheduled": "予約済み",
"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": "ファイル名(昇順)",
@@ -101,21 +203,27 @@
"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": "メタデータを編集",
@@ -127,17 +235,27 @@
"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.folderItem.contentDirectory": "コンテンツディレクトリー",
"dashboard.media.folderItem.publicDirectory": "Publicディレクトリー",
"dashboard.media.item.buttom.insert.image": "画像を挿入",
"dashboard.media.item.buttom.insert.snippet": "スニペットを挿入",
"dashboard.media.item.quickAction.insert.field": "この画像を\"{0}\"フィールドに追加",
"dashboard.media.item.quickAction.insert.markdown": "画像をMarkdown記法で挿入",
"dashboard.media.item.quickAction.copy.path": "ファイルパスをコピー",
"dashboard.media.item.quickAction.delete": "ファイルを削除",
"dashboard.media.item.menuItem.view": "メタデータの詳細を表示",
"dashboard.media.item.menuItem.edit.metadata": "メタデータを編集",
"dashboard.media.item.menuItem.insert.image": "画像を挿入",
"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}にアップロードする",
@@ -145,13 +263,19 @@
"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.type.content": "コンテンツ用スニペット",
"dashboard.snippetsView.item.type.media": "メディア用スニペット",
"dashboard.snippetsView.item.quickAction.editSnippet": "スニペットを編集",
"dashboard.snippetsView.item.quickAction.deleteSnippet": "スニペットを削除",
"dashboard.snippetsView.item.quickAction.viewSnippet": "スニペットファイルの表示",
@@ -161,6 +285,7 @@
"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": "スニペットの概要",
@@ -171,12 +296,14 @@
"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に必要な設定ファイルを作成します。クリックして開始してください。",
@@ -184,20 +311,35 @@
"dashboard.steps.stepsToGetStarted.framework.description": "静的サイトジェネレーターまたはフレームワークを選択して、必要なセッティングを追加します。",
"dashboard.steps.stepsToGetStarted.framework.select": "フレームワークを選択",
"dashboard.steps.stepsToGetStarted.framework.select.other": "その他",
"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ファイルへ手動で設定可能です。",
"dashboard.steps.stepsToGetStarted.contentFolders.name": "記事ファイルのフォルダーを登録",
"dashboard.steps.stepsToGetStarted.contentFolders.description": "記事ファイルの保存フォルダーを追加してください。フォルダーが設定されると、フォルダー内の記事ファイルがFront Matterでリスト化され、新規記事ファイルを追加できるようになります。",
"dashboard.steps.stepsToGetStarted.contentFolders.description": "記事ファイルの保存フォルダーを追加してください。フォルダーが設定されると、フォルダー内の記事ファイルがFront Matterでリスト化され、新規記事ファイルを追加できるようになります。",
"dashboard.steps.stepsToGetStarted.contentFolders.label": "記事ファイルを含むフォルダー",
"dashboard.steps.stepsToGetStarted.contentFolders.information.description": "フォルダーの登録は、エクスプローラーでフォルダー名を右クリックして「フォルダーを登録」を選択することでも可能です。",
"dashboard.steps.stepsToGetStarted.contentFolders.information.description": "エクスプローラーでフォルダー名を右クリックして「フォルダーを登録」を選択する方法でも、フォルダーの登録が可能です。",
"dashboard.steps.stepsToGetStarted.tags.name": "全てのタグとカテゴリーをインポート(オプション)",
"dashboard.steps.stepsToGetStarted.tags.description": "Front Matterに記事用フォルダーが登録されました。記事から全てのタグとカテゴリーをインポートしますか",
"dashboard.steps.stepsToGetStarted.git.name": "Git同期を有効化しますか",
"dashboard.steps.stepsToGetStarted.git.description": "Git同期を有効にして、変更内容をリポジトリと簡単に同期させます。",
"dashboard.steps.stepsToGetStarted.showDashboard.name": "ダッシュボードを開く",
"dashboard.steps.stepsToGetStarted.showDashboard.description": "全ての設定が終わると、ダッシュボードが表示できるようになります。",
"dashboard.steps.stepsToGetStarted.template.name": "設定用のテンプレートを使用する",
"dashboard.steps.stepsToGetStarted.template.description": "おすすめの設定のテンプレートを選択して、frontmatter.jsonに反映させます。",
"dashboard.steps.stepsToGetStarted.template.warning": "選択によりプロジェクトの構成にテンプレートが適用され、この設定画面は終了します。",
"dashboard.steps.stepsToGetStarted.astroContentTypes.name": "Astroコンテンツコレクションのコンテンツタイプを作成する",
"dashboard.taxonomyView.button.add.title": "\"{0}\"をタクソノミーに追加",
"dashboard.taxonomyView.button.tag.title": "タグを追加",
"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": "名前",
@@ -205,17 +347,25 @@
"dashboard.taxonomyView.taxonomyManager.table.heading.action": "コマンド",
"dashboard.taxonomyView.taxonomyManager.table.row.empty": "{0}はありません",
"dashboard.taxonomyView.taxonomyManager.table.unmapped.title": "設定ファイルに見つかりません",
"dashboard.taxonomyView.taxonomyManager.filterInput.placeholder": "絞り込み",
"dashboard.taxonomyView.taxonomyTagging.pageTitle": "タクソノミー {0} をリマッピング",
"dashboard.taxonomyView.taxonomyTagging.checkbox": "ページにタクソノミー{0}を付ける",
"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までお気軽にお問い合わせください。",
"dashboard.welcomeScreen.link.github.title": "GitHub",
"dashboard.welcomeScreen.link.github.label": "GitHub / ドキュメント",
"dashboard.welcomeScreen.link.github.label": "GitHub",
"dashboard.welcomeScreen.link.documentation.label": "ドキュメント",
"dashboard.welcomeScreen.link.sponsor.title": "スポンサーになる",
"dashboard.welcomeScreen.link.sponsor.label": "スポンサー",
"dashboard.welcomeScreen.link.review.title": "評価する",
@@ -223,41 +373,71 @@
"dashboard.welcomeScreen.actions.heading": "以下の手順に従って、この拡張機能をスタートさせてください。",
"dashboard.welcomeScreen.actions.description": "サイドパネルからもFront Matterを利用できます。サイドパネルでは、各コンテンツに合った具体的なコマンドが実行可能です。",
"dashboard.welcomeScreen.actions.thanks": "Front Matterをお楽しみください",
"dashboard.media.detailsSlideOver.unmapped.description": "未割り当てのファイルのメタデータを再マップしますか?",
"dashboard.configuration.astro.astroContentTypes.empty": "Astroコンテンツコレクションが見つかりません。",
"dashboard.configuration.astro.astroContentTypes.description": "以下のAstroコンテンツコレクションは、コンテンツタイプを生成するために使用できます。",
"panel.git.gitAction.title": "変更の反映",
"panel.git.gitAction.branch.select": "ブランチを選択",
"panel.git.gitAction.input.placeholder": "コミットメッセージ",
"panel.git.gitAction.button.fetch": "フェッチ",
"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": "数",
@@ -266,15 +446,18 @@
"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": "最終更新日を自動で更新",
@@ -284,7 +467,10 @@
"panel.globalSettings.action.preview.placeholder": "例: {0}",
"panel.globalSettings.action.server.label": "ローカルサーバーのコマンド",
"panel.globalSettings.action.server.placeholder": "例: {0}",
"panel.metadata.title": "メタデータ",
"panel.metadata.focusProblems": "詳細を「問題」表示で確認してください。",
"panel.otherActions.title": "他のコマンド",
"panel.otherActions.writingSettings.enabled": "ライティング設定が有効",
"panel.otherActions.writingSettings.disabled": "ライティング設定を有効化",
@@ -295,17 +481,23 @@
"panel.otherActions.documentation": "ドキュメントを開く",
"panel.otherActions.settings": "設定方法の概要",
"panel.otherActions.issue": "問題を報告",
"panel.preview.title": "プレビューを表示",
"panel.publishAction.publish": "公開",
"panel.publishAction.unpublish": "下書きに戻す",
"panel.seoDetails.recommended": "🚧: Recommended",
"panel.seoDetails.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": "長さ",
@@ -315,22 +507,288 @@
"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": "ダッシュボードのメディア管理画面から、利用したい画像を選択してください。",
"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ファイルで手動で行うことができます。"
"commands.article.setDate.error": "日付の表示形式の解析中に何らかの問題が発生しました。\"{0}\"の設定を確認してください。",
"commands.article.updateSlug.error": "ファイル名を変更できませんでした。: {0}",
"commands.article.rename.fileNotExists.error": "ファイルが存在しません。",
"commands.article.rename.fileExists.error": "\"{0}\" というファイル名は既に存在しています。",
"commands.article.rename.fileName.title": "ファイル名を変更: {0}",
"commands.article.rename.fileName.prompt": "ファイル名",
"commands.cache.cleared": "キャッシュがクリアされました。",
"commands.chatbot.title": "何でも聞いてください",
"commands.content.option.contentType.label": "記事タイプから記事を作成",
"commands.content.option.contentType.description": "設定済みの記事タイプを選択して記事を作成",
"commands.content.option.template.label": "テンプレートから記事を作成",
"commands.content.option.template.description": "設定済みのテンプレートを選択して記事を作成",
"commands.content.quickPick.title": "記事の作成",
"commands.content.quickPick.placeholder": "記事の作成方法を選択してください。",
"commands.dashboard.title": "ダッシュボード",
"commands.folders.addMediaFolder.inputBox.title": "メディアフォルダーの追加",
"commands.folders.addMediaFolder.inputBox.prompt": "新規作成するフォルダー名を入力してください。(\"/\"で多階層のフォルダーを作成可能です)",
"commands.folders.addMediaFolder.noFolder.warning": "フォルダー名が入力されていません。",
"commands.folders.create.folderExists.warning": "フォルダーは既に登録済です。",
"commands.folders.create.input.title": "フォルダーを登録する",
"commands.folders.create.input.prompt": "登録するフォルダー名を指定してください。",
"commands.folders.create.input.placeholder": "フォルダー名",
"commands.folders.create.success": "フォルダーが登録されました。",
"commands.folders.getWorkspaceFolder.workspaceFolderPick.placeholder": "Front Matterを利用するメインのワークスペースのフォルダーを選択してください。",
"commands.folders.get.notificationError.title": "\"{0}\"フォルダーが存在しません。このフォルダーを設定から削除してください。",
"commands.folders.get.notificationError.remove.action": "フォルダー設定を削除",
"commands.folders.get.notificationError.create.action": "フォルダーを作成",
"commands.i18n.create.warning.noFileSelected": "ファイルが選択されていません。",
"commands.i18n.create.warning.noFile": "ファイルが取得できませんでした。",
"commands.i18n.create.warning.noContentType": "現在のファイルの記事タイプを取得できませんでした。",
"commands.i18n.create.warning.noConfig": "i18nの設定が見つかりません。",
"commands.i18n.create.error.noLocaleDefinition": "現在のファイルのロケールを取得できませんでした。",
"commands.i18n.create.error.noLocales": "現在のファイルは利用可能なすべての言語に翻訳されています。",
"commands.i18n.create.error.noContentFolder": "現在のファイルの記事フォルダーを指定できませんでした。",
"commands.i18n.create.error.fileExists": "そのi18n翻訳は既に存在しています。",
"commands.i18n.create.success.created": "\"{0}\" i18n記事ファイルを作成しました。",
"commands.i18n.create.quickPick.title": "言語別の記事を作成",
"commands.i18n.create.quickPick.placeHolder": "どの言語で記事を作成しますか?",
"commands.i18n.translate.progress.title": "記事を翻訳しています...",
"commands.preview.panel.title": "プレビュー: {0}",
"commands.preview.askUserToPickFolder.title": "プレビュー用の記事フォルダーを選択してください。",
"commands.project.initialize.success": "プロジェクトが初期化されました。",
"commands.project.switchProject.title": "どのプロジェクトに切り替えますか?",
"commands.project.createSampleTemplate.info": "テンプレートサンプルを作成しました。",
"commands.settings.create.input.prompt": "設定に追加したい{0}の値を入力してください。",
"commands.settings.create.input.placeholder": "{0}の名前",
"commands.settings.create.warning": "入力された {0} は既に存在しています。",
"commands.settings.create.quickPick.placeholder": "新規{0}をページに追加しますか?",
"commands.settings.export.progress.title": "{0}: タグとカテゴリーをエクスポートしています。",
"commands.settings.export.progress.success": "エクスポートが完了しました。タグ: {0} - カテゴリー: {1}",
"commands.settings.remap.quickpick.title": "再構成",
"commands.settings.remap.quickpick.placeholder": "何を再構成しますか?",
"commands.settings.remap.noTaxonomy.warning": "編集可能な{0}が存在しません。",
"commands.settings.remap.selectTaxonomy.placeholder": "編集したい{0}を選択してください。",
"commands.settings.remap.newOption.input.prompt": "\"{1}\"を再構成します。変更したい{0}値を入力してください。全ての記事から{0}を削除する場合は空欄にしてください。",
"commands.settings.remap.newOption.input.placeholder": "{0}名",
"commands.settings.remap.delete.placeholder": "{1} {0}を削除しますか?",
"commands.statusListener.verifyRequiredFields.diagnostic.emptyField": "フィールド {0} は必須です。値を入力してください。",
"commands.statusListener.verifyRequiredFields.notification.error": "以下の必須のフィールドに値が入力されていません。: {0}",
"commands.template.generate.input.title": "テンプレート名",
"commands.template.generate.input.prompt": "テンプレート名を入力してください。",
"commands.template.generate.input.placeholder": "article",
"commands.template.generate.noTitle.warning": "テンプレート名が入力されていません。",
"commands.template.generate.keepContents.title": "記事本文の反映",
"commands.template.generate.keepContents.placeholder": "記事本文をテンプレートにそのまま残しますか?",
"commands.template.generate.keepContents.noOption.warning": "記事本文を残すかどうかの選択がされませんでした。",
"commands.template.generate.keepContents.success": "{0}フォルダー内にテンプレートが作成されました。",
"commands.template.getTemplates.warning": "テンプレートがありません。",
"commands.template.create.folderPath.warning": "取得されたプロジェクトフォルダーのパスが不正です。",
"commands.template.create.noTemplates.warning": "テンプレートがありません。",
"commands.template.create.selectTemplate.title": "テンプレートの選択",
"commands.template.create.selectTemplate.placeholder": "記事テンプレートを選択してください。",
"commands.template.create.selectTemplate.noTemplate.warning": "テンプレートが選択されていません。",
"commands.template.create.selectTemplate.notFound.warning": "記事テンプレートが見つかりません。",
"commands.template.create.success": "新規記事が有効になりました。",
"commands.wysiwyg.command.unorderedList.label": "順序なしリスト",
"commands.wysiwyg.command.unorderedList.detail": "順序なしリストを追加",
"commands.wysiwyg.command.orderedList.label": "順序付きリスト",
"commands.wysiwyg.command.orderedList.detail": "順序付きリストを追加",
"commands.wysiwyg.command.taskList.label": "タスクリスト",
"commands.wysiwyg.command.taskList.detail": "タスクリストを追加",
"commands.wysiwyg.command.code.label": "コード",
"commands.wysiwyg.command.code.detail": "インラインコードスニペットを追加",
"commands.wysiwyg.command.codeblock.label": "コードブロック",
"commands.wysiwyg.command.codeblock.detail": "コードブロックを追加",
"commands.wysiwyg.command.blockquote.label": "ブロック引用要素",
"commands.wysiwyg.command.blockquote.detail": "ブロック引用要素を追加",
"commands.wysiwyg.command.strikethrough.label": "取り消し線",
"commands.wysiwyg.command.strikethrough.detail": "取り消し線付きテキストを追加",
"commands.wysiwyg.quickPick.title": "WYSIWYG オプション",
"commands.wysiwyg.quickPick.placeholder": "どのマークアップ要素を挿入しますか?",
"commands.wysiwyg.addHyperlink.hyperlinkInput.title": "WYSIWYG ハイパーリンク",
"commands.wysiwyg.addHyperlink.hyperlinkInput.prompt": "URLを入力",
"commands.wysiwyg.addHyperlink.textInput.title": "WYSIWYG テキスト",
"commands.wysiwyg.addHyperlink.textInput.prompt": "ハイパーリンクのテキストを入力",
"commands.wysiwyg.insertText.heading.input.title": "見出し",
"commands.wysiwyg.insertText.heading.input.placeholder": "見出しのレベルを選択",
"helpers.articleHelper.createContent.pageBundle.error": "{0}という名称のページバンドルは、既に {1} に存在しています。",
"helpers.articleHelper.createContent.contentExists.warning": "同タイトルの記事が存在します。別のタイトルを付けてください。",
"helpers.articleHelper.processCustomPlaceholders.placeholder.error": "プレースホルダー{0}の生成中にエラーが発生しました。",
"helpers.articleHelper.parseFile.diagnostic.error": "{0}のfront matterの解析中にエラーが発生しました。",
"helpers.contentType.generate.noFrontMatter.error": "記事タイプの生成に必要なfront matterデータがありません。",
"helpers.contentType.generate.override.quickPick.title": "デフォルトの記事タイプを上書き",
"helpers.contentType.generate.override.quickPick.placeholder": "この記事のフィールド設定を、デフォルトの記事タイプのフィールド設定に上書きしますか?",
"helpers.contentType.generate.contentTypeInput.title": "記事タイプを生成",
"helpers.contentType.generate.contentTypeInput.prompt": "新規作成したい記事タイプ名を入力してください。",
"helpers.contentType.generate.contentTypeInput.validation.enterName": "記事タイプ名を入力してください。",
"helpers.contentType.generate.contentTypeInput.validation.nameExists": "この記事タイプ名は既に存在しています。",
"helpers.contentType.generate.noContentTypeName.warning": "記事タイプが選択されませんでした。",
"helpers.contentType.generate.pageBundle.quickPick.title": "ページバンドルとして使用",
"helpers.contentType.generate.pageBundle.quickPick.placeHolder": "この記事タイプをページバンドルとして使用しますか?",
"helpers.contentType.generate.updated.success": "記事タイプ {0} を更新しました。",
"helpers.contentType.generate.generated.success": "記事タイプ {0} を生成しました。",
"helpers.contentType.addMissingFields.noFrontMatter.warning": "追加すべきfront matterデータはありません。",
"helpers.contentType.addMissingFields.updated.success": "記事タイプ {0} を更新しました。",
"helpers.contentType.setContentType.noFrontMatter.warning": "記事タイプの設定が必要なfront matterデータが見つかりません。",
"helpers.contentType.setContentType.quickPick.title": "記事タイプを選択",
"helpers.contentType.setContentType.quickPick.placeholder": "どの記事タイプを使用しますか?",
"helpers.contentType.create.allowSubContent.title": "サブコンテンツとしての要否",
"helpers.contentType.create.allowSubContent.placeHolder": "新規記事をサブコンテンツとして作成しますか?",
"helpers.contentType.create.allowSubContent.showOpenDialog.openLabel": "フォルダーを選択",
"helpers.contentType.create.allowSubContent.showOpenDialog.title": "新規記事用のフォルダーを選択してください。",
"helpers.contentType.create.pageBundle.title": "ページバンドルとして要否",
"helpers.contentType.create.pageBundle.placeHolder": "ページバンドルとして記事を作成しますか?",
"helpers.contentType.create.progress.title": "{0}: 記事ファイルを作成中...",
"helpers.contentType.create.success": "記事ファイルを作成しました。",
"helpers.contentType.verify.warning": "記事タイプ・コマンドは、このモードでは有効になっていません。",
"helpers.customScript.executing": "実行中: {0}",
"helpers.customScript.singleRun.article.warning": "{0}: Article couldn't be retrieved.",
"helpers.customScript.bulkRun.noFiles.warning": "{0}: ファイルが見つかりません。",
"helpers.customScript.runMediaScript.noFolder.warning": "{0}: フォルダーまたはメディアへのパスの指定がされていません。",
"helpers.customScript.showOutput.frontMatter.success": "{0}: front matter updated.",
"helpers.customScript.showOutput.copyOutput.action": "出力結果をコピー",
"helpers.customScript.showOutput.success": "{0}: カスタムスクリプトを実行しました。",
"helpers.customScript.validateCommand.error": "不正なコマンド: {0}",
"helpers.dataFileHelper.process.error": "データファイルの実行中に何らかの問題が発生しました。",
"helpers.extension.getVersion.changelog": "変更履歴を確認する",
"helpers.extension.getVersion.starIt": "⭐️を付ける",
"helpers.extension.getVersion.update.notification": "{0} が v{1} に更新されました!新機能をチェックしてください!",
"helpers.extension.migrateSettings.templates.quickPick.title": "{0} - テンプレート",
"helpers.extension.migrateSettings.templates.quickPick.placeholder": "テンプレート機能の使用を継続しますか?",
"helpers.extension.checkIfExtensionCanRun.warning": "Front MatterのBETA版は安定版がインストールされている場合は利用できません。BETA版のみがインストールされていることを確認してください。",
"helpers.mediaHelper.saveFile.folder.error": "選択されたフォルダーが見つかりません。",
"helpers.mediaHelper.saveFile.file.uploaded.success": "ファイル{0}が{1}へアップロードされました。",
"helpers.mediaHelper.saveFile.file.uploaded.failed": "申し訳ありません、{0}のアップロード中にエラーが発生しました。",
"helpers.mediaHelper.deleteFile.file.deletion.failed": "申し訳ありません、{0}の削除中にエラーが発生しました。",
"helpers.mediaLibrary.remove.warning": "その場所にはファイル\"{0}\"が既に存在しています。",
"helpers.mediaLibrary.remove.error": "申し訳ありません、\"{0}\"を\"{1}\"へのアップロード中にエラーが発生しました。",
"helpers.openFileInEditor.error": "ファイルを開けません。",
"helpers.questions.contentTitle.aiInput.title": "タイトルまたはディスクリプション",
"helpers.questions.contentTitle.aiInput.prompt": "どんな内容について書きたいですか?",
"helpers.questions.contentTitle.aiInput.placeholder": "どんな内容について書きたいですか?",
"helpers.questions.contentTitle.aiInput.quickPick.title.separator": "タイトル/ディスクリプション",
"helpers.questions.contentTitle.aiInput.quickPick.ai.separator": "AI生成によるタイトル",
"helpers.questions.contentTitle.aiInput.select.title": "タイトルを選択",
"helpers.questions.contentTitle.aiInput.select.placeholder": "記事に付けるタイトルを選択",
"helpers.questions.contentTitle.aiInput.failed": "AIタイトルの取得に失敗しました。自分で作成するか、後からもう一度試してください。",
"helpers.questions.contentTitle.aiInput.warning": "記事タイトルの入力がされていません。",
"helpers.questions.contentTitle.titleInput.title": "記事タイトル",
"helpers.questions.contentTitle.titleInput.prompt": "新しい記事のタイトルを入力してください。",
"helpers.questions.contentTitle.titleInput.placeholder": "タイトル",
"helpers.questions.contentTitle.titleInput.warning": "記事タイトルの入力がされていません。",
"helpers.questions.selectContentFolder.quickPick.title": "フォルダーを選択",
"helpers.questions.selectContentFolder.quickPick.placeholder": "記事の保存先を選択してください。",
"helpers.questions.selectContentFolder.quickPick.noSelection.warning": "記事の保存先が選択されていません。",
"helpers.questions.selectContentType.noContentType.warning": "記事タイプが見つかりません。先に記事タイプを作成してから記事を作成してください。",
"helpers.questions.selectContentType.quickPick.title": "記事タイプ",
"helpers.questions.selectContentType.quickPick.placeholder": "新規作成する記事の記事タイプを選択してください。",
"helpers.questions.selectContentType.noSelection.warning": "記事タイプが選択されていません。",
"helpers.questions.selectContentType.quickPick.error.noContentTypes": "このフォルダーには、一致する記事タイプが設定されていません。",
"helpers.seoHelper.checkLength.diagnostic.message": "記事{0}の文字数が{1}文字を超えています(現在の文字数: {2}。SEOの観点上、{1}文字以内に収めることが推奨されます。",
"helpers.settingsHelper.checkToPromote.message": "ローカル設定が存在します。この設定をグローバル設定(\"frontmatter.json\")に昇格させますか?",
"helpers.settingsHelper.promote.success": "全ての設定をチームレベルに昇格しました。",
"helpers.settingsHelper.readConfig.progress.title": "{0}: 動的な設定ファイルを読み込んでいます...",
"helpers.settingsHelper.readConfig.error": "設定の読み込みでエラーが発生しました。",
"helpers.settingsHelper.refreshConfig.success": "設定を再読み込みしました。",
"helpers.settingsHelper.safeUpdate.warning": "Front Matter CMSの構成が拡張または分割されているため、\"{0}\"の設定を更新できませんでした。手動で更新を加えてください。更新情報についての出力を確認してください。",
"helpers.taxonomyHelper.rename.input.title": "タクソノミー名を変更 {0}",
"helpers.taxonomyHelper.rename.validate.equalValue": "現在のファイル名とは別のファイル名を入力してください。",
"helpers.taxonomyHelper.rename.validate.noValue": "新しいファイル名を入力してください。",
"helpers.taxonomyHelper.merge.quickPick.title": "\"{0}\"を別の{1}にマージ",
"helpers.taxonomyHelper.merge.quickPick.placeholder": "マージする{0}を選択してください。",
"helpers.taxonomyHelper.delete.quickPick.title": "\"{0}\"を{1}から削除",
"helpers.taxonomyHelper.delete.quickPick.placeholder": "本当に\"{0}\"を{1}から削除しますか?",
"helpers.taxonomyHelper.createNew.input.title": "{0}に新規タクソノミーを作成",
"helpers.taxonomyHelper.createNew.input.placeholder": "作成したいタクソノミー名を入力してください。",
"helpers.taxonomyHelper.createNew.input.validate.noValue": "タクソノミー名は必須です。",
"helpers.taxonomyHelper.createNew.input.validate.exists": "このタクソノミー名は既に存在しています。",
"helpers.taxonomyHelper.process.insert": "{0}: 選択した記事に \"{1}\" を追加しています。",
"helpers.taxonomyHelper.process.edit": "{0}: {2}内の\"{1}\"を{3}に変更しています。",
"helpers.taxonomyHelper.process.merge": "{0}: {2}内の\"{1}\"を{3}にマージしています。",
"helpers.taxonomyHelper.process.delete": "{0}: \"{1}\"を{2}から削除しています。",
"helpers.taxonomyHelper.process.insert.success": "追加しました。",
"helpers.taxonomyHelper.process.edit.success": "変更しました。",
"helpers.taxonomyHelper.process.merge.success": "マージしました。",
"helpers.taxonomyHelper.process.delete.success": "削除しました。",
"helpers.taxonomyHelper.move.quickPick.title": "\"{0}\"を別のタクソノミータイプに移行",
"helpers.taxonomyHelper.move.quickPick.placeholder": "移行先のタクソノミータイプを選択してください。",
"helpers.taxonomyHelper.move.progress.title": "{0}: \"{1}\"を{2}から\"${3}\"へ移行しています。",
"helpers.taxonomyHelper.move.success": "移行しました。",
"listeners.dashboard.dashboardListener.openConfig.notification": "設定内容を確認するには\"frontmatter.json\"を開いてください。",
"listeners.dashboard.dashboardListener.pinItem.noPath.error": "パスが指定されていません。",
"listeners.dashboard.dashboardListener.pinItem.coundNotPin.error": "ピン留めができませんでした。",
"listeners.dashboard.dashboardListener.pinItem.coundNotUnPin.error": "ピン留めの解除ができませんでした。",
"listeners.dashboard.settingsListener.triggerTemplate.notification": "テンプレートファイルがコピーされました。",
"listeners.dashboard.settingsListener.triggerTemplate.progress.title": "テンプレートをダウンロードして初期化しています...",
"listeners.dashboard.settingsListener.triggerTemplate.download.error": "テンプレートのダウンロードに失敗しました。",
"listeners.dashboard.settingsListener.triggerTemplate.init.error": "テンプレートの初期化に失敗しました。",
"listeners.dashboard.settingsListener.setSecretValue.message": "設定が更新されました。",
"listeners.dashboard.snippetListener.addSnippet.missingFields.warning": "スニペットのタイトルまたはbodyが空です。",
"listeners.dashboard.snippetListener.addSnippet.exists.warning": "同じタイトルのスニペットが既に存在しています。",
"listeners.dashboard.snippetListener.updateSnippet.noSnippets.warning": "更新が必要なスニペットはありません。",
"listeners.general.gitListener.push.error": "submoduleのpushに失敗しました。",
"listeners.panel.dataListener.aiSuggestTaxonomy.noEditor.error": "アクティブなエディターがありません。",
"listeners.panel.dataListener.aiSuggestTaxonomy.noData.error": "記事データがありません。",
"listeners.panel.dataListener.getDataFileEntries.noDataFiles.error": "データファイルのエントリーが見つかりませんでした。",
"listeners.panel.dataListener.pushMetadata.frontMatter.error": "front matterの解析中にエラーが発生しまいた。ファイルの内容を確認してください。",
"listeners.panel.taxonomyListener.aiSuggestTaxonomy.noEditor.error": "アクティブなエディターがありません。",
"listeners.panel.taxonomyListener.aiSuggestTaxonomy.noData.error": "記事データがありません。",
"services.modeSwitch.switchMode.quickPick.placeholder": "モードを選択してください。",
"services.modeSwitch.switchMode.quickPick.title": "{0}: モードの選択",
"services.modeSwitch.setText.mode": "モード: {0}",
"services.pagesParser.parsePages.statusBar.text": "読み込み中...",
"services.pagesParser.parsePages.file.error": "ファイルエラー: {0}",
"services.sponsorAi.getTitles.warning": "AIによるタイトル生成に時間がかかりすぎています。後でもう一度試してください。",
"services.sponsorAi.getDescription.warning": "AIによるディスクリプション生成に時間がかかりすぎています。後でもう一度試してください。",
"services.sponsorAi.getTaxonomySuggestions.warning": "AIによるタクソミー生成に時間がかかりすぎています。後でもう一度試してください。",
"services.terminal.openLocalServerTerminal.terminalOption.message": "ローカルサーバーを起動"
}

View File

@@ -3,6 +3,7 @@
"common.edit": "Edit",
"common.delete": "Delete",
"common.cancel": "Cancel",
"common.apply": "Apply",
"common.clear": "Clear",
"common.clear.value": "Clear value",
"common.search": "Search",
@@ -20,7 +21,67 @@
"common.slug": "Slug",
"common.support": "Support",
"common.remove.value": "Remove {0}",
"common.filter": "Back",
"common.filter.value": "Filter by {0}",
"common.error.message": "Sorry, something went wrong.",
"common.openOnWebsite": "Open on website",
"common.settings": "Settings",
"common.refreshSettings": "Refresh settings",
"common.pin": "Pin",
"common.unpin": "Unpin",
"common.noResults": "No results",
"common.error": "Sorry, something went wrong.",
"common.yes": "yes",
"common.no": "no",
"common.openSettings": "Open settings",
"common.back": "Back",
"common.open": "Open",
"common.openWithValue": "Open: {0}",
"common.openCustomActions": "Open custom actions",
"common.view": "View",
"common.translate": "Translate",
"common.languages": "Languages",
"common.scripts": "Scripts",
"common.rename": "Rename",
"common.docs": "Documentation",
"loading.initPages": "Loading content",
"notifications.outputChannel.link": "output window",
"notifications.outputChannel.description": "Check the {0} for more details.",
"settings.view.common": "Common",
"settings.view.contentFolders": "Content folders",
"settings.view.astro": "Astro",
"settings.view.integration": "Integration",
"settings.openOnStartup": "Open dashboard on startup",
"settings.contentTypes": "Content types",
"settings.contentFolders": "Content folders",
"settings.diagnostic": "Diagnostic",
"settings.diagnostic.description": "You can run the diagnostics to check the whole Front Matter CMS configuration.",
"settings.diagnostic.link": "Run full diagnostics",
"settings.git": "Git synchronization",
"settings.git.enabled": "Enable Git synchronization to easily sync your changes with your repository.",
"settings.git.commitMessage": "Commit message",
"settings.git.submoduleInfo": "When working with Git submodules, you can refer to the submodule settings in the documentation.",
"settings.git.submoduleLink": "Read more about Git submodules",
"settings.integration.title": "Integration",
"settings.commonSettings.website.title": "Website and SSG settings",
"settings.commonSettings.previewUrl": "Preview URL",
"settings.commonSettings.websiteUrl": "Website URL",
"settings.commonSettings.startCommand": "SSG/Framework start command",
"settings.integrationsView.deepl.title": "DeepL",
"settings.integrationsView.deepl.intput.label": "API key",
"settings.integrationsView.deepl.intput.placeholder": "Enter your Deepl API key",
"settings.integrationsView.azure.title": "Azure AI Translator Service",
"settings.integrationsView.azure.intput.label": "Subscription key",
"settings.integrationsView.azure.intput.placeholder": "Enter your Azure AI Translator - Subscription key",
"settings.integrationsView.azure.region.label": "Region",
"settings.integrationsView.azure.region.placeholder": "Enter your Azure AI Translator - Region. Example: westeurope",
"developer.title": "Developer mode",
"developer.reload.title": "Reload the dashboard",
@@ -49,6 +110,8 @@
"dashboard.contents.contentActions.menuItem.view": "View",
"dashboard.contents.contentActions.alert.title": "Delete: {0}",
"dashboard.contents.contentActions.alert.description": "Are you sure you want to delete the \"{0}\" content?",
"dashboard.contents.contentActions.translations.create": "Create translation",
"dashboard.contents.contentActions.translations.menu": "Translations",
"dashboard.contents.item.invalidTitle": "<invalid title>",
"dashboard.contents.item.invalidDescription": "<invalid description>",
@@ -59,9 +122,11 @@
"dashboard.contents.overview.noMarkdown": "No Markdown to show",
"dashboard.contents.overview.noFolders": "Make sure you registered a content folder in your project to let Front Matter find the contents.",
"dashboard.contents.overview.pinned": "Pinned",
"dashboard.contents.status.draft": "Draft",
"dashboard.contents.status.published": "Published",
"dashboard.contents.status.scheduled": "Scheduled",
"dashboard.dataView.dataForm.modify": "Modify the data",
"dashboard.dataView.dataForm.add": "Add new data",
@@ -74,6 +139,7 @@
"dashboard.dataView.dataView.getStarted": "Select a data type to get started",
"dashboard.dataView.dataView.noDataFiles": "No data files found",
"dashboard.dataView.dataView.getStarted.link": "Read more to get started using data files",
"dashboard.dataView.dataView.update.message": "Updated your data entries",
"dashboard.dataView.emptyView.heading": "Select your date type first",
@@ -84,6 +150,13 @@
"dashboard.errorView.description": "Please close the dashboard and try again.",
"dashboard.filters.languageFilter.label": "Locale",
"dashboard.filters.languageFilter.all": "All",
"dashboard.header.actionsBar.itemsSelected": "{0} selected",
"dashboard.header.actionsBar.alertDelete.title": "Delete selected files",
"dashboard.header.actionsBar.alertDelete.description": "Are you sure you want to delete the selected files?",
"dashboard.header.breadcrumb.home": "Home",
"dashboard.header.clearFilters.title": "Clear filters, grouping, and sorting",
@@ -100,6 +173,7 @@
"dashboard.header.navigation.allArticles": "All articles",
"dashboard.header.navigation.published": "Published",
"dashboard.header.navigation.scheduled": "Scheduled",
"dashboard.header.navigation.draft": "In draft",
"dashboard.header.header.createContent": "Create content",
@@ -130,13 +204,13 @@
"dashboard.header.sorting.alt.asc": "Alt (asc)",
"dashboard.header.sorting.alt.desc": "Alt (desc)",
"dashboard.header.sorting.label": "Sort by",
"dashboard.header.startup.label": "Open on startup?",
"dashboard.header.tabs.contents": "Contents",
"dashboard.header.tabs.media": "Media",
"dashboard.header.tabs.snippets": "Snippets",
"dashboard.header.tabs.data": "data",
"dashboard.header.tabs.data": "Data",
"dashboard.header.tabs.taxonomies": "Taxonomies",
"dashboard.header.viewSwitch.toGrid": "Change to grid",
@@ -166,10 +240,17 @@
"dashboard.media.folderCreation.hexo.create": "Create post asset folder",
"dashboard.media.folderCreation.folder.create": "Create new folder",
"dashboard.media.folderItem.contentDirectory": "Content directory",
"dashboard.media.folderItem.publicDirectory": "Public directory",
"dashboard.media.item.buttom.insert.image": "Insert image",
"dashboard.media.item.buttom.insert.snippet": "Insert snippet",
"dashboard.media.item.quickAction.insert.field": "Insert image for your \"{0}\" field",
"dashboard.media.item.quickAction.insert.markdown": "Insert image with markdown markup",
"dashboard.media.item.quickAction.copy.path": "Copy media path",
"dashboard.media.item.quickAction.delete": "Delete media file",
"dashboard.media.item.menuItem.view": "View media details",
"dashboard.media.item.menuItem.edit.metadata": "Edit metadata",
"dashboard.media.item.menuItem.insert.image": "Insert image",
"dashboard.media.item.menuItem.reveal.media": "Reveal media",
@@ -180,7 +261,7 @@
"dashboard.media.media.dragAndDrop": "You can also drag and drop images from your desktop and select them once uploaded.",
"dashboard.media.media.folder.upload": "Upload to {0}",
"dashboard.media.media.folder.default": "No folder selected, files you drop will be added to the {0} folder",
"dashboard.media.media.placeholder": "No media files to show. You can drag &amp; drop new files by holding your [shift] key.",
"dashboard.media.media.placeholder": "No media files to show. You can drag&drop new files by holding your [shift] key.",
"dashboard.media.media.contentFolder": "Content folder",
"dashboard.media.media.publicFolder": "Public folder",
@@ -194,6 +275,8 @@
"dashboard.preview.button.refresh.title": "Refresh",
"dashboard.preview.button.open.title": "Open",
"dashboard.snippetsView.item.type.content": "Content snippet",
"dashboard.snippetsView.item.type.media": "Media snippet",
"dashboard.snippetsView.item.quickAction.editSnippet": "Edit snippet",
"dashboard.snippetsView.item.quickAction.deleteSnippet": "Delete snippet",
"dashboard.snippetsView.item.quickAction.viewSnippet": "View snippet file",
@@ -240,10 +323,17 @@
"dashboard.steps.stepsToGetStarted.contentFolders.information.description": "You can also perform this action by right-clicking on the folder in the explorer view, and selecting register folder",
"dashboard.steps.stepsToGetStarted.tags.name": "Import all tags and categories (optional)",
"dashboard.steps.stepsToGetStarted.tags.description": "Now that Front Matter knows all the content folders. Would you like to import all tags and categories from the available content?",
"dashboard.steps.stepsToGetStarted.git.name": "Do you want to enable Git synchronization?",
"dashboard.steps.stepsToGetStarted.git.description": "Enable Git synchronization to eaily sync your changes with your repository.",
"dashboard.steps.stepsToGetStarted.showDashboard.name": "Show the dashboard",
"dashboard.steps.stepsToGetStarted.showDashboard.description": "Once all actions are completed, the dashboard can be loaded.",
"dashboard.steps.stepsToGetStarted.template.name": "Use a configuration template",
"dashboard.steps.stepsToGetStarted.template.description": "Select a template to prefill the frontmatter.json file with the recommended settings.",
"dashboard.steps.stepsToGetStarted.template.warning": "Selecting a template applies a whole configuration to your project and closes this configuration view.",
"dashboard.steps.stepsToGetStarted.astroContentTypes.name": "Create Content-Types for your Astro Content Collections",
"dashboard.taxonomyView.button.add.title": "Add {0} to taxonomy settings",
"dashboard.taxonomyView.button.tag.title": "Tag content",
"dashboard.taxonomyView.button.edit.title": "Edit {0}",
"dashboard.taxonomyView.button.merge.title": "Merge {0}",
"dashboard.taxonomyView.button.move.title": "Move to another taxonomy type",
@@ -258,6 +348,10 @@
"dashboard.taxonomyView.taxonomyManager.table.heading.action": "Action",
"dashboard.taxonomyView.taxonomyManager.table.row.empty": "No {0} found",
"dashboard.taxonomyView.taxonomyManager.table.unmapped.title": "Missing in your settings",
"dashboard.taxonomyView.taxonomyManager.filterInput.placeholder": "Filter",
"dashboard.taxonomyView.taxonomyTagging.pageTitle": "Map your content with: {0}",
"dashboard.taxonomyView.taxonomyTagging.checkbox": "Tag page with {0}",
"dashboard.taxonomyView.taxonomyView.navigationBar.title": "Select the taxonomy",
"dashboard.taxonomyView.taxonomyView.button.import": "Import taxonomy",
@@ -271,7 +365,8 @@
"dashboard.welcomeScreen.thanks": "Thank you for using Front Matter!",
"dashboard.welcomeScreen.description": "We try to aim to make Front Matter as easy to use as possible, but if you have any questions or suggestions. Please don't hesitate to reach out to us on GitHub.",
"dashboard.welcomeScreen.link.github.title": "GitHub",
"dashboard.welcomeScreen.link.github.label": "GitHub / Documentation",
"dashboard.welcomeScreen.link.github.label": "GitHub",
"dashboard.welcomeScreen.link.documentation.label": "Documentation",
"dashboard.welcomeScreen.link.sponsor.title": "Become a sponsor",
"dashboard.welcomeScreen.link.sponsor.label": "Sponsor",
"dashboard.welcomeScreen.link.review.title": "Write a review",
@@ -280,6 +375,16 @@
"dashboard.welcomeScreen.actions.description": "You can also use the extension from the Front Matter side panel. There you will find the actions you can perform specifically for your pages.",
"dashboard.welcomeScreen.actions.thanks": "We hope you enjoy Front Matter!",
"dashboard.media.detailsSlideOver.unmapped.description": "Do you want to remap the metadata of unmapped files?",
"dashboard.configuration.astro.astroContentTypes.empty": "No Astro Content Collections found.",
"dashboard.configuration.astro.astroContentTypes.description": "The following Astro Content Collections can be used to generate a content-type.",
"panel.git.gitAction.title": "Publish changes",
"panel.git.gitAction.branch.select": "Select branch",
"panel.git.gitAction.input.placeholder": "Commit message",
"panel.git.gitAction.button.fetch": "Fetch",
"panel.contentType.contentTypeValidator.title": "Content-type",
"panel.contentType.contentTypeValidator.hint": "We noticed field differences between the content-type and the front matter data. \n Would you like to create, update, or set the content-type for this content?",
"panel.contentType.contentTypeValidator.button.create": "Create content-type",
@@ -326,6 +431,7 @@
"panel.fields.slugField.generate": "Generate slug",
"panel.fields.textField.ai.message": "Use Front Matter AI to suggest {0}",
"panel.fields.textField.copilot.message": "Use Copilot to suggest {0}",
"panel.fields.textField.ai.generate": "Generating suggestion...",
"panel.fields.textField.loading": "Loading field",
"panel.fields.textField.limit": "Field limit reached {0}",
@@ -346,7 +452,6 @@
"panel.baseView.initialize": "Initialize project",
"panel.baseView.actions.title": "Actions",
"panel.baseView.action.openDashboard": "Open dashboard",
"panel.baseView.action.openPreview": "Open preview",
"panel.baseView.action.createContent": "Create content",
"panel.baseView.empty": "Open a file to see more actions",
@@ -366,6 +471,7 @@
"panel.globalSettings.action.server.placeholder": "Example: {0}",
"panel.metadata.title": "Metadata",
"panel.metadata.focusProblems": "Check the problems view for more information",
"panel.otherActions.title": "Other actions",
"panel.otherActions.writingSettings.enabled": "Writing settings enabled",
@@ -416,11 +522,280 @@
"panel.tagPicker.inputPlaceholder.empty": "Pick your {0}",
"panel.tagPicker.inputPlaceholder.disabled": "You have reached the limit of {0}",
"panel.tagPicker.ai.suggest": "Use Front Matter AI to suggest {0}",
"panel.tagPicker.copilot.suggest": "Use GitHub Copilot to suggest {0}",
"panel.tagPicker.ai.generating": "Generating suggestions...",
"panel.tagPicker.limit": "Max.: {0}",
"panel.tagPicker.unkown": "Add the unknown tag",
"panel.tags.tag.warning": "Be aware, this tag \"{0}\" is not saved in your settings. Once removed, it will be gone forever.",
"panel.viewPanel.mediaInsert": "Continue in the media dashboard to select the image you want to insert."
"panel.viewPanel.mediaInsert": "Continue in the media dashboard to select the image you want to insert.",
"commands.article.setDate.error": "Something failed while parsing the date format. Check your \"{0}\" setting.",
"commands.article.updateSlug.error": "Failed to rename file: {0}",
"commands.article.rename.fileNotExists.error": "The file did not exist",
"commands.article.rename.fileExists.error": "A file with the name \"{0}\" already exists",
"commands.article.rename.fileName.title": "Rename: {0}",
"commands.article.rename.fileName.prompt": "File name",
"commands.cache.cleared": "Cache cleared",
"commands.chatbot.title": "Ask me anything",
"commands.content.option.contentType.label": "Create content by content type",
"commands.content.option.contentType.description": "Select if you want to create new content by the available content type(s)",
"commands.content.option.template.label": "Create content by template",
"commands.content.option.template.description": "Select if you want to create new content by the available template(s)",
"commands.content.quickPick.title": "Create content",
"commands.content.quickPick.placeholder": "Select how you want to create your new content",
"commands.dashboard.title": "Dashboard",
"commands.folders.addMediaFolder.inputBox.title": "Add media folder",
"commands.folders.addMediaFolder.inputBox.prompt": "Which name would you like to give to your folder (use \"/\" to create multi-level folders)?",
"commands.folders.addMediaFolder.noFolder.warning": "No folder name was specified.",
"commands.folders.create.folderExists.warning": "Folder is already registered",
"commands.folders.create.input.title": "Register folder",
"commands.folders.create.input.prompt": "Which name would you like to specify for this folder?",
"commands.folders.create.input.placeholder": "Folder name",
"commands.folders.create.success": "Folder registered",
"commands.folders.getWorkspaceFolder.workspaceFolderPick.placeholder": "Please select the main workspace folder for Front Matter to use.",
"commands.folders.get.notificationError.title": "Folder \"{0}\" does not exist. Please remove it from the settings.",
"commands.folders.get.notificationError.remove.action": "Remove folder",
"commands.folders.get.notificationError.create.action": "Create folder",
"commands.i18n.create.warning.noFileSelected": "No file selected.",
"commands.i18n.create.warning.noFile": "The file could not be retrieved.",
"commands.i18n.create.warning.noContentType": "Content type could not be retrieved for the current file.",
"commands.i18n.create.warning.noConfig": "No i18n configuration found.",
"commands.i18n.create.error.noLocaleDefinition": "Could not retrieve the locale for the current file.",
"commands.i18n.create.error.noLocales": "Current file has been translated to all available languages.",
"commands.i18n.create.error.noContentFolder": "Could not define a content folder for the current file.",
"commands.i18n.create.error.fileExists": "The i18n translation already exists.",
"commands.i18n.create.success.created": "Created \"{0}\" i18n content file.",
"commands.i18n.create.quickPick.title": "Create content for locale",
"commands.i18n.create.quickPick.placeHolder": "To which locale do you want to create a new content?",
"commands.i18n.translate.progress.title": "Translating content...",
"commands.preview.panel.title": "Preview: {0}",
"commands.preview.askUserToPickFolder.title": "Select the folder of the article to preview",
"commands.project.initialize.success": "Project initialized successfully.",
"commands.project.switchProject.title": "To which project do you want to switch?",
"commands.project.createSampleTemplate.info": "Sample template created.",
"commands.settings.create.input.prompt": "Insert the value of the {0} that you want to add to your configuration.",
"commands.settings.create.input.placeholder": "Name of the {0}",
"commands.settings.create.warning": "The provided {0} already exists.",
"commands.settings.create.quickPick.placeholder": "Do you want to add the new {0} to the page?",
"commands.settings.export.progress.title": "{0}: exporting tags and categories",
"commands.settings.export.progress.success": "Export completed. Tags: {0} - Categories: {1}.",
"commands.settings.remap.quickpick.title": "Remap",
"commands.settings.remap.quickpick.placeholder": "What do you want to remap?",
"commands.settings.remap.noTaxonomy.warning": "No {0} configured.",
"commands.settings.remap.selectTaxonomy.placeholder": "Select your {0} to insert.",
"commands.settings.remap.newOption.input.prompt": "Specify the value of the {0} with which you want to remap \"{1}\". Leave the input <blank> if you want to remove the {0} from all articles.",
"commands.settings.remap.newOption.input.placeholder": "Name of the {0}",
"commands.settings.remap.delete.placeholder": "Delete {0} {1}?",
"commands.statusListener.verifyRequiredFields.diagnostic.emptyField": "The {0} field is required. Please define a value for the field.",
"commands.statusListener.verifyRequiredFields.notification.error": "The following fields are required to contain a value: {0}",
"commands.template.generate.input.title": "Template title",
"commands.template.generate.input.prompt": "Which name would you like to give your template?",
"commands.template.generate.input.placeholder": "article",
"commands.template.generate.noTitle.warning": "You did not specify a template title.",
"commands.template.generate.keepContents.title": "Keep content",
"commands.template.generate.keepContents.placeholder": "Do you want to keep the contents for the template?",
"commands.template.generate.keepContents.noOption.warning": "You did not pick any of the options for keeping the template its content.",
"commands.template.generate.keepContents.success": "Template created and is now available in your {0} folder.",
"commands.template.getTemplates.warning": "No templates found.",
"commands.template.create.folderPath.warning": "Incorrect project folder path retrieved.",
"commands.template.create.noTemplates.warning": "No templates found.",
"commands.template.create.selectTemplate.title": "Select a template",
"commands.template.create.selectTemplate.placeholder": "Select the content template to use",
"commands.template.create.selectTemplate.noTemplate.warning": "No template selected.",
"commands.template.create.selectTemplate.notFound.warning": "Content template could not be found.",
"commands.template.create.success": "Your new content is now available.",
"commands.wysiwyg.command.unorderedList.label": "Unordered list",
"commands.wysiwyg.command.unorderedList.detail": "Add an unordered list",
"commands.wysiwyg.command.orderedList.label": "Ordered list",
"commands.wysiwyg.command.orderedList.detail": "Add an ordered list",
"commands.wysiwyg.command.taskList.label": "Task list",
"commands.wysiwyg.command.taskList.detail": "Add a task list",
"commands.wysiwyg.command.code.label": "Code",
"commands.wysiwyg.command.code.detail": "Add inline code snippet",
"commands.wysiwyg.command.codeblock.label": "Code block",
"commands.wysiwyg.command.codeblock.detail": "Add a code block",
"commands.wysiwyg.command.blockquote.label": "Blockquote",
"commands.wysiwyg.command.blockquote.detail": "Add a blockquote",
"commands.wysiwyg.command.strikethrough.label": "Strikethrough",
"commands.wysiwyg.command.strikethrough.detail": "Add strikethrough text",
"commands.wysiwyg.quickPick.title": "WYSIWYG Options",
"commands.wysiwyg.quickPick.placeholder": "Which type of markup would you like to insert?",
"commands.wysiwyg.addHyperlink.hyperlinkInput.title": "WYSIWYG Hyperlink",
"commands.wysiwyg.addHyperlink.hyperlinkInput.prompt": "Enter the URL",
"commands.wysiwyg.addHyperlink.textInput.title": "WYSIWYG Text",
"commands.wysiwyg.addHyperlink.textInput.prompt": "Enter the text for the hyperlink",
"commands.wysiwyg.insertText.heading.input.title": "Heading level",
"commands.wysiwyg.insertText.heading.input.placeholder": "Which heading level do you want to insert?",
"helpers.articleHelper.createContent.pageBundle.error": "A page bundle with the name {0} already exists in {1}.",
"helpers.articleHelper.createContent.contentExists.warning": "Content with the title already exists. Please specify a new title.",
"helpers.articleHelper.processCustomPlaceholders.placeholder.error": "Error while processing the {0} placeholder.",
"helpers.articleHelper.parseFile.diagnostic.error": "Error parsing the front matter of {0}.",
"helpers.contentType.generate.noFrontMatter.error": "No front matter data found to generate a content type.",
"helpers.contentType.generate.override.quickPick.title": "Override the default content type",
"helpers.contentType.generate.override.quickPick.placeholder": "Do you want to overwrite the default content type configuration with the fields used in the current field?",
"helpers.contentType.generate.contentTypeInput.title": "Generate Content Type",
"helpers.contentType.generate.contentTypeInput.prompt": "Enter the name of the content type to generate",
"helpers.contentType.generate.contentTypeInput.validation.enterName": "Please enter a name for the content type.",
"helpers.contentType.generate.contentTypeInput.validation.nameExists": "A content type with this name already exists.",
"helpers.contentType.generate.noContentTypeName.warning": "You didn't specify a name for the content type.",
"helpers.contentType.generate.pageBundle.quickPick.title": "Use as a page bundle",
"helpers.contentType.generate.pageBundle.quickPick.placeHolder": "Do you want to use this content type as a page bundle?",
"helpers.contentType.generate.updated.success": "Content type {0} has been updated.",
"helpers.contentType.generate.generated.success": "Content type {0} has been generated.",
"helpers.contentType.addMissingFields.noFrontMatter.warning": "No front matter data found to add missing fields.",
"helpers.contentType.addMissingFields.updated.success": "Content type {0} has been updated.",
"helpers.contentType.setContentType.noFrontMatter.warning": "No front matter data found to set the content type.",
"helpers.contentType.setContentType.quickPick.title": "Select the content type",
"helpers.contentType.setContentType.quickPick.placeholder": "Which content type would you like to use?",
"helpers.contentType.create.allowSubContent.title": "Do you want to create it as sub-content?",
"helpers.contentType.create.allowSubContent.placeHolder": "Do you want to create it as sub-content?",
"helpers.contentType.create.allowSubContent.showOpenDialog.openLabel": "Select folder",
"helpers.contentType.create.allowSubContent.showOpenDialog.title": "Select folder to create the content",
"helpers.contentType.create.pageBundle.title": "Create as a page bundle?",
"helpers.contentType.create.pageBundle.placeHolder": "Do you want to create the sub-content as a page bundle?",
"helpers.contentType.create.progress.title": "{0}: Creating content...",
"helpers.contentType.create.success": "Your new content has been created.",
"helpers.contentType.verify.warning": "The content type actions are not available in this mode.",
"helpers.customScript.executing": "Executing: {0}",
"helpers.customScript.singleRun.article.warning": "{0}: Article couldn't be retrieved.",
"helpers.customScript.bulkRun.noFiles.warning": "{0}: No files found",
"helpers.customScript.runMediaScript.noFolder.warning": "{0}: There was no folder or media path specified.",
"helpers.customScript.showOutput.frontMatter.success": "{0}: front matter updated.",
"helpers.customScript.showOutput.copyOutput.action": "Copy output",
"helpers.customScript.showOutput.success": "{0}: Executed your custom script.",
"helpers.customScript.validateCommand.error": "Invalid command: {0}",
"helpers.dataFileHelper.process.error": "Something went wrong while processing the data file.",
"helpers.extension.getVersion.changelog": "Check the changelog",
"helpers.extension.getVersion.starIt": "Give it a ⭐️",
"helpers.extension.getVersion.update.notification": "{0} has been updated to v{1} — check out what's new!",
"helpers.extension.migrateSettings.templates.quickPick.title": "{0} - Templates",
"helpers.extension.migrateSettings.templates.quickPick.placeholder": "Do you want to keep on using the template functionality?",
"helpers.extension.checkIfExtensionCanRun.warning": "Front Matter BETA cannot be used while the stable version is installed. Please ensure that you have only over version installed.",
"helpers.mediaHelper.saveFile.folder.error": "We couldn't find your selected folder.",
"helpers.mediaHelper.saveFile.file.uploaded.success": "File {0} uploaded to: {1}",
"helpers.mediaHelper.saveFile.file.uploaded.failed": "Sorry, something went wrong uploading {0}",
"helpers.mediaHelper.deleteFile.file.deletion.failed": "Sorry, something went wrong deleting {0}",
"helpers.mediaLibrary.remove.warning": "The name \"{0}\" already exists at the file location.",
"helpers.mediaLibrary.remove.error": "Sorry, something went wrong updating \"{0}\" to \"{1}\".",
"helpers.openFileInEditor.error": "Couldn't open the file.",
"helpers.questions.contentTitle.aiInput.title": "Title or description",
"helpers.questions.contentTitle.aiInput.prompt": "What would you like to write about?",
"helpers.questions.contentTitle.aiInput.placeholder": "What would you like to write about?",
"helpers.questions.contentTitle.aiInput.quickPick.title.separator": "your title/description",
"helpers.questions.contentTitle.aiInput.quickPick.ai.separator": "AI generated title",
"helpers.questions.contentTitle.aiInput.quickPick.copilot.separator": "GitHub Copilot suggestions",
"helpers.questions.contentTitle.aiInput.select.title": "Select a title",
"helpers.questions.contentTitle.aiInput.select.placeholder": "Select a title for your content",
"helpers.questions.contentTitle.aiInput.failed": "Failed fetching the AI title. Please try to use your own title or try again later.",
"helpers.questions.contentTitle.copilotInput.failed": "Failed fetching the GitHub Copilot title suggestions. Please try to use your own title or try again later.",
"helpers.questions.contentTitle.aiInput.warning": "You did not specify a title for your content.",
"helpers.questions.contentTitle.titleInput.title": "Content title",
"helpers.questions.contentTitle.titleInput.prompt": "What would you like to use as a title for the content to create?",
"helpers.questions.contentTitle.titleInput.placeholder": "Content title",
"helpers.questions.contentTitle.titleInput.warning": "You did not specify a title for your content.",
"helpers.questions.selectContentFolder.quickPick.title": "Select a folder",
"helpers.questions.selectContentFolder.quickPick.placeholder": "Select where you want to create your content",
"helpers.questions.selectContentFolder.quickPick.noSelection.warning": "You didn't select a place where you wanted to create your content.",
"helpers.questions.selectContentType.noContentType.warning": "No content types found. Please create a content type first.",
"helpers.questions.selectContentType.quickPick.title": "Content type",
"helpers.questions.selectContentType.quickPick.placeholder": "Select the content type to create your new content",
"helpers.questions.selectContentType.noSelection.warning": "No content type was selected.",
"helpers.questions.selectContentType.quickPick.error.noContentTypes": "There are no matching content types configured for this folder.",
"helpers.seoHelper.checkLength.diagnostic.message": "Article {0} is longer than {1} characters (current length: {2}). For SEO reasons, it would be better to make it less than {1} characters.",
"helpers.settingsHelper.checkToPromote.message": "You have local settings. Would you like to promote them to the global settings (\"frontmatter.json\")?",
"helpers.settingsHelper.promote.success": "All settings promoted to team level.",
"helpers.settingsHelper.readConfig.progress.title": "{0}: Reading dynamic config file...",
"helpers.settingsHelper.readConfig.error": "Error reading your configuration.",
"helpers.settingsHelper.refreshConfig.success": "Settings have been refreshed.",
"helpers.settingsHelper.safeUpdate.warning": "Cannot update setting \"{0}\" because you've extended or split the Front Matter CMS configuration. Please manually add your changes. Check the output for the setting update.",
"helpers.taxonomyHelper.rename.input.title": "Rename the {0}",
"helpers.taxonomyHelper.rename.validate.equalValue": "The new value must be different from the old one.",
"helpers.taxonomyHelper.rename.validate.noValue": "A new value must be provided.",
"helpers.taxonomyHelper.merge.quickPick.title": "Merge the \"{0}\" with another {1} value",
"helpers.taxonomyHelper.merge.quickPick.placeholder": "Select the {0} value to merge with",
"helpers.taxonomyHelper.delete.quickPick.title": "Delete the \"{0}\" {1} value",
"helpers.taxonomyHelper.delete.quickPick.placeholder": "Are you sure you want to delete the \"{0}\" {1} value?",
"helpers.taxonomyHelper.createNew.input.title": "Create a new {0} value",
"helpers.taxonomyHelper.createNew.input.placeholder": "Enter the value you want to add",
"helpers.taxonomyHelper.createNew.input.validate.noValue": "A value must be provided.",
"helpers.taxonomyHelper.createNew.input.validate.exists": "The value already exists.",
"helpers.taxonomyHelper.process.insert": "{0}: Inserting \"{1}\" to your selected pages.",
"helpers.taxonomyHelper.process.edit": "{0}: Renaming \"{1}\" from {2} to {3}.",
"helpers.taxonomyHelper.process.merge": "{0}: Merging \"{1}\" from {2} to {3}.",
"helpers.taxonomyHelper.process.delete": "{0}: Deleting \"{1}\" from {2}.",
"helpers.taxonomyHelper.process.insert.success": "Insert completed.",
"helpers.taxonomyHelper.process.edit.success": "Edit completed.",
"helpers.taxonomyHelper.process.merge.success": "Merge completed.",
"helpers.taxonomyHelper.process.delete.success": "Deletion completed.",
"helpers.taxonomyHelper.move.quickPick.title": "Move the \"{0}\" to another type",
"helpers.taxonomyHelper.move.quickPick.placeholder": "Select the type to move to",
"helpers.taxonomyHelper.move.progress.title": "{0}: Moving \"{1}\" from {2} to \"${3}\".",
"helpers.taxonomyHelper.move.success": "Move completed.",
"listeners.dashboard.dashboardListener.openConfig.notification": "Open the \"frontmatter.json\" file if you want to review the configuration.",
"listeners.dashboard.dashboardListener.pinItem.noPath.error": "No path provided.",
"listeners.dashboard.dashboardListener.pinItem.coundNotPin.error": "Could not pin item.",
"listeners.dashboard.dashboardListener.pinItem.coundNotUnPin.error": "Could not unpin item.",
"listeners.dashboard.settingsListener.triggerTemplate.notification": "Template files copied.",
"listeners.dashboard.settingsListener.triggerTemplate.progress.title": "Downloading and initializing the template...",
"listeners.dashboard.settingsListener.triggerTemplate.download.error": "Failed to download the template.",
"listeners.dashboard.settingsListener.triggerTemplate.init.error": "Failed to initialize the template.",
"listeners.dashboard.settingsListener.setSecretValue.message": "Setting has been updated.",
"listeners.dashboard.snippetListener.addSnippet.missingFields.warning": "Snippet missing title or body",
"listeners.dashboard.snippetListener.addSnippet.exists.warning": "Snippet with the same title already exists",
"listeners.dashboard.snippetListener.updateSnippet.noSnippets.warning": "No snippets to update",
"listeners.general.gitListener.push.error": "Failed to push submodules.",
"listeners.panel.dataListener.aiSuggestTaxonomy.noEditor.error": "No active editor",
"listeners.panel.dataListener.aiSuggestTaxonomy.noData.error": "No article data",
"listeners.panel.dataListener.getDataFileEntries.noDataFiles.error": "Couldn't find data file entries",
"listeners.panel.dataListener.pushMetadata.frontMatter.error": "Something went wrong while parsing your front matter. Please check the contents of your file.",
"listeners.panel.taxonomyListener.aiSuggestTaxonomy.noEditor.error": "No active editor",
"listeners.panel.taxonomyListener.aiSuggestTaxonomy.noData.error": "No article data",
"services.copilot.getChatResponse.error": "Failed to get a response from the GitHub Copilot.",
"services.modeSwitch.switchMode.quickPick.placeholder": "Select the mode you want to use",
"services.modeSwitch.switchMode.quickPick.title": "{0}: Mode selection",
"services.modeSwitch.setText.mode": "Mode: {0}",
"services.pagesParser.parsePages.statusBar.text": "Processing...",
"services.pagesParser.parsePages.file.error": "File error: {0}",
"services.sponsorAi.getTitles.warning": "The AI title generation took too long. Please try again later.",
"services.sponsorAi.getDescription.warning": "The AI description generation took too long. Please try again later.",
"services.sponsorAi.getTaxonomySuggestions.warning": "The AI taxonomy generation took too long. Please try again later.",
"services.terminal.openLocalServerTerminal.terminalOption.message": "Starting local server"
}

1
l10n/bundle.l10n.ko.json Normal file
View File

@@ -0,0 +1 @@
{}

View File

@@ -0,0 +1 @@
{}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 212 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 211 KiB

18444
package-lock.json generated

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -239,5 +239,11 @@
"setting.frontMatter.dashboard.mediaSnippet.deprecationMessage": "Diese Einstellung ist veraltet und wird in der nächsten Hauptversion entfernt. Bitte definieren Sie Ihr Medien-Snippet in der `frontMatter.content.snippet` Einstellung.",
"setting.frontMatter.taxonomy.dateField.deprecationMessage": "Diese Einstellung ist veraltet und wird in der nächsten Hauptversion entfernt. Bitte verwenden Sie stattdessen die neuen `isPublishDate`-Einstellungen in den Datumsfeldern Ihrer Content-Typen.",
"setting.frontMatter.taxonomy.modifiedField.deprecationMessage": "Diese Einstellung ist veraltet und wird in der nächsten Hauptversion entfernt. Bitte verwenden Sie stattdessen die neuen `isModifiedDate`-Einstellungen in den Datumsfeldern Ihrer Content-Typen.",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.customType.description": "🚧: Specify the name of the custom field type to use."
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.customType.description": "Geben Sie den Namen des zu verwendenden benutzerdefinierten Feldtyps an.",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.clearEmpty.description": "Geben Sie an, ob die leeren Werte gelöscht werden sollen.",
"setting.frontMatter.website.host.markdownDescription": "Geben Sie die Host-URL Ihrer Website an. [Überprüfen Sie die Dokumente] (https://frontmatter.codes/docs/settings/overview#frontmatter.website.url)",
"command.frontMatter.settings.refresh": "Aktualisieren Sie die Einstellungen für Frontmatter",
"setting.frontMatter.config.dynamicFilePath.markdownDescription": "Geben Sie den Pfad zur dynamischen Konfigurationsdatei an (z. B. [[workspace]]/config.js). [Überprüfen Sie die Dokumente] (https://frontmatter.codes/docs/settings/overview#frontmatter.config.dynamicfilepath)",
"setting.frontMatter.content.pageFolders.items.properties.disableCreation.description": "Deaktivieren Sie die Erstellung neuer Inhalte im Ordner.",
"setting.frontMatter.custom.scripts.items.properties.contentTypes.description": "Definieren Sie die Inhaltstypen, für die das Skript verwendet werden soll. Wenn keine definiert sind, ist sie für alle Typen verfügbar."
}

View File

@@ -40,7 +40,7 @@
"command.frontMatter.preview": "記事のプレビューを開く",
"command.frontMatter.chatbot": "Front Matter AIに質問する",
"command.frontMatter.promoteSettings": "ローカル設定をチームレベルへ昇格させる",
"command.frontMatter.remap": "全ての記事のタグまたはカテゴリーを再配置または削除する",
"command.frontMatter.remap": "全ての記事のタグまたはカテゴリーを再構成または削除する",
"command.frontMatter.setLastModifiedDate": "最終更新日を設定する",
"command.frontMatter.markup.strikethrough": "取り消し線",
"command.frontMatter.mode.switch": "モードの切り替え",
@@ -48,92 +48,104 @@
"command.frontMatter.markup.unorderedlist": "順序なしリスト",
"command.frontMatter.git.sync": "同期",
"command.frontMatter.cache.clear": "キャッシュをクリア",
"command.frontMatter.i18n.create": "新しい翻訳を作成",
"settings.configuration.title": "Front Matter: チームで作業する場合はfrontmatter.jsonで設定してください。",
"setting.frontMatter.projects.markdownDescription": "Front Matter CMSを利用するプロジェクトを設定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.projects)",
"setting.frontMatter.projects.items.properties.name.markdownDescription": "🚧: Specify the name of the project.",
"setting.frontMatter.projects.items.properties.default.markdownDescription": "🚧: Specify if this project is the default project to load.",
"setting.frontMatter.projects.items.properties.name.markdownDescription": "プロジェクトの名前を指定します。",
"setting.frontMatter.projects.items.properties.default.markdownDescription": "このプロジェクトを読み込む既定のプロジェクトにするかどうかを指定します。",
"setting.frontMatter.sponsors.ai.enabled.markdownDescription": "AIによる提案を利用します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.sponsors.ai.enabled)",
"setting.frontMatter.extensibility.scripts.markdownDescription": "Front Matter CMSで読み込むスクリプトのリストを指定します。. [ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.extensibility.scripts)",
"setting.frontMatter.extensibility.scripts.markdownDescription": "Front Matter CMSで読み込むスクリプトのリストを指定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.extensibility.scripts)",
"setting.frontMatter.experimental.markdownDescription": "実験的な機能をオンにします。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.experimental)",
"setting.frontMatter.extends.markdownDescription": "Front Matter CMSの構成を拡張するパス/URLのリストを設定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.extends)",
"setting.frontMatter.content.autoUpdateDate.markdownDescription": "記事やページの最終編集日を自動で更新します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.content.autoupdatedate)",
"setting.frontMatter.content.defaultFileType.markdownDescription": "新しい記事を作成する際の既定のファイル形式を設定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.content.defaultfiletype)",
"setting.frontMatter.content.defaultSorting.markdownDescription": "ダッシュボード上に表示される記事一覧の既定の並び順を設定します。Enum列挙型や任意のIDを指定してください。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.content.defaultsorting)",
"setting.frontMatter.content.draftField.markdownDescription": "記事の下書きステータスを管理するフィールドを設定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.content.draftfield)",
"setting.frontMatter.content.draftField.properties.type.description": "🚧: Type of the draft field you want to use",
"setting.frontMatter.content.draftField.properties.name.description": "🚧: Name of the field to use",
"setting.frontMatter.content.draftField.properties.invert.description": "🚧: By default the draft field is set to true when the content is a draft. Set this to true to set it to false.",
"setting.frontMatter.content.draftField.properties.choices.description": "🚧: List of choices for the field",
"setting.frontMatter.content.draftField.properties.type.description": "使用する下書きフィールドの型",
"setting.frontMatter.content.draftField.properties.name.description": "使用するフィールドの名前",
"setting.frontMatter.content.draftField.properties.invert.description": "既定では、記事が下書きの場合、下書きフィールドは true に設定されます。これを true に設定すると、false に設定されます。",
"setting.frontMatter.content.draftField.properties.choices.description": "フィールドの選択肢のリスト",
"setting.frontMatter.content.fmHighlight.markdownDescription": "Markdownファイル内のfront matterをハイライトします。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.content.fmhighlight)",
"setting.frontMatter.content.hideFm.markdownDescription": "Markdownファイル内のfront matterを非表示にします。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.content.hidefm)",
"setting.frontMatter.content.hideFmMessage.markdownDescription": "front matterが非表示の際に、編集画面に表示するメッセージを設定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.content.hidefmmessage)",
"setting.frontMatter.content.pageFolders.markdownDescription": "フォルダーを配列で定義して、この拡張機能が記事を取得したり新しい記事を作成できるようにします。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.content.pagefolders)",
"setting.frontMatter.content.pageFolders.items.properties.title.description": "🚧: Name of the folder",
"setting.frontMatter.content.pageFolders.items.properties.path.description": "🚧: Path of the folder",
"setting.frontMatter.content.pageFolders.items.properties.excludeSubdir.description": "🚧: Exclude sub-directories",
"setting.frontMatter.content.pageFolders.items.properties.previewPath.description": "🚧: Defines a custom preview path for the folder.",
"setting.frontMatter.content.pageFolders.items.properties.filePrefix.description": "🚧: Defines a prefix for the file name.",
"setting.frontMatter.content.pageFolders.items.properties.contentTypes.description": "🚧: Defines which content types can be used for the current location. If not defined, all content types will be available.",
"setting.frontMatter.content.pageFolders.items.properties.title.description": "フォルダーの名前",
"setting.frontMatter.content.pageFolders.items.properties.path.description": "フォルダーのパス",
"setting.frontMatter.content.pageFolders.items.properties.excludeSubdir.description": "サブディレクトリを除外する",
"setting.frontMatter.content.pageFolders.items.properties.previewPath.description": "フォルダーのカスタム プレビュー パスを定義します。",
"setting.frontMatter.content.pageFolders.items.properties.trailingSlash.description": "プレビュー用URLに末尾のスラッシュを加えるかどうかを設定します。",
"setting.frontMatter.content.pageFolders.items.properties.filePrefix.description": "ファイル名の接頭辞を定義します。",
"setting.frontMatter.content.pageFolders.items.properties.contentTypes.description": "現在の場所に使用できる記事タイプを定義します。定義しない場合は、全ての記事タイプを使用できます。",
"setting.frontMatter.content.pageFolders.items.properties.disableCreation.description": "フォルダー内の新しい記事の作成を無効にします。",
"setting.frontMatter.content.pageFolders.items.properties.defaultLocale.description": "ページフォルダー用デフォルトのロケールIDを設定します。このフォルダー内の全ての記事が`frontMatter.content.i18n`で設定された言語へ翻訳可能になります。",
"setting.frontMatter.content.pageFolders.items.properties.locales.description": "ページフォルダーで利用するロケールを設定します。この設定は記事の翻訳に使用されます。",
"setting.frontMatter.content.pageFolders.items.properties.slugTemplate.description": "カスタムスラッグのテンプレートを定義します。",
"setting.frontMatter.content.i18n.markdownDescription": "ウェブサイトで利用するロケールを設定します。この設定はページフォルダーレベルの設定より優先されます。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.content.i18n)",
"setting.frontMatter.content.i18n.items.properties.title.description": "言語名",
"setting.frontMatter.content.i18n.items.properties.locale.description": "言語コード",
"setting.frontMatter.content.i18n.items.properties.path.description": "言語フォルダーの相対パス",
"setting.frontMatter.content.placeholders.markdownDescription": "記事タイプとテンプレートで使用するプレースホルダーを配列で定義して、記事のfront matterを自動で入力できるようにします。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.content.placeholders)",
"setting.frontMatter.content.placeholders.items.properties.id.description": "🚧: ID of the placeholder, in your content type or template, use it as follows: {{placeholder}}",
"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.placeholders.items.properties.id.description": "プレースホルダーのIDを記事タイプまたはテンプレートで、次のように使用します: {{placeholder}}",
"setting.frontMatter.content.placeholders.items.properties.value.description": "プレースホルダーの値",
"setting.frontMatter.content.placeholders.items.properties.script.description": "プレースホルダーの値を取得するために実行するスクリプト",
"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.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)",
"setting.frontMatter.content.sorting.items.properties.id.description": "🚧: The ID of the sorting option. This will be used for the storing the last used sorting option or the default option.",
"setting.frontMatter.content.sorting.items.properties.title.description": "🚧: Name of the sorting label",
"setting.frontMatter.content.sorting.items.properties.name.description": "🚧: Name of the metadata field to sort by",
"setting.frontMatter.content.sorting.items.properties.order.description": "🚧: Order of the sorting",
"setting.frontMatter.content.sorting.items.properties.type.description": "🚧: Type of the field value",
"setting.frontMatter.content.sorting.items.properties.id.description": "並べ替えオプションの ID。これは、最後に使用した並べ替えオプションまたは既定のオプションを格納するために使用されます。",
"setting.frontMatter.content.sorting.items.properties.title.description": "並べ替えラベルの名前",
"setting.frontMatter.content.sorting.items.properties.name.description": "並べ替えの基準となるメタデータ フィールドの名前",
"setting.frontMatter.content.sorting.items.properties.order.description": "ソートの順序",
"setting.frontMatter.content.sorting.items.properties.type.description": "フィールド値の型",
"setting.frontMatter.content.supportedFileTypes.markdownDescription": "Front Matterでサポートされるファイル形式を設定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.content.supportedfiletypes)",
"setting.frontMatter.content.wysiwyg.markdownDescription": "What You See, Is What You GetWYSIWYGMarkdownコントロールを有効にします。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.content.wysiwyg)",
"setting.frontMatter.content.filters.markdownDescription": "ダッシュボードで利用するフィルターを設定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.content.filters)",
"setting.frontMatter.custom.scripts.markdownDescription": "実行するNode.jsスクリプトのパスを指定します。現在のファイルのパスが引数として渡されます。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.custom.scripts)",
"setting.frontMatter.custom.scripts.items.properties.id.description": "🚧: ID of the script.",
"setting.frontMatter.custom.scripts.items.properties.title.description": "🚧: Title you want to give to your script. Will be shown as the title of the button.",
"setting.frontMatter.custom.scripts.items.properties.script.description": "🚧: Path to the script to execute",
"setting.frontMatter.custom.scripts.items.properties.nodeBin.description": "🚧: Path to the node executable. This is required when using NVM, so that there is no confusion of which node version to use. (deprecated: use the command property instead)",
"setting.frontMatter.custom.scripts.items.properties.bulk.description": "🚧: Run the script for all content files",
"setting.frontMatter.custom.scripts.items.properties.output.description": "🚧: Define where you want to output your script output. Default is a notification, but you can specify to show it in an editor panel.",
"setting.frontMatter.custom.scripts.items.properties.outputType.description": "🚧: The type of output for the editor panel. Can be used to change it to 'markdown' for example",
"setting.frontMatter.custom.scripts.items.properties.type.description": "🚧: The type for which the script will be used.",
"setting.frontMatter.custom.scripts.items.properties.command.description": "🚧: The type of script you want to execute.",
"setting.frontMatter.custom.scripts.items.properties.hidden.description": "🚧: Hide the action from the UI",
"setting.frontMatter.custom.scripts.items.properties.environments.items.properties.type.description": "🚧: The environment type for which the script needs to be used",
"setting.frontMatter.custom.scripts.items.properties.environments.items.properties.script.description": "🚧: Path to the script to execute",
"setting.frontMatter.custom.scripts.items.properties.id.description": "スクリプトの ID。",
"setting.frontMatter.custom.scripts.items.properties.title.description": "スクリプトに付けるタイトル。ボタンのタイトルとして表示されます。",
"setting.frontMatter.custom.scripts.items.properties.script.description": "実行するスクリプトへのパス",
"setting.frontMatter.custom.scripts.items.properties.nodeBin.description": "実行可能なNode.jsへのパス。これは、NVMを使用する際に、Node.jsのバージョンが混同されないようにするために必要です。(非推奨: 代わりにコマンドプロパティを使用してください)",
"setting.frontMatter.custom.scripts.items.properties.bulk.description": "全ての記事ファイルに対してスクリプトを実行する",
"setting.frontMatter.custom.scripts.items.properties.output.description": "スクリプト出力を出力する場所を定義します。デフォルトは通知表示ですが、エディターパネルに表示するように指定できます。",
"setting.frontMatter.custom.scripts.items.properties.outputType.description": "エディター・パネルの出力のタイプ。たとえば、「マークダウン」に変更するために使用できます",
"setting.frontMatter.custom.scripts.items.properties.type.description": "スクリプトが使用される型",
"setting.frontMatter.custom.scripts.items.properties.command.description": "実行するスクリプトの種類",
"setting.frontMatter.custom.scripts.items.properties.hidden.description": "UI からアクションを非表示にする",
"setting.frontMatter.custom.scripts.items.properties.environments.items.properties.type.description": "スクリプトを使用する必要がある環境タイプ",
"setting.frontMatter.custom.scripts.items.properties.environments.items.properties.script.description": "実行するスクリプトへのパス",
"setting.frontMatter.custom.scripts.items.properties.contentTypes.description": "スクリプトを使用する記事タイプを定義します。何も定義されていない場合は、全ての型で使用できます。",
"setting.frontMatter.dashboard.content.pagination.markdownDescription": "ページネーションの有効/無効を設定します。ページ数は最大52まで設定できます。規定値は`16`です。ページ分割を無効にするには`false`を設定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.dashboard.content.pagination)",
"setting.frontMatter.dashboard.content.cardTags.markdownDescription": "記事一覧をカード型で表示する際、どのメタデータフィールドをタグとして使うかを指定します。空欄またはnull値の場合、タグは表示されなくなります。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.dashboard.content.cardtags)",
"setting.frontMatter.dashboard.content.card.fields.state.markdownDescription": "記事一覧をカード型で表示する際、下書き・公開済みのステータスを表示します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontMatter.dashboard.content.card.fields.state)",
"setting.frontMatter.dashboard.content.card.fields.date.markdownDescription": "記事一覧をカード型で表示する際、日付を表示します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontMatter.dashboard.content.card.fields.date)",
"setting.frontMatter.dashboard.content.card.fields.description.markdownDescription": "記事一覧をカード型で表示する際、どのメタデータフィールドをディスクリプションとして使うかを指定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontMatter.dashboard.content.card.fields.description)",
"setting.frontMatter.dashboard.content.card.fields.title.markdownDescription": "記事一覧をカード型で表示する際、どのメタデータフィールドをタイトルとして使うかを指定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontMatter.dashboard.content.card.fields.title)",
"setting.frontMatter.dashboard.mediaSnippet.markdownDescription": "🚧: Specify the a snippet for your custom media insert markup. [ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.dashboard.mediasnippet)",
"setting.frontMatter.dashboard.mediaSnippet.markdownDescription": "カスタムメディア挿入マークアップのスニペットを指定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.dashboard.mediasnippet)",
"setting.frontMatter.dashboard.mediaSnippet.items.description": "スニペット内で `{mediaUrl}`, `{caption}`, `{alt}`, `{filename}`, `{mediaHeight}`, `{mediaWidth}` のプレースホルダーを使用して、メディア情報を自動的に挿入します。",
"setting.frontMatter.dashboard.openOnStart.markdownDescription": "VS Codeの起動時にダッシュボードを表示します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.dashboard.openonstart)",
"setting.frontMatter.data.files.markdownDescription": "ウェブサイトに使用するデータのファイルを指定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.data.files)",
"setting.frontMatter.data.files.items.properties.id.description": "🚧: Your unique ID you want to use for your data file.",
"setting.frontMatter.data.files.items.properties.title.description": "🚧: Title you want to give to your data file.",
"setting.frontMatter.data.files.items.properties.labelField.description": "🚧: The field you want to use as label for your data entries.",
"setting.frontMatter.data.files.items.properties.file.description": "🚧: Path to the file to load. Only JSON or YAML files are supported.",
"setting.frontMatter.data.files.items.properties.fileType.description": "🚧: Defines how you want to parse the file. JSON is the default.",
"setting.frontMatter.data.files.items.properties.schema.description": "🚧: The JSON schema for your data which will be used to render the data form.",
"setting.frontMatter.data.files.items.properties.schema.properties.title.description": "🚧: Title of the form.",
"setting.frontMatter.data.files.items.properties.schema.properties.type.description": "🚧: Defines the type of the form. Default is 'object'.",
"setting.frontMatter.data.files.items.properties.schema.properties.required.description": "🚧: Defines the required fields for the form.",
"setting.frontMatter.data.files.items.properties.schema.properties.properties.description": "🚧: Defines the fields of the form.",
"setting.frontMatter.data.files.items.properties.type.description": "🚧: If you are using data types, you can specify your type ID.",
"setting.frontMatter.data.files.items.properties.singleEntry.description": "🚧: If you want to use a single entry for your data file.",
"setting.frontMatter.data.files.items.properties.id.description": "データ ファイルに使用する一意の ID。",
"setting.frontMatter.data.files.items.properties.title.description": "データ ファイルに付けるタイトル。",
"setting.frontMatter.data.files.items.properties.labelField.description": "データエントリのラベルとして使用するフィールド。",
"setting.frontMatter.data.files.items.properties.file.description": "読み込むファイルへのパス。JSON または YAML ファイルのみがサポートされています。",
"setting.frontMatter.data.files.items.properties.fileType.description": "ファイルの解析方法を定義します。JSON がデフォルトです。",
"setting.frontMatter.data.files.items.properties.schema.description": "データ フォームのレンダリングに使用されるデータの JSON スキーマ。",
"setting.frontMatter.data.files.items.properties.schema.properties.title.description": "フォームのタイトル。",
"setting.frontMatter.data.files.items.properties.schema.properties.type.description": "フォームの種類を定義します。デフォルトは 'オブジェクト' です。",
"setting.frontMatter.data.files.items.properties.schema.properties.required.description": "フォームの必須フィールドを定義します。",
"setting.frontMatter.data.files.items.properties.schema.properties.properties.description": "フォームのフィールドを定義します。",
"setting.frontMatter.data.files.items.properties.type.description": "データ型を使用している場合は、型 ID を指定できます。",
"setting.frontMatter.data.files.items.properties.singleEntry.description": "データ ファイルに 1 つのエントリを使用する場合。",
"setting.frontMatter.data.folders.markdownDescription": "ウェブサイトに使用するデータのフォルダーを指定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.data.folders)",
"setting.frontMatter.data.folders.items.properties.id.description": "🚧: Your unique ID you want to use for your data folder.",
"setting.frontMatter.data.folders.items.properties.labelField.description": "🚧: The field you want to use as label for your data entries.",
"setting.frontMatter.data.folders.items.properties.path.description": "🚧: Path to the folder to load files.",
"setting.frontMatter.data.folders.items.properties.type.description": "🚧: If you are using data types, you can specify your type ID.",
"setting.frontMatter.data.folders.items.properties.singleEntry.description": "🚧: If you want to use a single entry for your data files in the folder.",
"setting.frontMatter.data.folders.items.properties.id.description": "データ フォルダーに使用する一意の ID。",
"setting.frontMatter.data.folders.items.properties.labelField.description": "データエントリのラベルとして使用するフィールド。",
"setting.frontMatter.data.folders.items.properties.path.description": "ファイルを読み込むフォルダーへのパス。",
"setting.frontMatter.data.folders.items.properties.type.description": "データ型を使用している場合は、型 ID を指定できます。",
"setting.frontMatter.data.folders.items.properties.singleEntry.description": "フォルダー内のデータ ファイルに 1 つのエントリを使用する場合。",
"setting.frontMatter.data.types.markdownDescription": "データタイプを指定します。これらのタイプは、データファイルで使用できます。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.data.types)",
"setting.frontMatter.data.types.items.properties.id.description": "🚧: Your unique ID you want to use for your data type.",
"setting.frontMatter.data.types.items.properties.id.description": "データ型に使用する一意の ID。",
"setting.frontMatter.file.preserveCasing.markdownDescription": "タイトルからファイル名の大文字と小文字を区別します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.file.preservecasing)",
"setting.frontMatter.framework.id.markdownDescription": "ウェブサイトに使用している静的サイトジェネレーターまたはフレームワークのIDを設定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.framework.id)",
"setting.frontMatter.framework.startCommand.markdownDescription": "静的サイト・ジェネレーターまたはフレームワークを起動させるコマンドを指定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.framework.startcommand)",
@@ -145,82 +157,99 @@
"setting.frontMatter.git.submodule.folder.markdownDescription": "コンテンツのサブモジュールフォルダーを指定します。複数のサブモジュールを使用する場合に便利です。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.git.submodule.folder)",
"setting.frontMatter.global.activeMode.markdownDescription": "Front Matterで有効なモードを設定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.global.activemode)",
"setting.frontMatter.global.modes.markdownDescription": "Front Matterで利用するモードを設定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.global.modes)",
"setting.frontMatter.global.modes.items.properties.id.description": "🚧: The ID of your mode.",
"setting.frontMatter.global.modes.items.properties.features.description": "🚧: The features you want to use for your mode.",
"setting.frontMatter.global.modes.items.properties.id.description": "モードの ID。",
"setting.frontMatter.global.modes.items.properties.features.description": "モードに使用する機能。",
"setting.frontMatter.global.notifications.markdownDescription": "表示したい通知を設定します。既定では全ての通知が表示されます。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.global.notifications)",
"setting.frontMatter.global.disabledNotificaitons.markdownDescription": "表示しない通知を設定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.global.disablednotifications)",
"setting.frontMatter.global.disabledNotifications.markdownDescription": "これは、Front Matter CMSで無効にできる通知タイプの配列です。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.global.disablednotifications)",
"setting.frontMatter.media.defaultSorting.markdownDescription": "ダッシュボードのメディア一覧での既定の並び順を設定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.media.defaultsorting)",
"setting.frontMatter.media.supportedMimeTypes.markdownDescription": "メディアファイルでサポートされるMIMEタイプを設定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.media.supportedmimetypes)",
"setting.frontMatter.panel.freeform.markdownDescription": "未登録のタグ/カテゴリーをタグピッカーに入力することを許可するかどうかを設定します有効にすると、後で保存するオプションが使えます。規定値はtrue。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.panel.freeform)",
"setting.frontMatter.media.supportedMimeTypes.markdownDescription": "メディアコンテンツでサポートされるMIMEタイプを設定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.media.supportedmimetypes)",
"setting.frontMatter.media.contentTypes.markdownDescription": "Front Matterで利用するメディアコンテンツのタイプを設定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.media.contenttypes)",
"setting.frontMatter.media.contentTypes.items.description": "Front Matterで利用するメディアフコンテンツのタイプについての説明。",
"setting.frontMatter.media.contentTypes.items.properties.name.description": "メディアコンテンツのタイプ名",
"setting.frontMatter.media.contentTypes.items.properties.fileTypes.description": "利用可能とするメディアコンテンツのタイプの指定",
"setting.frontMatter.media.contentTypes.items.properties.fields.description": "メディアコンテンツのフィールドを設定します。",
"setting.frontMatter.media.contentTypes.items.properties.fields.properties.title.description": "UI表示用のタイトル",
"setting.frontMatter.media.contentTypes.items.properties.fields.properties.name.description": "フィールドの名前",
"setting.frontMatter.media.contentTypes.items.properties.fields.properties.type.description": "フィールド値の型",
"setting.frontMatter.media.contentTypes.items.properties.fields.properties.single.description": "単一行フィールド",
"setting.frontMatter.panel.freeform.markdownDescription": "未登録のタグ/カテゴリーをタグピッカーに入力可能にするかどうかを設定します有効にすると、後で保存するオプションが使えます。規定値はtrue。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.panel.freeform)",
"setting.frontMatter.panel.actions.disabled.markdownDescription": "パネル内で非表示にしたいコマンドを設定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.panel.actions.disabled)",
"setting.frontMatter.preview.host.markdownDescription": "プレビュー表示に使用するホストのURLを設定します`http://localhost:1313`)。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.preview.host)",
"setting.frontMatter.preview.trailingSlash.markdownDescription": "プレビュー用URLに末尾のスラッシュを加えるかどうかを設定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.preview.trailingslash)",
"setting.frontMatter.preview.pathName.markdownDescription": "ホストパスとスラッグの間に追加したいパスを設定します。例えば、パスに`yyyy/MM`などの日付を含めたい場合等に使えます。日付は記事の日付フィールドの値に基づいて生成されます。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.preview.pathname)",
"setting.frontMatter.site.baseURL.markdownDescription": "ベースURLを設定します。これはSEOチェックに利用されます。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.site.baseurl)",
"setting.frontMatter.taxonomy.alignFilename.markdownDescription": "ファイル生成時にファイル名をスラッグに合わせ[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.alignfilename)",
"setting.frontMatter.taxonomy.alignFilename.markdownDescription": "ファイル生成時にファイル名をスラッグに合わせます。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.alignfilename)",
"setting.frontMatter.taxonomy.categories.markdownDescription": "Front Matterで利用するカテゴリーを管理します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.categories)",
"setting.frontMatter.taxonomy.commaSeparatedFields.markdownDescription": "カンマ区切りで配列を管理するフィールド名を設定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.commaseparatedfields)",
"setting.frontMatter.taxonomy.commaSeparatedFields.items.description": "コンマ区切りの配列として使用するフィールドの名前。",
"setting.frontMatter.taxonomy.contentTypes.markdownDescription": "記事・ページ・その他で利用したい記事タイプを設定します。front matterで正しく`type`が設定されていることを確認してください。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.contenttypes)",
"setting.frontMatter.taxonomy.contentTypes.items.description": "Front Matterで使用するコンテンツタイプを定義します。",
"setting.frontMatter.taxonomy.contentTypes.items.properties.name.description": "🚧: Define the type of field",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fileType.description": "🚧: Specifies the type of content you want to create.",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.description": "🚧: Define the fields of the content type",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.description": "Front Matterで使用するコンテンツタイプを定義します。",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.type.description": "🚧: Define the type of field",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.name.description": "🚧: Name of the field to use",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.title.description": "🚧: Title to show in the UI",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.description.description": "🚧: Description to show in the UI",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.default.description": "🚧: Default value",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.choices.description": "🚧: Define your choices",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.choices.items.properties.id.description": "🚧: The choice ID",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.choices.items.properties.title.description": "🚧: The choice title",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.single.description": "🚧: Is a single line field",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.wysiwyg.description": "🚧: Is a WYSIWYG field (HTML output)",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.multiple.description": "🚧: Do you allow to select multiple values?",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.isPreviewImage.description": "🚧: Specify if the image field can be used as preview. Be aware, you can only have one preview image per content type.",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.hidden.description": "🚧: Do you want to hide the field from the metadata section?",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.taxonomyId.description": "🚧: The ID of your taxonomy field. It cannot contain the \"tags\" or \"categories\" value.",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.fileExtensions.description": "🚧: Specify the file extensions to allow for the file picker",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.fieldGroup.description": "🚧: The ID(s) of your field group(s) defined in the `frontMatter.taxonomy.fieldGroups` setting",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.dataType.description": "🚧: The ID(s) of your data type(s) defined in the `frontMatter.data.types` setting",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.numberOptions.description": "🚧: Specify the options for the number field",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.numberOptions.properties.isDecimal.description": "🚧: Specify if the number is a decimal",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.numberOptions.properties.min.description": "🚧: The minimum value",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.numberOptions.properties.max.description": "🚧: The maximum value",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.numberOptions.properties.step.description": "🚧: The step value",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.taxonomyLimit.description": "🚧: Limit the number of taxonomies to select. Set to 0 to allow unlimited.",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.isPublishDate.description": "🚧: Specify if the field is the publish date field",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.isModifiedDate.description": "🚧: Specify if the field is the modified date field",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.dataFileId.description": "🚧: Specify the ID of the data file to use for this field",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.dataFileKey.description": "🚧: Specify the key of the data file to use for this field",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.dataFileValue.description": "🚧: Specify the property name that will be used to show the value for the field",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.editable.description": "🚧: Specify if the field is editable",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.encodeEmoji.description": "🚧: Specify if the field should encode emoji",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.dateFormat.description": "🚧: Specify the date format to use",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.required.description": "🚧: Specify if the field is required",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.contentTypeName.description": "🚧: Specify the content type name to filter content for the contentRelationship field",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.contentTypeValue.description": "🚧: Specify the value to insert for the contentRelationship field",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.when.description": "🚧: Specify the conditions to show the field",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.when.properties.fieldRef.description": "🚧: The field ID to use",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.when.properties.operator.description": "🚧: The operator to use",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.when.properties.value.description": "🚧: The value to compare",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.when.properties.caseSensitive.description": "🚧: Specify if the comparison is case sensitive. Default: true",
"setting.frontMatter.taxonomy.contentTypes.items.properties.pageBundle.description": "🚧: Specify if you want to create a folder when creating new content.",
"setting.frontMatter.taxonomy.contentTypes.items.properties.previewPath.description": "🚧: Defines a custom preview path for the content type.",
"setting.frontMatter.taxonomy.contentTypes.items.properties.template.description": "🚧: An optional template that can be used for creating new content.",
"setting.frontMatter.taxonomy.contentTypes.items.properties.postScript.description": "🚧: An optional post script that can be used after new content creation.",
"setting.frontMatter.taxonomy.contentTypes.items.properties.filePrefix.description": "🚧: Defines a prefix for the file name.",
"setting.frontMatter.taxonomy.contentTypes.items.properties.defaultFileName.description": "🚧: Default file name to use when creating new content.",
"setting.frontMatter.taxonomy.contentTypes.items.description": "Front Matterで使用する記事タイプを定義します。",
"setting.frontMatter.taxonomy.contentTypes.items.properties.name.description": "フィールドの種類を定義します。",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fileType.description": "作成する記事タイプを指定します。",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.description": "記事タイプのフィールドを定義します。",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.description": "Front Matterで使用する記事タイプを定義します。",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.type.description": "フィールド値の型",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.name.description": "使用するフィールドの名前",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.title.description": "UI に表示するタイトル",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.description.description": "UI に表示する説明",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.default.description": "既定値",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.choices.description": "選択肢を定義する",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.choices.items.properties.id.description": "選択肢 ID",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.choices.items.properties.title.description": "選択肢のタイトル",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.single.description": "単一行フィールド",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.wysiwyg.description": "WYSIWYG フィールド (HTML 出力) ",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.multiple.description": "複数の値を選択できますか?",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.isPreviewImage.description": "画像フィールドをプレビューとして使用できるかどうかを指定します。記事タイプごとに使用できるプレビュー画像は1つだけです。",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.hidden.description": "メタデータ セクションからフィールドを非表示にしますか?",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.taxonomyId.description": "分類フィールドのID。「タグ」または「カテゴリ」の値を含めることはできません。",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.fileExtensions.description": "ファイルピッカーで許可するファイル拡張子を指定する",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.fieldGroup.description": "'frontMatter.taxonomy.fieldGroups' 設定で定義されているフィールドグループの ID",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.dataType.description": "'frontMatter.data.types' 設定で定義されているデータ型の ID",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.numberOptions.description": "数値フィールドのオプションを指定する",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.numberOptions.properties.isDecimal.description": "数値が 10 進数かどうかを指定します",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.numberOptions.properties.min.description": "最小値",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.numberOptions.properties.max.description": "最大値",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.numberOptions.properties.step.description": "ステップ値",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.taxonomyLimit.description": "選択する分類の数を制限します。無制限を許可するには 0 に設定します。",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.singleValueAsString.description": "配列内の要素が1つだけの時、配列ではなく文字列として扱います。",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.isPublishDate.description": "フィールドが公開日フィールドであるかどうかを指定します",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.isModifiedDate.description": "フィールドが変更日フィールドであるかどうかを指定します",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.dataFileId.description": "このフィールドに使用するデータファイルのIDを指定します",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.dataFileKey.description": "このフィールドに使用するデータファイルのキーを指定します",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.dataFileValue.description": "フィールドの値を表示するために使用するプロパティ名を指定します",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.editable.description": "フィールドが編集可能かどうかを指定します",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.encodeEmoji.description": "フィールドが絵文字をエンコードするかどうかを指定します",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.dateFormat.description": "使用する日付形式を指定する",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.required.description": "フィールドが必須かどうかを指定します",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.contentTypeName.description": "記事タイプを指定して、contentRelationship フィールドのコンテンツをフィルター処理します",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.contentTypeValue.description": "コンテンツリレーションシップフィールドに挿入する値を指定します",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.when.description": "フィールドを表示する条件を指定する",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.when.properties.fieldRef.description": "使用するフィールド ID",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.when.properties.operator.description": "使用する演算子",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.when.properties.value.description": "比較する値",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.when.properties.caseSensitive.description": "比較で大文字と小文字を区別するかどうかを指定します。デフォルト: true",
"setting.frontMatter.taxonomy.contentTypes.items.properties.pageBundle.description": "新しい記事を作成するときにフォルダーを作成するかどうかを指定します。",
"setting.frontMatter.taxonomy.contentTypes.items.properties.previewPath.description": "記事タイプのカスタム プレビュー パスを定義します。",
"setting.frontMatter.taxonomy.contentTypes.items.properties.trailingSlash.description": "プレビュー用URLに末尾のスラッシュを加えるかどうかを設定します。",
"setting.frontMatter.taxonomy.contentTypes.items.properties.slugTemplate.description": "記事タイプのカスタムスラッグのテンプレートを設定します。",
"setting.frontMatter.taxonomy.contentTypes.items.properties.template.description": "新しい記事の作成に使用できるオプションのテンプレート。",
"setting.frontMatter.taxonomy.contentTypes.items.properties.postScript.description": "新しい記事の作成後に使用できるオプションのポストスクリプト。",
"setting.frontMatter.taxonomy.contentTypes.items.properties.filePrefix.description": "ファイル名の接頭辞を定義します。",
"setting.frontMatter.taxonomy.contentTypes.items.properties.defaultFileName.description": "新しい記事の作成時に使用する既定のファイル名。",
"setting.frontMatter.taxonomy.customTaxonomy.markdownDescription": "カスタムタクソノミーのフィールドデータを設定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.tags)",
"setting.frontMatter.taxonomy.customTaxonomy.items.properties.id.description": "🚧: ID for your taxonomy field. It cannot contain the \"tags\" or \"categories\" value.",
"setting.frontMatter.taxonomy.customTaxonomy.items.properties.options.description": "🚧: Options from which you can pick.",
"setting.frontMatter.taxonomy.dateField.markdownDescription": "🚧: This setting is used to define the publishing date field of your articles. [ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.datefield)",
"setting.frontMatter.taxonomy.customTaxonomy.items.properties.id.description": "分類フィールドの ID。「タグ」または「カテゴリ」の値を含めることはできません。",
"setting.frontMatter.taxonomy.customTaxonomy.items.properties.options.description": "選択できるオプション。",
"setting.frontMatter.taxonomy.dateField.markdownDescription": "この設定は、記事の公開日フィールドを定義するために使用されます。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.datefield)",
"setting.frontMatter.taxonomy.dateFormat.markdownDescription": "記事の日付フォーマットを指定します。詳しくは[date-fns formatting](https://date-fns.org/v2.0.1/docs/format)を確認してください。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.dateformat)",
"setting.frontMatter.taxonomy.fieldGroups.markdownDescription": "ブロックフィールドで使用したいフィールドグループを設定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.fieldgroups)",
"setting.frontMatter.taxonomy.fieldGroups.items.properties.id.description": "🚧: The name of the field group",
"setting.frontMatter.taxonomy.fieldGroups.items.properties.labelField.description": "🚧: The name of the field to be used as display value",
"setting.frontMatter.taxonomy.fieldGroups.items.properties.id.description": "フィールドグループの名前",
"setting.frontMatter.taxonomy.fieldGroups.items.properties.labelField.description": "表示値として使用するフィールドの名前",
"setting.frontMatter.taxonomy.frontMatterType.markdownDescription": "front matterの形式を設定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.frontmattertype)",
"setting.frontMatter.taxonomy.indentArrays.markdownDescription": "front matterメタデータが配列の場合はインデント字下げさせます。規定値はtrueです。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.indentarrays)",
"setting.frontMatter.taxonomy.modifiedField.markdownDescription": "🚧: This setting is used to define the modified date field of your articles. [ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.modifiedfield)",
"setting.frontMatter.taxonomy.modifiedField.markdownDescription": "この設定は、記事の変更日フィールドを定義するために使用されます。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.modifiedfield)",
"setting.frontMatter.taxonomy.quoteStringValues.markdownDescription": "front matterの文字列の値をクォーテーションで囲みます。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.quotestringvalues)",
"setting.frontMatter.taxonomy.noPropertyValueQuotes.markdownDescription": "引用符を付与しないメタデータを指定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.nopropertyvaluequotes)",
"setting.frontMatter.taxonomy.noPropertyValueQuotes.items.description": "引用符を削除したいプロパティの名前。",
"setting.frontMatter.taxonomy.seoContentLengh.markdownDescription": "最適な記事の長さを指定します。2021年のSEOでは、1,760語から2,400語の間が最も理想的とされています。-1に設定するとオフになります。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.seocontentlengh)",
@@ -231,14 +260,23 @@
"setting.frontMatter.taxonomy.seoTitleLength.markdownDescription": "SEOに適したタイトルの文字数を設定します。`-1`に設定するとオフになります。)[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.seotitlelength)",
"setting.frontMatter.taxonomy.slugPrefix.markdownDescription": "スラッグに付与する接頭辞を設定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.slugprefix)",
"setting.frontMatter.taxonomy.slugSuffix.markdownDescription": "スラッグに付与する接尾辞を設定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.slugsuffix)",
"setting.frontMatter.taxonomy.slugTemplate.markdownDescription": "記事を作成する際のカスタムスラッグのテンプレートを設定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.slugtemplate)",
"setting.frontMatter.taxonomy.tags.markdownDescription": "Front Matterで利用するタグを管理します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.tags)",
"setting.frontMatter.telemetry.disable.markdownDescription": "利用状況の送信をオフにします。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.telemetry.disable)",
"setting.frontMatter.templates.enabled.markdownDescription": "テンプレート機能を利用します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.templates.enabled)",
"setting.frontMatter.templates.folder.markdownDescription": "テンプレートを保存するフォルダーを設定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.templates.folder)",
"setting.frontMatter.templates.prefix.markdownDescription": "新しい記事の作成時、ファイル名に付与する接頭辞を設定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.templates.prefix)",
"setting.frontMatter.dashboard.mediaSnippet.deprecationMessage": "🚧: This setting is deprecated and will be removed in the next major version. Please define your media snippet in the `frontMatter.content.snippet` setting.",
"setting.frontMatter.taxonomy.dateField.deprecationMessage": "🚧: This setting is deprecated and will be removed in the next major version. Please use the new `isPublishDate` settings instead in your content types date fields.",
"setting.frontMatter.taxonomy.modifiedField.deprecationMessage": "🚧: This setting is deprecated and will be removed in the next major version. Please use the new `isModifiedDate` settings instead in your content types date fields.",
"setting.frontMatter.global.disabledNotifications.markdownDescription": "🚧: This is an array with the notifications types that can be disabled for Front Matter CMS. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.global.disablednotifications)",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.customType.description": "🚧: Specify the name of the custom field type to use."
"setting.frontMatter.dashboard.mediaSnippet.deprecationMessage": "この設定は非推奨であり、次のメジャーバージョンで削除される予定です。メディア スニペットは 'frontMatter.content.snippet' 設定で定義してください。",
"setting.frontMatter.taxonomy.dateField.deprecationMessage": "この設定は非推奨であり、次のメジャーバージョンで削除される予定です。代わりに、記事タイプの日付フィールドで新しい 'isPublishDate' 設定を使用してください。",
"setting.frontMatter.taxonomy.modifiedField.deprecationMessage": "この設定は非推奨であり、次のメジャーバージョンで削除される予定です。代わりに、記事タイプの日付フィールドで新しい 'isModifiedDate' 設定を使用してください。",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.customType.description": "使用するユーザー設定フィールド型の名前を指定します。",
"setting.frontMatter.taxonomy.contentTypes.items.properties.clearEmpty.description": "空の値をクリアするかどうかを指定します。",
"setting.frontMatter.website.host.markdownDescription": "ウェブサイトのホストURLを指定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.website.url)",
"command.frontMatter.settings.refresh": "Front Matterの設定の再読み込み",
"setting.frontMatter.config.dynamicFilePath.markdownDescription": "動的構成ファイルへのパスを指定します (例: [[ワークスペース]]/config.js)。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.config.dynamicfilepath)",
"setting.frontMatter.taxonomy.contentTypes.items.properties.allowAsSubContent.description": "記事をサブコンテンツとして作成可能かどうかを設定します。",
"setting.frontMatter.taxonomy.contentTypes.items.properties.isSubContent.description": "記事をサブコンテンツとして作成するかどうかを設定します。",
"setting.frontMatter.git.disableOnBranches.markdownDescription": "Git Actionsを無効化したいブランチを設定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.git.disableonbranches)",
"setting.frontMatter.git.requiresCommitMessage.markdownDescription": "特定のブランチを更新する場合にコミットメッセージを必須にします。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.git.requirescommitmessage)"
}

View File

@@ -15,7 +15,7 @@
"command.frontMatter.initTemplate": "Initialize the template folder",
"command.frontMatter.createTemplate": "Create template from current file",
"command.frontMatter.createCategory": "Create category",
"command.frontMatter.createContent": "Create new content from defined content type or template",
"command.frontMatter.createContent": "Create new content",
"command.frontMatter.createTag": "Create tag",
"command.frontMatter.diagnostics": "Diagnostic logging",
"command.frontMatter.exportTaxonomy": "Export all tags & categories to your settings",
@@ -38,6 +38,7 @@
"command.frontMatter.markup.orderedlist": "Ordered list",
"command.frontMatter.markup.options": "Other markup options",
"command.frontMatter.preview": "Preview content",
"command.frontMatter.docs": "Documentation",
"command.frontMatter.chatbot": "Ask the Front Matter AI for help",
"command.frontMatter.promoteSettings": "Promote settings from local to team level",
"command.frontMatter.remap": "Remap or remove tag/category in all articles",
@@ -48,50 +49,61 @@
"command.frontMatter.markup.unorderedlist": "Unordered list",
"command.frontMatter.git.sync": "Sync",
"command.frontMatter.cache.clear": "Clear cache",
"command.frontMatter.i18n.create": "Create new translation",
"settings.configuration.title": "Front Matter: use frontmatter.json for shared team settings",
"setting.frontMatter.projects.markdownDescription": "Specify the list of projects to load in the Front Matter CMS. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.projects)",
"setting.frontMatter.projects.markdownDescription": "Specify the list of projects to load in the Front Matter CMS. [Local](https://file%2B.vscode-resource.vscode-cdn.net/Users/eliostruyf/nodejs/frontmatter-test-projects/astro-blog/test.html) - [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.projects) - [View in VS Code](vscode://simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.projects%22%5D)",
"setting.frontMatter.projects.items.properties.name.markdownDescription": "Specify the name of the project.",
"setting.frontMatter.projects.items.properties.default.markdownDescription": "Specify if this project is the default project to load.",
"setting.frontMatter.sponsors.ai.enabled.markdownDescription": "Specify if you want to enable AI suggestions. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.sponsors.ai.enabled)",
"setting.frontMatter.extensibility.scripts.markdownDescription": "Specify the list of scripts to load in the Front Matter CMS. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.extensibility.scripts)",
"setting.frontMatter.experimental.markdownDescription": "Specify if you want to enable the experimental features. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.experimental)",
"setting.frontMatter.extends.markdownDescription": "Specify the list of paths/URLs to extend the Front Matter CMS config. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.extends)",
"setting.frontMatter.content.autoUpdateDate.markdownDescription": "Specify if you want to automatically update the modified date of your article/page (only content located in your content folder). [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.content.autoupdatedate)",
"setting.frontMatter.content.defaultFileType.markdownDescription": "Specify the default file type for the content to create. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.content.defaultfiletype)",
"setting.frontMatter.content.defaultSorting.markdownDescription": "Specify the default sorting option for the content dashboard. You can use one of the values from the enum or define your own ID. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.content.defaultsorting)",
"setting.frontMatter.content.draftField.markdownDescription": "Define the draft field you want to use to manage your content. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.content.draftfield)",
"setting.frontMatter.sponsors.ai.enabled.markdownDescription": "Specify if you want to enable AI suggestions. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.sponsors.ai.enabled) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.sponsors.ai.enabled%22%5D)",
"setting.frontMatter.extensibility.scripts.markdownDescription": "Specify the list of scripts to load in the Front Matter CMS. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.extensibility.scripts) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.extensibility.scripts%22%5D)",
"setting.frontMatter.experimental.markdownDescription": "Specify if you want to enable the experimental features. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.experimental) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.experimental%22%5D)",
"setting.frontMatter.extends.markdownDescription": "Specify the list of paths/URLs to extend the Front Matter CMS config. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.extends) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.extends%22%5D)",
"setting.frontMatter.content.autoUpdateDate.markdownDescription": "Specify if you want to automatically update the modified date of your article/page (only content located in your content folder). [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.content.autoupdatedate) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.content.autoupdatedate%22%5D)",
"setting.frontMatter.content.defaultFileType.markdownDescription": "Specify the default file type for the content to create. [Docs](https://frontmatter.codes/docs/settings/overview%23frontmatter.content.defaultfiletype) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.content.defaultfiletype%22%5D)",
"setting.frontMatter.content.defaultSorting.markdownDescription": "Specify the default sorting option for the content dashboard. You can use one of the values from the enum or define your own ID. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.content.defaultsorting) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.content.defaultsorting%22%5D)",
"setting.frontMatter.content.draftField.markdownDescription": "Define the draft field you want to use to manage your content. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.content.draftfield) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.content.draftfield%22%5D)",
"setting.frontMatter.content.draftField.properties.type.description": "Type of the draft field you want to use",
"setting.frontMatter.content.draftField.properties.name.description": "Name of the field to use",
"setting.frontMatter.content.draftField.properties.invert.description": "By default the draft field is set to true when the content is a draft. Set this to true to set it to false.",
"setting.frontMatter.content.draftField.properties.choices.description": "List of choices for the field",
"setting.frontMatter.content.fmHighlight.markdownDescription": "Specify if you want to highlight the Front Matter in the Markdown file. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.content.fmhighlight)",
"setting.frontMatter.content.hideFm.markdownDescription": "Specify if you want to hide the Front Matter in the Markdown file. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.content.hidefm)",
"setting.frontMatter.content.hideFmMessage.markdownDescription": "Specify the message to display when the Front Matter is hidden. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.content.hidefmMessage)",
"setting.frontMatter.content.pageFolders.markdownDescription": "This array of folders defines where the extension can retrieve or create new pages. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.content.pagefolders)",
"setting.frontMatter.content.fmHighlight.markdownDescription": "Specify if you want to highlight the Front Matter in the Markdown file. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.content.fmhighlight) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.content.fmhighlight%22%5D)",
"setting.frontMatter.content.hideFm.markdownDescription": "Specify if you want to hide the Front Matter in the Markdown file. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.content.hidefm) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.content.hidefm%22%5D)",
"setting.frontMatter.content.hideFmMessage.markdownDescription": "Specify the message to display when the Front Matter is hidden. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.content.hidefmMessage) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.content.hidefmMessage%22%5D)",
"setting.frontMatter.content.pageFolders.markdownDescription": "This array of folders defines where the extension can retrieve or create new pages. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.content.pagefolders) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.content.pagefolders%22%5D)",
"setting.frontMatter.content.pageFolders.items.properties.title.description": "Name of the folder",
"setting.frontMatter.content.pageFolders.items.properties.path.description": "Path of the folder",
"setting.frontMatter.content.pageFolders.items.properties.excludeSubdir.description": "Exclude sub-directories",
"setting.frontMatter.content.pageFolders.items.properties.previewPath.description": "Defines a custom preview path for the folder.",
"setting.frontMatter.content.pageFolders.items.properties.trailingSlash.description": "Specify if you want to add a trailing slash to the preview URL.",
"setting.frontMatter.content.pageFolders.items.properties.filePrefix.description": "Defines a prefix for the file name.",
"setting.frontMatter.content.pageFolders.items.properties.contentTypes.description": "Defines which content types can be used for the current location. If not defined, all content types will be available.",
"setting.frontMatter.content.placeholders.markdownDescription": "This array of placeholders defines the placeholders that you can use in your content types and templates for automatically populating your content its front matter. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.content.placeholders)",
"setting.frontMatter.content.pageFolders.items.properties.disableCreation.description": "Disable the creation of new content in the folder.",
"setting.frontMatter.content.pageFolders.items.properties.defaultLocale.description": "Set the default locale ID for the page folder. All content from this folder is translatable to the languages defined in the `frontMatter.content.i18n` setting.",
"setting.frontMatter.content.pageFolders.items.properties.locales.description": "Define the locales for the page folder. This will be used for the translation of the content.",
"setting.frontMatter.content.pageFolders.items.properties.slugTemplate.description": "Defines a custom slug template.",
"setting.frontMatter.content.i18n.markdownDescription": "Specify the locales you want to use for your website. This setting can be overwritten on page folder level. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.content.i18n) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.content.i18n%22%5D)",
"setting.frontMatter.content.i18n.items.properties.title.description": "Title of the locale",
"setting.frontMatter.content.i18n.items.properties.locale.description": "Locale code",
"setting.frontMatter.content.i18n.items.properties.path.description": "Relative path of the locale folder",
"setting.frontMatter.content.placeholders.markdownDescription": "This array of placeholders defines the placeholders that you can use in your content types and templates for automatically populating your content its front matter. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.content.placeholders) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.content.placeholders%22%5D)",
"setting.frontMatter.content.placeholders.items.properties.id.description": "ID of the placeholder, in your content type or template, use it as follows: {{placeholder}}",
"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.markdownDescription": "Specify the folder name where all your assets are located. For instance in Hugo this is the `static` folder. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.content.publicfolder) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.content.publicfolder%22%5D)",
"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)",
"setting.frontMatter.snippets.wrapper.enabled.markdownDescription": "Specify if you want to wrap the snippets. [Docs](https://frontmatter.codes/docs/settings/overview#frontMatter.snippets.wrapper.enabled) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontMatter.snippets.wrapper.enabled%22%5D)",
"setting.frontMatter.content.snippets.markdownDescription": "Define the snippets you want to use in your content. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.content.snippets) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.content.snippets%22%5D)",
"setting.frontMatter.content.sorting.markdownDescription": "Define the sorting options for your dashboard content. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.content.sorting) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.content.sorting%22%5D)",
"setting.frontMatter.content.sorting.items.properties.id.description": "The ID of the sorting option. This will be used for the storing the last used sorting option or the default option.",
"setting.frontMatter.content.sorting.items.properties.title.description": "Name of the sorting label",
"setting.frontMatter.content.sorting.items.properties.name.description": "Name of the metadata field to sort by",
"setting.frontMatter.content.sorting.items.properties.order.description": "Order of the sorting",
"setting.frontMatter.content.sorting.items.properties.type.description": "Type of the field value",
"setting.frontMatter.content.supportedFileTypes.markdownDescription": "Specify the file types that you want to use in Front Matter. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.content.supportedfiletypes)",
"setting.frontMatter.content.wysiwyg.markdownDescription": "Specifies if you want to enable/disable the What You See, Is What You Get (WYSIWYG) markdown controls. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.content.wysiwyg)",
"setting.frontMatter.custom.scripts.markdownDescription": "Specify the path to a Node.js script to execute. The current file path will be provided as an argument. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.custom.scripts)",
"setting.frontMatter.content.supportedFileTypes.markdownDescription": "Specify the file types that you want to use in Front Matter. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.content.supportedfiletypes) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.content.supportedfiletypes%22%5D)",
"setting.frontMatter.content.wysiwyg.markdownDescription": "Specifies if you want to enable/disable the What You See, Is What You Get (WYSIWYG) markdown controls. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.content.wysiwyg) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.content.wysiwyg%22%5D)",
"setting.frontMatter.content.filters.markdownDescription": "Specify the filters you want to use for your content dashboard. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.content.filters) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.content.filters%22%5D)",
"setting.frontMatter.custom.scripts.markdownDescription": "Specify the path to a Node.js script to execute. The current file path will be provided as an argument. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.custom.scripts) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.custom.scripts%22%5D)",
"setting.frontMatter.custom.scripts.items.properties.id.description": "ID of the script.",
"setting.frontMatter.custom.scripts.items.properties.title.description": "Title you want to give to your script. Will be shown as the title of the button.",
"setting.frontMatter.custom.scripts.items.properties.script.description": "Path to the script to execute",
@@ -104,16 +116,17 @@
"setting.frontMatter.custom.scripts.items.properties.hidden.description": "Hide the action from the UI",
"setting.frontMatter.custom.scripts.items.properties.environments.items.properties.type.description": "The environment type for which the script needs to be used",
"setting.frontMatter.custom.scripts.items.properties.environments.items.properties.script.description": "Path to the script to execute",
"setting.frontMatter.dashboard.content.pagination.markdownDescription": "Specify if you want to enable/disable pagination for your content. You can define your page number up to 52. Default items per page is `16`. Disabling the pagination can be done by setting it to `false`. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.dashboard.content.pagination)",
"setting.frontMatter.dashboard.content.cardTags.markdownDescription": "Specify the name of the metadata field that will be used to show the tags on the content card. When empty or null, it will hide the tags from the card. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.dashboard.content.cardtags)",
"setting.frontMatter.dashboard.content.card.fields.state.markdownDescription": "Specify if you want to show the state/draft status on the content card view. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontMatter.dashboard.content.card.fields.state)",
"setting.frontMatter.dashboard.content.card.fields.date.markdownDescription": "Specify if you want to show the date on the content card view. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontMatter.dashboard.content.card.fields.date)",
"setting.frontMatter.dashboard.content.card.fields.description.markdownDescription": "Specify the name of the metadata field that will be used to show the description on the content card. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontMatter.dashboard.content.card.fields.description)",
"setting.frontMatter.dashboard.content.card.fields.title.markdownDescription": "Specify the name of the metadata field that will be used to show the title on the content card. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontMatter.dashboard.content.card.fields.title)",
"setting.frontMatter.dashboard.mediaSnippet.markdownDescription": "Specify the a snippet for your custom media insert markup. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.dashboard.mediasnippet)",
"setting.frontMatter.custom.scripts.items.properties.contentTypes.description": "Define the content types for which the script will be used. If none are defined, it will be available to all types.",
"setting.frontMatter.dashboard.content.pagination.markdownDescription": "Specify if you want to enable/disable pagination for your content. You can define your page number up to 52. Default items per page is `16`. Disabling the pagination can be done by setting it to `false`. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.dashboard.content.pagination) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.dashboard.content.pagination%22%5D)",
"setting.frontMatter.dashboard.content.cardTags.markdownDescription": "Specify the name of the metadata field that will be used to show the tags on the content card. When empty or null, it will hide the tags from the card. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.dashboard.content.cardtags) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.dashboard.content.cardtags%22%5D)",
"setting.frontMatter.dashboard.content.card.fields.state.markdownDescription": "Specify if you want to show the state/draft status on the content card view. [Docs](https://frontmatter.codes/docs/settings/overview#frontMatter.dashboard.content.card.fields.state) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontMatter.dashboard.content.card.fields.state%22%5D)",
"setting.frontMatter.dashboard.content.card.fields.date.markdownDescription": "Specify if you want to show the date on the content card view. [Docs](https://frontmatter.codes/docs/settings/overview#frontMatter.dashboard.content.card.fields.date) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontMatter.dashboard.content.card.fields.date%22%5D)",
"setting.frontMatter.dashboard.content.card.fields.description.markdownDescription": "Specify the name of the metadata field that will be used to show the description on the content card. [Docs](https://frontmatter.codes/docs/settings/overview#frontMatter.dashboard.content.card.fields.description) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontMatter.dashboard.content.card.fields.description%22%5D)",
"setting.frontMatter.dashboard.content.card.fields.title.markdownDescription": "Specify the name of the metadata field that will be used to show the title on the content card. [Docs](https://frontmatter.codes/docs/settings/overview#frontMatter.dashboard.content.card.fields.title) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontMatter.dashboard.content.card.fields.title%22%5D)",
"setting.frontMatter.dashboard.mediaSnippet.markdownDescription": "Specify the a snippet for your custom media insert markup. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.dashboard.mediasnippet) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.dashboard.mediasnippet%22%5D)",
"setting.frontMatter.dashboard.mediaSnippet.items.description": "Use the `{mediaUrl}`, `{caption}`, `{alt}`, `{filename}`, `{mediaHeight}`, and `{mediaWidth}` placeholders in your snippet to automatically insert the media information.",
"setting.frontMatter.dashboard.openOnStart.markdownDescription": "Specify if you want to open the dashboard when you start VS Code. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.dashboard.openonstart)",
"setting.frontMatter.data.files.markdownDescription": "Specify the data files you want to use for your website. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.data.files)",
"setting.frontMatter.dashboard.openOnStart.markdownDescription": "Specify if you want to open the dashboard when you start VS Code. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.dashboard.openonstart) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.dashboard.openonstart%22%5D)",
"setting.frontMatter.data.files.markdownDescription": "Specify the data files you want to use for your website. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.data.files) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.data.files%22%5D)",
"setting.frontMatter.data.files.items.properties.id.description": "Your unique ID you want to use for your data file.",
"setting.frontMatter.data.files.items.properties.title.description": "Title you want to give to your data file.",
"setting.frontMatter.data.files.items.properties.labelField.description": "The field you want to use as label for your data entries.",
@@ -126,40 +139,53 @@
"setting.frontMatter.data.files.items.properties.schema.properties.properties.description": "Defines the fields of the form.",
"setting.frontMatter.data.files.items.properties.type.description": "If you are using data types, you can specify your type ID.",
"setting.frontMatter.data.files.items.properties.singleEntry.description": "If you want to use a single entry for your data file.",
"setting.frontMatter.data.folders.markdownDescription": "Specify the data folders you want to use for your website. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.data.folders)",
"setting.frontMatter.data.folders.markdownDescription": "Specify the data folders you want to use for your website. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.data.folders) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.data.folders%22%5D)",
"setting.frontMatter.data.folders.items.properties.id.description": "Your unique ID you want to use for your data folder.",
"setting.frontMatter.data.folders.items.properties.labelField.description": "The field you want to use as label for your data entries.",
"setting.frontMatter.data.folders.items.properties.path.description": "Path to the folder to load files.",
"setting.frontMatter.data.folders.items.properties.type.description": "If you are using data types, you can specify your type ID.",
"setting.frontMatter.data.folders.items.properties.singleEntry.description": "If you want to use a single entry for your data files in the folder.",
"setting.frontMatter.data.types.markdownDescription": "Specify the data types. These types can be used in for your data files. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.data.types)",
"setting.frontMatter.data.types.markdownDescription": "Specify the data types. These types can be used in for your data files. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.data.types) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.data.types%22%5D)",
"setting.frontMatter.data.types.items.properties.id.description": "Your unique ID you want to use for your data type.",
"setting.frontMatter.file.preserveCasing.markdownDescription": "Specify if you want to preserve the casing of your file names from the title. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.file.preservecasing)",
"setting.frontMatter.framework.id.markdownDescription": "Specify the ID of your static site generator or framework you are using for your website. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.framework.id)",
"setting.frontMatter.framework.startCommand.markdownDescription": "Specify the command you want to use to start your static site generator or framework. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.framework.startcommand)",
"setting.frontMatter.git.enabled.markdownDescription": "Specify if you want to use the Git actions for your website. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.git.enabled)",
"setting.frontMatter.git.commitMessage.markdownDescription": "Specify the commit message you want to use for the sync. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.git.commitmessage)",
"setting.frontMatter.git.submodule.pull.markdownDescription": "Specify if you want to pull submodules when syncing. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.git.submodule.pull)",
"setting.frontMatter.git.submodule.push.markdownDescription": "Specify if you want to push submodules when syncing. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.git.submodule.push)",
"setting.frontMatter.git.submodule.branch.markdownDescription": "Specify the submodule branch to checkout. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.git.submodule.branch)",
"setting.frontMatter.git.submodule.folder.markdownDescription": "Specify the submodule folder of your content, this can be handy when you are using multiple submodules. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.git.submodule.folder)",
"setting.frontMatter.global.activeMode.markdownDescription": "Specify the activated mode of Front Matter. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.global.activemode)",
"setting.frontMatter.global.modes.markdownDescription": "Specify the modes you want to use for Front Matter. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.global.modes)",
"setting.frontMatter.file.preserveCasing.markdownDescription": "Specify if you want to preserve the casing of your file names from the title. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.file.preservecasing) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.file.preservecasing%22%5D)",
"setting.frontMatter.framework.id.markdownDescription": "Specify the ID of your static site generator or framework you are using for your website. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.framework.id) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.framework.id%22%5D)",
"setting.frontMatter.framework.startCommand.markdownDescription": "Specify the command you want to use to start your static site generator or framework. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.framework.startcommand) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.framework.startcommand%22%5D)",
"setting.frontMatter.git.enabled.markdownDescription": "Specify if you want to use the Git actions for your website. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.git.enabled) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.git.enabled%22%5D)",
"setting.frontMatter.git.commitMessage.markdownDescription": "Specify the commit message you want to use for the sync. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.git.commitmessage) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.git.commitmessage%22%5D)",
"setting.frontMatter.git.submodule.pull.markdownDescription": "Specify if you want to pull submodules when syncing. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.git.submodule.pull) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.git.submodule.pull%22%5D)",
"setting.frontMatter.git.submodule.push.markdownDescription": "Specify if you want to push submodules when syncing. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.git.submodule.push) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.git.submodule.push%22%5D)",
"setting.frontMatter.git.submodule.branch.markdownDescription": "Specify the submodule branch to checkout. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.git.submodule.branch) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.git.submodule.branch%22%5D)",
"setting.frontMatter.git.submodule.folder.markdownDescription": "Specify the submodule folder of your content, this can be handy when you are using multiple submodules. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.git.submodule.folder) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.git.submodule.folder%22%5D)",
"setting.frontMatter.global.activeMode.markdownDescription": "Specify the activated mode of Front Matter. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.global.activemode) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.global.activemode%22%5D)",
"setting.frontMatter.global.modes.markdownDescription": "Specify the modes you want to use for Front Matter. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.global.modes) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.global.modes%22%5D)",
"setting.frontMatter.global.modes.items.properties.id.description": "The ID of your mode.",
"setting.frontMatter.global.modes.items.properties.features.description": "The features you want to use for your mode.",
"setting.frontMatter.global.notifications.markdownDescription": "Specifies the notifications you want to see. By default, all notifications types will be shown. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.global.notifications)",
"setting.frontMatter.global.disabledNotifications.markdownDescription": "This is an array with the notifications types that can be disabled for Front Matter CMS. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.global.disablednotifications)",
"setting.frontMatter.media.defaultSorting.markdownDescription": "Specify the default sorting option for the media dashboard. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.media.defaultsorting)",
"setting.frontMatter.media.supportedMimeTypes.markdownDescription": "Specify the mime types to support for the media files. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.media.supportedmimetypes)",
"setting.frontMatter.panel.freeform.markdownDescription": "Specifies if you want to allow yourself from entering unknown tags/categories in the tag picker (when enabled, you will have the option to store them afterwards). Default: true. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.panel.freeform)",
"setting.frontMatter.preview.host.markdownDescription": "Specify the host URL (example: http://localhost:1313) to be used when opening the preview. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.preview.host)",
"setting.frontMatter.preview.pathName.markdownDescription": "Specify the path you want to add after the host and before your slug. This can be used for instance to include the year/month like: `yyyy/MM`. The date will be generated based on the article its date field value. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.preview.pathname)",
"setting.frontMatter.site.baseURL.markdownDescription": "Specify the base URL of your site, this will be used for SEO checks. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.site.baseurl)",
"setting.frontMatter.taxonomy.alignFilename.markdownDescription": "Align the filename with the new slug when it gets generated. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.alignfilename)",
"setting.frontMatter.taxonomy.categories.markdownDescription": "Specifies the categories which can be used in the Front Matter. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.categories)",
"setting.frontMatter.taxonomy.commaSeparatedFields.markdownDescription": "Specify the fields names that Front Matter should treat as a comma-separated array. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.commaseparatedfields)",
"setting.frontMatter.global.notifications.markdownDescription": "Specifies the notifications you want to see. By default, all notifications types will be shown. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.global.notifications) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.global.notifications%22%5D)",
"setting.frontMatter.global.disabledNotifications.markdownDescription": "This is an array with the notifications types that can be disabled for Front Matter CMS. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.global.disablednotifications) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.global.disablednotifications%22%5D)",
"setting.frontMatter.media.defaultSorting.markdownDescription": "Specify the default sorting option for the media dashboard. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.media.defaultsorting) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.media.defaultsorting%22%5D)",
"setting.frontMatter.media.supportedMimeTypes.markdownDescription": "Specify the mime types to support for the media files. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.media.supportedmimetypes) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.media.supportedmimetypes%22%5D)",
"setting.frontMatter.media.contentTypes.markdownDescription": "Specify the media content types you want to use in Front Matter. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.media.contenttypes) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.media.contenttypes%22%5D)",
"setting.frontMatter.media.contentTypes.items.description": "Define the media content types you want to use in Front Matter.",
"setting.frontMatter.media.contentTypes.items.properties.name.description": "Name of the media content type",
"setting.frontMatter.media.contentTypes.items.properties.fileTypes.description": "Specify the file types to allow for the media content type",
"setting.frontMatter.media.contentTypes.items.properties.fields.description": "Define the fields of the media content type",
"setting.frontMatter.media.contentTypes.items.properties.fields.properties.title.description": "Title to show in the UI",
"setting.frontMatter.media.contentTypes.items.properties.fields.properties.name.description": "Name of the field to use",
"setting.frontMatter.media.contentTypes.items.properties.fields.properties.type.description": "Define the type of field",
"setting.frontMatter.media.contentTypes.items.properties.fields.properties.single.description": "Is a single line field",
"setting.frontMatter.panel.freeform.markdownDescription": "Specifies if you want to allow yourself from entering unknown tags/categories in the tag picker (when enabled, you will have the option to store them afterwards). Default: true. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.panel.freeform) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.panel.freeform%22%5D)",
"setting.frontMatter.panel.actions.disabled.markdownDescription": "Specify the actions you want to disable in the panel. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.panel.actions.disabled) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.panel.actions.disabled%22%5D)",
"setting.frontMatter.preview.host.markdownDescription": "Specify the host URL (example: http://localhost:1313) to be used when opening the preview. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.preview.host) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.preview.host%22%5D)",
"setting.frontMatter.preview.trailingSlash.markdownDescription": "Specify if you want to add a trailing slash to the preview URL. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.preview.trailingslash) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.preview.trailingslash%22%5D)",
"setting.frontMatter.preview.pathName.markdownDescription": "Specify the path you want to add after the host and before your slug. This can be used for instance to include the year/month like: `yyyy/MM`. The date will be generated based on the article its date field value. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.preview.pathname) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.preview.pathname%22%5D)",
"setting.frontMatter.site.baseURL.markdownDescription": "Specify the base URL of your site, this will be used for SEO checks. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.site.baseurl) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.site.baseurl%22%5D)",
"setting.frontMatter.taxonomy.alignFilename.markdownDescription": "Align the filename with the new slug when it gets generated. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.alignfilename) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.taxonomy.alignfilename%22%5D)",
"setting.frontMatter.taxonomy.categories.markdownDescription": "Specifies the categories which can be used in the Front Matter. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.categories) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.taxonomy.categories%22%5D)",
"setting.frontMatter.taxonomy.commaSeparatedFields.markdownDescription": "Specify the fields names that Front Matter should treat as a comma-separated array. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.commaseparatedfields) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.taxonomy.commaseparatedfields%22%5D)",
"setting.frontMatter.taxonomy.commaSeparatedFields.items.description": "Name of the fields you want to use as comma-separated arrays.",
"setting.frontMatter.taxonomy.contentTypes.markdownDescription": "Specify the type of contents you want to use for your articles/pages/etc. Make sure the `type` is correctly set in your front matter. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.contenttypes)",
"setting.frontMatter.taxonomy.contentTypes.markdownDescription": "Specify the type of contents you want to use for your articles/pages/etc. Make sure the `type` is correctly set in your front matter. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.contenttypes) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.taxonomy.contenttypes%22%5D)",
"setting.frontMatter.taxonomy.contentTypes.items.description": "Define the content types you want to use in Front Matter.",
"setting.frontMatter.taxonomy.contentTypes.items.properties.name.description": "Define the type of field",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fileType.description": "Specifies the type of content you want to create.",
@@ -188,6 +214,7 @@
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.numberOptions.properties.max.description": "The maximum value",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.numberOptions.properties.step.description": "The step value",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.taxonomyLimit.description": "Limit the number of taxonomies to select. Set to 0 to allow unlimited.",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.singleValueAsString.description": "Specify if you want to store a single array value as a string instead of an array.",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.isPublishDate.description": "Specify if the field is the publish date field",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.isModifiedDate.description": "Specify if the field is the modified date field",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.dataFileId.description": "Specify the ID of the data file to use for this field",
@@ -206,38 +233,51 @@
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.when.properties.caseSensitive.description": "Specify if the comparison is case sensitive. Default: true",
"setting.frontMatter.taxonomy.contentTypes.items.properties.pageBundle.description": "Specify if you want to create a folder when creating new content.",
"setting.frontMatter.taxonomy.contentTypes.items.properties.previewPath.description": "Defines a custom preview path for the content type.",
"setting.frontMatter.taxonomy.contentTypes.items.properties.trailingSlash.description": "Specify if you want to add a trailing slash to the preview URL.",
"setting.frontMatter.taxonomy.contentTypes.items.properties.slugTemplate.description": "Defines a custom slug template for the content type.",
"setting.frontMatter.taxonomy.contentTypes.items.properties.template.description": "An optional template that can be used for creating new content.",
"setting.frontMatter.taxonomy.contentTypes.items.properties.postScript.description": "An optional post script that can be used after new content creation.",
"setting.frontMatter.taxonomy.contentTypes.items.properties.filePrefix.description": "Defines a prefix for the file name.",
"setting.frontMatter.taxonomy.contentTypes.items.properties.defaultFileName.description": "Default file name to use when creating new content.",
"setting.frontMatter.taxonomy.customTaxonomy.markdownDescription": "Specify the custom taxonomy field data. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.tags)",
"setting.frontMatter.taxonomy.customTaxonomy.markdownDescription": "Specify the custom taxonomy field data. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.tags) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.taxonomy.tags%22%5D)",
"setting.frontMatter.taxonomy.customTaxonomy.items.properties.id.description": "ID for your taxonomy field. It cannot contain the \"tags\" or \"categories\" value.",
"setting.frontMatter.taxonomy.customTaxonomy.items.properties.options.description": "Options from which you can pick.",
"setting.frontMatter.taxonomy.dateField.markdownDescription": "This setting is used to define the publishing date field of your articles. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.datefield)",
"setting.frontMatter.taxonomy.dateFormat.markdownDescription": "Specify the date format for your articles. Check [date-fns formating](https://date-fns.org/v2.0.1/docs/format) for more information. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.dateformat)",
"setting.frontMatter.taxonomy.fieldGroups.markdownDescription": "Define the field groups you want to use for your block fields. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.fieldgroups)",
"setting.frontMatter.taxonomy.dateField.markdownDescription": "This setting is used to define the publishing date field of your articles. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.datefield) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.taxonomy.datefield%22%5D)",
"setting.frontMatter.taxonomy.dateFormat.markdownDescription": "Specify the date format for your articles. Check [date-fns formating](https://date-fns.org/v2.0.1/docs/format) for more information. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.dateformat) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.taxonomy.dateformat%22%5D)",
"setting.frontMatter.taxonomy.fieldGroups.markdownDescription": "Define the field groups you want to use for your block fields or collection fields. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.fieldgroups) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.taxonomy.fieldgroups%22%5D)",
"setting.frontMatter.taxonomy.fieldGroups.items.properties.id.description": "The name of the field group",
"setting.frontMatter.taxonomy.fieldGroups.items.properties.labelField.description": "The name of the field to be used as display value",
"setting.frontMatter.taxonomy.frontMatterType.markdownDescription": "Specify the type of Front Matter to use. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.frontmattertype)",
"setting.frontMatter.taxonomy.indentArrays.markdownDescription": "Specify if arrays in front matter are indented. Default: true. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.indentarrays)",
"setting.frontMatter.taxonomy.modifiedField.markdownDescription": "This setting is used to define the modified date field of your articles. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.modifiedfield)",
"setting.frontMatter.taxonomy.noPropertyValueQuotes.markdownDescription": "Specify the properties from which quotes need to be removed. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.nopropertyvaluequotes)",
"setting.frontMatter.taxonomy.frontMatterType.markdownDescription": "Specify the type of Front Matter to use. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.frontmattertype) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.taxonomy.frontmattertype%22%5D)",
"setting.frontMatter.taxonomy.indentArrays.markdownDescription": "Specify if arrays in front matter are indented. Default: true. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.indentarrays) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.taxonomy.indentarrays%22%5D)",
"setting.frontMatter.taxonomy.modifiedField.markdownDescription": "This setting is used to define the modified date field of your articles. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.modifiedfield) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.taxonomy.modifiedfield%22%5D)",
"setting.frontMatter.taxonomy.quoteStringValues.markdownDescription": "Specify if you want to quote string values in the front matter. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.quotestringvalues) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.taxonomy.quotestringvalues%22%5D)",
"setting.frontMatter.taxonomy.noPropertyValueQuotes.markdownDescription": "Specify the properties from which quotes need to be removed. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.nopropertyvaluequotes) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.taxonomy.nopropertyvaluequotes%22%5D)",
"setting.frontMatter.taxonomy.noPropertyValueQuotes.items.description": "Name of the properties you want to remove quotes from.",
"setting.frontMatter.taxonomy.seoContentLengh.markdownDescription": "Specifies the optimal minimum length for your articles. Between 1,760 words 2,400 is the absolute ideal article length for SEO in 2021. (set to `-1` to turn it off). [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.seocontentlengh)",
"setting.frontMatter.taxonomy.seoDescriptionField.markdownDescription": "Specifies the name of the SEO description field for your page. Default is 'description'. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.seodescriptionfield)",
"setting.frontMatter.taxonomy.seoDescriptionLength.markdownDescription": "Specifies the optimal description length for SEO (set to `-1` to turn it off). [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.seodescriptionlength)",
"setting.frontMatter.taxonomy.seoSlugLength.markdownDescription": "Specifies the optimal slug length for SEO (set to `-1` to turn it off). [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.seosluglength)",
"setting.frontMatter.taxonomy.seoTitleField.markdownDescription": "Specifies the name of the SEO title field for your page. Default is 'title'. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.seotitlefield)",
"setting.frontMatter.taxonomy.seoTitleLength.markdownDescription": "Specifies the optimal title length for SEO (set to `-1` to turn it off). [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.seotitlelength)",
"setting.frontMatter.taxonomy.slugPrefix.markdownDescription": "Specify a prefix for the slug. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.slugprefix)",
"setting.frontMatter.taxonomy.slugSuffix.markdownDescription": "Specify a suffix for the slug. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.slugsuffix)",
"setting.frontMatter.taxonomy.tags.markdownDescription": "Specifies the tags which can be used in the Front Matter. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.tags)",
"setting.frontMatter.telemetry.disable.markdownDescription": "Specify if you want to disable the telemetry. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.telemetry.disable)",
"setting.frontMatter.templates.enabled.markdownDescription": "Specify if you want to use templates. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.templates.enabled)",
"setting.frontMatter.templates.folder.markdownDescription": "Specify the folder to use for your article templates. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.templates.folder)",
"setting.frontMatter.templates.prefix.markdownDescription": "Specify the prefix you want to add for your new article filenames. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.templates.prefix)",
"setting.frontMatter.taxonomy.seoContentLengh.markdownDescription": "Specifies the optimal minimum length for your articles. Between 1,760 words 2,400 is the absolute ideal article length for SEO in 2021. (set to `-1` to turn it off). [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.seocontentlengh) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.taxonomy.seocontentlengh%22%5D)",
"setting.frontMatter.taxonomy.seoDescriptionField.markdownDescription": "Specifies the name of the SEO description field for your page. Default is 'description'. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.seodescriptionfield) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.taxonomy.seodescriptionfield%22%5D)",
"setting.frontMatter.taxonomy.seoDescriptionLength.markdownDescription": "Specifies the optimal description length for SEO (set to `-1` to turn it off). [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.seodescriptionlength) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.taxonomy.seodescriptionlength%22%5D)",
"setting.frontMatter.taxonomy.seoSlugLength.markdownDescription": "Specifies the optimal slug length for SEO (set to `-1` to turn it off). [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.seosluglength) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.taxonomy.seosluglength%22%5D)",
"setting.frontMatter.taxonomy.seoTitleField.markdownDescription": "Specifies the name of the SEO title field for your page. Default is 'title'. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.seotitlefield) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.taxonomy.seotitlefield%22%5D)",
"setting.frontMatter.taxonomy.seoTitleLength.markdownDescription": "Specifies the optimal title length for SEO (set to `-1` to turn it off). [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.seotitlelength) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.taxonomy.seotitlelength%22%5D)",
"setting.frontMatter.taxonomy.slugPrefix.markdownDescription": "Specify a prefix for the slug. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.slugprefix) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.taxonomy.slugprefix%22%5D)",
"setting.frontMatter.taxonomy.slugSuffix.markdownDescription": "Specify a suffix for the slug. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.slugsuffix) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.taxonomy.slugsuffix%22%5D)",
"setting.frontMatter.taxonomy.slugTemplate.markdownDescription": "Defines a custom slug template for the content you will create. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.slugtemplate) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.taxonomy.slugtemplate%22%5D)",
"setting.frontMatter.taxonomy.tags.markdownDescription": "Specifies the tags which can be used in the Front Matter. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.tags) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.taxonomy.tags%22%5D)",
"setting.frontMatter.telemetry.disable.markdownDescription": "Specify if you want to disable the telemetry. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.telemetry.disable) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.telemetry.disable%22%5D)",
"setting.frontMatter.templates.enabled.markdownDescription": "Specify if you want to use templates. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.templates.enabled) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.templates.enabled%22%5D)",
"setting.frontMatter.templates.folder.markdownDescription": "Specify the folder to use for your article templates. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.templates.folder) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.templates.folder%22%5D)",
"setting.frontMatter.templates.prefix.markdownDescription": "Specify the prefix you want to add for your new article filenames. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.templates.prefix) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.templates.prefix%22%5D)",
"setting.frontMatter.dashboard.mediaSnippet.deprecationMessage": "This setting is deprecated and will be removed in the next major version. Please define your media snippet in the `frontMatter.content.snippet` setting.",
"setting.frontMatter.taxonomy.dateField.deprecationMessage": "This setting is deprecated and will be removed in the next major version. Please use the new `isPublishDate` settings instead in your content types date fields.",
"setting.frontMatter.taxonomy.modifiedField.deprecationMessage": "This setting is deprecated and will be removed in the next major version. Please use the new `isModifiedDate` settings instead in your content types date fields.",
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.customType.description": "Specify the name of the custom field type to use."
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.customType.description": "Specify the name of the custom field type to use.",
"setting.frontMatter.taxonomy.contentTypes.items.properties.clearEmpty.description": "Specify if the empty values should be cleared.",
"setting.frontMatter.website.host.markdownDescription": "Specify the host URL of your website. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.website.url) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.website.url%22%5D)",
"command.frontMatter.settings.refresh": "Refresh Front Matter Settings",
"setting.frontMatter.config.dynamicFilePath.markdownDescription": "Specify the path to the dynamic config file (ex: [[workspace]]/config.js). [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.config.dynamicfilepath) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.config.dynamicfilepath%22%5D)",
"setting.frontMatter.taxonomy.contentTypes.items.properties.allowAsSubContent.description": "Specify if the content type can be used as sub content.",
"setting.frontMatter.taxonomy.contentTypes.items.properties.isSubContent.description": "Specify if the content type is sub content.",
"setting.frontMatter.git.disableOnBranches.markdownDescription": "Specify the branches on which you want to disable the Git actions. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.git.disableonbranches) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.git.disableonbranches%22%5D)",
"setting.frontMatter.git.requiresCommitMessage.markdownDescription": "Specify if you want to require a commit message when publishing your changes for a specified branch. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.git.requirescommitmessage) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.git.requirescommitmessage%22%5D)"
}

8237
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,5 +1,6 @@
const fs = require('fs');
const path = require('path');
const jsoncParser = require('jsonc-parser');
const camlCase = (str) => {
const words = str.split('.');
@@ -15,12 +16,14 @@ const camlCase = (str) => {
const enFile = fs.readFileSync(path.join(__dirname, '../l10n/bundle.l10n.json'), 'utf8');
// Parse the EN file
const en = JSON.parse(enFile);
const en = jsoncParser.parse(enFile);
const keys = Object.keys(en);
// Create an enum file
const enumFile = fs.createWriteStream(path.join(__dirname, '../src/localization/localization.enum.ts'));
const enumFile = fs.createWriteStream(
path.join(__dirname, '../src/localization/localization.enum.ts')
);
// Write the enum file header
enumFile.write(`export enum LocalizationKey {\n`);
@@ -38,4 +41,4 @@ const camlCase = (str) => {
// Close the enum file
enumFile.close();
})();
})();

View File

@@ -1,6 +1,42 @@
const fs = require('fs');
const path = require('path');
const glob = require('glob');
const { v4: uuidv4 } = require('uuid');
require('dotenv').config()
const transKey = process.env.TRANSLATION_API_KEY || "";
const apiUrl = process.env.TRANSLATION_API_URL || "";
const location = process.env.TRANSLATION_API_LOCATION || "";
const getTranslation = (translation) => {
let value = undefined;
if (translation && translation.translations && translation.translations.length > 0) {
value = translation.translations[0].text;
}
return value;
}
const callTranslationService = async (body, locale) => {
const response = await fetch(`${apiUrl}/translate?api-version=3.0&from=en&to=${locale}`, {
method: 'POST',
headers: {
'Ocp-Apim-Subscription-Key': transKey,
'Ocp-Apim-Subscription-Region': location,
'Content-type': 'application/json',
'Accept': 'application/json',
'X-ClientTraceId': uuidv4().toString(),
},
body
});
if (!response.ok) {
return undefined;
}
return await response.json();
}
(async () => {
// Get all the files from the l10n directory
@@ -11,6 +47,7 @@ const glob = require('glob');
const enContent = JSON.parse(enFile);
const enKeys = Object.keys(enContent);
console.log(`Starting l10n bundles`);
for (const file of files) {
if (file.endsWith(`bundle.l10n.json`)) {
continue;
@@ -20,17 +57,54 @@ const glob = require('glob');
const fileContent = fs.readFileSync(path.join(__dirname, `../l10n/${file}`), 'utf8');
let content = {};
// Get the locale
const fileName = path.basename(file);
const fileSplit = fileName.split('.');
const locale = fileSplit[fileSplit.length - 2];
if (!locale) {
continue;
}
console.log(`- Processing: ${locale}`);
try {
content = JSON.parse(fileContent);
} catch (e) {
// Ignore the error
}
const keysToTranslate = [];
// Loop through the EN keys
for (const key of enKeys) {
// If the key does not exist in the file, add it
if (!content[key]) {
content[key] = `🚧: ${enContent[key]}`;
if (!content[key] || content[key].startsWith(`🚧: `)) {
keysToTranslate.push({
name: key,
value: enContent[key],
});
if (!apiUrl || !transKey || !location) {
content[key] = `${enContent[key]}`;
}
}
}
if (apiUrl && transKey && location) {
if (keysToTranslate.length > 0) {
console.log(` - Translating: ${keysToTranslate.length}`);
const body = JSON.stringify(keysToTranslate.map(key => ({ text: key.value })));
const data = await callTranslationService(body, locale);
for (let i = 0; i < keysToTranslate.length; i++) {
const keyToTranslate = keysToTranslate[i];
const translation = getTranslation(data[i]);
if (keyToTranslate.name && translation) {
content[keyToTranslate.name] = translation;
} else {
content[keyToTranslate.name] = `${keyToTranslate.value}`;
}
}
}
}
@@ -46,21 +120,60 @@ const glob = require('glob');
const pkgFiles = glob.sync(path.join(__dirname, '../package.nls.*.json'));
console.log(``);
console.log(`Starting nls bundles`);
for (const file of pkgFiles) {
const fileContent = fs.readFileSync(file, 'utf8');
let content = {};
// Get the locale
const fileName = path.basename(file);
const fileSplit = fileName.split('.');
const locale = fileSplit[fileSplit.length - 2];
if (!locale) {
continue;
}
console.log(`- Processing: ${locale}`);
try {
content = JSON.parse(fileContent);
} catch (e) {
// Ignore the error
}
const keysToTranslate = [];
// Loop through the EN keys
for (const key of enPkgKeys) {
// If the key does not exist in the file, add it
if (!content[key]) {
content[key] = `🚧: ${enPkgContent[key]}`;
const contentValue = content[key];
if (!contentValue || contentValue.startsWith(`🚧: `)) {
keysToTranslate.push({
name: key,
value: enPkgContent[key],
});
if (!apiUrl || !transKey || !location) {
content[key] = `🚧: ${enPkgContent[key]}`;
}
}
}
if (apiUrl && transKey && location) {
if (keysToTranslate.length > 0) {
console.log(` - Translating: ${keysToTranslate.length}`);
const body = JSON.stringify(keysToTranslate.map(key => ({ text: key.value })));
const data = await callTranslationService(body, locale);
for (let i = 0; i < keysToTranslate.length; i++) {
const keyToTranslate = keysToTranslate[i];
const translation = getTranslation(data[i]);
if (keyToTranslate.name && translation) {
content[keyToTranslate.name] = translation;
} else {
content[keyToTranslate.name] = `${keyToTranslate.value}`;
}
}
}
}

View File

@@ -1,3 +1,13 @@
import {
Position,
TextDocument,
TextDocumentWillSaveEvent,
TextEdit,
Uri,
commands,
window,
workspace
} from 'vscode';
import { Folders } from './Folders';
import { DEFAULT_CONTENT_TYPE } from './../constants/ContentType';
import { isValidFile } from './../helpers/isValidFile';
@@ -10,98 +20,58 @@ import {
SETTING_SLUG_PREFIX,
SETTING_SLUG_SUFFIX,
SETTING_CONTENT_PLACEHOLDERS,
TelemetryEvent
TelemetryEvent,
SETTING_SLUG_TEMPLATE
} from './../constants';
import * as vscode from 'vscode';
import { CustomPlaceholder, Field, TaxonomyType } from '../models';
import { CustomPlaceholder, Field } from '../models';
import { format } from 'date-fns';
import { ArticleHelper, Settings, SlugHelper, TaxonomyHelper } from '../helpers';
import {
ArticleHelper,
Logger,
Settings,
SlugHelper,
processArticlePlaceholdersFromData,
processTimePlaceholders
} from '../helpers';
import { Notifications } from '../helpers/Notifications';
import { extname, basename, parse, dirname } from 'path';
import { COMMAND_NAME, DefaultFields } from '../constants';
import { DashboardData, SnippetRange } from '../models/DashboardData';
import { DashboardData, SnippetInfo, SnippetRange } from '../models/DashboardData';
import { DateHelper } from '../helpers/DateHelper';
import { parseWinPath } from '../helpers/parseWinPath';
import { Telemetry } from '../helpers/Telemetry';
import { ParsedFrontMatter } from '../parsers';
import { MediaListener } from '../listeners/panel';
import { NavigationType } from '../dashboardWebView/models';
import { processKnownPlaceholders } from '../helpers/PlaceholderHelper';
import { Position } from 'vscode';
import { SNIPPET } from '../constants/Snippet';
import * as l10n from '@vscode/l10n';
import { LocalizationKey } from '../localization';
export class Article {
/**
* Insert taxonomy
* Registers the commands for the Article class.
*
* @param type
* @param subscriptions - The array of subscriptions to register the commands with.
*/
public static async insert(type: TaxonomyType) {
const editor = vscode.window.activeTextEditor;
if (!editor) {
return;
}
public static async registerCommands(subscriptions: unknown[]) {
subscriptions.push(
commands.registerCommand(COMMAND_NAME.setLastModifiedDate, Article.setLastModifiedDate)
);
const article = ArticleHelper.getCurrent();
subscriptions.push(commands.registerCommand(COMMAND_NAME.generateSlug, Article.updateSlug));
if (!article) {
return;
}
// Inserting an image in Markdown
subscriptions.push(commands.registerCommand(COMMAND_NAME.insertMedia, Article.insertMedia));
let options: vscode.QuickPickItem[] = [];
const matterProp: string = type === TaxonomyType.Tag ? 'tags' : 'categories';
// Add the selected options to the options array
if (article.data[matterProp]) {
const propData = article.data[matterProp];
if (propData && propData.length > 0) {
options = [...propData]
.filter((p) => p)
.map(
(p) =>
({
label: p,
picked: true
} as vscode.QuickPickItem)
);
}
}
// Add all the known options to the selection list
const crntOptions = (await TaxonomyHelper.get(type)) || [];
if (crntOptions && crntOptions.length > 0) {
for (const crntOpt of crntOptions) {
if (!options.find((o) => o.label === crntOpt)) {
options.push({
label: crntOpt
});
}
}
}
if (options.length === 0) {
Notifications.info(`No ${type === TaxonomyType.Tag ? 'tags' : 'categories'} configured.`);
return;
}
const selectedOptions = await vscode.window.showQuickPick(options, {
placeHolder: `Select your ${type === TaxonomyType.Tag ? 'tags' : 'categories'} to insert`,
canPickMany: true,
ignoreFocusOut: true
});
if (selectedOptions) {
article.data[matterProp] = selectedOptions.map((o) => o.label);
}
ArticleHelper.update(editor, article);
// Inserting a snippet in Markdown
subscriptions.push(commands.registerCommand(COMMAND_NAME.insertSnippet, Article.insertSnippet));
}
/**
* Sets the article date
*/
public static async setDate() {
const editor = vscode.window.activeTextEditor;
const editor = window.activeTextEditor;
if (!editor) {
return;
}
@@ -111,13 +81,13 @@ export class Article {
return;
}
article = this.updateDate(article);
article = await this.updateDate(article);
try {
ArticleHelper.update(editor, article);
} catch (e) {
Notifications.error(
`Something failed while parsing the date format. Check your "${CONFIG_KEY}${SETTING_DATE_FORMAT}" setting.`
l10n.t(LocalizationKey.commandsArticleSetDateError, `${CONFIG_KEY}${SETTING_DATE_FORMAT}`)
);
}
}
@@ -126,8 +96,8 @@ export class Article {
* Update the date in the front matter
* @param article
*/
public static updateDate(article: ParsedFrontMatter) {
article.data = ArticleHelper.updateDates(article.data);
public static async updateDate(article: ParsedFrontMatter) {
article.data = await ArticleHelper.updateDates(article);
return article;
}
@@ -135,12 +105,12 @@ export class Article {
* Sets the article lastmod date
*/
public static async setLastModifiedDate() {
const editor = vscode.window.activeTextEditor;
const editor = window.activeTextEditor;
if (!editor) {
return;
}
const updatedArticle = this.setLastModifiedDateInner(editor.document);
const updatedArticle = await this.setLastModifiedDateInner(editor.document);
if (typeof updatedArticle === 'undefined') {
return;
@@ -149,10 +119,8 @@ export class Article {
ArticleHelper.update(editor, updatedArticle as ParsedFrontMatter);
}
public static async setLastModifiedDateOnSave(
document: vscode.TextDocument
): Promise<vscode.TextEdit[]> {
const updatedArticle = this.setLastModifiedDateInner(document);
public static async setLastModifiedDateOnSave(document: TextDocument): Promise<TextEdit[]> {
const updatedArticle = await this.setLastModifiedDateInner(document);
if (typeof updatedArticle === 'undefined') {
return [];
@@ -163,9 +131,10 @@ export class Article {
return [update];
}
private static setLastModifiedDateInner(
document: vscode.TextDocument
): ParsedFrontMatter | undefined {
private static async setLastModifiedDateInner(
document: TextDocument
): Promise<ParsedFrontMatter | undefined> {
Logger.verbose(`Article:setLastModifiedDateInner:Start`);
const article = ArticleHelper.getFrontMatterFromDocument(document);
// Only set the date, if there is already front matter set
@@ -174,13 +143,21 @@ export class Article {
}
const cloneArticle = Object.assign({}, article);
const dateField = ArticleHelper.getModifiedDateField(article) || DefaultFields.LastModified;
const dateField = await ArticleHelper.getModifiedDateField(article);
Logger.verbose(`Article:setLastModifiedDateInner:DateField - ${JSON.stringify(dateField)}`);
try {
cloneArticle.data[dateField] = Article.formatDate(new Date());
const fieldName = dateField?.name || DefaultFields.LastModified;
const fieldValue = Article.formatDate(new Date(), dateField?.dateFormat);
cloneArticle.data[fieldName] = fieldValue;
Logger.verbose(
`Article:setLastModifiedDateInner:DateField name - ${fieldName} - value - ${fieldValue}`
);
Logger.verbose(`Article:setLastModifiedDateInner:End`);
return cloneArticle;
} catch (e: unknown) {
Notifications.error(
`Something failed while parsing the date format. Check your "${CONFIG_KEY}${SETTING_DATE_FORMAT}" setting.`
l10n.t(LocalizationKey.commandsArticleSetDateError, `${CONFIG_KEY}${SETTING_DATE_FORMAT}`)
);
}
}
@@ -188,7 +165,7 @@ export class Article {
/**
* Generate the new slug
*/
public static generateSlug(title: string) {
public static generateSlug(title: string, article?: ParsedFrontMatter, slugTemplate?: string) {
if (!title) {
return;
}
@@ -196,13 +173,15 @@ export class Article {
const prefix = Settings.get(SETTING_SLUG_PREFIX) as string;
const suffix = Settings.get(SETTING_SLUG_SUFFIX) as string;
const slug = SlugHelper.createSlug(title);
if (article?.data) {
const slug = SlugHelper.createSlug(title, article?.data, slugTemplate);
if (slug) {
return {
slug,
slugWithPrefixAndSuffix: `${prefix}${slug}${suffix}`
};
if (slug) {
return {
slug,
slugWithPrefixAndSuffix: `${prefix}${slug}${suffix}`
};
}
}
return undefined;
@@ -215,7 +194,7 @@ export class Article {
Telemetry.send(TelemetryEvent.generateSlug);
const updateFileName = Settings.get(SETTING_SLUG_UPDATE_FILE_NAME) as string;
const editor = vscode.window.activeTextEditor;
const editor = window.activeTextEditor;
if (!editor) {
return;
@@ -227,12 +206,16 @@ export class Article {
}
let filePrefix = Settings.get<string>(SETTING_TEMPLATES_PREFIX);
const contentType = ArticleHelper.getContentType(article.data);
filePrefix = ArticleHelper.getFilePrefix(filePrefix, editor.document.uri.fsPath, contentType);
const contentType = await ArticleHelper.getContentType(article);
filePrefix = await ArticleHelper.getFilePrefix(
filePrefix,
editor.document.uri.fsPath,
contentType
);
const titleField = 'title';
const articleTitle: string = article.data[titleField];
const slugInfo = Article.generateSlug(articleTitle);
const slugInfo = Article.generateSlug(articleTitle, article, contentType.slugTemplate);
if (slugInfo && slugInfo.slug && slugInfo.slugWithPrefixAndSuffix) {
article.data['slug'] = slugInfo.slugWithPrefixAndSuffix;
@@ -256,9 +239,13 @@ export class Article {
);
for (const pField of customPlaceholderFields) {
article.data[pField.name] = customPlaceholder.value;
article.data[pField.name] = processKnownPlaceholders(
article.data[pField.name] = processArticlePlaceholdersFromData(
article.data[pField.name],
article.data,
contentType
);
article.data[pField.name] = processTimePlaceholders(
article.data[pField.name],
articleTitle,
dateFormat
);
}
@@ -270,7 +257,7 @@ export class Article {
// Check if the file name should be updated by the slug
// This is required for systems like Jekyll
if (updateFileName) {
const editor = vscode.window.activeTextEditor;
const editor = window.activeTextEditor;
if (editor) {
const ext = extname(editor.document.fileName);
const fileName = basename(editor.document.fileName);
@@ -288,11 +275,16 @@ export class Article {
try {
await editor.document.save();
await vscode.workspace.fs.rename(editor.document.uri, vscode.Uri.file(newPath), {
await workspace.fs.rename(editor.document.uri, Uri.file(newPath), {
overwrite: false
});
} catch (e: unknown) {
Notifications.error(`Failed to rename file: ${(e as Error).message || e}`);
Notifications.error(
l10n.t(
LocalizationKey.commandsArticleUpdateSlugError,
((e as Error).message || e) as string
)
);
}
}
}
@@ -302,22 +294,43 @@ export class Article {
/**
* Retrieve the slug from the front matter
*/
public static getSlug() {
const editor = vscode.window.activeTextEditor;
public static getSlug(pathname?: string) {
const editor = window.activeTextEditor;
if (!editor) {
return;
}
const file = parseWinPath(editor.document.fileName);
if (!isValidFile(file)) {
return;
}
const parsedFile = parse(file);
const slugTemplate = Settings.get<string>(SETTING_SLUG_TEMPLATE);
if (slugTemplate) {
if (slugTemplate === '{{title}}') {
const article = ArticleHelper.getFrontMatter(editor);
if (article?.data?.title) {
return article.data.title.toLowerCase().replace(/\s/g, '-');
}
} else {
const article = ArticleHelper.getFrontMatter(editor);
if (article?.data) {
return SlugHelper.createSlug(article.data.title, article.data, slugTemplate);
}
}
}
const suffix = Settings.get(SETTING_SLUG_SUFFIX) as string;
const prefix = Settings.get(SETTING_SLUG_PREFIX) as string;
if (parsedFile.name.toLowerCase() !== 'index') {
return parsedFile.name;
return `${prefix}${parsedFile.name}${suffix}`;
}
if (parsedFile.name.toLowerCase() === 'index' && pathname) {
return ``;
}
const folderName = basename(dirname(file));
@@ -328,7 +341,7 @@ export class Article {
* Toggle the page its draft mode
*/
public static async toggleDraft() {
const editor = vscode.window.activeTextEditor;
const editor = window.activeTextEditor;
if (!editor) {
return;
}
@@ -346,13 +359,13 @@ export class Article {
* Article auto updater
* @param event
*/
public static async autoUpdate(event: vscode.TextDocumentWillSaveEvent) {
public static async autoUpdate(event: TextDocumentWillSaveEvent) {
const document = event.document;
if (document && ArticleHelper.isSupportedFile(document)) {
const autoUpdate = Settings.get(SETTING_AUTO_UPDATE_DATE);
// Is article located in one of the content folders
const folders = Folders.get();
const folders = Folders.getCached();
const documentPath = parseWinPath(document.fileName);
const folder = folders.find((f) => documentPath.startsWith(f.path));
if (!folder) {
@@ -371,11 +384,16 @@ export class Article {
public static formatDate(dateValue: Date, fieldDateFormat?: string): string {
const dateFormat = Settings.get(SETTING_DATE_FORMAT) as string;
Logger.verbose(`Article:formatDate:Start`);
if (fieldDateFormat) {
Logger.verbose(`Article:formatDate:FieldDateFormat - ${fieldDateFormat}`);
return format(dateValue, DateHelper.formatUpdate(fieldDateFormat) as string);
} else if (dateFormat && typeof dateFormat === 'string') {
Logger.verbose(`Article:formatDate:DateFormat - ${dateFormat}`);
return format(dateValue, DateHelper.formatUpdate(dateFormat) as string);
} else {
Logger.verbose(`Article:formatDate:toISOString - ${dateValue}`);
return typeof dateValue.toISOString === 'function'
? dateValue.toISOString()
: dateValue?.toString();
@@ -386,19 +404,19 @@ export class Article {
* Insert an image from the media dashboard into the article
*/
public static async insertMedia() {
const editor = vscode.window.activeTextEditor;
const editor = window.activeTextEditor;
if (!editor) {
return;
}
const article = ArticleHelper.getFrontMatter(editor);
const contentType =
article && article.data ? ArticleHelper.getContentType(article.data) : DEFAULT_CONTENT_TYPE;
article && article.data ? await ArticleHelper.getContentType(article) : DEFAULT_CONTENT_TYPE;
const position = editor.selection.active;
const selectionText = editor.document.getText(editor.selection);
await vscode.commands.executeCommand(COMMAND_NAME.dashboard, {
await commands.executeCommand(COMMAND_NAME.dashboard, {
type: 'media',
data: {
pageBundle: !!contentType.pageBundle,
@@ -417,12 +435,12 @@ export class Article {
* Insert a snippet into the article
*/
public static async insertSnippet() {
const editor = vscode.window.activeTextEditor;
const editor = window.activeTextEditor;
if (!editor) {
return;
}
let position = editor.selection.active;
const position = editor.selection.active;
const selectionText = editor.document.getText(editor.selection);
// Check for snippet wrapper
@@ -447,7 +465,7 @@ export class Article {
snippetStartBeforePos = linesBeforeSelection.length - snippetStartBeforePos - 1;
}
let snippetInfo: { id: string; fields: any[] } | undefined = undefined;
let snippetInfo: SnippetInfo | undefined = undefined;
let range: SnippetRange | undefined = undefined;
if (
snippetEndAfterPos > -1 &&
@@ -471,13 +489,15 @@ export class Article {
}
const article = ArticleHelper.getFrontMatter(editor);
const contentType = article ? await ArticleHelper.getContentType(article) : undefined;
await vscode.commands.executeCommand(COMMAND_NAME.dashboard, {
await commands.executeCommand(COMMAND_NAME.dashboard, {
type: NavigationType.Snippets,
data: {
fileTitle: article?.data.title || '',
filePath: editor.document.uri.fsPath,
fieldName: basename(editor.document.uri.fsPath),
contentType,
position,
range,
selection: selectionText,

View File

@@ -1,77 +1,64 @@
import { commands, ExtensionContext } from 'vscode';
import { authentication, commands, ExtensionContext } from 'vscode';
import { COMMAND_NAME, CONTEXT } from '../constants';
import { Extension } from '../helpers';
import { Credentials } from '../services/Credentials';
import fetch from 'node-fetch';
import { Extension, Logger } from '../helpers';
import { Dashboard } from './Dashboard';
import { SettingsListener } from '../listeners/panel';
import { PanelProvider } from '../panelWebView/PanelProvider';
export class Backers {
private static creds: Credentials | null = null;
public static async init(context: ExtensionContext) {
Backers.creds = new Credentials();
await Backers.creds.initialize(context, Backers.tryUsernameCheck);
Backers.tryUsernameCheck();
Backers.checkSponsor();
context.subscriptions.push(
commands.registerCommand(COMMAND_NAME.authenticate, async () => {
Backers.tryUsernameCheck();
await authentication.getSession('github', ['read:user'], { createIfNone: true });
Backers.checkSponsor();
})
);
}
public static async tryUsernameCheck() {
try {
const username = await Backers.getUsername();
Backers.validate(username || '');
} catch (e) {
Backers.validate('');
}
}
public static async getUsername() {
const octokit = await Backers.creds?.getOctokit();
const user = await octokit?.users.getAuthenticated();
if (user?.data?.login) {
return user?.data?.login;
}
return;
}
public static async validate(username: string) {
public static async checkSponsor() {
const ext = Extension.getInstance();
const githubAuth = await authentication.getSession('github', ['read:user'], { silent: true });
if (githubAuth && githubAuth.accessToken) {
try {
const isBeta = ext.isBetaVersion();
const response = await fetch(
`https://${isBeta ? `beta.` : ``}frontmatter.codes/api/v2/backers`,
{
method: 'POST',
headers: {
'Content-Type': 'application/json',
accept: 'application/json'
},
body: JSON.stringify({
token: githubAuth.accessToken
})
}
);
if (!username) {
ext.setState(CONTEXT.backer, undefined, 'global');
}
if (response.ok) {
const prevData = await ext.getState<boolean>(CONTEXT.backer, 'global');
await ext.setState(CONTEXT.backer, true, 'global');
const isBeta = ext.isBetaVersion();
if (!prevData) {
const PanelView = PanelProvider.getInstance();
if (PanelView.visible) {
SettingsListener.getSettings();
}
const response = await fetch(
`https://${isBeta ? `beta.` : ``}frontmatter.codes/api/backers?backer=${username}`
);
if (response.ok) {
const prevData = await ext.getState<boolean>(CONTEXT.backer, 'global');
await ext.setState(CONTEXT.backer, true, 'global');
if (!prevData) {
const PanelView = PanelProvider.getInstance();
if (PanelView.visible) {
SettingsListener.getSettings();
}
if (Dashboard.isOpen) {
Dashboard.reload();
if (Dashboard.isOpen) {
Dashboard.reload();
}
}
} else {
ext.setState(CONTEXT.backer, false, 'global');
}
} catch (e) {
Logger.error(`Failed to check if user is a sponsor: ${(e as Error).message}`);
}
} else {
ext.setState(CONTEXT.backer, false, 'global');
ext.setState(CONTEXT.backer, undefined, 'global');
}
}
}

View File

@@ -1,6 +1,8 @@
import { commands } from 'vscode';
import { COMMAND_NAME, ExtensionState } from '../constants';
import { Extension, Notifications } from '../helpers';
import { Extension, Logger, Notifications } from '../helpers';
import * as l10n from '@vscode/l10n';
import { LocalizationKey } from '../localization';
export class Cache {
public static async registerCommands() {
@@ -20,7 +22,7 @@ export class Cache {
await Extension.getInstance().setState(key, data, type);
}
public static async clear(showNotification: boolean = true) {
public static async clear(showNotification = true) {
const ext = Extension.getInstance();
await ext.setState(ExtensionState.Dashboard.Pages.Cache, undefined, 'workspace', true);
@@ -28,7 +30,9 @@ export class Cache {
await ext.setState(ExtensionState.Settings.Extends, undefined, 'workspace', true);
if (showNotification) {
Notifications.info('Cache cleared');
Notifications.info(l10n.t(LocalizationKey.commandsCacheCleared));
} else {
Logger.info(l10n.t(LocalizationKey.commandsCacheCleared));
}
}
}

View File

@@ -1,9 +1,12 @@
import { Telemetry } from './../helpers/Telemetry';
import { TelemetryEvent, PreviewCommands, SETTING_EXPERIMENTAL } from './../constants';
import { TelemetryEvent, PreviewCommands, GeneralCommands } from './../constants';
import { join } from 'path';
import { commands, Uri, ViewColumn, window } from 'vscode';
import { Extension, Settings } from '../helpers';
import { Extension } from '../helpers';
import { WebviewHelper } from '@estruyf/vscode';
import { getLocalizationFile } from '../utils/getLocalizationFile';
import * as l10n from '@vscode/l10n';
import { LocalizationKey } from '../localization';
export class Chatbot {
/**
@@ -13,7 +16,7 @@ export class Chatbot {
// Create the preview webview
const webView = window.createWebviewPanel(
'frontMatterChatbot',
'Front Matter AI - Ask me anything',
`Front Matter AI - ${l10n.t(LocalizationKey.commandsChatbotTitle)}`,
{
viewColumn: ViewColumn.Beside,
preserveFocus: true
@@ -30,13 +33,27 @@ export class Chatbot {
const cspSource = webView.webview.cspSource;
webView.webview.onDidReceiveMessage((message) => {
webView.webview.onDidReceiveMessage(async (message) => {
switch (message.command) {
case PreviewCommands.toVSCode.open:
if (message.data) {
commands.executeCommand('vscode.open', message.data);
}
return;
case GeneralCommands.toVSCode.getLocalization:
const { requestId } = message;
if (!requestId) {
return;
}
const fileContents = await getLocalizationFile();
webView.webview.postMessage({
command: GeneralCommands.toVSCode.getLocalization,
requestId,
payload: fileContents
});
return;
}
});

View File

@@ -1,8 +1,25 @@
import { commands, QuickPickItem, window } from 'vscode';
import { COMMAND_NAME, SETTING_TEMPLATES_ENABLED } from '../constants';
import { Settings } from '../helpers';
import { Extension, Settings } from '../helpers';
import * as l10n from '@vscode/l10n';
import { LocalizationKey } from '../localization';
export class Content {
/**
* Registers the commands for the Content class.
*/
public static async registerCommands() {
const ext = Extension.getInstance();
const subscriptions = ext.subscriptions;
subscriptions.push(commands.registerCommand(COMMAND_NAME.createContent, Content.create));
}
/**
* Creates content based on user selection.
* If templates are enabled, shows a quick pick menu to choose between content type and template.
* If templates are disabled, executes the createByContentType command directly.
*/
public static async create() {
const templatesEnabled = await Settings.get(SETTING_TEMPLATES_ENABLED);
if (!templatesEnabled) {
@@ -12,18 +29,18 @@ export class Content {
const options: QuickPickItem[] = [
{
label: 'Create content by content type',
description: 'Select if you want to create new content by the available content type(s)'
label: l10n.t(LocalizationKey.commandsContentOptionContentTypeLabel),
description: l10n.t(LocalizationKey.commandsContentOptionContentTypeDescription)
},
{
label: 'Create content by template',
description: 'Select if you want to create new content by the available template(s)'
label: l10n.t(LocalizationKey.commandsContentOptionTemplateLabel),
description: l10n.t(LocalizationKey.commandsContentOptionTemplateDescription)
} as QuickPickItem
];
const selectedOption = await window.showQuickPick(options, {
title: 'Create content',
placeHolder: `Select how you want to create your new content`,
title: l10n.t(LocalizationKey.commandsContentQuickPickTitle),
placeHolder: l10n.t(LocalizationKey.commandsContentQuickPickPlaceholder),
canPickMany: false,
ignoreFocusOut: true
});

View File

@@ -3,11 +3,13 @@ import {
CONTEXT,
ExtensionState,
SETTING_EXPERIMENTAL,
SETTING_EXTENSIBILITY_SCRIPTS
SETTING_EXTENSIBILITY_SCRIPTS,
COMMAND_NAME,
TelemetryEvent
} from '../constants';
import { join } from 'path';
import { commands, Uri, ViewColumn, Webview, WebviewPanel, window, workspace } from 'vscode';
import { Logger, Settings as SettingsHelper } from '../helpers';
import { commands, Uri, ViewColumn, Webview, WebviewPanel, window } from 'vscode';
import { DashboardSettings, Logger, Settings as SettingsHelper, Telemetry } from '../helpers';
import { DashboardCommand } from '../dashboardWebView/DashboardCommand';
import { Extension } from '../helpers/Extension';
import { WebviewHelper } from '@estruyf/vscode';
@@ -22,12 +24,17 @@ import {
ExtensionListener,
SnippetListener,
TaxonomyListener,
LogListener,
LocalizationListener
LocalizationListener,
SsgListener
} from '../listeners/dashboard';
import { MediaListener as PanelMediaListener } from '../listeners/panel';
import { GitListener, ModeListener } from '../listeners/general';
import { Folders } from './Folders';
import * as l10n from '@vscode/l10n';
import { LocalizationKey } from '../localization';
import { DashboardMessage } from '../dashboardWebView/DashboardMessage';
import { NavigationType } from '../dashboardWebView/models';
import { ignoreMsgCommand } from '../utils';
export class Dashboard {
private static webview: WebviewPanel | null = null;
@@ -38,6 +45,13 @@ export class Dashboard {
return Dashboard._viewData;
}
public static setTitle(title: string) {
if (title && Dashboard.webview) {
Dashboard.webview.title =
title || `Front Matter ${l10n.t(LocalizationKey.commandsDashboardTitle)}`;
}
}
/**
* Init the dashboard
*/
@@ -48,6 +62,56 @@ export class Dashboard {
}
}
public static registerCommands() {
const subscriptions = Extension.getInstance().subscriptions;
subscriptions.push(
commands.registerCommand(COMMAND_NAME.dashboard, (data?: DashboardData) => {
Telemetry.send(TelemetryEvent.openContentDashboard);
if (!data) {
Dashboard.open({ type: NavigationType.Contents });
} else {
Dashboard.open(data);
}
})
);
subscriptions.push(
commands.registerCommand(COMMAND_NAME.dashboardMedia, () => {
Telemetry.send(TelemetryEvent.openMediaDashboard);
Dashboard.open({ type: NavigationType.Media });
})
);
subscriptions.push(
commands.registerCommand(COMMAND_NAME.dashboardSnippets, () => {
Telemetry.send(TelemetryEvent.openSnippetsDashboard);
Dashboard.open({ type: NavigationType.Snippets });
})
);
subscriptions.push(
commands.registerCommand(COMMAND_NAME.dashboardData, () => {
Telemetry.send(TelemetryEvent.openDataDashboard);
Dashboard.open({ type: NavigationType.Data });
})
);
subscriptions.push(
commands.registerCommand(COMMAND_NAME.dashboardTaxonomy, () => {
Telemetry.send(TelemetryEvent.openTaxonomyDashboard);
Dashboard.open({ type: NavigationType.Taxonomy });
})
);
subscriptions.push(
commands.registerCommand(COMMAND_NAME.dashboardClose, () => {
Telemetry.send(TelemetryEvent.closeDashboard);
Dashboard.close();
})
);
}
/**
* Open or reveal the dashboard
*/
@@ -118,7 +182,7 @@ export class Dashboard {
// Create the preview webview
Dashboard.webview = window.createWebviewPanel(
'frontMatterDashboard',
'FrontMatter Dashboard',
`Front Matter ${l10n.t(LocalizationKey.commandsDashboardTitle)}`,
ViewColumn.One,
{
enableScripts: true,
@@ -134,7 +198,7 @@ export class Dashboard {
light: Uri.file(join(extensionUri.fsPath, 'assets/icons/frontmatter-short-light.svg'))
};
Dashboard.webview.webview.html = Dashboard.getWebviewContent(
Dashboard.webview.webview.html = await Dashboard.getWebviewContent(
Dashboard.webview.webview,
extensionUri
);
@@ -157,15 +221,18 @@ export class Dashboard {
Dashboard.isDisposed = true;
Dashboard._viewData = undefined;
PanelMediaListener.getMediaSelection();
DashboardSettings.updateAfterClose();
await commands.executeCommand('setContext', CONTEXT.isDashboardOpen, false);
});
SettingsHelper.onConfigChange(() => {
SettingsHelper.attachListener('dashboard-listener', () => {
SettingsListener.getSettings(true);
});
Dashboard.webview.webview.onDidReceiveMessage(async (msg) => {
Logger.info(`Receiving message from webview: ${msg.command}`);
if (!ignoreMsgCommand(msg.command)) {
Logger.verbose(`Receiving message from dashboard: ${msg.command}`);
}
LocalizationListener.process(msg);
DashboardListener.process(msg);
@@ -179,7 +246,7 @@ export class Dashboard {
ModeListener.process(msg);
GitListener.process(msg);
TaxonomyListener.process(msg);
LogListener.process(msg);
SsgListener.process(msg);
});
}
@@ -198,7 +265,12 @@ export class Dashboard {
* Post data to the dashboard
* @param msg
*/
public static postWebviewMessage(msg: { command: DashboardCommand; payload?: unknown }) {
public static postWebviewMessage(msg: {
command: DashboardCommand | DashboardMessage;
requestId?: string;
payload?: unknown;
error?: unknown;
}) {
if (Dashboard.isDisposed) {
return;
}
@@ -212,7 +284,7 @@ export class Dashboard {
* Retrieve the webview HTML contents
* @param webView
*/
private static getWebviewContent(webView: Webview, extensionPath: Uri): string {
private static async getWebviewContent(webView: Webview, extensionPath: Uri): Promise<string> {
const dashboardFile = 'dashboardWebView.js';
const localPort = `9000`;
const localServerUrl = `localhost:${localPort}`;
@@ -270,10 +342,9 @@ export class Dashboard {
}`
];
const globalConfigPath = await SettingsHelper.projectConfigPath();
const frontMatterUri = webView
.asWebviewUri(
SettingsHelper.projectConfigPath ? Uri.file(SettingsHelper.projectConfigPath) : Uri.file('')
)
.asWebviewUri(globalConfigPath ? Uri.file(globalConfigPath) : Uri.file(''))
.toString();
const webviewUrl = frontMatterUri.replace(`/${SettingsHelper.globalFile}`, '');
@@ -295,7 +366,7 @@ export class Dashboard {
version.usedVersion ? '' : `data-showWelcome="true"`
} ${
experimental ? `data-experimental="${experimental}"` : ''
} data-webview-url="${webviewUrl}" ></div>
} data-webview-url="${webviewUrl}" data-is-crash-disabled="${!Telemetry.isVscodeEnabled()}" ></div>
${(scriptsToLoad || [])
.map((script) => {

View File

@@ -1,13 +1,26 @@
import { Folders } from './Folders';
import { ViewColumn, workspace } from 'vscode';
import { ViewColumn, commands, workspace } from 'vscode';
import ContentProvider from '../providers/ContentProvider';
import { join } from 'path';
import { ContentFolder } from '../models';
import { Settings } from '../helpers/SettingsHelper';
import {
COMMAND_NAME,
DEFAULT_FILE_TYPES,
SETTING_CONTENT_SUPPORTED_FILETYPES
} from '../constants';
import { Extension } from '../helpers';
export class Diagnostics {
public static async registerCommands() {
const ext = Extension.getInstance();
const subscriptions = ext.subscriptions;
subscriptions.push(commands.registerCommand(COMMAND_NAME.diagnostics, Diagnostics.show));
}
public static async show() {
const folders = Folders.get();
const folders = await Folders.get();
const projectName = Folders.getProjectFolderName();
const wsFolder = Folders.getWorkspaceFolder();
@@ -18,27 +31,38 @@ export class Diagnostics {
const all = await Diagnostics.allProjectFiles();
const logging = `# Project name
const fileTypes = Diagnostics.getFileTypes();
const logging = `# ${Extension.getInstance().displayName} - Diagnostics
Beta: \`${Extension.getInstance().isBetaVersion()}\`
Version: \`${Extension.getInstance().version}\`
## Project name
${projectName}
# Folders
## Workspace folder
${folders.map((f) => `- ${f.title}: "${f.path}"`).join('\n')}
\`${wsFolder ? wsFolder.fsPath : 'No workspace folder'}\`
# Workspace folder
${wsFolder ? wsFolder.fsPath : 'No workspace folder'}
# Total files
## Total files
${all}
# Folders to search files
## Folders
| Title | Path |
| ----- | ---- |
${folders.map((f) => `| ${f.title} | \`${f.path}\` |`).join('\n')}
### Files in folders
| Project start length | Search in | ${fileTypes.join(` | `)} |
|--- | --- | --- | --- | --- |
${folderData.join('\n')}
# Complete frontmatter.json config
## Complete frontmatter.json config
\`\`\`json
${JSON.stringify(Settings.globalConfig, null, 2)}
@@ -48,8 +72,12 @@ ${JSON.stringify(Settings.globalConfig, null, 2)}
ContentProvider.show(logging, `${projectName} diagnostics`, 'markdown', ViewColumn.One);
}
private static getFileTypes = (): string[] => {
return Settings.get<string[]>(SETTING_CONTENT_SUPPORTED_FILETYPES) || DEFAULT_FILE_TYPES;
};
private static async allProjectFiles() {
const allFiles = await workspace.findFiles(`**/*.*`);
const allFiles = await workspace.findFiles(`**/*.*`, '**/node_modules/**');
return `Total files found: ${allFiles.length}`;
}
@@ -59,22 +87,19 @@ ${JSON.stringify(Settings.globalConfig, null, 2)}
projectStart = projectStart?.replace(/\\/g, '/');
projectStart = projectStart?.startsWith('/') ? projectStart.substring(1) : projectStart;
const mdFiles = await workspace.findFiles(
join(projectStart, folder.excludeSubdir ? '/' : '**/', '*.md')
);
const mdxFiles = await workspace.findFiles(
join(projectStart, folder.excludeSubdir ? '/' : '**/', '*.mdx')
);
const markdownFiles = await workspace.findFiles(
join(projectStart, folder.excludeSubdir ? '/' : '**/', '*.markdown')
const fileTypes = Diagnostics.getFileTypes();
const fileTypeLengths = await Promise.all(
fileTypes.map(async (ft) => {
const path = join(projectStart || '', folder.excludeSubdir ? '/' : '**/', `*.${ft}`);
const files = await workspace.findFiles(path, '**/node_modules/**');
return (files || []).length;
})
);
return `- Project start length: ${projectStart.length} | Search in: "${join(
return `| ${projectStart.length} | \`${join(
projectStart,
folder.excludeSubdir ? '/' : '**/',
'*.*'
)}" | mdFiles: ${mdFiles.length} | mdxFiles: ${mdxFiles.length} | markdownFiles: ${
markdownFiles.length
}`;
)}\` | ${fileTypeLengths.join(` | `)} |`;
}
}

View File

@@ -1,6 +1,8 @@
import { STATIC_FOLDER_PLACEHOLDER } from './../constants/StaticFolderPlaceholder';
import { Questions } from './../helpers/Questions';
import {
COMMAND_NAME,
SETTING_CONTENT_I18N,
SETTING_CONTENT_PAGE_FOLDERS,
SETTING_CONTENT_STATIC_FOLDER,
SETTING_CONTENT_SUPPORTED_FILETYPES,
@@ -9,11 +11,18 @@ import {
} from './../constants';
import { commands, Uri, workspace, window } from 'vscode';
import { basename, dirname, join, relative, sep } from 'path';
import { ContentFolder, FileInfo, FolderInfo, StaticFolder } from '../models';
import {
ContentFolder,
ContentType,
FileInfo,
FolderInfo,
I18nConfig,
StaticFolder
} from '../models';
import uniqBy = require('lodash.uniqby');
import { Template } from './Template';
import { Notifications } from '../helpers/Notifications';
import { Logger, processKnownPlaceholders, Settings } from '../helpers';
import { Extension, Logger, Settings, processTimePlaceholders } from '../helpers';
import { existsSync } from 'fs';
import { format } from 'date-fns';
import { Dashboard } from './Dashboard';
@@ -24,11 +33,28 @@ import { DEFAULT_FILE_TYPES } from '../constants/DefaultFileTypes';
import { Telemetry } from '../helpers/Telemetry';
import { glob } from 'glob';
import { mkdirAsync } from '../utils/mkdirAsync';
import { existsAsync } from '../utils';
import { existsAsync, isWindows } from '../utils';
import * as l10n from '@vscode/l10n';
import { LocalizationKey } from '../localization';
import { Preview } from './Preview';
export const WORKSPACE_PLACEHOLDER = `[[workspace]]`;
export class Folders {
private static _folders: ContentFolder[] = [];
public static async registerCommands() {
const ext = Extension.getInstance();
const subscriptions = ext.subscriptions;
subscriptions.push(commands.registerCommand(COMMAND_NAME.createByTemplate, Folders.create));
}
public static clearCached() {
Logger.verbose(`Folders:clearCached`);
Folders._folders = [];
}
/**
* Add a media folder
* @returns
@@ -57,15 +83,15 @@ export class Folders {
}
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)?`,
title: l10n.t(LocalizationKey.commandsFoldersAddMediaFolderInputBoxTitle),
prompt: l10n.t(LocalizationKey.commandsFoldersAddMediaFolderInputBoxPrompt),
value: startPath,
ignoreFocusOut: true,
placeHolder: `${format(new Date(), `yyyy/MM`)}`
});
if (!folderName) {
Notifications.warning(`No folder name was specified.`);
Notifications.warning(l10n.t(LocalizationKey.commandsFoldersAddMediaFolderNoFolderWarning));
return;
}
@@ -95,8 +121,9 @@ export class Folders {
return;
}
const folders = Folders.get();
const location = folders.find((f) => f.title === selectedFolder);
let folders = await Folders.get();
folders = folders.filter((f) => !f.disableCreation);
const location = folders.find((f) => f.path === selectedFolder.path);
if (location) {
const folderPath = Folders.getFolderPath(Uri.file(location.path));
if (folderPath) {
@@ -109,43 +136,52 @@ export class Folders {
* Register the new folder path
* @param folderInfo
*/
public static async register(folderInfo: { title: string; path: Uri } | Uri) {
public static async register(
folderInfo: { title: string; path: Uri; contentType: string[] } | Uri
) {
let folderName = folderInfo instanceof Uri ? undefined : folderInfo.title;
const folder = folderInfo instanceof Uri ? folderInfo : folderInfo.path;
const contentType = folderInfo instanceof Uri ? undefined : folderInfo.contentType;
if (folder && folder.fsPath) {
const wslPath = folder.fsPath.replace(/\//g, '\\');
let folders = Folders.get();
let folders = await Folders.get();
const exists = folders.find(
(f) => f.path.includes(folder.fsPath) || f.path.includes(wslPath)
);
if (exists) {
Notifications.warning(`Folder is already registered`);
Notifications.warning(l10n.t(LocalizationKey.commandsFoldersCreateFolderExistsWarning));
return;
}
if (!folderName) {
folderName = await window.showInputBox({
title: `Register folder`,
prompt: `Which name would you like to specify for this folder?`,
placeHolder: `Folder name`,
title: l10n.t(LocalizationKey.commandsFoldersCreateInputTitle),
prompt: l10n.t(LocalizationKey.commandsFoldersCreateInputPrompt),
placeHolder: l10n.t(LocalizationKey.commandsFoldersCreateInputPlaceholder),
value: basename(folder.fsPath),
ignoreFocusOut: true
});
}
folders.push({
const contentFolder = {
title: folderName,
path: folder.fsPath
} as ContentFolder);
} as ContentFolder;
if (contentType) {
contentFolder.contentTypes = typeof contentType === 'string' ? [contentType] : contentType;
}
folders.push(contentFolder);
folders = uniqBy(folders, (f) => f.path);
await Folders.update(folders);
Notifications.info(`Folder registered`);
Notifications.info(l10n.t(LocalizationKey.commandsFoldersCreateSuccess));
Telemetry.send(TelemetryEvent.registerFolder);
@@ -159,7 +195,7 @@ export class Folders {
*/
public static async unregister(folder: Uri) {
if (folder && folder.path) {
let folders = Folders.get();
let folders = await Folders.get();
folders = folders.filter((f) => f.path !== folder.fsPath);
await Folders.update(folders);
@@ -197,7 +233,7 @@ export class Folders {
}
}
return assetFolder;
return assetFolder || '/';
}
/**
@@ -236,7 +272,9 @@ export class Folders {
if (!projectFolder) {
window
.showWorkspaceFolderPick({
placeHolder: `Please select the main workspace folder for Front Matter to use.`
placeHolder: l10n.t(
LocalizationKey.commandsFoldersGetWorkspaceFolderWorkspaceFolderPickPlaceholder
)
})
.then(async (selectedFolder) => {
if (selectedFolder) {
@@ -268,81 +306,25 @@ export class Folders {
* Get the registered folders information
*/
public static async getInfo(limit?: number): Promise<FolderInfo[] | null> {
Logger.verbose('Folders:getInfo:start');
const supportedFiles = Settings.get<string[]>(SETTING_CONTENT_SUPPORTED_FILETYPES);
const folders = Folders.get();
const wsFolder = parseWinPath(Folders.getWorkspaceFolder()?.fsPath || '');
const folders = await Folders.get();
if (folders && folders.length > 0) {
const folderInfo: FolderInfo[] = [];
for (const folder of folders) {
try {
const folderPath = parseWinPath(folder.path);
if (typeof folderPath === 'string') {
let files: Uri[] = [];
for (const fileType of supportedFiles || DEFAULT_FILE_TYPES) {
let filePath = join(
folderPath,
folder.excludeSubdir ? '/' : '**',
`*${fileType.startsWith('.') ? '' : '.'}${fileType}`
);
if (folderPath === '' && folder.excludeSubdir) {
filePath = `*${fileType.startsWith('.') ? '' : '.'}${fileType}`;
}
let foundFiles = await Folders.findFiles(filePath);
// Make sure these file are coming from the folder path (this could be an issue in multi-root workspaces)
foundFiles = foundFiles.filter((f) => parseWinPath(f.fsPath).startsWith(folderPath));
files = [...files, ...foundFiles];
}
if (files) {
let fileStats: FileInfo[] = [];
for (const file of files) {
try {
const fileName = basename(file.fsPath);
const folderName = dirname(file.fsPath).split(sep).pop();
const stats = await workspace.fs.stat(file);
fileStats.push({
filePath: file.fsPath,
fileName,
folderName,
...stats
});
} catch (error) {
// Skip the file
}
}
fileStats = fileStats.sort((a, b) => b.mtime - a.mtime);
if (limit) {
fileStats = fileStats.slice(0, limit);
}
folderInfo.push({
title: folder.title,
files: files.length,
lastModified: fileStats
});
}
}
} catch (e) {
// Skip the current folder
const crntFolderInfo = await Folders.getFilesByFolder(folder, supportedFiles, limit);
if (crntFolderInfo) {
folderInfo.push(crntFolderInfo);
}
}
Logger.verbose('Folders:getInfo:end');
return folderInfo;
}
Logger.verbose('Folders:getInfo:end - no folders found');
return null;
}
@@ -350,11 +332,44 @@ export class Folders {
* Get the folder settings
* @returns
*/
public static get(): ContentFolder[] {
const wsFolder = Folders.getWorkspaceFolder();
const folders: ContentFolder[] = Settings.get(SETTING_CONTENT_PAGE_FOLDERS) as ContentFolder[];
public static async get(): Promise<ContentFolder[]> {
Logger.verbose('Folders:get:start');
const contentFolders = folders.map((folder) => {
if (Folders._folders.length > 0) {
Logger.verbose('Folders:get:end - cached folders');
return Folders._folders;
}
const wsFolder = Folders.getWorkspaceFolder();
let folders: ContentFolder[] = Settings.get(SETTING_CONTENT_PAGE_FOLDERS) as ContentFolder[];
const i18nSettings = Settings.get<I18nConfig[]>(SETTING_CONTENT_I18N);
// Filter out folders without a path
folders = folders.filter((f) => f.path);
const contentFolders: ContentFolder[] = [];
// Check if wildcard is used
const wildcardFolders = folders.filter((f) => f.path.includes('*'));
if (wildcardFolders && wildcardFolders.length > 0) {
for (const folder of wildcardFolders) {
folders = folders.filter((f) => f.path !== folder.path);
const folderPath = Folders.absWsFolder(folder, wsFolder);
const subFolders = await Folders.findFolders(folderPath);
for (const subFolder of subFolders) {
const subFolderPath = parseWinPath(subFolder);
folders.push({
...folder,
title: `${folder.title} (${subFolderPath.replace(wsFolder?.fsPath || '', '')})`,
path: subFolderPath
});
}
}
}
folders.forEach((folder) => {
if (!folder.title) {
folder.title = basename(folder.path);
}
@@ -362,18 +377,25 @@ export class Folders {
let folderPath: string | undefined = Folders.absWsFolder(folder, wsFolder);
if (folderPath.includes(`{{`) && folderPath.includes(`}}`)) {
const dateFormat = Settings.get(SETTING_DATE_FORMAT) as string;
folderPath = processKnownPlaceholders(folderPath, undefined, dateFormat);
folderPath = processTimePlaceholders(folderPath, dateFormat);
} else {
if (folderPath && !existsSync(folderPath)) {
Notifications.errorShowOnce(
`Folder "${folder.title} (${folder.path})" does not exist. Please remove it from the settings.`,
'Remove folder',
'Create folder'
).then((answer) => {
if (answer === 'Remove folder') {
const folders = Folders.get();
l10n.t(
LocalizationKey.commandsFoldersGetNotificationErrorTitle,
`${folder.title} (${folder.path})`
),
l10n.t(LocalizationKey.commandsFoldersGetNotificationErrorRemoveAction),
l10n.t(LocalizationKey.commandsFoldersGetNotificationErrorCreateAction)
).then(async (answer) => {
if (
answer === l10n.t(LocalizationKey.commandsFoldersGetNotificationErrorRemoveAction)
) {
const folders = await Folders.get();
Folders.update(folders.filter((f) => f.path !== folder.path));
} else if (answer === 'Create folder') {
} else if (
answer === l10n.t(LocalizationKey.commandsFoldersGetNotificationErrorCreateAction)
) {
mkdirAsync(folderPath as string, { recursive: true });
}
});
@@ -381,14 +403,65 @@ export class Folders {
}
}
return {
...folder,
originalPath: folder.path,
path: folderPath
};
// Check i18n
if (folder.defaultLocale && (folder.locales || i18nSettings)) {
const i18nConfig =
folder.locales && folder.locales.length > 0 ? folder.locales : i18nSettings;
let defaultLocale;
let sourcePath = folderPath;
let localeFolders: ContentFolder[] = [];
if (i18nConfig && i18nConfig.length > 0) {
for (const i18n of i18nConfig) {
if (i18n.locale === folder.defaultLocale) {
defaultLocale = i18n;
} else if (i18n.locale !== folder.defaultLocale && i18n.path) {
localeFolders.push({
...folder,
title: folder.title,
originalPath: folder.path,
locale: i18n.locale,
localeTitle: i18n?.title || i18n.locale,
localeSourcePath: sourcePath,
path: parseWinPath(join(folderPath, i18n.path))
});
}
}
}
contentFolders.push({
...folder,
title: folder.title,
locale: folder.defaultLocale,
localeTitle: defaultLocale?.title || folder.defaultLocale,
originalPath: folder.path,
localeSourcePath: sourcePath,
path: parseWinPath(join(folderPath, defaultLocale?.path || ''))
});
contentFolders.push(...localeFolders);
} else {
contentFolders.push({
...folder,
locale: folder.defaultLocale,
originalPath: folder.path,
path: folderPath
});
}
});
return contentFolders.filter((folder) => folder !== null) as ContentFolder[];
Logger.verbose('Folders:get:end');
Folders._folders = contentFolders.filter((folder) => folder !== null) as ContentFolder[];
return Folders._folders;
}
/**
* Get the cached folder settings
* @returns {ContentFolder[]} - The cached folder settings
*/
public static getCached(): ContentFolder[] {
return Folders._folders;
}
/**
@@ -396,8 +469,13 @@ export class Folders {
* @param folders
*/
public static async update(folders: ContentFolder[]) {
const originalFolders = Settings.get(SETTING_CONTENT_PAGE_FOLDERS) as ContentFolder[];
const wsFolder = Folders.getWorkspaceFolder();
// Filter out the locale folders
folders = folders.filter((folder) => !folder.locale || folder.locale === folder.defaultLocale);
// Remove the internal FM properties
const folderDetails = folders
.map((folder) => {
const detail = {
@@ -405,17 +483,29 @@ export class Folders {
path: Folders.relWsFolder(folder, wsFolder)
};
if (detail['$schema'] || detail.extended) {
return null;
delete detail['$schema'];
delete detail.extended;
if (detail.locale && detail.locale === detail.defaultLocale) {
// Check if the folder was on the original list
const originalFolder = originalFolders.find((f) => f.path === folder.originalPath);
if (originalFolder && !originalFolder.locales && folder.locales) {
delete detail.locales;
}
delete detail.localeSourcePath;
delete detail.localeTitle;
}
delete detail.locale;
delete detail.originalPath;
return detail;
})
.filter((folder) => folder !== null);
await Settings.update(SETTING_CONTENT_PAGE_FOLDERS, folderDetails, true);
await Settings.safeUpdate(SETTING_CONTENT_PAGE_FOLDERS, folderDetails, true);
// Reinitialize the folder listeners
PagesListener.startWatchers();
@@ -428,10 +518,14 @@ export class Folders {
*/
public static getAbsFilePath(filePath: string): string {
const wsFolder = Folders.getWorkspaceFolder();
const isWindows = process.platform === 'win32';
let absPath = filePath.replace(WORKSPACE_PLACEHOLDER, parseWinPath(wsFolder?.fsPath || ''));
absPath = isWindows ? absPath.split('/').join('\\') : absPath;
return parseWinPath(absPath);
if (filePath.includes(WORKSPACE_PLACEHOLDER)) {
let absPath = filePath.replace(WORKSPACE_PLACEHOLDER, parseWinPath(wsFolder?.fsPath || ''));
absPath = isWindows() ? absPath.split('/').join('\\') : absPath;
return parseWinPath(absPath);
}
return parseWinPath(join(parseWinPath(wsFolder?.fsPath || ''), filePath));
}
/**
@@ -441,7 +535,6 @@ export class Folders {
*/
public static getAbsFolderPath(folderPath: string): string {
const wsFolder = Folders.getWorkspaceFolder();
const isWindows = process.platform === 'win32';
let absPath = '';
if (folderPath.includes(WORKSPACE_PLACEHOLDER)) {
@@ -450,7 +543,7 @@ export class Folders {
absPath = join(parseWinPath(wsFolder?.fsPath || ''), folderPath);
}
absPath = isWindows ? absPath.split('/').join('\\') : absPath;
absPath = isWindows() ? absPath.split('/').join('\\') : absPath;
return parseWinPath(absPath);
}
@@ -461,14 +554,13 @@ export class Folders {
* @returns
*/
private static absWsFolder(folder: ContentFolder, wsFolder?: Uri) {
const isWindows = process.platform === 'win32';
let absPath = folder.path.replace(WORKSPACE_PLACEHOLDER, parseWinPath(wsFolder?.fsPath || ''));
if (absPath.includes('../')) {
absPath = join(absPath);
}
absPath = isWindows ? absPath.split('/').join('\\') : absPath;
absPath = isWindows() ? absPath.split('/').join('\\') : absPath;
return parseWinPath(absPath);
}
@@ -480,12 +572,11 @@ export class Folders {
* @returns
*/
public static relWsFolder(folder: ContentFolder, wsFolder?: Uri) {
const isWindows = process.platform === 'win32';
let absPath = parseWinPath(folder.path).replace(
parseWinPath(wsFolder?.fsPath || ''),
WORKSPACE_PLACEHOLDER
);
absPath = isWindows ? absPath.split('\\').join('/') : absPath;
absPath = isWindows() ? absPath.split('\\').join('/') : absPath;
return absPath;
}
@@ -493,8 +584,14 @@ export class Folders {
* Find the content folders
*/
public static async getContentFolders() {
Logger.verbose('Folders:getContentFolders:start');
// Find folders that contain files
const wsFolder = Folders.getWorkspaceFolder();
if (!wsFolder) {
Logger.error('Folders:getContentFolders:workspaceFolderNotFound');
return [];
}
const supportedFiles =
Settings.get<string[]>(SETTING_CONTENT_SUPPORTED_FILETYPES) || DEFAULT_FILE_TYPES;
const patterns = supportedFiles.map(
@@ -512,7 +609,7 @@ export class Folders {
folders = [...folders, ...(await this.findFolders(pattern))];
} catch (e) {
Logger.error(
`Something went wrong while searching for folders with pattern "${pattern}": ${
`Folders:getContentFolders:error: Something went wrong while searching for folders with pattern "${pattern}": ${
(e as Error).message
}`
);
@@ -525,6 +622,8 @@ export class Folders {
}
const uniqueFolders = [...new Set(folders)];
Logger.verbose('Folders:getContentFolders:end');
return uniqueFolders.map((folder) => relative(wsFolder?.path || '', folder));
}
@@ -533,8 +632,8 @@ export class Folders {
* @param folderPath
* @returns
*/
public static getFilePrefixByFolderPath(folderPath: string) {
const folders = Folders.get();
public static async getFilePrefixByFolderPath(folderPath: string) {
const folders = await Folders.get();
const pageFolder = folders.find((f) => parseWinPath(f.path) === parseWinPath(folderPath));
if (pageFolder && typeof pageFolder.filePrefix !== 'undefined') {
@@ -549,8 +648,8 @@ export class Folders {
* @param filePath
* @returns
*/
public static getFilePrefixBeFilePath(filePath: string) {
const folders = Folders.get();
public static async getFilePrefixBeFilePath(filePath: string): Promise<string | undefined> {
const folders = await Folders.get();
if (folders.length > 0) {
filePath = parseWinPath(filePath);
@@ -572,19 +671,179 @@ export class Folders {
return;
}
/**
* Retrieves the page folder that matches the given file path.
*
* @param filePath - The file path to match against the page folders.
* @returns The page folder that matches the file path, or undefined if no match is found.
*/
public static async getPageFolderByFilePath(
filePath: string
): Promise<ContentFolder | undefined> {
const folders = Folders.getCached();
const parsedPath = parseWinPath(filePath);
const pageFolderMatches = folders
.filter((folder) => parsedPath && folder.path && parsedPath.includes(folder.path))
.sort((a, b) => b.path.length - a.path.length);
if (pageFolderMatches.length > 0 && pageFolderMatches[0]) {
return pageFolderMatches[0];
}
return;
}
/**
* Retrieves the folder associated with the specified content type and file path.
* If a single matching folder is found, it is returned. If multiple matching folders are found,
* the user is prompted to select one. If no matching folders are found, the user is prompted to
* select a folder with a preview path.
*
* @param contentType - The content type to match.
* @param filePath - The file path to match.
* @returns A Promise that resolves to the selected ContentFolder, or undefined if no matching folder is found.
*/
public static async getFolderByContentType(
contentType: ContentType,
filePath: string
): Promise<ContentFolder | undefined> {
if (!contentType) {
return;
}
const folders = Folders.getCached();
let selectedFolder: ContentFolder | undefined;
// Try to find the folder by content type
let crntFolders = folders.filter(
(folder) =>
folder.contentTypes?.includes((contentType as ContentType).name) && folder.previewPath
);
// Use file path to find the folder
if (crntFolders.length > 0) {
crntFolders = crntFolders.filter((folder) => filePath?.startsWith(folder.path));
}
if (crntFolders && crntFolders.length === 1) {
selectedFolder = crntFolders[0];
} else if (crntFolders && crntFolders.length > 1) {
selectedFolder = await Preview.askUserToPickFolder(crntFolders);
} else {
selectedFolder = await Preview.askUserToPickFolder(folders.filter((f) => f.previewPath));
}
return selectedFolder;
}
/**
* Retrieves the file stats for a given file.
* @param file - The URI of the file.
* @param folderPath - The path of the folder containing the file.
* @returns An object containing the file path, file name, folder name, folder path, and file stats.
*/
public static async getFileStats(file: Uri, folderPath: string) {
const fileName = basename(file.fsPath);
const folderName = dirname(file.fsPath).split(sep).pop();
const stats = await workspace.fs.stat(file);
return {
filePath: file.fsPath,
fileName,
folderName,
folderPath,
...stats
};
}
private static async getFilesByFolder(
folder: ContentFolder,
supportedFiles: string[] | undefined,
limit?: number
): Promise<FolderInfo | undefined> {
try {
const folderPath = parseWinPath(folder.path);
const folderUri = Uri.file(folderPath);
if (typeof folderPath === 'string') {
let files: Uri[] = [];
for (const fileType of supportedFiles || DEFAULT_FILE_TYPES) {
let filePath = join(
folderPath,
folder.excludeSubdir ? '/' : '**',
`*${fileType.startsWith('.') ? '' : '.'}${fileType}`
);
if (folderPath === '' && folder.excludeSubdir) {
filePath = `*${fileType.startsWith('.') ? '' : '.'}${fileType}`;
}
let foundFiles = await Folders.findFiles(filePath);
// Make sure these file are coming from the folder path (this could be an issue in multi-root workspaces)
foundFiles = foundFiles.filter((f) =>
parseWinPath(f.fsPath).startsWith(parseWinPath(folderUri.fsPath))
);
files = [...files, ...foundFiles];
}
if (files) {
let fileStats: FileInfo[] = [];
for (const file of files) {
try {
const fileInfo = await Folders.getFileStats(file, folderPath);
fileStats.push(fileInfo);
} catch (error) {
// Skip the file
}
}
fileStats = fileStats.sort((a, b) => b.mtime - a.mtime);
if (limit) {
fileStats = fileStats.slice(0, limit);
}
return {
title: folder.title,
path: folderPath,
files: files.length,
lastModified: fileStats,
locale: folder.locale,
localeTitle: folder.localeTitle
};
}
}
} catch (e) {
// Skip the current folder
}
return;
}
/**
* Retrieve all content folders
* @param pattern
* @returns
*/
private static findFolders(pattern: string): Promise<string[]> {
return new Promise((resolve) => {
glob(pattern, { ignore: '**/node_modules/**' }, (err, files) => {
const allFolders = files.map((file) => dirname(file));
const uniqueFolders = [...new Set(allFolders)];
resolve(uniqueFolders);
});
});
private static async findFolders(pattern: string): Promise<string[]> {
Logger.verbose(`Folders:findFolders:start - ${pattern}`);
try {
pattern = isWindows() ? parseWinPath(pattern) : pattern;
const files = await glob(pattern, { ignore: '**/node_modules/**', dot: true });
const allFolders = (files || []).map((file) => dirname(file));
const uniqueFolders = [...new Set(allFolders)];
Logger.verbose(`Folders:findFolders:end - ${uniqueFolders.length}`);
return uniqueFolders;
} catch (e) {
Logger.error(`Folders:findFolders:error - ${(e as Error).message}`);
return [];
}
}
/**
@@ -593,11 +852,17 @@ export class Folders {
* @returns
*/
private static async findFiles(pattern: string): Promise<Uri[]> {
return new Promise((resolve) => {
glob(pattern, { ignore: '**/node_modules/**' }, (err, files) => {
const allFiles = files.map((file) => Uri.file(file));
resolve(allFiles);
});
});
Logger.verbose(`Folders:findFiles:start - ${pattern}`);
try {
pattern = isWindows() ? parseWinPath(pattern) : pattern;
const files = await glob(pattern, { ignore: '**/node_modules/**', dot: true });
const allFiles = (files || []).map((file) => Uri.file(file));
Logger.verbose(`Folders:findFiles:end - ${allFiles.length}`);
return allFiles;
} catch (e) {
Logger.error(`Folders:findFiles:error - ${(e as Error).message}`);
return [];
}
}
}

View File

@@ -1,6 +1,3 @@
import { processFmPlaceholders } from './../helpers/processFmPlaceholders';
import { processPathPlaceholders } from './../helpers/processPathPlaceholders';
import { Telemetry } from './../helpers/Telemetry';
import {
SETTING_PREVIEW_HOST,
SETTING_PREVIEW_PATHNAME,
@@ -8,21 +5,34 @@ import {
TelemetryEvent,
PreviewCommands,
SETTING_EXPERIMENTAL,
SETTING_DATE_FORMAT
SETTING_DATE_FORMAT,
GeneralCommands,
SETTING_PREVIEW_TRAILING_SLASH
} from './../constants';
import { ArticleHelper } from './../helpers/ArticleHelper';
import { join, parse } from 'path';
import { commands, env, Uri, ViewColumn, window, WebviewPanel } from 'vscode';
import { Extension, parseWinPath, processKnownPlaceholders, Settings } from '../helpers';
import { commands, env, Uri, ViewColumn, window, WebviewPanel, extensions } from 'vscode';
import {
ArticleHelper,
Extension,
parseWinPath,
processI18nPlaceholders,
processTimePlaceholders,
processFmPlaceholders,
processPathPlaceholders,
Settings,
Telemetry,
processDateTimePlaceholders
} from '../helpers';
import { ContentFolder, ContentType, PreviewSettings } from '../models';
import { format } from 'date-fns';
import { DateHelper } from '../helpers/DateHelper';
import { Article } from '.';
import { urlJoin } from 'url-join-ts';
import { WebviewHelper } from '@estruyf/vscode';
import { Folders } from './Folders';
import { DataListener } from '../listeners/panel';
import { ParsedFrontMatter } from '../parsers';
import { getLocalizationFile } from '../utils/getLocalizationFile';
import * as l10n from '@vscode/l10n';
import { LocalizationKey } from '../localization';
import { joinUrl } from '../utils';
import { i18n } from './i18n';
export class Preview {
public static filePath: string | undefined = undefined;
@@ -46,22 +56,33 @@ export class Preview {
return;
}
const browserLiteCommand = await this.getBrowserLiteCommand();
const editor = window.activeTextEditor;
const crntFilePath = editor?.document.uri.fsPath;
this.filePath = crntFilePath;
if (crntFilePath && this.webviews[crntFilePath]) {
if (crntFilePath && this.webviews[crntFilePath] && !browserLiteCommand) {
this.webviews[crntFilePath].reveal();
return;
}
const article = editor ? ArticleHelper.getFrontMatter(editor) : null;
const slug = await this.getContentSlug(article, editor?.document.uri.fsPath);
const localhostUrl = await this.getLocalServerUrl();
if (browserLiteCommand) {
const pageUrl = joinUrl(localhostUrl.toString(), slug || '');
commands.executeCommand(browserLiteCommand, pageUrl);
return;
}
// Create the preview webview
const webView = window.createWebviewPanel(
'frontMatterPreview',
article?.data?.title ? `Preview: ${article?.data?.title}` : 'FrontMatter Preview',
article?.data?.title
? l10n.t(LocalizationKey.commandsPreviewPanelTitle, article?.data.title)
: 'Front Matter Preview',
{
viewColumn: ViewColumn.Beside,
preserveFocus: true
@@ -80,36 +101,36 @@ export class Preview {
light: Uri.file(join(extensionPath, 'assets/icons/frontmatter-short-light.svg'))
};
const localhostUrl = await this.getLocalServerUrl();
const cspSource = webView.webview.cspSource;
webView.onDidDispose(() => {
this.filePath = undefined;
if (crntFilePath) {
if (crntFilePath && this.webviews[crntFilePath]) {
delete this.webviews[crntFilePath];
}
webView.dispose();
});
webView.onDidChangeViewState(async (e) => {
if (e.webviewPanel.visible) {
this.filePath = crntFilePath;
if (crntFilePath) {
const article = await ArticleHelper.getFrontMatterByPath(crntFilePath);
DataListener.pushMetadata(article?.data);
}
}
});
webView.webview.onDidReceiveMessage((message) => {
webView.webview.onDidReceiveMessage(async (message) => {
switch (message.command) {
case PreviewCommands.toVSCode.open:
if (message.data) {
commands.executeCommand('vscode.open', message.data);
if (message.payload) {
commands.executeCommand('vscode.open', message.payload);
}
return;
case GeneralCommands.toVSCode.getLocalization:
const { requestId } = message;
if (!requestId) {
return;
}
const fileContents = await getLocalizationFile();
webView.webview.postMessage({
command: GeneralCommands.toVSCode.getLocalization,
requestId,
payload: fileContents
});
return;
}
});
@@ -163,7 +184,7 @@ export class Preview {
<title>Front Matter Preview</title>
</head>
<body style="width:100%;height:100%;margin:0;padding:0;overflow:hidden">
<div id="app" data-type="preview" data-url="${urlJoin(
<div id="app" data-type="preview" data-url="${joinUrl(
localhostUrl.toString(),
slug || ''
)}" data-isProd="${isProd}" data-environment="${
@@ -185,7 +206,7 @@ export class Preview {
* @param filePath
* @param slug
*/
public static async updatePageUrl(filePath: string, slug?: string) {
public static async updatePageUrl(filePath: string, _: string) {
const webView = this.webviews[filePath];
if (webView) {
const localhost = await this.getLocalServerUrl();
@@ -194,7 +215,7 @@ export class Preview {
webView.webview.postMessage({
command: PreviewCommands.toWebview.updateUrl,
payload: urlJoin(localhost.toString(), slug || '')
payload: joinUrl(localhost.toString(), slug || '')
});
}
}
@@ -205,8 +226,8 @@ export class Preview {
* @param filePath
* @returns
*/
private static async getContentSlug(
article: ParsedFrontMatter | null,
public static async getContentSlug(
article: ParsedFrontMatter | null | undefined,
filePath?: string
): Promise<string | undefined> {
if (!filePath) {
@@ -223,41 +244,18 @@ export class Preview {
let contentType: ContentType | undefined = undefined;
if (article?.data) {
contentType = ArticleHelper.getContentType(article.data);
contentType = await ArticleHelper.getContentType(article);
}
// Check if there is a pathname defined on content folder level
const folders = Folders.get();
if (folders.length > 0) {
const foldersWithPath = folders.filter((folder) => folder.previewPath);
// Get the folder of the article by the file path
selectedFolder = await Folders.getPageFolderByFilePath(filePath);
for (const folder of foldersWithPath) {
const folderPath = parseWinPath(folder.path);
if (filePath.startsWith(folderPath)) {
if (!selectedFolder || selectedFolder.path.length < folderPath.length) {
selectedFolder = folder;
}
}
}
if (!selectedFolder && contentType) {
selectedFolder = await Folders.getFolderByContentType(contentType, filePath);
}
if (!selectedFolder && article?.data && contentType && !contentType.previewPath) {
// Try to find the folder by content type
const crntFolders = folders.filter((folder) =>
folder.contentTypes?.includes((contentType as ContentType).name)
);
if (crntFolders && crntFolders.length === 1) {
selectedFolder = crntFolders[0];
} else if (crntFolders && crntFolders.length > 1) {
selectedFolder = await Preview.askUserToPickFolder(crntFolders);
} else {
selectedFolder = await Preview.askUserToPickFolder(folders.filter((f) => f.previewPath));
}
}
if (selectedFolder && selectedFolder.previewPath) {
pathname = selectedFolder.previewPath;
}
if (selectedFolder && selectedFolder.previewPath) {
pathname = selectedFolder.previewPath;
}
// Check if there is a pathname defined on content type level
@@ -268,13 +266,18 @@ export class Preview {
}
if (!slug) {
slug = Article.getSlug();
slug = Article.getSlug(pathname);
}
const locale = await i18n.getLocale(filePath);
if (locale && locale.path === slug) {
slug = '';
}
if (pathname) {
// Known placeholders
const dateFormat = Settings.get(SETTING_DATE_FORMAT) as string;
pathname = processKnownPlaceholders(pathname, article?.data?.title, dateFormat);
pathname = processTimePlaceholders(pathname, dateFormat);
// Custom placeholders
pathname = await ArticleHelper.processCustomPlaceholders(
@@ -290,22 +293,27 @@ export class Preview {
const folderPath = wsFolder ? parseWinPath(wsFolder.fsPath) : '';
const relativePath = filePath.replace(folderPath, '');
pathname = processPathPlaceholders(pathname, relativePath, filePath, selectedFolder);
pathname = processI18nPlaceholders(pathname, selectedFolder);
const file = parse(filePath);
if (file.name.toLowerCase() === 'index' && pathname.endsWith(slug)) {
slug = '';
if (file.name.toLowerCase() === 'index') {
const cleanPathName = pathname.endsWith('/')
? pathname.substring(0, pathname.length - 1)
: pathname;
if (cleanPathName.endsWith(slug) || !pathname || pathname === '/') {
slug = '';
}
}
}
// Support front matter placeholders - {{fm.<field>}}
pathname = processFmPlaceholders(pathname, article?.data);
pathname = article?.data ? processFmPlaceholders(pathname, article?.data) : pathname;
try {
const articleDate = ArticleHelper.getDate(article);
slug = join(
format(articleDate || new Date(), DateHelper.formatUpdate(pathname) as string),
slug
);
const articleDate = await ArticleHelper.getDate(article);
pathname = processDateTimePlaceholders(pathname, dateFormat, articleDate);
slug = join(pathname, slug);
} catch (error) {
slug = join(pathname, slug);
}
@@ -319,7 +327,41 @@ export class Preview {
slug = slug.substring(0, slug.endsWith('_index') ? slug.length - 6 : slug.length - 5);
}
return slug;
// Add the trailing slash
let trailingSlash = false;
if (settings.trailingSlash !== undefined) {
trailingSlash = settings.trailingSlash;
}
if (selectedFolder && selectedFolder.trailingSlash !== undefined) {
trailingSlash = selectedFolder.trailingSlash;
}
if (contentType && contentType.trailingSlash !== undefined) {
trailingSlash = contentType.trailingSlash;
}
if (trailingSlash && !slug.endsWith('/')) {
slug = `${slug}/`;
}
return join(slug);
}
/**
* Check if Browser Lite is installed
*/
private static async getBrowserLiteCommand() {
const ext = extensions.getExtension(`antfu.browse-lite`);
if (ext && ext.packageJSON) {
const hasCommand = ext.packageJSON.contributes?.commands?.find(
(c: { command: string }) => c.command === 'browse-lite.open'
);
if (hasCommand) {
return 'browse-lite.open';
}
}
return undefined;
}
/**
@@ -339,10 +381,12 @@ export class Preview {
public static getSettings(): PreviewSettings {
const host = Settings.get<string>(SETTING_PREVIEW_HOST);
const pathname = Settings.get<string>(SETTING_PREVIEW_PATHNAME);
const trailingSlash = Settings.get<boolean>(SETTING_PREVIEW_TRAILING_SLASH);
return {
host,
pathname
pathname,
trailingSlash
};
}
@@ -351,7 +395,7 @@ export class Preview {
* @param crntFolders
* @returns
*/
private static async askUserToPickFolder(
public static async askUserToPickFolder(
crntFolders: ContentFolder[]
): Promise<ContentFolder | undefined> {
let selectedFolder: ContentFolder | undefined = undefined;
@@ -364,7 +408,7 @@ export class Preview {
const folderNames = crntFolders.map((folder) => folder.title);
const selectedFolderName = await window.showQuickPick(folderNames, {
canPickMany: false,
title: 'Select the folder of the article to preview'
title: l10n.t(LocalizationKey.commandsPreviewAskUserToPickFolderTitle)
});
if (selectedFolderName) {

View File

@@ -21,6 +21,8 @@ import {
} from '../constants';
import { SettingsListener } from '../listeners/dashboard';
import { existsAsync, writeFileAsync } from '../utils';
import * as l10n from '@vscode/l10n';
import { LocalizationKey } from '../localization';
export class Project {
private static content = `---
@@ -40,11 +42,30 @@ categories: []
const ext = Extension.getInstance();
const subscriptions = ext.subscriptions;
// Initialize command
subscriptions.push(
commands.registerCommand(COMMAND_NAME.init, async (cb: Function) => {
await Project.init();
if (cb) {
cb();
}
})
);
subscriptions.push(
commands.registerCommand(COMMAND_NAME.initTemplate, () => Project.createSampleTemplate(true))
);
subscriptions.push(commands.registerCommand(COMMAND_NAME.registerFolder, Folders.register));
subscriptions.push(commands.registerCommand(COMMAND_NAME.unregisterFolder, Folders.unregister));
subscriptions.push(commands.registerCommand(COMMAND_NAME.createFolder, Folders.addMediaFolder));
subscriptions.push(commands.registerCommand(COMMAND_NAME.switchProject, Project.switchProject));
}
public static isInitialized() {
const hasProjectFile = Settings.hasProjectFile();
public static async isInitialized() {
const hasProjectFile = await Settings.hasProjectFile();
// If it has a project file, initialize the media library
if (hasProjectFile) {
MediaLibrary.getInstance();
@@ -61,12 +82,12 @@ categories: []
await Settings.createTeamSettings();
// Add the default content type
await Settings.update(SETTING_TAXONOMY_CONTENT_TYPES, [DEFAULT_CONTENT_TYPE], true);
await Settings.safeUpdate(SETTING_TAXONOMY_CONTENT_TYPES, [DEFAULT_CONTENT_TYPE], true);
if (sampleTemplate !== undefined) {
await Project.createSampleTemplate();
} else {
Notifications.info('Project initialized successfully.');
Notifications.info(l10n.t(LocalizationKey.commandsProjectInitializeSuccess));
}
// Initialize the media library
@@ -89,10 +110,14 @@ categories: []
} catch (error: unknown) {
const err = error as Error;
Logger.error(`Project::init: ${err?.message || err}`);
Notifications.error(`Sorry, something went wrong - ${err?.message || err}`);
Notifications.errorWithOutput(l10n.t(LocalizationKey.commonError));
}
}
/**
* Project switcher
* @returns
*/
public static async switchProject() {
const projects = Settings.getProjects();
const project = await window.showQuickPick(
@@ -100,7 +125,7 @@ categories: []
{
canPickMany: false,
ignoreFocusOut: true,
title: 'Select a project to switch to'
title: l10n.t(LocalizationKey.commandsProjectSwitchProjectTitle)
}
);
@@ -136,7 +161,7 @@ categories: []
await writeFileAsync(article.fsPath, Project.content, {
encoding: 'utf-8'
});
Notifications.info('Sample template created.');
Notifications.info(l10n.t(LocalizationKey.commandsProjectCreateSampleTemplateInfo));
}
}

View File

@@ -1,33 +1,56 @@
import { TaxonomyHelper } from './../helpers/TaxonomyHelper';
import * as vscode from 'vscode';
import { TaxonomyType } from '../models';
import { EXTENSION_NAME } from '../constants';
import { ArticleHelper, FilesHelper } from '../helpers';
import { COMMAND_NAME, EXTENSION_NAME } from '../constants';
import { ArticleHelper, Extension, FilesHelper } from '../helpers';
import { FrontMatterParser } from '../parsers';
import { Notifications } from '../helpers/Notifications';
import * as l10n from '@vscode/l10n';
import { LocalizationKey } from '../localization';
export class Settings {
public static async registerCommands() {
const ext = Extension.getInstance();
const subscriptions = ext.subscriptions;
subscriptions.push(
vscode.commands.registerCommand(COMMAND_NAME.createTag, () => {
Settings.create(TaxonomyType.Tag);
})
);
subscriptions.push(
vscode.commands.registerCommand(COMMAND_NAME.createCategory, () => {
Settings.create(TaxonomyType.Category);
})
);
subscriptions.push(
vscode.commands.registerCommand(COMMAND_NAME.exportTaxonomy, Settings.export)
);
subscriptions.push(vscode.commands.registerCommand(COMMAND_NAME.remap, Settings.remap));
}
/**
* Create a new taxonomy
*
* @param type
*/
public static async create(type: TaxonomyType) {
const taxonomy = type === TaxonomyType.Tag ? 'tag' : 'category';
const newOption = await vscode.window.showInputBox({
prompt: `Insert the value of the ${
type === TaxonomyType.Tag ? 'tag' : 'category'
} that you want to add to your configuration.`,
placeHolder: `Name of the ${type === TaxonomyType.Tag ? 'tag' : 'category'}`,
prompt: l10n.t(LocalizationKey.commandsSettingsCreateInputPrompt, taxonomy),
placeHolder: l10n.t(LocalizationKey.commandsSettingsCreateInputPlaceholder, taxonomy),
ignoreFocusOut: true
});
if (newOption) {
let options = (await TaxonomyHelper.get(type)) || [];
const options = (await TaxonomyHelper.get(type)) || [];
if (options.find((o) => o === newOption)) {
Notifications.info(
`The provided ${type === TaxonomyType.Tag ? 'tag' : 'category'} already exists.`
);
Notifications.warning(l10n.t(LocalizationKey.commandsSettingsCreateWarning, taxonomy));
return;
}
@@ -35,15 +58,16 @@ export class Settings {
TaxonomyHelper.update(type, options);
// Ask if the new term needs to be added to the page
const addToPage = await vscode.window.showQuickPick(['yes', 'no'], {
canPickMany: false,
placeHolder: `Do you want to add the new ${
type === TaxonomyType.Tag ? 'tag' : 'category'
} to the page?`,
ignoreFocusOut: true
});
const addToPage = await vscode.window.showQuickPick(
[l10n.t(LocalizationKey.commonYes), l10n.t(LocalizationKey.commonNo)],
{
canPickMany: false,
placeHolder: l10n.t(LocalizationKey.commandsSettingsCreateQuickPickPlaceholder, taxonomy),
ignoreFocusOut: true
}
);
if (addToPage && addToPage === 'yes') {
if (addToPage && addToPage === l10n.t(LocalizationKey.commonYes)) {
const editor = vscode.window.activeTextEditor;
if (!editor) {
return;
@@ -54,7 +78,7 @@ export class Settings {
return;
}
const matterProp: string = type === TaxonomyType.Tag ? 'tags' : 'categories';
const matterProp: string = taxonomy;
// Add the selected options to the options array
if (article.data[matterProp]) {
const propData: string[] = article.data[matterProp];
@@ -83,7 +107,7 @@ export class Settings {
vscode.window.withProgress(
{
location: vscode.ProgressLocation.Notification,
title: `${EXTENSION_NAME}: exporting tags and categories`,
title: l10n.t(LocalizationKey.commandsSettingsExportProgressTitle, EXTENSION_NAME),
cancellable: false
},
async (progress) => {
@@ -146,7 +170,11 @@ export class Settings {
// Done
Notifications.info(
`Export completed. Tags: ${crntTags.length} - Categories: ${crntCategories.length}.`
l10n.t(
LocalizationKey.commandsSettingsExportProgressSuccess,
crntTags.length,
crntCategories.length
)
);
}
);
@@ -157,8 +185,8 @@ export class Settings {
*/
public static async remap() {
const taxType = await vscode.window.showQuickPick(['Tag', 'Category'], {
title: `Remap`,
placeHolder: `What do you want to remap?`,
title: l10n.t(LocalizationKey.commandsSettingsRemapQuickpickTitle),
placeHolder: l10n.t(LocalizationKey.commandsSettingsRemapQuickpickPlaceholder),
canPickMany: false,
ignoreFocusOut: true
});
@@ -168,15 +196,18 @@ export class Settings {
}
const type = taxType === 'Tag' ? TaxonomyType.Tag : TaxonomyType.Category;
const taxonomy = type === TaxonomyType.Tag ? 'tags' : 'categories';
const options = (await TaxonomyHelper.get(type)) || [];
if (!options || options.length === 0) {
Notifications.info(`No ${type === TaxonomyType.Tag ? 'tags' : 'categories'} configured.`);
Notifications.warning(
l10n.t(LocalizationKey.commandsSettingsRemapNoTaxonomyWarning, taxonomy)
);
return;
}
const selectedOption = await vscode.window.showQuickPick(options, {
placeHolder: `Select your ${type === TaxonomyType.Tag ? 'tags' : 'categories'} to insert`,
placeHolder: l10n.t(LocalizationKey.commandsSettingsRemapSelectTaxonomyPlaceholder, taxonomy),
canPickMany: false,
ignoreFocusOut: true
});
@@ -186,19 +217,23 @@ export class Settings {
}
const newOptionValue = await vscode.window.showInputBox({
prompt: `Specify the value of the ${
type === TaxonomyType.Tag ? 'tag' : 'category'
} with which you want to remap "${selectedOption}". Leave the input <blank> if you want to remove the ${
type === TaxonomyType.Tag ? 'tag' : 'category'
} from all articles.`,
placeHolder: `Name of the ${type === TaxonomyType.Tag ? 'tag' : 'category'}`,
prompt: l10n.t(
LocalizationKey.commandsSettingsRemapNewOptionInputPrompt,
taxonomy,
selectedOption
),
placeHolder: l10n.t(LocalizationKey.commandsSettingsRemapNewOptionInputPlaceholder, taxonomy),
ignoreFocusOut: true
});
if (!newOptionValue) {
const deleteAnswer = await vscode.window.showQuickPick(['yes', 'no'], {
canPickMany: false,
placeHolder: `Delete ${selectedOption} ${type === TaxonomyType.Tag ? 'tag' : 'category'}?`,
placeHolder: l10n.t(
LocalizationKey.commandsSettingsRemapDeletePlaceholder,
selectedOption,
taxonomy
),
ignoreFocusOut: true
});
if (deleteAnswer === 'no') {

View File

@@ -1,6 +1,7 @@
import { ParsedFrontMatter } from './../parsers/FrontMatterParser';
import {
CONTEXT,
EXTENSION_NAME,
NOTIFICATION_TYPE,
SETTING_SEO_DESCRIPTION_FIELD,
SETTING_SEO_DESCRIPTION_LENGTH,
@@ -16,6 +17,9 @@ import { DataListener } from '../listeners/panel';
import { commands } from 'vscode';
import { Field } from '../models';
import { Preview } from './Preview';
import * as l10n from '@vscode/l10n';
import { LocalizationKey } from '../localization';
import { i18n } from './i18n';
export class StatusListener {
/**
@@ -24,23 +28,12 @@ export class StatusListener {
* @param frontMatterSB
* @param collection
*/
public static async verify(
frontMatterSB: vscode.StatusBarItem,
collection: vscode.DiagnosticCollection
) {
const draftMsg = 'in draft';
const publishMsg = 'to publish';
const draft = ContentType.getDraftField();
if (!draft || draft.type !== 'boolean') {
frontMatterSB.hide();
}
public static async verify(collection: vscode.DiagnosticCollection) {
const editor = vscode.window.activeTextEditor;
let document = editor?.document;
if (!document) {
const filePath = Preview.filePath;
const filePath = Preview.filePath || ArticleHelper.getActiveFile();
if (filePath) {
document = await vscode.workspace.openTextDocument(vscode.Uri.file(filePath));
}
@@ -50,21 +43,14 @@ export class StatusListener {
try {
commands.executeCommand('setContext', CONTEXT.isValidFile, true);
// Check i18n
const isI18nEnabled = await i18n.isLocaleEnabled(document.uri.fsPath);
commands.executeCommand('setContext', CONTEXT.isI18nEnabled, isI18nEnabled);
const article = editor
? ArticleHelper.getFrontMatter(editor)
: await ArticleHelper.getFrontMatterByPath(document.uri.fsPath);
// Update the StatusBar based on the article draft state
if (article && typeof article.data['draft'] !== 'undefined') {
if (article.data['draft'] === true) {
frontMatterSB.text = `$(book) ${draftMsg}`;
frontMatterSB.show();
} else if (article.data['draft'] === false) {
frontMatterSB.text = `$(book) ${publishMsg}`;
frontMatterSB.show();
}
}
// Check SEO and required fields
if (article && article.data) {
collection.clear();
@@ -102,14 +88,13 @@ export class StatusListener {
}
} else {
commands.executeCommand('setContext', CONTEXT.isValidFile, false);
commands.executeCommand('setContext', CONTEXT.isI18nEnabled, false);
const panel = PanelProvider.getInstance();
if (panel && panel.visible) {
DataListener.pushMetadata(null);
}
}
frontMatterSB.hide();
}
/**
@@ -117,13 +102,13 @@ export class StatusListener {
* @param article
* @param collection
*/
private static verifyRequiredFields(
private static async verifyRequiredFields(
editor: vscode.TextEditor,
article: ParsedFrontMatter,
collection: vscode.DiagnosticCollection
) {
// Check for missing fields
const emptyFields = ContentType.findEmptyRequiredFields(article);
const emptyFields = await ContentType.findEmptyRequiredFields(article);
const fieldsToReport = [];
if (emptyFields && emptyFields.length > 0) {
@@ -159,12 +144,13 @@ export class StatusListener {
const diagnostic: vscode.Diagnostic = {
code: '',
message: `This ${fields
.map((f) => f.name)
.join('/')} field is required to contain a value.`,
message: l10n.t(
LocalizationKey.commandsStatusListenerVerifyRequiredFieldsDiagnosticEmptyField,
fields.map((f) => f.name).join('/')
),
range: new vscode.Range(posStart, posEnd),
severity: vscode.DiagnosticSeverity.Error,
source: 'Front Matter'
source: EXTENSION_NAME
};
requiredDiagnostics.push(diagnostic);
@@ -182,7 +168,10 @@ export class StatusListener {
Notifications.showIfNotDisabled(
NOTIFICATION_TYPE.requiredFieldValidation,
'ERROR_ONCE',
`The following fields are required to contain a value: ${fieldsToReport.join(', ')}`
l10n.t(
LocalizationKey.commandsStatusListenerVerifyRequiredFieldsNotificationError,
fieldsToReport.join(', ')
)
);
}
}

View File

@@ -2,12 +2,13 @@ import { Questions } from './../helpers/Questions';
import * as vscode from 'vscode';
import * as path from 'path';
import {
COMMAND_NAME,
SETTING_CONTENT_DEFAULT_FILETYPE,
SETTING_TEMPLATES_FOLDER,
TelemetryEvent
} from '../constants';
import { ArticleHelper, Settings } from '../helpers';
import { Article } from '.';
import { ArticleHelper, Extension, Settings } from '../helpers';
import { Article, Folders } from '.';
import { Notifications } from '../helpers/Notifications';
import { Project } from './Project';
import { ContentType } from '../helpers/ContentType';
@@ -16,8 +17,28 @@ import { PagesListener } from '../listeners/dashboard';
import { extname } from 'path';
import { Telemetry } from '../helpers/Telemetry';
import { writeFileAsync, copyFileAsync } from '../utils';
import * as l10n from '@vscode/l10n';
import { LocalizationKey } from '../localization';
export class Template {
public static async registerCommands() {
const ext = Extension.getInstance();
const subscriptions = ext.subscriptions;
subscriptions.push(
vscode.commands.registerCommand(COMMAND_NAME.createTemplate, Template.generate)
);
subscriptions.push(
vscode.commands.registerCommand(COMMAND_NAME.createFromTemplate, (folder: vscode.Uri) => {
const folderPath = Folders.getFolderPath(folder);
if (folderPath) {
Template.create(folderPath);
}
})
);
}
/**
* Generate a template
*/
@@ -31,27 +52,30 @@ export class Template {
const clonedArticle = Object.assign({}, article);
const titleValue = await vscode.window.showInputBox({
title: `Template title`,
prompt: `What name would you like to give your template?`,
placeHolder: `article`,
title: l10n.t(LocalizationKey.commandsTemplateGenerateInputTitle),
prompt: l10n.t(LocalizationKey.commandsTemplateGenerateInputPrompt),
placeHolder: l10n.t(LocalizationKey.commandsTemplateGenerateInputPlaceholder),
ignoreFocusOut: true
});
if (!titleValue) {
Notifications.warning(`You did not specify a template title.`);
Notifications.warning(l10n.t(LocalizationKey.commandsTemplateGenerateNoTitleWarning));
return;
}
const keepContents = await vscode.window.showQuickPick(['yes', 'no'], {
title: `Keep contents`,
canPickMany: false,
placeHolder: `Do you want to keep the contents for the template?`,
ignoreFocusOut: true
});
const keepContents = await vscode.window.showQuickPick(
[l10n.t(LocalizationKey.commonYes), l10n.t(LocalizationKey.commonNo)],
{
title: l10n.t(LocalizationKey.commandsTemplateGenerateKeepContentsTitle),
placeHolder: l10n.t(LocalizationKey.commandsTemplateGenerateKeepContentsPlaceholder),
canPickMany: false,
ignoreFocusOut: true
}
);
if (!keepContents) {
Notifications.warning(
`You did not pick any of the options for keeping the template its content.`
l10n.t(LocalizationKey.commandsTemplateGenerateKeepContentsNoOptionWarning)
);
return;
}
@@ -60,14 +84,16 @@ export class Template {
const templatePath = Project.templatePath();
if (templatePath) {
const fileContents = ArticleHelper.stringifyFrontMatter(
keepContents === 'no' ? '' : clonedArticle.content,
keepContents === l10n.t(LocalizationKey.commonNo) ? '' : clonedArticle.content,
clonedArticle.data
);
const templateFile = path.join(templatePath.fsPath, `${titleValue}.${fileType}`);
await writeFileAsync(templateFile, fileContents, { encoding: 'utf-8' });
Notifications.info(`Template created and is now available in your ${folder} folder.`);
Notifications.info(
l10n.t(LocalizationKey.commandsTemplateGenerateKeepContentsSuccess, folder)
);
}
}
}
@@ -79,7 +105,7 @@ export class Template {
const folder = Settings.get<string>(SETTING_TEMPLATES_FOLDER);
if (!folder) {
Notifications.warning(`No templates found.`);
Notifications.warning(l10n.t(LocalizationKey.commandsTemplateGetTemplatesWarning));
return;
}
@@ -96,26 +122,28 @@ export class Template {
const contentTypes = ContentType.getAll();
if (!folderPath) {
Notifications.warning(`Incorrect project folder path retrieved.`);
Notifications.warning(l10n.t(LocalizationKey.commandsTemplateCreateFolderPathWarning));
return;
}
const templates = await Template.getTemplates();
if (!templates || templates.length === 0) {
Notifications.warning(`No templates found.`);
Notifications.warning(l10n.t(LocalizationKey.commandsTemplateCreateNoTemplatesWarning));
return;
}
const selectedTemplate = await vscode.window.showQuickPick(
templates.map((t) => path.basename(t.fsPath)),
{
title: `Select a template`,
placeHolder: `Select the content template to use`,
title: l10n.t(LocalizationKey.commandsTemplateCreateSelectTemplateTitle),
placeHolder: l10n.t(LocalizationKey.commandsTemplateCreateSelectTemplatePlaceholder),
ignoreFocusOut: true
}
);
if (!selectedTemplate) {
Notifications.warning(`No template selected.`);
Notifications.warning(
l10n.t(LocalizationKey.commandsTemplateCreateSelectTemplateNoTemplateWarning)
);
return;
}
@@ -127,7 +155,9 @@ export class Template {
// Start the template read
const template = templates.find((t) => t.fsPath.endsWith(selectedTemplate));
if (!template) {
Notifications.warning(`Content template could not be found.`);
Notifications.warning(
l10n.t(LocalizationKey.commandsTemplateCreateSelectTemplateNotFoundWarning)
);
return;
}
@@ -152,9 +182,9 @@ export class Template {
await copyFileAsync(template.fsPath, newFilePath);
// Update the properties inside the template
let frontMatter = await ArticleHelper.getFrontMatterByPath(newFilePath);
const frontMatter = await ArticleHelper.getFrontMatterByPath(newFilePath);
if (!frontMatter) {
Notifications.warning(`Something failed when retrieving the newly created file.`);
Notifications.warning(l10n.t(LocalizationKey.commonError));
return;
}
@@ -165,11 +195,15 @@ export class Template {
newFilePath
);
frontMatter = Article.updateDate(frontMatter);
const article = await Article.updateDate(frontMatter);
if (!article) {
return;
}
await writeFileAsync(
newFilePath,
ArticleHelper.stringifyFrontMatter(frontMatter.content, frontMatter.data),
ArticleHelper.stringifyFrontMatter(article.content, article.data),
{ encoding: 'utf8' }
);
@@ -181,7 +215,7 @@ export class Template {
vscode.window.showTextDocument(txtDoc);
}
Notifications.info(`Your new content has been created.`);
Notifications.info(l10n.t(LocalizationKey.commandsTemplateCreateSuccess));
Telemetry.send(TelemetryEvent.createContentFromTemplate);

View File

@@ -1,6 +1,8 @@
import { commands, window, Selection, QuickPickItem, TextEditor } from 'vscode';
import { COMMAND_NAME, CONTEXT, SETTING_CONTENT_WYSIWYG } from '../constants';
import { Settings } from '../helpers';
import * as l10n from '@vscode/l10n';
import { LocalizationKey } from '../localization';
enum MarkupType {
bold = 1,
@@ -81,45 +83,45 @@ export class Wysiwyg {
commands.registerCommand(COMMAND_NAME.options, async () => {
const qpItems: QuickPickItem[] = [
{
label: '$(list-unordered) Unordered list',
detail: 'Add an unordered list',
label: `$(list-unordered) ${LocalizationKey.commandsWysiwygCommandUnorderedListLabel}`,
detail: LocalizationKey.commandsWysiwygCommandUnorderedListDetail,
alwaysShow: true
},
{
label: '$(list-ordered) Ordered list',
detail: 'Add an ordered list',
label: `$(list-ordered) ${LocalizationKey.commandsWysiwygCommandOrderedListLabel}`,
detail: LocalizationKey.commandsWysiwygCommandOrderedListDetail,
alwaysShow: true
},
{
label: '$(tasklist) Task list',
detail: 'Add a task list',
label: `$(tasklist) ${LocalizationKey.commandsWysiwygCommandTaskListLabel}`,
detail: LocalizationKey.commandsWysiwygCommandTaskListDetail,
alwaysShow: true
},
{
label: '$(code) Code',
detail: 'Add inline code snippet',
label: `$(code) ${LocalizationKey.commandsWysiwygCommandCodeLabel}`,
detail: LocalizationKey.commandsWysiwygCommandCodeDetail,
alwaysShow: true
},
{
label: '$(symbol-namespace) Code block',
detail: 'Add a code block',
label: `$(symbol-namespace) ${LocalizationKey.commandsWysiwygCommandCodeblockLabel}`,
detail: LocalizationKey.commandsWysiwygCommandCodeblockDetail,
alwaysShow: true
},
{
label: '$(quote) Blockquote',
detail: 'Add a blockquote',
label: `$(quote) ${LocalizationKey.commandsWysiwygCommandBlockquoteLabel}`,
detail: LocalizationKey.commandsWysiwygCommandBlockquoteDetail,
alwaysShow: true
},
{
label: '$(symbol-text) Strikethrough',
detail: 'Add a strikethrough',
label: `$(symbol-text) ${LocalizationKey.commandsWysiwygCommandStrikethroughLabel}`,
detail: LocalizationKey.commandsWysiwygCommandStrikethroughDetail,
alwaysShow: true
}
];
const option = await window.showQuickPick([...qpItems], {
title: 'WYSIWYG Options',
placeHolder: 'Which type of markup would you like to insert?',
title: l10n.t(LocalizationKey.commandsWysiwygQuickPickTitle),
placeHolder: l10n.t(LocalizationKey.commandsWysiwygQuickPickPlaceholder),
canPickMany: false,
ignoreFocusOut: true
});
@@ -209,17 +211,17 @@ export class Wysiwyg {
const linkText = hasTextSelection ? editor.document.getText(selection) : '';
const link = await window.showInputBox({
title: 'WYSIWYG Hyperlink',
placeHolder: 'Enter the URL',
prompt: 'Enter the URL',
title: l10n.t(LocalizationKey.commandsWysiwygAddHyperlinkHyperlinkInputTitle),
placeHolder: l10n.t(LocalizationKey.commandsWysiwygAddHyperlinkHyperlinkInputPrompt),
prompt: l10n.t(LocalizationKey.commandsWysiwygAddHyperlinkHyperlinkInputPrompt),
value: linkText,
ignoreFocusOut: true
});
const text = await window.showInputBox({
title: 'WYSIWYG Text',
prompt: 'Enter the text for the hyperlink',
placeHolder: 'Enter the text for the hyperlink',
title: l10n.t(LocalizationKey.commandsWysiwygAddHyperlinkTextInputTitle),
prompt: l10n.t(LocalizationKey.commandsWysiwygAddHyperlinkTextInputPrompt),
placeHolder: l10n.t(LocalizationKey.commandsWysiwygAddHyperlinkTextInputPrompt),
value: linkText,
ignoreFocusOut: true
});
@@ -278,9 +280,9 @@ export class Wysiwyg {
const headingLvl = await window.showQuickPick(
['Heading 1', 'Heading 2', 'Heading 3', 'Heading 4', 'Heading 5', 'Heading 6'],
{
title: 'Heading Level',
title: l10n.t(LocalizationKey.commandsWysiwygInsertTextHeadingInputTitle),
placeHolder: l10n.t(LocalizationKey.commandsWysiwygInsertTextHeadingInputPlaceholder),
canPickMany: false,
placeHolder: 'Which heading level do you want to insert?',
ignoreFocusOut: true
}
);

564
src/commands/i18n.ts Normal file
View File

@@ -0,0 +1,564 @@
import { ProgressLocation, Uri, commands, window, workspace } from 'vscode';
import {
ArticleHelper,
ContentType,
Extension,
FrameworkDetector,
Notifications,
Settings,
openFileInEditor,
parseWinPath
} from '../helpers';
import { COMMAND_NAME, SETTING_CONTENT_I18N } from '../constants';
import { ContentFolder, Field, I18nConfig, ContentType as IContentType } from '../models';
import { join, parse } from 'path';
import { existsAsync } from '../utils';
import { Folders } from '.';
import { ParsedFrontMatter } from '../parsers';
import { PagesListener } from '../listeners/dashboard';
import * as l10n from '@vscode/l10n';
import { LocalizationKey } from '../localization';
import { Translations } from '../services/Translations';
export class i18n {
private static processedFiles: {
[filePath: string]: { dir: string; filename: string; isPageBundle: boolean };
} = {};
/**
* Registers the i18n commands.
*/
public static register() {
const subscriptions = Extension.getInstance().subscriptions;
subscriptions.push(commands.registerCommand(COMMAND_NAME.i18n.create, i18n.create));
i18n.clearFiles();
}
/**
* Clear the processed files
*/
public static clearFiles() {
i18n.processedFiles = {};
}
/**
* Retrieves all the I18nConfig settings.
*
* @returns An array of I18nConfig settings.
*/
public static async getAll() {
const i18nSettings = Settings.get<I18nConfig[]>(SETTING_CONTENT_I18N) || [];
const folders = await Folders.get();
if (folders) {
for (const folder of folders) {
if (folder.locales) {
for (const locale of folder.locales) {
if (!i18nSettings.some((i18n) => i18n.locale === locale.locale)) {
i18nSettings.push(locale);
}
}
}
}
}
return i18nSettings;
}
/**
* Retrieves the I18nConfig settings from the application.
* @returns An array of I18nConfig objects if settings are found, otherwise undefined.
*/
public static async getSettings(filePath: string): Promise<I18nConfig[] | undefined> {
if (!filePath) {
return;
}
const i18nSettings = Settings.get<I18nConfig[]>(SETTING_CONTENT_I18N);
let pageFolder = await Folders.getPageFolderByFilePath(filePath);
if (!pageFolder) {
pageFolder = await i18n.getPageFolder(filePath);
}
if (!pageFolder || !pageFolder.locales) {
return i18nSettings;
}
return pageFolder.locales;
}
/**
* Checks if the locale is enabled for the given file path.
* @param filePath - The file path to check.
* @returns A promise that resolves to a boolean indicating whether the locale is enabled or not.
*/
public static async isLocaleEnabled(filePath: string): Promise<boolean> {
const i18nSettings = await i18n.getSettings(filePath);
if (!i18nSettings) {
return false;
}
const pageFolder = await Folders.getPageFolderByFilePath(filePath);
if (!pageFolder || !pageFolder.locale) {
return false;
}
return i18nSettings.some((i18n) => i18n.locale === pageFolder.locale);
}
/**
* Checks if the given file path corresponds to the default language.
* @param filePath - The file path to check.
* @returns True if the file path corresponds to the default language, false otherwise.
*/
public static async isDefaultLanguage(filePath: string): Promise<boolean> {
const i18nSettings = await i18n.getSettings(filePath);
if (!i18nSettings) {
return false;
}
const pageFolder = await Folders.getPageFolderByFilePath(filePath);
if (!pageFolder || !pageFolder.defaultLocale) {
return false;
}
const fileInfo = await i18n.getFileInfo(filePath);
if (pageFolder.path) {
if (pageFolder.locale) {
return pageFolder.locale === pageFolder.defaultLocale;
}
let pageFolderPath = parseWinPath(pageFolder.path);
if (!pageFolderPath.endsWith('/')) {
pageFolderPath += '/';
}
return (
parseWinPath(fileInfo.dir).toLowerCase() === parseWinPath(pageFolderPath).toLowerCase()
);
}
return false;
}
/**
* Retrieves the I18nConfig for a given file path.
* @param filePath - The path of the file.
* @returns The I18nConfig object if found, otherwise undefined.
*/
public static async getLocale(filePath: string): Promise<I18nConfig | undefined> {
const i18nSettings = await i18n.getSettings(filePath);
if (!i18nSettings) {
return;
}
let pageFolder = await Folders.getPageFolderByFilePath(filePath);
const fileInfo = await i18n.getFileInfo(filePath);
if (pageFolder && pageFolder.defaultLocale) {
let pageFolderPath = parseWinPath(pageFolder.path);
if (!pageFolderPath.endsWith('/')) {
pageFolderPath += '/';
}
if (
pageFolder.path &&
pageFolder.locale &&
parseWinPath(fileInfo.dir).toLowerCase() === parseWinPath(pageFolderPath).toLowerCase()
) {
return i18nSettings.find((i18n) => i18n.locale === pageFolder?.locale);
}
}
pageFolder = await i18n.getPageFolder(filePath);
if (!pageFolder) {
return;
}
for (const locale of i18nSettings) {
if (locale.path && pageFolder.defaultLocale !== locale.locale) {
const translation = join(pageFolder.path, locale.path, fileInfo.filename);
if (parseWinPath(translation).toLowerCase() === parseWinPath(filePath).toLowerCase()) {
return locale;
}
}
}
return;
}
/**
* Retrieves translations for a given file path.
* @param filePath - The path of the file for which translations are requested.
* @returns A promise that resolves to an object containing translations for each locale, or undefined if i18n settings are not available.
*/
public static async getTranslations(filePath: string): Promise<
| {
[locale: string]: {
locale: I18nConfig;
path: string;
};
}
| undefined
> {
const i18nSettings = await i18n.getSettings(filePath);
if (!i18nSettings) {
return;
}
const translations: {
[locale: string]: {
locale: I18nConfig;
path: string;
};
} = {};
let pageFolder = await Folders.getPageFolderByFilePath(filePath);
const fileInfo = await i18n.getFileInfo(filePath);
if (pageFolder && pageFolder.defaultLocale && pageFolder.localeSourcePath) {
for (const i18n of i18nSettings) {
const translation = join(pageFolder.localeSourcePath, i18n.path || '', fileInfo.filename);
if (await existsAsync(translation)) {
translations[i18n.locale] = {
locale: i18n,
path: translation
};
}
}
return translations;
}
pageFolder = await i18n.getPageFolder(filePath);
if (!pageFolder) {
return translations;
}
for (const i18n of i18nSettings) {
const translation = join(pageFolder.path, i18n.path || '', fileInfo.filename);
if (await existsAsync(translation)) {
translations[i18n.locale] = {
locale: i18n,
path: translation
};
}
}
return translations;
}
/**
* Creates a new content file for a specific locale based on the i18n configuration.
* If a file path is provided, the new content file will be created in the same directory.
* If no file path is provided, the active file in the editor will be used.
* @param filePath The path of the file where the new content file should be created.
*/
private static async create(fileUri?: Uri | string) {
if (!fileUri) {
const filePath = ArticleHelper.getActiveFile();
fileUri = filePath ? Uri.file(filePath) : undefined;
}
if (!fileUri) {
Notifications.warning(l10n.t(LocalizationKey.commandsI18nCreateWarningNoFileSelected));
return;
}
if (typeof fileUri === 'string') {
fileUri = Uri.file(fileUri);
}
const pageFolder = await Folders.getPageFolderByFilePath(fileUri.fsPath);
if (!pageFolder || !pageFolder.localeSourcePath) {
Notifications.error(l10n.t(LocalizationKey.commandsI18nCreateErrorNoContentFolder));
return;
}
const i18nSettings = await i18n.getSettings(fileUri.fsPath);
if (!i18nSettings) {
Notifications.warning(l10n.t(LocalizationKey.commandsI18nCreateWarningNoConfig));
return;
}
const sourceLocale = await i18n.getLocale(fileUri.fsPath);
if (!sourceLocale || !sourceLocale.locale) {
Notifications.warning(l10n.t(LocalizationKey.commandsI18nCreateErrorNoLocaleDefinition));
return;
}
const translations = (await i18n.getTranslations(fileUri.fsPath)) || {};
const targetLocales = i18nSettings.filter((i18nSetting) => {
return (
i18nSetting.path &&
i18nSetting.locale !== sourceLocale.locale &&
!translations[i18nSetting.locale]
);
});
if (targetLocales.length === 0) {
Notifications.warning(l10n.t(LocalizationKey.commandsI18nCreateErrorNoLocales));
return;
}
const locale = await window.showQuickPick(
targetLocales.map((i18n) => i18n.title || i18n.locale),
{
title: l10n.t(LocalizationKey.commandsI18nCreateQuickPickTitle),
placeHolder: l10n.t(LocalizationKey.commandsI18nCreateQuickPickPlaceHolder),
ignoreFocusOut: true
}
);
if (!locale) {
return;
}
const targetLocale = i18nSettings.find(
(i18n) => i18n.title === locale || i18n.locale === locale
);
if (!targetLocale || !targetLocale.path) {
Notifications.warning(l10n.t(LocalizationKey.commandsI18nCreateWarningNoConfig));
return;
}
let article = await ArticleHelper.getFrontMatterByPath(fileUri.fsPath);
if (!article) {
Notifications.warning(l10n.t(LocalizationKey.commandsI18nCreateWarningNoFile));
return;
}
const contentType = await ArticleHelper.getContentType(article);
if (!contentType) {
Notifications.warning(l10n.t(LocalizationKey.commandsI18nCreateWarningNoContentType));
return;
}
// Get the directory of the file
const fileInfo = parse(fileUri.fsPath);
let dir = fileInfo.dir;
let pageBundleDir = '';
if (await ArticleHelper.isPageBundle(fileUri.fsPath)) {
dir = ArticleHelper.getPageFolderFromBundlePath(fileUri.fsPath);
pageBundleDir = fileUri.fsPath.replace(dir, '');
pageBundleDir = join(parse(pageBundleDir).dir);
}
const i18nDir = join(pageFolder.localeSourcePath, targetLocale.path, pageBundleDir);
if (!(await existsAsync(i18nDir))) {
await workspace.fs.createDirectory(Uri.file(i18nDir));
}
article = await i18n.updateFrontMatter(
article,
fileUri.fsPath,
contentType,
sourceLocale,
targetLocale,
i18nDir
);
const newFilePath = join(i18nDir, fileInfo.base);
if (await existsAsync(newFilePath)) {
Notifications.error(l10n.t(LocalizationKey.commandsI18nCreateErrorFileExists));
return;
}
if (sourceLocale?.locale) {
article = await i18n.translate(article, sourceLocale, targetLocale);
}
const newFileUri = Uri.file(newFilePath);
await workspace.fs.writeFile(
newFileUri,
Buffer.from(ArticleHelper.stringifyFrontMatter(article.content, article.data))
);
await openFileInEditor(newFilePath);
PagesListener.refresh();
Notifications.info(
l10n.t(
LocalizationKey.commandsI18nCreateSuccessCreated,
sourceLocale.title || sourceLocale.locale
)
);
}
/**
* Translates the given article from the source locale to the target locale using DeepL translation service.
* @param article - The article to be translated.
* @param sourceLocale - The source locale configuration.
* @param targetLocale - The target locale configuration.
* @returns A promise that resolves to the translated article.
*/
private static async translate(
article: ParsedFrontMatter,
sourceLocale: I18nConfig,
targetLocale: I18nConfig
) {
return new Promise<ParsedFrontMatter>(async (resolve) => {
await window.withProgress(
{
location: ProgressLocation.Notification,
title: l10n.t(LocalizationKey.commandsI18nTranslateProgressTitle),
cancellable: false
},
async () => {
try {
const title = article.data.title || '';
const description = article.data.description || '';
const content = article.content || '';
const text = [title, description, content];
const translations = await Translations.translate(
text,
sourceLocale.locale,
targetLocale.locale
);
if (!translations || translations.length < 3) {
resolve(article);
return;
}
article.data.title = article.data.title ? translations[0] : '';
article.data.description = article.data.description ? translations[1] : '';
article.content = article.content ? translations[2] : '';
} catch (error) {
Notifications.error(`${(error as Error).message}`);
}
resolve(article);
}
);
});
}
/**
* Retrieves the filename and directory information from the given file path.
* If the file is a page bundle, the directory will be adjusted accordingly.
* @param filePath - The path of the file.
* @returns An object containing the filename and directory.
*/
private static async getFileInfo(filePath: string): Promise<{ filename: string; dir: string }> {
if (i18n.processedFiles[filePath]) {
return i18n.processedFiles[filePath];
}
const fileInfo = parse(filePath);
let filename = fileInfo.base;
let dir = fileInfo.dir;
const isPageBundle = await ArticleHelper.isPageBundle(filePath);
if (isPageBundle) {
dir = ArticleHelper.getPageFolderFromBundlePath(filePath);
filename = join(parseWinPath(filePath).replace(parseWinPath(dir), ''));
}
if (!dir.endsWith('/')) {
dir += '/';
}
i18n.processedFiles[filePath] = {
isPageBundle,
filename,
dir
};
return i18n.processedFiles[filePath];
}
/**
* Retrieves the page folder for a given file path.
*
* @param filePath - The path of the file.
* @returns A promise that resolves to the ContentFolder object representing the page folder, or undefined if not found.
*/
private static async getPageFolder(filePath: string): Promise<ContentFolder | undefined> {
const folders = await Folders.get();
const localeFolders = folders?.filter((folder) => folder.defaultLocale);
if (!localeFolders) {
return;
}
const fileInfo = await i18n.getFileInfo(filePath);
for (const folder of localeFolders) {
const defaultFile = join(folder.path, fileInfo.filename);
if (await existsAsync(defaultFile)) {
return folder;
}
}
}
/**
* Updates the front matter of an article with internationalization (i18n) support.
*
* @param article - The parsed front matter of the article.
* @param filePath - The path of the file containing the front matter.
* @param contentType - The content type of the article.
* @param sourceLocale - The source locale.
* @param targetLocale - The target locale.
* @param i18nDir - The directory where the i18n files are located.
* @returns A Promise that resolves to the updated parsed front matter.
*/
private static async updateFrontMatter(
article: ParsedFrontMatter,
filePath: string,
contentType: IContentType,
sourceLocale: I18nConfig,
targetLocale: I18nConfig,
i18nDir: string
): Promise<ParsedFrontMatter> {
const imageFields = ContentType.findFieldsByTypeDeep(contentType.fields, 'image');
if (imageFields.length > 0) {
article.data = await i18n.processImageFields(article.data, filePath, imageFields, i18nDir);
}
return article;
}
/**
* Processes the image fields in the provided data object.
* Replaces the image field values with the relative path to the image file.
*
* @param data - The data object containing the field values.
* @param filePath - The absolute file path of the data object.
* @param fields - The array of field arrays to process.
* @param i18nDir - The directory path for internationalization.
* @returns The updated data object with image field values replaced by relative paths.
*/
private static async processImageFields(
data: { [key: string]: any },
filePath: string,
fields: Field[][],
i18nDir: string
) {
for (const field of fields) {
if (!field) {
continue;
}
for (const f of field) {
if (f.type === 'image') {
const value = data[f.name];
if (value) {
let imgPath = FrameworkDetector.getAbsPathByFile(value, filePath);
imgPath = FrameworkDetector.getRelPathByFileDir(imgPath, i18nDir);
data[f.name] = imgPath;
}
}
}
}
return data;
}
}

View File

@@ -12,7 +12,7 @@ export const FeatureFlag: React.FunctionComponent<IFeatureFlagProps> = ({
alternative,
children
}: React.PropsWithChildren<IFeatureFlagProps>) => {
if (!features || (features.length > 0 && !features.includes(flag))) {
if (!features || features.length === 0 || (features.length > 0 && !features.includes(flag))) {
if (alternative) {
return alternative;
}

View File

@@ -0,0 +1,13 @@
import * as React from 'react';
export interface IArrowClockwiseIconProps {
className?: string;
}
export const ArrowClockwiseIcon: React.FunctionComponent<IArrowClockwiseIconProps> = ({ className }: React.PropsWithChildren<IArrowClockwiseIconProps>) => {
return (
<svg className={className || 'h-4 w-4'} fill="currentColor" aria-hidden="true" width="1em" height="1em" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
<path d="M3.07 9.05a7 7 0 0 1 12.55-3.22l.13.17H12.5a.5.5 0 1 0 0 1h4a.5.5 0 0 0 .5-.5v-4a.5.5 0 0 0-1 0v2.2a8 8 0 1 0 1.99 4.77.5.5 0 0 0-1 .08 7 7 0 1 1-13.92-.5Z" fill="currentColor"></path>
</svg>
);
};

View File

@@ -0,0 +1,13 @@
import * as React from 'react';
export interface IRenameIconProps {
className: string;
}
export const RenameIcon: React.FunctionComponent<IRenameIconProps> = ({
className
}: React.PropsWithChildren<IRenameIconProps>) => {
return (
<svg className={className} fill="currentColor" aria-hidden="true" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M8.5 2a.5.5 0 0 0 0 1h1v14h-1a.5.5 0 0 0 0 1h3a.5.5 0 0 0 0-1h-1V3h1a.5.5 0 0 0 0-1h-3Zm-4 2h4v1h-4C3.67 5 3 5.67 3 6.5v7c0 .83.67 1.5 1.5 1.5h4v1h-4A2.5 2.5 0 0 1 2 13.5v-7A2.5 2.5 0 0 1 4.5 4Zm11 11h-4v1h4a2.5 2.5 0 0 0 2.5-2.5v-7A2.5 2.5 0 0 0 15.5 4h-4v1h4c.83 0 1.5.67 1.5 1.5v7c0 .83-.67 1.5-1.5 1.5Z" fill="currentColor"></path></svg>
);
};

View File

@@ -0,0 +1,149 @@
"use client"
import * as React from "react"
import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu"
import { cn } from "../../utils/cn"
import { ChevronRightIcon } from "@heroicons/react/24/outline"
const DropdownMenu = DropdownMenuPrimitive.Root
const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger
const DropdownMenuGroup = DropdownMenuPrimitive.Group
const DropdownMenuPortal = DropdownMenuPrimitive.Portal
const DropdownMenuSub = DropdownMenuPrimitive.Sub
const DropdownMenuSubTrigger = React.forwardRef<
React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,
React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & {
inset?: boolean
}
>(({ className, inset, children, ...props }, ref) => (
<DropdownMenuPrimitive.SubTrigger
ref={ref}
className={cn(
"flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-[var(--vscode-list-hoverBackground)] data-[state=open]:bg-[var(--vscode-list-hoverBackground)]",
inset && "pl-8",
className
)}
{...props}
>
{children}
<ChevronRightIcon className="ml-auto h-4 w-4" />
</DropdownMenuPrimitive.SubTrigger>
))
DropdownMenuSubTrigger.displayName =
DropdownMenuPrimitive.SubTrigger.displayName
const DropdownMenuSubContent = React.forwardRef<
React.ElementRef<typeof DropdownMenuPrimitive.SubContent>,
React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>
>(({ className, ...props }, ref) => (
<DropdownMenuPrimitive.SubContent
ref={ref}
className={cn(
"z-50 min-w-[8rem] overflow-hidden rounded border border-[var(--frontmatter-border)] bg-[var(--vscode-sideBar-background)] p-1 text-[var(--vscode-editor-foreground)] shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
className
)}
{...props}
/>
))
DropdownMenuSubContent.displayName =
DropdownMenuPrimitive.SubContent.displayName
const DropdownMenuContent = React.forwardRef<
React.ElementRef<typeof DropdownMenuPrimitive.Content>,
React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>
>(({ className, sideOffset = 4, ...props }, ref) => (
<DropdownMenuPrimitive.Portal>
<DropdownMenuPrimitive.Content
ref={ref}
sideOffset={sideOffset}
className={cn(
"z-50 min-w-[8rem] rounded border border-[var(--frontmatter-border)] bg-[var(--vscode-sideBar-background)] p-1 text-[var(--vscode-editor-foreground)] shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 max-h-96 overflow-auto",
className
)}
{...props}
/>
</DropdownMenuPrimitive.Portal>
))
DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName
const DropdownMenuItem = React.forwardRef<
React.ElementRef<typeof DropdownMenuPrimitive.Item>,
React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {
inset?: boolean
}
>(({ className, inset, ...props }, ref) => (
<DropdownMenuPrimitive.Item
ref={ref}
className={cn(
"relative flex select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-[var(--vscode-list-hoverBackground)] data-[disabled]:pointer-events-none data-[disabled]:opacity-50 cursor-pointer disabled:opacity-50",
inset && "pl-8",
className
)}
{...props}
/>
))
DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName
const DropdownMenuLabel = React.forwardRef<
React.ElementRef<typeof DropdownMenuPrimitive.Label>,
React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & {
inset?: boolean
}
>(({ className, inset, ...props }, ref) => (
<DropdownMenuPrimitive.Label
ref={ref}
className={cn(
"px-2 py-1.5 text-sm font-semibold",
inset && "pl-8",
className
)}
{...props}
/>
))
DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName
const DropdownMenuSeparator = React.forwardRef<
React.ElementRef<typeof DropdownMenuPrimitive.Separator>,
React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>
>(({ className, ...props }, ref) => (
<DropdownMenuPrimitive.Separator
ref={ref}
className={cn("-mx-1 my-1 h-px bg-[var(--frontmatter-border)]", className)}
{...props}
/>
))
DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName
const DropdownMenuShortcut = ({
className,
...props
}: React.HTMLAttributes<HTMLSpanElement>) => {
return (
<span
className={cn("ml-auto text-xs tracking-widest opacity-60", className)}
{...props}
/>
)
}
DropdownMenuShortcut.displayName = "DropdownMenuShortcut"
export {
DropdownMenu,
DropdownMenuTrigger,
DropdownMenuContent,
DropdownMenuItem,
DropdownMenuLabel,
DropdownMenuSeparator,
DropdownMenuShortcut,
DropdownMenuGroup,
DropdownMenuPortal,
DropdownMenuSub,
DropdownMenuSubContent,
DropdownMenuSubTrigger,
}

View File

@@ -7,7 +7,7 @@ import { LabelField } from './LabelField';
export type BoolFieldProps = HTMLFieldProps<
boolean,
HTMLDivElement,
{ inputRef?: Ref<HTMLInputElement> }
{ inputRef?: Ref<HTMLInputElement>, description?: string }
>;
function Bool({
@@ -37,6 +37,12 @@ function Bool({
/>
<span className="field__toggle__slider"></span>
</label>
{
props.description && (
<span className='block text-xs text-[var(--vscode--settings-headerForeground)] opacity-75 mt-2 mx-2'>{props.description}</span>
)
}
</div>
);
}

View File

@@ -9,7 +9,7 @@ const dateFormat = (value?: Date) => value?.toISOString().slice(0, -8);
export type DateFieldProps = HTMLFieldProps<
Date,
HTMLDivElement,
{ inputRef?: Ref<HTMLInputElement>; max?: Date; min?: Date }
{ inputRef?: Ref<HTMLInputElement>; max?: Date; min?: Date, description?: string }
>;
function Date({
@@ -50,6 +50,12 @@ function Date({
type="datetime-local"
value={dateFormat(value) ?? ''}
/>
{
props.description && (
<span className='block text-xs text-[var(--vscode--settings-headerForeground)] opacity-75 mt-2 mx-2'>{props.description}</span>
)
}
</div>
);
}

View File

@@ -1,4 +1,4 @@
import { PlusIcon } from '@heroicons/react/outline';
import { PlusIcon } from '@heroicons/react/24/outline';
import * as React from 'react';
import { HTMLFieldProps, connectField, filterDOMProps, joinName, useField } from 'uniforms';
import './ListAddField.css';

View File

@@ -1,4 +1,4 @@
import { TrashIcon } from '@heroicons/react/outline';
import { TrashIcon } from '@heroicons/react/24/outline';
import * as React from 'react';
import { HTMLFieldProps, connectField, filterDOMProps, joinName, useField } from 'uniforms';
import './ListDelField.css';
@@ -29,7 +29,7 @@ function ListDel({ disabled, name, readOnly, ...props }: ListDelFieldProps) {
return (
<span
className="autoform__list_del_field"
className="autoform__list_del_field mb-1"
{...filterDOMProps(props)}
onClick={onAction}
onKeyDown={onAction}

View File

@@ -6,7 +6,7 @@ import { LabelField } from './LabelField';
export type LongTextFieldProps = HTMLFieldProps<
string,
HTMLDivElement,
{ inputRef?: Ref<HTMLTextAreaElement> }
{ inputRef?: Ref<HTMLTextAreaElement>, description?: string }
>;
function LongText({
@@ -26,6 +26,7 @@ function LongText({
<LabelField label={label} id={id} required={props.required} />
<textarea
className={`block w-full py-2 pr-2 sm:text-sm appearance-none disabled:opacity-50 rounded bg-[var(--vscode-input-background)] text-[var(--vscode-input-foreground)] placeholder-[var(--vscode-input-placeholderForeground)] border-[var(--frontmatter-border)] focus:border-[var(--vscode-focusBorder)] focus:outline-0`}
disabled={disabled}
id={id}
name={name}
@@ -35,6 +36,12 @@ function LongText({
ref={inputRef}
value={value ?? ''}
/>
{
props.description && (
<span className='block text-xs text-[var(--vscode--settings-headerForeground)] opacity-75 mt-2 mx-2'>{props.description}</span>
)
}
</div>
);
}

View File

@@ -6,7 +6,7 @@ import { LabelField } from './LabelField';
export type NumFieldProps = HTMLFieldProps<
number,
HTMLDivElement,
{ decimal?: boolean; inputRef?: Ref<HTMLInputElement> }
{ decimal?: boolean; inputRef?: Ref<HTMLInputElement>, description?: string }
>;
function Num({
@@ -47,6 +47,12 @@ function Num({
type="number"
value={value ?? ''}
/>
{
props.description && (
<span className='block text-xs text-[var(--vscode--settings-headerForeground)] opacity-75 mt-2 mx-2'>{props.description}</span>
)
}
</div>
);
}

View File

@@ -6,7 +6,7 @@ import { LabelField } from './LabelField';
export type TextFieldProps = HTMLFieldProps<
string,
HTMLDivElement,
{ inputRef?: Ref<HTMLInputElement> }
{ inputRef?: Ref<HTMLInputElement>, description?: string }
>;
function Text({
@@ -28,6 +28,7 @@ function Text({
<LabelField label={label} id={id} required={props.required} />
<input
className='block w-full py-2 pr-2 sm:text-sm appearance-none disabled:opacity-50 rounded bg-[var(--vscode-input-background)] text-[var(--vscode-input-foreground)] placeholder-[var(--vscode-input-placeholderForeground)] border-[var(--frontmatter-border)] focus:border-[var(--vscode-focusBorder)] focus:outline-0'
autoComplete={autoComplete}
disabled={disabled}
id={id}
@@ -39,6 +40,12 @@ function Text({
type={type}
value={value ?? ''}
/>
{
props.description && (
<span className='block text-xs text-[var(--vscode--settings-headerForeground)] opacity-75 mt-2 mx-2'>{props.description}</span>
)
}
</div>
);
}

View File

@@ -8,7 +8,7 @@ import { LocalizationKey } from '../../localization';
export type UnknownFieldProps = HTMLFieldProps<
string,
HTMLDivElement,
{ inputRef?: Ref<HTMLInputElement> }
{ inputRef?: Ref<HTMLInputElement>, description?: string }
>;
function UnknownField({
@@ -30,6 +30,12 @@ function UnknownField({
<LabelField label={label} id={id} required={props.required} />
<div className={`text-[var(--vscode-errorForeground)]`}>{l10n.t(LocalizationKey.fieldUnknown)}</div>
{
props.description && (
<span className='block text-xs text-[var(--vscode--settings-headerForeground)] opacity-75 mt-2 mx-2'>{props.description}</span>
)
}
</div>
);
}

View File

@@ -3,7 +3,7 @@ import { ContentType } from './../models/PanelSettings';
export const DEFAULT_CONTENT_TYPE_NAME = 'default';
export const DEFAULT_CONTENT_TYPE: ContentType = {
name: 'default',
name: DEFAULT_CONTENT_TYPE_NAME,
pageBundle: false,
previewPath: null,
fields: [

View File

@@ -0,0 +1,12 @@
import { FEATURE_FLAG } from './Features';
export const DEFAULT_PANEL_FEATURE_FLAGS = Object.values(FEATURE_FLAG.panel).filter(
(v) => v !== FEATURE_FLAG.panel.globalSettings
);
export const DEFAULT_DASHBOARD_FEATURE_FLAGS = [
FEATURE_FLAG.dashboard.data.view,
FEATURE_FLAG.dashboard.taxonomy.view,
FEATURE_FLAG.dashboard.snippets.view,
FEATURE_FLAG.dashboard.snippets.manage
];

Some files were not shown because too many files have changed in this diff Show More