@morphemecms/cms 0.5.0 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -0
- package/astro.mjs +3 -0
- package/bin/morpheme.mjs +3 -1
- package/defaults/blockTexts.ts +2 -2
- package/defaults/collections.ts +10 -0
- package/defaults/editor.ts +57 -53
- package/defaults/privacy.ts +4 -1
- package/defaults/rules.ts +36 -38
- package/defaults/standardPages.ts +0 -3
- package/defaults/texts.ts +11 -2
- package/demo/src/content/pages/about.md +2 -0
- package/icons/lucide/browser-fill.svg +1 -0
- package/icons/lucide/buildings-fill.svg +1 -0
- package/icons/lucide/certificate-fill.svg +1 -0
- package/icons/lucide/chart-line-up-fill.svg +1 -0
- package/icons/lucide/chats-fill.svg +1 -0
- package/icons/lucide/envelope-simple-fill.svg +1 -0
- package/icons/lucide/file-text-fill.svg +1 -0
- package/icons/lucide/folder-simple-fill.svg +1 -0
- package/icons/lucide/gauge.svg +1 -1
- package/icons/lucide/gear-six.svg +1 -0
- package/icons/lucide/globe-simple.svg +1 -0
- package/icons/lucide/heart-fill.svg +1 -0
- package/icons/lucide/layout.svg +1 -0
- package/icons/lucide/list-checks-fill.svg +1 -0
- package/icons/lucide/magnifying-glass-fill.svg +1 -0
- package/icons/lucide/megaphone-fill.svg +1 -0
- package/icons/lucide/newspaper-fill.svg +1 -0
- package/icons/lucide/paint-brush-broad-fill.svg +1 -0
- package/icons/lucide/puzzle-piece-fill.svg +1 -0
- package/icons/lucide/shield-check-fill.svg +1 -0
- package/icons/lucide/sidebar-simple.svg +1 -1
- package/icons/lucide/sidebar.svg +1 -0
- package/icons/lucide/square-half-bottom-fill.svg +1 -0
- package/icons/lucide/square-half.svg +1 -0
- package/icons/lucide/squares-four-fill.svg +1 -0
- package/icons/lucide/storefront-fill.svg +1 -0
- package/icons/lucide/tag-fill.svg +1 -0
- package/icons/lucide/toggle-right-fill.svg +1 -0
- package/icons/lucide/trash-fill.svg +1 -0
- package/icons/lucide/user-fill.svg +1 -0
- package/icons/lucide/wrench-fill.svg +1 -0
- package/icons/material-symbols/browser-fill.svg +1 -0
- package/icons/material-symbols/buildings-fill.svg +1 -0
- package/icons/material-symbols/certificate-fill.svg +1 -0
- package/icons/material-symbols/chart-line-up-fill.svg +1 -0
- package/icons/material-symbols/chats-fill.svg +1 -0
- package/icons/material-symbols/envelope-simple-fill.svg +1 -0
- package/icons/material-symbols/file-text-fill.svg +1 -0
- package/icons/material-symbols/folder-simple-fill.svg +1 -0
- package/icons/material-symbols/gauge.svg +1 -1
- package/icons/material-symbols/gear-six.svg +1 -0
- package/icons/material-symbols/globe-simple.svg +1 -0
- package/icons/material-symbols/heart-fill.svg +1 -0
- package/icons/material-symbols/layout.svg +1 -0
- package/icons/material-symbols/list-checks-fill.svg +1 -0
- package/icons/material-symbols/magnifying-glass-fill.svg +1 -0
- package/icons/material-symbols/megaphone-fill.svg +1 -0
- package/icons/material-symbols/newspaper-fill.svg +1 -0
- package/icons/material-symbols/paint-brush-broad-fill.svg +1 -0
- package/icons/material-symbols/puzzle-piece-fill.svg +1 -0
- package/icons/material-symbols/shield-check-fill.svg +1 -0
- package/icons/material-symbols/sidebar-simple.svg +1 -1
- package/icons/material-symbols/sidebar.svg +1 -0
- package/icons/material-symbols/square-half-bottom-fill.svg +1 -0
- package/icons/material-symbols/square-half.svg +1 -0
- package/icons/material-symbols/squares-four-fill.svg +1 -0
- package/icons/material-symbols/storefront-fill.svg +1 -0
- package/icons/material-symbols/tag-fill.svg +1 -0
- package/icons/material-symbols/toggle-right-fill.svg +1 -0
- package/icons/material-symbols/trash-fill.svg +1 -0
- package/icons/material-symbols/user-fill.svg +1 -0
- package/icons/material-symbols/wrench-fill.svg +1 -0
- package/icons/phosphor/browser-fill.svg +1 -0
- package/icons/phosphor/buildings-fill.svg +1 -0
- package/icons/phosphor/certificate-fill.svg +1 -0
- package/icons/phosphor/chart-line-up-fill.svg +1 -0
- package/icons/phosphor/chats-fill.svg +1 -0
- package/icons/phosphor/envelope-simple-fill.svg +1 -0
- package/icons/phosphor/file-text-fill.svg +1 -0
- package/icons/phosphor/folder-simple-fill.svg +1 -0
- package/icons/phosphor/gear-six.svg +1 -0
- package/icons/phosphor/globe-simple.svg +1 -0
- package/icons/phosphor/heart-fill.svg +1 -0
- package/icons/phosphor/layout.svg +1 -0
- package/icons/phosphor/list-checks-fill.svg +1 -0
- package/icons/phosphor/magnifying-glass-fill.svg +1 -0
- package/icons/phosphor/megaphone-fill.svg +1 -0
- package/icons/phosphor/newspaper-fill.svg +1 -0
- package/icons/phosphor/paint-brush-broad-fill.svg +1 -0
- package/icons/phosphor/puzzle-piece-fill.svg +1 -0
- package/icons/phosphor/shield-check-fill.svg +1 -0
- package/icons/phosphor/sidebar.svg +1 -0
- package/icons/phosphor/square-half-bottom-fill.svg +1 -0
- package/icons/phosphor/square-half.svg +1 -0
- package/icons/phosphor/squares-four-fill.svg +1 -0
- package/icons/phosphor/storefront-fill.svg +1 -0
- package/icons/phosphor/tag-fill.svg +1 -0
- package/icons/phosphor/toggle-right-fill.svg +1 -0
- package/icons/phosphor/trash-fill.svg +1 -0
- package/icons/phosphor/user-fill.svg +1 -0
- package/icons/phosphor/wrench-fill.svg +1 -0
- package/lib/breakpoints.d.mts +13 -0
- package/lib/breakpoints.mjs +20 -0
- package/lib/breakpoints.test.mjs +39 -0
- package/lib/build-lane.d.mts +15 -0
- package/lib/build-lane.mjs +23 -0
- package/lib/build-lane.test.mjs +74 -0
- package/lib/build-settings.d.mts +16 -0
- package/lib/build-settings.mjs +39 -0
- package/lib/build-settings.test.mjs +41 -0
- package/lib/contracts.d.mts +3 -2
- package/lib/contracts.mjs +3 -2
- package/lib/drawer-swipe.d.mts +10 -0
- package/lib/drawer-swipe.mjs +17 -0
- package/lib/drawer-swipe.test.mjs +33 -0
- package/lib/drawerKeys.d.mts +9 -0
- package/lib/drawerKeys.mjs +26 -0
- package/lib/drawerKeys.test.mjs +21 -0
- package/lib/eyebrow.d.mts +6 -0
- package/lib/eyebrow.mjs +24 -0
- package/lib/eyebrow.test.mjs +20 -0
- package/lib/front-sections.test.mjs +82 -0
- package/lib/heading-levels.d.mts +7 -0
- package/lib/heading-levels.mjs +16 -0
- package/lib/heading-levels.test.mjs +37 -0
- package/lib/inline.ts +3 -2
- package/lib/markdown.ts +2 -0
- package/lib/materialIcon.d.mts +21 -0
- package/lib/materialIcon.mjs +29 -0
- package/lib/materialIcon.test.mjs +45 -0
- package/lib/menu-layout.d.mts +11 -0
- package/lib/menu-layout.mjs +14 -0
- package/lib/menu-layout.test.mjs +23 -0
- package/lib/menu.d.mts +59 -0
- package/lib/menu.mjs +129 -0
- package/lib/menu.test.mjs +291 -0
- package/lib/rehype-emphasize.d.mts +4 -0
- package/lib/rehype-emphasize.mjs +20 -0
- package/lib/rehype-emphasize.test.mjs +39 -0
- package/lib/section-in-view.d.mts +8 -0
- package/lib/section-in-view.mjs +25 -0
- package/lib/section-in-view.test.mjs +35 -0
- package/lib/section-marker.d.mts +5 -0
- package/lib/section-marker.mjs +18 -0
- package/lib/section-marker.test.mjs +22 -0
- package/lib/section-ranges.d.mts +12 -0
- package/lib/section-ranges.mjs +43 -0
- package/lib/section-ranges.test.mjs +61 -0
- package/lib/sheet-stops.d.mts +68 -0
- package/lib/sheet-stops.mjs +198 -0
- package/lib/sheet-stops.test.mjs +155 -0
- package/lib/still-timer.d.mts +5 -0
- package/lib/still-timer.mjs +17 -0
- package/lib/still-timer.test.mjs +42 -0
- package/lib/text-sections.d.mts +10 -0
- package/lib/text-sections.mjs +45 -0
- package/lib/text-sections.test.mjs +78 -0
- package/lib/video.mjs +2 -1
- package/lib/without-h1.d.mts +1 -0
- package/lib/without-h1.mjs +7 -0
- package/lib/without-h1.test.mjs +26 -0
- package/lib/word-at.d.mts +6 -0
- package/lib/word-at.mjs +20 -0
- package/lib/word-at.test.mjs +19 -0
- package/package.json +3 -1
- package/pages/editor/version.json.js +22 -2
- package/scripts/already-checked.mjs +11 -0
- package/scripts/already-checked.test.mjs +18 -0
- package/scripts/build-settings-problems.mjs +27 -0
- package/scripts/build-settings-problems.test.mjs +35 -0
- package/scripts/check-content.mjs +42 -4
- package/scripts/check-worker.mjs +96 -4
- package/scripts/ci-build.mjs +85 -0
- package/scripts/ci-build.test.mjs +137 -0
- package/scripts/editor-roundtrip.mjs +62 -3
- package/scripts/editor-screens.mjs +21 -7
- package/scripts/git-env.mjs +6 -0
- package/scripts/step-command.mjs +34 -0
- package/scripts/step-command.test.mjs +50 -0
- package/scripts/text-problems.mjs +83 -0
- package/scripts/text-problems.test.mjs +74 -0
- package/scripts/worker-modules.mjs +11 -1
- package/site/breakpoints.d.mts +6 -0
- package/site/breakpoints.mjs +52 -0
- package/site/breakpoints.test.mjs +36 -0
- package/site/casing.d.mts +3 -0
- package/site/casing.mjs +26 -0
- package/site/content.config.ts +2 -0
- package/site/content.ts +2 -4
- package/site/defineSite.d.mts +1 -0
- package/site/defineSite.mjs +3 -0
- package/site/home.ts +3 -2
- package/site/icons.d.mts +116 -4
- package/site/icons.mjs +62 -6
- package/site/images.mjs +1 -1
- package/site/live-diff.d.mts +22 -0
- package/site/live-diff.mjs +98 -0
- package/site/live-diff.test.mjs +235 -0
- package/site/materialSymbols.d.mts +5 -0
- package/site/materialSymbols.mjs +19 -0
- package/site/sections.ts +1 -1
- package/site/theme.d.mts +1 -1
- package/site/theme.mjs +7 -1
- package/src/ActionParts.tsx +1 -1
- package/src/Advanced.tsx +101 -20
- package/src/App.tsx +47 -121
- package/src/AppList.tsx +1 -1
- package/src/BlockParts.tsx +3 -3
- package/src/Colors.tsx +1 -1
- package/src/CommunicationParts.tsx +1 -1
- package/src/ContainmentParts.tsx +80 -28
- package/src/Deleted.tsx +18 -4
- package/src/EditorFooter.tsx +14 -0
- package/src/EntryForm.tsx +75 -39
- package/src/FormFrame.tsx +3 -8
- package/src/Library.tsx +46 -51
- package/src/Licenses.tsx +27 -11
- package/src/MainDrawerParts.tsx +60 -0
- package/src/MainMenu.tsx +136 -0
- package/src/MarkdownEditor.tsx +175 -32
- package/src/Media.tsx +69 -16
- package/src/MediaTags.tsx +91 -0
- package/src/ModalSheetSample.tsx +47 -0
- package/src/NavigationParts.tsx +67 -21
- package/src/NavigationRestParts.tsx +1 -1
- package/src/Parts.tsx +71 -0
- package/src/PartsShown.tsx +1 -1
- package/src/PickerParts.tsx +2 -2
- package/src/Redirects.tsx +3 -2
- package/src/Screen.tsx +93 -90
- package/src/SelectionParts.tsx +22 -6
- package/src/SiteLogoLink.tsx +14 -0
- package/src/StartFab.tsx +22 -0
- package/src/StartStatus.tsx +1 -1
- package/src/autoTags.d.mts +28 -0
- package/src/autoTags.mjs +68 -0
- package/src/autoTags.test.mjs +109 -0
- package/src/buildSettings.test.mjs +20 -0
- package/src/buildSettings.ts +20 -0
- package/src/checkSite.ts +14 -1
- package/src/deploy.ts +7 -9
- package/src/editor.css +150 -17
- package/src/eyebrow.d.mts +5 -0
- package/src/eyebrow.mjs +53 -0
- package/src/eyebrowState.d.mts +21 -0
- package/src/eyebrowState.mjs +62 -0
- package/src/eyebrowState.test.mjs +78 -0
- package/src/fileRecords.d.mts +115 -0
- package/src/fileRecords.mjs +224 -0
- package/src/fileRecords.test.mjs +224 -0
- package/src/fileTagFilter.d.mts +30 -0
- package/src/fileTagFilter.mjs +44 -0
- package/src/fileTagFilter.test.mjs +57 -0
- package/src/fileTags.d.mts +56 -0
- package/src/fileTags.mjs +100 -0
- package/src/fileTags.test.mjs +127 -0
- package/src/firstHeading.d.mts +6 -0
- package/src/firstHeading.mjs +37 -0
- package/src/i18n/da-DK/advanced.ts +27 -12
- package/src/i18n/da-DK/app.ts +9 -7
- package/src/i18n/da-DK/apps.ts +16 -16
- package/src/i18n/da-DK/blockSettings.ts +9 -9
- package/src/i18n/da-DK/blocks.ts +2 -2
- package/src/i18n/da-DK/check.ts +5 -2
- package/src/i18n/da-DK/cms.ts +14 -12
- package/src/i18n/da-DK/colors.ts +5 -5
- package/src/i18n/da-DK/common.ts +2 -2
- package/src/i18n/da-DK/company.ts +3 -3
- package/src/i18n/da-DK/consents.ts +6 -6
- package/src/i18n/da-DK/forms.ts +6 -6
- package/src/i18n/da-DK/history.ts +6 -6
- package/src/i18n/da-DK/keywords.ts +2 -2
- package/src/i18n/da-DK/library.ts +17 -15
- package/src/i18n/da-DK/licenses.ts +4 -4
- package/src/i18n/da-DK/media.ts +10 -4
- package/src/i18n/da-DK/parts.ts +62 -25
- package/src/i18n/da-DK/preview.ts +5 -6
- package/src/i18n/da-DK/redirects.ts +7 -7
- package/src/i18n/da-DK/seo.ts +1 -1
- package/src/i18n/da-DK/text.ts +2 -0
- package/src/i18n/da-DK/theme.ts +5 -5
- package/src/i18n/en-US/advanced.ts +34 -18
- package/src/i18n/en-US/app.ts +7 -5
- package/src/i18n/en-US/apps.ts +9 -9
- package/src/i18n/en-US/blockSettings.ts +4 -4
- package/src/i18n/en-US/blocks.ts +6 -6
- package/src/i18n/en-US/check.ts +6 -3
- package/src/i18n/en-US/cms.ts +15 -14
- package/src/i18n/en-US/colors.ts +18 -18
- package/src/i18n/en-US/common.ts +3 -3
- package/src/i18n/en-US/consents.ts +4 -4
- package/src/i18n/en-US/forms.ts +5 -5
- package/src/i18n/en-US/history.ts +2 -2
- package/src/i18n/en-US/library.ts +21 -15
- package/src/i18n/en-US/licenses.ts +6 -6
- package/src/i18n/en-US/media.ts +7 -1
- package/src/i18n/en-US/parts.ts +60 -21
- package/src/i18n/en-US/preview.ts +5 -6
- package/src/i18n/en-US/redirects.ts +3 -3
- package/src/i18n/en-US/seo.ts +1 -1
- package/src/i18n/en-US/text.ts +3 -0
- package/src/i18n/en-US/theme.ts +6 -6
- package/src/icon.tsx +90 -27
- package/src/licenseData.test.mjs +28 -0
- package/src/licenseData.ts +12 -1
- package/src/markdown.d.mts +2 -0
- package/src/markdown.mjs +73 -5
- package/src/markdown.test.mjs +74 -0
- package/src/materialIcons.ts +8 -0
- package/src/menuChildren.ts +36 -0
- package/src/menuOpen.ts +34 -0
- package/src/pagePreview.tsx +23 -19
- package/src/r2Caching.ts +14 -0
- package/src/sectionFrame.ts +39 -0
- package/src/sectionState.d.mts +19 -0
- package/src/sectionState.mjs +31 -0
- package/src/sectionState.test.mjs +59 -0
- package/src/sections.d.mts +9 -7
- package/src/sections.mjs +74 -27
- package/src/sections.test.mjs +59 -0
- package/src/sidebar.ts +2 -2
- package/src/site.ts +27 -17
- package/src/stillCursor.d.mts +8 -0
- package/src/stillCursor.mjs +19 -0
- package/src/stillCursor.test.mjs +26 -0
- package/src/tagUses.d.mts +47 -0
- package/src/tagUses.mjs +121 -0
- package/src/tagUses.test.mjs +141 -0
- package/src/themeUi.ts +10 -0
- package/src/topBarSlot.tsx +37 -0
- package/src/ui.tsx +654 -150
- package/src/virtual.d.ts +5 -0
- package/starter/README.md +2 -1
- package/starter/package.json +2 -1
- package/starter/wrangler.jsonc +3 -2
- package/theme/blocks/cards/LinkCards.tsx +2 -1
- package/theme/blocks/hero/View.tsx +2 -1
- package/theme/blocks/video/View.tsx +2 -1
- package/theme/components/BlogIndex.astro +2 -2
- package/theme/components/BlogPosts.astro +1 -1
- package/theme/components/BlogPosts.tsx +9 -6
- package/theme/components/Container.astro +1 -1
- package/theme/components/CookieConsent.astro +1 -1
- package/theme/components/EndBlock.astro +1 -1
- package/theme/components/Footer.astro +5 -5
- package/theme/components/Header.astro +3 -3
- package/theme/components/Icon.astro +2 -2
- package/theme/components/MobileMenu.tsx +72 -61
- package/theme/components/MobileNav.astro +2 -2
- package/theme/components/PageHeader.astro +2 -2
- package/theme/components/PageSection.astro +1 -1
- package/theme/components/PopupButton.tsx +2 -2
- package/theme/components/PopupView.tsx +2 -2
- package/theme/components/PostList.tsx +7 -3
- package/theme/components/RichText.astro +22 -7
- package/theme/components/Section.astro +17 -10
- package/theme/components/SectionHeading.tsx +1 -1
- package/theme/components/home/PageBlock.astro +4 -4
- package/theme/components/home/Text.astro +3 -3
- package/theme/layouts/PageLayout.astro +3 -3
- package/theme/layouts/PostLayout.astro +9 -8
- package/theme/styles/base.css +13 -3
- package/theme/styles/blocks.css +97 -10
- package/theme/styles/components.css +9 -9
- package/theme/styles/elevation.test.mjs +168 -0
- package/theme/styles/global.css +65 -59
- package/theme/styles/ui.css +460 -131
- package/theme/templates/Home.astro +1 -1
- package/theme/templates/New.astro +5 -5
- package/theme/templates/NotFound.astro +2 -2
- package/theme/ui/BottomSheet.tsx +118 -21
- package/theme/ui/BottomSheetResizeIcon.tsx +13 -0
- package/theme/ui/Button.tsx +4 -3
- package/theme/ui/Dialog.tsx +1 -1
- package/theme/ui/FabMenu.tsx +13 -12
- package/theme/ui/LoadingIndicator.tsx +1 -1
- package/theme/ui/NavigationDrawer.tsx +116 -15
- package/theme/ui/NavigationRail.tsx +22 -13
- package/theme/ui/Search.tsx +1 -1
- package/theme/ui/SettingRow.tsx +31 -0
- package/theme/ui/Switch.tsx +11 -11
- package/theme/ui/TextField.tsx +17 -6
- package/theme/ui/bottomSheet.script.ts +3 -2
- package/theme/ui/bottomSheetControl.ts +131 -46
- package/theme/ui/fabMenu.script.ts +69 -53
- package/theme/ui/modalSheetSize.ts +214 -0
- package/theme/ui/navigationDrawerControl.ts +35 -0
- package/theme/ui/search.script.ts +4 -2
- package/worker/index.js +3 -0
- package/worker/plan-status.js +46 -0
- package/worker/push.js +7 -5
- package/worker/r2-status.js +2 -1
- package/icons/lucide/desktop.svg +0 -1
- package/icons/material-symbols/desktop.svg +0 -1
- package/icons/phosphor/desktop.svg +0 -1
package/src/i18n/da-DK/parts.ts
CHANGED
|
@@ -9,7 +9,7 @@ export const parts: Messages['parts'] = {
|
|
|
9
9
|
toolbarButton:
|
|
10
10
|
'Værktøj i tekstens værktøjslinje: lidt mindre, så linjen er der på en telefon. Med en pil åbner den en menu (teksttypen, når linjen er for smal).',
|
|
11
11
|
fields:
|
|
12
|
-
'Temaets felter med navnet på kanten og en forklaring under. Et valg åbner arket, eller en side for sig med det, hvert valg giver (pilen peger derhen).',
|
|
12
|
+
'Temaets felter med navnet på kanten og en forklaring under. Et valg åbner en menu lige under feltet på en computer, eller arket på en telefon, eller en side for sig med det, hvert valg giver (pilen peger derhen).',
|
|
13
13
|
formField: 'Et felt, der siger, hvad der er galt med det skrevne, og antal tegn af det højeste antal.',
|
|
14
14
|
fieldGroup: 'Felter, der hører sammen, i en ramme med deres navn på.',
|
|
15
15
|
shownValue: 'Det, et felt har, vist uden at kunne rettes her: med sit ikon, eller gråt, når det laves et andet sted.',
|
|
@@ -27,15 +27,17 @@ export const parts: Messages['parts'] = {
|
|
|
27
27
|
'Søgningen med knapperne ved siden af, altid i samme rækkefølge: sortér, filter, dato, Google og menu eller liste. Sortér er grå, mens siderne vises som menuen.',
|
|
28
28
|
choiceTile: 'Et af mange ikoner at trykke på, i et gitter.',
|
|
29
29
|
group:
|
|
30
|
-
'Rækker i en ramme under en lille overskrift: startskærmen og listerne. Ikonet er ens overalt: gråt, og i accentfarven for den åbne del i
|
|
30
|
+
'Rækker i en ramme under en lille overskrift: startskærmen og listerne. Ikonet er ens overalt: gråt, og i accentfarven for den åbne del i menuen. Foran navnet kan der i stedet stå et lille billede eller en prøve på en af temaets værdier. Til højre står evt. et antal. En række kan også gøre noget (i accentfarven), slette (i midten) eller kun vises (uden farve under musen, evt. grå).',
|
|
31
31
|
checkList:
|
|
32
32
|
'Ting, der er tjekket: en score fra 0 til 100 i en ring, en rød trekant ved det, der kan forbedres (som folder sig ud med, hvordan), og en grøn prik ved det, der er i orden.',
|
|
33
33
|
scoreRing:
|
|
34
34
|
'En score fra 0 til 100 i en lille ring forrest i en række, i samme farver som ringen i Ting, der er tjekket: grøn fra 90, orange fra 50, ellers rød.',
|
|
35
|
+
menuRow:
|
|
36
|
+
'En indstilling i samme række som en kontakt: navn og hvad den gør til venstre, og til højre det valgte i en lille ramme med en pil. Den åbner valgene under sig (et ark på en telefon), det valgte med hak. Grå, mens indstillingen ikke kan ændres.',
|
|
35
37
|
unfold:
|
|
36
38
|
'Til højre i en række: hvor mange rækker der er under den, og pilen, der viser dem. Rækkerne under står indrykket langs en streg.',
|
|
37
39
|
sheet:
|
|
38
|
-
'Arket nedefra (en dialog på en computer) med valg eller felter. Et ikon eller en række (fx Sprog) åbner det med valgene, og +
|
|
40
|
+
'Arket nedefra (en dialog på en computer) med valg eller felter. Et ikon eller en række (fx Sprog) åbner det med valgene, og + åbner det med de slags, noget nyt kan være (fx et pop op-vindue). Valgene kan stå under små overskrifter.',
|
|
39
41
|
preview:
|
|
40
42
|
'Forhåndsvisningen af en blok i en stiplet ramme. Den kan bruges som på siden (fx foldes ud), men et link i den fører ingen steder hen.',
|
|
41
43
|
colorSwatches: 'Et sæt farver i små rundinger side om side (fx fire af hjemmesidens farver).',
|
|
@@ -50,9 +52,15 @@ export const parts: Messages['parts'] = {
|
|
|
50
52
|
'Arket med en hel side (forhåndsvisningen), så højt som skærmen. Siden står i en ramme, så bred som en telefon eller en computer, og intet i den kører.',
|
|
51
53
|
foldSection:
|
|
52
54
|
'Et afsnit i en lang formular (en side, et blogindlæg), der foldes ind og ud med sin overskrift. Kun det første er åbent fra start.',
|
|
53
|
-
sharePreview: 'Et link til en side, som det ser ud, når det deles: billedet,
|
|
55
|
+
sharePreview: 'Et link til en side, som det ser ud, når det deles: billedet, hjemmesidens domæne, titlen og beskrivelsen.',
|
|
54
56
|
formColumns:
|
|
55
57
|
'En formular på en bred skærm: teksten til venstre, status og de andre felter på kort til højre. På en mindre skærm under hinanden. Overskriften over felterne er altid den samme.',
|
|
58
|
+
mainDrawer:
|
|
59
|
+
'Editorens menu: hjemmesidens dele i afsnit, den åbne markeret. På en bred skærm står den ved siden af indholdet, og menuknappen i starten af topbjælken viser og skjuler den; på en mindre skærm åbner den over siden og lukker ved et valg, et tryk ved siden af, Escape eller et stryg. Vist her som den, der åbner over siden.',
|
|
60
|
+
editorFooter:
|
|
61
|
+
'Linjen nederst på hver skærm, under indholdet, med et link til licenserne for det, hjemmesiden og editoren er lavet med.',
|
|
62
|
+
sectionList:
|
|
63
|
+
'Afsnittene i en lang formular som en liste, hvor det afsnit, der ses, er markeret. På en stor skærm står den i et panel for enden af formularen, som knappen yderst i topbjælken viser og skjuler; på en mindre skærm åbner knappen den i et sidepanel, der lukker, når man vælger et afsnit.',
|
|
56
64
|
},
|
|
57
65
|
/** Over the parts: the search, and the groups to show one of (as Material 3 sorts its components). */
|
|
58
66
|
filter: {
|
|
@@ -68,7 +76,7 @@ export const parts: Messages['parts'] = {
|
|
|
68
76
|
layout: 'Layout',
|
|
69
77
|
fieldTypes: 'Felttyper',
|
|
70
78
|
},
|
|
71
|
-
none: 'Ingen dele passer til søgningen
|
|
79
|
+
none: 'Ingen dele passer til søgningen',
|
|
72
80
|
},
|
|
73
81
|
sample: {
|
|
74
82
|
domain: 'eksempel.dk',
|
|
@@ -137,7 +145,7 @@ export const parts: Messages['parts'] = {
|
|
|
137
145
|
`Felterne i formularerne og indstillingerne, én af hver type med de valg, den kan have. Felterne står i ${file} og er bygget af delene ovenfor. Intet her gemmes.`,
|
|
138
146
|
use: {
|
|
139
147
|
string:
|
|
140
|
-
'En linje tekst. Den kan
|
|
148
|
+
'En linje tekst. Den kan være påkrævet, have en længdegrænse, vise en tekst, mens den er tom, kræve en bestemt form, rumme en adresse, et tal i par, et telefonnummer eller ord som chips, eller linke til det sted, hvor den rettes.',
|
|
141
149
|
text: 'Tekst over flere linjer, med de samme valg som en linje.',
|
|
142
150
|
markdown: 'Tekst med formatering, i samme editor som siderne.',
|
|
143
151
|
number: 'Et tal.',
|
|
@@ -146,7 +154,7 @@ export const parts: Messages['parts'] = {
|
|
|
146
154
|
select:
|
|
147
155
|
'Et af flere valg: i arket nedefra, side om side, som ikoner, eller kun vist. Et valg kan have sin egen forklaring, og et felt kan stå kun ved ét af valgene.',
|
|
148
156
|
relation:
|
|
149
|
-
'En side, et indlæg eller et tag fra
|
|
157
|
+
'En side, et indlæg eller et tag fra hjemmesidens lister. En side vælges med sidevælgeren, også de faste sider; flere valg står som chips.',
|
|
150
158
|
image: 'Et billede fra Filer eller et nyt.',
|
|
151
159
|
readonly: 'Vises, men rettes ikke her.',
|
|
152
160
|
object: 'En gruppe felter i en ramme.',
|
|
@@ -156,11 +164,11 @@ export const parts: Messages['parts'] = {
|
|
|
156
164
|
'En formular, der ikke er udfyldt rigtigt: en besked forrest siger, hvad der er galt, og feltet rulles frem og blinker, til det rettes. Prøv med et tomt felt, der skal udfyldes.',
|
|
157
165
|
},
|
|
158
166
|
tryToSave: 'Prøv at gemme',
|
|
159
|
-
allRight: 'Alle felter er udfyldt rigtigt
|
|
167
|
+
allRight: 'Alle felter er udfyldt rigtigt',
|
|
160
168
|
heading: 'Overskrift',
|
|
161
169
|
headingHint: 'Højst ca. 60 tegn.',
|
|
162
170
|
underName: 'Tekst (under navnet)',
|
|
163
|
-
underNameHint: 'Hvis feltet er tomt, bruges
|
|
171
|
+
underNameHint: 'Hvis feltet er tomt, bruges hjemmesidens navn.',
|
|
164
172
|
email: 'E-mail',
|
|
165
173
|
emailForm: 'Skriv en hel e-mailadresse',
|
|
166
174
|
keyword: 'Primært søgeord',
|
|
@@ -178,9 +186,9 @@ export const parts: Messages['parts'] = {
|
|
|
178
186
|
shown: 'Vises',
|
|
179
187
|
hidden: 'Skjult',
|
|
180
188
|
listText: 'Tekst (i listen)',
|
|
181
|
-
listTextHint: '
|
|
182
|
-
publishedHint: 'Siden er på
|
|
183
|
-
draftHint: 'Siden er ikke på
|
|
189
|
+
listTextHint: 'Vises kun ved placeringen I listen.',
|
|
190
|
+
publishedHint: 'Siden er på hjemmesiden.',
|
|
191
|
+
draftHint: 'Siden er ikke på hjemmesiden.',
|
|
184
192
|
look: 'Udseende',
|
|
185
193
|
kind: 'Slags',
|
|
186
194
|
page: 'Side',
|
|
@@ -336,7 +344,7 @@ export const parts: Messages['parts'] = {
|
|
|
336
344
|
/** A list of kinds ("Promovering"), by the list's name for one. */
|
|
337
345
|
kindsIntro: (one: string) => `Hver slags ${one}, også appenes, i alle sine tilstande. Temaet giver dem deres udseende.`,
|
|
338
346
|
search: 'Søg i delene',
|
|
339
|
-
none: 'Ingen dele passer til søgningen
|
|
347
|
+
none: 'Ingen dele passer til søgningen',
|
|
340
348
|
/** The theme's buttons (packages/editor/theme/ui/), first under "UI-komponenter". */
|
|
341
349
|
ui: 'Knapper',
|
|
342
350
|
button:
|
|
@@ -362,7 +370,7 @@ export const parts: Messages['parts'] = {
|
|
|
362
370
|
fieldSupporting: 'Du får kun en mail, når der er nyt.',
|
|
363
371
|
fieldError: 'Skriv en e-mailadresse.',
|
|
364
372
|
fieldPlaceholder: 'Din e-mail',
|
|
365
|
-
fieldSearch: 'Søg på
|
|
373
|
+
fieldSearch: 'Søg på hjemmesiden',
|
|
366
374
|
fieldClear: 'Ryd',
|
|
367
375
|
fieldPhone: 'Telefon',
|
|
368
376
|
fieldPrefix: '+45',
|
|
@@ -379,7 +387,7 @@ export const parts: Messages['parts'] = {
|
|
|
379
387
|
fieldReadOnly: 'Kundenummer',
|
|
380
388
|
fieldReadOnlyValue: '10 482',
|
|
381
389
|
checkboxLabel: 'Statistik',
|
|
382
|
-
checkboxSupporting: 'Hvordan
|
|
390
|
+
checkboxSupporting: 'Hvordan hjemmesiden bliver brugt.',
|
|
383
391
|
checkboxParent: 'Alle cookies',
|
|
384
392
|
checkboxError: 'Sæt flueben for at fortsætte.',
|
|
385
393
|
/** The theme's chips (Chip), a group of their own under "UI-komponenter". */
|
|
@@ -405,10 +413,16 @@ export const parts: Messages['parts'] = {
|
|
|
405
413
|
'Kort eller billeder på en række, der skubbes til siden, med prikker under: lige store, i flere størrelser, ét stort (fra starten eller i midten) og ét ad gangen.',
|
|
406
414
|
dialogKinds: { basic: 'Almindelig', icon: 'Med ikon, liste og skillelinje', container: 'Kun boksen', fullScreen: 'Hele skærmen' },
|
|
407
415
|
sheetKinds: {
|
|
408
|
-
modal: 'Modalt',
|
|
416
|
+
modal: 'Modalt, en dialog på en computer',
|
|
417
|
+
modalSideSheet: 'Modalt, et sideark på en computer',
|
|
418
|
+
modalSheet: 'Modalt, forbliver et ark på en computer',
|
|
409
419
|
collapsed: 'Standard, foldet sammen',
|
|
410
420
|
halfExpanded: 'Standard, halvt foldet ud',
|
|
411
421
|
expanded: 'Standard, foldet ud',
|
|
422
|
+
fixed: 'Standard, fast, uden håndtag og overskrift',
|
|
423
|
+
resizeButton: 'Standard, knap til størrelsen i stedet for håndtaget',
|
|
424
|
+
collapseButton: 'Standard, knap til at folde sammen i fuld højde',
|
|
425
|
+
wideSheet: 'Standard, forbliver et ark på en computer, mens de andre bliver et sideark der',
|
|
412
426
|
},
|
|
413
427
|
layouts: {
|
|
414
428
|
uncontained: 'Lige store',
|
|
@@ -424,11 +438,28 @@ export const parts: Messages['parts'] = {
|
|
|
424
438
|
save: 'Gem',
|
|
425
439
|
page: 'Siden bag arket kan stadig bruges.',
|
|
426
440
|
dragHandle: 'Fold arket ud eller sammen',
|
|
441
|
+
openSheet: 'Åbn det modale ark',
|
|
442
|
+
openSideSheet: 'Åbn det modale ark som sideark',
|
|
443
|
+
openWideSheet: 'Åbn det modale ark med margener',
|
|
444
|
+
paragraphs: [
|
|
445
|
+
'På en telefon åbner arket i halv skærmhøjde.',
|
|
446
|
+
'Træk i håndtaget, overskriften eller denne tekst opad for at gøre det så højt, skærmen tillader.',
|
|
447
|
+
'Når arket er i fuld højde, kan denne tekst rulles.',
|
|
448
|
+
'Stryg nedad fra toppen af teksten, eller træk i håndtaget nedad, for at lukke det.',
|
|
449
|
+
'Et hurtigt stryg op eller ned går direkte til fuld højde eller lukker arket.',
|
|
450
|
+
'Et kort træk nedad, der slippes, sender arket tilbage til halv højde.',
|
|
451
|
+
'På en computer er arket en dialog, et sideark eller et ark med margener, som eksemplet siger.',
|
|
452
|
+
'Denne tekst gør kun arket langt nok til, at det skal rulles.',
|
|
453
|
+
],
|
|
427
454
|
picture: (n) => `Billede ${n}`,
|
|
428
455
|
showPicture: (n) => `Vis billede ${n}`,
|
|
429
456
|
heading: 'Overskrift',
|
|
430
457
|
text: 'En kort tekst om det, boksen handler om.',
|
|
431
458
|
sheetText: 'En kort tekst under overskriften',
|
|
459
|
+
sheetPeek: 'En linje, der vises, mens arket er foldet sammen',
|
|
460
|
+
sheetLabel: 'Detaljer',
|
|
461
|
+
resize: 'Fold arket ud eller sammen',
|
|
462
|
+
collapse: 'Fold arket sammen',
|
|
432
463
|
footer: 'En linje nederst',
|
|
433
464
|
close: 'Luk',
|
|
434
465
|
roleDescription: 'karrusel',
|
|
@@ -440,7 +471,7 @@ export const parts: Messages['parts'] = {
|
|
|
440
471
|
navigation: {
|
|
441
472
|
title: 'Navigation',
|
|
442
473
|
topAppBar:
|
|
443
|
-
'Bjælken øverst på en side: kun fladen med
|
|
474
|
+
'Bjælken øverst på en side: kun fladen med hjemmesidens egen header, eller knappen forrest, overskriften og knapperne bagerst, lille, mellem eller stor, eller med søgefeltet. Den får en anden flade, når siden rulles under den.',
|
|
444
475
|
stuck: 'Når siden rulles',
|
|
445
476
|
/** The top app bar's kinds and what is in them (TopAppBar.tsx). */
|
|
446
477
|
appBar: {
|
|
@@ -450,9 +481,9 @@ export const parts: Messages['parts'] = {
|
|
|
450
481
|
long: 'En lang overskrift, der må gå over flere linjer',
|
|
451
482
|
collapsed: 'foldet sammen',
|
|
452
483
|
back: 'Tilbage',
|
|
453
|
-
search: 'Søg på
|
|
484
|
+
search: 'Søg på hjemmesiden',
|
|
454
485
|
clear: 'Ryd',
|
|
455
|
-
empty: 'Intet passer til søgningen
|
|
486
|
+
empty: 'Intet passer til søgningen',
|
|
456
487
|
favourite: 'Gem',
|
|
457
488
|
profile: 'Profil',
|
|
458
489
|
},
|
|
@@ -480,7 +511,11 @@ export const parts: Messages['parts'] = {
|
|
|
480
511
|
error: 'Vælg en behandling.',
|
|
481
512
|
kinds: { outlined: 'Med ramme', filled: 'Fyldt' },
|
|
482
513
|
},
|
|
483
|
-
navigationDrawer:
|
|
514
|
+
navigationDrawer:
|
|
515
|
+
'Menuen, der åbner over siden på en telefon: siderne, en med undersider foldet ud, den åbne markeret. Standardmenuen står ved siden af siden med sektioner, ikoner og antal, og i to niveauer: sektioner med en pil og en liste under en tilbage-række.',
|
|
516
|
+
drawerSections: ['Post', 'Konto'],
|
|
517
|
+
drawerItems: ['Indbakke', 'Beskeder', 'Favoritter', 'Papirkurv', 'Profil'],
|
|
518
|
+
drawerBack: ['Hovedmenu'],
|
|
484
519
|
tabs: 'Faneblade på en række: kun teksten, som under bjælken, eller primære med ikon og sekundære, med en streg under det åbne. Til at skubbe til siden eller i hele bredden.',
|
|
485
520
|
/** The tabs' made-up views (Tabs.tsx). */
|
|
486
521
|
views: ['Oversigt', 'Priser', 'Anmeldelser', 'Kontakt', 'Kort', 'Videoer'],
|
|
@@ -535,6 +570,8 @@ export const parts: Messages['parts'] = {
|
|
|
535
570
|
selection: {
|
|
536
571
|
title: 'Kontakter, valg og sideark',
|
|
537
572
|
switch: 'Slår noget til eller fra, med sit navn foran: fra, til, med ikoner i knappen og grå, når den ikke kan ændres.',
|
|
573
|
+
settingRow:
|
|
574
|
+
'En indstilling på én linje: navnet og hvad den gør i starten, og det, der sætter den, i enden (en kontakt, en rullemenuknap).',
|
|
538
575
|
radioButton: 'Ét af få valg i en gruppe under sit navn, evt. med en linje under: valgt og grå, når det ikke kan vælges.',
|
|
539
576
|
slider:
|
|
540
577
|
'Vælger et tal ved at trække: frit, i trin med prikker, fra midten, et interval med to knapper og med tallet over knappen, i fem størrelser, med ikon og lodret.',
|
|
@@ -582,13 +619,13 @@ export const parts: Messages['parts'] = {
|
|
|
582
619
|
home: 'Forside',
|
|
583
620
|
alone: 'Alene',
|
|
584
621
|
contained: 'I beholder',
|
|
585
|
-
loading: 'Henter
|
|
586
|
-
uploading: 'Uploader',
|
|
622
|
+
loading: 'Henter…',
|
|
623
|
+
uploading: 'Uploader…',
|
|
587
624
|
percent: (v) => `${Math.round(v * 100)} %`,
|
|
588
625
|
indeterminate: 'Uden værdi',
|
|
589
626
|
shapes: { flat: 'Flad', wavy: 'Bølget' },
|
|
590
627
|
thick: 'Tyk',
|
|
591
|
-
sent: 'Beskeden er sendt
|
|
628
|
+
sent: 'Beskeden er sendt',
|
|
592
629
|
booked: 'Din tid er booket. Du får en bekræftelse på e-mail om lidt.',
|
|
593
630
|
undo: 'Fortryd',
|
|
594
631
|
seeBooking: 'Se bookingen',
|
|
@@ -618,10 +655,10 @@ export const parts: Messages['parts'] = {
|
|
|
618
655
|
sections: ['Start', 'Dig'],
|
|
619
656
|
menu: 'Skift bredde',
|
|
620
657
|
compose: 'Skriv',
|
|
621
|
-
searchLabel: 'Søg på
|
|
658
|
+
searchLabel: 'Søg på hjemmesiden',
|
|
622
659
|
back: 'Tilbage',
|
|
623
660
|
clear: 'Ryd',
|
|
624
|
-
empty: 'Intet passer til søgningen
|
|
661
|
+
empty: 'Intet passer til søgningen',
|
|
625
662
|
query: 'par',
|
|
626
663
|
results: [
|
|
627
664
|
{ headline: 'Priser', supporting: 'Søgt for nylig' },
|
|
@@ -3,11 +3,10 @@ import type { Messages } from '../en-US';
|
|
|
3
3
|
export const preview: Messages['preview'] = {
|
|
4
4
|
button: 'Forhåndsvis',
|
|
5
5
|
title: 'Forhåndsvisning',
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
making: 'Forhåndsvisningen laves…',
|
|
6
|
+
size: 'Vinduesstørrelse',
|
|
7
|
+
sizes: { compact: 'Kompakt', medium: 'Mellem', expanded: 'Udvidet', large: 'Stor', extraLarge: 'Ekstra stor' },
|
|
8
|
+
making: 'Henter forhåndsvisningen…',
|
|
10
9
|
failed: (error) => `Kunne ikke oprette forhåndsvisningen: ${error}`,
|
|
11
|
-
notHere: 'Den side kan ikke forhåndsvises
|
|
12
|
-
pageNotLoaded: (status) => `Siden
|
|
10
|
+
notHere: 'Den side kan ikke forhåndsvises',
|
|
11
|
+
pageNotLoaded: (status) => `Siden kunne ikke hentes, fejl ${status}`,
|
|
13
12
|
};
|
|
@@ -19,28 +19,28 @@ export const redirects: Messages['redirects'] = {
|
|
|
19
19
|
sorts: { az: 'A–Å', za: 'Å–A', page: 'Efter side', visits: 'Flest besøg først', last: 'Senest besøgt først' },
|
|
20
20
|
pageFilter: 'Vis efter side',
|
|
21
21
|
postsGroup: 'Blogindlæg',
|
|
22
|
-
loading: 'Henter videresendelserne',
|
|
23
|
-
none: (query) => `Ingen videresendelser${query ? ` med "${query}"` : ''}
|
|
22
|
+
loading: 'Henter videresendelserne…',
|
|
23
|
+
none: (query) => `Ingen videresendelser${query ? ` med "${query}"` : ''}`,
|
|
24
24
|
from: 'Fra',
|
|
25
25
|
fromHint: 'Fx /gammel-side/.',
|
|
26
26
|
to: 'Til',
|
|
27
27
|
toHint: 'Fx /om-os/ eller / for forsiden.',
|
|
28
|
-
sendsTo: (name, noPage) => `Sender til ${name}${noPage ? '
|
|
28
|
+
sendsTo: (name, noPage) => `Sender til ${name}${noPage ? ', som ikke er en side i editoren' : ''}.`,
|
|
29
29
|
deleteRedirect: 'Slet videresendelse',
|
|
30
30
|
missing: {
|
|
31
31
|
title: 'Ikke fundet',
|
|
32
32
|
intro: 'Adresser, som besøgende har prøvet at åbne, men som ikke findes.',
|
|
33
33
|
searchLabel: 'Søg i adresserne',
|
|
34
|
-
loading: 'Henter adresserne',
|
|
34
|
+
loading: 'Henter adresserne…',
|
|
35
35
|
notLoaded: (error) => `Kunne ikke hente adresserne, der ikke findes: ${error}`,
|
|
36
|
-
notKept: 'Hjemmesiden registrerer endnu ikke adresser, der ikke findes
|
|
37
|
-
none: (query) => (query ? `Ingen adresser med "${query}"
|
|
36
|
+
notKept: 'Hjemmesiden registrerer endnu ikke adresser, der ikke findes',
|
|
37
|
+
none: (query) => (query ? `Ingen adresser med "${query}"` : 'Ingen adresser endnu'),
|
|
38
38
|
seen: (n, last) => `${n === 1 ? 'Ét besøg' : `${n} besøg`}, senest ${last}`,
|
|
39
39
|
details: (n, first, last, from) =>
|
|
40
40
|
`${n === 1 ? `Besøgt én gang, ${last}` : `Besøgt ${n} gange, første gang ${first} og senest ${last}`}.${from ? ` Den seneste kom fra ${from}.` : ''}`,
|
|
41
41
|
sendOn: 'Send videre',
|
|
42
42
|
forget: 'Fjern fra listen',
|
|
43
|
-
forgotten: 'Fjernet fra listen
|
|
43
|
+
forgotten: 'Fjernet fra listen',
|
|
44
44
|
notForgotten: (error) => `Kunne ikke fjerne adressen fra listen: ${error}`,
|
|
45
45
|
},
|
|
46
46
|
commit: {
|
package/src/i18n/da-DK/seo.ts
CHANGED
package/src/i18n/da-DK/text.ts
CHANGED
|
@@ -22,6 +22,8 @@ export const text: Messages['text'] = {
|
|
|
22
22
|
color: 'Farve',
|
|
23
23
|
colors: { accent: 'Accentfarve', muted: 'Stille tekst' },
|
|
24
24
|
noColor: 'Ingen farve',
|
|
25
|
+
sectionColor: 'Sektionsfarve',
|
|
26
|
+
sectionColors: { none: 'Ingen', surface: 'Flade', tint: 'Tone', accent: 'Accent' },
|
|
25
27
|
linkTo: 'Linket går til',
|
|
26
28
|
linkPage: 'Side',
|
|
27
29
|
linkAddress: 'Anden adresse',
|
package/src/i18n/da-DK/theme.ts
CHANGED
|
@@ -16,24 +16,24 @@ export const theme: Messages['theme'] = {
|
|
|
16
16
|
lightTheme: 'Lyst tema',
|
|
17
17
|
tags: 'Tags',
|
|
18
18
|
allPosts: 'Alle',
|
|
19
|
-
noPosts: '
|
|
19
|
+
noPosts: 'Her er ingen indlæg endnu',
|
|
20
20
|
seeAllPosts: 'Se alle indlæg',
|
|
21
21
|
seeAll: 'Se alle',
|
|
22
22
|
blog: 'Blog',
|
|
23
23
|
relatedPosts: 'Relaterede indlæg',
|
|
24
24
|
readingTime: (minutes) => `${minutes} min. læsetid`,
|
|
25
|
-
postsAbout: (count, tag) => `${count} indlæg om ${tag}
|
|
25
|
+
postsAbout: (count, tag) => `${count} indlæg om ${tag}`,
|
|
26
26
|
notFound: 'Siden findes ikke',
|
|
27
27
|
didYouMean: 'Mente du',
|
|
28
28
|
newPages: 'Nye sider',
|
|
29
29
|
newPagesDescription: 'Nye versioner af siderne, til gennemsyn.',
|
|
30
30
|
newPagesIntro:
|
|
31
|
-
'Nye versioner af siderne ved siden af de nuværende, til gennemsyn. Google ser dem ikke. Når en side
|
|
31
|
+
'Nye versioner af siderne ved siden af de nuværende, til gennemsyn. Google ser dem ikke. Når du godkender en side, kommer den nye tekst på den nuværende sides adresse.',
|
|
32
32
|
newVersion: 'Ny version',
|
|
33
|
-
newPage: 'Ny side,
|
|
33
|
+
newPage: 'Ny side, som ikke findes endnu',
|
|
34
34
|
currentPage: (title) => `Nuværende: ${title}`,
|
|
35
35
|
newPosts: 'Nye blogindlæg',
|
|
36
|
-
newPostsIntro: 'Skjulte, indtil
|
|
36
|
+
newPostsIntro: 'Skjulte, indtil du godkender dem. De står ikke på bloggen, og Google ser dem ikke.',
|
|
37
37
|
reviewNotice: 'Ny version til gennemsyn. Google ser den ikke.',
|
|
38
38
|
seeCurrentPage: 'Se den nuværende side',
|
|
39
39
|
seeChanges: 'Se, hvad der er ændret',
|
|
@@ -1,32 +1,48 @@
|
|
|
1
|
-
// "Avanceret" under "Indstillinger" (Advanced.tsx):
|
|
2
|
-
//
|
|
1
|
+
// "Avanceret" under "Indstillinger" (Advanced.tsx): the faster editor (a copy of the website's files in Cloudflare R2,
|
|
2
|
+
// r2Caching.ts), and the switches for updating the website (buildSettings.ts).
|
|
3
3
|
export const advanced = {
|
|
4
|
-
r2Caching: '
|
|
5
|
-
r2CachingHint: "The
|
|
6
|
-
checking: '
|
|
7
|
-
/** Why it cannot be turned on, by what the
|
|
8
|
-
* jurisdiction it is kept
|
|
4
|
+
r2Caching: 'Faster editor',
|
|
5
|
+
r2CachingHint: "The editor loads the website's files faster and asks GitHub only for what has changed.",
|
|
6
|
+
checking: 'Checking whether Cloudflare is ready…',
|
|
7
|
+
/** Why it cannot be turned on, by what the editor finds at Cloudflare (packages/editor/worker/r2-status.js); `bucket` is the name
|
|
8
|
+
* of the storage, `jurisdiction` where it is kept, when it has one. */
|
|
9
9
|
bucket: {
|
|
10
10
|
ready: (bucket: string, jurisdiction: string | null): string =>
|
|
11
|
-
`The
|
|
11
|
+
`The storage ${bucket} is ready at Cloudflare${jurisdiction ? ` in the ${jurisdiction}` : ''}.`,
|
|
12
12
|
'no-bucket': (bucket: string, jurisdiction: string | null): string =>
|
|
13
|
-
`Can be turned on once the
|
|
13
|
+
`Can be turned on once the storage ${bucket} is made under R2 at Cloudflare${jurisdiction ? ` and kept in the ${jurisdiction}` : ''}.`,
|
|
14
14
|
'no-r2': (): string => 'Can be turned on once R2 is turned on at Cloudflare.',
|
|
15
|
-
'no-key': (): string => 'The
|
|
16
|
-
refused: (): string =>
|
|
15
|
+
'no-key': (): string => 'The editor has no key for Cloudflare, so it can’t see whether R2 is turned on.',
|
|
16
|
+
refused: (): string => 'Cloudflare didn’t accept the editor’s key for R2.',
|
|
17
17
|
failed: (): string => 'Cloudflare didn’t answer whether R2 is ready. Try again later.',
|
|
18
18
|
},
|
|
19
|
+
builds: 'Updating the website',
|
|
20
|
+
fastContentBuilds: 'Faster updates for content',
|
|
21
|
+
fastContentBuildsHint: 'The website updates sooner when you only change content.',
|
|
22
|
+
paidBuilds: 'Workers Paid plan',
|
|
23
|
+
paidBuildsHint: 'Turn on when your Cloudflare account has Workers Paid.',
|
|
24
|
+
/** Why the Workers Paid switch can't be turned on, by what the editor finds of the account's plan (packages/editor/worker/plan-status.js). */
|
|
25
|
+
plan: {
|
|
26
|
+
no: 'Can be turned on once the Cloudflare account has Workers Paid.',
|
|
27
|
+
'no-key': 'The editor has no key for Cloudflare, so it can’t see whether the account has Workers Paid.',
|
|
28
|
+
refused: 'Cloudflare didn’t let the editor’s key read the account’s plan. The key needs Billing: Read.',
|
|
29
|
+
failed: 'Cloudflare didn’t answer whether the account has Workers Paid. Try again later.',
|
|
30
|
+
},
|
|
31
|
+
billing: 'Open billing at Cloudflare',
|
|
32
|
+
buildSettingsNotLoaded: (error: string) => `The settings for updating the website couldn’t be loaded: ${error}`,
|
|
19
33
|
place: 'Location',
|
|
20
|
-
placeHint: 'Can only be changed while
|
|
34
|
+
placeHint: 'Can only be changed while Faster editor is off.',
|
|
21
35
|
placeAuto: 'Automatic',
|
|
22
|
-
onWhenBuilt: 'Turned on when the
|
|
23
|
-
offWhenBuilt: 'Turned off when the
|
|
24
|
-
loading:
|
|
25
|
-
notLoaded: (error: string) => `The
|
|
26
|
-
noSettings: 'The
|
|
27
|
-
noLine:
|
|
36
|
+
onWhenBuilt: 'Turned on when the website is updated.',
|
|
37
|
+
offWhenBuilt: 'Turned off when the website is updated.',
|
|
38
|
+
loading: 'Loading settings…',
|
|
39
|
+
notLoaded: (error: string) => `The settings couldn’t be loaded: ${error}`,
|
|
40
|
+
noSettings: 'The website has no settings for the editor',
|
|
41
|
+
noLine: 'The website’s settings have no place for Faster editor',
|
|
28
42
|
/** The commit (siteT). */
|
|
29
43
|
r2CachingCommit: (on: boolean): string => (on ? 'Editor: turn on R2 caching' : 'Editor: turn off R2 caching'),
|
|
44
|
+
fastContentBuildsCommit: (on: boolean): string => (on ? 'Editor: turn on fast content builds' : 'Editor: turn off fast content builds'),
|
|
45
|
+
paidBuildsCommit: (on: boolean): string => (on ? 'Editor: turn on the paid build plan' : 'Editor: turn off the paid build plan'),
|
|
30
46
|
placeCommit: (jurisdiction: string | null): string =>
|
|
31
47
|
jurisdiction ? `Editor: keep the R2 caching bucket in the ${jurisdiction}` : 'Editor: let Cloudflare place the R2 caching bucket',
|
|
32
48
|
};
|
package/src/i18n/en-US/app.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
// The editor's frame (App.tsx, FormFrame.tsx, ask.tsx), logging in and saving to GitHub (github.ts, cache.ts), pictures (images.ts) and addresses (addresses.ts, checkSite.ts).
|
|
2
2
|
export const app = {
|
|
3
3
|
logIn: 'Log in with GitHub',
|
|
4
|
-
loading: 'Loading the website’s content',
|
|
4
|
+
loading: 'Loading the website’s content…',
|
|
5
5
|
cannotSave: (login: string) => `The account ${login} doesn’t have access to save. Log in with another GitHub account under Account.`,
|
|
6
6
|
notFound: 'Not found',
|
|
7
7
|
nothingAt: (route: string) => `There’s nothing at the address ${route}`,
|
|
8
|
-
/** After a save, when the
|
|
8
|
+
/** After a save, when the website has been updated with it (or not); `changes`: what the saves since the last update
|
|
9
9
|
* changed, as a list (changesText in deploy.ts). */
|
|
10
10
|
siteUpdated: (changes: string) => `The website has been updated: ${changes}.`,
|
|
11
11
|
siteNotUpdated: (changes: string) => `The website wasn’t updated (${changes}). Restore the previous version under Earlier versions.`,
|
|
@@ -40,8 +40,10 @@ export const app = {
|
|
|
40
40
|
redirect: (from: string) => `redirect from ${from}`,
|
|
41
41
|
logo: 'logo',
|
|
42
42
|
icon: 'icon',
|
|
43
|
-
r2Caching: '
|
|
43
|
+
r2Caching: 'faster editor',
|
|
44
44
|
place: 'storage location',
|
|
45
|
+
fastContentBuilds: 'faster updates for content',
|
|
46
|
+
paidBuilds: 'Workers Paid plan',
|
|
45
47
|
},
|
|
46
48
|
/** Why a new page or post cannot have an address. */
|
|
47
49
|
addressTaken: (address: string) => `There’s already a page or blog post with the address ${address}.`,
|
|
@@ -62,7 +64,7 @@ export const app = {
|
|
|
62
64
|
viewOnSite: 'View on the website',
|
|
63
65
|
/** GitHub (github.ts). */
|
|
64
66
|
loggedOut: 'You have been logged out. Log in again.',
|
|
65
|
-
githubAnswered: (status: number) => `GitHub
|
|
67
|
+
githubAnswered: (status: number) => `GitHub returned error ${status}. Try again.`,
|
|
66
68
|
pictureNotLoaded: 'The picture couldn’t be loaded from GitHub. Check your connection and try again.',
|
|
67
69
|
pictureNotWhole: 'The picture couldn’t be loaded completely. Try again.',
|
|
68
70
|
changedElsewhere: 'The file was changed elsewhere. Copy your text and reload the page.',
|
|
@@ -71,7 +73,7 @@ export const app = {
|
|
|
71
73
|
pictureNotOpened: 'The picture couldn’t be opened. Use a JPEG, PNG, or WebP picture.',
|
|
72
74
|
pictureNotReady: 'The picture couldn’t be prepared',
|
|
73
75
|
preparingPicture: 'Preparing the picture…',
|
|
74
|
-
/** The check before the
|
|
76
|
+
/** The check before the website is updated (checkSite.ts). */
|
|
75
77
|
invalidJson: 'The file isn’t valid JSON',
|
|
76
78
|
blocksOff: 'Turned off',
|
|
77
79
|
block: 'Block',
|
package/src/i18n/en-US/apps.ts
CHANGED
|
@@ -18,10 +18,10 @@ export const apps = {
|
|
|
18
18
|
needsLoads: 'Loads from other addresses',
|
|
19
19
|
needsSends: 'Sends forms to other addresses',
|
|
20
20
|
needsServer: 'Has its own part of the website’s server',
|
|
21
|
-
needsBuild: 'Makes its own files when the website is
|
|
21
|
+
needsBuild: 'Makes its own files when the website is updated',
|
|
22
22
|
/** What it changes of what the site does itself, by its file in hooks/ (@morphemecms/cms/lib/hooks.ts). */
|
|
23
23
|
changes: { 'page-colors': 'Changes the pages’ colors' } as Record<AppHook, string>,
|
|
24
|
-
/** In the check before the
|
|
24
|
+
/** In the check before the website is updated: a file in an app's hooks/ that is no place an app may change the site. */
|
|
25
25
|
unknownHook: (places: string) => `The file is no place an app can change the website: ${places}.`,
|
|
26
26
|
needsNothing: 'None',
|
|
27
27
|
/** The kinds of notifications it sends (its `notifications`), each turned off under "Konto" › "Notifikationer". */
|
|
@@ -52,13 +52,13 @@ export const apps = {
|
|
|
52
52
|
/** After installing: where its blocks are now. */
|
|
53
53
|
isInstalled: (app: string) => `${app} is installed`,
|
|
54
54
|
isUninstalled: (app: string) => `${app} is uninstalled`,
|
|
55
|
-
/** After installing or updating one from the store, which the
|
|
56
|
-
isInstalledSoon: (app: string) => `${app} is installed and can be used
|
|
57
|
-
isUpdatedSoon: (app: string, version: string) => `${app} is updated to ${version}
|
|
55
|
+
/** After installing or updating one from the store, which the website gets in a few minutes. */
|
|
56
|
+
isInstalledSoon: (app: string) => `${app} is installed and can be used in a few minutes`,
|
|
57
|
+
isUpdatedSoon: (app: string, version: string) => `${app} is updated to ${version}. The website uses it in a few minutes.`,
|
|
58
58
|
/** Asked before uninstalling. */
|
|
59
59
|
askUninstall: (app: string) => `Uninstall ${app}? What the app adds disappears from the editor.`,
|
|
60
60
|
/** The name of the switch in the row of one of its blocks (or kinds of a list), read by screen readers. */
|
|
61
|
-
activeOf: (block: string) => `
|
|
61
|
+
activeOf: (block: string) => `Enabled: ${block}`,
|
|
62
62
|
/** Under "Afinstaller". */
|
|
63
63
|
uninstallHint: 'Can be uninstalled, as nothing on the website uses the app.',
|
|
64
64
|
/** Over the pages and entries that use it (its blocks, its kind of pop-up). */
|
|
@@ -76,10 +76,10 @@ export const apps = {
|
|
|
76
76
|
/** The app store: the button to it over the list of apps, its title, and its search. */
|
|
77
77
|
find: 'Appstore',
|
|
78
78
|
searchStore: 'Search for apps',
|
|
79
|
-
loadingStore: 'Loading apps',
|
|
79
|
+
loadingStore: 'Loading apps…',
|
|
80
80
|
storeFailed: 'Couldn’t load the Appstore',
|
|
81
81
|
/** On "Appstore" when the site's Worker has no store key: only the site's own are there. */
|
|
82
|
-
noStore: 'The
|
|
82
|
+
noStore: 'The website has no Appstore',
|
|
83
83
|
/** On "Appstore": the box that connects the site to the Morpheme store, the row that disconnects it, and the answer at the store's hourly limit. */
|
|
84
84
|
connectTitle: 'The website is not connected to Morpheme',
|
|
85
85
|
connectText: 'Connect it to install apps and themes from the Appstore.',
|
|
@@ -110,7 +110,7 @@ export const apps = {
|
|
|
110
110
|
version: (version: string) => `Version ${version}`,
|
|
111
111
|
/** An app from the store in the site's file of apps, which the site's build does not have yet. */
|
|
112
112
|
pending: 'Installing…',
|
|
113
|
-
pendingHint: 'The app can be used
|
|
113
|
+
pendingHint: 'The app can be used in a few minutes.',
|
|
114
114
|
/** A newer version in the store: in the list, and the button on its page. */
|
|
115
115
|
updateFound: 'Update available',
|
|
116
116
|
update: (version: string) => `Update to ${version}`,
|
|
@@ -4,7 +4,7 @@ export const blockSettings = {
|
|
|
4
4
|
on: 'On',
|
|
5
5
|
off: 'Off',
|
|
6
6
|
/** At the right of a block's row, and the filter, when it is off (its switch: active, off). */
|
|
7
|
-
inactive: '
|
|
7
|
+
inactive: 'Disabled',
|
|
8
8
|
standard: 'Standard blocks',
|
|
9
9
|
/** In the group of an installed app with neither blocks nor kinds. */
|
|
10
10
|
noBlocks: 'The app has no blocks',
|
|
@@ -19,7 +19,7 @@ export const blockSettings = {
|
|
|
19
19
|
offHint: 'Not shown under Insert.',
|
|
20
20
|
/** The switch of an app's kind of a list, and under it: the list's name, its button for a new one ("Ny promovering"),
|
|
21
21
|
* and its name for more ("promoveringer"). */
|
|
22
|
-
active: '
|
|
22
|
+
active: 'Enabled',
|
|
23
23
|
kindStuck: (more: string) => `The block is used in ${more} and can’t be turned off`,
|
|
24
24
|
kindStillOn: (n: number, what: string) => `The block is used in ${n} ${what}. Delete ${n === 1 ? 'it' : 'them'} first.`,
|
|
25
25
|
kindOnHint: (create: string) => `Shown under ${create}.`,
|
|
@@ -28,11 +28,11 @@ export const blockSettings = {
|
|
|
28
28
|
/** Under the preview: whose fields it has (the page's title). */
|
|
29
29
|
asOn: (page: string) => `As shown on ${page}`,
|
|
30
30
|
empty: 'An example. The block isn’t used on any page yet.',
|
|
31
|
-
nothing: 'The block isn’t used on any page yet, so there
|
|
31
|
+
nothing: 'The block isn’t used on any page yet, so there’s nothing to show',
|
|
32
32
|
/** Under the preview of an app's kind of a list: whose fields it has (the entry's name), or none. */
|
|
33
33
|
asIn: (entry: string) => `As shown in ${entry}`,
|
|
34
34
|
kindEmpty: 'An example. The block isn’t used yet.',
|
|
35
|
-
kindNothing: 'The block isn’t used yet, so there
|
|
35
|
+
kindNothing: 'The block isn’t used yet, so there’s nothing to show',
|
|
36
36
|
pages: 'Used on',
|
|
37
37
|
noPages: 'No pages',
|
|
38
38
|
/** Over the entries of an app's kind of a list (its name for more), and when there are none. */
|
package/src/i18n/en-US/blocks.ts
CHANGED
|
@@ -10,9 +10,9 @@ export const blocks = {
|
|
|
10
10
|
notSaved: (why: string) => `The block can't be saved yet. ${why}`,
|
|
11
11
|
/** A picture, chosen and changed like a block. */
|
|
12
12
|
picture: {
|
|
13
|
-
label: '
|
|
14
|
-
hint: 'Choose
|
|
15
|
-
src: '
|
|
13
|
+
label: 'Picture',
|
|
14
|
+
hint: 'Choose a picture from Files, or upload a new one.',
|
|
15
|
+
src: 'Picture',
|
|
16
16
|
alt: 'Alt text',
|
|
17
17
|
altHint: 'For screen readers and search engines.',
|
|
18
18
|
/** A picture that is only decoration: drawn with alt="", without an alternative text. */
|
|
@@ -112,7 +112,7 @@ export const blocks = {
|
|
|
112
112
|
label: 'Banner',
|
|
113
113
|
hint: "The page's top with a text, a picture, and buttons.",
|
|
114
114
|
text: 'Text',
|
|
115
|
-
textHint: 'The first paragraph is the subtitle
|
|
115
|
+
textHint: 'The first paragraph is the subtitle. Add a picture and buttons with +.',
|
|
116
116
|
placement: 'Placement (picture)',
|
|
117
117
|
placementBeside: 'Beside',
|
|
118
118
|
placementBehind: 'Behind the text',
|
|
@@ -192,12 +192,12 @@ export const blocks = {
|
|
|
192
192
|
/** The filters of the list: all of them. */
|
|
193
193
|
allProviders: 'All providers',
|
|
194
194
|
allCategories: 'All categories',
|
|
195
|
-
/** A cookie added to the list
|
|
195
|
+
/** A cookie added to the list automatically (the app "Cookiescanner") and not yet looked through: the heading at the
|
|
196
196
|
* top of the list, what it says, or that it has no purpose yet, what its form says, and the button. */
|
|
197
197
|
fresh: 'New',
|
|
198
198
|
freshLabel: 'New',
|
|
199
199
|
noPurpose: 'No purpose',
|
|
200
|
-
freshNotice: 'Added to the list
|
|
200
|
+
freshNotice: 'Added to the list automatically. Review it and approve it.',
|
|
201
201
|
approve: 'Approve',
|
|
202
202
|
},
|
|
203
203
|
/** The shared texts ("Blokke" › "Cookieliste"), and what they start as on a site in this language. */
|
package/src/i18n/en-US/check.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// What is wrong when a form cannot be saved, also in the check before the
|
|
1
|
+
// What is wrong when a form cannot be saved, also in the check before the website is updated (check.ts).
|
|
2
2
|
export const check = {
|
|
3
3
|
/** What a value must be, when it is another kind (a file edited by hand). */
|
|
4
4
|
kinds: {
|
|
@@ -6,11 +6,11 @@ export const check = {
|
|
|
6
6
|
object: 'must be a group of fields',
|
|
7
7
|
number: 'must be a number',
|
|
8
8
|
boolean: 'must be on or off',
|
|
9
|
-
text: 'must be
|
|
9
|
+
text: 'must be text',
|
|
10
10
|
},
|
|
11
11
|
address: 'Write the address with letters or digits',
|
|
12
12
|
onlyDigits: 'Write only digits',
|
|
13
|
-
digits: (n: number) => `Write ${n} digits
|
|
13
|
+
digits: (n: number) => (n === 1 ? 'Write 1 digit' : `Write ${n} digits`),
|
|
14
14
|
fillIn: (label: string) => `Fill in "${label}."`,
|
|
15
15
|
/** A label and what is wrong with its value. */
|
|
16
16
|
wrong: (label: string, problem: string) => `${label}: ${problem}.`,
|
|
@@ -28,4 +28,7 @@ export const check = {
|
|
|
28
28
|
atMostItems: (label: string, max: number) => `There can be at most ${max} in "${label}."`,
|
|
29
29
|
mustBeOnPage: (name: string) => `"${name}" must be on the page.`,
|
|
30
30
|
mustBeShown: (name: string) => `"${name}" must be shown on the page.`,
|
|
31
|
+
recordShape: 'A file’s tags need "src" (the file’s address) and the lists "categories" and "removed".',
|
|
32
|
+
recordOverlap: (tag: string) => `The tag "${tag}" is both chosen and removed.`,
|
|
33
|
+
recordDuplicate: (src: string) => `Another file of tags is for ${src}.`,
|
|
31
34
|
};
|