Compare commits

...

123 Commits

Author SHA1 Message Date
Dan Ribbens
46e82d2931 chore: improve folder hook queries 2025-05-19 15:35:25 -04:00
Jarrod Flesch
8d507996c8 Merge branch 'main' into feat/folders 2025-05-19 13:24:19 -04:00
Jarrod Flesch
aa82763cb8 fix list menu items test 2025-05-19 13:20:17 -04:00
Jarrod Flesch
e7e6a7dd97 remove multiple listItem toggle clicks in preset query tests 2025-05-19 12:16:21 -04:00
Jarrod Flesch
e14c670a51 query preset passing tests 2025-05-19 11:01:09 -04:00
Jarrod Flesch
21f5d3473c fixes versions count test selectors 2025-05-19 09:14:32 -04:00
Jarrod Flesch
36597110e9 fix missing styles in admin-root 2025-05-16 15:59:25 -04:00
Jarrod Flesch
4f2b237858 fix: column selector bug 2025-05-16 14:26:04 -04:00
Jarrod Flesch
d90afba70d fixes more tests 2025-05-16 13:37:25 -04:00
Jarrod Flesch
decd512daa fix versions test selectors 2025-05-16 13:19:04 -04:00
Jarrod Flesch
b2bf95b17b allow using wait for ssr test 2025-05-16 11:46:40 -04:00
Jarrod Flesch
10e29dd5e2 fix outdated selectors in failing tests 2025-05-16 11:30:05 -04:00
Jarrod Flesch
4c4ae1295e fix css drawer header title selector in test 2025-05-16 10:27:31 -04:00
Jarrod Flesch
adb805dadb revert renderList type change 2025-05-15 17:00:19 -04:00
Jarrod Flesch
e5f0ca3d45 revert unused generics on ServerFunctionClient 2025-05-15 16:58:02 -04:00
Jarrod Flesch
fe2b7693cc successful build 2025-05-15 16:37:05 -04:00
Jarrod Flesch
30d4a098b1 adds missing translations 2025-05-15 16:34:39 -04:00
Jarrod Flesch
aa7918fe6e chore: extract tab style into button element 2025-05-15 16:30:13 -04:00
Jarrod Flesch
f23f87243c fixes issue with add folders in drawers 2025-05-15 16:29:51 -04:00
Jarrod Flesch
41b75882a1 Merge branch 'main' into HEAD 2025-05-15 16:28:06 -04:00
Jarrod Flesch
cfd3c34aba fix lint issues 2025-05-08 09:50:07 -07:00
Jarrod Flesch
270137e92e chore: add better preferences generic default 2025-05-07 15:07:49 -07:00
Jarrod Flesch
cab817d2aa build 2025-05-05 17:03:27 -04:00
Jarrod Flesch
db622e2b79 remove old folder int tests 2025-05-05 16:50:46 -04:00
Jarrod Flesch
c52204317a lint fixes 2025-05-05 16:35:08 -04:00
Jarrod Flesch
a85af1a6d3 import fix 2025-05-05 16:02:22 -04:00
Jarrod Flesch
bccadd5101 fix bad imports 2025-05-05 15:49:26 -04:00
Jarrod Flesch
2fa723743e chore: more test fixes 2025-05-05 14:53:25 -04:00
Jarrod Flesch
2904de778d fix unpublish and locked-docs suite 2025-05-05 12:53:48 -04:00
Jarrod Flesch
d37dfb1376 fix form-state tests 2025-05-05 12:02:42 -04:00
Jarrod Flesch
b203f617af fixes some failing test suites 2025-05-05 11:12:42 -04:00
Jarrod Flesch
ee46f27881 Merge branch 'main' into feat/folders 2025-05-05 09:01:32 -04:00
Jarrod Flesch
2426784726 passing versions suite 2025-05-05 08:31:48 -04:00
Jarrod Flesch
95b78a5951 fix admin locale picker test 2025-05-02 16:55:59 -04:00
Jarrod Flesch
d1c1ad2a1d fix build 2025-05-02 15:26:34 -04:00
Jarrod Flesch
2980bdb799 Merge branch 'main' into feat/folders 2025-05-02 14:37:46 -04:00
Jarrod Flesch
fe6923d0a7 bulk edit folder selection 2025-05-02 12:33:40 -04:00
Jarrod Flesch
7eec63ae69 fix toast missing title for media docs 2025-05-02 10:00:58 -04:00
Jarrod Flesch
77a7bc5e9c fix move to drawers layering and usage 2025-05-02 09:21:44 -04:00
Jarrod Flesch
780becc88a fix global views throwing errors on render 2025-05-02 08:23:37 -04:00
Jarrod Flesch
a2d394ec82 fix breadcrumb click issue 2025-05-02 08:20:49 -04:00
Jarrod Flesch
b1c8c96e97 chore: move doc to folder not updating label 2025-05-02 08:16:52 -04:00
Jarrod Flesch
6b6b596489 feat: allow searching all docs at root on collection-folder views 2025-05-01 16:52:36 -04:00
Jarrod Flesch
a89bc1479f better list selection organization 2025-05-01 14:13:48 -04:00
Jarrod Flesch
bd9f3b5bd2 chore: adds custom cell component for managing doc folder placement in default list view 2025-05-01 14:03:44 -04:00
Jarrod Flesch
2584ff42eb unifies move-to-drawer rather than needing many drawers 2025-05-01 00:34:37 -04:00
Jarrod Flesch
cc1f5fb70c add relationTo cell on browse-by-folder table 2025-04-30 16:46:33 -04:00
Jarrod Flesch
4f7f378b84 rename _parentFolder to _folder 2025-04-30 16:20:13 -04:00
Jarrod Flesch
b279fa7bde language edits for moving folders and documents 2025-04-30 16:13:10 -04:00
Jarrod Flesch
93230a5915 Merge branch 'main' into feat/folders 2025-04-23 06:46:18 -07:00
Jarrod Flesch
9f31daf8e7 prevent views from loading if folders are not enabled 2025-04-23 06:45:12 -07:00
Jarrod Flesch
ded7164dca pill sizing, fix e2e rendering issue 2025-04-21 16:24:09 -04:00
Jarrod Flesch
cc4526844a feat: allow add to folder from move drawer 2025-04-21 15:02:35 -04:00
Jarrod Flesch
362f25f593 commit updated types 2025-04-21 14:53:14 -04:00
Jarrod Flesch
7567d2358a fix: mismatch icon and overall size from small button and small pill 2025-04-21 14:52:44 -04:00
Jarrod Flesch
b418c3cade fix: folder not opening to current selection in doc view 2025-04-21 14:52:15 -04:00
Jarrod Flesch
db0d07d9a7 fix build 2025-04-21 12:41:02 -04:00
Jarrod Flesch
b56e2faad2 fixes folder specific build errors 2025-04-21 12:02:58 -04:00
Jarrod Flesch
56982f9811 Merge branch 'main' into feat/folders 2025-04-21 11:41:43 -04:00
Jarrod Flesch
9e1258811a finishes translations, adjusts create perms 2025-04-21 11:39:09 -04:00
Jarrod Flesch
1d2accfcbb chore: client side functional sorting 2025-04-18 15:50:56 -04:00
Jarrod Flesch
4a8bea2dde chore: adjust search placeholder and table column label 2025-04-18 11:22:36 -04:00
Jarrod Flesch
0149e42276 revert button styles with new chevron icon 2025-04-18 11:05:54 -04:00
Jarrod Flesch
36d9900774 Merge branch 'main' into feat/folders 2025-04-18 10:56:46 -04:00
Jarrod Flesch
f4d624a0c5 rm stale file 2025-04-18 09:46:51 -04:00
Jarrod Flesch
57bcfcc8be cleanup 2025-04-18 09:45:43 -04:00
Jarrod Flesch
d73ddbde0c browse by folder translation 2025-04-18 08:16:00 -04:00
Jarrod Flesch
189dd64799 debug false in test config 2025-04-17 15:21:01 -04:00
Jarrod Flesch
572ce2955a about done 2025-04-17 15:20:18 -04:00
Jarrod Flesch
87ca312a54 Merge branch 'main' into feat/folders 2025-04-14 14:24:12 -04:00
Jarrod Flesch
2b2fa67031 Merge remote-tracking branch 'origin/main' into feat/folders 2025-04-14 14:16:52 -04:00
Jarrod Flesch
2f45749634 rendering of root folder view 2025-04-14 14:16:01 -04:00
Jarrod Flesch
0534dd9506 add folder route to config 2025-04-14 08:05:25 -04:00
Jarrod Flesch
aee1ea1346 rename functions/files 2025-04-11 12:57:32 -04:00
Jarrod Flesch
82ba8cf8f4 feat: completes move-to folder drawer 2025-04-11 12:42:35 -04:00
Jarrod Flesch
1dfff2b0b0 adds no results and adjusts data functions 2025-04-08 10:43:20 -04:00
Jarrod Flesch
6b695355c3 wires up create new polymorphic list view button 2025-04-07 14:14:51 -04:00
Jarrod Flesch
29c32d3141 fix bad imports 2025-04-07 09:05:50 -04:00
Jarrod Flesch
f6afbed5d2 buildable 2025-04-07 08:56:56 -04:00
Jarrod Flesch
5dcf96ca10 chore: adjust translations function 2025-04-07 08:56:21 -04:00
Jarrod Flesch
91c22bd88c Merge branch 'main' into feat/folders 2025-04-04 16:22:57 -04:00
Jarrod Flesch
0d8b5677d9 feat: working collection-folder list view 2025-04-04 15:43:12 -04:00
Jarrod Flesch
e55c89c4b7 refactor: consolidates buildTableColumnState 2025-03-25 14:25:10 -04:00
Jarrod Flesch
f762d683c6 chore: refactoring, routing structure 2025-03-25 14:09:32 -04:00
Jarrod Flesch
953c538af0 Merge branch 'main' into feat/folders 2025-03-24 10:05:53 -04:00
Jarrod Flesch
65d0272950 refactor(folders): folder configuration 2025-03-13 10:05:30 -04:00
Jarrod Flesch
c570d6178c Merge branch 'main' into feat/folders 2025-02-27 15:30:14 -05:00
Jarrod Flesch
c935420937 lockfile 2025-02-26 16:00:10 -05:00
Jarrod Flesch
72dd527a15 Merge branch 'main' into feat/folders 2025-02-26 15:58:03 -05:00
Jarrod Flesch
1d6e0941e7 feat: search 2025-02-26 15:26:55 -05:00
Jarrod Flesch
91f7deb278 try/catch moveTo, fix button hover colors 2025-02-21 16:23:37 -05:00
Jarrod Flesch
d3986cfaf0 folder popup fix 2025-02-21 15:25:51 -05:00
Jarrod Flesch
4a9de40098 feat: wire up delete interations with confirm modal 2025-02-21 14:00:35 -05:00
Jarrod Flesch
f4679a4088 chore: adds folder delete confirmation translation 2025-02-21 13:59:55 -05:00
Jarrod Flesch
cb8ee7d2b0 fixes for moveTo drawer doc handling 2025-02-21 12:33:25 -05:00
Jarrod Flesch
06ef8da836 adds confirm translation for move drawer 2025-02-21 12:31:19 -05:00
Jarrod Flesch
91dc98978d chore: disabled instead of hide folders inside move drawer 2025-02-20 17:15:04 -05:00
Jarrod Flesch
07ff1ee7be misc fixes 2025-02-20 16:34:41 -05:00
Jarrod Flesch
72d393d24c more translations 2025-02-20 16:32:26 -05:00
Jarrod Flesch
95d4324af3 remove old files 2025-02-20 16:08:00 -05:00
Jarrod Flesch
a617d3166c use translations 2025-02-20 16:07:41 -05:00
Jarrod Flesch
6770e7a1b3 adds translation strings 2025-02-20 16:03:11 -05:00
Jarrod Flesch
f5e535dacf confirm modal for move 2025-02-20 15:21:43 -05:00
Jarrod Flesch
3d9c25e278 Merge branch 'main' into feat/folders 2025-02-20 13:37:13 -05:00
Jarrod Flesch
3bdb127ad4 start of modal tidy up 2025-02-20 13:31:46 -05:00
Jarrod Flesch
de4be1eb78 ui/ux fixes 2025-02-20 12:49:30 -05:00
Jarrod Flesch
d26529282f feat: move docs to folders within edit view 2025-02-19 16:52:33 -05:00
Jarrod Flesch
2694603353 feat: wire in pref for view type 2025-02-19 14:50:35 -05:00
Jarrod Flesch
9630de1bac feat: droppable crumbs, image cards, reusable item grid/table display 2025-02-19 13:59:38 -05:00
Jarrod Flesch
91e867ecb1 chore: regenerates lockfile 2025-02-14 14:54:54 -05:00
Jarrod Flesch
25e196bdd7 chore: successful build 2025-02-14 14:05:35 -05:00
Jarrod Flesch
b631eebdb5 Merge branch 'main' into feat/folders 2025-02-14 12:48:21 -05:00
Jarrod Flesch
a66f134cf6 feat: adds base folder functionality, list and grid views 2025-02-14 12:22:52 -05:00
Jarrod Flesch
b3aec9a23f chore: updates css imports 2025-01-16 15:10:49 -05:00
Jarrod Flesch
31911d87c1 chore: more merge resolutions 2025-01-14 16:05:19 -05:00
Jarrod Flesch
2d37ac41a2 merges main 2025-01-14 15:57:23 -05:00
Jarrod Flesch
b68af8ba31 Merge branch 'main' into feat/folders 2025-01-14 15:48:39 -05:00
Jarrod Flesch
4c775d1ced Merge branch 'main' into feat/folders 2025-01-02 12:25:43 -05:00
Jarrod Flesch
4706019a22 feat: brings back subfolder viewing, folder assigning etc 2024-12-18 14:40:26 -05:00
Jarrod Flesch
9c33a48192 Merge branch 'main' into feat/folders 2024-12-17 14:17:40 -05:00
Jarrod Flesch
8ec6784645 Merge branch 'main' into feat/beta/folders 2024-12-13 12:58:07 -05:00
Jarrod Flesch
8d9bf835a0 Merge branch 'main' into feat/beta/folders 2024-11-19 13:54:57 -05:00
Jarrod Flesch
2eef7ee388 moves base folder work into beta 2024-10-01 09:50:50 -04:00
291 changed files with 12817 additions and 2038 deletions

7
.vscode/launch.json vendored
View File

@@ -118,6 +118,13 @@
"request": "launch",
"type": "node-terminal"
},
{
"command": "pnpm tsx --no-deprecation test/dev.ts folder-view",
"cwd": "${workspaceFolder}",
"name": "Run Dev Folder View",
"request": "launch",
"type": "node-terminal"
},
{
"command": "pnpm tsx --no-deprecation test/dev.ts localization",
"cwd": "${workspaceFolder}",

View File

@@ -81,7 +81,7 @@ To install a Database Adapter, you can run **one** of the following commands:
#### 2. Copy Payload files into your Next.js app folder
Payload installs directly in your Next.js `/app` folder, and you'll need to place some files into that folder for Payload to run. You can copy these files from the [Blank Template](https://github.com/payloadcms/payload/tree/main/templates/blank/src/app/(payload)) on GitHub. Once you have the required Payload files in place in your `/app` folder, you should have something like this:
Payload installs directly in your Next.js `/app` folder, and you'll need to place some files into that folder for Payload to run. You can copy these files from the [Blank Template](<https://github.com/payloadcms/payload/tree/main/templates/blank/src/app/(payload)>) on GitHub. Once you have the required Payload files in place in your `/app` folder, you should have something like this:
```plaintext
app/

View File

@@ -1,7 +1,7 @@
'use client'
import type { SanitizedConfig } from 'payload'
import { Link } from '@payloadcms/ui'
import { Button } from '@payloadcms/ui'
import { useParams, usePathname, useSearchParams } from 'next/navigation.js'
import { formatAdminURL } from 'payload/shared'
import React from 'react'
@@ -13,7 +13,6 @@ export const DocumentTabLink: React.FC<{
children?: React.ReactNode
href: string
isActive?: boolean
isCollection?: boolean
newTab?: boolean
}> = ({
adminRoute,
@@ -54,19 +53,17 @@ export const DocumentTabLink: React.FC<{
isActiveFromProps
return (
<li
<Button
aria-label={ariaLabel}
buttonStyle="tab"
className={[baseClass, isActive && `${baseClass}--active`].filter(Boolean).join(' ')}
disabled={isActive}
el={!isActive || href !== pathname ? 'link' : 'div'}
newTab={newTab}
size="medium"
to={!isActive || href !== pathname ? hrefWithLocale : undefined}
>
<Link
className={`${baseClass}__link`}
href={!isActive || href !== pathname ? hrefWithLocale : ''}
prefetch={false}
{...(newTab && { rel: 'noopener noreferrer', target: '_blank' })}
tabIndex={isActive ? -1 : 0}
>
{children}
</Link>
</li>
{children}
</Button>
)
}

View File

@@ -1,74 +1,24 @@
@import '../../../../scss/styles.scss';
@layer payload-default {
.doc-tab {
@extend %h5;
position: relative;
&__link {
text-decoration: none;
display: flex;
justify-content: center;
align-items: center;
white-space: nowrap;
// Use a pseudo element for the accessability so that it doesn't take up DOM space
// Also because the parent element has `overflow: hidden` which would clip an outline
&:focus-visible::after {
content: '';
border: var(--accessibility-outline);
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
pointer-events: none;
}
}
&:focus:not(:focus-visible) {
opacity: 1;
}
&::before {
content: '';
display: block;
position: absolute;
width: 100%;
height: 100%;
border-radius: var(--style-radius-s);
background-color: var(--theme-elevation-50);
opacity: 0;
}
display: flex;
justify-content: center;
align-items: center;
white-space: nowrap;
&:hover {
&::before {
opacity: 1;
}
.doc-tab__count {
.pill-version-count {
background-color: var(--theme-elevation-150);
}
}
&--active {
font-weight: 600;
&::before {
opacity: 1;
background-color: var(--theme-elevation-100);
}
.doc-tab {
&__count {
background-color: var(--theme-elevation-250);
}
.pill-version-count {
background-color: var(--theme-elevation-250);
}
&:hover {
.doc-tab {
&__count {
background-color: var(--theme-elevation-250);
}
.pill-version-count {
background-color: var(--theme-elevation-250);
}
}
}
@@ -80,16 +30,7 @@
gap: 4px;
width: 100%;
height: 100%;
line-height: base(1.2);
padding: base(0.2) base(0.6);
}
&__count {
line-height: base(0.8);
min-width: base(0.8);
text-align: center;
background-color: var(--theme-elevation-100);
border-radius: var(--style-radius-s);
line-height: calc(var(--base) * 1.2);
}
}
}

View File

@@ -68,7 +68,6 @@ export const DocumentTab: React.FC<
baseClass={baseClass}
href={href}
isActive={isActive}
isCollection={!!collectionConfig && !globalConfig}
newTab={newTab}
>
<span className={`${baseClass}__label`}>

View File

@@ -0,0 +1,9 @@
@layer payload-default {
.pill-version-count {
line-height: calc(var(--base) * 0.8);
min-width: calc(var(--base) * 0.8);
text-align: center;
background-color: var(--theme-elevation-100);
border-radius: var(--style-radius-s);
}
}

View File

@@ -2,7 +2,9 @@
import { useDocumentInfo } from '@payloadcms/ui'
import React from 'react'
import { baseClass } from '../../Tab/index.js'
import './index.scss'
const baseClass = 'pill-version-count'
export const VersionsPill: React.FC = () => {
const { versionCount } = useDocumentInfo()
@@ -11,5 +13,5 @@ export const VersionsPill: React.FC = () => {
return null
}
return <span className={`${baseClass}__count`}>{versionCount}</span>
return <span className={baseClass}>{versionCount}</span>
}

View File

@@ -4,7 +4,7 @@ import type { groupNavItems } from '@payloadcms/ui/shared'
import type { NavPreferences } from 'payload'
import { getTranslation } from '@payloadcms/translations'
import { Link, NavGroup, useConfig, useTranslation } from '@payloadcms/ui'
import { BrowseByFolderButton, Link, NavGroup, useConfig, useTranslation } from '@payloadcms/ui'
import { EntityType } from '@payloadcms/ui/shared'
import { usePathname } from 'next/navigation.js'
import { formatAdminURL } from 'payload/shared'
@@ -20,14 +20,28 @@ export const DefaultNavClient: React.FC<{
const {
config: {
admin: {
routes: { folders: foldersRoute },
},
folders: { collections: folderCollections = {}, enabled } = {},
routes: { admin: adminRoute },
},
} = useConfig()
const { i18n } = useTranslation()
const folderURL = formatAdminURL({
adminRoute,
path: foldersRoute,
})
const viewingRootFolderView = pathname.startsWith(folderURL)
return (
<Fragment>
{enabled && Object.keys(folderCollections).length > 0 && (
<BrowseByFolderButton active={viewingRootFolderView} />
)}
{groups.map(({ entities, label }, key) => {
return (
<NavGroup isOpen={navPreferences?.groups?.[label]?.open} key={key} label={label}>

View File

@@ -0,0 +1,202 @@
import type {
AdminViewServerProps,
BuildCollectionFolderViewResult,
FolderListViewServerPropsOnly,
ListQuery,
Where,
} from 'payload'
import { DefaultCollectionFolderView, FolderProvider, HydrateAuthProvider } from '@payloadcms/ui'
import { RenderServerComponent } from '@payloadcms/ui/elements/RenderServerComponent'
import { formatAdminURL, mergeListSearchAndWhere } from '@payloadcms/ui/shared'
import { redirect } from 'next/navigation.js'
import { getFolderData, parseDocumentID } from 'payload'
import React from 'react'
// import { renderFolderViewSlots } from './renderFolderViewSlots.js'
export type BuildCollectionFolderViewStateArgs = {
disableBulkDelete?: boolean
disableBulkEdit?: boolean
enableRowSelections: boolean
folderID?: number | string
isInDrawer?: boolean
overrideEntityVisibility?: boolean
query: ListQuery
} & AdminViewServerProps
/**
* Builds the entire view for collection-folder views on the server
*/
export const buildCollectionFolderView = async (
args: BuildCollectionFolderViewStateArgs,
): Promise<BuildCollectionFolderViewResult> => {
const {
disableBulkDelete,
disableBulkEdit,
enableRowSelections,
folderID,
initPageResult,
isInDrawer,
overrideEntityVisibility,
params,
query: queryFromArgs,
searchParams,
} = args
const {
collectionConfig,
collectionConfig: { slug: collectionSlug },
locale: fullLocale,
permissions,
req: {
i18n,
payload,
payload: { config },
query: queryFromReq,
user,
},
visibleEntities,
} = initPageResult
if (!permissions?.collections?.[collectionSlug]?.read) {
throw new Error('not-found')
}
if (collectionConfig) {
const query = queryFromArgs || queryFromReq
// const collectionFolderPreferences = await upsertPreferences<ListPreferences>({
// key: `${collectionSlug}-collection-folder`,
// req,
// value: {
// },
// })
const {
routes: { admin: adminRoute },
} = config
if (
(!visibleEntities.collections.includes(collectionSlug) && !overrideEntityVisibility) ||
!Object.keys(config.folders.collections).includes(collectionSlug)
) {
throw new Error('not-found')
}
const whereConstraints = [
mergeListSearchAndWhere({
collectionConfig,
search: typeof query?.search === 'string' ? query.search : undefined,
where: (query?.where as Where) || undefined,
}),
]
if (folderID) {
whereConstraints.push({
_folder: {
equals: parseDocumentID({ id: folderID, collectionSlug, payload }),
},
})
} else {
whereConstraints.push({
_folder: {
exists: false,
},
})
}
const { breadcrumbs, documents, subfolders } = await getFolderData({
collectionSlug,
folderID,
payload: initPageResult.req.payload,
search: query?.search as string,
user: initPageResult.req.user,
})
const resolvedFolderID = breadcrumbs[breadcrumbs.length - 1]?.id
if (
!isInDrawer &&
((resolvedFolderID && folderID && folderID !== String(resolvedFolderID)) ||
(folderID && !resolvedFolderID))
) {
return redirect(
formatAdminURL({
adminRoute,
path: `/collections/${collectionSlug}/folders`,
serverURL: config.serverURL,
}),
)
}
const newDocumentURL = formatAdminURL({
adminRoute,
path: `/collections/${collectionSlug}/create`,
})
const hasCreatePermission = permissions?.collections?.[collectionSlug]?.create
const serverProps: FolderListViewServerPropsOnly = {
collectionConfig,
documents,
i18n,
locale: fullLocale,
params,
payload,
permissions,
searchParams,
subfolders,
user,
}
// We could support slots in the folder view in the future
// const folderViewSlots = renderFolderViewSlots({
// clientProps: {
// collectionSlug,
// hasCreatePermission,
// newDocumentURL,
// },
// collectionConfig,
// description: typeof collectionConfig.admin.description === 'function'
// ? collectionConfig.admin.description({ t: i18n.t })
// : collectionConfig.admin.description,
// payload,
// serverProps,
// })
const search = query?.search as string
return {
View: (
<FolderProvider
breadcrumbs={breadcrumbs}
collectionSlug={collectionSlug}
documents={documents}
folderID={folderID}
search={search}
subfolders={subfolders}
>
<HydrateAuthProvider permissions={permissions} />
{RenderServerComponent({
clientProps: {
// ...folderViewSlots,
collectionSlug,
disableBulkDelete,
disableBulkEdit,
enableRowSelections,
hasCreatePermission,
newDocumentURL,
},
Component: collectionConfig?.admin?.components?.views?.list?.Component,
Fallback: DefaultCollectionFolderView,
importMap: payload.importMap,
serverProps,
})}
</FolderProvider>
),
}
}
throw new Error('not-found')
}

View File

@@ -0,0 +1,20 @@
import type React from 'react'
import { notFound } from 'next/navigation.js'
import type { BuildCollectionFolderViewStateArgs } from './buildView.js'
import { buildCollectionFolderView } from './buildView.js'
export const CollectionFolderView: React.FC<BuildCollectionFolderViewStateArgs> = async (args) => {
try {
const { View } = await buildCollectionFolderView(args)
return View
} catch (error) {
if (error.message === 'not-found') {
notFound()
} else {
console.error(error) // eslint-disable-line no-console
}
}
}

View File

@@ -0,0 +1,35 @@
import type { Metadata } from 'next'
import type { SanitizedCollectionConfig } from 'payload'
import { getTranslation } from '@payloadcms/translations'
import type { GenerateViewMetadata } from '../Root/index.js'
import { generateMetadata } from '../../utilities/meta.js'
export const generateCollectionFolderMetadata = async (
args: {
collectionConfig: SanitizedCollectionConfig
} & Parameters<GenerateViewMetadata>[0],
): Promise<Metadata> => {
const { collectionConfig, config, i18n } = args
let title: string = ''
const description: string = ''
const keywords: string = ''
if (collectionConfig) {
title = getTranslation(collectionConfig.labels.singular, i18n)
}
title = `${title ? `${title} ` : title}${i18n.t('folder:folders')}`
return generateMetadata({
...(config.admin.meta || {}),
description,
keywords,
serverURL: config.serverURL,
title,
...(collectionConfig?.admin?.meta || {}),
})
}

View File

@@ -0,0 +1,99 @@
import type {
AfterFolderListClientProps,
AfterFolderListTableClientProps,
AfterFolderListTableServerPropsOnly,
BeforeFolderListClientProps,
BeforeFolderListServerPropsOnly,
BeforeFolderListTableClientProps,
BeforeFolderListTableServerPropsOnly,
FolderListViewServerPropsOnly,
FolderListViewSlots,
ListViewSlotSharedClientProps,
Payload,
SanitizedCollectionConfig,
StaticDescription,
ViewDescriptionClientProps,
ViewDescriptionServerPropsOnly,
} from 'payload'
import { RenderServerComponent } from '@payloadcms/ui/elements/RenderServerComponent'
type Args = {
clientProps: ListViewSlotSharedClientProps
collectionConfig: SanitizedCollectionConfig
description?: StaticDescription
payload: Payload
serverProps: FolderListViewServerPropsOnly
}
export const renderFolderViewSlots = ({
clientProps,
collectionConfig,
description,
payload,
serverProps,
}: Args): FolderListViewSlots => {
const result: FolderListViewSlots = {} as FolderListViewSlots
if (collectionConfig.admin.components?.afterList) {
result.AfterFolderList = RenderServerComponent({
clientProps: clientProps satisfies AfterFolderListClientProps,
Component: collectionConfig.admin.components.afterList,
importMap: payload.importMap,
serverProps: serverProps satisfies AfterFolderListTableServerPropsOnly,
})
}
const listMenuItems = collectionConfig.admin.components?.listMenuItems
if (Array.isArray(listMenuItems)) {
result.listMenuItems = [
RenderServerComponent({
clientProps,
Component: listMenuItems,
importMap: payload.importMap,
serverProps,
}),
]
}
if (collectionConfig.admin.components?.afterListTable) {
result.AfterFolderListTable = RenderServerComponent({
clientProps: clientProps satisfies AfterFolderListTableClientProps,
Component: collectionConfig.admin.components.afterListTable,
importMap: payload.importMap,
serverProps: serverProps satisfies AfterFolderListTableServerPropsOnly,
})
}
if (collectionConfig.admin.components?.beforeList) {
result.BeforeFolderList = RenderServerComponent({
clientProps: clientProps satisfies BeforeFolderListClientProps,
Component: collectionConfig.admin.components.beforeList,
importMap: payload.importMap,
serverProps: serverProps satisfies BeforeFolderListServerPropsOnly,
})
}
if (collectionConfig.admin.components?.beforeListTable) {
result.BeforeFolderListTable = RenderServerComponent({
clientProps: clientProps satisfies BeforeFolderListTableClientProps,
Component: collectionConfig.admin.components.beforeListTable,
importMap: payload.importMap,
serverProps: serverProps satisfies BeforeFolderListTableServerPropsOnly,
})
}
if (collectionConfig.admin.components?.Description) {
result.Description = RenderServerComponent({
clientProps: {
collectionSlug: collectionConfig.slug,
description,
} satisfies ViewDescriptionClientProps,
Component: collectionConfig.admin.components.Description,
importMap: payload.importMap,
serverProps: serverProps satisfies ViewDescriptionServerPropsOnly,
})
}
return result
}

View File

@@ -32,9 +32,12 @@ import { renderDocumentSlots } from './renderDocumentSlots.js'
export const generateMetadata: GenerateEditViewMetadata = async (args) => getMetaBySegment(args)
// This function will be responsible for rendering an Edit Document view
// it will be called on the server for Edit page views as well as
// called on-demand from document drawers
/**
* This function is responsible for rendering
* an Edit Document view on the server for both:
* - default document edit views
* - on-demand edit views within drawers
*/
export const renderDocument = async ({
disableActions,
documentSubViewType,

View File

@@ -0,0 +1,152 @@
import type {
AdminViewServerProps,
BuildCollectionFolderViewResult,
FolderListViewServerPropsOnly,
ListQuery,
} from 'payload'
import { DefaultFolderView, FolderProvider, HydrateAuthProvider } from '@payloadcms/ui'
import { RenderServerComponent } from '@payloadcms/ui/elements/RenderServerComponent'
import { formatAdminURL } from '@payloadcms/ui/shared'
import { redirect } from 'next/navigation.js'
import { getFolderData } from 'payload'
import React from 'react'
export type BuildFolderViewArgs = {
customCellProps?: Record<string, any>
disableBulkDelete?: boolean
disableBulkEdit?: boolean
enableRowSelections: boolean
folderID?: number | string
isInDrawer?: boolean
overrideEntityVisibility?: boolean
query: ListQuery
} & AdminViewServerProps
export const buildFolderView = async (
args: BuildFolderViewArgs,
): Promise<BuildCollectionFolderViewResult> => {
const {
disableBulkDelete,
disableBulkEdit,
enableRowSelections,
folderID,
initPageResult,
isInDrawer,
params,
query: queryFromArgs,
searchParams,
} = args
const {
locale: fullLocale,
permissions,
req: {
i18n,
payload,
payload: { config },
query: queryFromReq,
user,
},
visibleEntities,
} = initPageResult
const allFolderCollectionSlugs = Object.keys(config?.folders?.collections || {})
const collections = allFolderCollectionSlugs.filter(
(collectionSlug) =>
permissions?.collections?.[collectionSlug]?.read &&
visibleEntities.collections.includes(collectionSlug),
)
if (!collections.length) {
throw new Error('not-found')
}
const query = queryFromArgs || queryFromReq
// get relationTo filter from query params
const selectedCollectionSlugs: string[] =
Array.isArray(query?.relationTo) && query.relationTo.length
? query.relationTo
: [...allFolderCollectionSlugs, config.folders.slug]
const {
routes: { admin: adminRoute },
} = config
const { breadcrumbs, documents, subfolders } = await getFolderData({
folderID,
payload: initPageResult.req.payload,
search: query?.search as string,
user: initPageResult.req.user,
})
const resolvedFolderID = breadcrumbs[breadcrumbs.length - 1]?.id
if (
!isInDrawer &&
((resolvedFolderID && folderID && folderID !== String(resolvedFolderID)) ||
(folderID && !resolvedFolderID))
) {
return redirect(
formatAdminURL({
adminRoute,
path: config.admin.routes.folders,
serverURL: config.serverURL,
}),
)
}
const serverProps: Omit<FolderListViewServerPropsOnly, 'collectionConfig' | 'listPreferences'> = {
documents,
i18n,
locale: fullLocale,
params,
payload,
permissions,
searchParams,
subfolders,
user,
}
// const folderViewSlots = renderFolderViewSlots({
// clientProps: {
// },
// description: staticDescription,
// payload,
// serverProps,
// })
// documents cannot be created without a parent folder in this view
const hasCreatePermissionCollectionSlugs = folderID
? [config.folders.slug, ...allFolderCollectionSlugs]
: [config.folders.slug]
return {
View: (
<FolderProvider
breadcrumbs={breadcrumbs}
documents={documents}
filteredCollectionSlugs={selectedCollectionSlugs}
folderID={folderID}
subfolders={subfolders}
>
<HydrateAuthProvider permissions={permissions} />
{RenderServerComponent({
clientProps: {
// ...folderViewSlots,
disableBulkDelete,
disableBulkEdit,
enableRowSelections,
hasCreatePermissionCollectionSlugs,
selectedCollectionSlugs,
},
// Component:config.folders?.components?.views?.list?.Component,
Fallback: DefaultFolderView,
importMap: payload.importMap,
serverProps,
})}
</FolderProvider>
),
}
}

View File

@@ -0,0 +1,20 @@
import type React from 'react'
import { notFound } from 'next/navigation.js'
import type { BuildFolderViewArgs } from './buildView.js'
import { buildFolderView } from './buildView.js'
export const FolderView: React.FC<BuildFolderViewArgs> = async (args) => {
try {
const { View } = await buildFolderView(args)
return View
} catch (error) {
if (error.message === 'not-found') {
notFound()
} else {
console.error(error) // eslint-disable-line no-console
}
}
}

View File

@@ -0,0 +1,23 @@
import type { Metadata } from 'next'
import type { GenerateViewMetadata } from '../Root/index.js'
import { generateMetadata } from '../../utilities/meta.js'
export const generateBrowseByFolderMetadata = async (
args: Parameters<GenerateViewMetadata>[0],
): Promise<Metadata> => {
const { config, i18n } = args
const title: string = i18n.t('folder:browseByFolder')
const description: string = ''
const keywords: string = ''
return generateMetadata({
...(config.admin.meta || {}),
description,
keywords,
serverURL: config.serverURL,
title,
})
}

View File

@@ -40,6 +40,12 @@ type RenderListViewArgs = {
redirectAfterDuplicate?: boolean
} & AdminViewServerProps
/**
* This function is responsible for rendering
* the list view on the server for both:
* - default list view
* - list view within drawers
*/
export const renderListView = async (
args: RenderListViewArgs,
): Promise<{

View File

@@ -1,6 +1,6 @@
import type { AdminViewConfig, SanitizedConfig } from 'payload'
import type { ViewFromConfig } from './getViewFromConfig.js'
import type { ViewFromConfig } from './getRouteData.js'
import { isPathMatchingRoute } from './isPathMatchingRoute.js'

View File

@@ -14,9 +14,11 @@ import { formatAdminURL } from 'payload/shared'
import type { initPage } from '../../utilities/initPage/index.js'
import { Account } from '../Account/index.js'
import { CollectionFolderView } from '../CollectionFolders/index.js'
import { CreateFirstUserView } from '../CreateFirstUser/index.js'
import { Dashboard } from '../Dashboard/index.js'
import { Document as DocumentView } from '../Document/index.js'
import { FolderView } from '../Folders/index.js'
import { forgotPasswordBaseClass, ForgotPasswordView } from '../ForgotPassword/index.js'
import { ListView } from '../List/index.js'
import { loginBaseClass, LoginView } from '../Login/index.js'
@@ -31,6 +33,7 @@ import { isPathMatchingRoute } from './isPathMatchingRoute.js'
const baseClasses = {
account: 'account',
folders: 'folders',
forgot: forgotPasswordBaseClass,
login: loginBaseClass,
reset: resetPasswordBaseClass,
@@ -49,6 +52,7 @@ export type ViewFromConfig = {
const oneSegmentViews: OneSegmentViews = {
account: Account,
createFirstUser: CreateFirstUserView,
folders: FolderView,
forgot: ForgotPasswordView,
inactivity: LogoutInactivity,
login: LoginView,
@@ -56,7 +60,7 @@ const oneSegmentViews: OneSegmentViews = {
unauthorized: UnauthorizedView,
}
type GetViewFromConfigArgs = {
type GetRouteDataArgs = {
adminRoute: string
config: SanitizedConfig
currentRoute: string
@@ -67,9 +71,10 @@ type GetViewFromConfigArgs = {
segments: string[]
}
type GetViewFromConfigResult = {
type GetRouteDataResult = {
DefaultView: ViewFromConfig
documentSubViewType?: DocumentSubViewTypes
folderID?: string
initPageOptions: Parameters<typeof initPage>[0]
serverProps: ServerPropsFromView
templateClassName: string
@@ -77,19 +82,20 @@ type GetViewFromConfigResult = {
viewType?: ViewTypes
}
export const getViewFromConfig = ({
export const getRouteData = ({
adminRoute,
config,
currentRoute,
importMap,
searchParams,
segments,
}: GetViewFromConfigArgs): GetViewFromConfigResult => {
}: GetRouteDataArgs): GetRouteDataResult => {
let ViewToRender: ViewFromConfig = null
let templateClassName: string
let templateType: 'default' | 'minimal' | undefined
let documentSubViewType: DocumentSubViewTypes
let viewType: ViewTypes
let folderID: string
const initPageOptions: Parameters<typeof initPage>[0] = {
config,
@@ -104,6 +110,7 @@ export const getViewFromConfig = ({
const isCollection = segmentOne === 'collections'
let matchedCollection: SanitizedConfig['collections'][number] = undefined
let matchedGlobal: SanitizedConfig['globals'][number] = undefined
const isFolderViewEnabled = config.folders?.enabled
const serverProps: ServerPropsFromView = {
viewActions: config?.admin?.components?.actions || [],
@@ -153,6 +160,7 @@ export const getViewFromConfig = ({
if (oneSegmentViews[viewKey]) {
// --> /account
// --> /create-first-user
// --> /folders
// --> /forgot
// --> /login
// --> /logout
@@ -166,6 +174,11 @@ export const getViewFromConfig = ({
templateClassName = baseClasses[viewKey]
templateType = 'minimal'
if (isFolderViewEnabled && viewKey === 'folders') {
templateType = 'default'
viewType = 'folders'
}
if (viewKey === 'account') {
templateType = 'default'
viewType = 'account'
@@ -182,9 +195,18 @@ export const getViewFromConfig = ({
templateClassName = baseClasses[segmentTwo]
templateType = 'minimal'
viewType = 'reset'
}
if (isCollection && matchedCollection) {
} else if (`/${segmentOne}` === config.admin.routes.folders) {
if (isFolderViewEnabled) {
// --> /folders/:folderID
ViewToRender = {
Component: oneSegmentViews.folders,
}
templateClassName = baseClasses.folders
templateType = 'default'
viewType = 'folders'
folderID = segmentTwo
}
} else if (isCollection && matchedCollection) {
// --> /collections/:collectionSlug
ViewToRender = {
@@ -229,31 +251,49 @@ export const getViewFromConfig = ({
templateType = 'minimal'
viewType = 'verify'
} else if (isCollection && matchedCollection) {
// Custom Views
// --> /collections/:collectionSlug/:id
// --> /collections/:collectionSlug/:id/api
// --> /collections/:collectionSlug/:id/preview
// --> /collections/:collectionSlug/:id/versions
// --> /collections/:collectionSlug/:id/versions/:versionID
if (segmentThree === 'folders') {
if (
isFolderViewEnabled &&
Object.keys(config.folders.collections).includes(matchedCollection.slug)
) {
// Collection Folder Views
// --> /collections/:collectionSlug/folders
// --> /collections/:collectionSlug/folders/:folderID
ViewToRender = {
Component: CollectionFolderView,
}
ViewToRender = {
Component: DocumentView,
templateClassName = `collection-folders`
templateType = 'default'
viewType = 'collection-folders'
folderID = segmentFour
}
} else {
// Collection Edit Views
// --> /collections/:collectionSlug/:id
// --> /collections/:collectionSlug/:id/api
// --> /collections/:collectionSlug/:id/preview
// --> /collections/:collectionSlug/:id/versions
// --> /collections/:collectionSlug/:id/versions/:versionID
ViewToRender = {
Component: DocumentView,
}
templateClassName = `collection-default-edit`
templateType = 'default'
const viewInfo = getDocumentViewInfo([segmentFour, segmentFive])
viewType = viewInfo.viewType
documentSubViewType = viewInfo.documentSubViewType
attachViewActions({
collectionOrGlobal: matchedCollection,
serverProps,
viewKeyArg: documentSubViewType,
})
}
templateClassName = `collection-default-edit`
templateType = 'default'
const viewInfo = getDocumentViewInfo([segmentFour, segmentFive])
viewType = viewInfo.viewType
documentSubViewType = viewInfo.documentSubViewType
attachViewActions({
collectionOrGlobal: matchedCollection,
serverProps,
viewKeyArg: documentSubViewType,
})
} else if (isGlobal && matchedGlobal) {
// Custom Views
// Global Edit Views
// --> /globals/:globalSlug/versions
// --> /globals/:globalSlug/preview
// --> /globals/:globalSlug/versions/:versionID
@@ -288,6 +328,7 @@ export const getViewFromConfig = ({
return {
DefaultView: ViewToRender,
documentSubViewType,
folderID,
initPageOptions,
serverProps,
templateClassName,

View File

@@ -11,12 +11,12 @@ import { RenderServerComponent } from '@payloadcms/ui/elements/RenderServerCompo
import { getClientConfig } from '@payloadcms/ui/utilities/getClientConfig'
import { notFound, redirect } from 'next/navigation.js'
import { formatAdminURL } from 'payload/shared'
import React, { Fragment } from 'react'
import React from 'react'
import { DefaultTemplate } from '../../templates/Default/index.js'
import { MinimalTemplate } from '../../templates/Minimal/index.js'
import { initPage } from '../../utilities/initPage/index.js'
import { getViewFromConfig } from './getViewFromConfig.js'
import { getRouteData } from './getRouteData.js'
export type GenerateViewMetadata = (args: {
config: SanitizedConfig
@@ -64,12 +64,13 @@ export const RootPage = async ({
const {
DefaultView,
documentSubViewType,
folderID,
initPageOptions,
serverProps,
templateClassName,
templateType,
viewType,
} = getViewFromConfig({
} = getRouteData({
adminRoute,
config,
currentRoute,
@@ -89,6 +90,10 @@ export const RootPage = async ({
})
?.then((doc) => !!doc))
/**
* This function is responsible for handling the case where the view is not found.
* The current route did not match any default views or custom route views.
*/
if (!DefaultView?.Component && !DefaultView?.payloadComponent) {
if (initPageResult?.req?.user) {
notFound()
@@ -141,6 +146,7 @@ export const RootPage = async ({
...serverProps,
clientConfig,
docID: initPageResult?.docID,
folderID,
i18n: initPageResult?.req.i18n,
importMap,
initPageResult,
@@ -151,8 +157,8 @@ export const RootPage = async ({
})
return (
<Fragment>
{!templateType && <Fragment>{RenderedView}</Fragment>}
<React.Fragment>
{!templateType && <React.Fragment>{RenderedView}</React.Fragment>}
{templateType === 'minimal' && (
<MinimalTemplate className={templateClassName}>{RenderedView}</MinimalTemplate>
)}
@@ -182,6 +188,6 @@ export const RootPage = async ({
{RenderedView}
</DefaultTemplate>
)}
</Fragment>
</React.Fragment>
)
}

View File

@@ -3,9 +3,11 @@ import type { SanitizedConfig } from 'payload'
import { getNextRequestI18n } from '../../utilities/getNextRequestI18n.js'
import { generateAccountViewMetadata } from '../Account/metadata.js'
import { generateCollectionFolderMetadata } from '../CollectionFolders/metadata.js'
import { generateCreateFirstUserViewMetadata } from '../CreateFirstUser/metadata.js'
import { generateDashboardViewMetadata } from '../Dashboard/metadata.js'
import { generateDocumentViewMetadata } from '../Document/metadata.js'
import { generateBrowseByFolderMetadata } from '../Folders/metadata.js'
import { generateForgotPasswordViewMetadata } from '../ForgotPassword/metadata.js'
import { generateListViewMetadata } from '../List/metadata.js'
import { generateLoginViewMetadata } from '../Login/metadata.js'
@@ -18,6 +20,7 @@ import { getCustomViewByRoute } from './getCustomViewByRoute.js'
const oneSegmentMeta = {
'create-first-user': generateCreateFirstUserViewMetadata,
folders: generateBrowseByFolderMetadata,
forgot: generateForgotPasswordViewMetadata,
login: generateLoginViewMetadata,
logout: generateUnauthorizedViewMetadata,
@@ -45,7 +48,7 @@ export const generatePageMetadata = async ({
const segments = Array.isArray(params.segments) ? params.segments : []
const currentRoute = `/${segments.join('/')}`
const [segmentOne, segmentTwo] = segments
const [segmentOne, segmentTwo, segmentThree] = segments
const isGlobal = segmentOne === 'globals'
const isCollection = segmentOne === 'collections'
@@ -75,6 +78,7 @@ export const generatePageMetadata = async ({
if (oneSegmentMeta[segmentOne] && segmentOne !== 'account') {
// --> /create-first-user
// --> /forgot
// --> /folders
// --> /login
// --> /logout
// --> /logout-inactivity
@@ -92,8 +96,10 @@ export const generatePageMetadata = async ({
if (`/${segmentOne}` === config.admin.routes.reset) {
// --> /reset/:token
meta = await generateResetPasswordViewMetadata({ config, i18n })
}
if (isCollection) {
} else if (`/${segmentOne}` === config.admin.routes.folders) {
// --> /folders/:folderID
meta = await generateBrowseByFolderMetadata({ config, i18n })
} else if (isCollection) {
// --> /collections/:collectionSlug
meta = await generateListViewMetadata({ collectionConfig, config, i18n })
} else if (isGlobal) {
@@ -112,15 +118,29 @@ export const generatePageMetadata = async ({
// --> /:collectionSlug/verify/:token
meta = await generateVerifyViewMetadata({ config, i18n })
} else if (isCollection) {
// Custom Views
// --> /collections/:collectionSlug/:id
// --> /collections/:collectionSlug/:id/preview
// --> /collections/:collectionSlug/:id/versions
// --> /collections/:collectionSlug/:id/versions/:version
// --> /collections/:collectionSlug/:id/api
meta = await generateDocumentViewMetadata({ collectionConfig, config, i18n, params })
if (segmentThree === 'folders') {
if (Object.keys(config.folders.collections).includes(collectionConfig.slug)) {
// Collection Folder Views
// --> /collections/:collectionSlug/folders
// --> /collections/:collectionSlug/folders/:id
meta = await generateCollectionFolderMetadata({
collectionConfig,
config,
i18n,
params,
})
}
} else {
// Collection Document Views
// --> /collections/:collectionSlug/:id
// --> /collections/:collectionSlug/:id/preview
// --> /collections/:collectionSlug/:id/versions
// --> /collections/:collectionSlug/:id/versions/:version
// --> /collections/:collectionSlug/:id/api
meta = await generateDocumentViewMetadata({ collectionConfig, config, i18n, params })
}
} else if (isGlobal) {
// Custom Views
// Global Document Views
// --> /globals/:globalSlug/versions
// --> /globals/:globalSlug/versions/:version
// --> /globals/:globalSlug/preview

View File

@@ -18,9 +18,11 @@ export const renderPill = (data, latestVersion, currentLabel, previousLabel, pil
return (
<React.Fragment>
{data?.id === latestVersion ? (
<Pill pillStyle={pillStyle}>{currentLabel}</Pill>
<Pill pillStyle={pillStyle} size="small">
{currentLabel}
</Pill>
) : (
<Pill>{previousLabel}</Pill>
<Pill size="small">{previousLabel}</Pill>
)}
&nbsp;&nbsp;
</React.Fragment>

View File

@@ -1,7 +1,7 @@
/**
* @param {import('next').NextConfig} nextConfig
* @param {Object} [options] - Optional configuration options
* @param {boolean} [options.devBundleServerPackages] - Whether to bundle server packages in development mode. @default true
* @param {Object} [sortOnOptions] - Optional configuration options
* @param {boolean} [sortOnOptions.devBundleServerPackages] - Whether to bundle server packages in development mode. @default true
*
* @returns {import('next').NextConfig}
* */

View File

@@ -53,7 +53,7 @@ export type ListQuery = {
search?: string
sort?: Sort
where?: Where
}
} & Record<string, unknown>
export type BuildTableStateArgs = {
collectionSlug: string | string[]
@@ -71,3 +71,7 @@ export type BuildTableStateArgs = {
req: PayloadRequest
tableAppearance?: 'condensed' | 'default'
}
export type BuildCollectionFolderViewResult = {
View: React.ReactNode
}

View File

@@ -563,6 +563,7 @@ export type DocumentSlots = {
}
export type {
BuildCollectionFolderViewResult,
BuildTableStateArgs,
DefaultServerFunctionArgs,
ListQuery,
@@ -618,6 +619,26 @@ export type {
EditViewProps,
} from './views/document.js'
export type {
AfterFolderListClientProps,
AfterFolderListServerProps,
AfterFolderListServerPropsOnly,
AfterFolderListTableClientProps,
AfterFolderListTableServerProps,
AfterFolderListTableServerPropsOnly,
BeforeFolderListClientProps,
BeforeFolderListServerProps,
BeforeFolderListServerPropsOnly,
BeforeFolderListTableClientProps,
BeforeFolderListTableServerProps,
BeforeFolderListTableServerPropsOnly,
FolderListViewClientProps,
FolderListViewServerProps,
FolderListViewServerPropsOnly,
FolderListViewSlots,
FolderListViewSlotSharedClientProps,
} from './views/folderList.js'
export type {
AdminViewClientProps,
/**

View File

@@ -0,0 +1,59 @@
import type { ServerProps } from '../../config/types.js'
import type { FolderOrDocument } from '../../folders/types.js'
import type { SanitizedCollectionConfig } from '../../index.js'
export type FolderListViewSlots = {
AfterFolderList?: React.ReactNode
AfterFolderListTable?: React.ReactNode
BeforeFolderList?: React.ReactNode
BeforeFolderListTable?: React.ReactNode
Description?: React.ReactNode
listMenuItems?: React.ReactNode[]
Table: React.ReactNode
}
export type FolderListViewServerPropsOnly = {
collectionConfig: SanitizedCollectionConfig
documents: FolderOrDocument[]
subfolders: FolderOrDocument[]
} & ServerProps
export type FolderListViewServerProps = FolderListViewClientProps & FolderListViewServerPropsOnly
export type FolderListViewClientProps = {
beforeActions?: React.ReactNode[]
collectionSlug: SanitizedCollectionConfig['slug']
disableBulkDelete?: boolean
disableBulkEdit?: boolean
enableRowSelections?: boolean
hasCreatePermission: boolean
newDocumentURL: string
} & FolderListViewSlots
export type FolderListViewSlotSharedClientProps = {
collectionSlug: SanitizedCollectionConfig['slug']
hasCreatePermission: boolean
newDocumentURL: string
}
// BeforeFolderList
export type BeforeFolderListClientProps = FolderListViewSlotSharedClientProps
export type BeforeFolderListServerPropsOnly = {} & FolderListViewServerPropsOnly
export type BeforeFolderListServerProps = BeforeFolderListClientProps &
BeforeFolderListServerPropsOnly
// BeforeFolderListTable
export type BeforeFolderListTableClientProps = FolderListViewSlotSharedClientProps
export type BeforeFolderListTableServerPropsOnly = {} & FolderListViewServerPropsOnly
export type BeforeFolderListTableServerProps = BeforeFolderListTableClientProps &
BeforeFolderListTableServerPropsOnly
// AfterFolderList
export type AfterFolderListClientProps = FolderListViewSlotSharedClientProps
export type AfterFolderListServerPropsOnly = {} & FolderListViewServerPropsOnly
export type AfterFolderListServerProps = AfterFolderListClientProps & AfterFolderListServerPropsOnly
// AfterFolderListTable
export type AfterFolderListTableClientProps = FolderListViewSlotSharedClientProps
export type AfterFolderListTableServerPropsOnly = {} & FolderListViewServerPropsOnly
export type AfterFolderListTableServerProps = AfterFolderListTableClientProps &
AfterFolderListTableServerPropsOnly

View File

@@ -1,4 +1,4 @@
import type { ClientTranslationsObject, I18n } from '@payloadcms/translations'
import type { ClientTranslationsObject } from '@payloadcms/translations'
import type { SanitizedPermissions } from '../../auth/index.js'
import type { ImportMap } from '../../bin/generateImportMap/index.js'
@@ -8,13 +8,12 @@ import type {
CustomComponent,
Locale,
MetaConfig,
Params,
PayloadComponent,
SanitizedConfig,
ServerProps,
} from '../../config/types.js'
import type { SanitizedGlobalConfig } from '../../globals/config/types.js'
import type { Payload, PayloadRequest } from '../../types/index.js'
import type { PayloadRequest } from '../../types/index.js'
import type { LanguageOptions } from '../LanguageOptions.js'
import type { Data, StaticDescription } from '../types.js'
import type { DocumentSubViewTypes } from './document.js'
@@ -42,9 +41,14 @@ export type AdminViewServerPropsOnly = {
* @todo remove `docID` here as it is already contained in `initPageResult`
*/
readonly docID?: number | string
readonly folderID?: string
readonly importMap: ImportMap
readonly initialData?: Data
readonly initPageResult: InitPageResult
readonly params?: { [key: string]: string | string[] | undefined }
readonly redirectAfterCreate?: boolean
readonly redirectAfterDelete?: boolean
readonly redirectAfterDuplicate?: boolean
} & ServerProps
export type AdminViewServerProps = AdminViewClientProps & AdminViewServerPropsOnly
@@ -78,8 +82,10 @@ export type InitPageResult = {
*/
export type ViewTypes =
| 'account'
| 'collection-folders'
| 'dashboard'
| 'document'
| 'folders'
| 'list'
| 'reset'
| 'verify'

View File

@@ -38,7 +38,7 @@ export type ImportMap = {
[path: UserImportPath]: any
}
export type AddToImportMap = (payloadComponent: PayloadComponent | PayloadComponent[]) => void
export type AddToImportMap = (payloadComponent?: PayloadComponent | PayloadComponent[]) => void
export async function generateImportMap(
config: SanitizedConfig,

View File

@@ -256,6 +256,11 @@ export type AfterForgotPasswordHook = (args: {
context: RequestContext
}) => any
export type EnableFoldersOptions = {
// Displays the folder collection and parentFolder field in the document view
debug?: boolean
}
export type BaseListFilter = (args: {
limit: number
locale?: TypedLocale
@@ -583,8 +588,9 @@ export type SanitizedJoins = {
export interface SanitizedCollectionConfig
extends Omit<
DeepRequired<CollectionConfig>,
'auth' | 'endpoints' | 'fields' | 'slug' | 'upload' | 'versions'
'admin' | 'auth' | 'endpoints' | 'fields' | 'slug' | 'upload' | 'versions'
> {
admin: CollectionAdminOptions
auth: Auth
endpoints: Endpoint[] | false
fields: Field[]

View File

@@ -24,6 +24,7 @@ export const defaults: Omit<Config, 'db' | 'editor' | 'secret'> = {
routes: {
account: '/account',
createFirstUser: '/create-first-user',
folders: '/folders',
forgot: '/forgot',
inactivity: '/logout-inactivity',
login: '/login',
@@ -99,6 +100,7 @@ export const addDefaultsToConfig = (config: Config): Config => {
routes: {
account: '/account',
createFirstUser: '/create-first-user',
folders: '/folders',
forgot: '/forgot',
inactivity: '/logout-inactivity',
login: '/login',
@@ -109,6 +111,13 @@ export const addDefaultsToConfig = (config: Config): Config => {
},
}
config.folders = {
collections: {},
debug: false,
enabled: false,
...(config.folders || {}),
}
config.bin = config.bin ?? []
config.collections = config.collections ?? []
config.cookiePrefix = config.cookiePrefix ?? 'payload'

View File

@@ -18,6 +18,7 @@ import { sanitizeCollection } from '../collections/config/sanitize.js'
import { migrationsCollection } from '../database/migrations/migrationsCollection.js'
import { DuplicateCollection, InvalidConfiguration } from '../errors/index.js'
import { defaultTimezones } from '../fields/baseFields/timezone/defaultTimezones.js'
import { addFolderCollections } from '../folders/addFolderCollections.js'
import { sanitizeGlobal } from '../globals/config/sanitize.js'
import {
baseBlockFields,
@@ -190,6 +191,8 @@ export const sanitizeConfig = async (incomingConfig: Config): Promise<SanitizedC
const collectionSlugs = new Set<CollectionSlug>()
await addFolderCollections(config as unknown as Config)
const validRelationships = [
...(config.collections.map((c) => c.slug) ?? []),
jobsCollectionSlug,
@@ -313,6 +316,7 @@ export const sanitizeConfig = async (incomingConfig: Config): Promise<SanitizedC
for (const hook of Object.keys(hooks)) {
const defaultAmount = hook === 'afterRead' || hook === 'beforeChange' ? 1 : 0
if (hooks[hook]?.length > defaultAmount) {
// eslint-disable-next-line no-console
console.warn(
`The jobsCollectionOverrides function is returning a collection with an additional ${hook} hook defined. These hooks will not run unless the jobs.runHooks option is set to true. Setting this option to true will negatively impact performance.`,
)
@@ -374,7 +378,15 @@ export const sanitizeConfig = async (incomingConfig: Config): Promise<SanitizedC
config.csrf.push(config.serverURL)
}
// Get deduped list of upload adapters
const uploadAdapters = new Set<string>()
// interact with all collections
for (const collection of config.collections) {
// deduped upload adapters
if (collection.upload?.adapter) {
uploadAdapters.add(collection.upload.adapter)
}
}
if (!config.upload) {
config.upload = { adapters: [] }
}

View File

@@ -43,6 +43,7 @@ import type { ErrorName } from '../errors/types.js'
import type { GlobalConfig, Globals, SanitizedGlobalConfig } from '../globals/config/types.js'
import type {
Block,
CollectionSlug,
FlattenedBlock,
JobsConfig,
Payload,
@@ -851,6 +852,11 @@ export type Config = {
* @default '/create-first-user'
*/
createFirstUser?: `/${string}`
/** The route for folder view.
*
* @default '/folders'
*/
folders: `/${string}`
/** The route for the forgot password page.
*
* @default '/forgot'
@@ -977,6 +983,44 @@ export type Config = {
email?: EmailAdapter | Promise<EmailAdapter>
/** Custom REST endpoints */
endpoints?: Endpoint[]
/**
* Options for folder view within the admin panel
*/
folders?: {
/**
* An array of functions to be ran when the folder collection is initialized
* This allows plugins to modify the collection configuration
*/
collectionOverrides?: (({
collection,
}: {
collection: CollectionConfig
}) => CollectionConfig | Promise<CollectionConfig>)[]
/**
* Collections that you would like organize within folders
*/
collections: {
[key: CollectionSlug]: any
}
/**
* Ability to view hidden fields and collections related to folders
*
* @default false
*/
debug?: boolean
/**
* Enable folders in the admin panel
*
* @default false
*/
enabled?: boolean
/**
* Slug for the folder collection
*
* @default "_folders"
*/
slug?: string
}
/**
* @see https://payloadcms.com/docs/configuration/globals#global-configs
*/

View File

@@ -40,11 +40,24 @@ export { getFieldPaths } from '../fields/getFieldPaths.js'
export * from '../fields/validations.js'
export type {
FolderBreadcrumb,
FolderDocumentItemKey,
FolderEnabledColection,
FolderInterface,
FolderOrDocument,
GetFolderDataResult,
Subfolder,
} from '../folders/types.js'
export { formatFolderOrDocumentItem } from '../folders/utils/formatFolderOrDocumentItem.js'
export { validOperators, validOperatorSet } from '../types/constants.js'
export { formatFilesize } from '../uploads/formatFilesize.js'
export { isImage } from '../uploads/isImage.js'
export { combineWhereConstraints } from '../utilities/combineWhereConstraints.js'
export {
deepCopyObject,
deepCopyObjectComplex,
@@ -59,6 +72,7 @@ export {
deepMergeWithSourceArrays,
} from '../utilities/deepMerge.js'
export { extractID } from '../utilities/extractID.js'
export { fieldSchemaToJSON } from '../utilities/fieldSchemaToJSON.js'
export { flattenAllFields } from '../utilities/flattenAllFields.js'
@@ -111,4 +125,5 @@ export { validateWhereQuery } from '../utilities/validateWhereQuery.js'
export { wait } from '../utilities/wait.js'
export { default as wordBoundariesRegex } from '../utilities/wordBoundariesRegex.js'
export { versionDefaults } from '../versions/defaults.js'
export { deepMergeSimple } from '@payloadcms/translations/utilities'

View File

@@ -0,0 +1,59 @@
import type { Config } from '../config/types.js'
import type { CollectionSlug } from '../index.js'
import { foldersSlug, parentFolderFieldName } from './constants.js'
import { createFolderCollection } from './createFolderCollection.js'
export async function addFolderCollections(config: NonNullable<Config>): Promise<void> {
if (!config.collections) {
return
}
if (config.folders?.enabled) {
const enabledCollectionSlugs: CollectionSlug[] = []
const debug = Boolean(config.folders?.debug)
config.folders.slug = config.folders.slug || foldersSlug
for (let i = 0; i < config.collections.length; i++) {
const collection = config.collections[i]
if (config.folders.collections[collection.slug]) {
if (collection) {
collection.fields.push({
name: parentFolderFieldName,
type: 'relationship',
admin: {
allowCreate: false,
allowEdit: false,
components: {
Cell: '@payloadcms/ui/rsc#FolderTableCell',
Field: '@payloadcms/ui#FolderEditField',
},
},
index: true,
label: 'Folder',
relationTo: config.folders.slug,
})
enabledCollectionSlugs.push(collection.slug)
}
}
}
if (enabledCollectionSlugs.length) {
let folderCollection = createFolderCollection({
slug: config.folders.slug,
collectionSlugs: enabledCollectionSlugs,
debug,
})
if (
Array.isArray(config.folders.collectionOverrides) &&
config.folders.collectionOverrides.length
) {
for (const override of config.folders.collectionOverrides) {
folderCollection = await override({ collection: folderCollection })
}
}
config.collections.push(folderCollection)
}
}
}

View File

@@ -0,0 +1,2 @@
export const foldersSlug = '_folders'
export const parentFolderFieldName = '_folder'

View File

@@ -0,0 +1,73 @@
import type { CollectionConfig } from '../collections/config/types.js'
import { parentFolderFieldName } from './constants.js'
import { populateFolderDataEndpoint } from './endpoints/populateFolderData.js'
import { deleteSubfoldersAfterDelete } from './hooks/deleteSubfoldersAfterDelete.js'
import { dissasociateAfterDelete } from './hooks/dissasociateAfterDelete.js'
import { reparentChildFolder } from './hooks/reparentChildFolder.js'
type CreateFolderCollectionArgs = {
collectionSlugs: string[]
debug?: boolean
slug: string
}
export const createFolderCollection = ({
slug,
collectionSlugs,
debug,
}: CreateFolderCollectionArgs): CollectionConfig => ({
slug,
admin: {
hidden: !debug,
useAsTitle: 'name',
},
endpoints: [populateFolderDataEndpoint],
fields: [
{
name: 'name',
type: 'text',
index: true,
required: true,
},
{
name: parentFolderFieldName,
type: 'relationship',
admin: {
hidden: !debug,
},
index: true,
relationTo: slug,
},
{
name: 'documentsAndFolders',
type: 'join',
admin: {
hidden: !debug,
},
collection: [slug, ...collectionSlugs],
hasMany: true,
on: parentFolderFieldName,
},
],
hooks: {
afterChange: [
reparentChildFolder({
parentFolderFieldName,
}),
],
afterDelete: [
dissasociateAfterDelete({
collectionSlugs,
parentFolderFieldName,
}),
deleteSubfoldersAfterDelete({ folderSlug: slug, parentFolderFieldName }),
],
},
labels: {
plural: 'Folders',
singular: 'Folder',
},
typescript: {
interface: 'FolderInterface',
},
})

View File

@@ -0,0 +1,45 @@
import httpStatus from 'http-status'
import type { Endpoint } from '../../index.js'
import { getFolderData } from '../utils/getFolderData.js'
export const populateFolderDataEndpoint: Endpoint = {
handler: async (req) => {
if (!req?.user) {
return Response.json(
{
message: 'Unauthorized request.',
},
{
status: httpStatus.UNAUTHORIZED,
},
)
}
const folderCollection = Boolean(req.payload.collections?.[req.payload.config.folders.slug])
if (!folderCollection) {
return Response.json(
{
message: 'Folders are not configured',
},
{
status: httpStatus.NOT_FOUND,
},
)
}
const data = await getFolderData({
collectionSlug: req.searchParams?.get('collectionSlug') || undefined,
folderID: req.searchParams?.get('folderID') || undefined,
payload: req.payload,
search: req.searchParams?.get('search') || undefined,
user: req.user,
})
return Response.json(data)
},
method: 'get',
path: '/populate-folder-data',
}

View File

@@ -0,0 +1,25 @@
import type { CollectionAfterDeleteHook } from '../../index.js'
type Args = {
folderSlug: string
parentFolderFieldName: string
}
export const deleteSubfoldersAfterDelete = ({
folderSlug,
parentFolderFieldName,
}: Args): CollectionAfterDeleteHook => {
return async ({ id, req }) => {
await req.payload.delete({
collection: folderSlug,
depth: 0,
overrideAccess: false,
req,
select: { id: true },
where: {
[parentFolderFieldName]: {
equals: id,
},
},
})
}
}

View File

@@ -0,0 +1,32 @@
import type { CollectionAfterDeleteHook } from '../../index.js'
type Args = {
collectionSlugs: string[]
parentFolderFieldName: string
}
export const dissasociateAfterDelete = ({
collectionSlugs,
parentFolderFieldName,
}: Args): CollectionAfterDeleteHook => {
return async ({ id, req }) => {
for (const collectionSlug of collectionSlugs) {
await req.payload.update({
collection: collectionSlug,
data: {
[parentFolderFieldName]: null,
},
depth: 0,
overrideAccess: false,
req,
select: {
id: true,
},
where: {
[parentFolderFieldName]: {
equals: id,
},
},
})
}
}
}

View File

@@ -0,0 +1,110 @@
import type { CollectionAfterChangeHook, JsonObject, Payload, TypeWithID } from '../../index.js'
import { extractID } from '../../utilities/extractID.js'
type Args = {
folderID: number | string
parentFolderFieldName: string
parentIDToFind: number | string
payload: Payload
}
/**
* Determines if a child folder belongs to a parent folder by
* recursively checking upwards through the folder hierarchy.
*/
async function isChildOfFolder({
folderID,
parentFolderFieldName,
parentIDToFind,
payload,
}: Args): Promise<boolean> {
const parentFolder = (await payload.findByID({
id: folderID,
collection: payload.config.folders.slug,
overrideAccess: false,
select: {
parentFolderFieldName: true,
},
})) as JsonObject & TypeWithID
const parentFolderID = parentFolder[parentFolderFieldName]
? extractID(parentFolder[parentFolderFieldName])
: undefined
if (!parentFolderID) {
// made it to the root
return false
}
if (parentFolderID === parentIDToFind) {
// found match, would be cyclic
return true
}
return isChildOfFolder({
folderID: parentFolderID,
parentFolderFieldName,
parentIDToFind,
payload,
})
}
/**
* If a parent is moved into a child folder, we need to re-parent the child
*
* @example
*
* ```ts
→ F1
→ F2
→ F2A
→ F3
Moving F1 → F2A becomes:
→ F2A
→ F1
→ F2
→ F3
```
*/
export const reparentChildFolder = ({
parentFolderFieldName,
}: {
parentFolderFieldName: string
}): CollectionAfterChangeHook => {
return async ({ doc, previousDoc, req }) => {
if (
previousDoc[parentFolderFieldName] !== doc[parentFolderFieldName] &&
doc[parentFolderFieldName]
) {
const newParentFolderID = extractID(doc[parentFolderFieldName])
const isMovingToChild = newParentFolderID
? await isChildOfFolder({
folderID: newParentFolderID,
parentFolderFieldName,
parentIDToFind: doc.id,
payload: req.payload,
})
: false
if (isMovingToChild) {
// if the folder was moved into a child folder, the child folder needs
// to be re-parented with the parent of the folder that was moved
await req.payload.update({
id: newParentFolderID,
collection: req.payload.config.folders.slug,
data: {
[parentFolderFieldName]: previousDoc[parentFolderFieldName]
? extractID(previousDoc[parentFolderFieldName])
: null,
},
depth: 0,
overrideAccess: false,
req,
})
}
}
}
}

View File

@@ -0,0 +1,70 @@
import type { TypeWithID } from '../collections/config/types.js'
import type { CollectionSlug, SanitizedCollectionConfig } from '../index.js'
import type { Document } from '../types/index.js'
export type FolderInterface = {
_folder?: FolderInterface | (number | string | undefined)
documentsAndFolders?: {
docs: {
relationTo: CollectionSlug
value: Document
}[]
}
name: string
} & TypeWithID
export type FolderBreadcrumb = {
id: null | number | string
name: string
}
export type Subfolder = {
fileCount: number
hasSubfolders: boolean
id: number | string
name: string
subfolderCount: number
}
export type FolderEnabledColection = {
admin: {
custom: {
folderCollectionSlug: CollectionSlug
}
}
slug: CollectionSlug
} & SanitizedCollectionConfig
/**
* `${relationTo}-${id}` is used as a key for the item
*/
export type FolderDocumentItemKey = `${string}-${number | string}`
/**
* Needed for document card view for upload enabled collections
*/
type DocumentMediaData = {
filename?: string
mimeType?: string
url?: string
}
/**
* A generic structure for a folder or document item.
*/
export type FolderOrDocument = {
itemKey: FolderDocumentItemKey
relationTo: CollectionSlug
value: {
_folder?: number | string
_folderOrDocumentTitle: string
createdAt?: string
id: number | string
updatedAt?: string
} & DocumentMediaData
}
export type GetFolderDataResult = {
breadcrumbs: FolderBreadcrumb[] | null
documents: FolderOrDocument[]
subfolders: FolderOrDocument[]
}

View File

@@ -0,0 +1,35 @@
import type { CollectionSlug, Document } from '../../index.js'
import type { FolderOrDocument } from '../types.js'
type Args = {
isUpload: boolean
relationTo: CollectionSlug
useAsTitle?: string
value: Document
}
export function formatFolderOrDocumentItem({
isUpload,
relationTo,
useAsTitle,
value,
}: Args): FolderOrDocument {
const itemValue: FolderOrDocument['value'] = {
id: value?.id,
_folder: value?._folder,
_folderOrDocumentTitle: value[useAsTitle || 'id'],
createdAt: value?.createdAt,
updatedAt: value?.updatedAt,
}
if (isUpload) {
itemValue.filename = value.filename
itemValue.mimeType = value.mimeType
itemValue.url = value.url
}
return {
itemKey: `${relationTo}-${value.id}`,
relationTo,
value: itemValue,
}
}

View File

@@ -0,0 +1,64 @@
import type { PaginatedDocs } from '../../database/types.js'
import type { User } from '../../index.js'
import type { Payload } from '../../types/index.js'
import type { FolderBreadcrumb, FolderInterface } from '../types.js'
import { parentFolderFieldName } from '../constants.js'
type GetFolderBreadcrumbsArgs = {
breadcrumbs?: FolderBreadcrumb[]
folderID?: number | string
payload: Payload
user?: User
}
/**
* Builds breadcrumbs up from child folder
* all the way up to root folder
*/
export const getFolderBreadcrumbs = async ({
breadcrumbs = [],
folderID,
payload,
user,
}: GetFolderBreadcrumbsArgs): Promise<FolderBreadcrumb[] | null> => {
if (folderID) {
const folderQuery = (await payload.find({
collection: payload.config.folders.slug,
depth: 0,
limit: 1,
overrideAccess: false,
select: {
name: true,
[parentFolderFieldName]: true,
},
user,
where: {
id: {
equals: folderID,
},
},
})) as PaginatedDocs<FolderInterface>
const folder = folderQuery.docs[0]
if (folder) {
breadcrumbs.push({
id: folder.id,
name: folder.name,
})
if (folder[parentFolderFieldName]) {
return getFolderBreadcrumbs({
breadcrumbs,
folderID:
typeof folder[parentFolderFieldName] === 'number' ||
typeof folder[parentFolderFieldName] === 'string'
? folder[parentFolderFieldName]
: folder[parentFolderFieldName].id,
payload,
user,
})
}
}
}
return breadcrumbs.reverse()
}

View File

@@ -0,0 +1,104 @@
import type { CollectionSlug, User } from '../../index.js'
import type { Payload } from '../../types/index.js'
import type { GetFolderDataResult } from '../types.js'
import { parseDocumentID } from '../../index.js'
import { getFolderBreadcrumbs } from './getFolderBreadcrumbs.js'
import { queryDocumentsAndFoldersFromJoin } from './getFoldersAndDocumentsFromJoin.js'
import { getOrphanedDocs } from './getOrphanedDocs.js'
type Args = {
/**
* Specify to query documents from a specific collection
* @default undefined
* @example 'posts'
*/
collectionSlug?: CollectionSlug
/**
* The ID of the folder to query documents from
* @default undefined
*/
folderID?: number | string
/**
* The locale to use for the document query
* @default undefined
*/
payload: Payload
/**
* Search term to filter documents by - only applicable IF `collectionSlug` exists and NO `folderID` is provided
*/
search?: string
/**
* The user making the request
* @default undefined
*/
user?: User
}
/**
* Query for documents, subfolders and breadcrumbs for a given folder
*/
export const getFolderData = async ({
collectionSlug,
folderID: _folderID,
payload,
search,
user,
}: Args): Promise<GetFolderDataResult> => {
const parentFolderID = parseDocumentID({
id: _folderID,
collectionSlug: payload.config.folders.slug,
payload,
})
const breadcrumbsPromise = getFolderBreadcrumbs({
folderID: parentFolderID,
payload,
user,
})
if (parentFolderID) {
// subfolders and documents are queried together
const documentAndSubfolderPromise = queryDocumentsAndFoldersFromJoin({
collectionSlug,
parentFolderID,
payload,
user,
})
const [breadcrumbs, documentsAndSubfolders] = await Promise.all([
breadcrumbsPromise,
documentAndSubfolderPromise,
])
return {
breadcrumbs,
documents: documentsAndSubfolders.documents,
subfolders: documentsAndSubfolders.subfolders,
}
} else {
// subfolders and documents are queried separately
const subfoldersPromise = getOrphanedDocs({
collectionSlug: payload.config.folders.slug,
payload,
search,
user,
})
const documentsPromise = collectionSlug
? getOrphanedDocs({
collectionSlug,
payload,
search,
user,
})
: Promise.resolve([])
const [breadcrumbs, subfolders, documents] = await Promise.all([
breadcrumbsPromise,
subfoldersPromise,
documentsPromise,
])
return {
breadcrumbs,
documents,
subfolders,
}
}
}

View File

@@ -0,0 +1,80 @@
import type { User } from '../../auth/types.js'
import type { PaginatedDocs } from '../../database/types.js'
import type { CollectionSlug } from '../../index.js'
import type { Document, Payload } from '../../types/index.js'
import type { FolderOrDocument } from '../types.js'
import { formatFolderOrDocumentItem } from './formatFolderOrDocumentItem.js'
type QueryDocumentsAndFoldersResults = {
documents: FolderOrDocument[]
subfolders: FolderOrDocument[]
}
type QueryDocumentsAndFoldersArgs = {
collectionSlug?: CollectionSlug
parentFolderID: number | string
payload: Payload
user?: User
}
export async function queryDocumentsAndFoldersFromJoin({
collectionSlug,
parentFolderID,
payload,
user,
}: QueryDocumentsAndFoldersArgs): Promise<QueryDocumentsAndFoldersResults> {
const subfolderDoc = (await payload.find({
collection: payload.config.folders.slug,
joins: {
documentsAndFolders: {
limit: 100_000,
sort: 'name',
where: {
relationTo: {
in: [
payload.config.folders.slug,
...(collectionSlug
? [collectionSlug]
: Object.keys(payload.config.folders.collections)),
],
},
},
},
},
limit: 1,
// overrideAccess: false, // @todo: bug in core, throws "QueryError: The following paths cannot be queried: relationTo"
user,
where: {
id: {
equals: parentFolderID,
},
},
})) as PaginatedDocs<Document>
const childrenDocs = subfolderDoc?.docs[0]?.documentsAndFolders?.docs || []
const results: QueryDocumentsAndFoldersResults = childrenDocs.reduce(
(acc: QueryDocumentsAndFoldersResults, doc: Document) => {
const { relationTo, value } = doc
const item = formatFolderOrDocumentItem({
isUpload: Boolean(payload.collections[relationTo].config.upload),
relationTo,
useAsTitle: payload.collections[relationTo].config.admin?.useAsTitle,
value,
})
if (relationTo === payload.config.folders.slug) {
acc.subfolders.push(item)
} else {
acc.documents.push(item)
}
return acc
},
{
documents: [],
subfolders: [],
},
)
return results
}

View File

@@ -0,0 +1,60 @@
import type { CollectionSlug, Payload, User, Where } from '../../index.js'
import type { FolderOrDocument } from '../types.js'
import { formatFolderOrDocumentItem } from './formatFolderOrDocumentItem.js'
type Args = {
collectionSlug: CollectionSlug
payload: Payload
search?: string
user?: User
}
export async function getOrphanedDocs({
collectionSlug,
payload,
search,
user,
}: Args): Promise<FolderOrDocument[]> {
let whereConstraints: Where = {
or: [
{
_folder: {
exists: false,
},
},
{
_folder: {
equals: null,
},
},
],
}
if (collectionSlug && search && payload.collections[collectionSlug].config.admin?.useAsTitle) {
whereConstraints = {
[payload.collections[collectionSlug].config.admin.useAsTitle]: {
like: search,
},
}
}
const orphanedFolders = await payload.find({
collection: collectionSlug,
limit: 0,
// overrideAccess: false, // @todo: bug in core, throws "QueryError: The following paths cannot be queried: _folder"
sort: payload.collections[collectionSlug].config.admin.useAsTitle,
user,
where: whereConstraints,
})
return (
orphanedFolders?.docs.map((doc) =>
formatFolderOrDocumentItem({
isUpload: Boolean(payload.collections[collectionSlug].config.upload),
relationTo: collectionSlug,
useAsTitle: payload.collections[collectionSlug].config.admin.useAsTitle,
value: doc,
}),
) || []
)
}

View File

@@ -1371,6 +1371,7 @@ export type {
UploadFieldValidation,
UsernameFieldValidation,
} from './fields/validations.js'
export { getFolderData } from './folders/utils/getFolderData.js'
export {
type ClientGlobalConfig,
createClientGlobalConfig,
@@ -1378,7 +1379,6 @@ export {
type ServerOnlyGlobalAdminProperties,
type ServerOnlyGlobalProperties,
} from './globals/config/client.js'
export type {
AfterChangeHook as GlobalAfterChangeHook,
AfterReadHook as GlobalAfterReadHook,
@@ -1390,7 +1390,6 @@ export type {
GlobalConfig,
SanitizedGlobalConfig,
} from './globals/config/types.js'
export { docAccessOperation as docAccessOperationGlobal } from './globals/operations/docAccess.js'
export { findOneOperation } from './globals/operations/findOne.js'
@@ -1437,11 +1436,11 @@ export type {
WorkflowTypes,
} from './queues/config/types/workflowTypes.js'
export { importHandlerPath } from './queues/operations/runJobs/runJob/importHandlerPath.js'
export { getLocalI18n } from './translations/getLocalI18n.js'
export * from './types/index.js'
export { getFileByPath } from './uploads/getFileByPath.js'
export type * from './uploads/types.js'
export { addDataAndFileToRequest } from './utilities/addDataAndFileToRequest.js'
export { addLocalesToRequestFromData, sanitizeLocales } from './utilities/addLocalesToRequest.js'
@@ -1499,6 +1498,7 @@ export { logError } from './utilities/logError.js'
export { defaultLoggerOptions } from './utilities/logger.js'
export { mapAsync } from './utilities/mapAsync.js'
export { mergeHeaders } from './utilities/mergeHeaders.js'
export { parseDocumentID } from './utilities/parseDocumentID.js'
export { sanitizeFallbackLocale } from './utilities/sanitizeFallbackLocale.js'
export { sanitizeJoinParams } from './utilities/sanitizeJoinParams.js'
export { sanitizePopulateParam } from './utilities/sanitizePopulateParam.js'
@@ -1515,6 +1515,7 @@ export { appendVersionToQueryKey } from './versions/drafts/appendVersionToQueryK
export { getQueryDraftsSort } from './versions/drafts/getQueryDraftsSort.js'
export { enforceMaxVersions } from './versions/enforceMaxVersions.js'
export { getLatestCollectionVersion } from './versions/getLatestCollectionVersion.js'
export { getLatestGlobalVersion } from './versions/getLatestGlobalVersion.js'
export { saveVersion } from './versions/saveVersion.js'
export type { SchedulePublishTaskInput } from './versions/schedule/types.js'

View File

@@ -0,0 +1,19 @@
import type { Where } from '../types/index.js'
export function combineWhereConstraints(
constraints: Array<undefined | Where>,
as: 'and' | 'or' = 'and',
): Where {
if (constraints.length === 0) {
return {}
}
return {
[as]: constraints.filter((constraint): constraint is Where => {
if (constraint && typeof constraint === 'object' && Object.keys(constraint).length > 0) {
return true
}
return false
}),
}
}

View File

@@ -0,0 +1,9 @@
export const extractID = <IDType extends number | string>(
objectOrID: { id: IDType } | IDType,
): IDType => {
if (typeof objectOrID === 'string' || typeof objectOrID === 'number') {
return objectOrID
}
return objectOrID.id
}

View File

@@ -0,0 +1,15 @@
import type { CollectionSlug, Payload } from '../index.js'
import { isNumber } from './isNumber.js'
type ParseDocumentIDArgs = {
collectionSlug: CollectionSlug
id?: number | string
payload: Payload
}
export function parseDocumentID({ id, collectionSlug, payload }: ParseDocumentIDArgs) {
const idType = payload.collections[collectionSlug]?.customIDType ?? payload.db.defaultIDType
return id ? (idType === 'number' && isNumber(id) ? parseFloat(String(id)) : id) : undefined
}

View File

@@ -21,7 +21,7 @@ export const WatchTenantCollection = () => {
const [useAsTitleName] = React.useState(
() => (getEntityConfig({ collectionSlug }) as ClientCollectionConfig).admin.useAsTitle,
)
const titleField = useFormFields(([fields]) => fields[useAsTitleName])
const titleField = useFormFields(([fields]) => (useAsTitleName ? fields[useAsTitleName] : {}))
const { updateTenants } = useTenantSelection()

View File

@@ -88,12 +88,12 @@ const nativeMax = Math.max,
* @category Function
* @param {Function} func The function to debounce.
* @param {number} [wait=0] The number of milliseconds to delay.
* @param {Object} [options={}] The options object.
* @param {boolean} [options.leading=false]
* @param {Object} [sortOnOptions={}] The options object.
* @param {boolean} [sortOnOptions.leading=false]
* Specify invoking on the leading edge of the timeout.
* @param {number} [options.maxWait]
* @param {number} [sortOnOptions.maxWait]
* The maximum time `func` is allowed to be delayed before it's invoked.
* @param {boolean} [options.trailing=true]
* @param {boolean} [sortOnOptions.trailing=true]
* Specify invoking on the trailing edge of the timeout.
* @returns {Function} Returns the new debounced function.
* @example

View File

@@ -126,6 +126,27 @@ export const clientTranslationKeys = createClientTranslationKeys([
'fields:toggleBlock',
'fields:uploadNewLabel',
'folder:byFolder',
'folder:browseByFolder',
'folder:deleteFolder',
'folder:folders',
'folder:folderName',
'folder:itemsMovedToFolder',
'folder:itemsMovedToRoot',
'folder:itemHasBeenMoved',
'folder:itemHasBeenMovedToRoot',
'folder:moveFolder',
'folder:movingFromFolder',
'folder:moveItemsToFolderConfirmation',
'folder:moveItemsToRootConfirmation',
'folder:moveItemToFolderConfirmation',
'folder:moveItemToRootConfirmation',
'folder:noFolder',
'folder:newFolder',
'folder:renameFolder',
'folder:searchByNameInFolder',
'folder:selectFolderForItem',
'general:all',
'general:aboutToDeleteCount',
'general:aboutToDelete',
@@ -145,6 +166,7 @@ export const clientTranslationKeys = createClientTranslationKeys([
'general:close',
'general:collapse',
'general:collections',
'general:confirmMove',
'general:columns',
'general:columnToSort',
'general:confirm',
@@ -202,6 +224,8 @@ export const clientTranslationKeys = createClientTranslationKeys([
'general:globals',
'general:goBack',
'general:isEditing',
'general:item',
'general:items',
'general:language',
'general:lastModified',
'general:leaveAnyway',
@@ -212,8 +236,14 @@ export const clientTranslationKeys = createClientTranslationKeys([
'general:locale',
'general:menu',
'general:moreOptions',
'general:move',
'general:moveConfirm',
'general:moveCount',
'general:moveDown',
'general:moveUp',
'general:moving',
'general:movingCount',
'general:name',
'general:next',
'general:noDateSelected',
'general:noFiltersSet',
@@ -239,6 +269,7 @@ export const clientTranslationKeys = createClientTranslationKeys([
'general:reindex',
'general:reindexingAll',
'general:remove',
'general:rename',
'general:reset',
'general:resetPreferences',
'general:resetPreferencesDescription',
@@ -249,6 +280,7 @@ export const clientTranslationKeys = createClientTranslationKeys([
'general:schedulePublishFor',
'general:saving',
'general:searchBy',
'general:select',
'general:selectAll',
'general:selectAllRows',
'general:selectedCount',

View File

@@ -172,7 +172,33 @@ export const arTranslations: DefaultTranslationsObject = {
toggleBlock: 'Toggle block',
uploadNewLabel: 'رفع {{label}} جديد',
},
folder: {
browseByFolder: 'تصفح حسب المجلد',
byFolder: 'حسب المجلد',
deleteFolder: 'حذف المجلد',
folderName: 'اسم المجلد',
folders: 'مجلدات',
itemHasBeenMoved: 'تم نقل {{title}} إلى {{folderName}}',
itemHasBeenMovedToRoot: 'تم نقل {{title}} إلى المجلد الجذر',
itemsMovedToFolder: '{{title}} تم نقله إلى {{folderName}}',
itemsMovedToRoot: '{{title}} تم نقله إلى المجلد الجذر',
moveFolder: 'نقل المجلد',
moveItemsToFolderConfirmation:
'أنت على وشك نقل <1>{{count}} {{label}}</1> إلى <2>{{toFolder}}</2>. هل أنت متأكد؟',
moveItemsToRootConfirmation:
'أنت على وشك نقل <1>{{count}} {{label}}</1> إلى المجلد الجذر. هل أنت متأكد؟',
moveItemToFolderConfirmation:
'أنت على وشك نقل <1>{{title}}</1> إلى <2>{{toFolder}}</2>. هل أنت متأكد؟',
moveItemToRootConfirmation: 'أنت على وشك نقل <1>{{title}}</1> إلى المجلد الجذر. هل أنت متأكد؟',
movingFromFolder: 'نقل {{title}} من {{folderName}}',
newFolder: 'مجلد جديد',
noFolder: 'لا يوجد مجلد',
renameFolder: 'إعادة تسمية المجلد',
searchByNameInFolder: 'البحث عن طريق الاسم في {{folderName}}',
selectFolderForItem: 'اختر المجلد لـ {{title}}',
},
general: {
name: 'اسم',
aboutToDelete: 'أنت على وشك حذف {{label}} <1>{{title}}</1>. هل أنت متأكّد؟',
aboutToDeleteCount_many: 'أنت على وشك حذف {{count}} {{label}}',
aboutToDeleteCount_one: 'أنت على وشك حذف {{count}} {{label}}',
@@ -201,6 +227,7 @@ export const arTranslations: DefaultTranslationsObject = {
confirmCopy: 'تأكيد النسخ',
confirmDeletion: 'تأكيد الحذف',
confirmDuplication: 'تأكيد التّكرار',
confirmMove: 'تأكيد النقل',
confirmReindex: 'إعادة فهرسة جميع {{collections}}؟',
confirmReindexAll: 'إعادة فهرسة جميع المجموعات؟',
confirmReindexDescription:
@@ -257,6 +284,8 @@ export const arTranslations: DefaultTranslationsObject = {
globals: 'عامة',
goBack: 'العودة',
isEditing: 'يحرر',
item: 'عنصر',
items: 'عناصر',
language: 'اللغة',
lastModified: 'آخر تعديل',
leaveAnyway: 'المغادرة على أي حال',
@@ -268,8 +297,13 @@ export const arTranslations: DefaultTranslationsObject = {
locales: 'اللّغات',
menu: 'قائمة',
moreOptions: 'خيارات أكثر',
move: 'تحرك',
moveConfirm: 'أنت على وشك نقل {{count}} {{label}} إلى <1>{{destination}}</1>. هل أنت متأكد؟',
moveCount: 'انقل {{count}} {{label}}',
moveDown: 'التّحريك إلى الأسفل',
moveUp: 'التّحريك إلى الأعلى',
moving: 'التحرك',
movingCount: 'نقل {{count}} {{label}}',
newPassword: 'كلمة مرور جديدة',
next: 'التالي',
noDateSelected: 'لم يتم اختيار تاريخ',
@@ -297,6 +331,7 @@ export const arTranslations: DefaultTranslationsObject = {
reindex: 'إعادة الفهرسة',
reindexingAll: 'جاري إعادة فهرسة جميع {{collections}}.',
remove: 'إزالة',
rename: 'إعادة تسمية',
reset: 'إعادة تعيين',
resetPreferences: 'إعادة تعيين التفضيلات',
resetPreferencesDescription:
@@ -308,6 +343,7 @@ export const arTranslations: DefaultTranslationsObject = {
saving: 'جاري الحفظ...',
schedulePublishFor: 'جدولة النشر لـ {{العنوان}}',
searchBy: 'البحث عن طريق {{label}}',
select: 'اختر',
selectAll: 'تحديد كل {{count}} {{label}}',
selectAllRows: 'حدد جميع الصفوف',
selectedCount: 'تم تحديد {{count}} {{label}}',

View File

@@ -174,7 +174,34 @@ export const azTranslations: DefaultTranslationsObject = {
toggleBlock: 'Bloku keç',
uploadNewLabel: 'Yeni {{label}} yüklə',
},
folder: {
browseByFolder: 'Qovluqlara görə gözdən keçirin',
byFolder: 'Qovluğa görə',
deleteFolder: 'Qovluğu Sil',
folderName: 'Qovluq Adı',
folders: 'Qovluqlar',
itemHasBeenMoved: '{{title}} {{folderName}} qovluğuna köçürüldü.',
itemHasBeenMovedToRoot: '{{title}} kök qovluğa köçürüldü.',
itemsMovedToFolder: '{{title}} {{folderName}} qovluğuna köçürüldü',
itemsMovedToRoot: '{{title}} kök qovluğa köçürdü',
moveFolder: 'Qovluğu Köçür',
moveItemsToFolderConfirmation:
'Siz <1>{{count}} {{label}}</1> -i <2>{{toFolder}}</2> -ə köçürmək üzərəsiniz. Eminsiniz?',
moveItemsToRootConfirmation:
'Siz <1>{{count}} {{label}}</1> əsas qovluğa köçürmək üzərəsiniz. Eminsiniz?',
moveItemToFolderConfirmation:
'Siz <1>{{title}}</1>-i <2>{{toFolder}}</2>ə köçürmək barədəsiniz. Eminsinizmi?',
moveItemToRootConfirmation:
"Siz <1>{{title}}</1>'i kök qovluğa köçürmək barədəsindəsiniz. Əminsiniz?",
movingFromFolder: '{{title}}-i {{folderName}}-dən köçürmək',
newFolder: 'Yeni Qovluq',
noFolder: 'Qovluq Yoxdur',
renameFolder: 'Qovluğun adını dəyişdirin',
searchByNameInFolder: '{{folderName}} qovluğunda adla axtarış',
selectFolderForItem: '{{title}} üçün qovluğu seçin',
},
general: {
name: 'Ad',
aboutToDelete: 'Siz {{label}} <1>{{title}}</1> silməyə hazırsınız. Eminsiniz?',
aboutToDeleteCount_many: 'Siz {{count}} {{label}} silməyə hazırsınız.',
aboutToDeleteCount_one: 'Siz {{count}} {{label}} silməyə hazırsınız.',
@@ -204,6 +231,7 @@ export const azTranslations: DefaultTranslationsObject = {
confirmCopy: 'Kopyanı təsdiqləyin',
confirmDeletion: 'Silməni təsdiqlə',
confirmDuplication: 'Dublikasiyanı təsdiqlə',
confirmMove: 'Hərəkəti təsdiqləyin',
confirmReindex: 'Bütün {{collections}} yenidən indekslənsin?',
confirmReindexAll: 'Bütün kolleksiyalar yenidən indekslənsin?',
confirmReindexDescription:
@@ -261,6 +289,8 @@ export const azTranslations: DefaultTranslationsObject = {
globals: 'Qloballar',
goBack: 'Geri qayıt',
isEditing: 'redaktə edir',
item: 'əşya',
items: 'maddələr',
language: 'Dil',
lastModified: 'Son dəyişdirildi',
leaveAnyway: 'Heç olmasa çıx',
@@ -272,8 +302,14 @@ export const azTranslations: DefaultTranslationsObject = {
locales: 'Dillər',
menu: 'Menyu',
moreOptions: 'Daha çox seçimlər',
move: 'Hərəkət et',
moveConfirm:
'Siz <1>{{destination}}</1> -ə {{count}} {{label}} köçürmək ətrafında. Eminsinizmi?',
moveCount: '{{count}} {{label}} hərəkət etdirin',
moveDown: 'Aşağı hərəkət et',
moveUp: 'Yuxarı hərəkət et',
moving: 'Hərəkət edir',
movingCount: '{{count}} {{label}} köçürülür',
newPassword: 'Yeni şifrə',
next: 'Növbəti',
noDateSelected: 'Heç bir tarix seçilməyib',
@@ -301,6 +337,7 @@ export const azTranslations: DefaultTranslationsObject = {
reindex: 'Yenidən indekslə',
reindexingAll: 'Bütün {{collections}} yenidən indekslənir.',
remove: 'Sil',
rename: 'Yenidən adlandırın',
reset: 'Yenidən başlat',
resetPreferences: 'Təhlükəsizlik parametrlərini sıfırlamaq',
resetPreferencesDescription: 'Bu, bütün parametrlərinizi standart vəziyyətlərinə sıfırlayacaq.',
@@ -311,6 +348,7 @@ export const azTranslations: DefaultTranslationsObject = {
saving: 'Saxlanılır...',
schedulePublishFor: '{{title}} üçün nəşr cədvəlini təyin edin',
searchBy: '{{label}} ilə axtar',
select: 'Seçin',
selectAll: 'Bütün {{count}} {{label}} seç',
selectAllRows: 'Bütün sıraları seçin',
selectedCount: '{{count}} {{label}} seçildi',

View File

@@ -174,7 +174,34 @@ export const bgTranslations: DefaultTranslationsObject = {
toggleBlock: 'Превключи блок',
uploadNewLabel: 'Качи нов {{label}}',
},
folder: {
browseByFolder: 'Прегледай по папки',
byFolder: 'По папка',
deleteFolder: 'Изтрий папка',
folderName: 'Име на папка',
folders: 'Папки',
itemHasBeenMoved: '{{title}} е преместен в {{folderName}}',
itemHasBeenMovedToRoot: '{{title}} беше преместено в основната папка',
itemsMovedToFolder: '{{title}} беше преместен в {{folderName}}',
itemsMovedToRoot: '{{title}} е преместен в основната папка.',
moveFolder: 'Премести папка',
moveItemsToFolderConfirmation:
'Предстои да преместите <1>{{count}} {{label}}</1> в <2>{{toFolder}}</2>. Сигурни ли сте?',
moveItemsToRootConfirmation:
'Предстои да преместите <1>{{count}} {{label}}</1> в основната папка. Сигурни ли сте?',
moveItemToFolderConfirmation:
'Предстои да преместите <1>{{title}}</1> в <2>{{toFolder}}</2>. Сигурни ли сте?',
moveItemToRootConfirmation:
'Предстои да преместите <1>{{title}}</1> в основната папка. Сигурни ли сте?',
movingFromFolder: 'Преместване на {{title}} от {{folderName}}',
newFolder: 'Нова папка',
noFolder: 'Няма папка',
renameFolder: 'Преименувай папка',
searchByNameInFolder: 'Търсене по име в {{folderName}}',
selectFolderForItem: 'Изберете папка за {{title}}',
},
general: {
name: 'Име',
aboutToDelete: 'На път си да изтриеш {{label}} <1>{{title}}</1>. Сигурен ли си?',
aboutToDeleteCount_many: 'На път си да изтриеш {{count}} {{label}}',
aboutToDeleteCount_one: 'На път си да изтриеш {{count}} {{label}}',
@@ -203,6 +230,7 @@ export const bgTranslations: DefaultTranslationsObject = {
confirmCopy: 'Потвърди копирането',
confirmDeletion: 'Потвърди изтриване',
confirmDuplication: 'Потвърди дупликация',
confirmMove: 'Потвърждаване на преместване',
confirmReindex: 'Да се преиндексират всички {{collections}}?',
confirmReindexAll: 'Да се преиндексират всички колекции?',
confirmReindexDescription:
@@ -260,6 +288,8 @@ export const bgTranslations: DefaultTranslationsObject = {
globals: 'Глобални',
goBack: 'Върни се',
isEditing: 'редактира',
item: 'артикул',
items: 'артикули',
language: 'Език',
lastModified: 'Последно променено',
leaveAnyway: 'Напусни въпреки това',
@@ -271,8 +301,14 @@ export const bgTranslations: DefaultTranslationsObject = {
locales: 'Локализации',
menu: 'Меню',
moreOptions: 'Повече опции',
move: 'Премести',
moveConfirm:
'Вие сте на път да преместите {{count}} {{label}} към <1>{{destination}}</1>. Сигурни ли сте?',
moveCount: 'Преместете {{count}} {{label}}',
moveDown: 'Надолу',
moveUp: 'Нагоре',
moving: 'Преместване',
movingCount: 'Преместване на {{count}} {{label}}',
newPassword: 'Нова парола',
next: 'Следващ',
noDateSelected: 'Не е избрана дата',
@@ -300,6 +336,7 @@ export const bgTranslations: DefaultTranslationsObject = {
reindex: 'Преиндексиране',
reindexingAll: 'Преиндексиране на всички {{collections}}.',
remove: 'Премахни',
rename: 'Преименувайте',
reset: 'Нулиране',
resetPreferences: 'Нулиране на предпочитанията',
resetPreferencesDescription:
@@ -311,6 +348,7 @@ export const bgTranslations: DefaultTranslationsObject = {
saving: 'Запазване...',
schedulePublishFor: 'Планирано публикуване за {{title}}',
searchBy: 'Търси по {{label}}',
select: 'Изберете',
selectAll: 'Избери всички {{count}} {{label}}',
selectAllRows: 'Избери всички редове',
selectedCount: '{{count}} {{label}} избрани',

View File

@@ -175,7 +175,34 @@ export const caTranslations: DefaultTranslationsObject = {
toggleBlock: 'Alterna el bloc',
uploadNewLabel: 'Puja un nou {{label}}',
},
folder: {
browseByFolder: 'Navega per carpeta',
byFolder: 'Per Carpeta',
deleteFolder: 'Esborra la carpeta',
folderName: 'Nom de la Carpeta',
folders: 'Carpetes',
itemHasBeenMoved: "{{title}} s'ha traslladat a {{folderName}}",
itemHasBeenMovedToRoot: "{{title}} s'ha mogut a la carpeta arrel",
itemsMovedToFolder: "{{title}} s'ha traslladat a {{folderName}}",
itemsMovedToRoot: "{{title}} s'ha traslladat a la carpeta arrel",
moveFolder: 'Mou la carpeta',
moveItemsToFolderConfirmation:
"Estàs a punt de moure <1>{{count}} {{label}}</1> a <2>{{toFolder}}</2>. N'estàs segur?",
moveItemsToRootConfirmation:
'Estàs a punt de moure <1>{{count}} {{label}}</1> a la carpeta arrel. Estàs segur?',
moveItemToFolderConfirmation:
"Estàs a punt de moure <1>{{title}}</1> a <2>{{toFolder}}</2>. N'estàs segur?",
moveItemToRootConfirmation:
"Estàs a punt de moure <1>{{title}}</1> a la carpeta arrel. N'estàs segur?",
movingFromFolder: 'Movent {{title}} de {{folderName}}',
newFolder: 'Nova carpeta',
noFolder: 'No hi ha carpeta',
renameFolder: 'Anomena carpeta',
searchByNameInFolder: 'Cerca per Nom en {{folderName}}',
selectFolderForItem: 'Selecciona la carpeta per a {{title}}',
},
general: {
name: 'Nom',
aboutToDelete: 'Estas apunt de eliminar {{label}} <1>{{title}}</1>. Estas segur?',
aboutToDeleteCount_many: 'Estas apunt de eliminar {{count}} {{label}}',
aboutToDeleteCount_one: 'Estas apunt de eliminar {{count}} {{label}}',
@@ -204,6 +231,7 @@ export const caTranslations: DefaultTranslationsObject = {
confirmCopy: 'Confirmar còpia',
confirmDeletion: "Confirma l'eliminació",
confirmDuplication: 'Confirma duplicacat',
confirmMove: 'Confirmar moviment',
confirmReindex: 'Reindexa {{collections}}?',
confirmReindexAll: 'Reindexa totes les col·leccions?',
confirmReindexDescription:
@@ -261,6 +289,8 @@ export const caTranslations: DefaultTranslationsObject = {
globals: 'Globals',
goBack: 'Torna enrere',
isEditing: 'esta editant',
item: 'element',
items: 'articles',
language: 'Idioma',
lastModified: 'Última modificació',
leaveAnyway: 'Deixa-ho de totes maneres',
@@ -272,8 +302,14 @@ export const caTranslations: DefaultTranslationsObject = {
locales: 'Idiomes',
menu: 'Menu',
moreOptions: 'Més opcions',
move: 'Mou-te',
moveConfirm:
"Està a punt de moure {{count}} {{label}} a <1>{{destination}}</1>. N'estàs segur?",
moveCount: 'Mou {{count}} {{label}}',
moveDown: 'Mou avall',
moveUp: 'Move amunt',
moving: 'En moviment',
movingCount: 'Moure {{count}} {{label}}',
newPassword: 'Nova contrasenya',
next: 'Seguent',
noDateSelected: 'Data not seleccionada',
@@ -301,6 +337,7 @@ export const caTranslations: DefaultTranslationsObject = {
reindex: 'Reindexa',
reindexingAll: 'Reindexa tots el {{collections}}.',
remove: 'Elimina',
rename: 'Canvia el nom',
reset: 'Restableix',
resetPreferences: 'Restablir les preferències',
resetPreferencesDescription:
@@ -312,6 +349,7 @@ export const caTranslations: DefaultTranslationsObject = {
saving: 'Desant...',
schedulePublishFor: 'Programa la publicacio {{title}}',
searchBy: 'Cerca per {{label}}',
select: 'Selecciona',
selectAll: 'Selecciona totes les {{count}} {{label}}',
selectAllRows: 'Selecciona totes les files',
selectedCount: '{{count}} {{label}} seleccionats',

View File

@@ -174,7 +174,34 @@ export const csTranslations: DefaultTranslationsObject = {
toggleBlock: 'Přepnout blok',
uploadNewLabel: 'Nahrát nový {{label}}',
},
folder: {
browseByFolder: 'Procházet podle složek',
byFolder: 'Podle složky',
deleteFolder: 'Smazat složku',
folderName: 'Název složky',
folders: 'Složky',
itemHasBeenMoved: '{{title}} bylo přesunuto do {{folderName}}',
itemHasBeenMovedToRoot: '{{title}} byl přesunut do kořenové složky',
itemsMovedToFolder: '{{title}} přesunuto do {{folderName}}',
itemsMovedToRoot: '{{title}} byl přesunut do kořenové složky',
moveFolder: 'Přesunout složku',
moveItemsToFolderConfirmation:
'Chystáte se přesunout <1>{{count}} {{label}}</1> do <2>{{toFolder}}</2>. Jste si jistý?',
moveItemsToRootConfirmation:
'Chystáte se přesunout <1>{{count}} {{label}}</1> do kořenové složky. Jste si jisti?',
moveItemToFolderConfirmation:
'Chystáte se přesunout <1>{{title}}</1> do <2>{{toFolder}}</2>. Jste si jistý?',
moveItemToRootConfirmation:
'Chystáte se přesunout <1>{{title}}</1> do kořenové složky. Jste si jistý?',
movingFromFolder: 'Přesunutí {{title}} z {{folderName}}',
newFolder: 'Nová složka',
noFolder: 'Žádná složka',
renameFolder: 'Přejmenovat složku',
searchByNameInFolder: 'Vyhledat podle jména v {{folderName}}',
selectFolderForItem: 'Vyberte složku pro {{title}}',
},
general: {
name: 'Jméno',
aboutToDelete: 'Chystáte se odstranit {{label}} <1>{{title}}</1>. Jste si jisti?',
aboutToDeleteCount_many: 'Chystáte se smazat {{count}} {{label}}',
aboutToDeleteCount_one: 'Chystáte se smazat {{count}} {{label}}',
@@ -203,6 +230,7 @@ export const csTranslations: DefaultTranslationsObject = {
confirmCopy: 'Potvrzení kopie',
confirmDeletion: 'Potvrdit odstranění',
confirmDuplication: 'Potvrdit duplikaci',
confirmMove: 'Potvrdit přesun',
confirmReindex: 'Přeindexovat všechny {{collections}}?',
confirmReindexAll: 'Přeindexovat všechny kolekce?',
confirmReindexDescription:
@@ -259,6 +287,8 @@ export const csTranslations: DefaultTranslationsObject = {
globals: 'Globální',
goBack: 'Vrátit se',
isEditing: 'upravuje',
item: 'položka',
items: 'položky',
language: 'Jazyk',
lastModified: 'Naposledy změněno',
leaveAnyway: 'Přesto odejít',
@@ -270,8 +300,14 @@ export const csTranslations: DefaultTranslationsObject = {
locales: 'Lokality',
menu: 'Jídelní lístek',
moreOptions: 'Více možností',
move: 'Pohnout',
moveConfirm:
'Chystáte se přesunout {{count}} {{label}} do <1>{{destination}}</1>. Jste si jisti?',
moveCount: 'Přesuňte {{count}} {{label}}',
moveDown: 'Posunout dolů',
moveUp: 'Posunout nahoru',
moving: 'Přesun',
movingCount: 'Přesunout {{count}} {{label}}',
newPassword: 'Nové heslo',
next: 'Další',
noDateSelected: 'Nebylo vybráno žádné datum',
@@ -299,6 +335,7 @@ export const csTranslations: DefaultTranslationsObject = {
reindex: 'Přeindexovat',
reindexingAll: 'Přeindexování všech {{collections}}.',
remove: 'Odstranit',
rename: 'Přejmenovat',
reset: 'Resetovat',
resetPreferences: 'Obnovit nastavení',
resetPreferencesDescription: 'Toto obnoví všechna vaše nastavení na výchozí hodnoty.',
@@ -309,6 +346,7 @@ export const csTranslations: DefaultTranslationsObject = {
saving: 'Ukládání...',
schedulePublishFor: 'Naplánovat publikaci pro {{title}}',
searchBy: 'Vyhledat podle {{label}}',
select: 'Vyberte',
selectAll: 'Vybrat vše {{count}} {{label}}',
selectAllRows: 'Vyberte všechny řádky',
selectedCount: 'Vybráno {{count}} {{label}}',

View File

@@ -173,7 +173,33 @@ export const daTranslations: DefaultTranslationsObject = {
toggleBlock: 'Skift blok',
uploadNewLabel: 'Upload ny {{label}}',
},
folder: {
browseByFolder: 'Gennemse efter Mappe',
byFolder: 'Ved Mappe',
deleteFolder: 'Slet mappe',
folderName: 'Mappenavn',
folders: 'Mapper',
itemHasBeenMoved: '{{title}} er blevet flyttet til {{folderName}}',
itemHasBeenMovedToRoot: '{{title}} er blevet flyttet til rodmappen',
itemsMovedToFolder: '{{title}} flyttet til {{folderName}}',
itemsMovedToRoot: '{{title}} flyttet til rod-mappen',
moveFolder: 'Flyt Mappe',
moveItemsToFolderConfirmation:
'Du er ved at flytte <1>{{count}} {{label}}</1> til <2>{{toFolder}}</2>. Er du sikker?',
moveItemsToRootConfirmation:
'Du er ved at flytte <1>{{count}} {{label}}</1> til rodmappen. Er du sikker?',
moveItemToFolderConfirmation:
'Du er ved at flytte <1>{{title}}</1> til <2>{{toFolder}}</2>. Er du sikker?',
moveItemToRootConfirmation: 'Du er ved at flytte <1>{{title}}</1> til rodmappen. Er du sikker?',
movingFromFolder: 'Flytter {{title}} fra {{folderName}}',
newFolder: 'Ny Mappe',
noFolder: 'Ingen Mappe',
renameFolder: 'Omdøb mappe',
searchByNameInFolder: 'Søg efter Navn i {{folderName}}',
selectFolderForItem: 'Vælg mappe til {{title}}',
},
general: {
name: 'Navn',
aboutToDelete: 'Du er ved at slette {{label}} <1>{{title}}</1>. Er du sikker?',
aboutToDeleteCount_many: 'Du er ved at slette {{count}} {{label}}',
aboutToDeleteCount_one: 'Du er ved at slette {{count}} {{label}}',
@@ -203,6 +229,7 @@ export const daTranslations: DefaultTranslationsObject = {
confirmCopy: 'Bekræft kopi',
confirmDeletion: 'Bekræft sletning',
confirmDuplication: 'Bekræft duplikering',
confirmMove: 'Bekræft flytning',
confirmReindex: 'Genindeksér alle {{collections}}?',
confirmReindexAll: 'Genindeksér alle samlinger?',
confirmReindexDescription:
@@ -259,6 +286,8 @@ export const daTranslations: DefaultTranslationsObject = {
globals: 'Globale',
goBack: 'Gå tilbage',
isEditing: 'redigerer',
item: 'vare',
items: 'elementer',
language: 'Sprog',
lastModified: 'Sidst ændret',
leaveAnyway: 'Forlad alligevel',
@@ -270,8 +299,14 @@ export const daTranslations: DefaultTranslationsObject = {
locales: 'Lokaliteter',
menu: 'Menu',
moreOptions: 'Flere muligheder',
move: 'Flyt',
moveConfirm:
'Du er ved at flytte {{count}} {{label}} til <1>{{destination}}</1>. Er du sikker?',
moveCount: 'Flyt {{count}} {{label}}',
moveDown: 'Ryk ned',
moveUp: 'Ryk op',
moving: 'Flytter',
movingCount: 'Flytter {{count}} {{label}}',
newPassword: 'Ny adgangskode',
next: 'Næste',
noDateSelected: 'Ingen dato valgt',
@@ -299,6 +334,7 @@ export const daTranslations: DefaultTranslationsObject = {
reindex: 'Genindekser',
reindexingAll: 'Genindekserer alle {{collections}}.',
remove: 'Fjern',
rename: 'Omdøb',
reset: 'Nulstil',
resetPreferences: 'Nulstil præferencer',
resetPreferencesDescription:
@@ -310,6 +346,7 @@ export const daTranslations: DefaultTranslationsObject = {
saving: 'Gemmer...',
schedulePublishFor: 'Planlæg offentliggørelse for {{title}}',
searchBy: 'Søg efter {{label}}',
select: 'Vælg',
selectAll: 'Vælg alle {{count}} {{label}}',
selectAllRows: 'Vælg alle rækker',
selectedCount: '{{count}} {{label}} valgt',

View File

@@ -120,7 +120,8 @@ export const deTranslations: DefaultTranslationsObject = {
unauthorized: 'Nicht autorisiert - du musst angemeldet sein, um diese Anfrage zu stellen.',
unauthorizedAdmin: 'Nicht autorisiert, dieser Benutzer hat keinen Zugriff auf das Admin-Panel.',
unknown: 'Ein unbekannter Fehler ist aufgetreten.',
unPublishingDocument: 'Bei der Aufhebung der Veröffentlichung dieses Dokuments ist ein Fehler aufgetreten.',
unPublishingDocument:
'Bei der Aufhebung der Veröffentlichung dieses Dokuments ist ein Fehler aufgetreten.',
unspecific: 'Ein Fehler ist aufgetreten.',
unverifiedEmail: 'Bitte verifiziere deine E-Mail, bevor du dich anmeldest.',
userEmailAlreadyRegistered: 'Ein Benutzer mit der angegebenen E-Mail ist bereits registriert.',
@@ -178,7 +179,34 @@ export const deTranslations: DefaultTranslationsObject = {
toggleBlock: 'Block umschalten',
uploadNewLabel: '{{label}} neu hochladen',
},
folder: {
browseByFolder: 'Durchsuchen nach Ordner',
byFolder: 'Nach Ordner',
deleteFolder: 'Ordner löschen',
folderName: 'Ordnername',
folders: 'Ordner',
itemHasBeenMoved: '{{title}} wurde in {{folderName}} verschoben.',
itemHasBeenMovedToRoot: '{{title}} wurde in den Hauptordner verschoben',
itemsMovedToFolder: '{{title}} wurde in {{folderName}} verschoben.',
itemsMovedToRoot: '{{title}} wurde in den Stammordner verschoben',
moveFolder: 'Ordner verschieben',
moveItemsToFolderConfirmation:
'Sie sind dabei, <1>{{count}} {{label}}</1> nach <2>{{toFolder}}</2> zu verschieben. Sind Sie sicher?',
moveItemsToRootConfirmation:
'Sie sind dabei, <1>{{count}} {{label}}</1> in den Hauptordner zu verschieben. Sind Sie sicher?',
moveItemToFolderConfirmation:
'Sie sind dabei, <1>{{title}}</1> zu <2>{{toFolder}}</2> zu verschieben. Sind Sie sicher?',
moveItemToRootConfirmation:
'Sie sind dabei, <1>{{title}}</1> in den Hauptordner zu verschieben. Sind Sie sicher?',
movingFromFolder: 'Verschieben von {{title}} aus {{folderName}}',
newFolder: 'Neuer Ordner',
noFolder: 'Kein Ordner',
renameFolder: 'Ordner umbenennen',
searchByNameInFolder: 'Suche nach Name in {{folderName}}',
selectFolderForItem: 'Wählen Sie den Ordner für {{title}}',
},
general: {
name: 'Name',
aboutToDelete: 'Du bist dabei {{label}} <1>{{title}}</1> zu löschen. Bist du dir sicher?',
aboutToDeleteCount_many: 'Du bist dabei, {{count}} {{label}} zu löschen',
aboutToDeleteCount_one: 'Du bist dabei, {{count}} {{label}} zu löschen',
@@ -208,6 +236,7 @@ export const deTranslations: DefaultTranslationsObject = {
confirmCopy: 'Kopie bestätigen',
confirmDeletion: 'Löschen bestätigen',
confirmDuplication: 'Duplizieren bestätigen',
confirmMove: 'Bestätigen Sie den Umzug.',
confirmReindex: 'Alle {{collections}} neu indizieren?',
confirmReindexAll: 'Alle Sammlungen neu indizieren?',
confirmReindexDescription:
@@ -265,6 +294,8 @@ export const deTranslations: DefaultTranslationsObject = {
globals: 'Globale Dokumente',
goBack: 'Zurück',
isEditing: 'bearbeitet gerade',
item: 'Artikel',
items: 'Artikel',
language: 'Sprache',
lastModified: 'Zuletzt geändert',
leaveAnyway: 'Trotzdem verlassen',
@@ -276,8 +307,14 @@ export const deTranslations: DefaultTranslationsObject = {
locales: 'Sprachen',
menu: 'Menü',
moreOptions: 'Mehr Optionen',
move: 'Bewegen',
moveConfirm:
'Sie sind dabei {{count}} {{label}} nach <1>{{destination}}</1> zu verschieben. Sind Sie sicher?',
moveCount: 'Bewegen Sie {{count}} {{label}}',
moveDown: 'Nach unten bewegen',
moveUp: 'Nach oben bewegen',
moving: 'Umziehen',
movingCount: 'Verschieben {{count}} {{label}}',
newPassword: 'Neues Passwort',
next: 'Nächste',
noDateSelected: 'Kein Datum ausgewählt',
@@ -305,6 +342,7 @@ export const deTranslations: DefaultTranslationsObject = {
reindex: 'Neuindizieren',
reindexingAll: 'Alle {{collections}} werden neu indiziert.',
remove: 'Entfernen',
rename: 'Umbenennen',
reset: 'Zurücksetzen',
resetPreferences: 'Präferenzen zurücksetzen',
resetPreferencesDescription: 'Alle Präferenzen werden auf die Standardwerte zurückgesetzt.',
@@ -315,13 +353,15 @@ export const deTranslations: DefaultTranslationsObject = {
saving: 'Speichern...',
schedulePublishFor: 'Plane die Veröffentlichung für {{title}}',
searchBy: 'Suche nach {{label}}',
select: 'Auswählen',
selectAll: 'Alle {{count}} {{label}} auswählen',
selectAllRows: 'Alle Zeilen auswählen',
selectedCount: '{{count}} {{label}} ausgewählt',
selectLabel: 'Wähle {{label}}',
selectValue: 'Wert auswählen',
showAllLabel: 'Zeige alle {{label}}',
sorryNotFound: 'Es tut uns leid, aber wir haben nichts gefunden, was deiner Anfrage entspricht.',
sorryNotFound:
'Es tut uns leid, aber wir haben nichts gefunden, was deiner Anfrage entspricht.',
sort: 'Sortieren',
sortByLabelDirection: 'Sortieren nach {{label}} {{direction}}',
stayOnThisPage: 'Auf dieser Seite bleiben',

View File

@@ -174,7 +174,34 @@ export const enTranslations = {
toggleBlock: 'Toggle block',
uploadNewLabel: 'Upload new {{label}}',
},
folder: {
browseByFolder: 'Browse by Folder',
byFolder: 'By Folder',
deleteFolder: 'Delete Folder',
folderName: 'Folder Name',
folders: 'Folders',
itemHasBeenMoved: '{{title}} has been moved to {{folderName}}',
itemHasBeenMovedToRoot: '{{title}} has been moved to the root folder',
itemsMovedToFolder: '{{title}} moved to {{folderName}}',
itemsMovedToRoot: '{{title}} moved to the root folder',
moveFolder: 'Move Folder',
moveItemsToFolderConfirmation:
'You are about to move <1>{{count}} {{label}}</1> to <2>{{toFolder}}</2>. Are you sure?',
moveItemsToRootConfirmation:
'You are about to move <1>{{count}} {{label}}</1> to the root folder. Are you sure?',
moveItemToFolderConfirmation:
'You are about to move <1>{{title}}</1> to <2>{{toFolder}}</2>. Are you sure?',
moveItemToRootConfirmation:
'You are about to move <1>{{title}}</1> to the root folder. Are you sure?',
movingFromFolder: 'Moving {{title}} from {{fromFolder}}',
newFolder: 'New Folder',
noFolder: 'No Folder',
renameFolder: 'Rename Folder',
searchByNameInFolder: 'Search by Name in {{folderName}}',
selectFolderForItem: 'Select folder for {{title}}',
},
general: {
name: 'Name',
aboutToDelete: 'You are about to delete the {{label}} <1>{{title}}</1>. Are you sure?',
aboutToDeleteCount_many: 'You are about to delete {{count}} {{label}}',
aboutToDeleteCount_one: 'You are about to delete {{count}} {{label}}',
@@ -204,6 +231,7 @@ export const enTranslations = {
confirmCopy: 'Confirm copy',
confirmDeletion: 'Confirm deletion',
confirmDuplication: 'Confirm duplication',
confirmMove: 'Confirm move',
confirmReindex: 'Reindex all {{collections}}?',
confirmReindexAll: 'Reindex all collections?',
confirmReindexDescription:
@@ -261,6 +289,8 @@ export const enTranslations = {
globals: 'Globals',
goBack: 'Go back',
isEditing: 'is editing',
item: 'item',
items: 'items',
language: 'Language',
lastModified: 'Last Modified',
leaveAnyway: 'Leave anyway',
@@ -272,8 +302,14 @@ export const enTranslations = {
locales: 'Locales',
menu: 'Menu',
moreOptions: 'More options',
move: 'Move',
moveConfirm:
'You are about to move {{count}} {{label}} to <1>{{destination}}</1>. Are you sure?',
moveCount: 'Move {{count}} {{label}}',
moveDown: 'Move Down',
moveUp: 'Move Up',
moving: 'Moving',
movingCount: 'Moving {{count}} {{label}}',
newPassword: 'New Password',
next: 'Next',
noDateSelected: 'No date selected',
@@ -301,6 +337,7 @@ export const enTranslations = {
reindex: 'Reindex',
reindexingAll: 'Reindexing all {{collections}}.',
remove: 'Remove',
rename: 'Rename',
reset: 'Reset',
resetPreferences: 'Reset Preferences',
resetPreferencesDescription:
@@ -312,6 +349,7 @@ export const enTranslations = {
saving: 'Saving...',
schedulePublishFor: 'Schedule publish for {{title}}',
searchBy: 'Search by {{label}}',
select: 'Select',
selectAll: 'Select all {{count}} {{label}}',
selectAllRows: 'Select all rows',
selectedCount: '{{count}} {{label}} selected',

View File

@@ -178,7 +178,34 @@ export const esTranslations: DefaultTranslationsObject = {
toggleBlock: 'Alternar bloque',
uploadNewLabel: 'Subir nuevo {{label}}',
},
folder: {
browseByFolder: 'Explorar por Carpeta',
byFolder: 'Por Carpeta',
deleteFolder: 'Eliminar Carpeta',
folderName: 'Nombre de la Carpeta',
folders: 'Carpetas',
itemHasBeenMoved: '{{title}} ha sido trasladado a {{folderName}}',
itemHasBeenMovedToRoot: '{{title}} ha sido movido a la carpeta raíz.',
itemsMovedToFolder: '{{title}} movido a {{folderName}}',
itemsMovedToRoot: '{{title}} se movió a la carpeta raíz',
moveFolder: 'Mover Carpeta',
moveItemsToFolderConfirmation:
'Estás a punto de mover <1>{{count}} {{label}}</1> a <2>{{toFolder}}</2>. ¿Estás seguro?',
moveItemsToRootConfirmation:
'Está a punto de mover <1>{{count}} {{label}}</1> a la carpeta raíz. ¿Está seguro?',
moveItemToFolderConfirmation:
'Está a punto de mover <1>{{title}}</1> a <2>{{toFolder}}</2>. ¿Está seguro?',
moveItemToRootConfirmation:
'Está a punto de mover <1>{{title}}</1> a la carpeta raíz. ¿Está seguro?',
movingFromFolder: 'Moviendo {{title}} de {{folderName}}',
newFolder: 'Nueva Carpeta',
noFolder: 'Sin Carpeta',
renameFolder: 'Renombrar carpeta',
searchByNameInFolder: 'Buscar por nombre en {{folderName}}',
selectFolderForItem: 'Seleccione la carpeta para {{title}}',
},
general: {
name: 'Nombre',
aboutToDelete: 'Estás por eliminar el {{label}} <1>{{title}}</1>. ¿Estás seguro?',
aboutToDeleteCount_many: 'Está a punto de eliminar {{count}} {{label}}',
aboutToDeleteCount_one: 'Está a punto de eliminar {{count}} {{label}}',
@@ -208,6 +235,7 @@ export const esTranslations: DefaultTranslationsObject = {
confirmCopy: 'Confirmar copia',
confirmDeletion: 'Confirmar eliminación',
confirmDuplication: 'Confirmar duplicado',
confirmMove: 'Confirmar movimiento',
confirmReindex: '¿Reindexar todas las {{collections}}?',
confirmReindexAll: '¿Reindexar todas las colecciones?',
confirmReindexDescription:
@@ -265,6 +293,8 @@ export const esTranslations: DefaultTranslationsObject = {
globals: 'Globales',
goBack: 'Volver',
isEditing: 'está editando',
item: 'artículo',
items: 'artículos',
language: 'Idioma',
lastModified: 'Última modificación',
leaveAnyway: 'Salir de todos modos',
@@ -276,8 +306,14 @@ export const esTranslations: DefaultTranslationsObject = {
locales: 'Locales',
menu: 'Menú',
moreOptions: 'Más opciones',
move: 'Mover',
moveConfirm:
'Estás a punto de mover {{count}} {{label}} a <1>{{destination}}</1>. ¿Estás seguro?',
moveCount: 'Mueva {{count}} {{label}}',
moveDown: 'Mover abajo',
moveUp: 'Mover arriba',
moving: 'Mudanza',
movingCount: 'Moviendo {{count}} {{label}}',
newPassword: 'Nueva contraseña',
next: 'Siguiente',
noDateSelected: 'No se seleccionó ninguna fecha',
@@ -305,6 +341,7 @@ export const esTranslations: DefaultTranslationsObject = {
reindex: 'Reindexar',
reindexingAll: 'Reindexando todas las {{collections}}.',
remove: 'Remover',
rename: 'Renombrar',
reset: 'Reiniciar',
resetPreferences: 'Restablecer preferencias',
resetPreferencesDescription:
@@ -316,6 +353,7 @@ export const esTranslations: DefaultTranslationsObject = {
saving: 'Guardando...',
schedulePublishFor: 'Programar publicación para {{title}}',
searchBy: 'Buscar por {{label}}',
select: 'Seleccionar',
selectAll: 'Seleccionar todo {{count}} {{label}}',
selectAllRows: 'Selecciona todas las filas',
selectedCount: '{{count}} {{label}} seleccionado',

View File

@@ -173,7 +173,34 @@ export const etTranslations: DefaultTranslationsObject = {
toggleBlock: 'Lülita plokk',
uploadNewLabel: 'Lae üles uus {{label}}',
},
folder: {
browseByFolder: 'Sirvi kausta järgi',
byFolder: 'Kausta järgi',
deleteFolder: 'Kustuta kaust',
folderName: 'Kausta nimi',
folders: 'Kaustad',
itemHasBeenMoved: '{{title}} on teisaldatud kausta {{folderName}}',
itemHasBeenMovedToRoot: '{{title}} on teisaldatud juurkausta',
itemsMovedToFolder: '{{title}} viidi üle kausta {{folderName}}',
itemsMovedToRoot: '{{title}} on teisaldatud juurkausta.',
moveFolder: 'Liiguta kausta',
moveItemsToFolderConfirmation:
'Te olete umbes kolimas <1>{{count}} {{label}}</1> kausta <2>{{toFolder}}</2>. Kas olete kindel?',
moveItemsToRootConfirmation:
'Te olete peaaegu teisaldamas <1>{{count}} {{label}}</1> juurkausta. Kas olete kindel?',
moveItemToFolderConfirmation:
'Te olete umbes liigutamas <1>{{title}}</1> kausta <2>{{toFolder}}</2>. Kas olete kindel?',
moveItemToRootConfirmation:
'Te olete peaaegu liigutanud <1>{{title}}</1> juurkausta. Kas olete kindel?',
movingFromFolder: 'Liigutan {{title}} kaustast {{folderName}}',
newFolder: 'Uus kaust',
noFolder: 'Pole kausta',
renameFolder: 'Nimeta kaust ümber',
searchByNameInFolder: 'Otsi nime järgi kaustas {{folderName}}',
selectFolderForItem: 'Valige kaust {{title}} jaoks',
},
general: {
name: 'Nimi',
aboutToDelete: 'Olete kustutamas {{label}} <1>{{title}}</1>. Olete kindel?',
aboutToDeleteCount_many: 'Olete kustutamas {{count}} {{label}}',
aboutToDeleteCount_one: 'Olete kustutamas {{count}} {{label}}',
@@ -202,6 +229,7 @@ export const etTranslations: DefaultTranslationsObject = {
confirmCopy: 'Kinnita kopeerimine',
confirmDeletion: 'Kinnita kustutamine',
confirmDuplication: 'Kinnita dubleerimine',
confirmMove: 'Kinnita liikumine',
confirmReindex: 'Indekseeri uuesti kõik {{collections}}?',
confirmReindexAll: 'Indekseeri uuesti kõik kollektsioonid?',
confirmReindexDescription:
@@ -258,6 +286,8 @@ export const etTranslations: DefaultTranslationsObject = {
globals: 'Globaalsed',
goBack: 'Mine tagasi',
isEditing: 'muudab',
item: 'üksus',
items: 'esemed',
language: 'Keel',
lastModified: 'Viimati muudetud',
leaveAnyway: 'Lahku ikkagi',
@@ -269,8 +299,13 @@ export const etTranslations: DefaultTranslationsObject = {
locales: 'Keeled',
menu: 'Menüü',
moreOptions: 'Rohkem valikuid',
move: 'Liiguta',
moveConfirm: 'Te olete liikumas {{count}} {{label}} <1>{{destination}}</1>. Kas olete kindel?',
moveCount: 'Teisalda {{count}} {{label}}',
moveDown: 'Liiguta alla',
moveUp: 'Liiguta üles',
moving: 'Liikumine',
movingCount: 'Liigutan {{count}} {{label}}',
newPassword: 'Uus parool',
next: 'Järgmine',
noDateSelected: 'Kuupäeva ei ole valitud',
@@ -298,6 +333,7 @@ export const etTranslations: DefaultTranslationsObject = {
reindex: 'Indekseeri uuesti',
reindexingAll: 'Indekseerin uuesti kõik {{collections}}.',
remove: 'Eemalda',
rename: 'Nimeta ümber',
reset: 'Lähtesta',
resetPreferences: 'Lähtesta eelistused',
resetPreferencesDescription: 'See lähtestab kõik teie eelistused vaikeväärtustele.',
@@ -308,6 +344,7 @@ export const etTranslations: DefaultTranslationsObject = {
saving: 'Salvestamine...',
schedulePublishFor: 'Planeeri avaldamine {{title}} jaoks',
searchBy: 'Otsi {{label}} järgi',
select: 'Vali',
selectAll: 'Vali kõik {{count}} {{label}}',
selectAllRows: 'Vali kõik read',
selectedCount: '{{count}} {{label}} valitud',

View File

@@ -172,7 +172,34 @@ export const faTranslations: DefaultTranslationsObject = {
toggleBlock: 'کارگذاری بلوک',
uploadNewLabel: 'بارگذاری تازه {{label}}',
},
folder: {
browseByFolder: 'مرور بر اساس پوشه',
byFolder: 'بر اساس پوشه',
deleteFolder: 'حذف پوشه',
folderName: 'نام پوشه',
folders: 'پوشه‌ها',
itemHasBeenMoved: '{{title}} به {{folderName}} منتقل شده است.',
itemHasBeenMovedToRoot: '{{title}} به پوشه اصلی انتقال یافته است.',
itemsMovedToFolder: '{{title}} به {{folderName}} منتقل شد.',
itemsMovedToRoot: '{{title}} به پوشه‌ی ریشه انتقال یافت',
moveFolder: 'انتقال پوشه',
moveItemsToFolderConfirmation:
'شما در حال جابجایی <1>{{count}} {{label}}</1> به <2>{{toFolder}}</2> هستید. آیا مطمئن هستید؟',
moveItemsToRootConfirmation:
'شما در حال حاضر در صدد انتقال <1>{{count}} {{label}}</1> به پوشه‌ی اصلی هستید. آیا مطمئنید؟',
moveItemToFolderConfirmation:
'شما در حال حاضر در صدد هستید <1>{{title}}</1> را به <2>{{toFolder}}</2> منتقل کنید. آیا مطمئن هستید؟',
moveItemToRootConfirmation:
'شما در حال حاضر در مورد انتقال <1>{{title}}</1> به پوشه ریشه هستید. آیا مطمئن هستید؟',
movingFromFolder: 'انتقال {{title}} از {{folderName}}',
newFolder: 'پوشه جدید',
noFolder: 'بدون پوشه',
renameFolder: 'تغییر نام پوشه',
searchByNameInFolder: 'جستجو بر اساس نام در {{folderName}}',
selectFolderForItem: 'انتخاب پوشه برای {{title}}',
},
general: {
name: 'نام',
aboutToDelete: 'شما در حال پاک کردن {{label}} <1>{{title}}</1> هستید. اطمینان دارید؟',
aboutToDeleteCount_many: 'شما در حال پاک کردن {{count}} تعداد {{label}} هستید',
aboutToDeleteCount_one: 'شما در حال پاک کردن {{count}} تعداد {{label}} هستید',
@@ -202,6 +229,7 @@ export const faTranslations: DefaultTranslationsObject = {
confirmCopy: 'تأیید کپی',
confirmDeletion: 'تأئید عملیات حذف',
confirmDuplication: 'تأئید رونوشت',
confirmMove: 'تأیید حرکت',
confirmReindex: 'آیا همه {{collections}} بازایندکس شوند؟',
confirmReindexAll: 'آیا همه مجموعه‌ها بازایندکس شوند؟',
confirmReindexDescription:
@@ -259,6 +287,8 @@ export const faTranslations: DefaultTranslationsObject = {
globals: 'سراسری',
goBack: 'برگشت',
isEditing: 'در حال ویرایش است',
item: 'مورد',
items: 'موارد',
language: 'زبان',
lastModified: 'آخرین نگارش',
leaveAnyway: 'به هر حال ترک کن',
@@ -270,8 +300,14 @@ export const faTranslations: DefaultTranslationsObject = {
locales: 'زبان‌ها',
menu: 'منو',
moreOptions: 'گزینه‌های بیشتر',
move: 'حرکت کنید',
moveConfirm:
'شما در حال انتقال {{count}} {{label}} به <1>{{destination}}</1> هستید. آیا مطمئن هستید؟',
moveCount: 'انتقال {{count}} {{label}}',
moveDown: 'حرکت به پایین',
moveUp: 'حرکت به بالا',
moving: 'در حال حرکت',
movingCount: 'انتقال {{count}} {{label}}',
newPassword: 'گذرواژه تازه',
next: 'بعدی',
noDateSelected: 'هیچ تاریخی انتخاب نشده است',
@@ -299,6 +335,7 @@ export const faTranslations: DefaultTranslationsObject = {
reindex: 'بازنمایه‌سازی',
reindexingAll: 'در حال بازایندکس همه {{collections}}.',
remove: 'برداشتن',
rename: 'تغییر نام',
reset: 'بازنشانی',
resetPreferences: 'بازنشانی تنظیمات',
resetPreferencesDescription: 'این تمام تنظیمات شما را به تنظیمات پیش‌فرض بازنشانی خواهد کرد.',
@@ -309,6 +346,7 @@ export const faTranslations: DefaultTranslationsObject = {
saving: 'در حال ذخیره...',
schedulePublishFor: 'برنامه‌ریزی انتشار برای {{عنوان}}',
searchBy: 'جستجو بر اساس {{label}}',
select: 'انتخاب کنید',
selectAll: 'انتخاب همه {{count}} {{label}}',
selectAllRows: 'انتخاب تمام سطرها',
selectedCount: '{{count}} {{label}} انتخاب شد',

View File

@@ -180,7 +180,34 @@ export const frTranslations: DefaultTranslationsObject = {
toggleBlock: 'Bloc bascule',
uploadNewLabel: 'Téléverser un(e) nouveau ou nouvelle {{label}}',
},
folder: {
browseByFolder: 'Parcourir par Dossier',
byFolder: 'Par Dossier',
deleteFolder: 'Supprimer le dossier',
folderName: 'Nom du dossier',
folders: 'Dossiers',
itemHasBeenMoved: '{{title}} a été déplacé vers {{folderName}}',
itemHasBeenMovedToRoot: '{{title}} a été déplacé dans le dossier racine',
itemsMovedToFolder: '{{title}} déplacé vers {{folderName}}',
itemsMovedToRoot: '{{title}} déplacé vers le dossier racine',
moveFolder: 'Déplacer le dossier',
moveItemsToFolderConfirmation:
'Vous êtes sur le point de déplacer <1>{{count}} {{label}}</1> vers <2>{{toFolder}}</2>. Êtes-vous sûr ?',
moveItemsToRootConfirmation:
'Vous êtes sur le point de déplacer <1>{{count}} {{label}}</1> vers le dossier racine. Êtes-vous sûr ?',
moveItemToFolderConfirmation:
'Vous êtes sur le point de déplacer <1>{{title}}</1> dans <2>{{toFolder}}</2>. Êtes-vous sûr ?',
moveItemToRootConfirmation:
'Vous êtes sur le point de déplacer <1>{{title}}</1> vers le dossier racine. Êtes-vous sûr ?',
movingFromFolder: 'Déplacement de {{title}} de {{folderName}}',
newFolder: 'Nouveau Dossier',
noFolder: 'Pas de dossier',
renameFolder: 'Renommer le dossier',
searchByNameInFolder: 'Recherche par nom dans {{folderName}}',
selectFolderForItem: 'Sélectionnez le dossier pour {{title}}',
},
general: {
name: 'Nom',
aboutToDelete:
'Vous êtes sur le point de supprimer ce ou cette {{label}} <1>{{title}}</1>. Êtes-vous sûr ?',
aboutToDeleteCount_many: 'Vous êtes sur le point de supprimer {{count}} {{label}}',
@@ -211,6 +238,7 @@ export const frTranslations: DefaultTranslationsObject = {
confirmCopy: 'Confirmer la copie',
confirmDeletion: 'Confirmer la suppression',
confirmDuplication: 'Confirmer la duplication',
confirmMove: 'Confirmez le déplacement',
confirmReindex: 'Réindexer toutes les {{collections}} ?',
confirmReindexAll: 'Réindexer toutes les collections ?',
confirmReindexDescription:
@@ -268,6 +296,8 @@ export const frTranslations: DefaultTranslationsObject = {
globals: 'Globals(es)',
goBack: 'Retourner',
isEditing: 'est en train de modifier',
item: 'article',
items: 'articles',
language: 'Langue',
lastModified: 'Dernière modification',
leaveAnyway: 'Quitter quand même',
@@ -279,8 +309,14 @@ export const frTranslations: DefaultTranslationsObject = {
locales: 'Paramètres régionaux',
menu: 'Menu',
moreOptions: "Plus d'options",
move: 'Déplacez-vous',
moveConfirm:
'Vous êtes sur le point de déplacer {{count}} {{label}} vers <1>{{destination}}</1>. Êtes-vous sûr ?',
moveCount: 'Déplacez {{count}} {{label}}',
moveDown: 'Déplacer vers le bas',
moveUp: 'Déplacer vers le haut',
moving: 'Déménagement',
movingCount: 'Déplacement de {{count}} {{label}}',
newPassword: 'Nouveau mot de passe',
next: 'Prochain',
noDateSelected: 'Aucune date sélectionnée',
@@ -308,6 +344,7 @@ export const frTranslations: DefaultTranslationsObject = {
reindex: 'Réindexer',
reindexingAll: 'Réindexation de toutes les {{collections}}.',
remove: 'Retirer',
rename: 'Renommer',
reset: 'Réinitialiser',
resetPreferences: 'Réinitialiser les préférences',
resetPreferencesDescription:
@@ -319,6 +356,7 @@ export const frTranslations: DefaultTranslationsObject = {
saving: 'Sauvegarde en cours...',
schedulePublishFor: 'Programmer la publication pour {{titre}}',
searchBy: 'Rechercher par {{label}}',
select: 'Sélectionner',
selectAll: 'Tout sélectionner {{count}} {{label}}',
selectAllRows: 'Sélectionnez toutes les lignes',
selectedCount: '{{count}} {{label}} sélectionné',

View File

@@ -170,7 +170,33 @@ export const heTranslations: DefaultTranslationsObject = {
toggleBlock: 'החלף בלוק',
uploadNewLabel: 'העלאת {{label}} חדשה',
},
folder: {
browseByFolder: 'עיין לפי תיקייה',
byFolder: 'לפי תיקייה',
deleteFolder: 'מחק תיקייה',
folderName: 'שם תיקייה',
folders: 'תיקיות',
itemHasBeenMoved: '"{{title}}" הועבר ל- "{{folderName}}"',
itemHasBeenMovedToRoot: '"{{title}}" הועבר לתיקיית השורש',
itemsMovedToFolder: '{{title}} הועבר אל {{folderName}}',
itemsMovedToRoot: '"{{title}}" הועבר לתיקייה הראשית',
moveFolder: 'העבר תיקייה',
moveItemsToFolderConfirmation:
'אתה עומד להעביר <1>{{count}} {{label}}</1> אל <2>{{toFolder}}</2>. האם אתה בטוח?',
moveItemsToRootConfirmation:
'אתה עומד להעביר <1>{{count}} {{label}}</1> לתיקייה הראשית. האם אתה בטוח?',
moveItemToFolderConfirmation:
'אתה עומד להעביר <1>{{title}}</1> ל-<2>{{toFolder}}</2>. האם אתה בטוח?',
moveItemToRootConfirmation: 'אתה עומד להעביר <1>{{title}}</1> לתיקייה הראשית. האם אתה בטוח?',
movingFromFolder: 'מזיז {{title}} מ-{{folderName}}',
newFolder: 'תיקייה חדשה',
noFolder: 'אין תיקייה',
renameFolder: 'שנה שם לתיקיה',
searchByNameInFolder: 'חיפוש לפי שם ב{{folderName}}',
selectFolderForItem: 'בחר תיקייה עבור {{title}}',
},
general: {
name: 'שם',
aboutToDelete: 'אתה עומד למחוק את {{label}} <1>{{title}}</1>. האם אתה בטוח?',
aboutToDeleteCount_many: 'אתה עומד למחוק {{count}} {{label}}',
aboutToDeleteCount_one: 'אתה עומד למחוק {{label}} אחד',
@@ -199,6 +225,7 @@ export const heTranslations: DefaultTranslationsObject = {
confirmCopy: 'אשר עותק',
confirmDeletion: 'אישור מחיקה',
confirmDuplication: 'אישור שכפול',
confirmMove: 'אשר העברה',
confirmReindex: 'האם להחזיר אינדקס לכל {{collections}}?',
confirmReindexAll: 'האם להחזיר אינדקס לכל האוספים?',
confirmReindexDescription:
@@ -255,6 +282,8 @@ export const heTranslations: DefaultTranslationsObject = {
globals: 'גלובלים',
goBack: 'חזור',
isEditing: 'עורך',
item: 'פריט',
items: 'פריטים',
language: 'שפה',
lastModified: 'נערך לאחרונה',
leaveAnyway: 'צא בכל זאת',
@@ -266,8 +295,13 @@ export const heTranslations: DefaultTranslationsObject = {
locales: 'שפות',
menu: 'תפריט',
moreOptions: 'אפשרויות נוספות',
move: 'הזוז',
moveConfirm: 'אתה עומד להעביר {{count}} {{label}} ל-<1>{{destination}}</1>. האם אתה בטוח?',
moveCount: 'הזז {{count}} {{label}}',
moveDown: 'הזז למטה',
moveUp: 'הזז למעלה',
moving: 'מזיז',
movingCount: 'מזיז {{count}} {{label}}',
newPassword: 'סיסמה חדשה',
next: 'הבא',
noDateSelected: 'לא נבחר תאריך',
@@ -294,6 +328,7 @@ export const heTranslations: DefaultTranslationsObject = {
reindex: 'החזרת אינדקס',
reindexingAll: 'החזרת אינדקס לכל {{collections}}.',
remove: 'הסר',
rename: 'שנה שם',
reset: 'איפוס',
resetPreferences: 'איפוס העדפות',
resetPreferencesDescription: 'זאת תאפס את כל ההעדפות שלך להגדרות ברירת המחדל.',
@@ -304,6 +339,7 @@ export const heTranslations: DefaultTranslationsObject = {
saving: 'שומר...',
schedulePublishFor: 'לתזמן פרסום עבור {{כותרת}}',
searchBy: 'חיפוש לפי {{label}}',
select: 'בחר',
selectAll: 'בחר את כל {{count}} ה{{label}}',
selectAllRows: 'בחר את כל השורות',
selectedCount: '{{count}} {{label}} נבחרו',

View File

@@ -175,7 +175,34 @@ export const hrTranslations: DefaultTranslationsObject = {
toggleBlock: 'Prebaci blok',
uploadNewLabel: 'Učitaj novi {{label}}',
},
folder: {
browseByFolder: 'Pregledajte po mapi',
byFolder: 'Po mapi',
deleteFolder: 'Izbriši mapu',
folderName: 'Naziv mape',
folders: 'Mape',
itemHasBeenMoved: '{{title}} je premješten u {{folderName}}',
itemHasBeenMovedToRoot: '{{title}} je premješten u korijensku mapu.',
itemsMovedToFolder: '{{title}} premješteno u {{folderName}}',
itemsMovedToRoot: '{{title}} premješten u korijensku mapu',
moveFolder: 'Premjesti mapu',
moveItemsToFolderConfirmation:
'Upravo se spremate premjestiti <1>{{count}} {{label}}</1> u <2>{{toFolder}}</2>. Jeste li sigurni?',
moveItemsToRootConfirmation:
'Na korak ste da premjestite <1>{{count}} {{label}}</1> u korijensku mapu. Jeste li sigurni?',
moveItemToFolderConfirmation:
'Upravo ćete premjestiti <1>{{title}}</1> u <2>{{toFolder}}</2>. Jeste li sigurni?',
moveItemToRootConfirmation:
'Upravo ćete premjestiti <1>{{title}}</1> u osnovnu mapu. Jeste li sigurni?',
movingFromFolder: 'Premještanje {{title}} iz {{folderName}}',
newFolder: 'Nova mapa',
noFolder: 'Nema mape',
renameFolder: 'Preimenuj mapu',
searchByNameInFolder: 'Pretraživanje po imenu u {{folderName}}',
selectFolderForItem: 'Odaberite mapu za {{title}}',
},
general: {
name: 'Ime',
aboutToDelete: 'Izbrisat ćete {{label}} <1>{{title}}</1>. Jeste li sigurni?',
aboutToDeleteCount_many: 'Upravo ćete izbrisati {{count}} {{label}}',
aboutToDeleteCount_one: 'Upravo ćete izbrisati {{count}} {{label}}',
@@ -204,6 +231,7 @@ export const hrTranslations: DefaultTranslationsObject = {
confirmCopy: 'Potvrdi kopiju',
confirmDeletion: 'Potvrdi brisanje',
confirmDuplication: 'Potvrdi duplikaciju',
confirmMove: 'Potvrdi premještanje',
confirmReindex: 'Ponovno indeksirati sve {{collections}}?',
confirmReindexAll: 'Ponovno indeksirati sve kolekcije?',
confirmReindexDescription:
@@ -261,6 +289,8 @@ export const hrTranslations: DefaultTranslationsObject = {
globals: 'Globali',
goBack: 'Vrati se',
isEditing: 'uređuje',
item: 'stavka',
items: 'stavke',
language: 'Jezik',
lastModified: 'Zadnja promjena',
leaveAnyway: 'Svejedno napusti',
@@ -272,8 +302,14 @@ export const hrTranslations: DefaultTranslationsObject = {
locales: 'Prijevodi',
menu: 'Izbornik',
moreOptions: 'Više opcija',
move: 'Pomakni',
moveConfirm:
'Upravo ćete premjestiti {{count}} {{label}} u <1>{{destination}}</1>. Jeste li sigurni?',
moveCount: 'Pomakni {{count}} {{label}}',
moveDown: 'Pomakni dolje',
moveUp: 'Pomakni gore',
moving: 'Pomicanje',
movingCount: 'Pomicanje {{count}} {{label}}',
newPassword: 'Nova lozinka',
next: 'Sljedeće',
noDateSelected: 'Nije odabran datum',
@@ -301,6 +337,7 @@ export const hrTranslations: DefaultTranslationsObject = {
reindex: 'Ponovno indeksiraj',
reindexingAll: 'Ponovno indeksiranje svih {{collections}}.',
remove: 'Ukloni',
rename: 'Preimenuj',
reset: 'Ponovno postavi',
resetPreferences: 'Ponovno postavljanje postavki',
resetPreferencesDescription: 'Ovo će vratiti sve vaše postavke na zadane vrijednosti.',
@@ -311,6 +348,7 @@ export const hrTranslations: DefaultTranslationsObject = {
saving: 'Spremanje...',
schedulePublishFor: 'Zakazano objavljivanje za {{title}}',
searchBy: 'Traži po {{label}}',
select: 'Odaberite',
selectAll: 'Odaberite sve {{count}} {{label}}',
selectAllRows: 'Odaberite sve redove',
selectedCount: '{{count}} {{label}} odabrano',

View File

@@ -176,7 +176,34 @@ export const huTranslations: DefaultTranslationsObject = {
toggleBlock: 'Blokk kinyitása',
uploadNewLabel: 'Új {{label}} feltöltése',
},
folder: {
browseByFolder: 'Mappa szerint böngészés',
byFolder: 'Mappánként',
deleteFolder: 'Mappa törlése',
folderName: 'Mappa neve',
folders: 'Mappák',
itemHasBeenMoved: '{{title}} át lett helyezve a {{folderName}} nevű mappába.',
itemHasBeenMovedToRoot: 'A(z) {{title}} át lett helyezve a gyökérmappába.',
itemsMovedToFolder: '{{title}} áthelyezve a(z) {{folderName}} mappába',
itemsMovedToRoot: 'A {{title}} átkerült a gyökérmappába',
moveFolder: 'Mappa áthelyezése',
moveItemsToFolderConfirmation:
'Ön <1>{{count}} {{label}}</1>-t készül áthelyezni a <2>{{toFolder}}</2> mappába. Biztos benne?',
moveItemsToRootConfirmation:
'Ön éppen azért készül, hogy <1>{{count}} {{label}}</1>-t a gyökérmappába helyezzen át. Biztos benne?',
moveItemToFolderConfirmation:
'Ön készül áthelyezni <1>{{title}}</1>-t <2>{{toFolder}}</2>-be. Biztos benne?',
moveItemToRootConfirmation:
'Arra készül, hogy a <1>{{title}}</1> elemet a gyökérmappába helyezi. Biztos benne?',
movingFromFolder: '{{title}} áthelyezése a(z) {{folderName}} mappából',
newFolder: 'Új Mappa',
noFolder: 'Nincs mappa',
renameFolder: 'Mappa átnevezése',
searchByNameInFolder: 'Keresés név alapján a(z) {{folderName}} mappában',
selectFolderForItem: 'Válassz mappát a {{title}} számára',
},
general: {
name: 'Név',
aboutToDelete: 'A {{label}} <1>{{title}}</1> törlésére készül. Biztos benne?',
aboutToDeleteCount_many: 'Törölni készül {{count}} {{label}}',
aboutToDeleteCount_one: 'Törölni készül {{count}} {{label}}',
@@ -206,6 +233,7 @@ export const huTranslations: DefaultTranslationsObject = {
confirmCopy: 'Jóváhagyott másolat',
confirmDeletion: 'Törlés megerősítése',
confirmDuplication: 'Duplikáció megerősítése',
confirmMove: 'Megerősíti a költözést',
confirmReindex: 'Újraindexálja az összes {{collections}}-t?',
confirmReindexAll: 'Újraindexálja az összes gyűjteményt?',
confirmReindexDescription:
@@ -263,6 +291,8 @@ export const huTranslations: DefaultTranslationsObject = {
globals: 'Globálisok',
goBack: 'Vissza',
isEditing: 'szerkeszt',
item: 'tétel',
items: 'tételek',
language: 'Nyelv',
lastModified: 'Utoljára módosítva',
leaveAnyway: 'Távozás mindenképp',
@@ -274,8 +304,13 @@ export const huTranslations: DefaultTranslationsObject = {
locales: 'Nyelvek',
menu: 'Menü',
moreOptions: 'Több opció',
move: 'Mozdulj',
moveConfirm: 'Ön <1>{{destination}}</1>-re fogja {{count}} {{label}}-t mozgatni. Biztos benne?',
moveCount: 'Mozduljon {{count}} {{label}}',
moveDown: 'Mozgatás lefelé',
moveUp: 'Mozgatás felfelé',
moving: 'Költözés',
movingCount: '{{Count}} {{label}} mozgatása',
newPassword: 'Új jelszó',
next: 'Következő',
noDateSelected: 'Nincs kiválasztott dátum',
@@ -303,6 +338,7 @@ export const huTranslations: DefaultTranslationsObject = {
reindex: 'Újraindexelés',
reindexingAll: 'Az összes {{collections}} újraindexálása folyamatban.',
remove: 'Törlés',
rename: 'Átnevez',
reset: 'Visszaállítás',
resetPreferences: 'Beállítások visszaállítása',
resetPreferencesDescription:
@@ -314,6 +350,7 @@ export const huTranslations: DefaultTranslationsObject = {
saving: 'Mentés...',
schedulePublishFor: 'Tervezett közzététel a(z) {{title}} című számára',
searchBy: 'Keresés a következő szerint: {{label}}',
select: 'Válasszon',
selectAll: 'Az összes kijelölése: {{count}} {{label}}',
selectAllRows: 'Válassza ki az összes sort',
selectedCount: '{{count}} {{label}} kiválasztva',

View File

@@ -27,11 +27,9 @@ export const hyTranslations: DefaultTranslationsObject = {
forgotPassword: 'Մոռացե՞լ եք գաղտնաբառը',
forgotPasswordEmailInstructions:
'Խնդրում ենք մուտքագրել Ձեր էլ. փոստը։ Դուք կստանաք էլ. նամակ՝ գաղտնաբառը վերականգնելու հրահանգներով։',
forgotPasswordQuestion: 'Մոռացե՞լ եք գաղտնաբառը։',
forgotPasswordUsernameInstructions:
'Խնդրում ենք ներքևում մուտքագրել Ձեր օգտանունը։ Գաղտնաբառը վերականգնելու հրահանգները կուղարկվեն Ձեր օգտանվան հետ կապված էլ. փոստի հասցեին։',
usernameNotValid: 'Տրամադրված օգտանունը վավեր չէ',
forgotPasswordQuestion: 'Մոռացե՞լ եք գաղտնաբառը։',
generate: 'Ստեղծել',
generateNewAPIKey: 'Ստեղծել նոր API բանալի',
generatingNewAPIKeyWillInvalidate:
@@ -68,6 +66,7 @@ export const hyTranslations: DefaultTranslationsObject = {
tokenRefreshSuccessful: 'Թոքենի թարմացումը հաջողվել է։',
unableToVerify: 'Հնարավոր չէ հաստատել',
username: 'Օգտանուն',
usernameNotValid: 'Տրամադրված օգտանունը վավեր չէ',
verified: 'Ստուգված',
verifiedSuccessfully: 'Հաջողությամբ ստուգված',
verify: 'Ստուգել',
@@ -175,7 +174,34 @@ export const hyTranslations: DefaultTranslationsObject = {
toggleBlock: 'Միացնել/անջատել բլոկը',
uploadNewLabel: 'Վերբեռնել նոր {{label}}',
},
folder: {
browseByFolder: 'Թվարկել թղթապանակներով',
byFolder: 'ըստ թղթապանակի',
deleteFolder: 'Ջնջել թղթապանակը',
folderName: 'Տեսակավորման անվանում',
folders: 'Պատուհաններ',
itemHasBeenMoved: '{{title}}-ը տեղափոխվել է {{folderName}}-ում',
itemHasBeenMovedToRoot: '«{{title}}» տեղափոխվել է արմատային պանակ։',
itemsMovedToFolder: '{{title}} տեղափոխվեց {{folderName}}',
itemsMovedToRoot: '{{title}} տեղափոխվել է արմատ թղթապանակին',
moveFolder: 'Տեղափոխել թղթապանակը',
moveItemsToFolderConfirmation:
'Դուք պատրաստ եք <1>{{count}} {{label}}</1> տեղափոխել <2>{{toFolder}}</2>։ Ամբողջականում համոզված եք:',
moveItemsToRootConfirmation:
'Դուք պատրաստված եք տեղափոխել <1>{{count}} {{label}}</1> արմատ թղթապանակի. Համոզվա՞ծ եք:',
moveItemToFolderConfirmation:
'Դուք պատրաստ եք տեղափոխել <1>{{title}}</1> <2>{{toFolder}}</2>։ Վստահ եք:',
moveItemToRootConfirmation:
'Դուք պատրաստ եք <1>{{title}}</1> տեղափոխել արմատային պանակի մեջ։ Վստահ եք։',
movingFromFolder: '{{title}}-ի տեղափոխում {{folderName}}-ից',
newFolder: 'Նոր թղթապանակ',
noFolder: 'Ոչ մի թղթապանակ',
renameFolder: 'Վերանվանել թղթապանակը',
searchByNameInFolder: 'Փնտրել ըստ անվանումի {{folderName}} թղթապանակում',
selectFolderForItem: 'Ընտրեք թղթապանակ {{title}}-ի համար',
},
general: {
name: 'Անուն',
aboutToDelete: 'Դուք պատրաստվում եք ջնջել {{label}} <1>{{title}}</1>-ը։ Համոզվա՞ծ եք։',
aboutToDeleteCount_many: 'Դուք պատրաստվում եք ջնջել {{count}} {{label}}',
aboutToDeleteCount_one: 'Դուք պատրաստվում եք ջնջել {{count}} {{label}}',
@@ -205,6 +231,7 @@ export const hyTranslations: DefaultTranslationsObject = {
confirmCopy: 'Հաստատել պատճենումը',
confirmDeletion: 'Հաստատել ջնջելը',
confirmDuplication: 'Հաստատել կրկնօրինակումը',
confirmMove: 'Հաստատեք տեղափոխումը',
confirmReindex: 'Վերաինդեքսավորե՞լ բոլոր {{collections}}-ը։',
confirmReindexAll: 'Վերաինդեքսավորե՞լ բոլոր հավաքածուները։',
confirmReindexDescription:
@@ -262,6 +289,8 @@ export const hyTranslations: DefaultTranslationsObject = {
globals: 'Համընդհանուրներ',
goBack: 'Հետ գնալ',
isEditing: 'խմբագրում է',
item: 'տարր',
items: 'տեսականի',
language: 'Լեզու',
lastModified: 'Վերջին փոփոխություն',
leaveAnyway: 'Այնուամենայնիվ հեռանալ',
@@ -273,8 +302,14 @@ export const hyTranslations: DefaultTranslationsObject = {
locales: 'Լոկալներ',
menu: 'Մենյու',
moreOptions: 'Լրացուցիչ ընտրանքներ',
move: 'Տեղափոխվել',
moveConfirm:
'Դուք պատրաստ եք տեղափոխել {{count}} {{label}} -ը <1>{{destination}}</1> -ից։ Արդյո՞ք վստահ եք։',
moveCount: 'Տեղափոխել {{count}} {{label}}',
moveDown: 'Տեղափոխել ներքև',
moveUp: 'Տեղափոխել վերև',
moving: 'Տեղափոխվում',
movingCount: 'Տեղափոխվում է {{count}} {{label}}',
newPassword: 'Նոր գաղտնաբառ',
next: 'Հաջորդ',
noDateSelected: 'Չկա ընտրված ամսաթիվ',
@@ -302,6 +337,7 @@ export const hyTranslations: DefaultTranslationsObject = {
reindex: 'Վերաինդեքսավորել',
reindexingAll: 'Վերաինդեքսավորվում են բոլոր {{collections}}-ները։',
remove: 'Հեռացնել',
rename: 'Վերանվանել',
reset: 'Վերակայել',
resetPreferences: 'Վերակայել նախընտրությունները',
resetPreferencesDescription:
@@ -313,6 +349,7 @@ export const hyTranslations: DefaultTranslationsObject = {
saving: 'Պահպանվում է...',
schedulePublishFor: 'Հրապարակման ժամանակ նշանակել {{title}}-ի համար',
searchBy: 'Որոնել ըստ {{label}}-ի',
select: 'Ընտրել',
selectAll: 'Ընտրել բոլոր {{count}} {{label}}',
selectAllRows: 'Ընտրել բոլոր տողերը',
selectedCount: '{{count}} {{label}} ընտրված է',

View File

@@ -178,7 +178,34 @@ export const itTranslations: DefaultTranslationsObject = {
toggleBlock: 'Apri/chiudi blocco',
uploadNewLabel: 'Carica nuovo {{label}}',
},
folder: {
browseByFolder: 'Sfoglia per Cartella',
byFolder: 'Per Cartella',
deleteFolder: 'Elimina cartella',
folderName: 'Nome Cartella',
folders: 'Cartelle',
itemHasBeenMoved: '{{title}} è stato spostato in {{folderName}}',
itemHasBeenMovedToRoot: '{{title}} è stato spostato nella cartella principale',
itemsMovedToFolder: '{{title}} spostato in {{folderName}}',
itemsMovedToRoot: '{{title}} è stato spostato nella cartella principale',
moveFolder: 'Sposta Cartella',
moveItemsToFolderConfirmation:
'Stai per spostare <1>{{count}} {{label}}</1> in <2>{{toFolder}}</2>. Sei sicuro?',
moveItemsToRootConfirmation:
'Stai per spostare <1>{{count}} {{label}}</1> nella cartella principale. Sei sicuro?',
moveItemToFolderConfirmation:
'Stai per spostare <1>{{title}}</1> in <2>{{toFolder}}</2>. Sei sicuro?',
moveItemToRootConfirmation:
'Stai per spostare <1>{{title}}</1> nella cartella principale. Sei sicuro?',
movingFromFolder: 'Spostando {{title}} da {{folderName}}',
newFolder: 'Nuova Cartella',
noFolder: 'Nessuna cartella',
renameFolder: 'Rinomina Cartella',
searchByNameInFolder: 'Cerca per Nome in {{folderName}}',
selectFolderForItem: 'Seleziona la cartella per {{title}}',
},
general: {
name: 'Nome',
aboutToDelete: 'Stai per eliminare {{label}} <1>{{title}}</1>. Sei sicuro?',
aboutToDeleteCount_many: 'Stai per eliminare {{count}} {{label}}',
aboutToDeleteCount_one: 'Stai per eliminare {{count}} {{label}}',
@@ -208,6 +235,7 @@ export const itTranslations: DefaultTranslationsObject = {
confirmCopy: 'Conferma copia',
confirmDeletion: "Conferma l'eliminazione",
confirmDuplication: 'Conferma la duplicazione',
confirmMove: 'Conferma spostamento',
confirmReindex: "Rifare l'indice di tutte le {{collections}}?",
confirmReindexAll: "Rifare l'indice di tutte le collezioni?",
confirmReindexDescription:
@@ -264,6 +292,8 @@ export const itTranslations: DefaultTranslationsObject = {
globals: 'Globali',
goBack: 'Torna indietro',
isEditing: 'sta modificando',
item: 'articolo',
items: 'articoli',
language: 'Lingua',
lastModified: 'Ultima modifica',
leaveAnyway: 'Esci comunque',
@@ -275,8 +305,13 @@ export const itTranslations: DefaultTranslationsObject = {
locales: 'Localizzazioni',
menu: 'Menù',
moreOptions: 'Più opzioni',
move: 'Muoviti',
moveConfirm: 'Stai per spostare {{count}} {{label}} in <1>{{destination}}</1>. Sei sicuro?',
moveCount: 'Sposta {{count}} {{label}}',
moveDown: 'Sposta sotto',
moveUp: 'Sposta sopra',
moving: 'In movimento',
movingCount: 'Spostando {{count}} {{label}}',
newPassword: 'Nuova Password',
next: 'Successivo',
noDateSelected: 'Nessuna data selezionata',
@@ -304,6 +339,7 @@ export const itTranslations: DefaultTranslationsObject = {
reindex: 'Reindicizza',
reindexingAll: "Rifacendo l'indice di tutte le {{collections}}.",
remove: 'Rimuovi',
rename: 'Rinomina',
reset: 'Ripristina',
resetPreferences: 'Ripristina le preferenze',
resetPreferencesDescription:
@@ -315,6 +351,7 @@ export const itTranslations: DefaultTranslationsObject = {
saving: 'Salvo...',
schedulePublishFor: 'Pianifica la pubblicazione per {{title}}',
searchBy: 'Cerca per {{label}}',
select: 'Seleziona',
selectAll: 'Seleziona tutto {{count}} {{label}}',
selectAllRows: 'Seleziona tutte le righe',
selectedCount: '{{count}} {{label}} selezionato',

View File

@@ -175,7 +175,34 @@ export const jaTranslations: DefaultTranslationsObject = {
toggleBlock: 'ブロックを切り替え',
uploadNewLabel: '新規 {{label}} アップロード',
},
folder: {
browseByFolder: 'フォルダーで閲覧する',
byFolder: 'フォルダー別に',
deleteFolder: 'フォルダを削除する',
folderName: 'フォルダ名',
folders: 'フォルダー',
itemHasBeenMoved: '{{title}}は{{folderName}}に移動されました',
itemHasBeenMovedToRoot: '{{title}}はルートフォルダに移動されました',
itemsMovedToFolder: '{{title}}は{{folderName}}に移動されました',
itemsMovedToRoot: '{{title}}はルートフォルダに移動しました。',
moveFolder: 'フォルダを移動する',
moveItemsToFolderConfirmation:
'あなたは<1>{{count}} {{label}}</1>を<2>{{toFolder}}</2>に移動しようとしています。よろしいですか?',
moveItemsToRootConfirmation:
'あなたはまもなく<1>{{count}} {{label}}</1>をルートフォルダーに移動しようとしています。よろしいですか?',
moveItemToFolderConfirmation:
'<1>{{title}}</1>を<2>{{toFolder}}</2>に移動しようとしています。よろしいですか?',
moveItemToRootConfirmation:
'あなたは<1>{{title}}</1>をルートフォルダに移動しようとしています。よろしいですか?',
movingFromFolder: '{{title}}を{{folderName}}から移動します',
newFolder: '新しいフォルダ',
noFolder: 'フォルダーなし',
renameFolder: 'フォルダの名前を変更する',
searchByNameInFolder: '{{folderName}}で名前を検索する',
selectFolderForItem: '{{title}}のためのフォルダを選択してください。',
},
general: {
name: '名前',
aboutToDelete: '{{label}} <1>{{title}}</1> を削除します。よろしいですか?',
aboutToDeleteCount_many: '{{label}}を{{count}}つ削除しようとしています',
aboutToDeleteCount_one: '{{label}}を{{count}}つ削除しようとしています',
@@ -204,6 +231,7 @@ export const jaTranslations: DefaultTranslationsObject = {
confirmCopy: 'コピーを確認します',
confirmDeletion: '削除の確認',
confirmDuplication: '複製の確認',
confirmMove: '移動を確認してください',
confirmReindex: 'すべての{{collections}}を再インデックスしますか?',
confirmReindexAll: 'すべてのコレクションを再インデックスしますか?',
confirmReindexDescription:
@@ -261,6 +289,8 @@ export const jaTranslations: DefaultTranslationsObject = {
globals: 'グローバル',
goBack: '戻る',
isEditing: '編集中',
item: 'アイテム',
items: 'アイテム',
language: '言語',
lastModified: '最終更新',
leaveAnyway: 'すぐに画面を離れる',
@@ -272,8 +302,14 @@ export const jaTranslations: DefaultTranslationsObject = {
locales: 'ロケール',
menu: 'メニュー',
moreOptions: 'より多くのオプション',
move: '移動します',
moveConfirm:
'あなたは{{count}} {{label}}を<1>{{destination}}</1>に移動しようとしています。よろしいですか?',
moveCount: '{{count}} {{label}}を移動してください',
moveDown: '下へ移動',
moveUp: '上へ移動',
moving: '移動中',
movingCount: '{{count}} {{label}}を移動します',
newPassword: '新しいパスワード',
next: '次',
noDateSelected: '日付が選択されていません',
@@ -301,6 +337,7 @@ export const jaTranslations: DefaultTranslationsObject = {
reindex: '再インデックス',
reindexingAll: 'すべての{{collections}}を再インデックスしています。',
remove: '削除',
rename: '名前を変更する',
reset: 'リセット',
resetPreferences: '設定をリセット',
resetPreferencesDescription: 'これにより、すべての設定がデフォルト設定にリセットされます。',
@@ -311,6 +348,7 @@ export const jaTranslations: DefaultTranslationsObject = {
saving: '保存しています...',
schedulePublishFor: '{{title}}の公開を予定する',
searchBy: '{{label}} で検索',
select: '選択してください。',
selectAll: 'すべての{{count}}つの{{label}}を選択',
selectAllRows: 'すべての行を選択します',
selectedCount: '{{count}}つの{{label}}を選択中',

View File

@@ -174,7 +174,33 @@ export const koTranslations: DefaultTranslationsObject = {
toggleBlock: '블록 토글',
uploadNewLabel: '새로운 {{label}} 업로드',
},
folder: {
browseByFolder: '폴더별 브라우징',
byFolder: '폴더별로',
deleteFolder: '폴더 삭제',
folderName: '폴더 이름',
folders: '폴더들',
itemHasBeenMoved: '{{title}}는 {{folderName}}로 이동되었습니다.',
itemHasBeenMovedToRoot: '{{title}}이(가) 루트 폴더로 이동되었습니다.',
itemsMovedToFolder: '{{title}}이(가) {{folderName}}로 이동되었습니다.',
itemsMovedToRoot: '{{title}}이(가) 루트 폴더로 이동되었습니다.',
moveFolder: '폴더 이동',
moveItemsToFolderConfirmation:
'<1>{{count}} {{label}}</1>을(를) <2>{{toFolder}}</2>(으)로 이동하려 합니다. 확실합니까?',
moveItemsToRootConfirmation:
'당신은 <1>{{count}} {{label}}</1>을 최상위 폴더로 이동하려고 합니다. 확실합니까?',
moveItemToFolderConfirmation:
'<1>{{title}}</1>을(를) <2>{{toFolder}}</2>(으)로 이동하려고 합니다. 확실하신가요?',
moveItemToRootConfirmation: '<1>{{title}}</1>을 루트 폴더로 이동하려고 합니다. 확실합니까?',
movingFromFolder: '{{title}}를 {{folderName}}에서 이동합니다',
newFolder: '새 폴더',
noFolder: '폴더 없음',
renameFolder: '폴더 이름 변경',
searchByNameInFolder: '{{folderName}}에서 이름으로 검색하세요.',
selectFolderForItem: '{{title}}에 대한 폴더 선택',
},
general: {
name: '이름',
aboutToDelete: '{{label}} <1>{{title}}</1>를 삭제하려고 합니다. 계속하시겠습니까?',
aboutToDeleteCount_many: '{{label}}를 {{count}}개 삭제하려고 합니다.',
aboutToDeleteCount_one: '{{label}}를 {{count}}개 삭제하려고 합니다.',
@@ -203,6 +229,7 @@ export const koTranslations: DefaultTranslationsObject = {
confirmCopy: '복사 확인',
confirmDeletion: '삭제하시겠습니까?',
confirmDuplication: '복제하시겠습니까?',
confirmMove: '이동 확인',
confirmReindex: '모든 {{collections}}를 다시 인덱싱하시겠습니까?',
confirmReindexAll: '모든 컬렉션을 다시 인덱싱하시겠습니까?',
confirmReindexDescription:
@@ -259,6 +286,8 @@ export const koTranslations: DefaultTranslationsObject = {
globals: '글로벌',
goBack: '돌아가기',
isEditing: '편집 중',
item: '항목',
items: '항목들',
language: '언어',
lastModified: '마지막 수정 일시',
leaveAnyway: '그래도 나가시겠습니까?',
@@ -270,8 +299,14 @@ export const koTranslations: DefaultTranslationsObject = {
locales: 'locale',
menu: '메뉴',
moreOptions: '더 많은 옵션',
move: '움직이세요',
moveConfirm:
'당신은 <1>{{destination}}</1>로 {{count}}개의 {{label}}을(를) 이동하려고 합니다. 확실합니까?',
moveCount: '{{count}} {{label}} 이동',
moveDown: '아래로 이동',
moveUp: '위로 이동',
moving: '이동하는',
movingCount: '{{count}} {{label}}을(를) 이동시킵니다.',
newPassword: '새 비밀번호',
next: '다음',
noDateSelected: '선택된 날짜가 없습니다.',
@@ -299,6 +334,7 @@ export const koTranslations: DefaultTranslationsObject = {
reindex: '재인덱싱',
reindexingAll: '모든 {{collections}}를 다시 인덱싱하는 중입니다.',
remove: '제거',
rename: '이름 변경',
reset: '초기화',
resetPreferences: '기본 설정으로 재설정',
resetPreferencesDescription: '이렇게 하면 모든 기본 설정이 기본값으로 재설정됩니다.',
@@ -309,6 +345,7 @@ export const koTranslations: DefaultTranslationsObject = {
saving: '저장 중...',
schedulePublishFor: '{{title}}에 대한 게시 일정 설정',
searchBy: '{{label}}로 검색',
select: '선택하십시오',
selectAll: '{{count}}개 {{label}} 모두 선택',
selectAllRows: '모든 행 선택',
selectedCount: '{{count}}개의 {{label}} 선택됨',

View File

@@ -176,7 +176,34 @@ export const ltTranslations: DefaultTranslationsObject = {
toggleBlock: 'Perjungti bloką',
uploadNewLabel: 'Įkelti naują {{label}}',
},
folder: {
browseByFolder: 'Naršyti pagal aplanką',
byFolder: 'Pagal aplanką',
deleteFolder: 'Ištrinti aplanką',
folderName: 'Aplanko pavadinimas',
folders: 'Aplankai',
itemHasBeenMoved: '{{title}} buvo perkeltas į {{folderName}}',
itemHasBeenMovedToRoot: '{{title}} buvo perkeltas į pagrindinį katalogą',
itemsMovedToFolder: '{{title}} perkeltas į {{folderName}}',
itemsMovedToRoot: '{{title}} perkeltas į šakninį aplanką',
moveFolder: 'Perkelti aplanką',
moveItemsToFolderConfirmation:
'Jūs ketinate perkelti <1>{{count}} {{label}}</1> į <2>{{toFolder}}</2>. Ar esate tikri?',
moveItemsToRootConfirmation:
'Jūs ketinate perkelti <1>{{count}} {{label}}</1> į šakninį aplanką. Ar esate tikri?',
moveItemToFolderConfirmation:
'Jūs ketinate perkelti <1>{{title}}</1> į <2>{{toFolder}}</2>. Ar esate įsitikinęs?',
moveItemToRootConfirmation:
'Jūs ketinate perkelti <1>{{title}}</1> į pagrindinį aplanką. Ar esate tikras?',
movingFromFolder: 'Perkeliamas {{title}} iš {{folderName}}',
newFolder: 'Naujas aplankas',
noFolder: 'Nėra aplanko',
renameFolder: 'Pervadinti aplanką',
searchByNameInFolder: 'Ieškoti pagal vardą {{folderName}}',
selectFolderForItem: 'Pasirinkite aplanką skirtą {{title}}',
},
general: {
name: 'Vardas',
aboutToDelete: 'Jūs ketinate ištrinti {{label}} <1>{{title}}</1>. Ar esate tikri?',
aboutToDeleteCount_many: 'Jūs ketinate ištrinti {{count}} {{label}}',
aboutToDeleteCount_one: 'Jūs ketinate ištrinti {{count}} {{label}}',
@@ -206,6 +233,7 @@ export const ltTranslations: DefaultTranslationsObject = {
confirmCopy: 'Patvirtinkite kopiją',
confirmDeletion: 'Patvirtinkite šalinimą',
confirmDuplication: 'Patvirtinkite dubliavimą',
confirmMove: 'Patvirtinkite perkėlimą',
confirmReindex: 'Perindeksuoti visas {{collections}}?',
confirmReindexAll: 'Perindeksuoti visas kolekcijas?',
confirmReindexDescription:
@@ -263,6 +291,8 @@ export const ltTranslations: DefaultTranslationsObject = {
globals: 'Globalai',
goBack: 'Grįžkite',
isEditing: 'redaguoja',
item: 'daiktas',
items: 'elementai',
language: 'Kalba',
lastModified: 'Paskutinį kartą modifikuota',
leaveAnyway: 'Vis tiek išeikite',
@@ -274,8 +304,14 @@ export const ltTranslations: DefaultTranslationsObject = {
locales: 'Lokalės',
menu: 'Meniu',
moreOptions: 'Daugiau parinkčių',
move: 'Judėti',
moveConfirm:
'Jūs ketinate perkelti {{count}} {{label}} į <1>{{destination}}</1>. Ar esate tikri?',
moveCount: 'Perkelti {{count}} {{label}}',
moveDown: 'Perkelti žemyn',
moveUp: 'Pakilti',
moving: 'Keliauja',
movingCount: 'Perkeliama {{count}} {{label}}',
newPassword: 'Naujas slaptažodis',
next: 'Toliau',
noDateSelected: 'Pasirinktos datos nėra',
@@ -303,6 +339,7 @@ export const ltTranslations: DefaultTranslationsObject = {
reindex: 'Perindeksuoti',
reindexingAll: 'Perindeksuojamos visos {{collections}}.',
remove: 'Pašalinti',
rename: 'Pervadinti',
reset: 'Atstatyti',
resetPreferences: 'Atstatyti nuostatas',
resetPreferencesDescription: 'Tai atstatys visas jūsų nuostatas į numatytąsias reikšmes.',
@@ -313,6 +350,7 @@ export const ltTranslations: DefaultTranslationsObject = {
saving: 'Išsaugoti...',
schedulePublishFor: 'Suplanuokite publikaciją „{{title}}“',
searchBy: 'Ieškokite pagal {{label}}',
select: 'Pasirinkite',
selectAll: 'Pasirinkite visus {{count}} {{label}}',
selectAllRows: 'Pasirinkite visas eilutes',
selectedCount: '{{count}} {{label}} pasirinkta',

View File

@@ -1,6 +1,6 @@
import type { Language } from '../types.js'
import type { DefaultTranslationsObject, Language } from '../types.js'
export const lvTranslations = {
export const lvTranslations: DefaultTranslationsObject = {
authentication: {
account: 'Konts',
accountOfCurrentUser: 'Pašreizējā lietotāja konts',
@@ -27,11 +27,9 @@ export const lvTranslations = {
forgotPassword: 'Aizmirsi paroli?',
forgotPasswordEmailInstructions:
'Lūdzu, ievadiet savu e-pastu zemāk. Saņemsiet ziņojumu ar norādījumiem paroles atiestatīšanai.',
forgotPasswordQuestion: 'Aizmirsi paroli?',
forgotPasswordUsernameInstructions:
'Lūdzu, ievadiet savu lietotājvārdu zemāk. Norādījumi paroles atiestatīšanai tiks nosūtīti uz e-pastu, kas saistīts ar jūsu lietotājvārdu.',
usernameNotValid: 'Norādītais lietotājvārds nav derīgs',
forgotPasswordQuestion: 'Aizmirsi paroli?',
generate: 'Ģenerēt',
generateNewAPIKey: 'Ģenerēt jaunu API atslēgu',
generatingNewAPIKeyWillInvalidate:
@@ -68,6 +66,7 @@ export const lvTranslations = {
tokenRefreshSuccessful: 'Tokens veiksmīgi atjaunots.',
unableToVerify: 'Neizdevās verificēt',
username: 'Lietotājvārds',
usernameNotValid: 'Norādītais lietotājvārds nav derīgs',
verified: 'Verificēts',
verifiedSuccessfully: 'Veiksmīgi verificēts',
verify: 'Verificēt',
@@ -175,7 +174,34 @@ export const lvTranslations = {
toggleBlock: 'Pārslēgt bloku',
uploadNewLabel: 'Augšupielādēt jaunu {{label}}',
},
folder: {
browseByFolder: 'Pārlūkot pēc mapes',
byFolder: 'Pēc mapi',
deleteFolder: 'Dzēst mapi',
folderName: 'Mapes nosaukums',
folders: 'Mapes',
itemHasBeenMoved: '{{title}} ir pārvietots uz {{folderName}}',
itemHasBeenMovedToRoot: '{{title}} ir pārvietots uz saknes mapi',
itemsMovedToFolder: '{{title}} pārvietots uz {{folderName}}',
itemsMovedToRoot: '{{title}} pārvietots uz saknes mapi',
moveFolder: 'Pārvietot mapi',
moveItemsToFolderConfirmation:
'Jūs esat gatavs pārvietot <1>{{count}} {{label}}</1> uz <2>{{toFolder}}</2>. Vai esat pārliecināts?',
moveItemsToRootConfirmation:
'Jūs gatavojaties pārvietot <1>{{count}} {{label}}</1> uz saknes mapi. Vai esat pārliecināts?',
moveItemToFolderConfirmation:
'Jūs gatavojaties pārvietot <1>{{title}}</1> uz <2>{{toFolder}}</2>. Vai esat pārliecināts?',
moveItemToRootConfirmation:
'Jūs gatavojaties pārvietot <1>{{title}}</1> uz saknes mapi. Vai esat pārliecināts?',
movingFromFolder: 'Pārvietojot {{title}} no {{fromFolder}}',
newFolder: 'Jauna Mape',
noFolder: 'Nav mapes',
renameFolder: 'Pārdēvēt mapi',
searchByNameInFolder: 'Meklēšana pēc vārda mapē {{folderName}}',
selectFolderForItem: 'Izvēlieties mapi priekš {{title}}',
},
general: {
name: 'Vārds',
aboutToDelete: 'Jūs grasāties dzēst {{label}} <1>{{title}}</1>. Vai esat pārliecināts?',
aboutToDeleteCount_many: 'Jūs grasāties dzēst {{count}} {{label}}',
aboutToDeleteCount_one: 'Jūs grasāties dzēst {{count}} {{label}}',
@@ -204,6 +230,7 @@ export const lvTranslations = {
confirmCopy: 'Apstiprināt kopēšanu',
confirmDeletion: 'Apstiprināt dzēšanu',
confirmDuplication: 'Apstiprināt dublēšanu',
confirmMove: 'Apstiprināt pārvietošanu',
confirmReindex: 'Pārindeksēt visus {{collections}}?',
confirmReindexAll: 'Pārindeksēt visas kolekcijas?',
confirmReindexDescription:
@@ -261,6 +288,8 @@ export const lvTranslations = {
globals: 'Globālie',
goBack: 'Doties atpakaļ',
isEditing: 'redzē',
item: 'vienība',
items: 'vienības',
language: 'Valoda',
lastModified: 'Pēdējoreiz mainīts',
leaveAnyway: 'Pamest tāpat',
@@ -272,8 +301,14 @@ export const lvTranslations = {
locales: 'Lokalizācijas',
menu: 'Izvēlne',
moreOptions: 'Vairāk opciju',
move: 'Pārvietoties',
moveConfirm:
'Jūs gatavojaties pārvietot {{count}} {{label}} uz <1>{{destination}}</1>. Vai esat pārliecināts?',
moveCount: 'Pārvietot {{count}} {{label}}',
moveDown: 'Pārvietot uz leju',
moveUp: 'Pārvietot uz augšu',
moving: 'Pārvietojas',
movingCount: 'Pārvietojot {{count}} {{label}}',
newPassword: 'Jauna parole',
next: 'Nākamais',
noDateSelected: 'Datums nav izvēlēts',
@@ -301,6 +336,7 @@ export const lvTranslations = {
reindex: 'Pārindeksēt',
reindexingAll: 'Pārindeksē visus {{collections}}.',
remove: 'Noņemt',
rename: 'Pārdēvēt',
reset: 'Atiestatīt',
resetPreferences: 'Atiestatīt iestatījumus',
resetPreferencesDescription: 'Tas atjaunos visus jūsu iestatījumus uz noklusētajiem.',
@@ -311,6 +347,7 @@ export const lvTranslations = {
saving: 'Saglabā...',
schedulePublishFor: 'Ieplānot publicēšanu priekš {{title}}',
searchBy: 'Meklēt pēc {{label}}',
select: 'Izvēlieties',
selectAll: 'Atlasīt visus {{count}} {{label}}',
selectAllRows: 'Atlasīt visas rindas',
selectedCount: 'Atlasīti {{count}} {{label}}',

View File

@@ -175,7 +175,34 @@ export const myTranslations: DefaultTranslationsObject = {
toggleBlock: 'ဘလောက်ကို ပြောင်းပါ။',
uploadNewLabel: '{{label}} အသစ်တင်မည်။',
},
folder: {
browseByFolder: 'Layari mengikut Folder',
byFolder: 'Dengan Folder',
deleteFolder: 'Padam Folder',
folderName: 'ဖိုင်နာမည်',
folders: 'Fail',
itemHasBeenMoved: '{{title}} telah dipindahkan ke {{folderName}}',
itemHasBeenMovedToRoot: '"{{title}}" က ဗဟိုဖိုလ်ဒါသို့ရွှေ့ပြီးပါပြီ။',
itemsMovedToFolder: '{{title}} သို့ {{folderName}} သို့ ရွှေ့လိုက်သွားပါပယ်',
itemsMovedToRoot: '{{title}} telah dipindahkan ke folder akar',
moveFolder: 'Pindah Folder',
moveItemsToFolderConfirmation:
'သင့်တွင် <1>{{count}} {{label}}</1> <2>{{toFolder}}</2>သို့ ရွှေ့နေသည့်အခါဖြစ်ပါသည်။ သေချာပါသလား?',
moveItemsToRootConfirmation:
'Anda akan memindahkan <1>{{count}} {{label}}</1> ke folder akar. Adakah anda pasti?',
moveItemToFolderConfirmation:
'Anda akan memindahkan <1>{{title}}</1> ke <2>{{toFolder}}</2>. Adakah anda pasti?',
moveItemToRootConfirmation:
'Anda akan memindahkan <1>{{title}}</1> ke folder root. Adakah anda pasti?',
movingFromFolder: 'Memindahkan {{title}} dari {{folderName}}',
newFolder: 'Folder Baru',
noFolder: 'ဖိုလ်ဒါမရှိပါ',
renameFolder: 'ဖိုလ်ဒါအမည်ပြောင်းရန်',
searchByNameInFolder: 'နာမည်ဖြင့် {{folderName}} တွင် ရှာဖွေပါ',
selectFolderForItem: 'Pilih folder untuk {{title}}',
},
general: {
name: 'နာမည်',
aboutToDelete:
'{{label}} <1>{{title}}</1> ကို ဖျက်ပါတော့မည်။ သေချာပြီလား။ ဖျက်ပြီးရင် ပြန်မရဘူးနော်။',
aboutToDeleteCount_many: 'သင်သည် {{count}} {{label}} ကို ဖျက်ပါတော့မည်။',
@@ -206,6 +233,7 @@ export const myTranslations: DefaultTranslationsObject = {
confirmCopy: 'အောင်မြင်စေသည့်ကူးထားပြီးအတည်ပြုပါ',
confirmDeletion: 'ဖျက်တော့မယ်နော်။',
confirmDuplication: 'ပုံတူပွားခြင်းကို အတည်ပြုပါ။',
confirmMove: 'Sahkan pergerakan',
confirmReindex: 'အပေါ် {{collections}} အားလုံးကို ထပ်လိပ်ပါသလား?',
confirmReindexAll: 'အပေါ် ကော်လက်ရှင်းများအားလုံးကို ထပ်လိပ်ပါသလား?',
confirmReindexDescription:
@@ -263,6 +291,8 @@ export const myTranslations: DefaultTranslationsObject = {
globals: 'Globals',
goBack: 'နောက်သို့',
isEditing: 'ပြင်ဆင်နေသည်',
item: 'barang',
items: 'barang-barang',
language: 'ဘာသာစကား',
lastModified: 'နောက်ဆုံးပြင်ဆင်ထားသည်။',
leaveAnyway: 'ဘာဖြစ်ဖြစ် ထွက်မည်။',
@@ -274,8 +304,14 @@ export const myTranslations: DefaultTranslationsObject = {
locales: 'Locales',
menu: 'မီနူး',
moreOptions: 'ပိုမိုများစွာရွေးချယ်ခွင့်',
move: 'ရွှေ့ပြောင်းပါ',
moveConfirm:
'သင် <1>{{destination}}</1> သို့ {{count}} {{label}} ကို ရွှေ့မည်ဖြစ်သည်။ သင့်တောင်းဆိုမှုကို သေချာပါသလား?',
moveCount: 'Pindah {{count}} {{label}}',
moveDown: 'Move Down',
moveUp: 'Move Up',
moving: 'ရွှေ့ပြောင်းခြင်း',
movingCount: 'Memindahkan {{count}} {{label}}',
newPassword: 'စကားဝှက် အသစ်',
next: 'Seterusnya',
noDateSelected: 'ရက်စွဲမရွေးချယ်ထားပါ',
@@ -303,6 +339,7 @@ export const myTranslations: DefaultTranslationsObject = {
reindex: 'ပြန်လည်အညွှန်းပြုလုပ်ပါ',
reindexingAll: 'အပေါ် {{collections}} အားလုံးကို ထပ်လိပ်နေပါသည်။',
remove: 'ဖယ်ရှားမည်။',
rename: 'အမည်ပြောင်း',
reset: 'Tetapkan semula',
resetPreferences: 'ကြိုတင်သတ်မှတ်ချက်များ ပြန်လည်တပ်ဆင်မည်',
resetPreferencesDescription:
@@ -314,6 +351,7 @@ export const myTranslations: DefaultTranslationsObject = {
saving: 'သိမ်းနေဆဲ ...',
schedulePublishFor: 'Jadualkan penerbitan untuk {{title}}',
searchBy: 'ရှာဖွေပါ။',
select: 'Pilih',
selectAll: '{{count}} {{label}} အားလုံးကို ရွေးပါ',
selectAllRows: 'အားလုံးကိုရွေးချယ်ပါ',
selectedCount: '{{count}} {{label}} ကို ရွေးထားသည်။',

View File

@@ -174,7 +174,34 @@ export const nbTranslations: DefaultTranslationsObject = {
toggleBlock: 'Veksle blokk',
uploadNewLabel: 'Last opp ny {{label}}',
},
folder: {
browseByFolder: 'Bla gjennom etter mappe',
byFolder: 'Etter mappe',
deleteFolder: 'Slett mappe',
folderName: 'Mappenavn',
folders: 'Mapper',
itemHasBeenMoved: '{{title}} er flyttet til {{folderName}}',
itemHasBeenMovedToRoot: '{{title}} er flyttet til rotmappen',
itemsMovedToFolder: '{{title}} flyttet til {{folderName}}',
itemsMovedToRoot: '{{title}} flyttet til rodmappen',
moveFolder: 'Flytt mappe',
moveItemsToFolderConfirmation:
'Du er i ferd med å flytte <1>{{count}} {{label}}</1> til <2>{{toFolder}}</2>. Er du sikker?',
moveItemsToRootConfirmation:
'Du er i ferd med å flytte <1>{{count}} {{label}}</1> til rotmappen. Er du sikker?',
moveItemToFolderConfirmation:
'Du er i ferd med å flytte <1>{{title}}</1> til <2>{{toFolder}}</2>. Er du sikker?',
moveItemToRootConfirmation:
'Du er i ferd med å flytte <1>{{title}}</1> til rodmappen. Er du sikker?',
movingFromFolder: 'Flytte {{title}} fra {{folderName}}',
newFolder: 'Ny mappe',
noFolder: 'Ingen mappe',
renameFolder: 'Endre mappenavn',
searchByNameInFolder: 'Søk etter navn i {{folderName}}',
selectFolderForItem: 'Velg mappe for {{title}}',
},
general: {
name: 'Navn',
aboutToDelete: 'Du er i ferd med å slette {{label}} <1>{{title}}</1>. Er du sikker?',
aboutToDeleteCount_many: 'Du er i ferd med å slette {{count}} {{label}}',
aboutToDeleteCount_one: 'Du er i ferd med å slette {{count}} {{label}}',
@@ -204,6 +231,7 @@ export const nbTranslations: DefaultTranslationsObject = {
confirmCopy: 'Bekreft kopi',
confirmDeletion: 'Bekreft sletting',
confirmDuplication: 'Bekreft duplisering',
confirmMove: 'Bekreft flytting',
confirmReindex: 'Reindekser alle {{collections}}?',
confirmReindexAll: 'Reindekser alle samlinger?',
confirmReindexDescription:
@@ -261,6 +289,8 @@ export const nbTranslations: DefaultTranslationsObject = {
globals: 'Globale variabler',
goBack: 'Gå tilbake',
isEditing: 'redigerer',
item: 'vare',
items: 'elementer',
language: 'Språk',
lastModified: 'Sist endret',
leaveAnyway: 'Forlat likevel',
@@ -272,8 +302,14 @@ export const nbTranslations: DefaultTranslationsObject = {
locales: 'Språk',
menu: 'Meny',
moreOptions: 'Flere alternativer',
move: 'Flytt',
moveConfirm:
'Du er i ferd med å flytte {{count}} {{label}} til <1>{{destination}}</1>. Er du sikker?',
moveCount: 'Flytt {{count}} {{label}}',
moveDown: 'Flytt ned',
moveUp: 'Flytt opp',
moving: 'Flytting',
movingCount: 'Flytter {{count}} {{label}}',
newPassword: 'Nytt passord',
next: 'Neste',
noDateSelected: 'Ingen dato valgt',
@@ -301,6 +337,7 @@ export const nbTranslations: DefaultTranslationsObject = {
reindex: 'Reindekser',
reindexingAll: 'Reindekserer alle {{collections}}.',
remove: 'Fjern',
rename: 'Endre navn',
reset: 'Tilbakestill',
resetPreferences: 'Tilbakestill preferanser',
resetPreferencesDescription:
@@ -312,6 +349,7 @@ export const nbTranslations: DefaultTranslationsObject = {
saving: 'Lagrer...',
schedulePublishFor: 'Planlegg publisering for {{title}}',
searchBy: 'Søk etter {{label}}',
select: 'Velg',
selectAll: 'Velg alle {{count}} {{label}}',
selectAllRows: 'Velg alle rader',
selectedCount: '{{count}} {{label}} valgt',

View File

@@ -176,7 +176,34 @@ export const nlTranslations: DefaultTranslationsObject = {
toggleBlock: 'Blok togglen',
uploadNewLabel: 'Upload nieuw(e) {{label}}',
},
folder: {
browseByFolder: 'Bladeren op Map',
byFolder: 'Op Map',
deleteFolder: 'Verwijder map',
folderName: 'Mapnaam',
folders: 'Mappen',
itemHasBeenMoved: '{{title}} is verplaatst naar {{folderName}}',
itemHasBeenMovedToRoot: '{{title}} is verplaatst naar de hoofdmap',
itemsMovedToFolder: '{{title}} verplaatst naar {{folderName}}',
itemsMovedToRoot: '{{title}} verplaatst naar de hoofdmap',
moveFolder: 'Verplaats Map',
moveItemsToFolderConfirmation:
'U staat op het punt om <1>{{count}} {{label}}</1> te verplaatsen naar <2>{{toFolder}}</2>. Weet u het zeker?',
moveItemsToRootConfirmation:
'U staat op het punt om <1>{{count}} {{label}}</1> naar de hoofdmap te verplaatsen. Weet u het zeker?',
moveItemToFolderConfirmation:
'U staat op het punt om <1>{{title}}</1> te verplaatsen naar <2>{{toFolder}}</2>. Weet u het zeker?',
moveItemToRootConfirmation:
'U staat op het punt om <1>{{title}}</1> naar de hoofdmap te verplaatsen. Weet u het zeker?',
movingFromFolder: 'Verplaatsen van {{title}} uit {{folderName}}',
newFolder: 'Nieuwe Map',
noFolder: 'Geen Map',
renameFolder: 'Hernoem Map',
searchByNameInFolder: 'Zoeken op naam in {{folderName}}',
selectFolderForItem: 'Selecteer map voor {{title}}',
},
general: {
name: 'Naam',
aboutToDelete:
'U staat op het punt om {{label}} <1>{{title}}</1> te verwijderen. Weet u het zeker?',
aboutToDeleteCount_many: 'Je staat op het punt {{count}} {{label}} te verwijderen',
@@ -207,6 +234,7 @@ export const nlTranslations: DefaultTranslationsObject = {
confirmCopy: 'Bevestig kopie',
confirmDeletion: 'Bevestig verwijdering',
confirmDuplication: 'Bevestig duplicatie',
confirmMove: 'Bevestig verplaatsing',
confirmReindex: 'Alle {{collections}} opnieuw indexeren?',
confirmReindexAll: 'Alle collecties opnieuw indexeren?',
confirmReindexDescription:
@@ -264,6 +292,8 @@ export const nlTranslations: DefaultTranslationsObject = {
globals: 'Globalen',
goBack: 'Ga terug',
isEditing: 'is aan het bewerken',
item: 'artikel',
items: 'artikelen',
language: 'Taal',
lastModified: 'Laatst gewijzigd',
leaveAnyway: 'Toch weggaan',
@@ -275,8 +305,14 @@ export const nlTranslations: DefaultTranslationsObject = {
locales: 'Landinstellingen',
menu: 'Menu',
moreOptions: 'Meer opties',
move: 'Verplaatsen',
moveConfirm:
'U staat op het punt om {{count}} {{label}} te verplaatsen naar <1>{{destination}}</1>. Weet u het zeker?',
moveCount: 'Verplaats {{count}} {{label}}',
moveDown: 'Verplaats naar beneden',
moveUp: 'Verplaats naar boven',
moving: 'Verhuizen',
movingCount: 'Verplaatsen {{count}} {{label}}',
newPassword: 'Nieuw wachtwoord',
next: 'Volgende',
noDateSelected: 'Geen datum geselecteerd',
@@ -304,6 +340,7 @@ export const nlTranslations: DefaultTranslationsObject = {
reindex: 'Herindexeren',
reindexingAll: 'Bezig met het opnieuw indexeren van alle {{collections}}.',
remove: 'Verwijderen',
rename: 'Hernoemen',
reset: 'Resetten',
resetPreferences: 'Voorkeuren resetten',
resetPreferencesDescription:
@@ -315,6 +352,7 @@ export const nlTranslations: DefaultTranslationsObject = {
saving: 'Bewaren...',
schedulePublishFor: 'Plan publicatie voor {{title}}',
searchBy: 'Zoeken op {{label}}',
select: 'Selecteer',
selectAll: 'Alles selecteren {{count}} {{label}}',
selectAllRows: 'Selecteer alle rijen',
selectedCount: '{{count}} {{label}} geselecteerd',

View File

@@ -174,7 +174,34 @@ export const plTranslations: DefaultTranslationsObject = {
toggleBlock: 'Przełącz blok',
uploadNewLabel: 'Wrzuć nowy {{label}}',
},
folder: {
browseByFolder: 'Przeglądaj według folderu',
byFolder: 'Według Folderu',
deleteFolder: 'Usuń folder',
folderName: 'Nazwa folderu',
folders: 'Foldery',
itemHasBeenMoved: '{{title}} został przeniesiony do {{folderName}}',
itemHasBeenMovedToRoot: '{{title}} został przeniesiony do folderu głównego',
itemsMovedToFolder: '{{title}} przeniesiono do {{folderName}}',
itemsMovedToRoot: '{{title}} został przeniesiony do folderu głównego',
moveFolder: 'Przenieś folder',
moveItemsToFolderConfirmation:
'Zamierzasz przenieść <1>{{count}} {{label}}</1> do <2>{{toFolder}}</2>. Czy jesteś pewien?',
moveItemsToRootConfirmation:
'Zamierzasz przenieść <1>{{count}} {{label}}</1> do folderu głównego. Czy jesteś pewien?',
moveItemToFolderConfirmation:
'Zamierzasz przenieść <1>{{title}}</1> do <2>{{toFolder}}</2>. Czy jesteś pewien?',
moveItemToRootConfirmation:
'Zamierzasz przenieść <1>{{title}}</1> do folderu głównego. Jesteś pewien?',
movingFromFolder: 'Przenoszenie {{title}} z {{folderName}}',
newFolder: 'Nowy folder',
noFolder: 'Brak folderu',
renameFolder: 'Zmień nazwę folderu',
searchByNameInFolder: 'Szukaj według nazwy w {{folderName}}',
selectFolderForItem: 'Wybierz folder dla {{title}}',
},
general: {
name: 'Nazwa',
aboutToDelete: 'Zamierzasz usunąć {{label}} <1>{{title}}</1>. Jesteś pewien?',
aboutToDeleteCount_many: 'Zamierzasz usunąć {{count}} {{label}}',
aboutToDeleteCount_one: 'Zamierzasz usunąć {{count}} {{label}}',
@@ -204,6 +231,7 @@ export const plTranslations: DefaultTranslationsObject = {
confirmCopy: 'Potwierdź kopię',
confirmDeletion: 'Potwierdź usunięcie',
confirmDuplication: 'Potwierdź duplikację',
confirmMove: 'Potwierdź przeniesienie',
confirmReindex: 'Ponownie zaindeksować wszystkie {{collections}}?',
confirmReindexAll: 'Ponownie zaindeksować wszystkie kolekcje?',
confirmReindexDescription:
@@ -261,6 +289,8 @@ export const plTranslations: DefaultTranslationsObject = {
globals: 'Globalne',
goBack: 'Wróć',
isEditing: 'edytuje',
item: 'przedmiot',
items: 'przedmioty',
language: 'Język',
lastModified: 'Ostatnio zmodyfikowany',
leaveAnyway: 'Wyjdź mimo to',
@@ -272,8 +302,14 @@ export const plTranslations: DefaultTranslationsObject = {
locales: 'Ustawienia regionalne',
menu: 'Menu',
moreOptions: 'Więcej opcji',
move: 'Przesuń',
moveConfirm:
'Zamierzasz przenieść {{count}} {{label}} do <1>{{destination}}</1>. Czy na pewno?',
moveCount: 'Przenieś {{count}} {{label}}',
moveDown: 'Przesuń niżej',
moveUp: 'Przesuń wyżej',
moving: 'Przeprowadzka',
movingCount: 'Przenoszenie {{count}} {{label}}',
newPassword: 'Nowe hasło',
next: 'Następny',
noDateSelected: 'Nie wybrano daty',
@@ -301,6 +337,7 @@ export const plTranslations: DefaultTranslationsObject = {
reindex: 'Ponowne indeksowanie',
reindexingAll: 'Ponowne indeksowanie wszystkich {{collections}}.',
remove: 'Usuń',
rename: 'Zmień nazwę',
reset: 'Zresetuj',
resetPreferences: 'Zresetuj preferencje',
resetPreferencesDescription: 'To zresetuje wszystkie Twoje preferencje do ustawień domyślnych.',
@@ -311,6 +348,7 @@ export const plTranslations: DefaultTranslationsObject = {
saving: 'Zapisywanie...',
schedulePublishFor: 'Zaplanuj publikację dla {{title}}',
searchBy: 'Szukaj według',
select: 'Wybierz',
selectAll: 'Wybierz wszystkie {{count}} {{label}}',
selectAllRows: 'Wybierz wszystkie wiersze',
selectedCount: 'Wybrano {{count}} {{label}}',

View File

@@ -174,7 +174,34 @@ export const ptTranslations: DefaultTranslationsObject = {
toggleBlock: 'Alternar bloco',
uploadNewLabel: 'Carregar novo(a) {{label}}',
},
folder: {
browseByFolder: 'Navegar por Pasta',
byFolder: 'Por Pasta',
deleteFolder: 'Apagar Pasta',
folderName: 'Nome da Pasta',
folders: 'Pastas',
itemHasBeenMoved: '{{title}} foi movido para {{folderName}}',
itemHasBeenMovedToRoot: '{{title}} foi movido para a pasta raiz',
itemsMovedToFolder: '{{title}} movido para {{folderName}}',
itemsMovedToRoot: '{{title}} foi movido para a pasta raiz',
moveFolder: 'Mover Pasta',
moveItemsToFolderConfirmation:
'Você está prestes a mover <1>{{count}} {{label}}</1> para <2>{{toFolder}}</2>. Tem certeza?',
moveItemsToRootConfirmation:
'Você está prestes a mover <1>{{count}} {{label}}</1> para a pasta raiz. Tem certeza?',
moveItemToFolderConfirmation:
'Você está prestes a mover <1>{{title}}</1> para <2>{{toFolder}}</2>. Tem certeza?',
moveItemToRootConfirmation:
'Você está prestes a mover <1>{{title}}</1> para a pasta raiz. Tem certeza disso?',
movingFromFolder: 'Movendo {{title}} de {{folderName}}',
newFolder: 'Nova Pasta',
noFolder: 'Sem Pasta',
renameFolder: 'Renomear Pasta',
searchByNameInFolder: 'Pesquisar por Nome em {{folderName}}',
selectFolderForItem: 'Selecione a pasta para {{title}}',
},
general: {
name: 'Nome',
aboutToDelete: 'Você está prestes a excluir o/a {{label}} <1>{{title}}</1>. Tem certeza?',
aboutToDeleteCount_many: 'Você está prestes a deletar {{count}} {{label}}',
aboutToDeleteCount_one: 'Você está prestes a deletar {{count}} {{label}}',
@@ -204,6 +231,7 @@ export const ptTranslations: DefaultTranslationsObject = {
confirmCopy: 'Confirme cópia',
confirmDeletion: 'Confirmar exclusão',
confirmDuplication: 'Confirmar duplicação',
confirmMove: 'Confirme a movimentação',
confirmReindex: 'Reindexar todas as {{collections}}?',
confirmReindexAll: 'Reindexar todas as coleções?',
confirmReindexDescription:
@@ -261,6 +289,8 @@ export const ptTranslations: DefaultTranslationsObject = {
globals: 'Globais',
goBack: 'Voltar',
isEditing: 'está editando',
item: 'item',
items: 'itens',
language: 'Idioma',
lastModified: 'Última modificação',
leaveAnyway: 'Sair mesmo assim',
@@ -272,8 +302,14 @@ export const ptTranslations: DefaultTranslationsObject = {
locales: 'Localizações',
menu: 'Cardápio',
moreOptions: 'Mais opções',
move: 'Mova',
moveConfirm:
'Você está prestes a mover {{count}} {{label}} para <1>{{destination}}</1>. Tem certeza?',
moveCount: 'Mova {{count}} {{label}}',
moveDown: 'Mover para Baixo',
moveUp: 'Mover para Cima',
moving: 'Mudando',
movingCount: 'Movendo {{count}} {{label}}',
newPassword: 'Nova Senha',
next: 'Próximo',
noDateSelected: 'Nenhuma data selecionada',
@@ -301,6 +337,7 @@ export const ptTranslations: DefaultTranslationsObject = {
reindex: 'Reindexar',
reindexingAll: 'Reindexando todas as {{collections}}.',
remove: 'Remover',
rename: 'Renomear',
reset: 'Redefinir',
resetPreferences: 'Redefinir preferências',
resetPreferencesDescription:
@@ -312,6 +349,7 @@ export const ptTranslations: DefaultTranslationsObject = {
saving: 'Salvando...',
schedulePublishFor: 'Agendar publicação para {{title}}',
searchBy: 'Buscar por {{label}}',
select: 'Selecionar',
selectAll: 'Selecione tudo {{count}} {{label}}',
selectAllRows: 'Selecione todas as linhas',
selectedCount: '{{count}} {{label}} selecionado',

View File

@@ -178,7 +178,34 @@ export const roTranslations: DefaultTranslationsObject = {
toggleBlock: 'Toggle bloc',
uploadNewLabel: 'Încărcați un nou {{label}}',
},
folder: {
browseByFolder: 'Răsfoiește după Folder',
byFolder: 'După dosar',
deleteFolder: 'Ștergeți dosarul',
folderName: 'Nume dosar',
folders: 'Dosare',
itemHasBeenMoved: '{{title}} a fost mutat în {{folderName}}',
itemHasBeenMovedToRoot: '{{title}} a fost mutat în dosarul rădăcină',
itemsMovedToFolder: '{{title}} a fost mutat în {{folderName}}',
itemsMovedToRoot: '{{title}} a fost mutat în dosarul rădăcină',
moveFolder: 'Mutare Dosar',
moveItemsToFolderConfirmation:
'Sunteți pe cale să mutați <1>{{count}} {{label}}</1> în <2>{{toFolder}}</2>. Sunteți sigur?',
moveItemsToRootConfirmation:
'Sunteți pe cale să mutați <1>{{count}} {{label}}</1> în dosarul principal. Sunteți sigur?',
moveItemToFolderConfirmation:
'Sunteți pe cale să mutați <1>{{title}}</1> în <2>{{toFolder}}</2>. Sunteți sigur?',
moveItemToRootConfirmation:
'Sunteți pe cale să mutați <1>{{title}}</1> în dosarul rădăcină. Sigur?',
movingFromFolder: 'Mutarea {{title}} din {{folderName}}',
newFolder: 'Dosar nou',
noFolder: 'Niciun dosar',
renameFolder: 'Redenumiți dosarul',
searchByNameInFolder: 'Căutați după nume în {{folderName}}',
selectFolderForItem: 'Selectați dosarul pentru {{title}}',
},
general: {
name: 'Nume',
aboutToDelete: 'Sunteți pe cale să ștergeți {{label}} <1>{{title}}</1>. Sunteți sigur?',
aboutToDeleteCount_many: 'Sunteți pe cale să ștergeți {{count}} {{label}}',
aboutToDeleteCount_one: 'Sunteți pe cale să ștergeți {{count}} {{label}}',
@@ -208,6 +235,7 @@ export const roTranslations: DefaultTranslationsObject = {
confirmCopy: 'Confirmă copierea',
confirmDeletion: 'Confirmați ștergerea',
confirmDuplication: 'Confirmați duplicarea',
confirmMove: 'Confirmați mutarea',
confirmReindex: 'Reindexați toate {{collections}}?',
confirmReindexAll: 'Reindexați toate colecțiile?',
confirmReindexDescription:
@@ -265,6 +293,8 @@ export const roTranslations: DefaultTranslationsObject = {
globals: 'Globale',
goBack: 'Înapoi',
isEditing: 'editează',
item: 'articol',
items: 'articole',
language: 'Limba',
lastModified: 'Ultima modificare',
leaveAnyway: 'Pleacă oricum',
@@ -276,8 +306,14 @@ export const roTranslations: DefaultTranslationsObject = {
locales: 'Localuri',
menu: 'Meniu',
moreOptions: 'Mai multe opțiuni',
move: 'Mutați',
moveConfirm:
'Sunteți pe cale să mutați {{count}} {{label}} la <1>{{destination}}</1>. Sunteți sigur?',
moveCount: 'Mutați {{count}} {{label}}',
moveDown: 'Mutați în jos',
moveUp: 'Mutați în sus',
moving: 'În mișcare',
movingCount: 'Mutarea {{count}} {{eticheta}}',
newPassword: 'Parolă nouă',
next: 'Următorul',
noDateSelected: 'Nu a fost selectată nicio dată',
@@ -305,6 +341,7 @@ export const roTranslations: DefaultTranslationsObject = {
reindex: 'Reindexare',
reindexingAll: 'Reindexarea tuturor {{collections}}.',
remove: 'Eliminați',
rename: 'Redenumire',
reset: 'Resetare',
resetPreferences: 'Resetare preferințe',
resetPreferencesDescription: 'Aceasta va reseta toate preferințele tale la setările implicite.',
@@ -315,6 +352,7 @@ export const roTranslations: DefaultTranslationsObject = {
saving: 'Salvare...',
schedulePublishFor: 'Planificați publicarea pentru {{title}}',
searchBy: 'Căutați după {{label}}',
select: 'Selectați',
selectAll: 'Selectați toate {{count}} {{label}}',
selectAllRows: 'Selectează toate rândurile',
selectedCount: '{{count}} {{label}} selectate',

View File

@@ -175,7 +175,34 @@ export const rsTranslations: DefaultTranslationsObject = {
toggleBlock: 'Пребаци блок',
uploadNewLabel: 'Учитај нови {{label}}',
},
folder: {
browseByFolder: 'Pregledajte po folderu',
byFolder: 'Po folderu',
deleteFolder: 'Obriši fasciklu',
folderName: 'Ime fascikle',
folders: 'Fascikle',
itemHasBeenMoved: '{{title}} je premješten u {{folderName}}',
itemHasBeenMovedToRoot: '{{title}} je premešten u osnovni direktorijum.',
itemsMovedToFolder: '{{title}} premešten u {{folderName}}',
itemsMovedToRoot: '{{title}} pomeren u koreni direktorijum',
moveFolder: 'Premesti fasciklu',
moveItemsToFolderConfirmation:
'Upravo ste na korak da premestite <1>{{count}} {{label}}</1> u <2>{{toFolder}}</2>. Da li ste sigurni?',
moveItemsToRootConfirmation:
'Управо ћете преместити <1>{{count}} {{label}}</1> у основну фасциклу. Да ли сте сигурни?',
moveItemToFolderConfirmation:
'Uskoro ćete premestiti <1>{{title}}</1> u <2>{{toFolder}}</2>. Da li ste sigurni?',
moveItemToRootConfirmation:
'Upravo ćete premestiti <1>{{title}}</1> u osnovnu fasciklu. Da li ste sigurni?',
movingFromFolder: 'Premeštanje {{title}} iz {{folderName}}',
newFolder: 'Novi folder',
noFolder: 'Nema foldera',
renameFolder: 'Preimenuj folder',
searchByNameInFolder: 'Pretraži po imenu u {{folderName}}',
selectFolderForItem: 'Izaberite fasciklu za {{title}}',
},
general: {
name: 'Ime',
aboutToDelete: 'Избрисаћете {{label}} <1>{{title}}</1>. Да ли сте сигурни?',
aboutToDeleteCount_many: 'Избрисаћете {{count}} {{label}}',
aboutToDeleteCount_one: 'Избрисаћете {{count}} {{label}}',
@@ -204,6 +231,7 @@ export const rsTranslations: DefaultTranslationsObject = {
confirmCopy: 'Potvrda kopiranja',
confirmDeletion: 'Потврди брисање',
confirmDuplication: 'Потврди дупликацију',
confirmMove: 'Potvrdite pomeranje',
confirmReindex: 'Ponovo indeksirati sve {{collections}}?',
confirmReindexAll: 'Ponovo indeksirati sve kolekcije?',
confirmReindexDescription:
@@ -261,6 +289,8 @@ export const rsTranslations: DefaultTranslationsObject = {
globals: 'Глобали',
goBack: 'Врати се',
isEditing: 'уређује',
item: 'artikal',
items: 'artikli',
language: 'Језик',
lastModified: 'Задња промена',
leaveAnyway: 'Свеједно напусти',
@@ -272,8 +302,14 @@ export const rsTranslations: DefaultTranslationsObject = {
locales: 'Преводи',
menu: 'Мени',
moreOptions: 'Više opcija',
move: 'Pomeri',
moveConfirm:
'Upravo ćete premestiti {{count}} {{label}} u <1>{{destination}}</1>. Da li ste sigurni?',
moveCount: 'Pomeri {{count}} {{label}}',
moveDown: 'Помери доле',
moveUp: 'Помери горе',
moving: 'Pomeranje',
movingCount: 'Pomeranje {{count}} {{label}}',
newPassword: 'Нова лозинка',
next: 'Следећи',
noDateSelected: 'Nije odabran datum',
@@ -301,6 +337,7 @@ export const rsTranslations: DefaultTranslationsObject = {
reindex: 'Реиндексирај',
reindexingAll: 'Ponovno indeksiranje svih {{collections}}.',
remove: 'Уклони',
rename: 'Preimenujte',
reset: 'Поново постави',
resetPreferences: 'Поништи подешавања',
resetPreferencesDescription: 'Ово ће поништити сва ваша подешавања на подразумеване вредности.',
@@ -311,6 +348,7 @@ export const rsTranslations: DefaultTranslationsObject = {
saving: 'Чување у току...',
schedulePublishFor: 'Zakažite objavljivanje za {{title}}',
searchBy: 'Тражи по {{label}}',
select: 'Izaberite',
selectAll: 'Одаберите све {{count}} {{label}}',
selectAllRows: 'Одаберите све редове',
selectedCount: '{{count}} {{label}} одабрано',

View File

@@ -175,7 +175,34 @@ export const rsLatinTranslations: DefaultTranslationsObject = {
toggleBlock: 'Prebaci blok',
uploadNewLabel: 'Učitaj novi {{label}}',
},
folder: {
browseByFolder: 'Pregledaj po Folderu',
byFolder: 'Po fascikli',
deleteFolder: 'Obriši mapu',
folderName: 'Naziv fascikle',
folders: 'Fascikle',
itemHasBeenMoved: '{{title}} je premesten u {{folderName}}',
itemHasBeenMovedToRoot: '{{title}} je premešten u osnovnu fasciklu',
itemsMovedToFolder: '{{title}} premešteno u {{folderName}}',
itemsMovedToRoot: '{{title}} je premješten u glavnu fasciklu',
moveFolder: 'Premesti folder',
moveItemsToFolderConfirmation:
'Na korak ste da premestite <1>{{count}} {{label}}</1> u <2>{{toFolder}}</2>. Da li ste sigurni?',
moveItemsToRootConfirmation:
'Uskoro ćete premestiti <1>{{count}} {{label}}</1> u koreni direktorijum. Da li ste sigurni?',
moveItemToFolderConfirmation:
'Upravo ćete premestiti <1>{{title}}</1> u <2>{{toFolder}}</2>. Da li ste sigurni?',
moveItemToRootConfirmation:
'Upravo ćete premestiti <1>{{title}}</1> u glavnu fasciklu. Da li ste sigurni?',
movingFromFolder: 'Premestanje {{title}} iz {{folderName}}',
newFolder: 'Novi Folder',
noFolder: 'Nema foldera',
renameFolder: 'Preimenuj folder',
searchByNameInFolder: 'Pretraga po imenu u {{folderName}}',
selectFolderForItem: 'Izaberite fasciklu za {{title}}',
},
general: {
name: 'Ime',
aboutToDelete: 'Izbrisaćete {{label}} <1>{{title}}</1>. Da li ste sigurni?',
aboutToDeleteCount_many: 'Izbrisaćete {{count}} {{label}}',
aboutToDeleteCount_one: 'Izbrisaćete {{count}} {{label}}',
@@ -204,6 +231,7 @@ export const rsLatinTranslations: DefaultTranslationsObject = {
confirmCopy: 'Potvrdi kopiju',
confirmDeletion: 'Potvrdi brisanje',
confirmDuplication: 'Potvrdi duplikaciju',
confirmMove: 'Potvrdi pomeranje',
confirmReindex: 'Ponovo indeksirati sve {{collections}}?',
confirmReindexAll: 'Ponovo indeksirati sve kolekcije?',
confirmReindexDescription:
@@ -261,6 +289,8 @@ export const rsLatinTranslations: DefaultTranslationsObject = {
globals: 'Globali',
goBack: 'Vrati se',
isEditing: 'uređuje',
item: 'stavka',
items: 'stavke',
language: 'Jezik',
lastModified: 'Zadnja promena',
leaveAnyway: 'Svejedno napusti',
@@ -272,8 +302,14 @@ export const rsLatinTranslations: DefaultTranslationsObject = {
locales: 'Prevodi',
menu: 'Meni',
moreOptions: 'Više opcija',
move: 'Pomeri',
moveConfirm:
'Uskoro ćete premestiti {{count}} {{label}} u <1>{{destination}}</1>. Da li ste sigurni?',
moveCount: 'Pomeri {{count}} {{label}}',
moveDown: 'Pomeri dole',
moveUp: 'Pomeri gore',
moving: 'Pomeranje',
movingCount: 'Pomeranje {{count}} {{label}}',
newPassword: 'Nova lozinka',
next: 'Sledeći',
noDateSelected: 'Nijedan datum nije odabran',
@@ -301,6 +337,7 @@ export const rsLatinTranslations: DefaultTranslationsObject = {
reindex: 'Reindeksiraj',
reindexingAll: 'Ponovno indeksiranje svih {{collections}}.',
remove: 'Ukloni',
rename: 'Preimenuj',
reset: 'Ponovo postavi',
resetPreferences: 'Poništi podešavanja',
resetPreferencesDescription:
@@ -312,6 +349,7 @@ export const rsLatinTranslations: DefaultTranslationsObject = {
saving: 'Čuvanje u toku...',
schedulePublishFor: 'Zakaži objavljivanje za {{title}}',
searchBy: 'Traži po {{label}}',
select: 'Izaberite',
selectAll: 'Odaberite sve {{count}} {{label}}',
selectAllRows: 'Odaberite sve redove',
selectedCount: '{{count}} {{label}} odabrano',

View File

@@ -176,7 +176,34 @@ export const ruTranslations: DefaultTranslationsObject = {
toggleBlock: 'Переключить Блок',
uploadNewLabel: 'Загрузить новый {{label}}',
},
folder: {
browseByFolder: 'Просмотр по папкам',
byFolder: 'По папке',
deleteFolder: 'Удалить папку',
folderName: 'Название папки',
folders: 'Папки',
itemHasBeenMoved: '{{title}} был перемещен в {{folderName}}',
itemHasBeenMovedToRoot: '{{title}} был перемещен в корневую папку',
itemsMovedToFolder: '{{title}} перемещен в {{folderName}}',
itemsMovedToRoot: '{{title}} перемещен в корневую папку',
moveFolder: 'Переместить папку',
moveItemsToFolderConfirmation:
'Вы собираетесь переместить <1>{{count}} {{label}}</1> в <2>{{toFolder}}</2>. Вы уверены?',
moveItemsToRootConfirmation:
'Вы собираетесь перенести <1>{{count}} {{label}}</1> в корневую папку. Вы уверены?',
moveItemToFolderConfirmation:
'Вы собираетесь переместить <1>{{title}}</1> в <2>{{toFolder}}</2>. Вы уверены?',
moveItemToRootConfirmation:
'Вы собираетесь переместить <1>{{title}}</1> в корневую папку. Вы уверены?',
movingFromFolder: 'Перемещение {{title}} из {{folderName}}',
newFolder: 'Новая папка',
noFolder: 'Нет папки',
renameFolder: 'Переименовать папку',
searchByNameInFolder: 'Поиск по имени в {{folderName}}',
selectFolderForItem: 'Выберите папку для {{title}}',
},
general: {
name: 'Имя',
aboutToDelete: 'Вы собираетесь удалить {{label}} <1>{{title}}</1>. Вы уверены?',
aboutToDeleteCount_many: 'Вы собираетесь удалить {{count}} {{label}}',
aboutToDeleteCount_one: 'Вы собираетесь удалить {{count}} {{label}}',
@@ -206,6 +233,7 @@ export const ruTranslations: DefaultTranslationsObject = {
confirmCopy: 'Подтвердить копирование',
confirmDeletion: 'Подтвердить удаление',
confirmDuplication: 'Подтвердить копирование',
confirmMove: 'Подтвердите перемещение',
confirmReindex: 'Переиндексировать все {{collections}}?',
confirmReindexAll: 'Переиндексировать все коллекции?',
confirmReindexDescription:
@@ -263,6 +291,8 @@ export const ruTranslations: DefaultTranslationsObject = {
globals: 'Глобальные',
goBack: 'Назад',
isEditing: 'редактирует',
item: 'предмет',
items: 'предметы',
language: 'Язык',
lastModified: 'Последнее изменение',
leaveAnyway: 'Все равно уйти',
@@ -274,8 +304,14 @@ export const ruTranslations: DefaultTranslationsObject = {
locales: 'Локали',
menu: 'Меню',
moreOptions: 'Больше вариантов',
move: 'Переместить',
moveConfirm:
'Вы собираетесь переместить {{count}} {{label}} в <1>{{destination}}</1>. Вы уверены?',
moveCount: 'Переместить {{count}} {{label}}',
moveDown: 'Сдвинуть вниз',
moveUp: 'Сдвинуть вверх',
moving: 'Переезд',
movingCount: 'Перемещение {{count}} {{label}}',
newPassword: 'Новый пароль',
next: 'Следующий',
noDateSelected: 'Дата не выбрана',
@@ -303,6 +339,7 @@ export const ruTranslations: DefaultTranslationsObject = {
reindex: 'Переиндексировать',
reindexingAll: 'Переиндексирование всех {{collections}}.',
remove: 'Удалить',
rename: 'Переименовать',
reset: 'Сброс',
resetPreferences: 'Сбросить настройки',
resetPreferencesDescription: 'Это сбросит все ваши настройки до значений по умолчанию.',
@@ -313,6 +350,7 @@ export const ruTranslations: DefaultTranslationsObject = {
saving: 'Сохранение...',
schedulePublishFor: 'Запланировать публикацию для {{title}}',
searchBy: 'Искать по',
select: 'Выбрать',
selectAll: 'Выбрать все {{count}} {{label}}',
selectAllRows: 'Выбрать все строки',
selectedCount: '{{count}} {{label}} выбрано',

View File

@@ -177,7 +177,34 @@ export const skTranslations: DefaultTranslationsObject = {
toggleBlock: 'Prepnúť blok',
uploadNewLabel: 'Nahrať nový {{label}}',
},
folder: {
browseByFolder: 'Prehliadať podľa priečinka',
byFolder: 'Podľa priečinka',
deleteFolder: 'Odstrániť priečinok',
folderName: 'Názov priečinka',
folders: 'Priečinky',
itemHasBeenMoved: '{{title}} bol presunutý do {{folderName}}',
itemHasBeenMovedToRoot: '{{title}} bol presunutý do koreňového priečinka',
itemsMovedToFolder: '{{title}} presunuté do {{folderName}}',
itemsMovedToRoot: '{{title}} bol presunutý do koreňového priečinka',
moveFolder: 'Presunúť priečinok',
moveItemsToFolderConfirmation:
'Chystáte sa presunúť <1>{{count}} {{label}}</1> do <2>{{toFolder}}</2>. Ste si istý?',
moveItemsToRootConfirmation:
'Chystáte sa presunúť <1>{{count}} {{label}}</1> do koreňového priečinka. Ste si istý?',
moveItemToFolderConfirmation:
'Chystáte sa presunúť <1>{{title}}</1> do <2>{{toFolder}}</2>. Ste si istý?',
moveItemToRootConfirmation:
'Chystáte sa presunúť <1>{{title}}</1> do koreňového priečinka. Ste si istý?',
movingFromFolder: 'Presun {{title}} z {{folderName}}',
newFolder: 'Nový priečinok',
noFolder: 'Žiadna zložka',
renameFolder: 'Premenovať priečinok',
searchByNameInFolder: 'Hľadaj podľa mena v {{folderName}}',
selectFolderForItem: 'Vyberte priečinok pre {{title}}',
},
general: {
name: 'Meno',
aboutToDelete: 'Chystáte sa odstrániť {{label}} <1>{{title}}</1>. Ste si istí?',
aboutToDeleteCount_many: 'Chystáte sa zmazať {{count}} {{label}}',
aboutToDeleteCount_one: 'Chystáte sa zmazať {{count}} {{label}}',
@@ -206,6 +233,7 @@ export const skTranslations: DefaultTranslationsObject = {
confirmCopy: 'Potvrdiť kópiu',
confirmDeletion: 'Potvrdiť odstránenie',
confirmDuplication: 'Potvrdiť duplikáciu',
confirmMove: 'Potvrdiť presun',
confirmReindex: 'Znova zaindexovať všetky {{collections}}?',
confirmReindexAll: 'Znova zaindexovať všetky kolekcie?',
confirmReindexDescription:
@@ -262,6 +290,8 @@ export const skTranslations: DefaultTranslationsObject = {
globals: 'Globalné',
goBack: 'Vrátiť sa',
isEditing: 'upravuje',
item: 'položka',
items: 'položky',
language: 'Jazyk',
lastModified: 'Naposledy zmenené',
leaveAnyway: 'Presto odísť',
@@ -273,8 +303,13 @@ export const skTranslations: DefaultTranslationsObject = {
locales: 'Jazyky',
menu: 'Menu',
moreOptions: 'Viac možností',
move: 'Presuňte sa',
moveConfirm: 'Chystáte sa presunúť {{count}} {{label}} do <1>{{destination}}</1>. Ste si istý?',
moveCount: 'Presuňte {{count}} {{label}}',
moveDown: 'Presunúť dolu',
moveUp: 'Presunúť hore',
moving: 'Pohybujúci sa',
movingCount: 'Presunutie {{count}} {{label}}',
newPassword: 'Nové heslo',
next: 'Ďalej',
noDateSelected: 'Nie je vybraný dátum',
@@ -302,6 +337,7 @@ export const skTranslations: DefaultTranslationsObject = {
reindex: 'Reindexovať',
reindexingAll: 'Znova sa indexujú všetky {{collections}}.',
remove: 'Odstrániť',
rename: 'Premenovať',
reset: 'Resetovať',
resetPreferences: 'Obnoviť nastavenia',
resetPreferencesDescription: 'Týmto sa všetky vaše nastavenia vrátia na predvolené hodnoty.',
@@ -312,6 +348,7 @@ export const skTranslations: DefaultTranslationsObject = {
saving: 'Ukladanie...',
schedulePublishFor: 'Naplánovať publikovanie pre {{title}}',
searchBy: 'Vyhľadať podľa {{label}}',
select: 'Vyberte',
selectAll: 'Vybrať všetko {{count}} {{label}}',
selectAllRows: 'Vybrať všetky riadky',
selectedCount: 'Vybrané {{count}} {{label}}',

View File

@@ -174,7 +174,34 @@ export const slTranslations: DefaultTranslationsObject = {
toggleBlock: 'Preklopi blok',
uploadNewLabel: 'Naloži nov {{label}}',
},
folder: {
browseByFolder: 'Brskaj po mapi',
byFolder: 'Po mapi',
deleteFolder: 'Izbriši mapo',
folderName: 'Ime mape',
folders: 'Mape',
itemHasBeenMoved: '{{title}} je bil premaknjen v {{folderName}}',
itemHasBeenMovedToRoot: '{{title}} je bil premaknjen v korensko mapo.',
itemsMovedToFolder: '{{title}} premaknjeno v {{folderName}}',
itemsMovedToRoot: '{{title}} premaknjeno v korensko mapo',
moveFolder: 'Premakni mapo',
moveItemsToFolderConfirmation:
'Ravno se pripravljate na premik <1>{{count}} {{label}}</1> v mapo <2>{{toFolder}}</2>. Ste prepričani?',
moveItemsToRootConfirmation:
'Ravno boste premaknili <1>{{count}} {{label}}</1> v korensko mapo. Ste prepričani?',
moveItemToFolderConfirmation:
'Pravkar boste premaknili <1>{{title}}</1> v <2>{{toFolder}}</2>. Ste prepričani?',
moveItemToRootConfirmation:
'Pravkar boste premaknili <1>{{title}}</1> v korensko mapo. Ali ste prepričani?',
movingFromFolder: 'Premik {{title}} iz {{folderName}}',
newFolder: 'Nova mapa',
noFolder: 'Brez mape',
renameFolder: 'Preimenuj Mapo',
searchByNameInFolder: 'Iskanje po imenu v {{folderName}}',
selectFolderForItem: 'Izberite mapo za {{title}}',
},
general: {
name: 'Ime',
aboutToDelete: 'Izbrisali boste {{label}} <1>{{title}}</1>. Ste prepričani?',
aboutToDeleteCount_many: 'Izbrisali boste {{count}} {{label}}',
aboutToDeleteCount_one: 'Izbrisali boste {{count}} {{label}}',
@@ -204,6 +231,7 @@ export const slTranslations: DefaultTranslationsObject = {
confirmCopy: 'Potrdi kopiranje',
confirmDeletion: 'Potrdi brisanje',
confirmDuplication: 'Potrdi podvajanje',
confirmMove: 'Potrdi premik',
confirmReindex: 'Ponovno indeksirati vse {{collections}}?',
confirmReindexAll: 'Ponovno indeksirati vse zbirke?',
confirmReindexDescription:
@@ -260,6 +288,8 @@ export const slTranslations: DefaultTranslationsObject = {
globals: 'Globalne nastavitve',
goBack: 'Nazaj',
isEditing: 'ureja',
item: 'predmet',
items: 'predmeti',
language: 'Jezik',
lastModified: 'Zadnja sprememba',
leaveAnyway: 'Vseeno zapusti',
@@ -271,8 +301,14 @@ export const slTranslations: DefaultTranslationsObject = {
locales: 'Jeziki',
menu: 'Meni',
moreOptions: 'Več možnosti',
move: 'Premakni',
moveConfirm:
'Pravkar boste premaknili {{count}} {{label}} na <1>{{destination}}</1>. Ste prepričani?',
moveCount: 'Premakni {{count}} {{label}}',
moveDown: 'Premakni dol',
moveUp: 'Premakni gor',
moving: 'Premikanje',
movingCount: 'Premikanje {{count}} {{label}}',
newPassword: 'Novo geslo',
next: 'Naprej',
noDateSelected: 'Izbran ni noben datum',
@@ -300,6 +336,7 @@ export const slTranslations: DefaultTranslationsObject = {
reindex: 'Reindeksiraj',
reindexingAll: 'Ponovno indeksiranje vseh {{collections}}.',
remove: 'Odstrani',
rename: 'Preimenuj',
reset: 'Ponastavi',
resetPreferences: 'Ponastavi nastavitve',
resetPreferencesDescription: 'To bo ponastavilo vse vaše nastavitve na privzete vrednosti.',
@@ -310,6 +347,7 @@ export const slTranslations: DefaultTranslationsObject = {
saving: 'Shranjevanje...',
schedulePublishFor: 'Načrtujte objavo za {{naslov}}',
searchBy: 'Išči po {{label}}',
select: 'Izberi',
selectAll: 'Izberi vse {{count}} {{label}}',
selectAllRows: 'Izberi vse vrstice',
selectedCount: '{{count}} {{label}} izbranih',

View File

@@ -174,7 +174,34 @@ export const svTranslations: DefaultTranslationsObject = {
toggleBlock: 'Växla block',
uploadNewLabel: 'Ladda upp ny {{label}}',
},
folder: {
browseByFolder: 'Bläddra efter mapp',
byFolder: 'Efter mapp',
deleteFolder: 'Ta bort mapp',
folderName: 'Mappnamn',
folders: 'Mappar',
itemHasBeenMoved: '{{title}} har flyttats till {{folderName}}',
itemHasBeenMovedToRoot: '{{title}} har flyttats till rotmappen',
itemsMovedToFolder: '{{title}} flyttad till {{folderName}}',
itemsMovedToRoot: '{{titel}} flyttades till rotmappen',
moveFolder: 'Flytta mapp',
moveItemsToFolderConfirmation:
'Du är på väg att flytta <1>{{count}} {{label}}</1> till <2>{{toFolder}}</2>. Är du säker?',
moveItemsToRootConfirmation:
'Du är på väg att flytta <1>{{count}} {{label}}</1> till root-mappen. Är du säker?',
moveItemToFolderConfirmation:
'Du håller på att flytta <1>{{title}}</1> till <2>{{toFolder}}</2>. Är du säker?',
moveItemToRootConfirmation:
'Du är på väg att flytta <1>{{title}}</1> till rotmappen. Är du säker?',
movingFromFolder: 'Flyttar {{title}} från {{folderName}}',
newFolder: 'Ny mapp',
noFolder: 'Ingen mapp',
renameFolder: 'Byt namn på mapp',
searchByNameInFolder: 'Sök efter namn i {{folderName}}',
selectFolderForItem: 'Välj mapp för {{title}}',
},
general: {
name: 'Namn',
aboutToDelete: 'Du är på väg att ta bort {{label}} <1>{{title}}</1>. Är du säker?',
aboutToDeleteCount_many: 'Du är på väg att ta bort {{count}} {{label}}',
aboutToDeleteCount_one: 'Du är på väg att ta bort {{count}} {{label}}',
@@ -204,6 +231,7 @@ export const svTranslations: DefaultTranslationsObject = {
confirmCopy: 'Bekräfta kopia',
confirmDeletion: 'Bekräfta radering',
confirmDuplication: 'Bekräfta dubblering',
confirmMove: 'Bekräfta flytt',
confirmReindex: 'Omindexera alla {{collections}}?',
confirmReindexAll: 'Omindexera alla samlingar?',
confirmReindexDescription:
@@ -261,6 +289,8 @@ export const svTranslations: DefaultTranslationsObject = {
globals: 'Globala',
goBack: 'Gå tillbaka',
isEditing: 'redigerar',
item: 'artikel',
items: 'artiklar',
language: 'Språk',
lastModified: 'Senast ändrad',
leaveAnyway: 'Lämna ändå',
@@ -272,8 +302,14 @@ export const svTranslations: DefaultTranslationsObject = {
locales: 'Språk',
menu: 'Meny',
moreOptions: 'Fler alternativ',
move: 'Flytta',
moveConfirm:
'Du håller på att flytta {{count}} {{label}} till <1>{{destination}}</1>. Är du säker?',
moveCount: 'Flytta {{count}} {{label}}',
moveDown: 'Flytta ner',
moveUp: 'Flytta upp',
moving: 'Flyttar',
movingCount: 'Flyttar {{count}} {{label}}',
newPassword: 'Nytt lösenord',
next: 'Nästa',
noDateSelected: 'Inget datum valt',
@@ -301,6 +337,7 @@ export const svTranslations: DefaultTranslationsObject = {
reindex: 'Omindexera',
reindexingAll: 'Omindexerar alla {{collections}}...',
remove: 'Ta bort',
rename: 'Byt namn',
reset: 'Återställ',
resetPreferences: 'Återställ preferenser',
resetPreferencesDescription:
@@ -312,6 +349,7 @@ export const svTranslations: DefaultTranslationsObject = {
saving: 'Sparar...',
schedulePublishFor: 'Schemalägg publicering för {{title}}',
searchBy: 'Sök efter {{label}}',
select: 'Välj',
selectAll: 'Välj alla {{count}} {{label}}',
selectAllRows: 'Välj alla rader',
selectedCount: '{{count}} {{label}} har valts',

View File

@@ -171,7 +171,33 @@ export const thTranslations: DefaultTranslationsObject = {
toggleBlock: 'เปิด/ปิด Block',
uploadNewLabel: 'อัปโหลด {{label}} ใหม่',
},
folder: {
browseByFolder: 'เรียกดูตามโฟลเดอร์',
byFolder: 'ตามโฟลเดอร์',
deleteFolder: 'ลบโฟลเดอร์',
folderName: 'ชื่อโฟลเดอร์',
folders: 'โฟลเดอร์',
itemHasBeenMoved: '{{title}} ได้ถูกย้ายไปที่ {{folderName}}',
itemHasBeenMovedToRoot: '"{{title}}" ได้ถูกย้ายไปยังโฟลเดอร์ราก',
itemsMovedToFolder: '{{title}} ถูกย้ายไปยัง {{folderName}}',
itemsMovedToRoot: '{{title}} ถูกย้ายไปยังโฟลเดอร์ราก',
moveFolder: 'ย้ายโฟลเดอร์',
moveItemsToFolderConfirmation:
'คุณกำลังจะย้าย <1>{{count}} {{label}}</1> ไปยัง <2>{{toFolder}}</2> แน่ใจไหม?',
moveItemsToRootConfirmation:
'คุณกำลังจะย้าย <1>{{count}} {{label}}</1> ไปยังโฟลเดอร์ราก คุณแน่ใจหรือไม่?',
moveItemToFolderConfirmation:
'คุณกำลังจะย้าย <1>{{title}}</1> ไปยัง <2>{{toFolder}}</2> คุณแน่ใจหรือไม่?',
moveItemToRootConfirmation: 'คุณกำลังจะย้าย <1>{{title}}</1> ไปยังโฟลเดอร์ราก คุณแน่ใจหรือไม่?',
movingFromFolder: 'ย้าย {{title}} จาก {{folderName}}',
newFolder: 'โฟลเดอร์ใหม่',
noFolder: 'ไม่มีโฟลเดอร์',
renameFolder: 'เปลี่ยนชื่อโฟลเดอร์',
searchByNameInFolder: 'ค้นหาด้วยชื่อใน {{folderName}}',
selectFolderForItem: 'เลือกโฟลเดอร์สำหรับ {{title}}',
},
general: {
name: 'ชื่อ',
aboutToDelete: 'คุณกำลังจะลบ {{label}} <1>{{title}}</1> ต้องการดำเนินการต่อหรือไม่?',
aboutToDeleteCount_many: 'คุณกำลังจะลบ {{count}} {{label}}',
aboutToDeleteCount_one: 'คุณกำลังจะลบ {{count}} {{label}}',
@@ -200,6 +226,7 @@ export const thTranslations: DefaultTranslationsObject = {
confirmCopy: 'ยืนยันสำเนา',
confirmDeletion: 'ยืนยันการลบ',
confirmDuplication: 'ยืนยันการสำเนา',
confirmMove: 'ยืนยันการย้าย',
confirmReindex: 'ทำการจัดทำดัชนีใหม่ทั้งหมดใน {{collections}}?',
confirmReindexAll: 'ทำการจัดทำดัชนีใหม่ทั้งหมดในทุกคอลเลกชัน?',
confirmReindexDescription:
@@ -257,6 +284,8 @@ export const thTranslations: DefaultTranslationsObject = {
globals: 'Globals',
goBack: 'กลับไป',
isEditing: 'กำลังแก้ไข',
item: 'รายการ',
items: 'รายการ',
language: 'ภาษา',
lastModified: 'แก้ไขล่าสุดเมื่อ',
leaveAnyway: 'ออกจากหน้านี้',
@@ -268,8 +297,13 @@ export const thTranslations: DefaultTranslationsObject = {
locales: 'ภาษา',
menu: 'เมนู',
moreOptions: 'ตัวเลือกเพิ่มเติม',
move: 'ย้าย',
moveConfirm: 'คุณกำลังจะย้าย {{count}} {{label}} ไปที่ <1>{{destination}}</1> แน่ใจไหม?',
moveCount: 'ย้าย {{count}} {{label}}',
moveDown: 'ขยับขึ้น',
moveUp: 'ขยับลง',
moving: 'การย้ายที่อยู่',
movingCount: 'ย้าย {{count}} {{label}}',
newPassword: 'รหัสผ่านใหม่',
next: 'ถัดไป',
noDateSelected: 'ไม่ได้เลือกวันที่',
@@ -297,6 +331,7 @@ export const thTranslations: DefaultTranslationsObject = {
reindex: 'จัดทำดัชนีใหม่',
reindexingAll: 'กำลังทำการจัดทำดัชนีใหม่ทั้งหมดใน {{collections}}.',
remove: 'ลบ',
rename: 'เปลี่ยนชื่อ',
reset: 'รีเซ็ต',
resetPreferences: 'รีเซ็ตการตั้งค่า',
resetPreferencesDescription: 'การกระทำนี้จะรีเซ็ตการตั้งค่าทั้งหมดของคุณเป็นค่าเริ่มต้น',
@@ -307,6 +342,7 @@ export const thTranslations: DefaultTranslationsObject = {
saving: 'กำลังบันทึก...',
schedulePublishFor: 'ตั้งเวลาเผยแพร่สำหรับ {{title}}',
searchBy: 'ค้นหาด้วย {{label}}',
select: 'เลือก',
selectAll: 'เลือกทั้งหมด {{count}} {{label}}',
selectAllRows: 'เลือกทุกแถว',
selectedCount: 'เลือก {{count}} {{label}} แล้ว',

View File

@@ -176,7 +176,34 @@ export const trTranslations: DefaultTranslationsObject = {
toggleBlock: 'Bloğu aç/kapat',
uploadNewLabel: 'Karşıya {{label}} yükle',
},
folder: {
browseByFolder: 'Klasöre Göre Gözat',
byFolder: 'Klasör Bazında',
deleteFolder: 'Klasörü Sil',
folderName: 'Klasör Adı',
folders: 'Klasörler',
itemHasBeenMoved: '{{title}} {{folderName}} klasörüne taşındı.',
itemHasBeenMovedToRoot: '{{title}} kök klasöre taşındı.',
itemsMovedToFolder: "{{title}} {{folderName}}'ye taşındı.",
itemsMovedToRoot: '{{title}} kök klasörüne taşındı',
moveFolder: 'Klasörü Taşı',
moveItemsToFolderConfirmation:
"<1>{{count}} {{label}}</1>'yi <2>{{toFolder}}</2>'ye taşımayı planlıyorsunuz. Emin misiniz?",
moveItemsToRootConfirmation:
'<1>{{count}} {{label}}</1> kök klasöre taşımayı planlıyorsunuz. Emin misiniz?',
moveItemToFolderConfirmation:
'<1>{{title}}</1> ögesini <2>{{toFolder}}</2> konumuna taşımak üzeresiniz. Emin misiniz?',
moveItemToRootConfirmation:
'<1>{{title}}</1> öğesini ana klasöre taşımak üzeresiniz. Emin misiniz?',
movingFromFolder: '{{title}} öğesinin {{folderName}} klasöründen taşınması',
newFolder: 'Yeni Klasör',
noFolder: 'Klasör Yok',
renameFolder: 'Klasörü Yeniden Adlandır',
searchByNameInFolder: "{{folderName}}'da İsme Göre Ara",
selectFolderForItem: '{{title}} için klasör seçin',
},
general: {
name: 'İsim',
aboutToDelete:
'<1>{{title}}</1> {{label}} silinmek üzere. Silme işlemine devam etmek istiyor musunuz?',
aboutToDeleteCount_many: '{{count}} {{label}} silmek üzeresiniz',
@@ -207,6 +234,7 @@ export const trTranslations: DefaultTranslationsObject = {
confirmCopy: 'Kopyayı onayla',
confirmDeletion: 'Silmeyi onayla',
confirmDuplication: 'Çoğaltmayı onayla',
confirmMove: 'Hareketi onayla',
confirmReindex: 'Tüm {{collections}} yeniden dizine alınsın mı?',
confirmReindexAll: 'Tüm koleksiyonlar yeniden dizine alinsın mı?',
confirmReindexDescription:
@@ -264,6 +292,8 @@ export const trTranslations: DefaultTranslationsObject = {
globals: 'Globaller',
goBack: 'Geri dön',
isEditing: 'düzenliyor',
item: 'öğe',
items: 'öğeler',
language: 'Dil',
lastModified: 'Son değiştirme',
leaveAnyway: 'Yine de ayrıl',
@@ -275,8 +305,14 @@ export const trTranslations: DefaultTranslationsObject = {
locales: 'Diller',
menu: 'Menü',
moreOptions: 'Daha fazla seçenek',
move: 'Hareket et',
moveConfirm:
'<1>{{destination}}</1> konumuna {{count}} {{label}} taşımayı planlıyorsunuz. Emin misiniz?',
moveCount: '{{count}} {{label}} taşı',
moveDown: 'Aşağı taşı',
moveUp: 'Yukarı taşı',
moving: 'Taşınma',
movingCount: '{{count}} {{label}} taşıma',
newPassword: 'Yeni parola',
next: 'Sonraki',
noDateSelected: 'Tarih seçilmedi',
@@ -304,6 +340,7 @@ export const trTranslations: DefaultTranslationsObject = {
reindex: 'Yeniden İndeksle',
reindexingAll: 'Tüm {{collections}} yeniden dizine alınıyor.',
remove: 'Kaldır',
rename: 'Yeniden adlandır',
reset: 'Sıfırla',
resetPreferences: 'Tercihleri sıfırla',
resetPreferencesDescription:
@@ -315,6 +352,7 @@ export const trTranslations: DefaultTranslationsObject = {
saving: 'Kaydediliyor...',
schedulePublishFor: '{{title}} için yayınlama programı ayarlayın.',
searchBy: 'Şuna göre sırala: {{label}}',
select: 'Seçiniz',
selectAll: "Tüm {{count}} {{label}}'ı seçin",
selectAllRows: 'Tüm satırları seçin',
selectedCount: '{{count}} {{label}} seçildi',

View File

@@ -175,7 +175,34 @@ export const ukTranslations: DefaultTranslationsObject = {
toggleBlock: 'Перемкнути блок',
uploadNewLabel: 'Завантажити новий {{label}}',
},
folder: {
browseByFolder: 'Переглянути за папкою',
byFolder: 'За папкою',
deleteFolder: 'Видалити папку',
folderName: 'Назва папки',
folders: 'Папки',
itemHasBeenMoved: '{{title}} було переміщено до {{folderName}}',
itemHasBeenMovedToRoot: '{{title}} був переміщений до кореневої папки',
itemsMovedToFolder: '{{title}} перенесено до {{folderName}}',
itemsMovedToRoot: '{{title}} переміщено до кореневої папки',
moveFolder: 'Перемістити папку',
moveItemsToFolderConfirmation:
'Ви збираєтесь перемістити <1>{{count}} {{label}}</1> до <2>{{toFolder}}</2>. Ви впевнені?',
moveItemsToRootConfirmation:
'Ви збираєтеся перемістити <1>{{count}} {{label}}</1> до кореневої папки. Ви впевнені?',
moveItemToFolderConfirmation:
'Ви збираєтеся перемістити <1>{{title}}</1> до <2>{{toFolder}}</2>. Ви впевнені?',
moveItemToRootConfirmation:
'Ви збираєтеся перемістити <1>{{title}}</1> до кореневої папки. Ви впевнені?',
movingFromFolder: 'Переміщення {{title}} з {{folderName}}',
newFolder: 'Нова папка',
noFolder: 'Немає папки',
renameFolder: 'Перейменувати папку',
searchByNameInFolder: 'Пошук за назвою у {{folderName}}',
selectFolderForItem: 'Виберіть папку для {{title}}',
},
general: {
name: "Ім'я",
aboutToDelete: 'Ви бажаєте видалити {{label}} <1>{{title}}</1>. Ви впевнені?',
aboutToDeleteCount_many: 'Ви бажаєте видалити {{count}} {{label}}',
aboutToDeleteCount_one: 'Ви бажаєте видалити {{count}} {{label}}',
@@ -204,6 +231,7 @@ export const ukTranslations: DefaultTranslationsObject = {
confirmCopy: 'Підтвердіть копію',
confirmDeletion: 'Підтвердити видалення',
confirmDuplication: 'Підтвердити копіювання',
confirmMove: 'Підтвердити переїзд',
confirmReindex: 'Перебудувати індекс для всіх {{collections}}?',
confirmReindexAll: 'Перебудувати індекс для всіх колекцій?',
confirmReindexDescription:
@@ -260,6 +288,8 @@ export const ukTranslations: DefaultTranslationsObject = {
globals: 'Глобальні',
goBack: 'Повернутися',
isEditing: 'редагує',
item: 'предмет',
items: 'предмети',
language: 'Мова',
lastModified: 'Останні зміни',
leaveAnyway: 'Все одно вийти',
@@ -271,8 +301,14 @@ export const ukTranslations: DefaultTranslationsObject = {
locales: 'Локалі',
menu: 'Меню',
moreOptions: 'Більше варіантів',
move: 'Рухайтесь',
moveConfirm:
'Ви збираєтесь перемістити {{count}} {{label}} до <1>{{destination}}</1>. Ви впевнені?',
moveCount: 'Перемістити {{count}} {{label}}',
moveDown: 'Перемістити нижче',
moveUp: 'Перемістити вище',
moving: 'Переїзд',
movingCount: 'Переміщення {{count}} {{label}}',
newPassword: 'Новий пароль',
next: 'Наступний',
noDateSelected: 'Не вибрано жодної дати',
@@ -300,6 +336,7 @@ export const ukTranslations: DefaultTranslationsObject = {
reindex: 'Повторне індексування',
reindexingAll: 'Перебудова індексів для всіх {{collections}}.',
remove: 'Видалити',
rename: 'Перейменувати',
reset: 'Скидання',
resetPreferences: 'Скинути налаштування',
resetPreferencesDescription: 'Це скине всі ваші налаштування до значень за замовчуванням.',
@@ -310,6 +347,7 @@ export const ukTranslations: DefaultTranslationsObject = {
saving: 'Збереження...',
schedulePublishFor: 'Запланувати публікацію для {{title}}',
searchBy: 'Шукати по {{label}}',
select: 'Вибрати',
selectAll: 'Вибрати всі {{count}} {{label}}',
selectAllRows: 'Обрати всі рядки',
selectedCount: 'Обрано {{count}} {{label}}',

View File

@@ -174,7 +174,34 @@ export const viTranslations: DefaultTranslationsObject = {
toggleBlock: 'Bật/tắt block',
uploadNewLabel: 'Tải lên bản mới: {{label}}',
},
folder: {
browseByFolder: 'Duyệt theo Thư mục',
byFolder: 'Theo Thư mục',
deleteFolder: 'Xóa Thư mục',
folderName: 'Tên thư mục',
folders: 'Thư mục',
itemHasBeenMoved: '{{title}} đã được chuyển đến {{folderName}}',
itemHasBeenMovedToRoot: '{{title}} đã được chuyển đến thư mục gốc',
itemsMovedToFolder: '{{title}} đã được di chuyển vào {{folderName}}',
itemsMovedToRoot: '{{title}} đã được di chuyển vào thư mục gốc',
moveFolder: 'Di chuyển thư mục',
moveItemsToFolderConfirmation:
'Bạn sắp chuyển <1>{{count}} {{label}}</1> tới <2>{{toFolder}}</2>. Bạn có chắc chắn không?',
moveItemsToRootConfirmation:
'Bạn đang chuẩn bị di chuyển <1>{{count}} {{label}}</1> đến thư mục gốc. Bạn có chắc không?',
moveItemToFolderConfirmation:
'Bạn sắp chuyển <1>{{title}}</1> đến <2>{{toFolder}}</2>. Bạn có chắc không?',
moveItemToRootConfirmation:
'Bạn đang chuẩn bị di chuyển <1>{{title}}</1> đến thư mục gốc. Bạn có chắc chắn không?',
movingFromFolder: 'Di chuyển {{title}} từ {{folderName}}',
newFolder: 'Thư mục mới',
noFolder: 'Không có Thư mục',
renameFolder: 'Đổi tên thư mục',
searchByNameInFolder: 'Tìm kiếm theo Tên trong {{folderName}}',
selectFolderForItem: 'Chọn thư mục cho {{title}}',
},
general: {
name: 'Tên',
aboutToDelete: 'Chuẩn bị xóa {{label}} <1>{{title}}</1>. Bạn có muốn tiếp tục không?',
aboutToDeleteCount_many: 'Bạn sắp xóa {{count}} {{label}}',
aboutToDeleteCount_one: 'Bạn sắp xóa {{count}} {{label}}',
@@ -203,6 +230,7 @@ export const viTranslations: DefaultTranslationsObject = {
confirmCopy: 'Xác nhận bản sao',
confirmDeletion: 'Xác nhận xóa',
confirmDuplication: 'Xác nhận tạo bản sao',
confirmMove: 'Xác nhận di chuyển',
confirmReindex: 'Tái lập chỉ mục tất cả {{collections}}?',
confirmReindexAll: 'Tái lập chỉ mục tất cả các bộ sưu tập?',
confirmReindexDescription:
@@ -260,6 +288,8 @@ export const viTranslations: DefaultTranslationsObject = {
globals: 'Toàn thể (globals)',
goBack: 'Quay lại',
isEditing: 'đang chỉnh sửa',
item: 'mặt hàng',
items: 'mặt hàng',
language: 'Ngôn ngữ',
lastModified: 'Chỉnh sửa lần cuối vào lúc',
leaveAnyway: 'Tiếp tục thoát',
@@ -271,8 +301,14 @@ export const viTranslations: DefaultTranslationsObject = {
locales: 'Khu vực',
menu: 'Thực đơn',
moreOptions: 'Nhiều lựa chọn hơn',
move: 'Di chuyển',
moveConfirm:
'Bạn sắp chuyển {{count}} {{label}} đến <1>{{destination}}</1>. Bạn có chắc chắn không?',
moveCount: 'Di chuyển {{count}} {{label}}',
moveDown: 'Di chuyển xuống',
moveUp: 'Di chuyển lên',
moving: 'Di chuyển',
movingCount: 'Di chuyển {{count}} {{label}}',
newPassword: 'Mật khảu mới',
next: 'Tiếp theo',
noDateSelected: 'Không có ngày nào được chọn',
@@ -300,6 +336,7 @@ export const viTranslations: DefaultTranslationsObject = {
reindex: 'Tái lập chỉ mục',
reindexingAll: 'Đang tái lập chỉ mục tất cả {{collections}}.',
remove: 'Loại bỏ',
rename: 'Đổi tên',
reset: 'Đặt lại',
resetPreferences: 'Đặt lại sở thích',
resetPreferencesDescription: 'Điều này sẽ đặt lại tất cả sở thích của bạn về cài đặt mặc định.',
@@ -310,6 +347,7 @@ export const viTranslations: DefaultTranslationsObject = {
saving: 'Đang lưu...',
schedulePublishFor: 'Lên lịch xuất bản cho {{title}}',
searchBy: 'Tìm với {{label}}',
select: 'Chọn',
selectAll: 'Chọn tất cả {{count}} {{label}}',
selectAllRows: 'Chọn tất cả các hàng',
selectedCount: 'Đã chọn {{count}} {{label}}',

View File

@@ -168,7 +168,31 @@ export const zhTranslations: DefaultTranslationsObject = {
toggleBlock: '切换块',
uploadNewLabel: '上传新的{{label}}',
},
folder: {
browseByFolder: '按文件夹浏览',
byFolder: '按文件夹',
deleteFolder: '删除文件夹',
folderName: '文件夹名称',
folders: '文件夹',
itemHasBeenMoved: '{{title}}已被移至{{folderName}}',
itemHasBeenMovedToRoot: '{{title}}已被移至根文件夹',
itemsMovedToFolder: '{{title}}已移至{{folderName}}',
itemsMovedToRoot: '{{title}}已移至根文件夹',
moveFolder: '移动文件夹',
moveItemsToFolderConfirmation:
'您即将将<1>{{count}} {{label}}</1>移动到<2>{{toFolder}}</2>.您确定吗?',
moveItemsToRootConfirmation: '您即将将<1>{{count}} {{label}}</1>移动到根文件夹。您确定吗?',
moveItemToFolderConfirmation: '您即将把<1>{{title}}</1>移动至<2>{{toFolder}}</2>。您确定吗?',
moveItemToRootConfirmation: '您即将把<1>{{title}}</1>移动到根文件夹。你确定吗?',
movingFromFolder: '将{{title}}从{{folderName}}移动',
newFolder: '新文件夹',
noFolder: '没有文件夹',
renameFolder: '重命名文件夹',
searchByNameInFolder: '在{{folderName}}中按名称搜索',
selectFolderForItem: '选择文件夹用于{{title}}',
},
general: {
name: '名称',
aboutToDelete: '您即将删除{{label}} <1>{{title}}</1>。您确定要继续吗?',
aboutToDeleteCount_many: '您即将删除 {{count}} {{label}}',
aboutToDeleteCount_one: '您即将删除 {{count}} {{label}}',
@@ -197,6 +221,7 @@ export const zhTranslations: DefaultTranslationsObject = {
confirmCopy: '确认复制',
confirmDeletion: '确认删除',
confirmDuplication: '确认重复',
confirmMove: '确认移动',
confirmReindex: '重新索引所有{{collections}}?',
confirmReindexAll: '重新索引所有集合?',
confirmReindexDescription: '此操作将删除现有索引,并重新索引{{collections}}集合中的文档。',
@@ -251,6 +276,8 @@ export const zhTranslations: DefaultTranslationsObject = {
globals: '全局',
goBack: '返回',
isEditing: '正在编辑',
item: '项目',
items: '项目',
language: '语言',
lastModified: '最后修改',
leaveAnyway: '无论如何都要离开',
@@ -262,8 +289,13 @@ export const zhTranslations: DefaultTranslationsObject = {
locales: '语言环境',
menu: '菜单',
moreOptions: '更多选项',
move: '移动',
moveConfirm: '您即将把{{count}}个{{label}}移动到<1>{{destination}}</1>。您确定吗?',
moveCount: '移动 {{count}} {{label}}',
moveDown: '向下移动',
moveUp: '向上移动',
moving: '移动',
movingCount: '移动 {{count}} {{label}}',
newPassword: '新密码',
next: '下一个',
noDateSelected: '未选择日期',
@@ -290,6 +322,7 @@ export const zhTranslations: DefaultTranslationsObject = {
reindex: '重新索引',
reindexingAll: '正在重新索引所有{{collections}}。',
remove: '移除',
rename: '重命名',
reset: '重置',
resetPreferences: '重置偏好设置',
resetPreferencesDescription: '这将把您的所有偏好设置恢复为默认值。',
@@ -300,6 +333,7 @@ export const zhTranslations: DefaultTranslationsObject = {
saving: '保存中...',
schedulePublishFor: '为{{title}}安排发布时间',
searchBy: '搜索{{label}}',
select: '选择',
selectAll: '选择所有 {{count}} {{label}}',
selectAllRows: '选择所有行',
selectedCount: '已选择 {{count}} {{label}}',

View File

@@ -168,7 +168,31 @@ export const zhTwTranslations: DefaultTranslationsObject = {
toggleBlock: '切換區塊',
uploadNewLabel: '上傳新的{{label}}',
},
folder: {
browseByFolder: '按資料夾瀏覽',
byFolder: '按資料夾',
deleteFolder: '刪除資料夾',
folderName: '資料夾名稱',
folders: '資料夾',
itemHasBeenMoved: '{{title}}已被移至{{folderName}}',
itemHasBeenMovedToRoot: '{{title}}已被移至根文件夾',
itemsMovedToFolder: '{{title}} 已移至 {{folderName}}',
itemsMovedToRoot: '{{title}}已經移至根資料夾',
moveFolder: '移動資料夾',
moveItemsToFolderConfirmation:
'您即將將 <1>{{count}} {{label}}</1> 移至 <2>{{toFolder}}</2>。您確定嗎?',
moveItemsToRootConfirmation: '您即將移動<1>{{count}} {{label}}</1>至根文件夾。您確定嗎?',
moveItemToFolderConfirmation: '您即將將<1>{{title}}</1>移至<2>{{toFolder}}</2>。您確定嗎?',
moveItemToRootConfirmation: '您即將把<1>{{title}}</1>移至根目錄。您確定嗎?',
movingFromFolder: '將 {{title}} 從 {{folderName}} 移出',
newFolder: '新資料夾',
noFolder: '沒有資料夾',
renameFolder: '重命名資料夾',
searchByNameInFolder: '在{{folderName}}中按名稱搜尋',
selectFolderForItem: '選擇{{title}}的資料夾',
},
general: {
name: '名稱',
aboutToDelete: '您即將刪除{{label}} <1>{{title}}</1>。您確定要繼續嗎?',
aboutToDeleteCount_many: '您即將刪除 {{count}} 個 {{label}}',
aboutToDeleteCount_one: '您即將刪除 {{count}} 個 {{label}}',
@@ -197,6 +221,7 @@ export const zhTwTranslations: DefaultTranslationsObject = {
confirmCopy: '確認副本',
confirmDeletion: '確認刪除',
confirmDuplication: '確認複製',
confirmMove: '確認移動',
confirmReindex: '重新索引所有{{collections}}?',
confirmReindexAll: '重新索引所有集合?',
confirmReindexDescription: '此操作將刪除現有索引並重新索引{{collections}}集合中的文件。',
@@ -251,6 +276,8 @@ export const zhTwTranslations: DefaultTranslationsObject = {
globals: '全域',
goBack: '返回',
isEditing: '正在編輯',
item: '物品',
items: '項目',
language: '語言',
lastModified: '最後修改',
leaveAnyway: '無論如何都要離開',
@@ -262,8 +289,13 @@ export const zhTwTranslations: DefaultTranslationsObject = {
locales: '語言環境',
menu: '菜單',
moreOptions: '更多選項',
move: '移動',
moveConfirm: '您即將移動 {{count}} {{label}} 到 <1>{{destination}}</1>。您確定嗎?',
moveCount: '移動 {{count}} {{label}}',
moveDown: '向下移動',
moveUp: '向上移動',
moving: '移動',
movingCount: '移動 {{count}} {{label}}',
newPassword: '新密碼',
next: '下一個',
noDateSelected: '未選擇日期',
@@ -290,6 +322,7 @@ export const zhTwTranslations: DefaultTranslationsObject = {
reindex: '重新索引',
reindexingAll: '正在重新索引所有{{collections}}。',
remove: '移除',
rename: '重新命名',
reset: '重設',
resetPreferences: '重設偏好設定',
resetPreferencesDescription: '這將把您的所有偏好設定恢復為預設值。',
@@ -300,6 +333,7 @@ export const zhTwTranslations: DefaultTranslationsObject = {
saving: '儲存中...',
schedulePublishFor: '為{{title}}設定發佈時間',
searchBy: '搜尋{{label}}',
select: '選擇',
selectAll: '選擇所有 {{count}} 個 {{label}}',
selectAllRows: '選擇所有行',
selectedCount: '已選擇 {{count}} 個 {{label}}',

View File

@@ -1,3 +1,6 @@
{
"extends": "../../tsconfig.base.json",
"include": [
"./src/**/*.ts",
],
}

View File

@@ -119,6 +119,7 @@
"@date-fns/tz": "1.2.0",
"@dnd-kit/core": "6.0.8",
"@dnd-kit/sortable": "7.0.2",
"@dnd-kit/utilities": "3.2.2",
"@faceless-ui/modal": "3.0.0-beta.2",
"@faceless-ui/scroll-info": "2.0.0",
"@faceless-ui/window-info": "3.0.1",

View File

@@ -27,7 +27,7 @@ export function ActionsBar({ collectionConfig }: Props) {
<div className={`${baseClass}__navigation`}>
<p className={`${baseClass}__locationText`}>
<strong>{activeIndex + 1}</strong>
{' of '}
{` ${t('general:of')} `}
<strong>{forms.length}</strong>
</p>

View File

@@ -26,7 +26,7 @@ export function AddFilesView({ acceptMimeTypes, onCancel, onDrop }: Props) {
<div className={`${baseClass}__dropArea`}>
<Dropzone multipleFiles onChange={onDrop}>
<Button
buttonStyle="pill"
buttonStyle="subtle"
iconPosition="left"
onClick={() => {
if (inputRef.current) {

View File

@@ -19,6 +19,7 @@ import { useServerFunctions } from '../../../providers/ServerFunctions/index.js'
import { abortAndIgnore, handleAbortRef } from '../../../utilities/abortAndIgnore.js'
import { useDocumentDrawerContext } from '../../DocumentDrawer/Provider.js'
import { DocumentFields } from '../../DocumentFields/index.js'
import { MoveDocToFolder } from '../../FolderView/MoveDocToFolder/index.js'
import { Upload_v4 } from '../../Upload/index.js'
import { useFormsManager } from '../FormsManager/index.js'
import { BulkUploadProvider } from '../index.js'
@@ -54,6 +55,7 @@ export function EditForm({
const {
config: {
folders,
routes: { admin: adminRoute },
},
getEntityConfig,
@@ -166,6 +168,18 @@ export function EditForm({
{CustomUpload || (
<Upload_v4
collectionSlug={collectionConfig.slug}
customActions={[
folders.enabled &&
Object.keys(folders.collections).includes(collectionSlug) && (
<MoveDocToFolder
buttonProps={{
buttonStyle: 'pill',
size: 'small',
}}
key="move-doc-to-folder"
/>
),
].filter(Boolean)}
initialState={initialState}
resetUploadEdits={resetUploadEdits}
updateUploadEdits={updateUploadEdits}

View File

@@ -13,11 +13,12 @@
}
.btn {
--btn-font-weight: normal;
* {
pointer-events: none;
}
// colors
// button aesthetic styles
&--style-primary {
--color: var(--theme-elevation-0);
--bg-color: var(--theme-elevation-800);
@@ -51,7 +52,7 @@
&--style-pill {
--bg-color: var(--theme-elevation-150);
--color: var(--theme-elevation-800);
--hover-color: var(--color);
--hover-color: var(--theme-elevation-800);
--hover-bg: var(--theme-elevation-100);
&.btn--disabled {
@@ -60,6 +61,60 @@
--hover-color: var(--color);
}
}
// colors and padding are mixed on this class
&--style-icon-label,
&--style-icon-label.btn--icon-position-left,
&--style-icon-label.btn--icon-position-right {
padding: 0;
font-weight: 600;
--color: var(--theme-text);
--bg-color: transparent;
--hover-color: var(--theme-elevation-600);
&.btn--disabled {
--color: var(--theme-elevation-200);
--hover-color: var(--color);
}
.btn__content {
--btn-icon-content-gap: calc(var(--base) * 0.4);
}
}
&--style-subtle {
--color: var(--theme-text);
--bg-color: var(--theme-elevation-100);
--hover-bg: var(--theme-elevation-150);
--box-shadow: inset 0 0 0 1px var(--theme-elevation-200);
--hover-box-shadow: inset 0 0 0 1px var(--theme-elevation-250);
&.btn--disabled {
--color: var(--theme-elevation-450);
--hover-box-shadow: var(--box-shadow);
--hover-bg: var(--bg-color);
--hover-color: var(--color);
}
}
&--style-tab {
--bg-color: transparent;
--hover-bg: var(--theme-elevation-50);
--color: var(--theme-text);
--btn-font-weight: 500;
&.btn--disabled {
--btn-font-weight: 600;
--hover-box-shadow: var(--box-shadow);
--bg-color: var(--theme-elevation-100);
--hover-bg: var(--bg-color);
--hover-color: var(--color);
}
}
}
.popup--active .btn {
background-color: var(--hover-bg);
}
.btn--withPopup {
@@ -111,26 +166,48 @@
}
.btn {
border-radius: $style-radius-s;
--btn-padding-block-start: 0;
--btn-padding-inline-end: 0;
--btn-padding-block-end: 0;
--btn-padding-inline-start: 0;
--btn-icon-size: calc(var(--base) * 1.2);
--btn-icon-border-color: currentColor;
--btn-icon-padding: 0px; // This will be needed when we make icons go edge to edge instead of having built in padding in the svg code
--btn-icon-content-gap: calc(var(--base) * 0.4);
--margin-block: base(1.2);
--btn-line-height: calc(var(--base) * 1.2);
border-radius: var(--style-radius-s);
font-size: var(--base-body-size);
margin-block: base(1.2);
line-height: base(1.2);
font-family: var(--font-body);
font-weight: var(--btn-font-weight, normal);
margin-block: var(--margin-block);
line-height: var(--btn-line-height);
border: 0;
cursor: pointer;
font-weight: normal;
text-decoration: none;
transition-property: border, color, box-shadow, background;
transition-duration: 100ms;
transition-timing-function: cubic-bezier(0, 0.2, 0.2, 1);
padding: var(--btn-padding-block-start) var(--btn-padding-inline-end)
var(--btn-padding-block-end) var(--btn-padding-inline-start);
color: var(--color, inherit);
background-color: var(--bg-color, transparent);
box-shadow: var(--box-shadow, none);
.icon {
@include color-svg(var(--color, currentColor));
width: 100%;
height: 100%;
.stroke {
stroke: var(--color, currentColor);
fill: none;
}
.fill {
fill: var(--color, currentColor);
}
}
&__content {
@@ -140,14 +217,14 @@
}
&__icon {
width: base(1.2);
height: base(1.2);
width: var(--btn-icon-size);
height: var(--btn-icon-size);
display: flex;
align-items: center;
justify-content: center;
border: 1px solid;
border: 1px solid var(--btn-icon-border-color);
border-radius: 100%;
padding: base(0.1);
padding: var(--btn-icon-padding);
color: inherit;
.icon {
@@ -168,79 +245,86 @@
position: relative;
}
&--icon-style-without-border {
.btn__icon {
border: none;
&--icon {
.btn__content {
gap: var(--btn-icon-content-gap);
}
}
&--icon-style-without-border,
&--icon-style-none {
.btn__icon {
border: none;
--btn-icon-border-color: transparent;
}
&--icon-position-left {
.btn__content {
flex-direction: row-reverse;
}
}
&--size-small {
padding: 0 base(0.4);
--btn-icon-size: calc(var(--base) * 0.9);
// --btn-icon-padding: 0px; // This will be needed when we make icons go edge to edge instead of having built in padding in the svg code
--btn-icon-content-gap: calc(var(--base) * 0.2);
--btn-padding-block-start: 0;
--btn-padding-inline-end: calc(var(--base) * 0.4);
--btn-padding-inline-start: calc(var(--base) * 0.4);
--btn-padding-block-end: 0;
&.btn--icon-position-left {
padding-inline-start: base(0.1);
padding-inline-end: base(0.4);
.btn__content {
flex-direction: row-reverse;
}
--btn-padding-inline-start: calc(var(--base) * 0.3);
}
&.btn--icon-position-right {
padding-inline-start: base(0.4);
padding-inline-end: base(0.1);
--btn-padding-inline-end: calc(var(--base) * 0.3);
}
&.btn--icon-style-with-border {
// --btn-icon-padding: 0px; // This will be needed when we make icons go edge to edge instead of having built in padding in the svg code
}
}
&--size-medium {
padding: base(0.2) base(0.6);
// --btn-icon-padding: 0px;
--btn-icon-size: calc(var(--base) * 1.2);
--btn-icon-content-gap: calc(var(--base) * 0.2);
--btn-padding-block-start: calc(var(--base) * 0.2);
--btn-padding-inline-end: calc(var(--base) * 0.6);
--btn-padding-block-end: calc(var(--base) * 0.2);
--btn-padding-inline-start: calc(var(--base) * 0.6);
&.btn--icon-position-left {
padding-inline-start: base(0.4);
padding-inline-end: base(0.6);
.btn__content {
gap: base(0.2);
flex-direction: row-reverse;
}
--btn-padding-inline-start: calc(var(--base) * 0.4);
}
&.btn--icon-position-right {
padding-inline-start: base(0.6);
padding-inline-end: base(0.4);
--btn-padding-inline-end: calc(var(--base) * 0.4);
}
.btn__content {
gap: base(0.2);
}
&.btn--icon-style-with-border {
// --btn-icon-padding: 0px; // This will be needed when we make icons go edge to edge instead of having built in padding in the svg code
}
}
&--size-large {
padding: base(0.4) base(0.8);
// --btn-icon-padding: 0px;
--btn-icon-size: calc(var(--base) * 1.2);
--btn-icon-content-gap: calc(var(--base) * 0.4);
--btn-padding-block-start: calc(var(--base) * 0.4);
--btn-padding-inline-end: calc(var(--base) * 0.8);
--btn-padding-inline-start: calc(var(--base) * 0.8);
--btn-padding-block-end: calc(var(--base) * 0.4);
&.btn--icon-position-left {
padding-inline-start: base(0.6);
padding-inline-end: base(0.8);
.btn__content {
gap: base(0.4);
flex-direction: row-reverse;
}
--btn-padding-inline-start: calc(var(--base) * 0.6);
}
&.btn--icon-position-right {
padding-inline-start: base(0.8);
padding-inline-end: base(0.6);
--btn-padding-inline-end: calc(var(--base) * 0.6);
}
.btn__content {
gap: base(0.4);
}
&.btn--icon-style-with-border {
// --btn-icon-padding: 0px; // This will be needed when we make icons go edge to edge instead of having built in padding in the svg code
}
}
@@ -256,37 +340,6 @@
}
}
&--style-icon-label,
&--style-icon-label.btn--icon-position-left,
&--style-icon-label.btn--icon-position-right {
padding: 0;
font-weight: 600;
.btn__content {
gap: base(0.4);
}
}
&--style-none {
padding: 0;
}
&:focus:not(:focus-visible) {
.btn__icon {
@include color-svg(var(--theme-elevation-800));
background: var(--theme-elevation-150);
}
outline: none;
}
&:active {
.btn__icon {
@include color-svg(var(--theme-elevation-0));
background: var(--theme-elevation-700);
}
}
&:focus-visible {
outline: var(--accessibility-outline);
outline-offset: var(--accessibility-outline-offset);
@@ -295,5 +348,13 @@
&.btn--disabled {
cursor: not-allowed;
}
&--style-none {
padding: 0;
}
&--no-margin {
--margin-block: 0;
}
}
}

View File

@@ -11,8 +11,8 @@ import { SwapIcon } from '../../icons/Swap/index.js'
import { XIcon } from '../../icons/X/index.js'
import { Link } from '../Link/index.js'
import { Popup } from '../Popup/index.js'
import { Tooltip } from '../Tooltip/index.js'
import './index.scss'
import { Tooltip } from '../Tooltip/index.js'
const icons = {
chevron: ChevronIcon,
@@ -62,6 +62,7 @@ export const Button: React.FC<Props> = (props) => {
icon,
iconPosition = 'right',
iconStyle = 'without-border',
margin = true,
newTab,
onClick,
onMouseDown,
@@ -86,6 +87,7 @@ export const Button: React.FC<Props> = (props) => {
icon && iconPosition && `${baseClass}--icon-position-${iconPosition}`,
tooltip && `${baseClass}--has-tooltip`,
!SubMenuPopupContent && `${baseClass}--withoutPopup`,
!margin && `${baseClass}--no-margin`,
]
.filter(Boolean)
.join(' ')
@@ -167,7 +169,7 @@ export const Button: React.FC<Props> = (props) => {
const Tag = el // eslint-disable-line no-case-declarations
buttonElement = (
<Tag ref={ref} type="submit" {...buttonProps}>
<Tag ref={ref} {...buttonProps}>
<ButtonContents icon={icon} showTooltip={showTooltip} tooltip={tooltip}>
{children}
</ButtonContents>

View File

@@ -9,7 +9,16 @@ type secondaryAction = {
export type Props = {
'aria-label'?: string
buttonId?: string
buttonStyle?: 'error' | 'icon-label' | 'none' | 'pill' | 'primary' | 'secondary' | 'transparent'
buttonStyle?:
| 'error'
| 'icon-label'
| 'none'
| 'pill'
| 'primary'
| 'secondary'
| 'subtle'
| 'tab'
| 'transparent'
children?: React.ReactNode
className?: string
disabled?: boolean
@@ -28,6 +37,7 @@ export type Props = {
* Components now import their own `Link` directly from `next/link`.
*/
Link?: React.ElementType
margin?: boolean
newTab?: boolean
onClick?: (event: MouseEvent) => void
onMouseDown?: (event: MouseEvent) => void

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