├── .editorconfig ├── .github └── workflows │ └── tests.yml ├── .gitignore ├── .mailmap ├── .pre-commit-config.yaml ├── .readthedocs.yaml ├── AUTHORS ├── CHANGELOG.rst ├── CONTRIBUTING.rst ├── LICENSE ├── README.rst ├── biome.json ├── content_editor ├── __init__.py ├── admin.py ├── contents.py ├── locale │ ├── ca │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ ├── cs │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ ├── de │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ ├── es │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ ├── fr │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ ├── hr │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ ├── it │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ ├── nb │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ ├── nl │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ ├── pl │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ ├── pt │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ ├── django.po │ │ │ ├── djangojs.mo │ │ │ └── djangojs.po │ ├── pt_BR │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ ├── ro │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ ├── ru │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ ├── tr │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ └── zh_CN │ │ └── LC_MESSAGES │ │ ├── django.mo │ │ └── django.po ├── models.py └── static │ └── content_editor │ ├── content_editor.css │ ├── content_editor.js │ ├── material-icons.css │ ├── material-icons.woff2 │ ├── save_shortcut.js │ └── tabbed_fieldsets.js ├── docs ├── Makefile ├── _static │ └── django-content-editor.png ├── conf.py ├── index.rst └── make.bat ├── pyproject.toml ├── tests ├── .gitignore ├── README_integration_tests.md ├── conftest.py ├── cov.sh ├── manage.py ├── requirements.txt └── testapp │ ├── __init__.py │ ├── admin.py │ ├── models.py │ ├── settings.py │ ├── templates │ ├── 404.html │ ├── base.html │ └── testapp │ │ ├── article_detail.html │ │ └── page_detail.html │ ├── test_content_editor.py │ ├── test_playwright.py │ ├── test_playwright_helpers.py │ ├── urls.py │ └── views.py └── tox.ini /.editorconfig: -------------------------------------------------------------------------------- 1 | # top-most EditorConfig file 2 | root = true 3 | 4 | [*] 5 | end_of_line = lf 6 | insert_final_newline = true 7 | charset = utf-8 8 | trim_trailing_whitespace = true 9 | indent_style = space 10 | indent_size = 2 11 | 12 | [*.py] 13 | indent_size = 4 14 | -------------------------------------------------------------------------------- /.github/workflows/tests.yml: -------------------------------------------------------------------------------- 1 | name: Tests 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | pull_request: 8 | schedule: 9 | - cron: "37 1 1 * *" 10 | 11 | jobs: 12 | tests: 13 | name: Python ${{ matrix.python-version }} 14 | runs-on: ubuntu-latest 15 | strategy: 16 | fail-fast: false 17 | matrix: 18 | python-version: 19 | - '3.10' 20 | - '3.12' 21 | - '3.13' 22 | 23 | steps: 24 | - uses: actions/checkout@v4 25 | - name: Set up Python ${{ matrix.python-version }} 26 | uses: actions/setup-python@v5 27 | with: 28 | python-version: ${{ matrix.python-version }} 29 | - name: Install dependencies 30 | run: | 31 | python -m pip install --upgrade pip tox pytest-playwright 32 | 33 | # Install playwright system dependencies 34 | - name: Install Playwright browsers 35 | run: | 36 | playwright install --with-deps chromium 37 | 38 | - name: Run tox targets for ${{ matrix.python-version }} 39 | run: | 40 | ENV_PREFIX=$(tr -C -d "0-9" <<< "${{ matrix.python-version }}") 41 | TOXENV=$(tox --listenvs | grep "^py$ENV_PREFIX" | tr '\n' ',') python -m tox 42 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.py? 2 | *.sw? 3 | *~ 4 | .coverage 5 | .tox 6 | /*.egg-info 7 | /MANIFEST 8 | build 9 | dist 10 | htmlcov 11 | node_modules 12 | yarn.lock 13 | test-results 14 | -------------------------------------------------------------------------------- /.mailmap: -------------------------------------------------------------------------------- 1 | Daniel Renz 2 | Daniel Renz 3 | Simon Schürpf 4 | Simon Schürpf 5 | Martin J. Laubach 6 | Martin J. Laubach 7 | Maarten van Gompel (proycon) 8 | Bojan Mihelac 9 | Antoni Aloy 10 | Nico Echaniz 11 | Bjorn Post 12 | Skylar Saveland 13 | Stephan Jaekel 14 | Simon Bächler 15 | Simon Bächler 16 | -------------------------------------------------------------------------------- /.pre-commit-config.yaml: -------------------------------------------------------------------------------- 1 | exclude: ".yarn/|yarn.lock|\\.min\\.(css|js)$" 2 | repos: 3 | - repo: https://github.com/pre-commit/pre-commit-hooks 4 | rev: v5.0.0 5 | hooks: 6 | - id: check-added-large-files 7 | - id: check-builtin-literals 8 | - id: check-executables-have-shebangs 9 | - id: check-merge-conflict 10 | - id: check-toml 11 | - id: check-yaml 12 | - id: detect-private-key 13 | - id: end-of-file-fixer 14 | - id: mixed-line-ending 15 | - id: trailing-whitespace 16 | - repo: https://github.com/adamchainz/django-upgrade 17 | rev: 1.24.0 18 | hooks: 19 | - id: django-upgrade 20 | args: [--target-version, "3.2"] 21 | - repo: https://github.com/astral-sh/ruff-pre-commit 22 | rev: "v0.11.5" 23 | hooks: 24 | - id: ruff 25 | args: [--unsafe-fixes] 26 | - id: ruff-format 27 | - repo: https://github.com/biomejs/pre-commit 28 | rev: "v1.9.4" 29 | hooks: 30 | - id: biome-check 31 | args: [--unsafe] 32 | - repo: https://github.com/tox-dev/pyproject-fmt 33 | rev: v2.5.1 34 | hooks: 35 | - id: pyproject-fmt 36 | - repo: https://github.com/abravalheri/validate-pyproject 37 | rev: v0.24.1 38 | hooks: 39 | - id: validate-pyproject 40 | -------------------------------------------------------------------------------- /.readthedocs.yaml: -------------------------------------------------------------------------------- 1 | # Read the Docs configuration file 2 | # See https://docs.readthedocs.io/en/stable/config-file/v2.html for details 3 | 4 | version: 2 5 | 6 | build: 7 | os: ubuntu-24.04 8 | tools: 9 | python: "3.11" 10 | 11 | sphinx: 12 | configuration: docs/conf.py 13 | # python: 14 | # install: 15 | # - requirements: docs/requirements.txt 16 | # - method: pip 17 | # path: . 18 | -------------------------------------------------------------------------------- /AUTHORS: -------------------------------------------------------------------------------- 1 | The authors of django-content-editor are: 2 | 3 | * Matthias Kestenholz 4 | * Martin J. Laubach 5 | * Chris Adams 6 | * Simon Meers 7 | * Bojan Mihelac 8 | * Simon Bächler 9 | * Bjorn Post 10 | * Stephan Jaekel 11 | * Julien Phalip 12 | * Daniel Renz 13 | * Matt Dawson 14 | * Simon Schürpf 15 | * Skylar Saveland 16 | * Stefan Reinhard 17 | * Peter Schmidt 18 | * Marc Egli 19 | * Psyton 20 | * Simon Schmid 21 | * Charlie Denton 22 | * Greg Turner 23 | * Bjarni Thorisson 24 | * Greg Taylor 25 | * Maarten van Gompel (proycon) 26 | * Antoni Aloy 27 | * Fabian Germann 28 | * Jonas 29 | * Julian Bez 30 | * Urs Breton 31 | * Afonso Fernández Nogueira 32 | * Marc Tamlyn 33 | * Martin Mahner 34 | * Matthias K 35 | * Max Peterson 36 | * Nico Echaniz 37 | * Sander van Leeuwen 38 | * Toby White 39 | * Tom Van Damme 40 | * Vítor Figueiró 41 | * Andrew D. Ball 42 | * Brian Macdonald 43 | * Emmanuelle Delescolle 44 | * Eric Delord 45 | * Gabriel Kovacs 46 | * Maarten Draijer 47 | * Torkn 48 | * adsworth 49 | * Cellarosi Marco 50 | * Denis Popov 51 | * Fabian Vogler 52 | * Håvard Grimelid 53 | * Maciek Szczesniak 54 | * Marco Fucci 55 | * Michael Bashkirov 56 | * Michael Kutý 57 | * Mikhail Korobov 58 | * Perry Roper 59 | * Raphael Jasjukaitis 60 | * Richard A 61 | * Vaclav Klecanda 62 | * Wil Tan 63 | * tayg 64 | * Alen Mujezinovic 65 | * Alex Kamedov 66 | * Andi Albrecht 67 | * Andrey Popelo 68 | * Andrin Heusser 69 | * Anshuman Bhaduri 70 | * Artur Barseghyan 71 | * Dan Büschlen 72 | * Daniele Procida 73 | * Darryl Woods 74 | * David Evans 75 | * Denis Martinez 76 | * Domas Lapinskas 77 | * George Karpenkov 78 | * Giorgos Logiotatidis 79 | * Gwildor Sok 80 | * Harro van der Klauw 81 | * Jay Yu 82 | * Jimmy Ye 83 | * Jonas Svensson 84 | * Kevin Etienne 85 | * Laurent Paoletti 86 | * Livio Lunin 87 | * Marco Cellarosi 88 | * Marius Räsener 89 | * Mark Renton 90 | * Mason Hugus 91 | * Mikkel Hoegh 92 | * Olekasnadr Gula 93 | * Paul Garner 94 | * Piet Delport 95 | * Riccardo Coroneo 96 | * Richard Bolt 97 | * Rico Moorman 98 | * Sebastian Hillig 99 | * Silvan Spross 100 | * Sumit Datta 101 | * Sun Liwen 102 | * Tobias Haffner 103 | * Valtron 104 | * Wim Feijen 105 | * Wouter van der Graaf 106 | * antiflu 107 | * feczo 108 | * gradel 109 | * i-trofimtschuk 110 | * ilmarsm 111 | * niklaushug 112 | * svleeuwen 113 | * zakdoek 114 | -------------------------------------------------------------------------------- /CONTRIBUTING.rst: -------------------------------------------------------------------------------- 1 | ======================= 2 | Contributing to FeinCMS 3 | ======================= 4 | 5 | Submission guidelines 6 | ===================== 7 | 8 | If you are creating a pull request, fork the repository and make any changes 9 | in your own feature branch. 10 | 11 | Write and run tests. 12 | 13 | 14 | Code of Conduct 15 | =============== 16 | 17 | This project adheres to the 18 | `Open Code of Conduct `_. 19 | By participating, you are expected to honor this code. 20 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2009-2017, Feinheit AG and individual contributors. 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without modification, 5 | are permitted provided that the following conditions are met: 6 | 7 | 1. Redistributions of source code must retain the above copyright notice, 8 | this list of conditions and the following disclaimer. 9 | 10 | 2. Redistributions in binary form must reproduce the above copyright 11 | notice, this list of conditions and the following disclaimer in the 12 | documentation and/or other materials provided with the distribution. 13 | 14 | 3. Neither the name of Feinheit AG nor the names of its contributors 15 | may be used to endorse or promote products derived from this software 16 | without specific prior written permission. 17 | 18 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 19 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 20 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 21 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR 22 | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 23 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 24 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 25 | ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 27 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 | -------------------------------------------------------------------------------- /README.rst: -------------------------------------------------------------------------------- 1 | =================================================== 2 | django-content-editor -- Editing structured content 3 | =================================================== 4 | 5 | `Documentation on Read the Docs `_ 6 | 7 | .. image:: https://github.com/matthiask/django-content-editor/actions/workflows/tests.yml/badge.svg 8 | :target: https://github.com/matthiask/django-content-editor/ 9 | :alt: CI Status 10 | 11 | .. image:: https://readthedocs.org/projects/django-content-editor/badge/?version=latest 12 | :target: https://django-content-editor.readthedocs.io/en/latest/?badge=latest 13 | :alt: Documentation Status 14 | -------------------------------------------------------------------------------- /biome.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://biomejs.dev/schemas/1.9.4/schema.json", 3 | "organizeImports": { 4 | "enabled": false 5 | }, 6 | "formatter": { 7 | "enabled": true, 8 | "indentStyle": "space", 9 | "indentWidth": 2 10 | }, 11 | "linter": { 12 | "enabled": true, 13 | "rules": { 14 | "recommended": true, 15 | "a11y": { 16 | "noSvgWithoutTitle": "off" 17 | }, 18 | "correctness": { 19 | "noUndeclaredVariables": "error", 20 | "noUnusedImports": "error", 21 | "noUnusedVariables": "error", 22 | "useArrayLiterals": "error", 23 | "useHookAtTopLevel": "error" 24 | }, 25 | "security": { 26 | "noDangerouslySetInnerHtml": "warn" 27 | }, 28 | "style": { 29 | "noParameterAssign": "off", 30 | "useForOf": "warn" 31 | }, 32 | "suspicious": { 33 | "noArrayIndexKey": "warn", 34 | "noAssignInExpressions": "off" 35 | } 36 | } 37 | }, 38 | "javascript": { 39 | "formatter": { 40 | "semicolons": "asNeeded" 41 | }, 42 | "globals": ["django", "ContentEditor"] 43 | }, 44 | "css": { 45 | "formatter": { 46 | "enabled": true 47 | }, 48 | "linter": { 49 | "enabled": true 50 | } 51 | }, 52 | "json": { 53 | "formatter": { 54 | "enabled": false 55 | } 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /content_editor/__init__.py: -------------------------------------------------------------------------------- 1 | __version__ = "7.2.0" 2 | -------------------------------------------------------------------------------- /content_editor/admin.py: -------------------------------------------------------------------------------- 1 | import itertools 2 | 3 | from django import forms 4 | from django.contrib.admin.checks import InlineModelAdminChecks, ModelAdminChecks 5 | from django.contrib.admin.options import ModelAdmin, StackedInline 6 | from django.contrib.admin.utils import flatten_fieldsets 7 | from django.core import checks 8 | from django.utils.text import capfirst 9 | from django.utils.translation import gettext 10 | from js_asset.js import JSON 11 | 12 | 13 | __all__ = ("ContentEditorInline", "ContentEditor", "allow_regions", "deny_regions") 14 | 15 | 16 | _inline_index = itertools.count() 17 | 18 | 19 | class ContentEditorChecks(ModelAdminChecks): 20 | def check(self, admin_obj, **kwargs): 21 | errors = super().check(admin_obj, **kwargs) 22 | errors.extend(self.check_content_editor_regions_attribute(admin_obj)) 23 | return errors 24 | 25 | def check_content_editor_regions_attribute(self, admin_obj): 26 | if not getattr(admin_obj.model, "regions", False): 27 | return [ 28 | checks.Error( 29 | "ContentEditor models require a non-empty 'regions'" 30 | " attribute or property.", 31 | obj=admin_obj.__class__, 32 | id="content_editor.E002", 33 | ) 34 | ] 35 | 36 | return [] 37 | 38 | 39 | class ContentEditorInlineChecks(InlineModelAdminChecks): 40 | def check(self, inline_obj, **kwargs): 41 | errors = super().check(inline_obj, **kwargs) 42 | errors.extend(self.check_content_editor_fields_in_fieldset(inline_obj)) 43 | errors.extend(self.check_content_editor_iterable_regions(inline_obj)) 44 | return errors 45 | 46 | def check_content_editor_fields_in_fieldset(self, obj): 47 | if obj.fieldsets is None: 48 | return [] 49 | 50 | fields = flatten_fieldsets(obj.fieldsets) 51 | if all(field in fields for field in ("region", "ordering")): 52 | return [] 53 | 54 | return [ 55 | checks.Error( 56 | "fieldsets must contain both 'region' and 'ordering'.", 57 | obj=obj.__class__, 58 | id="content_editor.E001", 59 | ) 60 | ] 61 | 62 | def check_content_editor_iterable_regions(self, obj): 63 | if obj.regions is None: 64 | return 65 | 66 | regions = obj.regions(set()) if callable(obj.regions) else obj.regions 67 | if isinstance(regions, str) or not hasattr(regions, "__iter__"): 68 | yield checks.Error( 69 | f"regions must be 'None' or an iterable. Current value is {regions!r}.", 70 | obj=obj.__class__, 71 | id="content_editor.E003", 72 | ) 73 | 74 | 75 | class ContentEditorInline(StackedInline): 76 | """ 77 | Custom ``admin.StackedInline`` subclass used for content types. 78 | 79 | This inline has to be used for content editor inlines, because the content 80 | editor uses the type to differentiate between plugins and other inlines. 81 | """ 82 | 83 | checks_class = ContentEditorInlineChecks 84 | extra = 0 85 | fk_name = "parent" 86 | regions = None 87 | button = "" 88 | icon = "" 89 | color = "" 90 | sections = 0 91 | 92 | def formfield_for_dbfield(self, db_field, *args, **kwargs): 93 | """Ensure ``region`` and ``ordering`` use a HiddenInput widget""" 94 | # `request` was made a positional argument in dbb0df2a0 (2015-12-24) 95 | if db_field.name in ("region", "ordering"): 96 | kwargs["widget"] = forms.HiddenInput 97 | return super().formfield_for_dbfield(db_field, *args, **kwargs) 98 | 99 | @classmethod 100 | def create(cls, model, **kwargs): 101 | """Create a inline for the given model 102 | 103 | Usage:: 104 | 105 | ContentEditorInline.create(MyPlugin, form=MyPluginForm, ...) 106 | """ 107 | kwargs["model"] = model 108 | opts = model._meta 109 | return type( 110 | f"ContentEditorInline_{opts.app_label}_{opts.model_name}_{next(_inline_index)}", 111 | (cls,), 112 | kwargs, 113 | ) 114 | 115 | 116 | def auto_icon_colors(content_editor): 117 | hue = 330 118 | for inline in content_editor.inlines: 119 | if issubclass(inline, ContentEditorInline) and not inline.color: 120 | inline.color = f"oklch(0.5 0.2 {hue})" 121 | hue -= 20 122 | return content_editor 123 | 124 | 125 | class ContentEditor(ModelAdmin): 126 | """ 127 | The ``ContentEditor`` is a drop-in replacement for ``ModelAdmin`` with the 128 | speciality of knowing how to work with content editor plugins (that is, 129 | :class:`content_editor.admin.ContentEditorInline` inlines). 130 | 131 | It does not have any public API except from everything inherited from 132 | the standard ``ModelAdmin`` class. 133 | """ 134 | 135 | checks_class = ContentEditorChecks 136 | 137 | def _content_editor_context(self, request, context): 138 | try: 139 | instance = context["adminform"].form.instance 140 | except (AttributeError, KeyError): 141 | instance = context.get("original") 142 | 143 | allow_change = True 144 | if instance is None: 145 | instance = self.model() 146 | else: 147 | allow_change = self.has_change_permission(request, instance) 148 | 149 | plugins = [] 150 | adding_not_allowed = ["_adding_not_allowed"] 151 | 152 | for iaf in context.get("inline_admin_formsets", []): 153 | if not isinstance(iaf.opts, ContentEditorInline): 154 | continue 155 | regions = ( 156 | ( 157 | iaf.opts.regions({region.key for region in instance.regions}) 158 | if callable(iaf.opts.regions) 159 | else iaf.opts.regions 160 | ) 161 | if allow_change and iaf.opts.has_add_permission(request, instance) 162 | else adding_not_allowed 163 | ) 164 | button = iaf.opts.button 165 | if not button and iaf.opts.icon: 166 | button = f'{iaf.opts.icon}' 167 | plugins.append( 168 | { 169 | "title": capfirst(str(iaf.opts.verbose_name)), 170 | "regions": list(regions) if regions else None, 171 | "prefix": iaf.formset.prefix, 172 | "button": button, 173 | "color": iaf.opts.color, 174 | "sections": iaf.opts.sections, 175 | } 176 | ) 177 | regions = [ 178 | { 179 | "key": region.key, 180 | "title": str(region.title), 181 | "inherited": region.inherited, 182 | # TODO correct template when POSTing? 183 | } 184 | for region in instance.regions 185 | ] 186 | 187 | return { 188 | "plugins": plugins, 189 | "regions": regions, 190 | "allowChange": allow_change, 191 | "messages": { 192 | "createNew": gettext("Add new item"), 193 | "empty": gettext("No items."), 194 | "emptyInherited": gettext("No items. Region may inherit content."), 195 | "noRegions": gettext("No regions available."), 196 | "noPlugins": gettext("No plugins allowed in this region."), 197 | "newItem": gettext("New item"), 198 | "unknownRegion": gettext("Unknown region"), 199 | "collapseAll": gettext("Collapse all items"), 200 | "uncollapseAll": gettext("Uncollapse all items"), 201 | "forDeletion": gettext("marked for deletion"), 202 | "selectMultiple": gettext( 203 | "Use Ctrl-Click to select and move multiple items." 204 | ), 205 | }, 206 | } 207 | 208 | def _content_editor_media(self, request, context): 209 | return forms.Media( 210 | css={ 211 | "all": [ 212 | "content_editor/material-icons.css", 213 | "content_editor/content_editor.css", 214 | ] 215 | }, 216 | js=[ 217 | "admin/js/jquery.init.js", 218 | "content_editor/save_shortcut.js", 219 | "content_editor/tabbed_fieldsets.js", 220 | JSON( 221 | self._content_editor_context(request, context), 222 | id="content-editor-context", 223 | ), 224 | "content_editor/content_editor.js", 225 | ], 226 | ) 227 | 228 | def render_change_form(self, request, context, **kwargs): 229 | response = super().render_change_form(request, context, **kwargs) 230 | 231 | response.context_data["media"] = response.context_data[ 232 | "media" 233 | ] + self._content_editor_media(request, response.context_data) 234 | 235 | return response 236 | 237 | 238 | def allow_regions(regions): 239 | return set(regions) 240 | 241 | 242 | def deny_regions(regions): 243 | regions = set(regions) 244 | return lambda self, all_regions: all_regions - regions 245 | -------------------------------------------------------------------------------- /content_editor/contents.py: -------------------------------------------------------------------------------- 1 | from itertools import chain 2 | from operator import attrgetter 3 | 4 | 5 | __all__ = ("Contents", "contents_for_items", "contents_for_item") 6 | 7 | 8 | class Contents: 9 | def __init__(self, regions): 10 | self.regions = regions 11 | self._sorted = False 12 | self._contents = {region.key: [] for region in self.regions} 13 | self._unknown_region_contents = [] 14 | 15 | def add(self, content): 16 | self._sorted = False 17 | try: 18 | self._contents[content.region].append(content) 19 | except KeyError: 20 | self._unknown_region_contents.append(content) 21 | 22 | def _sort(self): 23 | for region_key in list(self._contents): 24 | self._contents[region_key] = sorted( 25 | self._contents[region_key], key=attrgetter("ordering") 26 | ) 27 | self._sorted = True 28 | 29 | def __getattr__(self, key): 30 | if key.startswith("_"): 31 | raise AttributeError(f"Invalid region key {key!r} on {self!r}") 32 | if not self._sorted: 33 | self._sort() 34 | return self._contents.get(key, []) 35 | 36 | def __getitem__(self, key): 37 | if key.startswith("_"): 38 | raise KeyError(f"Invalid region key {key!r} on {self!r}") 39 | if not self._sorted: 40 | self._sort() 41 | return self._contents.get(key, []) 42 | 43 | def __iter__(self): 44 | if not self._sorted: 45 | self._sort() 46 | return chain.from_iterable( 47 | self._contents[region.key] for region in self.regions 48 | ) 49 | 50 | def __len__(self): 51 | return sum((len(contents) for contents in self._contents.values()), 0) 52 | 53 | def inherit_regions(self, contents): 54 | for region in self.regions: 55 | if not region.inherited or self[region.key]: 56 | continue 57 | self._contents[region.key] = contents[region.key] # Still sorted 58 | 59 | 60 | def contents_for_items(items, plugins, *, regions=None): 61 | contents = {item: Contents(regions or item.regions) for item in items} 62 | items_dict = {item.pk: item for item in contents} 63 | for plugin in plugins: 64 | queryset = plugin.get_queryset().filter(parent__in=contents.keys()) 65 | if regions is not None: 66 | queryset = queryset.filter(region__in=[region.key for region in regions]) 67 | queryset._known_related_objects.setdefault( 68 | plugin._meta.get_field("parent"), {} 69 | ).update(items_dict) 70 | for obj in queryset: 71 | contents[obj.parent].add(obj) 72 | return contents 73 | 74 | 75 | def contents_for_item(item, plugins, *, inherit_from=None, regions=None): 76 | inherit_from = list(inherit_from) if inherit_from else [] 77 | all_contents = contents_for_items( 78 | [item] + inherit_from, plugins=plugins, regions=regions 79 | ) 80 | contents = all_contents[item] 81 | for other in inherit_from: 82 | contents.inherit_regions(all_contents[other]) 83 | return contents 84 | -------------------------------------------------------------------------------- /content_editor/locale/ca/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/feincms/django-content-editor/75f88363c3d4b80c1dcfc7a57af3efa3733e3998/content_editor/locale/ca/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /content_editor/locale/ca/LC_MESSAGES/django.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # 5 | # Translators: 6 | # proycon , 2009 7 | msgid "" 8 | msgstr "" 9 | "Project-Id-Version: FeinCMS\n" 10 | "Report-Msgid-Bugs-To: \n" 11 | "POT-Creation-Date: 2021-06-09 16:07+0200\n" 12 | "PO-Revision-Date: 2013-10-25 09:15+0000\n" 13 | "Last-Translator: Matthias Kestenholz \n" 14 | "Language-Team: Catalan (http://www.transifex.com/projects/p/feincms/language/" 15 | "ca/)\n" 16 | "Language: ca\n" 17 | "MIME-Version: 1.0\n" 18 | "Content-Type: text/plain; charset=UTF-8\n" 19 | "Content-Transfer-Encoding: 8bit\n" 20 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 21 | 22 | #: admin.py:151 23 | msgid "Add new item" 24 | msgstr "Afegir un nou element" 25 | 26 | #: admin.py:152 27 | #, fuzzy 28 | #| msgid "max. items" 29 | msgid "No items." 30 | msgstr "nombre màxim" 31 | 32 | #: admin.py:153 33 | msgid "No items. Region may inherit content." 34 | msgstr "" 35 | 36 | #: admin.py:154 37 | msgid "No regions available." 38 | msgstr "" 39 | 40 | #: admin.py:155 41 | msgid "No plugins allowed in this region." 42 | msgstr "" 43 | 44 | #: admin.py:156 45 | #, fuzzy 46 | #| msgid "max. items" 47 | msgid "New item" 48 | msgstr "nombre màxim" 49 | 50 | #: admin.py:157 51 | msgid "Unknown region" 52 | msgstr "" 53 | 54 | #: admin.py:158 55 | #, fuzzy 56 | #| msgid "Collapse tree" 57 | msgid "Collapse all items" 58 | msgstr "Tancar l'arbre" 59 | 60 | #: admin.py:159 61 | #, fuzzy 62 | #| msgid "Collapse tree" 63 | msgid "Uncollapse all items" 64 | msgstr "Tancar l'arbre" 65 | 66 | #: admin.py:160 67 | msgid "Toggle sidebar" 68 | msgstr "" 69 | 70 | #: admin.py:161 71 | msgid "marked for deletion" 72 | msgstr "" 73 | 74 | #: admin.py:163 75 | msgid "Use Ctrl-Click to select and move multiple items." 76 | msgstr "" 77 | 78 | #: admin.py:166 79 | msgid "Doubleclicking inserts an item at the end." 80 | msgstr "" 81 | 82 | #, fuzzy 83 | #~| msgid "template contents" 84 | #~ msgid "Show/hide contents" 85 | #~ msgstr "plantilles de continguts" 86 | 87 | #~ msgid "All" 88 | #~ msgstr "Tots" 89 | 90 | #~ msgid "Parent" 91 | #~ msgstr "Pare" 92 | 93 | #~ msgid "Category" 94 | #~ msgstr "Categoria" 95 | 96 | #~ msgid "Change %s" 97 | #~ msgstr "Modificar %s" 98 | 99 | #~ msgid "title" 100 | #~ msgstr "títol" 101 | 102 | #~ msgid "%s has been moved to a new position." 103 | #~ msgstr "%s ha sigut mogut a una nova posició" 104 | 105 | #~ msgid "Did not understand moving instruction." 106 | #~ msgstr "No entenc l'odre de moviment" 107 | 108 | #~ msgid "actions" 109 | #~ msgstr "accions" 110 | 111 | #~ msgid "application content" 112 | #~ msgstr "contingut de l'aplicació" 113 | 114 | #~ msgid "application contents" 115 | #~ msgstr "continguts de l'aplicació" 116 | 117 | #~ msgid "application" 118 | #~ msgstr "aplicació" 119 | 120 | #~ msgid "enabled" 121 | #~ msgstr "actiu" 122 | 123 | #~ msgid "New comments may be added" 124 | #~ msgstr "Es podran afegir nous comentaris" 125 | 126 | #~ msgid "comments" 127 | #~ msgstr "comentaris" 128 | 129 | #~ msgid "public" 130 | #~ msgstr "públic" 131 | 132 | #~ msgid "not public" 133 | #~ msgstr "privat" 134 | 135 | #~ msgid "name" 136 | #~ msgstr "nom" 137 | 138 | #~ msgid "email" 139 | #~ msgstr "correu" 140 | 141 | #~ msgid "subject" 142 | #~ msgstr "assumpte" 143 | 144 | #~ msgid "content" 145 | #~ msgstr "contingut" 146 | 147 | #~ msgid "contact form" 148 | #~ msgstr "formulari de contacte" 149 | 150 | #~ msgid "contact forms" 151 | #~ msgstr "formularis de contacte" 152 | 153 | #~ msgid "file" 154 | #~ msgstr "arxiu" 155 | 156 | #~ msgid "files" 157 | #~ msgstr "arxius" 158 | 159 | #~ msgid "image" 160 | #~ msgstr "imatge" 161 | 162 | #~ msgid "caption" 163 | #~ msgstr "llegenda" 164 | 165 | #~ msgid "images" 166 | #~ msgstr "imatges" 167 | 168 | #~ msgid "position" 169 | #~ msgstr "posició" 170 | 171 | #~ msgid "media file" 172 | #~ msgstr "arxiu de medis" 173 | 174 | #~ msgid "media files" 175 | #~ msgstr "arxius de medis" 176 | 177 | #~ msgid "type" 178 | #~ msgstr "tipus" 179 | 180 | #~ msgid "raw content" 181 | #~ msgstr "contingut en cruu" 182 | 183 | #~ msgid "raw contents" 184 | #~ msgstr "continguts en cruu" 185 | 186 | #~ msgid "HTML Tidy" 187 | #~ msgstr "HTML Tidy" 188 | 189 | #~ msgid "Ignore the HTML validation warnings" 190 | #~ msgstr "Ignora els avisos de validació de l'HTML" 191 | 192 | #~ msgid "" 193 | #~ "HTML validation produced %(count)d warnings. Please review the updated " 194 | #~ "content below before continuing: %(messages)s" 195 | #~ msgstr "" 196 | #~ "La validació de l'HTML generà %(count)d avisos. Per favor, revisa el " 197 | #~ "contingut actualitzat de la part inferior abans de continuar: %(messages)s" 198 | 199 | #~ msgid "text" 200 | #~ msgstr "text" 201 | 202 | #~ msgid "rich text" 203 | #~ msgstr "text ric" 204 | 205 | #~ msgid "rich texts" 206 | #~ msgstr "texts rics" 207 | 208 | #~ msgid "" 209 | #~ "The rss field is updated several times a day. A change in the title will " 210 | #~ "only be visible on the home page after the next feed update." 211 | #~ msgstr "" 212 | #~ "El feed RSS s'actualitza varies vegades al dia. Els canvis en el títol " 213 | #~ "sols seran visibles a la plana inicial després de la propera " 214 | #~ "actualització." 215 | 216 | #~ msgid "link" 217 | #~ msgstr "enlaç" 218 | 219 | #~ msgid "pre-rendered content" 220 | #~ msgstr "contingut pre-renderitzat" 221 | 222 | #~ msgid "last updated" 223 | #~ msgstr "darrera actualització" 224 | 225 | #~ msgid "RSS feed" 226 | #~ msgstr "feed RSS" 227 | 228 | #~ msgid "RSS feeds" 229 | #~ msgstr "feeds RSS" 230 | 231 | #~ msgid "section" 232 | #~ msgstr "secció" 233 | 234 | #~ msgid "sections" 235 | #~ msgstr "seccions" 236 | 237 | #~ msgid "template content" 238 | #~ msgstr "plantilla de contingut" 239 | 240 | #~ msgid "template" 241 | #~ msgstr "plantilla" 242 | 243 | #~ msgid "video link" 244 | #~ msgstr "enllaç de vídeo" 245 | 246 | #~ msgid "" 247 | #~ "This should be a link to a youtube or vimeo video, i.e.: http://www." 248 | #~ "youtube.com/watch?v=zmj1rpzDRZ0" 249 | #~ msgstr "" 250 | #~ "Això ha de ser un enllaç a un vídeo de Youtube o Vimeo. Per exemple: " 251 | #~ "http://www.youtube.com/watch?v=zmj1rpzDRZ0" 252 | 253 | #~ msgid "video" 254 | #~ msgstr "vídeo" 255 | 256 | #~ msgid "videos" 257 | #~ msgstr "vídeos" 258 | 259 | #~ msgid "ordering" 260 | #~ msgstr "ordenació" 261 | 262 | #~ msgid "tags" 263 | #~ msgstr "etiquetes" 264 | 265 | #~ msgid "language" 266 | #~ msgstr "idioma" 267 | 268 | #~ msgid "translation of" 269 | #~ msgstr "tradució de" 270 | 271 | #~ msgid "Leave this empty for entries in the primary language." 272 | #~ msgstr "Deixa aquest camp buid per les entrades en l'idioma base" 273 | 274 | #~ msgid "available translations" 275 | #~ msgstr "traduccions disponibles" 276 | 277 | #~ msgid "published" 278 | #~ msgstr "publicat" 279 | 280 | #~ msgid "This is used for the generated navigation too." 281 | #~ msgstr "Això també es fa servir per la navegació generada automàticament." 282 | 283 | #~ msgid "published on" 284 | #~ msgstr "publicat el" 285 | 286 | #~ msgid "" 287 | #~ "Will be set automatically once you tick the `published` checkbox above." 288 | #~ msgstr "" 289 | #~ "S'establirà automàticament quan marquis la casella superior de 'publicat'" 290 | 291 | #~ msgid "entry" 292 | #~ msgstr "entrada" 293 | 294 | #~ msgid "entries" 295 | #~ msgstr "entrades" 296 | 297 | #~ msgid "creation date" 298 | #~ msgstr "data de creació" 299 | 300 | #~ msgid "modification date" 301 | #~ msgstr "data de modificació" 302 | 303 | #~ msgid "content types" 304 | #~ msgstr "tipus de contingut" 305 | 306 | #~ msgid "publication date" 307 | #~ msgstr "data de publicació" 308 | 309 | #~ msgid "publication end date" 310 | #~ msgstr "publicar fins a" 311 | 312 | #~ msgid "Leave empty if the entry should stay active forever." 313 | #~ msgstr "Si la deixen en blanc l'entrada estarà activa per sempre" 314 | 315 | #~ msgid "visible from - to" 316 | #~ msgstr "visible de-fins a" 317 | 318 | #~ msgid "Date-based publishing" 319 | #~ msgstr "Publicació segons la data" 320 | 321 | #~ msgid "featured" 322 | #~ msgstr "categoritzat" 323 | 324 | #~ msgid "Featured" 325 | #~ msgstr "Categoritzat" 326 | 327 | #~ msgid "meta keywords" 328 | #~ msgstr "meta paraules" 329 | 330 | #~ msgid "meta description" 331 | #~ msgstr "meta descripció" 332 | 333 | #~ msgid "Search engine optimization" 334 | #~ msgstr "Optimització per als motors de cerca" 335 | 336 | #~ msgid "Edit translation" 337 | #~ msgstr "Editar la traducció" 338 | 339 | #~ msgid "Create translation" 340 | #~ msgstr "Crear traducció" 341 | 342 | #~ msgid "translations" 343 | #~ msgstr "traduccions" 344 | 345 | #~ msgid "Preview" 346 | #~ msgstr "Previsualitzar" 347 | 348 | #~ msgid "file size" 349 | #~ msgstr "tamany d'arxiu" 350 | 351 | #~ msgid "created" 352 | #~ msgstr "creat" 353 | 354 | #~ msgid "file type" 355 | #~ msgstr "tipus d'arxiu" 356 | 357 | #~ msgid "file info" 358 | #~ msgstr "informació de l'arxiu" 359 | 360 | #~ msgid "parent" 361 | #~ msgstr "pare" 362 | 363 | #~ msgid "slug" 364 | #~ msgstr "slug" 365 | 366 | #~ msgid "category" 367 | #~ msgstr "categoria" 368 | 369 | #~ msgid "categories" 370 | #~ msgstr "categories" 371 | 372 | #~ msgid "copyright" 373 | #~ msgstr "drets de còpia" 374 | 375 | #~ msgid "Image" 376 | #~ msgstr "Imatge" 377 | 378 | #~ msgid "Video" 379 | #~ msgstr "Vídeo" 380 | 381 | #~ msgid "Audio" 382 | #~ msgstr "Audio" 383 | 384 | #~ msgid "PDF document" 385 | #~ msgstr "document PDF" 386 | 387 | #~ msgid "Flash" 388 | #~ msgstr "Flash" 389 | 390 | #~ msgid "Text" 391 | #~ msgstr "Text" 392 | 393 | #~ msgid "Rich Text" 394 | #~ msgstr "Text ric" 395 | 396 | #~ msgid "Microsoft Word" 397 | #~ msgstr "Microsoft Word" 398 | 399 | #~ msgid "Microsoft Excel" 400 | #~ msgstr "Microsoft Excel" 401 | 402 | #~ msgid "Microsoft PowerPoint" 403 | #~ msgstr "Microsoft PowerPoint" 404 | 405 | #~ msgid "Binary" 406 | #~ msgstr "Binari" 407 | 408 | #~ msgid "description" 409 | #~ msgstr "descripció" 410 | 411 | #~ msgid "media file translation" 412 | #~ msgstr "traducció de l'arxiu de medis" 413 | 414 | #~ msgid "media file translations" 415 | #~ msgstr "traduccions dels arxius de medis" 416 | 417 | #~ msgid "excerpt" 418 | #~ msgstr "extracte" 419 | 420 | #~ msgid "Add a brief excerpt summarizing the content of this page." 421 | #~ msgstr "Afegeix una breu descripció resumint el contingut de la plana" 422 | 423 | #~ msgid "Excerpt" 424 | #~ msgstr "Extracte" 425 | 426 | #~ msgid "navigation extension" 427 | #~ msgstr "extensió de navegació" 428 | 429 | #~ msgid "" 430 | #~ "Select the module providing subpages for this page if you need to " 431 | #~ "customize the navigation." 432 | #~ msgstr "" 433 | #~ "Selecciona el mòdul que proveeix les subplanes si necessites " 434 | #~ "personalitzar la navegació." 435 | 436 | #~ msgid "Navigation extension" 437 | #~ msgstr "Extensió de navegació" 438 | 439 | #, fuzzy 440 | #~| msgid "in navigation" 441 | #~ msgid "navigation group" 442 | #~ msgstr "a la navegació" 443 | 444 | #~ msgid "Select pages that should be listed as related content." 445 | #~ msgstr "Selecciones les planes que es mostraran com a contingut relacionat." 446 | 447 | #~ msgid "Related pages" 448 | #~ msgstr "Planes relacionades" 449 | 450 | #~ msgid "symlinked page" 451 | #~ msgstr "Plana enllaçada" 452 | 453 | #~ msgid "All content is inherited from this page if given." 454 | #~ msgstr "Tot el contingut es heretat d'aquesta plana." 455 | 456 | #~ msgid "content title" 457 | #~ msgstr "títol del contingut" 458 | 459 | #~ msgid "The first line is the main title, the following lines are subtitles." 460 | #~ msgstr "La primera línia és el títol principal, les altres són subtítols." 461 | 462 | #~ msgid "page title" 463 | #~ msgstr "títol de la plana" 464 | 465 | #, fuzzy 466 | #~| msgid "Page title for browser window. Same as title by default." 467 | #~ msgid "" 468 | #~ "Page title for browser window. Same as title bydefault. Must not be " 469 | #~ "longer than 70 characters." 470 | #~ msgstr "" 471 | #~ "Títol de la plana pel navegador. Per defecte el mateix que el títol." 472 | 473 | #~ msgid "Titles" 474 | #~ msgstr "Títols" 475 | 476 | #~ msgid "This URL is already taken by an active page." 477 | #~ msgstr "Aquesta URL ja està en ús en una plana activa." 478 | 479 | #~ msgid "This URL is already taken by another active page." 480 | #~ msgstr "Aquesta URL ja età en ús per una altra plana activa." 481 | 482 | #~ msgid "Other options" 483 | #~ msgstr "Altres opcions" 484 | 485 | #~ msgid "in navigation" 486 | #~ msgstr "a la navegació" 487 | 488 | #~ msgid "Add child page" 489 | #~ msgstr "Afegeix una plana filla." 490 | 491 | #~ msgid "View on site" 492 | #~ msgstr "Veure a Lloc" 493 | 494 | #~ msgid "inherited" 495 | #~ msgstr "heretat" 496 | 497 | #~ msgid "extensions" 498 | #~ msgstr "extensions" 499 | 500 | #~ msgid "is active" 501 | #~ msgstr "és activa" 502 | 503 | #~ msgid "active" 504 | #~ msgstr "actiu" 505 | 506 | #, fuzzy 507 | #~| msgid "This is used for the generated navigation too." 508 | #~ msgid "This title is also used for navigation menu items." 509 | #~ msgstr "Això també es fa servir per la navegació generada automàticament." 510 | 511 | #~ msgid "override URL" 512 | #~ msgstr "URL sobrescrit" 513 | 514 | #~ msgid "" 515 | #~ "Override the target URL. Be sure to include slashes at the beginning and " 516 | #~ "at the end if it is a local URL. This affects both the navigation and " 517 | #~ "subpages' URLs." 518 | #~ msgstr "" 519 | #~ "Sobreescriu l'URL. Ha de contenir una '/' a l'inici i al final quan es " 520 | #~ "tracti d'una URL local. Afecta tant a la navegació com a les URLs de les " 521 | #~ "subplanes." 522 | 523 | #~ msgid "redirect to" 524 | #~ msgstr "redirecciona a" 525 | 526 | #~ msgid "Cached URL" 527 | #~ msgstr "URL en caché" 528 | 529 | #~ msgid "page" 530 | #~ msgstr "plana" 531 | 532 | #~ msgid "pages" 533 | #~ msgstr "planes" 534 | 535 | #~ msgid "Really delete item?" 536 | #~ msgstr "Segur que vols esborrar l'element?" 537 | 538 | #~ msgid "Confirm to delete item" 539 | #~ msgstr "Confirma per esborrar" 540 | 541 | #~ msgid "Item deleted successfully." 542 | #~ msgstr "L'element s'esborrà amb èxit." 543 | 544 | #~ msgid "Cannot delete item" 545 | #~ msgstr "Impossible esborrar l'element" 546 | 547 | #~ msgid "Cannot delete item, because it is parent of at least one other item." 548 | #~ msgstr "" 549 | #~ "No puc esborrar l'element ja que és el pare d'almanco un altre element." 550 | 551 | #~ msgid "Change template" 552 | #~ msgstr "Canviar la plantilla" 553 | 554 | #~ msgid "Really change template?
All changes are saved." 555 | #~ msgstr "Vols canviar la plantilla?
Tots els canvis es guardaran." 556 | 557 | #~ msgid "Hide" 558 | #~ msgstr "Ocultar" 559 | 560 | #~ msgid "Show" 561 | #~ msgstr "Mostrar" 562 | 563 | #~ msgid "After" 564 | #~ msgstr "Després" 565 | 566 | #~ msgid "Before" 567 | #~ msgstr "Abans" 568 | 569 | #~ msgid "Insert new:" 570 | #~ msgstr "Inserir nou:" 571 | 572 | #~ msgid "Region empty" 573 | #~ msgstr "Regió buida" 574 | 575 | #~ msgid "" 576 | #~ "Content from the parent site is automatically inherited. To override this " 577 | #~ "behaviour, add some content." 578 | #~ msgstr "" 579 | #~ "El contingut de la plana pare s'inserirà automàticament. Per " 580 | #~ "sobreescriure aquest comportament afegeix algun contingut." 581 | 582 | #~ msgid "Save" 583 | #~ msgstr "Guardar" 584 | 585 | #~ msgid "Stop Editing" 586 | #~ msgstr "Acabar l'edició" 587 | 588 | #~ msgid "edit" 589 | #~ msgstr "editar" 590 | 591 | #~ msgid "new" 592 | #~ msgstr "nou" 593 | 594 | #~ msgid "up" 595 | #~ msgstr "amunt" 596 | 597 | #~ msgid "down" 598 | #~ msgstr "avall" 599 | 600 | #~ msgid "remove" 601 | #~ msgstr "esborrar" 602 | 603 | #~ msgid "Edit on site" 604 | #~ msgstr "Editar al Lloc" 605 | 606 | #~ msgid "Home" 607 | #~ msgstr "Inici" 608 | 609 | #~ msgid "Shortcuts" 610 | #~ msgstr "Dreceres" 611 | 612 | #~ msgid "Expand tree" 613 | #~ msgstr "Expandir l'arbre" 614 | 615 | #~ msgid "Filter" 616 | #~ msgstr "Filtrar" 617 | 618 | #~ msgid " By %(filter_title)s " 619 | #~ msgstr "Per %(filter_title)s" 620 | 621 | #~ msgid "Bulk upload a ZIP file:" 622 | #~ msgstr "Puja un arxiu ZIP:" 623 | 624 | #~ msgid "Send" 625 | #~ msgstr "Enviar" 626 | 627 | #~ msgid "%(comment_count)s comments." 628 | #~ msgstr "%(comment_count)s comentaris." 629 | 630 | #~ msgid "" 631 | #~ "\n" 632 | #~ " %(comment_username)s said on " 633 | #~ "%(comment_submit_date)s
\n" 634 | #~ " " 635 | #~ msgstr "" 636 | #~ "\n" 637 | #~ " %(comment_username)s digué el %(comment_submit_date)s
\n" 638 | #~ " " 639 | 640 | #~ msgid "No comments." 641 | #~ msgstr "Sense comentaris." 642 | 643 | #~ msgid "Post Comment" 644 | #~ msgstr "Envia un comentari" 645 | 646 | #~ msgid "Submit" 647 | #~ msgstr "Enviar" 648 | 649 | #~ msgid "Thanks!" 650 | #~ msgstr "Gràcies!" 651 | 652 | #~ msgid "plain" 653 | #~ msgstr "plà" 654 | 655 | #~ msgid "title row" 656 | #~ msgstr "títol de la fila" 657 | 658 | #~ msgid "title row and column" 659 | #~ msgstr "títol de fila i columna" 660 | 661 | #~ msgid "table" 662 | #~ msgstr "taula" 663 | 664 | #~ msgid "tables" 665 | #~ msgstr "taules" 666 | 667 | #~ msgid "data" 668 | #~ msgstr "dades" 669 | 670 | #~ msgid "This will be prepended to the default keyword list." 671 | #~ msgstr "Això serà afegit a la llista de paraules clau per defecte" 672 | 673 | #~ msgid "This will be prepended to the default description." 674 | #~ msgstr "Això serà afegit a la descripció per defecte" 675 | -------------------------------------------------------------------------------- /content_editor/locale/cs/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/feincms/django-content-editor/75f88363c3d4b80c1dcfc7a57af3efa3733e3998/content_editor/locale/cs/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /content_editor/locale/de/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/feincms/django-content-editor/75f88363c3d4b80c1dcfc7a57af3efa3733e3998/content_editor/locale/de/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /content_editor/locale/de/LC_MESSAGES/django.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # 5 | # Translators: 6 | # Matthias Kestenholz , 2011 7 | # sbaechler , 2013 8 | msgid "" 9 | msgstr "" 10 | "Project-Id-Version: FeinCMS\n" 11 | "Report-Msgid-Bugs-To: \n" 12 | "POT-Creation-Date: 2021-06-09 16:07+0200\n" 13 | "PO-Revision-Date: 2013-10-25 09:15+0000\n" 14 | "Last-Translator: Matthias Kestenholz \n" 15 | "Language-Team: German (http://www.transifex.com/projects/p/feincms/language/" 16 | "de/)\n" 17 | "Language: de\n" 18 | "MIME-Version: 1.0\n" 19 | "Content-Type: text/plain; charset=UTF-8\n" 20 | "Content-Transfer-Encoding: 8bit\n" 21 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 22 | 23 | #: admin.py:151 24 | msgid "Add new item" 25 | msgstr "Neues Element hinzufügen" 26 | 27 | #: admin.py:152 28 | msgid "No items." 29 | msgstr "Keine Elemente." 30 | 31 | #: admin.py:153 32 | msgid "No items. Region may inherit content." 33 | msgstr "Keine Elemente. Region könnte Inhalt erben." 34 | 35 | #: admin.py:154 36 | msgid "No regions available." 37 | msgstr "Keine Regionen verfügbar." 38 | 39 | #: admin.py:155 40 | msgid "No plugins allowed in this region." 41 | msgstr "Keine der Elemente sind in dieser Region erlaubt." 42 | 43 | #: admin.py:156 44 | msgid "New item" 45 | msgstr "Neues Element" 46 | 47 | #: admin.py:157 48 | msgid "Unknown region" 49 | msgstr "Unbekannte Region" 50 | 51 | #: admin.py:158 52 | msgid "Collapse all items" 53 | msgstr "Alle Elemente ausblenden" 54 | 55 | #: admin.py:159 56 | msgid "Uncollapse all items" 57 | msgstr "Alle Elemente einblenden" 58 | 59 | #: admin.py:160 60 | msgid "Toggle sidebar" 61 | msgstr "Sidebar ein-/ausblenden" 62 | 63 | #: admin.py:161 64 | msgid "marked for deletion" 65 | msgstr "zur Löschung markiert" 66 | 67 | #: admin.py:163 68 | msgid "Use Ctrl-Click to select and move multiple items." 69 | msgstr "" 70 | "Mit Ctrl-Click können mehrere Elemente ausgewählt und verschoben werden." 71 | 72 | #: admin.py:166 73 | msgid "Doubleclicking inserts an item at the end." 74 | msgstr "Ein Doppelklick fügt ein Element am Ende hinzu." 75 | -------------------------------------------------------------------------------- /content_editor/locale/es/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/feincms/django-content-editor/75f88363c3d4b80c1dcfc7a57af3efa3733e3998/content_editor/locale/es/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /content_editor/locale/es/LC_MESSAGES/django.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # 5 | # Translators: 6 | # proycon , 2009 7 | msgid "" 8 | msgstr "" 9 | "Project-Id-Version: FeinCMS\n" 10 | "Report-Msgid-Bugs-To: \n" 11 | "POT-Creation-Date: 2021-06-09 16:07+0200\n" 12 | "PO-Revision-Date: 2013-10-25 09:15+0000\n" 13 | "Last-Translator: Matthias Kestenholz \n" 14 | "Language-Team: Spanish (http://www.transifex.com/projects/p/feincms/language/" 15 | "es/)\n" 16 | "Language: es\n" 17 | "MIME-Version: 1.0\n" 18 | "Content-Type: text/plain; charset=UTF-8\n" 19 | "Content-Transfer-Encoding: 8bit\n" 20 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 21 | 22 | #: admin.py:151 23 | msgid "Add new item" 24 | msgstr "Añadir nuevo elemento" 25 | 26 | #: admin.py:152 27 | #, fuzzy 28 | #| msgid "max. items" 29 | msgid "No items." 30 | msgstr "número máximo" 31 | 32 | #: admin.py:153 33 | msgid "No items. Region may inherit content." 34 | msgstr "" 35 | 36 | #: admin.py:154 37 | msgid "No regions available." 38 | msgstr "" 39 | 40 | #: admin.py:155 41 | msgid "No plugins allowed in this region." 42 | msgstr "" 43 | 44 | #: admin.py:156 45 | #, fuzzy 46 | #| msgid "max. items" 47 | msgid "New item" 48 | msgstr "número máximo" 49 | 50 | #: admin.py:157 51 | msgid "Unknown region" 52 | msgstr "" 53 | 54 | #: admin.py:158 55 | #, fuzzy 56 | #| msgid "Collapse tree" 57 | msgid "Collapse all items" 58 | msgstr "Colapsar el árbol" 59 | 60 | #: admin.py:159 61 | #, fuzzy 62 | #| msgid "Collapse tree" 63 | msgid "Uncollapse all items" 64 | msgstr "Colapsar el árbol" 65 | 66 | #: admin.py:160 67 | msgid "Toggle sidebar" 68 | msgstr "" 69 | 70 | #: admin.py:161 71 | msgid "marked for deletion" 72 | msgstr "" 73 | 74 | #: admin.py:163 75 | msgid "Use Ctrl-Click to select and move multiple items." 76 | msgstr "" 77 | 78 | #: admin.py:166 79 | msgid "Doubleclicking inserts an item at the end." 80 | msgstr "" 81 | 82 | #, fuzzy 83 | #~| msgid "template contents" 84 | #~ msgid "Show/hide contents" 85 | #~ msgstr "plantilla de contenidos" 86 | 87 | #~ msgid "All" 88 | #~ msgstr "Todos" 89 | 90 | #~ msgid "Parent" 91 | #~ msgstr "Padre" 92 | 93 | #~ msgid "Category" 94 | #~ msgstr "Categoría" 95 | 96 | #~ msgid "Change %s" 97 | #~ msgstr "Modificar %s" 98 | 99 | #~ msgid "title" 100 | #~ msgstr "título" 101 | 102 | #~ msgid "%s has been moved to a new position." 103 | #~ msgstr "%s ha sido movido a una nueva posición" 104 | 105 | #~ msgid "Did not understand moving instruction." 106 | #~ msgstr "No entiendo la orden de movimiento" 107 | 108 | #~ msgid "actions" 109 | #~ msgstr "acciones" 110 | 111 | #~ msgid "application content" 112 | #~ msgstr "contenido de la aplicación" 113 | 114 | #~ msgid "application contents" 115 | #~ msgstr "contenidos de la aplicación" 116 | 117 | #~ msgid "application" 118 | #~ msgstr "aplicación" 119 | 120 | #~ msgid "enabled" 121 | #~ msgstr "activo" 122 | 123 | #~ msgid "New comments may be added" 124 | #~ msgstr "Se podrán añadir nuevos comentarios" 125 | 126 | #~ msgid "comments" 127 | #~ msgstr "comentarios" 128 | 129 | #~ msgid "public" 130 | #~ msgstr "público" 131 | 132 | #~ msgid "not public" 133 | #~ msgstr "privado" 134 | 135 | #~ msgid "name" 136 | #~ msgstr "nombre" 137 | 138 | #~ msgid "email" 139 | #~ msgstr "e-mail" 140 | 141 | #~ msgid "subject" 142 | #~ msgstr "asunto" 143 | 144 | #~ msgid "content" 145 | #~ msgstr "contenido" 146 | 147 | #~ msgid "contact form" 148 | #~ msgstr "formulario de contacto" 149 | 150 | #~ msgid "contact forms" 151 | #~ msgstr "formularios de contacto" 152 | 153 | #~ msgid "file" 154 | #~ msgstr "archivo" 155 | 156 | #~ msgid "files" 157 | #~ msgstr "archivos" 158 | 159 | #~ msgid "image" 160 | #~ msgstr "imagen" 161 | 162 | #~ msgid "caption" 163 | #~ msgstr "leyenda" 164 | 165 | #~ msgid "images" 166 | #~ msgstr "imágenes" 167 | 168 | #~ msgid "position" 169 | #~ msgstr "posición" 170 | 171 | #~ msgid "media file" 172 | #~ msgstr "archivo de medios" 173 | 174 | #~ msgid "media files" 175 | #~ msgstr "archivos de medios" 176 | 177 | #~ msgid "type" 178 | #~ msgstr "tipo" 179 | 180 | #~ msgid "raw content" 181 | #~ msgstr "contenido crudo" 182 | 183 | #~ msgid "raw contents" 184 | #~ msgstr "contenidos crudos" 185 | 186 | #~ msgid "HTML Tidy" 187 | #~ msgstr "HTML Tidy" 188 | 189 | #~ msgid "Ignore the HTML validation warnings" 190 | #~ msgstr "Ignorar los avisos de validación HTML" 191 | 192 | #~ msgid "" 193 | #~ "HTML validation produced %(count)d warnings. Please review the updated " 194 | #~ "content below before continuing: %(messages)s" 195 | #~ msgstr "" 196 | #~ "La validación del HTML produjo %(count)d avisos. Por favor revisa el " 197 | #~ "contenido actualizado de la parte inferior antes de continuar: " 198 | #~ "%(messages)s" 199 | 200 | #~ msgid "text" 201 | #~ msgstr "texto" 202 | 203 | #~ msgid "rich text" 204 | #~ msgstr "texto rico" 205 | 206 | #~ msgid "rich texts" 207 | #~ msgstr "textos ricos" 208 | 209 | #~ msgid "" 210 | #~ "The rss field is updated several times a day. A change in the title will " 211 | #~ "only be visible on the home page after the next feed update." 212 | #~ msgstr "" 213 | #~ "El feed RSS es actualizado varias veces por dia. Cambios en el título " 214 | #~ "solo aparecen en la página después de la actualización del feed RSS " 215 | #~ "siguiente." 216 | 217 | #~ msgid "link" 218 | #~ msgstr "enlace" 219 | 220 | #~ msgid "pre-rendered content" 221 | #~ msgstr "contenido pre-renderizado" 222 | 223 | #~ msgid "last updated" 224 | #~ msgstr "última actualización" 225 | 226 | #~ msgid "RSS feed" 227 | #~ msgstr "feed RSS" 228 | 229 | #~ msgid "RSS feeds" 230 | #~ msgstr "feeds RSS" 231 | 232 | #~ msgid "section" 233 | #~ msgstr "sección" 234 | 235 | #~ msgid "sections" 236 | #~ msgstr "secciones" 237 | 238 | #~ msgid "template content" 239 | #~ msgstr "plantilla de contenido" 240 | 241 | #~ msgid "template" 242 | #~ msgstr "plantilla" 243 | 244 | #~ msgid "video link" 245 | #~ msgstr "enlace de vídeo" 246 | 247 | #~ msgid "" 248 | #~ "This should be a link to a youtube or vimeo video, i.e.: http://www." 249 | #~ "youtube.com/watch?v=zmj1rpzDRZ0" 250 | #~ msgstr "" 251 | #~ "Debe ser un enlace a un vídeo de YouTube o Vimeo. Por ejemplo: http://www." 252 | #~ "youtube.com/watch?v=zmj1rpzDRZ0" 253 | 254 | #~ msgid "video" 255 | #~ msgstr "vídeo" 256 | 257 | #~ msgid "videos" 258 | #~ msgstr "vídeos" 259 | 260 | #~ msgid "ordering" 261 | #~ msgstr "orden" 262 | 263 | #~ msgid "tags" 264 | #~ msgstr "etiquetas" 265 | 266 | #~ msgid "language" 267 | #~ msgstr "idioma" 268 | 269 | #~ msgid "translation of" 270 | #~ msgstr "traducción de" 271 | 272 | #~ msgid "Leave this empty for entries in the primary language." 273 | #~ msgstr "Deja este campo vacío para las entradas en el idioma base." 274 | 275 | #~ msgid "available translations" 276 | #~ msgstr "traducciones disponibles" 277 | 278 | #~ msgid "published" 279 | #~ msgstr "publicado" 280 | 281 | #~ msgid "This is used for the generated navigation too." 282 | #~ msgstr "También será usado para la navegación generada automáticamente." 283 | 284 | #~ msgid "published on" 285 | #~ msgstr "publicado en" 286 | 287 | #~ msgid "" 288 | #~ "Will be set automatically once you tick the `published` checkbox above." 289 | #~ msgstr "Se establecerá automáticamente cuando se marque en 'publicado'." 290 | 291 | #~ msgid "entry" 292 | #~ msgstr "entrada" 293 | 294 | #~ msgid "entries" 295 | #~ msgstr "entradas" 296 | 297 | #~ msgid "creation date" 298 | #~ msgstr "fecha de creación" 299 | 300 | #~ msgid "modification date" 301 | #~ msgstr "fecha de modificación" 302 | 303 | #~ msgid "content types" 304 | #~ msgstr "tipos de contenido" 305 | 306 | #~ msgid "publication date" 307 | #~ msgstr "fecha de publicación" 308 | 309 | #~ msgid "publication end date" 310 | #~ msgstr "publicar hasta" 311 | 312 | #~ msgid "Leave empty if the entry should stay active forever." 313 | #~ msgstr "Si se deja en blanco la entrada permanecerá activa para siempre." 314 | 315 | #~ msgid "visible from - to" 316 | #~ msgstr "visible de - hasta" 317 | 318 | #~ msgid "Date-based publishing" 319 | #~ msgstr "Publicación según la fecha" 320 | 321 | #~ msgid "featured" 322 | #~ msgstr "categorizado" 323 | 324 | #~ msgid "Featured" 325 | #~ msgstr "Categorizado" 326 | 327 | #~ msgid "meta keywords" 328 | #~ msgstr "meta palabras clave" 329 | 330 | #~ msgid "meta description" 331 | #~ msgstr "meta descripción" 332 | 333 | #~ msgid "Search engine optimization" 334 | #~ msgstr "Optimización para motores de búsqueda" 335 | 336 | #~ msgid "Edit translation" 337 | #~ msgstr "Editar traducción" 338 | 339 | #~ msgid "Create translation" 340 | #~ msgstr "Crear traducción" 341 | 342 | #~ msgid "translations" 343 | #~ msgstr "traducciones" 344 | 345 | #~ msgid "Preview" 346 | #~ msgstr "Pre-visualización" 347 | 348 | #~ msgid "file size" 349 | #~ msgstr "tamaño de archivo" 350 | 351 | #~ msgid "created" 352 | #~ msgstr "creado en" 353 | 354 | #~ msgid "file type" 355 | #~ msgstr "tipo de archivo" 356 | 357 | #~ msgid "file info" 358 | #~ msgstr "información del archivo" 359 | 360 | #~ msgid "parent" 361 | #~ msgstr "padre" 362 | 363 | #~ msgid "slug" 364 | #~ msgstr "slug" 365 | 366 | #~ msgid "category" 367 | #~ msgstr "categoría" 368 | 369 | #~ msgid "categories" 370 | #~ msgstr "categorías" 371 | 372 | #~ msgid "copyright" 373 | #~ msgstr "copyright" 374 | 375 | #~ msgid "Image" 376 | #~ msgstr "Imagen" 377 | 378 | #~ msgid "Video" 379 | #~ msgstr "Vídeo" 380 | 381 | #~ msgid "Audio" 382 | #~ msgstr "Audio" 383 | 384 | #~ msgid "PDF document" 385 | #~ msgstr "documento PDF" 386 | 387 | #~ msgid "Flash" 388 | #~ msgstr "Flash" 389 | 390 | #~ msgid "Text" 391 | #~ msgstr "Texto" 392 | 393 | #~ msgid "Rich Text" 394 | #~ msgstr "Texto rico" 395 | 396 | #~ msgid "Microsoft Word" 397 | #~ msgstr "Microsoft Word" 398 | 399 | #~ msgid "Microsoft Excel" 400 | #~ msgstr "Microsoft Excel" 401 | 402 | #~ msgid "Microsoft PowerPoint" 403 | #~ msgstr "Microsoft PowerPoint" 404 | 405 | #~ msgid "Binary" 406 | #~ msgstr "Binario" 407 | 408 | #~ msgid "description" 409 | #~ msgstr "descripción" 410 | 411 | #~ msgid "media file translation" 412 | #~ msgstr "traducción del archivo de media" 413 | 414 | #~ msgid "media file translations" 415 | #~ msgstr "traducciones del archivo de media" 416 | 417 | #~ msgid "excerpt" 418 | #~ msgstr "extracto" 419 | 420 | #~ msgid "Add a brief excerpt summarizing the content of this page." 421 | #~ msgstr "Añade una breve descripción resumiendo el contenido de la página." 422 | 423 | #~ msgid "Excerpt" 424 | #~ msgstr "Extracto" 425 | 426 | #~ msgid "navigation extension" 427 | #~ msgstr "extensión de navegación" 428 | 429 | #~ msgid "" 430 | #~ "Select the module providing subpages for this page if you need to " 431 | #~ "customize the navigation." 432 | #~ msgstr "" 433 | #~ "Selecciona el módulo que provee sub-páginas para esta pagina si necesitas " 434 | #~ "personalizar la navegación." 435 | 436 | #~ msgid "Navigation extension" 437 | #~ msgstr "Extensión de navegación" 438 | 439 | #, fuzzy 440 | #~| msgid "in navigation" 441 | #~ msgid "navigation group" 442 | #~ msgstr "en la navegación" 443 | 444 | #~ msgid "Select pages that should be listed as related content." 445 | #~ msgstr "Selecciona las páginas que se mostrarán como contenido relacionado." 446 | 447 | #~ msgid "Related pages" 448 | #~ msgstr "Páginas relacionadas" 449 | 450 | #~ msgid "symlinked page" 451 | #~ msgstr "página direccionada" 452 | 453 | #~ msgid "All content is inherited from this page if given." 454 | #~ msgstr "Todo el contenido es heredado de esta página." 455 | 456 | #~ msgid "content title" 457 | #~ msgstr "título del contenido" 458 | 459 | #~ msgid "The first line is the main title, the following lines are subtitles." 460 | #~ msgstr "" 461 | #~ "La primera línea es el título principal. Otras líneas serán subtítulos." 462 | 463 | #~ msgid "page title" 464 | #~ msgstr "título de la página" 465 | 466 | #, fuzzy 467 | #~| msgid "Page title for browser window. Same as title by default." 468 | #~ msgid "" 469 | #~ "Page title for browser window. Same as title bydefault. Must not be " 470 | #~ "longer than 70 characters." 471 | #~ msgstr "" 472 | #~ "Título de la página para la ventana del navegador. Si se omite utilizará " 473 | #~ "el mismo título." 474 | 475 | #~ msgid "Titles" 476 | #~ msgstr "Títulos" 477 | 478 | #~ msgid "This URL is already taken by an active page." 479 | #~ msgstr "Esta URL ya está en uso en una página activa" 480 | 481 | #~ msgid "This URL is already taken by another active page." 482 | #~ msgstr "Esta URL ya está en uno por otra página activa" 483 | 484 | #~ msgid "Other options" 485 | #~ msgstr "otras opciones" 486 | 487 | #~ msgid "in navigation" 488 | #~ msgstr "en la navegación" 489 | 490 | #~ msgid "Add child page" 491 | #~ msgstr "Añade una página hija" 492 | 493 | #~ msgid "View on site" 494 | #~ msgstr "Ver en sitio" 495 | 496 | #~ msgid "inherited" 497 | #~ msgstr "heredado" 498 | 499 | #~ msgid "extensions" 500 | #~ msgstr "extensiones" 501 | 502 | #~ msgid "is active" 503 | #~ msgstr "activo" 504 | 505 | #~ msgid "active" 506 | #~ msgstr "activo" 507 | 508 | #, fuzzy 509 | #~| msgid "This is used for the generated navigation too." 510 | #~ msgid "This title is also used for navigation menu items." 511 | #~ msgstr "También será usado para la navegación generada automáticamente." 512 | 513 | #~ msgid "override URL" 514 | #~ msgstr "URL efectivo" 515 | 516 | #~ msgid "" 517 | #~ "Override the target URL. Be sure to include slashes at the beginning and " 518 | #~ "at the end if it is a local URL. This affects both the navigation and " 519 | #~ "subpages' URLs." 520 | #~ msgstr "" 521 | #~ "URL efectivo. Debe contener una '/' cuando se trata de un URL local. Este " 522 | #~ "campo afecta la navegación y los URLs de las sub-páginas." 523 | 524 | #~ msgid "redirect to" 525 | #~ msgstr "redirección a" 526 | 527 | #~ msgid "Cached URL" 528 | #~ msgstr "URL en cache" 529 | 530 | #~ msgid "page" 531 | #~ msgstr "página" 532 | 533 | #~ msgid "pages" 534 | #~ msgstr "páginas" 535 | 536 | #~ msgid "Really delete item?" 537 | #~ msgstr "¿Confirma la eliminación del elemento?" 538 | 539 | #~ msgid "Confirm to delete item" 540 | #~ msgstr "Confirme para eliminar el elemento" 541 | 542 | #~ msgid "Item deleted successfully." 543 | #~ msgstr "Elemento eliminado con éxito." 544 | 545 | #~ msgid "Cannot delete item" 546 | #~ msgstr "Imposible de eliminar el elemento" 547 | 548 | #~ msgid "Cannot delete item, because it is parent of at least one other item." 549 | #~ msgstr "" 550 | #~ "Imposible de eliminar el elemento, porque es padre de al menos un " 551 | #~ "elemento ." 552 | 553 | #~ msgid "Change template" 554 | #~ msgstr "Cambiar la plantilla" 555 | 556 | #~ msgid "Really change template?
All changes are saved." 557 | #~ msgstr "¿Deas cambiar la plantilla?
Todos los cambios se guardarán." 558 | 559 | #~ msgid "Hide" 560 | #~ msgstr "Ocultar" 561 | 562 | #~ msgid "Show" 563 | #~ msgstr "Mostrar" 564 | 565 | #~ msgid "After" 566 | #~ msgstr "Después" 567 | 568 | #~ msgid "Before" 569 | #~ msgstr "Antes" 570 | 571 | #~ msgid "Insert new:" 572 | #~ msgstr "Insertar nuevo:" 573 | 574 | #~ msgid "Region empty" 575 | #~ msgstr "Región vacía" 576 | 577 | #~ msgid "" 578 | #~ "Content from the parent site is automatically inherited. To override this " 579 | #~ "behaviour, add some content." 580 | #~ msgstr "" 581 | #~ "El contenido del sitio padre se hereda automáticamente. Para " 582 | #~ "sobreescribir este comportamiento añade algún contenido." 583 | 584 | #~ msgid "Save" 585 | #~ msgstr "Guardar" 586 | 587 | #~ msgid "Stop Editing" 588 | #~ msgstr "Terminar edición" 589 | 590 | #~ msgid "edit" 591 | #~ msgstr "editar" 592 | 593 | #~ msgid "new" 594 | #~ msgstr "nuevo" 595 | 596 | #~ msgid "up" 597 | #~ msgstr "arriba" 598 | 599 | #~ msgid "down" 600 | #~ msgstr "abajo" 601 | 602 | #~ msgid "remove" 603 | #~ msgstr "borrar" 604 | 605 | #~ msgid "Edit on site" 606 | #~ msgstr "Editar en el sitio" 607 | 608 | #~ msgid "Home" 609 | #~ msgstr "Página inicial" 610 | 611 | #~ msgid "Shortcuts" 612 | #~ msgstr "Atajos" 613 | 614 | #~ msgid "Expand tree" 615 | #~ msgstr "Expandir el árbol" 616 | 617 | #~ msgid "Filter" 618 | #~ msgstr "Filtrar" 619 | 620 | #~ msgid " By %(filter_title)s " 621 | #~ msgstr "Por %(filter_title)s" 622 | 623 | #~ msgid "Bulk upload a ZIP file:" 624 | #~ msgstr "Sube un archivo ZIP:" 625 | 626 | #~ msgid "Send" 627 | #~ msgstr "Enviar" 628 | 629 | #~ msgid "%(comment_count)s comments." 630 | #~ msgstr "%(comment_count)s comentarios." 631 | 632 | #~ msgid "" 633 | #~ "\n" 634 | #~ " %(comment_username)s said on " 635 | #~ "%(comment_submit_date)s
\n" 636 | #~ " " 637 | #~ msgstr "" 638 | #~ "\n" 639 | #~ " %(comment_username)s dijo el %(comment_submit_date)s
\n" 640 | #~ " " 641 | 642 | #~ msgid "No comments." 643 | #~ msgstr "Sin comentarios" 644 | 645 | #~ msgid "Post Comment" 646 | #~ msgstr "Envía un comentario" 647 | 648 | #~ msgid "Submit" 649 | #~ msgstr "Enviar" 650 | 651 | #~ msgid "Thanks!" 652 | #~ msgstr "¡Gracias!" 653 | 654 | #~ msgid "plain" 655 | #~ msgstr "plano" 656 | 657 | #~ msgid "title row" 658 | #~ msgstr "título de la fila" 659 | 660 | #~ msgid "title row and column" 661 | #~ msgstr "título de fila y columna" 662 | 663 | #~ msgid "table" 664 | #~ msgstr "tabla" 665 | 666 | #~ msgid "tables" 667 | #~ msgstr "tablas" 668 | 669 | #~ msgid "data" 670 | #~ msgstr "datos" 671 | 672 | #~ msgid "This will be prepended to the default keyword list." 673 | #~ msgstr "Será incluido antes de la lista de palabras clave." 674 | 675 | #~ msgid "This will be prepended to the default description." 676 | #~ msgstr "Será incluido antes de la meta descripción por defecto." 677 | -------------------------------------------------------------------------------- /content_editor/locale/fr/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/feincms/django-content-editor/75f88363c3d4b80c1dcfc7a57af3efa3733e3998/content_editor/locale/fr/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /content_editor/locale/fr/LC_MESSAGES/django.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # 5 | # Translators: 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: FeinCMS\n" 9 | "Report-Msgid-Bugs-To: \n" 10 | "POT-Creation-Date: 2021-06-09 16:07+0200\n" 11 | "PO-Revision-Date: 2013-10-25 09:15+0000\n" 12 | "Last-Translator: Matthias Kestenholz \n" 13 | "Language-Team: French (http://www.transifex.com/projects/p/feincms/language/" 14 | "fr/)\n" 15 | "Language: fr\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Plural-Forms: nplurals=2; plural=(n > 1);\n" 20 | 21 | #: admin.py:151 22 | msgid "Add new item" 23 | msgstr "Ajouter un autre" 24 | 25 | #: admin.py:152 26 | #, fuzzy 27 | #| msgid "max. items" 28 | msgid "No items." 29 | msgstr "max. éléments" 30 | 31 | #: admin.py:153 32 | msgid "No items. Region may inherit content." 33 | msgstr "" 34 | 35 | #: admin.py:154 36 | msgid "No regions available." 37 | msgstr "" 38 | 39 | #: admin.py:155 40 | msgid "No plugins allowed in this region." 41 | msgstr "" 42 | 43 | #: admin.py:156 44 | #, fuzzy 45 | #| msgid "max. items" 46 | msgid "New item" 47 | msgstr "max. éléments" 48 | 49 | #: admin.py:157 50 | msgid "Unknown region" 51 | msgstr "" 52 | 53 | #: admin.py:158 54 | #, fuzzy 55 | #| msgid "Collapse tree" 56 | msgid "Collapse all items" 57 | msgstr "Réduire l'arbre" 58 | 59 | #: admin.py:159 60 | #, fuzzy 61 | #| msgid "Collapse tree" 62 | msgid "Uncollapse all items" 63 | msgstr "Réduire l'arbre" 64 | 65 | #: admin.py:160 66 | msgid "Toggle sidebar" 67 | msgstr "" 68 | 69 | #: admin.py:161 70 | msgid "marked for deletion" 71 | msgstr "" 72 | 73 | #: admin.py:163 74 | msgid "Use Ctrl-Click to select and move multiple items." 75 | msgstr "" 76 | 77 | #: admin.py:166 78 | msgid "Doubleclicking inserts an item at the end." 79 | msgstr "" 80 | 81 | #, fuzzy 82 | #~| msgid "raw contents" 83 | #~ msgid "Show/hide contents" 84 | #~ msgstr "contenus crus" 85 | 86 | #~ msgid "All" 87 | #~ msgstr "Tous" 88 | 89 | #~ msgid "Parent" 90 | #~ msgstr "Parent" 91 | 92 | #~ msgid "Change %s" 93 | #~ msgstr "Changement %s" 94 | 95 | #~ msgid "title" 96 | #~ msgstr "titre" 97 | 98 | #~ msgid "actions" 99 | #~ msgstr "actions" 100 | 101 | #~ msgid "application content" 102 | #~ msgstr "contenu d'application" 103 | 104 | #~ msgid "application contents" 105 | #~ msgstr "contenus d'application" 106 | 107 | #~ msgid "application" 108 | #~ msgstr "application" 109 | 110 | #~ msgid "name" 111 | #~ msgstr "nom" 112 | 113 | #~ msgid "email" 114 | #~ msgstr "courriel" 115 | 116 | #~ msgid "subject" 117 | #~ msgstr "sujet" 118 | 119 | #~ msgid "content" 120 | #~ msgstr "Contenu" 121 | 122 | #~ msgid "contact form" 123 | #~ msgstr "formulaire de contact" 124 | 125 | #~ msgid "contact forms" 126 | #~ msgstr "formulaires de contact" 127 | 128 | #~ msgid "file" 129 | #~ msgstr "fichier" 130 | 131 | #~ msgid "files" 132 | #~ msgstr "fichiers" 133 | 134 | #~ msgid "image" 135 | #~ msgstr "image" 136 | 137 | #~ msgid "caption" 138 | #~ msgstr "légende" 139 | 140 | #~ msgid "images" 141 | #~ msgstr "images" 142 | 143 | #~ msgid "position" 144 | #~ msgstr "position" 145 | 146 | #~ msgid "media file" 147 | #~ msgstr "fichier de média" 148 | 149 | #~ msgid "media files" 150 | #~ msgstr "fichiers de média" 151 | 152 | #~ msgid "type" 153 | #~ msgstr "type" 154 | 155 | #~ msgid "raw content" 156 | #~ msgstr "contenu cru" 157 | 158 | #~ msgid "text" 159 | #~ msgstr "texte" 160 | 161 | #~ msgid "rich text" 162 | #~ msgstr "texte" 163 | 164 | #~ msgid "rich texts" 165 | #~ msgstr "textes" 166 | 167 | #~ msgid "" 168 | #~ "The rss field is updated several times a day. A change in the title will " 169 | #~ "only be visible on the home page after the next feed update." 170 | #~ msgstr "" 171 | #~ "Le champ rss est mis à jour plusieurs fois par jour. Un changement dans " 172 | #~ "le titre ne sera visible que sur la page d'accueil après la mise à jour " 173 | #~ "prochaine." 174 | 175 | #~ msgid "link" 176 | #~ msgstr "lien" 177 | 178 | #~ msgid "pre-rendered content" 179 | #~ msgstr "contenu généré" 180 | 181 | #~ msgid "last updated" 182 | #~ msgstr "mise à jour" 183 | 184 | #~ msgid "RSS feed" 185 | #~ msgstr "Fil RSS" 186 | 187 | #~ msgid "RSS feeds" 188 | #~ msgstr "Fils RSS" 189 | 190 | #~ msgid "section" 191 | #~ msgstr "section" 192 | 193 | #~ msgid "sections" 194 | #~ msgstr "sections" 195 | 196 | #~ msgid "template" 197 | #~ msgstr "modèle" 198 | 199 | #~ msgid "video link" 200 | #~ msgstr "lien du vidéo" 201 | 202 | #~ msgid "" 203 | #~ "This should be a link to a youtube or vimeo video, i.e.: http://www." 204 | #~ "youtube.com/watch?v=zmj1rpzDRZ0" 205 | #~ msgstr "" 206 | #~ "Cela devrait être un lien vers une vidéo YouTube ou Vimeo, à savoir: " 207 | #~ "http://www.youtube.com/watch?v=zmj1rpzDRZ0" 208 | 209 | #~ msgid "video" 210 | #~ msgstr "vidéo" 211 | 212 | #~ msgid "videos" 213 | #~ msgstr "vidéos" 214 | 215 | #~ msgid "ordering" 216 | #~ msgstr "séquence" 217 | 218 | #~ msgid "tags" 219 | #~ msgstr "mots-clé" 220 | 221 | #~ msgid "language" 222 | #~ msgstr "langue" 223 | 224 | #~ msgid "translation of" 225 | #~ msgstr "traduction de" 226 | 227 | #~ msgid "available translations" 228 | #~ msgstr "traductions disponibles" 229 | 230 | #~ msgid "published" 231 | #~ msgstr "publié" 232 | 233 | #~ msgid "This is used for the generated navigation too." 234 | #~ msgstr "Il est utilisé pour la navigation généré aussi." 235 | 236 | #~ msgid "published on" 237 | #~ msgstr "publié le" 238 | 239 | #~ msgid "" 240 | #~ "Will be set automatically once you tick the `published` checkbox above." 241 | #~ msgstr "" 242 | #~ "Sera mis automatiquement une fois que vous cochez la case «publié» ci-" 243 | #~ "dessus." 244 | 245 | #~ msgid "entry" 246 | #~ msgstr "entrée" 247 | 248 | #~ msgid "entries" 249 | #~ msgstr "entrées" 250 | 251 | #~ msgid "creation date" 252 | #~ msgstr "date de création" 253 | 254 | #~ msgid "modification date" 255 | #~ msgstr "date de modification" 256 | 257 | #~ msgid "content types" 258 | #~ msgstr "types de contenu" 259 | 260 | #~ msgid "publication date" 261 | #~ msgstr "date de la publication" 262 | 263 | #~ msgid "publication end date" 264 | #~ msgstr "date de termination de la publication" 265 | 266 | #~ msgid "Leave empty if the entry should stay active forever." 267 | #~ msgstr "Laissez vide si l'entrée doit rester active pour toujours." 268 | 269 | #~ msgid "visible from - to" 270 | #~ msgstr "visible de - à" 271 | 272 | #~ msgid "meta keywords" 273 | #~ msgstr "termes meta" 274 | 275 | #~ msgid "meta description" 276 | #~ msgstr "description meta" 277 | 278 | #~ msgid "Edit translation" 279 | #~ msgstr "Modifier la traduction" 280 | 281 | #~ msgid "Create translation" 282 | #~ msgstr "Créer traduction" 283 | 284 | #~ msgid "translations" 285 | #~ msgstr "traductions" 286 | 287 | #~ msgid "Preview" 288 | #~ msgstr "Prévisualiser" 289 | 290 | #~ msgid "file size" 291 | #~ msgstr "taille" 292 | 293 | #~ msgid "created" 294 | #~ msgstr "crée" 295 | 296 | #~ msgid "file type" 297 | #~ msgstr "type de fichier" 298 | 299 | #~ msgid "parent" 300 | #~ msgstr "parent" 301 | 302 | #~ msgid "slug" 303 | #~ msgstr "télougou" 304 | 305 | #~ msgid "category" 306 | #~ msgstr "catégorie" 307 | 308 | #~ msgid "categories" 309 | #~ msgstr "catégories" 310 | 311 | #~ msgid "copyright" 312 | #~ msgstr "copyright" 313 | 314 | #~ msgid "Image" 315 | #~ msgstr "image" 316 | 317 | #~ msgid "PDF document" 318 | #~ msgstr "Document PDF" 319 | 320 | #~ msgid "Flash" 321 | #~ msgstr "Flash" 322 | 323 | #~ msgid "Text" 324 | #~ msgstr "texte" 325 | 326 | #~ msgid "Binary" 327 | #~ msgstr "Données binaires" 328 | 329 | #~ msgid "description" 330 | #~ msgstr "description" 331 | 332 | #~ msgid "media file translation" 333 | #~ msgstr "traductions du fichier de média" 334 | 335 | #~ msgid "media file translations" 336 | #~ msgstr "traductions des fichiers de média" 337 | 338 | #~ msgid "navigation extension" 339 | #~ msgstr "additif de la navigation" 340 | 341 | #~ msgid "" 342 | #~ "Select the module providing subpages for this page if you need to " 343 | #~ "customize the navigation." 344 | #~ msgstr "" 345 | #~ "Sélectionnez le module fournissant pages pour cette page si vous avez " 346 | #~ "besoin de personnaliser la navigation." 347 | 348 | #, fuzzy 349 | #~| msgid "in navigation" 350 | #~ msgid "navigation group" 351 | #~ msgstr "à la navigation" 352 | 353 | #~ msgid "All content is inherited from this page if given." 354 | #~ msgstr "Tout le contenu est hérité de cette page si donnée." 355 | 356 | #~ msgid "content title" 357 | #~ msgstr "titre du contenu" 358 | 359 | #~ msgid "The first line is the main title, the following lines are subtitles." 360 | #~ msgstr "" 361 | #~ "La première ligne est le titre principal, les lignes suivantes sont des " 362 | #~ "sous-titres." 363 | 364 | #~ msgid "page title" 365 | #~ msgstr "titre de la page" 366 | 367 | #, fuzzy 368 | #~| msgid "Page title for browser window. Same as title by default." 369 | #~ msgid "" 370 | #~ "Page title for browser window. Same as title bydefault. Must not be " 371 | #~ "longer than 70 characters." 372 | #~ msgstr "" 373 | #~ "Titre de la page pour fenêtre de navigateur. Même que le titre par défaut." 374 | 375 | #~ msgid "This URL is already taken by an active page." 376 | #~ msgstr "Cette URL est déjà prise par une page active." 377 | 378 | #~ msgid "This URL is already taken by another active page." 379 | #~ msgstr "Cette URL est déjà pris par une autre page active." 380 | 381 | #~ msgid "Other options" 382 | #~ msgstr "Autres options" 383 | 384 | #~ msgid "in navigation" 385 | #~ msgstr "à la navigation" 386 | 387 | #~ msgid "Add child page" 388 | #~ msgstr "Ajouter page enfant" 389 | 390 | #~ msgid "View on site" 391 | #~ msgstr "Voir sur le site" 392 | 393 | #~ msgid "inherited" 394 | #~ msgstr "hérité" 395 | 396 | #~ msgid "extensions" 397 | #~ msgstr "extensions" 398 | 399 | #~ msgid "active" 400 | #~ msgstr "actif" 401 | 402 | #, fuzzy 403 | #~| msgid "This is used for the generated navigation too." 404 | #~ msgid "This title is also used for navigation menu items." 405 | #~ msgstr "Il est utilisé pour la navigation généré aussi." 406 | 407 | #~ msgid "override URL" 408 | #~ msgstr "adresse URL forcée" 409 | 410 | #~ msgid "" 411 | #~ "Override the target URL. Be sure to include slashes at the beginning and " 412 | #~ "at the end if it is a local URL. This affects both the navigation and " 413 | #~ "subpages' URLs." 414 | #~ msgstr "" 415 | #~ "Outrepasser l'URL cible. N'oubliez pas d'inclure des barres obliques au " 416 | #~ "début et à la fin s'il s'agit d'une URL locale. Cela affecte la " 417 | #~ "navigation et les adresses URL des sous-pages." 418 | 419 | #~ msgid "redirect to" 420 | #~ msgstr "rediriger à" 421 | 422 | #~ msgid "Cached URL" 423 | #~ msgstr "adresse URL temporairement enregistrée" 424 | 425 | #~ msgid "page" 426 | #~ msgstr "page" 427 | 428 | #~ msgid "pages" 429 | #~ msgstr "pages" 430 | 431 | #~ msgid "Really delete item?" 432 | #~ msgstr "Vraiment supprimer cet élément?" 433 | 434 | #~ msgid "Confirm to delete item" 435 | #~ msgstr "Affirmer pour supprimer l'élément" 436 | 437 | #~ msgid "Item deleted successfully." 438 | #~ msgstr "L'objet a été supprimé avec succès." 439 | 440 | #~ msgid "Cannot delete item" 441 | #~ msgstr "Impossible de supprimer cet élément" 442 | 443 | #~ msgid "Cannot delete item, because it is parent of at least one other item." 444 | #~ msgstr "" 445 | #~ "Impossible de supprimer l'élément, parce qu'il est le parent d'au moins " 446 | #~ "un autre élément." 447 | 448 | #~ msgid "Change template" 449 | #~ msgstr "Changer modèle" 450 | 451 | #~ msgid "Really change template?
All changes are saved." 452 | #~ msgstr "" 453 | #~ "Réellement changer de modèle?
Toutes les modifications sont " 454 | #~ "enregistrées." 455 | 456 | #~ msgid "Region empty" 457 | #~ msgstr "Région vide" 458 | 459 | #~ msgid "" 460 | #~ "Content from the parent site is automatically inherited. To override this " 461 | #~ "behaviour, add some content." 462 | #~ msgstr "" 463 | #~ "Contenu du site parent est automatiquement hérité. Pour contourner ce " 464 | #~ "comportement, ajoutez un peu de contenu." 465 | 466 | #~ msgid "Save" 467 | #~ msgstr "Enregistrer" 468 | 469 | #~ msgid "edit" 470 | #~ msgstr "traiter" 471 | 472 | #~ msgid "new" 473 | #~ msgstr "nouveau" 474 | 475 | #~ msgid "up" 476 | #~ msgstr "vers le haut" 477 | 478 | #~ msgid "down" 479 | #~ msgstr "vers le bas" 480 | 481 | #~ msgid "remove" 482 | #~ msgstr "supprimer" 483 | 484 | #~ msgid "Home" 485 | #~ msgstr "Page d'accueil" 486 | 487 | #~ msgid "Shortcuts" 488 | #~ msgstr "Raccourcis" 489 | 490 | #~ msgid "Expand tree" 491 | #~ msgstr "Développer l'arborescence" 492 | 493 | #~ msgid "Filter" 494 | #~ msgstr "Filtre" 495 | 496 | #~ msgid " By %(filter_title)s " 497 | #~ msgstr "Par %(filter_title)s " 498 | 499 | #~ msgid "Submit" 500 | #~ msgstr "Envoyer" 501 | 502 | #~ msgid "Thanks!" 503 | #~ msgstr "Merci!" 504 | 505 | #~ msgid "plain" 506 | #~ msgstr "plaine" 507 | 508 | #~ msgid "title row" 509 | #~ msgstr "titre de la ligne" 510 | 511 | #~ msgid "title row and column" 512 | #~ msgstr "ligne de titre et de la colonne" 513 | 514 | #~ msgid "table" 515 | #~ msgstr "tableau" 516 | 517 | #~ msgid "tables" 518 | #~ msgstr "tableaux" 519 | 520 | #~ msgid "data" 521 | #~ msgstr "données" 522 | 523 | #~ msgid "This will be prepended to the default keyword list." 524 | #~ msgstr "Ce sera ajouté à la liste de mots clés par défaut." 525 | 526 | #~ msgid "This will be prepended to the default description." 527 | #~ msgstr "Ce sera ajouté à la description par défaut." 528 | -------------------------------------------------------------------------------- /content_editor/locale/hr/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/feincms/django-content-editor/75f88363c3d4b80c1dcfc7a57af3efa3733e3998/content_editor/locale/hr/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /content_editor/locale/hr/LC_MESSAGES/django.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # 5 | # Translators: 6 | # Bojan Mihelač , 2010 7 | msgid "" 8 | msgstr "" 9 | "Project-Id-Version: FeinCMS\n" 10 | "Report-Msgid-Bugs-To: \n" 11 | "POT-Creation-Date: 2021-06-09 16:07+0200\n" 12 | "PO-Revision-Date: 2013-10-25 09:15+0000\n" 13 | "Last-Translator: Matthias Kestenholz \n" 14 | "Language-Team: Croatian (http://www.transifex.com/projects/p/feincms/" 15 | "language/hr/)\n" 16 | "Language: hr\n" 17 | "MIME-Version: 1.0\n" 18 | "Content-Type: text/plain; charset=UTF-8\n" 19 | "Content-Transfer-Encoding: 8bit\n" 20 | "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" 21 | "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" 22 | 23 | #: admin.py:151 24 | msgid "Add new item" 25 | msgstr "Dodaj novi unos" 26 | 27 | #: admin.py:152 28 | #, fuzzy 29 | #| msgid "max. items" 30 | msgid "No items." 31 | msgstr "najviše zapisa" 32 | 33 | #: admin.py:153 34 | msgid "No items. Region may inherit content." 35 | msgstr "" 36 | 37 | #: admin.py:154 38 | msgid "No regions available." 39 | msgstr "" 40 | 41 | #: admin.py:155 42 | msgid "No plugins allowed in this region." 43 | msgstr "" 44 | 45 | #: admin.py:156 46 | #, fuzzy 47 | #| msgid "max. items" 48 | msgid "New item" 49 | msgstr "najviše zapisa" 50 | 51 | #: admin.py:157 52 | msgid "Unknown region" 53 | msgstr "" 54 | 55 | #: admin.py:158 56 | #, fuzzy 57 | #| msgid "Collapse tree" 58 | msgid "Collapse all items" 59 | msgstr "Sažmi drvo" 60 | 61 | #: admin.py:159 62 | #, fuzzy 63 | #| msgid "Collapse tree" 64 | msgid "Uncollapse all items" 65 | msgstr "Sažmi drvo" 66 | 67 | #: admin.py:160 68 | msgid "Toggle sidebar" 69 | msgstr "" 70 | 71 | #: admin.py:161 72 | msgid "marked for deletion" 73 | msgstr "" 74 | 75 | #: admin.py:163 76 | msgid "Use Ctrl-Click to select and move multiple items." 77 | msgstr "" 78 | 79 | #: admin.py:166 80 | msgid "Doubleclicking inserts an item at the end." 81 | msgstr "" 82 | 83 | #, fuzzy 84 | #~| msgid "template contents" 85 | #~ msgid "Show/hide contents" 86 | #~ msgstr "sadržaji predloška" 87 | 88 | #~ msgid "All" 89 | #~ msgstr "Svi" 90 | 91 | #~ msgid "Parent" 92 | #~ msgstr "Nadređeni" 93 | 94 | #~ msgid "Category" 95 | #~ msgstr "Kategorija" 96 | 97 | #~ msgid "Change %s" 98 | #~ msgstr "Promjeni %s" 99 | 100 | #~ msgid "title" 101 | #~ msgstr "naziv" 102 | 103 | #~ msgid "%s has been moved to a new position." 104 | #~ msgstr "%s je premještena na novu poziciju." 105 | 106 | #~ msgid "Did not understand moving instruction." 107 | #~ msgstr "Uputa za premještanje nije uspješno interpretirana. " 108 | 109 | #~ msgid "actions" 110 | #~ msgstr "akcije" 111 | 112 | #~ msgid "application content" 113 | #~ msgstr "sadržaj aplikacije" 114 | 115 | #~ msgid "application contents" 116 | #~ msgstr "sadržaji aplikacije" 117 | 118 | #~ msgid "application" 119 | #~ msgstr "aplikacija" 120 | 121 | #~ msgid "enabled" 122 | #~ msgstr "omogućeno" 123 | 124 | #~ msgid "New comments may be added" 125 | #~ msgstr "Novi komentari mogu biti dodani" 126 | 127 | #~ msgid "comments" 128 | #~ msgstr "komentari" 129 | 130 | #~ msgid "public" 131 | #~ msgstr "objavljeno" 132 | 133 | #~ msgid "not public" 134 | #~ msgstr "neobjavljeno" 135 | 136 | #~ msgid "name" 137 | #~ msgstr "ime" 138 | 139 | #~ msgid "email" 140 | #~ msgstr "email" 141 | 142 | #~ msgid "subject" 143 | #~ msgstr "naslov" 144 | 145 | #~ msgid "content" 146 | #~ msgstr "sadržaj" 147 | 148 | #~ msgid "contact form" 149 | #~ msgstr "kontaktni obrazac" 150 | 151 | #~ msgid "contact forms" 152 | #~ msgstr "kontaktni obrazci" 153 | 154 | #~ msgid "file" 155 | #~ msgstr "datoteka" 156 | 157 | #~ msgid "files" 158 | #~ msgstr "datoteke" 159 | 160 | #~ msgid "image" 161 | #~ msgstr "slika" 162 | 163 | #~ msgid "caption" 164 | #~ msgstr "naslov" 165 | 166 | #~ msgid "images" 167 | #~ msgstr "slike" 168 | 169 | #~ msgid "position" 170 | #~ msgstr "pozicija" 171 | 172 | #~ msgid "media file" 173 | #~ msgstr "medijska datoteka" 174 | 175 | #~ msgid "media files" 176 | #~ msgstr "medijske datoteke" 177 | 178 | #~ msgid "type" 179 | #~ msgstr "tip" 180 | 181 | #~ msgid "raw content" 182 | #~ msgstr "neformatirani sadržaj" 183 | 184 | #~ msgid "raw contents" 185 | #~ msgstr "neformatirani sadržaji" 186 | 187 | #~ msgid "HTML Tidy" 188 | #~ msgstr "HTML Tidy" 189 | 190 | #~ msgid "Ignore the HTML validation warnings" 191 | #~ msgstr "Zanemariti upozorenja HTML provjere" 192 | 193 | #~ msgid "" 194 | #~ "HTML validation produced %(count)d warnings. Please review the updated " 195 | #~ "content below before continuing: %(messages)s" 196 | #~ msgstr "" 197 | #~ "HTML provjera je pokazala %(count)d upozorenja. Molimo pregledajte " 198 | #~ "ažurirani sadržaj ispod prije nastavka: %(messages)s" 199 | 200 | #~ msgid "text" 201 | #~ msgstr "tekst" 202 | 203 | #~ msgid "rich text" 204 | #~ msgstr "formatirani tekst" 205 | 206 | #~ msgid "rich texts" 207 | #~ msgstr "formatirani tekstovi" 208 | 209 | #~ msgid "" 210 | #~ "The rss field is updated several times a day. A change in the title will " 211 | #~ "only be visible on the home page after the next feed update." 212 | #~ msgstr "" 213 | #~ "RSS polje se ažurira nekoliko puta dnevno. Promjena u naslovu će biti " 214 | #~ "vidljiva na naslovnici nakon sljedećeg ažuriranja kanala." 215 | 216 | #~ msgid "link" 217 | #~ msgstr "link" 218 | 219 | #~ msgid "pre-rendered content" 220 | #~ msgstr "pred pripremljen sadržaj" 221 | 222 | #~ msgid "last updated" 223 | #~ msgstr "zadnji put osvježeno" 224 | 225 | #~ msgid "RSS feed" 226 | #~ msgstr "RSS kanal" 227 | 228 | #~ msgid "RSS feeds" 229 | #~ msgstr "RSS kanali" 230 | 231 | #~ msgid "section" 232 | #~ msgstr "sekcija" 233 | 234 | #~ msgid "sections" 235 | #~ msgstr "sekcije" 236 | 237 | #~ msgid "template content" 238 | #~ msgstr "sadržaj predloška" 239 | 240 | #~ msgid "template" 241 | #~ msgstr "predložak" 242 | 243 | #~ msgid "video link" 244 | #~ msgstr "link na video" 245 | 246 | #~ msgid "" 247 | #~ "This should be a link to a youtube or vimeo video, i.e.: http://www." 248 | #~ "youtube.com/watch?v=zmj1rpzDRZ0" 249 | #~ msgstr "" 250 | #~ "Polje treba sadržavati link na youtube ili vimeo video, i.e.: http://www." 251 | #~ "youtube.com/watch?v=zmj1rpzDRZ0" 252 | 253 | #~ msgid "video" 254 | #~ msgstr "video" 255 | 256 | #~ msgid "videos" 257 | #~ msgstr "video zapisi" 258 | 259 | #~ msgid "ordering" 260 | #~ msgstr "poredak" 261 | 262 | #~ msgid "tags" 263 | #~ msgstr "etikete" 264 | 265 | #~ msgid "language" 266 | #~ msgstr "jezik" 267 | 268 | #~ msgid "translation of" 269 | #~ msgstr "prijevod od" 270 | 271 | #~ msgid "Leave this empty for entries in the primary language." 272 | #~ msgstr "Ostavite ovo prazno za zapise u primarnom jeziku." 273 | 274 | #~ msgid "available translations" 275 | #~ msgstr "dostupni prijevodi" 276 | 277 | #~ msgid "published" 278 | #~ msgstr "objavljeno" 279 | 280 | #~ msgid "This is used for the generated navigation too." 281 | #~ msgstr "Ovo se koristi i za generiranu navigaciju." 282 | 283 | #~ msgid "published on" 284 | #~ msgstr "objavljeno na" 285 | 286 | #~ msgid "" 287 | #~ "Will be set automatically once you tick the `published` checkbox above." 288 | #~ msgstr "" 289 | #~ "Biti će automatski postavljeno kada označite `objavljeno` polje iznad." 290 | 291 | #~ msgid "entry" 292 | #~ msgstr "članak" 293 | 294 | #~ msgid "entries" 295 | #~ msgstr "članci" 296 | 297 | #~ msgid "creation date" 298 | #~ msgstr "datum kreiranja" 299 | 300 | #~ msgid "modification date" 301 | #~ msgstr "datum izmjene" 302 | 303 | #~ msgid "content types" 304 | #~ msgstr "tip sadržaja" 305 | 306 | #~ msgid "publication date" 307 | #~ msgstr "datum objave" 308 | 309 | #~ msgid "publication end date" 310 | #~ msgstr "datum kraja objave" 311 | 312 | #~ msgid "Leave empty if the entry should stay active forever." 313 | #~ msgstr "" 314 | #~ "Ostavite praznim ukoliko članak treba biti aktivan neograničeno vrijeme." 315 | 316 | #~ msgid "visible from - to" 317 | #~ msgstr "vidljiv od - do" 318 | 319 | #~ msgid "Date-based publishing" 320 | #~ msgstr "Objava vezana na datum" 321 | 322 | #~ msgid "featured" 323 | #~ msgstr "istaknuti" 324 | 325 | #~ msgid "Featured" 326 | #~ msgstr "Istaknuti" 327 | 328 | #~ msgid "meta keywords" 329 | #~ msgstr "meta ključne riječi" 330 | 331 | #~ msgid "meta description" 332 | #~ msgstr "meta opis" 333 | 334 | #~ msgid "Search engine optimization" 335 | #~ msgstr "Optimizacija za tražilice" 336 | 337 | #~ msgid "Edit translation" 338 | #~ msgstr "Uredi prijevod" 339 | 340 | #~ msgid "Create translation" 341 | #~ msgstr "Kreiraj prijevod" 342 | 343 | #~ msgid "translations" 344 | #~ msgstr "prijevodi" 345 | 346 | #~ msgid "Preview" 347 | #~ msgstr "Pregled" 348 | 349 | #~ msgid "file size" 350 | #~ msgstr "veličina datoteke" 351 | 352 | #~ msgid "created" 353 | #~ msgstr "kreiran" 354 | 355 | #~ msgid "file type" 356 | #~ msgstr "tip datoteke" 357 | 358 | #~ msgid "file info" 359 | #~ msgstr "informacije o datoteci" 360 | 361 | #~ msgid "parent" 362 | #~ msgstr "nadređeni" 363 | 364 | #~ msgid "slug" 365 | #~ msgstr "slug" 366 | 367 | #~ msgid "category" 368 | #~ msgstr "kategorija" 369 | 370 | #~ msgid "categories" 371 | #~ msgstr "kategorije" 372 | 373 | #~ msgid "copyright" 374 | #~ msgstr "autorsko pravo" 375 | 376 | #~ msgid "Image" 377 | #~ msgstr "Slika" 378 | 379 | #~ msgid "Video" 380 | #~ msgstr "Video" 381 | 382 | #~ msgid "Audio" 383 | #~ msgstr "Audio" 384 | 385 | #~ msgid "PDF document" 386 | #~ msgstr "PDF dokument" 387 | 388 | #~ msgid "Flash" 389 | #~ msgstr "Flash" 390 | 391 | #~ msgid "Text" 392 | #~ msgstr "Tekst" 393 | 394 | #~ msgid "Rich Text" 395 | #~ msgstr "Formatirani tekst" 396 | 397 | #~ msgid "Microsoft Word" 398 | #~ msgstr "Microsoft Word" 399 | 400 | #~ msgid "Microsoft Excel" 401 | #~ msgstr "Microsoft Excel" 402 | 403 | #~ msgid "Microsoft PowerPoint" 404 | #~ msgstr "Microsoft PowerPoint" 405 | 406 | #~ msgid "Binary" 407 | #~ msgstr "Binarni" 408 | 409 | #~ msgid "description" 410 | #~ msgstr "opis" 411 | 412 | #~ msgid "media file translation" 413 | #~ msgstr "prijevod medijske datoteke" 414 | 415 | #~ msgid "media file translations" 416 | #~ msgstr "prijevodi medijske datoteke" 417 | 418 | #~ msgid "excerpt" 419 | #~ msgstr "sažetak" 420 | 421 | #~ msgid "Add a brief excerpt summarizing the content of this page." 422 | #~ msgstr "Dodajte kratak sažetak sadržaja ove stranice." 423 | 424 | #~ msgid "Excerpt" 425 | #~ msgstr "Sažetak" 426 | 427 | #~ msgid "navigation extension" 428 | #~ msgstr "navigacijska ekstenzija" 429 | 430 | #~ msgid "" 431 | #~ "Select the module providing subpages for this page if you need to " 432 | #~ "customize the navigation." 433 | #~ msgstr "" 434 | #~ "Odaberite modul koji će dostaviti podstranice za ovu stranicu ukoliko je " 435 | #~ "potrebno prilagoditi navigaciju." 436 | 437 | #~ msgid "Navigation extension" 438 | #~ msgstr "navigacijska ekstenzija" 439 | 440 | #, fuzzy 441 | #~| msgid "in navigation" 442 | #~ msgid "navigation group" 443 | #~ msgstr "u navigaciji" 444 | 445 | #~ msgid "Select pages that should be listed as related content." 446 | #~ msgstr "Odaberite stranice koje trebaju biti navedene kao povezani sadržaj." 447 | 448 | #~ msgid "Related pages" 449 | #~ msgstr "Povezane stranice" 450 | 451 | #~ msgid "symlinked page" 452 | #~ msgstr "simbolički povezana stranica" 453 | 454 | #~ msgid "All content is inherited from this page if given." 455 | #~ msgstr "Sav sadržaj je nasljeđen od ove stranice ukoliko je postavljena." 456 | 457 | #~ msgid "content title" 458 | #~ msgstr "naslov sadržaja" 459 | 460 | #~ msgid "The first line is the main title, the following lines are subtitles." 461 | #~ msgstr "Prva linija je glavni naslov, slijedeće linije su podnaslovi." 462 | 463 | #~ msgid "page title" 464 | #~ msgstr "naslov stranice" 465 | 466 | #, fuzzy 467 | #~| msgid "Page title for browser window. Same as title by default." 468 | #~ msgid "" 469 | #~ "Page title for browser window. Same as title bydefault. Must not be " 470 | #~ "longer than 70 characters." 471 | #~ msgstr "" 472 | #~ "Naslov stranice u prozoru browsera. Podrazumijevana vrijednost je jednako " 473 | #~ "kao naslov." 474 | 475 | #~ msgid "Titles" 476 | #~ msgstr "Nazivi" 477 | 478 | #~ msgid "This URL is already taken by an active page." 479 | #~ msgstr "Ova adresa (URL) je već zauzeta aktivnom stranicom." 480 | 481 | #~ msgid "This URL is already taken by another active page." 482 | #~ msgstr "Ova adresa (URL) je već zauzeta drugom aktivnom stranicom." 483 | 484 | #~ msgid "Other options" 485 | #~ msgstr "Druge mogućnosti" 486 | 487 | #~ msgid "in navigation" 488 | #~ msgstr "u navigaciji" 489 | 490 | #~ msgid "Add child page" 491 | #~ msgstr "Dodaj podređenu stranicu" 492 | 493 | #~ msgid "View on site" 494 | #~ msgstr "Pogledaj na internetnim stranicama" 495 | 496 | #~ msgid "inherited" 497 | #~ msgstr "naslijeđeno" 498 | 499 | #~ msgid "extensions" 500 | #~ msgstr "ekstenzije" 501 | 502 | #~ msgid "is active" 503 | #~ msgstr "je aktivna" 504 | 505 | #~ msgid "active" 506 | #~ msgstr "aktivan" 507 | 508 | #, fuzzy 509 | #~| msgid "This is used for the generated navigation too." 510 | #~ msgid "This title is also used for navigation menu items." 511 | #~ msgstr "Ovo se koristi i za generiranu navigaciju." 512 | 513 | #~ msgid "override URL" 514 | #~ msgstr "nadjačati URL" 515 | 516 | #~ msgid "" 517 | #~ "Override the target URL. Be sure to include slashes at the beginning and " 518 | #~ "at the end if it is a local URL. This affects both the navigation and " 519 | #~ "subpages' URLs." 520 | #~ msgstr "" 521 | #~ "Nadjačati ciljnu adresu (URL). Budite sigurni da uključite kose crte na " 522 | #~ "početku i kraju ukoliko se odnosi na lokalnu adresu. Ovo se odnosi i na " 523 | #~ "navigaciju i na adrese podstranica" 524 | 525 | #~ msgid "redirect to" 526 | #~ msgstr "preusmjeriti na" 527 | 528 | #~ msgid "Cached URL" 529 | #~ msgstr "Keširana adresa (URL)" 530 | 531 | #~ msgid "page" 532 | #~ msgstr "stranica" 533 | 534 | #~ msgid "pages" 535 | #~ msgstr "stranice" 536 | 537 | #~ msgid "Really delete item?" 538 | #~ msgstr "Stvarno izbrisati zapis?" 539 | 540 | #~ msgid "Confirm to delete item" 541 | #~ msgstr "Potvrdite brisanje zapisa" 542 | 543 | #~ msgid "Item deleted successfully." 544 | #~ msgstr "Zapis je uspješno izbrisan" 545 | 546 | #~ msgid "Cannot delete item" 547 | #~ msgstr "Zapis ne može biti obrisan" 548 | 549 | #~ msgid "Cannot delete item, because it is parent of at least one other item." 550 | #~ msgstr "" 551 | #~ "Zapis ne može biti obrisan jer je nadređeni od najmanje jednog drugog " 552 | #~ "zapisa." 553 | 554 | #~ msgid "Change template" 555 | #~ msgstr "Zamjena predložka" 556 | 557 | #~ msgid "Really change template?
All changes are saved." 558 | #~ msgstr "Zaista zamijeniti predložak?
Sve izmjene će biti spremljene." 559 | 560 | #~ msgid "Hide" 561 | #~ msgstr "Sakrij" 562 | 563 | #~ msgid "Show" 564 | #~ msgstr "Psrikaži" 565 | 566 | #~ msgid "After" 567 | #~ msgstr "Nakon" 568 | 569 | #~ msgid "Before" 570 | #~ msgstr "Prije" 571 | 572 | #~ msgid "Insert new:" 573 | #~ msgstr "Umetni ispred:" 574 | 575 | #~ msgid "Region empty" 576 | #~ msgstr "Regija je prazna" 577 | 578 | #~ msgid "" 579 | #~ "Content from the parent site is automatically inherited. To override this " 580 | #~ "behaviour, add some content." 581 | #~ msgstr "" 582 | #~ "Sadržaj je automatski naslijeđen od nadređene stranice. Ukoliko želite to " 583 | #~ "promjeniti, dodajte neke sadržaje." 584 | 585 | #~ msgid "Save" 586 | #~ msgstr "Spremi" 587 | 588 | #~ msgid "Stop Editing" 589 | #~ msgstr "Prekini uređivanje" 590 | 591 | #~ msgid "edit" 592 | #~ msgstr "uredi" 593 | 594 | #~ msgid "new" 595 | #~ msgstr "novi" 596 | 597 | #~ msgid "up" 598 | #~ msgstr "gore" 599 | 600 | #~ msgid "down" 601 | #~ msgstr "dolje" 602 | 603 | #~ msgid "remove" 604 | #~ msgstr "izbriši" 605 | 606 | #~ msgid "Edit on site" 607 | #~ msgstr "Uredi na stranicama" 608 | 609 | #~ msgid "Home" 610 | #~ msgstr "Home" 611 | 612 | #~ msgid "Shortcuts" 613 | #~ msgstr "Kratice" 614 | 615 | #~ msgid "Expand tree" 616 | #~ msgstr "Proširi drvo" 617 | 618 | #~ msgid "Filter" 619 | #~ msgstr "Filter" 620 | 621 | #~ msgid " By %(filter_title)s " 622 | #~ msgstr " Po %(filter_title)s " 623 | 624 | #~ msgid "Bulk upload a ZIP file:" 625 | #~ msgstr "Masovni prijenos ZIP datotekom:" 626 | 627 | #~ msgid "Send" 628 | #~ msgstr "Pošalji" 629 | 630 | #~ msgid "%(comment_count)s comments." 631 | #~ msgstr "%(comment_count)s komentara." 632 | 633 | #~ msgid "" 634 | #~ "\n" 635 | #~ " %(comment_username)s said on " 636 | #~ "%(comment_submit_date)s
\n" 637 | #~ " " 638 | #~ msgstr "" 639 | #~ "\n" 640 | #~ " %(comment_username)s je objavio " 641 | #~ "%(comment_submit_date)s
\n" 642 | #~ " " 643 | 644 | #~ msgid "No comments." 645 | #~ msgstr "Bez komentara." 646 | 647 | #~ msgid "Post Comment" 648 | #~ msgstr "Pošalji komentar" 649 | 650 | #~ msgid "Submit" 651 | #~ msgstr "Potvrdi" 652 | 653 | #~ msgid "Thanks!" 654 | #~ msgstr "Hvala!" 655 | 656 | #~ msgid "plain" 657 | #~ msgstr "jednostavno" 658 | 659 | #~ msgid "title row" 660 | #~ msgstr "naslovni redak" 661 | 662 | #~ msgid "title row and column" 663 | #~ msgstr "naslovni redak i kolona" 664 | 665 | #~ msgid "table" 666 | #~ msgstr "tablica" 667 | 668 | #~ msgid "tables" 669 | #~ msgstr "tablice" 670 | 671 | #~ msgid "data" 672 | #~ msgstr "podaci" 673 | 674 | #~ msgid "This will be prepended to the default keyword list." 675 | #~ msgstr "Ovo će biti dodano predefiniranoj listi ključnih riječi." 676 | 677 | #~ msgid "This will be prepended to the default description." 678 | #~ msgstr "Ovo će biti dodano predefiniranom opisu." 679 | -------------------------------------------------------------------------------- /content_editor/locale/it/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/feincms/django-content-editor/75f88363c3d4b80c1dcfc7a57af3efa3733e3998/content_editor/locale/it/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /content_editor/locale/it/LC_MESSAGES/django.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # 5 | # Translators: 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: FeinCMS\n" 9 | "Report-Msgid-Bugs-To: \n" 10 | "POT-Creation-Date: 2021-06-09 16:07+0200\n" 11 | "PO-Revision-Date: 2013-10-25 09:15+0000\n" 12 | "Last-Translator: Matthias Kestenholz \n" 13 | "Language-Team: Italian (http://www.transifex.com/projects/p/feincms/language/" 14 | "it/)\n" 15 | "Language: it\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 20 | 21 | #: admin.py:151 22 | msgid "Add new item" 23 | msgstr "Aggiungi nuovo elemento" 24 | 25 | #: admin.py:152 26 | #, fuzzy 27 | #| msgid "max. items" 28 | msgid "No items." 29 | msgstr "max. articoli" 30 | 31 | #: admin.py:153 32 | msgid "No items. Region may inherit content." 33 | msgstr "" 34 | 35 | #: admin.py:154 36 | msgid "No regions available." 37 | msgstr "" 38 | 39 | #: admin.py:155 40 | msgid "No plugins allowed in this region." 41 | msgstr "" 42 | 43 | #: admin.py:156 44 | #, fuzzy 45 | #| msgid "max. items" 46 | msgid "New item" 47 | msgstr "max. articoli" 48 | 49 | #: admin.py:157 50 | msgid "Unknown region" 51 | msgstr "" 52 | 53 | #: admin.py:158 54 | msgid "Collapse all items" 55 | msgstr "" 56 | 57 | #: admin.py:159 58 | msgid "Uncollapse all items" 59 | msgstr "" 60 | 61 | #: admin.py:160 62 | msgid "Toggle sidebar" 63 | msgstr "" 64 | 65 | #: admin.py:161 66 | msgid "marked for deletion" 67 | msgstr "" 68 | 69 | #: admin.py:163 70 | msgid "Use Ctrl-Click to select and move multiple items." 71 | msgstr "" 72 | 73 | #: admin.py:166 74 | msgid "Doubleclicking inserts an item at the end." 75 | msgstr "" 76 | 77 | #, fuzzy 78 | #~| msgid "raw contents" 79 | #~ msgid "Show/hide contents" 80 | #~ msgstr "raw contenuti" 81 | 82 | #~ msgid "All" 83 | #~ msgstr "Tutto" 84 | 85 | #~ msgid "Parent" 86 | #~ msgstr "Parent" 87 | 88 | #~ msgid "Change %s" 89 | #~ msgstr "Variazione% s" 90 | 91 | #~ msgid "title" 92 | #~ msgstr "Titolo" 93 | 94 | #~ msgid "actions" 95 | #~ msgstr "azioni" 96 | 97 | #~ msgid "application" 98 | #~ msgstr "applicazione" 99 | 100 | #~ msgid "name" 101 | #~ msgstr "nome" 102 | 103 | #~ msgid "email" 104 | #~ msgstr "e-mail" 105 | 106 | #~ msgid "subject" 107 | #~ msgstr "soggetto" 108 | 109 | #~ msgid "content" 110 | #~ msgstr "contenuto" 111 | 112 | #~ msgid "contact form" 113 | #~ msgstr "forme di contatto" 114 | 115 | #~ msgid "contact forms" 116 | #~ msgstr "forme di contatto" 117 | 118 | #~ msgid "file" 119 | #~ msgstr "file" 120 | 121 | #~ msgid "files" 122 | #~ msgstr "files" 123 | 124 | #~ msgid "image" 125 | #~ msgstr "image" 126 | 127 | #~ msgid "caption" 128 | #~ msgstr "caption" 129 | 130 | #~ msgid "images" 131 | #~ msgstr "immagini" 132 | 133 | #~ msgid "position" 134 | #~ msgstr "Posizione" 135 | 136 | #~ msgid "media file" 137 | #~ msgstr "file multimediale" 138 | 139 | #~ msgid "media files" 140 | #~ msgstr "file multimediali" 141 | 142 | #~ msgid "type" 143 | #~ msgstr "tipo" 144 | 145 | #~ msgid "raw content" 146 | #~ msgstr "raw contenuti" 147 | 148 | #~ msgid "text" 149 | #~ msgstr "testo" 150 | 151 | #~ msgid "rich text" 152 | #~ msgstr "rich text" 153 | 154 | #~ msgid "" 155 | #~ "The rss field is updated several times a day. A change in the title will " 156 | #~ "only be visible on the home page after the next feed update." 157 | #~ msgstr "" 158 | #~ "Il campo rss viene aggiornato più volte al giorno. Una modifica del " 159 | #~ "titolo sarà visibile solo in home page dopo il prossimo aggiornamento dei " 160 | #~ "mangimi." 161 | 162 | #~ msgid "link" 163 | #~ msgstr "collegamento" 164 | 165 | #~ msgid "pre-rendered content" 166 | #~ msgstr "pre-rendering di contenuti" 167 | 168 | #~ msgid "last updated" 169 | #~ msgstr "Ultimo aggiornamento" 170 | 171 | #~ msgid "RSS feed" 172 | #~ msgstr "RSS feed" 173 | 174 | #~ msgid "RSS feeds" 175 | #~ msgstr "Feed RSS" 176 | 177 | #~ msgid "section" 178 | #~ msgstr "sezione" 179 | 180 | #~ msgid "sections" 181 | #~ msgstr "sezioni" 182 | 183 | #~ msgid "template" 184 | #~ msgstr "template" 185 | 186 | #~ msgid "video link" 187 | #~ msgstr "video link" 188 | 189 | #~ msgid "" 190 | #~ "This should be a link to a youtube or vimeo video, i.e.: http://www." 191 | #~ "youtube.com/watch?v=zmj1rpzDRZ0" 192 | #~ msgstr "" 193 | #~ "Questo dovrebbe essere un link ad un video di YouTube o di Vimeo, vale a " 194 | #~ "dire: http://www.youtube.com/watch?v=zmj1rpzDRZ0" 195 | 196 | #~ msgid "video" 197 | #~ msgstr "video" 198 | 199 | #~ msgid "videos" 200 | #~ msgstr "video" 201 | 202 | #~ msgid "ordering" 203 | #~ msgstr "ordinazione" 204 | 205 | #~ msgid "tags" 206 | #~ msgstr "tags" 207 | 208 | #~ msgid "language" 209 | #~ msgstr "lingua" 210 | 211 | #~ msgid "translation of" 212 | #~ msgstr "traduzione di" 213 | 214 | #~ msgid "available translations" 215 | #~ msgstr "traduzioni disponibili" 216 | 217 | #~ msgid "published" 218 | #~ msgstr "pubblicato" 219 | 220 | #~ msgid "This is used for the generated navigation too." 221 | #~ msgstr "Questo viene utilizzato per la navigazione generato troppo." 222 | 223 | #~ msgid "published on" 224 | #~ msgstr "pubblicato il" 225 | 226 | #~ msgid "" 227 | #~ "Will be set automatically once you tick the `published` checkbox above." 228 | #~ msgstr "" 229 | #~ "Verrà impostato automaticamente una volta che barrare la casella di " 230 | #~ "controllo `` pubblicato in precedenza." 231 | 232 | #~ msgid "creation date" 233 | #~ msgstr "data di creazione" 234 | 235 | #~ msgid "content types" 236 | #~ msgstr "tipi di contenuto" 237 | 238 | #~ msgid "publication date" 239 | #~ msgstr "data di pubblicazione" 240 | 241 | #~ msgid "publication end date" 242 | #~ msgstr "data fine pubblicazione" 243 | 244 | #~ msgid "Leave empty if the entry should stay active forever." 245 | #~ msgstr "Lasciare vuoto se la voce dovrebbe rimanere attivo per sempre." 246 | 247 | #~ msgid "visible from - to" 248 | #~ msgstr "visibile da - a" 249 | 250 | #~ msgid "meta keywords" 251 | #~ msgstr "meta keywords" 252 | 253 | #~ msgid "meta description" 254 | #~ msgstr "meta description" 255 | 256 | #~ msgid "Edit translation" 257 | #~ msgstr "Modificare la traduzione" 258 | 259 | #~ msgid "Create translation" 260 | #~ msgstr "Crea traduzione" 261 | 262 | #~ msgid "translations" 263 | #~ msgstr "traduzioni" 264 | 265 | #~ msgid "Preview" 266 | #~ msgstr "Anteprima" 267 | 268 | #~ msgid "file size" 269 | #~ msgstr "dimensione del file" 270 | 271 | #~ msgid "created" 272 | #~ msgstr "creato" 273 | 274 | #~ msgid "file type" 275 | #~ msgstr "tipo di file" 276 | 277 | #~ msgid "file info" 278 | #~ msgstr "file info" 279 | 280 | #~ msgid "parent" 281 | #~ msgstr "genitore" 282 | 283 | #~ msgid "slug" 284 | #~ msgstr "slug" 285 | 286 | #~ msgid "category" 287 | #~ msgstr "categoria" 288 | 289 | #~ msgid "categories" 290 | #~ msgstr "categorie" 291 | 292 | #~ msgid "copyright" 293 | #~ msgstr "copyright" 294 | 295 | #~ msgid "Image" 296 | #~ msgstr "Image" 297 | 298 | #~ msgid "PDF document" 299 | #~ msgstr "PDF document" 300 | 301 | #~ msgid "Flash" 302 | #~ msgstr "Flash" 303 | 304 | #~ msgid "Text" 305 | #~ msgstr "Testo" 306 | 307 | #~ msgid "Binary" 308 | #~ msgstr "Binary" 309 | 310 | #~ msgid "description" 311 | #~ msgstr "descrizione" 312 | 313 | #~ msgid "media file translation" 314 | #~ msgstr "traduzione di file multimediale" 315 | 316 | #~ msgid "media file translations" 317 | #~ msgstr "traduzioni di file multimediale" 318 | 319 | #~ msgid "" 320 | #~ "Select the module providing subpages for this page if you need to " 321 | #~ "customize the navigation." 322 | #~ msgstr "" 323 | #~ "Selezionare il modulo che fornisce sottopagine per questa pagina, se " 324 | #~ "avete bisogno di personalizzare la navigazione." 325 | 326 | #, fuzzy 327 | #~| msgid "in navigation" 328 | #~ msgid "navigation group" 329 | #~ msgstr "in navigazione" 330 | 331 | #~ msgid "All content is inherited from this page if given." 332 | #~ msgstr "" 333 | #~ "Tutti i contenuti sono ereditate da questa pagina, se somministrata." 334 | 335 | #~ msgid "content title" 336 | #~ msgstr "il titolo del contenuto" 337 | 338 | #~ msgid "The first line is the main title, the following lines are subtitles." 339 | #~ msgstr "" 340 | #~ "La prima linea è il titolo principale, le seguenti righe sono i " 341 | #~ "sottotitoli." 342 | 343 | #, fuzzy 344 | #~| msgid "Page title for browser window. Same as title by default." 345 | #~ msgid "" 346 | #~ "Page title for browser window. Same as title bydefault. Must not be " 347 | #~ "longer than 70 characters." 348 | #~ msgstr "" 349 | #~ "Titolo della pagina per la finestra del browser. Stesso titolo per " 350 | #~ "impostazione predefinita." 351 | 352 | #~ msgid "This URL is already taken by an active page." 353 | #~ msgstr "Questo URL è già stato preso da una pagina attiva." 354 | 355 | #~ msgid "This URL is already taken by another active page." 356 | #~ msgstr "Questo URL è già stato preso da un'altra pagina attiva." 357 | 358 | #~ msgid "Other options" 359 | #~ msgstr "Altre opzioni" 360 | 361 | #~ msgid "in navigation" 362 | #~ msgstr "in navigazione" 363 | 364 | #~ msgid "Add child page" 365 | #~ msgstr "Aggiungi pagina figlio" 366 | 367 | #~ msgid "View on site" 368 | #~ msgstr "Vedi sul sito" 369 | 370 | #~ msgid "inherited" 371 | #~ msgstr "ereditato" 372 | 373 | #~ msgid "active" 374 | #~ msgstr "attiva" 375 | 376 | #, fuzzy 377 | #~| msgid "This is used for the generated navigation too." 378 | #~ msgid "This title is also used for navigation menu items." 379 | #~ msgstr "Questo viene utilizzato per la navigazione generato troppo." 380 | 381 | #~ msgid "override URL" 382 | #~ msgstr "override URL" 383 | 384 | #~ msgid "" 385 | #~ "Override the target URL. Be sure to include slashes at the beginning and " 386 | #~ "at the end if it is a local URL. This affects both the navigation and " 387 | #~ "subpages' URLs." 388 | #~ msgstr "" 389 | #~ "Ignorare l'URL di destinazione. Assicurati di includere le barre " 390 | #~ "all'inizio e alla fine se si tratta di un URL locale. Questo riguarda sia " 391 | #~ "la navigazione e gli URL sottopagine '." 392 | 393 | #~ msgid "redirect to" 394 | #~ msgstr "reindirizzamento" 395 | 396 | #~ msgid "Cached URL" 397 | #~ msgstr "Cache URL" 398 | 399 | #~ msgid "page" 400 | #~ msgstr "pagina" 401 | 402 | #~ msgid "pages" 403 | #~ msgstr "pagine" 404 | 405 | #~ msgid "Really delete item?" 406 | #~ msgstr "Cancellare questa voce?" 407 | 408 | #~ msgid "Confirm to delete item" 409 | #~ msgstr "La conferma di sopprimere la voce" 410 | 411 | #~ msgid "Item deleted successfully." 412 | #~ msgstr "Elemento eliminato con successo." 413 | 414 | #~ msgid "Cannot delete item" 415 | #~ msgstr "Impossibile eliminare voce" 416 | 417 | #~ msgid "Cannot delete item, because it is parent of at least one other item." 418 | #~ msgstr "" 419 | #~ "Impossibile eliminare voce, perché è madre di almeno un altro elemento." 420 | 421 | #~ msgid "Change template" 422 | #~ msgstr "Cambia modello" 423 | 424 | #~ msgid "Really change template?
All changes are saved." 425 | #~ msgstr "" 426 | #~ "Davvero cambiare modello?
Tutte le modifiche vengono salvate." 427 | 428 | #~ msgid "Region empty" 429 | #~ msgstr "Regione vuota" 430 | 431 | #~ msgid "" 432 | #~ "Content from the parent site is automatically inherited. To override this " 433 | #~ "behaviour, add some content." 434 | #~ msgstr "" 435 | #~ "Contenuti dal sito padre viene automaticamente ereditate. Per ignorare " 436 | #~ "questo comportamento, aggiungere un po 'di contenuti." 437 | 438 | #~ msgid "Save" 439 | #~ msgstr "Salvare" 440 | 441 | #~ msgid "edit" 442 | #~ msgstr "modifica" 443 | 444 | #~ msgid "new" 445 | #~ msgstr "nuovo" 446 | 447 | #~ msgid "up" 448 | #~ msgstr "su" 449 | 450 | #~ msgid "down" 451 | #~ msgstr "giù" 452 | 453 | #~ msgid "remove" 454 | #~ msgstr "rimuovere" 455 | 456 | #~ msgid "Home" 457 | #~ msgstr "Casa" 458 | 459 | #~ msgid "Shortcuts" 460 | #~ msgstr "Scorciatoie" 461 | 462 | #~ msgid "Filter" 463 | #~ msgstr "Filtro" 464 | 465 | #~ msgid " By %(filter_title)s " 466 | #~ msgstr "Da %(filter_title)s " 467 | 468 | #~ msgid "Thanks!" 469 | #~ msgstr "Grazie!" 470 | 471 | #~ msgid "plain" 472 | #~ msgstr "plain" 473 | 474 | #~ msgid "title row" 475 | #~ msgstr "titolo di fila" 476 | 477 | #~ msgid "title row and column" 478 | #~ msgstr "riga del titolo e colonna" 479 | 480 | #~ msgid "table" 481 | #~ msgstr "tavolo" 482 | 483 | #~ msgid "tables" 484 | #~ msgstr "tavoli" 485 | 486 | #~ msgid "data" 487 | #~ msgstr "dati" 488 | 489 | #~ msgid "This will be prepended to the default keyword list." 490 | #~ msgstr "Questo sarà anteposto al elenco di parole chiave predefinite." 491 | 492 | #~ msgid "This will be prepended to the default description." 493 | #~ msgstr "Questo sarà anteposto alla descrizione di default." 494 | -------------------------------------------------------------------------------- /content_editor/locale/nb/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/feincms/django-content-editor/75f88363c3d4b80c1dcfc7a57af3efa3733e3998/content_editor/locale/nb/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /content_editor/locale/nb/LC_MESSAGES/django.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # 5 | # Translators: 6 | # Håvard Grimelid , 2011 7 | msgid "" 8 | msgstr "" 9 | "Project-Id-Version: FeinCMS\n" 10 | "Report-Msgid-Bugs-To: \n" 11 | "POT-Creation-Date: 2021-06-09 16:07+0200\n" 12 | "PO-Revision-Date: 2013-10-25 09:15+0000\n" 13 | "Last-Translator: Matthias Kestenholz \n" 14 | "Language-Team: Norwegian Bokmål (http://www.transifex.com/projects/p/feincms/" 15 | "language/nb/)\n" 16 | "Language: nb\n" 17 | "MIME-Version: 1.0\n" 18 | "Content-Type: text/plain; charset=UTF-8\n" 19 | "Content-Transfer-Encoding: 8bit\n" 20 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 21 | 22 | #: admin.py:151 23 | msgid "Add new item" 24 | msgstr "Legg til nytt objekt" 25 | 26 | #: admin.py:152 27 | #, fuzzy 28 | #| msgid "max. items" 29 | msgid "No items." 30 | msgstr "maks antall objekter" 31 | 32 | #: admin.py:153 33 | msgid "No items. Region may inherit content." 34 | msgstr "" 35 | 36 | #: admin.py:154 37 | msgid "No regions available." 38 | msgstr "" 39 | 40 | #: admin.py:155 41 | msgid "No plugins allowed in this region." 42 | msgstr "" 43 | 44 | #: admin.py:156 45 | #, fuzzy 46 | #| msgid "max. items" 47 | msgid "New item" 48 | msgstr "maks antall objekter" 49 | 50 | #: admin.py:157 51 | msgid "Unknown region" 52 | msgstr "" 53 | 54 | #: admin.py:158 55 | #, fuzzy 56 | #| msgid "Collapse tree" 57 | msgid "Collapse all items" 58 | msgstr "Slå sammen tre" 59 | 60 | #: admin.py:159 61 | #, fuzzy 62 | #| msgid "Collapse tree" 63 | msgid "Uncollapse all items" 64 | msgstr "Slå sammen tre" 65 | 66 | #: admin.py:160 67 | msgid "Toggle sidebar" 68 | msgstr "" 69 | 70 | #: admin.py:161 71 | msgid "marked for deletion" 72 | msgstr "" 73 | 74 | #: admin.py:163 75 | msgid "Use Ctrl-Click to select and move multiple items." 76 | msgstr "" 77 | 78 | #: admin.py:166 79 | msgid "Doubleclicking inserts an item at the end." 80 | msgstr "" 81 | 82 | #, fuzzy 83 | #~| msgid "template contents" 84 | #~ msgid "Show/hide contents" 85 | #~ msgstr "malinnhold" 86 | 87 | #~ msgid "All" 88 | #~ msgstr "Alle" 89 | 90 | #~ msgid "Parent" 91 | #~ msgstr "Forelder" 92 | 93 | #~ msgid "Category" 94 | #~ msgstr "Kategori" 95 | 96 | #~ msgid "Change %s" 97 | #~ msgstr "Endre %s" 98 | 99 | #~ msgid "title" 100 | #~ msgstr "tittel" 101 | 102 | #~ msgid "%s has been moved to a new position." 103 | #~ msgstr "%s har blitt flytta til en ny posisjon." 104 | 105 | #~ msgid "Did not understand moving instruction." 106 | #~ msgstr "Forstod ikke flytteinstruksjonen." 107 | 108 | #~ msgid "actions" 109 | #~ msgstr "aktiviteter" 110 | 111 | #~ msgid "application content" 112 | #~ msgstr "applikasjonsinnhold" 113 | 114 | #~ msgid "application contents" 115 | #~ msgstr "applikasjonsinnhold" 116 | 117 | #~ msgid "application" 118 | #~ msgstr "applikasjon" 119 | 120 | #~ msgid "enabled" 121 | #~ msgstr "på" 122 | 123 | #~ msgid "New comments may be added" 124 | #~ msgstr "Nye kommentarer kan legges til" 125 | 126 | #~ msgid "comments" 127 | #~ msgstr "kommentarer" 128 | 129 | #~ msgid "public" 130 | #~ msgstr "offentlig" 131 | 132 | #~ msgid "not public" 133 | #~ msgstr "ikke offentlig" 134 | 135 | #~ msgid "name" 136 | #~ msgstr "navn" 137 | 138 | #~ msgid "email" 139 | #~ msgstr "epost" 140 | 141 | #~ msgid "subject" 142 | #~ msgstr "tema" 143 | 144 | #~ msgid "content" 145 | #~ msgstr "innhold" 146 | 147 | #~ msgid "contact form" 148 | #~ msgstr "kontaktskjema" 149 | 150 | #~ msgid "contact forms" 151 | #~ msgstr "kontaktskjemaer" 152 | 153 | #~ msgid "file" 154 | #~ msgstr "fil" 155 | 156 | #~ msgid "files" 157 | #~ msgstr "filer" 158 | 159 | #~ msgid "image" 160 | #~ msgstr "bilde" 161 | 162 | #~ msgid "caption" 163 | #~ msgstr "tittel" 164 | 165 | #~ msgid "images" 166 | #~ msgstr "bilder" 167 | 168 | #~ msgid "position" 169 | #~ msgstr "posisjon" 170 | 171 | #~ msgid "media file" 172 | #~ msgstr "mediafil" 173 | 174 | #~ msgid "media files" 175 | #~ msgstr "mediafiler" 176 | 177 | #~ msgid "type" 178 | #~ msgstr "type" 179 | 180 | #~ msgid "raw content" 181 | #~ msgstr "råinnhold" 182 | 183 | #~ msgid "raw contents" 184 | #~ msgstr "råinnhold" 185 | 186 | #~ msgid "HTML Tidy" 187 | #~ msgstr "HTML Tidy" 188 | 189 | #~ msgid "Ignore the HTML validation warnings" 190 | #~ msgstr "Ignorer advarsler fra HTML-validering" 191 | 192 | #~ msgid "" 193 | #~ "HTML validation produced %(count)d warnings. Please review the updated " 194 | #~ "content below before continuing: %(messages)s" 195 | #~ msgstr "" 196 | #~ "HTML-validering produserte %(count)d advarsler. Revider oppdatert innhold " 197 | #~ "under før du fortsetter: %(messages)s" 198 | 199 | #~ msgid "text" 200 | #~ msgstr "tekst" 201 | 202 | #~ msgid "rich text" 203 | #~ msgstr "rik tekst" 204 | 205 | #~ msgid "rich texts" 206 | #~ msgstr "rike tekster" 207 | 208 | #~ msgid "" 209 | #~ "The rss field is updated several times a day. A change in the title will " 210 | #~ "only be visible on the home page after the next feed update." 211 | #~ msgstr "" 212 | #~ "RSS-strømmen blir oppdatert flere ganger om dagen. En endring i tittelel " 213 | #~ "vil ikke bli synlig på nettsiden før etter neste oppdatering." 214 | 215 | #~ msgid "link" 216 | #~ msgstr "link" 217 | 218 | #~ msgid "pre-rendered content" 219 | #~ msgstr "forhåndsrendret innhold" 220 | 221 | #~ msgid "last updated" 222 | #~ msgstr "sist oppdatert" 223 | 224 | #~ msgid "RSS feed" 225 | #~ msgstr "RSS-strøm" 226 | 227 | #~ msgid "RSS feeds" 228 | #~ msgstr "RSS-strømmer" 229 | 230 | #~ msgid "section" 231 | #~ msgstr "avsnitt" 232 | 233 | #~ msgid "sections" 234 | #~ msgstr "avsnitt" 235 | 236 | #~ msgid "template content" 237 | #~ msgstr "malinnhold" 238 | 239 | #~ msgid "template" 240 | #~ msgstr "mal" 241 | 242 | #~ msgid "video link" 243 | #~ msgstr "videolink" 244 | 245 | #~ msgid "" 246 | #~ "This should be a link to a youtube or vimeo video, i.e.: http://www." 247 | #~ "youtube.com/watch?v=zmj1rpzDRZ0" 248 | #~ msgstr "" 249 | #~ "Dette må være en link til en YouTube- eller Vimeo-film. F. eks. http://" 250 | #~ "www.youtube.com/watch?v=zmj1rpzDRZ0" 251 | 252 | #~ msgid "video" 253 | #~ msgstr "video" 254 | 255 | #~ msgid "videos" 256 | #~ msgstr "videoer" 257 | 258 | #~ msgid "ordering" 259 | #~ msgstr "sortering" 260 | 261 | #~ msgid "tags" 262 | #~ msgstr "merkelapper" 263 | 264 | #~ msgid "language" 265 | #~ msgstr "språk" 266 | 267 | #~ msgid "translation of" 268 | #~ msgstr "oversettelse av" 269 | 270 | #~ msgid "Leave this empty for entries in the primary language." 271 | #~ msgstr "La denne være tom for innlegg på primærspråket." 272 | 273 | #~ msgid "available translations" 274 | #~ msgstr "tilgjengelige oversettelser" 275 | 276 | #~ msgid "published" 277 | #~ msgstr "publisert" 278 | 279 | #~ msgid "This is used for the generated navigation too." 280 | #~ msgstr "Denne vil også bli brukt for navigasjon." 281 | 282 | #~ msgid "published on" 283 | #~ msgstr "publisert på" 284 | 285 | #~ msgid "" 286 | #~ "Will be set automatically once you tick the `published` checkbox above." 287 | #~ msgstr "Blir satt automatisk så snart `publisert`-boksen blir kryssa av." 288 | 289 | #~ msgid "entry" 290 | #~ msgstr "innlegg" 291 | 292 | #~ msgid "entries" 293 | #~ msgstr "innlegg" 294 | 295 | #~ msgid "creation date" 296 | #~ msgstr "opprettet dato" 297 | 298 | #~ msgid "modification date" 299 | #~ msgstr "endret dato" 300 | 301 | #~ msgid "content types" 302 | #~ msgstr "innholdstyper" 303 | 304 | #~ msgid "publication date" 305 | #~ msgstr "publiseringsdato" 306 | 307 | #~ msgid "publication end date" 308 | #~ msgstr "sluttdato for publisering" 309 | 310 | #~ msgid "Leave empty if the entry should stay active forever." 311 | #~ msgstr "La denne være tom dersom siden alltid skal være aktiv." 312 | 313 | #~ msgid "visible from - to" 314 | #~ msgstr "synlig fra - til" 315 | 316 | #~ msgid "Date-based publishing" 317 | #~ msgstr "Datobasert publisering" 318 | 319 | #~ msgid "featured" 320 | #~ msgstr "featured" 321 | 322 | #~ msgid "Featured" 323 | #~ msgstr "Featured" 324 | 325 | #~ msgid "meta keywords" 326 | #~ msgstr "meta-nøkkelord" 327 | 328 | #~ msgid "meta description" 329 | #~ msgstr "meta-beskrivelse" 330 | 331 | #~ msgid "Search engine optimization" 332 | #~ msgstr "Søkemotoroptimalisering" 333 | 334 | #~ msgid "Edit translation" 335 | #~ msgstr "Rediger oversettelse" 336 | 337 | #~ msgid "Create translation" 338 | #~ msgstr "Lag oversettelse" 339 | 340 | #~ msgid "translations" 341 | #~ msgstr "oversettelser" 342 | 343 | #~ msgid "Preview" 344 | #~ msgstr "Forhåndsvisning" 345 | 346 | #~ msgid "file size" 347 | #~ msgstr "filstørrelse" 348 | 349 | #~ msgid "created" 350 | #~ msgstr "opprettet" 351 | 352 | #~ msgid "file type" 353 | #~ msgstr "filtype" 354 | 355 | #~ msgid "file info" 356 | #~ msgstr "filinfo" 357 | 358 | #~ msgid "%d files imported" 359 | #~ msgstr "%d filer importert" 360 | 361 | #~ msgid "No input file given" 362 | #~ msgstr "Ingen inputfil gitt" 363 | 364 | #~ msgid "parent" 365 | #~ msgstr "forelder" 366 | 367 | #~ msgid "slug" 368 | #~ msgstr "slug" 369 | 370 | #~ msgid "category" 371 | #~ msgstr "kategori" 372 | 373 | #~ msgid "categories" 374 | #~ msgstr "kategorier" 375 | 376 | #~ msgid "copyright" 377 | #~ msgstr "copyright" 378 | 379 | #~ msgid "Image" 380 | #~ msgstr "Bilde" 381 | 382 | #~ msgid "Video" 383 | #~ msgstr "Video" 384 | 385 | #~ msgid "Audio" 386 | #~ msgstr "Lyd" 387 | 388 | #~ msgid "PDF document" 389 | #~ msgstr "PDF-dokument" 390 | 391 | #~ msgid "Flash" 392 | #~ msgstr "Flash" 393 | 394 | #~ msgid "Text" 395 | #~ msgstr "Tekst" 396 | 397 | #~ msgid "Rich Text" 398 | #~ msgstr "Rik tekst" 399 | 400 | #~ msgid "Zip archive" 401 | #~ msgstr "ZIP-arkiv" 402 | 403 | #~ msgid "Microsoft Word" 404 | #~ msgstr "Microsoft Word" 405 | 406 | #~ msgid "Microsoft Excel" 407 | #~ msgstr "Microsoft Excel" 408 | 409 | #~ msgid "Microsoft PowerPoint" 410 | #~ msgstr "Microsoft PowerPoint" 411 | 412 | #~ msgid "Binary" 413 | #~ msgstr "Binær" 414 | 415 | #~ msgid "description" 416 | #~ msgstr "beskrivelse" 417 | 418 | #~ msgid "media file translation" 419 | #~ msgstr "mediafil-oversettelse" 420 | 421 | #~ msgid "media file translations" 422 | #~ msgstr "mediafil-oversettelser" 423 | 424 | #~ msgid "excerpt" 425 | #~ msgstr "utdrag" 426 | 427 | #~ msgid "Add a brief excerpt summarizing the content of this page." 428 | #~ msgstr "Legg til et kort sammendrag av innholdet på denne siden." 429 | 430 | #~ msgid "Excerpt" 431 | #~ msgstr "Utdrag" 432 | 433 | #~ msgid "navigation extension" 434 | #~ msgstr "navigasjonsutvidelse" 435 | 436 | #~ msgid "" 437 | #~ "Select the module providing subpages for this page if you need to " 438 | #~ "customize the navigation." 439 | #~ msgstr "" 440 | #~ "Velg modulen som skal bidra med undersider til denne siden dersom du " 441 | #~ "trenger å tilpasse navigasjonen." 442 | 443 | #~ msgid "Navigation extension" 444 | #~ msgstr "Navigasjonsutvidelse" 445 | 446 | #, fuzzy 447 | #~| msgid "in navigation" 448 | #~ msgid "navigation group" 449 | #~ msgstr "i navigasjon" 450 | 451 | #~ msgid "Select pages that should be listed as related content." 452 | #~ msgstr "Velg sidene som skal listes som relatert innhold." 453 | 454 | #~ msgid "Related pages" 455 | #~ msgstr "Relaterte sider" 456 | 457 | #~ msgid "symlinked page" 458 | #~ msgstr "symbolsk linket side" 459 | 460 | #~ msgid "All content is inherited from this page if given." 461 | #~ msgstr "Dersom gitt, blir alt innhold blir arvet fra denne siden." 462 | 463 | #~ msgid "content title" 464 | #~ msgstr "innholdstittel" 465 | 466 | #~ msgid "The first line is the main title, the following lines are subtitles." 467 | #~ msgstr "Første linje er hovedtittelen, følgende linjer er undertitler." 468 | 469 | #~ msgid "page title" 470 | #~ msgstr "sidetittel" 471 | 472 | #, fuzzy 473 | #~| msgid "Page title for browser window. Same as title by default." 474 | #~ msgid "" 475 | #~ "Page title for browser window. Same as title bydefault. Must not be " 476 | #~ "longer than 70 characters." 477 | #~ msgstr "Sidetittel for nettleservinduet. Samme som tittel som standard." 478 | 479 | #~ msgid "Titles" 480 | #~ msgstr "Titler" 481 | 482 | #~ msgid "This URL is already taken by an active page." 483 | #~ msgstr "Denne URL-en er allerede i bruk av en aktiv side." 484 | 485 | #~ msgid "This URL is already taken by another active page." 486 | #~ msgstr "Denne URL-en er allerede i bruk av annen en aktiv side." 487 | 488 | #~ msgid "Other options" 489 | #~ msgstr "Andre valg" 490 | 491 | #~ msgid "in navigation" 492 | #~ msgstr "i navigasjon" 493 | 494 | #~ msgid "Add child page" 495 | #~ msgstr "Legg til underside" 496 | 497 | #~ msgid "View on site" 498 | #~ msgstr "Vis på nettsted" 499 | 500 | #~ msgid "inherited" 501 | #~ msgstr "arvet" 502 | 503 | #~ msgid "extensions" 504 | #~ msgstr "utvidelser" 505 | 506 | #~ msgid "is active" 507 | #~ msgstr "er aktiv" 508 | 509 | #~ msgid "active" 510 | #~ msgstr "aktiv" 511 | 512 | #, fuzzy 513 | #~| msgid "This is used for the generated navigation too." 514 | #~ msgid "This title is also used for navigation menu items." 515 | #~ msgstr "Denne vil også bli brukt for navigasjon." 516 | 517 | #~ msgid "override URL" 518 | #~ msgstr "overstyr URL" 519 | 520 | #~ msgid "" 521 | #~ "Override the target URL. Be sure to include slashes at the beginning and " 522 | #~ "at the end if it is a local URL. This affects both the navigation and " 523 | #~ "subpages' URLs." 524 | #~ msgstr "" 525 | #~ "Overstyr mål-URL. Inkluder skråstrek ved starten og ved slutten dersom " 526 | #~ "det er en lokal URL. Dette gjelder både for navigasjons- og underside-URL-" 527 | #~ "er." 528 | 529 | #~ msgid "redirect to" 530 | #~ msgstr "videresend til" 531 | 532 | #~ msgid "Cached URL" 533 | #~ msgstr "Mellomlagret URL" 534 | 535 | #~ msgid "page" 536 | #~ msgstr "side" 537 | 538 | #~ msgid "pages" 539 | #~ msgstr "sider" 540 | 541 | #~ msgid "Really delete item?" 542 | #~ msgstr "Slette objektet?" 543 | 544 | #~ msgid "Confirm to delete item" 545 | #~ msgstr "Bekreft sletting av objektet" 546 | 547 | #~ msgid "Item deleted successfully." 548 | #~ msgstr "Objekt slettet." 549 | 550 | #~ msgid "Cannot delete item" 551 | #~ msgstr "Kan ikke slette objekt" 552 | 553 | #~ msgid "Cannot delete item, because it is parent of at least one other item." 554 | #~ msgstr "" 555 | #~ "Kan ikke slette objektet fordi det er foreldre til minst ett annet objekt." 556 | 557 | #~ msgid "Change template" 558 | #~ msgstr "Endre mal" 559 | 560 | #~ msgid "Really change template?
All changes are saved." 561 | #~ msgstr "Endre mal?
Alle endringer blir lagret." 562 | 563 | #~ msgid "Hide" 564 | #~ msgstr "Skjul" 565 | 566 | #~ msgid "Show" 567 | #~ msgstr "Vis" 568 | 569 | #~ msgid "After" 570 | #~ msgstr "Etter" 571 | 572 | #~ msgid "Before" 573 | #~ msgstr "Før" 574 | 575 | #~ msgid "Insert new:" 576 | #~ msgstr "Sett inn ny:" 577 | 578 | #~ msgid "Region empty" 579 | #~ msgstr "Tom region" 580 | 581 | #~ msgid "" 582 | #~ "Content from the parent site is automatically inherited. To override this " 583 | #~ "behaviour, add some content." 584 | #~ msgstr "" 585 | #~ "Innhold fra forelder-side blir arvet automatisk. Overstyr dette ved å " 586 | #~ "legge til innhold." 587 | 588 | #~ msgid "Save" 589 | #~ msgstr "Lagre" 590 | 591 | #~ msgid "Stop Editing" 592 | #~ msgstr "Avslutt redigering" 593 | 594 | #~ msgid "edit" 595 | #~ msgstr "rediger" 596 | 597 | #~ msgid "new" 598 | #~ msgstr "ny" 599 | 600 | #~ msgid "up" 601 | #~ msgstr "opp" 602 | 603 | #~ msgid "down" 604 | #~ msgstr "ned" 605 | 606 | #~ msgid "remove" 607 | #~ msgstr "fjern" 608 | 609 | #~ msgid "Edit on site" 610 | #~ msgstr "Rediger på nettsted" 611 | 612 | #~ msgid "Home" 613 | #~ msgstr "Hjem" 614 | 615 | #~ msgid "Shortcuts" 616 | #~ msgstr "Snarveier" 617 | 618 | #~ msgid "Expand tree" 619 | #~ msgstr "Utvid tre" 620 | 621 | #~ msgid "Filter" 622 | #~ msgstr "Filter" 623 | 624 | #~ msgid " By %(filter_title)s " 625 | #~ msgstr "For %(filter_title)s " 626 | 627 | #~ msgid "Bulk upload a ZIP file:" 628 | #~ msgstr "Last opp ZIP-filer:" 629 | 630 | #~ msgid "Send" 631 | #~ msgstr "Send" 632 | 633 | #~ msgid "%(comment_count)s comments." 634 | #~ msgstr "%(comment_count)s kommentarer." 635 | 636 | #~ msgid "" 637 | #~ "\n" 638 | #~ " %(comment_username)s said on " 639 | #~ "%(comment_submit_date)s
\n" 640 | #~ " " 641 | #~ msgstr "" 642 | #~ "\n" 643 | #~ " %(comment_username)s sa på " 644 | #~ "%(comment_submit_date)s
\n" 645 | #~ " " 646 | 647 | #~ msgid "No comments." 648 | #~ msgstr "Ingen kommentarer." 649 | 650 | #~ msgid "Post Comment" 651 | #~ msgstr "Post kommentar" 652 | 653 | #~ msgid "Submit" 654 | #~ msgstr "Send inn" 655 | 656 | #~ msgid "Thanks!" 657 | #~ msgstr "Takk!" 658 | 659 | #~ msgid "plain" 660 | #~ msgstr "enkel" 661 | 662 | #~ msgid "title row" 663 | #~ msgstr "tittelrad" 664 | 665 | #~ msgid "title row and column" 666 | #~ msgstr "tittelrad og kolonne" 667 | 668 | #~ msgid "table" 669 | #~ msgstr "tabell" 670 | 671 | #~ msgid "tables" 672 | #~ msgstr "tabeller" 673 | 674 | #~ msgid "data" 675 | #~ msgstr "data" 676 | 677 | #~ msgid "This will be prepended to the default keyword list." 678 | #~ msgstr "Dette vil bli lagt inn foran i standard nøkkelord-liste." 679 | 680 | #~ msgid "This will be prepended to the default description." 681 | #~ msgstr "Dette vil bli lagt inn foran standard beskrivelse." 682 | -------------------------------------------------------------------------------- /content_editor/locale/nl/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/feincms/django-content-editor/75f88363c3d4b80c1dcfc7a57af3efa3733e3998/content_editor/locale/nl/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /content_editor/locale/pl/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/feincms/django-content-editor/75f88363c3d4b80c1dcfc7a57af3efa3733e3998/content_editor/locale/pl/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /content_editor/locale/pl/LC_MESSAGES/django.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # 5 | # Translators: 6 | # areksz , 2013 7 | msgid "" 8 | msgstr "" 9 | "Project-Id-Version: FeinCMS\n" 10 | "Report-Msgid-Bugs-To: \n" 11 | "POT-Creation-Date: 2021-06-09 16:07+0200\n" 12 | "PO-Revision-Date: 2013-10-25 09:15+0000\n" 13 | "Last-Translator: Matthias Kestenholz \n" 14 | "Language-Team: Polish (http://www.transifex.com/projects/p/feincms/language/" 15 | "pl/)\n" 16 | "Language: pl\n" 17 | "MIME-Version: 1.0\n" 18 | "Content-Type: text/plain; charset=UTF-8\n" 19 | "Content-Transfer-Encoding: 8bit\n" 20 | "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " 21 | "|| n%100>=20) ? 1 : 2);\n" 22 | 23 | #: admin.py:151 24 | msgid "Add new item" 25 | msgstr "Dodaj nowy element" 26 | 27 | #: admin.py:152 28 | #, fuzzy 29 | #| msgid "max. items" 30 | msgid "No items." 31 | msgstr "maksymalna ilość" 32 | 33 | #: admin.py:153 34 | msgid "No items. Region may inherit content." 35 | msgstr "" 36 | 37 | #: admin.py:154 38 | msgid "No regions available." 39 | msgstr "" 40 | 41 | #: admin.py:155 42 | msgid "No plugins allowed in this region." 43 | msgstr "" 44 | 45 | #: admin.py:156 46 | #, fuzzy 47 | #| msgid "max. items" 48 | msgid "New item" 49 | msgstr "maksymalna ilość" 50 | 51 | #: admin.py:157 52 | msgid "Unknown region" 53 | msgstr "" 54 | 55 | #: admin.py:158 56 | #, fuzzy 57 | #| msgid "Collapse tree" 58 | msgid "Collapse all items" 59 | msgstr "Zwiń drzewo" 60 | 61 | #: admin.py:159 62 | #, fuzzy 63 | #| msgid "Collapse tree" 64 | msgid "Uncollapse all items" 65 | msgstr "Zwiń drzewo" 66 | 67 | #: admin.py:160 68 | msgid "Toggle sidebar" 69 | msgstr "" 70 | 71 | #: admin.py:161 72 | msgid "marked for deletion" 73 | msgstr "" 74 | 75 | #: admin.py:163 76 | msgid "Use Ctrl-Click to select and move multiple items." 77 | msgstr "" 78 | 79 | #: admin.py:166 80 | msgid "Doubleclicking inserts an item at the end." 81 | msgstr "" 82 | 83 | #, fuzzy 84 | #~| msgid "template contents" 85 | #~ msgid "Show/hide contents" 86 | #~ msgstr "teksty szablonów" 87 | 88 | #~ msgid "All" 89 | #~ msgstr "wszystko" 90 | 91 | #~ msgid "Parent" 92 | #~ msgstr "Rodzic" 93 | 94 | #~ msgid "Category" 95 | #~ msgstr "Kategoria" 96 | 97 | #~ msgid "Change %s" 98 | #~ msgstr "Zmień %s" 99 | 100 | #~ msgid "title" 101 | #~ msgstr "tytuł" 102 | 103 | #, fuzzy 104 | #~| msgid "You don't have the necessary permissions to edit this object" 105 | #~ msgid "You do not have permission to modify this object" 106 | #~ msgstr "Nie masz wystarczających uprawnień aby edytować ten element" 107 | 108 | #~ msgid "%s has been moved to a new position." 109 | #~ msgstr "%s został przesunięty" 110 | 111 | #~ msgid "Did not understand moving instruction." 112 | #~ msgstr "Instrukcja przesunięcia nie jest zrozumiała." 113 | 114 | #~ msgid "actions" 115 | #~ msgstr "akcje" 116 | 117 | #~ msgid "application content" 118 | #~ msgstr "zawartość aplikacji" 119 | 120 | #~ msgid "application contents" 121 | #~ msgstr "application content" 122 | 123 | #~ msgid "application" 124 | #~ msgstr "aplikacja" 125 | 126 | #~ msgid "enabled" 127 | #~ msgstr "aktywny" 128 | 129 | #~ msgid "New comments may be added" 130 | #~ msgstr "Nowe komentarze mogą być dodane" 131 | 132 | #~ msgid "comments" 133 | #~ msgstr "komentarze" 134 | 135 | #~ msgid "public" 136 | #~ msgstr "publiczne" 137 | 138 | #~ msgid "not public" 139 | #~ msgstr "nie publiczne" 140 | 141 | #~ msgid "name" 142 | #~ msgstr "nazwa" 143 | 144 | #~ msgid "email" 145 | #~ msgstr "email" 146 | 147 | #~ msgid "subject" 148 | #~ msgstr "temat" 149 | 150 | #~ msgid "content" 151 | #~ msgstr "zawartość" 152 | 153 | #~ msgid "contact form" 154 | #~ msgstr "formularz kontaktowy" 155 | 156 | #~ msgid "contact forms" 157 | #~ msgstr "formularze kontaktowe" 158 | 159 | #~ msgid "file" 160 | #~ msgstr "plik" 161 | 162 | #~ msgid "files" 163 | #~ msgstr "pliki" 164 | 165 | #~ msgid "image" 166 | #~ msgstr "zdjęcie" 167 | 168 | #~ msgid "images" 169 | #~ msgstr "zdjęcia" 170 | 171 | #~ msgid "position" 172 | #~ msgstr "pozycja" 173 | 174 | #~ msgid "media file" 175 | #~ msgstr "plik media" 176 | 177 | #~ msgid "media files" 178 | #~ msgstr "pliki media" 179 | 180 | #~ msgid "type" 181 | #~ msgstr "typ" 182 | 183 | #~ msgid "raw content" 184 | #~ msgstr "tekst niesformatowany" 185 | 186 | #~ msgid "raw contents" 187 | #~ msgstr "teksty niesformatowane" 188 | 189 | #~ msgid "HTML Tidy" 190 | #~ msgstr "HTML Tidy" 191 | 192 | #~ msgid "Ignore the HTML validation warnings" 193 | #~ msgstr "Ignoruj ostrzeżenia o walidacji HMTL" 194 | 195 | #~ msgid "text" 196 | #~ msgstr "tekst" 197 | 198 | #~ msgid "rich text" 199 | #~ msgstr "Obszar tekstowy (WYSIWYG)" 200 | 201 | #~ msgid "rich texts" 202 | #~ msgstr "Obszary tekstowe (WYSIWYG)" 203 | 204 | #~ msgid "link" 205 | #~ msgstr "link" 206 | 207 | #~ msgid "last updated" 208 | #~ msgstr "ostatnio aktualizowany" 209 | 210 | #~ msgid "RSS feed" 211 | #~ msgstr "kanał RSS" 212 | 213 | #~ msgid "RSS feeds" 214 | #~ msgstr "kanały RSS" 215 | 216 | #~ msgid "section" 217 | #~ msgstr "sekcja" 218 | 219 | #~ msgid "sections" 220 | #~ msgstr "sekcje" 221 | 222 | #~ msgid "template content" 223 | #~ msgstr "tekst szablonu" 224 | 225 | #~ msgid "template" 226 | #~ msgstr "szablon" 227 | 228 | #~ msgid "video link" 229 | #~ msgstr "link video" 230 | 231 | #~ msgid "" 232 | #~ "This should be a link to a youtube or vimeo video, i.e.: http://www." 233 | #~ "youtube.com/watch?v=zmj1rpzDRZ0" 234 | #~ msgstr "" 235 | #~ "Umieść link do youtube.com lub vimeo.com, np. http://www.youtube.com/" 236 | #~ "watch?v=zmj1rpzDRZ0" 237 | 238 | #~ msgid "video" 239 | #~ msgstr "video" 240 | 241 | #~ msgid "videos" 242 | #~ msgstr "video" 243 | 244 | #~ msgid "ordering" 245 | #~ msgstr "sortowanie" 246 | 247 | #~ msgid "tags" 248 | #~ msgstr "tagi" 249 | 250 | #~ msgid "language" 251 | #~ msgstr "język" 252 | 253 | #~ msgid "translation of" 254 | #~ msgstr "tłumaczenie" 255 | 256 | #~ msgid "available translations" 257 | #~ msgstr "dostępne tłumaczenia" 258 | 259 | #~ msgid "published" 260 | #~ msgstr "opublikowany" 261 | 262 | #~ msgid "published on" 263 | #~ msgstr "opublikowany na" 264 | 265 | #~ msgid "" 266 | #~ "Will be set automatically once you tick the `published` checkbox above." 267 | #~ msgstr "" 268 | #~ "Zostanie automatycznie ustawione po kliknięciu \"opublikowany\" powyżej" 269 | 270 | #~ msgid "entry" 271 | #~ msgstr "wpis" 272 | 273 | #~ msgid "entries" 274 | #~ msgstr "wpisy" 275 | 276 | #~ msgid "creation date" 277 | #~ msgstr "data utworzenia" 278 | 279 | #~ msgid "modification date" 280 | #~ msgstr "data modyfikacji" 281 | 282 | #~ msgid "content types" 283 | #~ msgstr "typ treści" 284 | 285 | #~ msgid "publication date" 286 | #~ msgstr "data publikacji" 287 | 288 | #~ msgid "publication end date" 289 | #~ msgstr "końcowa data publikacji" 290 | 291 | #~ msgid "Leave empty if the entry should stay active forever." 292 | #~ msgstr "Pozostaw puste jeśli nie chcesz określać końcowej daty publikacji" 293 | 294 | #~ msgid "visible from - to" 295 | #~ msgstr "widoczne od - do" 296 | 297 | #~ msgid "Date-based publishing" 298 | #~ msgstr "Określanie okresu publikacji" 299 | 300 | #~ msgid "featured" 301 | #~ msgstr "wyróżniony" 302 | 303 | #~ msgid "meta keywords" 304 | #~ msgstr "tagi meta - keywords" 305 | 306 | #~ msgid "meta description" 307 | #~ msgstr "tagi meta - description" 308 | 309 | #~ msgid "Search engine optimization" 310 | #~ msgstr "Pola SEO " 311 | 312 | #~ msgid "Edit translation" 313 | #~ msgstr "Edytuj tłumaczenie" 314 | 315 | #~ msgid "Create translation" 316 | #~ msgstr "Stwórz tłumaczenie" 317 | 318 | #~ msgid "translations" 319 | #~ msgstr "tłumaczenia" 320 | 321 | #~ msgid "Add selected media files to category" 322 | #~ msgstr "Dodaj zaznaczone pliki do kategorii" 323 | 324 | #~ msgid "Preview" 325 | #~ msgstr "Podgląd" 326 | 327 | #~ msgid "file size" 328 | #~ msgstr "rozmiar pliku" 329 | 330 | #~ msgid "created" 331 | #~ msgstr "utworzony" 332 | 333 | #~ msgid "file type" 334 | #~ msgstr "typ pliku" 335 | 336 | #~ msgid "file info" 337 | #~ msgstr "informacje o pliku" 338 | 339 | #~ msgid "%d files imported" 340 | #~ msgstr "zaimportowano %d plików" 341 | 342 | #~ msgid "No input file given" 343 | #~ msgstr "Brak wybranego pliku " 344 | 345 | #~ msgid "parent" 346 | #~ msgstr "rodzic" 347 | 348 | #~ msgid "slug" 349 | #~ msgstr "slug (wyświetlany adres)" 350 | 351 | #~ msgid "category" 352 | #~ msgstr "kategoria" 353 | 354 | #~ msgid "categories" 355 | #~ msgstr "kategorie" 356 | 357 | #~ msgid "copyright" 358 | #~ msgstr "copyright" 359 | 360 | #~ msgid "Image" 361 | #~ msgstr "Zdjęcie" 362 | 363 | #~ msgid "Video" 364 | #~ msgstr "Video" 365 | 366 | #~ msgid "Audio" 367 | #~ msgstr "Audio" 368 | 369 | #~ msgid "PDF document" 370 | #~ msgstr "Dokument PDF" 371 | 372 | #~ msgid "Flash" 373 | #~ msgstr "Flash" 374 | 375 | #~ msgid "Text" 376 | #~ msgstr "Tekst" 377 | 378 | #~ msgid "Rich Text" 379 | #~ msgstr "Obszar tekstowy (WYSIWYG)" 380 | 381 | #~ msgid "Zip archive" 382 | #~ msgstr "Archiwum ZIP" 383 | 384 | #~ msgid "Microsoft Word" 385 | #~ msgstr "Microsoft Word" 386 | 387 | #~ msgid "Microsoft Excel" 388 | #~ msgstr "Microsoft Excel" 389 | 390 | #~ msgid "Microsoft PowerPoint" 391 | #~ msgstr "Microsoft PowerPoint" 392 | 393 | #~ msgid "Binary" 394 | #~ msgstr "Binarny" 395 | 396 | #~ msgid "description" 397 | #~ msgstr "opis" 398 | 399 | #, fuzzy 400 | #~| msgid "in navigation" 401 | #~ msgid "navigation group" 402 | #~ msgstr "W menu" 403 | 404 | #~ msgid "Related pages" 405 | #~ msgstr "Powiązane strony" 406 | 407 | #~ msgid "Site" 408 | #~ msgstr "Strony" 409 | 410 | #~ msgid "symlinked page" 411 | #~ msgstr "dowiązana strona" 412 | 413 | #~ msgid "content title" 414 | #~ msgstr "Tytuł treści" 415 | 416 | #~ msgid "page title" 417 | #~ msgstr "Tytuł strony" 418 | 419 | #~ msgid "Titles" 420 | #~ msgstr "Tytuły" 421 | 422 | #~ msgid "This URL is already taken by an active page." 423 | #~ msgstr "ten URL jest już używany przez aktywną stronę." 424 | 425 | #~ msgid "This URL is already taken by another active page." 426 | #~ msgstr "ten URL jest już używany przez inną aktywną stronę." 427 | 428 | #~ msgid "Other options" 429 | #~ msgstr "Pozostałe opcje" 430 | 431 | #~ msgid "in navigation" 432 | #~ msgstr "W menu" 433 | 434 | #~ msgid "Add child page" 435 | #~ msgstr "Dodaj podstronę" 436 | 437 | #~ msgid "View on site" 438 | #~ msgstr "Zobacz podgląd strony" 439 | 440 | #~ msgid "You don't have the necessary permissions to edit this object" 441 | #~ msgstr "Nie masz wystarczających uprawnień aby edytować ten element" 442 | 443 | #~ msgid "inherited" 444 | #~ msgstr "dziedziczone" 445 | 446 | #~ msgid "extensions" 447 | #~ msgstr "rozszerzenia" 448 | 449 | #~ msgid "is active" 450 | #~ msgstr "czy jest aktywne" 451 | 452 | #~ msgid "active" 453 | #~ msgstr "aktywny" 454 | 455 | #~ msgid "override URL" 456 | #~ msgstr "nadpisz URL" 457 | 458 | #~ msgid "redirect to" 459 | #~ msgstr "przekieruj do" 460 | 461 | #~ msgid "page" 462 | #~ msgstr "strona" 463 | 464 | #~ msgid "pages" 465 | #~ msgstr "strony" 466 | 467 | #~ msgid "Really delete item?" 468 | #~ msgstr "Usunąć?" 469 | 470 | #~ msgid "Confirm to delete item" 471 | #~ msgstr "Potwierdź usunięcie" 472 | 473 | #~ msgid "Item deleted successfully." 474 | #~ msgstr "Element został usunięty" 475 | 476 | #~ msgid "Cannot delete item" 477 | #~ msgstr "Brak możliwości usunięcia elementu" 478 | 479 | #~ msgid "Cannot delete item, because it is parent of at least one other item." 480 | #~ msgstr "" 481 | #~ "Element nie może zostać usunięty ponieważ zawiera przynajmniej jeden " 482 | #~ "element podrzędny. Usuń wpierw elementy podrzędne." 483 | 484 | #~ msgid "Change template" 485 | #~ msgstr "Zmień szablon" 486 | 487 | #~ msgid "Really change template?
All changes are saved." 488 | #~ msgstr "Zmienić szablon?
Wszystkie zmiany zostały zachowane." 489 | 490 | #~ msgid "Hide" 491 | #~ msgstr "Ukryj" 492 | 493 | #~ msgid "Show" 494 | #~ msgstr "Pokaż" 495 | 496 | #~ msgid "After" 497 | #~ msgstr "Za" 498 | 499 | #~ msgid "Before" 500 | #~ msgstr "Przed" 501 | 502 | #~ msgid "Insert new:" 503 | #~ msgstr "Wstaw nowy:" 504 | 505 | #~ msgid "Region empty" 506 | #~ msgstr "Pusty region" 507 | 508 | #~ msgid "" 509 | #~ "Content from the parent site is automatically inherited. To override this " 510 | #~ "behaviour, add some content." 511 | #~ msgstr "" 512 | #~ "Treść ze strony nadrzędnej został automatycznie odziedziczony. Wstaw " 513 | #~ "treść aby nadpisać odziedziczoną wartość." 514 | 515 | #~ msgid "Add another %(verbose_name)s" 516 | #~ msgstr "Dodaj następny %(verbose_name)s" 517 | 518 | #~ msgid "Remove" 519 | #~ msgstr "Usuń" 520 | 521 | #~ msgid "Save" 522 | #~ msgstr "Zachowaj" 523 | 524 | #~ msgid "Stop Editing" 525 | #~ msgstr "Zakończ Edycję" 526 | 527 | #~ msgid "edit" 528 | #~ msgstr "edytuj" 529 | 530 | #~ msgid "new" 531 | #~ msgstr "nowy" 532 | 533 | #~ msgid "up" 534 | #~ msgstr "góra" 535 | 536 | #~ msgid "down" 537 | #~ msgstr "dół" 538 | 539 | #~ msgid "remove" 540 | #~ msgstr "usuń" 541 | 542 | #~ msgid "Edit on site" 543 | #~ msgstr "Edytuj na stronie" 544 | 545 | #~ msgid "Home" 546 | #~ msgstr "Główna" 547 | 548 | #~ msgid "Add" 549 | #~ msgstr "Dodaj" 550 | 551 | #~ msgid "History" 552 | #~ msgstr "Historia" 553 | 554 | #~ msgid "Expand tree" 555 | #~ msgstr "Rozwiń drzewo" 556 | 557 | #~ msgid "Filter" 558 | #~ msgstr "Filtruj" 559 | 560 | #~ msgid " By %(filter_title)s " 561 | #~ msgstr "Po %(filter_title)s " 562 | 563 | #~ msgid "Add media files to category" 564 | #~ msgstr "Dodaj pliki media do kategorii" 565 | 566 | #~ msgid "Select category to apply:" 567 | #~ msgstr "Wybierz kategorię:" 568 | 569 | #~ msgid "The following media files will be added to the selected category:" 570 | #~ msgstr "Następujące pliki media zostaną dodane do wybranej kategorii:" 571 | 572 | #~ msgid "Add to category" 573 | #~ msgstr "Dodaj do kategorii" 574 | 575 | #~ msgid "Cancel" 576 | #~ msgstr "Anuluj" 577 | 578 | #~ msgid "Overwrite" 579 | #~ msgstr "Napisz" 580 | 581 | #~ msgid "Send" 582 | #~ msgstr "Wyślij" 583 | 584 | #~ msgid "No comments." 585 | #~ msgstr "Brak komentarzy." 586 | 587 | #~ msgid "Submit" 588 | #~ msgstr "Wyślij" 589 | 590 | #~ msgid "Thanks!" 591 | #~ msgstr "Dziękuję!" 592 | 593 | #~ msgid "plain" 594 | #~ msgstr "zwyczajny" 595 | 596 | #~ msgid "title row" 597 | #~ msgstr "tytuł" 598 | 599 | #~ msgid "table" 600 | #~ msgstr "tablica" 601 | 602 | #~ msgid "tables" 603 | #~ msgstr "tablice" 604 | 605 | #~ msgid "data" 606 | #~ msgstr "data" 607 | 608 | #~ msgid "This will be prepended to the default keyword list." 609 | #~ msgstr "Zostanie dołączone z przodu listy tagów" 610 | 611 | #~ msgid "This will be prepended to the default description." 612 | #~ msgstr "Zostanie dołączone z przodu listy tagów" 613 | -------------------------------------------------------------------------------- /content_editor/locale/pt/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/feincms/django-content-editor/75f88363c3d4b80c1dcfc7a57af3efa3733e3998/content_editor/locale/pt/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /content_editor/locale/pt/LC_MESSAGES/djangojs.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/feincms/django-content-editor/75f88363c3d4b80c1dcfc7a57af3efa3733e3998/content_editor/locale/pt/LC_MESSAGES/djangojs.mo -------------------------------------------------------------------------------- /content_editor/locale/pt/LC_MESSAGES/djangojs.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # FIRST AUTHOR , YEAR. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: PACKAGE VERSION\n" 9 | "Report-Msgid-Bugs-To: \n" 10 | "POT-Creation-Date: 2010-02-10 01:20+0000\n" 11 | "PO-Revision-Date: 2010-02-10 01:23\n" 12 | "Last-Translator: \n" 13 | "Language-Team: LANGUAGE \n" 14 | "MIME-Version: 1.0\n" 15 | "Content-Type: text/plain; charset=UTF-8\n" 16 | "Content-Transfer-Encoding: 8bit\n" 17 | "X-Translated-Using: django-rosetta 0.5.1\n" 18 | 19 | #: media/feincms/item_editor.js:16 20 | msgid "Hide" 21 | msgstr "Ocultar" 22 | -------------------------------------------------------------------------------- /content_editor/locale/pt_BR/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/feincms/django-content-editor/75f88363c3d4b80c1dcfc7a57af3efa3733e3998/content_editor/locale/pt_BR/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /content_editor/locale/ro/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/feincms/django-content-editor/75f88363c3d4b80c1dcfc7a57af3efa3733e3998/content_editor/locale/ro/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /content_editor/locale/ro/LC_MESSAGES/django.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # 5 | # Translators: 6 | # Gabriel Kovacs , 2010 7 | msgid "" 8 | msgstr "" 9 | "Project-Id-Version: FeinCMS\n" 10 | "Report-Msgid-Bugs-To: \n" 11 | "POT-Creation-Date: 2021-06-09 16:07+0200\n" 12 | "PO-Revision-Date: 2013-10-25 09:15+0000\n" 13 | "Last-Translator: Matthias Kestenholz \n" 14 | "Language-Team: Romanian (http://www.transifex.com/projects/p/feincms/" 15 | "language/ro/)\n" 16 | "Language: ro\n" 17 | "MIME-Version: 1.0\n" 18 | "Content-Type: text/plain; charset=UTF-8\n" 19 | "Content-Transfer-Encoding: 8bit\n" 20 | "Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?" 21 | "2:1));\n" 22 | 23 | #: admin.py:151 24 | msgid "Add new item" 25 | msgstr "Adaugă un obiect nou" 26 | 27 | #: admin.py:152 28 | #, fuzzy 29 | #| msgid "max. items" 30 | msgid "No items." 31 | msgstr "nr. de obiecte maxime" 32 | 33 | #: admin.py:153 34 | msgid "No items. Region may inherit content." 35 | msgstr "" 36 | 37 | #: admin.py:154 38 | msgid "No regions available." 39 | msgstr "" 40 | 41 | #: admin.py:155 42 | msgid "No plugins allowed in this region." 43 | msgstr "" 44 | 45 | #: admin.py:156 46 | #, fuzzy 47 | #| msgid "max. items" 48 | msgid "New item" 49 | msgstr "nr. de obiecte maxime" 50 | 51 | #: admin.py:157 52 | msgid "Unknown region" 53 | msgstr "" 54 | 55 | #: admin.py:158 56 | #, fuzzy 57 | #| msgid "Collapse tree" 58 | msgid "Collapse all items" 59 | msgstr "Închide arborele" 60 | 61 | #: admin.py:159 62 | #, fuzzy 63 | #| msgid "Collapse tree" 64 | msgid "Uncollapse all items" 65 | msgstr "Închide arborele" 66 | 67 | #: admin.py:160 68 | msgid "Toggle sidebar" 69 | msgstr "" 70 | 71 | #: admin.py:161 72 | msgid "marked for deletion" 73 | msgstr "" 74 | 75 | #: admin.py:163 76 | msgid "Use Ctrl-Click to select and move multiple items." 77 | msgstr "" 78 | 79 | #: admin.py:166 80 | msgid "Doubleclicking inserts an item at the end." 81 | msgstr "" 82 | 83 | #, fuzzy 84 | #~| msgid "raw contents" 85 | #~ msgid "Show/hide contents" 86 | #~ msgstr "conținuturi neformatate" 87 | 88 | #~ msgid "Change %s" 89 | #~ msgstr "Modifică %s" 90 | 91 | #~ msgid "title" 92 | #~ msgstr "titlu" 93 | 94 | #~ msgid "actions" 95 | #~ msgstr "acțiuni" 96 | 97 | #~ msgid "application content" 98 | #~ msgstr "conținutul aplicației" 99 | 100 | #~ msgid "application contents" 101 | #~ msgstr "conținuturile aplicației" 102 | 103 | #~ msgid "application" 104 | #~ msgstr "aplicație" 105 | 106 | #~ msgid "name" 107 | #~ msgstr "nume" 108 | 109 | #~ msgid "email" 110 | #~ msgstr "e-mail" 111 | 112 | #~ msgid "subject" 113 | #~ msgstr "subiect" 114 | 115 | #~ msgid "content" 116 | #~ msgstr "conținut" 117 | 118 | #~ msgid "contact form" 119 | #~ msgstr "formular de contact" 120 | 121 | #~ msgid "contact forms" 122 | #~ msgstr "formulare de contact" 123 | 124 | #~ msgid "file" 125 | #~ msgstr "fișier" 126 | 127 | #~ msgid "files" 128 | #~ msgstr "fișiere" 129 | 130 | #~ msgid "image" 131 | #~ msgstr "imagine" 132 | 133 | #~ msgid "caption" 134 | #~ msgstr "legendă" 135 | 136 | #~ msgid "images" 137 | #~ msgstr "imagini" 138 | 139 | #~ msgid "position" 140 | #~ msgstr "poziție" 141 | 142 | #~ msgid "media file" 143 | #~ msgstr "fișier media" 144 | 145 | #~ msgid "media files" 146 | #~ msgstr "fișiere media" 147 | 148 | #~ msgid "type" 149 | #~ msgstr "tip" 150 | 151 | #~ msgid "raw content" 152 | #~ msgstr "conținut neformatat" 153 | 154 | #~ msgid "text" 155 | #~ msgstr "text" 156 | 157 | #~ msgid "rich text" 158 | #~ msgstr "text formatabil" 159 | 160 | #~ msgid "rich texts" 161 | #~ msgstr "texte formatabile" 162 | 163 | #~ msgid "" 164 | #~ "The rss field is updated several times a day. A change in the title will " 165 | #~ "only be visible on the home page after the next feed update." 166 | #~ msgstr "" 167 | #~ "Fluxul RSS este actualizat de mai multe ori pe zi. O modificare a " 168 | #~ "titlului va fi vizibilă in prima pagină după următoarea actualizare a " 169 | #~ "fluxului." 170 | 171 | #~ msgid "link" 172 | #~ msgstr "legătură" 173 | 174 | #~ msgid "pre-rendered content" 175 | #~ msgstr "conținut predefinit" 176 | 177 | #~ msgid "last updated" 178 | #~ msgstr "ultima actualizare" 179 | 180 | #~ msgid "RSS feed" 181 | #~ msgstr "flux RSS" 182 | 183 | #~ msgid "RSS feeds" 184 | #~ msgstr "fluxuri RSS" 185 | 186 | #~ msgid "template" 187 | #~ msgstr "șablon" 188 | 189 | #~ msgid "video link" 190 | #~ msgstr "legătură film" 191 | 192 | #~ msgid "" 193 | #~ "This should be a link to a youtube or vimeo video, i.e.: http://www." 194 | #~ "youtube.com/watch?v=zmj1rpzDRZ0" 195 | #~ msgstr "" 196 | #~ "Aceasta ar trebui să fie o legătură către un film de pe youtube sau " 197 | #~ "vimeo, de ex.: http://www.youtube.com/watch?v=zmj1rpzDRZ0" 198 | 199 | #~ msgid "video" 200 | #~ msgstr "film" 201 | 202 | #~ msgid "videos" 203 | #~ msgstr "filme" 204 | 205 | #~ msgid "ordering" 206 | #~ msgstr "ordonare" 207 | 208 | #~ msgid "tags" 209 | #~ msgstr "etichete" 210 | 211 | #~ msgid "language" 212 | #~ msgstr "limbă" 213 | 214 | #~ msgid "translation of" 215 | #~ msgstr "tradus de" 216 | 217 | #~ msgid "available translations" 218 | #~ msgstr "traduceri disponibile" 219 | 220 | #~ msgid "published" 221 | #~ msgstr "publicat" 222 | 223 | #~ msgid "This is used for the generated navigation too." 224 | #~ msgstr "Aceasta este deasemenea folosită pentru navigarea generată." 225 | 226 | #~ msgid "published on" 227 | #~ msgstr "publicat la" 228 | 229 | #~ msgid "" 230 | #~ "Will be set automatically once you tick the `published` checkbox above." 231 | #~ msgstr "" 232 | #~ "Va fi trimis automat în momentul in care bifați butonul `publicat` de mai " 233 | #~ "sus." 234 | 235 | #~ msgid "entry" 236 | #~ msgstr "înregistrare" 237 | 238 | #~ msgid "entries" 239 | #~ msgstr "înregistrari" 240 | 241 | #~ msgid "creation date" 242 | #~ msgstr "data creerii" 243 | 244 | #~ msgid "modification date" 245 | #~ msgstr "data modificării" 246 | 247 | #~ msgid "publication date" 248 | #~ msgstr "data publicării" 249 | 250 | #~ msgid "publication end date" 251 | #~ msgstr "sfârșitul publicării" 252 | 253 | #~ msgid "Leave empty if the entry should stay active forever." 254 | #~ msgstr "Lasă gol dacă înregistrarea ar trebui să fie activă întotdeauna" 255 | 256 | #~ msgid "visible from - to" 257 | #~ msgstr "vizibil de la - până la" 258 | 259 | #~ msgid "meta keywords" 260 | #~ msgstr "cuvinte cheie meta" 261 | 262 | #~ msgid "meta description" 263 | #~ msgstr "descriere meta" 264 | 265 | #~ msgid "Edit translation" 266 | #~ msgstr "Modifică translatarea" 267 | 268 | #~ msgid "Create translation" 269 | #~ msgstr "Creează o translatare" 270 | 271 | #~ msgid "translations" 272 | #~ msgstr "translații" 273 | 274 | #~ msgid "Preview" 275 | #~ msgstr "Pre-vizualizare" 276 | 277 | #~ msgid "created" 278 | #~ msgstr "creat" 279 | 280 | #~ msgid "file type" 281 | #~ msgstr "tipul fișierului" 282 | 283 | #~ msgid "parent" 284 | #~ msgstr "părinte" 285 | 286 | #~ msgid "slug" 287 | #~ msgstr "slug" 288 | 289 | #~ msgid "category" 290 | #~ msgstr "categorie" 291 | 292 | #~ msgid "categories" 293 | #~ msgstr "categorii" 294 | 295 | #~ msgid "copyright" 296 | #~ msgstr "copyright" 297 | 298 | #~ msgid "Image" 299 | #~ msgstr "Imagine" 300 | 301 | #~ msgid "PDF document" 302 | #~ msgstr "document PDF" 303 | 304 | #~ msgid "Flash" 305 | #~ msgstr "Flash" 306 | 307 | #~ msgid "Text" 308 | #~ msgstr "Text" 309 | 310 | #~ msgid "Binary" 311 | #~ msgstr "Binar" 312 | 313 | #~ msgid "description" 314 | #~ msgstr "descriere" 315 | 316 | #~ msgid "media file translation" 317 | #~ msgstr "traducere fișier media" 318 | 319 | #~ msgid "media file translations" 320 | #~ msgstr "traduceri fișier media" 321 | 322 | #~ msgid "navigation extension" 323 | #~ msgstr "navigare extinsă" 324 | 325 | #~ msgid "" 326 | #~ "Select the module providing subpages for this page if you need to " 327 | #~ "customize the navigation." 328 | #~ msgstr "" 329 | #~ "Selectați modulul care furnizează subpaginile pentru această pagină dacă " 330 | #~ "doriți să personalizaţi." 331 | 332 | #, fuzzy 333 | #~| msgid "in navigation" 334 | #~ msgid "navigation group" 335 | #~ msgstr "în navigare" 336 | 337 | #~ msgid "symlinked page" 338 | #~ msgstr "legătură pagină" 339 | 340 | #~ msgid "All content is inherited from this page if given." 341 | #~ msgstr "" 342 | #~ "Întreg conținutul este moștenit de la această pagină daca se dorește." 343 | 344 | #~ msgid "content title" 345 | #~ msgstr "titlu conținut" 346 | 347 | #~ msgid "The first line is the main title, the following lines are subtitles." 348 | #~ msgstr "" 349 | #~ "Prima linie reprezintă titlul principal, următoarele sunt subtitluri." 350 | 351 | #~ msgid "page title" 352 | #~ msgstr "titlul paginii" 353 | 354 | #, fuzzy 355 | #~| msgid "Page title for browser window. Same as title by default." 356 | #~ msgid "" 357 | #~ "Page title for browser window. Same as title bydefault. Must not be " 358 | #~ "longer than 70 characters." 359 | #~ msgstr "" 360 | #~ "Titlul paginii pentru fereastra navigatorului. Implicit este la fel cu " 361 | #~ "titlul paginii." 362 | 363 | #~ msgid "This URL is already taken by an active page." 364 | #~ msgstr "Acest URL este deja rezervat de către o pagină activă." 365 | 366 | #~ msgid "This URL is already taken by another active page." 367 | #~ msgstr "Acest URL este deja rezervat de către o altă pagină activă." 368 | 369 | #~ msgid "Other options" 370 | #~ msgstr "Alte opțiuni" 371 | 372 | #~ msgid "in navigation" 373 | #~ msgstr "în navigare" 374 | 375 | #~ msgid "Add child page" 376 | #~ msgstr "Adaugă o pagină copil" 377 | 378 | #~ msgid "View on site" 379 | #~ msgstr "Vezi pe site" 380 | 381 | #~ msgid "inherited" 382 | #~ msgstr "moștenit" 383 | 384 | #~ msgid "extensions" 385 | #~ msgstr "extensii" 386 | 387 | #~ msgid "active" 388 | #~ msgstr "activ" 389 | 390 | #, fuzzy 391 | #~| msgid "This is used for the generated navigation too." 392 | #~ msgid "This title is also used for navigation menu items." 393 | #~ msgstr "Aceasta este deasemenea folosită pentru navigarea generată." 394 | 395 | #~ msgid "override URL" 396 | #~ msgstr "suprascrie URL" 397 | 398 | #~ msgid "" 399 | #~ "Override the target URL. Be sure to include slashes at the beginning and " 400 | #~ "at the end if it is a local URL. This affects both the navigation and " 401 | #~ "subpages' URLs." 402 | #~ msgstr "" 403 | #~ "Suprascrie URL-ul țintă. Aveți grijă să scrieti / la început și la " 404 | #~ "șfârșit dacă este un URL local.Aceasta afectează atât navigația cât și " 405 | #~ "subpaginile." 406 | 407 | #~ msgid "redirect to" 408 | #~ msgstr "redirecționare către" 409 | 410 | #~ msgid "Cached URL" 411 | #~ msgstr "URL în cache" 412 | 413 | #~ msgid "page" 414 | #~ msgstr "pagină" 415 | 416 | #~ msgid "pages" 417 | #~ msgstr "pagini" 418 | 419 | #~ msgid "Really delete item?" 420 | #~ msgstr "Confirmți ștergerea obiectului?" 421 | 422 | #~ msgid "Confirm to delete item" 423 | #~ msgstr "Confirmți pentru a șterge obiectul" 424 | 425 | #~ msgid "Item deleted successfully." 426 | #~ msgstr "Obiectul a fost șters cu succes." 427 | 428 | #~ msgid "Cannot delete item" 429 | #~ msgstr "Nu pot șterge obiectul" 430 | 431 | #~ msgid "Cannot delete item, because it is parent of at least one other item." 432 | #~ msgstr "" 433 | #~ "Nu se poate șterge obiectul, deoarece este părinte la cel puțin incă un " 434 | #~ "obiect." 435 | 436 | #~ msgid "Change template" 437 | #~ msgstr "Modifică șablon" 438 | 439 | #~ msgid "Really change template?
All changes are saved." 440 | #~ msgstr "" 441 | #~ "Doriți ștergerea șablonului?
Toate modificarile au fost salvate." 442 | 443 | #~ msgid "Region empty" 444 | #~ msgstr "Regiunea este goală" 445 | 446 | #~ msgid "" 447 | #~ "Content from the parent site is automatically inherited. To override this " 448 | #~ "behaviour, add some content." 449 | #~ msgstr "" 450 | #~ "Conținutul de la pagina părinte este moștenită automat. Pentru a " 451 | #~ "suprascrie acest lucru, adăugați conținut" 452 | 453 | #~ msgid "Save" 454 | #~ msgstr "Salvează" 455 | 456 | #~ msgid "edit" 457 | #~ msgstr "modifică" 458 | 459 | #~ msgid "new" 460 | #~ msgstr "nou" 461 | 462 | #~ msgid "up" 463 | #~ msgstr "sus" 464 | 465 | #~ msgid "down" 466 | #~ msgstr "jos" 467 | 468 | #~ msgid "remove" 469 | #~ msgstr "scoate" 470 | 471 | #~ msgid "Home" 472 | #~ msgstr "Acasă" 473 | 474 | #~ msgid "Shortcuts" 475 | #~ msgstr "Scurtături" 476 | 477 | #~ msgid "Expand tree" 478 | #~ msgstr "Deschide arborele" 479 | 480 | #~ msgid "Filter" 481 | #~ msgstr "Filtrează" 482 | 483 | #~ msgid " By %(filter_title)s " 484 | #~ msgstr "După %(filter_title)s" 485 | 486 | #~ msgid "Submit" 487 | #~ msgstr "Trimite" 488 | 489 | #~ msgid "Thanks!" 490 | #~ msgstr "Mulțumesc!" 491 | 492 | #~ msgid "plain" 493 | #~ msgstr "simplu" 494 | 495 | #~ msgid "title row" 496 | #~ msgstr "titlu" 497 | 498 | #~ msgid "title row and column" 499 | #~ msgstr "titlu rând și coloană" 500 | 501 | #~ msgid "table" 502 | #~ msgstr "tabel" 503 | 504 | #~ msgid "tables" 505 | #~ msgstr "tabele" 506 | 507 | #~ msgid "data" 508 | #~ msgstr "data" 509 | 510 | #~ msgid "This will be prepended to the default keyword list." 511 | #~ msgstr "Va fi inserat la lista predefinită de cuvinte cheie." 512 | 513 | #~ msgid "This will be prepended to the default description." 514 | #~ msgstr "Va fi inserată la descrierea predefinită." 515 | -------------------------------------------------------------------------------- /content_editor/locale/ru/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/feincms/django-content-editor/75f88363c3d4b80c1dcfc7a57af3efa3733e3998/content_editor/locale/ru/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /content_editor/locale/tr/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/feincms/django-content-editor/75f88363c3d4b80c1dcfc7a57af3efa3733e3998/content_editor/locale/tr/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /content_editor/locale/zh_CN/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/feincms/django-content-editor/75f88363c3d4b80c1dcfc7a57af3efa3733e3998/content_editor/locale/zh_CN/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /content_editor/locale/zh_CN/LC_MESSAGES/django.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # 5 | # Translators: 6 | # aaffdd11 , 2011 7 | # indexofire , 2011 8 | msgid "" 9 | msgstr "" 10 | "Project-Id-Version: FeinCMS\n" 11 | "Report-Msgid-Bugs-To: \n" 12 | "POT-Creation-Date: 2021-06-09 16:07+0200\n" 13 | "PO-Revision-Date: 2013-10-25 09:15+0000\n" 14 | "Last-Translator: Matthias Kestenholz \n" 15 | "Language-Team: Chinese (China) (http://www.transifex.com/projects/p/feincms/" 16 | "language/zh_CN/)\n" 17 | "Language: zh_CN\n" 18 | "MIME-Version: 1.0\n" 19 | "Content-Type: text/plain; charset=UTF-8\n" 20 | "Content-Transfer-Encoding: 8bit\n" 21 | "Plural-Forms: nplurals=1; plural=0;\n" 22 | 23 | #: admin.py:151 24 | msgid "Add new item" 25 | msgstr "新建" 26 | 27 | #: admin.py:152 28 | #, fuzzy 29 | #| msgid "max. items" 30 | msgid "No items." 31 | msgstr "最大条目数" 32 | 33 | #: admin.py:153 34 | msgid "No items. Region may inherit content." 35 | msgstr "" 36 | 37 | #: admin.py:154 38 | msgid "No regions available." 39 | msgstr "" 40 | 41 | #: admin.py:155 42 | msgid "No plugins allowed in this region." 43 | msgstr "" 44 | 45 | #: admin.py:156 46 | #, fuzzy 47 | #| msgid "max. items" 48 | msgid "New item" 49 | msgstr "最大条目数" 50 | 51 | #: admin.py:157 52 | msgid "Unknown region" 53 | msgstr "" 54 | 55 | #: admin.py:158 56 | #, fuzzy 57 | #| msgid "Collapse tree" 58 | msgid "Collapse all items" 59 | msgstr "折叠树型" 60 | 61 | #: admin.py:159 62 | #, fuzzy 63 | #| msgid "Collapse tree" 64 | msgid "Uncollapse all items" 65 | msgstr "折叠树型" 66 | 67 | #: admin.py:160 68 | msgid "Toggle sidebar" 69 | msgstr "" 70 | 71 | #: admin.py:161 72 | msgid "marked for deletion" 73 | msgstr "" 74 | 75 | #: admin.py:163 76 | msgid "Use Ctrl-Click to select and move multiple items." 77 | msgstr "" 78 | 79 | #: admin.py:166 80 | msgid "Doubleclicking inserts an item at the end." 81 | msgstr "" 82 | 83 | #, fuzzy 84 | #~| msgid "template contents" 85 | #~ msgid "Show/hide contents" 86 | #~ msgstr "模板内容" 87 | 88 | #~ msgid "All" 89 | #~ msgstr "全部" 90 | 91 | #~ msgid "Parent" 92 | #~ msgstr "父级" 93 | 94 | #~ msgid "Category" 95 | #~ msgstr "分类" 96 | 97 | #~ msgid "Change %s" 98 | #~ msgstr "修改 %s" 99 | 100 | #~ msgid "title" 101 | #~ msgstr "标题" 102 | 103 | #, fuzzy 104 | #~| msgid "You don't have the necessary permissions to edit this object" 105 | #~ msgid "You do not have permission to modify this object" 106 | #~ msgstr "你无权编辑该对象" 107 | 108 | #~ msgid "%s has been moved to a new position." 109 | #~ msgstr "%s 已被移至新的位置" 110 | 111 | #~ msgid "Did not understand moving instruction." 112 | #~ msgstr "无法接受的移动指令" 113 | 114 | #~ msgid "actions" 115 | #~ msgstr "动作" 116 | 117 | #, fuzzy 118 | #~| msgid "Successfully added %(count)d media file to %(category)s." 119 | #~| msgid_plural "Successfully added %(count)d media files to %(category)s." 120 | #~ msgid "Successfully deleted %(count)d items." 121 | #~ msgstr "Successfully added %(count)d media files to %(category)s." 122 | 123 | #~ msgid "application content" 124 | #~ msgstr "应用程序内容" 125 | 126 | #~ msgid "application contents" 127 | #~ msgstr "应用程序内容" 128 | 129 | #~ msgid "application" 130 | #~ msgstr "应用程序" 131 | 132 | #~ msgid "enabled" 133 | #~ msgstr "激活" 134 | 135 | #~ msgid "New comments may be added" 136 | #~ msgstr "新的评论" 137 | 138 | #~ msgid "comments" 139 | #~ msgstr "评论" 140 | 141 | #~ msgid "public" 142 | #~ msgstr "公开" 143 | 144 | #~ msgid "not public" 145 | #~ msgstr "不公开" 146 | 147 | #~ msgid "name" 148 | #~ msgstr "名称" 149 | 150 | #~ msgid "email" 151 | #~ msgstr "电子邮件" 152 | 153 | #~ msgid "subject" 154 | #~ msgstr "主题" 155 | 156 | #~ msgid "content" 157 | #~ msgstr "内容" 158 | 159 | #~ msgid "contact form" 160 | #~ msgstr "联系表单" 161 | 162 | #~ msgid "contact forms" 163 | #~ msgstr "联系表单" 164 | 165 | #~ msgid "file" 166 | #~ msgstr "文件" 167 | 168 | #~ msgid "files" 169 | #~ msgstr "文件" 170 | 171 | #~ msgid "image" 172 | #~ msgstr "图片" 173 | 174 | #~ msgid "caption" 175 | #~ msgstr "题目" 176 | 177 | #~ msgid "images" 178 | #~ msgstr "图片" 179 | 180 | #~ msgid "position" 181 | #~ msgstr "位置" 182 | 183 | #~ msgid "media file" 184 | #~ msgstr "多媒体文件" 185 | 186 | #~ msgid "media files" 187 | #~ msgstr "多媒体文件" 188 | 189 | #~ msgid "type" 190 | #~ msgstr "类型" 191 | 192 | #~ msgid "raw content" 193 | #~ msgstr "raw content" 194 | 195 | #~ msgid "raw contents" 196 | #~ msgstr "raw contents" 197 | 198 | #~ msgid "HTML Tidy" 199 | #~ msgstr "HTML Tidy" 200 | 201 | #~ msgid "Ignore the HTML validation warnings" 202 | #~ msgstr "忽略HTML验证错误警告" 203 | 204 | #~ msgid "" 205 | #~ "HTML validation produced %(count)d warnings. Please review the updated " 206 | #~ "content below before continuing: %(messages)s" 207 | #~ msgstr "" 208 | #~ "HTML验证产生 %(count)d 个警告。请在继续前查看下面更新的内容: %(messages)s" 209 | 210 | #~ msgid "text" 211 | #~ msgstr "纯文本" 212 | 213 | #~ msgid "rich text" 214 | #~ msgstr "富文本" 215 | 216 | #~ msgid "rich texts" 217 | #~ msgstr "富文本" 218 | 219 | #~ msgid "" 220 | #~ "The rss field is updated several times a day. A change in the title will " 221 | #~ "only be visible on the home page after the next feed update." 222 | #~ msgstr "RSS字段一天内更新多次。标题改动将在feed更新后只在主页显示。" 223 | 224 | #~ msgid "link" 225 | #~ msgstr "链接" 226 | 227 | #~ msgid "pre-rendered content" 228 | #~ msgstr "预渲染的内容" 229 | 230 | #~ msgid "last updated" 231 | #~ msgstr "最后更新" 232 | 233 | #~ msgid "RSS feed" 234 | #~ msgstr "RSS 提要" 235 | 236 | #~ msgid "RSS feeds" 237 | #~ msgstr "RSS 提要" 238 | 239 | #~ msgid "section" 240 | #~ msgstr "版块" 241 | 242 | #~ msgid "sections" 243 | #~ msgstr "版块" 244 | 245 | #~ msgid "template content" 246 | #~ msgstr "模板内容" 247 | 248 | #~ msgid "template" 249 | #~ msgstr "模板" 250 | 251 | #~ msgid "video link" 252 | #~ msgstr "视频链接" 253 | 254 | #~ msgid "" 255 | #~ "This should be a link to a youtube or vimeo video, i.e.: http://www." 256 | #~ "youtube.com/watch?v=zmj1rpzDRZ0" 257 | #~ msgstr "" 258 | #~ "请输入youtube或vimeo视频链接,比如:http://www.youtube.com/watch?" 259 | #~ "v=zmj1rpzDRZ0" 260 | 261 | #~ msgid "video" 262 | #~ msgstr "视频" 263 | 264 | #~ msgid "videos" 265 | #~ msgstr "视频" 266 | 267 | #~ msgid "ordering" 268 | #~ msgstr "排序" 269 | 270 | #~ msgid "tags" 271 | #~ msgstr "标签" 272 | 273 | #~ msgid "language" 274 | #~ msgstr "语言" 275 | 276 | #~ msgid "translation of" 277 | #~ msgstr "翻译" 278 | 279 | #~ msgid "Leave this empty for entries in the primary language." 280 | #~ msgstr "在主要语言项中对这些条目留空。" 281 | 282 | #~ msgid "available translations" 283 | #~ msgstr "已有翻译" 284 | 285 | #~ msgid "published" 286 | #~ msgstr "已发布" 287 | 288 | #~ msgid "This is used for the generated navigation too." 289 | #~ msgstr "也被用于产生导航条" 290 | 291 | #~ msgid "published on" 292 | #~ msgstr "发布于" 293 | 294 | #~ msgid "" 295 | #~ "Will be set automatically once you tick the `published` checkbox above." 296 | #~ msgstr "一旦你将`发表`复选框以上打勾选中,日志将设置成自动发布。" 297 | 298 | #~ msgid "entry" 299 | #~ msgstr "条目" 300 | 301 | #~ msgid "entries" 302 | #~ msgstr "条目" 303 | 304 | #~ msgid "creation date" 305 | #~ msgstr "创建日期" 306 | 307 | #~ msgid "modification date" 308 | #~ msgstr "修改日期" 309 | 310 | #~ msgid "content types" 311 | #~ msgstr "内容类型" 312 | 313 | #~ msgid "publication date" 314 | #~ msgstr "发布起始日期" 315 | 316 | #~ msgid "publication end date" 317 | #~ msgstr "发布结束日期" 318 | 319 | #~ msgid "Leave empty if the entry should stay active forever." 320 | #~ msgstr "如果条目要永久显示,请留空" 321 | 322 | #~ msgid "visible from - to" 323 | #~ msgstr "可查看日期" 324 | 325 | #~ msgid "Date-based publishing" 326 | #~ msgstr "发布基于日期控制" 327 | 328 | #~ msgid "featured" 329 | #~ msgstr "特性" 330 | 331 | #~ msgid "Featured" 332 | #~ msgstr "特性" 333 | 334 | #~ msgid "meta keywords" 335 | #~ msgstr "meta 关键词" 336 | 337 | #~ msgid "meta description" 338 | #~ msgstr "meta 描述" 339 | 340 | #~ msgid "Search engine optimization" 341 | #~ msgstr "搜索引擎优化" 342 | 343 | #~ msgid "Edit translation" 344 | #~ msgstr "编辑翻译" 345 | 346 | #~ msgid "Create translation" 347 | #~ msgstr "创建翻译" 348 | 349 | #~ msgid "translations" 350 | #~ msgstr "翻译" 351 | 352 | #~ msgid "Successfully added %(count)d media file to %(category)s." 353 | #~ msgid_plural "Successfully added %(count)d media files to %(category)s." 354 | #~ msgstr[0] "Successfully added %(count)d media files to %(category)s." 355 | 356 | #~ msgid "Add selected media files to category" 357 | #~ msgstr "所选的媒体文件添加到类" 358 | 359 | #~ msgid "Preview" 360 | #~ msgstr "预览" 361 | 362 | #~ msgid "file size" 363 | #~ msgstr "文件大小" 364 | 365 | #~ msgid "created" 366 | #~ msgstr "创建" 367 | 368 | #~ msgid "file type" 369 | #~ msgstr "文件类型" 370 | 371 | #~ msgid "file info" 372 | #~ msgstr "文件信息" 373 | 374 | #~ msgid "%d files imported" 375 | #~ msgstr "导入 %d 个文件" 376 | 377 | #~ msgid "No input file given" 378 | #~ msgstr "没有选择文件" 379 | 380 | #~ msgid "parent" 381 | #~ msgstr "父" 382 | 383 | #~ msgid "slug" 384 | #~ msgstr "slug" 385 | 386 | #~ msgid "category" 387 | #~ msgstr "类别" 388 | 389 | #~ msgid "categories" 390 | #~ msgstr "类别" 391 | 392 | #~ msgid "copyright" 393 | #~ msgstr "版权" 394 | 395 | #~ msgid "Image" 396 | #~ msgstr "图片" 397 | 398 | #~ msgid "Video" 399 | #~ msgstr "视频" 400 | 401 | #~ msgid "Audio" 402 | #~ msgstr "音频" 403 | 404 | #~ msgid "PDF document" 405 | #~ msgstr "PDF文档" 406 | 407 | #~ msgid "Flash" 408 | #~ msgstr "Flash" 409 | 410 | #~ msgid "Text" 411 | #~ msgstr "纯文本" 412 | 413 | #~ msgid "Rich Text" 414 | #~ msgstr "富文本" 415 | 416 | #~ msgid "Zip archive" 417 | #~ msgstr "zip压缩包" 418 | 419 | #~ msgid "Microsoft Word" 420 | #~ msgstr "Microsoft Word" 421 | 422 | #~ msgid "Microsoft Excel" 423 | #~ msgstr "Microsoft Excel" 424 | 425 | #~ msgid "Microsoft PowerPoint" 426 | #~ msgstr "Microsoft PowerPoint" 427 | 428 | #~ msgid "Binary" 429 | #~ msgstr "二进制文件" 430 | 431 | #~ msgid "description" 432 | #~ msgstr "描述" 433 | 434 | #~ msgid "media file translation" 435 | #~ msgstr "媒体文件翻译" 436 | 437 | #~ msgid "media file translations" 438 | #~ msgstr "媒体文件翻译" 439 | 440 | #~ msgid "excerpt" 441 | #~ msgstr "摘抄" 442 | 443 | #~ msgid "Add a brief excerpt summarizing the content of this page." 444 | #~ msgstr "添加一条简要形容页面内容" 445 | 446 | #~ msgid "Excerpt" 447 | #~ msgstr "摘抄" 448 | 449 | #~ msgid "navigation extension" 450 | #~ msgstr "导航扩展" 451 | 452 | #~ msgid "" 453 | #~ "Select the module providing subpages for this page if you need to " 454 | #~ "customize the navigation." 455 | #~ msgstr "如果您需要定制的导航,选择提供此页面的子页面模块。" 456 | 457 | #~ msgid "Navigation extension" 458 | #~ msgstr "导航扩展" 459 | 460 | #, fuzzy 461 | #~| msgid "in navigation" 462 | #~ msgid "navigation group" 463 | #~ msgstr "导航中" 464 | 465 | #~ msgid "Select pages that should be listed as related content." 466 | #~ msgstr "选择页面作为相关页面在列表中显示" 467 | 468 | #~ msgid "Related pages" 469 | #~ msgstr "相关页面" 470 | 471 | #~ msgid "Site" 472 | #~ msgstr "网站" 473 | 474 | #~ msgid "symlinked page" 475 | #~ msgstr "链接页面" 476 | 477 | #~ msgid "All content is inherited from this page if given." 478 | #~ msgstr "所有内容继承于给出的页面" 479 | 480 | #~ msgid "content title" 481 | #~ msgstr "内容标题" 482 | 483 | #~ msgid "The first line is the main title, the following lines are subtitles." 484 | #~ msgstr "正文第一行作为主标题,第二行作为副标题" 485 | 486 | #~ msgid "page title" 487 | #~ msgstr "页面标题" 488 | 489 | #, fuzzy 490 | #~| msgid "Page title for browser window. Same as title by default." 491 | #~ msgid "" 492 | #~ "Page title for browser window. Same as title bydefault. Must not be " 493 | #~ "longer than 70 characters." 494 | #~ msgstr "浏览器窗口显示标题默认为页面标题" 495 | 496 | #~ msgid "Titles" 497 | #~ msgstr "标题" 498 | 499 | #~ msgid "This URL is already taken by an active page." 500 | #~ msgstr "此URL已被其他页面使用" 501 | 502 | #~ msgid "This URL is already taken by another active page." 503 | #~ msgstr "此URL已被另一个页面使用" 504 | 505 | #~ msgid "Other options" 506 | #~ msgstr "其他选项" 507 | 508 | #~ msgid "in navigation" 509 | #~ msgstr "导航中" 510 | 511 | #~ msgid "Add child page" 512 | #~ msgstr "增加子页面" 513 | 514 | #~ msgid "View on site" 515 | #~ msgstr "站内查看" 516 | 517 | #~ msgid "You don't have the necessary permissions to edit this object" 518 | #~ msgstr "你无权编辑该对象" 519 | 520 | #~ msgid "inherited" 521 | #~ msgstr "继承" 522 | 523 | #~ msgid "extensions" 524 | #~ msgstr "扩展" 525 | 526 | #~ msgid "is active" 527 | #~ msgstr "激活" 528 | 529 | #~ msgid "active" 530 | #~ msgstr "激活" 531 | 532 | #, fuzzy 533 | #~| msgid "This is used for the generated navigation too." 534 | #~ msgid "This title is also used for navigation menu items." 535 | #~ msgstr "也被用于产生导航条" 536 | 537 | #~ msgid "override URL" 538 | #~ msgstr "URL覆盖" 539 | 540 | #~ msgid "" 541 | #~ "Override the target URL. Be sure to include slashes at the beginning and " 542 | #~ "at the end if it is a local URL. This affects both the navigation and " 543 | #~ "subpages' URLs." 544 | #~ msgstr "" 545 | #~ "覆盖目标URL,如果它是一个本地的URL,一定要包括在开始和结束时的斜线。这会影" 546 | #~ "响导航和子页面的URL" 547 | 548 | #~ msgid "redirect to" 549 | #~ msgstr "转向" 550 | 551 | #~ msgid "Cached URL" 552 | #~ msgstr "URL缓存" 553 | 554 | #~ msgid "page" 555 | #~ msgstr "页面" 556 | 557 | #~ msgid "pages" 558 | #~ msgstr "页面" 559 | 560 | #~ msgid "Really delete item?" 561 | #~ msgstr "真的要删除?" 562 | 563 | #~ msgid "Confirm to delete item" 564 | #~ msgstr "确认删除" 565 | 566 | #~ msgid "Item deleted successfully." 567 | #~ msgstr "删除成功" 568 | 569 | #~ msgid "Cannot delete item" 570 | #~ msgstr "不能删除" 571 | 572 | #~ msgid "Cannot delete item, because it is parent of at least one other item." 573 | #~ msgstr "因为该项是其他的父级条目所以不能删除" 574 | 575 | #~ msgid "Change template" 576 | #~ msgstr "改变模板" 577 | 578 | #~ msgid "Really change template?
All changes are saved." 579 | #~ msgstr "真的要修改模板么?
全部修改已被保存。" 580 | 581 | #~ msgid "Hide" 582 | #~ msgstr "隐藏" 583 | 584 | #~ msgid "Show" 585 | #~ msgstr "显示" 586 | 587 | #~ msgid "After" 588 | #~ msgstr "之后" 589 | 590 | #~ msgid "Before" 591 | #~ msgstr "之前" 592 | 593 | #~ msgid "Insert new:" 594 | #~ msgstr "插入新的" 595 | 596 | #~ msgid "Region empty" 597 | #~ msgstr "空区域" 598 | 599 | #~ msgid "" 600 | #~ "Content from the parent site is automatically inherited. To override this " 601 | #~ "behaviour, add some content." 602 | #~ msgstr "父站的内容已自动继承。添加新内容会覆盖。" 603 | 604 | #~ msgid "Add another %(verbose_name)s" 605 | #~ msgstr "添加另一个 %(verbose_name)s" 606 | 607 | #~ msgid "Remove" 608 | #~ msgstr "移除" 609 | 610 | #~ msgid "Save" 611 | #~ msgstr "保存" 612 | 613 | #~ msgid "Stop Editing" 614 | #~ msgstr "暂停编辑" 615 | 616 | #~ msgid "edit" 617 | #~ msgstr "编辑" 618 | 619 | #~ msgid "new" 620 | #~ msgstr "新建" 621 | 622 | #~ msgid "up" 623 | #~ msgstr "上" 624 | 625 | #~ msgid "down" 626 | #~ msgstr "下" 627 | 628 | #~ msgid "remove" 629 | #~ msgstr "移除" 630 | 631 | #~ msgid "Edit on site" 632 | #~ msgstr "站内编辑" 633 | 634 | #~ msgid "Home" 635 | #~ msgstr "首页" 636 | 637 | #~ msgid "Add" 638 | #~ msgstr "添加" 639 | 640 | #~ msgid "Recover deleted %(verbose_name)s" 641 | #~ msgstr "Recover deleted %(verbose_name)s" 642 | 643 | #~ msgid "Press the save button below to recover this version of the object." 644 | #~ msgstr "按下面的“保存”按钮恢复此对象的版本。" 645 | 646 | #~ msgid "History" 647 | #~ msgstr "历史" 648 | 649 | #~ msgid "Revert %(verbose_name)s" 650 | #~ msgstr "Revert %(verbose_name)s" 651 | 652 | #~ msgid "Press the save button below to revert to this version of the object." 653 | #~ msgstr "按下面的“保存”按钮,恢复到这个版本的对象。" 654 | 655 | #~ msgid "Shortcuts" 656 | #~ msgstr "快捷方式" 657 | 658 | #~ msgid "Expand tree" 659 | #~ msgstr "展开树型" 660 | 661 | #~ msgid "Filter" 662 | #~ msgstr "过滤器" 663 | 664 | #~ msgid " By %(filter_title)s " 665 | #~ msgstr "由 %(filter_title)s" 666 | 667 | #~ msgid "Add media files to category" 668 | #~ msgstr "添加媒体文件到分类" 669 | 670 | #~ msgid "Select category to apply:" 671 | #~ msgstr "选择申请类别:" 672 | 673 | #~ msgid "The following media files will be added to the selected category:" 674 | #~ msgstr "以下的媒体文件将被添加到选定的类别:" 675 | 676 | #~ msgid "Add to category" 677 | #~ msgstr "添加到分类" 678 | 679 | #~ msgid "Cancel" 680 | #~ msgstr "取消" 681 | 682 | #~ msgid "Bulk upload a ZIP file:" 683 | #~ msgstr "批量上传zip文件" 684 | 685 | #~ msgid "Send" 686 | #~ msgstr "发送" 687 | 688 | #~ msgid "%(comment_count)s comments." 689 | #~ msgstr "%(comment_count)s 条评论" 690 | 691 | #~ msgid "" 692 | #~ "\n" 693 | #~ " %(comment_username)s said on " 694 | #~ "%(comment_submit_date)s
\n" 695 | #~ " " 696 | #~ msgstr "" 697 | #~ "\n" 698 | #~ " %(comment_username)s 在 %(comment_submit_date)s 说" 699 | #~ "
\n" 700 | #~ " " 701 | 702 | #~ msgid "No comments." 703 | #~ msgstr "无评论" 704 | 705 | #~ msgid "Post Comment" 706 | #~ msgstr "发表评论" 707 | 708 | #~ msgid "Submit" 709 | #~ msgstr "提交" 710 | 711 | #~ msgid "Thanks!" 712 | #~ msgstr "感谢" 713 | 714 | #~ msgid "plain" 715 | #~ msgstr "无格式" 716 | 717 | #~ msgid "title row" 718 | #~ msgstr "标题行" 719 | 720 | #~ msgid "title row and column" 721 | #~ msgstr "标题行和列" 722 | 723 | #~ msgid "table" 724 | #~ msgstr "表格" 725 | 726 | #~ msgid "tables" 727 | #~ msgstr "表格" 728 | 729 | #~ msgid "data" 730 | #~ msgstr "数据" 731 | 732 | #~ msgid "This will be prepended to the default keyword list." 733 | #~ msgstr "这将作为默认的关键字列表被添加。" 734 | 735 | #~ msgid "This will be prepended to the default description." 736 | #~ msgstr "这将作为默认的描述被添加" 737 | -------------------------------------------------------------------------------- /content_editor/models.py: -------------------------------------------------------------------------------- 1 | import warnings 2 | 3 | from django.core.exceptions import ImproperlyConfigured 4 | from django.db import models 5 | 6 | 7 | __all__ = ("Type", "Region", "Template", "create_plugin_base") 8 | 9 | 10 | class Type(dict): 11 | _REQUIRED = {"key"} 12 | 13 | def __init__(self, **kwargs): 14 | missing = self._REQUIRED - set(kwargs) 15 | if missing: 16 | raise TypeError( 17 | f"Missing arguments to {self.__class__.__name__}: {missing}" 18 | ) 19 | super().__init__(**kwargs) 20 | 21 | def __getattr__(self, attr): 22 | try: 23 | return self[attr] 24 | except KeyError as exc: 25 | raise AttributeError(f"Unknown attribute {attr!r}") from exc 26 | 27 | def __hash__(self): 28 | return hash(self.key) 29 | 30 | 31 | class Region(Type): 32 | _REQUIRED = {"key", "title", "inherited"} 33 | 34 | def __init__(self, *, key, **kwargs): 35 | kwargs.setdefault("inherited", False) 36 | if key == "regions": 37 | raise ImproperlyConfigured("'regions' cannot be used as a Region key.") 38 | elif key.startswith("_"): 39 | raise ImproperlyConfigured(f"Region key {key!r} cannot start with '_'.") 40 | elif not key.isidentifier(): 41 | raise ImproperlyConfigured(f"Region key {key!r} is no identifier.") 42 | super().__init__(key=key, **kwargs) 43 | 44 | 45 | class Template(Type): 46 | _REQUIRED = {"key", "template_name", "title", "regions"} 47 | 48 | def __init__(self, **kwargs): 49 | super().__init__(**kwargs) 50 | warnings.warn( 51 | "Template is deprecated, use feincms3's TemplateType instead.", 52 | DeprecationWarning, 53 | stacklevel=2, 54 | ) 55 | 56 | 57 | def create_plugin_base(content_base): 58 | """ 59 | Create and return a base class for plugins 60 | 61 | The base class contains a ``parent`` foreign key and the required 62 | ``region`` and ``ordering`` fields. 63 | """ 64 | 65 | class PluginBase(models.Model): 66 | parent = models.ForeignKey( 67 | content_base, 68 | related_name="%(app_label)s_%(class)s_set", 69 | on_delete=models.CASCADE, 70 | ) 71 | region = models.CharField(max_length=255) 72 | ordering = models.IntegerField(default=0) 73 | 74 | class Meta: 75 | abstract = True 76 | app_label = content_base._meta.app_label 77 | ordering = ["ordering"] 78 | 79 | def __str__(self): 80 | return f"{self._meta.label}" # pragma: no cover 81 | 82 | @classmethod 83 | def get_queryset(cls): 84 | return cls.objects.all() 85 | 86 | return PluginBase 87 | -------------------------------------------------------------------------------- /content_editor/static/content_editor/content_editor.css: -------------------------------------------------------------------------------- 1 | html { 2 | overflow-y: scroll; 3 | overflow-x: hidden; 4 | } 5 | 6 | .clearfix::after { 7 | content: ""; 8 | display: table; 9 | clear: both; 10 | } 11 | 12 | .tabs.regions { 13 | display: flex; 14 | } 15 | 16 | .machine-collapse { 17 | order: 1; 18 | margin-left: auto; 19 | } 20 | 21 | .tabs > .tab { 22 | text-transform: none; 23 | letter-spacing: 0; 24 | float: left; 25 | padding: 10px 15px; 26 | margin: 0 4px 0 0; 27 | cursor: pointer; 28 | font-weight: bold; 29 | font-size: 13px; 30 | color: var(--body-quiet-color, #666); 31 | background: var(--darkened-bg, #f8f8f8); 32 | border: 1px solid var(--hairline-color, #e8e8e8); 33 | border-bottom: none; 34 | user-select: none; 35 | transition: 0.15s background, 0.15s color; 36 | } 37 | 38 | .tabs > .active { 39 | background: var(--button-bg, #79aec8); 40 | color: white; 41 | } 42 | 43 | .tabs > .active:hover { 44 | background: var(--button-hover-bg, #609ab6); 45 | } 46 | 47 | .tabs > [data-region^="_unknown_"], 48 | .tabs > .has-error { 49 | border-color: var(--error-fg, #ba2121); 50 | color: var(--error-fg, #ba2121); 51 | background: var(--darkened-bg, #f8f8f8); 52 | } 53 | 54 | @media (max-width: 767px) { 55 | .tabbed-modules .form-row { 56 | padding-left: 10px; 57 | padding-right: 10px; 58 | } 59 | } 60 | 61 | .order-machine-wrapper { 62 | clear: both; 63 | position: relative; 64 | } 65 | 66 | .order-machine { 67 | padding: 10px 10px 20px 30px; 68 | border: 1px solid var(--hairline-color, #e8e8e8); 69 | position: relative; 70 | 71 | display: flex; 72 | flex-flow: column nowrap; 73 | 74 | overflow: hidden; 75 | } 76 | 77 | .order-machine-section { 78 | position: absolute; 79 | background: rgba(0 0 0 / 0.1); 80 | pointer-events: none; 81 | } 82 | 83 | .order-machine .inline-related { 84 | border: 1px solid var(--hairline-color, #e8e8e8); 85 | border-bottom: 0; 86 | margin-top: 15px; 87 | } 88 | 89 | .order-machine .inline-related > h3 { 90 | border-top: none; 91 | border-bottom: none; 92 | font-size: 13px; 93 | font-weight: normal; 94 | height: 16px; 95 | padding: 7px; 96 | margin: 0; 97 | background-color: var(--darkened-bg, #f8f8f8); 98 | transition: 0.15s background, 0.15s color; 99 | 100 | white-space: nowrap; 101 | overflow: hidden; 102 | text-overflow: ellipsis; 103 | 104 | display: flex; 105 | flex-flow: row nowrap; 106 | gap: 2px; 107 | } 108 | 109 | h3[draggable] { 110 | cursor: move; 111 | } 112 | 113 | .order-machine h3 .material-icons { 114 | position: relative; 115 | top: -4px; 116 | left: -2px; 117 | width: 24px; 118 | } 119 | 120 | .order-machine .inline-related > h3 > b, 121 | .order-machine h3 .inline_label { 122 | overflow: hidden; 123 | white-space: nowrap; 124 | text-overflow: ellipsis; 125 | } 126 | 127 | .order-machine .inline-related > h3 > b { 128 | flex: 0 1 auto; 129 | } 130 | 131 | .order-machine h3 .inline_label { 132 | flex: 1 1 0px; 133 | } 134 | 135 | /* Replace the broken content type counter for new contents with a "new" label */ 136 | .order-machine .last-related .inline_label { 137 | content: "new"; 138 | } 139 | 140 | .order-machine .inline-related { 141 | transition: border 0.15s; 142 | display: grid; 143 | grid-template-rows: min-content 1fr; 144 | transition: grid-template-rows 0.15s ease-out; 145 | } 146 | 147 | .order-machine .inline-related fieldset { 148 | position: relative; 149 | overflow: hidden; 150 | } 151 | 152 | .order-machine .inline-related.selected > h3 { 153 | color: white; 154 | background-color: var(--button-bg, #79aec8); 155 | } 156 | 157 | .order-machine .inline-related.empty-form { 158 | display: none; /* Override display: grid; above */ 159 | } 160 | 161 | .order-machine .inline-related.for-deletion, 162 | .order-machine .inline-related.collapsed { 163 | grid-template-rows: min-content 0fr; 164 | border-bottom: 1px solid var(--hairline-color); 165 | } 166 | 167 | .order-machine .inline-related.for-deletion > fieldset:nth-child(n + 3), 168 | .order-machine .inline-related.collapsed > fieldset:nth-child(n + 3) { 169 | /* grid-template-rows animates the first fieldset, all other fieldsets jump out of existence */ 170 | display: none; 171 | } 172 | 173 | .order-machine .inline-related.for-deletion > h3::after { 174 | content: ""; 175 | position: absolute; 176 | top: 0; 177 | right: 0; 178 | bottom: 0; 179 | left: 0; 180 | background: var(--error-fg, #ba2121); 181 | opacity: 0.3; 182 | pointer-events: none; 183 | } 184 | 185 | .machine-message { 186 | margin: 1.5em 1em 1em; 187 | text-align: center; 188 | } 189 | 190 | .plugin-buttons { 191 | border: 1px solid var(--hairline-color, #e8e8e8); 192 | background: var(--darkened-bg, #f8f8f8); 193 | position: absolute; 194 | z-index: 1982; 195 | top: 0; 196 | left: 0; 197 | box-shadow: 0 0 3px 0 rgba(0, 0, 50, 0.3); 198 | 199 | padding: 10px 20px 10px 10px; 200 | 201 | --_v: 8; 202 | display: grid; 203 | column-gap: 10px; 204 | grid-auto-flow: column; 205 | grid-template-rows: repeat(var(--_v), min-content); 206 | 207 | opacity: 0; 208 | visibility: none; 209 | pointer-events: none; 210 | } 211 | 212 | @media screen and (max-width: 767px) { 213 | .plugin-buttons { 214 | display: block; 215 | } 216 | } 217 | 218 | .plugin-buttons-visible .plugin-buttons { 219 | opacity: 1; 220 | visibility: visible; 221 | pointer-events: all; 222 | } 223 | 224 | .plugin-button { 225 | margin: 4px 4px; 226 | padding: 4px 4px; 227 | cursor: pointer; 228 | display: flex; 229 | align-items: center; 230 | border-radius: 4px; 231 | user-select: none; 232 | break-inside: avoid; 233 | } 234 | 235 | .plugin-button-icon { 236 | width: 24px; 237 | display: grid; 238 | place-items: center; 239 | margin-right: 0.75rem; 240 | } 241 | 242 | .collapse-items { 243 | cursor: pointer; 244 | } 245 | 246 | .collapse-items input { 247 | display: none; 248 | } 249 | 250 | .collapse-items .uncollapse-all { 251 | display: none; 252 | } 253 | .collapse-items input:checked ~ .uncollapse-all { 254 | display: flex; 255 | } 256 | .collapse-items input:checked ~ .collapse-all { 257 | display: none; 258 | } 259 | 260 | .inline_move_to_region { 261 | border-color: var(--hairline-color, #e8e8e8); 262 | font-size: 11px; 263 | height: 22px; 264 | margin: -2px 8px -2px auto; 265 | padding: 0px 1px; 266 | } 267 | 268 | /* tabbed_fieldsets.js support */ 269 | #tabbed .tabs { 270 | border-bottom: 1px solid var(--hairline-color, #e8e8e8); 271 | } 272 | 273 | #tabbed .modules { 274 | margin-bottom: 30px; 275 | } 276 | 277 | #tabbed .module { 278 | border: 1px solid var(--hairline-color, #e8e8e8); 279 | border-top: none; 280 | margin-bottom: 0; 281 | } 282 | 283 | #tabbed .form-row:last-child { 284 | border: none; 285 | } 286 | 287 | .content-editor-invisible { 288 | /* We can't simply use display: none. Some admin widgets need to know 289 | * their dimensions, so we can't have that -- use an alternative way 290 | * to hide the modules. */ 291 | visibility: hidden !important; 292 | height: 0 !important; 293 | border: none !important; 294 | padding: 0 !important; 295 | margin: 0 !important; 296 | } 297 | 298 | .content-editor-hide { 299 | display: none !important; 300 | } 301 | 302 | /* Used when dragging */ 303 | .placeholder { 304 | height: 34px; 305 | margin: 10px 0 0 0; 306 | border: none; 307 | opacity: 0.3; 308 | background: #79aec8; 309 | } 310 | 311 | .order-machine .inline-related { 312 | position: relative; 313 | } 314 | 315 | .order-machine-help { 316 | font-size: 11px; 317 | margin-top: -28px; 318 | margin-bottom: 30px; 319 | } 320 | 321 | .fs-dragging { 322 | opacity: 0.5; 323 | } 324 | 325 | .fs-dragover::before { 326 | content: " "; 327 | display: block; 328 | position: absolute; 329 | left: 0; 330 | right: 0; 331 | top: -8px; 332 | height: 4px; 333 | background: #79aec8; 334 | } 335 | .fs-dragover--after::before { 336 | top: auto; 337 | bottom: -8px; 338 | } 339 | 340 | .fs-dragover::after { 341 | /* Cover fieldset with an overlay so that widgets do not swallow events */ 342 | content: ""; 343 | position: absolute; 344 | top: 0; 345 | right: 0; 346 | bottom: 0; 347 | left: 0; 348 | z-index: 1; 349 | } 350 | 351 | .order-machine-insert-target { 352 | position: absolute; 353 | left: -28px; 354 | top: -20px; 355 | font-size: 1.25rem; 356 | width: 1.25em; 357 | height: 1.25em; 358 | line-height: 1.25em; 359 | border-radius: 99px; 360 | background: var(--button-bg, #79aec8); 361 | color: var(--button-fg, #fff); 362 | box-shadow: 0 0 3px 1px var(--button-fg); 363 | display: grid; 364 | place-items: center; 365 | cursor: pointer; 366 | opacity: 0.5; 367 | } 368 | .order-machine-insert-target.last { 369 | top: auto; 370 | bottom: 4px; 371 | left: 3px; 372 | z-index: 1; 373 | } 374 | .order-machine-insert-target:hover, 375 | .order-machine-insert-target.selected { 376 | opacity: 1; 377 | background: var(--button-hover-bg, #609ab6); 378 | } 379 | .order-machine-insert-target::before { 380 | content: "+"; 381 | font-weight: bold; 382 | } 383 | 384 | .order-machine-hide-insert-targets .order-machine-insert-target { 385 | display: none; 386 | } 387 | 388 | @media screen and (max-width: 767px) { 389 | /* CSS fix for Django's responsive admin interface (shows fields below the 390 | * 767px breakpoint despite them being .hidden */ 391 | html .aligned .form-row.hidden { 392 | display: none; 393 | } 394 | 395 | html .aligned .form-row > div { 396 | width: calc(100vw - 90px); 397 | } 398 | 399 | html .order-machine .form-row { 400 | padding: 10px; 401 | } 402 | 403 | .order-machine-wrapper { 404 | grid-template-columns: 1fr; 405 | grid-template-rows: min-content min-content; 406 | } 407 | } 408 | 409 | @media screen and (min-width: 768px) { 410 | .submit-row { 411 | position: sticky; 412 | bottom: -20px; 413 | } 414 | } 415 | 416 | .order-machine-readonly .plugin-buttons + p, 417 | .order-machine-readonly .order-machine-insert-target, 418 | .order-machine-readonly + .order-machine-help, 419 | .order-machine-readonly .inline-related > h3[draggable]::before { 420 | display: none; 421 | } 422 | 423 | /* =====| OVERRIDES |===== */ 424 | 425 | /* JAZZMIN start */ 426 | 427 | #jazzy-navbar ~ .content-wrapper .order-machine { 428 | padding-top: 12px; 429 | } 430 | 431 | #jazzy-navbar 432 | ~ .content-wrapper 433 | .order-machine-wrapper 434 | .card-header 435 | > .card-title[draggable]::before { 436 | content: "drag_indicator"; 437 | font-family: "Material Icons"; 438 | font-size: 24px; 439 | position: relative; 440 | top: 7px; 441 | left: -2px; 442 | } 443 | 444 | #jazzy-navbar ~ .content-wrapper .card .card-body > h6 { 445 | display: none; 446 | } 447 | 448 | #jazzy-navbar ~ .content-wrapper .card .card-body .tabs > .tab { 449 | border-radius: 4px 4px 0 0; 450 | background: inherit; 451 | color: inherit; 452 | } 453 | 454 | #jazzy-navbar ~ .content-wrapper .card .card-body .tabs > .active { 455 | background: rgba(200, 200, 200, 0.2); 456 | } 457 | 458 | #jazzy-navbar ~ .content-wrapper .card .card-body .tabs > .active:hover { 459 | background: rgba(200, 200, 200, 0.5); 460 | } 461 | 462 | #jazzy-navbar 463 | ~ .content-wrapper 464 | .order-machine-wrapper 465 | .card-header 466 | > .card-title[draggable] { 467 | margin-bottom: 9px; 468 | } 469 | 470 | #jazzy-navbar 471 | ~ .content-wrapper 472 | .order-machine-wrapper 473 | .card-header 474 | > .card-title[draggable] 475 | + .card-tools.delete { 476 | margin-top: 7px; 477 | margin-right: 2px; 478 | } 479 | 480 | #jazzy-navbar 481 | ~ .content-wrapper 482 | .order-machine-wrapper 483 | .card-body 484 | div[id*="cke_id_"] { 485 | margin-left: 0; 486 | width: 100% !important; 487 | } 488 | 489 | #jazzy-navbar ~ .content-wrapper .order-machine-wrapper .card-header { 490 | padding: 0 1.25rem; 491 | } 492 | 493 | #jazzy-navbar ~ .content-wrapper .order-machine .inline-related { 494 | border: 0; 495 | padding: 5px; 496 | margin-top: 0; 497 | } 498 | 499 | #jazzy-navbar ~ .content-wrapper .order-machine-help { 500 | margin-left: 25px; 501 | } 502 | 503 | #jazzy-navbar ~ .content-wrapper .order-machine-wrapper.collapsed { 504 | margin-right: 34px; 505 | } 506 | 507 | /* JAZZMIN end */ 508 | -------------------------------------------------------------------------------- /content_editor/static/content_editor/material-icons.css: -------------------------------------------------------------------------------- 1 | /* 2 | npx google-font-downloader "https://fonts.googleapis.com/icon?family=Material+Icons" 3 | Current version: v142 4 | */ 5 | 6 | /* fallback */ 7 | @font-face { 8 | font-family: "Material Icons"; 9 | font-style: normal; 10 | font-weight: 400; 11 | src: url(./material-icons.woff2) format("woff2"); 12 | } 13 | 14 | .material-icons { 15 | font-family: "Material Icons"; 16 | font-weight: normal; 17 | font-style: normal; 18 | font-size: 24px; 19 | line-height: 1; 20 | letter-spacing: normal; 21 | text-transform: none; 22 | display: inline-block; 23 | white-space: nowrap; 24 | word-wrap: normal; 25 | direction: ltr; 26 | -webkit-font-feature-settings: "liga"; 27 | -webkit-font-smoothing: antialiased; 28 | } 29 | -------------------------------------------------------------------------------- /content_editor/static/content_editor/material-icons.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/feincms/django-content-editor/75f88363c3d4b80c1dcfc7a57af3efa3733e3998/content_editor/static/content_editor/material-icons.woff2 -------------------------------------------------------------------------------- /content_editor/static/content_editor/save_shortcut.js: -------------------------------------------------------------------------------- 1 | /* global django */ 2 | django.jQuery(($) => { 3 | $(document).keydown(function handleKeys(event) { 4 | if (event.which === 83 && (event.metaKey || event.ctrlKey)) { 5 | $("form input[name=_continue]").click() 6 | return false 7 | } 8 | }) 9 | }) 10 | -------------------------------------------------------------------------------- /content_editor/static/content_editor/tabbed_fieldsets.js: -------------------------------------------------------------------------------- 1 | /* global django */ 2 | django.jQuery(($) => { 3 | const tabbed = $(".tabbed") 4 | if (tabbed.length >= 1) { 5 | let anchor = tabbed.eq(0) 6 | /* Break out of the .inline-related containment, avoids ugly h3's */ 7 | if (anchor.parents(".inline-related").length) { 8 | anchor = anchor.parents(".inline-related") 9 | } 10 | anchor.before( 11 | '
' + 12 | '
' + 13 | '
' + 14 | "
", 15 | ) 16 | 17 | const $tabs = $("#tabbed > .tabs") 18 | const $modules = $("#tabbed > .modules") 19 | let errorIndex = -1 20 | let uncollapseIndex = -1 21 | 22 | tabbed.each(function createTabs(index) { 23 | const $old = $(this) 24 | const $title = $old.children("h2") 25 | 26 | if ($old.find(".errorlist").length) { 27 | $title.addClass("has-error") 28 | errorIndex = errorIndex < 0 ? index : errorIndex 29 | } 30 | if ($old.is(".uncollapse")) { 31 | uncollapseIndex = uncollapseIndex < 0 ? index : uncollapseIndex 32 | } 33 | 34 | $title.attr("data-index", index) 35 | $title.addClass("tab") 36 | $tabs.append($title) 37 | 38 | $old.addClass("content-editor-invisible") 39 | 40 | $modules.append($old) 41 | }) 42 | 43 | $tabs.on("click", "[data-index]", function () { 44 | const $tab = $(this) 45 | if ($tab.hasClass("active")) { 46 | $tab.removeClass("active") 47 | $modules.children().addClass("content-editor-invisible") 48 | } else { 49 | $tabs.find(".active").removeClass("active") 50 | $tab.addClass("active") 51 | $modules 52 | .children() 53 | .addClass("content-editor-invisible") 54 | .eq($tab.data("index")) 55 | .removeClass("content-editor-invisible") 56 | } 57 | }) 58 | 59 | if (errorIndex >= 0 || uncollapseIndex >= 0) { 60 | const index = errorIndex >= 0 ? errorIndex : uncollapseIndex 61 | $tabs.find(`[data-index=${index}]`).click() 62 | } 63 | } 64 | }) 65 | -------------------------------------------------------------------------------- /docs/Makefile: -------------------------------------------------------------------------------- 1 | # Minimal makefile for Sphinx documentation 2 | # 3 | 4 | # You can set these variables from the command line. 5 | SPHINXOPTS = 6 | SPHINXBUILD = python -msphinx 7 | SPHINXPROJ = test 8 | SOURCEDIR = . 9 | BUILDDIR = build 10 | 11 | # Put it first so that "make" without argument is like "make help". 12 | help: 13 | @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) 14 | 15 | .PHONY: help Makefile 16 | 17 | # Catch-all target: route all unknown targets to Sphinx using the new 18 | # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). 19 | %: Makefile 20 | @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) 21 | -------------------------------------------------------------------------------- /docs/_static/django-content-editor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/feincms/django-content-editor/75f88363c3d4b80c1dcfc7a57af3efa3733e3998/docs/_static/django-content-editor.png -------------------------------------------------------------------------------- /docs/conf.py: -------------------------------------------------------------------------------- 1 | import os 2 | import re 3 | import subprocess 4 | import sys 5 | 6 | 7 | sys.path.append(os.path.abspath("..")) 8 | 9 | project = "django-content-editor" 10 | author = "Feinheit AG" 11 | copyright = "2016-2017," + author # noqa: A001 12 | version = __import__("content_editor").__version__ 13 | release = subprocess.check_output( 14 | "git fetch --tags; git describe", shell=True, text=True 15 | ).strip() 16 | language = "en" 17 | 18 | ####################################### 19 | project_slug = re.sub(r"[^a-z]+", "", project) 20 | 21 | extensions = [ 22 | # 'sphinx.ext.autodoc', 23 | # 'sphinx.ext.viewcode', 24 | ] 25 | templates_path = ["_templates"] 26 | source_suffix = ".rst" 27 | master_doc = "index" 28 | 29 | exclude_patterns = ["build", "Thumbs.db", ".DS_Store"] 30 | pygments_style = "sphinx" 31 | todo_include_todos = False 32 | 33 | html_theme = "alabaster" 34 | html_static_path = ["_static"] 35 | htmlhelp_basename = project_slug + "doc" 36 | 37 | latex_elements = { 38 | "papersize": "a4", 39 | } 40 | latex_documents = [ 41 | ( 42 | master_doc, 43 | project_slug + ".tex", 44 | project + " Documentation", 45 | author, 46 | "manual", 47 | ) 48 | ] 49 | man_pages = [ 50 | ( 51 | master_doc, 52 | project_slug, 53 | project + " Documentation", 54 | [author], 55 | 1, 56 | ) 57 | ] 58 | texinfo_documents = [ 59 | ( 60 | master_doc, 61 | project_slug, 62 | project + " Documentation", 63 | author, 64 | project_slug, 65 | "", # Description 66 | "Miscellaneous", 67 | ) 68 | ] 69 | -------------------------------------------------------------------------------- /docs/make.bat: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | 3 | pushd %~dp0 4 | 5 | REM Command file for Sphinx documentation 6 | 7 | if "%SPHINXBUILD%" == "" ( 8 | set SPHINXBUILD=python -msphinx 9 | ) 10 | set SOURCEDIR=. 11 | set BUILDDIR=build 12 | set SPHINXPROJ=test 13 | 14 | if "%1" == "" goto help 15 | 16 | %SPHINXBUILD% >NUL 2>NUL 17 | if errorlevel 9009 ( 18 | echo. 19 | echo.The Sphinx module was not found. Make sure you have Sphinx installed, 20 | echo.then set the SPHINXBUILD environment variable to point to the full 21 | echo.path of the 'sphinx-build' executable. Alternatively you may add the 22 | echo.Sphinx directory to PATH. 23 | echo. 24 | echo.If you don't have Sphinx installed, grab it from 25 | echo.http://sphinx-doc.org/ 26 | exit /b 1 27 | ) 28 | 29 | %SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% 30 | goto end 31 | 32 | :help 33 | %SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% 34 | 35 | :end 36 | popd 37 | -------------------------------------------------------------------------------- /pyproject.toml: -------------------------------------------------------------------------------- 1 | [build-system] 2 | build-backend = "hatchling.build" 3 | requires = [ 4 | "hatchling", 5 | ] 6 | 7 | [project] 8 | name = "django-content-editor" 9 | description = "Editing structured content" 10 | readme = "README.rst" 11 | license = { text = "BSD-3-Clause" } 12 | authors = [ 13 | { name = "Matthias Kestenholz", email = "mk@feinheit.ch" }, 14 | ] 15 | requires-python = ">=3.10" 16 | classifiers = [ 17 | "Development Status :: 5 - Production/Stable", 18 | "Environment :: Web Environment", 19 | "Framework :: Django", 20 | "Intended Audience :: Developers", 21 | "License :: OSI Approved :: BSD License", 22 | "Operating System :: OS Independent", 23 | "Programming Language :: Python", 24 | "Programming Language :: Python :: 3 :: Only", 25 | "Programming Language :: Python :: 3.10", 26 | "Programming Language :: Python :: 3.11", 27 | "Programming Language :: Python :: 3.12", 28 | "Programming Language :: Python :: 3.13", 29 | "Topic :: Internet :: WWW/HTTP :: Dynamic Content", 30 | "Topic :: Software Development", 31 | "Topic :: Software Development :: Libraries :: Application Frameworks", 32 | ] 33 | dynamic = [ 34 | "version", 35 | ] 36 | dependencies = [ 37 | "django>=3.2", 38 | "django-js-asset>=3", 39 | ] 40 | optional-dependencies.tests = [ 41 | "coverage", 42 | "pytest", 43 | "pytest-asyncio", 44 | "pytest-cov", 45 | "pytest-django", 46 | "pytest-playwright", 47 | ] 48 | urls.Homepage = "https://github.com/matthiask/django-content-editor/" 49 | 50 | [tool.hatch.build] 51 | include = [ 52 | "content_editor/", 53 | ] 54 | 55 | [tool.hatch.version] 56 | path = "content_editor/__init__.py" 57 | 58 | [tool.ruff] 59 | target-version = "py310" 60 | 61 | fix = true 62 | show-fixes = true 63 | lint.extend-select = [ 64 | # flake8-builtins 65 | "A", 66 | # flake8-bugbear 67 | "B", 68 | # flake8-comprehensions 69 | "C4", 70 | # mmcabe 71 | "C90", 72 | # flake8-django 73 | "DJ", 74 | "E", 75 | # pyflakes, pycodestyle 76 | "F", 77 | # flake8-boolean-trap 78 | "FBT", 79 | # flake8-logging-format 80 | "G", 81 | # isort 82 | "I", 83 | # flake8-gettext 84 | "INT", 85 | # pep8-naming 86 | "N", 87 | # pygrep-hooks 88 | "PGH", 89 | # flake8-pie 90 | "PIE", 91 | "PLC", 92 | # pylint 93 | "PLE", 94 | "PLW", 95 | # unused noqa 96 | "RUF100", 97 | # pyupgrade 98 | "UP", 99 | "W", 100 | # flake8-2020 101 | "YTT", 102 | ] 103 | lint.extend-ignore = [ 104 | # Allow zip() without strict= 105 | "B905", 106 | # No line length errors 107 | "E501", 108 | ] 109 | lint.per-file-ignores."*/migrat*/*" = [ 110 | # Allow using PascalCase model names in migrations 111 | "N806", 112 | # Ignore the fact that migration files are invalid module names 113 | "N999", 114 | ] 115 | lint.isort.combine-as-imports = true 116 | lint.isort.lines-after-imports = 2 117 | lint.mccabe.max-complexity = 15 118 | 119 | [tool.pytest.ini_options] 120 | DJANGO_SETTINGS_MODULE = "testapp.settings" 121 | python_files = [ "tests.py", "test_*.py" ] 122 | addopts = "--strict-markers" 123 | asyncio_mode = "strict" 124 | asyncio_default_fixture_loop_scope = "function" 125 | -------------------------------------------------------------------------------- /tests/.gitignore: -------------------------------------------------------------------------------- 1 | /.coverage 2 | /htmlcov 3 | -------------------------------------------------------------------------------- /tests/README_integration_tests.md: -------------------------------------------------------------------------------- 1 | # Integration Tests with Playwright 2 | 3 | This directory contains integration tests for django-content-editor using Playwright. 4 | 5 | ## Overview 6 | 7 | The integration tests use Playwright to test the content editor's functionality in a real browser environment, interacting with the actual UI components of the Django admin interface. 8 | 9 | ## Running Tests 10 | 11 | To run the integration tests: 12 | 13 | ```bash 14 | # Run with tox 15 | tox -e py313-dj52-playwright 16 | 17 | # Run tests directly (after installing dependencies) 18 | cd tests 19 | python -m pytest testapp/test_playwright.py -v 20 | ``` 21 | 22 | ## Test Structure 23 | 24 | The tests are organized as follows: 25 | 26 | - `test_playwright.py`: Main test file containing test cases for various content editor features 27 | - `test_playwright_helpers.py`: Helper functions for common operations like login and creating articles 28 | - `conftest.py`: Pytest configuration and shared fixtures 29 | 30 | ## Test Coverage 31 | 32 | The integration tests cover the following functionality: 33 | 34 | 1. **Basic Content Editor Loading**: Verifies that the content editor loads correctly in the admin interface 35 | 2. **Adding Content**: Tests adding rich text and other content types to an article 36 | 3. **Drag-and-Drop Ordering**: Tests the drag-and-drop functionality for reordering content items 37 | 4. **Tabbed Fieldsets**: Tests the tabbed interface if present 38 | 5. **Multiple Content Types**: Tests adding different types of content to an article 39 | 6. **Save Shortcut**: Tests the Ctrl+S keyboard shortcut for saving changes 40 | 41 | ## Troubleshooting 42 | 43 | If you encounter issues with the tests: 44 | 45 | - **Browser not found**: Make sure Playwright browsers are installed (`playwright install chromium`) 46 | - **Element not found**: The selectors may need adjustment based on the actual DOM structure 47 | - **Timeouts**: Increase timeout values if operations take longer than expected 48 | 49 | ## Extending the Tests 50 | 51 | To add new tests: 52 | 53 | 1. Add new test functions to `test_playwright.py` 54 | 2. Use the helper functions from `test_playwright_helpers.py` for common operations 55 | 3. If needed, add new helper functions for specific interactions 56 | -------------------------------------------------------------------------------- /tests/conftest.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | import pytest 4 | from django.contrib.auth.models import User 5 | 6 | 7 | # Set DJANGO_ALLOW_ASYNC_UNSAFE 8 | os.environ["DJANGO_ALLOW_ASYNC_UNSAFE"] = "true" 9 | 10 | # Default browser to run tests with 11 | os.environ.setdefault("PLAYWRIGHT_BROWSER_NAME", "chromium") 12 | 13 | 14 | @pytest.fixture 15 | def user(): 16 | """Create a test superuser.""" 17 | u = User.objects.create( 18 | username="test", is_active=True, is_staff=True, is_superuser=True 19 | ) 20 | u.set_password("test") 21 | u.save() 22 | return u 23 | 24 | 25 | @pytest.fixture 26 | def client(client, user): 27 | """Login the test client.""" 28 | client.login(username="test", password="test") 29 | return client 30 | 31 | 32 | @pytest.fixture(scope="session") 33 | def browser_type_launch_args(): 34 | """Configure browser launch arguments.""" 35 | return { 36 | "headless": True, 37 | "args": [ 38 | "--no-sandbox", 39 | "--disable-gpu", 40 | "--disable-dev-shm-usage", 41 | "--disable-setuid-sandbox", 42 | ], 43 | } 44 | 45 | 46 | @pytest.fixture(scope="function") 47 | def browser_context_args(browser_context_args): 48 | """Modify browser context arguments for tracing.""" 49 | return { 50 | **browser_context_args, 51 | "record_video_dir": os.path.join(os.getcwd(), "test-results/videos/"), 52 | "record_har_path": os.path.join(os.getcwd(), "test-results/har/", "test.har"), 53 | "ignore_https_errors": True, 54 | "java_script_enabled": True, 55 | } 56 | 57 | 58 | @pytest.fixture 59 | def page(page): 60 | """Add console and network error logging to the page.""" 61 | # Capture console logs 62 | page.on("console", lambda msg: print(f"BROWSER CONSOLE {msg.type}: {msg.text}")) 63 | 64 | # Capture JavaScript errors 65 | page.on("pageerror", lambda err: print(f"BROWSER JS ERROR: {err}")) 66 | 67 | # Capture request failures 68 | page.on( 69 | "requestfailed", 70 | lambda request: print(f"NETWORK ERROR: {request.url} {request.failure}"), 71 | ) 72 | 73 | return page 74 | 75 | 76 | @pytest.hookimpl(hookwrapper=True) 77 | def pytest_runtest_makereport(item, call): 78 | """Handle reporting and artifact generation.""" 79 | outcome = yield 80 | report = outcome.get_result() 81 | 82 | # Take screenshot of failed tests 83 | if report.when == "call" and report.failed: 84 | try: 85 | page = item.funcargs["page"] 86 | # Take screenshot and save it with test name 87 | screenshot_dir = os.path.join(os.getcwd(), "test-results/screenshots/") 88 | os.makedirs(screenshot_dir, exist_ok=True) 89 | screenshot_path = os.path.join(screenshot_dir, f"{item.name}_failed.png") 90 | page.screenshot(path=screenshot_path) 91 | # Save page HTML 92 | html_path = os.path.join(screenshot_dir, f"{item.name}_failed.html") 93 | with open(html_path, "w", encoding="utf-8") as f: 94 | f.write(page.content()) 95 | 96 | # Add to report 97 | report.extra = [ 98 | { 99 | "name": "Screenshot", 100 | "content": screenshot_path, 101 | "mime_type": "image/png", 102 | }, 103 | {"name": "HTML", "content": html_path, "mime_type": "text/html"}, 104 | ] 105 | except Exception as e: 106 | print(f"Failed to capture artifacts: {e}") 107 | -------------------------------------------------------------------------------- /tests/cov.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | venv/bin/coverage run --branch --include="*feincms3/*" --omit="*tests*" ./manage.py test -v 2 testapp 3 | venv/bin/coverage html 4 | -------------------------------------------------------------------------------- /tests/manage.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | import os 3 | import sys 4 | from os.path import abspath, dirname 5 | 6 | 7 | if __name__ == "__main__": 8 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "testapp.settings") 9 | 10 | sys.path.insert(0, dirname(dirname(abspath(__file__)))) 11 | 12 | from django.core.management import execute_from_command_line 13 | 14 | execute_from_command_line(sys.argv) 15 | -------------------------------------------------------------------------------- /tests/requirements.txt: -------------------------------------------------------------------------------- 1 | Django 2 | django-ckeditor 3 | django-content-editor 4 | django-cte-forest 5 | django-versatileimagefield 6 | html-sanitizer>=1.1.1 7 | requests 8 | psycopg2 9 | pytz 10 | coverage 11 | -------------------------------------------------------------------------------- /tests/testapp/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/feincms/django-content-editor/75f88363c3d4b80c1dcfc7a57af3efa3733e3998/tests/testapp/__init__.py -------------------------------------------------------------------------------- /tests/testapp/admin.py: -------------------------------------------------------------------------------- 1 | from django import forms 2 | from django.contrib import admin 3 | from django.db import models 4 | 5 | from content_editor.admin import ( 6 | ContentEditor, 7 | ContentEditorInline, 8 | allow_regions, 9 | deny_regions, 10 | ) 11 | from testapp.models import Article, CloseSection, Download, RichText, Section, Thing 12 | 13 | 14 | class RichTextarea(forms.Textarea): 15 | def __init__(self, attrs=None): 16 | default_attrs = {"class": "richtext"} 17 | if attrs: # pragma: no cover 18 | default_attrs.update(attrs) 19 | super().__init__(default_attrs) 20 | 21 | 22 | class RichTextInline(ContentEditorInline): 23 | model = RichText 24 | formfield_overrides = {models.TextField: {"widget": RichTextarea}} 25 | fieldsets = [(None, {"fields": ("text", "region", "ordering")})] 26 | regions = allow_regions({"main"}) 27 | 28 | 29 | class ThingInline(admin.TabularInline): 30 | model = Thing 31 | 32 | 33 | class SectionInline(ContentEditorInline): 34 | model = Section 35 | sections = 1 36 | 37 | 38 | class CloseSectionInline(ContentEditorInline): 39 | model = CloseSection 40 | sections = -1 41 | 42 | 43 | admin.site.register( 44 | Article, 45 | ContentEditor, 46 | inlines=[ 47 | RichTextInline, 48 | ContentEditorInline.create(model=Download, regions=deny_regions({"sidebar"})), 49 | ThingInline, 50 | SectionInline, 51 | CloseSectionInline, 52 | ], 53 | ) 54 | -------------------------------------------------------------------------------- /tests/testapp/models.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | from django.urls import reverse 3 | 4 | from content_editor.models import Region, Template, create_plugin_base 5 | 6 | 7 | class AbstractRichText(models.Model): 8 | text = models.TextField(blank=True) 9 | 10 | class Meta: 11 | abstract = True 12 | verbose_name = "rich text" 13 | 14 | def __str__(self): 15 | return self.text 16 | 17 | 18 | class Article(models.Model): 19 | title = models.CharField(max_length=200) 20 | 21 | regions = [ 22 | Region(key="main", title="main region"), 23 | Region(key="sidebar", title="sidebar region"), 24 | ] 25 | 26 | def __str__(self): 27 | return self.title 28 | 29 | def get_absolute_url(self): 30 | return reverse("article_detail", kwargs={"pk": self.pk}) 31 | 32 | 33 | ArticlePlugin = create_plugin_base(Article) 34 | 35 | 36 | class RichText(AbstractRichText, ArticlePlugin): 37 | pass 38 | 39 | 40 | class Download(ArticlePlugin): 41 | file = models.TextField() # FileField, but charfield is easier to test. 42 | 43 | class Meta: 44 | verbose_name = "download" 45 | verbose_name_plural = "downloads" 46 | 47 | def __str__(self): 48 | return self.file.name 49 | 50 | 51 | class Section(ArticlePlugin): 52 | pass 53 | 54 | 55 | class CloseSection(ArticlePlugin): 56 | pass 57 | 58 | 59 | class Thing(models.Model): 60 | """Added as inline to article admin to check whether non-ContentEditor 61 | inlines still work""" 62 | 63 | article = models.ForeignKey(Article, on_delete=models.CASCADE) 64 | 65 | def __str__(self): 66 | return "" 67 | 68 | 69 | class Page(models.Model): 70 | title = models.CharField(max_length=200) 71 | parent = models.ForeignKey( 72 | "self", related_name="children", blank=True, null=True, on_delete=models.CASCADE 73 | ) 74 | 75 | template = Template( 76 | key="test", 77 | title="test", 78 | template_name="test.html", 79 | regions=[ 80 | Region(key="main", title="main region"), 81 | Region(key="sidebar", title="sidebar region", inherited=True), 82 | ], 83 | ) 84 | 85 | class Meta: 86 | verbose_name = "page" 87 | verbose_name_plural = "pages" 88 | 89 | def __str__(self): 90 | return self.title 91 | 92 | def get_absolute_url(self): 93 | return reverse("page_detail", kwargs={"pk": self.pk}) 94 | 95 | @property 96 | def regions(self): 97 | return self.template.regions 98 | 99 | 100 | PagePlugin = create_plugin_base(Page) 101 | 102 | 103 | class PageText(AbstractRichText, PagePlugin): 104 | pass 105 | -------------------------------------------------------------------------------- /tests/testapp/settings.py: -------------------------------------------------------------------------------- 1 | DATABASES = {"default": {"ENGINE": "django.db.backends.sqlite3", "NAME": ":memory:"}} 2 | DEFAULT_AUTO_FIELD = "django.db.models.AutoField" 3 | INSTALLED_APPS = ( 4 | "django.contrib.auth", 5 | "django.contrib.admin", 6 | "django.contrib.contenttypes", 7 | "django.contrib.messages", 8 | "django.contrib.sessions", 9 | "django.contrib.staticfiles", 10 | "testapp", 11 | "content_editor", 12 | ) 13 | STATIC_URL = "/static/" 14 | SECRET_KEY = "tests" 15 | ROOT_URLCONF = "testapp.urls" 16 | ALLOWED_HOSTS = ["*"] 17 | MIDDLEWARE_CLASSES = ( 18 | "django.middleware.common.CommonMiddleware", 19 | "django.contrib.sessions.middleware.SessionMiddleware", 20 | "django.middleware.csrf.CsrfViewMiddleware", 21 | "django.contrib.auth.middleware.AuthenticationMiddleware", 22 | "django.contrib.messages.middleware.MessageMiddleware", 23 | "django.middleware.locale.LocaleMiddleware", 24 | "django.contrib.auth.middleware.SessionAuthenticationMiddleware", 25 | ) 26 | MIDDLEWARE = ( 27 | "django.middleware.common.CommonMiddleware", 28 | "django.contrib.sessions.middleware.SessionMiddleware", 29 | "django.middleware.csrf.CsrfViewMiddleware", 30 | "django.contrib.auth.middleware.AuthenticationMiddleware", 31 | "django.contrib.messages.middleware.MessageMiddleware", 32 | "django.middleware.locale.LocaleMiddleware", 33 | ) 34 | USE_TZ = True 35 | LANGUAGES = (("en", "English"), ("de", "German")) 36 | TEMPLATES = [ 37 | { 38 | "BACKEND": "django.template.backends.django.DjangoTemplates", 39 | "DIRS": [], 40 | "APP_DIRS": True, 41 | "OPTIONS": { 42 | "context_processors": [ 43 | "django.template.context_processors.debug", 44 | "django.template.context_processors.request", 45 | "django.contrib.auth.context_processors.auth", 46 | "django.contrib.messages.context_processors.messages", 47 | ] 48 | }, 49 | } 50 | ] 51 | -------------------------------------------------------------------------------- /tests/testapp/templates/404.html: -------------------------------------------------------------------------------- 1 |

Page not found

2 | -------------------------------------------------------------------------------- /tests/testapp/templates/base.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {% block title %}base{% endblock %} 5 | 6 | 7 | {% block content %}{% endblock %} 8 | 9 | 10 | -------------------------------------------------------------------------------- /tests/testapp/templates/testapp/article_detail.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% block title %}{{ article }} - {{ block.super }}{% endblock %} 4 | 5 | {% block content %} 6 |

{{ article }}

7 | {{ article.pub_date }} 8 | 9 | {{ content.main }} 10 | 11 | {% endblock %} 12 | -------------------------------------------------------------------------------- /tests/testapp/templates/testapp/page_detail.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% block title %}{{ page }} - {{ block.super }}{% endblock %} 4 | 5 | {% block content %} 6 |

{{ page }}

7 | 8 |
{{ content.main }}
9 | 10 | 11 | {% endblock %} 12 | -------------------------------------------------------------------------------- /tests/testapp/test_content_editor.py: -------------------------------------------------------------------------------- 1 | import pytest 2 | from django.contrib import admin 3 | from django.contrib.auth.models import User 4 | from django.core import checks 5 | from django.core.exceptions import ImproperlyConfigured 6 | from django.db import connection, models 7 | from django.test.utils import CaptureQueriesContext, isolate_apps 8 | from django.urls import reverse 9 | from pytest_django.asserts import assertContains 10 | 11 | from content_editor.admin import ContentEditor, ContentEditorInline 12 | from content_editor.contents import Contents, contents_for_item 13 | from content_editor.models import Region 14 | from testapp.models import Article, Download, Page, PageText, RichText 15 | 16 | 17 | @pytest.fixture 18 | def user(): 19 | u = User.objects.create( 20 | username="test", is_active=True, is_staff=True, is_superuser=True 21 | ) 22 | u.set_password("test") 23 | u.save() 24 | return u 25 | 26 | 27 | @pytest.fixture 28 | def client(client, user): 29 | client.login(username="test", password="test") 30 | return client 31 | 32 | 33 | @pytest.mark.django_db 34 | def test_stuff(client): 35 | article = Article.objects.create(title="Test") 36 | richtext = article.testapp_richtext_set.create( 37 | text="

bla

", region="main", ordering=10 38 | ) 39 | article.testapp_download_set.create(file="bla.pdf", region="main", ordering=20) 40 | 41 | with CaptureQueriesContext(connection) as ctx: 42 | contents = contents_for_item(article, plugins=[RichText, Download]) 43 | assert len(ctx.captured_queries) == 2 # Two content types 44 | 45 | assert contents.main[0] == richtext 46 | assert contents.main[0].parent == article 47 | 48 | assert len(contents.main) == 2 49 | assert len(contents.sidebar) == 0 50 | assert len(contents.bla) == 0 # No AttributeError 51 | 52 | response = client.get(article.get_absolute_url()) 53 | assertContains(response, "

Test

") 54 | assertContains(response, "

bla

") 55 | 56 | # Test for Contents.__iter__ 57 | contents = contents_for_item(article, plugins=[RichText, Download]) 58 | assert not contents._sorted 59 | assert len(list(contents)) == 2 60 | assert contents._sorted 61 | assert len(list(contents)) == 2 62 | 63 | # Contents.__len__ also means that a Contents instance may be falsy 64 | assert len(contents) == 2 65 | assert contents 66 | assert not contents_for_item(article, []) 67 | 68 | # Regions may be limited 69 | contents = contents_for_item( 70 | article, 71 | plugins=[RichText, Download], 72 | regions=[Region(key="other", title="other")], 73 | ) 74 | assert list(contents) == [] 75 | 76 | 77 | @pytest.mark.django_db 78 | def test_admin(client): 79 | response = client.get(reverse("admin:testapp_article_add")) 80 | 81 | assertContains( 82 | response, '