diff --git a/docs/configuration/localization.mdx b/docs/configuration/localization.mdx index 62c3cd63dac..0c4a05ed1f7 100644 --- a/docs/configuration/localization.mdx +++ b/docs/configuration/localization.mdx @@ -167,6 +167,39 @@ All field types with a `name` property support the `localized` property—even t strategy. +## Status Localization + +Payload allows you to localize the `status` field for **draft enabled** collections and globals. This lets you manage publication status independently for each locale, ensures the admin UI always shows the status for the selected locale, and unpublish content in a single locale. + +To enable this feature, set `versions.drafts.localizeStatus` to `true` in your collection or global config: + +```ts +import type { CollectionConfig } from 'payload' + +export const Posts: CollectionConfig = { + // ... + versions: { + drafts: { + // highlight-start + localizeStatus: true, + // highlight-end + }, + }, +} +``` + +When enabled, the `status` field will be stored as an object keyed by locales: + +```ts +status: { + en: 'published', + es: 'draft', + de: 'published', +} +``` + +`localizeStatus` is disabled by default, in which case the `status` field returns a single string (`'draft'` or `'published'`) representing the latest document status across all locales. + ## Retrieving Localized Docs When retrieving documents, you can specify which locale you'd like to receive as well as which fallback locale should be diff --git a/docs/versions/drafts.mdx b/docs/versions/drafts.mdx index 8fb4a545d08..2dd5300ed3e 100644 --- a/docs/versions/drafts.mdx +++ b/docs/versions/drafts.mdx @@ -24,6 +24,7 @@ Collections and Globals both support the same options for configuring drafts. Yo | Draft Option | Description | | ----------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `autosave` | Enable `autosave` to automatically save progress while documents are edited. To enable, set to `true` or pass an object with [options](/docs/versions/autosave). | +| `localizeStatus` | Localizes the `_status` field when using [Localization](/docs/configuration/localization). Default is `false`. | | `schedulePublish` | Allow for editors to schedule publish / unpublish events in the future. [More](#scheduled-publish) | | `validate` | Set `validate` to `true` to validate draft documents when saved. Default is `false`. | diff --git a/packages/next/src/elements/DocumentHeader/Tabs/tabs/VersionsPill/index.scss b/packages/next/src/elements/DocumentHeader/Tabs/tabs/VersionsPill/index.scss index 84462ea810d..e1183b6cdfc 100644 --- a/packages/next/src/elements/DocumentHeader/Tabs/tabs/VersionsPill/index.scss +++ b/packages/next/src/elements/DocumentHeader/Tabs/tabs/VersionsPill/index.scss @@ -5,5 +5,6 @@ text-align: center; background-color: var(--theme-elevation-100); border-radius: var(--style-radius-s); + padding: 2px 4px; } } diff --git a/packages/next/src/views/Document/getVersions.ts b/packages/next/src/views/Document/getVersions.ts index 9bcda8f6450..a699ddd6a8b 100644 --- a/packages/next/src/views/Document/getVersions.ts +++ b/packages/next/src/views/Document/getVersions.ts @@ -1,4 +1,4 @@ -import { sanitizeID } from '@payloadcms/ui/shared' +import { sanitizeID, traverseForLocalizedFields } from '@payloadcms/ui/shared' import { combineQueries, extractAccessFromPermission, @@ -56,6 +56,11 @@ export const getVersions = async ({ const entityConfig = collectionConfig || globalConfig const versionsConfig = entityConfig?.versions + const hasLocalizedFields = traverseForLocalizedFields(entityConfig.fields) + const localizedDraftsEnabled = + hasDraftsEnabled(entityConfig) && + typeof payload.config.localization === 'object' && + hasLocalizedFields const shouldFetchVersions = Boolean(versionsConfig && docPermissions?.readVersions) @@ -128,26 +133,34 @@ export const getVersions = async ({ } if (hasAutosaveEnabled(collectionConfig)) { + const where: Record = { + and: [ + { + parent: { + equals: id, + }, + }, + ], + } + + if (localizedDraftsEnabled) { + where.and.push({ + snapshot: { + not_equals: true, + }, + }) + } + const mostRecentVersion = await payload.findVersions({ collection: collectionConfig.slug, depth: 0, limit: 1, + locale, select: { autosave: true, }, user, - where: combineQueries( - { - and: [ - { - parent: { - equals: id, - }, - }, - ], - }, - extractAccessFromPermission(docPermissions.readVersions), - ), + where: combineQueries(where, extractAccessFromPermission(docPermissions.readVersions)), }) if ( @@ -162,6 +175,7 @@ export const getVersions = async ({ if (publishedDoc?.updatedAt) { ;({ totalDocs: unpublishedVersionCount } = await payload.countVersions({ collection: collectionConfig.slug, + locale, user, where: combineQueries( { @@ -189,20 +203,31 @@ export const getVersions = async ({ } } + const countVersionsWhere: Record = { + and: [ + { + parent: { + equals: id, + }, + }, + ], + } + + if (localizedDraftsEnabled) { + countVersionsWhere.and.push({ + snapshot: { + not_equals: true, + }, + }) + } + ;({ totalDocs: versionCount } = await payload.countVersions({ collection: collectionConfig.slug, depth: 0, + locale, user, where: combineQueries( - { - and: [ - { - parent: { - equals: id, - }, - }, - ], - }, + countVersionsWhere, extractAccessFromPermission(docPermissions.readVersions), ), })) @@ -233,6 +258,7 @@ export const getVersions = async ({ const mostRecentVersion = await payload.findGlobalVersions({ slug: globalConfig.slug, limit: 1, + locale, select: { autosave: true, }, @@ -252,6 +278,7 @@ export const getVersions = async ({ ;({ totalDocs: unpublishedVersionCount } = await payload.countGlobalVersions({ depth: 0, global: globalConfig.slug, + locale, user, where: combineQueries( { @@ -277,7 +304,15 @@ export const getVersions = async ({ ;({ totalDocs: versionCount } = await payload.countGlobalVersions({ depth: 0, global: globalConfig.slug, + locale, user, + where: localizedDraftsEnabled + ? { + snapshot: { + not_equals: true, + }, + } + : undefined, })) } diff --git a/packages/next/src/views/Version/VersionPillLabel/VersionPillLabel.tsx b/packages/next/src/views/Version/VersionPillLabel/VersionPillLabel.tsx index 45a5cde220e..1db7905b414 100644 --- a/packages/next/src/views/Version/VersionPillLabel/VersionPillLabel.tsx +++ b/packages/next/src/views/Version/VersionPillLabel/VersionPillLabel.tsx @@ -1,5 +1,7 @@ 'use client' +import type { TypeWithVersion } from 'payload' + import { Pill, useConfig, useTranslation } from '@payloadcms/ui' import { formatDate } from '@payloadcms/ui/shared' import React from 'react' @@ -18,10 +20,7 @@ const renderPill = (label: React.ReactNode, pillStyle: Parameters[0 } export const VersionPillLabel: React.FC<{ - currentlyPublishedVersion?: { - id: number | string - updatedAt: string - } + currentlyPublishedVersion?: TypeWithVersion disableDate?: boolean doc: { @@ -31,7 +30,8 @@ export const VersionPillLabel: React.FC<{ updatedAt?: string version: { [key: string]: unknown - _status: string + _status: 'draft' | 'published' + updatedAt: string } } /** @@ -45,10 +45,7 @@ export const VersionPillLabel: React.FC<{ */ labelStyle?: 'pill' | 'text' labelSuffix?: React.ReactNode - latestDraftVersion?: { - id: number | string - updatedAt: string - } + latestDraftVersion?: TypeWithVersion }> = ({ currentlyPublishedVersion, disableDate = false, diff --git a/packages/next/src/views/Version/VersionPillLabel/getVersionLabel.ts b/packages/next/src/views/Version/VersionPillLabel/getVersionLabel.ts index 49ad84e33ea..44ed02ce886 100644 --- a/packages/next/src/views/Version/VersionPillLabel/getVersionLabel.ts +++ b/packages/next/src/views/Version/VersionPillLabel/getVersionLabel.ts @@ -1,10 +1,15 @@ import type { TFunction } from '@payloadcms/translations' -import type { Pill } from '@payloadcms/ui' + +import { type Pill, useLocale } from '@payloadcms/ui' type Args = { currentlyPublishedVersion?: { id: number | string + publishedLocale?: string updatedAt: string + version: { + updatedAt: string + } } latestDraftVersion?: { id: number | string @@ -13,7 +18,8 @@ type Args = { t: TFunction version: { id: number | string - version: { _status?: string } + publishedLocale?: string + version: { _status?: 'draft' | 'published'; updatedAt: string } } } @@ -31,32 +37,49 @@ export function getVersionLabel({ name: 'currentDraft' | 'currentlyPublished' | 'draft' | 'previouslyPublished' | 'published' pillStyle: Parameters[0]['pillStyle'] } { - const publishedNewerThanDraft = - currentlyPublishedVersion?.updatedAt > latestDraftVersion?.updatedAt + const { code: currentLocale } = useLocale() + const status = version.version._status + + if (status === 'draft') { + const publishedNewerThanDraft = + currentlyPublishedVersion?.updatedAt > latestDraftVersion?.updatedAt - if (version.version._status === 'draft') { if (publishedNewerThanDraft) { return { name: 'draft', label: t('version:draft'), pillStyle: 'light', } - } else { - return { - name: version.id === latestDraftVersion?.id ? 'currentDraft' : 'draft', - label: - version.id === latestDraftVersion?.id ? t('version:currentDraft') : t('version:draft'), - pillStyle: 'light', - } } - } else { - const isCurrentlyPublished = version.id === currentlyPublishedVersion?.id + + const isCurrentDraft = version.id === latestDraftVersion?.id + + return { + name: isCurrentDraft ? 'currentDraft' : 'draft', + label: isCurrentDraft ? t('version:currentDraft') : t('version:draft'), + pillStyle: 'light', + } + } + + const publishedInAnotherLocale = + status === 'published' && version.publishedLocale && currentLocale !== version.publishedLocale + + if (publishedInAnotherLocale) { return { - name: isCurrentlyPublished ? 'currentlyPublished' : 'previouslyPublished', - label: isCurrentlyPublished - ? t('version:currentlyPublished') - : t('version:previouslyPublished'), - pillStyle: isCurrentlyPublished ? 'success' : 'light', + name: 'currentDraft', + label: t('version:currentDraft'), + pillStyle: 'light', } } + + const isCurrentlyPublished = + currentlyPublishedVersion && version.id === currentlyPublishedVersion.id + + return { + name: isCurrentlyPublished ? 'currentlyPublished' : 'previouslyPublished', + label: isCurrentlyPublished + ? t('version:currentlyPublished') + : t('version:previouslyPublished'), + pillStyle: isCurrentlyPublished ? 'success' : 'light', + } } diff --git a/packages/next/src/views/Version/index.tsx b/packages/next/src/views/Version/index.tsx index 9bfb9ec265d..67dab04acbf 100644 --- a/packages/next/src/views/Version/index.tsx +++ b/packages/next/src/views/Version/index.tsx @@ -121,7 +121,7 @@ export async function VersionView(props: DocumentViewServerProps) { collectionSlug, depth: 0, globalSlug, - locale: 'all', + locale: req.locale, overrideAccess: false, parentID: id, req, diff --git a/packages/next/src/views/Versions/buildColumns.tsx b/packages/next/src/views/Versions/buildColumns.tsx index 8c5e27d900a..28eccead80a 100644 --- a/packages/next/src/views/Versions/buildColumns.tsx +++ b/packages/next/src/views/Versions/buildColumns.tsx @@ -28,19 +28,13 @@ export const buildVersionColumns = ({ }: { collectionConfig?: SanitizedCollectionConfig CreatedAtCellOverride?: React.ComponentType - currentlyPublishedVersion?: { - id: number | string - updatedAt: string - } + currentlyPublishedVersion?: TypeWithVersion docID?: number | string docs: PaginatedDocs>['docs'] globalConfig?: SanitizedGlobalConfig i18n: I18n isTrashed?: boolean - latestDraftVersion?: { - id: number | string - updatedAt: string - } + latestDraftVersion?: TypeWithVersion }): Column[] => { const entityConfig = collectionConfig || globalConfig diff --git a/packages/next/src/views/Versions/cells/AutosaveCell/index.tsx b/packages/next/src/views/Versions/cells/AutosaveCell/index.tsx index ee18767109c..e9486595b20 100644 --- a/packages/next/src/views/Versions/cells/AutosaveCell/index.tsx +++ b/packages/next/src/views/Versions/cells/AutosaveCell/index.tsx @@ -1,27 +1,26 @@ 'use client' +import type { TypeWithVersion } from 'payload' + import { Pill, useTranslation } from '@payloadcms/ui' import React from 'react' -import './index.scss' import { VersionPillLabel } from '../../../Version/VersionPillLabel/VersionPillLabel.js' +import './index.scss' const baseClass = 'autosave-cell' type AutosaveCellProps = { - currentlyPublishedVersion?: { - id: number | string - updatedAt: string - } - latestDraftVersion?: { - id: number | string - updatedAt: string - } + currentlyPublishedVersion?: TypeWithVersion + latestDraftVersion?: TypeWithVersion rowData: { autosave?: boolean id: number | string publishedLocale?: string + updatedAt?: string version: { - _status: string + [key: string]: unknown + _status: 'draft' | 'published' + updatedAt: string } } } diff --git a/packages/next/src/views/Versions/index.tsx b/packages/next/src/views/Versions/index.tsx index 7801e9c866d..11b3457691a 100644 --- a/packages/next/src/views/Versions/index.tsx +++ b/packages/next/src/views/Versions/index.tsx @@ -67,6 +67,7 @@ export async function VersionsView(props: DocumentViewServerProps) { depth: 0, globalSlug, limit: limitToUse, + locale: req.locale, overrideAccess: false, page: page ? parseInt(page.toString(), 10) : undefined, parentID: id, @@ -86,15 +87,25 @@ export async function VersionsView(props: DocumentViewServerProps) { collectionSlug, depth: 0, globalSlug, + locale: req.locale, overrideAccess: false, parentID: id, req, select: { id: true, updatedAt: true, + version: { + _status: true, + updatedAt: true, + }, }, status: 'published', user, + where: { + snapshot: { + not_equals: true, + }, + }, }) : Promise.resolve(null), draftsEnabled @@ -102,15 +113,25 @@ export async function VersionsView(props: DocumentViewServerProps) { collectionSlug, depth: 0, globalSlug, + locale: req.locale, overrideAccess: false, parentID: id, req, select: { id: true, updatedAt: true, + version: { + _status: true, + updatedAt: true, + }, }, status: 'draft', user, + where: { + snapshot: { + not_equals: true, + }, + }, }) : Promise.resolve(null), ]) diff --git a/packages/payload/src/versions/drafts/replaceWithDraftIfAvailable.ts b/packages/payload/src/versions/drafts/replaceWithDraftIfAvailable.ts index aa5c7974a73..68b25b91415 100644 --- a/packages/payload/src/versions/drafts/replaceWithDraftIfAvailable.ts +++ b/packages/payload/src/versions/drafts/replaceWithDraftIfAvailable.ts @@ -45,7 +45,6 @@ export const replaceWithDraftIfAvailable = async ({ if (hasLocalizeStatusEnabled(entity)) { if (locale === 'all') { - // TODO: update our drizzle logic to support this type of query queryToBuild = { and: [ { diff --git a/packages/translations/src/clientKeys.ts b/packages/translations/src/clientKeys.ts index 13711a51baa..ac92e2a4a9b 100644 --- a/packages/translations/src/clientKeys.ts +++ b/packages/translations/src/clientKeys.ts @@ -457,6 +457,7 @@ export const clientTranslationKeys = createClientTranslationKeys([ 'version:aboutToRestoreGlobal', 'version:aboutToRevertToPublished', 'version:aboutToUnpublish', + 'version:aboutToUnpublishIn', 'version:aboutToUnpublishSelection', 'version:autosave', 'version:autosavedSuccessfully', @@ -500,6 +501,7 @@ export const clientTranslationKeys = createClientTranslationKeys([ 'version:restoreThisVersion', 'version:restoring', 'version:reverting', + 'version:revertUnsuccessful', 'version:revertToPublished', 'version:saveDraft', 'version:scheduledSuccessfully', @@ -511,7 +513,10 @@ export const clientTranslationKeys = createClientTranslationKeys([ 'version:status', 'version:type', 'version:unpublish', + 'version:unpublished', + 'version:unpublishIn', 'version:unpublishing', + 'version:unpublishedSuccessfully', 'version:versionID', 'version:version', 'version:versions', diff --git a/packages/translations/src/languages/ar.ts b/packages/translations/src/languages/ar.ts index d2489b866af..f67902fea3d 100644 --- a/packages/translations/src/languages/ar.ts +++ b/packages/translations/src/languages/ar.ts @@ -535,6 +535,7 @@ export const arTranslations: DefaultTranslationsObject = { 'أنت على وشك استرجاع الاعداد العامّ {{label}} إلى الحالة التي كان عليها في {{versionDate}}.', aboutToRevertToPublished: 'أنت على وشك إعادة هذا المستند إلى حالته المنشورة. هل أنت متأكّد؟', aboutToUnpublish: 'أنت على وشك إلغاء نشر هذا المستند. هل أنت متأكّد؟', + aboutToUnpublishIn: 'أنت على وشك إلغاء نشر هذا الوثيقة في {{locale}}. هل أنت متأكد؟', aboutToUnpublishSelection: 'أنت على وشك إلغاء نشر كلّ {{label}} في التّحديد. هل أنت متأكّد؟', autosave: 'حفظ تلقائي', autosavedSuccessfully: 'تمّ الحفظ التّلقائي بنجاح.', @@ -581,6 +582,7 @@ export const arTranslations: DefaultTranslationsObject = { restoring: 'تتمّ الاستعادة...', reverting: 'يتمّ الاسترجاع...', revertToPublished: 'الرّجوع للنسخة المنشورة', + revertUnsuccessful: 'الرجوع غير ناجح. لم يتم العثور على نسخة منشورة سابقة.', saveDraft: 'حفظ المسودّة', scheduledSuccessfully: 'تم الجدولة بنجاح.', schedulePublish: 'جدول النشر', @@ -591,6 +593,9 @@ export const arTranslations: DefaultTranslationsObject = { specificVersion: 'الإصدار المحدد', status: 'الحالة', unpublish: 'الغاء النّشر', + unpublished: 'غير منشور', + unpublishedSuccessfully: 'تم الإلغاء بنجاح.', + unpublishIn: 'إلغاء النشر في {{locale}}', unpublishing: 'يتمّ الغاء النّشر...', version: 'النّسخة', versionAgo: 'منذ {{distance}}', diff --git a/packages/translations/src/languages/az.ts b/packages/translations/src/languages/az.ts index 936f0c8e3d9..8191e1c08af 100644 --- a/packages/translations/src/languages/az.ts +++ b/packages/translations/src/languages/az.ts @@ -552,6 +552,7 @@ export const azTranslations: DefaultTranslationsObject = { aboutToRevertToPublished: 'Bu sənədin dəyişikliklərini dərc edilmiş vəziyyətinə qaytarmağa hazırsınız. Əminsiniz?', aboutToUnpublish: 'Bu sənədi dərcdən çıxartmağa hazırsınız. Əminsiniz?', + aboutToUnpublishIn: 'Siz bu sənədi {{locale}} dilində yayından çıxarmaq üzərəsiniz. Əminsiniz?', aboutToUnpublishSelection: 'Seçimdə olan bütün {{label}}-i dərcdən çıxartmağa hazırsınız. Əminsiniz?', autosave: 'Avtomatik yadda saxlama', @@ -599,6 +600,7 @@ export const azTranslations: DefaultTranslationsObject = { restoring: 'Bərpa olunur...', reverting: 'Qayıdılır...', revertToPublished: 'Dərc edilmişə qayıt', + revertUnsuccessful: 'Bərpa uğursuz oldu. Əvvəlki nəşr olunmuş versiya tapılmadı.', saveDraft: 'Qaralamayı yadda saxla', scheduledSuccessfully: 'Uğurla cədvələ qoyuldu.', schedulePublish: 'Nəşr Cədvəli', @@ -609,6 +611,9 @@ export const azTranslations: DefaultTranslationsObject = { specificVersion: 'Xüsusi Versiya', status: 'Status', unpublish: 'Dərcdən çıxart', + unpublished: 'Nəşr edilməmiş', + unpublishedSuccessfully: 'Uğurla yayımlanmadı.', + unpublishIn: '{{locale}} dilində yayınlamanı ləğv et', unpublishing: 'Dərcdən çıxarılır...', version: 'Versiya', versionAgo: '{{distance}} əvvəl', diff --git a/packages/translations/src/languages/bg.ts b/packages/translations/src/languages/bg.ts index 421fd617702..d533b58b7f1 100644 --- a/packages/translations/src/languages/bg.ts +++ b/packages/translations/src/languages/bg.ts @@ -549,6 +549,8 @@ export const bgTranslations: DefaultTranslationsObject = { aboutToRevertToPublished: 'На път си да възстановиш промените на този документ до публикуваното му състояние. Сигурен ли си?', aboutToUnpublish: 'На път си да скриеш този документ. Сигурен ли си?', + aboutToUnpublishIn: + 'Предстои да премахнете публикацията на този документ в {{locale}}. Сигурни ли сте?', aboutToUnpublishSelection: 'На път си да скриеш всички избрани {{label}}. Сигурен ли си?', autosave: 'Автоматично запазване', autosavedSuccessfully: 'Успешно автоматично запазване.', @@ -595,6 +597,7 @@ export const bgTranslations: DefaultTranslationsObject = { restoring: 'Възстановяване...', reverting: 'Връщане..', revertToPublished: 'Върни се до публикуваното', + revertUnsuccessful: 'Връщане неуспешно. Не е намерена предишно публикувана версия.', saveDraft: 'Запази чернова', scheduledSuccessfully: 'Успешно насрочено.', schedulePublish: 'Планирано публикуване', @@ -605,6 +608,9 @@ export const bgTranslations: DefaultTranslationsObject = { specificVersion: 'Специфична версия', status: 'Статус', unpublish: 'Скрий', + unpublished: 'Непубликувано', + unpublishedSuccessfully: 'Успешно не е публикувано.', + unpublishIn: 'Отмяна на публикуване в {{locale}}', unpublishing: 'Скриване...', version: 'Версия', versionAgo: 'преди {{distance}}', diff --git a/packages/translations/src/languages/bnBd.ts b/packages/translations/src/languages/bnBd.ts index 9dc5a005781..bf4e1882d6d 100644 --- a/packages/translations/src/languages/bnBd.ts +++ b/packages/translations/src/languages/bnBd.ts @@ -554,6 +554,7 @@ export const bnBdTranslations: DefaultTranslationsObject = { aboutToRevertToPublished: 'আপনি এই ডকুমেন্টের পরিবর্তনগুলি তার প্রকাশিত অবস্থায় ফিরিয়ে আনতে চলেছেন। আপনি কি নিশ্চিত?', aboutToUnpublish: 'আপনি এই ডকুমেন্টটি আনপাবলিশ করতে চলেছেন। আপনি কি নিশ্চিত?', + aboutToUnpublishIn: 'আপনি এই ডকুমেন্টটি {{locale}} এ অপ্রকাশ্য করতে যাচ্ছেন। আপনি কি নিশ্চিত?', aboutToUnpublishSelection: 'আপনি নির্বাচনে সমস্ত {{label}} আনপাবলিশ করতে চলেছেন। আপনি কি নিশ্চিত?', autosave: 'স্বয়ংক্রিয় সংরক্ষণ', @@ -602,6 +603,8 @@ export const bnBdTranslations: DefaultTranslationsObject = { restoring: 'পুনরুদ্ধার করা হচ্ছে...', reverting: 'পূর্বাবস্থায় ফেরানো হচ্ছে...', revertToPublished: 'প্রকাশিত সংস্করণে ফিরে যান', + revertUnsuccessful: + 'পূর্বাবস্থায় ফেরার ব্যর্থ হয়েছে। কোনও পূর্বে প্রকাশিত সংস্করণ পাওয়া যায়নি।', saveDraft: 'খসড়া সংরক্ষণ করুন', scheduledSuccessfully: 'সফলভাবে নির্ধারিত হয়েছে।', schedulePublish: 'প্রকাশের সময়সূচী নির্ধারণ করুন', @@ -612,6 +615,9 @@ export const bnBdTranslations: DefaultTranslationsObject = { specificVersion: 'নির্দিষ্ট সংস্করণ', status: 'স্থিতি', unpublish: 'প্রকাশ বাতিল করুন', + unpublished: 'অপ্রকাশিত', + unpublishedSuccessfully: 'সফলভাবে অপ্রকাশিত করা হয়েছে।', + unpublishIn: '{{locale}} এ অপ্রকাশিত করুন', unpublishing: 'প্রকাশ বাতিল করা হচ্ছে...', version: 'সংস্করণ', versionAgo: '{{distance}} পূর্বে', diff --git a/packages/translations/src/languages/bnIn.ts b/packages/translations/src/languages/bnIn.ts index 02c8a573aff..c0336bb4fb9 100644 --- a/packages/translations/src/languages/bnIn.ts +++ b/packages/translations/src/languages/bnIn.ts @@ -553,6 +553,8 @@ export const bnInTranslations: DefaultTranslationsObject = { aboutToRevertToPublished: 'আপনি এই ডকুমেন্টের পরিবর্তনগুলি তার প্রকাশিত অবস্থায় ফিরিয়ে আনতে চলেছেন। আপনি কি নিশ্চিত?', aboutToUnpublish: 'আপনি এই ডকুমেন্টটি আনপাবলিশ করতে চলেছেন। আপনি কি নিশ্চিত?', + aboutToUnpublishIn: + 'আপনি এই দস্তাবেজটি {{locale}} থেকে প্রকাশনা বাতিল করার ব্যাপারে নিশ্চিত আছেন তো?', aboutToUnpublishSelection: 'আপনি নির্বাচনে সমস্ত {{label}} আনপাবলিশ করতে চলেছেন। আপনি কি নিশ্চিত?', autosave: 'স্বয়ংক্রিয় সংরক্ষণ', @@ -600,6 +602,7 @@ export const bnInTranslations: DefaultTranslationsObject = { restoring: 'পুনরুদ্ধার করা হচ্ছে...', reverting: 'পূর্বাবস্থায় ফেরানো হচ্ছে...', revertToPublished: 'প্রকাশিত সংস্করণে ফিরে যান', + revertUnsuccessful: 'পূর্বাবস্থায় ফেরাঁ অসফল। কোনো পূর্বে প্রকাশিত সংস্করণ পাওয়া যায়নি।', saveDraft: 'খসড়া সংরক্ষণ করুন', scheduledSuccessfully: 'সফলভাবে নির্ধারিত হয়েছে।', schedulePublish: 'প্রকাশের সময়সূচী নির্ধারণ করুন', @@ -610,6 +613,9 @@ export const bnInTranslations: DefaultTranslationsObject = { specificVersion: 'নির্দিষ্ট সংস্করণ', status: 'স্থিতি', unpublish: 'প্রকাশ বাতিল করুন', + unpublished: 'অপ্রকাশিত', + unpublishedSuccessfully: 'সফলভাবে অপ্রকাশিত হয়েছে।', + unpublishIn: '{{locale}} এ অপ্রকাশ্য করুন', unpublishing: 'প্রকাশ বাতিল করা হচ্ছে...', version: 'সংস্করণ', versionAgo: '{{distance}} পূর্বে', diff --git a/packages/translations/src/languages/ca.ts b/packages/translations/src/languages/ca.ts index 303739fd9b4..0db8b4052b2 100644 --- a/packages/translations/src/languages/ca.ts +++ b/packages/translations/src/languages/ca.ts @@ -553,6 +553,7 @@ export const caTranslations: DefaultTranslationsObject = { aboutToRevertToPublished: "Estàs a punt de revertir els canvis d'aquest document a l'estat publicat. Estàs segur?", aboutToUnpublish: 'Estàs a punt de despublicar aquest document. Estàs segur?', + aboutToUnpublishIn: "Estàs a punt de despublicar aquest document en {{locale}}. N'estàs segur?", aboutToUnpublishSelection: 'Estàs a punt de despublicar tots els {{label}} de la selecció. Estàs segur?', autosave: 'Desa automàticament', @@ -600,6 +601,7 @@ export const caTranslations: DefaultTranslationsObject = { restoring: 'Restaurant...', reverting: 'Revertint...', revertToPublished: 'Revertir a publicat', + revertUnsuccessful: "No s'ha pogut revertir. No s'ha trobat cap versió publicada anteriorment.", saveDraft: 'Desar borrador', scheduledSuccessfully: 'Programat amb èxit.', schedulePublish: 'Programar publicació', @@ -610,6 +612,9 @@ export const caTranslations: DefaultTranslationsObject = { specificVersion: 'Versió Específica', status: 'Estat', unpublish: 'Despublicar', + unpublished: 'Inèdit', + unpublishedSuccessfully: 'Despublicat amb èxit.', + unpublishIn: 'Despublica a {{locale}}', unpublishing: 'Despublicant...', version: 'Versió', versionAgo: 'fa {{distance}}', diff --git a/packages/translations/src/languages/cs.ts b/packages/translations/src/languages/cs.ts index 053a652374f..c227a9d1c9b 100644 --- a/packages/translations/src/languages/cs.ts +++ b/packages/translations/src/languages/cs.ts @@ -546,6 +546,8 @@ export const csTranslations: DefaultTranslationsObject = { aboutToRevertToPublished: 'Chystáte se vrátit změny tohoto dokumentu do jeho publikovaného stavu. Jste si jisti?', aboutToUnpublish: 'Chystáte se zrušit publikování tohoto dokumentu. Jste si jisti?', + aboutToUnpublishIn: + 'Chystáte se zrušit publikaci tohoto dokumentu v {{locale}}. Jste si jisti?', aboutToUnpublishSelection: 'Chystáte se zrušit publikování všech {{label}} ve výběru. Jsi si jistá?', autosave: 'Automatické uložení', @@ -593,6 +595,7 @@ export const csTranslations: DefaultTranslationsObject = { restoring: 'Obnovování...', reverting: 'Vracení...', revertToPublished: 'Vrátit se k publikovanému', + revertUnsuccessful: 'Vrácení neúspěšné. Nebyla nalezena žádná dříve publikovaná verze.', saveDraft: 'Uložit koncept', scheduledSuccessfully: 'Úspěšně naplánováno.', schedulePublish: 'Naplánovat publikaci', @@ -603,6 +606,9 @@ export const csTranslations: DefaultTranslationsObject = { specificVersion: 'Specifická verze', status: 'Stav', unpublish: 'Zrušit publikování', + unpublished: 'Nezveřejněno', + unpublishedSuccessfully: 'Úspěšně nepublikováno.', + unpublishIn: 'Zrušit publikování v {{locale}}', unpublishing: 'Zrušuji publikování...', version: 'Verze', versionAgo: 'před {{distance}}', diff --git a/packages/translations/src/languages/da.ts b/packages/translations/src/languages/da.ts index c43201590a7..4b9e71f2227 100644 --- a/packages/translations/src/languages/da.ts +++ b/packages/translations/src/languages/da.ts @@ -548,6 +548,7 @@ export const daTranslations: DefaultTranslationsObject = { aboutToRevertToPublished: 'Du er ved at tilbagerulle dette dokuments ændringer til dets offentliggjorte tilstand. Er du sikker?', aboutToUnpublish: 'Du er ved at afpublicere dette dokument. Er du sikker?', + aboutToUnpublishIn: 'Du er ved at afpublicere dette dokument i {{locale}}. Er du sikker?', aboutToUnpublishSelection: 'Du er ved at afpublicere alt {{label}} i denne sektion. Er du sikker?', autosave: 'Autosave', @@ -595,6 +596,7 @@ export const daTranslations: DefaultTranslationsObject = { restoring: 'Gendanner...', reverting: 'Tilbageruller...', revertToPublished: 'Tilbagerul til offentliggjort', + revertUnsuccessful: 'Gendan mislykkedes. Ingen tidligere offentliggjort version fundet.', saveDraft: 'Gem kladde', scheduledSuccessfully: 'Planlagt med succes.', schedulePublish: 'Planlæg offentliggørelse', @@ -605,6 +607,9 @@ export const daTranslations: DefaultTranslationsObject = { specificVersion: 'Specifik Version', status: 'Status', unpublish: 'Afpublicer', + unpublished: 'Upubliceret', + unpublishedSuccessfully: 'Upubliceret med succes.', + unpublishIn: 'Fjern offentliggørelse i {{locale}}', unpublishing: 'Afpublicerer...', version: 'Version', versionAgo: '{{distance}} siden', diff --git a/packages/translations/src/languages/de.ts b/packages/translations/src/languages/de.ts index 554e1e93234..36ea94d1881 100644 --- a/packages/translations/src/languages/de.ts +++ b/packages/translations/src/languages/de.ts @@ -560,6 +560,8 @@ export const deTranslations: DefaultTranslationsObject = { aboutToRevertToPublished: 'Du bist dabei, dieses Dokument auf den Stand des ersten Veröffentlichungsdatums zurückzusetzen. Bist du sicher?', aboutToUnpublish: 'Du bist dabei dieses Dokument auf Entwurf zu setzen. Bist du dir sicher?', + aboutToUnpublishIn: + 'Sie sind dabei, dieses Dokument in {{locale}} zu entpublizieren. Sind Sie sicher?', aboutToUnpublishSelection: 'Du bist dabei, die Veröffentlichung aller {{label}} in der Auswahl aufzuheben. Bist du dir sicher?', autosave: 'Automatische Speicherung', @@ -607,6 +609,8 @@ export const deTranslations: DefaultTranslationsObject = { restoring: 'Wiederherstellen...', reverting: 'Zurücksetzen...', revertToPublished: 'Auf veröffentlichte Version zurücksetzen', + revertUnsuccessful: + 'Zurücksetzen fehlgeschlagen. Keine zuvor veröffentlichte Version gefunden.', saveDraft: 'Entwurf speichern', scheduledSuccessfully: 'Erfolgreich geplant.', schedulePublish: 'Veröffentlichungsplan', @@ -617,6 +621,9 @@ export const deTranslations: DefaultTranslationsObject = { specificVersion: 'Spezifische Version', status: 'Status', unpublish: 'Veröffentlichung aufheben', + unpublished: 'Unveröffentlicht', + unpublishedSuccessfully: 'Erfolgreich unveröffentlicht.', + unpublishIn: 'Unveröffentlichen in {{locale}}', unpublishing: 'Veröffentlichung aufheben...', version: 'Version', versionAgo: 'vor {{distance}}', diff --git a/packages/translations/src/languages/en.ts b/packages/translations/src/languages/en.ts index b9de79c864a..faa6fa5ec5e 100644 --- a/packages/translations/src/languages/en.ts +++ b/packages/translations/src/languages/en.ts @@ -550,6 +550,7 @@ export const enTranslations = { aboutToRevertToPublished: "You are about to revert this document's changes to its published state. Are you sure?", aboutToUnpublish: 'You are about to unpublish this document. Are you sure?', + aboutToUnpublishIn: 'You are about to unpublish this document in {{locale}}. Are you sure?', aboutToUnpublishSelection: 'You are about to unpublish all {{label}} in the selection. Are you sure?', autosave: 'Autosave', @@ -597,6 +598,7 @@ export const enTranslations = { restoring: 'Restoring...', reverting: 'Reverting...', revertToPublished: 'Revert to published', + revertUnsuccessful: 'Revert unsuccessful. No previously published version found.', saveDraft: 'Save Draft', scheduledSuccessfully: 'Scheduled successfully.', schedulePublish: 'Schedule Publish', @@ -607,6 +609,9 @@ export const enTranslations = { specificVersion: 'Specific Version', status: 'Status', unpublish: 'Unpublish', + unpublished: 'Unpublished', + unpublishedSuccessfully: 'Unpublished successfully.', + unpublishIn: 'Unpublish in {{locale}}', unpublishing: 'Unpublishing...', version: 'Version', versionAgo: '{{distance}} ago', diff --git a/packages/translations/src/languages/es.ts b/packages/translations/src/languages/es.ts index abc3c1ed621..f5709a565fc 100644 --- a/packages/translations/src/languages/es.ts +++ b/packages/translations/src/languages/es.ts @@ -555,6 +555,7 @@ export const esTranslations: DefaultTranslationsObject = { aboutToRevertToPublished: 'Estás a punto de revertir los cambios de este documento a su estado publicado. ¿Estás seguro?', aboutToUnpublish: 'Estás a punto de despublicar este documento. ¿Estás seguro?', + aboutToUnpublishIn: 'Está a punto de despublicar este documento en {{locale}}. ¿Está seguro?', aboutToUnpublishSelection: 'Estás a punto de despublicar todos los {{label}} seleccionados. ¿Estás seguro?', autosave: 'Autoguardado', @@ -602,6 +603,8 @@ export const esTranslations: DefaultTranslationsObject = { restoring: 'Restaurando...', reverting: 'Revirtiendo...', revertToPublished: 'Revertir a la versión publicada', + revertUnsuccessful: + 'Reversión no exitosa. No se encontró ninguna versión previamente publicada.', saveDraft: 'Guardar borrador', scheduledSuccessfully: 'Programado con éxito.', schedulePublish: 'Programar publicación', @@ -612,6 +615,9 @@ export const esTranslations: DefaultTranslationsObject = { specificVersion: 'Versión Específica', status: 'Estado', unpublish: 'Despublicar', + unpublished: 'No publicado', + unpublishedSuccessfully: 'Sin publicar exitosamente.', + unpublishIn: 'Despublicar en {{locale}}', unpublishing: 'Despublicando...', version: 'Versión', versionAgo: 'hace {{distance}}', diff --git a/packages/translations/src/languages/et.ts b/packages/translations/src/languages/et.ts index bf0737190de..86946060974 100644 --- a/packages/translations/src/languages/et.ts +++ b/packages/translations/src/languages/et.ts @@ -542,6 +542,7 @@ export const etTranslations: DefaultTranslationsObject = { aboutToRevertToPublished: 'Olete taastamas selle dokumendi muudatusi avaldatud seisundisse. Olete kindel?', aboutToUnpublish: 'Olete tühistamas selle dokumendi avaldamist. Olete kindel?', + aboutToUnpublishIn: 'Te oled selle dokumenti {{locale}} avaldamas. Oled sa kindel?', aboutToUnpublishSelection: 'Olete tühistamas kõigi valitud {{label}} avaldamist. Olete kindel?', autosave: 'Automaatne salvestamine', autosavedSuccessfully: 'Automaatselt salvestatud.', @@ -588,6 +589,7 @@ export const etTranslations: DefaultTranslationsObject = { restoring: 'Taastamine...', reverting: 'Taastamine...', revertToPublished: 'Taasta avaldatud seisund', + revertUnsuccessful: 'Tagasipöördumine ebaõnnestus. Eelnevalt avaldatud versiooni ei leitud.', saveDraft: 'Salvesta mustand', scheduledSuccessfully: 'Planeeritud edukalt.', schedulePublish: 'Planeeri avaldamine', @@ -598,6 +600,9 @@ export const etTranslations: DefaultTranslationsObject = { specificVersion: 'Spetsiifiline versioon', status: 'Olek', unpublish: 'Tühista avaldamine', + unpublished: 'Avaldamata', + unpublishedSuccessfully: 'Edukalt avaldamata.', + unpublishIn: 'Tühista avaldamine {{locale}}', unpublishing: 'Avaldamise tühistamine...', version: 'Versioon', versionAgo: '{{distance}} tagasi', diff --git a/packages/translations/src/languages/fa.ts b/packages/translations/src/languages/fa.ts index 53c45e49990..aa780ffcdb3 100644 --- a/packages/translations/src/languages/fa.ts +++ b/packages/translations/src/languages/fa.ts @@ -539,6 +539,7 @@ export const faTranslations: DefaultTranslationsObject = { aboutToRevertToPublished: 'شما در حال بازگرداندن این صفحه به آخرین نسخه منتشر شده آن هستید. آیا مطمئن هستید؟', aboutToUnpublish: 'آیا از لغو انتشار این صفحه مطمئن هستید؟', + aboutToUnpublishIn: 'شما در حال انتشار نکردن این سند در {{locale}} هستید. آیا مطمئن هستید؟', aboutToUnpublishSelection: 'آیا از لغو انتشار {{label}} انتخاب شده مطمئن هستید؟', autosave: 'ذخیره خودکار', autosavedSuccessfully: 'با موفقیت به صورت خودکار ذخیره شد.', @@ -585,6 +586,7 @@ export const faTranslations: DefaultTranslationsObject = { restoring: 'در حال بازیابی...', reverting: 'در حال بازگردانی...', revertToPublished: 'بازگردانی به نسخه منتشر شده', + revertUnsuccessful: 'بازگشت ناموفق بود. نسخه منتشر شده قبلی یافت نشد.', saveDraft: 'ذخیره پیش‌نویس', scheduledSuccessfully: 'با موفقیت زمان‌بندی شد.', schedulePublish: 'زمان‌بندی انتشار', @@ -595,6 +597,9 @@ export const faTranslations: DefaultTranslationsObject = { specificVersion: 'نسخه مشخص', status: 'وضعیت', unpublish: 'لغو انتشار', + unpublished: 'نشر نشده', + unpublishedSuccessfully: 'با موفقیت منتشر نشد.', + unpublishIn: 'لغو انتشار در {{locale}}', unpublishing: 'در حال لغو انتشار...', version: 'نسخه', versionAgo: '{{distance}} پیش', diff --git a/packages/translations/src/languages/fr.ts b/packages/translations/src/languages/fr.ts index 2160536dc17..54a4514d844 100644 --- a/packages/translations/src/languages/fr.ts +++ b/packages/translations/src/languages/fr.ts @@ -564,6 +564,8 @@ export const frTranslations: DefaultTranslationsObject = { 'Vous êtes sur le point de rétablir les modifications apportées à ce document à la version publiée. Êtes-vous sûr ?', aboutToUnpublish: 'Vous êtes sur le point d’annuler la publication de ce document. Êtes-vous sûr ?', + aboutToUnpublishIn: + 'Vous êtes sur le point de dépublier ce document en {{locale}}. Êtes-vous sûr ?', aboutToUnpublishSelection: 'Vous êtes sur le point de dépublier tous les {{label}} de la sélection. Êtes-vous sûr ?', autosave: 'Enregistrement automatique', @@ -611,6 +613,8 @@ export const frTranslations: DefaultTranslationsObject = { restoring: 'Restauration en cours...', reverting: 'Republication en cours...', revertToPublished: 'Republier', + revertUnsuccessful: + "Annulation infructueuse. Aucune version précédemment publiée n'a été trouvée.", saveDraft: 'Enregistrer le brouillon', scheduledSuccessfully: 'Programmé avec succès.', schedulePublish: 'Programmer la publication', @@ -621,6 +625,9 @@ export const frTranslations: DefaultTranslationsObject = { specificVersion: 'Version spécifique', status: 'Statut', unpublish: 'Annuler la publication', + unpublished: 'Non publié', + unpublishedSuccessfully: 'Non publié avec succès.', + unpublishIn: 'Dépublier en {{locale}}', unpublishing: 'Annulation en cours...', version: 'Version', versionAgo: 'il y a {{distance}}', diff --git a/packages/translations/src/languages/he.ts b/packages/translations/src/languages/he.ts index 7784e14e56f..b78f19b72af 100644 --- a/packages/translations/src/languages/he.ts +++ b/packages/translations/src/languages/he.ts @@ -531,6 +531,7 @@ export const heTranslations: DefaultTranslationsObject = { 'אתה עומד לשחזר את {{label}} הגלובלי למצב שהיה בו בתאריך {{versionDate}}.', aboutToRevertToPublished: 'אתה עומד להחזיר את השינויים במסמך הזה לגרסה שפורסמה. האם אתה בטוח?', aboutToUnpublish: 'אתה עומד לבטל את הפרסום של מסמך זה. האם אתה בטוח?', + aboutToUnpublishIn: 'אתה עומד לבטל את פרסום המסמך הזה ב{{locale}}. האם אתה בטוח?', aboutToUnpublishSelection: 'אתה עומד לבטל את הפרסום של כל ה{{label}} שנבחרו. האם אתה בטוח?', autosave: 'שמירה אוטומטית', autosavedSuccessfully: 'נשמר בהצלחה.', @@ -577,6 +578,7 @@ export const heTranslations: DefaultTranslationsObject = { restoring: 'משחזר...', reverting: 'משחזר...', revertToPublished: 'שחזר לגרסה שפורסמה', + revertUnsuccessful: 'החזרה לא הצליחה. לא נמצאה גרסה שפורסמה בעבר.', saveDraft: 'שמור טיוטה', scheduledSuccessfully: 'תוזמן בהצלחה.', schedulePublish: 'לוח זמנים לפרסום', @@ -587,6 +589,9 @@ export const heTranslations: DefaultTranslationsObject = { specificVersion: 'גרסה מסוימת', status: 'סטטוס', unpublish: 'בטל פרסום', + unpublished: 'לא פורסם', + unpublishedSuccessfully: 'לא פורסם בהצלחה.', + unpublishIn: 'בטל פרסום ב-{{locale}}', unpublishing: 'מבטל פרסום...', version: 'גרסה', versionAgo: 'לפני {{distance}}', diff --git a/packages/translations/src/languages/hr.ts b/packages/translations/src/languages/hr.ts index aba77430410..f1efac554b1 100644 --- a/packages/translations/src/languages/hr.ts +++ b/packages/translations/src/languages/hr.ts @@ -546,6 +546,8 @@ export const hrTranslations: DefaultTranslationsObject = { aboutToRevertToPublished: 'Vratit ćete promjene u dokumentu u objavljeno stanje. Jeste li sigurni? ', aboutToUnpublish: 'Poništit ćete objavu ovog dokumenta. Jeste li sigurni?', + aboutToUnpublishIn: + 'Na rubu ste povlačenja objave ovog dokumenta na {{locale}}. Jeste li sigurni?', aboutToUnpublishSelection: 'Upravo ćete poništiti objavu svih {{label}} u odabiru. Jeste li sigurni?', autosave: 'Automatsko spremanje', @@ -594,6 +596,7 @@ export const hrTranslations: DefaultTranslationsObject = { restoring: 'Vraćanje...', reverting: 'Vraćanje...', revertToPublished: 'Vrati na objavljeno', + revertUnsuccessful: 'Povratak neuspješan. Nije pronađena prethodno objavljena verzija.', saveDraft: 'Sačuvaj nacrt', scheduledSuccessfully: 'Uspješno zakazano.', schedulePublish: 'Raspored objavljivanja', @@ -604,6 +607,9 @@ export const hrTranslations: DefaultTranslationsObject = { specificVersion: 'Specifična verzija', status: 'Status', unpublish: 'Poništi objavu', + unpublished: 'Neobjavljeno', + unpublishedSuccessfully: 'Uspješno nepobjavljeno.', + unpublishIn: 'Povuci objavljivanje na {{locale}}', unpublishing: 'Poništavanje objave...', version: 'Verzija', versionAgo: 'prije {{distance}}', diff --git a/packages/translations/src/languages/hu.ts b/packages/translations/src/languages/hu.ts index f7f697d583b..ea290c980c4 100644 --- a/packages/translations/src/languages/hu.ts +++ b/packages/translations/src/languages/hu.ts @@ -556,6 +556,8 @@ export const huTranslations: DefaultTranslationsObject = { aboutToRevertToPublished: 'Arra készül, hogy visszaállítsa a dokumentum módosításait a közzétett állapotába. Biztos benne?', aboutToUnpublish: 'A dokumentum közzétételének visszavonására készül. Biztos benne?', + aboutToUnpublishIn: + 'Ön hamarosan közzététel nélkül hagyja ezt a dokumentumot {{locale}}. Biztos benne?', aboutToUnpublishSelection: 'Arra készül, hogy visszavonja a kijelölésben szereplő összes {{label}} közzétételét. biztos vagy ebben?', autosave: 'Automatikus mentés', @@ -603,6 +605,7 @@ export const huTranslations: DefaultTranslationsObject = { restoring: 'Visszaállítás...', reverting: 'Visszaállítás...', revertToPublished: 'Visszatérés a közzétetthez', + revertUnsuccessful: 'Visszaállítás sikertelen. Nem található korábban közzétett verzió.', saveDraft: 'Piszkozat mentése', scheduledSuccessfully: 'Sikeresen ütemezve.', schedulePublish: 'Közzététel ütemezése', @@ -613,6 +616,9 @@ export const huTranslations: DefaultTranslationsObject = { specificVersion: 'Specifikus verzió', status: 'Állapot', unpublish: 'Közzététel visszavonása', + unpublished: 'Nem közzétett', + unpublishedSuccessfully: 'Sikeresen van visszavonva a közzététel.', + unpublishIn: 'Ne jelenjen meg a(z) {{locale}} nyelvi beállításban', unpublishing: 'Közzététel visszavonása...', version: 'Verzió', versionAgo: '{{distance}} ezelőtt', diff --git a/packages/translations/src/languages/hy.ts b/packages/translations/src/languages/hy.ts index f7e87b6b57e..10ebed2ea61 100644 --- a/packages/translations/src/languages/hy.ts +++ b/packages/translations/src/languages/hy.ts @@ -557,6 +557,8 @@ export const hyTranslations: DefaultTranslationsObject = { 'Դուք պատրաստվում եք հետ բերել այս փաստաթղթի փոփոխությունները դեպի իր հրապարակված վիճակին։ Համոզվա՞ծ եք։', aboutToUnpublish: 'Դուք պատրաստվում եք այս փաստաթուղթը բերել չհրապարակված վիճակի։ Համոզվա՞ծ եք։', + aboutToUnpublishIn: + 'Դուք պատրաստվում եք այս փաստաթուղթը {{locale}} լեզվով չհրատապել։ Համոզված եք։', aboutToUnpublishSelection: 'Դուք պատրաստվում եք ընտրության մեջ գտնվող բոլոր {{label}}-ները բերել չհրապարակված վիճակի։ Համոզվա՞ծ եք։', autosave: 'Ինքնապահպանում', @@ -604,6 +606,7 @@ export const hyTranslations: DefaultTranslationsObject = { restoring: 'Վերականգնվում է...', reverting: 'Հետ է բերվում...', revertToPublished: 'Հետ բերել հրապարակված վիճակին', + revertUnsuccessful: 'Վերացումը չհաջողվել: Նախկինում հրապարակված տարբերակներ չեն հայտնաբերվել:', saveDraft: 'Պահպանել սևագիրը', scheduledSuccessfully: 'Հաջողությամբ պլանավորված։', schedulePublish: 'Պլանավորել հրապարակումը', @@ -614,6 +617,9 @@ export const hyTranslations: DefaultTranslationsObject = { specificVersion: 'Մասնավոր Տարբերակ', status: 'Կարգավիճակ', unpublish: 'Բերել չհրապարակված վիճակի։', + unpublished: 'Չհրատարակված', + unpublishedSuccessfully: 'Չհրատարակվել է հաջողությամբ:', + unpublishIn: 'Արգելարարել {{locale}} լեզվով', unpublishing: 'Բերվում է չհրապարակված վիճակի...', version: 'Տարբերակ', versionAgo: '{{distance}} առաջ', diff --git a/packages/translations/src/languages/id.ts b/packages/translations/src/languages/id.ts index 35a913c5c41..03142ed50c7 100644 --- a/packages/translations/src/languages/id.ts +++ b/packages/translations/src/languages/id.ts @@ -550,6 +550,8 @@ export const idTranslations: DefaultTranslationsObject = { aboutToRevertToPublished: 'Anda akan mengembalikan perubahan dokumen ini ke keadaan yang dipublikasikan. Apakah Anda yakin?', aboutToUnpublish: 'Anda akan membatalkan publikasi dokumen ini. Apakah Anda yakin?', + aboutToUnpublishIn: + 'Anda akan menonaktifkan publikasi dokumen ini dalam {{locale}}. Apakah Anda yakin?', aboutToUnpublishSelection: 'Anda akan membatalkan publikasi semua {{label}} dalam pilihan. Apakah Anda yakin?', autosave: 'Simpan Otomatis', @@ -597,6 +599,8 @@ export const idTranslations: DefaultTranslationsObject = { restoring: 'Memulihkan...', reverting: 'Mengembalikan...', revertToPublished: 'Kembali ke yang dipublikasikan', + revertUnsuccessful: + 'Pengembalian gagal. Tidak ada versi yang sebelumnya dipublikasikan ditemukan.', saveDraft: 'Simpan Draf', scheduledSuccessfully: 'Berhasil dijadwalkan.', schedulePublish: 'Jadwalkan Publikasi', @@ -607,6 +611,9 @@ export const idTranslations: DefaultTranslationsObject = { specificVersion: 'Versi Spesifik', status: 'Status', unpublish: 'Batalkan Publikasi', + unpublished: 'Belum dipublikasikan', + unpublishedSuccessfully: 'Berhasil tidak diterbitkan.', + unpublishIn: 'Batalkan Publikasi dalam {{locale}}', unpublishing: 'Membatalkan publikasi...', version: 'Versi', versionAgo: '{{distance}} yang lalu', diff --git a/packages/translations/src/languages/is.ts b/packages/translations/src/languages/is.ts index 4f23d6ef316..25d45b1ba62 100644 --- a/packages/translations/src/languages/is.ts +++ b/packages/translations/src/languages/is.ts @@ -547,6 +547,7 @@ export const isTranslations: DefaultTranslationsObject = { aboutToRevertToPublished: 'Þú munt endursetja breytingar á þessari færslu í útgefna stöðu. Ertu viss?', aboutToUnpublish: 'Þú munt taka þessa færslu úr birtingu. Ertu viss?', + aboutToUnpublishIn: 'Þú ert að fara að afbirta þetta skjal í {{locale}}. Ertu viss?', aboutToUnpublishSelection: 'Þú munt taka úr birtingu allar valdar {{label}}. Ertu viss?', autosave: 'Sjálfvirk vistun', autosavedSuccessfully: 'Sjálfvirk vistun tókst.', @@ -593,6 +594,7 @@ export const isTranslations: DefaultTranslationsObject = { restoring: 'Endurheimti...', reverting: 'Sný til baka...', revertToPublished: 'Snúa til baka í útgefið', + revertUnsuccessful: 'Endurheimt ekki hægt. Engin fyrri útgáfu fannst.', saveDraft: 'Vista drög', scheduledSuccessfully: 'Áætlað.', schedulePublish: 'Áætla útgáfu', @@ -603,6 +605,9 @@ export const isTranslations: DefaultTranslationsObject = { specificVersion: 'Tiltekin útgáfa', status: 'Staða', unpublish: 'Taka úr birtingu', + unpublished: 'Óútgefið', + unpublishedSuccessfully: 'Tókst að afturkalla útgáfu.', + unpublishIn: 'Óútgefið í {{locale}}', unpublishing: 'Tek úr birtingu...', version: 'Útgáfa', versionAgo: '{{distance}} síðan', diff --git a/packages/translations/src/languages/it.ts b/packages/translations/src/languages/it.ts index 0c64f7fca2f..fec38056264 100644 --- a/packages/translations/src/languages/it.ts +++ b/packages/translations/src/languages/it.ts @@ -554,6 +554,8 @@ export const itTranslations: DefaultTranslationsObject = { aboutToRevertToPublished: 'Stai per ripristinare le modifiche di questo documento al suo stato pubblicato. Sei sicuro?', aboutToUnpublish: 'Stai per annullare la pubblicazione di questo documento. Sei sicuro?', + aboutToUnpublishIn: + 'Stai per annullare la pubblicazione di questo documento in {{locale}}. Sei sicuro?', aboutToUnpublishSelection: 'Stai per annullare la pubblicazione di tutte le {{label}} nella selezione. Sei sicuro?', autosave: 'Salvataggio automatico', @@ -601,6 +603,8 @@ export const itTranslations: DefaultTranslationsObject = { restoring: 'Ripristino...', reverting: 'Ritorno...', revertToPublished: 'Ritorna alla versione pubblicata', + revertUnsuccessful: + 'Annullamento non riuscito. Nessuna versione precedentemente pubblicata trovata.', saveDraft: 'Salva Bozza', scheduledSuccessfully: 'Programmato con successo.', schedulePublish: 'Pubblicazione Programmata', @@ -611,6 +615,9 @@ export const itTranslations: DefaultTranslationsObject = { specificVersion: 'Versione Specifica', status: 'Stato', unpublish: 'Annulla pubblicazione', + unpublished: 'Non pubblicato', + unpublishedSuccessfully: 'Pubblicazione annullata con successo.', + unpublishIn: 'Annulla pubblicazione in {{locale}}', unpublishing: 'Annullamento pubblicazione...', version: 'Versione', versionAgo: '{{distance}} fa', diff --git a/packages/translations/src/languages/ja.ts b/packages/translations/src/languages/ja.ts index b148f8beb48..bb8ec6067dd 100644 --- a/packages/translations/src/languages/ja.ts +++ b/packages/translations/src/languages/ja.ts @@ -549,6 +549,8 @@ export const jaTranslations: DefaultTranslationsObject = { aboutToRevertToPublished: 'このデータの変更を公開時の状態に戻そうとしています。よろしいですか?', aboutToUnpublish: 'このデータを非公開にしようとしています。よろしいですか?', + aboutToUnpublishIn: + 'あなたはこのドキュメントを{{locale}}で非公開にしようとしています。よろしいですか?', aboutToUnpublishSelection: '選択したすべての{{label}}の公開を取り消そうとしています。よろしいですか?', autosave: '自動保存', @@ -596,6 +598,8 @@ export const jaTranslations: DefaultTranslationsObject = { restoring: '復元しています...', reverting: '内容を戻しています...', revertToPublished: '公開時の内容に戻す', + revertUnsuccessful: + '元に戻すことはできませんでした。以前に公開されたバージョンが見つかりませんでした。', saveDraft: 'ドラフトを保存', scheduledSuccessfully: '正常にスケジュールされました。', schedulePublish: 'スケジュール公開', @@ -606,6 +610,9 @@ export const jaTranslations: DefaultTranslationsObject = { specificVersion: '特定のバージョン', status: 'ステータス', unpublish: '非公開', + unpublished: '未公開', + unpublishedSuccessfully: '正常に未公開になりました。', + unpublishIn: '{{locale}}で非公開にする', unpublishing: '非公開中...', version: 'バージョン', versionAgo: '{{distance}}前', diff --git a/packages/translations/src/languages/ko.ts b/packages/translations/src/languages/ko.ts index cf9b9182f23..e64d8080b60 100644 --- a/packages/translations/src/languages/ko.ts +++ b/packages/translations/src/languages/ko.ts @@ -543,6 +543,7 @@ export const koTranslations: DefaultTranslationsObject = { aboutToRevertToPublished: '이 문서의 변경 사항을 게시된 상태로 되돌리려고 합니다. 계속하시겠습니까?', aboutToUnpublish: '이 문서를 게시 해제하려고 합니다. 계속하시겠습니까?', + aboutToUnpublishIn: '당신은 이 문서를 {{locale}}에서 비공개하려고 합니다. 확실합니까?', aboutToUnpublishSelection: '선택한 {{label}}을(를) 게시 해제하려고 합니다. 계속하시겠습니까?', autosave: '자동 저장', autosavedSuccessfully: '자동 저장이 완료되었습니다.', @@ -589,6 +590,7 @@ export const koTranslations: DefaultTranslationsObject = { restoring: '복원 중...', reverting: '되돌리는 중...', revertToPublished: '게시된 상태로 되돌리기', + revertUnsuccessful: '되돌리기 실패. 이전에 게시된 버전을 찾을 수 없습니다.', saveDraft: '초안 저장', scheduledSuccessfully: '성공적으로 예약되었습니다.', schedulePublish: '발행 일정', @@ -599,6 +601,9 @@ export const koTranslations: DefaultTranslationsObject = { specificVersion: '특정 버전', status: '상태', unpublish: '게시 해제', + unpublished: '미발행', + unpublishedSuccessfully: '성공적으로 게시하지 않았습니다.', + unpublishIn: '{{locale}}에서 게시 취소', unpublishing: '게시 해제 중...', version: '버전', versionAgo: '{{distance}} 전', diff --git a/packages/translations/src/languages/lt.ts b/packages/translations/src/languages/lt.ts index 890dce150b7..7c73db5c488 100644 --- a/packages/translations/src/languages/lt.ts +++ b/packages/translations/src/languages/lt.ts @@ -553,6 +553,7 @@ export const ltTranslations: DefaultTranslationsObject = { aboutToRevertToPublished: 'Jūs ketinate atšaukti šio dokumento pakeitimus ir grįžti prie publikuotos versijos. Ar esate įsitikinęs?', aboutToUnpublish: 'Jūs ketinate panaikinti šio dokumento publikavimą. Ar esate tikri?', + aboutToUnpublishIn: 'Jūs ketinate nepublikuoti šio dokumento {{locale}}. Ar esate tikras?', aboutToUnpublishSelection: 'Jūs ketinate atšaukti visų {{label}} pasirinkime. Ar esate įsitikinęs?', autosave: 'Automatinis išsaugojimas', @@ -600,6 +601,7 @@ export const ltTranslations: DefaultTranslationsObject = { restoring: 'Atkuriamas...', reverting: 'Grįžtama...', revertToPublished: 'Grįžti prie publikuotojo', + revertUnsuccessful: 'Grįžtama nepavyko. Ankstesnės publikuotos versijos nerasta.', saveDraft: 'Išsaugoti juodraštį', scheduledSuccessfully: 'Sėkmingai suplanuota.', schedulePublish: 'Suplanuokite publikaciją', @@ -610,6 +612,9 @@ export const ltTranslations: DefaultTranslationsObject = { specificVersion: 'Specifinė versija', status: 'Būsena', unpublish: 'Nebepublikuoti', + unpublished: 'Nepublikuota', + unpublishedSuccessfully: 'Sėkmingai nepaskelbta.', + unpublishIn: 'Nepublikuoti {{locale}}', unpublishing: 'Nebepublikuojama...', version: 'Versija', versionAgo: 'prieš {{distance}}', diff --git a/packages/translations/src/languages/lv.ts b/packages/translations/src/languages/lv.ts index 055852339b9..3690218e00d 100644 --- a/packages/translations/src/languages/lv.ts +++ b/packages/translations/src/languages/lv.ts @@ -549,6 +549,8 @@ export const lvTranslations: DefaultTranslationsObject = { aboutToRevertToPublished: 'Jūs grasāties atsaukt šī dokumenta izmaiņas uz publicēto versiju. Vai esat pārliecināts?', aboutToUnpublish: 'Jūs grasāties atcelt šī dokumenta publicēšanu. Vai esat pārliecināts?', + aboutToUnpublishIn: + 'Jūs gatavojaties atcelt šī dokumenta publicēšanu {{locale}}. Vai esat pārliecināts?', aboutToUnpublishSelection: 'Jūs grasāties atcelt publicēšanu visiem {{label}} izvēlētajā sarakstā. Vai esat pārliecināts?', autosave: 'Automātiskā saglabāšana', @@ -596,6 +598,7 @@ export const lvTranslations: DefaultTranslationsObject = { restoring: 'Atjauno...', reverting: 'Atgriež...', revertToPublished: 'Atgriezt uz publicēto', + revertUnsuccessful: 'Atcelšana neveiksmīga. Neatradās iepriekš publicēta versija.', saveDraft: 'Saglabāt melnrakstu', scheduledSuccessfully: 'Veiksmīgi ieplānots.', schedulePublish: 'Ieplānot publicēšanu', @@ -606,6 +609,9 @@ export const lvTranslations: DefaultTranslationsObject = { specificVersion: 'Konkrētā versija', status: 'Statuss', unpublish: 'Atcelt publicēšanu', + unpublished: 'Nepublicēts', + unpublishedSuccessfully: 'Veiksmīgi nepublicēts.', + unpublishIn: 'Nepublicēt {{locale}}', unpublishing: 'Atceļ publicēšanu...', version: 'Versija', versionAgo: '{{distance}} pirms', diff --git a/packages/translations/src/languages/my.ts b/packages/translations/src/languages/my.ts index 9e3cc9ac3f2..817fac9781a 100644 --- a/packages/translations/src/languages/my.ts +++ b/packages/translations/src/languages/my.ts @@ -558,6 +558,8 @@ export const myTranslations: DefaultTranslationsObject = { aboutToRevertToPublished: 'သင်သည် အပြောင်းအလဲများကို အများဆိုင် အခြေအနေသို့ ပြန်ပြောင်းပါတော့မည်။ သေချာလား?', aboutToUnpublish: 'အများဆိုင်မှ ပြန်ဖြုတ်တော့မည်။ သေချာလား', + aboutToUnpublishIn: + 'Anda akan membatalkan penerbitan dokumen ini dalam {{locale}}. Adakah anda pasti?', aboutToUnpublishSelection: 'သင်သည် ရွေးချယ်မှုတွင် {{label}} အားလုံးကို ထုတ်ဝေတော့မည် ဖြစ်သည်။ သေချာလား?', autosave: 'အလိုအလျောက်သိမ်းဆည်းပါ။', @@ -605,6 +607,8 @@ export const myTranslations: DefaultTranslationsObject = { restoring: 'ပြန်ယူနေဆဲ...', reverting: 'ပြန်ပြောင်းနေဆဲ...', revertToPublished: 'အများဆိုင်သို့ ပြန်ပြောင်းပါ။', + revertUnsuccessful: + 'Pemulihan tidak berjaya. Tiada versi yang diterbitkan sebelum ini dijumpai.', saveDraft: 'မှုကြမ်းကို သိမ်းဆည်းမည်။', scheduledSuccessfully: 'အောင်မြင်စွာ နေ့စွဲထားသည်။', schedulePublish: 'ပြဌာန်းထုတ်ဝေချိန်း', @@ -615,6 +619,9 @@ export const myTranslations: DefaultTranslationsObject = { specificVersion: 'အထူးဗားရှင်း', status: 'အခြေအနေ', unpublish: 'ပြန်ဖြုတ်မည်။', + unpublished: 'Belum diterbitkan', + unpublishedSuccessfully: 'Berjaya tidak diterbitkan.', + unpublishIn: 'Tidak terbit dalam {{locale}}', unpublishing: 'ပြန်ဖြုတ်နေဆဲ ...', version: 'ဗားရှင်း', versionAgo: '{{distance}} ကြာပြီ', diff --git a/packages/translations/src/languages/nb.ts b/packages/translations/src/languages/nb.ts index c4b56a74823..be050100749 100644 --- a/packages/translations/src/languages/nb.ts +++ b/packages/translations/src/languages/nb.ts @@ -550,6 +550,8 @@ export const nbTranslations: DefaultTranslationsObject = { aboutToRevertToPublished: 'Du er i ferd med å tilbakestille endringene i dette dokumentet til den publiserte tilstanden. Er du sikker?', aboutToUnpublish: 'Du er i ferd med å avpublisere dette dokumentet. Er du sikker?', + aboutToUnpublishIn: + 'Du er i ferd med å avpublisere dette dokumentet i {{locale}}. Er du sikker?', aboutToUnpublishSelection: 'Du er i ferd med å oppheve publiseringen av alle {{label}} i utvalget. Er du sikker?', autosave: 'Lagre automatisk', @@ -597,6 +599,7 @@ export const nbTranslations: DefaultTranslationsObject = { restoring: 'Gjenoppretter...', reverting: 'Tilbakestiller...', revertToPublished: 'Tilbakestill til publisert', + revertUnsuccessful: 'Angre ikke vellykket. Ingen tidligere publiserte versjon funnet.', saveDraft: 'Lagre utkast', scheduledSuccessfully: 'Planlegging vellykket.', schedulePublish: 'Planlegg publisering', @@ -607,6 +610,9 @@ export const nbTranslations: DefaultTranslationsObject = { specificVersion: 'Spesifikk versjon', status: 'Status', unpublish: 'Avpubliser', + unpublished: 'Upublisert', + unpublishedSuccessfully: 'Utgitt vellykket.', + unpublishIn: 'Avpubliser på {{locale}}', unpublishing: 'Avpubliserer...', version: 'Versjon', versionAgo: '{{distance}} siden', diff --git a/packages/translations/src/languages/nl.ts b/packages/translations/src/languages/nl.ts index b5d85b8fa87..7961e956c79 100644 --- a/packages/translations/src/languages/nl.ts +++ b/packages/translations/src/languages/nl.ts @@ -558,6 +558,8 @@ export const nlTranslations: DefaultTranslationsObject = { 'U staat op het punt om de wijzigingen van dit document terug te draaien naar de gepubliceerde staat. Weet u het zeker?', aboutToUnpublish: 'U staat op het punt om de publicatie van dit document ongedaan te maken. Weet u het zeker?', + aboutToUnpublishIn: + 'U staat op het punt dit document in {{locale}} te onpubliceren. Weet u het zeker?', aboutToUnpublishSelection: 'You are about to unpublish all {{label}} in the selection. Are you sure?', autosave: 'Automatisch bewaren', @@ -605,6 +607,7 @@ export const nlTranslations: DefaultTranslationsObject = { restoring: 'Herstellen...', reverting: 'Terugdraaien...', revertToPublished: 'Terugdraaien naar gepubliceerde versie', + revertUnsuccessful: 'Herstel mislukt. Geen eerder gepubliceerde versie gevonden.', saveDraft: 'Bewaar concept', scheduledSuccessfully: 'Succesvol gepland.', schedulePublish: 'Publicatie plannen', @@ -615,6 +618,9 @@ export const nlTranslations: DefaultTranslationsObject = { specificVersion: 'Specifieke versie', status: 'Status', unpublish: 'Publicatie ongedaan maken', + unpublished: 'Ongepubliceerd', + unpublishedSuccessfully: 'Succesvol niet-gepubliceerd.', + unpublishIn: 'Onpubliceren in {{locale}}', unpublishing: 'Publicatie ongedaan maken...', version: 'Versie', versionAgo: '{{distance}} geleden', diff --git a/packages/translations/src/languages/pl.ts b/packages/translations/src/languages/pl.ts index 949402382a5..697438b9e3c 100644 --- a/packages/translations/src/languages/pl.ts +++ b/packages/translations/src/languages/pl.ts @@ -547,6 +547,7 @@ export const plTranslations: DefaultTranslationsObject = { aboutToRevertToPublished: 'Zamierzasz przywrócić zmiany w tym dokumencie do stanu opublikowanego. Jesteś pewien?', aboutToUnpublish: 'Zamierzasz cofnąć publikację tego dokumentu. Jesteś pewien?', + aboutToUnpublishIn: 'Za chwilę wycofasz publikację tego dokumentu w {{locale}}. Jesteś pewien?', aboutToUnpublishSelection: 'Zamierzasz cofnąć publikację wszystkich {{label}} w zaznaczeniu. Jesteś pewny?', autosave: 'Autozapis', @@ -594,6 +595,7 @@ export const plTranslations: DefaultTranslationsObject = { restoring: 'Przywracanie...', reverting: 'Cofanie...', revertToPublished: 'Przywróć do opublikowanego', + revertUnsuccessful: 'Cofnij nieudane. Nie znaleziono wcześniej opublikowanej wersji.', saveDraft: 'Zapisz szkic', scheduledSuccessfully: 'Zaplanowano pomyślnie.', schedulePublish: 'Zaplanuj publikację', @@ -604,6 +606,9 @@ export const plTranslations: DefaultTranslationsObject = { specificVersion: 'Konkretna Wersja', status: 'Status', unpublish: 'Cofnij publikację', + unpublished: 'Nieopublikowane', + unpublishedSuccessfully: 'Pomyślnie wycofano publikację.', + unpublishIn: 'Cofnij publikację w {{locale}}', unpublishing: 'Cofanie publikacji...', version: 'Wersja', versionAgo: '{{distance}} temu', diff --git a/packages/translations/src/languages/pt.ts b/packages/translations/src/languages/pt.ts index 283c4b08193..ede81a8db3a 100644 --- a/packages/translations/src/languages/pt.ts +++ b/packages/translations/src/languages/pt.ts @@ -551,6 +551,7 @@ export const ptTranslations: DefaultTranslationsObject = { aboutToRevertToPublished: 'Você está prestes a reverter as alterações desse documento para seu estado de publicação. Tem certeza?', aboutToUnpublish: 'Você está prestes a despublicar esse documento. Tem certeza?', + aboutToUnpublishIn: 'Está prestes a não publicar este documento em {{locale}}. Tem a certeza?', aboutToUnpublishSelection: 'Você está prestes a cancelar a publicação de todos os {{label}} na seleção. Tem certeza?', autosave: 'Salvamento automático', @@ -598,6 +599,8 @@ export const ptTranslations: DefaultTranslationsObject = { restoring: 'Restaurando...', reverting: 'Revertendo...', revertToPublished: 'Reverter para publicado', + revertUnsuccessful: + 'Reversão não bem-sucedida. Nenhuma versão publicada anteriormente encontrada.', saveDraft: 'Salvar rascunho', scheduledSuccessfully: 'Agendado com sucesso.', schedulePublish: 'Agendar Publicação', @@ -608,6 +611,9 @@ export const ptTranslations: DefaultTranslationsObject = { specificVersion: 'Versão Específica', status: 'Status', unpublish: 'Despublicar', + unpublished: 'Não publicado', + unpublishedSuccessfully: 'Não publicado com sucesso.', + unpublishIn: 'Despublicar em {{locale}}', unpublishing: 'Despublicando...', version: 'Versão', versionAgo: 'há {{distance}}', diff --git a/packages/translations/src/languages/ro.ts b/packages/translations/src/languages/ro.ts index 07a529e6dc1..8d425daeead 100644 --- a/packages/translations/src/languages/ro.ts +++ b/packages/translations/src/languages/ro.ts @@ -558,6 +558,8 @@ export const roTranslations: DefaultTranslationsObject = { aboutToRevertToPublished: 'Sunteți pe cale să readuceți modificările aduse acestui document la starea sa publicată. Sunteți sigur?', aboutToUnpublish: 'Sunteți pe cale să nepublicați acest document. Sunteți sigur?', + aboutToUnpublishIn: + 'Sunteți pe cale să anulați publicarea acestui document în {{locale}}. Sunteți sigur?', aboutToUnpublishSelection: 'Sunteți pe punctul de a nepublica toate {{label}} din selecție. Sunteți sigur?', autosave: 'Autosalvare', @@ -605,6 +607,7 @@ export const roTranslations: DefaultTranslationsObject = { restoring: 'Restaurare...', reverting: 'Revenire...', revertToPublished: 'Reveniți la publicat', + revertUnsuccessful: 'Revenire eșuată. Nu s-a găsit nicio versiune publicată anterior.', saveDraft: 'Salvați proiectul', scheduledSuccessfully: 'Programat cu succes.', schedulePublish: 'Programare Publicare', @@ -615,6 +618,9 @@ export const roTranslations: DefaultTranslationsObject = { specificVersion: 'Versiunea specifică', status: 'Status', unpublish: 'Dezpublicare', + unpublished: 'Needitat', + unpublishedSuccessfully: 'Nepublicat cu succes.', + unpublishIn: 'Anulați publicarea în {{locale}}', unpublishing: 'Dezpublicare...', version: 'Versiune', versionAgo: '{{distance}} în urmă', diff --git a/packages/translations/src/languages/rs.ts b/packages/translations/src/languages/rs.ts index d260d3c354e..12cb995bcd5 100644 --- a/packages/translations/src/languages/rs.ts +++ b/packages/translations/src/languages/rs.ts @@ -545,6 +545,7 @@ export const rsTranslations: DefaultTranslationsObject = { aboutToRestoreGlobal: 'Вратићете глобални {{label}} у стање у којем је био {{versionDate}}.', aboutToRevertToPublished: 'Вратићете промене у документу у објављено стање. Да ли сте сигурни?', aboutToUnpublish: 'Поништићете објаву овог документа. Да ли сте сигурни?', + aboutToUnpublishIn: 'На путу сте да повучете овај документ у {{locale}}. Да ли сте сигурни?', aboutToUnpublishSelection: 'Управо ћете поништити објаву свих {{label}} у одабиру. Да ли сте сигурни?', autosave: 'Аутоматско чување', @@ -592,6 +593,7 @@ export const rsTranslations: DefaultTranslationsObject = { restoring: 'Враћање...', reverting: 'Враћање...', revertToPublished: 'Врати на објављено', + revertUnsuccessful: 'Povratak nije uspeo. Nije pronađena prethodno objavljena verzija.', saveDraft: 'Сачувај нацрт', scheduledSuccessfully: 'Успешно заказано.', schedulePublish: 'Planiranje publikovanja', @@ -602,6 +604,9 @@ export const rsTranslations: DefaultTranslationsObject = { specificVersion: 'Specifična verzija', status: 'Статус', unpublish: 'Поништи објаву', + unpublished: 'Необјављено', + unpublishedSuccessfully: 'Успешно необјављено.', + unpublishIn: 'Otkaži objavljivanje na {{locale}}', unpublishing: 'Поништавање објаве...', version: 'Верзија', versionAgo: 'pre {{distance}}', diff --git a/packages/translations/src/languages/rsLatin.ts b/packages/translations/src/languages/rsLatin.ts index 45180a8fed6..73f3b180bee 100644 --- a/packages/translations/src/languages/rsLatin.ts +++ b/packages/translations/src/languages/rsLatin.ts @@ -547,6 +547,7 @@ export const rsLatinTranslations: DefaultTranslationsObject = { aboutToRevertToPublished: 'Vratićete promene u dokumentu u objavljeno stanje. Da li ste sigurni?', aboutToUnpublish: 'Poništićete objavu ovog dokumenta. Da li ste sigurni?', + aboutToUnpublishIn: 'Uskoro ćete odjaviti ovaj dokument na {{locale}}. Da li ste sigurni?', aboutToUnpublishSelection: 'Upravo ćete poništiti objavu svih {{label}} u odabiru. Da li ste sigurni?', autosave: 'Automatsko čuvanje', @@ -594,6 +595,7 @@ export const rsLatinTranslations: DefaultTranslationsObject = { restoring: 'Vraćanje...', reverting: 'Vraćanje...', revertToPublished: 'Vrati na objavljeno', + revertUnsuccessful: 'Povratak nije uspeo. Nije pronađena prethodno objavljena verzija.', saveDraft: 'Sačuvaj nacrt', scheduledSuccessfully: 'Uspešno zakazano.', schedulePublish: 'Zakaži objavljivanje', @@ -604,6 +606,9 @@ export const rsLatinTranslations: DefaultTranslationsObject = { specificVersion: 'Specifična verzija', status: 'Status', unpublish: 'Poništi objavu', + unpublished: 'Neobjavljeno', + unpublishedSuccessfully: 'Uspešno nepublikovano.', + unpublishIn: 'Poništi objavljivanje na {{locale}}', unpublishing: 'Poništavanje objave...', version: 'Verzija', versionAgo: 'pre {{distance}}', diff --git a/packages/translations/src/languages/ru.ts b/packages/translations/src/languages/ru.ts index 5abd777ad42..d657f7a628b 100644 --- a/packages/translations/src/languages/ru.ts +++ b/packages/translations/src/languages/ru.ts @@ -551,6 +551,8 @@ export const ruTranslations: DefaultTranslationsObject = { aboutToRevertToPublished: 'Вы собираетесь вернуть изменения этого документа к его опубликованному состоянию. Вы уверены?', aboutToUnpublish: 'Вы собираетесь отменить публикацию этого документа. Вы уверены?', + aboutToUnpublishIn: + 'Вы собираетесь снять с публикации этот документ на {{locale}}. Вы уверены?', aboutToUnpublishSelection: 'Вы собираетесь отменить публикацию всех выбранных {{label}}. Вы уверены?', autosave: 'Автосохранение', @@ -598,6 +600,7 @@ export const ruTranslations: DefaultTranslationsObject = { restoring: 'Восстановление...', reverting: 'Возврат...', revertToPublished: 'Вернуться к опубликованному', + revertUnsuccessful: 'Откат не удался. Ранее опубликованная версия не найдена.', saveDraft: 'Сохранить черновик', scheduledSuccessfully: 'Успешно запланировано.', schedulePublish: 'Планирование публикации', @@ -608,6 +611,9 @@ export const ruTranslations: DefaultTranslationsObject = { specificVersion: 'Конкретная версия', status: 'Статус', unpublish: 'Отменить публикацию', + unpublished: 'Неопубликованный', + unpublishedSuccessfully: 'Успешно снято с публикации.', + unpublishIn: 'Отменить публикацию на {{locale}}', unpublishing: 'Отмена публикации...', version: 'Версия', versionAgo: '{{distance}} назад', diff --git a/packages/translations/src/languages/sk.ts b/packages/translations/src/languages/sk.ts index fdccf2e07e7..ab89cd3ab24 100644 --- a/packages/translations/src/languages/sk.ts +++ b/packages/translations/src/languages/sk.ts @@ -547,6 +547,8 @@ export const skTranslations: DefaultTranslationsObject = { aboutToRevertToPublished: 'Chystáte sa vrátiť zmeny tohto dokumentu do jeho publikovaného stavu. Ste si istý?', aboutToUnpublish: 'Chystáte sa zrušiť publikovanie tohto dokumentu. Ste si istý?', + aboutToUnpublishIn: + 'Chystáte sa zrušiť publikovanie tohto dokumentu v {{locale}}. Ste si istý?', aboutToUnpublishSelection: 'Chystáte sa zrušiť publikovanie všetkých {{label}} vo výbere. Ste si istý?', autosave: 'Automatické uloženie', @@ -594,6 +596,8 @@ export const skTranslations: DefaultTranslationsObject = { restoring: 'Obnovovanie...', reverting: 'Vracanie...', revertToPublished: 'Vrátiť sa k publikovanému', + revertUnsuccessful: + 'Vrátenie neúspešné. Nebola nájdená žiadna predchádzajúca publikovaná verzia.', saveDraft: 'Uložiť návrh', scheduledSuccessfully: 'Úspešne naplánované.', schedulePublish: 'Naplánovať publikovanie', @@ -604,6 +608,9 @@ export const skTranslations: DefaultTranslationsObject = { specificVersion: 'Špecifická verzia', status: 'Stav', unpublish: 'Zrušiť publikovanie', + unpublished: 'Neuverejnené', + unpublishedSuccessfully: 'Úspešne nezverejnené.', + unpublishIn: 'Zrušiť publikovanie v {{locale}}', unpublishing: 'Zrušujem publikovanie...', version: 'Verzia', versionAgo: 'pred {{distance}}', diff --git a/packages/translations/src/languages/sl.ts b/packages/translations/src/languages/sl.ts index fcc16d389a3..160f61415de 100644 --- a/packages/translations/src/languages/sl.ts +++ b/packages/translations/src/languages/sl.ts @@ -547,6 +547,8 @@ export const slTranslations: DefaultTranslationsObject = { aboutToRevertToPublished: 'Spremembe tega dokumenta boste povrnili v objavljeno stanje. Ste prepričani?', aboutToUnpublish: 'Ta dokument boste umaknili iz objave. Ste prepričani?', + aboutToUnpublishIn: + 'Ravno boste prenehali objavljati ta dokument v {{locale}}. Ali ste prepričani?', aboutToUnpublishSelection: 'Umaknili boste iz objave vse {{label}} v izboru. Ste prepričani?', autosave: 'Samodejno shranjevanje', autosavedSuccessfully: 'Samodejno shranjeno uspešno.', @@ -593,6 +595,7 @@ export const slTranslations: DefaultTranslationsObject = { restoring: 'Obnavljanje...', reverting: 'Razveljavljanje...', revertToPublished: 'Vrni na objavljeno', + revertUnsuccessful: 'Razveljavitev ni uspela. Ni najdenih predhodno objavljenih verzij.', saveDraft: 'Shrani osnutek', scheduledSuccessfully: 'Uspešno načrtovano.', schedulePublish: 'Razporedi objavo', @@ -603,6 +606,9 @@ export const slTranslations: DefaultTranslationsObject = { specificVersion: 'Specifična različica', status: 'Status', unpublish: 'Razveljavi objavo', + unpublished: 'Neobjavljeno', + unpublishedSuccessfully: 'Uspešno nepobjavljeno.', + unpublishIn: 'Prekliči objavo v {{locale}}', unpublishing: 'Razveljavljanje objave...', version: 'Različica', versionAgo: 'pred {{distance}}', diff --git a/packages/translations/src/languages/sv.ts b/packages/translations/src/languages/sv.ts index 8ae4b398cb2..55dfc7e9fde 100644 --- a/packages/translations/src/languages/sv.ts +++ b/packages/translations/src/languages/sv.ts @@ -549,6 +549,7 @@ export const svTranslations: DefaultTranslationsObject = { aboutToRevertToPublished: 'Du kommer återställa det här dokumentets ändringar till dess publicerade tillstånd. Är du säker?', aboutToUnpublish: 'Du kommer avpublicera detta dokument. Är du säker?', + aboutToUnpublishIn: 'Du är på väg att avpublicera detta dokument på {{locale}}. Är du säker?', aboutToUnpublishSelection: 'Du är på väg att avpublicera alla {{label}} i urvalet. Är du säker?', autosave: 'Spara automatiskt', @@ -596,6 +597,7 @@ export const svTranslations: DefaultTranslationsObject = { restoring: 'Återställer...', reverting: 'Återställer...', revertToPublished: 'Återgå till publicerad', + revertUnsuccessful: 'Återställning misslyckades. Ingen tidigare publicerad version hittades.', saveDraft: 'Spara Utkast', scheduledSuccessfully: 'Schemalagd', schedulePublish: 'Schemalägg publicering', @@ -606,6 +608,9 @@ export const svTranslations: DefaultTranslationsObject = { specificVersion: 'Specifik version', status: 'Status', unpublish: 'Avpublicera', + unpublished: 'Opublicerad', + unpublishedSuccessfully: 'Publicerades inte framgångsrikt.', + unpublishIn: 'Avpublicera i {{locale}}', unpublishing: 'Avpublicerar...', version: 'Version', versionAgo: '{{distance}} sedan', diff --git a/packages/translations/src/languages/ta.ts b/packages/translations/src/languages/ta.ts index 611d15b2c02..08a529ee8ba 100644 --- a/packages/translations/src/languages/ta.ts +++ b/packages/translations/src/languages/ta.ts @@ -550,6 +550,8 @@ export const taTranslations: DefaultTranslationsObject = { aboutToRevertToPublished: 'இந்த ஆவணத்தின் மாற்றங்களை வெளியிடப்பட்ட நிலைக்கு மாற்றப்போகிறீர்கள். உறுதியா?', aboutToUnpublish: 'இந்த ஆவணத்தை வெளியிடாமல் செய்யப் போகிறீர்கள். உறுதியா?', + aboutToUnpublishIn: + 'நீங்கள் இந்த ஆவணத்தை {{locale}} இல் வெளியீட்டில் இருந்து அகற்ற உள்ளீர்கள். நீங்கள் நிச்சயமாக உள்ளீர்களா?', aboutToUnpublishSelection: 'நீங்கள் தேர்வில் உள்ள அனைத்து {{label}}-ஐ வெளியிடாமல் செய்யப் போகிறீர்கள். உறுதியா?', autosave: 'தானியங்க சேமிப்பு', @@ -597,6 +599,8 @@ export const taTranslations: DefaultTranslationsObject = { restoring: 'மீட்டமைக்கப்படுகிறது...', reverting: 'மாற்றப்படுகிறது...', revertToPublished: 'வெளியிடப்பட்ட நிலைக்கு மாற்று', + revertUnsuccessful: + 'மீளமைப்பு வெற்றிகரமாக செயல்படவில்லை. முன்புவே வெளியிடப்பட்ட பதிப்புகள் எதுவும் காணப்படவில்லை.', saveDraft: 'வரைவை சேமிக்கவும்', scheduledSuccessfully: 'அட்டவணைப்படுத்தப்பட்டது வெற்றிகரமாக.', schedulePublish: 'வெளியீட்டை அட்டவணைப்படுத்தவும்', @@ -607,6 +611,9 @@ export const taTranslations: DefaultTranslationsObject = { specificVersion: 'குறிப்பிட்ட பதிப்பு', status: 'நிலை', unpublish: 'வெளியீட்டை நீக்கு', + unpublished: 'வெளியிடப்படாதது', + unpublishedSuccessfully: 'வெளியிடப்படாமல் வெற்றிகரமாக முடிந்தது.', + unpublishIn: '{{locale}}ல் வெளியீட்டை நிறுத்து', unpublishing: 'வெளியீடு நீக்கப்படுகிறது...', version: 'பதிப்பு', versionAgo: '{{distance}} முன்பு', diff --git a/packages/translations/src/languages/th.ts b/packages/translations/src/languages/th.ts index 551746e46fc..e6b7884281c 100644 --- a/packages/translations/src/languages/th.ts +++ b/packages/translations/src/languages/th.ts @@ -537,6 +537,7 @@ export const thTranslations: DefaultTranslationsObject = { aboutToRevertToPublished: 'คุณกำลังจะย้อนการเปลี่ยนแปลงของเอกสารนี้ไปยังเวอร์ชันที่เผยแพร่อยู่ คุณต้องการดำเนินการต่อหรือไม่?', aboutToUnpublish: 'คุณกำลังจะยกเลิกเผยแพร่เอกสารนี้ คุณต้องการดำเนินการต่อหรือไม่?', + aboutToUnpublishIn: 'คุณกำลังจะยกเลิกการเผยแพร่เอกสารนี้ใน {{locale}} คุณแน่ใจไหม?', aboutToUnpublishSelection: 'คุณกำลังจะเลิกเผยแพร่ {{label}} ทั้งหมดในส่วนที่เลือก คุณแน่ใจไหม?', autosave: 'บันทึกอัตโนมัติ', autosavedSuccessfully: 'บันทึกอัตโนมัติสำเร็จ', @@ -584,6 +585,7 @@ export const thTranslations: DefaultTranslationsObject = { restoring: 'กำลังกู้คืน...', reverting: 'กำลังย้อน...', revertToPublished: 'ย้อนกลับไปเวอร์ชันที่เผยแพร่อยู่', + revertUnsuccessful: 'ย้อนกลับไม่สำเร็จ ไม่พบเวอร์ชันที่เผยแพร่ก่อนหน้านี้', saveDraft: 'บันทึกร่าง', scheduledSuccessfully: 'ได้ทำการจัดตารางเรียบร้อยแล้ว', schedulePublish: 'ตั้งเวลาเผยแพร่', @@ -594,6 +596,9 @@ export const thTranslations: DefaultTranslationsObject = { specificVersion: 'เวอร์ชันเฉพาะ', status: 'สถานะ', unpublish: 'หยุดเผยแพร่', + unpublished: 'ยังไม่ได้เผยแพร่', + unpublishedSuccessfully: 'ยกเลิกการเผยแพร่สำเร็จ', + unpublishIn: 'ยกเลิกการเผยแพร่ใน {{locale}}', unpublishing: 'กำลังหยุดการเผยแพร่...', version: 'เวอร์ชัน', versionAgo: '{{distance}} ที่แล้ว', diff --git a/packages/translations/src/languages/tr.ts b/packages/translations/src/languages/tr.ts index 7570c21a9e3..d85bf53aaaf 100644 --- a/packages/translations/src/languages/tr.ts +++ b/packages/translations/src/languages/tr.ts @@ -552,6 +552,8 @@ export const trTranslations: DefaultTranslationsObject = { aboutToRevertToPublished: 'Bu dökümanın değişikliklerini yayınladığı haline geri getirmek üzeresiniz. Devam etmek istiyor musunuz?', aboutToUnpublish: 'Bu dökümanı yayından kaldırmak üzeresiniz. Devam etmek istiyor musunuz?', + aboutToUnpublishIn: + 'Bu belgeyi {{locale}} dilinde yayından kaldırmak üzeresiniz. Emin misiniz?', aboutToUnpublishSelection: 'Seçimdeki tüm {{label}} yayınını kaldırmak üzeresiniz. Emin misin?', autosave: 'Otomatik kaydet', autosavedSuccessfully: 'Otomatik kaydetme başarılı', @@ -598,6 +600,7 @@ export const trTranslations: DefaultTranslationsObject = { restoring: 'Geri döndürülüyor...', reverting: 'Değişiklikler geri alınıyor...', revertToPublished: 'Yayınlanana geri döndür', + revertUnsuccessful: 'Geri alınamadı. Daha önce yayımlanmış bir sürüm bulunamadı.', saveDraft: 'Taslağı kaydet', scheduledSuccessfully: 'Başarıyla planlandı.', schedulePublish: 'Yayını Planla', @@ -608,6 +611,9 @@ export const trTranslations: DefaultTranslationsObject = { specificVersion: 'Belirli Sürüm', status: 'Durum', unpublish: 'Yayından Kaldır', + unpublished: 'Yayınlanmamış', + unpublishedSuccessfully: 'Başarıyla yayınlanmadı.', + unpublishIn: "{{locale}}'da yayından kaldır", unpublishing: 'Yayından kaldırılıyor...', version: 'Sürüm', versionAgo: '{{distance}} önce', diff --git a/packages/translations/src/languages/uk.ts b/packages/translations/src/languages/uk.ts index 64dd2f5dc4e..4c844431ad5 100644 --- a/packages/translations/src/languages/uk.ts +++ b/packages/translations/src/languages/uk.ts @@ -546,6 +546,7 @@ export const ukTranslations: DefaultTranslationsObject = { aboutToRevertToPublished: 'Ви бажаєте повернути зміни цього документа до його опублікованого стану. Ви впевнені?', aboutToUnpublish: 'Ви бажаєте скасувати публікацю цього документа. Ви впевнені?', + aboutToUnpublishIn: 'Ви збираєтеся зняти з публікації цей документ на {{locale}}. Ви впевнені?', aboutToUnpublishSelection: 'Ви бажаєте скасувати публікацію всіх {{label}} у вибірці. Ви впевнені?', autosave: 'Автозбереження', @@ -593,6 +594,7 @@ export const ukTranslations: DefaultTranslationsObject = { restoring: 'Відновлення...', reverting: 'Повернення до опублікованого стану...', revertToPublished: 'Повернутися до опублікованого стану', + revertUnsuccessful: 'Відкат невдалий. Раніше опублікована версія не знайдена.', saveDraft: 'Зберегти чернетку', scheduledSuccessfully: 'Успішно заплановано.', schedulePublish: 'Розклад публікації', @@ -603,6 +605,9 @@ export const ukTranslations: DefaultTranslationsObject = { specificVersion: 'Специфічна версія', status: 'Статус', unpublish: 'Скасувати публікацію', + unpublished: 'Неопубліковано', + unpublishedSuccessfully: 'Успішно знято з публікації.', + unpublishIn: 'Скасувати публікацію в {{locale}}', unpublishing: 'Скасування публікації...', version: 'Версія', versionAgo: '{{distance}} тому', diff --git a/packages/translations/src/languages/vi.ts b/packages/translations/src/languages/vi.ts index ea290073ea8..9b4646c4157 100644 --- a/packages/translations/src/languages/vi.ts +++ b/packages/translations/src/languages/vi.ts @@ -545,6 +545,8 @@ export const viTranslations: DefaultTranslationsObject = { 'Bạn chuẩn bị khôi phục lại bản toàn thể (global) của {{label}} về phiên bản {{versionDate}}.', aboutToRevertToPublished: 'Bạn có muốn tái xuất bản bản nháp này không?', aboutToUnpublish: 'Bạn có muốn ngưng xuất bản?', + aboutToUnpublishIn: + 'Bạn đang chuẩn bị hủy xuất bản tài liệu này trong {{locale}}. Bạn có chắc chắn không?', aboutToUnpublishSelection: 'Bạn có muốn ngưng xuất bản tất cả {{label}} không?', autosave: 'Tự động lưu dữ liệu', autosavedSuccessfully: 'Đã tự động lưu thành công.', @@ -591,6 +593,8 @@ export const viTranslations: DefaultTranslationsObject = { restoring: 'Đang khôi phục...', reverting: 'Đang về trạng thái cũ...', revertToPublished: 'Quay về trạng thái đã xuất bản', + revertUnsuccessful: + 'Khôi phục không thành công. Không tìm thấy phiên bản đã xuất bản trước đó.', saveDraft: 'Lưu bản nháp', scheduledSuccessfully: 'Đã lên lịch thành công.', schedulePublish: 'Lịch xuất bản', @@ -601,6 +605,9 @@ export const viTranslations: DefaultTranslationsObject = { specificVersion: 'Phiên bản cụ thể', status: 'Trạng thái', unpublish: 'Ẩn tài liệu', + unpublished: 'Chưa được xuất bản', + unpublishedSuccessfully: 'Đã hủy xuất bản thành công.', + unpublishIn: 'Hủy xuất bản trong {{locale}}', unpublishing: 'Đang ẩn tài liệu...', version: 'Phiên bản', versionAgo: '{{distance}} trước', diff --git a/packages/translations/src/languages/zh.ts b/packages/translations/src/languages/zh.ts index a7c64e67bfc..65c5a68a9e7 100644 --- a/packages/translations/src/languages/zh.ts +++ b/packages/translations/src/languages/zh.ts @@ -523,6 +523,7 @@ export const zhTranslations: DefaultTranslationsObject = { aboutToRestoreGlobal: '您要将全局的 {{label}} 恢复到 {{versionDate}} 时的状态', aboutToRevertToPublished: '您将要把这个文档的内容还原到它的发布状态。您确定吗?', aboutToUnpublish: '您即将取消发布这个文档。您确定吗?', + aboutToUnpublishIn: '您即将在{{locale}}中取消发布此文档。你确定吗?', aboutToUnpublishSelection: '您即将取消发布所选内容中的所有 {{label}}。 您确定吗?', autosave: '自动保存', autosavedSuccessfully: '自动保存成功。', @@ -569,6 +570,7 @@ export const zhTranslations: DefaultTranslationsObject = { restoring: '恢复中...', reverting: '还原中...', revertToPublished: '还原到已发布的版本', + revertUnsuccessful: '撤销失败。找不到之前发布的版本。', saveDraft: '保存草稿', scheduledSuccessfully: '预约发布成功。', schedulePublish: '预约发布', @@ -579,6 +581,9 @@ export const zhTranslations: DefaultTranslationsObject = { specificVersion: '特定版本', status: '状态', unpublish: '取消发布', + unpublished: '未发布', + unpublishedSuccessfully: '成功取消发布。', + unpublishIn: '在{{locale}}中取消发布', unpublishing: '取消发布中...', version: '版本', versionAgo: '{{distance}} 前', diff --git a/packages/translations/src/languages/zhTw.ts b/packages/translations/src/languages/zhTw.ts index a14c7623756..b086a3847d7 100644 --- a/packages/translations/src/languages/zhTw.ts +++ b/packages/translations/src/languages/zhTw.ts @@ -522,6 +522,7 @@ export const zhTwTranslations: DefaultTranslationsObject = { aboutToRestoreGlobal: '您即將將全域 {{label}} 還原至 {{versionDate}} 的狀態。', aboutToRevertToPublished: '您即將還原此文件至已發佈狀態。確定要繼續?', aboutToUnpublish: '您即將取消發佈此文件。確定要繼續?', + aboutToUnpublishIn: '您即將在{{locale}}中取消發佈此文件。你確定嗎?', aboutToUnpublishSelection: '您即將取消發佈所有選取的 {{label}}。確定要繼續?', autosave: '自動儲存', autosavedSuccessfully: '已成功自動儲存。', @@ -568,6 +569,7 @@ export const zhTwTranslations: DefaultTranslationsObject = { restoring: '還原中…', reverting: '還原中…', revertToPublished: '還原至已發佈版本', + revertUnsuccessful: '還原失敗。找不到先前已發布的版本。', saveDraft: '儲存草稿', scheduledSuccessfully: '排程成功。', schedulePublish: '排程發佈', @@ -578,6 +580,9 @@ export const zhTwTranslations: DefaultTranslationsObject = { specificVersion: '指定版本', status: '狀態', unpublish: '取消發佈', + unpublished: '未發佈', + unpublishedSuccessfully: '成功取消發佈。', + unpublishIn: '在{{locale}}中取消發佈', unpublishing: '取消發佈中…', version: '版本', versionAgo: '{{distance}} 前', diff --git a/packages/ui/src/elements/Autosave/index.tsx b/packages/ui/src/elements/Autosave/index.tsx index e4f16cca3de..d11c5d3a8e7 100644 --- a/packages/ui/src/elements/Autosave/index.tsx +++ b/packages/ui/src/elements/Autosave/index.tsx @@ -8,6 +8,7 @@ import { hasDraftValidationEnabled, reduceFieldsToValues, } from 'payload/shared' +import * as qs from 'qs-esm' import React, { useDeferredValue, useEffect, useRef, useState } from 'react' import type { OnSaveContext } from '../../views/Edit/index.js' @@ -128,15 +129,28 @@ export const Autosave: React.FC = ({ id, collection, global: globalDoc }) let method: string let entitySlug: string + const params = qs.stringify( + { + autosave: true, + depth: 0, + draft: true, + 'fallback-locale': 'null', + locale: localeRef.current, + }, + { + addQueryPrefix: true, + }, + ) + if (collection && id) { entitySlug = collection.slug - url = `${serverURL}${api}/${entitySlug}/${id}?depth=0&draft=true&autosave=true&locale=${localeRef.current}&fallback-locale=null` + url = `${serverURL}${api}/${entitySlug}/${id}${params}` method = 'PATCH' } if (globalDoc) { entitySlug = globalDoc.slug - url = `${serverURL}${api}/globals/${entitySlug}?depth=0&draft=true&autosave=true&locale=${localeRef.current}&fallback-locale=null` + url = `${serverURL}${api}/globals/${entitySlug}${params}` method = 'POST' } diff --git a/packages/ui/src/elements/DocumentControls/index.tsx b/packages/ui/src/elements/DocumentControls/index.tsx index f8f6e09e1a7..1585b6e38fe 100644 --- a/packages/ui/src/elements/DocumentControls/index.tsx +++ b/packages/ui/src/elements/DocumentControls/index.tsx @@ -38,6 +38,7 @@ import { SaveButton } from '../SaveButton/index.js' import './index.scss' import { SaveDraftButton } from '../SaveDraftButton/index.js' import { Status } from '../Status/index.js' +import { UnpublishButton } from '../UnpublishButton/index.js' const baseClass = 'doc-controls' @@ -276,6 +277,7 @@ export const DocumentControls: React.FC<{ Fallback={} /> )} + } diff --git a/packages/ui/src/elements/PublishButton/index.tsx b/packages/ui/src/elements/PublishButton/index.tsx index f6ad9349434..0f9347d28e6 100644 --- a/packages/ui/src/elements/PublishButton/index.tsx +++ b/packages/ui/src/elements/PublishButton/index.tsx @@ -38,7 +38,6 @@ export function PublishButton({ label: labelProp }: PublishButtonClientProps) { const { submit } = useForm() const modified = useFormModified() const editDepth = useEditDepth() - const { code: localeCode } = useLocale() const { isModalOpen, toggleModal } = useModal() const drawerSlug = `schedule-publish-${id}` @@ -50,6 +49,7 @@ export function PublishButton({ label: labelProp }: PublishButtonClientProps) { } = config const { t } = useTranslation() + const { code: localeCode } = useLocale() const label = labelProp || t('version:publishChanges') const entityConfig = React.useMemo(() => { @@ -99,19 +99,28 @@ export function PublishButton({ label: labelProp }: PublishButtonClientProps) { return } - const search = `?locale=${localeCode}&depth=0&fallback-locale=null&draft=true` + const params = qs.stringify( + { + depth: 0, + draft: true, + 'fallback-locale': 'null', + locale: localeCode, + }, + { addQueryPrefix: true }, + ) + let action let method = 'POST' if (collectionSlug) { - action = `${serverURL}${api}/${collectionSlug}${id ? `/${id}` : ''}${search}` + action = `${serverURL}${api}/${collectionSlug}${id ? `/${id}` : ''}${params}` if (id) { method = 'PATCH' } } if (globalSlug) { - action = `${serverURL}${api}/globals/${globalSlug}${search}` + action = `${serverURL}${api}/globals/${globalSlug}${params}` } await submit({ @@ -122,7 +131,7 @@ export function PublishButton({ label: labelProp }: PublishButtonClientProps) { }, skipValidation: true, }) - }, [submit, collectionSlug, globalSlug, serverURL, api, localeCode, id, disabled]) + }, [disabled, localeCode, collectionSlug, globalSlug, submit, serverURL, api, id]) useHotkey({ cmdCtrlKey: true, editDepth, keyCodes: ['s'] }, (e) => { e.preventDefault() @@ -138,7 +147,21 @@ export function PublishButton({ label: labelProp }: PublishButtonClientProps) { return } + const params = qs.stringify( + { + depth: 0, + locale: localeCode, + publishAllLocales: true, + }, + { addQueryPrefix: true }, + ) + + const action = `${serverURL}${api}${ + globalSlug ? `/globals/${globalSlug}` : `/${collectionSlug}${id ? `/${id}` : ''}` + }${params}` + const result = await submit({ + action, overrides: { _status: 'published', }, @@ -150,6 +173,12 @@ export function PublishButton({ label: labelProp }: PublishButtonClientProps) { setHasPublishedDoc(true) } }, [ + localeCode, + api, + collectionSlug, + globalSlug, + id, + serverURL, setHasPublishedDoc, submit, setUnpublishedVersionCount, @@ -163,14 +192,18 @@ export function PublishButton({ label: labelProp }: PublishButtonClientProps) { return } - const params = qs.stringify({ - depth: 0, - publishSpecificLocale: locale, - }) + const params = qs.stringify( + { + depth: 0, + locale, + publishSpecificLocale: locale, + }, + { addQueryPrefix: true }, + ) const action = `${serverURL}${api}${ globalSlug ? `/globals/${globalSlug}` : `/${collectionSlug}${id ? `/${id}` : ''}` - }${params ? '?' + params : ''}` + }${params}` const result = await submit({ action, diff --git a/packages/ui/src/elements/Status/index.tsx b/packages/ui/src/elements/Status/index.tsx index fc59f452bf1..004c6e60bbb 100644 --- a/packages/ui/src/elements/Status/index.tsx +++ b/packages/ui/src/elements/Status/index.tsx @@ -43,7 +43,6 @@ export const Status: React.FC = () => { const { code: locale } = useLocale() const { i18n, t } = useTranslation() - const unPublishModalSlug = `confirm-un-publish-${id}` const revertModalSlug = `confirm-revert-${id}` let statusToRender: 'changed' | 'draft' | 'published' @@ -63,16 +62,9 @@ export const Status: React.FC = () => { : statusToRender const performAction = useCallback( - async (action: 'revert' | 'unpublish') => { + async () => { let url let method - let body - - if (action === 'unpublish') { - body = { - _status: 'draft', - } - } if (collectionSlug) { url = `${serverURL}${api}/${collectionSlug}/${id}?locale=${locale}&fallback-locale=null&depth=0` @@ -84,18 +76,17 @@ export const Status: React.FC = () => { method = 'post' } - if (action === 'revert') { - const publishedDoc = await requests - .get(url, { - headers: { - 'Accept-Language': i18n.language, - 'Content-Type': 'application/json', - }, - }) - .then((res) => res.json()) - - body = publishedDoc - } + + const publishedDoc = await requests + .get(url, { + headers: { + 'Accept-Language': i18n.language, + 'Content-Type': 'application/json', + }, + }) + .then((res) => res.json()) + + const body = publishedDoc const res = await requests[method](url, { body: JSON.stringify(body), @@ -121,11 +112,7 @@ export const Status: React.FC = () => { incrementVersionCount() setMostRecentVersionIsAutosaved(false) - if (action === 'unpublish') { - setHasPublishedDoc(false) - } else if (action === 'revert') { - setUnpublishedVersionCount(0) - } + setUnpublishedVersionCount(0) } else { try { const json = await res.json() @@ -134,6 +121,7 @@ export const Status: React.FC = () => { } else if (json.error) { toast.error(json.error) } else { + // TODO: errors should say revert toast.error(t('error:unPublishingDocument')) } // eslint-disable-next-line @typescript-eslint/no-unused-vars @@ -155,7 +143,6 @@ export const Status: React.FC = () => { setUnpublishedVersionCount, setMostRecentVersionIsAutosaved, t, - setHasPublishedDoc, ], ) @@ -170,26 +157,7 @@ export const Status: React.FC = () => {
{t('version:status')}:  {t(`version:${displayStatusKey}`)} - {!isTrashed && canUpdate && statusToRender === 'published' && ( - -  —  - - performAction('unpublish')} - /> - - )} + {!isTrashed && canUpdate && hasPublishedDoc && @@ -209,7 +177,7 @@ export const Status: React.FC = () => { confirmingLabel={t('version:reverting')} heading={t('version:confirmRevertToSaved')} modalSlug={revertModalSlug} - onConfirm={() => performAction('revert')} + onConfirm={() => performAction()} /> )} diff --git a/packages/ui/src/elements/UnpublishButton/index.tsx b/packages/ui/src/elements/UnpublishButton/index.tsx new file mode 100644 index 00000000000..b8b37443370 --- /dev/null +++ b/packages/ui/src/elements/UnpublishButton/index.tsx @@ -0,0 +1,205 @@ +'use client' + +import { useModal } from '@faceless-ui/modal' +import { getTranslation } from '@payloadcms/translations' +import * as qs from 'qs-esm' +import React, { useCallback, useEffect, useState } from 'react' +import { toast } from 'sonner' + +import { useForm } from '../../forms/Form/context.js' +import { FormSubmit } from '../../forms/Submit/index.js' +import { useConfig } from '../../providers/Config/index.js' +import { useDocumentInfo } from '../../providers/DocumentInfo/index.js' +import { useLocale } from '../../providers/Locale/index.js' +import { useTranslation } from '../../providers/Translation/index.js' +import { requests } from '../../utilities/api.js' +import { traverseForLocalizedFields } from '../../utilities/traverseForLocalizedFields.js' +import { ConfirmationModal } from '../ConfirmationModal/index.js' +import { PopupList } from '../Popup/index.js' +export function UnpublishButton() { + const { + id, + collectionSlug, + data: dataFromProps, + globalSlug, + hasPublishedDoc, + incrementVersionCount, + isTrashed, + setHasPublishedDoc, + setMostRecentVersionIsAutosaved, + setUnpublishedVersionCount, + } = useDocumentInfo() + const { toggleModal } = useModal() + + const { config, getEntityConfig } = useConfig() + const { reset: resetForm } = useForm() + const { code: localeCode, label: localeLabel } = useLocale() + const [unpublishAll, setUnpublishAll] = useState(false) + + const unPublishModalSlug = `confirm-un-publish-${id}` + + const { + routes: { api }, + serverURL, + } = config + + const { i18n, t } = useTranslation() + + const entityConfig = React.useMemo(() => { + if (collectionSlug) { + return getEntityConfig({ collectionSlug }) + } + + if (globalSlug) { + return getEntityConfig({ globalSlug }) + } + }, [collectionSlug, globalSlug, getEntityConfig]) + + const unpublish = useCallback( + (unpublishAll?: boolean) => { + ; (async () => { + let url + let method + + const queryString = qs.stringify( + { + depth: 0, + 'fallback-locale': 'null', + locale: unpublishAll ? undefined : localeCode, + unpublishAllLocales: unpublishAll, + }, + { addQueryPrefix: true }, + ) + + if (collectionSlug) { + url = `${serverURL}${api}/${collectionSlug}/${id}${queryString}` + method = 'patch' + } + + if (globalSlug) { + url = `${serverURL}${api}/globals/${globalSlug}${queryString}` + method = 'post' + } + + try { + const res = await requests[method](url, { + body: JSON.stringify({ _status: 'draft' }), + headers: { + 'Accept-Language': i18n.language, + 'Content-Type': 'application/json', + }, + }) + + if (res.status === 200) { + void resetForm({ + ...(dataFromProps || {}), + _status: 'draft', + }) + + toast.success(t('version:unpublishedSuccessfully')) + incrementVersionCount() + setUnpublishedVersionCount(1) + setMostRecentVersionIsAutosaved(false) + setHasPublishedDoc(false) + } else { + try { + const json = await res.json() + if (json.errors?.[0]?.message) { + toast.error(json.errors[0].message) + } else if (json.error) { + toast.error(json.error) + } else { + toast.error(t('error:unPublishingDocument')) + } + } catch { + toast.error(t('error:unPublishingDocument')) + } + } + } catch { + toast.error(t('error:unPublishingDocument')) + } + })().catch(() => { + toast.error(t('error:unPublishingDocument')) + }) + }, + [ + dataFromProps, + resetForm, + collectionSlug, + globalSlug, + serverURL, + api, + localeCode, + id, + i18n.language, + incrementVersionCount, + setHasPublishedDoc, + setMostRecentVersionIsAutosaved, + setUnpublishedVersionCount, + t, + ], + ) + + const [hasLocalizedFields, setHasLocalizedFields] = useState(false) + + useEffect(() => { + const hasLocalizedField = traverseForLocalizedFields(entityConfig?.fields) + setHasLocalizedFields(hasLocalizedField) + }, [entityConfig?.fields]) + + const canUnpublish = hasPublishedDoc && !isTrashed + const canUnpublishCurrentLocale = hasLocalizedFields && canUnpublish + + return ( + + {canUnpublish && ( + <> + { + setUnpublishAll(true) + toggleModal(unPublishModalSlug) + }} + size="medium" + SubMenuPopupContent={ + canUnpublishCurrentLocale + ? ({ close }) => { + return ( + + { + setUnpublishAll(false) + toggleModal(unPublishModalSlug) + close() + }} + > + {t('version:unpublishIn', { locale: getTranslation(localeLabel, i18n) })} + + + ) + } + : undefined + } + type="button" + > + {t('version:unpublish')} + + unpublish(unpublishAll)} + /> + + )} + + ) +} diff --git a/packages/ui/src/exports/shared/index.ts b/packages/ui/src/exports/shared/index.ts index 540a2caf190..e93629fb84b 100644 --- a/packages/ui/src/exports/shared/index.ts +++ b/packages/ui/src/exports/shared/index.ts @@ -27,6 +27,7 @@ export { hasSavePermission } from '../../utilities/hasSavePermission.js' export { isClientUserObject } from '../../utilities/isClientUserObject.js' export { isEditing } from '../../utilities/isEditing.js' export { sanitizeID } from '../../utilities/sanitizeID.js' +export { traverseForLocalizedFields } from '../../utilities/traverseForLocalizedFields.js' /** * @deprecated * The `mergeListSearchAndWhere` function is deprecated. diff --git a/packages/ui/src/utilities/traverseForLocalizedFields.ts b/packages/ui/src/utilities/traverseForLocalizedFields.ts index 2b801b5bedc..28b06b40d67 100644 --- a/packages/ui/src/utilities/traverseForLocalizedFields.ts +++ b/packages/ui/src/utilities/traverseForLocalizedFields.ts @@ -1,6 +1,6 @@ -import type { ClientField } from 'payload' +import type { ClientField, Field } from 'payload' -export const traverseForLocalizedFields = (fields: ClientField[]): boolean => { +export const traverseForLocalizedFields = (fields: ClientField[] | Field[]): boolean => { for (const field of fields) { if ('localized' in field && field.localized) { return true diff --git a/test/helpers.ts b/test/helpers.ts index f6d59270ba0..11b4be37469 100644 --- a/test/helpers.ts +++ b/test/helpers.ts @@ -191,6 +191,11 @@ export async function saveDocAndAssert( expectation: 'error' | 'success' = 'success', ): Promise { await wait(500) // TODO: Fix this + if (selector === '#publish-locale') { + // open dropdown + const chevronButton = page.locator('.form-submit .popup__trigger-wrap > .popup-button') + await chevronButton.click() + } await page.click(selector, { delay: 100 }) if (expectation === 'success') { diff --git a/test/helpers/adminUrlUtil.ts b/test/helpers/adminUrlUtil.ts index 8b0ca6ce706..cb7e7662f66 100644 --- a/test/helpers/adminUrlUtil.ts +++ b/test/helpers/adminUrlUtil.ts @@ -108,4 +108,12 @@ export class AdminUrlUtil { trashEdit(id: number | string): string { return `${this.trash}/${id}` } + + version(id: number | string, versionID: number | string): string { + return `${this.list}/${id}/versions/${versionID}` + } + + versions(id: number | string): string { + return `${this.list}/${id}/versions` + } } diff --git a/test/localization/config.ts b/test/localization/config.ts index 85ad95dd562..a24aa84689d 100644 --- a/test/localization/config.ts +++ b/test/localization/config.ts @@ -27,6 +27,7 @@ import { cannotCreateDefaultLocale, defaultLocale, englishTitle, + globalWithDraftsSlug, hungarianLocale, localizedDateFieldsSlug, localizedPostsSlug, @@ -62,6 +63,9 @@ export default buildConfigWithDefaults({ baseDir: path.resolve(dirname), }, }, + experimental: { + localizeStatus: true, + }, collections: [ RichTextCollection, BlocksCollection, @@ -429,6 +433,19 @@ export default buildConfigWithDefaults({ ], slug: 'global-text', }, + { + fields: [ + { + name: 'text', + localized: true, + type: 'text', + }, + ], + slug: globalWithDraftsSlug, + versions: { + drafts: true, + }, + }, ], localization: { filterAvailableLocales: ({ locales }) => { diff --git a/test/localization/e2e.spec.ts b/test/localization/e2e.spec.ts index b356db51ef2..21e28eac3dc 100644 --- a/test/localization/e2e.spec.ts +++ b/test/localization/e2e.spec.ts @@ -36,6 +36,7 @@ import { nestedToArrayAndBlockCollectionSlug } from './collections/NestedToArray import { noLocalizedFieldsCollectionSlug } from './collections/NoLocalizedFields/index.js' import { richTextSlug } from './collections/RichText/index.js' import { + allFieldsLocalizedSlug, arrayWithFallbackCollectionSlug, defaultLocale, englishTitle, @@ -69,6 +70,7 @@ let urlArray: AdminUrlUtil let arrayWithFallbackURL: AdminUrlUtil let noLocalizedFieldsURL: AdminUrlUtil let urlBlocks: AdminUrlUtil +let urlAllFieldsLocalized: AdminUrlUtil const title = 'english title' const spanishTitle = 'spanish title' @@ -97,6 +99,7 @@ describe('Localization', () => { arrayWithFallbackURL = new AdminUrlUtil(serverURL, arrayWithFallbackCollectionSlug) noLocalizedFieldsURL = new AdminUrlUtil(serverURL, noLocalizedFieldsCollectionSlug) urlBlocks = new AdminUrlUtil(serverURL, blocksCollectionSlug) + urlAllFieldsLocalized = new AdminUrlUtil(serverURL, allFieldsLocalizedSlug) context = await browser.newContext() page = await context.newPage() @@ -713,8 +716,6 @@ describe('Localization', () => { await page.goto(urlPostsWithDrafts.create) await changeLocale(page, 'es') await fillValues({ title: 'Created In Spanish' }) - const chevronButton = page.locator('.form-submit .popup__trigger-wrap > .popup-button') - await chevronButton.click() await saveDocAndAssert(page, '#publish-locale') await expect(page.locator('#field-title')).toHaveValue('Created In Spanish') @@ -777,6 +778,57 @@ describe('Localization', () => { }) }) + describe('localize status', () => { + describe('versions list', () => { + test('should show currently published doc in version list', async () => { + await changeLocale(page, defaultLocale) + await page.goto(urlAllFieldsLocalized.create) + + // draft en + await page.locator('#field-text').fill('EN Draft') + await saveDocAndAssert(page, '#action-save-draft') + + const docID = (await page.locator('.render-title').getAttribute('data-doc-id')) as string + + // publish en + await page.locator('#field-text').fill('EN Published') + await saveDocAndAssert(page, '#publish-locale') + + await page.goto(urlAllFieldsLocalized.versions(docID)) + + const firstRow = page.locator('tbody tr').first() + await expect(firstRow.locator('.pill__label span')).toHaveText('Currently Published') + }) + + test('should only show published status when viewing the published locale', async () => { + await changeLocale(page, defaultLocale) + await page.goto(urlAllFieldsLocalized.create) + + // publish en + await page.locator('#field-text').fill('EN Published') + await saveDocAndAssert(page, '#publish-locale') + + const docID = (await page.locator('.render-title').getAttribute('data-doc-id')) as string + + // draft en + await page.locator('#field-text').fill('EN Draft') + await saveDocAndAssert(page, '#action-save-draft') + + await changeLocale(page, spanishLocale) + + // publish es + await page.locator('#field-text').fill('ES Published') + await saveDocAndAssert(page, '#publish-locale') + + await page.goto(urlAllFieldsLocalized.versions(docID)) + await changeLocale(page, defaultLocale) + + const firstRow = page.locator('tbody tr').first() + await expect(firstRow.locator('.pill__label span')).toHaveText('Current Draft') + }) + }) + }) + describe('A11y', () => { test.fixme('Locale picker should have no accessibility violations', async ({}, testInfo) => { await page.goto(url.list) diff --git a/test/localization/int.spec.ts b/test/localization/int.spec.ts index 1b09f60fc39..046580c2a86 100644 --- a/test/localization/int.spec.ts +++ b/test/localization/int.spec.ts @@ -30,6 +30,7 @@ import { defaultLocale, defaultLocale as englishLocale, englishTitle, + globalWithDraftsSlug, hungarianLocale, localizedDateFieldsSlug, localizedDraftsSlug, @@ -3620,329 +3621,528 @@ describe('Localization', () => { }) describe('localize status', () => { - it('should set other locales to draft upon creation', async () => { - const doc = await payload.create({ - collection: allFieldsLocalizedSlug, - data: { - text: 'Localized Metadata EN', - _status: 'published', - }, - locale: defaultLocale, - }) + describe('collections', () => { + describe('on create', () => { + it('should set other locales to draft upon creation', async () => { + const doc = await payload.create({ + collection: allFieldsLocalizedSlug, + data: { + text: 'Localized Metadata EN', + _status: 'published', + }, + locale: defaultLocale, + }) - const esDoc = await payload.findByID({ - locale: spanishLocale, - id: doc.id, - collection: allFieldsLocalizedSlug, - }) + const esDoc = await payload.findByID({ + locale: spanishLocale, + id: doc.id, + collection: allFieldsLocalizedSlug, + }) - expect(esDoc._status).toContain('draft') - }) + expect(esDoc._status).toContain('draft') + }) - it('should allow publishing of all locales upon creation', async () => { - const doc = await payload.create({ - collection: allFieldsLocalizedSlug, - data: { - text: 'Localized Metadata EN', - _status: 'published', - }, - locale: defaultLocale, - publishAllLocales: true, - }) + it('should allow publishing of all locales upon creation', async () => { + const doc = await payload.create({ + collection: allFieldsLocalizedSlug, + data: { + text: 'Localized Metadata EN', + _status: 'published', + }, + locale: defaultLocale, + publishAllLocales: true, + }) - const esDoc = await payload.findByID({ - locale: spanishLocale, - id: doc.id, - collection: allFieldsLocalizedSlug, + const esDoc = await payload.findByID({ + locale: spanishLocale, + id: doc.id, + collection: allFieldsLocalizedSlug, + }) + + expect(esDoc._status).toContain('published') + }) }) - expect(esDoc._status).toContain('published') - }) + describe('querying', () => { + it('should return correct data based on draft arg', async () => { + // NOTE: passes in MongoDB, fails in PG + // -> fails to query on version._status.[localeCode] in `replaceWithDraftIfAvailable` when locale = 'all' - it('should return correct data based on draft arg', async () => { - // NOTE: passes in MongoDB, fails in PG - // -> fails to query on version._status.[localeCode] in `replaceWithDraftIfAvailable` when locale = 'all' + // create english draft 1 + const doc = await payload.create({ + collection: allFieldsLocalizedSlug, + data: { + text: 'english draft 1', + _status: 'draft', + }, + draft: true, + locale: defaultLocale, + }) + // update english published 1 + await payload.update({ + collection: allFieldsLocalizedSlug, + id: doc.id, + data: { + text: 'english published 1', + _status: 'published', + }, + locale: defaultLocale, + }) - // create english draft 1 - const doc = await payload.create({ - collection: allFieldsLocalizedSlug, - data: { - text: 'english draft 1', - _status: 'draft', - }, - draft: true, - locale: defaultLocale, - }) - // update english published 1 - await payload.update({ - collection: allFieldsLocalizedSlug, - id: doc.id, - data: { - text: 'english published 1', - _status: 'published', - }, - locale: defaultLocale, - }) + // create spanish draft 1 + await payload.update({ + collection: allFieldsLocalizedSlug, + id: doc.id, + data: { + text: 'spanish draft 1', + _status: 'draft', + }, + draft: true, + locale: spanishLocale, + }) + // update spanish published 1 + await payload.update({ + collection: allFieldsLocalizedSlug, + id: doc.id, + data: { + text: 'spanish published 1', + _status: 'published', + }, + locale: spanishLocale, + }) + // update spanish draft 2 + await payload.update({ + collection: allFieldsLocalizedSlug, + id: doc.id, + data: { + text: 'spanish draft 2', + _status: 'draft', + }, + draft: true, + locale: spanishLocale, + }) - // create spanish draft 1 - await payload.update({ - collection: allFieldsLocalizedSlug, - id: doc.id, - data: { - text: 'spanish draft 1', - _status: 'draft', - }, - draft: true, - locale: spanishLocale, - }) - // update spanish published 1 - await payload.update({ - collection: allFieldsLocalizedSlug, - id: doc.id, - data: { - text: 'spanish published 1', - _status: 'published', - }, - locale: spanishLocale, - }) - // update spanish draft 2 - await payload.update({ - collection: allFieldsLocalizedSlug, - id: doc.id, - data: { - text: 'spanish draft 2', - _status: 'draft', - }, - draft: true, - locale: spanishLocale, - }) + const publishedDoc = await payload.findByID({ + collection: allFieldsLocalizedSlug, + id: doc.id, + locale: 'all', + draft: false, + }) - const publishedDoc = await payload.findByID({ - collection: allFieldsLocalizedSlug, - id: doc.id, - locale: 'all', - draft: false, - }) + expect(publishedDoc._status!.en).toBe('published') + expect(publishedDoc.text!.en).toBe('english published 1') + expect(publishedDoc._status!.es).toBe('published') + expect(publishedDoc.text!.es).toBe('spanish published 1') - expect(publishedDoc._status!.en).toBe('published') - expect(publishedDoc.text!.en).toBe('english published 1') - expect(publishedDoc._status!.es).toBe('published') - expect(publishedDoc.text!.es).toBe('spanish published 1') + const latestVersionDoc = await payload.findByID({ + collection: allFieldsLocalizedSlug, + id: doc.id, + draft: true, + locale: 'all', + }) - const latestVersionDoc = await payload.findByID({ - collection: allFieldsLocalizedSlug, - id: doc.id, - draft: true, - locale: 'all', - }) + expect(latestVersionDoc._status!.en).toBe('published') + expect(latestVersionDoc.text!.en).toBe('english published 1') + expect(latestVersionDoc._status!.es).toBe('draft') + expect(latestVersionDoc.text!.es).toBe('spanish draft 2') + }) - expect(latestVersionDoc._status!.en).toBe('published') - expect(latestVersionDoc.text!.en).toBe('english published 1') - expect(latestVersionDoc._status!.es).toBe('draft') - expect(latestVersionDoc.text!.es).toBe('spanish draft 2') - }) + it('should allow querying metadata per locale', async () => { + const doc = await payload.create({ + collection: allFieldsLocalizedSlug, + data: { + text: 'Localized Metadata EN', + _status: 'published', + }, + locale: defaultLocale, + }) + await payload.update({ + collection: allFieldsLocalizedSlug, + id: doc.id, + data: { + text: 'Localized Metadata ES', + _status: 'draft', + }, + draft: true, + locale: spanishLocale, + }) - it('should allow querying metadata per locale', async () => { - const doc = await payload.create({ - collection: allFieldsLocalizedSlug, - data: { - text: 'Localized Metadata EN', - _status: 'published', - }, - locale: defaultLocale, - }) - await payload.update({ - collection: allFieldsLocalizedSlug, - id: doc.id, - data: { - text: 'Localized Metadata ES', - _status: 'draft', - }, - draft: true, - locale: spanishLocale, - }) + const esPublished = await payload.find({ + locale: spanishLocale, + collection: allFieldsLocalizedSlug, + where: { + and: [ + { + id: { + equals: doc.id, + }, + }, + { + _status: { + equals: 'published', + }, + }, + ], + }, + }) + expect(esPublished.totalDocs).toBe(0) - const esPublished = await payload.find({ - locale: spanishLocale, - collection: allFieldsLocalizedSlug, - where: { - and: [ - { - id: { - equals: doc.id, - }, + const esDraft = await payload.find({ + locale: spanishLocale, + collection: allFieldsLocalizedSlug, + draft: true, + where: { + and: [ + { + id: { + equals: doc.id, + }, + }, + { + _status: { + equals: 'draft', + }, + }, + ], }, - { - _status: { - equals: 'published', - }, + }) + + expect(esDraft.totalDocs).toBe(1) + expect(esDraft.docs[0]!.text).toBe('Localized Metadata ES') + + const enPublished = await payload.find({ + locale: defaultLocale, + collection: allFieldsLocalizedSlug, + draft: true, + where: { + and: [ + { + id: { + equals: doc.id, + }, + }, + { + _status: { + equals: 'published', + }, + }, + ], }, - ], - }, + }) + expect(enPublished.totalDocs).toBe(1) + expect(enPublished.docs[0]!.text).toBe('Localized Metadata EN') + }) }) - expect(esPublished.totalDocs).toBe(0) - const esDraft = await payload.find({ - locale: spanishLocale, - collection: allFieldsLocalizedSlug, - draft: true, - where: { - and: [ - { - id: { - equals: doc.id, - }, + describe('on update', () => { + it('should publish and unpublish single locales', async () => { + const doc = await payload.create({ + collection: allFieldsLocalizedSlug, + data: { + text: 'en published', + _status: 'published', }, - { - _status: { - equals: 'draft', - }, + locale: defaultLocale, + }) + + await payload.update({ + collection: allFieldsLocalizedSlug, + id: doc.id, + data: { + text: 'en draft', + _status: 'draft', }, - ], - }, - }) + draft: true, + locale: defaultLocale, + }) - expect(esDraft.totalDocs).toBe(1) - expect(esDraft.docs[0]!.text).toBe('Localized Metadata ES') + await payload.update({ + collection: allFieldsLocalizedSlug, + id: doc.id, + data: { + text: 'es published', + _status: 'published', + }, + locale: spanishLocale, + }) - const enPublished = await payload.find({ - locale: defaultLocale, - collection: allFieldsLocalizedSlug, - draft: true, - where: { - and: [ - { - id: { - equals: doc.id, - }, + const mainDocument = await payload.findByID({ + locale: 'all', + id: doc.id, + collection: allFieldsLocalizedSlug, + draft: false, + }) + + expect(mainDocument._status!.es).toBe('published') + expect(mainDocument.text!.es).toBe('es published') + expect(mainDocument._status!.en).toBe('published') + expect(mainDocument.text!.en).toBe('en published') + + const latestVersion = await payload.findByID({ + locale: 'all', + id: doc.id, + collection: allFieldsLocalizedSlug, + draft: true, + }) + + expect(latestVersion._status!.es).toBe('published') + expect(latestVersion.text!.es).toBe('es published') + expect(latestVersion._status!.en).toBe('draft') + expect(latestVersion.text!.en).toBe('en draft') + }) + + it('should publish and unpublish all', async () => { + const doc = await payload.create({ + collection: allFieldsLocalizedSlug, + data: { + text: 'en draft', + _status: 'draft', }, - { - _status: { - equals: 'published', - }, + locale: defaultLocale, + }) + + await payload.update({ + collection: allFieldsLocalizedSlug, + id: doc.id, + data: { + text: 'es draft', + _status: 'draft', }, - ], - }, + locale: spanishLocale, + }) + + await payload.update({ + collection: allFieldsLocalizedSlug, + id: doc.id, + data: { + text: 'en published', + _status: 'published', + }, + locale: 'en', + publishAllLocales: true, + }) + + const mainDocument = await payload.findByID({ + locale: 'all', + id: doc.id, + collection: allFieldsLocalizedSlug, + draft: false, + }) + + expect(mainDocument._status!.en).toBe('published') + expect(mainDocument.text!.en).toBe('en published') + expect(mainDocument._status!.es).toBe('published') + expect(mainDocument.text!.es).toBe('es draft') + + await payload.update({ + collection: allFieldsLocalizedSlug, + id: doc.id, + unpublishAllLocales: true, + data: {}, + }) + + const unpublishedDocument = await payload.findByID({ + locale: 'all', + id: doc.id, + collection: allFieldsLocalizedSlug, + draft: false, + }) + + expect(unpublishedDocument._status!.en).toBe('draft') + expect(unpublishedDocument._status!.es).toBe('draft') + }) }) - expect(enPublished.totalDocs).toBe(1) - expect(enPublished.docs[0]!.text).toBe('Localized Metadata EN') }) - it('should preserve published and draft data when publishing other locales', async () => { - const doc = await payload.create({ - collection: allFieldsLocalizedSlug, - data: { - text: 'en published', - _status: 'published', - }, - locale: defaultLocale, - }) + describe('globals', () => { + describe('querying', () => { + it('should return correct data based on draft arg', async () => { + // NOTE: passes in MongoDB, fails in PG + // -> fails to query on version._status.[localeCode] in `replaceWithDraftIfAvailable` when locale = 'all' - await payload.update({ - collection: allFieldsLocalizedSlug, - id: doc.id, - data: { - text: 'en draft', - _status: 'draft', - }, - draft: true, - locale: defaultLocale, - }) + // create english draft 1 + await payload.updateGlobal({ + slug: globalWithDraftsSlug, + data: { + text: 'english draft 1', + _status: 'draft', + }, + draft: true, + locale: defaultLocale, + }) + // update english published 1 + await payload.updateGlobal({ + slug: globalWithDraftsSlug, + data: { + text: 'english published 1', + _status: 'published', + }, + locale: defaultLocale, + }) - await payload.update({ - collection: allFieldsLocalizedSlug, - id: doc.id, - data: { - text: 'es published', - _status: 'published', - }, - locale: spanishLocale, - }) + // create spanish draft 1 + await payload.updateGlobal({ + slug: globalWithDraftsSlug, + data: { + text: 'spanish draft 1', + _status: 'draft', + }, + draft: true, + locale: spanishLocale, + }) + // update spanish published 1 + await payload.updateGlobal({ + slug: globalWithDraftsSlug, + data: { + text: 'spanish published 1', + _status: 'published', + }, + locale: spanishLocale, + }) + // update spanish draft 2 + await payload.updateGlobal({ + slug: globalWithDraftsSlug, + data: { + text: 'spanish draft 2', + _status: 'draft', + }, + draft: true, + locale: spanishLocale, + }) - const mainDocument = await payload.findByID({ - locale: 'all', - id: doc.id, - collection: allFieldsLocalizedSlug, - draft: false, - }) + const publishedDoc = await payload.findGlobal({ + slug: globalWithDraftsSlug, + locale: 'all', + draft: false, + }) - expect(mainDocument._status!.es).toBe('published') - expect(mainDocument.text!.es).toBe('es published') - expect(mainDocument._status!.en).toBe('published') - expect(mainDocument.text!.en).toBe('en published') + expect(publishedDoc._status!.en).toBe('published') + expect(publishedDoc.text!.en).toBe('english published 1') + expect(publishedDoc._status!.es).toBe('published') + expect(publishedDoc.text!.es).toBe('spanish published 1') - const latestVersion = await payload.findByID({ - locale: 'all', - id: doc.id, - collection: allFieldsLocalizedSlug, - draft: true, + const latestVersionDoc = await payload.findGlobal({ + slug: globalWithDraftsSlug, + draft: true, + locale: 'all', + }) + + expect(latestVersionDoc._status!.en).toBe('published') + expect(latestVersionDoc.text!.en).toBe('english published 1') + expect(latestVersionDoc._status!.es).toBe('draft') + expect(latestVersionDoc.text!.es).toBe('spanish draft 2') + }) }) - expect(latestVersion._status!.es).toBe('published') - expect(latestVersion.text!.es).toBe('es published') - expect(latestVersion._status!.en).toBe('draft') - expect(latestVersion.text!.en).toBe('en draft') - }) + describe('on update', () => { + it('should publish and unpublish single locales', async () => { + const doc = await payload.updateGlobal({ + slug: globalWithDraftsSlug, + data: { + text: 'en published', + _status: 'published', + }, + locale: defaultLocale, + }) - it('should allow updating the status of all locales at once', async () => { - const doc = await payload.create({ - collection: allFieldsLocalizedSlug, - data: { - text: 'en draft', - _status: 'draft', - }, - locale: defaultLocale, - }) + await payload.updateGlobal({ + slug: globalWithDraftsSlug, + data: { + text: 'en draft', + _status: 'draft', + }, + draft: true, + locale: defaultLocale, + }) - await payload.update({ - collection: allFieldsLocalizedSlug, - id: doc.id, - data: { - text: 'es draft', - _status: 'draft', - }, - locale: spanishLocale, - }) + await payload.updateGlobal({ + slug: globalWithDraftsSlug, + data: { + text: 'es published', + _status: 'published', + }, + locale: spanishLocale, + }) - await payload.update({ - collection: allFieldsLocalizedSlug, - id: doc.id, - data: { - text: 'en published', - _status: 'published', - }, - locale: 'en', - publishAllLocales: true, - }) + const mainDocument = await payload.findGlobal({ + slug: globalWithDraftsSlug, + locale: 'all', + draft: false, + }) - const mainDocument = await payload.findByID({ - locale: 'all', - id: doc.id, - collection: allFieldsLocalizedSlug, - draft: false, - }) + expect(mainDocument._status!.es).toBe('published') + expect(mainDocument.text!.es).toBe('es published') + expect(mainDocument._status!.en).toBe('published') + expect(mainDocument.text!.en).toBe('en published') - expect(mainDocument._status!.en).toBe('published') - expect(mainDocument.text!.en).toBe('en published') - expect(mainDocument._status!.es).toBe('published') - expect(mainDocument.text!.es).toBe('es draft') + const latestVersion = await payload.findGlobal({ + slug: globalWithDraftsSlug, + locale: 'all', + draft: true, + }) - await payload.update({ - collection: allFieldsLocalizedSlug, - id: doc.id, - unpublishAllLocales: true, - data: {}, - }) + expect(latestVersion._status!.es).toBe('published') + expect(latestVersion.text!.es).toBe('es published') + expect(latestVersion._status!.en).toBe('draft') + expect(latestVersion.text!.en).toBe('en draft') + }) - const unpublishedDocument = await payload.findByID({ - locale: 'all', - id: doc.id, - collection: allFieldsLocalizedSlug, - draft: false, - }) + it('should publish and unpublish all', async () => { + const doc = await payload.updateGlobal({ + slug: globalWithDraftsSlug, + data: { + text: 'en draft', + _status: 'draft', + }, + locale: defaultLocale, + }) + + await payload.updateGlobal({ + slug: globalWithDraftsSlug, + data: { + text: 'es draft', + _status: 'draft', + }, + locale: spanishLocale, + }) + + await payload.updateGlobal({ + slug: globalWithDraftsSlug, + data: { + text: 'en published', + _status: 'published', + }, + locale: defaultLocale, + publishAllLocales: true, + }) + + const mainDocument = await payload.findGlobal({ + slug: globalWithDraftsSlug, + locale: 'all', + draft: false, + }) + + expect(mainDocument._status!.en).toBe('published') + expect(mainDocument.text!.en).toBe('en published') + expect(mainDocument._status!.es).toBe('published') + expect(mainDocument.text!.es).toBe('es draft') + + await payload.updateGlobal({ + slug: globalWithDraftsSlug, + unpublishAllLocales: true, + data: {}, + }) + + const unpublishedDocument = await payload.findGlobal({ + slug: globalWithDraftsSlug, + locale: 'all', + draft: false, + }) - expect(unpublishedDocument._status!.en).toBe('draft') - expect(unpublishedDocument._status!.es).toBe('draft') + expect(unpublishedDocument._status!.en).toBe('draft') + expect(unpublishedDocument._status!.es).toBe('draft') + }) + }) }) }) diff --git a/test/localization/shared.ts b/test/localization/shared.ts index e976be7f27c..f34511c0c31 100644 --- a/test/localization/shared.ts +++ b/test/localization/shared.ts @@ -24,3 +24,5 @@ export const blocksWithLocalizedSameName = 'blocks-same-name' export const cannotCreateDefaultLocale = 'cannot-create-default-locale' export const allFieldsLocalizedSlug = 'all-fields-localized' export const arrayWithFallbackCollectionSlug = 'array-with-fallback-fields' + +export const globalWithDraftsSlug = 'global-drafts' diff --git a/test/versions/collections/ErrorOnUnpublish.ts b/test/versions/collections/ErrorOnUnpublish.ts index c357f7d0d1c..430d1a55edf 100644 --- a/test/versions/collections/ErrorOnUnpublish.ts +++ b/test/versions/collections/ErrorOnUnpublish.ts @@ -21,8 +21,14 @@ const ErrorOnUnpublish: CollectionConfig = { }, hooks: { beforeValidate: [ - ({ data, originalDoc }) => { - if (data?._status === 'draft' && originalDoc?._status === 'published') { + ({ data, originalDoc, req }) => { + const unpublishAllLocales = req.url?.includes('unpublishAllLocales=true') + + if ( + data?._status === 'draft' && + originalDoc?._status === 'published' && + unpublishAllLocales + ) { throw new APIError('Custom error on unpublish', 400, {}, true) } }, diff --git a/test/versions/e2e.spec.ts b/test/versions/e2e.spec.ts index f81f60ae4d6..4e4c27ad2a4 100644 --- a/test/versions/e2e.spec.ts +++ b/test/versions/e2e.spec.ts @@ -492,7 +492,7 @@ describe('Versions', () => { await assertNetworkRequests( page, // Important: assert that depth is 0 in this request - `${serverURL}/api/autosave-posts/${docID}?depth=0&draft=true&autosave=true&locale=en&fallback-locale=null`, + `${serverURL}/api/autosave-posts/${docID}?autosave=true&depth=0&draft=true&fallback-locale=null&locale=en`, async () => { await page.locator('#field-title').fill('changed title') }, @@ -1221,7 +1221,8 @@ describe('Versions', () => { await changeLocale(page, 'en') await textField.fill('english published') - const publishOptions = page.locator('.doc-controls__controls .popup') + + const publishOptions = page.locator('#action-save-popup') await publishOptions.click() const publishSpecificLocale = page.locator('#publish-locale')