@strapi/i18n 5.43.0 → 5.44.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -43,6 +43,7 @@ var yup__namespace = /*#__PURE__*/_interopNamespaceDefault(yup);
43
43
 
44
44
  function __variableDynamicImportRuntime1__(path) {
45
45
  switch (path) {
46
+ case './translations/cs.json': return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespaceDefaultOnly(require('./translations/cs.json.js')); });
46
47
  case './translations/de.json': return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespaceDefaultOnly(require('./translations/de.json.js')); });
47
48
  case './translations/dk.json': return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespaceDefaultOnly(require('./translations/dk.json.js')); });
48
49
  case './translations/en.json': return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespaceDefaultOnly(require('./translations/en.json.js')); });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../admin/src/index.ts"],"sourcesContent":["import get from 'lodash/get';\nimport * as yup from 'yup';\n\nimport { CheckboxConfirmation } from './components/CheckboxConfirmation';\nimport {\n BulkLocalePublishAction,\n BulkLocaleUnpublishAction,\n DeleteLocaleAction,\n LocalePickerAction,\n FillFromAnotherLocaleAction,\n AITranslationStatusAction,\n} from './components/CMHeaderActions';\nimport {\n DeleteModalAdditionalInfo,\n PublishModalAdditionalInfo,\n UnpublishModalAdditionalInfo,\n} from './components/CMListViewModalsAdditionalInformation';\nimport { LocalePicker } from './components/LocalePicker';\nimport { PERMISSIONS } from './constants';\nimport { mutateEditViewHook } from './contentManagerHooks/editView';\nimport { addColumnToTableHook } from './contentManagerHooks/listView';\nimport { addLocaleToReleasesHook } from './contentReleasesHooks/releaseDetailsView';\nimport { extendCTBAttributeInitialDataMiddleware } from './middlewares/extendCTBAttributeInitialData';\nimport { extendCTBInitialDataMiddleware } from './middlewares/extendCTBInitialData';\nimport { localeMiddleware } from './middlewares/rbac-middleware';\nimport { pluginId } from './pluginId';\nimport { i18nApi } from './services/api';\nimport { LOCALIZED_FIELDS } from './utils/fields';\nimport { getTranslation } from './utils/getTranslation';\nimport { prefixPluginTranslations } from './utils/prefixPluginTranslations';\nimport { mutateCTBContentTypeSchema } from './utils/schemas';\n\nimport type { DocumentActionComponent } from '@strapi/content-manager/strapi-admin';\n\n// eslint-disable-next-line import/no-default-export\nexport default {\n register(app: any) {\n app.addMiddlewares([extendCTBAttributeInitialDataMiddleware, extendCTBInitialDataMiddleware]);\n app.addMiddlewares([() => i18nApi.middleware]);\n app.addReducers({\n [i18nApi.reducerPath]: i18nApi.reducer,\n });\n app.addRBACMiddleware([localeMiddleware]);\n app.registerPlugin({\n id: pluginId,\n name: pluginId,\n });\n },\n bootstrap(app: any) {\n // // Hook that adds a column into the CM's LV table\n app.registerHook('Admin/CM/pages/ListView/inject-column-in-table', addColumnToTableHook);\n app.registerHook('Admin/CM/pages/EditView/mutate-edit-view-layout', mutateEditViewHook);\n // Hooks that checks if the locale is present in the release\n app.registerHook(\n 'ContentReleases/pages/ReleaseDetails/add-locale-in-releases',\n addLocaleToReleasesHook\n );\n\n // Add the settings link\n app.addSettingsLink('global', {\n intlLabel: {\n id: getTranslation('plugin.name'),\n defaultMessage: 'Internationalization',\n },\n id: 'internationalization',\n to: 'internationalization',\n Component: () =>\n import('./pages/SettingsPage').then((mod) => ({ default: mod.ProtectedSettingsPage })),\n permissions: PERMISSIONS.accessMain,\n });\n\n const contentManager = app.getPlugin('content-manager');\n\n contentManager.apis.addDocumentHeaderAction([\n AITranslationStatusAction,\n LocalePickerAction,\n FillFromAnotherLocaleAction,\n ]);\n contentManager.apis.addDocumentAction((actions: DocumentActionComponent[]) => {\n const indexOfDeleteAction = actions.findIndex((action) => action.type === 'delete');\n actions.splice(indexOfDeleteAction, 0, DeleteLocaleAction);\n return actions;\n });\n\n contentManager.apis.addDocumentAction((actions: DocumentActionComponent[]) => {\n // When enabled the bulk locale publish action should be the first action\n // in 'More Document Actions' and therefore the third action in the array\n actions.splice(2, 0, BulkLocalePublishAction);\n actions.splice(5, 0, BulkLocaleUnpublishAction);\n return actions;\n });\n\n contentManager.injectComponent('listView', 'actions', {\n name: 'i18n-locale-filter',\n Component: LocalePicker,\n });\n\n contentManager.injectComponent('listView', 'publishModalAdditionalInfos', {\n name: 'i18n-publish-bullets-in-modal',\n Component: PublishModalAdditionalInfo,\n });\n\n contentManager.injectComponent('listView', 'unpublishModalAdditionalInfos', {\n name: 'i18n-unpublish-bullets-in-modal',\n Component: UnpublishModalAdditionalInfo,\n });\n\n contentManager.injectComponent('listView', 'deleteModalAdditionalInfos', {\n name: 'i18n-delete-bullets-in-modal',\n Component: DeleteModalAdditionalInfo,\n });\n\n const ctbPlugin = app.getPlugin('content-type-builder');\n\n if (ctbPlugin) {\n const ctbFormsAPI = ctbPlugin.apis.forms;\n ctbFormsAPI.addContentTypeSchemaMutation(mutateCTBContentTypeSchema);\n ctbFormsAPI.components.add({ id: 'checkboxConfirmation', component: CheckboxConfirmation });\n\n ctbFormsAPI.extendContentType({\n validator: () => ({\n i18n: yup.object().shape({\n localized: yup.bool(),\n }),\n }),\n form: {\n advanced() {\n return [\n {\n name: 'pluginOptions.i18n.localized',\n description: {\n id: getTranslation('plugin.schema.i18n.localized.description-content-type'),\n defaultMessage: 'Allows translating an entry into different languages',\n },\n type: 'checkboxConfirmation',\n intlLabel: {\n id: getTranslation('plugin.schema.i18n.localized.label-content-type'),\n defaultMessage: 'Localization',\n },\n },\n ];\n },\n },\n });\n\n ctbFormsAPI.extendFields(LOCALIZED_FIELDS, {\n form: {\n advanced({ contentTypeSchema, forTarget, type, step }: any) {\n if (forTarget !== 'contentType') {\n return [];\n }\n\n const hasI18nEnabled = get(\n contentTypeSchema,\n ['pluginOptions', 'i18n', 'localized'],\n false\n );\n\n if (!hasI18nEnabled) {\n return [];\n }\n\n if (type === 'component' && step === '1') {\n return [];\n }\n\n return [\n {\n name: 'pluginOptions.i18n.localized',\n description: {\n id: getTranslation('plugin.schema.i18n.localized.description-field'),\n defaultMessage: 'The field can have different values in each locale',\n },\n type: 'checkbox',\n intlLabel: {\n id: getTranslation('plugin.schema.i18n.localized.label-field'),\n defaultMessage: 'Enable localization for this field',\n },\n },\n ];\n },\n },\n });\n }\n },\n async registerTrads({ locales }: { locales: string[] }) {\n const importedTrads = await Promise.all(\n locales.map((locale) => {\n return import(`./translations/${locale}.json`)\n .then(({ default: data }) => {\n return {\n data: prefixPluginTranslations(data, pluginId),\n locale,\n };\n })\n .catch(() => {\n return {\n data: {},\n locale,\n };\n });\n })\n );\n\n return Promise.resolve(importedTrads);\n },\n};\n"],"names":["register","app","addMiddlewares","extendCTBAttributeInitialDataMiddleware","extendCTBInitialDataMiddleware","i18nApi","middleware","addReducers","reducerPath","reducer","addRBACMiddleware","localeMiddleware","registerPlugin","id","pluginId","name","bootstrap","registerHook","addColumnToTableHook","mutateEditViewHook","addLocaleToReleasesHook","addSettingsLink","intlLabel","getTranslation","defaultMessage","to","Component","then","mod","default","ProtectedSettingsPage","permissions","PERMISSIONS","accessMain","contentManager","getPlugin","apis","addDocumentHeaderAction","AITranslationStatusAction","LocalePickerAction","FillFromAnotherLocaleAction","addDocumentAction","actions","indexOfDeleteAction","findIndex","action","type","splice","DeleteLocaleAction","BulkLocalePublishAction","BulkLocaleUnpublishAction","injectComponent","LocalePicker","PublishModalAdditionalInfo","UnpublishModalAdditionalInfo","DeleteModalAdditionalInfo","ctbPlugin","ctbFormsAPI","forms","addContentTypeSchemaMutation","mutateCTBContentTypeSchema","components","add","component","CheckboxConfirmation","extendContentType","validator","i18n","yup","object","shape","localized","bool","form","advanced","description","extendFields","LOCALIZED_FIELDS","contentTypeSchema","forTarget","step","hasI18nEnabled","get","registerTrads","locales","importedTrads","Promise","all","map","locale","data","prefixPluginTranslations","catch","resolve"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../admin/src/index.ts"],"sourcesContent":["import get from 'lodash/get';\nimport * as yup from 'yup';\n\nimport { CheckboxConfirmation } from './components/CheckboxConfirmation';\nimport {\n BulkLocalePublishAction,\n BulkLocaleUnpublishAction,\n DeleteLocaleAction,\n LocalePickerAction,\n FillFromAnotherLocaleAction,\n AITranslationStatusAction,\n} from './components/CMHeaderActions';\nimport {\n DeleteModalAdditionalInfo,\n PublishModalAdditionalInfo,\n UnpublishModalAdditionalInfo,\n} from './components/CMListViewModalsAdditionalInformation';\nimport { LocalePicker } from './components/LocalePicker';\nimport { PERMISSIONS } from './constants';\nimport { mutateEditViewHook } from './contentManagerHooks/editView';\nimport { addColumnToTableHook } from './contentManagerHooks/listView';\nimport { addLocaleToReleasesHook } from './contentReleasesHooks/releaseDetailsView';\nimport { extendCTBAttributeInitialDataMiddleware } from './middlewares/extendCTBAttributeInitialData';\nimport { extendCTBInitialDataMiddleware } from './middlewares/extendCTBInitialData';\nimport { localeMiddleware } from './middlewares/rbac-middleware';\nimport { pluginId } from './pluginId';\nimport { i18nApi } from './services/api';\nimport { LOCALIZED_FIELDS } from './utils/fields';\nimport { getTranslation } from './utils/getTranslation';\nimport { prefixPluginTranslations } from './utils/prefixPluginTranslations';\nimport { mutateCTBContentTypeSchema } from './utils/schemas';\n\nimport type { DocumentActionComponent } from '@strapi/content-manager/strapi-admin';\n\n// eslint-disable-next-line import/no-default-export\nexport default {\n register(app: any) {\n app.addMiddlewares([extendCTBAttributeInitialDataMiddleware, extendCTBInitialDataMiddleware]);\n app.addMiddlewares([() => i18nApi.middleware]);\n app.addReducers({\n [i18nApi.reducerPath]: i18nApi.reducer,\n });\n app.addRBACMiddleware([localeMiddleware]);\n app.registerPlugin({\n id: pluginId,\n name: pluginId,\n });\n },\n bootstrap(app: any) {\n // // Hook that adds a column into the CM's LV table\n app.registerHook('Admin/CM/pages/ListView/inject-column-in-table', addColumnToTableHook);\n app.registerHook('Admin/CM/pages/EditView/mutate-edit-view-layout', mutateEditViewHook);\n // Hooks that checks if the locale is present in the release\n app.registerHook(\n 'ContentReleases/pages/ReleaseDetails/add-locale-in-releases',\n addLocaleToReleasesHook\n );\n\n // Add the settings link\n app.addSettingsLink('global', {\n intlLabel: {\n id: getTranslation('plugin.name'),\n defaultMessage: 'Internationalization',\n },\n id: 'internationalization',\n to: 'internationalization',\n Component: () =>\n import('./pages/SettingsPage').then((mod) => ({ default: mod.ProtectedSettingsPage })),\n permissions: PERMISSIONS.accessMain,\n });\n\n const contentManager = app.getPlugin('content-manager');\n\n contentManager.apis.addDocumentHeaderAction([\n AITranslationStatusAction,\n LocalePickerAction,\n FillFromAnotherLocaleAction,\n ]);\n contentManager.apis.addDocumentAction((actions: DocumentActionComponent[]) => {\n const indexOfDeleteAction = actions.findIndex((action) => action.type === 'delete');\n actions.splice(indexOfDeleteAction, 0, DeleteLocaleAction);\n return actions;\n });\n\n contentManager.apis.addDocumentAction((actions: DocumentActionComponent[]) => {\n // When enabled the bulk locale publish action should be the first action\n // in 'More Document Actions' and therefore the third action in the array\n actions.splice(2, 0, BulkLocalePublishAction);\n actions.splice(5, 0, BulkLocaleUnpublishAction);\n return actions;\n });\n\n contentManager.injectComponent('listView', 'actions', {\n name: 'i18n-locale-filter',\n Component: LocalePicker,\n });\n\n contentManager.injectComponent('listView', 'publishModalAdditionalInfos', {\n name: 'i18n-publish-bullets-in-modal',\n Component: PublishModalAdditionalInfo,\n });\n\n contentManager.injectComponent('listView', 'unpublishModalAdditionalInfos', {\n name: 'i18n-unpublish-bullets-in-modal',\n Component: UnpublishModalAdditionalInfo,\n });\n\n contentManager.injectComponent('listView', 'deleteModalAdditionalInfos', {\n name: 'i18n-delete-bullets-in-modal',\n Component: DeleteModalAdditionalInfo,\n });\n\n const ctbPlugin = app.getPlugin('content-type-builder');\n\n if (ctbPlugin) {\n const ctbFormsAPI = ctbPlugin.apis.forms;\n ctbFormsAPI.addContentTypeSchemaMutation(mutateCTBContentTypeSchema);\n ctbFormsAPI.components.add({ id: 'checkboxConfirmation', component: CheckboxConfirmation });\n\n ctbFormsAPI.extendContentType({\n validator: () => ({\n i18n: yup.object().shape({\n localized: yup.bool(),\n }),\n }),\n form: {\n advanced() {\n return [\n {\n name: 'pluginOptions.i18n.localized',\n description: {\n id: getTranslation('plugin.schema.i18n.localized.description-content-type'),\n defaultMessage: 'Allows translating an entry into different languages',\n },\n type: 'checkboxConfirmation',\n intlLabel: {\n id: getTranslation('plugin.schema.i18n.localized.label-content-type'),\n defaultMessage: 'Localization',\n },\n },\n ];\n },\n },\n });\n\n ctbFormsAPI.extendFields(LOCALIZED_FIELDS, {\n form: {\n advanced({ contentTypeSchema, forTarget, type, step }: any) {\n if (forTarget !== 'contentType') {\n return [];\n }\n\n const hasI18nEnabled = get(\n contentTypeSchema,\n ['pluginOptions', 'i18n', 'localized'],\n false\n );\n\n if (!hasI18nEnabled) {\n return [];\n }\n\n if (type === 'component' && step === '1') {\n return [];\n }\n\n return [\n {\n name: 'pluginOptions.i18n.localized',\n description: {\n id: getTranslation('plugin.schema.i18n.localized.description-field'),\n defaultMessage: 'The field can have different values in each locale',\n },\n type: 'checkbox',\n intlLabel: {\n id: getTranslation('plugin.schema.i18n.localized.label-field'),\n defaultMessage: 'Enable localization for this field',\n },\n },\n ];\n },\n },\n });\n }\n },\n async registerTrads({ locales }: { locales: string[] }) {\n const importedTrads = await Promise.all(\n locales.map((locale) => {\n return import(`./translations/${locale}.json`)\n .then(({ default: data }) => {\n return {\n data: prefixPluginTranslations(data, pluginId),\n locale,\n };\n })\n .catch(() => {\n return {\n data: {},\n locale,\n };\n });\n })\n );\n\n return Promise.resolve(importedTrads);\n },\n};\n"],"names":["register","app","addMiddlewares","extendCTBAttributeInitialDataMiddleware","extendCTBInitialDataMiddleware","i18nApi","middleware","addReducers","reducerPath","reducer","addRBACMiddleware","localeMiddleware","registerPlugin","id","pluginId","name","bootstrap","registerHook","addColumnToTableHook","mutateEditViewHook","addLocaleToReleasesHook","addSettingsLink","intlLabel","getTranslation","defaultMessage","to","Component","then","mod","default","ProtectedSettingsPage","permissions","PERMISSIONS","accessMain","contentManager","getPlugin","apis","addDocumentHeaderAction","AITranslationStatusAction","LocalePickerAction","FillFromAnotherLocaleAction","addDocumentAction","actions","indexOfDeleteAction","findIndex","action","type","splice","DeleteLocaleAction","BulkLocalePublishAction","BulkLocaleUnpublishAction","injectComponent","LocalePicker","PublishModalAdditionalInfo","UnpublishModalAdditionalInfo","DeleteModalAdditionalInfo","ctbPlugin","ctbFormsAPI","forms","addContentTypeSchemaMutation","mutateCTBContentTypeSchema","components","add","component","CheckboxConfirmation","extendContentType","validator","i18n","yup","object","shape","localized","bool","form","advanced","description","extendFields","LOCALIZED_FIELDS","contentTypeSchema","forTarget","step","hasI18nEnabled","get","registerTrads","locales","importedTrads","Promise","all","map","locale","data","prefixPluginTranslations","catch","resolve"],"mappings":"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"}
@@ -20,6 +20,7 @@ import { mutateCTBContentTypeSchema } from './utils/schemas.mjs';
20
20
 
21
21
  function __variableDynamicImportRuntime1__(path) {
22
22
  switch (path) {
23
+ case './translations/cs.json': return import('./translations/cs.json.mjs');
23
24
  case './translations/de.json': return import('./translations/de.json.mjs');
24
25
  case './translations/dk.json': return import('./translations/dk.json.mjs');
25
26
  case './translations/en.json': return import('./translations/en.json.mjs');
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../admin/src/index.ts"],"sourcesContent":["import get from 'lodash/get';\nimport * as yup from 'yup';\n\nimport { CheckboxConfirmation } from './components/CheckboxConfirmation';\nimport {\n BulkLocalePublishAction,\n BulkLocaleUnpublishAction,\n DeleteLocaleAction,\n LocalePickerAction,\n FillFromAnotherLocaleAction,\n AITranslationStatusAction,\n} from './components/CMHeaderActions';\nimport {\n DeleteModalAdditionalInfo,\n PublishModalAdditionalInfo,\n UnpublishModalAdditionalInfo,\n} from './components/CMListViewModalsAdditionalInformation';\nimport { LocalePicker } from './components/LocalePicker';\nimport { PERMISSIONS } from './constants';\nimport { mutateEditViewHook } from './contentManagerHooks/editView';\nimport { addColumnToTableHook } from './contentManagerHooks/listView';\nimport { addLocaleToReleasesHook } from './contentReleasesHooks/releaseDetailsView';\nimport { extendCTBAttributeInitialDataMiddleware } from './middlewares/extendCTBAttributeInitialData';\nimport { extendCTBInitialDataMiddleware } from './middlewares/extendCTBInitialData';\nimport { localeMiddleware } from './middlewares/rbac-middleware';\nimport { pluginId } from './pluginId';\nimport { i18nApi } from './services/api';\nimport { LOCALIZED_FIELDS } from './utils/fields';\nimport { getTranslation } from './utils/getTranslation';\nimport { prefixPluginTranslations } from './utils/prefixPluginTranslations';\nimport { mutateCTBContentTypeSchema } from './utils/schemas';\n\nimport type { DocumentActionComponent } from '@strapi/content-manager/strapi-admin';\n\n// eslint-disable-next-line import/no-default-export\nexport default {\n register(app: any) {\n app.addMiddlewares([extendCTBAttributeInitialDataMiddleware, extendCTBInitialDataMiddleware]);\n app.addMiddlewares([() => i18nApi.middleware]);\n app.addReducers({\n [i18nApi.reducerPath]: i18nApi.reducer,\n });\n app.addRBACMiddleware([localeMiddleware]);\n app.registerPlugin({\n id: pluginId,\n name: pluginId,\n });\n },\n bootstrap(app: any) {\n // // Hook that adds a column into the CM's LV table\n app.registerHook('Admin/CM/pages/ListView/inject-column-in-table', addColumnToTableHook);\n app.registerHook('Admin/CM/pages/EditView/mutate-edit-view-layout', mutateEditViewHook);\n // Hooks that checks if the locale is present in the release\n app.registerHook(\n 'ContentReleases/pages/ReleaseDetails/add-locale-in-releases',\n addLocaleToReleasesHook\n );\n\n // Add the settings link\n app.addSettingsLink('global', {\n intlLabel: {\n id: getTranslation('plugin.name'),\n defaultMessage: 'Internationalization',\n },\n id: 'internationalization',\n to: 'internationalization',\n Component: () =>\n import('./pages/SettingsPage').then((mod) => ({ default: mod.ProtectedSettingsPage })),\n permissions: PERMISSIONS.accessMain,\n });\n\n const contentManager = app.getPlugin('content-manager');\n\n contentManager.apis.addDocumentHeaderAction([\n AITranslationStatusAction,\n LocalePickerAction,\n FillFromAnotherLocaleAction,\n ]);\n contentManager.apis.addDocumentAction((actions: DocumentActionComponent[]) => {\n const indexOfDeleteAction = actions.findIndex((action) => action.type === 'delete');\n actions.splice(indexOfDeleteAction, 0, DeleteLocaleAction);\n return actions;\n });\n\n contentManager.apis.addDocumentAction((actions: DocumentActionComponent[]) => {\n // When enabled the bulk locale publish action should be the first action\n // in 'More Document Actions' and therefore the third action in the array\n actions.splice(2, 0, BulkLocalePublishAction);\n actions.splice(5, 0, BulkLocaleUnpublishAction);\n return actions;\n });\n\n contentManager.injectComponent('listView', 'actions', {\n name: 'i18n-locale-filter',\n Component: LocalePicker,\n });\n\n contentManager.injectComponent('listView', 'publishModalAdditionalInfos', {\n name: 'i18n-publish-bullets-in-modal',\n Component: PublishModalAdditionalInfo,\n });\n\n contentManager.injectComponent('listView', 'unpublishModalAdditionalInfos', {\n name: 'i18n-unpublish-bullets-in-modal',\n Component: UnpublishModalAdditionalInfo,\n });\n\n contentManager.injectComponent('listView', 'deleteModalAdditionalInfos', {\n name: 'i18n-delete-bullets-in-modal',\n Component: DeleteModalAdditionalInfo,\n });\n\n const ctbPlugin = app.getPlugin('content-type-builder');\n\n if (ctbPlugin) {\n const ctbFormsAPI = ctbPlugin.apis.forms;\n ctbFormsAPI.addContentTypeSchemaMutation(mutateCTBContentTypeSchema);\n ctbFormsAPI.components.add({ id: 'checkboxConfirmation', component: CheckboxConfirmation });\n\n ctbFormsAPI.extendContentType({\n validator: () => ({\n i18n: yup.object().shape({\n localized: yup.bool(),\n }),\n }),\n form: {\n advanced() {\n return [\n {\n name: 'pluginOptions.i18n.localized',\n description: {\n id: getTranslation('plugin.schema.i18n.localized.description-content-type'),\n defaultMessage: 'Allows translating an entry into different languages',\n },\n type: 'checkboxConfirmation',\n intlLabel: {\n id: getTranslation('plugin.schema.i18n.localized.label-content-type'),\n defaultMessage: 'Localization',\n },\n },\n ];\n },\n },\n });\n\n ctbFormsAPI.extendFields(LOCALIZED_FIELDS, {\n form: {\n advanced({ contentTypeSchema, forTarget, type, step }: any) {\n if (forTarget !== 'contentType') {\n return [];\n }\n\n const hasI18nEnabled = get(\n contentTypeSchema,\n ['pluginOptions', 'i18n', 'localized'],\n false\n );\n\n if (!hasI18nEnabled) {\n return [];\n }\n\n if (type === 'component' && step === '1') {\n return [];\n }\n\n return [\n {\n name: 'pluginOptions.i18n.localized',\n description: {\n id: getTranslation('plugin.schema.i18n.localized.description-field'),\n defaultMessage: 'The field can have different values in each locale',\n },\n type: 'checkbox',\n intlLabel: {\n id: getTranslation('plugin.schema.i18n.localized.label-field'),\n defaultMessage: 'Enable localization for this field',\n },\n },\n ];\n },\n },\n });\n }\n },\n async registerTrads({ locales }: { locales: string[] }) {\n const importedTrads = await Promise.all(\n locales.map((locale) => {\n return import(`./translations/${locale}.json`)\n .then(({ default: data }) => {\n return {\n data: prefixPluginTranslations(data, pluginId),\n locale,\n };\n })\n .catch(() => {\n return {\n data: {},\n locale,\n };\n });\n })\n );\n\n return Promise.resolve(importedTrads);\n },\n};\n"],"names":["register","app","addMiddlewares","extendCTBAttributeInitialDataMiddleware","extendCTBInitialDataMiddleware","i18nApi","middleware","addReducers","reducerPath","reducer","addRBACMiddleware","localeMiddleware","registerPlugin","id","pluginId","name","bootstrap","registerHook","addColumnToTableHook","mutateEditViewHook","addLocaleToReleasesHook","addSettingsLink","intlLabel","getTranslation","defaultMessage","to","Component","then","mod","default","ProtectedSettingsPage","permissions","PERMISSIONS","accessMain","contentManager","getPlugin","apis","addDocumentHeaderAction","AITranslationStatusAction","LocalePickerAction","FillFromAnotherLocaleAction","addDocumentAction","actions","indexOfDeleteAction","findIndex","action","type","splice","DeleteLocaleAction","BulkLocalePublishAction","BulkLocaleUnpublishAction","injectComponent","LocalePicker","PublishModalAdditionalInfo","UnpublishModalAdditionalInfo","DeleteModalAdditionalInfo","ctbPlugin","ctbFormsAPI","forms","addContentTypeSchemaMutation","mutateCTBContentTypeSchema","components","add","component","CheckboxConfirmation","extendContentType","validator","i18n","yup","object","shape","localized","bool","form","advanced","description","extendFields","LOCALIZED_FIELDS","contentTypeSchema","forTarget","step","hasI18nEnabled","get","registerTrads","locales","importedTrads","Promise","all","map","locale","data","prefixPluginTranslations","catch","resolve"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../../admin/src/index.ts"],"sourcesContent":["import get from 'lodash/get';\nimport * as yup from 'yup';\n\nimport { CheckboxConfirmation } from './components/CheckboxConfirmation';\nimport {\n BulkLocalePublishAction,\n BulkLocaleUnpublishAction,\n DeleteLocaleAction,\n LocalePickerAction,\n FillFromAnotherLocaleAction,\n AITranslationStatusAction,\n} from './components/CMHeaderActions';\nimport {\n DeleteModalAdditionalInfo,\n PublishModalAdditionalInfo,\n UnpublishModalAdditionalInfo,\n} from './components/CMListViewModalsAdditionalInformation';\nimport { LocalePicker } from './components/LocalePicker';\nimport { PERMISSIONS } from './constants';\nimport { mutateEditViewHook } from './contentManagerHooks/editView';\nimport { addColumnToTableHook } from './contentManagerHooks/listView';\nimport { addLocaleToReleasesHook } from './contentReleasesHooks/releaseDetailsView';\nimport { extendCTBAttributeInitialDataMiddleware } from './middlewares/extendCTBAttributeInitialData';\nimport { extendCTBInitialDataMiddleware } from './middlewares/extendCTBInitialData';\nimport { localeMiddleware } from './middlewares/rbac-middleware';\nimport { pluginId } from './pluginId';\nimport { i18nApi } from './services/api';\nimport { LOCALIZED_FIELDS } from './utils/fields';\nimport { getTranslation } from './utils/getTranslation';\nimport { prefixPluginTranslations } from './utils/prefixPluginTranslations';\nimport { mutateCTBContentTypeSchema } from './utils/schemas';\n\nimport type { DocumentActionComponent } from '@strapi/content-manager/strapi-admin';\n\n// eslint-disable-next-line import/no-default-export\nexport default {\n register(app: any) {\n app.addMiddlewares([extendCTBAttributeInitialDataMiddleware, extendCTBInitialDataMiddleware]);\n app.addMiddlewares([() => i18nApi.middleware]);\n app.addReducers({\n [i18nApi.reducerPath]: i18nApi.reducer,\n });\n app.addRBACMiddleware([localeMiddleware]);\n app.registerPlugin({\n id: pluginId,\n name: pluginId,\n });\n },\n bootstrap(app: any) {\n // // Hook that adds a column into the CM's LV table\n app.registerHook('Admin/CM/pages/ListView/inject-column-in-table', addColumnToTableHook);\n app.registerHook('Admin/CM/pages/EditView/mutate-edit-view-layout', mutateEditViewHook);\n // Hooks that checks if the locale is present in the release\n app.registerHook(\n 'ContentReleases/pages/ReleaseDetails/add-locale-in-releases',\n addLocaleToReleasesHook\n );\n\n // Add the settings link\n app.addSettingsLink('global', {\n intlLabel: {\n id: getTranslation('plugin.name'),\n defaultMessage: 'Internationalization',\n },\n id: 'internationalization',\n to: 'internationalization',\n Component: () =>\n import('./pages/SettingsPage').then((mod) => ({ default: mod.ProtectedSettingsPage })),\n permissions: PERMISSIONS.accessMain,\n });\n\n const contentManager = app.getPlugin('content-manager');\n\n contentManager.apis.addDocumentHeaderAction([\n AITranslationStatusAction,\n LocalePickerAction,\n FillFromAnotherLocaleAction,\n ]);\n contentManager.apis.addDocumentAction((actions: DocumentActionComponent[]) => {\n const indexOfDeleteAction = actions.findIndex((action) => action.type === 'delete');\n actions.splice(indexOfDeleteAction, 0, DeleteLocaleAction);\n return actions;\n });\n\n contentManager.apis.addDocumentAction((actions: DocumentActionComponent[]) => {\n // When enabled the bulk locale publish action should be the first action\n // in 'More Document Actions' and therefore the third action in the array\n actions.splice(2, 0, BulkLocalePublishAction);\n actions.splice(5, 0, BulkLocaleUnpublishAction);\n return actions;\n });\n\n contentManager.injectComponent('listView', 'actions', {\n name: 'i18n-locale-filter',\n Component: LocalePicker,\n });\n\n contentManager.injectComponent('listView', 'publishModalAdditionalInfos', {\n name: 'i18n-publish-bullets-in-modal',\n Component: PublishModalAdditionalInfo,\n });\n\n contentManager.injectComponent('listView', 'unpublishModalAdditionalInfos', {\n name: 'i18n-unpublish-bullets-in-modal',\n Component: UnpublishModalAdditionalInfo,\n });\n\n contentManager.injectComponent('listView', 'deleteModalAdditionalInfos', {\n name: 'i18n-delete-bullets-in-modal',\n Component: DeleteModalAdditionalInfo,\n });\n\n const ctbPlugin = app.getPlugin('content-type-builder');\n\n if (ctbPlugin) {\n const ctbFormsAPI = ctbPlugin.apis.forms;\n ctbFormsAPI.addContentTypeSchemaMutation(mutateCTBContentTypeSchema);\n ctbFormsAPI.components.add({ id: 'checkboxConfirmation', component: CheckboxConfirmation });\n\n ctbFormsAPI.extendContentType({\n validator: () => ({\n i18n: yup.object().shape({\n localized: yup.bool(),\n }),\n }),\n form: {\n advanced() {\n return [\n {\n name: 'pluginOptions.i18n.localized',\n description: {\n id: getTranslation('plugin.schema.i18n.localized.description-content-type'),\n defaultMessage: 'Allows translating an entry into different languages',\n },\n type: 'checkboxConfirmation',\n intlLabel: {\n id: getTranslation('plugin.schema.i18n.localized.label-content-type'),\n defaultMessage: 'Localization',\n },\n },\n ];\n },\n },\n });\n\n ctbFormsAPI.extendFields(LOCALIZED_FIELDS, {\n form: {\n advanced({ contentTypeSchema, forTarget, type, step }: any) {\n if (forTarget !== 'contentType') {\n return [];\n }\n\n const hasI18nEnabled = get(\n contentTypeSchema,\n ['pluginOptions', 'i18n', 'localized'],\n false\n );\n\n if (!hasI18nEnabled) {\n return [];\n }\n\n if (type === 'component' && step === '1') {\n return [];\n }\n\n return [\n {\n name: 'pluginOptions.i18n.localized',\n description: {\n id: getTranslation('plugin.schema.i18n.localized.description-field'),\n defaultMessage: 'The field can have different values in each locale',\n },\n type: 'checkbox',\n intlLabel: {\n id: getTranslation('plugin.schema.i18n.localized.label-field'),\n defaultMessage: 'Enable localization for this field',\n },\n },\n ];\n },\n },\n });\n }\n },\n async registerTrads({ locales }: { locales: string[] }) {\n const importedTrads = await Promise.all(\n locales.map((locale) => {\n return import(`./translations/${locale}.json`)\n .then(({ default: data }) => {\n return {\n data: prefixPluginTranslations(data, pluginId),\n locale,\n };\n })\n .catch(() => {\n return {\n data: {},\n locale,\n };\n });\n })\n );\n\n return Promise.resolve(importedTrads);\n },\n};\n"],"names":["register","app","addMiddlewares","extendCTBAttributeInitialDataMiddleware","extendCTBInitialDataMiddleware","i18nApi","middleware","addReducers","reducerPath","reducer","addRBACMiddleware","localeMiddleware","registerPlugin","id","pluginId","name","bootstrap","registerHook","addColumnToTableHook","mutateEditViewHook","addLocaleToReleasesHook","addSettingsLink","intlLabel","getTranslation","defaultMessage","to","Component","then","mod","default","ProtectedSettingsPage","permissions","PERMISSIONS","accessMain","contentManager","getPlugin","apis","addDocumentHeaderAction","AITranslationStatusAction","LocalePickerAction","FillFromAnotherLocaleAction","addDocumentAction","actions","indexOfDeleteAction","findIndex","action","type","splice","DeleteLocaleAction","BulkLocalePublishAction","BulkLocaleUnpublishAction","injectComponent","LocalePicker","PublishModalAdditionalInfo","UnpublishModalAdditionalInfo","DeleteModalAdditionalInfo","ctbPlugin","ctbFormsAPI","forms","addContentTypeSchemaMutation","mutateCTBContentTypeSchema","components","add","component","CheckboxConfirmation","extendContentType","validator","i18n","yup","object","shape","localized","bool","form","advanced","description","extendFields","LOCALIZED_FIELDS","contentTypeSchema","forTarget","step","hasI18nEnabled","get","registerTrads","locales","importedTrads","Promise","all","map","locale","data","prefixPluginTranslations","catch","resolve"],"mappings":"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"}
@@ -0,0 +1,91 @@
1
+ 'use strict';
2
+
3
+ var cs = {
4
+ "actions.delete.label": "Smazat záznam ({locale})",
5
+ "actions.delete.dialog.title": "Potvrzení",
6
+ "actions.delete.dialog.body": "Opravdu chcete smazat tento jazyk?",
7
+ "actions.delete.error": "Při pokusu o smazání jazyka dokumentu došlo k chybě.",
8
+ "CMEditViewCopyLocale.copy-failure": "Nepodařilo se zkopírovat jazyk",
9
+ "CMEditViewCopyLocale.copy-success": "Jazyk zkopírován",
10
+ "CMEditViewCopyLocale.copy-text": "Vyplnit z jiného jazyka",
11
+ "CMEditViewCopyLocale.cancel-text": "Ne, zrušit",
12
+ "CMEditViewCopyLocale.submit-text": "Ano, vyplnit",
13
+ "CMEditViewCopyLocale.dialog.title": "Potvrzení",
14
+ "CMEditViewCopyLocale.dialog.body": "Váš aktuální obsah bude smazán a nahrazen obsahem z vybraného jazyka:",
15
+ "CMEditViewCopyLocale.dialog.field.label": "Jazyk",
16
+ "CMEditViewCopyLocale.dialog.field.placeholder": "Vyberte jeden jazyk...",
17
+ "CMEditViewBulkLocale.publish-title": "Publikovat více jazyků",
18
+ "CMEditViewBulkLocale.unpublish-title": "Zrušit publikaci více jazyků",
19
+ "CMEditViewBulkLocale.status": "Stav",
20
+ "CMEditViewBulkLocale.publication-status": "Stav publikace",
21
+ "CMEditViewBulkLocale.draft-relation-warning": "Některé jazyky jsou propojené s draft záznamy. Jejich publikování by mohlo ve vaší aplikaci zanechat nefunkční odkazy.",
22
+ "CMEditViewBulkLocale.continue-confirmation": "Opravdu chcete pokračovat?",
23
+ "CMEditViewAITranslation.status-aria-label": "Stav AI překladu",
24
+ "CMEditViewAITranslation.status-title": "{enabled, select, true {AI překlad povolen} false {AI překlad zakázán} other {AI překlad zakázán}}",
25
+ "CMEditViewAITranslation.status-description": "Naše AI překládá obsah do všech jazyků pokaždé, když uložíte úpravu ve výchozím jazyce.",
26
+ "CMEditViewAITranslation.settings-link": "{enabled, select, true {Vypnout v nastavení} false {Zapnout v nastavení} other {Zapnout v nastavení}}",
27
+ "CMEditViewAITranslation.job-completed": "AI překlad byl úspěšně dokončen!",
28
+ "CMEditViewAITranslation.job-failed": "AI překlad selhal. Zkuste to prosím znovu.",
29
+ "CMEditViewLocalePicker.locale.create": "Vytvořit jazyk <bold>{locale}</bold>",
30
+ "CMEditViewLocalePicker.locale.ai-translations": "AI překlady:",
31
+ "CMListView.popover.display-locales.label": "Zobrazit přeložené jazyky",
32
+ "CMListView.popover.display-locales.more": "{locales} + {count} dalších",
33
+ "CheckboxConfirmation.Modal.body": "Chcete to vypnout?",
34
+ "CheckboxConfirmation.Modal.button-confirm": "Ano, vypnout",
35
+ "CheckboxConfirmation.Modal.content": "Vypnutí lokalizace způsobí smazání veškerého vašeho obsahu kromě toho, který je spojen s vaším výchozím jazykem (pokud existuje).",
36
+ "Field.localized": "Tato hodnota je jedinečná pro vybraný jazyk",
37
+ "Field.not-localized": "Tato hodnota je společná pro všechny jazyky",
38
+ "Settings.list.actions.add": "Přidat nový jazyk",
39
+ "Settings.list.actions.delete": "Smazat jazyk {name}",
40
+ "Settings.list.actions.deleteAdditionalInfos": "Tímto smažete verze aktivního jazyka <em>(z Internationalization)</em>",
41
+ "Settings.list.actions.publishAdditionalInfos": "Tímto publikujete verze aktivního jazyka <em>(z Internationalization)</em>",
42
+ "Settings.list.actions.unpublishAdditionalInfos": "Tímto zrušíte publikaci verzí aktivního jazyka <em>(z Internationalization)</em>",
43
+ "Settings.list.actions.edit": "Upravit jazyk {name}",
44
+ "Settings.list.description": "Nakonfigurujte nastavení pluginu Internationalization",
45
+ "Settings.list.empty.description": "Toto není obvyklé chování, což znamená, že jste pravděpodobně databázi upravili ručně. Ujistěte se, že máte v databázi uložen alespoň jeden jazyk, abyste mohli Strapi používat správně.",
46
+ "Settings.list.empty.title": "Nejsou zde žádné jazyky.",
47
+ "Settings.aiLocalizations.label": "AI překlady",
48
+ "Settings.aiLocalizations.description": "Pokaždé, když uložíte změnu v Content Manageru, naše AI použije váš výchozí jazyk k automatickému překladu všech ostatních jazyků.",
49
+ "Settings.locales.default": "Výchozí",
50
+ "Settings.locales.list.sort.default": "Řadit podle výchozího jazyka",
51
+ "Settings.locales.list.sort.displayName": "Řadit podle zobrazovaného názvu",
52
+ "Settings.locales.list.sort.id": "Řadit podle ID",
53
+ "Settings.locales.modal.advanced": "Pokročilá nastavení",
54
+ "Settings.locales.modal.advanced.setAsDefault": "Nastavit jako výchozí jazyk",
55
+ "Settings.locales.modal.advanced.setAsDefault.hint": "Jeden výchozí jazyk je povinný, změňte ho výběrem jiného",
56
+ "Settings.locales.modal.advanced.settings": "Nastavení",
57
+ "Settings.locales.modal.base": "Základní nastavení",
58
+ "Settings.locales.modal.create.success": "Jazyk byl úspěšně přidán",
59
+ "Settings.locales.modal.create.code.label": "Jazyky",
60
+ "Settings.locales.modal.create.code.error": "Vyberte prosím jazyk",
61
+ "Settings.locales.modal.create.name.description": "Jazyk bude v administračním panelu zobrazen pod tímto názvem",
62
+ "Settings.locales.modal.create.name.label": "Zobrazovaný název jazyka",
63
+ "Settings.locales.modal.create.name.error.min": "Zobrazovaný název jazyka může mít maximálně 50 znaků.",
64
+ "Settings.locales.modal.create.name.error.required": "Zadejte prosím zobrazovaný název jazyka",
65
+ "Settings.locales.modal.delete.confirm": "Ano, smazat",
66
+ "Settings.locales.modal.delete.message": "Smazáním tohoto jazyka smažete veškerý související obsah. Pokud si chcete některý obsah ponechat, nezapomeňte ho nejprve přesunout do jiného jazyka.",
67
+ "Settings.locales.modal.delete.secondMessage": "Chcete smazat tento jazyk?",
68
+ "Settings.locales.modal.delete.success": "Jazyk byl úspěšně smazán",
69
+ "Settings.locales.modal.edit.confirmation": "Dokončit",
70
+ "Settings.locales.modal.edit.success": "Jazyk byl úspěšně upraven",
71
+ "Settings.locales.modal.edit.tab.label": "Navigace mezi základním a pokročilým nastavením I18N",
72
+ "Settings.locales.modal.title": "Konfigurace",
73
+ "Settings.locales.row.default-locale": "Výchozí jazyk",
74
+ "Settings.locales.row.displayName": "Zobrazovaný název",
75
+ "Settings.locales.row.id": "ID",
76
+ "Settings.permissions.loading": "Načítání oprávnění",
77
+ "Settings.permissions.read.denied.description": "Abyste to mohli číst, obraťte se prosím na administrátora vašeho systému.",
78
+ "Settings.permissions.read.denied.title": "Nemáte oprávnění k přístupu k tomuto obsahu.",
79
+ "actions.select-locale": "Vyberte jazyk",
80
+ "components.Select.locales.not-available": "Není dostupný žádný obsah",
81
+ "plugin.description.long": "Tento plugin umožňuje vytvářet, číst a aktualizovat obsah v různých jazycích, jak z Admin Panelu, tak z API.",
82
+ "plugin.description.short": "Tento plugin umožňuje vytvářet, číst a aktualizovat obsah v různých jazycích, jak z Admin Panelu, tak z API.",
83
+ "plugin.name": "Internacionalizace",
84
+ "plugin.schema.i18n.localized.description-content-type": "Umožňuje překládat záznam do různých jazyků",
85
+ "plugin.schema.i18n.localized.description-field": "Pole může mít v každém jazyce jinou hodnotu",
86
+ "plugin.schema.i18n.localized.label-content-type": "Internacionalizace",
87
+ "plugin.schema.i18n.localized.label-field": "Povolit lokalizaci pro toto pole"
88
+ };
89
+
90
+ module.exports = cs;
91
+ //# sourceMappingURL=cs.json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cs.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,89 @@
1
+ var cs = {
2
+ "actions.delete.label": "Smazat záznam ({locale})",
3
+ "actions.delete.dialog.title": "Potvrzení",
4
+ "actions.delete.dialog.body": "Opravdu chcete smazat tento jazyk?",
5
+ "actions.delete.error": "Při pokusu o smazání jazyka dokumentu došlo k chybě.",
6
+ "CMEditViewCopyLocale.copy-failure": "Nepodařilo se zkopírovat jazyk",
7
+ "CMEditViewCopyLocale.copy-success": "Jazyk zkopírován",
8
+ "CMEditViewCopyLocale.copy-text": "Vyplnit z jiného jazyka",
9
+ "CMEditViewCopyLocale.cancel-text": "Ne, zrušit",
10
+ "CMEditViewCopyLocale.submit-text": "Ano, vyplnit",
11
+ "CMEditViewCopyLocale.dialog.title": "Potvrzení",
12
+ "CMEditViewCopyLocale.dialog.body": "Váš aktuální obsah bude smazán a nahrazen obsahem z vybraného jazyka:",
13
+ "CMEditViewCopyLocale.dialog.field.label": "Jazyk",
14
+ "CMEditViewCopyLocale.dialog.field.placeholder": "Vyberte jeden jazyk...",
15
+ "CMEditViewBulkLocale.publish-title": "Publikovat více jazyků",
16
+ "CMEditViewBulkLocale.unpublish-title": "Zrušit publikaci více jazyků",
17
+ "CMEditViewBulkLocale.status": "Stav",
18
+ "CMEditViewBulkLocale.publication-status": "Stav publikace",
19
+ "CMEditViewBulkLocale.draft-relation-warning": "Některé jazyky jsou propojené s draft záznamy. Jejich publikování by mohlo ve vaší aplikaci zanechat nefunkční odkazy.",
20
+ "CMEditViewBulkLocale.continue-confirmation": "Opravdu chcete pokračovat?",
21
+ "CMEditViewAITranslation.status-aria-label": "Stav AI překladu",
22
+ "CMEditViewAITranslation.status-title": "{enabled, select, true {AI překlad povolen} false {AI překlad zakázán} other {AI překlad zakázán}}",
23
+ "CMEditViewAITranslation.status-description": "Naše AI překládá obsah do všech jazyků pokaždé, když uložíte úpravu ve výchozím jazyce.",
24
+ "CMEditViewAITranslation.settings-link": "{enabled, select, true {Vypnout v nastavení} false {Zapnout v nastavení} other {Zapnout v nastavení}}",
25
+ "CMEditViewAITranslation.job-completed": "AI překlad byl úspěšně dokončen!",
26
+ "CMEditViewAITranslation.job-failed": "AI překlad selhal. Zkuste to prosím znovu.",
27
+ "CMEditViewLocalePicker.locale.create": "Vytvořit jazyk <bold>{locale}</bold>",
28
+ "CMEditViewLocalePicker.locale.ai-translations": "AI překlady:",
29
+ "CMListView.popover.display-locales.label": "Zobrazit přeložené jazyky",
30
+ "CMListView.popover.display-locales.more": "{locales} + {count} dalších",
31
+ "CheckboxConfirmation.Modal.body": "Chcete to vypnout?",
32
+ "CheckboxConfirmation.Modal.button-confirm": "Ano, vypnout",
33
+ "CheckboxConfirmation.Modal.content": "Vypnutí lokalizace způsobí smazání veškerého vašeho obsahu kromě toho, který je spojen s vaším výchozím jazykem (pokud existuje).",
34
+ "Field.localized": "Tato hodnota je jedinečná pro vybraný jazyk",
35
+ "Field.not-localized": "Tato hodnota je společná pro všechny jazyky",
36
+ "Settings.list.actions.add": "Přidat nový jazyk",
37
+ "Settings.list.actions.delete": "Smazat jazyk {name}",
38
+ "Settings.list.actions.deleteAdditionalInfos": "Tímto smažete verze aktivního jazyka <em>(z Internationalization)</em>",
39
+ "Settings.list.actions.publishAdditionalInfos": "Tímto publikujete verze aktivního jazyka <em>(z Internationalization)</em>",
40
+ "Settings.list.actions.unpublishAdditionalInfos": "Tímto zrušíte publikaci verzí aktivního jazyka <em>(z Internationalization)</em>",
41
+ "Settings.list.actions.edit": "Upravit jazyk {name}",
42
+ "Settings.list.description": "Nakonfigurujte nastavení pluginu Internationalization",
43
+ "Settings.list.empty.description": "Toto není obvyklé chování, což znamená, že jste pravděpodobně databázi upravili ručně. Ujistěte se, že máte v databázi uložen alespoň jeden jazyk, abyste mohli Strapi používat správně.",
44
+ "Settings.list.empty.title": "Nejsou zde žádné jazyky.",
45
+ "Settings.aiLocalizations.label": "AI překlady",
46
+ "Settings.aiLocalizations.description": "Pokaždé, když uložíte změnu v Content Manageru, naše AI použije váš výchozí jazyk k automatickému překladu všech ostatních jazyků.",
47
+ "Settings.locales.default": "Výchozí",
48
+ "Settings.locales.list.sort.default": "Řadit podle výchozího jazyka",
49
+ "Settings.locales.list.sort.displayName": "Řadit podle zobrazovaného názvu",
50
+ "Settings.locales.list.sort.id": "Řadit podle ID",
51
+ "Settings.locales.modal.advanced": "Pokročilá nastavení",
52
+ "Settings.locales.modal.advanced.setAsDefault": "Nastavit jako výchozí jazyk",
53
+ "Settings.locales.modal.advanced.setAsDefault.hint": "Jeden výchozí jazyk je povinný, změňte ho výběrem jiného",
54
+ "Settings.locales.modal.advanced.settings": "Nastavení",
55
+ "Settings.locales.modal.base": "Základní nastavení",
56
+ "Settings.locales.modal.create.success": "Jazyk byl úspěšně přidán",
57
+ "Settings.locales.modal.create.code.label": "Jazyky",
58
+ "Settings.locales.modal.create.code.error": "Vyberte prosím jazyk",
59
+ "Settings.locales.modal.create.name.description": "Jazyk bude v administračním panelu zobrazen pod tímto názvem",
60
+ "Settings.locales.modal.create.name.label": "Zobrazovaný název jazyka",
61
+ "Settings.locales.modal.create.name.error.min": "Zobrazovaný název jazyka může mít maximálně 50 znaků.",
62
+ "Settings.locales.modal.create.name.error.required": "Zadejte prosím zobrazovaný název jazyka",
63
+ "Settings.locales.modal.delete.confirm": "Ano, smazat",
64
+ "Settings.locales.modal.delete.message": "Smazáním tohoto jazyka smažete veškerý související obsah. Pokud si chcete některý obsah ponechat, nezapomeňte ho nejprve přesunout do jiného jazyka.",
65
+ "Settings.locales.modal.delete.secondMessage": "Chcete smazat tento jazyk?",
66
+ "Settings.locales.modal.delete.success": "Jazyk byl úspěšně smazán",
67
+ "Settings.locales.modal.edit.confirmation": "Dokončit",
68
+ "Settings.locales.modal.edit.success": "Jazyk byl úspěšně upraven",
69
+ "Settings.locales.modal.edit.tab.label": "Navigace mezi základním a pokročilým nastavením I18N",
70
+ "Settings.locales.modal.title": "Konfigurace",
71
+ "Settings.locales.row.default-locale": "Výchozí jazyk",
72
+ "Settings.locales.row.displayName": "Zobrazovaný název",
73
+ "Settings.locales.row.id": "ID",
74
+ "Settings.permissions.loading": "Načítání oprávnění",
75
+ "Settings.permissions.read.denied.description": "Abyste to mohli číst, obraťte se prosím na administrátora vašeho systému.",
76
+ "Settings.permissions.read.denied.title": "Nemáte oprávnění k přístupu k tomuto obsahu.",
77
+ "actions.select-locale": "Vyberte jazyk",
78
+ "components.Select.locales.not-available": "Není dostupný žádný obsah",
79
+ "plugin.description.long": "Tento plugin umožňuje vytvářet, číst a aktualizovat obsah v různých jazycích, jak z Admin Panelu, tak z API.",
80
+ "plugin.description.short": "Tento plugin umožňuje vytvářet, číst a aktualizovat obsah v různých jazycích, jak z Admin Panelu, tak z API.",
81
+ "plugin.name": "Internacionalizace",
82
+ "plugin.schema.i18n.localized.description-content-type": "Umožňuje překládat záznam do různých jazyků",
83
+ "plugin.schema.i18n.localized.description-field": "Pole může mít v každém jazyce jinou hodnotu",
84
+ "plugin.schema.i18n.localized.label-content-type": "Internacionalizace",
85
+ "plugin.schema.i18n.localized.label-field": "Povolit lokalizaci pro toto pole"
86
+ };
87
+
88
+ export { cs as default };
89
+ //# sourceMappingURL=cs.json.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cs.json.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -4,6 +4,45 @@ var fp = require('lodash/fp');
4
4
  var utils = require('@strapi/utils');
5
5
  var index = require('../utils/index.js');
6
6
 
7
+ /**
8
+ * Mutates the provided data object in place and returns the same reference
9
+ * with populated media values replaced by their upload file IDs.
10
+ */ const normalizeMediaIds = (schema, data)=>{
11
+ if (!schema?.attributes || !data || typeof data !== 'object') {
12
+ return data;
13
+ }
14
+ Object.entries(schema.attributes).forEach(([attributeName, attribute])=>{
15
+ const value = data[attributeName];
16
+ if (value == null) {
17
+ return;
18
+ }
19
+ if (attribute.type === 'media') {
20
+ if (attribute.multiple) {
21
+ data[attributeName] = Array.isArray(value) ? value.map((file)=>file && typeof file === 'object' && 'id' in file ? file.id : file) : value;
22
+ } else {
23
+ data[attributeName] = value && typeof value === 'object' && 'id' in value ? value.id : value;
24
+ }
25
+ return;
26
+ }
27
+ if (attribute.type === 'component') {
28
+ const componentSchema = strapi.getModel(attribute.component);
29
+ if (attribute.repeatable && Array.isArray(value)) {
30
+ value.forEach((componentValue)=>normalizeMediaIds(componentSchema, componentValue));
31
+ } else {
32
+ normalizeMediaIds(componentSchema, value);
33
+ }
34
+ return;
35
+ }
36
+ if (attribute.type === 'dynamiczone' && Array.isArray(value)) {
37
+ value.forEach((componentValue)=>{
38
+ if (componentValue?.__component) {
39
+ normalizeMediaIds(strapi.getModel(componentValue.__component), componentValue);
40
+ }
41
+ });
42
+ }
43
+ });
44
+ return data;
45
+ };
7
46
  /**
8
47
  * Update non localized fields of all the related localizations of an entry with the entry values
9
48
  */ const syncNonLocalizedAttributes = async (sourceEntry, model)=>{
@@ -12,6 +51,7 @@ var index = require('../utils/index.js');
12
51
  if (fp.isEmpty(nonLocalizedAttributes)) {
13
52
  return;
14
53
  }
54
+ const normalizedNonLocalizedAttributes = normalizeMediaIds(model, nonLocalizedAttributes);
15
55
  const uid = model.uid;
16
56
  const documentId = sourceEntry.documentId;
17
57
  const locale = sourceEntry.locale;
@@ -33,9 +73,9 @@ var index = require('../utils/index.js');
33
73
  'id'
34
74
  ]
35
75
  });
36
- const entryData = await strapi.documents(uid).omitComponentData(nonLocalizedAttributes);
76
+ const entryData = await strapi.documents(uid).omitComponentData(normalizedNonLocalizedAttributes);
37
77
  await utils.async.map(localeEntriesToUpdate, async (entry)=>{
38
- const transformedData = await strapi.documents.utils.transformData(fp.cloneDeep(nonLocalizedAttributes), {
78
+ const transformedData = await strapi.documents.utils.transformData(fp.cloneDeep(normalizedNonLocalizedAttributes), {
39
79
  uid,
40
80
  status,
41
81
  locale: entry.locale,
@@ -1 +1 @@
1
- {"version":3,"file":"localizations.js","sources":["../../../server/src/services/localizations.ts"],"sourcesContent":["import { cloneDeep, isEmpty } from 'lodash/fp';\n\nimport type { Schema } from '@strapi/types';\nimport { async } from '@strapi/utils';\nimport { getService } from '../utils';\n\n/**\n * Update non localized fields of all the related localizations of an entry with the entry values\n */\nconst syncNonLocalizedAttributes = async (sourceEntry: any, model: Schema.ContentType) => {\n const { copyNonLocalizedAttributes } = getService('content-types');\n\n const nonLocalizedAttributes = copyNonLocalizedAttributes(model, sourceEntry);\n if (isEmpty(nonLocalizedAttributes)) {\n return;\n }\n\n const uid = model.uid;\n const documentId = sourceEntry.documentId;\n const locale = sourceEntry.locale;\n const status = sourceEntry?.publishedAt ? 'published' : 'draft';\n\n // Find all the entries that need to be updated\n // this is every other entry of the document in the same status but a different locale\n const localeEntriesToUpdate = await strapi.db.query(uid).findMany({\n where: {\n documentId,\n publishedAt: status === 'published' ? { $ne: null } : null,\n locale: { $ne: locale },\n },\n select: ['locale', 'id'],\n });\n\n const entryData = await strapi.documents(uid).omitComponentData(nonLocalizedAttributes);\n\n await async.map(localeEntriesToUpdate, async (entry: any) => {\n const transformedData = await strapi.documents.utils.transformData(\n cloneDeep(nonLocalizedAttributes),\n {\n uid,\n status,\n locale: entry.locale,\n allowMissingId: true,\n }\n );\n\n // Update or create non localized components for the entry\n const componentData = await strapi\n .documents(uid)\n .updateComponents(entry, transformedData as any);\n\n // Update every other locale entry of this documentId in the same status\n await strapi.db.query(uid).update({\n where: {\n documentId,\n publishedAt: status === 'published' ? { $ne: null } : null,\n locale: { $eq: entry.locale },\n },\n // The data we send to the update function is the entry data merged with\n // the updated component data\n data: Object.assign(cloneDeep(entryData), componentData),\n });\n });\n};\n\nconst localizations = () => ({\n syncNonLocalizedAttributes,\n});\n\ntype LocalizationsService = typeof localizations;\n\nexport default localizations;\nexport type { LocalizationsService };\n"],"names":["syncNonLocalizedAttributes","sourceEntry","model","copyNonLocalizedAttributes","getService","nonLocalizedAttributes","isEmpty","uid","documentId","locale","status","publishedAt","localeEntriesToUpdate","strapi","db","query","findMany","where","$ne","select","entryData","documents","omitComponentData","async","map","entry","transformedData","utils","transformData","cloneDeep","allowMissingId","componentData","updateComponents","update","$eq","data","Object","assign","localizations"],"mappings":";;;;;;AAMA;;IAGA,MAAMA,0BAAAA,GAA6B,OAAOC,WAAAA,EAAkBC,KAAAA,GAAAA;AAC1D,IAAA,MAAM,EAAEC,0BAA0B,EAAE,GAAGC,gBAAAA,CAAW,eAAA,CAAA;IAElD,MAAMC,sBAAAA,GAAyBF,2BAA2BD,KAAAA,EAAOD,WAAAA,CAAAA;AACjE,IAAA,IAAIK,WAAQD,sBAAAA,CAAAA,EAAyB;AACnC,QAAA;AACF,IAAA;IAEA,MAAME,GAAAA,GAAML,MAAMK,GAAG;IACrB,MAAMC,UAAAA,GAAaP,YAAYO,UAAU;IACzC,MAAMC,MAAAA,GAASR,YAAYQ,MAAM;IACjC,MAAMC,MAAAA,GAAST,WAAAA,EAAaU,WAAAA,GAAc,WAAA,GAAc,OAAA;;;IAIxD,MAAMC,qBAAAA,GAAwB,MAAMC,MAAAA,CAAOC,EAAE,CAACC,KAAK,CAACR,GAAAA,CAAAA,CAAKS,QAAQ,CAAC;QAChEC,KAAAA,EAAO;AACLT,YAAAA,UAAAA;AACAG,YAAAA,WAAAA,EAAaD,WAAW,WAAA,GAAc;gBAAEQ,GAAAA,EAAK;aAAK,GAAI,IAAA;YACtDT,MAAAA,EAAQ;gBAAES,GAAAA,EAAKT;AAAO;AACxB,SAAA;QACAU,MAAAA,EAAQ;AAAC,YAAA,QAAA;AAAU,YAAA;AAAK;AAC1B,KAAA,CAAA;AAEA,IAAA,MAAMC,YAAY,MAAMP,MAAAA,CAAOQ,SAAS,CAACd,GAAAA,CAAAA,CAAKe,iBAAiB,CAACjB,sBAAAA,CAAAA;AAEhE,IAAA,MAAMkB,WAAAA,CAAMC,GAAG,CAACZ,qBAAAA,EAAuB,OAAOa,KAAAA,GAAAA;QAC5C,MAAMC,eAAAA,GAAkB,MAAMb,MAAAA,CAAOQ,SAAS,CAACM,KAAK,CAACC,aAAa,CAChEC,YAAAA,CAAUxB,sBAAAA,CAAAA,EACV;AACEE,YAAAA,GAAAA;AACAG,YAAAA,MAAAA;AACAD,YAAAA,MAAAA,EAAQgB,MAAMhB,MAAM;YACpBqB,cAAAA,EAAgB;AAClB,SAAA,CAAA;;QAIF,MAAMC,aAAAA,GAAgB,MAAMlB,MAAAA,CACzBQ,SAAS,CAACd,GAAAA,CAAAA,CACVyB,gBAAgB,CAACP,KAAAA,EAAOC,eAAAA,CAAAA;;AAG3B,QAAA,MAAMb,OAAOC,EAAE,CAACC,KAAK,CAACR,GAAAA,CAAAA,CAAK0B,MAAM,CAAC;YAChChB,KAAAA,EAAO;AACLT,gBAAAA,UAAAA;AACAG,gBAAAA,WAAAA,EAAaD,WAAW,WAAA,GAAc;oBAAEQ,GAAAA,EAAK;iBAAK,GAAI,IAAA;gBACtDT,MAAAA,EAAQ;AAAEyB,oBAAAA,GAAAA,EAAKT,MAAMhB;AAAO;AAC9B,aAAA;;;AAGA0B,YAAAA,IAAAA,EAAMC,MAAAA,CAAOC,MAAM,CAACR,YAAAA,CAAUT,SAAAA,CAAAA,EAAYW,aAAAA;AAC5C,SAAA,CAAA;AACF,IAAA,CAAA,CAAA;AACF,CAAA;AAEA,MAAMO,aAAAA,GAAgB,KAAO;AAC3BtC,QAAAA;KACF;;;;"}
1
+ {"version":3,"file":"localizations.js","sources":["../../../server/src/services/localizations.ts"],"sourcesContent":["import { cloneDeep, isEmpty } from 'lodash/fp';\n\nimport type { Schema } from '@strapi/types';\nimport { async } from '@strapi/utils';\nimport { getService } from '../utils';\n\n/**\n * Mutates the provided data object in place and returns the same reference\n * with populated media values replaced by their upload file IDs.\n */\nconst normalizeMediaIds = (\n schema: Schema.ContentType | Schema.Component,\n data: Record<string, any>\n) => {\n if (!schema?.attributes || !data || typeof data !== 'object') {\n return data;\n }\n\n Object.entries(schema.attributes).forEach(([attributeName, attribute]) => {\n const value = data[attributeName];\n\n if (value == null) {\n return;\n }\n\n if (attribute.type === 'media') {\n if (attribute.multiple) {\n data[attributeName] = Array.isArray(value)\n ? value.map((file: unknown) =>\n file && typeof file === 'object' && 'id' in file ? file.id : file\n )\n : value;\n } else {\n data[attributeName] =\n value && typeof value === 'object' && 'id' in value ? value.id : value;\n }\n\n return;\n }\n\n if (attribute.type === 'component') {\n const componentSchema = strapi.getModel(attribute.component);\n\n if (attribute.repeatable && Array.isArray(value)) {\n value.forEach((componentValue: Record<string, any>) =>\n normalizeMediaIds(componentSchema, componentValue)\n );\n } else {\n normalizeMediaIds(componentSchema, value);\n }\n\n return;\n }\n\n if (attribute.type === 'dynamiczone' && Array.isArray(value)) {\n value.forEach((componentValue: Record<string, any>) => {\n if (componentValue?.__component) {\n normalizeMediaIds(strapi.getModel(componentValue.__component), componentValue);\n }\n });\n }\n });\n\n return data;\n};\n\n/**\n * Update non localized fields of all the related localizations of an entry with the entry values\n */\nconst syncNonLocalizedAttributes = async (sourceEntry: any, model: Schema.ContentType) => {\n const { copyNonLocalizedAttributes } = getService('content-types');\n\n const nonLocalizedAttributes = copyNonLocalizedAttributes(model, sourceEntry);\n if (isEmpty(nonLocalizedAttributes)) {\n return;\n }\n\n const normalizedNonLocalizedAttributes = normalizeMediaIds(model, nonLocalizedAttributes);\n\n const uid = model.uid;\n const documentId = sourceEntry.documentId;\n const locale = sourceEntry.locale;\n const status = sourceEntry?.publishedAt ? 'published' : 'draft';\n\n // Find all the entries that need to be updated\n // this is every other entry of the document in the same status but a different locale\n const localeEntriesToUpdate = await strapi.db.query(uid).findMany({\n where: {\n documentId,\n publishedAt: status === 'published' ? { $ne: null } : null,\n locale: { $ne: locale },\n },\n select: ['locale', 'id'],\n });\n\n const entryData = await strapi.documents(uid).omitComponentData(normalizedNonLocalizedAttributes);\n\n await async.map(localeEntriesToUpdate, async (entry: any) => {\n const transformedData = await strapi.documents.utils.transformData(\n cloneDeep(normalizedNonLocalizedAttributes),\n {\n uid,\n status,\n locale: entry.locale,\n allowMissingId: true,\n }\n );\n\n // Update or create non localized components for the entry\n const componentData = await strapi\n .documents(uid)\n .updateComponents(entry, transformedData as any);\n\n // Update every other locale entry of this documentId in the same status\n await strapi.db.query(uid).update({\n where: {\n documentId,\n publishedAt: status === 'published' ? { $ne: null } : null,\n locale: { $eq: entry.locale },\n },\n // The data we send to the update function is the entry data merged with\n // the updated component data\n data: Object.assign(cloneDeep(entryData), componentData),\n });\n });\n};\n\nconst localizations = () => ({\n syncNonLocalizedAttributes,\n});\n\ntype LocalizationsService = typeof localizations;\n\nexport default localizations;\nexport type { LocalizationsService };\n"],"names":["normalizeMediaIds","schema","data","attributes","Object","entries","forEach","attributeName","attribute","value","type","multiple","Array","isArray","map","file","id","componentSchema","strapi","getModel","component","repeatable","componentValue","__component","syncNonLocalizedAttributes","sourceEntry","model","copyNonLocalizedAttributes","getService","nonLocalizedAttributes","isEmpty","normalizedNonLocalizedAttributes","uid","documentId","locale","status","publishedAt","localeEntriesToUpdate","db","query","findMany","where","$ne","select","entryData","documents","omitComponentData","async","entry","transformedData","utils","transformData","cloneDeep","allowMissingId","componentData","updateComponents","update","$eq","assign","localizations"],"mappings":"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"}
@@ -2,6 +2,45 @@ import { isEmpty, cloneDeep } from 'lodash/fp';
2
2
  import { async } from '@strapi/utils';
3
3
  import { getService } from '../utils/index.mjs';
4
4
 
5
+ /**
6
+ * Mutates the provided data object in place and returns the same reference
7
+ * with populated media values replaced by their upload file IDs.
8
+ */ const normalizeMediaIds = (schema, data)=>{
9
+ if (!schema?.attributes || !data || typeof data !== 'object') {
10
+ return data;
11
+ }
12
+ Object.entries(schema.attributes).forEach(([attributeName, attribute])=>{
13
+ const value = data[attributeName];
14
+ if (value == null) {
15
+ return;
16
+ }
17
+ if (attribute.type === 'media') {
18
+ if (attribute.multiple) {
19
+ data[attributeName] = Array.isArray(value) ? value.map((file)=>file && typeof file === 'object' && 'id' in file ? file.id : file) : value;
20
+ } else {
21
+ data[attributeName] = value && typeof value === 'object' && 'id' in value ? value.id : value;
22
+ }
23
+ return;
24
+ }
25
+ if (attribute.type === 'component') {
26
+ const componentSchema = strapi.getModel(attribute.component);
27
+ if (attribute.repeatable && Array.isArray(value)) {
28
+ value.forEach((componentValue)=>normalizeMediaIds(componentSchema, componentValue));
29
+ } else {
30
+ normalizeMediaIds(componentSchema, value);
31
+ }
32
+ return;
33
+ }
34
+ if (attribute.type === 'dynamiczone' && Array.isArray(value)) {
35
+ value.forEach((componentValue)=>{
36
+ if (componentValue?.__component) {
37
+ normalizeMediaIds(strapi.getModel(componentValue.__component), componentValue);
38
+ }
39
+ });
40
+ }
41
+ });
42
+ return data;
43
+ };
5
44
  /**
6
45
  * Update non localized fields of all the related localizations of an entry with the entry values
7
46
  */ const syncNonLocalizedAttributes = async (sourceEntry, model)=>{
@@ -10,6 +49,7 @@ import { getService } from '../utils/index.mjs';
10
49
  if (isEmpty(nonLocalizedAttributes)) {
11
50
  return;
12
51
  }
52
+ const normalizedNonLocalizedAttributes = normalizeMediaIds(model, nonLocalizedAttributes);
13
53
  const uid = model.uid;
14
54
  const documentId = sourceEntry.documentId;
15
55
  const locale = sourceEntry.locale;
@@ -31,9 +71,9 @@ import { getService } from '../utils/index.mjs';
31
71
  'id'
32
72
  ]
33
73
  });
34
- const entryData = await strapi.documents(uid).omitComponentData(nonLocalizedAttributes);
74
+ const entryData = await strapi.documents(uid).omitComponentData(normalizedNonLocalizedAttributes);
35
75
  await async.map(localeEntriesToUpdate, async (entry)=>{
36
- const transformedData = await strapi.documents.utils.transformData(cloneDeep(nonLocalizedAttributes), {
76
+ const transformedData = await strapi.documents.utils.transformData(cloneDeep(normalizedNonLocalizedAttributes), {
37
77
  uid,
38
78
  status,
39
79
  locale: entry.locale,
@@ -1 +1 @@
1
- {"version":3,"file":"localizations.mjs","sources":["../../../server/src/services/localizations.ts"],"sourcesContent":["import { cloneDeep, isEmpty } from 'lodash/fp';\n\nimport type { Schema } from '@strapi/types';\nimport { async } from '@strapi/utils';\nimport { getService } from '../utils';\n\n/**\n * Update non localized fields of all the related localizations of an entry with the entry values\n */\nconst syncNonLocalizedAttributes = async (sourceEntry: any, model: Schema.ContentType) => {\n const { copyNonLocalizedAttributes } = getService('content-types');\n\n const nonLocalizedAttributes = copyNonLocalizedAttributes(model, sourceEntry);\n if (isEmpty(nonLocalizedAttributes)) {\n return;\n }\n\n const uid = model.uid;\n const documentId = sourceEntry.documentId;\n const locale = sourceEntry.locale;\n const status = sourceEntry?.publishedAt ? 'published' : 'draft';\n\n // Find all the entries that need to be updated\n // this is every other entry of the document in the same status but a different locale\n const localeEntriesToUpdate = await strapi.db.query(uid).findMany({\n where: {\n documentId,\n publishedAt: status === 'published' ? { $ne: null } : null,\n locale: { $ne: locale },\n },\n select: ['locale', 'id'],\n });\n\n const entryData = await strapi.documents(uid).omitComponentData(nonLocalizedAttributes);\n\n await async.map(localeEntriesToUpdate, async (entry: any) => {\n const transformedData = await strapi.documents.utils.transformData(\n cloneDeep(nonLocalizedAttributes),\n {\n uid,\n status,\n locale: entry.locale,\n allowMissingId: true,\n }\n );\n\n // Update or create non localized components for the entry\n const componentData = await strapi\n .documents(uid)\n .updateComponents(entry, transformedData as any);\n\n // Update every other locale entry of this documentId in the same status\n await strapi.db.query(uid).update({\n where: {\n documentId,\n publishedAt: status === 'published' ? { $ne: null } : null,\n locale: { $eq: entry.locale },\n },\n // The data we send to the update function is the entry data merged with\n // the updated component data\n data: Object.assign(cloneDeep(entryData), componentData),\n });\n });\n};\n\nconst localizations = () => ({\n syncNonLocalizedAttributes,\n});\n\ntype LocalizationsService = typeof localizations;\n\nexport default localizations;\nexport type { LocalizationsService };\n"],"names":["syncNonLocalizedAttributes","sourceEntry","model","copyNonLocalizedAttributes","getService","nonLocalizedAttributes","isEmpty","uid","documentId","locale","status","publishedAt","localeEntriesToUpdate","strapi","db","query","findMany","where","$ne","select","entryData","documents","omitComponentData","async","map","entry","transformedData","utils","transformData","cloneDeep","allowMissingId","componentData","updateComponents","update","$eq","data","Object","assign","localizations"],"mappings":";;;;AAMA;;IAGA,MAAMA,0BAAAA,GAA6B,OAAOC,WAAAA,EAAkBC,KAAAA,GAAAA;AAC1D,IAAA,MAAM,EAAEC,0BAA0B,EAAE,GAAGC,UAAAA,CAAW,eAAA,CAAA;IAElD,MAAMC,sBAAAA,GAAyBF,2BAA2BD,KAAAA,EAAOD,WAAAA,CAAAA;AACjE,IAAA,IAAIK,QAAQD,sBAAAA,CAAAA,EAAyB;AACnC,QAAA;AACF,IAAA;IAEA,MAAME,GAAAA,GAAML,MAAMK,GAAG;IACrB,MAAMC,UAAAA,GAAaP,YAAYO,UAAU;IACzC,MAAMC,MAAAA,GAASR,YAAYQ,MAAM;IACjC,MAAMC,MAAAA,GAAST,WAAAA,EAAaU,WAAAA,GAAc,WAAA,GAAc,OAAA;;;IAIxD,MAAMC,qBAAAA,GAAwB,MAAMC,MAAAA,CAAOC,EAAE,CAACC,KAAK,CAACR,GAAAA,CAAAA,CAAKS,QAAQ,CAAC;QAChEC,KAAAA,EAAO;AACLT,YAAAA,UAAAA;AACAG,YAAAA,WAAAA,EAAaD,WAAW,WAAA,GAAc;gBAAEQ,GAAAA,EAAK;aAAK,GAAI,IAAA;YACtDT,MAAAA,EAAQ;gBAAES,GAAAA,EAAKT;AAAO;AACxB,SAAA;QACAU,MAAAA,EAAQ;AAAC,YAAA,QAAA;AAAU,YAAA;AAAK;AAC1B,KAAA,CAAA;AAEA,IAAA,MAAMC,YAAY,MAAMP,MAAAA,CAAOQ,SAAS,CAACd,GAAAA,CAAAA,CAAKe,iBAAiB,CAACjB,sBAAAA,CAAAA;AAEhE,IAAA,MAAMkB,KAAAA,CAAMC,GAAG,CAACZ,qBAAAA,EAAuB,OAAOa,KAAAA,GAAAA;QAC5C,MAAMC,eAAAA,GAAkB,MAAMb,MAAAA,CAAOQ,SAAS,CAACM,KAAK,CAACC,aAAa,CAChEC,SAAAA,CAAUxB,sBAAAA,CAAAA,EACV;AACEE,YAAAA,GAAAA;AACAG,YAAAA,MAAAA;AACAD,YAAAA,MAAAA,EAAQgB,MAAMhB,MAAM;YACpBqB,cAAAA,EAAgB;AAClB,SAAA,CAAA;;QAIF,MAAMC,aAAAA,GAAgB,MAAMlB,MAAAA,CACzBQ,SAAS,CAACd,GAAAA,CAAAA,CACVyB,gBAAgB,CAACP,KAAAA,EAAOC,eAAAA,CAAAA;;AAG3B,QAAA,MAAMb,OAAOC,EAAE,CAACC,KAAK,CAACR,GAAAA,CAAAA,CAAK0B,MAAM,CAAC;YAChChB,KAAAA,EAAO;AACLT,gBAAAA,UAAAA;AACAG,gBAAAA,WAAAA,EAAaD,WAAW,WAAA,GAAc;oBAAEQ,GAAAA,EAAK;iBAAK,GAAI,IAAA;gBACtDT,MAAAA,EAAQ;AAAEyB,oBAAAA,GAAAA,EAAKT,MAAMhB;AAAO;AAC9B,aAAA;;;AAGA0B,YAAAA,IAAAA,EAAMC,MAAAA,CAAOC,MAAM,CAACR,SAAAA,CAAUT,SAAAA,CAAAA,EAAYW,aAAAA;AAC5C,SAAA,CAAA;AACF,IAAA,CAAA,CAAA;AACF,CAAA;AAEA,MAAMO,aAAAA,GAAgB,KAAO;AAC3BtC,QAAAA;KACF;;;;"}
1
+ {"version":3,"file":"localizations.mjs","sources":["../../../server/src/services/localizations.ts"],"sourcesContent":["import { cloneDeep, isEmpty } from 'lodash/fp';\n\nimport type { Schema } from '@strapi/types';\nimport { async } from '@strapi/utils';\nimport { getService } from '../utils';\n\n/**\n * Mutates the provided data object in place and returns the same reference\n * with populated media values replaced by their upload file IDs.\n */\nconst normalizeMediaIds = (\n schema: Schema.ContentType | Schema.Component,\n data: Record<string, any>\n) => {\n if (!schema?.attributes || !data || typeof data !== 'object') {\n return data;\n }\n\n Object.entries(schema.attributes).forEach(([attributeName, attribute]) => {\n const value = data[attributeName];\n\n if (value == null) {\n return;\n }\n\n if (attribute.type === 'media') {\n if (attribute.multiple) {\n data[attributeName] = Array.isArray(value)\n ? value.map((file: unknown) =>\n file && typeof file === 'object' && 'id' in file ? file.id : file\n )\n : value;\n } else {\n data[attributeName] =\n value && typeof value === 'object' && 'id' in value ? value.id : value;\n }\n\n return;\n }\n\n if (attribute.type === 'component') {\n const componentSchema = strapi.getModel(attribute.component);\n\n if (attribute.repeatable && Array.isArray(value)) {\n value.forEach((componentValue: Record<string, any>) =>\n normalizeMediaIds(componentSchema, componentValue)\n );\n } else {\n normalizeMediaIds(componentSchema, value);\n }\n\n return;\n }\n\n if (attribute.type === 'dynamiczone' && Array.isArray(value)) {\n value.forEach((componentValue: Record<string, any>) => {\n if (componentValue?.__component) {\n normalizeMediaIds(strapi.getModel(componentValue.__component), componentValue);\n }\n });\n }\n });\n\n return data;\n};\n\n/**\n * Update non localized fields of all the related localizations of an entry with the entry values\n */\nconst syncNonLocalizedAttributes = async (sourceEntry: any, model: Schema.ContentType) => {\n const { copyNonLocalizedAttributes } = getService('content-types');\n\n const nonLocalizedAttributes = copyNonLocalizedAttributes(model, sourceEntry);\n if (isEmpty(nonLocalizedAttributes)) {\n return;\n }\n\n const normalizedNonLocalizedAttributes = normalizeMediaIds(model, nonLocalizedAttributes);\n\n const uid = model.uid;\n const documentId = sourceEntry.documentId;\n const locale = sourceEntry.locale;\n const status = sourceEntry?.publishedAt ? 'published' : 'draft';\n\n // Find all the entries that need to be updated\n // this is every other entry of the document in the same status but a different locale\n const localeEntriesToUpdate = await strapi.db.query(uid).findMany({\n where: {\n documentId,\n publishedAt: status === 'published' ? { $ne: null } : null,\n locale: { $ne: locale },\n },\n select: ['locale', 'id'],\n });\n\n const entryData = await strapi.documents(uid).omitComponentData(normalizedNonLocalizedAttributes);\n\n await async.map(localeEntriesToUpdate, async (entry: any) => {\n const transformedData = await strapi.documents.utils.transformData(\n cloneDeep(normalizedNonLocalizedAttributes),\n {\n uid,\n status,\n locale: entry.locale,\n allowMissingId: true,\n }\n );\n\n // Update or create non localized components for the entry\n const componentData = await strapi\n .documents(uid)\n .updateComponents(entry, transformedData as any);\n\n // Update every other locale entry of this documentId in the same status\n await strapi.db.query(uid).update({\n where: {\n documentId,\n publishedAt: status === 'published' ? { $ne: null } : null,\n locale: { $eq: entry.locale },\n },\n // The data we send to the update function is the entry data merged with\n // the updated component data\n data: Object.assign(cloneDeep(entryData), componentData),\n });\n });\n};\n\nconst localizations = () => ({\n syncNonLocalizedAttributes,\n});\n\ntype LocalizationsService = typeof localizations;\n\nexport default localizations;\nexport type { LocalizationsService };\n"],"names":["normalizeMediaIds","schema","data","attributes","Object","entries","forEach","attributeName","attribute","value","type","multiple","Array","isArray","map","file","id","componentSchema","strapi","getModel","component","repeatable","componentValue","__component","syncNonLocalizedAttributes","sourceEntry","model","copyNonLocalizedAttributes","getService","nonLocalizedAttributes","isEmpty","normalizedNonLocalizedAttributes","uid","documentId","locale","status","publishedAt","localeEntriesToUpdate","db","query","findMany","where","$ne","select","entryData","documents","omitComponentData","async","entry","transformedData","utils","transformData","cloneDeep","allowMissingId","componentData","updateComponents","update","$eq","assign","localizations"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"localizations.d.ts","sourceRoot":"","sources":["../../../../server/src/services/localizations.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AA+D5C,QAAA,MAAM,aAAa;8CAxDoC,GAAG,SAAS,OAAO,WAAW;CA0DnF,CAAC;AAEH,KAAK,oBAAoB,GAAG,OAAO,aAAa,CAAC;AAEjD,eAAe,aAAa,CAAC;AAC7B,YAAY,EAAE,oBAAoB,EAAE,CAAC"}
1
+ {"version":3,"file":"localizations.d.ts","sourceRoot":"","sources":["../../../../server/src/services/localizations.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AA6H5C,QAAA,MAAM,aAAa;8CA1DoC,GAAG,SAAS,OAAO,WAAW;CA4DnF,CAAC;AAEH,KAAK,oBAAoB,GAAG,OAAO,aAAa,CAAC;AAEjD,eAAe,aAAa,CAAC;AAC7B,YAAY,EAAE,oBAAoB,EAAE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@strapi/i18n",
3
- "version": "5.43.0",
3
+ "version": "5.44.0",
4
4
  "description": "Create read and update content in different languages, both from the Admin Panel and from the API",
5
5
  "homepage": "https://strapi.io",
6
6
  "bugs": {
@@ -63,7 +63,7 @@
63
63
  "@reduxjs/toolkit": "1.9.7",
64
64
  "@strapi/design-system": "2.2.0",
65
65
  "@strapi/icons": "2.2.0",
66
- "@strapi/utils": "5.43.0",
66
+ "@strapi/utils": "5.44.0",
67
67
  "lodash": "4.18.1",
68
68
  "qs": "6.15.0",
69
69
  "react-intl": "6.6.2",
@@ -72,11 +72,11 @@
72
72
  "zod": "3.25.67"
73
73
  },
74
74
  "devDependencies": {
75
- "@strapi/admin": "5.43.0",
76
- "@strapi/admin-test-utils": "5.43.0",
77
- "@strapi/content-manager": "5.43.0",
78
- "@strapi/database": "5.43.0",
79
- "@strapi/types": "5.43.0",
75
+ "@strapi/admin": "5.44.0",
76
+ "@strapi/admin-test-utils": "5.44.0",
77
+ "@strapi/content-manager": "5.44.0",
78
+ "@strapi/database": "5.44.0",
79
+ "@strapi/types": "5.44.0",
80
80
  "@testing-library/react": "16.3.0",
81
81
  "@testing-library/user-event": "14.6.1",
82
82
  "koa": "2.16.4",