diff --git a/.gitignore b/.gitignore index 672b5524..8ff36a97 100644 --- a/.gitignore +++ b/.gitignore @@ -30,3 +30,5 @@ report.html .tox/ reports/ # excludes +.DS_Store +*.bak \ No newline at end of file diff --git a/CHANGES.rst b/CHANGES.rst index b74be6cb..304ddffe 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -24,6 +24,16 @@ Changelog - Add principals to groups that already exist during import (#228) [pbauer] +- Adds hierarchical content export/import. A folder structure will be created and a json file per item. + This will allow to keep track of changes for each item. Also allow to move o delete content. + [rber474] + +- Some fixes for spanish translations + [rber474] + +- Modifies import_content and export_content templates to include boostrap classes and change checkboxes to switches. + [rber474] + 1.10 (2023-10-11) ----------------- diff --git a/src/collective/exportimport/config.py b/src/collective/exportimport/config.py index 17dc2b62..c99c4b38 100644 --- a/src/collective/exportimport/config.py +++ b/src/collective/exportimport/config.py @@ -16,3 +16,5 @@ # Discussion Item has its own export / import views, don't show it in the exportable content type list SKIPPED_CONTENTTYPE_IDS = ['Discussion Item'] + +TREE_DIRECTORY = "exported_tree" diff --git a/src/collective/exportimport/export_content.py b/src/collective/exportimport/export_content.py index 77e79c2a..ae4e3149 100644 --- a/src/collective/exportimport/export_content.py +++ b/src/collective/exportimport/export_content.py @@ -3,6 +3,7 @@ from App.config import getConfiguration from collective.exportimport import _ from collective.exportimport import config +from collective.exportimport.filesystem_exporter import FileSystemContentExporter from collective.exportimport.interfaces import IBase64BlobsMarker from collective.exportimport.interfaces import IMigrationMarker from collective.exportimport.interfaces import IPathBlobsMarker @@ -223,7 +224,26 @@ def __call__( noLongerProvides(self.request, IPathBlobsMarker) self.finish() self.request.response.redirect(self.request["ACTUAL_URL"]) + elif download_to_server == 3: + exporter = FileSystemContentExporter() + self.start() + for number, datum in enumerate(content_generator, start=1): + exporter.save(number, datum) + self.finish() + msg = self.context.translate(_( + "hierarchycal_export_success", + u"Exported ${number} items (${types}) as tree to ${target} with ${errors} errors", + mapping={ + u"number": number, + u"types": ", ".join(self.portal_type), + u"target": exporter.root, + u"errors": len(self.errors) + } + )) + logger.info(msg) + api.portal.show_message(msg, self.request) + self.request.response.redirect(self.request["ACTUAL_URL"]) # Export all items into one json-file in the filesystem elif download_to_server: directory = config.CENTRAL_DIRECTORY @@ -262,8 +282,6 @@ def __call__( noLongerProvides(self.request, IPathBlobsMarker) self.finish() self.request.response.redirect(self.request["ACTUAL_URL"]) - - # Export as one json-file through the browser else: with tempfile.TemporaryFile(mode="w+") as f: self.start() @@ -274,7 +292,7 @@ def __call__( f.write(",") json.dump(datum, f, sort_keys=True, indent=4) if number: - if self.errors and self.write_errors: + if self.errors and self.write_errors: f.write(",") errors = {"unexported_paths": self.errors} json.dump(errors, f, indent=4) diff --git a/src/collective/exportimport/filesystem_exporter.py b/src/collective/exportimport/filesystem_exporter.py new file mode 100644 index 00000000..e524b8d2 --- /dev/null +++ b/src/collective/exportimport/filesystem_exporter.py @@ -0,0 +1,106 @@ +# -*- coding: utf-8 -*- +from App.config import getConfiguration +from collective.exportimport import config +from plone import api +from six.moves.urllib.parse import unquote, urlparse + +import json +import logging +import os + + +class FileSystemExporter(object): + """Base FS Exporter""" + + logger = logging.getLogger(__name__) + + def __init__(self): + self._create_base_dirs() + + def _create_base_dirs(self): + """Creates base content directory and subdir deleted_items""" + # Will generate a directory tree with one json file per item + portal_id = api.portal.get().getId() + directory = config.CENTRAL_DIRECTORY + if not directory: + cfg = getConfiguration() + directory = cfg.clienthome + + self.root = os.path.join( + directory, "exported_tree/%s/content" % portal_id + ) + self._make_dir(self.root) + + remove_dir = os.path.join( + directory, "exported_tree/%s/removed_items" % portal_id + ) + self._make_dir(remove_dir) + + return self.root + + def _make_dir(self, path): + """Make directory""" + if not os.path.exists(path): + os.makedirs(path) + self.logger.info("Created path %s", path) + + def create_dir(self, dirname): + """Creates a directory if does not exist + + Args: + dirname (str): dirname to be created + """ + dirpath = os.path.join(self.root, dirname) + self._make_dir(dirpath) + + def get_parents(self, parent): + """Extracts parents of item + + Args: + parent (dict): Parent info dict + + Returns: + (str): relative path + """ + + if not parent: + return "" + + parent_url = unquote(parent["@id"]) + parent_url_parsed = urlparse(parent_url) + + # Get the path part, split it, remove the always empty first element. + parent_path = parent_url_parsed.path.split("/")[1:] + if ( + len(parent_url_parsed.netloc.split(":")) > 1 + or parent_url_parsed.netloc == "nohost" + ): + # For example localhost:8080, or nohost when running tests. + # First element will then be a Plone Site id. + # Get rid of it. + parent_path = parent_path[1:] + + return "/".join(parent_path) + + +class FileSystemContentExporter(FileSystemExporter): + """Deserializes JSON items into a FS tree""" + + def save(self, number, item): + """Saves a json file to filesystem tree + Target directory is related as original parent position in site. + """ + + parent_path = self.get_parents(item.get("parent")) + + if item.get("is_folderish", False): + item_path = os.path.join(parent_path, item.get("id")) + self.create_dir(item_path) + else: + self.create_dir(parent_path) + + # filename = "%s_%s_%s.json" % (number, item.get("@type"), item.get("UID")) + filename = "%s_%s.json" % (number, item.get("id")) + filepath = os.path.join(self.root, parent_path, filename) + with open(filepath, "w") as f: + json.dump(item, f, sort_keys=True, indent=4) diff --git a/src/collective/exportimport/filesystem_importer.py b/src/collective/exportimport/filesystem_importer.py new file mode 100644 index 00000000..e8d91da6 --- /dev/null +++ b/src/collective/exportimport/filesystem_importer.py @@ -0,0 +1,140 @@ +# -*- coding: utf-8 -*- +from collective.exportimport import _ +from glob import iglob +from plone import api +from six.moves.urllib.parse import unquote, urlparse + +import json +import logging +import os +import six + + +if six.PY2: + from pathlib2 import Path +else: + from pathlib import Path + + +class FileSystemImporter(object): + """Base FS Importer""" + + logger = logging.getLogger(__name__) + + def __init__(self, context, server_tree_file): + self.path = server_tree_file + self.context = context + + def get_parents(self, parent): + """Extracts parents of item + + Args: + parent (dict): Parent info dict + + Returns: + (str): relative path + """ + + if not parent: + return "" + + parent_url = unquote(parent["@id"]) + parent_url_parsed = urlparse(parent_url) + + # Get the path part, split it, remove the always empty first element. + parent_path = parent_url_parsed.path.split("/")[1:] + if ( + len(parent_url_parsed.netloc.split(":")) > 1 + or parent_url_parsed.netloc == "nohost" + ): + # For example localhost:8080, or nohost when running tests. + # First element will then be a Plone Site id. + # Get rid of it. + parent_path = parent_path[1:] + + return "/".join(parent_path) + + +class FileSystemContentImporter(FileSystemImporter): + """Deserializes JSON items into a FS tree""" + + def list_files(self): + """Loads all json files from filesystem tree""" + files = iglob(os.path.join(self.path, "**/*.json"), recursive=True) + return files + + def get_hierarchical_files(self): + """Gets all files and folders""" + root = Path(self.path) + portal = api.portal.get() + assert root.is_dir() + + json_files = root.glob("**/*.json") + for json_file in json_files: + self.logger.debug("Importing %s", json_file) + item = json.loads(json_file.read_text()) + json_parent = item.get("parent", {}) + + # Find the real parent nodes as they could be moved + # among directories + prefix = os.path.commonprefix([str(json_file.parent), self.path]) + + # relative path will be the diference between base export path + # and the position of the json file + relative_path = os.path.relpath(str(json_file.parent), prefix) + parent_path = "%s/%s" % ( + "/".join(self.context.getPhysicalPath()), + relative_path) + parents = self.get_parents(json_parent) + + if json_file.parent == Path(os.path.join(self.path, parents)): + yield item + else: + parent_obj = api.content.get(path=parent_path) + if not parent_obj: + # if parent_path is "." or parent_obj doesn't yet exist + parent_obj = portal + + # Modify parent data into json to be yield + # local files won't be modified + if parent_obj: + self.delete_old_if_moved(item.get("UID")) + item["@id"] = item.get("@id") + json_parent.update( + {"@id": parent_obj.absolute_url(), "UID": parent_obj.UID()} + ) + item["parent"] = json_parent + yield item + + def delete_old_if_moved(self, UID): + """Checks if json file was moved by + getting object by UID. If exists, removes object""" + check_if_moved = api.content.get(UID=UID) + if check_if_moved: + # delete all object + api.content.delete(obj=check_if_moved, check_linkintegrity=False) + self.logger.info("Removed old object %s", check_if_moved.UID()) + + def process_deleted(self): + """Will process all elements in removed_items dir""" + root = Path(self.path).parent + removed_items_dir = root / "removed_items" + json_files = removed_items_dir.glob("**/*.json") + deleted_items = [] + for json_file in json_files: + self.logger.debug("Deleting %s", json_file) + item = json.loads(json_file.read_text()) + uid = item.get("UID") + obj = api.content.get(UID=uid) + if obj: + api.content.delete(obj=obj, check_linkintegrity=False) + self.logger.info("Deleted object %s", item.get("UID")) + deleted_items.append(uid) + + return self.context.translate( + _( + "deleted_items_msg", + default=u"Deleted ${items} items.", + mapping={u"items": len(deleted_items)} + ) + ) diff --git a/src/collective/exportimport/import_content.py b/src/collective/exportimport/import_content.py index 895cef6e..90371020 100644 --- a/src/collective/exportimport/import_content.py +++ b/src/collective/exportimport/import_content.py @@ -1,7 +1,9 @@ # -*- coding: utf-8 -*- from Acquisition import aq_base +from App.config import getConfiguration from collective.exportimport import _ from collective.exportimport import config +from collective.exportimport.filesystem_importer import FileSystemContentImporter from collective.exportimport.interfaces import IMigrationMarker from datetime import datetime from DateTime import DateTime @@ -142,6 +144,7 @@ def __call__( return_json=False, limit=None, server_file=None, + server_tree_file=None, iterator=None, server_directory=False, ): @@ -167,7 +170,7 @@ def __call__( status = "success" msg = "" - if server_file and jsonfile: + if server_file and jsonfile and server_tree_file: # This is an error. But when you upload 10 GB AND select a server file, # it is a pity when you would have to upload again. api.portal.show_message( @@ -177,7 +180,7 @@ def __call__( ) server_file = None status = "error" - if server_file and not jsonfile: + if server_file and not jsonfile and not server_tree_file: if server_file in self.server_files: for path in self.import_paths: full_path = os.path.join(path, server_file) @@ -228,6 +231,15 @@ def __call__( msg = self.do_import(filesystem_walker(server_directory)) api.portal.show_message(msg, self.request) + if server_tree_file and not server_file and not jsonfile: + importer = FileSystemContentImporter(self.context, server_tree_file) + msg = self.do_import( + importer.get_hierarchical_files() + ) + api.portal.show_message(msg, self.request) + + msg = importer.process_deleted() + api.portal.show_message(msg, self.request) self.finish() if return_json: @@ -295,6 +307,18 @@ def server_directories(self): listing.sort() return listing + @property + def import_tree_parts(self): + """Returns subdirectories in export tree""" + directory = config.CENTRAL_DIRECTORY + if not directory: + cfg = getConfiguration() + directory = cfg.clienthome + base_path = os.path.join(directory, config.TREE_DIRECTORY) + if os.path.isdir(base_path): + return [os.path.join(base_path, d, "content") for d in os.listdir(base_path)] + return [] + def do_import(self, data): start = datetime.now() alsoProvides(self.request, IMigrationMarker) diff --git a/src/collective/exportimport/locales/collective.exportimport.pot b/src/collective/exportimport/locales/collective.exportimport.pot index 28cd1181..026f4045 100644 --- a/src/collective/exportimport/locales/collective.exportimport.pot +++ b/src/collective/exportimport/locales/collective.exportimport.pot @@ -4,7 +4,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2023-02-17 02:40+0000\n" +"POT-Creation-Date: 2023-10-13 22:12+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI +ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,435 +17,495 @@ msgstr "" "Preferred-Encodings: utf-8 latin1\n" "Domain: collective.exportimport\n" -#: collective/exportimport/import_content.py:961 +#: ../templates/import_content.pt:99 +msgid "# Elements" +msgstr "" + +#: ../import_content.py:1069 msgid "

Creation- and modification-dates are changed during import.This resets them to the original dates of the imported content.

" msgstr "" -#: collective/exportimport/import_content.py:992 +#: ../import_content.py:1100 msgid "

This fixes invalid collection-criteria that were imported from Plone 4 or 5.

" msgstr "" -#: collective/exportimport/templates/import_redirects.pt:32 +#: ../templates/import_redirects.pt:32 msgid "Beware that this import would work only if you keep the same Plone site id and location in the site !" msgstr "" -#: collective/exportimport/import_other.py:517 +#: ../import_other.py:521 msgid "Changed {} default pages" msgstr "" -#: collective/exportimport/templates/import_content.pt:30 +#: ../templates/export_content.pt:154 +msgid "Checking this box puts a list of object paths at the end of the export file that failed to export." +msgstr "" + +#: ../templates/import_content.pt:33 msgid "Choose one" msgstr "" -#: collective/exportimport/templates/export_content.pt:19 +#: ../templates/export_content.pt:19 msgid "Content Types to export" msgstr "" -#: collective/exportimport/import_other.py:687 +#: ../import_other.py:690 msgid "Created {} portlets" msgstr "" -#: collective/exportimport/templates/export_content.pt:71 +#: ../templates/export_content.pt:77 msgid "Depth" msgstr "" -#: collective/exportimport/templates/import_content.pt:56 +#: ../templates/import_content.pt:46 +msgid "Directory on server to import:" +msgstr "" + +#: ../templates/import_content.pt:97 msgid "Do a commit after each number of items" msgstr "" -#: collective/exportimport/templates/export_content.pt:139 -#: collective/exportimport/templates/export_other.pt:19 +#: ../templates/export_content.pt:162 +#: ../templates/export_other.pt:19 msgid "Download to local machine" msgstr "" -#: collective/exportimport/import_content.py:179 +#: ../import_content.py:213 msgid "Exception during upload: {}" msgstr "" -#: collective/exportimport/templates/export_content.pt:155 -#: collective/exportimport/templates/export_other.pt:32 +#: ../templates/export_content.pt:190 +#: ../templates/export_other.pt:32 msgid "Export" msgstr "" -#: collective/exportimport/export_other.py:585 -#: collective/exportimport/templates/links.pt:38 +#: ../export_other.py:587 +#: ../templates/links.pt:38 msgid "Export comments" msgstr "" -#: collective/exportimport/templates/export_content.pt:11 -#: collective/exportimport/templates/links.pt:10 +#: ../templates/export_content.pt:11 +#: ../templates/links.pt:10 msgid "Export content" msgstr "" -#: collective/exportimport/export_other.py:506 -#: collective/exportimport/templates/links.pt:30 +#: ../export_other.py:508 +#: ../templates/links.pt:30 msgid "Export default pages" msgstr "" -#: collective/exportimport/export_other.py:413 -#: collective/exportimport/templates/links.pt:26 +#: ../export_other.py:415 +#: ../templates/links.pt:26 msgid "Export local roles" msgstr "" -#: collective/exportimport/templates/links.pt:22 +#: ../templates/links.pt:22 msgid "Export members" msgstr "" -#: collective/exportimport/export_other.py:233 +#: ../export_other.py:235 msgid "Export members, groups and roles" msgstr "" -#: collective/exportimport/templates/links.pt:34 +#: ../templates/links.pt:34 msgid "Export object positions in parent" msgstr "" -#: collective/exportimport/export_other.py:470 +#: ../export_other.py:472 msgid "Export ordering" msgstr "" -#: collective/exportimport/export_other.py:624 -#: collective/exportimport/templates/links.pt:42 +#: ../export_other.py:628 +#: ../templates/links.pt:42 msgid "Export portlets" msgstr "" -#: collective/exportimport/export_other.py:759 -#: collective/exportimport/templates/links.pt:46 +#: ../export_other.py:779 +#: ../templates/links.pt:46 msgid "Export redirects" msgstr "" -#: collective/exportimport/export_other.py:125 -#: collective/exportimport/templates/links.pt:14 +#: ../export_other.py:127 +#: ../templates/links.pt:14 msgid "Export relations" msgstr "" -#: collective/exportimport/export_other.py:331 -#: collective/exportimport/templates/links.pt:18 +#: ../export_other.py:333 +#: ../templates/links.pt:18 msgid "Export translations" msgstr "" -#: collective/exportimport/export_other.py:101 +#: ../export_other.py:103 msgid "Exported to {}" msgstr "" -#: collective/exportimport/export_content.py:198 -msgid "Exported {} items ({}) as {} to {}" +#: ../export_content.py:271 +msgid "Exported {} items ({}) as {} to {} with {} errors" +msgstr "" + +#: ../export_content.py:213 +msgid "Exported {} items ({}) to {} with {} errors" msgstr "" -#: collective/exportimport/export_content.py:222 -msgid "Exported {} {}" +#: ../export_content.py:299 +msgid "Exported {} {} with {} errors" msgstr "" -#: collective/exportimport/templates/links.pt:8 +#: ../templates/links.pt:8 msgid "Exports" msgstr "" -#: collective/exportimport/import_other.py:91 +#: ../import_other.py:93 msgid "Failure while uploading: {}" msgstr "" -#: collective/exportimport/import_content.py:160 +#: ../import_content.py:194 msgid "File '{}' not found on server." msgstr "" -#: collective/exportimport/templates/import_content.pt:27 +#: ../templates/import_content.pt:30 msgid "File on server to import:" msgstr "" -#: collective/exportimport/import_content.py:1006 +#: ../import_content.py:1114 msgid "Finished fixing collection queries." msgstr "" -#: collective/exportimport/import_content.py:969 +#: ../import_content.py:1077 msgid "Finished resetting creation and modification dates." msgstr "" -#: collective/exportimport/import_content.py:991 -#: collective/exportimport/templates/links.pt:97 +#: ../import_content.py:1099 +#: ../templates/links.pt:97 msgid "Fix collection queries" msgstr "" -#: collective/exportimport/fix_html.py:43 -#: collective/exportimport/templates/links.pt:101 +#: ../fix_html.py:43 +#: ../templates/links.pt:101 msgid "Fix links to content and images in richtext" msgstr "" -#: collective/exportimport/fix_html.py:51 +#: ../fix_html.py:51 msgid "Fixed HTML for {} fields in content items" msgstr "" -#: collective/exportimport/fix_html.py:55 +#: ../fix_html.py:55 msgid "Fixed HTML for {} portlets" msgstr "" -#: collective/exportimport/templates/import_content.pt:38 +#: ../templates/export_content.pt:180 +msgid "Generate a file for each item (as filesytem tree)" +msgstr "" + +#: ../templates/import_content.pt:79 msgid "Handle existing content" msgstr "" -#: collective/exportimport/templates/export_other.pt:44 -#: collective/exportimport/templates/import_defaultpages.pt:31 -#: collective/exportimport/templates/import_discussion.pt:31 +#: ../templates/export_other.pt:44 +#: ../templates/import_defaultpages.pt:31 +#: ../templates/import_discussion.pt:31 msgid "Help" msgstr "" -#: collective/exportimport/templates/import_defaultpages.pt:32 -#: collective/exportimport/templates/import_discussion.pt:32 -#: collective/exportimport/templates/import_localroles.pt:32 +#: ../templates/import_defaultpages.pt:32 +#: ../templates/import_discussion.pt:32 +#: ../templates/import_localroles.pt:32 msgid "Here is a example for the expected format. This is the format created by collective.exportimport when used for export." msgstr "" -#: collective/exportimport/templates/import_redirects.pt:34 +#: ../templates/import_redirects.pt:34 msgid "Here is an example for the expected format. This is the format created by collective.exportimport when used for export." msgstr "" -#: collective/exportimport/templates/import_content.pt:13 -#: collective/exportimport/templates/import_defaultpages.pt:13 -#: collective/exportimport/templates/import_discussion.pt:13 +#: ../templates/import_content.pt:15 +#: ../templates/import_defaultpages.pt:13 +#: ../templates/import_discussion.pt:13 msgid "Here you can upload a json-file." msgstr "" -#: collective/exportimport/templates/import_content.pt:39 +#: ../templates/import_content.pt:90 msgid "How should content be handled that exists with the same id/path?" msgstr "" -#: collective/exportimport/templates/export_content.pt:88 +#: ../templates/export_content.pt:105 msgid "How should data from image- and file-fields be included?" msgstr "" -#: collective/exportimport/import_content.py:127 +#: ../import_content.py:161 msgid "Ignore: Create with a new id" msgstr "" -#: collective/exportimport/templates/import_content.pt:92 -#: collective/exportimport/templates/import_defaultpages.pt:20 -#: collective/exportimport/templates/import_discussion.pt:20 +#: ../templates/import_content.pt:134 +#: ../templates/import_defaultpages.pt:20 +#: ../templates/import_discussion.pt:20 msgid "Import" msgstr "" -#: collective/exportimport/templates/import_content.pt:11 +#: ../templates/import_content.pt:11 msgid "Import Content" msgstr "" -#: collective/exportimport/templates/import_defaultpages.pt:11 +#: ../templates/import_defaultpages.pt:11 msgid "Import Default Pages" msgstr "" -#: collective/exportimport/templates/import_discussion.pt:11 +#: ../templates/import_discussion.pt:11 msgid "Import Discussion" msgstr "" -#: collective/exportimport/templates/import_localroles.pt:11 +#: ../templates/import_localroles.pt:11 msgid "Import Localroles" msgstr "" -#: collective/exportimport/templates/import_members.pt:11 +#: ../templates/import_members.pt:11 msgid "Import Members, Groups and their Roles" msgstr "" -#: collective/exportimport/templates/import_ordering.pt:11 +#: ../templates/import_ordering.pt:11 msgid "Import Object Positions in Parent" msgstr "" -#: collective/exportimport/templates/import_redirects.pt:11 +#: ../templates/import_redirects.pt:11 msgid "Import Redirects" msgstr "" -#: collective/exportimport/templates/import_relations.pt:11 +#: ../templates/import_relations.pt:11 msgid "Import Relations" msgstr "" -#: collective/exportimport/templates/import_content.pt:71 +#: ../templates/import_content.pt:113 msgid "Import all items into the current folder" msgstr "" -#: collective/exportimport/templates/import_content.pt:83 +#: ../templates/import_content.pt:125 msgid "Import all old revisions" msgstr "" -#: collective/exportimport/templates/links.pt:81 +#: ../templates/links.pt:81 msgid "Import comments" msgstr "" -#: collective/exportimport/templates/links.pt:53 +#: ../templates/links.pt:53 msgid "Import content" msgstr "" -#: collective/exportimport/templates/links.pt:73 +#: ../templates/links.pt:73 msgid "Import default pages" msgstr "" -#: collective/exportimport/templates/links.pt:69 +#: ../templates/links.pt:69 msgid "Import local roles" msgstr "" -#: collective/exportimport/templates/links.pt:65 +#: ../templates/links.pt:65 msgid "Import members" msgstr "" -#: collective/exportimport/templates/links.pt:77 +#: ../templates/links.pt:77 msgid "Import object positions in parent" msgstr "" -#: collective/exportimport/templates/import_portlets.pt:11 -#: collective/exportimport/templates/links.pt:85 +#: ../templates/import_portlets.pt:11 +#: ../templates/links.pt:85 msgid "Import portlets" msgstr "" -#: collective/exportimport/templates/links.pt:89 +#: ../templates/links.pt:89 msgid "Import redirects" msgstr "" -#: collective/exportimport/templates/links.pt:57 +#: ../templates/links.pt:57 msgid "Import relations" msgstr "" -#: collective/exportimport/templates/import_translations.pt:11 -#: collective/exportimport/templates/links.pt:61 +#: ../templates/import_translations.pt:11 +#: ../templates/links.pt:61 msgid "Import translations" msgstr "" -#: collective/exportimport/import_other.py:590 +#: ../import_other.py:594 msgid "Imported {} comments" msgstr "" -#: collective/exportimport/import_other.py:201 +#: ../import_other.py:203 msgid "Imported {} groups and {} members" msgstr "" -#: collective/exportimport/import_other.py:392 +#: ../import_other.py:393 msgid "Imported {} localroles" msgstr "" -#: collective/exportimport/import_other.py:464 +#: ../import_other.py:468 msgid "Imported {} orders in {} seconds" msgstr "" -#: collective/exportimport/templates/links.pt:51 +#: ../templates/links.pt:51 msgid "Imports" msgstr "" -#: collective/exportimport/templates/export_content.pt:87 +#: ../templates/export_content.pt:94 msgid "Include blobs" msgstr "" -#: collective/exportimport/templates/export_content.pt:129 +#: ../templates/export_content.pt:136 msgid "Include revisions." msgstr "" -#: collective/exportimport/templates/export_content.pt:113 +#: ../templates/export_content.pt:120 msgid "Modify exported data for migrations." msgstr "" -#: collective/exportimport/templates/import_redirects.pt:33 +#: ../templates/import_redirects.pt:33 msgid "More code is needed if you have another use case." msgstr "" -#: collective/exportimport/export_other.py:84 +#: ../export_other.py:86 msgid "No data to export for {}" msgstr "" -#: collective/exportimport/templates/import_content.pt:25 -msgid "No files found." +#: ../templates/import_content.pt:44 +msgid "No directories to import from found." +msgstr "" + +#: ../templates/import_content.pt:28 +msgid "No json-files found." +msgstr "" + +#: ../templates/import_content.pt:77 +msgid "Options" msgstr "" -#: collective/exportimport/templates/export_content.pt:63 +#: ../templates/export_content.pt:69 msgid "Path" msgstr "" -#: collective/exportimport/import_other.py:822 +#: ../import_other.py:873 msgid "Redirects imported" msgstr "" -#: collective/exportimport/import_content.py:125 +#: ../import_content.py:159 msgid "Replace: Delete item and create new" msgstr "" -#: collective/exportimport/templates/links.pt:93 +#: ../templates/links.pt:93 msgid "Reset created and modified dates" msgstr "" -#: collective/exportimport/import_content.py:960 +#: ../import_content.py:1068 msgid "Reset creation and modification date" msgstr "" -#: collective/exportimport/templates/export_content.pt:145 -#: collective/exportimport/templates/export_other.pt:25 +#: ../templates/export_content.pt:174 +msgid "Save each item as a separate file on the server" +msgstr "" + +#: ../templates/export_content.pt:168 +#: ../templates/export_other.pt:25 msgid "Save to file on server" msgstr "" -#: collective/exportimport/templates/export_content.pt:24 +#: ../templates/export_content.pt:25 msgid "Select all/none" msgstr "" -#: collective/exportimport/export_content.py:150 +#: ../export_content.py:154 msgid "Select at least one type to export" msgstr "" -#: collective/exportimport/templates/export_content.pt:13 +#: ../templates/export_content.pt:13 msgid "Select which content to export as a json-file." msgstr "" -#: collective/exportimport/import_content.py:124 +#: ../import_content.py:158 msgid "Skip: Don't import at all" msgstr "" -#: collective/exportimport/templates/export_content.pt:130 +#: ../templates/export_content.pt:138 msgid "This exports the content-history (versioning) of each exported item. Warning: This can significantly slow down the export!" msgstr "" -#: collective/exportimport/templates/import_content.pt:84 +#: ../templates/import_content.pt:127 msgid "This will import the content-history (versioning) for each item that has revisions. Warning: This can significantly slow down the import!" msgstr "" -#: collective/exportimport/templates/export_content.pt:72 +#: ../templates/export_content.pt:88 msgid "Unlimited: this item and all children, 0: this object only, 1: only direct children of this object, 2-x: children of this object up to the specified level" msgstr "" -#: collective/exportimport/import_content.py:126 +#: ../import_content.py:160 msgid "Update: Reuse and only overwrite imported data" msgstr "" -#: collective/exportimport/templates/export_content.pt:114 +#: ../templates/export_content.pt:122 msgid "Use this if you want to import the data in a newer version of Plone or migrate from Archetypes to Dexterity. Read the documentation to learn which changes are made by this option." msgstr "" -#: collective/exportimport/import_other.py:288 +#: ../templates/export_content.pt:152 +msgid "Write out Errors to file." +msgstr "" + +#: ../templates/import_content.pt:21 +msgid "You can also select a json-file or a directory holding json-files on the server in the following locations:" +msgstr "" + +#: ../import_other.py:289 msgid "You need either Plone 6 or collective.relationhelpers to import relations" msgstr "" -#: collective/exportimport/export_content.py:139 +#: ../export_content.py:142 msgid "as base-64 encoded strings" msgstr "" -#: collective/exportimport/export_content.py:140 +#: ../export_content.py:143 msgid "as blob paths" msgstr "" -#: collective/exportimport/export_content.py:138 +#: ../export_content.py:141 msgid "as download urls" msgstr "" -#: collective/exportimport/templates/export_content.pt:155 +#. Default: "Deleted ${items} items." +#: ../filesystem_importer.py:135 +msgid "deleted_items_msg" +msgstr "" + +#: ../templates/export_content.pt:190 msgid "export" msgstr "" -#: collective/exportimport/import_content.py:143 +#. Default: "Exported ${number} items (${types}) as tree to ${target} with ${errors} errors" +#: ../export_content.py:233 +msgid "hierarchycal_export_success" +msgstr "" + +#: ../import_content.py:177 msgid "json file was uploaded, so the selected server file was ignored." msgstr "" #. Default: "Toggle all" -#: collective/exportimport/templates/export_content.pt:22 +#: ../templates/export_content.pt:23 msgid "label_toggle" msgstr "" -#: collective/exportimport/import_content.py:996 +#: ../import_content.py:1104 msgid "plone.app.querystring.upgrades.fix_select_all_existing_collections is not available" msgstr "" -#. Default: "Or you can choose a file that is already uploaded on the server in one of these paths:" -#: collective/exportimport/templates/import_content.pt:21 +#. Default: "Import from a json-file" +#: ../templates/import_content.pt:27 msgid "server_paths_list" msgstr "" -#: collective/exportimport/export_content.py:123 +#. Default: "Or you can choose from a tree export in the server in one of these paths:" +#: ../templates/import_content.pt:59 +msgid "server_paths_list_hierarchical" +msgstr "" + +#. Default: "Import from a directory that holds individual json-files per item:" +#: ../templates/import_content.pt:43 +msgid "server_paths_list_per_json_file" +msgstr "" + +#: ../export_content.py:126 msgid "unlimited" msgstr "" diff --git a/src/collective/exportimport/locales/en/LC_MESSAGES/collective.exportimport.po b/src/collective/exportimport/locales/en/LC_MESSAGES/collective.exportimport.po index 30b2ece5..8d59bbe5 100644 --- a/src/collective/exportimport/locales/en/LC_MESSAGES/collective.exportimport.po +++ b/src/collective/exportimport/locales/en/LC_MESSAGES/collective.exportimport.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2023-02-17 02:40+0000\n" +"POT-Creation-Date: 2023-10-13 22:12+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI +ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -14,435 +14,495 @@ msgstr "" "Preferred-Encodings: utf-8 latin1\n" "Domain: DOMAIN\n" -#: collective/exportimport/import_content.py:961 +#: ../templates/import_content.pt:99 +msgid "# Elements" +msgstr "" + +#: ../import_content.py:1069 msgid "

Creation- and modification-dates are changed during import.This resets them to the original dates of the imported content.

" msgstr "" -#: collective/exportimport/import_content.py:992 +#: ../import_content.py:1100 msgid "

This fixes invalid collection-criteria that were imported from Plone 4 or 5.

" msgstr "" -#: collective/exportimport/templates/import_redirects.pt:32 +#: ../templates/import_redirects.pt:32 msgid "Beware that this import would work only if you keep the same Plone site id and location in the site !" msgstr "" -#: collective/exportimport/import_other.py:517 +#: ../import_other.py:521 msgid "Changed {} default pages" msgstr "" -#: collective/exportimport/templates/import_content.pt:30 +#: ../templates/export_content.pt:154 +msgid "Checking this box puts a list of object paths at the end of the export file that failed to export." +msgstr "" + +#: ../templates/import_content.pt:33 msgid "Choose one" msgstr "" -#: collective/exportimport/templates/export_content.pt:19 +#: ../templates/export_content.pt:19 msgid "Content Types to export" msgstr "" -#: collective/exportimport/import_other.py:687 +#: ../import_other.py:690 msgid "Created {} portlets" msgstr "" -#: collective/exportimport/templates/export_content.pt:71 +#: ../templates/export_content.pt:77 msgid "Depth" msgstr "" -#: collective/exportimport/templates/import_content.pt:56 +#: ../templates/import_content.pt:46 +msgid "Directory on server to import:" +msgstr "" + +#: ../templates/import_content.pt:97 msgid "Do a commit after each number of items" msgstr "" -#: collective/exportimport/templates/export_content.pt:139 -#: collective/exportimport/templates/export_other.pt:19 +#: ../templates/export_content.pt:162 +#: ../templates/export_other.pt:19 msgid "Download to local machine" msgstr "" -#: collective/exportimport/import_content.py:179 +#: ../import_content.py:213 msgid "Exception during upload: {}" msgstr "" -#: collective/exportimport/templates/export_content.pt:155 -#: collective/exportimport/templates/export_other.pt:32 +#: ../templates/export_content.pt:190 +#: ../templates/export_other.pt:32 msgid "Export" msgstr "" -#: collective/exportimport/export_other.py:585 -#: collective/exportimport/templates/links.pt:38 +#: ../export_other.py:587 +#: ../templates/links.pt:38 msgid "Export comments" msgstr "" -#: collective/exportimport/templates/export_content.pt:11 -#: collective/exportimport/templates/links.pt:10 +#: ../templates/export_content.pt:11 +#: ../templates/links.pt:10 msgid "Export content" msgstr "" -#: collective/exportimport/export_other.py:506 -#: collective/exportimport/templates/links.pt:30 +#: ../export_other.py:508 +#: ../templates/links.pt:30 msgid "Export default pages" msgstr "" -#: collective/exportimport/export_other.py:413 -#: collective/exportimport/templates/links.pt:26 +#: ../export_other.py:415 +#: ../templates/links.pt:26 msgid "Export local roles" msgstr "" -#: collective/exportimport/templates/links.pt:22 +#: ../templates/links.pt:22 msgid "Export members" msgstr "" -#: collective/exportimport/export_other.py:233 +#: ../export_other.py:235 msgid "Export members, groups and roles" msgstr "" -#: collective/exportimport/templates/links.pt:34 +#: ../templates/links.pt:34 msgid "Export object positions in parent" msgstr "" -#: collective/exportimport/export_other.py:470 +#: ../export_other.py:472 msgid "Export ordering" msgstr "" -#: collective/exportimport/export_other.py:624 -#: collective/exportimport/templates/links.pt:42 +#: ../export_other.py:628 +#: ../templates/links.pt:42 msgid "Export portlets" msgstr "" -#: collective/exportimport/export_other.py:759 -#: collective/exportimport/templates/links.pt:46 +#: ../export_other.py:779 +#: ../templates/links.pt:46 msgid "Export redirects" msgstr "" -#: collective/exportimport/export_other.py:125 -#: collective/exportimport/templates/links.pt:14 +#: ../export_other.py:127 +#: ../templates/links.pt:14 msgid "Export relations" msgstr "" -#: collective/exportimport/export_other.py:331 -#: collective/exportimport/templates/links.pt:18 +#: ../export_other.py:333 +#: ../templates/links.pt:18 msgid "Export translations" msgstr "" -#: collective/exportimport/export_other.py:101 +#: ../export_other.py:103 msgid "Exported to {}" msgstr "" -#: collective/exportimport/export_content.py:198 -msgid "Exported {} items ({}) as {} to {}" +#: ../export_content.py:271 +msgid "Exported {} items ({}) as {} to {} with {} errors" +msgstr "" + +#: ../export_content.py:213 +msgid "Exported {} items ({}) to {} with {} errors" msgstr "" -#: collective/exportimport/export_content.py:222 -msgid "Exported {} {}" +#: ../export_content.py:299 +msgid "Exported {} {} with {} errors" msgstr "" -#: collective/exportimport/templates/links.pt:8 +#: ../templates/links.pt:8 msgid "Exports" msgstr "" -#: collective/exportimport/import_other.py:91 +#: ../import_other.py:93 msgid "Failure while uploading: {}" msgstr "" -#: collective/exportimport/import_content.py:160 +#: ../import_content.py:194 msgid "File '{}' not found on server." msgstr "" -#: collective/exportimport/templates/import_content.pt:27 +#: ../templates/import_content.pt:30 msgid "File on server to import:" msgstr "" -#: collective/exportimport/import_content.py:1006 +#: ../import_content.py:1114 msgid "Finished fixing collection queries." msgstr "" -#: collective/exportimport/import_content.py:969 +#: ../import_content.py:1077 msgid "Finished resetting creation and modification dates." msgstr "" -#: collective/exportimport/import_content.py:991 -#: collective/exportimport/templates/links.pt:97 +#: ../import_content.py:1099 +#: ../templates/links.pt:97 msgid "Fix collection queries" msgstr "" -#: collective/exportimport/fix_html.py:43 -#: collective/exportimport/templates/links.pt:101 +#: ../fix_html.py:43 +#: ../templates/links.pt:101 msgid "Fix links to content and images in richtext" msgstr "" -#: collective/exportimport/fix_html.py:51 +#: ../fix_html.py:51 msgid "Fixed HTML for {} fields in content items" msgstr "" -#: collective/exportimport/fix_html.py:55 +#: ../fix_html.py:55 msgid "Fixed HTML for {} portlets" msgstr "" -#: collective/exportimport/templates/import_content.pt:38 +#: ../templates/export_content.pt:180 +msgid "Generate a file for each item (as filesytem tree)" +msgstr "" + +#: ../templates/import_content.pt:79 msgid "Handle existing content" msgstr "" -#: collective/exportimport/templates/export_other.pt:44 -#: collective/exportimport/templates/import_defaultpages.pt:31 -#: collective/exportimport/templates/import_discussion.pt:31 +#: ../templates/export_other.pt:44 +#: ../templates/import_defaultpages.pt:31 +#: ../templates/import_discussion.pt:31 msgid "Help" msgstr "" -#: collective/exportimport/templates/import_defaultpages.pt:32 -#: collective/exportimport/templates/import_discussion.pt:32 -#: collective/exportimport/templates/import_localroles.pt:32 +#: ../templates/import_defaultpages.pt:32 +#: ../templates/import_discussion.pt:32 +#: ../templates/import_localroles.pt:32 msgid "Here is a example for the expected format. This is the format created by collective.exportimport when used for export." msgstr "" -#: collective/exportimport/templates/import_redirects.pt:34 +#: ../templates/import_redirects.pt:34 msgid "Here is an example for the expected format. This is the format created by collective.exportimport when used for export." msgstr "" -#: collective/exportimport/templates/import_content.pt:13 -#: collective/exportimport/templates/import_defaultpages.pt:13 -#: collective/exportimport/templates/import_discussion.pt:13 +#: ../templates/import_content.pt:15 +#: ../templates/import_defaultpages.pt:13 +#: ../templates/import_discussion.pt:13 msgid "Here you can upload a json-file." msgstr "" -#: collective/exportimport/templates/import_content.pt:39 +#: ../templates/import_content.pt:90 msgid "How should content be handled that exists with the same id/path?" msgstr "" -#: collective/exportimport/templates/export_content.pt:88 +#: ../templates/export_content.pt:105 msgid "How should data from image- and file-fields be included?" msgstr "" -#: collective/exportimport/import_content.py:127 +#: ../import_content.py:161 msgid "Ignore: Create with a new id" msgstr "" -#: collective/exportimport/templates/import_content.pt:92 -#: collective/exportimport/templates/import_defaultpages.pt:20 -#: collective/exportimport/templates/import_discussion.pt:20 +#: ../templates/import_content.pt:134 +#: ../templates/import_defaultpages.pt:20 +#: ../templates/import_discussion.pt:20 msgid "Import" msgstr "" -#: collective/exportimport/templates/import_content.pt:11 +#: ../templates/import_content.pt:11 msgid "Import Content" msgstr "" -#: collective/exportimport/templates/import_defaultpages.pt:11 +#: ../templates/import_defaultpages.pt:11 msgid "Import Default Pages" msgstr "" -#: collective/exportimport/templates/import_discussion.pt:11 +#: ../templates/import_discussion.pt:11 msgid "Import Discussion" msgstr "" -#: collective/exportimport/templates/import_localroles.pt:11 +#: ../templates/import_localroles.pt:11 msgid "Import Localroles" msgstr "" -#: collective/exportimport/templates/import_members.pt:11 +#: ../templates/import_members.pt:11 msgid "Import Members, Groups and their Roles" msgstr "" -#: collective/exportimport/templates/import_ordering.pt:11 +#: ../templates/import_ordering.pt:11 msgid "Import Object Positions in Parent" msgstr "" -#: collective/exportimport/templates/import_redirects.pt:11 +#: ../templates/import_redirects.pt:11 msgid "Import Redirects" msgstr "" -#: collective/exportimport/templates/import_relations.pt:11 +#: ../templates/import_relations.pt:11 msgid "Import Relations" msgstr "" -#: collective/exportimport/templates/import_content.pt:71 +#: ../templates/import_content.pt:113 msgid "Import all items into the current folder" msgstr "" -#: collective/exportimport/templates/import_content.pt:83 +#: ../templates/import_content.pt:125 msgid "Import all old revisions" msgstr "" -#: collective/exportimport/templates/links.pt:81 +#: ../templates/links.pt:81 msgid "Import comments" msgstr "" -#: collective/exportimport/templates/links.pt:53 +#: ../templates/links.pt:53 msgid "Import content" msgstr "" -#: collective/exportimport/templates/links.pt:73 +#: ../templates/links.pt:73 msgid "Import default pages" msgstr "" -#: collective/exportimport/templates/links.pt:69 +#: ../templates/links.pt:69 msgid "Import local roles" msgstr "" -#: collective/exportimport/templates/links.pt:65 +#: ../templates/links.pt:65 msgid "Import members" msgstr "" -#: collective/exportimport/templates/links.pt:77 +#: ../templates/links.pt:77 msgid "Import object positions in parent" msgstr "" -#: collective/exportimport/templates/import_portlets.pt:11 -#: collective/exportimport/templates/links.pt:85 +#: ../templates/import_portlets.pt:11 +#: ../templates/links.pt:85 msgid "Import portlets" msgstr "" -#: collective/exportimport/templates/links.pt:89 +#: ../templates/links.pt:89 msgid "Import redirects" msgstr "" -#: collective/exportimport/templates/links.pt:57 +#: ../templates/links.pt:57 msgid "Import relations" msgstr "" -#: collective/exportimport/templates/import_translations.pt:11 -#: collective/exportimport/templates/links.pt:61 +#: ../templates/import_translations.pt:11 +#: ../templates/links.pt:61 msgid "Import translations" msgstr "" -#: collective/exportimport/import_other.py:590 +#: ../import_other.py:594 msgid "Imported {} comments" msgstr "" -#: collective/exportimport/import_other.py:201 +#: ../import_other.py:203 msgid "Imported {} groups and {} members" msgstr "" -#: collective/exportimport/import_other.py:392 +#: ../import_other.py:393 msgid "Imported {} localroles" msgstr "" -#: collective/exportimport/import_other.py:464 +#: ../import_other.py:468 msgid "Imported {} orders in {} seconds" msgstr "" -#: collective/exportimport/templates/links.pt:51 +#: ../templates/links.pt:51 msgid "Imports" msgstr "" -#: collective/exportimport/templates/export_content.pt:87 +#: ../templates/export_content.pt:94 msgid "Include blobs" msgstr "" -#: collective/exportimport/templates/export_content.pt:129 +#: ../templates/export_content.pt:136 msgid "Include revisions." msgstr "" -#: collective/exportimport/templates/export_content.pt:113 +#: ../templates/export_content.pt:120 msgid "Modify exported data for migrations." msgstr "" -#: collective/exportimport/templates/import_redirects.pt:33 +#: ../templates/import_redirects.pt:33 msgid "More code is needed if you have another use case." msgstr "" -#: collective/exportimport/export_other.py:84 +#: ../export_other.py:86 msgid "No data to export for {}" msgstr "" -#: collective/exportimport/templates/import_content.pt:25 -msgid "No files found." +#: ../templates/import_content.pt:44 +msgid "No directories to import from found." +msgstr "" + +#: ../templates/import_content.pt:28 +msgid "No json-files found." +msgstr "" + +#: ../templates/import_content.pt:77 +msgid "Options" msgstr "" -#: collective/exportimport/templates/export_content.pt:63 +#: ../templates/export_content.pt:69 msgid "Path" msgstr "" -#: collective/exportimport/import_other.py:822 +#: ../import_other.py:873 msgid "Redirects imported" msgstr "" -#: collective/exportimport/import_content.py:125 +#: ../import_content.py:159 msgid "Replace: Delete item and create new" msgstr "" -#: collective/exportimport/templates/links.pt:93 +#: ../templates/links.pt:93 msgid "Reset created and modified dates" msgstr "" -#: collective/exportimport/import_content.py:960 +#: ../import_content.py:1068 msgid "Reset creation and modification date" msgstr "" -#: collective/exportimport/templates/export_content.pt:145 -#: collective/exportimport/templates/export_other.pt:25 +#: ../templates/export_content.pt:174 +msgid "Save each item as a separate file on the server" +msgstr "" + +#: ../templates/export_content.pt:168 +#: ../templates/export_other.pt:25 msgid "Save to file on server" msgstr "" -#: collective/exportimport/templates/export_content.pt:24 +#: ../templates/export_content.pt:25 msgid "Select all/none" msgstr "" -#: collective/exportimport/export_content.py:150 +#: ../export_content.py:154 msgid "Select at least one type to export" msgstr "" -#: collective/exportimport/templates/export_content.pt:13 +#: ../templates/export_content.pt:13 msgid "Select which content to export as a json-file." msgstr "" -#: collective/exportimport/import_content.py:124 +#: ../import_content.py:158 msgid "Skip: Don't import at all" msgstr "" -#: collective/exportimport/templates/export_content.pt:130 +#: ../templates/export_content.pt:138 msgid "This exports the content-history (versioning) of each exported item. Warning: This can significantly slow down the export!" msgstr "" -#: collective/exportimport/templates/import_content.pt:84 +#: ../templates/import_content.pt:127 msgid "This will import the content-history (versioning) for each item that has revisions. Warning: This can significantly slow down the import!" msgstr "" -#: collective/exportimport/templates/export_content.pt:72 +#: ../templates/export_content.pt:88 msgid "Unlimited: this item and all children, 0: this object only, 1: only direct children of this object, 2-x: children of this object up to the specified level" msgstr "" -#: collective/exportimport/import_content.py:126 +#: ../import_content.py:160 msgid "Update: Reuse and only overwrite imported data" msgstr "" -#: collective/exportimport/templates/export_content.pt:114 +#: ../templates/export_content.pt:122 msgid "Use this if you want to import the data in a newer version of Plone or migrate from Archetypes to Dexterity. Read the documentation to learn which changes are made by this option." msgstr "" -#: collective/exportimport/import_other.py:288 +#: ../templates/export_content.pt:152 +msgid "Write out Errors to file." +msgstr "" + +#: ../templates/import_content.pt:21 +msgid "You can also select a json-file or a directory holding json-files on the server in the following locations:" +msgstr "" + +#: ../import_other.py:289 msgid "You need either Plone 6 or collective.relationhelpers to import relations" msgstr "" -#: collective/exportimport/export_content.py:139 +#: ../export_content.py:142 msgid "as base-64 encoded strings" msgstr "" -#: collective/exportimport/export_content.py:140 +#: ../export_content.py:143 msgid "as blob paths" msgstr "" -#: collective/exportimport/export_content.py:138 +#: ../export_content.py:141 msgid "as download urls" msgstr "" -#: collective/exportimport/templates/export_content.pt:155 +#. Default: "Deleted ${items} items." +#: ../filesystem_importer.py:135 +msgid "deleted_items_msg" +msgstr "" + +#: ../templates/export_content.pt:190 msgid "export" msgstr "" -#: collective/exportimport/import_content.py:143 +#. Default: "Exported ${number} items (${types}) as tree to ${target} with ${errors} errors" +#: ../export_content.py:233 +msgid "hierarchycal_export_success" +msgstr "" + +#: ../import_content.py:177 msgid "json file was uploaded, so the selected server file was ignored." msgstr "" #. Default: "Toggle all" -#: collective/exportimport/templates/export_content.pt:22 +#: ../templates/export_content.pt:23 msgid "label_toggle" msgstr "" -#: collective/exportimport/import_content.py:996 +#: ../import_content.py:1104 msgid "plone.app.querystring.upgrades.fix_select_all_existing_collections is not available" msgstr "" -#. Default: "Or you can choose a file that is already uploaded on the server in one of these paths:" -#: collective/exportimport/templates/import_content.pt:21 +#. Default: "Import from a json-file" +#: ../templates/import_content.pt:27 msgid "server_paths_list" msgstr "" -#: collective/exportimport/export_content.py:123 +#. Default: "Or you can choose from a tree export in the server in one of these paths:" +#: ../templates/import_content.pt:59 +msgid "server_paths_list_hierarchical" +msgstr "" + +#. Default: "Import from a directory that holds individual json-files per item:" +#: ../templates/import_content.pt:43 +msgid "server_paths_list_per_json_file" +msgstr "" + +#: ../export_content.py:126 msgid "unlimited" msgstr "" diff --git a/src/collective/exportimport/locales/es/LC_MESSAGES/collective.exportimport.po b/src/collective/exportimport/locales/es/LC_MESSAGES/collective.exportimport.po index e640578c..68800584 100644 --- a/src/collective/exportimport/locales/es/LC_MESSAGES/collective.exportimport.po +++ b/src/collective/exportimport/locales/es/LC_MESSAGES/collective.exportimport.po @@ -2,460 +2,511 @@ msgid "" msgstr "" "Project-Id-Version: collective.exportimport\n" -"POT-Creation-Date: 2023-02-17 02:33+0000\n" +"POT-Creation-Date: 2023-10-13 22:12+0000\n" "PO-Revision-Date: 2023-02-16 22:41-0400\n" "Last-Translator: Leonardo J. Caballero G. \n" "Language-Team: ES \n" -"Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Virtaal 0.7.1\n" "Language-Code: es\n" "Language-Name: Español\n" "Preferred-Encodings: utf-8 latin1\n" "Domain: collective.exportimport\n" +"Language: es\n" +"X-Generator: Virtaal 0.7.1\n" "X-Is-Fallback-For: es-ar es-bo es-cl es-co es-cr es-do es-ec es-es es-sv es-gt es-hn es-mx es-ni es-pa es-py es-pe es-pr es-us es-uy es-ve\n" -#: collective/exportimport/import_content.py:961 +#: ../templates/import_content.pt:99 +msgid "# Elements" +msgstr "Nº elementos" + +#: ../import_content.py:1069 msgid "

Creation- and modification-dates are changed during import.This resets them to the original dates of the imported content.

" -msgstr "" -"

Las fechas de creación y modificación se cambian durante la importación. " -"Esto las restablece a las fechas originales del contenido importado.

" +msgstr "

Las fechas de creación y modificación se cambian durante la importación. Esto las restablece a las fechas originales del contenido importado.

" -#: collective/exportimport/import_content.py:992 +#: ../import_content.py:1100 msgid "

This fixes invalid collection-criteria that were imported from Plone 4 or 5.

" msgstr "

Esto corrige los criterios de recopilación no válidos que se importaron de Plone 4 o 5.

" -#: collective/exportimport/templates/import_redirects.pt:32 +#: ../templates/import_redirects.pt:32 msgid "Beware that this import would work only if you keep the same Plone site id and location in the site !" -msgstr "" -"¡Tenga en cuenta que esta importación solo funcionaría si mantiene la misma " -"identificación y ubicación del sitio de Plone en el sitio!" +msgstr "¡Tenga en cuenta que esta importación solo funcionaría si mantiene la misma identificación y ubicación del sitio de Plone en el sitio!" -#: collective/exportimport/import_other.py:517 +#: ../import_other.py:521 msgid "Changed {} default pages" msgstr "Se cambiaron {} páginas predeterminadas" -#: collective/exportimport/templates/import_content.pt:30 +#: ../templates/export_content.pt:154 +msgid "Checking this box puts a list of object paths at the end of the export file that failed to export." +msgstr "Seleccionar esta opción pone una lista de rutas, de objetos cuya exportación falló, al final del archivo de exportación" + +#: ../templates/import_content.pt:33 msgid "Choose one" msgstr "Elige uno" -#: collective/exportimport/templates/export_content.pt:19 +#: ../templates/export_content.pt:19 msgid "Content Types to export" msgstr "Tipos de contenido para exportar" -#: collective/exportimport/import_other.py:687 +#: ../import_other.py:690 msgid "Created {} portlets" msgstr "Creados {} portlets" -#: collective/exportimport/templates/export_content.pt:71 +#: ../templates/export_content.pt:77 msgid "Depth" msgstr "Profundidad" -#: collective/exportimport/templates/import_content.pt:56 +#: ../templates/import_content.pt:46 +msgid "Directory on server to import:" +msgstr "Directorio del servidor desde el que importar" + +#: ../templates/import_content.pt:97 msgid "Do a commit after each number of items" msgstr "Haz una confirmación después de cada número de elementos" -#: collective/exportimport/templates/export_content.pt:139 -#: collective/exportimport/templates/export_other.pt:19 +#: ../templates/export_content.pt:162 +#: ../templates/export_other.pt:19 msgid "Download to local machine" msgstr "Descargar a la máquina local" -#: collective/exportimport/import_content.py:179 +#: ../import_content.py:213 msgid "Exception during upload: {}" msgstr "Excepción durante la carga: {}" -#: collective/exportimport/templates/export_content.pt:155 -#: collective/exportimport/templates/export_other.pt:32 +#: ../templates/export_content.pt:190 +#: ../templates/export_other.pt:32 msgid "Export" msgstr "Exportar" -#: collective/exportimport/export_other.py:585 -#: collective/exportimport/templates/links.pt:38 +#: ../export_other.py:587 +#: ../templates/links.pt:38 msgid "Export comments" msgstr "Exportar comentarios" -#: collective/exportimport/templates/export_content.pt:11 -#: collective/exportimport/templates/links.pt:10 +#: ../templates/export_content.pt:11 +#: ../templates/links.pt:10 msgid "Export content" msgstr "Exportar contenido" -#: collective/exportimport/export_other.py:506 -#: collective/exportimport/templates/links.pt:30 +#: ../export_other.py:508 +#: ../templates/links.pt:30 msgid "Export default pages" msgstr "Exportar páginas predeterminadas" -#: collective/exportimport/export_other.py:413 -#: collective/exportimport/templates/links.pt:26 +#: ../export_other.py:415 +#: ../templates/links.pt:26 msgid "Export local roles" msgstr "Exportar roles locales" -#: collective/exportimport/templates/links.pt:22 +#: ../templates/links.pt:22 msgid "Export members" msgstr "Exportar miembros" -#: collective/exportimport/export_other.py:233 +#: ../export_other.py:235 msgid "Export members, groups and roles" msgstr "Exportar miembros, grupos y roles" -#: collective/exportimport/templates/links.pt:34 +#: ../templates/links.pt:34 msgid "Export object positions in parent" msgstr "Exportar posiciones de objetos en el padre" -#: collective/exportimport/export_other.py:470 +#: ../export_other.py:472 msgid "Export ordering" msgstr "Exportar ordenamiento" -#: collective/exportimport/export_other.py:624 -#: collective/exportimport/templates/links.pt:42 +#: ../export_other.py:628 +#: ../templates/links.pt:42 msgid "Export portlets" msgstr "Exportar portlets" -#: collective/exportimport/export_other.py:759 -#: collective/exportimport/templates/links.pt:46 +#: ../export_other.py:779 +#: ../templates/links.pt:46 msgid "Export redirects" msgstr "Exportar redireccionamientos" -#: collective/exportimport/export_other.py:125 -#: collective/exportimport/templates/links.pt:14 +#: ../export_other.py:127 +#: ../templates/links.pt:14 msgid "Export relations" msgstr "Exportar relaciones" -#: collective/exportimport/export_other.py:331 -#: collective/exportimport/templates/links.pt:18 +#: ../export_other.py:333 +#: ../templates/links.pt:18 msgid "Export translations" msgstr "Exportar traducciones" -#: collective/exportimport/export_other.py:101 +#: ../export_other.py:103 msgid "Exported to {}" msgstr "Exportado a {}" -#: collective/exportimport/export_content.py:198 -msgid "Exported {} items ({}) as {} to {}" -msgstr "Exportado {} elementos ({}) como {} a {}" +#: ../export_content.py:271 +msgid "Exported {} items ({}) as {} to {} with {} errors" +msgstr "Exportados {} elementos ({}) como {} a {} con {} errores" -#: collective/exportimport/export_content.py:222 -msgid "Exported {} {}" -msgstr "Exportado {} {}" +#: ../export_content.py:213 +msgid "Exported {} items ({}) to {} with {} errors" +msgstr "Exportados {} elementos ({}) en {} con {} errores" -#: collective/exportimport/templates/links.pt:8 +#: ../export_content.py:299 +msgid "Exported {} {} with {} errors" +msgstr "Exportado {} {} con {} errores" + +#: ../templates/links.pt:8 msgid "Exports" msgstr "Exportaciones" -#: collective/exportimport/import_other.py:91 +#: ../import_other.py:93 msgid "Failure while uploading: {}" msgstr "Error al cargar: {}" -#: collective/exportimport/import_content.py:160 +#: ../import_content.py:194 msgid "File '{}' not found on server." msgstr "Archivo '{}' no encontrado en el servidor." -#: collective/exportimport/templates/import_content.pt:27 +#: ../templates/import_content.pt:30 msgid "File on server to import:" msgstr "Archivo en el servidor para importar:" -#: collective/exportimport/import_content.py:1006 +#: ../import_content.py:1114 msgid "Finished fixing collection queries." msgstr "Se terminaron de arreglar las consultas de colección." -#: collective/exportimport/import_content.py:969 +#: ../import_content.py:1077 msgid "Finished resetting creation and modification dates." msgstr "Finalizó el restablecimiento de las fechas de creación y modificación." -#: collective/exportimport/import_content.py:991 -#: collective/exportimport/templates/links.pt:97 +#: ../import_content.py:1099 +#: ../templates/links.pt:97 msgid "Fix collection queries" msgstr "Arreglar consultas de colección" -#: collective/exportimport/fix_html.py:43 -#: collective/exportimport/templates/links.pt:101 +#: ../fix_html.py:43 +#: ../templates/links.pt:101 msgid "Fix links to content and images in richtext" msgstr "Corregir enlaces a contenido e imágenes en texto enriquecido" -#: collective/exportimport/fix_html.py:51 +#: ../fix_html.py:51 msgid "Fixed HTML for {} fields in content items" msgstr "HTML corregido para {} campos en elementos de contenido" -#: collective/exportimport/fix_html.py:55 +#: ../fix_html.py:55 msgid "Fixed HTML for {} portlets" msgstr "HTML corregido para {} portlets" -#: collective/exportimport/templates/import_content.pt:38 +#: ../templates/export_content.pt:180 +msgid "Generate a file for each item (as filesytem tree)" +msgstr "Generar un archivo por cada elemento (exportación jerárquica en el sistema de archivos)" + +#: ../templates/import_content.pt:79 msgid "Handle existing content" msgstr "Manejar el contenido existente" -#: collective/exportimport/templates/export_other.pt:44 -#: collective/exportimport/templates/import_defaultpages.pt:31 -#: collective/exportimport/templates/import_discussion.pt:31 +#: ../templates/export_other.pt:44 +#: ../templates/import_defaultpages.pt:31 +#: ../templates/import_discussion.pt:31 msgid "Help" msgstr "Ayuda" -#: collective/exportimport/templates/import_defaultpages.pt:32 -#: collective/exportimport/templates/import_discussion.pt:32 -#: collective/exportimport/templates/import_localroles.pt:32 +#: ../templates/import_defaultpages.pt:32 +#: ../templates/import_discussion.pt:32 +#: ../templates/import_localroles.pt:32 msgid "Here is a example for the expected format. This is the format created by collective.exportimport when used for export." msgstr "Aquí hay un ejemplo para el formato esperado. Este es el formato creado por el collective.exportimport cuando se utiliza para la exportación." -#: collective/exportimport/templates/import_redirects.pt:34 +#: ../templates/import_redirects.pt:34 msgid "Here is an example for the expected format. This is the format created by collective.exportimport when used for export." msgstr "Aquí hay un ejemplo para el formato esperado. Este es el formato creado por el collective.exportimport cuando se utiliza para la exportación." -#: collective/exportimport/templates/import_content.pt:13 -#: collective/exportimport/templates/import_defaultpages.pt:13 -#: collective/exportimport/templates/import_discussion.pt:13 +#: ../templates/import_content.pt:15 +#: ../templates/import_defaultpages.pt:13 +#: ../templates/import_discussion.pt:13 msgid "Here you can upload a json-file." msgstr "Aquí puede cargar un archivo json." -#: collective/exportimport/templates/import_content.pt:39 +#: ../templates/import_content.pt:90 msgid "How should content be handled that exists with the same id/path?" msgstr "¿Cómo se debe manejar el contenido que existe con el mismo id/path?" -#: collective/exportimport/templates/export_content.pt:88 +#: ../templates/export_content.pt:105 msgid "How should data from image- and file-fields be included?" msgstr "¿Cómo se deben incluir los datos de los campos de imagen y archivo?" -#: collective/exportimport/import_content.py:127 +#: ../import_content.py:161 msgid "Ignore: Create with a new id" msgstr "Ignorar: Crear con un nuevo id" -#: collective/exportimport/templates/import_content.pt:92 -#: collective/exportimport/templates/import_defaultpages.pt:20 -#: collective/exportimport/templates/import_discussion.pt:20 +#: ../templates/import_content.pt:134 +#: ../templates/import_defaultpages.pt:20 +#: ../templates/import_discussion.pt:20 msgid "Import" msgstr "Importar" -#: collective/exportimport/templates/import_content.pt:11 +#: ../templates/import_content.pt:11 msgid "Import Content" msgstr "Importar Contenido" -#: collective/exportimport/templates/import_defaultpages.pt:11 +#: ../templates/import_defaultpages.pt:11 msgid "Import Default Pages" msgstr "Importar páginas predeterminadas" -#: collective/exportimport/templates/import_discussion.pt:11 +#: ../templates/import_discussion.pt:11 msgid "Import Discussion" msgstr "Importar discusión" -#: collective/exportimport/templates/import_localroles.pt:11 +#: ../templates/import_localroles.pt:11 msgid "Import Localroles" msgstr "Importar roles locales" -#: collective/exportimport/templates/import_members.pt:11 +#: ../templates/import_members.pt:11 msgid "Import Members, Groups and their Roles" msgstr "Importar miembros, grupos y sus roles" -#: collective/exportimport/templates/import_ordering.pt:11 +#: ../templates/import_ordering.pt:11 msgid "Import Object Positions in Parent" msgstr "Importar posiciones de objetos en el padre" -#: collective/exportimport/templates/import_redirects.pt:11 +#: ../templates/import_redirects.pt:11 msgid "Import Redirects" msgstr "Importar redireccionamientos" -#: collective/exportimport/templates/import_relations.pt:11 +#: ../templates/import_relations.pt:11 msgid "Import Relations" msgstr "Importar relaciones" -#: collective/exportimport/templates/import_content.pt:71 +#: ../templates/import_content.pt:113 msgid "Import all items into the current folder" msgstr "Importar todos los elementos a la carpeta actual" -#: collective/exportimport/templates/import_content.pt:83 +#: ../templates/import_content.pt:125 msgid "Import all old revisions" msgstr "Importar todas las revisiones antiguas" -#: collective/exportimport/templates/links.pt:81 +#: ../templates/links.pt:81 msgid "Import comments" msgstr "Importar comentarios" -#: collective/exportimport/templates/links.pt:53 +#: ../templates/links.pt:53 msgid "Import content" msgstr "Importar contenido" -#: collective/exportimport/templates/links.pt:73 +#: ../templates/links.pt:73 msgid "Import default pages" msgstr "Importar páginas predeterminadas" -#: collective/exportimport/templates/links.pt:69 +#: ../templates/links.pt:69 msgid "Import local roles" msgstr "Importar roles locales" -#: collective/exportimport/templates/links.pt:65 +#: ../templates/links.pt:65 msgid "Import members" msgstr "Importar miembros" -#: collective/exportimport/templates/links.pt:77 +#: ../templates/links.pt:77 msgid "Import object positions in parent" msgstr "Importar posiciones de objetos en el padre" -#: collective/exportimport/templates/import_portlets.pt:11 -#: collective/exportimport/templates/links.pt:85 +#: ../templates/import_portlets.pt:11 +#: ../templates/links.pt:85 msgid "Import portlets" msgstr "Importar portlets" -#: collective/exportimport/templates/links.pt:89 +#: ../templates/links.pt:89 msgid "Import redirects" msgstr "Importar redireccionamientos" -#: collective/exportimport/templates/links.pt:57 +#: ../templates/links.pt:57 msgid "Import relations" msgstr "Importar relaciones" -#: collective/exportimport/templates/import_translations.pt:11 -#: collective/exportimport/templates/links.pt:61 +#: ../templates/import_translations.pt:11 +#: ../templates/links.pt:61 msgid "Import translations" msgstr "Importar traducciones" -#: collective/exportimport/import_other.py:590 +#: ../import_other.py:594 msgid "Imported {} comments" msgstr "Importados {} comentarios" -#: collective/exportimport/import_other.py:201 +#: ../import_other.py:203 msgid "Imported {} groups and {} members" msgstr "Importados {} grupos y {} miembros" -#: collective/exportimport/import_other.py:392 +#: ../import_other.py:393 msgid "Imported {} localroles" msgstr "Importados {} roles locales" -#: collective/exportimport/import_other.py:464 +#: ../import_other.py:468 msgid "Imported {} orders in {} seconds" msgstr "Importados {} ordenes en {} segundos" -#: collective/exportimport/templates/links.pt:51 +#: ../templates/links.pt:51 msgid "Imports" msgstr "Importaciones" -#: collective/exportimport/templates/export_content.pt:87 +#: ../templates/export_content.pt:94 msgid "Include blobs" msgstr "Incluir blobs" -#: collective/exportimport/templates/export_content.pt:129 +#: ../templates/export_content.pt:136 msgid "Include revisions." msgstr "Incluir revisiones." -#: collective/exportimport/templates/export_content.pt:113 +#: ../templates/export_content.pt:120 msgid "Modify exported data for migrations." msgstr "Modificar datos exportados para migraciones." -#: collective/exportimport/templates/import_redirects.pt:33 +#: ../templates/import_redirects.pt:33 msgid "More code is needed if you have another use case." msgstr "Se necesita más código si tiene otro caso de uso." -#: collective/exportimport/export_other.py:84 +#: ../export_other.py:86 msgid "No data to export for {}" msgstr "No hay datos para exportar {}" -#: collective/exportimport/templates/import_content.pt:25 -msgid "No files found." -msgstr "No se encontraron archivos." +#: ../templates/import_content.pt:44 +msgid "No directories to import from found." +msgstr "No se han encontrado directorios desde los que importar." -#: collective/exportimport/templates/export_content.pt:63 +#: ../templates/import_content.pt:28 +msgid "No json-files found." +msgstr "No se han encontrado archivos json." + +#: ../templates/import_content.pt:77 +msgid "Options" +msgstr "Opciones" + +#: ../templates/export_content.pt:69 msgid "Path" msgstr "Ruta" -#: collective/exportimport/import_other.py:822 +#: ../import_other.py:873 msgid "Redirects imported" msgstr "Redirecciones importadas" -#: collective/exportimport/import_content.py:125 +#: ../import_content.py:159 msgid "Replace: Delete item and create new" msgstr "Reemplazar: Eliminar elemento y crear nuevo" -#: collective/exportimport/templates/links.pt:93 +#: ../templates/links.pt:93 msgid "Reset created and modified dates" msgstr "Restablecer fechas de creación y modificación" -#: collective/exportimport/import_content.py:960 +#: ../import_content.py:1068 msgid "Reset creation and modification date" msgstr "Restablecer fecha de creación y modificación" -#: collective/exportimport/templates/export_content.pt:145 -#: collective/exportimport/templates/export_other.pt:25 +#: ../templates/export_content.pt:174 +msgid "Save each item as a separate file on the server" +msgstr "Guardar, en el servidor, cada elemento en un archivo json independiente" + +#: ../templates/export_content.pt:168 +#: ../templates/export_other.pt:25 msgid "Save to file on server" msgstr "Guardar en un archivo en el servidor" -#: collective/exportimport/templates/export_content.pt:24 +#: ../templates/export_content.pt:25 msgid "Select all/none" msgstr "Seleccionar todo/ninguno" -#: collective/exportimport/export_content.py:150 +#: ../export_content.py:154 msgid "Select at least one type to export" msgstr "Seleccione al menos un tipo para exportar" -#: collective/exportimport/templates/export_content.pt:13 +#: ../templates/export_content.pt:13 msgid "Select which content to export as a json-file." msgstr "Seleccione qué contenido exportar como un archivo json." -#: collective/exportimport/import_content.py:124 +#: ../import_content.py:158 msgid "Skip: Don't import at all" msgstr "Omitir: no importar en absoluto" -#: collective/exportimport/templates/export_content.pt:130 +#: ../templates/export_content.pt:138 msgid "This exports the content-history (versioning) of each exported item. Warning: This can significantly slow down the export!" msgstr "Esto exporta el historial de contenido (versiones) de cada elemento exportado. Advertencia: ¡Esto puede ralentizar significativamente la exportación!" -#: collective/exportimport/templates/import_content.pt:84 +#: ../templates/import_content.pt:127 msgid "This will import the content-history (versioning) for each item that has revisions. Warning: This can significantly slow down the import!" msgstr "Esto importará el historial de contenido (versiones) para cada elemento que tenga revisiones. Advertencia: ¡Esto puede ralentizar significativamente la importación!" -#: collective/exportimport/templates/export_content.pt:72 +#: ../templates/export_content.pt:88 msgid "Unlimited: this item and all children, 0: this object only, 1: only direct children of this object, 2-x: children of this object up to the specified level" -msgstr "" -"Ilimitado: este elemento y todos los elementos secundarios, 0: solo este " -"objeto, 1: solo elementos secundarios directos de este objeto, 2-x: " -"elementos secundarios de este objeto hasta el nivel especificado" +msgstr "Ilimitado: este elemento y todos los elementos secundarios, 0: solo este objeto, 1: solo elementos secundarios directos de este objeto, 2-x: elementos secundarios de este objeto hasta el nivel especificado" -#: collective/exportimport/import_content.py:126 +#: ../import_content.py:160 msgid "Update: Reuse and only overwrite imported data" msgstr "Actualizar: reutilizar y solo sobrescribir datos importados" -#: collective/exportimport/templates/export_content.pt:114 +#: ../templates/export_content.pt:122 msgid "Use this if you want to import the data in a newer version of Plone or migrate from Archetypes to Dexterity. Read the documentation to learn which changes are made by this option." msgstr "Use esto si desea importar los datos en una versión más nueva de Plone o migrar de Archetypes a Dexterity. Lea la documentación para saber qué cambios se realizan con esta opción." -#: collective/exportimport/import_other.py:288 +#: ../templates/export_content.pt:152 +msgid "Write out Errors to file." +msgstr "Escribir los errores en el fichero." + +#: ../templates/import_content.pt:21 +msgid "You can also select a json-file or a directory holding json-files on the server in the following locations:" +msgstr "Puede seleccionar un archivo json o un directorio que contenga los archivos json independientes entre las siguientes ubicaciones:" + +#: ../import_other.py:289 msgid "You need either Plone 6 or collective.relationhelpers to import relations" msgstr "Necesitas Plone 6 o collective.relationhelpers para importar relaciones" -#: collective/exportimport/export_content.py:139 +#: ../export_content.py:142 msgid "as base-64 encoded strings" msgstr "como cadenas codificadas en base 64" -#: collective/exportimport/export_content.py:140 +#: ../export_content.py:143 msgid "as blob paths" msgstr "como rutas de blob" -#: collective/exportimport/export_content.py:138 +#: ../export_content.py:141 msgid "as download urls" msgstr "como urls de descarga" -#: collective/exportimport/templates/export_content.pt:155 +#. Default: "Deleted ${items} items." +#: ../filesystem_importer.py:135 +msgid "deleted_items_msg" +msgstr "Eliminados ${items} elementos." + +#: ../templates/export_content.pt:190 msgid "export" msgstr "exportar" -#: collective/exportimport/import_content.py:143 +#. Default: "Exported ${number} items (${types}) as tree to ${target} with ${errors} errors" +#: ../export_content.py:233 +msgid "hierarchycal_export_success" +msgstr "Se han exportado ${number} elementos (${types}) como árbol en ${target} con ${errors} errores" + +#: ../import_content.py:177 msgid "json file was uploaded, so the selected server file was ignored." msgstr "archivo json se cargó, por lo que se ignoró el archivo del servidor seleccionado." #. Default: "Toggle all" -#: collective/exportimport/templates/export_content.pt:22 +#: ../templates/export_content.pt:23 msgid "label_toggle" msgstr "Alternar todo" -#: collective/exportimport/import_content.py:996 +#: ../import_content.py:1104 msgid "plone.app.querystring.upgrades.fix_select_all_existing_collections is not available" msgstr "plone.app.querystring.upgrades.fix_select_all_existing_collections no está disponible" -#. Default: "Or you can choose a file that is already uploaded on the server in one of these paths:" -#: collective/exportimport/templates/import_content.pt:21 +#. Default: "Import from a json-file" +#: ../templates/import_content.pt:27 msgid "server_paths_list" -msgstr "" -"O puede elegir un archivo que ya está cargado en el servidor en una de estas " -"rutas:" +msgstr "O puede elegir un archivo que ya está cargado en el servidor en una de estas rutas:" + +#. Default: "Or you can choose from a tree export in the server in one of these paths:" +#: ../templates/import_content.pt:59 +msgid "server_paths_list_hierarchical" +msgstr "O puede elegir desde que exportación jerárquica del servidor entre una de estas rutas:" + +#. Default: "Import from a directory that holds individual json-files per item:" +#: ../templates/import_content.pt:43 +msgid "server_paths_list_per_json_file" +msgstr "Importar desde un directorio que contiene archivos json únicos por elemento." -#: collective/exportimport/export_content.py:123 +#: ../export_content.py:126 msgid "unlimited" msgstr "ilimitado" diff --git a/src/collective/exportimport/templates/export_content.pt b/src/collective/exportimport/templates/export_content.pt index 2b61501e..5053330f 100644 --- a/src/collective/exportimport/templates/export_content.pt +++ b/src/collective/exportimport/templates/export_content.pt @@ -19,59 +19,64 @@ Content Types to export
- -
- +
+ +
+ +
+ - - -
+
+ + +
+
- +
-
- - Unlimited: this item and all children, 0: this object only, 1: only direct children of this object, 2-x: children of this object up to the specified level +
-
- - - How should data from image- and file-fields be included? - +
-
-
-