diff --git a/packages/decap-cms-locales/src/cs/index.js b/packages/decap-cms-locales/src/cs/index.js index 25accc2fa61e..c0075eebe494 100644 --- a/packages/decap-cms-locales/src/cs/index.js +++ b/packages/decap-cms-locales/src/cs/index.js @@ -19,7 +19,7 @@ const cs = { app: { header: { content: 'Obsah', - workflow: 'Workflow', + workflow: 'Schvalování', media: 'Média', quickAdd: 'Přidat', }, @@ -44,7 +44,7 @@ const cs = { collectionTop: { sortBy: 'Seřadit podle', viewAs: 'Zobrazit jako', - newButton: 'Nový %{collectionLabel}', + newButton: 'Přidat', ascending: 'Vzestupné', descending: 'Sestupné', searchResults: 'Výsledky vyhledávání pro "%{searchTerm}"', @@ -53,10 +53,10 @@ const cs = { groupBy: 'Seskupit podle', }, entries: { - loadingEntries: 'Načítání záznamů', - cachingEntries: 'Úkládání záznamů do mezipaměti', + loadingEntries: 'Načítání položek', + cachingEntries: 'Úkládání položek do mezipaměti', longerLoading: 'Načítání může trvat několik minut', - noEntries: 'Žádné záznamy', + noEntries: 'Žádné položky', }, groups: { other: 'Ostatní', @@ -94,24 +94,27 @@ const cs = { }, i18n: { writingInLocale: 'Psát v %{locale}', + copyFromLocale: 'Vyplnit z jiného jazyka', + copyFromLocaleConfirm: + 'Chcete vyplnit data z jazyka %{locale}?\nVeškerý současný obsah bude přepsán.', }, }, editor: { - onLeavePage: 'Chcete opravdu opustit tuto stránku?', - onUpdatingWithUnsavedChanges: 'Máte neuložené změny. Uložte je prosím před změnou statusu.', + onLeavePage: 'Opravdu chcete opustit tuto stránku?', + onUpdatingWithUnsavedChanges: 'Máte neuložené změny. Před změnou stavu je prosím uložte.', onPublishingNotReady: 'Změňte stav na „Připraveno“ před publikováním.', - onPublishingWithUnsavedChanges: 'Máte neuložené změny, prosím uložte je před publikováním.', - onPublishing: 'Chcete opravdu publikovat tento záznam?', - onUnpublishing: 'Chcete opravdu zrušit publikování tohoto záznamu?', + onPublishingWithUnsavedChanges: 'Máte neuložené změny, před publikováním je prosím uložte.', + onPublishing: 'Opravdu chcete publikovat tuto položku?', + onUnpublishing: 'Opravdu chcete zrušit publikování této položky?', onDeleteWithUnsavedChanges: - 'Chcete opravdu vymazat tento publikovaný záznam a všechny neuložené změny z této relace?', - onDeletePublishedEntry: 'Chcete opravdu smazat tento publikovaný záznam?', + 'Opravdu chcete vymazat tuto publikovanou položku a všechny neuložené změny z této relace?', + onDeletePublishedEntry: 'Opravdu chcete smazat tuto publikovanou položku?', onDeleteUnpublishedChangesWithUnsavedChanges: - 'Tato akce vymaže všechny nepublikované změny v tomto záznamu a také všechny neuložené změny z této relace. Chcete záznam skutečně vymazat?', + 'Tato akce vymaže všechny nepublikované změny v této položce a také všechny neuložené změny z této relace. Chcete položku skutečně vymazat?', onDeleteUnpublishedChanges: - 'Všechny nepublivkoané změny v tomto záznamu budou vymazány. Chcete ho skuteně vymazat?', - loadingEntry: 'Načítání záznamu…', - confirmLoadBackup: 'Lokální kopie tohoto záznamu byla nalezena, chcete ji použít?', + 'Všechny nepublikované změny v této položce budou vymazány. Chcete ji skuteně vymazat?', + loadingEntry: 'Načítání položky…', + confirmLoadBackup: 'Lokální kopie této položky byla nalezena, chcete ji použít?', }, editorInterface: { toggleI18n: 'Přepnout lokalizaci', @@ -128,14 +131,18 @@ const cs = { publishAndCreateNew: 'Publikovat a vytvořit nový', publishAndDuplicate: 'Publikovat a duplikovat', deleteUnpublishedChanges: 'Vymazat nepublikované změny', - deleteUnpublishedEntry: 'Vymazat nepublikovaný záznam', - deletePublishedEntry: 'Vymazat publikovaný záznam', - deleteEntry: 'Vymazat záznam', + deleteUnpublishedEntry: 'Vymazat nepublikovanou položku', + deletePublishedEntry: 'Vymazat publikovanou položku', + deleteEntry: 'Vymazat položku', saving: 'Ukládání…', save: 'Uložit', + statusInfoTooltipDraft: + 'Položka je ve stavu konceptu. Po dokončení úprav ji označte stavem ‚V revizi‘.', + statusInfoTooltipInReview: + 'Položka je označena jako připravená k revizi, žádná další akce není třeba. Můžete ovšem provádět další změny, zatímco probíhá revize.', deleting: 'Vymazávání…', updating: 'Aktualizace…', - status: 'Status: %{status}', + status: 'Stav: %{status}', backCollection: ' Píšete v kolekci %{collectionLabel}', unsavedChanges: 'Neuložené změny', changesSaved: 'Změny uloženy', @@ -164,19 +171,25 @@ const cs = { }, image: { choose: 'Vyberte obrázek', + chooseMultiple: 'Vyberte obrázky', chooseUrl: 'Přidat z URL', replaceUrl: 'Nahradit z URL', promptUrl: 'Zadejte URL obrázku', chooseDifferent: 'Vyberte jiný obrázek', + addMore: 'Přidat další obrázky', remove: 'Odstranit obrázek', + removeAll: 'Odstranit všechny obrázky', }, file: { choose: 'Vyberte soubor', chooseUrl: 'Přidat z URL', + chooseMultiple: 'Vyberte soubory', replaceUrl: 'Nahradit z URL', promptUrl: 'Zadejte URL souboru', chooseDifferent: 'Vyberte jiný soubor', + addMore: 'Přidat další soubory', remove: 'Odebrat soubor', + removeAll: 'Odstranit všechny soubory', }, unknownControl: { noControl: "Žádné ovládání pro widget '%{widget}'.", @@ -196,6 +209,10 @@ const cs = { now: 'Teď', clear: 'Vymazat', }, + list: { + add: 'Přidat', + addType: 'Přidat', + }, }, }, mediaLibrary: { @@ -249,18 +266,18 @@ const cs = { logOut: 'Odhlásit', }, toast: { - onFailToLoadEntries: 'Chyba při načítání záznamu: %{details}', + onFailToLoadEntries: 'Chyba při načítání položky: %{details}', onFailToLoadDeployPreview: 'Chyba při načítání náhledu: %{details}', - onFailToPersist: 'Chyba při ukládání záznamu: %{details}', - onFailToDelete: 'Chyba při vymazávání záznamu: %{details}', - onFailToUpdateStatus: 'Chyba při změně stavu záznamu: %{details}', + onFailToPersist: 'Chyba při ukládání položky: %{details}', + onFailToDelete: 'Chyba při vymazávání položky: %{details}', + onFailToUpdateStatus: 'Chyba při změně stavu položky: %{details}', missingRequiredField: 'Vynechali jste povinné pole. Prosím vyplňte ho.', - entrySaved: 'Záznam uložen', - entryPublished: 'Záznam publikován', - entryUnpublished: 'Publikování záznamu zrušeno', - onFailToPublishEntry: 'Chyba při publikování záznamu: %{details}', - onFailToUnpublishEntry: 'Chyba při rušení publikování záznamu: %{details}', - entryUpdated: 'Stav záznamu byl změněn', + entrySaved: 'Položka uložena', + entryPublished: 'Položka publikována', + entryUnpublished: 'Publikování položky zrušeno', + onFailToPublishEntry: 'Chyba při publikování položky: %{details}', + onFailToUnpublishEntry: 'Chyba při rušení publikování položky: %{details}', + entryUpdated: 'Stav položky byl změněn', onDeleteUnpublishedChanges: 'Nepublikované změny byly smazány', onFailToAuth: '%{details}', onLoggedOut: 'Byli jste odhlášeni, prosím zálohujte všechna data a znova se přihlašte', @@ -269,11 +286,11 @@ const cs = { }, workflow: { workflow: { - loading: 'Načítání workflow záznamů', - workflowHeading: 'Schvalovací Workflow', - newPost: 'Nový post', + loading: 'Načítání položek', + workflowHeading: 'Schvalovací proces', + newPost: 'Nová položka', description: - '%{smart_count} záznam čeká na schválení, %{readyCount} připraven k publikaci. |||| %{smart_count} čeká na schválení, %{readyCount} připraveno k publikaci. ', + '%{smart_count} čeká na schválení, %{readyCount} připraven k publikaci. |||| %{smart_count} čeká na schválení, %{readyCount} připraveno k publikaci. ', dateFormat: 'MMMM D', }, workflowCard: { @@ -281,19 +298,19 @@ const cs = { lastChangeNoAuthor: '%{date}', lastChangeNoDate: '%{author}', deleteChanges: 'Vymazat změny', - deleteNewEntry: 'Vymazat nový záznam', + deleteNewEntry: 'Vymazat novou položku', publishChanges: 'Publikovat změny', - publishNewEntry: 'Publikovat nový záznam', + publishNewEntry: 'Publikovat novou položku', }, workflowList: { - onDeleteEntry: 'Opravdu chcete smazat tento záznam?', + onDeleteEntry: 'Opravdu chcete smazat tuto položku?', onPublishingNotReadyEntry: - 'Pouze položky se statusem "Připraveno" mohou být publikováno. Pro umožnění publikace musíte přetáhnout kartu do sloupce "Připraveno"', - onPublishEntry: 'Opravdu chcete publikovat tento záznam?', + 'Pouze položky se stavem "Připraveno" mohou být publikovány. Pro umožnění publikace musíte přetáhnout kartu do sloupce "Připraveno"', + onPublishEntry: 'Opravdu chcete publikovat tuto položku?', draftHeader: 'Koncepty', inReviewHeader: 'V revizi', readyHeader: 'Připraveno', - currentEntries: '%{smart_count} záznam |||| %{smart_count} záznamů', + currentEntries: '%{smart_count} položka |||| %{smart_count} položek', }, }, }; diff --git a/packages/decap-cms-locales/src/index.js b/packages/decap-cms-locales/src/index.js index 493163a0c0d0..1b8529cc5efa 100644 --- a/packages/decap-cms-locales/src/index.js +++ b/packages/decap-cms-locales/src/index.js @@ -28,6 +28,7 @@ export { default as ko } from './ko'; export { default as hr } from './hr'; export { default as sl } from './sl'; export { default as bg } from './bg'; +export { default as mk } from './mk'; export { default as zh_Hans } from './zh_Hans'; export { default as he } from './he'; export { default as ua } from './ua'; diff --git a/packages/decap-cms-locales/src/mk/index.js b/packages/decap-cms-locales/src/mk/index.js new file mode 100644 index 000000000000..a7bdd0c8e9b7 --- /dev/null +++ b/packages/decap-cms-locales/src/mk/index.js @@ -0,0 +1,321 @@ +const mk = { + auth: { + login: 'Најава', + loggingIn: 'Се најавува...', + loginWithNetlifyIdentity: 'Најава со Netlify Identity', + loginWithAzure: 'Најава со Azure', + loginWithBitbucket: 'Најава со Bitbucket', + loginWithGitHub: 'Најава со GitHub', + loginWithGitLab: 'Најава со GitLab', + loginWithGitea: 'Најава со Gitea', + errors: { + email: 'Внесете ја вашата е-пошта.', + password: 'Внесете ја вашата лозинка.', + identitySettings: + 'Нема пристап до поставките. Ако користите git-gateway, не заборавајте да ја активирате услугата Identity и Git Gateway.', + }, + }, + app: { + header: { + content: 'Содржина', + workflow: 'Работен процес', + media: 'Медиумски ресурси', + quickAdd: 'Брзо додавање', + }, + app: { + errorHeader: 'Грешка при вчитувањето на CMS конфигурацијата', + configErrors: 'Грешки во конфигурацијата', + checkConfigYml: 'Проверете ја вашата config.yml датотека.', + loadingConfig: 'Се вчитува конфигурацијата...', + waitingBackend: 'Се чека одговор од серверот...', + }, + notFoundPage: { + header: 'Не е пронајдено', + }, + }, + collection: { + sidebar: { + collections: 'Колекции', + allCollections: 'Сите колекции', + searchAll: 'Пребарај секаде', + searchIn: 'Пребарај во', + }, + collectionTop: { + sortBy: 'Подреди според', + viewAs: 'Прикажи како', + newButton: 'Креирај %{collectionLabel}', + ascending: 'Растечки', + descending: 'Опаѓачки', + searchResults: 'Резултати од пребарувањето за "%{searchTerm}"', + searchResultsInCollection: 'Резултати од пребарувањето за "%{searchTerm}" во %{collection}', + filterBy: 'Филтрирај по', + groupBy: 'Групирај по', + }, + entries: { + loadingEntries: 'Се вчитуваат записи...', + cachingEntries: 'Се кешираат записи...', + longerLoading: 'Ова може да потрае неколку минути', + noEntries: 'Нема записи', + }, + groups: { + other: 'Други', + negateLabel: 'Не %{label}', + }, + defaultFields: { + author: { + label: 'Автор', + }, + updatedOn: { + label: 'Ажурирано на', + }, + }, + }, + editor: { + editorControl: { + field: { + optional: 'незадолжително', + }, + }, + editorControlPane: { + widget: { + required: '%{fieldLabel} е задолжително.', + regexPattern: '%{fieldLabel} не се совпаѓа со шаблонот: %{pattern}.', + processing: '%{fieldLabel} се обработува.', + range: '%{fieldLabel} мора да биде помеѓу %{minValue} и %{maxValue}.', + min: '%{fieldLabel} мора да биде најмалку %{minValue}.', + max: '%{fieldLabel} мора да биде %{maxValue} или помалку.', + rangeCount: '%{fieldLabel} мора да има помеѓу %{minCount} и %{maxCount} елементи.', + rangeCountExact: '%{fieldLabel} мора да има точно %{count} елементи.', + rangeMin: '%{fieldLabel} мора да има најмалку %{minCount} елементи.', + rangeMax: '%{fieldLabel} мора да има %{maxCount} или помалку елементи.', + invalidPath: `'%{path}' не е валидна патека`, + pathExists: `Патеката '%{path}' веќе постои`, + }, + i18n: { + writingInLocale: 'Пишување на %{locale}', + copyFromLocale: 'Пополнете од друг јазик', + copyFromLocaleConfirm: + 'Дали сакате да ги пополните податоците од јазикот %{locale}?\nСите постоечки содржини ќе бидат презапишани.', + }, + }, + editor: { + onLeavePage: 'Дали сте сигурни дека сакате да ја напуштите страницата?', + onUpdatingWithUnsavedChanges: + 'Имате незачувани промени, зачувајте пред ажурирање на статусот.', + onPublishingNotReady: 'Ажурирајте го статусот на "Спремно" пред објавување.', + onPublishingWithUnsavedChanges: 'Имате незачувани промени, зачувајте пред објавување.', + onPublishing: 'Дали сте сигурни дека сакате да го објавите овој запис?', + onUnpublishing: 'Дали сте сигурни дека сакате да го откажете објавувањето на овој запис?', + onDeleteWithUnsavedChanges: + 'Дали сте сигурни дека сакате да го избришете овој објавен запис и незачуваните промени од тековната сесија?', + onDeletePublishedEntry: 'Дали сте сигурни дека сакате да го избришете овој објавен запис?', + onDeleteUnpublishedChangesWithUnsavedChanges: + 'Ова ќе ги избрише сите необјавени промени во овој запис и незачуваните промени од тековната сесија. Дали сакате да продолжите?', + onDeleteUnpublishedChanges: + 'Сите необјавени промени ќе бидат избришани. Дали сакате да продолжите?', + loadingEntry: 'Се вчитува запис...', + confirmLoadBackup: + 'Се пронајде локална резервна копија за овој запис. Дали сакате да ја користите?', + }, + editorInterface: { + toggleI18n: 'Вклучи i18n', + togglePreview: 'Вклучи преглед', + toggleScrollSync: 'Синхронизирај скрол', + }, + editorToolbar: { + publishing: 'Се објавува...', + publish: 'Објави', + published: 'Објавен', + unpublish: 'Откажи објавување', + duplicate: 'Дуплирај', + unpublishing: 'Откажување објава...', + publishAndCreateNew: 'Објави и креирај нов', + publishAndDuplicate: 'Објави и дуплирај', + deleteUnpublishedChanges: 'Избриши необјавени промени', + deleteUnpublishedEntry: 'Избриши необјавен запис', + deletePublishedEntry: 'Избриши објавен запис', + deleteEntry: 'Избриши запис', + saving: 'Се зачувува...', + save: 'Зачувај', + statusInfoTooltipDraft: + 'Статусот на записот е поставен како нацрт. За да го финализирате и поднесете за преглед, поставете го статусот "Во рецензија".', + statusInfoTooltipInReview: + 'Записот е во рецензија, не се потребни дополнителни акции. Сепак, можете да направите дополнителни промени додека е во рецензија.', + deleting: 'Се брише...', + updating: 'Се ажурира...', + status: 'Статус: %{status}', + backCollection: ' Запишување во колекцијата %{collectionLabel}', + unsavedChanges: 'Незачувани промени', + changesSaved: 'Промените се зачувани', + draft: 'Нацрт', + inReview: 'Во рецензија', + ready: 'Спремно', + publishNow: 'Објави сега', + deployPreviewPendingButtonLabel: 'Проверете ја верзијата во рецензија', + deployPreviewButtonLabel: 'Прикажи рецензија', + deployButtonLabel: 'Прикажи во живо', + }, + editorWidgets: { + markdown: { + bold: 'Задебелено', + italic: 'Косо', + code: 'Код', + link: 'Линк', + linkPrompt: 'Внесете URL за линкот', + headings: 'Наслови', + quote: 'Цитат', + bulletedList: 'Список со булети', + numberedList: 'Нумериран список', + addComponent: 'Додај компонента', + richText: 'Форматиран текст', + markdown: 'Markdown', + }, + image: { + choose: 'Избери слика', + chooseMultiple: 'Избери повеќе слики', + chooseUrl: 'Вметни од URL', + replaceUrl: 'Замени со URL', + promptUrl: 'Внесете URL за сликата', + chooseDifferent: 'Избери друга слика', + addMore: 'Додај повеќе слики', + remove: 'Отстрани слика', + removeAll: 'Отстрани ги сите слики', + }, + file: { + choose: 'Избери датотека', + chooseUrl: 'Вметни од URL', + chooseMultiple: 'Избери повеќе датотеки', + replaceUrl: 'Замени со URL', + promptUrl: 'Внесете URL за датотеката', + chooseDifferent: 'Избери друга датотека', + addMore: 'Додај повеќе датотеки', + remove: 'Отстрани датотека', + removeAll: 'Отстрани ги сите датотеки', + }, + unknownControl: { + noControl: "Нема контрола за виџетот '%{widget}'.", + }, + unknownPreview: { + noPreview: "Нема преглед за виџетот '%{widget}'.", + }, + headingOptions: { + headingOne: 'Наслов 1', + headingTwo: 'Наслов 2', + headingThree: 'Наслов 3', + headingFour: 'Наслов 4', + headingFive: 'Наслов 5', + headingSix: 'Наслов 6', + }, + datetime: { + now: 'Сега', + clear: 'Исчисти', + }, + list: { + add: 'Додај %{item}', + addType: 'Додај %{item}', + }, + }, + }, + mediaLibrary: { + mediaLibraryCard: { + draft: 'Нацрт', + copy: 'Копирај', + copyUrl: 'Копирај URL', + copyPath: 'Копирај патека', + copyName: 'Копирај име', + copied: 'Копирано', + }, + mediaLibrary: { + onDelete: 'Дали сте сигурни дека сакате да го избришете избраниот медиум?', + fileTooLarge: + 'Датотеката е преголема.\nКонфигурацијата не дозволува датотеки поголеми од %{size} kB.', + }, + mediaLibraryModal: { + loading: 'Се вчитува...', + noResults: 'Нема резултати.', + noAssetsFound: 'Не се пронајдени ресурси.', + noImagesFound: 'Не се пронајдени слики.', + private: 'Приватно', + images: 'Слики', + mediaAssets: 'Медиумски ресурси', + search: 'Пребарај...', + uploading: 'Се прикачува...', + upload: 'Прикачи', + download: 'Преземи', + deleting: 'Се брише...', + deleteSelected: 'Избриши ги селектираните', + chooseSelected: 'Избери од селектираните', + }, + }, + ui: { + default: { + goBackToSite: 'Назад кон сајтот', + }, + errorBoundary: { + title: 'Грешка', + details: 'Се случи грешка - ве молиме ', + reportIt: 'пријавете проблем на GitHub.', + detailsHeading: 'Детали', + privacyWarning: + 'При отворање на тикет, автоматски се пополнува со порака за грешка и податоци за дебагирање.\nПроверете дали податоците се точни и отстранете ги доверливите информации ако ги има.', + recoveredEntry: { + heading: 'Повратен документ', + warning: 'Зачувајте го ова некаде пред да ја напуштите страницата!', + copyButtonLabel: 'Копирај во клипборд', + }, + }, + settingsDropdown: { + logOut: 'Одјави се', + }, + toast: { + onFailToLoadEntries: 'Неуспешно вчитување на запис: %{details}', + onFailToLoadDeployPreview: 'Неуспешно вчитување на преглед: %{details}', + onFailToPersist: 'Неуспешно зачувување на запис: %{details}', + onFailToDelete: 'Неуспешно бришење на запис: %{details}', + onFailToUpdateStatus: 'Неуспешно ажурирање на статусот: %{details}', + missingRequiredField: + 'Пропуштивте задолжително поле. Ве молиме пополнете го пред да зачувате.', + entrySaved: 'Записот е зачуван', + entryPublished: 'Записот е објавен', + entryUnpublished: 'Записот е необјавен', + onFailToPublishEntry: 'Неуспешно објавување: %{details}', + onFailToUnpublishEntry: 'Неуспешно откажување објавување: %{details}', + entryUpdated: 'Статусот на записот е ажуриран', + onDeleteUnpublishedChanges: 'Необјавените промени се избришани', + onFailToAuth: '%{details}', + onLoggedOut: 'Одјавени сте, зачувајте ги податоците и најавете се повторно.', + onBackendDown: 'Серверот има прекин. Видете %{details} за повеќе информации.', + }, + }, + workflow: { + workflow: { + loading: 'Се вчитуваат записи за уредувачкиот работен процес', + workflowHeading: 'Уредувачки работен процес', + newPost: 'Нова објава', + description: + '%{smart_count} запис чека за рецензија, %{readyCount} подготвен за објава. |||| %{smart_count} записи чекаат за рецензија, %{readyCount} подготвени за објава.', + dateFormat: 'MMMM D', + }, + workflowCard: { + lastChange: '%{date} од %{author}', + lastChangeNoAuthor: '%{date}', + lastChangeNoDate: 'од %{author}', + deleteChanges: 'Избриши промени', + deleteNewEntry: 'Избриши нов запис', + publishChanges: 'Објави промени', + publishNewEntry: 'Објави нов запис', + }, + workflowList: { + onDeleteEntry: 'Дали сте сигурни дека сакате да го избришете овој запис?', + onPublishingNotReadyEntry: + 'Само записи со статус "Спремно" можат да се објават. Повлечете ја картичката во колоната "Спремно" за да го овозможите објавувањето.', + onPublishEntry: 'Дали сте сигурни дека сакате да го објавите овој запис?', + draftHeader: 'Нацрти', + inReviewHeader: 'Во рецензија', + readyHeader: 'Спремно', + currentEntries: '%{smart_count} запис |||| %{smart_count} записи', + }, + }, +}; + +export default mk; diff --git a/packages/decap-cms-widget-object/src/ObjectControl.js b/packages/decap-cms-widget-object/src/ObjectControl.js index 9a74e1b8290b..2f974aabdcc9 100644 --- a/packages/decap-cms-widget-object/src/ObjectControl.js +++ b/packages/decap-cms-widget-object/src/ObjectControl.js @@ -89,6 +89,7 @@ export default class ObjectControl extends React.Component { isFieldHidden, locale, collapsed, + forID, } = this.props; if (field.get('widget') === 'hidden') { @@ -112,7 +113,7 @@ export default class ObjectControl extends React.Component { onValidate={onValidateObject} processControlRef={controlRef && controlRef.bind(this)} controlRef={controlRef} - parentIds={parentIds} + parentIds={[...parentIds, forID]} isDisabled={isDuplicate} isHidden={isHidden} isFieldDuplicate={isFieldDuplicate}